From 91ed79cb559fbfc0e3fc6befef5690aab85caefd Mon Sep 17 00:00:00 2001 From: edouardparis Date: Fri, 4 Jul 2025 16:10:03 +0200 Subject: [PATCH] make remove_tab safer --- liana-gui/src/gui/mod.rs | 17 +++++++++-------- liana-gui/src/gui/pane.rs | 12 ++++++++---- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/liana-gui/src/gui/mod.rs b/liana-gui/src/gui/mod.rs index 943f6f37..d3b4f623 100644 --- a/liana-gui/src/gui/mod.rs +++ b/liana-gui/src/gui/mod.rs @@ -98,15 +98,16 @@ impl GUI { } Message::Pane(pane_id, pane::Message::View(pane::ViewMessage::SplitTab(i))) => { if let Some(p) = self.panes.get_mut(pane_id) { - let tab = p.remove_tab(i); - let result = self.panes.split( - pane_grid::Axis::Vertical, - pane_id, - pane::Pane::new_with_tab(tab.state), - ); + if let Some(tab) = p.remove_tab(i) { + let result = self.panes.split( + pane_grid::Axis::Vertical, + pane_id, + pane::Pane::new_with_tab(tab.state), + ); - if let Some((pane, _)) = result { - self.focus = Some(pane); + if let Some((pane, _)) = result { + self.focus = Some(pane); + } } } Task::none() diff --git a/liana-gui/src/gui/pane.rs b/liana-gui/src/gui/pane.rs index 8a995580..52b6d61b 100644 --- a/liana-gui/src/gui/pane.rs +++ b/liana-gui/src/gui/pane.rs @@ -61,11 +61,15 @@ impl Pane { } pub fn close_tab(&mut self, i: usize) { - let mut tab = self.remove_tab(i); - tab.stop(); + if let Some(mut tab) = self.remove_tab(i) { + tab.stop(); + } } - pub fn remove_tab(&mut self, i: usize) -> tab::Tab { + pub fn remove_tab(&mut self, i: usize) -> Option { + if i >= self.tabs.len() { + return None; + } let tab = self.tabs.remove(i); self.focused_tab = if self.tabs.is_empty() { 0 @@ -74,7 +78,7 @@ impl Pane { } else { self.tabs.len() - 1 }; - tab + Some(tab) } pub fn add_tabs(&mut self, tabs: Vec, focused_tab: usize) {