From d79fd746a96ddb5642939c9727baefce642d78e6 Mon Sep 17 00:00:00 2001 From: akbash Date: Tue, 25 Aug 2026 23:44:56 +0300 Subject: fix: require explicit workspace group close (#3206) refs #2874 Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com> --- src/app/input/navigate.rs | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) (limited to 'src/app/input/navigate.rs') diff --git a/src/app/input/navigate.rs b/src/app/input/navigate.rs index 8e3d7d6e..517e267d 100644 --- a/src/app/input/navigate.rs +++ b/src/app/input/navigate.rs @@ -214,7 +214,7 @@ impl App { if self.state.confirm_close { super::modal::open_confirm_close(&mut self.state); } else { - self.close_workspace_idx_via_api(ws_idx); + self.close_workspace_idx_with_group_via_api(ws_idx); leave_navigate_mode(&mut self.state); } } @@ -443,9 +443,9 @@ impl App { self.runtime_workspace_focus("tui.workspace.focus", workspace_id); } - pub(crate) fn close_workspace_idx_via_api(&mut self, ws_idx: usize) { + pub(crate) fn close_workspace_idx_with_group_via_api(&mut self, ws_idx: usize) { let workspace_id = self.public_workspace_id(ws_idx); - self.runtime_workspace_close("tui.workspace.close", workspace_id); + self.runtime_workspace_close_group("tui.workspace.close", workspace_id); } pub(crate) fn move_workspace_via_api(&mut self, source_ws_idx: usize, insert_idx: usize) { @@ -489,7 +489,7 @@ impl App { if self.state.confirm_implicit_worktree_group_close(ws_idx) { return true; } - self.close_workspace_idx_via_api(ws_idx); + self.close_workspace_idx_with_group_via_api(ws_idx); return false; } let tab_idx = self.state.workspaces[ws_idx].active_tab_index(); @@ -3517,6 +3517,23 @@ navigate_pane_down = "ctrl+j" assert_eq!(state.mode, Mode::Terminal); } + #[test] + fn tui_close_parent_group_closes_immediately_when_confirmation_disabled() { + let mut app = app_with_test_workspaces(&["main", "issue"]); + mark_worktree_space_member(&mut app.state, 0, "repo-key"); + mark_worktree_space_member(&mut app.state, 1, "repo-key"); + app.state.active = Some(0); + app.state.selected = 0; + app.state.mode = Mode::Navigate; + app.state.confirm_close = false; + + app.execute_tui_navigate_action(NavigateAction::CloseWorkspace, ActionContext::Navigate); + + assert!(app.state.workspaces.is_empty()); + assert_eq!(app.state.mode, Mode::Navigate); + assert_eq!(app.event_hub.events_after(0).len(), 2); + } + #[test] fn prefix_close_pane_last_parent_group_pane_opens_confirmation() { let mut state = state_with_workspaces(&["main", "issue"]); -- cgit v1.2.3