Fix: Ensures correct IME behavior when the text input area gains or loses focus. (#4896)
Fix: Ensures correct IME behavior when the text input area gains or loses focus. Fix: Handling `state.ime_enabled` in multiple `TextEdit`. Fix: A symptom of characters being copied when there are multiple TextEdits. * Related #4137 * Related #4358 * Closes #4374 * Related #4436 * Related #4794 * Related #4908 * Related #5008 Fix Issues: When focus is moved elsewhere, you must set `state.ime_enabled = false`, otherwise the IME will have problems when focus returns. Fix Issues: A symptom of characters being copied when there are multiple TextEdits. Deletes all current `IME events`, preventing them from being copied to `other TextEdits`, without saving the `TextEdit ID`, ( Related Issues: Some `LINUX` seem to trigger an IME enable event on startup. So, when we gained focus, we do `state.ime_enabled = false`. )
This commit is contained in:
parent
a59f9ed279
commit
8e5492b6e8
|
|
@ -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 {
|
||||
|
|
|
|||
Loading…
Reference in New Issue