From 4b735d9fb2b3dc95b4979f6843eace016bf56d65 Mon Sep 17 00:00:00 2001 From: havi05 Date: Fri, 29 Nov 2024 09:04:04 +0100 Subject: [PATCH] LineEdit - Allow copy/select shortcuts when `editable==false` --- scene/gui/line_edit.cpp | 73 ++++++++++++++++++++++------------------- 1 file changed, 39 insertions(+), 34 deletions(-) diff --git a/scene/gui/line_edit.cpp b/scene/gui/line_edit.cpp index 851da2d9b1e4..db18e98ec891 100644 --- a/scene/gui/line_edit.cpp +++ b/scene/gui/line_edit.cpp @@ -619,6 +619,45 @@ void LineEdit::gui_input(const Ref &p_event) { return; } + // Open context menu. + if (context_menu_enabled) { + if (k->is_action("ui_menu", true)) { + _update_context_menu(); + Point2 pos = Point2(get_caret_pixel_pos().x, (get_size().y + theme_cache.font->get_height(theme_cache.font_size)) / 2); + menu->set_position(get_screen_position() + pos); + menu->reset_size(); + menu->popup(); + menu->grab_focus(); + + accept_event(); + return; + } + } + + if (is_shortcut_keys_enabled()) { + if (k->is_action("ui_copy", true)) { + copy_text(); + accept_event(); + return; + } + + if (k->is_action("ui_text_select_all", true)) { + select(); + accept_event(); + return; + } + + if (k->is_action("ui_cut", true)) { + if (editable) { + cut_text(); + } else { + copy_text(); + } + accept_event(); + return; + } + } + if (!editing) { return; } @@ -727,21 +766,6 @@ void LineEdit::gui_input(const Ref &p_event) { return; } - // Open context menu. - if (context_menu_enabled) { - if (k->is_action("ui_menu", true)) { - _update_context_menu(); - Point2 pos = Point2(get_caret_pixel_pos().x, (get_size().y + theme_cache.font->get_height(theme_cache.font_size)) / 2); - menu->set_position(get_screen_position() + pos); - menu->reset_size(); - menu->popup(); - menu->grab_focus(); - - accept_event(); - return; - } - } - // Default is ENTER and KP_ENTER. Cannot use ui_accept as default includes SPACE. if (k->is_action_pressed("ui_text_submit")) { emit_signal(SNAME("text_submitted"), text); @@ -769,25 +793,6 @@ void LineEdit::gui_input(const Ref &p_event) { } if (is_shortcut_keys_enabled()) { - if (k->is_action("ui_copy", true)) { - copy_text(); - accept_event(); - return; - } - - if (k->is_action("ui_text_select_all", true)) { - select(); - accept_event(); - return; - } - - // Cut / Paste - if (k->is_action("ui_cut", true)) { - cut_text(); - accept_event(); - return; - } - if (k->is_action("ui_paste", true)) { paste_text(); accept_event();