Fix shift click sorting when items sorted by name, fixes #1135
This commit is contained in:
parent
0c081b79fd
commit
e2c446b73a
1 changed files with 51 additions and 64 deletions
21
src/tab.rs
21
src/tab.rs
|
|
@ -3007,20 +3007,8 @@ impl Tab {
|
||||||
.select_range
|
.select_range
|
||||||
.map_or(Some((click_i, click_i)), |r| Some((r.0, click_i)));
|
.map_or(Some((click_i, click_i)), |r| Some((r.0, click_i)));
|
||||||
if let Some(range) = self.select_range {
|
if let Some(range) = self.select_range {
|
||||||
let min = range.0.min(range.1);
|
let range_min = range.0.min(range.1);
|
||||||
let max = range.0.max(range.1);
|
let range_max = range.0.max(range.1);
|
||||||
let (sort_name, sort_direction, _) = self.sort_options();
|
|
||||||
//TODO: this assumes the default sort order!
|
|
||||||
if sort_name == HeadingOptions::Name && sort_direction {
|
|
||||||
// A default/unsorted tab's view is consistent with how the
|
|
||||||
// Items are laid out internally (items_opt), so Items can be
|
|
||||||
// linearly selected
|
|
||||||
if let Some(ref mut items) = self.items_opt {
|
|
||||||
for item in items.iter_mut().skip(min).take(max - min + 1) {
|
|
||||||
item.selected = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// A sorted tab's items can't be linearly selected
|
// A sorted tab's items can't be linearly selected
|
||||||
// Let's say we have:
|
// Let's say we have:
|
||||||
// index | file
|
// index | file
|
||||||
|
|
@ -3052,13 +3040,13 @@ impl Tab {
|
||||||
// a sorted tab.
|
// a sorted tab.
|
||||||
let min = indices
|
let min = indices
|
||||||
.iter()
|
.iter()
|
||||||
.position(|&offset| offset == min)
|
.position(|&offset| offset == range_min)
|
||||||
.unwrap_or_default();
|
.unwrap_or_default();
|
||||||
// We can't skip `min_real` elements here because the index of
|
// We can't skip `min_real` elements here because the index of
|
||||||
// `max` may actually be before `min` in a sorted tab
|
// `max` may actually be before `min` in a sorted tab
|
||||||
let max = indices
|
let max = indices
|
||||||
.iter()
|
.iter()
|
||||||
.position(|&offset| offset == max)
|
.position(|&offset| offset == range_max)
|
||||||
.unwrap_or(indices.len());
|
.unwrap_or(indices.len());
|
||||||
let min_real = min.min(max);
|
let min_real = min.min(max);
|
||||||
let max_real = max.max(min);
|
let max_real = max.max(min);
|
||||||
|
|
@ -3075,7 +3063,6 @@ impl Tab {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
self.clicked = click_i_opt;
|
self.clicked = click_i_opt;
|
||||||
self.select_focus = click_i_opt;
|
self.select_focus = click_i_opt;
|
||||||
self.selected_clicked = true;
|
self.selected_clicked = true;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue