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