@ -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 {