summaryrefslogtreecommitdiffstats
path: root/src/tabview.rs
diff options
context:
space:
mode:
authorrabite <rabite@posteo.de>2019-03-10 12:55:56 +0100
committerrabite <rabite@posteo.de>2019-03-10 12:55:56 +0100
commit9fcc12f464132d75660f331de5588ba454327fa3 (patch)
tree027eb5bdf2dcfd8667540dab7b6fed25c0a01d56 /src/tabview.rs
parente1a9d62b16647c10297269c077c177067cf2d517 (diff)
crash fix
Diffstat (limited to 'src/tabview.rs')
-rw-r--r--src/tabview.rs20
1 files changed, 16 insertions, 4 deletions
diff --git a/src/tabview.rs b/src/tabview.rs
index 77abdb4..cd171c5 100644
--- a/src/tabview.rs
+++ b/src/tabview.rs
@@ -43,15 +43,28 @@ impl<T> TabView<T> where T: Widget, TabView<T>: Tabbable {
pub fn push_widget(&mut self, widget: T) -> HResult<()> {
self.widgets.push(widget);
- self.refresh()
+ Ok(())
}
pub fn pop_widget(&mut self) -> HResult<T> {
let widget = self.widgets.pop()?;
- self.refresh()?;
+ if self.widgets.len() <= self.active {
+ self.active -= 1;
+ }
Ok(widget)
}
+ pub fn remove_widget(&mut self, index: usize) -> HResult<()> {
+ let len = self.widgets.len();
+ if len > 1 {
+ self.widgets.remove(index);
+ if index+1 == len {
+ self.active -= 1;
+ }
+ }
+ Ok(())
+ }
+
pub fn active_tab_(&self) -> &T {
&self.widgets[self.active]
}
@@ -61,8 +74,7 @@ impl<T> TabView<T> where T: Widget, TabView<T>: Tabbable {
}
pub fn close_tab_(&mut self) -> HResult<()> {
- self.pop_widget()?;
- self.active -= 1;
+ self.remove_widget(self.active).log();
Ok(())
}