diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-05-31 21:18:40 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-05-31 21:18:40 +0300 |
| commit | 8cf0e9b35b00f9dd91270fcd3931015d61ffd8a0 (patch) | |
| tree | 2b76b158344fdbe0de17c6abe98564a262266d2f /src/app/input/modal.rs | |
| parent | 859185b491c5a80e888ba8f9dd213d2c35baa034 (diff) | |
fix: confirm implicit worktree group close
refs #369
Diffstat (limited to 'src/app/input/modal.rs')
| -rw-r--r-- | src/app/input/modal.rs | 64 |
1 files changed, 52 insertions, 12 deletions
diff --git a/src/app/input/modal.rs b/src/app/input/modal.rs index 6cde98b5..e85e9bb1 100644 --- a/src/app/input/modal.rs +++ b/src/app/input/modal.rs @@ -695,12 +695,13 @@ pub(super) fn apply_context_menu_action( state.selected = ws_idx; state.active = Some(ws_idx); state.switch_tab(tab_idx); - state.close_tab(); - state.mode = if state.active.is_some() { - Mode::Terminal - } else { - Mode::Navigate - }; + if !state.close_tab() { + state.mode = if state.active.is_some() { + Mode::Terminal + } else { + Mode::Navigate + }; + } } (ContextMenuKind::Pane { pane_id, .. }, Some("Rename pane")) => { open_rename_pane(state, pane_id); @@ -732,12 +733,13 @@ pub(super) fn apply_context_menu_action( state.mode = Mode::Terminal; } (ContextMenuKind::Pane { .. }, Some("Close pane")) => { - state.close_pane(); - state.mode = if state.active.is_some() { - Mode::Terminal - } else { - Mode::Navigate - }; + if !state.close_pane() { + state.mode = if state.active.is_some() { + Mode::Terminal + } else { + Mode::Navigate + }; + } } _ => leave_modal(state), } @@ -1260,4 +1262,42 @@ mod tests { assert!(state.workspaces.is_empty()); assert_eq!(state.mode, Mode::Navigate); } + + #[test] + fn context_menu_close_pane_last_parent_group_pane_keeps_confirmation_mode() { + let mut state = state_with_workspaces(&["main", "issue"]); + state.active = Some(0); + state.selected = 1; + state.workspaces[0].worktree_space = Some(crate::workspace::WorktreeSpaceMembership { + key: "repo-key".into(), + label: "herdr".into(), + repo_root: "/repo/herdr".into(), + checkout_path: "/repo/herdr".into(), + is_linked_worktree: false, + }); + state.workspaces[1].worktree_space = Some(crate::workspace::WorktreeSpaceMembership { + key: "repo-key".into(), + label: "herdr".into(), + repo_root: "/repo/herdr".into(), + checkout_path: "/repo/herdr-issue".into(), + is_linked_worktree: true, + }); + let pane_id = state.workspaces[0].tabs[0].root_pane; + let menu = ContextMenuState { + kind: ContextMenuKind::Pane { + pane_id, + has_manual_label: false, + }, + x: 0, + y: 0, + list: MenuListState::new(4), + }; + let mut terminal_runtimes = crate::terminal::TerminalRuntimeRegistry::new(); + + apply_context_menu_action(&mut state, &mut terminal_runtimes, menu, 4); + + assert_eq!(state.selected, 0); + assert_eq!(state.mode, Mode::ConfirmClose); + assert_eq!(state.workspaces.len(), 2); + } } |
