diff options
| author | srdusr <[email protected]> | 2025-08-15 23:53:00 +0200 |
|---|---|---|
| committer | srdusr <[email protected]> | 2025-08-15 23:53:00 +0200 |
| commit | bd6aadf4d166c05f22f1ab6cdfe2e815e071f162 (patch) | |
| tree | 2059f67bd8f961468a9a76c2ef77af17e1b93c66 /Cargo.toml | |
| parent | cc22fe69a68e0fff027d833029aea850976488c8 (diff) | |
| download | srdwm-bd6aadf4d166c05f22f1ab6cdfe2e815e071f162.tar.gz srdwm-bd6aadf4d166c05f22f1ab6cdfe2e815e071f162.zip | |
Fix a dragged/resized window rendering wrong on a different-scale monitor mid-gesture
Reported live: moving a window onto the other monitor "looks very messed
up". This machine's two real monitors have genuinely different scales
(eDP-1 at 1.0, HDMI-A-1 at ~0.843) - the exact condition needed to expose
this.
WindowManager::update_drag/update_resize only corrected w.monitor once,
at end_drag (update_resize never corrected it at all, not even at the
end) - but state/geometry.rs::sync_geometry reads that field on every
motion tick to pick which monitor's scale converts the client's physical
size into the logical points xdg_toplevel::configure sends it. Crossing
onto a different-scale monitor mid-drag kept every configure computed
against the origin monitor's stale scale for the gesture's whole
remaining duration, only self-correcting once the button came up.
Both functions now re-derive w.monitor from which monitor the window's
live geometry actually overlaps, every motion tick - the same
Rect::overlaps lookup end_drag already used once at the end, now run
continuously instead. end_drag's own fixup stays as a final-word safety
net for a drag that starts and ends between two motion ticks.
Does not close the related, already-documented gap where a client that
doesn't speak wp-fractional-scale-v1 still mismatches once settled on a
sub-1.0-scaled monitor - this only fixes the stale-during-the-gesture
half.
Two new tests, full workspace suite and clippy clean.
Diffstat (limited to 'Cargo.toml')
0 files changed, 0 insertions, 0 deletions