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

commit600d2afd7964153ddb02eb6e2a1c45f3fb335d07
parentd6642f51b9
authorIsaac Freund <[email protected]>
date2025-03-23 14:50
Window: simplify destroy()

 river/Window.zig        | 20 ++++++--------------
 river/WindowManager.zig |  2 +-
 river/XdgToplevel.zig   |  4 ++--
 3 files changed, 9 insertions(+), 17 deletions(-)

diff --git a/river/Window.zig b/river/Window.zig
index adc6737..960eb7c 100644
--- a/river/Window.zig
+++ b/river/Window.zig
@@ -278,12 +278,10 @@ pub fn create(impl: Impl) error{OutOfMemory}!*Window {
 /// We no longer need the saved buffers after the windowing update sequence in
 /// which the closed event was sent is completed and the following rendering update
 /// sequence is completed as well.
-pub fn destroy(window: *Window, when: enum { lazy, force }) void {
+pub fn destroy(window: *Window) void {
     assert(window.impl == .none);
     assert(!window.mapped);
 
-    window.destroying = true;
-
     // We can't assert(window.windowing_scheduled.state != .ready) since the client may
     // have exited after making its empty initial commit but before the surface
     // is mapped.
@@ -306,20 +304,14 @@ pub fn destroy(window: *Window, when: enum { lazy, force }) void {
         }
     }
 
-    if (when == .force) {
-        window.surfaces.dropSaved();
-    }
-
-    if (!window.surfaces.saved.node.enabled) {
-        window.tree.node.destroy();
-        window.popup_tree.node.destroy();
+    window.tree.node.destroy();
+    window.popup_tree.node.destroy();
 
-        window.link.remove();
+    window.link.remove();
 
-        window.node.deinit();
+    window.node.deinit();
 
-        util.gpa.destroy(window);
-    }
+    util.gpa.destroy(window);
 }
 
 pub fn setDimensionsHint(window: *Window, hint: DimensionsHint) void {
diff --git a/river/WindowManager.zig b/river/WindowManager.zig
index 6f2efb9..97af9cc 100644
--- a/river/WindowManager.zig
+++ b/river/WindowManager.zig
@@ -406,7 +406,7 @@ fn updateRenderingFinish(wm: *WindowManager) void {
                 window.surfaces.dropSaved();
             }
             if (window.destroying) {
-                window.destroy(.force);
+                window.destroy();
             }
         }
     }
diff --git a/river/XdgToplevel.zig b/river/XdgToplevel.zig
index b781c19..fd4f0b6 100644
--- a/river/XdgToplevel.zig
+++ b/river/XdgToplevel.zig
@@ -81,7 +81,7 @@ pub fn create(wlr_toplevel: *wlr.XdgToplevel) error{OutOfMemory}!void {
         .window = undefined,
         .wlr_toplevel = wlr_toplevel,
     } });
-    errdefer window.destroy(.force);
+    errdefer window.destroy();
 
     const toplevel = &window.impl.toplevel;
 
@@ -242,7 +242,7 @@ fn handleDestroy(listener: *wl.Listener(void)) void {
 
     const window = toplevel.window;
     window.impl = .none;
-    window.destroy(.lazy);
+    window.destroying = true;
 }
 
 fn handleMap(listener: *wl.Listener(void)) void {