summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrabite <rabite@posteo.de>2020-01-27 15:25:44 +0100
committerrabite <rabite@posteo.de>2020-01-27 15:49:21 +0100
commitb359cc911917b7caeee921d95da6021f6127199c (patch)
tree45ca77f6f6dcf3d6af9a4159e0c9faa2dfb39cdf
parente993c2c27520d5386265c54480afc8d82e81eb9c (diff)
don't draw preview dir twice
-rw-r--r--src/listview.rs33
-rw-r--r--src/preview.rs4
2 files changed, 27 insertions, 10 deletions
diff --git a/src/listview.rs b/src/listview.rs
index ff1a9a9..52007a7 100644
--- a/src/listview.rs
+++ b/src/listview.rs
@@ -331,32 +331,41 @@ impl FileListBuilder {
}
}?;
- if self.meta_all {
- files.meta_all();
- } else if self.meta_upto > 0 {
- files.meta_upto(self.meta_upto, Some(self.core.get_sender()));
- }
+ let mut view = ListView::new(&self.core, files);
let selected_file = match self.selected_file {
Some(f) => Some(f),
None => {
c.as_ref()
- .map(|c| c.get_selection(&files.directory).ok())
+ .map(|c| c.get_selection(&view.content.directory).ok())
.flatten()
}
};
- let mut view = ListView::new(&self.core, files);
-
selected_file.map(|mut f| {
f.meta_sync().log();
view.select_file(&f);
});
- if self.prerender {
- view.refresh().log();
+ let from = match self.meta_all {
+ true => 0,
+ false => view.offset,
+ };
+ let ysize = view.core.coordinates.ysize_u();
+ let upto = match self.meta_all {
+ true => view.content.len,
+ false => from + ysize + 1
+ };
+
+ view.content
+ .iter_files_mut()
+ .skip(from)
+ .take(upto)
+ .for_each(|f| f.meta_sync().log());
+ view.content.meta_upto = Some(view.content.len);
+ if self.prerender {
match self.stale {
Some(s) => view.render_buffer_stale(s)?,
None => view.render_buffer()?
@@ -367,6 +376,10 @@ impl FileListBuilder {
}
};
+ view.content.set_clean();
+ view.content.dirty_meta.set_clean();
+ view.core.set_clean();
+
Ok(view)
}
}
diff --git a/src/preview.rs b/src/preview.rs
index 7546dfc..cc50168 100644
--- a/src/preview.rs
+++ b/src/preview.rs
@@ -451,6 +451,8 @@ impl Previewer {
stale: &Stale,
animator: &Stale)
-> HResult<PreviewWidget> {
+ use crate::dirty::Dirtyable;
+
if stale.is_stale()? { return Previewer::preview_failed(&file) }
let source = FileSource::Path(file.clone());
@@ -463,6 +465,8 @@ impl Previewer {
if stale.is_stale()? { return Previewer::preview_failed(&file) }
file_list.animate_slide_up(Some(animator))?;
+ file_list.core.set_clean();
+
Ok(PreviewWidget::FileList(file_list))
}