소스 검색

Merge pull request #45369 from naithar/fix/line_edit_clear-4.0

[4.0] [GUI] Fix LineEdit clearing
Rémi Verschelde 4 년 전
부모
커밋
bdfc7a6b40
2개의 변경된 파일20개의 추가작업 그리고 15개의 파일을 삭제
  1. 17 15
      scene/gui/line_edit.cpp
  2. 3 0
      scene/gui/line_edit.h

+ 17 - 15
scene/gui/line_edit.cpp

@@ -121,13 +121,7 @@ void LineEdit::_gui_input(Ref<InputEvent> p_event) {
 			selection.creating = false;
 			selection.creating = false;
 			selection.doubleclick = false;
 			selection.doubleclick = false;
 
 
-			if (DisplayServer::get_singleton()->has_feature(DisplayServer::FEATURE_VIRTUAL_KEYBOARD) && virtual_keyboard_enabled) {
-				if (selection.enabled) {
-					DisplayServer::get_singleton()->virtual_keyboard_show(text, get_global_rect(), false, max_length, selection.begin, selection.end);
-				} else {
-					DisplayServer::get_singleton()->virtual_keyboard_show(text, get_global_rect(), false, max_length, cursor_pos);
-				}
-			}
+			show_virtual_keyboard();
 		}
 		}
 
 
 		update();
 		update();
@@ -953,14 +947,7 @@ void LineEdit::_notification(int p_what) {
 				DisplayServer::get_singleton()->window_set_ime_position(get_global_position() + cursor_pos, get_viewport()->get_window_id());
 				DisplayServer::get_singleton()->window_set_ime_position(get_global_position() + cursor_pos, get_viewport()->get_window_id());
 			}
 			}
 
 
-			if (DisplayServer::get_singleton()->has_feature(DisplayServer::FEATURE_VIRTUAL_KEYBOARD) && virtual_keyboard_enabled) {
-				if (selection.enabled) {
-					DisplayServer::get_singleton()->virtual_keyboard_show(text, get_global_rect(), false, max_length, selection.begin, selection.end);
-				} else {
-					DisplayServer::get_singleton()->virtual_keyboard_show(text, get_global_rect(), false, max_length, cursor_pos);
-				}
-			}
-
+			show_virtual_keyboard();
 		} break;
 		} break;
 		case NOTIFICATION_FOCUS_EXIT: {
 		case NOTIFICATION_FOCUS_EXIT: {
 			if (caret_blink_enabled && !caret_force_displayed) {
 			if (caret_blink_enabled && !caret_force_displayed) {
@@ -1407,6 +1394,21 @@ Array LineEdit::get_structured_text_bidi_override_options() const {
 void LineEdit::clear() {
 void LineEdit::clear() {
 	clear_internal();
 	clear_internal();
 	_text_changed();
 	_text_changed();
+
+	// This should reset virtual keyboard state if needed.
+	if (has_focus()) {
+		show_virtual_keyboard();
+	}
+}
+
+void LineEdit::show_virtual_keyboard() {
+	if (DisplayServer::get_singleton()->has_feature(DisplayServer::FEATURE_VIRTUAL_KEYBOARD) && virtual_keyboard_enabled) {
+		if (selection.enabled) {
+			DisplayServer::get_singleton()->virtual_keyboard_show(text, get_global_rect(), false, max_length, selection.begin, selection.end);
+		} else {
+			DisplayServer::get_singleton()->virtual_keyboard_show(text, get_global_rect(), false, max_length, cursor_pos);
+		}
+	}
 }
 }
 
 
 String LineEdit::get_text() const {
 String LineEdit::get_text() const {

+ 3 - 0
scene/gui/line_edit.h

@@ -306,6 +306,9 @@ public:
 	Ref<Texture2D> get_right_icon();
 	Ref<Texture2D> get_right_icon();
 
 
 	virtual bool is_text_field() const override;
 	virtual bool is_text_field() const override;
+
+	void show_virtual_keyboard();
+
 	LineEdit();
 	LineEdit();
 	~LineEdit();
 	~LineEdit();
 };
 };