summaryrefslogtreecommitdiff
path: root/src/plugins/projectexplorer/filewatcher.cpp
diff options
context:
space:
mode:
authordt <qtc-committer@nokia.com>2009-07-07 15:26:56 +0200
committerdt <qtc-committer@nokia.com>2009-07-07 15:26:56 +0200
commite2a06db32e6c5bd02265021b9ad1da798f0b7d20 (patch)
tree80bf947839899acc6542844557af5995833b51a7 /src/plugins/projectexplorer/filewatcher.cpp
parent77959c8bc56e79e534dc1a61558c717f09439ee8 (diff)
downloadqt-creator-e2a06db32e6c5bd02265021b9ad1da798f0b7d20.tar.gz
Make FileWatcher more robust, fix a few bugs in that code.
Also cache a lastModified time, so that we don't emit a signal if it didn't change.
Diffstat (limited to 'src/plugins/projectexplorer/filewatcher.cpp')
-rw-r--r--src/plugins/projectexplorer/filewatcher.cpp48
1 files changed, 31 insertions, 17 deletions
diff --git a/src/plugins/projectexplorer/filewatcher.cpp b/src/plugins/projectexplorer/filewatcher.cpp
index 4a12840d88..76dcd45d09 100644
--- a/src/plugins/projectexplorer/filewatcher.cpp
+++ b/src/plugins/projectexplorer/filewatcher.cpp
@@ -55,8 +55,10 @@ FileWatcher::FileWatcher(QObject *parent) :
FileWatcher::~FileWatcher()
{
- foreach (const QString &file, m_files)
+ QStringList keys = m_files.keys();
+ foreach(const QString &file, keys)
removeFile(file);
+
if (--m_objectCount == 0) {
delete m_watcher;
m_watcher = 0;
@@ -65,29 +67,41 @@ FileWatcher::~FileWatcher()
void FileWatcher::slotFileChanged(const QString &file)
{
- if (m_files.contains(file))
- emit fileChanged(file);
-}
-
-QStringList FileWatcher::files()
-{
- return m_files;
+ if (m_files.contains(file)) {
+ QDateTime lastModified = QFileInfo(file).lastModified();
+ if (lastModified != m_files.value(file)) {
+ m_files[file] = lastModified;
+ qDebug() << "slotFileChanged" << file << lastModified;
+ emit fileChanged(file);
+ } else {
+ qDebug() << "WTF:" << file<<lastModified.toString();
+ }
+ }
}
void FileWatcher::addFile(const QString &file)
{
- if (m_files.contains(file))
- return;
- m_files += file;
- if (m_fileCount[file] == 0)
+ const int count = ++m_fileCount[file];
+ Q_ASSERT(count > 0);
+
+ m_files.insert(file, QDateTime());
+
+ if (count == 1)
m_watcher->addPath(file);
- m_fileCount[file] += 1;
}
void FileWatcher::removeFile(const QString &file)
{
- m_files.removeOne(file);
- m_fileCount[file] -= 1;
- if (m_fileCount[file] == 0)
- m_watcher->removePath(file);
+ if (!m_files.contains(file))
+ return;
+
+ const int count = --m_fileCount[file];
+ Q_ASSERT(count >= 0);
+
+ m_files.remove(file);
+
+ if (!count) {
+ m_watcher->removePath(file);
+ m_fileCount.remove(file);
+ }
}