diff options
author | Timothy Pearson <[email protected]> | 2013-12-27 19:29:38 -0600 |
---|---|---|
committer | Timothy Pearson <[email protected]> | 2013-12-27 19:29:38 -0600 |
commit | b876907e650eaf996aa3c2bcfac9a526cf900c5b (patch) | |
tree | 513671ea3db58c11b28de8ee74f51ff35be6b9c8 /tdeioslave/media/medianotifier | |
parent | ee68bc1fd3d2e5edc1527bdfcacfb330b7670a86 (diff) | |
download | tdebase-b876907e650eaf996aa3c2bcfac9a526cf900c5b.tar.gz tdebase-b876907e650eaf996aa3c2bcfac9a526cf900c5b.zip |
Fix free space overlay not disappearing on unmount
Fix devices disappearing on unmount
Automatically close notification popup on associated media device removal
Diffstat (limited to 'tdeioslave/media/medianotifier')
4 files changed, 49 insertions, 9 deletions
diff --git a/tdeioslave/media/medianotifier/medianotifier.cpp b/tdeioslave/media/medianotifier/medianotifier.cpp index bb8948db8..2db917b25 100644 --- a/tdeioslave/media/medianotifier/medianotifier.cpp +++ b/tdeioslave/media/medianotifier/medianotifier.cpp @@ -51,10 +51,14 @@ MediaNotifier::MediaNotifier(const TQCString &name) : KDEDModule(name) connectDCOPSignal( "kded", "mediamanager", "mediumChanged(TQString, bool)", "onMediumChange(TQString, bool)", true ); - m_freeTimer = new TQTimer( this ); - connect( m_freeTimer, TQT_SIGNAL( timeout() ), TQT_SLOT( checkFreeDiskSpace() ) ); - m_freeTimer->start( 1000*6*2 /* 20 minutes */ ); - m_freeDialog = 0; + connectDCOPSignal( "kded", "mediamanager", "mediumRemoved(TQString, bool)", + "onMediumRemove(TQString, bool)", true ); + + m_notificationDialogList.setAutoDelete(FALSE); + m_freeTimer = new TQTimer( this ); + connect( m_freeTimer, TQT_SIGNAL( timeout() ), TQT_SLOT( checkFreeDiskSpace() ) ); + m_freeTimer->start( 1000*6*2 /* 20 minutes */ ); + m_freeDialog = 0; } MediaNotifier::~MediaNotifier() @@ -64,6 +68,24 @@ MediaNotifier::~MediaNotifier() disconnectDCOPSignal( "kded", "mediamanager", "mediumChanged(TQString, bool)", "onMediumChange(TQString, bool)" ); + + disconnectDCOPSignal( "kded", "mediamanager", "mediumRemoved(TQString, bool)", + "onMediumRemove(TQString, bool)" ); +} + +void MediaNotifier::onMediumRemove( const TQString &name, bool allowNotification ) +{ + kdDebug() << "MediaNotifier::onMediumRemove( " << name << ", " + << allowNotification << ")" << endl; + + KURL url( "system:/media/"+name ); + + NotificationDialog* dialog; + for (dialog = m_notificationDialogList.first(); dialog; dialog = m_notificationDialogList.next()) { + if (dialog->medium().url() == url) { + dialog->close(); + } + } } void MediaNotifier::onMediumChange( const TQString &name, bool allowNotification ) @@ -305,16 +327,16 @@ void MediaNotifier::notify( KFileItem &medium ) if ( settings->autoActionForMimetype( medium.mimetype() )==0L ) { - TQValueList<NotifierAction*> actions - = settings->actionsForMimetype( medium.mimetype() ); + TQValueList<NotifierAction*> actions = settings->actionsForMimetype( medium.mimetype() ); // If only one action remains, it's the "do nothing" action // no need to popup in this case. if ( actions.size()>1 ) { - NotificationDialog *dialog - = new NotificationDialog( medium, settings ); - dialog->show(); + NotificationDialog* notifier = new NotificationDialog( medium, settings ); + connect(notifier, TQT_SIGNAL(destroyed(TQObject*)), this, TQT_SLOT(notificationDialogDestroyed(TQObject*))); + m_notificationDialogList.append(notifier); + notifier->show(); } } else @@ -325,6 +347,11 @@ void MediaNotifier::notify( KFileItem &medium ) } } +void MediaNotifier::notificationDialogDestroyed(TQObject* object) +{ + m_notificationDialogList.remove(static_cast<NotificationDialog*>(object)); +} + extern "C" { KDE_EXPORT KDEDModule *create_medianotifier(const TQCString &name) diff --git a/tdeioslave/media/medianotifier/medianotifier.h b/tdeioslave/media/medianotifier/medianotifier.h index 3e30d12b1..84eee525c 100644 --- a/tdeioslave/media/medianotifier/medianotifier.h +++ b/tdeioslave/media/medianotifier/medianotifier.h @@ -29,6 +29,8 @@ #include <tqmap.h> class KDialogBase; +class NotificationDialog; +typedef TQPtrList<NotificationDialog> NotificationDialogList; class MediaNotifier: public KDEDModule { @@ -41,6 +43,7 @@ public: k_dcop: void onMediumChange( const TQString &name, bool allowNotification ); + void onMediumRemove( const TQString &name, bool allowNotification ); private slots: void slotStatResult( TDEIO::Job *job ); @@ -48,6 +51,7 @@ private slots: void slotFreeFinished( KMessageBox::ButtonCode ); void slotFreeContinue(); void slotFreeCancel(); + void notificationDialogDestroyed( TQObject* ); private: bool autostart( const KFileItem &medium ); @@ -61,6 +65,7 @@ private: TQMap<TDEIO::Job*,bool> m_allowNotificationMap; TQTimer * m_freeTimer; KDialogBase * m_freeDialog; + NotificationDialogList m_notificationDialogList; }; #endif diff --git a/tdeioslave/media/medianotifier/notificationdialog.cpp b/tdeioslave/media/medianotifier/notificationdialog.cpp index 981d48e6a..c9a920f99 100644 --- a/tdeioslave/media/medianotifier/notificationdialog.cpp +++ b/tdeioslave/media/medianotifier/notificationdialog.cpp @@ -28,6 +28,7 @@ #include <tqlabel.h> #include <tqcheckbox.h> #include <tqpushbutton.h> +#include <tdehardwaredevices.h> #include "actionlistboxitem.h" #include "notificationdialogview.h" @@ -86,6 +87,11 @@ NotificationDialog::~NotificationDialog() delete m_settings; } +KFileItem NotificationDialog::medium() +{ + return m_medium; +} + void NotificationDialog::updateActionsListBox() { m_view->actionsList->clear(); diff --git a/tdeioslave/media/medianotifier/notificationdialog.h b/tdeioslave/media/medianotifier/notificationdialog.h index d50baa492..16bedb842 100644 --- a/tdeioslave/media/medianotifier/notificationdialog.h +++ b/tdeioslave/media/medianotifier/notificationdialog.h @@ -38,6 +38,8 @@ public: TQWidget* parent = 0, const char* name = 0 ); ~NotificationDialog(); + KFileItem medium(); + private slots: void slotOk(); void slotConfigure(); |