diff --git a/crates/egui/src/widgets/text_edit/builder.rs b/crates/egui/src/widgets/text_edit/builder.rs index 8763bd1a3ae..00d7d6e3eff 100644 --- a/crates/egui/src/widgets/text_edit/builder.rs +++ b/crates/egui/src/widgets/text_edit/builder.rs @@ -745,6 +745,16 @@ impl<'t> TextEdit<'t> { } } + // Ensures correct IME behavior when the text input area gains or loses focus. + if state.ime_enabled && (response.gained_focus() || response.lost_focus()) { + state.ime_enabled = false; + if let Some(mut ccursor_range) = state.cursor.char_range() { + ccursor_range.secondary.index = ccursor_range.primary.index; + state.cursor.set_char_range(Some(ccursor_range)); + } + ui.input_mut(|i| i.events.retain(|e| !matches!(e, Event::Ime(_)))); + } + state.clone().store(ui.ctx(), id); if response.changed {