aboutsummaryrefslogtreecommitdiff
path: root/src/app/api/panes.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/app/api/panes.rs')
-rw-r--r--src/app/api/panes.rs35
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();