diff options
Diffstat (limited to 'src/app/api/panes.rs')
| -rw-r--r-- | src/app/api/panes.rs | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/app/api/panes.rs b/src/app/api/panes.rs index fdda8750..cf7b594d 100644 --- a/src/app/api/panes.rs +++ b/src/app/api/panes.rs @@ -166,6 +166,7 @@ impl App { }; self.state.focus_pane_in_workspace(ws_idx, pane_id); + self.state.mark_active_tab_seen(); self.state.settle_terminal_mode_after_focus(); let Some(pane) = self.pane_info(ws_idx, pane_id) else { @@ -3505,6 +3506,40 @@ mod tests { } #[test] + fn api_pane_focus_marks_already_focused_done_pane_seen() { + let mut app = app_with_linked_worktree(); + app.state.active = Some(0); + app.state.selected = 0; + app.state.outer_terminal_focus = Some(false); + + let pane_id = app.state.workspaces[0].tabs[0].root_pane; + let terminal_id = app.state.workspaces[0].tabs[0].panes[&pane_id] + .attached_terminal_id + .clone(); + app.state.terminals.get_mut(&terminal_id).unwrap().state = crate::detect::AgentState::Idle; + app.state.workspaces[0].tabs[0] + .panes + .get_mut(&pane_id) + .unwrap() + .seen = false; + app.state.workspaces[0].tabs[0].layout.focus_pane(pane_id); + + let public_pane_id = app.public_pane_id(0, pane_id).unwrap(); + let response = app.handle_pane_focus( + "req".into(), + PaneTarget { + pane_id: public_pane_id, + }, + ); + + let success: SuccessResponse = serde_json::from_str(&response).unwrap(); + let ResponseResult::PaneInfo { pane } = success.result else { + panic!("expected pane info response"); + }; + assert_eq!(pane.agent_status, crate::api::schema::AgentStatus::Idle); + } + + #[test] fn api_pane_focus_rejects_invalid_pane_id() { let mut app = app_with_linked_worktree(); |
