From 0d8b45991207d5492f29b5472230f9b982374729 Mon Sep 17 00:00:00 2001 From: Consolatis <35009135+Consolatis@users.noreply.github.com> Date: Fri, 30 Dec 2022 01:14:27 +0100 Subject: [PATCH] src/layers.c: destroy layer surface on output loss --- src/layers.c | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/src/layers.c b/src/layers.c index 4b2e9eb6..220914d1 100644 --- a/src/layers.c +++ b/src/layers.c @@ -117,6 +117,7 @@ handle_output_destroy(struct wl_listener *listener, void *data) struct lab_layer_surface *layer = wl_container_of(listener, layer, output_destroy); layer->scene_layer_surface->layer_surface->output = NULL; + wlr_layer_surface_v1_destroy(layer->scene_layer_surface->layer_surface); } static void @@ -272,19 +273,13 @@ handle_new_popup(struct wl_listener *listener, void *data) wl_container_of(listener, toplevel, new_popup); struct wlr_xdg_popup *wlr_popup = data; - int lx, ly; struct server *server = toplevel->server; struct wlr_scene_layer_surface_v1 *surface = toplevel->scene_layer_surface; - wlr_scene_node_coords(&surface->tree->node, &lx, &ly); - - if (!surface->layer_surface->output) { - /* Work-around for moving layer shell surfaces on output destruction */ - struct wlr_output *wlr_output; - wlr_output = wlr_output_layout_output_at(server->output_layout, lx, ly); - surface->layer_surface->output = wlr_output; - } struct output *output = surface->layer_surface->output->data; + int lx, ly; + wlr_scene_node_coords(&surface->tree->node, &lx, &ly); + struct wlr_box output_box = { 0 }; wlr_output_layout_get_box(server->output_layout, output->wlr_output, &output_box);