diff --git a/src/proclist.rs b/src/proclist.rs index acacf2e..eac107c 100644 --- a/src/proclist.rs +++ b/src/proclist.rs @@ -172,10 +172,9 @@ impl ListView> { Ok(format!( "{}{}{}{}{}{}", termion::cursor::Save, - format!("{}{}{:padding$}{}", + format!("{}{:padding$}{}", term::normal_color(), &sized_string, - " ", term::normal_color(), padding = padding as usize), termion::cursor::Restore, @@ -271,6 +270,7 @@ impl ProcView { } pub fn remove_proc(&mut self) -> HResult<()> { + if self.get_listview().content.len() == 0 { return Ok(()) } self.get_listview().remove_proc()?; self.get_textview().change_to(Box::new(move |_, core| { let mut textview = TextView::new_blank(&core); 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 TabView where T: Widget, TabView: Tabbable { pub fn push_widget(&mut self, widget: T) -> HResult<()> { self.widgets.push(widget); - self.refresh() + Ok(()) } pub fn pop_widget(&mut self) -> HResult { 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 TabView where T: Widget, TabView: Tabbable { } pub fn close_tab_(&mut self) -> HResult<()> { - self.pop_widget()?; - self.active -= 1; + self.remove_widget(self.active).log(); Ok(()) }