From f32db73cd2b4319673fa1dfd7fbfdbe93e6af085 Mon Sep 17 00:00:00 2001 From: Haoyu Qiu Date: Wed, 6 Dec 2023 16:26:37 +0800 Subject: [PATCH] Allow dragging editable children --- editor/scene_tree_editor.cpp | 25 ++++++++++++++++++------- editor/scene_tree_editor.h | 2 +- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/editor/scene_tree_editor.cpp b/editor/scene_tree_editor.cpp index bcff5331e82..d99e6a647e6 100644 --- a/editor/scene_tree_editor.cpp +++ b/editor/scene_tree_editor.cpp @@ -40,7 +40,7 @@ #include "scene/main/viewport.h" #include "scene/resources/packed_scene.h" -Node *SceneTreeEditor::get_scene_node() { +Node *SceneTreeEditor::get_scene_node() const { ERR_FAIL_COND_V(!is_inside_tree(), nullptr); return get_tree()->get_edited_scene_root(); @@ -995,11 +995,8 @@ Variant SceneTreeEditor::get_drag_data_fw(const Point2 &p_point, Control *p_from Node *n = get_node(np); if (n) { - // Only allow selection if not part of an instanced scene. - if (!n->get_owner() || n->get_owner() == get_scene_node() || n->get_owner()->get_filename() == String()) { - selected.push_back(n); - icons.push_back(next->get_icon(0)); - } + selected.push_back(n); + icons.push_back(next->get_icon(0)); } next = tree->get_next_selected(next); } @@ -1110,7 +1107,21 @@ bool SceneTreeEditor::can_drop_data_fw(const Point2 &p_point, const Variant &p_d } } - return String(d["type"]) == "nodes" && filter == String(); + if (filter.empty() && String(d["type"]) == "nodes") { + Array nodes = d["nodes"]; + + for (int i = 0; i < nodes.size(); i++) { + Node *n = get_node(nodes[i]); + // Only allow selection if not part of an instanced scene. + if (n && n->get_owner() && n->get_owner() != get_scene_node() && !n->get_owner()->get_filename().empty()) { + return false; + } + } + + return true; + } + + return false; } void SceneTreeEditor::drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from) { if (!can_drop_data_fw(p_point, p_data, p_from)) { diff --git a/editor/scene_tree_editor.h b/editor/scene_tree_editor.h index 6db4c60c3bc..f57322ad289 100644 --- a/editor/scene_tree_editor.h +++ b/editor/scene_tree_editor.h @@ -114,7 +114,7 @@ class SceneTreeEditor : public Control { void _update_visibility_color(Node *p_node, TreeItem *p_item); void _selection_changed(); - Node *get_scene_node(); + Node *get_scene_node() const; Variant get_drag_data_fw(const Point2 &p_point, Control *p_from); bool can_drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from) const;