From 83047342302c70bdbfe291abae44d4b14a20087a Mon Sep 17 00:00:00 2001 From: Ben Buhse Date: Tue, 5 Aug 2025 18:57:16 -0500 Subject: [PATCH] Closing windows is no longer a segfault --- examples/init | 2 +- src/Window.zig | 9 +++++++++ src/WindowManager.zig | 21 +++++++++++++++++---- 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/examples/init b/examples/init index 2d1da04..7226b3c 100755 --- a/examples/init +++ b/examples/init @@ -5,5 +5,5 @@ echo ">>>>> before foot" /usr/bin/foot & -# /usr/bin/foot & +/usr/bin/foot & echo "<<<<< after foot" diff --git a/src/Window.zig b/src/Window.zig index fced985..71b90fe 100644 --- a/src/Window.zig +++ b/src/Window.zig @@ -35,6 +35,15 @@ fn windowListener(river_window_v1: *river.WindowV1, event: river.WindowV1.Event, switch (event) { .closed => { river_window_v1.destroy(); + { + var it = window.context.wm.seats.iterator(.forward); + while (it.next()) |seat| { + if (seat.hovered == window) { + seat.hovered = null; + } + } + } + window.link.remove(); window.context.allocator.destroy(window); }, .dimensions => |ev| { diff --git a/src/WindowManager.zig b/src/WindowManager.zig index 759d5c4..8d1585a 100644 --- a/src/WindowManager.zig +++ b/src/WindowManager.zig @@ -59,10 +59,23 @@ fn windowManagerV1Listener(window_manager_v1: *river.WindowManagerV1, event: riv window_manager_v1.manageFinish(); }, .render_start => { - log.debug("2", .{}); - var it = wm.windows.iterator(.forward); - while (it.next()) |window| { - window.render(); + { + var it = wm.seats.iterator(.forward); + while (it.next()) |seat| { + seat.render(); + } + } + { + var it = wm.outputs.iterator(.forward); + while (it.next()) |output| { + output.render(); + } + } + { + var it = wm.windows.iterator(.forward); + while (it.next()) |window| { + window.render(); + } } window_manager_v1.renderFinish(); },