diff --git a/doc/classes/LineEdit.xml b/doc/classes/LineEdit.xml index 91c9072f73e..6948d7d454d 100644 --- a/doc/classes/LineEdit.xml +++ b/doc/classes/LineEdit.xml @@ -6,7 +6,7 @@ [LineEdit] provides an input field for editing a single line of text. - When the [LineEdit] control is focused using the keyboard arrow keys, it will only gain focus and not enter edit mode. - - To enter edit mode, click on the control with the mouse or press the [code]ui_text_submit[/code] action (by default [kbd]Enter[/kbd] or [kbd]Kp Enter[/kbd]). + - To enter edit mode, click on the control with the mouse, see also [member keep_editing_on_text_submit]. - To exit edit mode, press [code]ui_text_submit[/code] or [code]ui_cancel[/code] (by default [kbd]Escape[/kbd]) actions. - Check [method edit], [method unedit], [method is_editing], and [signal editing_toggled] for more information. [b]Important:[/b] @@ -80,7 +80,7 @@ Allows entering edit mode whether the [LineEdit] is focused or not. - Use [method Callable.call_deferred] if you want to enter edit mode on [signal text_submitted]. + See also [member keep_editing_on_text_submit]. @@ -283,6 +283,9 @@ If [code]true[/code], the [LineEdit] doesn't display decoration. + + If [code]true[/code], the [LineEdit] will not exit edit mode when text is submitted by pressing [code]ui_text_submit[/code] action (by default: [kbd]Enter[/kbd] or [kbd]Kp Enter[/kbd]). + Language code used for line-breaking and text shaping algorithms. If left empty, current locale is used instead. diff --git a/editor/code_editor.cpp b/editor/code_editor.cpp index 9934b8f4521..753ed209336 100644 --- a/editor/code_editor.cpp +++ b/editor/code_editor.cpp @@ -675,8 +675,6 @@ void FindReplaceBar::_search_text_submitted(const String &p_text) { } else { search_next(); } - - callable_mp(search_text, &LineEdit::edit).call_deferred(); } void FindReplaceBar::_replace_text_submitted(const String &p_text) { @@ -784,6 +782,7 @@ FindReplaceBar::FindReplaceBar() { // Search toolbar search_text = memnew(LineEdit); + search_text->set_keep_editing_on_text_submit(true); vbc_lineedit->add_child(search_text); search_text->set_placeholder(TTR("Find")); search_text->set_tooltip_text(TTR("Find")); diff --git a/scene/gui/line_edit.cpp b/scene/gui/line_edit.cpp index 5bbf712d5c6..926c6ba9e29 100644 --- a/scene/gui/line_edit.cpp +++ b/scene/gui/line_edit.cpp @@ -97,6 +97,14 @@ bool LineEdit::is_editing() const { return editing; } +void LineEdit::set_keep_editing_on_text_submit(bool p_enabled) { + keep_editing_on_text_submit = p_enabled; +} + +bool LineEdit::is_editing_kept_on_text_submit() const { + return keep_editing_on_text_submit; +} + void LineEdit::_close_ime_window() { DisplayServer::WindowID wid = get_window() ? get_window()->get_window_id() : DisplayServer::INVALID_WINDOW_ID; if (wid == DisplayServer::INVALID_WINDOW_ID || !DisplayServer::get_singleton()->has_feature(DisplayServer::FEATURE_IME)) { @@ -771,7 +779,7 @@ void LineEdit::gui_input(const Ref &p_event) { DisplayServer::get_singleton()->virtual_keyboard_hide(); } - if (editing) { + if (editing && !keep_editing_on_text_submit) { unedit(); emit_signal(SNAME("editing_toggled"), false); } @@ -2789,6 +2797,8 @@ void LineEdit::_bind_methods() { ClassDB::bind_method(D_METHOD("edit"), &LineEdit::edit); ClassDB::bind_method(D_METHOD("unedit"), &LineEdit::unedit); ClassDB::bind_method(D_METHOD("is_editing"), &LineEdit::is_editing); + ClassDB::bind_method(D_METHOD("set_keep_editing_on_text_submit", "enable"), &LineEdit::set_keep_editing_on_text_submit); + ClassDB::bind_method(D_METHOD("is_editing_kept_on_text_submit"), &LineEdit::is_editing_kept_on_text_submit); ClassDB::bind_method(D_METHOD("clear"), &LineEdit::clear); ClassDB::bind_method(D_METHOD("select", "from", "to"), &LineEdit::select, DEFVAL(0), DEFVAL(-1)); ClassDB::bind_method(D_METHOD("select_all"), &LineEdit::select_all); @@ -2919,6 +2929,7 @@ void LineEdit::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::INT, "alignment", PROPERTY_HINT_ENUM, "Left,Center,Right,Fill"), "set_horizontal_alignment", "get_horizontal_alignment"); ADD_PROPERTY(PropertyInfo(Variant::INT, "max_length", PROPERTY_HINT_RANGE, "0,1000,1,or_greater"), "set_max_length", "get_max_length"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "editable"), "set_editable", "is_editable"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "keep_editing_on_text_submit"), "set_keep_editing_on_text_submit", "is_editing_kept_on_text_submit"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "expand_to_text_length"), "set_expand_to_text_length_enabled", "is_expand_to_text_length_enabled"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "context_menu_enabled"), "set_context_menu_enabled", "is_context_menu_enabled"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "virtual_keyboard_enabled"), "set_virtual_keyboard_enabled", "is_virtual_keyboard_enabled"); diff --git a/scene/gui/line_edit.h b/scene/gui/line_edit.h index f7d017ab033..b60493b32dc 100644 --- a/scene/gui/line_edit.h +++ b/scene/gui/line_edit.h @@ -87,6 +87,7 @@ private: HorizontalAlignment alignment = HORIZONTAL_ALIGNMENT_LEFT; bool editing = false; + bool keep_editing_on_text_submit = false; bool editable = false; bool pass = false; bool text_changed_dirty = false; @@ -266,6 +267,8 @@ public: void edit(); void unedit(); bool is_editing() const; + void set_keep_editing_on_text_submit(bool p_enabled); + bool is_editing_kept_on_text_submit() const; bool has_ime_text() const; void cancel_ime();