Wayland compositor (wlroots)
git clone https://git.lucas.co/cce-compositor.git
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 {