diff options
author | rabite <rabite@posteo.de> | 2019-03-19 01:08:22 +0100 |
---|---|---|
committer | rabite <rabite@posteo.de> | 2019-03-19 14:38:15 +0100 |
commit | 161ba5ac3f38733b45c0167cb1e29f0be6059775 (patch) | |
tree | 794ec2517c71f6e6e3b9c572ebcc0e2fca66c3f4 /src/preview.rs | |
parent | c719ec7a3cb6ca3d2346f48dc11d2e0d5ee10d36 (diff) |
handle terminal resizing
Diffstat (limited to 'src/preview.rs')
-rw-r--r-- | src/preview.rs | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/src/preview.rs b/src/preview.rs index 17663b2..9965229 100644 --- a/src/preview.rs +++ b/src/preview.rs @@ -6,6 +6,7 @@ use crate::files::{File, Files, Kind}; use crate::listview::ListView; use crate::textview::TextView; use crate::widget::{Widget, WidgetCore}; +use crate::coordinates::Coordinates; use crate::fail::{HResult, HError, ErrorLog}; @@ -189,12 +190,29 @@ impl<T: Widget + Send + 'static> Widget for WillBeWidget<T> { fn get_core_mut(&mut self) -> HResult<&mut WidgetCore> { Ok(&mut self.core) } + + fn set_coordinates(&mut self, coordinates: &Coordinates) -> HResult<()> { + self.core.coordinates = coordinates.clone(); + if let Ok(widget) = self.widget() { + let mut widget = widget.lock()?; + let widget = widget.as_mut()?; + widget.set_coordinates(&coordinates)?; + } + Ok(()) + } + fn refresh(&mut self) -> HResult<()> { + let coords = self.get_coordinates()?; if let Ok(widget) = self.widget() { let mut widget = widget.lock()?; let widget = widget.as_mut()?; - widget.set_coordinates(self.get_coordinates()?).log(); - widget.refresh().log(); + + if widget.get_coordinates()? != coords { + widget.set_coordinates(self.get_coordinates()?)?; + widget.refresh()?; + } else { + widget.refresh()?; + } } Ok(()) } @@ -427,6 +445,12 @@ impl Widget for Previewer { fn get_core_mut(&mut self) -> HResult<&mut WidgetCore> { Ok(&mut self.core) } + + fn set_coordinates(&mut self, coordinates: &Coordinates) -> HResult<()> { + self.core.coordinates = coordinates.clone(); + self.widget.set_coordinates(&coordinates) + } + fn refresh(&mut self) -> HResult<()> { self.widget.refresh() } |