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

commit640e6c02d107588e1f003113005c56da3710e145
parent13df7b2c62
authorIsaac Freund <[email protected]>
date2025-12-18 20:08
WindowManager: fix shell surfaces above fullscreen

From river-window-management-v1:

All river_shell_surface_v1 objects above the top fullscreen window in
the rendering order will continue to be rendered.

 river/WindowManager.zig | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/river/WindowManager.zig b/river/WindowManager.zig
index 385bfb7..a009f4e 100644
--- a/river/WindowManager.zig
+++ b/river/WindowManager.zig
@@ -447,6 +447,7 @@ fn renderFinish(wm: *WindowManager) void {
     }
 
     {
+        var found_fullscreen: bool = false;
         var it = wm.rendering_requested.list.iterator(.forward);
         while (it.next()) |node| {
             switch (node.get()) {
@@ -456,6 +457,7 @@ fn renderFinish(wm: *WindowManager) void {
                     if (window.wm_requested.fullscreen != null) {
                         window.tree.node.reparent(server.scene.layers.fullscreen);
                         window.tree.node.raiseToTop();
+                        found_fullscreen = true;
                     } else {
                         window.tree.node.reparent(server.scene.layers.wm);
                         window.tree.node.raiseToTop();
@@ -463,8 +465,12 @@ fn renderFinish(wm: *WindowManager) void {
                 },
                 .shell_surface => |shell_surface| {
                     shell_surface.renderFinish();
-                    shell_surface.tree.node.reparent(server.scene.layers.wm);
                     shell_surface.popup_tree.node.reparent(server.scene.layers.popups);
+                    if (found_fullscreen) {
+                        shell_surface.tree.node.reparent(server.scene.layers.fullscreen);
+                    } else {
+                        shell_surface.tree.node.reparent(server.scene.layers.wm);
+                    }
                     shell_surface.tree.node.raiseToTop();
                 },
             }