diff options
author | dt <qtc-committer@nokia.com> | 2009-07-07 15:26:56 +0200 |
---|---|---|
committer | dt <qtc-committer@nokia.com> | 2009-07-07 15:26:56 +0200 |
commit | e2a06db32e6c5bd02265021b9ad1da798f0b7d20 (patch) | |
tree | 80bf947839899acc6542844557af5995833b51a7 /src/plugins/projectexplorer/filewatcher.cpp | |
parent | 77959c8bc56e79e534dc1a61558c717f09439ee8 (diff) | |
download | qt-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.cpp | 48 |
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); + } } |