From d67eefdaf068d12d8c701abc72128a6f6b04a8d6 Mon Sep 17 00:00:00 2001 From: Julian Orth Date: Sat, 20 Aug 2022 23:03:29 +0200 Subject: [PATCH] tree: destroy layer shell surfaces when output is disconnected --- src/ifs/wl_surface/zwlr_layer_surface_v1.rs | 3 +-- src/tasks/connector.rs | 10 ++++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/ifs/wl_surface/zwlr_layer_surface_v1.rs b/src/ifs/wl_surface/zwlr_layer_surface_v1.rs index 0e106714..ecedd8ee 100644 --- a/src/ifs/wl_surface/zwlr_layer_surface_v1.rs +++ b/src/ifs/wl_surface/zwlr_layer_surface_v1.rs @@ -126,8 +126,7 @@ impl ZwlrLayerSurfaceV1 { }); } - #[allow(dead_code)] - fn send_closed(&self) { + pub fn send_closed(&self) { self.client.event(Closed { self_id: self.id }); } diff --git a/src/tasks/connector.rs b/src/tasks/connector.rs index e1576b31..b3164c6c 100644 --- a/src/tasks/connector.rs +++ b/src/tasks/connector.rs @@ -228,6 +228,16 @@ impl ConnectorHandler { self.data.connected.set(false); self.state.outputs.remove(&self.id); on.lock_surface.take(); + { + let mut surfaces = vec!(); + for layer in &on.layers { + surfaces.extend(layer.iter()); + } + for surface in surfaces { + surface.destroy_node(); + surface.send_closed(); + } + } let mut target_is_dummy = false; let target = match self.state.outputs.lock().values().next() { Some(o) => o.node.clone(),