aboutsummaryrefslogtreecommitdiff
path: root/src/server/headless/client_views.rs
diff options
context:
space:
mode:
authorJJ Liebig <jonathan.liebig@gmail.com>2026-09-22 18:43:12 +0200
committerGitHub <noreply@github.com>2026-09-22 19:43:12 +0300
commitdd33ddf28d693b2c64ed91f75656c61416ee2538 (patch)
tree229769fa9e2535b72dc39ba0f64593ef5fdc93a2 /src/server/headless/client_views.rs
parent1c6397b1cddb288099ed212a5979732698bd72c2 (diff)
fix: move worktree lookups async (#4492)
Diffstat (limited to 'src/server/headless/client_views.rs')
-rw-r--r--src/server/headless/client_views.rs27
1 files changed, 11 insertions, 16 deletions
diff --git a/src/server/headless/client_views.rs b/src/server/headless/client_views.rs
index c2e3c2d5..31b39be2 100644
--- a/src/server/headless/client_views.rs
+++ b/src/server/headless/client_views.rs
@@ -313,7 +313,10 @@ impl HeadlessServer {
pub(super) fn deferred_endpoint_navigation_tab_id(response: &[u8]) -> Option<String> {
let response = serde_json::from_slice::<serde_json::Value>(response).ok()?;
- if response.pointer("/result/type")?.as_str()? != "worktree_created" {
+ if !matches!(
+ response.pointer("/result/type")?.as_str()?,
+ "worktree_created" | "worktree_opened"
+ ) {
return None;
}
response
@@ -851,24 +854,17 @@ impl HeadlessServer {
api::schema::Method::TabCreate(params) => params.focus,
_ => false,
};
- let inspect_worktree_open = matches!(
- &msg.request.method,
- api::schema::Method::WorktreeOpen(params) if params.focus
- );
let inspect_pane_move = matches!(
&msg.request.method,
api::schema::Method::PaneMove(params) if params.focus
);
- let response_proxy = (agent_focus_target.is_some()
- || inspect_worktree_open
- || inspect_pane_move)
- .then(|| {
- let (proxy_tx, proxy_rx) = std::sync::mpsc::channel();
- let original = std::mem::replace(&mut msg.respond_to, proxy_tx);
- (original, proxy_rx)
- });
+ let response_proxy = (agent_focus_target.is_some() || inspect_pane_move).then(|| {
+ let (proxy_tx, proxy_rx) = std::sync::mpsc::channel();
+ let original = std::mem::replace(&mut msg.respond_to, proxy_tx);
+ (original, proxy_rx)
+ });
let reconcile = Self::shell_locations_may_need_reconcile(&msg.request.method);
- let changed = self.handle_api_request_with_shutdown_check_inner(msg, false);
+ let changed = self.handle_api_request_with_shutdown_check_inner(msg, false, false);
let proxied_result = forward_proxied_api_response(response_proxy);
let proxied_request_succeeded = proxied_result.is_some();
// Same-tab and zoomed moves succeed without moving or requesting focus.
@@ -895,7 +891,6 @@ impl HeadlessServer {
.is_some_and(|target| self.default_shell_target() == Some(target));
let public_focus_succeeded = explicit_focus_succeeded
|| (create_focus_requested && target_changed)
- || (inspect_worktree_open && proxied_request_succeeded)
|| pane_move_focus_succeeded;
if public_focus_succeeded {
self.focus_all_shell_clients_on_default_target();
@@ -927,7 +922,7 @@ impl HeadlessServer {
self.set_default_shell_target_from_client(client_id);
let popup_before = self.app.state.popup_pane.is_some();
let popup_owner = self.shell_tab_id_for_client(client_id);
- let changed = self.handle_api_request_with_shutdown_check_inner(msg, false);
+ let changed = self.handle_api_request_with_shutdown_check_inner(msg, false, true);
self.focus_shell_client_on_default_target(client_id);
if !popup_before && self.app.state.popup_pane.is_some() {
self.popup_owner_tab_id = popup_owner;