From 2b0ffa34481e2cb0437aeb2f77ed4c3e5555847a Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Wed, 8 Jul 2015 11:51:14 +0200 Subject: [PATCH] QmlDesigner: Remove export alias properties recursively If a child node id have an export alias property this one was not deleted. Now we delete the export alias properties of all child nodes. Change-Id: Ica66a199e8a8d6615208e56dc46ee3de807ddcaa Reviewed-by: Tim Jenssen --- .../designercore/model/qmlobjectnode.cpp | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp b/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp index 6dec74bc86d..30d46571acb 100644 --- a/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp +++ b/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp @@ -273,6 +273,25 @@ static void removeStateOperationsForChildren(const QmlObjectNode &node) } } +static void removeAliasExports(const QmlObjectNode &node) +{ + + PropertyName propertyName = node.id().toLatin1(); + + ModelNode rootNode = node.view()->rootModelNode(); + bool hasAliasExport = !propertyName.isEmpty() + && rootNode.isValid() + && rootNode.hasBindingProperty(propertyName) + && rootNode.bindingProperty(propertyName).isAliasExport(); + + if (hasAliasExport) + rootNode.removeProperty(propertyName); + + foreach (const ModelNode &childNode, node.modelNode().directSubModelNodes()) { + removeAliasExports(childNode); + } + +} /*! Deletes this object's node and its dependencies from the model. @@ -284,6 +303,8 @@ void QmlObjectNode::destroy() if (!isValid()) throw new InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__); + removeAliasExports(modelNode()); + foreach (QmlModelStateOperation stateOperation, allAffectingStatesOperations()) { stateOperation.modelNode().destroy(); //remove of belonging StatesOperations }