]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/versioncontrol/versioncontrolobserver.cpp
Rename Dolphin View's nameColumnRect member to visualRect.
[dolphin.git] / src / versioncontrol / versioncontrolobserver.cpp
index aea60b28d86a3021233af190ff31160fc4652a98..a5e509055e591be533435f33558b61f8827af73d 100644 (file)
@@ -75,9 +75,16 @@ VersionControlObserver::~VersionControlObserver()
     if (m_updateItemStatesThread != 0) {
         disconnect(m_updateItemStatesThread, SIGNAL(finished()),
                    this, SLOT(applyUpdatedItemStates()));
-        m_updateItemStatesThread->deleteWhenFinished();
+        if (m_updateItemStatesThread->isFinished()) {
+            delete m_updateItemStatesThread;
+        } else {
+            m_updateItemStatesThread->deleteWhenFinished();
+        }
         m_updateItemStatesThread = 0;
     }
+
+    m_plugin->disconnect();
+    m_plugin = 0;
 }
 
 QList<QAction*> VersionControlObserver::contextMenuActions(const KFileItemList& items) const
@@ -171,6 +178,12 @@ void VersionControlObserver::verifyDirectory()
 
 void VersionControlObserver::applyUpdatedItemStates()
 {
+    if (m_plugin == 0) {
+        // The signal finished() has been emitted, but the thread has been marked
+        // as invalid in the meantime. Just ignore the signal in this case.
+        return;
+    }
+
     if (!m_updateItemStatesThread->retrievedItems()) {
         // ignore m_silentUpdate for an error message
         emit errorMessage(i18nc("@info:status", "Update of version information failed."));
@@ -211,7 +224,7 @@ void VersionControlObserver::updateItemStates()
 {
     Q_ASSERT(m_plugin != 0);
     if (m_updateItemStatesThread == 0) {
-        m_updateItemStatesThread = new UpdateItemStatesThread(this);
+        m_updateItemStatesThread = new UpdateItemStatesThread();
         connect(m_updateItemStatesThread, SIGNAL(finished()),
                 this, SLOT(applyUpdatedItemStates()));
     }