Prioritize text insertion in TextInput and TextEditor
This commit is contained in:
parent
56ac21cacb
commit
680e8425c3
2 changed files with 31 additions and 30 deletions
|
|
@ -686,6 +686,14 @@ impl Update {
|
||||||
text,
|
text,
|
||||||
..
|
..
|
||||||
} if state.is_focused => {
|
} if state.is_focused => {
|
||||||
|
if let Some(text) = text {
|
||||||
|
if let Some(c) =
|
||||||
|
text.chars().filter(|c| !c.is_control()).next()
|
||||||
|
{
|
||||||
|
return edit(Edit::Insert(c));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if let keyboard::Key::Named(named_key) = key.as_ref() {
|
if let keyboard::Key::Named(named_key) = key.as_ref() {
|
||||||
if let Some(motion) = motion(named_key) {
|
if let Some(motion) = motion(named_key) {
|
||||||
let motion = if platform::is_jump_modifier_pressed(
|
let motion = if platform::is_jump_modifier_pressed(
|
||||||
|
|
@ -732,13 +740,7 @@ impl Update {
|
||||||
{
|
{
|
||||||
Some(Self::Paste)
|
Some(Self::Paste)
|
||||||
}
|
}
|
||||||
_ => {
|
_ => None,
|
||||||
let text = text?;
|
|
||||||
|
|
||||||
edit(Edit::Insert(
|
|
||||||
text.chars().next().unwrap_or_default(),
|
|
||||||
))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_ => None,
|
_ => None,
|
||||||
|
|
|
||||||
|
|
@ -762,6 +762,27 @@ where
|
||||||
let modifiers = state.keyboard_modifiers;
|
let modifiers = state.keyboard_modifiers;
|
||||||
focus.updated_at = Instant::now();
|
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() {
|
match key.as_ref() {
|
||||||
keyboard::Key::Named(key::Named::Enter) => {
|
keyboard::Key::Named(key::Named::Enter) => {
|
||||||
if let Some(on_submit) = on_submit.clone() {
|
if let Some(on_submit) = on_submit.clone() {
|
||||||
|
|
@ -944,29 +965,7 @@ where
|
||||||
) => {
|
) => {
|
||||||
return event::Status::Ignored;
|
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;
|
return event::Status::Captured;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue