From d4c249a5cb92dcb188b6c4ba806cc261b1705a80 Mon Sep 17 00:00:00 2001 From: Isaac Freund Date: Thu, 12 Aug 2021 21:58:17 +0200 Subject: [PATCH] output: simplify layer shell handling on destroy No need for noop output hacks here, wlr.LayerSurfaceV1.close() synchronously emits the unmap signal if the layer surface is mapped. --- river/Root.zig | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/river/Root.zig b/river/Root.zig index 94f6d0a..33792d8 100644 --- a/river/Root.zig +++ b/river/Root.zig @@ -178,17 +178,15 @@ pub fn removeOutput(self: *Self, output: *Output) void { } // Close all layer surfaces on the removed output - for (output.layers) |*layer, layer_idx| { - while (layer.pop()) |layer_node| { + for (output.layers) |*layer| { + // Closing the layer surface will cause LayerSurface.handleUnmap() + // to be called synchronously, which will remove it from this list. + while (layer.first) |layer_node| { const layer_surface = &layer_node.data; - // We need to move the closing layer surface to the noop output - // since it may not be immediately destoryed. This just a request - // to close which will trigger unmap and destroy events in - // response, and the LayerSurface needs a valid output to - // handle them. - self.noop_output.layers[layer_idx].prepend(layer_node); - layer_surface.output = &self.noop_output; + layer_surface.wlr_layer_surface.close(); + layer_surface.wlr_layer_surface.output = null; + layer_surface.output = undefined; } }