]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Fixed issues when several LoadItemStatesThreads access one plugin or when the Version...
authorPeter Penz <peter.penz19@gmail.com>
Fri, 6 Nov 2009 16:27:19 +0000 (16:27 +0000)
committerPeter Penz <peter.penz19@gmail.com>
Fri, 6 Nov 2009 16:27:19 +0000 (16:27 +0000)
svn path=/trunk/KDE/kdebase/apps/; revision=1045694

src/dolphincolumnview.cpp
src/versioncontrol/updateitemstatesthread.cpp
src/versioncontrol/updateitemstatesthread.h
src/versioncontrol/versioncontrolobserver.cpp

index d1f7e9d642984a3071761180ec9b341f162f8d2c..b58fd8e1b86c3849f2a03015dd0b7272f41ad70b 100644 (file)
@@ -31,7 +31,6 @@
 #include "draganddrophelper.h"
 #include "folderexpander.h"
 #include "tooltips/tooltipmanager.h"
 #include "draganddrophelper.h"
 #include "folderexpander.h"
 #include "tooltips/tooltipmanager.h"
-#include "versioncontrol/versioncontrolobserver.h"
 #include "viewextensionsfactory.h"
 #include "zoomlevelinfo.h"
 
 #include "viewextensionsfactory.h"
 #include "zoomlevelinfo.h"
 
@@ -126,13 +125,6 @@ DolphinColumnView::DolphinColumnView(QWidget* parent,
     connect(KGlobalSettings::self(), SIGNAL(kdisplayFontChanged()),
             this, SLOT(updateFont()));
 
     connect(KGlobalSettings::self(), SIGNAL(kdisplayFontChanged()),
             this, SLOT(updateFont()));
 
-    /*FolderExpander* folderExpander = new FolderExpander(this, m_proxyModel);
-    folderExpander->setEnabled(DolphinSettings::instance().generalSettings()->autoExpandFolders());
-    connect (folderExpander, SIGNAL(enterDir(const QModelIndex&)),
-             m_container->m_controller, SLOT(triggerItem(const QModelIndex&)));
-
-    new VersionControlObserver(this);*/
-
     DolphinController* controller = m_container->m_controller;
     connect(controller, SIGNAL(zoomLevelChanged(int)),
             this, SLOT(setZoomLevel(int)));
     DolphinController* controller = m_container->m_controller;
     connect(controller, SIGNAL(zoomLevelChanged(int)),
             this, SLOT(setZoomLevel(int)));
index 7483e056e9b5db52f90dd3fc2a4550ef331f4001..3ac74a11b7ce5d3605b8e772f1d9a11351da0ebe 100644 (file)
 
 #include "updateitemstatesthread.h"
 
 
 #include "updateitemstatesthread.h"
 
-UpdateItemStatesThread::UpdateItemStatesThread(QObject* parent) :
-    QThread(parent),
+UpdateItemStatesThread::UpdateItemStatesThread() :
+    QThread(),
     m_retrievedItems(false),  
     m_retrievedItems(false),  
-    m_mutex(QMutex::Recursive),
+    m_mutex(0),
     m_itemStates()
 {
     m_itemStates()
 {
+    static QMutex globalMutex;
+    m_mutex = &globalMutex;
 }
 
 UpdateItemStatesThread::~UpdateItemStatesThread()
 }
 
 UpdateItemStatesThread::~UpdateItemStatesThread()
@@ -49,7 +51,7 @@ void UpdateItemStatesThread::run()
     // VersionControlObserver::addDirectory() to be sure that the last item contains the root.
     const QString directory = m_itemStates.last().item.url().directory(KUrl::AppendTrailingSlash);
 
     // VersionControlObserver::addDirectory() to be sure that the last item contains the root.
     const QString directory = m_itemStates.last().item.url().directory(KUrl::AppendTrailingSlash);
 
-    QMutexLocker locker(&m_mutex);
+    QMutexLocker locker(m_mutex);
     m_retrievedItems = false;
     if (m_plugin->beginRetrieval(directory)) {
         const int count = m_itemStates.count();
     m_retrievedItems = false;
     if (m_plugin->beginRetrieval(directory)) {
         const int count = m_itemStates.count();
@@ -63,12 +65,12 @@ void UpdateItemStatesThread::run()
 
 bool UpdateItemStatesThread::beginReadItemStates()
 {
 
 bool UpdateItemStatesThread::beginReadItemStates()
 {
-    return m_mutex.tryLock(300);
+    return m_mutex->tryLock(300);
 }
 
 void UpdateItemStatesThread::endReadItemStates()
 {
 }
 
 void UpdateItemStatesThread::endReadItemStates()
 {
-    m_mutex.unlock();
+    m_mutex->unlock();
 }
 
 QList<VersionControlObserver::ItemState> UpdateItemStatesThread::itemStates() const
 }
 
 QList<VersionControlObserver::ItemState> UpdateItemStatesThread::itemStates() const
index 36768d0e9b78ceb1fae3f25abe6c19945517739f..bee5c02c0d10019300d9359335634b3d95c5b364 100644 (file)
@@ -38,7 +38,7 @@ class LIBDOLPHINPRIVATE_EXPORT UpdateItemStatesThread : public QThread
     Q_OBJECT
 
 public:
     Q_OBJECT
 
 public:
-    UpdateItemStatesThread(QObject* parent);
+    UpdateItemStatesThread();
     virtual ~UpdateItemStatesThread();
 
     void setData(KVersionControlPlugin* plugin,
     virtual ~UpdateItemStatesThread();
 
     void setData(KVersionControlPlugin* plugin,
@@ -61,7 +61,7 @@ private slots:
 private:
     bool m_retrievedItems;
     KVersionControlPlugin* m_plugin;
 private:
     bool m_retrievedItems;
     KVersionControlPlugin* m_plugin;
-    QMutex m_mutex;
+    QMutex* m_mutex;
     QList<VersionControlObserver::ItemState> m_itemStates;
 };
 
     QList<VersionControlObserver::ItemState> m_itemStates;
 };
 
index aea60b28d86a3021233af190ff31160fc4652a98..9e52d1f5126c24f9be16be020d3c5fefd5d34086 100644 (file)
@@ -75,9 +75,16 @@ VersionControlObserver::~VersionControlObserver()
     if (m_updateItemStatesThread != 0) {
         disconnect(m_updateItemStatesThread, SIGNAL(finished()),
                    this, SLOT(applyUpdatedItemStates()));
     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_updateItemStatesThread = 0;
     }
+
+    m_plugin->disconnect();
+    m_plugin = 0;
 }
 
 QList<QAction*> VersionControlObserver::contextMenuActions(const KFileItemList& items) const
 }
 
 QList<QAction*> VersionControlObserver::contextMenuActions(const KFileItemList& items) const
@@ -211,7 +218,7 @@ void VersionControlObserver::updateItemStates()
 {
     Q_ASSERT(m_plugin != 0);
     if (m_updateItemStatesThread == 0) {
 {
     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()));
     }
         connect(m_updateItemStatesThread, SIGNAL(finished()),
                 this, SLOT(applyUpdatedItemStates()));
     }