diff options
| author | Can Celik <ogulcancelik@gmail.com> | 2026-08-13 17:21:26 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-08-13 17:21:26 +0300 |
| commit | b7dca4bb2a2cf488407ae051b40782f03fcabc62 (patch) | |
| tree | 12ba75991215634676b49f0feb6eafa1d31ac230 /src/server/headless/pane_graphics.rs | |
| parent | 952729ee03e0939d7a9d893f87f24179cf0eb7cb (diff) | |
fix(graphics): support high-dpi direct file frames (#2680)
Diffstat (limited to 'src/server/headless/pane_graphics.rs')
| -rw-r--r-- | src/server/headless/pane_graphics.rs | 42 |
1 files changed, 17 insertions, 25 deletions
diff --git a/src/server/headless/pane_graphics.rs b/src/server/headless/pane_graphics.rs index d027f79b..151b26ee 100644 --- a/src/server/headless/pane_graphics.rs +++ b/src/server/headless/pane_graphics.rs @@ -87,26 +87,17 @@ impl HeadlessServer { if let (Some(key), Some((image_id, path, expected_len, transfer_id))) = (direct_key.clone(), direct_frame) { - let mut next_cache = self - .clients - .get(&client_id) - .map(|client| client.graphics_cache.clone()) - .unwrap_or_default(); - let command = (!internal_changed) - .then(|| { - crate::kitty_graphics::prepare_direct_file( - &self.app.state, - &self.app.pane_graphics, - self.app.state.view.tab_surface(), - self.clients - .get(&client_id) - .map(|client| client.cell_size) - .unwrap_or_default(), - &mut next_cache, - &key, - ) - }) - .flatten(); + let command = self.clients.get(&client_id).and_then(|client| { + crate::kitty_graphics::prepare_direct_file( + &self.app.state, + &self.app.pane_graphics, + self.app.state.view.tab_surface(), + client.cell_size, + !internal_changed, + &client.graphics_cache, + &key, + ) + }); let Some(command) = command else { if self.install_inline_fallback(&key) { if msg.respond_to.send(response).is_err() { @@ -161,9 +152,6 @@ impl HeadlessServer { respond_to: msg.respond_to, }); } - if let Some(client) = self.clients.get_mut(&client_id) { - client.graphics_cache = next_cache; - } return if internal_changed { RenderImpact::Full } else { @@ -211,7 +199,9 @@ impl HeadlessServer { let Some(len) = len else { return false; }; - if !self.app.pane_graphics.can_store_inline(key, len) { + if len > crate::api::schema::PANE_GRAPHICS_STREAM_MAX_BYTES + || !self.app.pane_graphics.can_store_inline(key, len) + { return false; } let data = self @@ -365,7 +355,6 @@ impl HeadlessServer { if let Some(client) = self.clients.get_mut(&client_id) { client.direct_graphics = false; - client.graphics_cache.forget_pane_layer(&key, image_id); } self.app.direct_graphics_available = false; if !self.install_inline_fallback(&key) { @@ -373,6 +362,9 @@ impl HeadlessServer { self.retire_all_direct_graphics(); return true; } + if let Some(client) = self.clients.get_mut(&client_id) { + client.graphics_cache.forget_pane_layer(&key, image_id); + } let gate = self .app .pane_graphics |
