Wayland compositor (wlroots)
git clone https://git.lucas.co/cce-compositor.git
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;