summaryrefslogtreecommitdiff
path: root/editor
diff options
context:
space:
mode:
authorRĂ©mi Verschelde <rverschelde@gmail.com>2019-09-22 21:19:58 +0200
committerGitHub <noreply@github.com>2019-09-22 21:19:58 +0200
commitf65c61434bcaa22e3a820c543febb9f63a299ea7 (patch)
treed364a01a6306c7c59d98f2d005b1e9cb776db90b /editor
parent11f75cdd3ca7cf1cce886ffac7cdd19efbc32ace (diff)
parent48ca6ec657630983843bb104ab31a842c15b435b (diff)
Merge pull request #32247 from KoBeWi/the_new_order
Perform reparent if position changes
Diffstat (limited to 'editor')
-rw-r--r--editor/scene_tree_dock.cpp12
1 files changed, 7 insertions, 5 deletions
diff --git a/editor/scene_tree_dock.cpp b/editor/scene_tree_dock.cpp
index e45b08c992..2ddf1f7056 100644
--- a/editor/scene_tree_dock.cpp
+++ b/editor/scene_tree_dock.cpp
@@ -1552,18 +1552,20 @@ void SceneTreeDock::_do_reparent(Node *p_new_parent, int p_position_in_parent, V
if (p_nodes.size() == 0)
return; // Nothing to reparent.
- bool same_parent = true;
+ p_nodes.sort_custom<Node::Comparator>(); //Makes result reliable.
+
+ bool no_change = true;
for (int ni = 0; ni < p_nodes.size(); ni++) {
if (p_nodes[ni] == p_new_parent)
return; // Attempt to reparent to itself.
- if (p_nodes[ni]->get_parent() != p_new_parent)
- same_parent = false;
+ if (p_nodes[ni]->get_parent() != p_new_parent || p_position_in_parent + ni != p_nodes[ni]->get_position_in_parent())
+ no_change = false;
}
- if (same_parent)
- return; // No new parent changes.
+ if (no_change)
+ return; // Position and parent didn't change.
Node *validate = new_parent;
while (validate) {