зеркало из https://github.com/mozilla/gecko-dev.git
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
This commit is contained in:
Родитель
202b5561df
Коммит
73f0957834
|
@ -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 {
|
||||
|
|
Загрузка…
Ссылка в новой задаче