From e2ce6e02554137496d6539269e700b99344493a2 Mon Sep 17 00:00:00 2001 From: rabite Date: Sat, 25 Jan 2020 13:32:09 +0100 Subject: don't destroy widgets when taking their files --- src/file_browser.rs | 36 ++++++++++-------------------------- src/preview.rs | 12 ++---------- 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 { - 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 { - 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 { - 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()? -- cgit v1.2.3