diff options
author | RĂ©mi Verschelde <rverschelde@gmail.com> | 2019-09-22 21:19:58 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-09-22 21:19:58 +0200 |
commit | f65c61434bcaa22e3a820c543febb9f63a299ea7 (patch) | |
tree | d364a01a6306c7c59d98f2d005b1e9cb776db90b /editor | |
parent | 11f75cdd3ca7cf1cce886ffac7cdd19efbc32ace (diff) | |
parent | 48ca6ec657630983843bb104ab31a842c15b435b (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.cpp | 12 |
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) { |