Fix shrink_selection
with multiple cursors. (#6093)
* Fix #6092 Cause were some incorrect assumptions that missed an edge case in the `Selection.contains()` calculation. Tests were added accordingly. * Fix Selection.contains() edge-case handling. Removing the len check short-circuit was the only thing needed as pointed out by @dead10ck.
This commit is contained in:
parent
aabc8af95d
commit
2cf4ce2356
2 changed files with 6 additions and 6 deletions
|
@ -625,11 +625,6 @@ impl Selection {
|
||||||
|
|
||||||
// returns true if self ⊇ other
|
// returns true if self ⊇ other
|
||||||
pub fn contains(&self, other: &Selection) -> bool {
|
pub fn contains(&self, other: &Selection) -> bool {
|
||||||
// can't contain other if it is larger
|
|
||||||
if other.len() > self.len() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
let (mut iter_self, mut iter_other) = (self.iter(), other.iter());
|
let (mut iter_self, mut iter_other) = (self.iter(), other.iter());
|
||||||
let (mut ele_self, mut ele_other) = (iter_self.next(), iter_other.next());
|
let (mut ele_self, mut ele_other) = (iter_self.next(), iter_other.next());
|
||||||
|
|
||||||
|
@ -1240,5 +1235,11 @@ mod test {
|
||||||
vec!((3, 4), (7, 9))
|
vec!((3, 4), (7, 9))
|
||||||
));
|
));
|
||||||
assert!(!contains(vec!((1, 1), (5, 6)), vec!((1, 6))));
|
assert!(!contains(vec!((1, 1), (5, 6)), vec!((1, 6))));
|
||||||
|
|
||||||
|
// multiple ranges of other are all contained in some ranges of self,
|
||||||
|
assert!(contains(
|
||||||
|
vec!((1, 4), (7, 10)),
|
||||||
|
vec!((1, 2), (3, 4), (7, 9))
|
||||||
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4371,7 +4371,6 @@ fn shrink_selection(cx: &mut Context) {
|
||||||
// try to restore previous selection
|
// try to restore previous selection
|
||||||
if let Some(prev_selection) = view.object_selections.pop() {
|
if let Some(prev_selection) = view.object_selections.pop() {
|
||||||
if current_selection.contains(&prev_selection) {
|
if current_selection.contains(&prev_selection) {
|
||||||
// allow shrinking the selection only if current selection contains the previous object selection
|
|
||||||
doc.set_selection(view.id, prev_selection);
|
doc.set_selection(view.id, prev_selection);
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Add table
Reference in a new issue