diff --git a/src/plugins/cmakeprojectmanager/projecttreehelper.cpp b/src/plugins/cmakeprojectmanager/projecttreehelper.cpp index a97856fe89f..1c455519c08 100644 --- a/src/plugins/cmakeprojectmanager/projecttreehelper.cpp +++ b/src/plugins/cmakeprojectmanager/projecttreehelper.cpp @@ -215,6 +215,7 @@ void addFileSystemNodes(ProjectNode *root, const QList &allFil static QIcon fileSystemNodeIcon = Core::FileIconProvider::directoryIcon( ProjectExplorer::Constants::FILEOVERLAY_UNKNOWN); auto fileSystemNode = std::make_unique(root->filePath()); + // just before special nodes like "CMake Modules" fileSystemNode->setPriority(Node::DefaultPriority - 6); fileSystemNode->setDisplayName( QCoreApplication::translate("CMakeProjectManager::Internal::ProjectTreeHelper", @@ -230,8 +231,11 @@ void addFileSystemNodes(ProjectNode *root, const QList &allFil fileSystemNode->addNestedNode(std::move(node)); } - if (!fileSystemNode->isEmpty()) + if (!fileSystemNode->isEmpty()) { + // make file system nodes less probable to be selected when syncing with the current document + fileSystemNode->forEachGenericNode([](Node *n) { n->setPriority(n->priority() + 10); }); root->addNode(std::move(fileSystemNode)); + } } } // namespace Internal diff --git a/src/plugins/projectexplorer/projecttreewidget.cpp b/src/plugins/projectexplorer/projecttreewidget.cpp index 08b270d7f2d..96ff5006ee2 100644 --- a/src/plugins/projectexplorer/projecttreewidget.cpp +++ b/src/plugins/projectexplorer/projecttreewidget.cpp @@ -358,29 +358,15 @@ Node *ProjectTreeWidget::nodeForFile(const FilePath &fileName) Node *bestNode = nullptr; int bestNodeExpandCount = INT_MAX; - // FIXME: Check that the values used make sense in the context. - auto priority = [](Node *node) { - if (node->asFileNode()) - return 1; - if (node->isFolderNodeType()) - return 2; - if (node->isVirtualFolderType()) - return 3; - if (node->isProjectNodeType()) - return 4; - QTC_CHECK(false); - return 1; - }; - // FIXME: Looks like this could be done with less cycles. for (Project *project : SessionManager::projects()) { if (ProjectNode *projectNode = project->rootProjectNode()) { projectNode->forEachGenericNode([&](Node *node) { if (node->filePath() == fileName) { - if (!bestNode || priority(node) < priority(bestNode)) { + if (!bestNode || node->priority() < bestNode->priority()) { bestNode = node; bestNodeExpandCount = ProjectTreeWidget::expandedCount(node); - } else if (priority(node) == priority(bestNode)) { + } else if (node->priority() == bestNode->priority()) { int nodeExpandCount = ProjectTreeWidget::expandedCount(node); if (nodeExpandCount < bestNodeExpandCount) { bestNode = node;