diff options
| author | 2019-12-21 05:49:09 +0100 | |
|---|---|---|
| committer | 2019-12-21 05:49:09 +0100 | |
| commit | c04dff99da3c524de6885d3f1ce13b5e24cf5e57 (patch) | |
| tree | d686f2e738da6d02048a4539c4b6d303e173906e /native/src | |
| parent | 938177e22554ec136b85347a373d6d7ac195030e (diff) | |
| download | iced-c04dff99da3c524de6885d3f1ce13b5e24cf5e57.tar.gz iced-c04dff99da3c524de6885d3f1ce13b5e24cf5e57.tar.bz2 iced-c04dff99da3c524de6885d3f1ce13b5e24cf5e57.zip | |
Fix sneaky overflow in `TextInput` when pasting
Diffstat (limited to '')
| -rw-r--r-- | native/src/widget/text_input.rs | 19 | 
1 files changed, 16 insertions, 3 deletions
| diff --git a/native/src/widget/text_input.rs b/native/src/widget/text_input.rs index a6ddeb5c..1d1c32a2 100644 --- a/native/src/widget/text_input.rs +++ b/native/src/widget/text_input.rs @@ -310,7 +310,10 @@ where                              self.value                                  .insert_many(cursor_position, content.clone()); -                            self.state.cursor_position += content.len(); +                            self.state.move_cursor_right_by_amount( +                                &self.value, +                                content.len(), +                            );                              self.state.is_pasting = Some(content);                              let message = @@ -461,6 +464,7 @@ pub struct State {      is_focused: bool,      is_pasting: Option<Value>,      cursor_position: usize, +    // TODO: Add stateful horizontal scrolling offset  }  impl State { @@ -513,10 +517,19 @@ impl State {      ///      /// [`TextInput`]: struct.TextInput.html      pub(crate) fn move_cursor_right(&mut self, value: &Value) { +        self.move_cursor_right_by_amount(value, 1) +    } + +    pub(crate) fn move_cursor_right_by_amount( +        &mut self, +        value: &Value, +        amount: usize, +    ) {          let current = self.cursor_position(value); +        let new_position = current.saturating_add(amount); -        if current < value.len() { -            self.cursor_position = current + 1; +        if new_position < value.len() + 1 { +            self.cursor_position = new_position;          }      } | 
