From 4a1f15dbb8d8c27795bccec8e5d55ae2bdc1345c Mon Sep 17 00:00:00 2001
From: dt <qtc-committer@nokia.com>
Date: Wed, 13 Oct 2010 15:33:51 +0200
Subject: [PATCH] Qt4ProjectManager: Compress the folderChanged via a small
 timer

Reviewed-By: hunger
---
 src/plugins/qt4projectmanager/qt4project.cpp | 18 +++++++++++++++++-
 src/plugins/qt4projectmanager/qt4project.h   |  4 ++++
 2 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp
index aa5f93474ac..af546f26ba1 100644
--- a/src/plugins/qt4projectmanager/qt4project.cpp
+++ b/src/plugins/qt4projectmanager/qt4project.cpp
@@ -1132,6 +1132,10 @@ namespace {
 
 CentralizedFolderWatcher::CentralizedFolderWatcher()
 {
+    m_compressTimer.setSingleShot(true);
+    m_compressTimer.setInterval(200);
+    connect(&m_compressTimer, SIGNAL(timeout()),
+            this, SLOT(onTimer()));
     connect (&m_watcher, SIGNAL(directoryChanged(QString)),
              this, SLOT(folderChanged(QString)));
 }
@@ -1225,8 +1229,20 @@ void CentralizedFolderWatcher::unwatchFolders(const QList<QString> &folders, Qt4
     }
 }
 
-
 void CentralizedFolderWatcher::folderChanged(const QString &folder)
+{
+    m_changedFolders.insert(folder);
+    m_compressTimer.start();
+}
+
+void CentralizedFolderWatcher::onTimer()
+{
+    foreach(const QString &folder, m_changedFolders)
+        delayedFolderChanged(folder);
+    m_changedFolders.clear();
+}
+
+void CentralizedFolderWatcher::delayedFolderChanged(const QString &folder)
 {
     if (debugCFW)
         qDebug()<<"CFW::folderChanged"<<folder;
diff --git a/src/plugins/qt4projectmanager/qt4project.h b/src/plugins/qt4projectmanager/qt4project.h
index 7141fbb8140..6b2f7b21c6b 100644
--- a/src/plugins/qt4projectmanager/qt4project.h
+++ b/src/plugins/qt4projectmanager/qt4project.h
@@ -122,6 +122,8 @@ public:
 
 private slots:
     void folderChanged(const QString &folder);
+    void onTimer();
+    void delayedFolderChanged(const QString &folder);
 
 private:
     QSet<QString> recursiveDirs(const QString &folder);
@@ -129,6 +131,8 @@ private:
     QMultiMap<QString, Qt4PriFileNode *> m_map;
 
     QSet<QString> m_recursiveWatchedFolders;
+    QTimer m_compressTimer;
+    QSet<QString> m_changedFolders;
 };
 
 }
-- 
GitLab