Преглед изворни кода

Fix double text_changed signal when overwriting selection in LineEdit

The part of gui_input that handles unicode wasn't checking
text_changed_dirty before emitting the signal, unlike the rest of the text editing functions.

Fixes #86451

(cherry picked from commit cab48493d848c93ae8fa3b5843a4a24d782a1189)
Mateus Reis пре 1 година
родитељ
комит
e4181c6d48
1 измењених фајлова са 6 додато и 1 уклоњено
  1. 6 1
      scene/gui/line_edit.cpp

+ 6 - 1
scene/gui/line_edit.cpp

@@ -624,7 +624,12 @@ void LineEdit::gui_input(const Ref<InputEvent> &p_event) {
 			int prev_len = text.length();
 			insert_text_at_caret(ucodestr);
 			if (text.length() != prev_len) {
-				_text_changed();
+				if (!text_changed_dirty) {
+					if (is_inside_tree()) {
+						callable_mp(this, &LineEdit::_text_changed).call_deferred();
+					}
+					text_changed_dirty = true;
+				}
 			}
 			accept_event();
 			return;