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.
This commit is contained in:
parent
1e18ac9d74
commit
d4c249a5cb
1 changed files with 7 additions and 9 deletions
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue