diff --git a/CHANGELOG.md b/CHANGELOG.md index e8a036385f..75ccf9888c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Documentation for `horizontal_space` and `vertical_space` helpers. [#2265](https://github.com/iced-rs/iced/pull/2265) - WebAssembly platform. [#2271](https://github.com/iced-rs/iced/pull/2271) - Decouple `Key` from `keyboard::Modifiers` and apply them to `text` in `KeyboardInput`. [#2238](https://github.com/iced-rs/iced/pull/2238) +- Text insertion not being prioritized in `TextInput` and `TextEditor`. [#2278](https://github.com/iced-rs/iced/pull/2278) Many thanks to... diff --git a/widget/src/text_editor.rs b/widget/src/text_editor.rs index 50f7fabbbe..79432fe948 100644 --- a/widget/src/text_editor.rs +++ b/widget/src/text_editor.rs @@ -686,6 +686,13 @@ impl Update { text, .. } if state.is_focused => { + if let Some(text) = text { + if let Some(c) = text.chars().find(|c| !c.is_control()) + { + return edit(Edit::Insert(c)); + } + } + if let keyboard::Key::Named(named_key) = key.as_ref() { if let Some(motion) = motion(named_key) { let motion = if platform::is_jump_modifier_pressed( @@ -732,13 +739,7 @@ impl Update { { Some(Self::Paste) } - _ => { - let text = text?; - - edit(Edit::Insert( - text.chars().next().unwrap_or_default(), - )) - } + _ => None, } } _ => None, diff --git a/widget/src/text_input.rs b/widget/src/text_input.rs index 72ed1ef388..73346b3dd2 100644 --- a/widget/src/text_input.rs +++ b/widget/src/text_input.rs @@ -762,6 +762,27 @@ where let modifiers = state.keyboard_modifiers; focus.updated_at = Instant::now(); + if let Some(text) = text { + state.is_pasting = None; + + let c = text.chars().next().unwrap_or_default(); + + if !c.is_control() { + let mut editor = Editor::new(value, &mut state.cursor); + + editor.insert(c); + + let message = (on_input)(editor.contents()); + shell.publish(message); + + focus.updated_at = Instant::now(); + + update_cache(state, value); + + return event::Status::Captured; + } + } + match key.as_ref() { keyboard::Key::Named(key::Named::Enter) => { if let Some(on_submit) = on_submit.clone() { @@ -944,29 +965,7 @@ where ) => { return event::Status::Ignored; } - _ => { - if let Some(text) = text { - state.is_pasting = None; - - let c = text.chars().next().unwrap_or_default(); - - if !c.is_control() { - let mut editor = - Editor::new(value, &mut state.cursor); - - editor.insert(c); - - let message = (on_input)(editor.contents()); - shell.publish(message); - - focus.updated_at = Instant::now(); - - update_cache(state, value); - - return event::Status::Captured; - } - } - } + _ => {} } return event::Status::Captured;