mirror of
				https://github.com/godotengine/godot.git
				synced 2025-10-31 13:41:03 +00:00 
			
		
		
		
	Merge pull request #100240 from WhalesState/line-edit-focus
`LineEdit` add member `keep_editing_on_text_submit`
This commit is contained in:
		
						commit
						703552c51b
					
				
					 4 changed files with 21 additions and 5 deletions
				
			
		|  | @ -6,7 +6,7 @@ | ||||||
| 	<description> | 	<description> | ||||||
| 		[LineEdit] provides an input field for editing a single line of text. | 		[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. | 		- 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. | 		- 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. | 		- Check [method edit], [method unedit], [method is_editing], and [signal editing_toggled] for more information. | ||||||
| 		[b]Important:[/b] | 		[b]Important:[/b] | ||||||
|  | @ -80,7 +80,7 @@ | ||||||
| 			<return type="void" /> | 			<return type="void" /> | ||||||
| 			<description> | 			<description> | ||||||
| 				Allows entering edit mode whether the [LineEdit] is focused or not. | 				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]. | ||||||
| 			</description> | 			</description> | ||||||
| 		</method> | 		</method> | ||||||
| 		<method name="get_menu" qualifiers="const"> | 		<method name="get_menu" qualifiers="const"> | ||||||
|  | @ -283,6 +283,9 @@ | ||||||
| 			If [code]true[/code], the [LineEdit] doesn't display decoration. | 			If [code]true[/code], the [LineEdit] doesn't display decoration. | ||||||
| 		</member> | 		</member> | ||||||
| 		<member name="focus_mode" type="int" setter="set_focus_mode" getter="get_focus_mode" overrides="Control" enum="Control.FocusMode" default="2" /> | 		<member name="focus_mode" type="int" setter="set_focus_mode" getter="get_focus_mode" overrides="Control" enum="Control.FocusMode" default="2" /> | ||||||
|  | 		<member name="keep_editing_on_text_submit" type="bool" setter="set_keep_editing_on_text_submit" getter="is_editing_kept_on_text_submit" default="false"> | ||||||
|  | 			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]). | ||||||
|  | 		</member> | ||||||
| 		<member name="language" type="String" setter="set_language" getter="get_language" default=""""> | 		<member name="language" type="String" setter="set_language" getter="get_language" default=""""> | ||||||
| 			Language code used for line-breaking and text shaping algorithms. If left empty, current locale is used instead. | 			Language code used for line-breaking and text shaping algorithms. If left empty, current locale is used instead. | ||||||
| 		</member> | 		</member> | ||||||
|  |  | ||||||
|  | @ -675,8 +675,6 @@ void FindReplaceBar::_search_text_submitted(const String &p_text) { | ||||||
| 	} else { | 	} else { | ||||||
| 		search_next(); | 		search_next(); | ||||||
| 	} | 	} | ||||||
| 
 |  | ||||||
| 	callable_mp(search_text, &LineEdit::edit).call_deferred(); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void FindReplaceBar::_replace_text_submitted(const String &p_text) { | void FindReplaceBar::_replace_text_submitted(const String &p_text) { | ||||||
|  | @ -784,6 +782,7 @@ FindReplaceBar::FindReplaceBar() { | ||||||
| 
 | 
 | ||||||
| 	// Search toolbar
 | 	// Search toolbar
 | ||||||
| 	search_text = memnew(LineEdit); | 	search_text = memnew(LineEdit); | ||||||
|  | 	search_text->set_keep_editing_on_text_submit(true); | ||||||
| 	vbc_lineedit->add_child(search_text); | 	vbc_lineedit->add_child(search_text); | ||||||
| 	search_text->set_placeholder(TTR("Find")); | 	search_text->set_placeholder(TTR("Find")); | ||||||
| 	search_text->set_tooltip_text(TTR("Find")); | 	search_text->set_tooltip_text(TTR("Find")); | ||||||
|  |  | ||||||
|  | @ -97,6 +97,14 @@ bool LineEdit::is_editing() const { | ||||||
| 	return editing; | 	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() { | void LineEdit::_close_ime_window() { | ||||||
| 	DisplayServer::WindowID wid = get_window() ? get_window()->get_window_id() : DisplayServer::INVALID_WINDOW_ID; | 	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)) { | 	if (wid == DisplayServer::INVALID_WINDOW_ID || !DisplayServer::get_singleton()->has_feature(DisplayServer::FEATURE_IME)) { | ||||||
|  | @ -771,7 +779,7 @@ void LineEdit::gui_input(const Ref<InputEvent> &p_event) { | ||||||
| 			DisplayServer::get_singleton()->virtual_keyboard_hide(); | 			DisplayServer::get_singleton()->virtual_keyboard_hide(); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		if (editing) { | 		if (editing && !keep_editing_on_text_submit) { | ||||||
| 			unedit(); | 			unedit(); | ||||||
| 			emit_signal(SNAME("editing_toggled"), false); | 			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("edit"), &LineEdit::edit); | ||||||
| 	ClassDB::bind_method(D_METHOD("unedit"), &LineEdit::unedit); | 	ClassDB::bind_method(D_METHOD("unedit"), &LineEdit::unedit); | ||||||
| 	ClassDB::bind_method(D_METHOD("is_editing"), &LineEdit::is_editing); | 	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("clear"), &LineEdit::clear); | ||||||
| 	ClassDB::bind_method(D_METHOD("select", "from", "to"), &LineEdit::select, DEFVAL(0), DEFVAL(-1)); | 	ClassDB::bind_method(D_METHOD("select", "from", "to"), &LineEdit::select, DEFVAL(0), DEFVAL(-1)); | ||||||
| 	ClassDB::bind_method(D_METHOD("select_all"), &LineEdit::select_all); | 	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, "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::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, "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, "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, "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"); | 	ADD_PROPERTY(PropertyInfo(Variant::BOOL, "virtual_keyboard_enabled"), "set_virtual_keyboard_enabled", "is_virtual_keyboard_enabled"); | ||||||
|  |  | ||||||
|  | @ -87,6 +87,7 @@ private: | ||||||
| 	HorizontalAlignment alignment = HORIZONTAL_ALIGNMENT_LEFT; | 	HorizontalAlignment alignment = HORIZONTAL_ALIGNMENT_LEFT; | ||||||
| 
 | 
 | ||||||
| 	bool editing = false; | 	bool editing = false; | ||||||
|  | 	bool keep_editing_on_text_submit = false; | ||||||
| 	bool editable = false; | 	bool editable = false; | ||||||
| 	bool pass = false; | 	bool pass = false; | ||||||
| 	bool text_changed_dirty = false; | 	bool text_changed_dirty = false; | ||||||
|  | @ -266,6 +267,8 @@ public: | ||||||
| 	void edit(); | 	void edit(); | ||||||
| 	void unedit(); | 	void unedit(); | ||||||
| 	bool is_editing() const; | 	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; | 	bool has_ime_text() const; | ||||||
| 	void cancel_ime(); | 	void cancel_ime(); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Rémi Verschelde
						Rémi Verschelde