Fix delete_char when selection range is empty

An empty selection range should be treated the same as no selection.
Fixes browserhtml/browserhtml#930.
This commit is contained in:
Matt Brubeck 2016-03-24 14:22:49 -07:00
parent f2f05869d6
commit db2c1841cb
2 changed files with 9 additions and 2 deletions

View file

@ -20,7 +20,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,
@ -123,7 +123,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]