diff --git a/src/plugins/qmlprojectmanager/fileformat/filefilteritems.cpp b/src/plugins/qmlprojectmanager/fileformat/filefilteritems.cpp index 7ccee302ce7ce9fa858a85c237703ff315847a5b..496d075703be27dd51dfdee9b855ab8dfc02db95 100644 --- a/src/plugins/qmlprojectmanager/fileformat/filefilteritems.cpp +++ b/src/plugins/qmlprojectmanager/fileformat/filefilteritems.cpp @@ -93,12 +93,12 @@ void FileFilterBaseItem::updateFileList() if (newFiles != m_files) { // update watched files - foreach (const QString &file, m_files - newFiles) { - m_fsWatcher.removePath(QDir(projectDir).absoluteFilePath(file)); - } - foreach (const QString &file, newFiles - m_files) { - m_fsWatcher.addPath(QDir(projectDir).absoluteFilePath(file)); - } + const QSet<QString> unwatchFiles = QSet<QString>(m_files - newFiles); + const QSet<QString> watchFiles = QSet<QString>(newFiles - m_files); + if (!unwatchFiles.isEmpty()) + m_fsWatcher.removePaths(unwatchFiles.toList()); + if (!watchFiles.isEmpty()) + m_fsWatcher.addPaths(QSet<QString>(newFiles - m_files).toList()); m_files = newFiles; @@ -106,13 +106,13 @@ void FileFilterBaseItem::updateFileList() } // update watched directories - QSet<QString> watchedDirectories = m_fsWatcher.directories().toSet(); - foreach (const QString &dir, watchedDirectories - dirsToBeWatched) { - m_fsWatcher.removePath(QDir(projectDir).absoluteFilePath(dir)); - } - foreach (const QString &dir, dirsToBeWatched - watchedDirectories) { - m_fsWatcher.addPath(QDir(projectDir).absoluteFilePath(dir)); - } + const QSet<QString> watchedDirectories = m_fsWatcher.directories().toSet(); + const QSet<QString> unwatchDirs = watchedDirectories - dirsToBeWatched; + const QSet<QString> watchDirs = dirsToBeWatched - watchedDirectories; + if (!unwatchDirs.isEmpty()) + m_fsWatcher.removePaths(unwatchDirs.toList()); + if (!watchDirs.isEmpty()) + m_fsWatcher.addPaths(watchDirs.toList()); } QSet<QString> FileFilterBaseItem::filesInSubTree(const QDir &rootDir, const QDir &dir, QSet<QString> *parsedDirs) @@ -124,7 +124,7 @@ QSet<QString> FileFilterBaseItem::filesInSubTree(const QDir &rootDir, const QDir foreach (const QFileInfo &file, dir.entryInfoList(QDir::Files)) { if (m_regex.exactMatch(file.fileName())) { - fileSet.insert(rootDir.relativeFilePath(file.absoluteFilePath())); + fileSet.insert(file.absoluteFilePath()); } } diff --git a/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.cpp b/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.cpp index 1308c1bbe5b604945221067841ef862858ecf5d3..3a4de7f6347f02353642bcc6a1b516d4b561987e 100644 --- a/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.cpp +++ b/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.cpp @@ -78,6 +78,7 @@ void QmlProjectItem::setSourceDirectory(const QString &directoryPath) emit sourceDirectoryChanged(); } +/* Returns list of absolute paths */ QStringList QmlProjectItem::qmlFiles() const { const Q_D(QmlProjectItem); diff --git a/tests/auto/qml/qmlprojectmanager/fileformat/tst_fileformat.cpp b/tests/auto/qml/qmlprojectmanager/fileformat/tst_fileformat.cpp index 18a90bf474116698a9e1de353300fd6bbd18462e..518475af1739f7d3dcced8fc82a0386cfff604f5 100644 --- a/tests/auto/qml/qmlprojectmanager/fileformat/tst_fileformat.cpp +++ b/tests/auto/qml/qmlprojectmanager/fileformat/tst_fileformat.cpp @@ -49,7 +49,8 @@ void TestProject::testQmlFileFilter() project->setSourceDirectory(testDataDir); - QStringList expectedFiles(QStringList() << "file1.qml" << "file2.qml"); + QStringList expectedFiles(QStringList() << testDataDir + "/file1.qml" + << testDataDir + "/file2.qml"); QCOMPARE(project->qmlFiles().toSet(), expectedFiles.toSet()); } @@ -75,7 +76,9 @@ void TestProject::testQmlFileFilter() project->setSourceDirectory(testDataDir); - QStringList expectedFiles(QStringList() << "file1.qml" << "file2.qml" << "subdir/file3.qml"); + QStringList expectedFiles(QStringList() << testDataDir + "/file1.qml" + << testDataDir + "/file2.qml" + << testDataDir + "/subdir/file3.qml"); QCOMPARE(project->qmlFiles().toSet(), expectedFiles.toSet()); } @@ -101,7 +104,7 @@ void TestProject::testQmlFileFilter() project->setSourceDirectory(testDataDir); - QStringList expectedFiles(QStringList() << "subdir/file3.qml"); + QStringList expectedFiles(QStringList() << testDataDir + "/subdir/file3.qml"); QCOMPARE(project->qmlFiles().toSet(), expectedFiles.toSet()); } @@ -130,7 +133,9 @@ void TestProject::testQmlFileFilter() project->setSourceDirectory(testDataDir); - QStringList expectedFiles(QStringList() << "file1.qml" << "file2.qml" << "subdir/file3.qml"); + QStringList expectedFiles(QStringList() << testDataDir + "/file1.qml" + << testDataDir + "/file2.qml" + << testDataDir + "/subdir/file3.qml"); QCOMPARE(project->qmlFiles().size(), 3); QCOMPARE(project->qmlFiles().toSet(), expectedFiles.toSet()); }