aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--river/Root.zig16
1 files 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;
}
}