diff --git a/scene/gui/line_edit.cpp b/scene/gui/line_edit.cpp index b4cad350e21..969e2fd3a35 100644 --- a/scene/gui/line_edit.cpp +++ b/scene/gui/line_edit.cpp @@ -1377,8 +1377,14 @@ void LineEdit::_notification(int p_what) { case MainLoop::NOTIFICATION_OS_IME_UPDATE: { if (editing) { - ime_text = DisplayServer::get_singleton()->ime_get_text(); - ime_selection = DisplayServer::get_singleton()->ime_get_selection(); + const String &new_ime_text = DisplayServer::get_singleton()->ime_get_text(); + const Vector2i &new_ime_selection = DisplayServer::get_singleton()->ime_get_selection(); + if (ime_text == new_ime_text && ime_selection == new_ime_selection) { + break; + } + + ime_text = new_ime_text; + ime_selection = new_ime_selection; if (!ime_text.is_empty()) { selection_delete(); diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp index c2c01326378..ad220231500 100644 --- a/scene/gui/text_edit.cpp +++ b/scene/gui/text_edit.cpp @@ -1633,9 +1633,15 @@ void TextEdit::_notification(int p_what) { case MainLoop::NOTIFICATION_OS_IME_UPDATE: { if (has_focus()) { + const String &new_ime_text = DisplayServer::get_singleton()->ime_get_text(); + const Vector2i &new_ime_selection = DisplayServer::get_singleton()->ime_get_selection(); + if (ime_text == new_ime_text && ime_selection == new_ime_selection) { + break; + } + bool had_ime_text = has_ime_text(); - ime_text = DisplayServer::get_singleton()->ime_get_text(); - ime_selection = DisplayServer::get_singleton()->ime_get_selection(); + ime_text = new_ime_text; + ime_selection = new_ime_selection; if (!had_ime_text && has_ime_text()) { _cancel_drag_and_drop_text();