diff options
author | 2025-02-03 00:51:57 +0100 | |
---|---|---|
committer | 2025-02-03 00:51:57 +0100 | |
commit | d28af5739bfaafa141dc8071a0c910e8693f3b3c (patch) | |
tree | df302a880f8b47123a0f2d2854ec36e1e64242d5 /widget/src/text_input.rs | |
parent | db990b77e4aa8d001c774703301342c951d6caaa (diff) | |
download | iced-d28af5739bfaafa141dc8071a0c910e8693f3b3c.tar.gz iced-d28af5739bfaafa141dc8071a0c910e8693f3b3c.tar.bz2 iced-d28af5739bfaafa141dc8071a0c910e8693f3b3c.zip |
Track pre-edits separately from focus in text inputs
Diffstat (limited to '')
-rw-r--r-- | widget/src/text_input.rs | 19 |
1 files changed, 7 insertions, 12 deletions
diff --git a/widget/src/text_input.rs b/widget/src/text_input.rs index d0e93927..58bbc0d6 100644 --- a/widget/src/text_input.rs +++ b/widget/src/text_input.rs @@ -400,14 +400,13 @@ where ) -> InputMethod<&'b str> { let Some(Focus { is_window_focused: true, - is_ime_open, .. }) = &state.is_focused else { return InputMethod::Disabled; }; - let Some(preedit) = is_ime_open else { + let Some(preedit) = &state.is_ime_open else { return InputMethod::Allowed; }; @@ -729,7 +728,6 @@ where updated_at: now, now, is_window_focused: true, - is_ime_open: None, }) } else { None @@ -1257,17 +1255,15 @@ where input_method::Event::Opened | input_method::Event::Closed => { let state = state::<Renderer>(tree); - if let Some(focus) = &mut state.is_focused { - focus.is_ime_open = - matches!(event, input_method::Event::Opened) - .then(String::new); - } + state.is_ime_open = + matches!(event, input_method::Event::Opened) + .then(String::new); } input_method::Event::Preedit(content, _range) => { let state = state::<Renderer>(tree); - if let Some(focus) = &mut state.is_focused { - focus.is_ime_open = Some(content.to_owned()); + if state.is_focused.is_some() { + state.is_ime_open = Some(content.to_owned()); } } input_method::Event::Commit(text) => { @@ -1519,6 +1515,7 @@ pub struct State<P: text::Paragraph> { placeholder: paragraph::Plain<P>, icon: paragraph::Plain<P>, is_focused: Option<Focus>, + is_ime_open: Option<String>, is_dragging: bool, is_pasting: Option<Value>, last_click: Option<mouse::Click>, @@ -1538,7 +1535,6 @@ struct Focus { updated_at: Instant, now: Instant, is_window_focused: bool, - is_ime_open: Option<String>, } impl<P: text::Paragraph> State<P> { @@ -1565,7 +1561,6 @@ impl<P: text::Paragraph> State<P> { updated_at: now, now, is_window_focused: true, - is_ime_open: None, }); self.move_cursor_to_end(); |