From c732a779eb33f799470214e271f642611ade71d4 Mon Sep 17 00:00:00 2001 From: Emanuel Rylke Date: Sat, 20 Dec 2014 21:35:54 +0100 Subject: [PATCH] On left/right keydown place edit_point correctly when there is a selection in TextInput Fixes #4447 --- components/script/textinput.rs | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/components/script/textinput.rs b/components/script/textinput.rs index 843838933c26..8e984fe60d62 100644 --- a/components/script/textinput.rs +++ b/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 {