From 73f095783402d4bc0da408d6075eee527066b874 Mon Sep 17 00:00:00 2001 From: Emanuel Rylke Date: Sun, 21 Dec 2014 07:24:44 -0700 Subject: [PATCH] servo: Merge #4456 - On left/right keydown place edit_point correctly when there is a selection in TextInput (from ema-fox:textinput_selection); r=jdm Fixes #4447 Source-Repo: https://github.com/servo/servo Source-Revision: bde6c39192faaab3c6e77fd5ea81605673477bac --- servo/components/script/textinput.rs | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/servo/components/script/textinput.rs b/servo/components/script/textinput.rs index 843838933c26..8e984fe60d62 100644 --- a/servo/components/script/textinput.rs +++ b/servo/components/script/textinput.rs @@ -97,15 +97,20 @@ impl TextInput { self.replace_selection(ch.to_string()); } - fn replace_selection(&mut self, insert: String) { - let begin = self.selection_begin.take().unwrap(); + fn get_sorted_selection(&self) -> (TextPoint, TextPoint) { + let begin = self.selection_begin.unwrap(); let end = self.edit_point; - let (begin, end) = if begin.line < end.line || (begin.line == end.line && begin.index < end.index) { + if begin.line < end.line || (begin.line == end.line && begin.index < end.index) { (begin, end) } else { (end, begin) - }; + } + } + + fn replace_selection(&mut self, insert: String) { + let (begin, end) = self.get_sorted_selection(); + self.selection_begin = None; let new_lines = { let prefix = self.lines[begin.line].slice_chars(0, begin.index); @@ -186,7 +191,12 @@ impl TextInput { self.selection_begin = Some(self.edit_point); } } else { - self.selection_begin = None; + if self.selection_begin.is_some() { + let (begin, end) = self.get_sorted_selection(); + self.edit_point = if adjust < 0 {begin} else {end}; + self.selection_begin = None; + return + } } if adjust < 0 {