diff --git a/compositor/compositor.c b/compositor/compositor.c index c4ab9db0d..980098d4f 100644 --- a/compositor/compositor.c +++ b/compositor/compositor.c @@ -2022,6 +2022,8 @@ wlsc_compositor_shutdown(struct wlsc_compositor *ec) /* Destroy all outputs associated with this compositor */ wl_list_for_each_safe(output, next, &ec->output_list, link) output->destroy(output); + + wlsc_binding_list_destroy_all(&ec->binding_list); } static int on_term_signal(int signal_number, void *data) diff --git a/compositor/compositor.h b/compositor/compositor.h index 8611b40aa..fa47489a9 100644 --- a/compositor/compositor.h +++ b/compositor/compositor.h @@ -354,6 +354,9 @@ wlsc_compositor_add_binding(struct wlsc_compositor *compositor, void wlsc_binding_destroy(struct wlsc_binding *binding); +void +wlsc_binding_list_destroy_all(struct wl_list *list); + void wlsc_compositor_run_binding(struct wlsc_compositor *compositor, struct wlsc_input_device *device, diff --git a/compositor/util.c b/compositor/util.c index 370edbc7d..4ce1774e6 100644 --- a/compositor/util.c +++ b/compositor/util.c @@ -282,6 +282,15 @@ wlsc_binding_destroy(struct wlsc_binding *binding) free(binding); } +WL_EXPORT void +wlsc_binding_list_destroy_all(struct wl_list *list) +{ + struct wlsc_binding *binding, *tmp; + + wl_list_for_each_safe(binding, tmp, list, link) + wlsc_binding_destroy(binding); +} + WL_EXPORT void wlsc_compositor_run_binding(struct wlsc_compositor *compositor, struct wlsc_input_device *device,