summaryrefslogtreecommitdiffstats
path: root/editor/connections_dialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'editor/connections_dialog.cpp')
-rw-r--r--editor/connections_dialog.cpp95
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);
}