diff options
Diffstat (limited to '')
| -rw-r--r-- | widget/src/text_editor.rs | 27 | ||||
| -rw-r--r-- | widget/src/text_input.rs | 13 | 
2 files changed, 27 insertions, 13 deletions
| diff --git a/widget/src/text_editor.rs b/widget/src/text_editor.rs index 72e15c28..26d05ccd 100644 --- a/widget/src/text_editor.rs +++ b/widget/src/text_editor.rs @@ -55,6 +55,7 @@ use std::borrow::Cow;  use std::cell::RefCell;  use std::fmt;  use std::ops::DerefMut; +use std::ops::Range;  use std::sync::Arc;  pub use text::editor::{Action, Edit, Line, LineEnding, Motion}; @@ -365,7 +366,7 @@ where          InputMethod::Open {              position,              purpose: input_method::Purpose::Normal, -            preedit: Some(preedit), +            preedit: Some(preedit.as_ref()),          }      }  } @@ -496,7 +497,7 @@ where  #[derive(Debug)]  pub struct State<Highlighter: text::Highlighter> {      focus: Option<Focus>, -    preedit: Option<String>, +    preedit: Option<input_method::Preedit>,      last_click: Option<mouse::Click>,      drag_click: Option<mouse::click::Kind>,      partial_scroll: f32, @@ -751,11 +752,15 @@ where                  }                  Update::InputMethod(update) => match update {                      Ime::Toggle(is_open) => { -                        state.preedit = is_open.then(String::new); +                        state.preedit = +                            is_open.then(input_method::Preedit::new);                      } -                    Ime::Preedit(text) => { +                    Ime::Preedit { content, selection } => {                          if state.focus.is_some() { -                            state.preedit = Some(text); +                            state.preedit = Some(input_method::Preedit { +                                content, +                                selection, +                            });                          }                      }                      Ime::Commit(text) => { @@ -1202,7 +1207,10 @@ enum Update<Message> {  enum Ime {      Toggle(bool), -    Preedit(String), +    Preedit { +        content: String, +        selection: Option<Range<usize>>, +    },      Commit(String),  } @@ -1272,8 +1280,11 @@ impl<Message> Update<Message> {                          input_method::Event::Opened                      ))))                  } -                input_method::Event::Preedit(content, _range) => { -                    Some(Update::InputMethod(Ime::Preedit(content))) +                input_method::Event::Preedit(content, selection) => { +                    Some(Update::InputMethod(Ime::Preedit { +                        content, +                        selection, +                    }))                  }                  input_method::Event::Commit(content) => {                      Some(Update::InputMethod(Ime::Commit(content))) diff --git a/widget/src/text_input.rs b/widget/src/text_input.rs index a1a1d3b5..4c9e46c1 100644 --- a/widget/src/text_input.rs +++ b/widget/src/text_input.rs @@ -440,7 +440,7 @@ where              } else {                  input_method::Purpose::Normal              }, -            preedit: Some(preedit), +            preedit: Some(preedit.as_ref()),          }      } @@ -1256,13 +1256,16 @@ where                      state.is_ime_open =                          matches!(event, input_method::Event::Opened) -                            .then(String::new); +                            .then(input_method::Preedit::new);                  } -                input_method::Event::Preedit(content, _range) => { +                input_method::Event::Preedit(content, selection) => {                      let state = state::<Renderer>(tree);                      if state.is_focused.is_some() { -                        state.is_ime_open = Some(content.to_owned()); +                        state.is_ime_open = Some(input_method::Preedit { +                            content: content.to_owned(), +                            selection: selection.clone(), +                        });                      }                  }                  input_method::Event::Commit(text) => { @@ -1514,7 +1517,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_ime_open: Option<input_method::Preedit>,      is_dragging: bool,      is_pasting: Option<Value>,      last_click: Option<mouse::Click>, | 
