diff options
| author | Can Celik <ogulcancelik@gmail.com> | 2026-09-06 02:27:06 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-09-06 02:27:06 +0300 |
| commit | 9e9bc8a144667a6b7debfd4f0c7a31ff0e11493a (patch) | |
| tree | 03f1259f91fd9edeacfd4b904f2e84d4acf25232 /src/server/headless/client_views.rs | |
| parent | 35b0dff96579f099e0436290085024424ffb289c (diff) | |
feat: manage multiple ssh machines from one client (#3670)
Diffstat (limited to 'src/server/headless/client_views.rs')
| -rw-r--r-- | src/server/headless/client_views.rs | 36 |
1 files changed, 31 insertions, 5 deletions
diff --git a/src/server/headless/client_views.rs b/src/server/headless/client_views.rs index 2d49a50a..2257a05e 100644 --- a/src/server/headless/client_views.rs +++ b/src/server/headless/client_views.rs @@ -388,7 +388,7 @@ impl HeadlessServer { self.clients .iter() .filter(|(_, client)| { - client.is_shell_client() && client.outer_terminal_focus == Some(true) + client.is_active_shell_client() && client.outer_terminal_focus == Some(true) }) .filter_map(|(&client_id, _)| self.shell_tab_id_for_client(client_id)) .collect() @@ -397,7 +397,7 @@ impl HeadlessServer { pub(super) fn shell_focus_targets(&self) -> Vec<(u64, Option<ShellFocusTarget>)> { self.clients .iter() - .filter(|(_, client)| client.is_shell_client()) + .filter(|(_, client)| client.is_active_shell_client()) .map(|(&client_id, _)| (client_id, self.shell_focus_target(client_id))) .collect() } @@ -608,11 +608,16 @@ impl HeadlessServer { &mut self, start_pending_agent_resumes: bool, ) -> bool { - if self.app_client_count() != 1 { + let active_shell_count = self + .clients + .values() + .filter(|client| client.is_active_shell_client() && client.writer.is_some()) + .count(); + if active_shell_count != 1 { return false; } let Some(client_id) = self.clients.iter().find_map(|(&client_id, client)| { - (client.is_shell_client() && client.writer.is_some()).then_some(client_id) + (client.is_active_shell_client() && client.writer.is_some()).then_some(client_id) }) else { return false; }; @@ -625,7 +630,7 @@ impl HeadlessServer { ) -> bool { let mut viewed_tabs = HashMap::<String, Vec<u64>>::new(); for (&client_id, client) in &self.clients { - if !client.is_shell_client() || client.writer.is_none() { + if !client.is_active_shell_client() || client.writer.is_none() { continue; } let Some(tab_id) = self.shell_tab_id_for_client(client_id) else { @@ -684,6 +689,13 @@ impl HeadlessServer { client_id: u64, start_pending_agent_resumes: bool, ) -> bool { + if !self + .clients + .get(&client_id) + .is_some_and(|client| client.shell_surface_active) + { + return false; + } let Some(tab_id) = self.shell_tab_id_for_client(client_id) else { return false; }; @@ -698,6 +710,13 @@ impl HeadlessServer { client_id: u64, start_pending_agent_resumes: bool, ) -> bool { + if !self + .clients + .get(&client_id) + .is_some_and(|client| client.shell_surface_active) + { + return false; + } let Some(tab_id) = self.shell_tab_id_for_client(client_id) else { return false; }; @@ -713,6 +732,13 @@ impl HeadlessServer { client_id: u64, start_pending_agent_resumes: bool, ) -> bool { + if !self + .clients + .get(&client_id) + .is_some_and(|client| client.shell_surface_active) + { + return false; + } let Some(tab_id) = self.shell_tab_id_for_client(client_id) else { return false; }; |
