Преглед изворни кода

Merge pull request #68340 from KoBeWi/deparent

Don't reparent dragged node when non needed
Rémi Verschelde пре 2 година
родитељ
комит
91fcc3986e
1 измењених фајлова са 8 додато и 5 уклоњено
  1. 8 5
      editor/scene_tree_dock.cpp

+ 8 - 5
editor/scene_tree_dock.cpp

@@ -1814,7 +1814,7 @@ void SceneTreeDock::_do_reparent(Node *p_new_parent, int p_position_in_parent, V
 	// Sort by tree order, so re-adding is easy.
 	// Sort by tree order, so re-adding is easy.
 	p_nodes.sort_custom<Node::Comparator>();
 	p_nodes.sort_custom<Node::Comparator>();
 
 
-	editor_data->get_undo_redo()->create_action(TTR("Reparent Node"));
+	editor_data->get_undo_redo()->create_action(TTR("Reparent Node"), UndoRedo::MERGE_DISABLE, p_nodes[0]);
 
 
 	HashMap<Node *, NodePath> path_renames;
 	HashMap<Node *, NodePath> path_renames;
 	Vector<StringName> former_names;
 	Vector<StringName> former_names;
@@ -1835,14 +1835,17 @@ void SceneTreeDock::_do_reparent(Node *p_new_parent, int p_position_in_parent, V
 			owners.push_back(E);
 			owners.push_back(E);
 		}
 		}
 
 
-		if (new_parent == node->get_parent() && node->get_index() < p_position_in_parent + ni) {
+		bool same_parent = new_parent == node->get_parent();
+		if (same_parent && node->get_index() < p_position_in_parent + ni) {
 			inc--; // If the child will generate a gap when moved, adjust.
 			inc--; // If the child will generate a gap when moved, adjust.
 		}
 		}
 
 
-		editor_data->get_undo_redo()->add_do_method(node->get_parent(), "remove_child", node);
-		editor_data->get_undo_redo()->add_do_method(new_parent, "add_child", node, true);
+		if (!same_parent) {
+			editor_data->get_undo_redo()->add_do_method(node->get_parent(), "remove_child", node);
+			editor_data->get_undo_redo()->add_do_method(new_parent, "add_child", node, true);
+		}
 
 
-		if (p_position_in_parent >= 0) {
+		if (p_position_in_parent >= 0 || same_parent) {
 			editor_data->get_undo_redo()->add_do_method(new_parent, "move_child", node, p_position_in_parent + inc);
 			editor_data->get_undo_redo()->add_do_method(new_parent, "move_child", node, p_position_in_parent + inc);
 		}
 		}