From 6d229ef684d05c698aaa37f9cc500103260eae1e Mon Sep 17 00:00:00 2001 From: Marco Bubke <marco.bubke@nokia.com> Date: Wed, 22 Sep 2010 13:59:53 +0200 Subject: [PATCH] QmlDesigner.NodeInstances: Reset the Id for all child objects before deletion --- .../designercore/include/nodeinstanceview.h | 1 - .../instances/nodeinstanceview.cpp | 24 +++++++++---------- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h b/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h index d2aa7102522..1829c29e56d 100644 --- a/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h +++ b/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h @@ -111,7 +111,6 @@ public: private slots: void emitParentChanged(QObject *child); void refreshLocalFileProperty(const QString &path); - void removeIdFromContext(QObject *object); private: // functions NodeInstance rootNodeInstance() const; diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp index d83cd9711ae..5acfb026a2e 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp @@ -417,6 +417,11 @@ void NodeInstanceView::removeAllInstanceNodeRelationships() { // prevent destroyed() signals calling back + foreach (NodeInstance instance, m_objectInstanceHash.values()) { + if (instance.isValid()) + instance.setId(QString()); + } + //first the root object if (rootNodeInstance().internalObject()) rootNodeInstance().internalObject()->disconnect(); @@ -552,7 +557,8 @@ void NodeInstanceView::removeInstanceNodeRelationship(const ModelNode &node) { Q_ASSERT(m_nodeInstanceHash.contains(node)); NodeInstance instance = instanceForNode(node); - removeIdFromContext(instance.internalObject()); + if (instance.isValid()) + instance.setId(QString()); m_objectInstanceHash.remove(instanceForNode(node).internalObject()); m_nodeInstanceHash.remove(node); instance.makeInvalid(); @@ -627,6 +633,10 @@ void NodeInstanceView::activateBaseState() void NodeInstanceView::removeRecursiveChildRelationship(const ModelNode &removedNode) { + if (hasInstanceForNode(removedNode)) { + instanceForNode(removedNode).setId(QString()); + } + foreach (const ModelNode &childNode, removedNode.allDirectSubModelNodes()) removeRecursiveChildRelationship(childNode); @@ -695,16 +705,4 @@ void NodeInstanceView::refreshLocalFileProperty(const QString &path) } } -void NodeInstanceView::removeIdFromContext(QObject *object) -{ - if (hasInstanceForObject(object)) { - NodeInstance instance = instanceForObject(object); - if (instance.isValid()) { - QString id = instance.id(); - if (!id.isEmpty()) - engine()->rootContext()->setContextProperty(id, 0); - } - } -} - } -- GitLab