From 86ec8e80d8585d3ad8bb73f9b81d9d15adfbbb70 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Kristian=20H=C3=B8gsberg?= Date: Tue, 19 Jul 2011 16:10:11 -0700 Subject: [PATCH] compositor: Use systemd seats for input devices as well --- compositor/compositor-drm.c | 2 +- compositor/compositor.h | 3 ++- compositor/evdev.c | 21 +++++++++++++++++---- 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/compositor/compositor-drm.c b/compositor/compositor-drm.c index 5e62d4c..b6560bd 100644 --- a/compositor/compositor-drm.c +++ b/compositor/compositor-drm.c @@ -805,7 +805,7 @@ drm_compositor_create(struct wl_display *display, return NULL; } - evdev_input_add_devices(&ec->base, ec->udev); + evdev_input_add_devices(&ec->base, ec->udev, seat); loop = wl_display_get_event_loop(ec->base.wl_display); ec->drm_source = diff --git a/compositor/compositor.h b/compositor/compositor.h index bd0c717..ea6e9e7 100644 --- a/compositor/compositor.h +++ b/compositor/compositor.h @@ -366,7 +366,8 @@ void wlsc_switcher_init(struct wlsc_compositor *compositor); void -evdev_input_add_devices(struct wlsc_compositor *c, struct udev *udev); +evdev_input_add_devices(struct wlsc_compositor *c, + struct udev *udev, const char *seat); enum { TTY_ENTER_VT, diff --git a/compositor/evdev.c b/compositor/evdev.c index de48225..def22b9 100644 --- a/compositor/evdev.c +++ b/compositor/evdev.c @@ -210,13 +210,17 @@ evdev_input_device_create(struct evdev_input *master, return device; } +static const char default_seat[] = "seat0"; + void -evdev_input_add_devices(struct wlsc_compositor *c, struct udev *udev) +evdev_input_add_devices(struct wlsc_compositor *c, + struct udev *udev, const char *seat) { struct evdev_input *input; struct udev_enumerate *e; struct udev_list_entry *entry; struct udev_device *device; + const char *device_seat; const char *path; input = malloc(sizeof *input); @@ -228,13 +232,22 @@ evdev_input_add_devices(struct wlsc_compositor *c, struct udev *udev) e = udev_enumerate_new(udev); udev_enumerate_add_match_subsystem(e, "input"); - udev_enumerate_add_match_property(e, "WAYLAND_SEAT", "1"); udev_enumerate_scan_devices(e); udev_list_entry_foreach(entry, udev_enumerate_get_list_entry(e)) { path = udev_list_entry_get_name(entry); device = udev_device_new_from_syspath(udev, path); - evdev_input_device_create(input, c->wl_display, - udev_device_get_devnode(device)); + + device_seat = + udev_device_get_property_value(device, "ID_SEAT"); + if (!device_seat) + device_seat = default_seat; + + if (strcmp(device_seat, seat) == 0) { + evdev_input_device_create(input, c->wl_display, + udev_device_get_devnode(device)); + } + + udev_device_unref(device); } udev_enumerate_unref(e); -- 2.7.4