diff --git a/editor_modules/editor_code_editor/editor_code_text_editor.cpp b/editor_modules/editor_code_editor/editor_code_text_editor.cpp index 5c6c568da..80d90b583 100644 --- a/editor_modules/editor_code_editor/editor_code_text_editor.cpp +++ b/editor_modules/editor_code_editor/editor_code_text_editor.cpp @@ -69,6 +69,36 @@ #include "editor_script_editor.h" +// This function should be used to handle shortcuts that could otherwise +// be handled too late if they weren't handled here. +void EditorCodeTextEditor::_shortcut_input(const Ref &event) { + const Ref key_event = event; + if (!key_event.is_valid() || !key_event->is_pressed()) { + return; + } + + if (ED_IS_SHORTCUT("script_text_editor/move_up", key_event)) { + move_lines_up(); + accept_event(); + return; + } + if (ED_IS_SHORTCUT("script_text_editor/move_down", key_event)) { + move_lines_down(); + accept_event(); + return; + } + if (ED_IS_SHORTCUT("script_text_editor/delete_line", key_event)) { + delete_lines(); + accept_event(); + return; + } + if (ED_IS_SHORTCUT("script_text_editor/duplicate_selection", key_event)) { + duplicate_selection(); + accept_event(); + return; + } +} + void EditorCodeTextEditor::_text_editor_gui_input(const Ref &p_event) { Ref mb = p_event; @@ -1015,6 +1045,7 @@ void EditorCodeTextEditor::remove_all_bookmarks() { } void EditorCodeTextEditor::_bind_methods() { + ClassDB::bind_method(D_METHOD("_shortcut_input"), &EditorCodeTextEditor::_shortcut_input); ClassDB::bind_method("_text_editor_gui_input", &EditorCodeTextEditor::_text_editor_gui_input); ClassDB::bind_method("_line_col_changed", &EditorCodeTextEditor::_line_col_changed); ClassDB::bind_method("_text_changed", &EditorCodeTextEditor::_text_changed); diff --git a/editor_modules/editor_code_editor/editor_code_text_editor.h b/editor_modules/editor_code_editor/editor_code_text_editor.h index 77d81a5f2..3e5fca400 100644 --- a/editor_modules/editor_code_editor/editor_code_text_editor.h +++ b/editor_modules/editor_code_editor/editor_code_text_editor.h @@ -90,6 +90,7 @@ class EditorCodeTextEditor : public VBoxContainer { void _font_resize_timeout(); bool _add_font_size(int p_delta); + void _shortcut_input(const Ref &event); void _text_editor_gui_input(const Ref &p_event); void _zoom_in(); void _zoom_out();