aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp33
-rw-r--r--src/plugins/qmakeprojectmanager/qmakeparsernodes.h1
2 files changed, 24 insertions, 10 deletions
diff --git a/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp b/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp
index 671cd5bfec..7b050a5ed6 100644
--- a/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp
+++ b/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp
@@ -1623,25 +1623,38 @@ void QmakeProFile::applyEvaluate(QmakeEvalResult *evalResult)
m_wildcardWatcher = std::make_unique<Utils::FileSystemWatcher>();
QObject::connect(
m_wildcardWatcher.get(), &Utils::FileSystemWatcher::directoryChanged,
- [this]() {
- scheduleUpdate();
+ [this](QString path) {
+ QStringList directoryContents = QDir(path).entryList();
+ if (m_wildcardDirectoryContents.value(path) != directoryContents) {
+ m_wildcardDirectoryContents.insert(path, directoryContents);
+ scheduleUpdate();
+ }
});
}
- m_wildcardWatcher->addDirectories(
- Utils::filtered<QStringList>(result->directoriesWithWildcards.toList(),
- [this](const QString &path) {
- return !m_wildcardWatcher->watchesDirectory(path);
- }), Utils::FileSystemWatcher::WatchModifiedDate);
+ const QStringList directoriesToAdd = Utils::filtered<QStringList>(
+ result->directoriesWithWildcards.toList(),
+ [this](const QString &path) {
+ return !m_wildcardWatcher->watchesDirectory(path);
+ });
+ for (QString path : directoriesToAdd)
+ m_wildcardDirectoryContents.insert(path, QDir(path).entryList());
+ m_wildcardWatcher->addDirectories(directoriesToAdd,
+ Utils::FileSystemWatcher::WatchModifiedDate);
}
if (m_wildcardWatcher) {
if (result->directoriesWithWildcards.isEmpty()) {
m_wildcardWatcher.reset();
+ m_wildcardDirectoryContents.clear();
} else {
- m_wildcardWatcher->removeDirectories(
- Utils::filtered<QStringList>(m_wildcardWatcher->directories(),
+ const QStringList directoriesToRemove =
+ Utils::filtered<QStringList>(
+ m_wildcardWatcher->directories(),
[&result](const QString &path) {
return !result->directoriesWithWildcards.contains(path);
- }));
+ });
+ m_wildcardWatcher->removeDirectories(directoriesToRemove);
+ for (QString path : directoriesToRemove)
+ m_wildcardDirectoryContents.remove(path);
}
}
diff --git a/src/plugins/qmakeprojectmanager/qmakeparsernodes.h b/src/plugins/qmakeprojectmanager/qmakeparsernodes.h
index 6f0e13a5c9..68b406fe63 100644
--- a/src/plugins/qmakeprojectmanager/qmakeparsernodes.h
+++ b/src/plugins/qmakeprojectmanager/qmakeparsernodes.h
@@ -370,6 +370,7 @@ private:
InstallsList m_installsList;
std::unique_ptr<Utils::FileSystemWatcher> m_wildcardWatcher;
+ QMap<QString, QStringList> m_wildcardDirectoryContents;
// Async stuff
QFutureWatcher<Internal::QmakeEvalResult *> m_parseFutureWatcher;