From 45695598980b1768f9a033ba955ac9bf4bfb876d Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Fri, 3 Apr 2020 15:41:28 +0300 Subject: [PATCH] QmlDesigner: Properly destroy all keyframe groups for deleted nodes QmlObjectNode::destroy() is not called for implicitly destroyed subnodes when a node is deleted, so we need to account for those when removing keyframe groups from timelines. Change-Id: I21c838d84b5da17d772202961b3b1267e09c7050 Fixes: QDS-1880 Reviewed-by: Thomas Hartmann --- .../designercore/model/qmlobjectnode.cpp | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp b/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp index 3ba547742a0..07ee742c847 100644 --- a/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp +++ b/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp @@ -367,11 +367,18 @@ void QmlObjectNode::destroy() stateOperation.modelNode().destroy(); //remove of belonging StatesOperations } - for (const ModelNode &timelineNode : view()->allModelNodes()) { - if (QmlTimeline::isValidQmlTimeline(timelineNode)) { - QmlTimeline timeline(timelineNode); - timeline.destroyKeyframesForTarget(modelNode()); - } + QVector timelineNodes; + const auto allNodes = view()->allModelNodes(); + for (const auto &timelineNode : allNodes) { + if (QmlTimeline::isValidQmlTimeline(timelineNode)) + timelineNodes.append(timelineNode); + } + + const auto subNodes = modelNode().allSubModelNodesAndThisNode(); + for (auto &timelineNode : qAsConst(timelineNodes)) { + QmlTimeline timeline(timelineNode); + for (const auto &subNode : subNodes) + timeline.destroyKeyframesForTarget(subNode); } if (QmlFlowActionAreaNode::isValidQmlFlowActionAreaNode(modelNode()))