aboutsummaryrefslogtreecommitdiff
path: root/src/server/headless/client_views.rs
diff options
context:
space:
mode:
authorCan Celik <ogulcancelik@gmail.com>2026-09-06 02:27:06 +0300
committerGitHub <noreply@github.com>2026-09-06 02:27:06 +0300
commit9e9bc8a144667a6b7debfd4f0c7a31ff0e11493a (patch)
tree03f1259f91fd9edeacfd4b904f2e84d4acf25232 /src/server/headless/client_views.rs
parent35b0dff96579f099e0436290085024424ffb289c (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.rs36
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;
};