diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-05-20 22:03:49 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-05-20 22:08:26 +0300 |
| commit | df357b250c0fcf4edf2681d4f114e199afb51899 (patch) | |
| tree | eba744d9238057e8758e2098670e0561d920d998 /src/app/input | |
| parent | c584037c77c63f6a08f8837f357c89432b8043e7 (diff) | |
fix: clarify keybinding conflict warnings
refs #154
Diffstat (limited to 'src/app/input')
| -rw-r--r-- | src/app/input/modal.rs | 38 | ||||
| -rw-r--r-- | src/app/input/navigate.rs | 12 | ||||
| -rw-r--r-- | src/app/input/sidebar.rs | 8 |
3 files changed, 37 insertions, 21 deletions
diff --git a/src/app/input/modal.rs b/src/app/input/modal.rs index 5b585221..084f44a9 100644 --- a/src/app/input/modal.rs +++ b/src/app/input/modal.rs @@ -67,7 +67,7 @@ pub(super) fn modal_action_from_buttons<A: Copy>( #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub(crate) enum GlobalMenuAction { - Quit, + Detach, WhatsNew, Keybinds, ReloadConfig, @@ -83,7 +83,7 @@ pub(super) fn global_menu_actions(state: &AppState) -> Vec<GlobalMenuAction> { if state.update_available.is_some() || state.latest_release_notes_available { actions.push(GlobalMenuAction::WhatsNew); } - actions.push(GlobalMenuAction::Quit); + actions.push(GlobalMenuAction::Detach); actions } @@ -111,19 +111,19 @@ fn open_update_release_notes(state: &mut AppState) { state.mode = Mode::ReleaseNotes; } -pub(super) fn request_quit_or_detach(state: &mut AppState) { - if state.quit_detaches { - state.detach_requested = true; - } else { +pub(super) fn request_detach(state: &mut AppState) { + if state.detach_exits { state.should_quit = true; + } else { + state.detach_requested = true; } } pub(super) fn apply_global_menu_action(state: &mut AppState, action: GlobalMenuAction) { match action { - GlobalMenuAction::Quit => { + GlobalMenuAction::Detach => { leave_modal(state); - request_quit_or_detach(state); + request_detach(state); } GlobalMenuAction::WhatsNew => open_update_release_notes(state), GlobalMenuAction::Keybinds => open_keybind_help(state), @@ -690,6 +690,28 @@ mod tests { } #[test] + fn detach_requests_client_detach_in_persistence_mode() { + let mut state = state_with_workspaces(&["test"]); + state.detach_exits = false; + + request_detach(&mut state); + + assert!(state.detach_requested); + assert!(!state.should_quit); + } + + #[test] + fn detach_exits_in_no_session_mode() { + let mut state = state_with_workspaces(&["test"]); + state.detach_exits = true; + + request_detach(&mut state); + + assert!(state.should_quit); + assert!(!state.detach_requested); + } + + #[test] fn global_menu_whats_new_opens_saved_release_notes() { let _guard = config_env_lock().lock().unwrap(); let path = temp_config_path("whats-new-saved-release-notes"); diff --git a/src/app/input/navigate.rs b/src/app/input/navigate.rs index 8bf10832..17180fed 100644 --- a/src/app/input/navigate.rs +++ b/src/app/input/navigate.rs @@ -479,7 +479,6 @@ pub(crate) enum NavigateAction { CyclePanePrevious, Help, Settings, - Quit, ReloadConfig, OpenNotificationTarget, Detach, @@ -545,7 +544,6 @@ fn action_for_key( for (bindings, action) in [ (&kb.help, NavigateAction::Help), (&kb.settings, NavigateAction::Settings), - (&kb.quit, NavigateAction::Quit), (&kb.workspace_picker, NavigateAction::WorkspacePicker), (&kb.new_workspace, NavigateAction::NewWorkspace), (&kb.rename_workspace, NavigateAction::RenameWorkspace), @@ -727,10 +725,6 @@ pub(super) fn execute_navigate_action_in_context( } NavigateAction::Help => super::modal::open_keybind_help(state), NavigateAction::Settings => super::settings::open_settings(state), - NavigateAction::Quit => { - super::modal::request_quit_or_detach(state); - leave_navigate_mode(state); - } NavigateAction::ReloadConfig => { state.request_reload_config = true; leave_navigate_mode(state); @@ -742,7 +736,7 @@ pub(super) fn execute_navigate_action_in_context( } } NavigateAction::Detach => { - state.detach_requested = true; + super::modal::request_detach(state); leave_navigate_mode(state); } } @@ -1449,9 +1443,9 @@ mod tests { } #[test] - fn persistence_mode_navigate_q_detaches_instead_of_quitting_server() { + fn navigate_q_detaches_in_persistence_mode() { let mut state = crate::app::state::AppState::test_new(); - state.quit_detaches = true; + state.detach_exits = false; handle_navigate_key( &mut state, diff --git a/src/app/input/sidebar.rs b/src/app/input/sidebar.rs index 7491c9c1..dc192e50 100644 --- a/src/app/input/sidebar.rs +++ b/src/app/input/sidebar.rs @@ -192,7 +192,7 @@ impl AppState { } else if self.latest_release_notes_available { labels.push("what's new"); } - labels.push(if self.quit_detaches { "detach" } else { "quit" }); + labels.push("detach"); labels } @@ -578,7 +578,7 @@ mod tests { "keybinds", "reload config", "update ready", - "quit" + "detach" ] ); assert!(!app.state.should_quit); @@ -587,7 +587,7 @@ mod tests { #[test] fn persistence_mode_menu_surfaces_detach_action() { let mut app = app_for_mouse_test(); - app.state.quit_detaches = true; + app.state.detach_exits = false; let launcher = app.state.global_launcher_rect(); app.handle_mouse(mouse( @@ -625,7 +625,7 @@ mod tests { "keybinds", "reload config", "what's new", - "quit" + "detach" ] ); } |
