Wayland compositor (wlroots)
git clone https://git.lucas.co/cce-compositor.git
fix: zoom-aware snap threshold at both resize-size computation sites
Seat::snap_params and get_active_resize_dimensions (the arrange-side
twin that must not diverge) both apply SnapParams::for_zoom, keeping
the snapping grab distance constant in screen pixels while zoomed out.
Co-Authored-By: Claude Fable 5 <[email protected]>
src/server/seat.rs | 3 ++-
src/server/window_manager.rs | 2 +-
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/src/server/seat.rs b/src/server/seat.rs
index d037139..4551b03 100644
--- a/src/server/seat.rs
+++ b/src/server/seat.rs
@@ -951,7 +951,8 @@ impl Seat {
/// Snap parameters for interactive ops, from the current layout config.
unsafe fn snap_params(&self) -> crate::policy::snap::SnapParams {
- (*self.server).wm.layout.snap_params()
+ // Zoom-aware: the felt grab distance stays constant in screen px.
+ (*self.server).wm.layout.snap_params().for_zoom((*self.server).wm.desk_zoom)
}
pub unsafe fn op_update(&mut self, x: i32, y: i32) {
diff --git a/src/server/window_manager.rs b/src/server/window_manager.rs
index 9cff2dd..2267965 100644
--- a/src/server/window_manager.rs
+++ b/src/server/window_manager.rs
@@ -1480,7 +1480,7 @@ impl WindowManager {
// Same math (and snapping) as the seat op's Resize
// arm — this recomputation feeds the arrange
// snapshot and must not diverge from it.
- let sp = self.layout.snap_params();
+ let sp = self.layout.snap_params().for_zoom(self.desk_zoom);
let new_w = crate::policy::snap::resize_axis(
op.start_win_virtual_x, op.start_win_w as f64, virtual_dx,
edges.left, edges.right, 50.0, &sp,