return 0;
}
-int
+static int
udev_seat_add_devices(struct udev_seat *seat, struct udev *udev)
{
struct udev_enumerate *e;
}
int
-udev_seat_enable_udev_monitor(struct udev_seat *seat, struct udev *udev)
+udev_seat_enable(struct udev_seat *seat, struct udev *udev)
{
struct wl_event_loop *loop;
struct weston_compositor *c = seat->base.compositor;
seat->udev_monitor = udev_monitor_new_from_netlink(udev, "udev");
if (!seat->udev_monitor) {
weston_log("udev: failed to create the udev monitor\n");
- return 0;
+ return -1;
}
udev_monitor_filter_add_match_subsystem_devtype(seat->udev_monitor,
if (udev_monitor_enable_receiving(seat->udev_monitor)) {
weston_log("udev: failed to bind the udev monitor\n");
udev_monitor_unref(seat->udev_monitor);
- return 0;
+ return -1;
}
loop = wl_display_get_event_loop(c->wl_display);
evdev_udev_handler, seat);
if (!seat->udev_monitor_source) {
udev_monitor_unref(seat->udev_monitor);
- return 0;
+ return -1;
}
- return 1;
+ if (udev_seat_add_devices(seat, udev) < 0)
+ return -1;
+
+ return 0;
+}
+
+static void
+udev_seat_remove_devices(struct udev_seat *seat)
+{
+ struct evdev_device *device, *next;
+
+ wl_list_for_each_safe(device, next, &seat->devices_list, link)
+ evdev_device_destroy(device);
+
+ if (seat->base.seat.keyboard)
+ notify_keyboard_focus_out(&seat->base);
}
void
-udev_seat_disable_udev_monitor(struct udev_seat *seat)
+udev_seat_disable(struct udev_seat *seat)
{
if (!seat->udev_monitor)
return;
seat->udev_monitor = NULL;
wl_event_source_remove(seat->udev_monitor_source);
seat->udev_monitor_source = NULL;
+
+ udev_seat_remove_devices(seat);
}
static void
wl_list_init(&seat->devices_list);
seat->seat_id = strdup(seat_id);
- if (!udev_seat_enable_udev_monitor(seat, udev))
- goto err;
- if (udev_seat_add_devices(seat, udev) < 0)
+ if (udev_seat_enable(seat, udev) < 0)
goto err;
return seat;
}
void
-udev_seat_remove_devices(struct udev_seat *seat)
-{
- struct evdev_device *device, *next;
-
- wl_list_for_each_safe(device, next, &seat->devices_list, link)
- evdev_device_destroy(device);
-
- if (seat->base.seat.keyboard)
- notify_keyboard_focus_out(&seat->base);
-}
-
-void
udev_seat_destroy(struct udev_seat *seat)
{
- udev_seat_remove_devices(seat);
- udev_seat_disable_udev_monitor(seat);
+ udev_seat_disable(seat);
weston_seat_release(&seat->base);
free(seat->seat_id);
char *seat_id;
};
-int udev_seat_add_devices(struct udev_seat *seat, struct udev *udev);
-int udev_seat_enable_udev_monitor(struct udev_seat *seat, struct udev *udev);
-void udev_seat_disable_udev_monitor(struct udev_seat *seat);
+int udev_seat_enable(struct udev_seat *seat, struct udev *udev);
+void udev_seat_disable(struct udev_seat *seat);
struct udev_seat *udev_seat_create(struct weston_compositor *c,
struct udev *udev,
const char *seat_id);
-void udev_seat_remove_devices(struct udev_seat *seat);
void udev_seat_destroy(struct udev_seat *seat);
#endif