summaryrefslogtreecommitdiff
path: root/compositor/evdev.c
diff options
context:
space:
mode:
Diffstat (limited to 'compositor/evdev.c')
-rw-r--r--compositor/evdev.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/compositor/evdev.c b/compositor/evdev.c
index 43776c8a..25784506 100644
--- a/compositor/evdev.c
+++ b/compositor/evdev.c
@@ -537,3 +537,30 @@ evdev_input_add_devices(struct wlsc_compositor *c,
c->input_device = &input->base.input_device;
}
+
+static void
+evdev_remove_devices(struct wlsc_input_device *input_base)
+{
+ struct evdev_input *input = (struct evdev_input *) input_base;
+ struct evdev_input_device *device, *next;
+
+ wl_list_for_each_safe(device, next, &input->devices_list, link) {
+ fprintf(stderr, "evdev input device: removed: %s\n", device->devnode);
+ wl_event_source_remove(device->source);
+ wl_list_remove(&device->link);
+ close(device->fd);
+ free(device->devnode);
+ free(device);
+ }
+}
+
+void
+evdev_input_destroy(struct wlsc_input_device *input_base)
+{
+ struct evdev_input *input = (struct evdev_input *) input_base;
+
+ evdev_remove_devices(input_base);
+ wl_list_remove(&input->base.link);
+ free(input->seat_id);
+ free(input);
+}