From 06c670c2ed5460fb06ed6c7a775eb8c365784210 Mon Sep 17 00:00:00 2001 From: UltraBIF <92269209+Xenoparrot@users.noreply.github.com> Date: Sat, 21 Oct 2023 16:40:25 -0400 Subject: [PATCH] Made "Show Node in Tree" button more user friendly --- editor/editor_properties.cpp | 22 ++++++++++++++++++++++ editor/editor_properties.h | 1 + 2 files changed, 23 insertions(+) diff --git a/editor/editor_properties.cpp b/editor/editor_properties.cpp index 7884005ab7a0..b801ccc8ccee 100644 --- a/editor/editor_properties.cpp +++ b/editor/editor_properties.cpp @@ -2857,7 +2857,16 @@ void EditorPropertyNodePath::_menu_option(int p_idx) { Node *target_node = edited_node->get_node_or_null(np); ERR_FAIL_NULL(target_node); + SceneTreeDock *scene_tree_dock = SceneTreeDock::get_singleton(); + if (scene_tree_dock->get_window() == get_tree()->get_root()) { + TabContainer *tab_container = (TabContainer *)scene_tree_dock->get_parent_control(); + tab_container->set_current_tab(tab_container->get_tab_idx_from_control(scene_tree_dock)); + } else { + scene_tree_dock->get_window()->grab_focus(); + } + SceneTreeDock::get_singleton()->set_selected(target_node); + SceneTreeDock::get_singleton()->get_tree_editor()->update_tree(); } break; } } @@ -2893,6 +2902,18 @@ const NodePath EditorPropertyNodePath::_get_node_path() const { } } +void EditorPropertyNodePath::_button_input(const Ref &p_event) { + Ref mb = p_event; + + if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == MouseButton::RIGHT) { + menu->show_popup(); + + Vector2 pos = menu->get_popup()->get_position(); + pos.x += mb->get_position().x - assign->get_size().x; + menu->get_popup()->set_position(pos); + } +} + bool EditorPropertyNodePath::can_drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from) const { return !is_read_only() && is_drop_valid(p_data); } @@ -3028,6 +3049,7 @@ EditorPropertyNodePath::EditorPropertyNodePath() { assign->set_auto_translate(false); assign->set_expand_icon(true); assign->connect("pressed", callable_mp(this, &EditorPropertyNodePath::_node_assign)); + assign->connect("gui_input", callable_mp(this, &EditorPropertyNodePath::_button_input)); SET_DRAG_FORWARDING_CD(assign, EditorPropertyNodePath); hbc->add_child(assign); diff --git a/editor/editor_properties.h b/editor/editor_properties.h index ff9d47627a94..417a88425bb7 100644 --- a/editor/editor_properties.h +++ b/editor/editor_properties.h @@ -676,6 +676,7 @@ class EditorPropertyNodePath : public EditorProperty { void _accept_text(); void _text_submitted(const String &p_text); const NodePath _get_node_path() const; + void _button_input(const Ref &p_event); bool can_drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from) const; void drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from);