Handle layer changes for layer shell surfaces

Closes: https://github.com/swaywm/sway/issues/4644
References: 1982106c9b
This commit is contained in:
Simon Ser 2019-10-23 19:39:47 +02:00 committed by Drew DeVault
parent 7c9b71f5c6
commit ad07886543
2 changed files with 12 additions and 1 deletions

View File

@ -22,6 +22,7 @@ struct sway_layer_surface {
struct wl_listener new_popup;
struct wlr_box geo;
enum zwlr_layer_shell_v1_layer layer;
};
struct sway_layer_popup {

View File

@ -277,7 +277,17 @@ static void handle_surface_commit(struct wl_listener *listener, void *data) {
struct sway_output *output = wlr_output->data;
struct wlr_box old_geo = layer->geo;
arrange_layers(output);
if (memcmp(&old_geo, &layer->geo, sizeof(struct wlr_box)) != 0) {
bool geo_changed =
memcmp(&old_geo, &layer->geo, sizeof(struct wlr_box)) != 0;
bool layer_changed = layer->layer != layer_surface->current.layer;
if (layer_changed) {
wl_list_remove(&layer->link);
wl_list_insert(&output->layers[layer_surface->current.layer],
&layer->link);
layer->layer = layer_surface->current.layer;
}
if (geo_changed || layer_changed) {
output_damage_surface(output, old_geo.x, old_geo.y,
layer_surface->surface, true);
output_damage_surface(output, layer->geo.x, layer->geo.y,