Handle layer changes for layer shell surfaces
Closes: https://github.com/swaywm/sway/issues/4644
References: 1982106c9b
This commit is contained in:
parent
7c9b71f5c6
commit
ad07886543
|
@ -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 {
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in a new issue