From 973e9dcf9014a382d2b2ac89205edc08a6d5e18d Mon Sep 17 00:00:00 2001 From: Cristian Adam Date: Mon, 30 Oct 2023 14:54:25 +0100 Subject: [PATCH] CMakePM: Treat all sourceGroups as sourcesOrHeaders project nodes Previously only "Source Files" and "Header Files" were treated as sourceOrHeaders project nodes. But source_group can introduce a new source group which needs to be also treated as sourcesOrHeaders project node. Fixes: QTCREATORBUG-29799 Change-Id: I833d80155fba3fb0269aeab149ea74b0d2edd271 Reviewed-by: Alessandro Portale --- .../cmakeprojectmanager/fileapidataextractor.cpp | 2 +- src/plugins/cmakeprojectmanager/projecttreehelper.cpp | 11 ++++++----- src/plugins/cmakeprojectmanager/projecttreehelper.h | 6 ++++-- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp b/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp index 8b44f4427f6..b5b692da080 100644 --- a/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp +++ b/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp @@ -594,7 +594,7 @@ static FolderNode *createSourceGroupNode(const QString &sourceGroupName, FolderNode *existingNode = currentNode->findChildFolderNode( [&p](const FolderNode *fn) { return fn->displayName() == p; }); if (!existingNode) { - auto node = createCMakeVFolder(sourceDirectory, Node::DefaultFolderPriority + 5, p); + auto node = createCMakeVFolder(sourceDirectory, Node::DefaultFolderPriority + 5, p, true); node->setListInProject(false); node->setIcon([] { return Icon::fromTheme("edit-copy"); }); diff --git a/src/plugins/cmakeprojectmanager/projecttreehelper.cpp b/src/plugins/cmakeprojectmanager/projecttreehelper.cpp index 7b9efb07b94..d8dcbde1322 100644 --- a/src/plugins/cmakeprojectmanager/projecttreehelper.cpp +++ b/src/plugins/cmakeprojectmanager/projecttreehelper.cpp @@ -19,13 +19,13 @@ namespace CMakeProjectManager::Internal { std::unique_ptr createCMakeVFolder(const Utils::FilePath &basePath, int priority, - const QString &displayName) + const QString &displayName, + bool sourcesOrHeaders) { auto newFolder = std::make_unique(basePath); newFolder->setPriority(priority); newFolder->setDisplayName(displayName); - newFolder->setIsSourcesOrHeaders(displayName == "Source Files" - || displayName == "Header Files"); + newFolder->setIsSourcesOrHeaders(sourcesOrHeaders); return newFolder; } @@ -33,13 +33,14 @@ void addCMakeVFolder(FolderNode *base, const Utils::FilePath &basePath, int priority, const QString &displayName, - std::vector> &&files) + std::vector> &&files, + bool sourcesOrHeaders) { if (files.size() == 0) return; FolderNode *folder = base; if (!displayName.isEmpty()) { - auto newFolder = createCMakeVFolder(basePath, priority, displayName); + auto newFolder = createCMakeVFolder(basePath, priority, displayName, sourcesOrHeaders); folder = newFolder.get(); base->addNode(std::move(newFolder)); } diff --git a/src/plugins/cmakeprojectmanager/projecttreehelper.h b/src/plugins/cmakeprojectmanager/projecttreehelper.h index 34a8723759f..aa655492d4a 100644 --- a/src/plugins/cmakeprojectmanager/projecttreehelper.h +++ b/src/plugins/cmakeprojectmanager/projecttreehelper.h @@ -11,13 +11,15 @@ namespace CMakeProjectManager::Internal { std::unique_ptr createCMakeVFolder(const Utils::FilePath &basePath, int priority, - const QString &displayName); + const QString &displayName, + bool sourcesOrHeaders); void addCMakeVFolder(ProjectExplorer::FolderNode *base, const Utils::FilePath &basePath, int priority, const QString &displayName, - std::vector> &&files); + std::vector> &&files, + bool sourcesOrHeaders = false); std::vector> &&removeKnownNodes( const QSet &knownFiles,