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

commit3d648f89c9331316153d710f42f42ddcdeb6d4d6
parent673db6e83c
authorLucas Galante <[email protected]>
date2026-06-20 10:32
Fix CSD window gaps in tiled layouts by avoiding decoration subtraction and maintaining surface alignment

 src/server/window.rs         |  9 +--------
 src/server/window_manager.rs | 11 ++++++++---
 2 files changed, 9 insertions(+), 11 deletions(-)

diff --git a/src/server/window.rs b/src/server/window.rs
index 8857b8e..983a4e2 100644
--- a/src/server/window.rs
+++ b/src/server/window.rs
@@ -1548,14 +1548,7 @@ impl Window {
                         x = 0;
                         y = 0;
                     }
-                    // For tiled CSD windows, do not shift the surfaces tree
-                    if !self.wm_requested.ssd &&
-                       self.tiling_mode != crate::tiling::TilingMode::Floating &&
-                       self.tiling_mode != crate::tiling::TilingMode::Popup &&
-                       self.tiling_mode != crate::tiling::TilingMode::Status {
-                        x = 0;
-                        y = 0;
-                    }
+
                     (x, y)
                 }
             }
diff --git a/src/server/window_manager.rs b/src/server/window_manager.rs
index 700c36c..7fe5c57 100644
--- a/src/server/window_manager.rs
+++ b/src/server/window_manager.rs
@@ -918,9 +918,14 @@ impl WindowManager {
                     let mut target_w = w;
                     let mut target_h = h;
                     if !(*win_ptr).wm_requested.ssd {
-                        let (dec_w, dec_h) = (*win_ptr).get_decorations_size();
-                        target_w = (w - dec_w).max(1);
-                        target_h = (h - dec_h).max(1);
+                        let is_tiled = current_layout != crate::tiling::TilingMode::Floating &&
+                                       current_layout != crate::tiling::TilingMode::Popup &&
+                                       current_layout != crate::tiling::TilingMode::Status;
+                        if !is_tiled {
+                            let (dec_w, dec_h) = (*win_ptr).get_decorations_size();
+                            target_w = (w - dec_w).max(1);
+                            target_h = (h - dec_h).max(1);
+                        }
                     }
                     (*win_ptr).wm_requested.dimensions = Some(crate::window::Dimensions {
                         width: target_w as u32,