Auto merge of #10182 - mbrubeck:delete_char, r=jdm

Fix delete_char when selection range is empty

An empty selection range should be treated the same as no selection.  Fixes browserhtml/browserhtml#930.

r? @jdm

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="35" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/10182)
<!-- Reviewable:end -->
This commit is contained in:
bors-servo 2016-03-28 20:43:11 +05:30
commit db95de6e58
2 changed files with 9 additions and 2 deletions

View file

@ -21,7 +21,7 @@ pub enum Selection {
NotSelected NotSelected
} }
#[derive(JSTraceable, Copy, Clone, HeapSizeOf)] #[derive(JSTraceable, Copy, Clone, HeapSizeOf, PartialEq)]
pub struct TextPoint { pub struct TextPoint {
/// 0-based line number /// 0-based line number
pub line: usize, pub line: usize,
@ -124,7 +124,7 @@ impl<T: ClipboardProvider> TextInput<T> {
/// Remove a character at the current editing point /// Remove a character at the current editing point
pub fn delete_char(&mut self, dir: Direction) { pub fn delete_char(&mut self, dir: Direction) {
if self.selection_begin.is_none() { if self.selection_begin.is_none() || self.selection_begin == Some(self.edit_point) {
self.adjust_horizontal_by_one(dir, Selection::Selected); self.adjust_horizontal_by_one(dir, Selection::Selected);
} }
self.replace_selection(DOMString::new()); self.replace_selection(DOMString::new());

View file

@ -150,6 +150,13 @@ fn test_textinput_delete_char() {
textinput.delete_char(Direction::Forward); textinput.delete_char(Direction::Forward);
// Not splitting surrogate pairs. // Not splitting surrogate pairs.
assert_eq!(textinput.get_content(), "ab"); assert_eq!(textinput.get_content(), "ab");
let mut textinput = text_input(Lines::Single, "abcdefg");
textinput.adjust_horizontal(2, Selection::NotSelected);
// Set an empty selection range.
textinput.selection_begin = Some(textinput.edit_point);
textinput.delete_char(Direction::Backward);
assert_eq!(textinput.get_content(), "acdefg");
} }
#[test] #[test]