diff options
author | Eike Ziller <eike.ziller@qt.io> | 2019-10-02 07:32:57 +0200 |
---|---|---|
committer | Eike Ziller <eike.ziller@qt.io> | 2019-10-02 07:32:57 +0200 |
commit | ac014e38759286725d671c0f0f8bef02bb0c8b9b (patch) | |
tree | 766d62e3b2a0926ec9ae0789567b00bfcb00e98f /src/plugins/designer | |
parent | 93e725c17cda7ee3b9218a6da9f704464e917711 (diff) | |
parent | 312ff692b02d6b19f39303591c7dc0156bf46661 (diff) |
Merge remote-tracking branch 'origin/4.10' into 4.11
Conflicts:
src/plugins/projectexplorer/projectnodes.h
Change-Id: I10a749cca38c2d0929cf4d2b74ab089e14b6157b
Diffstat (limited to 'src/plugins/designer')
-rw-r--r-- | src/plugins/designer/resourcehandler.cpp | 33 |
1 files changed, 22 insertions, 11 deletions
diff --git a/src/plugins/designer/resourcehandler.cpp b/src/plugins/designer/resourcehandler.cpp index a86bf217927..392b632a8f8 100644 --- a/src/plugins/designer/resourcehandler.cpp +++ b/src/plugins/designer/resourcehandler.cpp @@ -103,26 +103,37 @@ void ResourceHandler::updateResourcesHelper(bool updateProjectResources) // Find the (sub-)project the file belongs to. We don't want to find resources // from other parts of the project tree, e.g. via a qmake subdirs project. - ProjectNode *projectNode = project->rootProjectNode(); - Node * const fileNode = projectNode->findNode([&fileName](const Node *n) { + Node * const fileNode = project->rootProjectNode()->findNode([&fileName](const Node *n) { return n->filePath().toString() == fileName; }); + ProjectNode *projectNodeForUiFile = nullptr; if (fileNode) { // We do not want qbs groups or qmake .pri files here, as they contain only a subset // of the relevant files. - projectNode = fileNode->parentProjectNode(); - while (projectNode && !projectNode->isProduct()) - projectNode = projectNode->parentProjectNode(); + projectNodeForUiFile = fileNode->parentProjectNode(); + while (projectNodeForUiFile && !projectNodeForUiFile->isProduct()) + projectNodeForUiFile = projectNodeForUiFile->parentProjectNode(); } - if (!projectNode) - projectNode = project->rootProjectNode(); + if (!projectNodeForUiFile) + projectNodeForUiFile = project->rootProjectNode(); + + const auto useQrcFile = [projectNodeForUiFile, project](const Node *qrcNode) { + if (projectNodeForUiFile == project->rootProjectNode()) + return true; + ProjectNode *projectNodeForQrcFile = qrcNode->parentProjectNode(); + while (projectNodeForQrcFile && !projectNodeForQrcFile->isProduct()) + projectNodeForQrcFile = projectNodeForQrcFile->parentProjectNode(); + return !projectNodeForQrcFile + || projectNodeForQrcFile == projectNodeForUiFile + || projectNodeForQrcFile->productType() != ProductType::App; + }; QStringList projectQrcFiles; - projectNode->forEachNode([&](FileNode *node) { - if (node->fileType() == FileType::Resource) + project->rootProjectNode()->forEachNode([&](FileNode *node) { + if (node->fileType() == FileType::Resource && useQrcFile(node)) projectQrcFiles.append(node->filePath().toString()); }, [&](FolderNode *node) { - if (dynamic_cast<ResourceEditor::ResourceTopLevelNode *>(node)) + if (dynamic_cast<ResourceEditor::ResourceTopLevelNode *>(node) && useQrcFile(node)) projectQrcFiles.append(node->filePath().toString()); }); // Check if the user has chosen to update the lacking resource inside designer @@ -134,7 +145,7 @@ void ResourceHandler::updateResourcesHelper(bool updateProjectResources) } if (!qrcPathsToBeAdded.isEmpty()) { m_handlingResources = true; - projectNode->addFiles(qrcPathsToBeAdded); + projectNodeForUiFile->addFiles(qrcPathsToBeAdded); m_handlingResources = false; projectQrcFiles += qrcPathsToBeAdded; } |