aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/textinput.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/textinput.rs')
-rw-r--r--components/script/textinput.rs23
1 files changed, 22 insertions, 1 deletions
diff --git a/components/script/textinput.rs b/components/script/textinput.rs
index 2f36b08dbd9..54bc7131f48 100644
--- a/components/script/textinput.rs
+++ b/components/script/textinput.rs
@@ -442,12 +442,23 @@ impl<T: ClipboardProvider> TextInput<T> {
let target_line: isize = self.edit_point.line as isize + adjust;
if target_line < 0 {
- self.edit_point.index = 0;
self.edit_point.line = 0;
+ self.edit_point.index = 0;
+ if self.selection_origin.is_some() &&
+ (self.selection_direction == SelectionDirection::None ||
+ self.selection_direction == SelectionDirection::Forward)
+ {
+ self.selection_origin = Some(TextPoint { line: 0, index: 0 });
+ }
return;
} else if target_line as usize >= self.lines.len() {
self.edit_point.line = self.lines.len() - 1;
self.edit_point.index = self.current_line_length();
+ if self.selection_origin.is_some() &&
+ (self.selection_direction == SelectionDirection::Backward)
+ {
+ self.selection_origin = Some(self.edit_point);
+ }
return;
}
@@ -456,6 +467,16 @@ impl<T: ClipboardProvider> TextInput<T> {
.count();
self.edit_point.line = target_line as usize;
self.edit_point.index = len_of_first_n_chars(&self.lines[self.edit_point.line], col);
+ if let Some(origin) = self.selection_origin {
+ if ((self.selection_direction == SelectionDirection::None ||
+ self.selection_direction == SelectionDirection::Forward) &&
+ self.edit_point <= origin) ||
+ (self.selection_direction == SelectionDirection::Backward &&
+ origin <= self.edit_point)
+ {
+ self.selection_origin = Some(self.edit_point);
+ }
+ }
self.assert_ok_selection();
}