mirror of
https://github.com/swaywm/sway.git
synced 2024-11-18 22:19:14 +00:00
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 wl_listener new_popup;
|
||||||
|
|
||||||
struct wlr_box geo;
|
struct wlr_box geo;
|
||||||
|
enum zwlr_layer_shell_v1_layer layer;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct sway_layer_popup {
|
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 sway_output *output = wlr_output->data;
|
||||||
struct wlr_box old_geo = layer->geo;
|
struct wlr_box old_geo = layer->geo;
|
||||||
arrange_layers(output);
|
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,
|
output_damage_surface(output, old_geo.x, old_geo.y,
|
||||||
layer_surface->surface, true);
|
layer_surface->surface, true);
|
||||||
output_damage_surface(output, layer->geo.x, layer->geo.y,
|
output_damage_surface(output, layer->geo.x, layer->geo.y,
|
||||||
|
|
Loading…
Reference in a new issue