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

commit0d7a599b5a6b58bc521b45ae8d227527d4c729d3
parentf450c6d0cb
authorLucas Galante <[email protected]>
date2026-06-26 12:44
feat: enable viewport panning by scrolling on the desktop background without holding the Super key

 src/server/cursor.rs | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/src/server/cursor.rs b/src/server/cursor.rs
index b67b439..853eff8 100644
--- a/src/server/cursor.rs
+++ b/src/server/cursor.rs
@@ -978,7 +978,22 @@ unsafe extern "C" fn handle_axis(listener: *mut ffi::wl_listener, data: *mut std
         return;
     }
 
-    if (modifiers & 0x40) != 0 {
+    let is_on_background = {
+        let lx = cursor.x();
+        let ly = cursor.y();
+        let server = seat.server;
+        let mut over_interactive = false;
+        if let Some(result) = (*server).scene.at(lx, ly) {
+            match result.data {
+                SceneNodeDataVal::Window(_) | SceneNodeDataVal::LayerSurface(_) | SceneNodeDataVal::ShellSurface(_) | SceneNodeDataVal::LockSurface(_) | SceneNodeDataVal::OverrideRedirect(_) => {
+                    over_interactive = true;
+                }
+            }
+        }
+        !over_interactive
+    };
+
+    if (modifiers & 0x40) != 0 || is_on_background {
         let wm = &mut (*seat.server).wm;
         wm.stop_panning_animation();
         let step = delta / wm.desk_zoom;