aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKai Koehne <kai.koehne@nokia.com>2010-11-22 14:57:14 +0100
committerKai Koehne <kai.koehne@nokia.com>2010-11-22 15:28:38 +0100
commita0dc497935cff83bf0c3d2594d844823a9fe6d5b (patch)
treec1b57cd06d219a4a23034789b624977acd581eb0
parente94990f15e58fe034e47e82a8f914effd94598a8 (diff)
QmlProject: Fix creator becoming unresponsive if filesystem changes
Buffer update calls to the project tree. Otherwise large updates (e.g. renaming a directory) will block QtCreator for up to several minutes. Reviewed-by: ckamm
-rw-r--r--src/plugins/qmlprojectmanager/fileformat/filefilteritems.cpp14
-rw-r--r--src/plugins/qmlprojectmanager/fileformat/filefilteritems.h3
2 files changed, 16 insertions, 1 deletions
diff --git a/src/plugins/qmlprojectmanager/fileformat/filefilteritems.cpp b/src/plugins/qmlprojectmanager/fileformat/filefilteritems.cpp
index d78a3ebac93..85bcff190d5 100644
--- a/src/plugins/qmlprojectmanager/fileformat/filefilteritems.cpp
+++ b/src/plugins/qmlprojectmanager/fileformat/filefilteritems.cpp
@@ -8,7 +8,10 @@ FileFilterBaseItem::FileFilterBaseItem(QObject *parent) :
QmlProjectContentItem(parent),
m_recurse(RecurseDefault)
{
+ m_updateFileListTimer.setSingleShot(true);
+ m_updateFileListTimer.setInterval(50);
connect(&m_dirWatcher, SIGNAL(directoryChanged(QString)), this, SLOT(updateFileList()));
+ connect(&m_updateFileListTimer, SIGNAL(timeout()), this, SLOT(updateFileListNow()));
}
QString FileFilterBaseItem::directory() const
@@ -32,7 +35,7 @@ void FileFilterBaseItem::setDefaultDirectory(const QString &dirPath)
return;
m_defaultDir = dirPath;
- updateFileList();
+ updateFileListNow();
}
QString FileFilterBaseItem::filter() const
@@ -155,6 +158,15 @@ QString FileFilterBaseItem::absoluteDir() const
void FileFilterBaseItem::updateFileList()
{
+ if (!m_updateFileListTimer.isActive())
+ m_updateFileListTimer.start();
+}
+
+void FileFilterBaseItem::updateFileListNow()
+{
+ if (m_updateFileListTimer.isActive())
+ m_updateFileListTimer.stop();
+
const QString projectDir = absoluteDir();
if (projectDir.isEmpty())
return;
diff --git a/src/plugins/qmlprojectmanager/fileformat/filefilteritems.h b/src/plugins/qmlprojectmanager/fileformat/filefilteritems.h
index ec27e1cd264..42a244e5d41 100644
--- a/src/plugins/qmlprojectmanager/fileformat/filefilteritems.h
+++ b/src/plugins/qmlprojectmanager/fileformat/filefilteritems.h
@@ -6,6 +6,7 @@
#include <QSet>
#include <qdeclarative.h>
#include <QFileSystemWatcher>
+#include <QTimer>
#include "qmlprojectitem.h"
#include "filesystemwatcher.h"
@@ -49,6 +50,7 @@ signals:
private slots:
void updateFileList();
+ void updateFileListNow();
private:
QString absolutePath(const QString &path) const;
@@ -74,6 +76,7 @@ private:
QSet<QString> m_files;
FileSystemWatcher m_dirWatcher;
+ QTimer m_updateFileListTimer;
friend class ProjectItem;