aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Hartmann <thomas.hartmann@qt.io>2022-09-28 13:07:17 +0200
committerTim Jenssen <tim.jenssen@qt.io>2022-09-28 11:51:57 +0000
commit535a4eefe471a23e0fc4400f062e51f73e2285ff (patch)
tree0ff1b3ed9a6f76cbf2b8e8c8647e6d69cb221f86
parent4adb4911e6e5f22bb4d3de09e24410205aaf8e2a (diff)
QmlDesigner: Fix crash
Do not call validId in updateContext. Calling validId does mutate the model and will set an id if none exists. Since updateContext is called on selection change the user does not expect the model to mutate and when switching/creating documents this could even lead to a crash. Instead we give the created MosueArea always an id and disable the menu in case there is no id. Task-number: QDS-7806 Change-Id: I3d5d1ce41025d94db3cfff48f483366e56b58a32 Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
-rw-r--r--src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp12
-rw-r--r--src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp1
2 files changed, 12 insertions, 1 deletions
diff --git a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp
index 71451396be..0edb548770 100644
--- a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp
+++ b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp
@@ -595,6 +595,8 @@ public:
{
menu()->clear();
+ menu()->setEnabled(true);
+
const auto selection = selectionContext();
if (!selection.isValid())
return;
@@ -604,11 +606,19 @@ public:
return;
ModelNode currentNode = selection.currentSingleSelectedNode();
+
+ if (!currentNode.isValid())
+ return;
+
QmlObjectNode currentObjectNode(currentNode);
QStringList signalsList = getSignalsList(currentNode);
QList<SlotEntry> slotsList = getSlotsLists(currentNode);
- currentNode.validId();
+
+ if (!currentNode.hasId()) {
+ menu()->setEnabled(false);
+ return;
+ }
for (const ModelNode &connectionNode : currentObjectNode.getAllConnections()) {
for (const AbstractProperty &property : connectionNode.properties()) {
diff --git a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp
index 331922ca22..0d5a10fb10 100644
--- a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp
+++ b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp
@@ -1638,6 +1638,7 @@ void addMouseAreaFill(const SelectionContext &selectionContext)
QmlDesigner::ModelNode mouseAreaNode =
selectionContext.view()->createModelNode("QtQuick.MouseArea", itemMetaInfo.majorVersion(), itemMetaInfo.minorVersion());
+ mouseAreaNode.validId();
modelNode.defaultNodeListProperty().reparentHere(mouseAreaNode);
QmlItemNode mouseAreaItemNode(mouseAreaNode);