summaryrefslogtreecommitdiffstats
path: root/zellij-server
diff options
context:
space:
mode:
authorAram Drevekenin <aram@poor.dev>2024-03-25 10:28:21 +0100
committerGitHub <noreply@github.com>2024-03-25 10:28:21 +0100
commit86e91ae1379d44df461f871d2ee3f35f6724292c (patch)
tree09ae4eec003b37cee7b9bcadac5ad68396fdb134 /zellij-server
parentb24386e6b13c6fa5053fbbd13dc836dee6d60a68 (diff)
fix(startup): recover from race condition that causes Zellij to start in the wrong size (#3218)
* fix(startup): recover from Zellij starting up in the wrong size * style(fmt): rustfmt * fix tests
Diffstat (limited to 'zellij-server')
-rw-r--r--zellij-server/src/screen.rs12
-rw-r--r--zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_switch_mode_action.snap4
2 files changed, 14 insertions, 2 deletions
diff --git a/zellij-server/src/screen.rs b/zellij-server/src/screen.rs
index bba6baeb9..94b91777d 100644
--- a/zellij-server/src/screen.rs
+++ b/zellij-server/src/screen.rs
@@ -3000,6 +3000,18 @@ pub(crate) fn screen_thread_main(
screen.unblock_input()?;
screen.render(None)?;
+ // we do this here in order to recover from a race condition on app start
+ // that sometimes causes Zellij to think the terminal window is a different size
+ // than it actually is - here, we query the client for its terminal size after
+ // we've finished the setup and handle it as we handle a normal resize,
+ // while this can affect other instances of a layout being applied, the query is
+ // very short and cheap and shouldn't cause any trouble
+ if let Some(os_input) = &mut screen.bus.os_input {
+ for client_id in screen.connected_clients.borrow().iter() {
+ let _ = os_input
+ .send_to_client(*client_id, ServerToClientMsg::QueryTerminalSize);
+ }
+ }
},
ScreenInstruction::GoToTab(tab_index, client_id) => {
let client_id_to_switch = if client_id.is_none() {
diff --git a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_switch_mode_action.snap b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_switch_mode_action.snap
index 49e3d8fb1..f79859e99 100644
--- a/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_switch_mode_action.snap
+++ b/zellij-server/src/unit/snapshots/zellij_server__screen__screen_tests__send_cli_switch_mode_action.snap
@@ -1,6 +1,6 @@
---
source: zellij-server/src/./unit/screen_tests.rs
-assertion_line: 1711
+assertion_line: 2465
expression: "format!(\"{:?}\", *\n mock_screen.os_input.server_to_client_messages.lock().unwrap())"
---
-{1: [SwitchToMode(Locked)]}
+{1: [QueryTerminalSize, SwitchToMode(Locked)]}