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
}
#[derive(JSTraceable, Copy, Clone, HeapSizeOf)]
#[derive(JSTraceable, Copy, Clone, HeapSizeOf, PartialEq)]
pub struct TextPoint {
/// 0-based line number
pub line: usize,
@ -124,7 +124,7 @@ impl<T: ClipboardProvider> TextInput<T> {
/// Remove a character at the current editing point
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.replace_selection(DOMString::new());

View file

@ -150,6 +150,13 @@ fn test_textinput_delete_char() {
textinput.delete_char(Direction::Forward);
// Not splitting surrogate pairs.
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]