diff options
author | Emmanuel Barroga <emmanuelbarroga@gmail.com> | 2019-07-04 06:41:21 -0700 |
---|---|---|
committer | Emmanuel Barroga <emmanuelbarroga@gmail.com> | 2019-07-04 06:41:21 -0700 |
commit | 839c3bd1bff722974d80f1d799916e558d2a10eb (patch) | |
tree | 81987b25dcd096780ddf760f6ba42c627646ce53 | |
parent | 7b569e91c0c6b84965cad416b8e86dcfdacbcfc4 (diff) |
Resolves Issue #30271 Reparent selection without flattening
When reparenting a multi-selection via drag and drop, the hierarchy was flattened. This change resolves that issue.
-rw-r--r-- | editor/scene_tree_dock.cpp | 21 |
1 files changed, 9 insertions, 12 deletions
diff --git a/editor/scene_tree_dock.cpp b/editor/scene_tree_dock.cpp index 442de08ffa..f17476d49b 100644 --- a/editor/scene_tree_dock.cpp +++ b/editor/scene_tree_dock.cpp @@ -2225,23 +2225,20 @@ void SceneTreeDock::_script_dropped(String p_file, NodePath p_to) { void SceneTreeDock::_nodes_dragged(Array p_nodes, NodePath p_to, int p_type) { - Vector<Node *> nodes; - Node *to_node; - - for (int i = 0; i < p_nodes.size(); i++) { - Node *n = get_node((p_nodes[i])); - if (n) { - nodes.push_back(n); - } - } + List<Node *> selection = editor_selection->get_selected_node_list(); - if (nodes.size() == 0) - return; + if (selection.empty()) + return; //nothing to reparent - to_node = get_node(p_to); + Node *to_node = get_node(p_to); if (!to_node) return; + Vector<Node *> nodes; + for (List<Node *>::Element *E = selection.front(); E; E = E->next()) { + nodes.push_back(E->get()); + } + int to_pos = -1; _normalize_drop(to_node, to_pos, p_type); |