git.lucas.co / cce-compositor
Wayland compositor (wlroots)
git clone https://git.lucas.co/cce-compositor.git

commit805a56bb724a81645e1797682c4c172ff45f1c75
parent50c76aecf5
authorLucas Galante <[email protected]>
date2026-07-28 21:33
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,