diff options
Diffstat (limited to 'sway/desktop')
| -rw-r--r-- | sway/desktop/layer_shell.c | 14 | 
1 files changed, 8 insertions, 6 deletions
| diff --git a/sway/desktop/layer_shell.c b/sway/desktop/layer_shell.c index cadc702a..8a41e705 100644 --- a/sway/desktop/layer_shell.c +++ b/sway/desktop/layer_shell.c @@ -169,6 +169,9 @@ static void arrange_layer(struct sway_output *output, struct wl_list *list,  		}  		// Apply  		sway_layer->geo = box; +		wlr_surface_get_extends(layer->surface, &sway_layer->extent); +		sway_layer->extent.x += box.x; +		sway_layer->extent.y += box.y;  		apply_exclusive(usable_area, state->anchor, state->exclusive_zone,  				state->margin.top, state->margin.right,  				state->margin.bottom, state->margin.left); @@ -297,11 +300,11 @@ 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; +	struct wlr_box old_extent = layer->extent;  	arrange_layers(output); -	bool geo_changed = -		memcmp(&old_geo, &layer->geo, sizeof(struct wlr_box)) != 0; +	bool extent_changed = +		memcmp(&old_extent, &layer->extent, sizeof(struct wlr_box)) != 0;  	bool layer_changed = layer->layer != layer_surface->current.layer;  	if (layer_changed) {  		wl_list_remove(&layer->link); @@ -309,9 +312,8 @@ static void handle_surface_commit(struct wl_listener *listener, void *data) {  			&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); +	if (extent_changed || layer_changed) { +		output_damage_box(output, &old_extent);  		output_damage_surface(output, layer->geo.x, layer->geo.y,  			layer_surface->surface, true);  	} else { | 
