compositor: Use systemd seats for input devices as well
This commit is contained in:
@@ -805,7 +805,7 @@ drm_compositor_create(struct wl_display *display,
|
|||||||
return NULL;
|
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);
|
loop = wl_display_get_event_loop(ec->base.wl_display);
|
||||||
ec->drm_source =
|
ec->drm_source =
|
||||||
|
|||||||
@@ -366,7 +366,8 @@ void
|
|||||||
wlsc_switcher_init(struct wlsc_compositor *compositor);
|
wlsc_switcher_init(struct wlsc_compositor *compositor);
|
||||||
|
|
||||||
void
|
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 {
|
enum {
|
||||||
TTY_ENTER_VT,
|
TTY_ENTER_VT,
|
||||||
|
|||||||
+17
-4
@@ -210,13 +210,17 @@ evdev_input_device_create(struct evdev_input *master,
|
|||||||
return device;
|
return device;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char default_seat[] = "seat0";
|
||||||
|
|
||||||
void
|
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 evdev_input *input;
|
||||||
struct udev_enumerate *e;
|
struct udev_enumerate *e;
|
||||||
struct udev_list_entry *entry;
|
struct udev_list_entry *entry;
|
||||||
struct udev_device *device;
|
struct udev_device *device;
|
||||||
|
const char *device_seat;
|
||||||
const char *path;
|
const char *path;
|
||||||
|
|
||||||
input = malloc(sizeof *input);
|
input = malloc(sizeof *input);
|
||||||
@@ -228,13 +232,22 @@ evdev_input_add_devices(struct wlsc_compositor *c, struct udev *udev)
|
|||||||
|
|
||||||
e = udev_enumerate_new(udev);
|
e = udev_enumerate_new(udev);
|
||||||
udev_enumerate_add_match_subsystem(e, "input");
|
udev_enumerate_add_match_subsystem(e, "input");
|
||||||
udev_enumerate_add_match_property(e, "WAYLAND_SEAT", "1");
|
|
||||||
udev_enumerate_scan_devices(e);
|
udev_enumerate_scan_devices(e);
|
||||||
udev_list_entry_foreach(entry, udev_enumerate_get_list_entry(e)) {
|
udev_list_entry_foreach(entry, udev_enumerate_get_list_entry(e)) {
|
||||||
path = udev_list_entry_get_name(entry);
|
path = udev_list_entry_get_name(entry);
|
||||||
device = udev_device_new_from_syspath(udev, path);
|
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);
|
udev_enumerate_unref(e);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user