diff options
author | Eike Ziller <eike.ziller@qt.io> | 2020-03-27 12:55:38 +0100 |
---|---|---|
committer | Eike Ziller <eike.ziller@qt.io> | 2020-03-30 06:10:44 +0000 |
commit | 99cd623fa7b9d57c78c9b59d37bc7e12f74bbd34 (patch) | |
tree | 22c712f6ac55d327e6f1f3291788b2b4096e5ef0 | |
parent | faad83d5a37448b472af2efa76b7193c83f2c1f1 (diff) |
QmlDesigner: Fix crash when selecting ISO icon
On macOS. Never use dynamic_cast over library boundaries - it may or may
not work, depending on compiler/platform.
Fixes: QTCREATORBUG-23773
Change-Id: I889d35f336ff80e2b1ae3cbe921f7de2fe541bd8
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
-rw-r--r-- | src/plugins/qmldesigner/documentmanager.cpp | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/src/plugins/qmldesigner/documentmanager.cpp b/src/plugins/qmldesigner/documentmanager.cpp index 2cae7208c5..0e657f777c 100644 --- a/src/plugins/qmldesigner/documentmanager.cpp +++ b/src/plugins/qmldesigner/documentmanager.cpp @@ -398,19 +398,20 @@ void DocumentManager::findPathToIsoProFile(bool *iconResourceFileAlreadyExists, qCDebug(documentManagerLog) << "Checking" << node->displayName() << "(" << node << ")"; if (node->isVirtualFolderType() && node->displayName() == "Resources") { - auto virtualFolderNode = dynamic_cast<ProjectExplorer::VirtualFolderNode*>(node); + ProjectExplorer::FolderNode *virtualFolderNode = node->asFolderNode(); + if (QTC_GUARD(virtualFolderNode)) { + for (int subFolderIndex = 0; subFolderIndex < virtualFolderNode->folderNodes().size() && !iconQrcFileNode; ++subFolderIndex) { + ProjectExplorer::FolderNode *subFolderNode = virtualFolderNode->folderNodes().at(subFolderIndex); - for (int subFolderIndex = 0; subFolderIndex < virtualFolderNode->folderNodes().size() && !iconQrcFileNode; ++subFolderIndex) { - ProjectExplorer::FolderNode *subFolderNode = virtualFolderNode->folderNodes().at(subFolderIndex); + qCDebug(documentManagerLog) << "Checking if" << subFolderNode->displayName() << "(" + << subFolderNode << ") is" << isoIconsQrcFile; - qCDebug(documentManagerLog) << "Checking if" << subFolderNode->displayName() << "(" - << subFolderNode << ") is" << isoIconsQrcFile; + if (subFolderNode->isFolderNodeType() && subFolderNode->displayName() == isoIconsQrcFile) { + qCDebug(documentManagerLog) << "Found" << isoIconsQrcFile << "in" << virtualFolderNode->filePath(); - if (subFolderNode->isFolderNodeType() && subFolderNode->displayName() == isoIconsQrcFile) { - qCDebug(documentManagerLog) << "Found" << isoIconsQrcFile << "in" << virtualFolderNode->filePath(); - - iconQrcFileNode = subFolderNode; - *resourceFileProPath = iconQrcFileNode->parentProjectNode()->filePath().toString(); + iconQrcFileNode = subFolderNode; + *resourceFileProPath = iconQrcFileNode->parentProjectNode()->filePath().toString(); + } } } } |