diff options
| author | Can Celik <ogulcancelik@gmail.com> | 2026-08-09 02:04:39 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-08-09 02:04:39 +0300 |
| commit | 1777e9bba32b953ed1ad203b4a16d01105539000 (patch) | |
| tree | 22096973812c9baba822453d8470bdcfe64fc2a6 /src/server/clients.rs | |
| parent | 36a8d36a7258e08b40c01bf521b1f4006525f143 (diff) | |
feat(graphics): add direct pane frame streaming (#2523)
* feat(graphics): add direct pane frame streaming
* feat(graphics): expose pane visibility
* test(graphics): preserve legacy terminal image output
* fix(graphics): harden streaming lifecycle
* fix(input): preserve mouse releases outside panes
Diffstat (limited to 'src/server/clients.rs')
| -rw-r--r-- | src/server/clients.rs | 24 |
1 files changed, 9 insertions, 15 deletions
diff --git a/src/server/clients.rs b/src/server/clients.rs index bb0f31c6..0d3d9ae0 100644 --- a/src/server/clients.rs +++ b/src/server/clients.rs @@ -24,7 +24,6 @@ pub(crate) type RenderTarget = ( pub(crate) enum DeferredRender { #[default] None, - Graphics, Full, } @@ -56,14 +55,18 @@ pub(crate) struct ClientConnection { pub(crate) render_state: ClientRenderState, /// Client-local host Kitty graphics cache. pub(crate) graphics_cache: crate::kitty_graphics::HostGraphicsCache, + /// Passive eligibility for audited local Kitty regular-file graphics. + pub(crate) direct_graphics: bool, + /// Whether this frontend preserves exact SGR pixel reports. + pub(crate) pixel_mouse: bool, /// Whether the next graphics frame must clear and rebuild host-side Kitty state. pub(crate) graphics_surface_reset_pending: bool, /// Whether an ordinary render was skipped because the render channel was full. pub(crate) render_pending: bool, - /// Whether a pane-graphics-only render was skipped because the channel was full. - pane_graphics_render_pending: bool, /// Last host mouse capture mode sent to this client. pub(crate) host_mouse_capture_active: Option<bool>, + /// Last SGR pixel provenance mode sent to this client. + pub(crate) host_sgr_pixels_active: Option<bool>, /// Last Kitty report-all mode sent to this client's host terminal. pub(crate) host_keyboard_report_all_active: Option<bool>, /// Temporary files staged from this client's local clipboard image pastes. @@ -125,10 +128,12 @@ impl ClientConnection { last_activity, render_state: ClientRenderState::new(render_encoding), graphics_cache: crate::kitty_graphics::HostGraphicsCache::default(), + direct_graphics: false, + pixel_mouse: false, graphics_surface_reset_pending: false, render_pending: false, - pane_graphics_render_pending: false, host_mouse_capture_active: None, + host_sgr_pixels_active: None, host_keyboard_report_all_active: None, staged_clipboard_files: Vec::new(), writer, @@ -137,14 +142,11 @@ impl ClientConnection { pub(crate) fn request_repaint(&mut self) { self.render_state.request_repaint(); - self.pane_graphics_render_pending = false; } pub(crate) fn deferred_render(&self) -> DeferredRender { if self.render_pending { DeferredRender::Full - } else if self.pane_graphics_render_pending { - DeferredRender::Graphics } else { DeferredRender::None } @@ -152,18 +154,10 @@ impl ClientConnection { pub(crate) fn clear_deferred_render(&mut self) { self.render_pending = false; - self.pane_graphics_render_pending = false; } pub(crate) fn defer_full_render(&mut self) { self.render_pending = true; - self.pane_graphics_render_pending = false; - } - - pub(crate) fn defer_pane_graphics_render(&mut self) { - if !self.render_pending { - self.pane_graphics_render_pending = true; - } } pub(crate) fn take_deferred_render(&mut self) -> DeferredRender { |
