diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp index aa5f93474ac1e9a6b3a947f31f538b6e62a7915e..af546f26ba1c1c98bde17f14e1970ee0180de9c5 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 7141fbb81407c0d6a186bb5871f3904883b072dc..6b2f7b21c6b476a2c954249acf334c6597aef4e6 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; }; }