diff options
| author | Kirill Primak <vyivel@eclair.cafe> | 2024-01-13 17:04:22 +0300 | 
|---|---|---|
| committer | Simon Ser <contact@emersion.fr> | 2024-01-17 16:54:37 +0100 | 
| commit | 904d256581c4d2f6b2b08cd0ef84966bb8a0befd (patch) | |
| tree | eeef67479f26e093115ca149477c827195890ce6 | |
| parent | c5fd8c050f7ddbfe3e5b7abc8f5f6ace3a3c5307 (diff) | |
| download | sway-904d256581c4d2f6b2b08cd0ef84966bb8a0befd.tar.xz | |
layer-shell: don't try to unmap on destroy
A surface is guaranteed to be unmapped on destruction.
| -rw-r--r-- | sway/desktop/layer_shell.c | 35 | 
1 files changed, 14 insertions, 21 deletions
diff --git a/sway/desktop/layer_shell.c b/sway/desktop/layer_shell.c index 31d8558c..1da4c61a 100644 --- a/sway/desktop/layer_shell.c +++ b/sway/desktop/layer_shell.c @@ -360,23 +360,6 @@ static void handle_surface_commit(struct wl_listener *listener, void *data) {  	transaction_commit_dirty();  } -static void unmap(struct sway_layer_surface *sway_layer) { -	struct sway_seat *seat; -	wl_list_for_each(seat, &server.input->seats, link) { -		if (seat->focused_layer == sway_layer->layer_surface) { -			seat_set_focus_layer(seat, NULL); -		} -	} - -	cursor_rebase_all(); - -	struct wlr_output *wlr_output = sway_layer->layer_surface->output; -	sway_assert(wlr_output, "wlr_layer_surface_v1 has null output"); -	struct sway_output *output = wlr_output->data; -	output_damage_surface(output, sway_layer->geo.x, sway_layer->geo.y, -		sway_layer->layer_surface->surface, true); -} -  static void layer_subsurface_destroy(struct sway_layer_subsurface *subsurface);  static void handle_destroy(struct wl_listener *listener, void *data) { @@ -384,9 +367,6 @@ static void handle_destroy(struct wl_listener *listener, void *data) {  		wl_container_of(listener, sway_layer, destroy);  	sway_log(SWAY_DEBUG, "Layer surface destroyed (%s)",  		sway_layer->layer_surface->namespace); -	if (sway_layer->layer_surface->surface->mapped) { -		unmap(sway_layer); -	}  	struct sway_layer_subsurface *subsurface, *subsurface_tmp;  	wl_list_for_each_safe(subsurface, subsurface_tmp, &sway_layer->subsurfaces, link) { @@ -426,7 +406,20 @@ static void handle_map(struct wl_listener *listener, void *data) {  static void handle_unmap(struct wl_listener *listener, void *data) {  	struct sway_layer_surface *sway_layer = wl_container_of(  			listener, sway_layer, unmap); -	unmap(sway_layer); +	struct sway_seat *seat; +	wl_list_for_each(seat, &server.input->seats, link) { +		if (seat->focused_layer == sway_layer->layer_surface) { +			seat_set_focus_layer(seat, NULL); +		} +	} + +	cursor_rebase_all(); + +	struct wlr_output *wlr_output = sway_layer->layer_surface->output; +	sway_assert(wlr_output, "wlr_layer_surface_v1 has null output"); +	struct sway_output *output = wlr_output->data; +	output_damage_surface(output, sway_layer->geo.x, sway_layer->geo.y, +		sway_layer->layer_surface->surface, true);  }  static void subsurface_damage(struct sway_layer_subsurface *subsurface,  | 
