diff options
Diffstat (limited to 'editor/connections_dialog.cpp')
-rw-r--r-- | editor/connections_dialog.cpp | 95 |
1 files changed, 59 insertions, 36 deletions
diff --git a/editor/connections_dialog.cpp b/editor/connections_dialog.cpp index 69908af47d..e022294277 100644 --- a/editor/connections_dialog.cpp +++ b/editor/connections_dialog.cpp @@ -35,13 +35,13 @@ #include "editor/editor_help.h" #include "editor/editor_inspector.h" #include "editor/editor_node.h" -#include "editor/editor_scale.h" #include "editor/editor_settings.h" #include "editor/editor_string_names.h" #include "editor/editor_undo_redo_manager.h" #include "editor/gui/scene_tree_editor.h" #include "editor/node_dock.h" #include "editor/scene_tree_dock.h" +#include "editor/themes/editor_scale.h" #include "plugins/script_editor_plugin.h" #include "scene/gui/button.h" #include "scene/gui/check_box.h" @@ -1202,44 +1202,67 @@ void ConnectionsDock::_slot_menu_about_to_popup() { slot_menu->set_item_disabled(slot_menu->get_item_index(SLOT_MENU_DISCONNECT), connection_is_inherited); } -void ConnectionsDock::_rmb_pressed(const Ref<InputEvent> &p_event) { - const Ref<InputEventMouseButton> &mb_event = p_event; - if (mb_event.is_null() || !mb_event->is_pressed() || mb_event->get_button_index() != MouseButton::RIGHT) { - return; - } +void ConnectionsDock::_tree_gui_input(const Ref<InputEvent> &p_event) { + const Ref<InputEventKey> &key = p_event; - TreeItem *item = tree->get_item_at_position(mb_event->get_position()); - if (!item) { - return; - } + if (key.is_valid() && key->is_pressed() && !key->is_echo()) { + if (ED_IS_SHORTCUT("connections_editor/disconnect", p_event)) { + TreeItem *item = tree->get_selected(); + if (item && _get_item_type(*item) == TREE_ITEM_TYPE_CONNECTION) { + Connection connection = item->get_metadata(0); + _disconnect(connection); + update_tree(); - if (item->is_selectable(0)) { - // Update selection now, before `about_to_popup` signal. Needed for SIGNAL and CONNECTION context menus. - tree->set_selected(item); + // Stop the Delete input from propagating elsewhere. + accept_event(); + return; + } + } else if (ED_IS_SHORTCUT("editor/open_search", p_event)) { + search_box->grab_focus(); + search_box->select_all(); + + accept_event(); + return; + } } - Vector2 screen_position = tree->get_screen_position() + mb_event->get_position(); + // Handle RMB press. + const Ref<InputEventMouseButton> &mb_event = p_event; - switch (_get_item_type(*item)) { - case TREE_ITEM_TYPE_ROOT: - break; - case TREE_ITEM_TYPE_CLASS: - class_menu_doc_class_name = item->get_metadata(0); - class_menu->set_position(screen_position); - class_menu->reset_size(); - class_menu->popup(); - accept_event(); // Don't collapse item. - break; - case TREE_ITEM_TYPE_SIGNAL: - signal_menu->set_position(screen_position); - signal_menu->reset_size(); - signal_menu->popup(); - break; - case TREE_ITEM_TYPE_CONNECTION: - slot_menu->set_position(screen_position); - slot_menu->reset_size(); - slot_menu->popup(); - break; + if (mb_event.is_valid() && mb_event->is_pressed() && mb_event->get_button_index() == MouseButton::RIGHT) { + TreeItem *item = tree->get_item_at_position(mb_event->get_position()); + if (!item) { + return; + } + + if (item->is_selectable(0)) { + // Update selection now, before `about_to_popup` signal. Needed for SIGNAL and CONNECTION context menus. + tree->set_selected(item); + } + + Vector2 screen_position = tree->get_screen_position() + mb_event->get_position(); + + switch (_get_item_type(*item)) { + case TREE_ITEM_TYPE_ROOT: + break; + case TREE_ITEM_TYPE_CLASS: + class_menu_doc_class_name = item->get_metadata(0); + class_menu->set_position(screen_position); + class_menu->reset_size(); + class_menu->popup(); + accept_event(); // Don't collapse item. + break; + case TREE_ITEM_TYPE_SIGNAL: + signal_menu->set_position(screen_position); + signal_menu->reset_size(); + signal_menu->popup(); + break; + case TREE_ITEM_TYPE_CONNECTION: + slot_menu->set_position(screen_position); + slot_menu->reset_size(); + slot_menu->popup(); + break; + } } } @@ -1536,13 +1559,13 @@ ConnectionsDock::ConnectionsDock() { slot_menu->connect("about_to_popup", callable_mp(this, &ConnectionsDock::_slot_menu_about_to_popup)); slot_menu->add_item(TTR("Edit..."), SLOT_MENU_EDIT); slot_menu->add_item(TTR("Go to Method"), SLOT_MENU_GO_TO_METHOD); - slot_menu->add_item(TTR("Disconnect"), SLOT_MENU_DISCONNECT); + slot_menu->add_shortcut(ED_SHORTCUT("connections_editor/disconnect", TTR("Disconnect"), Key::KEY_DELETE), SLOT_MENU_DISCONNECT); add_child(slot_menu); connect_dialog->connect("connected", callable_mp(this, &ConnectionsDock::_make_or_edit_connection)); tree->connect("item_selected", callable_mp(this, &ConnectionsDock::_tree_item_selected)); tree->connect("item_activated", callable_mp(this, &ConnectionsDock::_tree_item_activated)); - tree->connect("gui_input", callable_mp(this, &ConnectionsDock::_rmb_pressed)); + tree->connect("gui_input", callable_mp(this, &ConnectionsDock::_tree_gui_input)); add_theme_constant_override("separation", 3 * EDSCALE); } |