From 34491bdfc34e518b902c1dd2085ef64d8680e315 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Thu, 23 Jun 2022 16:20:39 +0200 Subject: [PATCH] QmlDesigner: Only remove node with position Extending the test case. Change-Id: I37255de763262e069c2f9d30b1ce584a0347fbcf Reviewed-by: Reviewed-by: Thomas Hartmann --- .../model/rewriteactioncompressor.cpp | 5 +++- .../qmldesigner/coretests/tst_testcore.cpp | 27 +++++++++++++++++-- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/src/plugins/qmldesigner/designercore/model/rewriteactioncompressor.cpp b/src/plugins/qmldesigner/designercore/model/rewriteactioncompressor.cpp index c014bcd4d78..0662da4e86a 100644 --- a/src/plugins/qmldesigner/designercore/model/rewriteactioncompressor.cpp +++ b/src/plugins/qmldesigner/designercore/model/rewriteactioncompressor.cpp @@ -166,7 +166,10 @@ void RewriteActionCompressor::compressReparentIntoNewPropertyActions(QListnodeOffset(reparentAction->targetProperty().parentModelNode()) < 0) { actionsToRemove.append(action); - removeActions.append(new RemoveNodeRewriteAction(reparentAction->reparentedNode())); + const ModelNode childNode = reparentAction->reparentedNode(); + + if (m_positionStore->nodeOffset(childNode) > 0) + removeActions.append(new RemoveNodeRewriteAction(childNode)); } } } diff --git a/tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp b/tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp index f6708d2c8f3..b6ff4903c43 100644 --- a/tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp +++ b/tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp @@ -1181,7 +1181,7 @@ void tst_TestCore::testRewriterReparentToNewNode() const QList children = rootModelNode.directSubModelNodes(); - ModelNode rectangle = testRewriterView->createModelNode("QtQuick.Rectangle", 2, 0); + ModelNode rectangle = testRewriterView->createModelNode("QtQuick.Rectangle"); rootModelNode.nodeListProperty("data").reparentHere(rectangle); rectangle.setIdWithoutRefactoring("newParent"); @@ -1193,7 +1193,7 @@ void tst_TestCore::testRewriterReparentToNewNode() { RewriterTransaction transaction = testRewriterView->beginRewriterTransaction("TEST"); - ModelNode rectangle = testRewriterView->createModelNode("QtQuick.Rectangle", 2, 0); + ModelNode rectangle = testRewriterView->createModelNode("QtQuick.Rectangle"); rootModelNode.nodeListProperty("data").reparentHere(rectangle); rectangle.setIdWithoutRefactoring("newParent2"); @@ -1223,6 +1223,29 @@ void tst_TestCore::testRewriterReparentToNewNode() QCOMPARE(textEdit.toPlainText(), expectedOutcome); + + rectangle.destroy(); + + QCOMPARE(testRewriterView->allModelNodes().count(), 6); + + { + RewriterTransaction transaction = testRewriterView->beginRewriterTransaction("TEST"); + + ModelNode newChild = testRewriterView->createModelNode("QtQuick.Rectangle"); + rootModelNode.nodeListProperty("data").reparentHere(newChild); + newChild.setIdWithoutRefactoring("newChild"); + ModelNode newParent = testRewriterView->createModelNode("QtQuick.Rectangle"); + rootModelNode.nodeListProperty("data").reparentHere(newParent); + + newParent.setIdWithoutRefactoring("newParent3"); + + for (const ModelNode &child : children) + newParent.nodeListProperty("data").reparentHere(child); + + newParent.nodeListProperty("data").reparentHere(newChild); + } + + QCOMPARE(testRewriterView->allModelNodes().count(), 8); } void tst_TestCore::testRewriterForGradientMagic()