summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrabite0 <rabite@posteo.de>2020-03-02 22:59:18 +0100
committerrabite0 <rabite@posteo.de>2020-03-02 22:59:18 +0100
commit1ddb7a1593e78cfed4554c0926ffcb466a95c9f9 (patch)
tree5a72e9247393079ef8eb92e2436fb77b5cdc6a90
parente4850e38b603c4adc99fbdcedc80de7c2dfbe775 (diff)
fix selection when toggling display of hidden files
-rw-r--r--src/listview.rs18
1 files changed, 7 insertions, 11 deletions
diff --git a/src/listview.rs b/src/listview.rs
index d728cf1..6bb6b9a 100644
--- a/src/listview.rs
+++ b/src/listview.rs
@@ -61,8 +61,6 @@ impl Acting for ListView<Files> {
fn do_action(&mut self, action: &Self::Action) -> HResult<()> {
use FileListAction::*;
- let pos = self.get_selection();
-
match action {
Search => self.search_file()?,
SearchNext => self.search_next()?,
@@ -81,10 +79,6 @@ impl Acting for ListView<Files> {
ToggleDirsFirst => self.toggle_dirs_first(),
}
- if pos != self.get_selection() {
- self.update_selected_file(pos);
- }
-
Ok(())
}
}
@@ -528,7 +522,6 @@ impl ListView<Files>
let file = self.clone_selected_file();
self.content.toggle_hidden();
self.select_file(&file);
- self.refresh().log();
self.core.show_status(&format!("Showing hidden files: {}",
self.content.show_hidden)).log();
}
@@ -546,12 +539,14 @@ impl ListView<Files>
fn multi_select_file(&mut self) {
self.selected_file_mut().toggle_selection();
- // Create mutable clone to render change
- let mut file = self.clone_selected_file();
- file.toggle_selection();
-
if !self.content.filter_selected {
+ let oldpos = self.get_selection();
self.move_down();
+ let newpos = self.get_selection();
+
+ if newpos > oldpos {
+ self.update_selected_file(oldpos);
+ }
} else {
if self.content.filter_selected && self.content.len() == 0 {
self.content.toggle_filter_selected();
@@ -913,6 +908,7 @@ impl ListView<Files>
let file = self.clone_selected_file();
if let Ok(Some(_)) = self.content.get_refresh() {
+ // Positions might change when files are added/removed/renamed
self.select_file(&file);
self.content.run_jobs(self.core.get_sender());
}