clipboard: add seat destroy signal handler
diff --git a/src/clipboard.c b/src/clipboard.c
index 22d4b26..7db5d04 100644
--- a/src/clipboard.c
+++ b/src/clipboard.c
@@ -243,6 +243,17 @@
 		return;
 }
 
+static void
+clipboard_destroy(struct wl_listener *listener, void *data)
+{
+	struct clipboard *clipboard =
+		container_of(listener, struct clipboard, destroy_listener);
+
+	wl_list_remove(&clipboard->selection_listener.link);
+
+	free(clipboard);
+}
+
 struct clipboard *
 clipboard_create(struct weston_seat *seat)
 {
@@ -255,9 +266,12 @@
 
 	clipboard->seat = seat;
 	clipboard->selection_listener.notify = clipboard_set_selection;
+	clipboard->destroy_listener.notify = clipboard_destroy;
 
 	wl_signal_add(&seat->seat.selection_signal,
 		      &clipboard->selection_listener);
+	wl_signal_add(&seat->seat.destroy_signal,
+		      &clipboard->destroy_listener);
 
 	return clipboard;
 }