aboutsummaryrefslogtreecommitdiff
path: root/src/server/headless/retained_surface.rs
diff options
context:
space:
mode:
authorCan Celik <ogulcancelik@gmail.com>2026-09-11 02:08:31 +0300
committerGitHub <noreply@github.com>2026-09-11 02:08:31 +0300
commit6e7d415bcfc09bc5ad293cf1db919e9d17c28034 (patch)
treee034d340d55006a91635a8ca29df75a14a2445c8 /src/server/headless/retained_surface.rs
parent58271459401fa461707c042f7f03867ddcfff3ea (diff)
fix: keep terminal snapshots consistent while scrolling (#3928)
refs #3900
Diffstat (limited to 'src/server/headless/retained_surface.rs')
-rw-r--r--src/server/headless/retained_surface.rs27
1 files changed, 10 insertions, 17 deletions
diff --git a/src/server/headless/retained_surface.rs b/src/server/headless/retained_surface.rs
index 259714a3..d0fb9bba 100644
--- a/src/server/headless/retained_surface.rs
+++ b/src/server/headless/retained_surface.rs
@@ -317,11 +317,10 @@ impl HeadlessServer {
) else {
fallback!("runtime_missing");
};
- let revision_before = runtime.content_seq();
- if !revision_before.is_multiple_of(2) {
- fallback!("unstable_content");
- }
- let patch = match runtime.collect_dirty_patch(width, height) {
+ let Some(snapshot) = runtime.collect_dirty_patch_snapshot(width, height) else {
+ fallback!("terminal_snapshot");
+ };
+ let patch = match snapshot.patch {
crate::pane::TerminalDirtyPatchOutcome::Clean => {
crate::render_prof::event("retained_surface.pane_clean");
crate::pane::TerminalDirtyPatch { rows: Vec::new() }
@@ -331,21 +330,15 @@ impl HeadlessServer {
fallback!("terminal_patch");
}
};
- let graphics_may_have_placements =
- crate::kitty_graphics::is_enabled() && runtime.kitty_graphics_may_have_placements();
- let revision = runtime.content_seq();
- if revision != revision_before || !revision.is_multiple_of(2) {
- fallback!("content_changed");
- }
collected.push(CollectedPanePatch {
pane_id: public_pane_id,
patch,
- content_revision: revision,
- scroll_metrics: runtime.scroll_metrics(),
- mouse_reporting: runtime.mouse_reporting_enabled(),
- sgr_pixel_mouse: runtime.sgr_pixel_mouse_enabled(),
- alternate_screen_active: runtime.alternate_screen_active(),
- graphics_may_have_placements,
+ content_revision: snapshot.content_revision,
+ scroll_metrics: snapshot.scroll_metrics,
+ mouse_reporting: snapshot.mouse_reporting,
+ sgr_pixel_mouse: snapshot.sgr_pixel_mouse,
+ alternate_screen_active: snapshot.alternate_screen_active,
+ graphics_may_have_placements: snapshot.graphics_may_have_placements,
});
}