summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrabite <rabite@posteo.de>2020-01-25 13:32:09 +0100
committerrabite <rabite@posteo.de>2020-01-25 13:36:01 +0100
commite2ce6e02554137496d6539269e700b99344493a2 (patch)
tree59d93beeb02ef073efdab3152367d693dde1aa1f
parent314edf528c7bf9ffc964af85d0293758d948f1c9 (diff)
don't destroy widgets when taking their files
-rw-r--r--src/file_browser.rs36
-rw-r--r--src/preview.rs12
2 files changed, 12 insertions, 36 deletions
diff --git a/src/file_browser.rs b/src/file_browser.rs
index f6755a6..4ff48f1 100644
--- a/src/file_browser.rs
+++ b/src/file_browser.rs
@@ -692,35 +692,19 @@ impl FileBrowser {
}
pub fn take_main_files(&mut self) -> HResult<Files> {
- let core = self.core.clone();
- let blank = AsyncWidget::new(&core.clone(), move |_| {
- HError::no_files()
- });
- let blank = FileBrowserWidgets::Blank(blank);
-
- let old_widget = self.columns.replace_widget(1, blank);
-
- if let FileBrowserWidgets::FileList(main_widget) = old_widget {
- let files = main_widget.take_widget()?.content;
- return Ok(files)
- }
- HError::no_files()
+ let mut w = self.main_widget_mut()?;
+ w.lines = 0;
+ w.buffer.clear();
+ let files = std::mem::take(&mut w.content);
+ Ok(files)
}
pub fn take_left_files(&mut self) -> HResult<Files> {
- let core = self.core.clone();
- let blank = AsyncWidget::new(&core.clone(), move |_| {
- HError::no_files()
- });
- let blank = FileBrowserWidgets::FileList(blank);
-
- let old_widget = self.columns.replace_widget(0, blank);
-
- if let FileBrowserWidgets::FileList(left_widget) = old_widget {
- let files = left_widget.take_widget()?.content;
- return Ok(files)
- }
- HError::no_files()
+ let mut w = self.left_widget_mut()?;
+ w.lines = 0;
+ w.buffer.clear();
+ let files = std::mem::take(&mut w.content);
+ Ok(files)
}
pub fn get_files(&self) -> HResult<&Files> {
diff --git a/src/preview.rs b/src/preview.rs
index 39013c8..d15d5ea 100644
--- a/src/preview.rs
+++ b/src/preview.rs
@@ -307,17 +307,9 @@ impl Previewer {
}
pub fn take_files(&mut self) -> HResult<Files> {
- let core = self.core.clone();
- let mut widget = AsyncWidget::new(&core.clone(), move |_| {
- let widget = TextView::new_blank(&core);
- let widget = PreviewWidget::TextView(widget);
- Ok(widget)
- });
- std::mem::swap(&mut self.widget, &mut widget);
-
- match widget.take_widget() {
+ match self.widget.widget_mut() {
Ok(PreviewWidget::FileList(file_list)) => {
- let files = file_list.content;
+ let files = std::mem::take(&mut file_list.content);
Ok(files)
}
_ => HError::no_files()?