+ struct evdev_device *device, *next;
+ struct udev_seat *seat, *tmp;
+
+ list_for_each_safe(seat, tmp, &input->base.seat_list, base.link) {
+ libinput_seat_ref(&seat->base);
+ list_for_each_safe(device, next,
+ &seat->base.devices_list, base.link) {
+ evdev_device_remove(device);
+ }
+ libinput_seat_unref(&seat->base);
+ }
+}
+
+static void
+udev_input_disable(struct libinput *libinput)
+{
+ struct udev_input *input = (struct udev_input*)libinput;
+
+ if (!input->udev_monitor)
+ return;
+
+ udev_monitor_unref(input->udev_monitor);
+ input->udev_monitor = NULL;
+ libinput_remove_source(&input->base, input->udev_monitor_source);
+ input->udev_monitor_source = NULL;
+
+ udev_input_remove_devices(input);
+}
+
+static int
+udev_input_enable(struct libinput *libinput)
+{
+ struct udev_input *input = (struct udev_input*)libinput;