]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/private/kdirectorycontentscounter.cpp
Merge branch 'KDE/4.12' into KDE/4.13
[dolphin.git] / src / kitemviews / private / kdirectorycontentscounter.cpp
index fd8479febc33f7a1f266d14481ae79df91b76735..65afb7c3e93e645f7020c37d9256b36909c255bd 100644 (file)
@@ -30,7 +30,6 @@ KDirectoryContentsCounter::KDirectoryContentsCounter(KFileItemModel* model, QObj
     QObject(parent),
     m_model(model),
     m_queue(),
-    m_workerThread(0),
     m_worker(0),
     m_workerIsBusy(false),
     m_dirWatcher(0),
@@ -39,25 +38,34 @@ KDirectoryContentsCounter::KDirectoryContentsCounter(KFileItemModel* model, QObj
     connect(m_model, SIGNAL(itemsRemoved(KItemRangeList)),
             this,    SLOT(slotItemsRemoved()));
 
-    m_workerThread = new QThread(this);
+    if (!m_workerThread) {
+        m_workerThread = new QThread();
+        m_workerThread->start();
+    }
+
     m_worker = new KDirectoryContentsCounterWorker();
     m_worker->moveToThread(m_workerThread);
+    ++m_workersCount;
 
     connect(this,     SIGNAL(requestDirectoryContentsCount(QString,KDirectoryContentsCounterWorker::Options)),
             m_worker, SLOT(countDirectoryContents(QString,KDirectoryContentsCounterWorker::Options)));
     connect(m_worker, SIGNAL(result(QString,int)),
             this,     SLOT(slotResult(QString,int)));
 
-    m_workerThread->start();
-
     m_dirWatcher = new KDirWatch(this);
     connect(m_dirWatcher, SIGNAL(dirty(QString)), this, SLOT(slotDirWatchDirty(QString)));
 }
 
 KDirectoryContentsCounter::~KDirectoryContentsCounter()
 {
-    m_workerThread->quit();
-    m_workerThread->wait();
+    --m_workersCount;
+
+    if (m_workersCount == 0) {
+        m_workerThread->quit();
+        m_workerThread->wait();
+        delete m_workerThread;
+        m_workerThread = 0;
+    }
 
     delete m_worker;
 }
@@ -162,3 +170,6 @@ void KDirectoryContentsCounter::startWorker(const QString& path)
         m_workerIsBusy = true;
     }
 }
+
+QThread* KDirectoryContentsCounter::m_workerThread = 0;
+int KDirectoryContentsCounter::m_workersCount = 0;
\ No newline at end of file