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

commitf5dd5706cc7cb3bd219373a64edea9b5df68f8d8
parentc2c2b94d15
authorLucas Galante <[email protected]>
date2026-06-15 12:40
Allow client shadows under SSD borders and clip precisely to border edges

 src/server/window.rs       |  6 +++++-
 src/server/xdg_toplevel.rs | 12 ------------
 2 files changed, 5 insertions(+), 13 deletions(-)

diff --git a/src/server/window.rs b/src/server/window.rs
index 8922138..635b6ea 100644
--- a/src/server/window.rs
+++ b/src/server/window.rs
@@ -1516,7 +1516,11 @@ impl Window {
 
         self.surfaces.set_enabled(true);
 
-        let margin = 4;
+        let margin = if self.wm_requested.ssd {
+            self.rendering_requested.border.width as i32
+        } else {
+            4
+        };
         surface_clip.x -= margin;
         surface_clip.y -= margin;
         surface_clip.width += 2 * margin;
diff --git a/src/server/xdg_toplevel.rs b/src/server/xdg_toplevel.rs
index e1b6644..a8a5ea5 100644
--- a/src/server/xdg_toplevel.rs
+++ b/src/server/xdg_toplevel.rs
@@ -415,10 +415,6 @@ unsafe extern "C" fn handle_commit(listener: *mut ffi::wl_listener, _data: *mut
     let capture_node = &mut (*(*window).capture_scene).tree as *mut ffi::wlr_scene_tree as *mut ffi::wlr_scene_node;
     let mut geom = std::mem::zeroed();
     ffi::river_wlr_xdg_surface_get_geometry(base, &mut geom);
-    if (*window).wm_requested.ssd {
-        geom.x = 0;
-        geom.y = 0;
-    }
     ffi::wlr_scene_subsurface_tree_set_clip(capture_node, &geom);
 
     let mut min_w = 0;
@@ -450,10 +446,6 @@ unsafe extern "C" fn handle_commit(listener: *mut ffi::wl_listener, _data: *mut
             let old_geometry = (*toplevel).geometry;
             let mut new_geometry = std::mem::zeroed();
             ffi::river_wlr_xdg_surface_get_geometry(base, &mut new_geometry);
-            if (*window).wm_requested.ssd {
-                new_geometry.x = 0;
-                new_geometry.y = 0;
-            }
             (*toplevel).geometry = new_geometry;
 
             let size_changed = new_geometry.width != old_geometry.width || new_geometry.height != old_geometry.height;
@@ -474,10 +466,6 @@ unsafe extern "C" fn handle_commit(listener: *mut ffi::wl_listener, _data: *mut
         ConfigureState::Acked | ConfigureState::TimedOutAcked => {
             let mut new_geometry = std::mem::zeroed();
             ffi::river_wlr_xdg_surface_get_geometry(base, &mut new_geometry);
-            if (*window).wm_requested.ssd {
-                new_geometry.x = 0;
-                new_geometry.y = 0;
-            }
             (*toplevel).geometry = new_geometry;
 
             (*window).rendering_scheduled.width = new_geometry.width as u32;