diff options
Diffstat (limited to '')
| -rw-r--r-- | widget/src/canvas/event.rs | 2 | ||||
| -rw-r--r-- | widget/src/shader/event.rs | 2 | ||||
| -rw-r--r-- | widget/src/text_editor.rs | 12 | ||||
| -rw-r--r-- | widget/src/text_input.rs | 56 | 
4 files changed, 37 insertions, 35 deletions
| diff --git a/widget/src/canvas/event.rs b/widget/src/canvas/event.rs index 1288365f..a8eb47f7 100644 --- a/widget/src/canvas/event.rs +++ b/widget/src/canvas/event.rs @@ -8,7 +8,7 @@ pub use crate::core::event::Status;  /// A [`Canvas`] event.  ///  /// [`Canvas`]: crate::Canvas -#[derive(Debug, Clone, Copy, PartialEq)] +#[derive(Debug, Clone, PartialEq)]  pub enum Event {      /// A mouse event.      Mouse(mouse::Event), diff --git a/widget/src/shader/event.rs b/widget/src/shader/event.rs index 1cc484fb..005c8725 100644 --- a/widget/src/shader/event.rs +++ b/widget/src/shader/event.rs @@ -9,7 +9,7 @@ pub use crate::core::event::Status;  /// A [`Shader`] event.  ///  /// [`Shader`]: crate::Shader -#[derive(Debug, Clone, Copy, PartialEq)] +#[derive(Debug, Clone, PartialEq)]  pub enum Event {      /// A mouse event.      Mouse(mouse::Event), diff --git a/widget/src/text_editor.rs b/widget/src/text_editor.rs index a2a186f0..3c0a1806 100644 --- a/widget/src/text_editor.rs +++ b/widget/src/text_editor.rs @@ -649,6 +649,7 @@ impl Update {                  keyboard::Event::KeyPressed {                      key_code,                      modifiers, +                    text,                  } if state.is_focused => {                      if let Some(motion) = motion(key_code) {                          let motion = @@ -678,12 +679,15 @@ impl Update {                          {                              Some(Self::Paste)                          } -                        _ => None, +                        _ => { +                            let text = text?; + +                            edit(Edit::Insert( +                                text.chars().next().unwrap_or_default(), +                            )) +                        }                      }                  } -                keyboard::Event::CharacterReceived(c) if state.is_focused => { -                    edit(Edit::Insert(c)) -                }                  _ => None,              },              _ => None, diff --git a/widget/src/text_input.rs b/widget/src/text_input.rs index 65d3e1eb..8ba4bd71 100644 --- a/widget/src/text_input.rs +++ b/widget/src/text_input.rs @@ -752,34 +752,9 @@ where                  return event::Status::Captured;              }          } -        Event::Keyboard(keyboard::Event::CharacterReceived(c)) => { -            let state = state(); - -            if let Some(focus) = &mut state.is_focused { -                let Some(on_input) = on_input else { -                    return event::Status::Ignored; -                }; - -                if state.is_pasting.is_none() -                    && !state.keyboard_modifiers.command() -                    && !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; -                } -            } -        } -        Event::Keyboard(keyboard::Event::KeyPressed { key_code, .. }) => { +        Event::Keyboard(keyboard::Event::KeyPressed { +            key_code, text, .. +        }) => {              let state = state();              if let Some(focus) = &mut state.is_focused { @@ -971,7 +946,30 @@ where                      | keyboard::KeyCode::Down => {                          return event::Status::Ignored;                      } -                    _ => {} +                    _ => { +                        if let Some(text) = text { +                            let c = text.chars().next().unwrap_or_default(); + +                            if state.is_pasting.is_none() +                                && !state.keyboard_modifiers.command() +                                && !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; | 
