diff options
| author | srdusr <[email protected]> | 2025-08-13 20:10:00 +0200 |
|---|---|---|
| committer | srdusr <[email protected]> | 2025-08-13 20:10:00 +0200 |
| commit | 6694a2d9946d98d5752d84b22c45879cab5c9abe (patch) | |
| tree | 49fcbeec0c06573400195eadfdc9bfb222d9c8fd /crates/core/src/manager | |
| parent | 7f4740046a004a1ad06aefa5d1d6b1a351571b1a (diff) | |
| download | srdwm-6694a2d9946d98d5752d84b22c45879cab5c9abe.tar.gz srdwm-6694a2d9946d98d5752d84b22c45879cab5c9abe.zip | |
Fix terminal content disappearing on resize: don't cache a blank content mask
Reported live: "terminal output/everything disappears when i sometimes
resize terminal." masked_content_buffer (the udev/Pixman rounded-corner
content-masking path, live on this machine via general.rounded_corners)
rendered a window's whole surface tree into an off-screen buffer and
returned Some(bytes) unconditionally, with no check for whether that
tree actually produced any drawable elements.
content_epoch bumps on every commit, and a fast interactive resize is a
rapid-fire sequence of commits - real odds that one races ahead of the
client's own texture import, making the off-screen render legitimately
come back empty. That blank result got returned as Some and cached under
the new epoch the same as a correct one would, and rounded_content_buffer
only rebuilds on the next epoch change - so the blank buffer stayed on
screen, fully transparent, until the window's next real content change,
indefinite for an idle terminal.
masked_content_buffer now returns None when the element tree is empty,
before doing the render+readback at all - the same "give up unmasked"
pattern already used for a genuine renderer error. rounded_content_buffer
drops rather than replaces its cache entry on None, so the render loop
falls back to unmasked content for that one frame and retries the masked
path on the next.
Scoped to the udev/Pixman backend; winit masks via a GLES shader with no
equivalent failure mode.
Diffstat (limited to 'crates/core/src/manager')
0 files changed, 0 insertions, 0 deletions