diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectnodes.cpp b/src/plugins/cmakeprojectmanager/cmakeprojectnodes.cpp index 616eb58bbd8..1770c59dc43 100644 --- a/src/plugins/cmakeprojectmanager/cmakeprojectnodes.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeprojectnodes.cpp @@ -173,6 +173,7 @@ CMakeTargetNode::CMakeTargetNode(const Utils::FileName &directory, const QString setPriority(Node::DefaultProjectPriority + 900); setIcon(QIcon(":/projectexplorer/images/build.png")); // TODO: Use proper icon! setListInProject(false); + setIsProduct(); } QString CMakeTargetNode::generateId(const Utils::FileName &directory, const QString &target) diff --git a/src/plugins/designer/resourcehandler.cpp b/src/plugins/designer/resourcehandler.cpp index c8a5003c8b6..73064f62bf0 100644 --- a/src/plugins/designer/resourcehandler.cpp +++ b/src/plugins/designer/resourcehandler.cpp @@ -104,17 +104,14 @@ void ResourceHandler::updateResourcesHelper(bool updateProjectResources) return n->filePath().toString() == fileName; }); if (fileNode) { - // Slightly hacky: - // The node types do not tell us whether we are dealing with a proper "product", - // e.g. a qbs product or qmake .pro file. We do *not* want qbs groups - // or qmake .pri files here, as they contain only a subset of the relevant - // files. Luckily, the "show in simplified tree" property appears to match - // exactly what we want here. + // We do not want qbs groups or qmake .pri files here, as they contain only a subset + // of the relevant files. do projectNode = fileNode->parentProjectNode(); - while (projectNode && !projectNode->showInSimpleTree()); + while (projectNode && !projectNode->isProduct()); } - QTC_ASSERT(projectNode, projectNode = project->rootProjectNode()); + if (!projectNode) + projectNode = project->rootProjectNode(); QStringList projectQrcFiles; projectNode->forEachNode([&](FileNode *node) { diff --git a/src/plugins/projectexplorer/projectnodes.h b/src/plugins/projectexplorer/projectnodes.h index a63b3a37404..b8bd5c30424 100644 --- a/src/plugins/projectexplorer/projectnodes.h +++ b/src/plugins/projectexplorer/projectnodes.h @@ -357,8 +357,15 @@ public: virtual QVariant data(Core::Id role) const; virtual bool setData(Core::Id role, const QVariant &value) const; + bool isProduct() const { return m_isProduct; } + protected: + void setIsProduct() { m_isProduct = true; } + QString m_target; + +private: + bool m_isProduct = false; }; class PROJECTEXPLORER_EXPORT ContainerNode : public FolderNode diff --git a/src/plugins/qbsprojectmanager/qbsnodes.cpp b/src/plugins/qbsprojectmanager/qbsnodes.cpp index a0c25b61822..539f4ae828a 100644 --- a/src/plugins/qbsprojectmanager/qbsnodes.cpp +++ b/src/plugins/qbsprojectmanager/qbsnodes.cpp @@ -329,6 +329,7 @@ QbsProductNode::QbsProductNode(const qbs::ProductData &prd) : { static QIcon productIcon = Core::FileIconProvider::directoryIcon(Constants::QBS_PRODUCT_OVERLAY_ICON); setIcon(productIcon); + setIsProduct(); } bool QbsProductNode::supportsAction(ProjectAction action, const Node *node) const diff --git a/src/plugins/qmakeprojectmanager/qmakenodes.cpp b/src/plugins/qmakeprojectmanager/qmakenodes.cpp index 957c76e8109..827985b62fe 100644 --- a/src/plugins/qmakeprojectmanager/qmakenodes.cpp +++ b/src/plugins/qmakeprojectmanager/qmakenodes.cpp @@ -229,7 +229,9 @@ FolderNode::AddNewInformation QmakePriFileNode::addNewInformation(const QStringL */ QmakeProFileNode::QmakeProFileNode(QmakeProject *project, const FileName &filePath, QmakeProFile *pf) : QmakePriFileNode(project, this, filePath, pf) -{ } +{ + setIsProduct(); +} bool QmakeProFileNode::showInSimpleTree() const {