aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/wlr/interfaces/wlr_input_device.h7
-rw-r--r--types/wlr_input_device.c11
2 files changed, 18 insertions, 0 deletions
diff --git a/include/wlr/interfaces/wlr_input_device.h b/include/wlr/interfaces/wlr_input_device.h
index 04d5644f..de527393 100644
--- a/include/wlr/interfaces/wlr_input_device.h
+++ b/include/wlr/interfaces/wlr_input_device.h
@@ -18,6 +18,13 @@ struct wlr_input_device_impl {
void wlr_input_device_init(struct wlr_input_device *wlr_device,
enum wlr_input_device_type type, const struct wlr_input_device_impl *impl,
const char *name);
+
+/**
+ * Cleans up all of the provided wlr_input_device resources and signals the
+ * destroy event.
+ */
+void wlr_input_device_finish(struct wlr_input_device *wlr_device);
+
void wlr_input_device_destroy(struct wlr_input_device *dev);
#endif
diff --git a/types/wlr_input_device.c b/types/wlr_input_device.c
index 7f9654e5..50afdaff 100644
--- a/types/wlr_input_device.c
+++ b/types/wlr_input_device.c
@@ -25,6 +25,17 @@ void wlr_input_device_init(struct wlr_input_device *dev,
wl_signal_init(&dev->events.destroy);
}
+void wlr_input_device_finish(struct wlr_input_device *wlr_device) {
+ if (!wlr_device) {
+ return;
+ }
+
+ wlr_signal_emit_safe(&wlr_device->events.destroy, wlr_device);
+
+ free(wlr_device->name);
+ free(wlr_device->output_name);
+}
+
void wlr_input_device_destroy(struct wlr_input_device *dev) {
if (!dev) {
return;