diff options
Diffstat (limited to 'sway')
| -rw-r--r-- | sway/extensions.c | 29 | 
1 files changed, 29 insertions, 0 deletions
| diff --git a/sway/extensions.c b/sway/extensions.c index 1f8e9a7c..18621015 100644 --- a/sway/extensions.c +++ b/sway/extensions.c @@ -8,6 +8,31 @@  struct desktop_shell_state desktop_shell; +void background_surface_destructor(struct wl_resource *resource) { +	sway_log(L_DEBUG, "Background surface killed"); +	int i; +	for (i = 0; i < desktop_shell.backgrounds->length; ++i) { +		struct background_config *config = desktop_shell.backgrounds->items[i]; +		if (config->resource == resource) { +			list_del(desktop_shell.backgrounds, i); +			break; +		} +	} +} + +void panel_surface_destructor(struct wl_resource *resource) { +	sway_log(L_DEBUG, "Panel surface killed"); +	int i; +	for (i = 0; i < desktop_shell.panels->length; ++i) { +		struct panel_config *config = desktop_shell.panels->items[i]; +		if (config->resource == resource) { +			list_del(desktop_shell.panels, i); +			arrange_windows(&root_container, -1, -1); +			break; +		} +	} +} +  static void set_background(struct wl_client *client, struct wl_resource *resource,  		struct wl_resource *_output, struct wl_resource *surface) {  	wlc_handle output = wlc_handle_from_wl_output_resource(_output); @@ -18,7 +43,9 @@ static void set_background(struct wl_client *client, struct wl_resource *resourc  	struct background_config *config = malloc(sizeof(struct background_config));  	config->output = output;  	config->surface = wlc_resource_from_wl_surface_resource(surface); +	config->resource = surface;  	list_add(desktop_shell.backgrounds, config); +	wl_resource_set_destructor(surface, background_surface_destructor);  }  static void set_panel(struct wl_client *client, struct wl_resource *resource, @@ -31,7 +58,9 @@ static void set_panel(struct wl_client *client, struct wl_resource *resource,  	struct panel_config *config = malloc(sizeof(struct panel_config));  	config->output = output;  	config->surface = wlc_resource_from_wl_surface_resource(surface); +	config->resource = surface;  	list_add(desktop_shell.panels, config); +	wl_resource_set_destructor(surface, panel_surface_destructor);  	desktop_shell.panel_size = *wlc_surface_get_size(config->surface);  	arrange_windows(&root_container, -1, -1);  } | 
