compositor: Add a destroy signal and turn weston_shell into signals
diff --git a/src/screenshooter.c b/src/screenshooter.c
index 414bcea..bd81351 100644
--- a/src/screenshooter.c
+++ b/src/screenshooter.c
@@ -33,6 +33,7 @@
struct wl_global *global;
struct wl_client *client;
struct weston_process process;
+ struct wl_listener destroy_listener;
};
static void
@@ -121,14 +122,24 @@
screenshooter_exe, screenshooter_sigchld);
}
-struct screenshooter *
+static void
+screenshooter_destroy(struct wl_listener *listener, void *data)
+{
+ struct screenshooter *shooter =
+ container_of(listener, struct screenshooter, destroy_listener);
+
+ wl_display_remove_global(shooter->ec->wl_display, shooter->global);
+ free(shooter);
+}
+
+void
screenshooter_create(struct weston_compositor *ec)
{
struct screenshooter *shooter;
shooter = malloc(sizeof *shooter);
if (shooter == NULL)
- return NULL;
+ return;
shooter->base.interface = &screenshooter_interface;
shooter->base.implementation =
@@ -142,12 +153,6 @@
weston_compositor_add_binding(ec, KEY_S, 0, 0, MODIFIER_SUPER,
screenshooter_binding, shooter);
- return shooter;
-}
-
-void
-screenshooter_destroy(struct screenshooter *shooter)
-{
- wl_display_remove_global(shooter->ec->wl_display, shooter->global);
- free(shooter);
+ shooter->destroy_listener.notify = screenshooter_destroy;
+ wl_signal_add(&ec->destroy_signal, &shooter->destroy_listener);
}