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

commit3d91409a9d51d9d21fc4a81eba043d81832ff889
parentdf53a79648
authorKirill Primak <[email protected]>
date2026-05-09 15:18
WindowManager: process hidden fullscreen windows correctly

This commit fixes surface z-order when hidden fullscreen windows are
present.

 river/WindowManager.zig | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/river/WindowManager.zig b/river/WindowManager.zig
index 868d10a..370256e 100644
--- a/river/WindowManager.zig
+++ b/river/WindowManager.zig
@@ -495,7 +495,7 @@ fn renderFinish(wm: *WindowManager) void {
             switch (node.get()) {
                 .window => |window| {
                     hash.update(@ptrCast(&window.ref));
-                    hash.update(&.{@intFromBool(window.wm_requested.fullscreen != null)});
+                    hash.update(&.{@intFromBool(renderedFullscreen(window))});
                 },
                 .shell_surface => |shell_surface| {
                     hash.update(@ptrCast(&shell_surface));
@@ -519,7 +519,7 @@ fn renderFinish(wm: *WindowManager) void {
                     window.renderFinish();
                     if (!reorder) continue;
                     window.popup_tree.node.reparent(server.scene.layers.popups);
-                    if (window.wm_requested.fullscreen != null) {
+                    if (renderedFullscreen(window)) {
                         window.tree.node.reparent(server.scene.layers.fullscreen);
                         window.tree.node.raiseToTop();
                         found_fullscreen = true;
@@ -560,3 +560,7 @@ fn renderFinish(wm: *WindowManager) void {
 
     server.input_manager.processEvents();
 }
+
+fn renderedFullscreen(window: *Window) bool {
+    return window.wm_requested.fullscreen != null and !window.rendering_requested.hidden;
+}