make remove_tab safer

This commit is contained in:
edouardparis 2025-07-04 16:10:03 +02:00
parent 5587b5cb8d
commit 91ed79cb55
2 changed files with 17 additions and 12 deletions

View File

@ -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()

View File

@ -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<tab::Tab> {
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<tab::Tab>, focused_tab: usize) {