summaryrefslogtreecommitdiff
path: root/src/plugins/qmldesigner/designercore/model/rewriteactioncompressor.cpp
diff options
context:
space:
mode:
authorTim Jenssen <tim.jenssen@qt.io>2022-07-01 11:19:21 +0200
committerTim Jenssen <tim.jenssen@qt.io>2022-07-01 09:22:10 +0000
commit56bcad81adb7268773b902ece0fc065d01f3db27 (patch)
treead19b5f8f6bbeeedffcde2549bd83ab0ac0d25d1 /src/plugins/qmldesigner/designercore/model/rewriteactioncompressor.cpp
parenta920bbf59fb071af2e6bfb306dec07bb8ba94924 (diff)
parent234958a47a6edcd17bae255411a5b0f0bbaea6c7 (diff)
downloadqt-creator-56bcad81adb7268773b902ece0fc065d01f3db27.tar.gz
Merge remote-tracking branch 'origin/7.0' into 8.0
Change-Id: I7cd5d3808007ef739212f4347ba9b16e7b298943
Diffstat (limited to 'src/plugins/qmldesigner/designercore/model/rewriteactioncompressor.cpp')
-rw-r--r--src/plugins/qmldesigner/designercore/model/rewriteactioncompressor.cpp30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/plugins/qmldesigner/designercore/model/rewriteactioncompressor.cpp b/src/plugins/qmldesigner/designercore/model/rewriteactioncompressor.cpp
index 6422765ec3..abdba53823 100644
--- a/src/plugins/qmldesigner/designercore/model/rewriteactioncompressor.cpp
+++ b/src/plugins/qmldesigner/designercore/model/rewriteactioncompressor.cpp
@@ -56,6 +56,7 @@ void RewriteActionCompressor::operator()(QList<RewriteAction *> &actions,
compressImports(actions);
compressRereparentActions(actions);
compressReparentIntoSamePropertyActions(actions);
+ compressReparentIntoNewPropertyActions(actions);
compressPropertyActions(actions);
compressAddEditRemoveNodeActions(actions);
compressAddEditActions(actions, tabSettings);
@@ -152,6 +153,35 @@ void RewriteActionCompressor::compressReparentIntoSamePropertyActions(QList<Rewr
}
}
+void RewriteActionCompressor::compressReparentIntoNewPropertyActions(QList<RewriteAction *> &actions) const
+{
+ QList<RewriteAction *> actionsToRemove;
+
+ QList<RewriteAction *> removeActions;
+
+ for (int i = actions.size(); --i >= 0; ) {
+ RewriteAction *action = actions.at(i);
+
+ if (ReparentNodeRewriteAction *reparentAction = action->asReparentNodeRewriteAction()) {
+ if (m_positionStore->nodeOffset(reparentAction->targetProperty().parentModelNode()) < 0) {
+ actionsToRemove.append(action);
+
+ const ModelNode childNode = reparentAction->reparentedNode();
+
+ if (m_positionStore->nodeOffset(childNode) > 0)
+ removeActions.append(new RemoveNodeRewriteAction(childNode));
+ }
+ }
+ }
+
+ for (RewriteAction *action : qAsConst(actionsToRemove)) {
+ actions.removeOne(action);
+ delete action;
+ }
+
+ actions.append(removeActions);
+}
+
void RewriteActionCompressor::compressAddEditRemoveNodeActions(QList<RewriteAction *> &actions) const
{
QList<RewriteAction *> actionsToRemove;