diff --git a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__detach_and_attach_session.snap b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__detach_and_attach_session.snap index 5765e54a..59576e22 100644 --- a/src/tests/e2e/snapshots/zellij__tests__e2e__cases__detach_and_attach_session.snap +++ b/src/tests/e2e/snapshots/zellij__tests__e2e__cases__detach_and_attach_session.snap @@ -5,7 +5,7 @@ expression: last_snapshot --- Zellij (e2e-test)  Tab #1  ┌ Pane #1 ─────────────────────────────────────────────────┐┌ Pane #2 ─────────────────────────────────────────────────┐ -│$ █ ││$ I am some text │ +│$ ││$ I am some text█ │ │ ││ │ │ ││ │ │ ││ │ diff --git a/zellij-server/src/lib.rs b/zellij-server/src/lib.rs index 82f759db..7880d5f9 100644 --- a/zellij-server/src/lib.rs +++ b/zellij-server/src/lib.rs @@ -477,22 +477,6 @@ pub fn start_server(mut os_input: Box, socket_path: PathBuf) { .send_to_screen(ScreenInstruction::TerminalResize(min_size)) .unwrap(); } - session_data - .write() - .unwrap() - .as_ref() - .unwrap() - .senders - .send_to_screen(ScreenInstruction::RemoveClient(client_id)) - .unwrap(); - session_data - .write() - .unwrap() - .as_ref() - .unwrap() - .senders - .send_to_plugin(PluginInstruction::RemoveClient(client_id)) - .unwrap(); } ServerInstruction::Render(serialized_output) => { let client_ids = session_state.read().unwrap().client_ids(); diff --git a/zellij-server/src/screen.rs b/zellij-server/src/screen.rs index 4145e0c2..e9463015 100644 --- a/zellij-server/src/screen.rs +++ b/zellij-server/src/screen.rs @@ -566,12 +566,14 @@ impl Screen { .add_client(client_id, None); } pub fn remove_client(&mut self, client_id: ClientId) { - if let Some(client_tab) = self.get_active_tab_mut(client_id) { - client_tab.remove_client(client_id); - if client_tab.has_no_connected_clients() { - client_tab.visible(false); + self.tabs.iter_mut().for_each(|(_, tab)| { + if tab.active_panes.get(&client_id).is_some() { + tab.remove_client(client_id); + if tab.has_no_connected_clients() { + tab.visible(false); + } } - } + }); if self.active_tab_indices.contains_key(&client_id) { self.active_tab_indices.remove(&client_id); } diff --git a/zellij-server/src/tab/mod.rs b/zellij-server/src/tab/mod.rs index 395d7f4d..34c32c6c 100644 --- a/zellij-server/src/tab/mod.rs +++ b/zellij-server/src/tab/mod.rs @@ -578,6 +578,7 @@ impl Tab { } pub fn remove_client(&mut self, client_id: ClientId) { self.focus_pane_id = None; + self.active_panes.remove(&client_id); self.connected_clients.remove(&client_id); self.set_force_render(); }