diff options
| author | srdusr <[email protected]> | 2025-03-07 22:07:00 +0200 |
|---|---|---|
| committer | srdusr <[email protected]> | 2025-03-07 22:07:00 +0200 |
| commit | 9667308e6def22e9b1fa352357a788749ad92c74 (patch) | |
| tree | 5fa0158eba3b3f6fa71c410bc5d2b19f70c018aa /crates/wayland/src/udev/platform.rs | |
| parent | 4c97f8647b9543abefbed3ece209d335de6aa9d6 (diff) | |
| download | srdwm-9667308e6def22e9b1fa352357a788749ad92c74.tar.gz srdwm-9667308e6def22e9b1fa352357a788749ad92c74.zip | |
Fix stale ghost content after window move/resize/close on real hardware
The udev backend's damage tracking only forced a full repaint (ages =
[0, 0]) on a workspace switch or a VT-switch resume. An ordinary
move/resize/open/close/restack within the same workspace relied
entirely on OutputDamageTracker's own per-element diffing to compute
correct damage for the region a window vacated - which doesn't always
hold: maximizing a window over a second one, then un-maximizing, left
a persistent ghost of the second window's old titlebar/status text
sitting in the vacated corner, unchanged across multiple otherwise-
idle frames.
render_udev_frame now also hashes every visible window's id and rect
each frame and forces the same full-repaint reset whenever that
signature changes - the same "defensive, not a fix for a proven bug
in the diffing itself" reasoning the existing workspace-switch reset
already uses, just triggered by a second, complementary condition.
Diffstat (limited to 'crates/wayland/src/udev/platform.rs')
| -rw-r--r-- | crates/wayland/src/udev/platform.rs | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/crates/wayland/src/udev/platform.rs b/crates/wayland/src/udev/platform.rs index 1d2ef0e..2868f15 100644 --- a/crates/wayland/src/udev/platform.rs +++ b/crates/wayland/src/udev/platform.rs @@ -130,6 +130,7 @@ impl UdevPlatform { session: session.clone(), disabled_connectors: std::collections::HashSet::new(), last_rendered_workspace: None, + last_rendered_layout: None, }; let mut state = CompState { |