diff options
Diffstat (limited to 'src/app/agents.rs')
| -rw-r--r-- | src/app/agents.rs | 18 |
1 files changed, 6 insertions, 12 deletions
diff --git a/src/app/agents.rs b/src/app/agents.rs index f36ba1ca..b1276a06 100644 --- a/src/app/agents.rs +++ b/src/app/agents.rs @@ -36,16 +36,8 @@ impl App { target: &str, ) -> Result<crate::api::schema::AgentInfo, TerminalTargetError> { let resolved = self.resolve_terminal_target(target)?; - self.state.switch_workspace(resolved.ws_idx); - self.state.switch_tab(resolved.tab_idx); - if let Some(tab) = self - .state - .workspaces - .get_mut(resolved.ws_idx) - .and_then(|ws| ws.tabs.get_mut(resolved.tab_idx)) - { - tab.layout.focus_pane(resolved.pane_id); - } + self.state + .focus_pane_in_workspace(resolved.ws_idx, resolved.pane_id); self.state.mode = Mode::Terminal; self.agent_info(resolved.ws_idx, resolved.pane_id) .ok_or_else(|| TerminalTargetError::NotFound { @@ -359,6 +351,7 @@ impl App { focus: bool, ) -> Result<(usize, usize, crate::layout::PaneId), AgentStartError> { let (rows, cols) = self.state.estimate_pane_size(); + let previous_focus = self.state.current_pane_focus_target(); let direction = match split { SplitDirection::Right => ratatui::layout::Direction::Horizontal, SplitDirection::Down => ratatui::layout::Direction::Vertical, @@ -390,8 +383,9 @@ impl App { .terminals .insert(result.1.terminal.id.clone(), result.1.terminal); if focus { - self.state.switch_workspace(ws_idx); - self.state.switch_tab(result.0); + self.state.switch_workspace_tab(ws_idx, result.0); + self.state + .record_pane_focus_change(previous_focus, ws_idx, result.1.pane_id); self.state.mode = Mode::Terminal; } self.schedule_session_save(); |
