From d907df03496551907259d95fe417b9910d7f7963 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Wed, 2 Oct 2019 11:15:27 +0200 Subject: [PATCH 1/2] Revert "Designer: Fix look-up of resources for UI files" This reverts commit 736eef24ca9263339f4c576cba5d4b20fe188045, which breaks binary compatibility. Change-Id: I696ad3e6efc6f02f595356c9864d69629eeef8bf Reviewed-by: Eike Ziller --- .../cmakeprojectmanager/cmakeprojectnodes.cpp | 2 +- src/plugins/designer/resourcehandler.cpp | 33 +++++++------------ src/plugins/projectexplorer/projectnodes.h | 9 ++--- src/plugins/qbsprojectmanager/qbsnodes.cpp | 9 +---- .../qmakeprojectmanager/qmakenodes.cpp | 9 +---- 5 files changed, 17 insertions(+), 45 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectnodes.cpp b/src/plugins/cmakeprojectmanager/cmakeprojectnodes.cpp index deb00e8f95d..f14f627b34f 100644 --- a/src/plugins/cmakeprojectmanager/cmakeprojectnodes.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeprojectnodes.cpp @@ -173,7 +173,7 @@ CMakeTargetNode::CMakeTargetNode(const Utils::FilePath &directory, const QString setPriority(Node::DefaultProjectPriority + 900); setIcon(QIcon(":/projectexplorer/images/build.png")); // TODO: Use proper icon! setListInProject(false); - setProductType(ProductType::Other); + setIsProduct(); } QString CMakeTargetNode::generateId(const Utils::FilePath &directory, const QString &target) diff --git a/src/plugins/designer/resourcehandler.cpp b/src/plugins/designer/resourcehandler.cpp index c01dbc95f6d..84020f77ee4 100644 --- a/src/plugins/designer/resourcehandler.cpp +++ b/src/plugins/designer/resourcehandler.cpp @@ -99,37 +99,26 @@ 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. - Node * const fileNode = project->rootProjectNode()->findNode([&fileName](const Node *n) { + ProjectNode *projectNode = project->rootProjectNode(); + Node * const fileNode = projectNode->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. - projectNodeForUiFile = fileNode->parentProjectNode(); - while (projectNodeForUiFile && !projectNodeForUiFile->isProduct()) - projectNodeForUiFile = projectNodeForUiFile->parentProjectNode(); + projectNode = fileNode->parentProjectNode(); + while (projectNode && !projectNode->isProduct()) + projectNode = projectNode->parentProjectNode(); } - 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; - }; + if (!projectNode) + projectNode = project->rootProjectNode(); QStringList projectQrcFiles; - project->rootProjectNode()->forEachNode([&](FileNode *node) { - if (node->fileType() == FileType::Resource && useQrcFile(node)) + projectNode->forEachNode([&](FileNode *node) { + if (node->fileType() == FileType::Resource) projectQrcFiles.append(node->filePath().toString()); }, [&](FolderNode *node) { - if (dynamic_cast(node) && useQrcFile(node)) + if (dynamic_cast(node)) projectQrcFiles.append(node->filePath().toString()); }); // Check if the user has chosen to update the lacking resource inside designer @@ -141,7 +130,7 @@ void ResourceHandler::updateResourcesHelper(bool updateProjectResources) } if (!qrcPathsToBeAdded.isEmpty()) { m_handlingResources = true; - projectNodeForUiFile->addFiles(qrcPathsToBeAdded); + projectNode->addFiles(qrcPathsToBeAdded); m_handlingResources = false; projectQrcFiles += qrcPathsToBeAdded; } diff --git a/src/plugins/projectexplorer/projectnodes.h b/src/plugins/projectexplorer/projectnodes.h index a214407515e..ce36882aa9c 100644 --- a/src/plugins/projectexplorer/projectnodes.h +++ b/src/plugins/projectexplorer/projectnodes.h @@ -57,8 +57,6 @@ enum class FileType : quint16 { FileTypeSize }; -enum class ProductType { App, Lib, Other, None }; - enum ProjectAction { // Special value to indicate that the actions are handled by the parent InheritedFromParent, @@ -359,16 +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_productType != ProductType::None; } - ProductType productType() const { return m_productType; } + bool isProduct() const { return m_isProduct; } protected: - void setProductType(ProductType type) { m_productType = type; } + void setIsProduct() { m_isProduct = true; } QString m_target; private: - ProductType m_productType = ProductType::None; + 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 4f7f2e5f086..62762069b2a 100644 --- a/src/plugins/qbsprojectmanager/qbsnodes.cpp +++ b/src/plugins/qbsprojectmanager/qbsnodes.cpp @@ -320,14 +320,7 @@ QbsProductNode::QbsProductNode(const qbs::ProductData &prd) : { static QIcon productIcon = Core::FileIconProvider::directoryIcon(Constants::QBS_PRODUCT_OVERLAY_ICON); setIcon(productIcon); - if (m_qbsProductData.isRunnable()) { - setProductType(ProductType::App); - } else if (m_qbsProductData.type().contains("dynamiclibrary") - || m_qbsProductData.type().contains("staticlibrary")) { - setProductType(ProductType::Lib); - } else { - setProductType(ProductType::Other); - } + 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 24b6b8cb038..a71ab8c3d6a 100644 --- a/src/plugins/qmakeprojectmanager/qmakenodes.cpp +++ b/src/plugins/qmakeprojectmanager/qmakenodes.cpp @@ -230,14 +230,7 @@ FolderNode::AddNewInformation QmakePriFileNode::addNewInformation(const QStringL QmakeProFileNode::QmakeProFileNode(QmakeProject *project, const FilePath &filePath, QmakeProFile *pf) : QmakePriFileNode(project, this, filePath, pf) { - if (projectType() == ProjectType::ApplicationTemplate) { - setProductType(ProductType::App); - } else if (projectType() == ProjectType::SharedLibraryTemplate - || projectType() == ProjectType::StaticLibraryTemplate) { - setProductType(ProductType::Lib); - } else if (projectType() != ProjectType::SubDirsTemplate) { - setProductType(ProductType::Other); - } + setIsProduct(); } bool QmakeProFileNode::showInSimpleTree() const From ea829fa6d51b46d1c2f06d14150c0948ffd044d5 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Mon, 9 Sep 2019 11:14:46 +0200 Subject: [PATCH 2/2] Squish: Workaround bad focus issue when using Squish When interacting with the file dialog QC seems to lose its focus and never gets it completely back. This in turn makes lots of short cuts useless and (context) menu entries disappear or being disabled. Avoid this by explicitly closing the popup of the line edit if there is one. Change-Id: I79f86b3133d2d0780d73d75e15416d59f35dfa1e Reviewed-by: Robert Loehning --- tests/system/shared/utils.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/tests/system/shared/utils.py b/tests/system/shared/utils.py index e8bc1425a75..ef46aca7b26 100644 --- a/tests/system/shared/utils.py +++ b/tests/system/shared/utils.py @@ -235,6 +235,11 @@ def getOutputFromCmdline(cmdline, environment=None, acceptedError=0): return e.output def selectFromFileDialog(fileName, waitForFile=False, ignoreFinalSnooze=False): + def __closePopupIfNecessary__(): + if not isNull(QApplication.activePopupWidget()): + test.log("Closing active popup widget") + QApplication.activePopupWidget().close() + if platform.system() == "Darwin": snooze(1) nativeType("") @@ -252,12 +257,13 @@ def selectFromFileDialog(fileName, waitForFile=False, ignoreFinalSnooze=False): try: waitForObject("{name='QFileDialog' type='QFileDialog' visible='1'}", 5000) pathLine = waitForObject("{name='fileNameEdit' type='QLineEdit' visible='1'}") - snooze(1) replaceEditorContent(pathLine, pName) + snooze(1) clickButton(waitForObject("{text='Open' type='QPushButton'}")) waitFor("str(pathLine.text)==''") - snooze(1) replaceEditorContent(pathLine, fName) + snooze(1) + __closePopupIfNecessary__() clickButton(waitForObject("{text='Open' type='QPushButton'}")) except: nativeType("")