From b1486720e9c160286fb0644e559cb9bd0d207281 Mon Sep 17 00:00:00 2001 From: Avi Weinstock Date: Thu, 11 Jun 2015 12:50:40 -0400 Subject: [PATCH] Remove some unnecessary allocations in text input handling. --- components/script/textinput.rs | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/components/script/textinput.rs b/components/script/textinput.rs index 59d6752daeff..8d5668e1d04b 100644 --- a/components/script/textinput.rs +++ b/components/script/textinput.rs @@ -134,19 +134,15 @@ impl TextInput { /// 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>(&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 TextInput { }, 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) => {