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

commit1c9802d3a2488fd90b312aa4a3431efee6846330
parenta2c118be84
authorIsaac Freund <[email protected]>
date2026-03-05 14:09
Window: fix assertion failure on wm restart

Fixes: 6bdb5055152e0f4570c3ea27e1f1c03717b50b2b

 river/Window.zig | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/river/Window.zig b/river/Window.zig
index 72699db..8ecb8a1 100644
--- a/river/Window.zig
+++ b/river/Window.zig
@@ -412,14 +412,16 @@ pub fn manageStart(window: *Window) void {
                 window.node.link.remove();
                 server.wm.rendering_requested.list.append(&window.node);
 
-                if (wlr.ExtForeignToplevelHandleV1.create(server.foreign_toplevel_list, &.{
-                    .title = window.getTitle(),
-                    .app_id = window.getAppId(),
-                })) |handle| {
-                    assert(window.foreign_toplevel_handle == null);
-                    window.foreign_toplevel_handle = handle;
-                } else |_| {
-                    log.err("failed to create ext foreign toplevel handle", .{});
+                // A handle may have already been created if the window manager is restarted.
+                if (window.foreign_toplevel_handle == null) {
+                    if (wlr.ExtForeignToplevelHandleV1.create(server.foreign_toplevel_list, &.{
+                        .title = window.getTitle(),
+                        .app_id = window.getAppId(),
+                    })) |handle| {
+                        window.foreign_toplevel_handle = handle;
+                    } else |_| {
+                        log.err("failed to create ext foreign toplevel handle", .{});
+                    }
                 }
 
                 break :blk window_v1;