diff options
Diffstat (limited to 'components/script/textinput.rs')
-rw-r--r-- | components/script/textinput.rs | 16 |
1 files changed, 6 insertions, 10 deletions
diff --git a/components/script/textinput.rs b/components/script/textinput.rs index 59d6752daef..8d5668e1d04 100644 --- a/components/script/textinput.rs +++ b/components/script/textinput.rs @@ -134,19 +134,15 @@ impl<T: ClipboardProvider> TextInput<T> { /// Insert a character at the current editing point pub fn insert_char(&mut self, ch: char) { - if self.selection_begin.is_none() { - self.selection_begin = Some(self.edit_point); - } - self.replace_selection(ch.to_string()); + self.insert_string(ch.to_string()); } /// Insert a string at the current editing point - fn insert_string(&mut self, s: &str) { - // it looks like this could be made performant by avoiding some redundant - // selection-related checks, but use the simple implementation for now - for ch in s.chars() { - self.insert_char(ch); + fn insert_string<S: Into<String>>(&mut self, s: S) { + if self.selection_begin.is_none() { + self.selection_begin = Some(self.edit_point); } + self.replace_selection(s.into()); } pub fn get_sorted_selection(&self) -> (TextPoint, TextPoint) { @@ -316,7 +312,7 @@ impl<T: ClipboardProvider> TextInput<T> { }, Key::V if is_control_key(mods) => { let contents = self.clipboard_provider.clipboard_contents(); - self.insert_string(&contents); + self.insert_string(contents); KeyReaction::DispatchInput }, _ if is_printable_key(key) => { |