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()