Skip to content

Commit

Permalink
Merge pull request #2278 from iced-rs/prioritize-text-insertion
Browse files Browse the repository at this point in the history
Prioritize text insertion in `TextInput` and `TextEditor`
  • Loading branch information
hecrj authored Feb 21, 2024
2 parents 56ac21c + 4742f3f commit 6c00e61
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 30 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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...

Expand Down
15 changes: 8 additions & 7 deletions widget/src/text_editor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down Expand Up @@ -732,13 +739,7 @@ impl Update {
{
Some(Self::Paste)
}
_ => {
let text = text?;

edit(Edit::Insert(
text.chars().next().unwrap_or_default(),
))
}
_ => None,
}
}
_ => None,
Expand Down
45 changes: 22 additions & 23 deletions widget/src/text_input.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit 6c00e61

Please sign in to comment.