diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-03-28 01:02:10 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-03-28 01:02:10 +0300 |
| commit | e719c6517d6cc2ef2b51a056725d2558c5fb94fa (patch) | |
| tree | 4a485f244ddd0af7dcbc5d1ab3dec1652bf7057b /src/app | |
| parent | 380778a9286a941d14c7af166de14836ec4c2d0f (diff) | |
fix sound request alerts in active workspace
Diffstat (limited to 'src/app')
| -rw-r--r-- | src/app/actions.rs | 54 |
1 files changed, 44 insertions, 10 deletions
diff --git a/src/app/actions.rs b/src/app/actions.rs index 98159fcc..787f6869 100644 --- a/src/app/actions.rs +++ b/src/app/actions.rs @@ -9,6 +9,24 @@ use crate::layout::{find_in_direction, NavDirection, PaneId}; use super::state::{AppState, Mode}; +fn notification_sound_for_state_change( + is_active_ws: bool, + prev_state: AgentState, + new_state: AgentState, +) -> Option<crate::sound::Sound> { + if new_state == prev_state { + return None; + } + + match new_state { + AgentState::Waiting => Some(crate::sound::Sound::Request), + AgentState::Idle if prev_state != AgentState::Idle && !is_active_ws => { + Some(crate::sound::Sound::Done) + } + _ => None, + } +} + // --------------------------------------------------------------------------- // Workspace operations // --------------------------------------------------------------------------- @@ -168,16 +186,12 @@ impl AppState { pane.seen = false; } - // Sound notifications for background state changes - if self.sound.allows(agent) && !is_active_ws && state != prev_state { - match state { - AgentState::Idle if prev_state != AgentState::Idle => { - crate::sound::play(crate::sound::Sound::Done); - } - AgentState::Waiting => { - crate::sound::play(crate::sound::Sound::Request); - } - _ => {} + // Waiting prompts should always make noise; done sounds stay background-only. + if self.sound.allows(agent) { + if let Some(sound) = + notification_sound_for_state_change(is_active_ws, prev_state, state) + { + crate::sound::play(sound); } } @@ -409,6 +423,26 @@ mod tests { } #[test] + fn waiting_sound_plays_even_in_active_workspace() { + assert_eq!( + notification_sound_for_state_change(true, AgentState::Busy, AgentState::Waiting), + Some(crate::sound::Sound::Request) + ); + } + + #[test] + fn done_sound_only_plays_in_background() { + assert_eq!( + notification_sound_for_state_change(false, AgentState::Busy, AgentState::Idle), + Some(crate::sound::Sound::Done) + ); + assert_eq!( + notification_sound_for_state_change(true, AgentState::Busy, AgentState::Idle), + None + ); + } + + #[test] fn toggle_fullscreen_works() { let mut state = app_with_workspaces(&["test"]); state.workspaces[0].test_split(Direction::Horizontal); |
