From: Johan Malm Date: Fri, 15 Oct 2021 18:14:07 +0000 (+0100) Subject: layer-shell: fix commit handler (issue #71) X-Git-Url: https://git.mdlowis.com/?a=commitdiff_plain;h=73b8f06a262b5175dbd8ff4ac03fcc1af389ae02;p=proto%2Flabwc.git layer-shell: fix commit handler (issue #71) On commit, do not arrange layers unless the layer shell-specific state changed or the layer was (un)mapped. Chase swaywm/sway@5fd5d643 and swaywm/wlroots@754f40f9 --- diff --git a/include/layers.h b/include/layers.h index 5bf2f6a6..6ed53234 100644 --- a/include/layers.h +++ b/include/layers.h @@ -17,6 +17,7 @@ struct lab_layer_surface { struct wl_listener output_destroy; struct wlr_box geo; + bool mapped; }; void layers_init(struct server *server); diff --git a/src/layers.c b/src/layers.c index 2eca01c3..b8a07279 100644 --- a/src/layers.c +++ b/src/layers.c @@ -250,8 +250,20 @@ surface_commit_notify(struct wl_listener *listener, void *data) { struct lab_layer_surface *layer = wl_container_of(listener, layer, surface_commit); + struct wlr_layer_surface_v1 *layer_surface = layer->layer_surface; struct wlr_output *wlr_output = layer->layer_surface->output; - arrange_layers(output_from_wlr_output(layer->server, wlr_output)); + + if (!wlr_output) { + return; + } + + if (layer_surface->current.committed + || layer->mapped != layer_surface->mapped) { + layer->mapped = layer_surface->mapped; + struct output *output = + output_from_wlr_output(layer->server, wlr_output); + arrange_layers(output); + } damage_all_outputs(layer->server); }