compositor: Use systemd seat configuration conventions
http://www.freedesktop.org/wiki/Software/systemd/multiseat
This commit is contained in:
@@ -1,7 +0,0 @@
|
|||||||
KERNEL=="event*", ENV{ID_INPUT_KEYBOARD}=="1", ENV{WAYLAND_SEAT}="1"
|
|
||||||
KERNEL=="event*", ENV{ID_INPUT_MOUSE}=="1", ENV{WAYLAND_SEAT}="1"
|
|
||||||
KERNEL=="event*", ENV{ID_INPUT_TOUCHPAD}=="1", ENV{WAYLAND_SEAT}="1"
|
|
||||||
KERNEL=="event*", ENV{ID_INPUT_TOUCHSCREEN}=="1", ENV{WAYLAND_SEAT}="1"
|
|
||||||
KERNEL=="event*", ENV{ID_INPUT_TABLET}=="1", ENV{WAYLAND_SEAT}="1"
|
|
||||||
KERNEL=="card0", ENV{WAYLAND_SEAT}="1"
|
|
||||||
|
|
||||||
@@ -26,11 +26,6 @@ xserver_launcher_sources = \
|
|||||||
xserver-server-protocol.h
|
xserver-server-protocol.h
|
||||||
endif
|
endif
|
||||||
|
|
||||||
udevrulesddir = $(sysconfdir)/udev/rules.d
|
|
||||||
|
|
||||||
dist_udevrulesd_DATA = \
|
|
||||||
70-wayland.rules
|
|
||||||
|
|
||||||
moduledir = @libdir@/wayland
|
moduledir = @libdir@/wayland
|
||||||
module_LTLIBRARIES = \
|
module_LTLIBRARIES = \
|
||||||
$(desktop_shell) \
|
$(desktop_shell) \
|
||||||
|
|||||||
+29
-10
@@ -730,14 +730,17 @@ vt_func(struct wlsc_compositor *compositor, int event)
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char default_seat[] = "seat0";
|
||||||
|
|
||||||
static struct wlsc_compositor *
|
static struct wlsc_compositor *
|
||||||
drm_compositor_create(struct wl_display *display, int connector)
|
drm_compositor_create(struct wl_display *display,
|
||||||
|
int connector, const char *seat)
|
||||||
{
|
{
|
||||||
struct drm_compositor *ec;
|
struct drm_compositor *ec;
|
||||||
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, *drm_device;
|
||||||
const char *path;
|
const char *path, *device_seat;
|
||||||
struct wl_event_loop *loop;
|
struct wl_event_loop *loop;
|
||||||
|
|
||||||
ec = malloc(sizeof *ec);
|
ec = malloc(sizeof *ec);
|
||||||
@@ -753,27 +756,38 @@ drm_compositor_create(struct wl_display *display, int connector)
|
|||||||
|
|
||||||
e = udev_enumerate_new(ec->udev);
|
e = udev_enumerate_new(ec->udev);
|
||||||
udev_enumerate_add_match_subsystem(e, "drm");
|
udev_enumerate_add_match_subsystem(e, "drm");
|
||||||
udev_enumerate_add_match_property(e, "WAYLAND_SEAT", "1");
|
|
||||||
udev_enumerate_scan_devices(e);
|
udev_enumerate_scan_devices(e);
|
||||||
device = NULL;
|
drm_device = NULL;
|
||||||
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(ec->udev, path);
|
device = udev_device_new_from_syspath(ec->udev, path);
|
||||||
break;
|
device_seat =
|
||||||
|
udev_device_get_property_value(device, "ID_SEAT");
|
||||||
|
if (!device_seat)
|
||||||
|
device_seat = default_seat;
|
||||||
|
if (strcmp(device_seat, seat) == 0) {
|
||||||
|
drm_device = device;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
udev_device_unref(device);
|
||||||
}
|
}
|
||||||
|
|
||||||
udev_enumerate_unref(e);
|
udev_enumerate_unref(e);
|
||||||
|
|
||||||
if (device == NULL) {
|
if (drm_device == NULL) {
|
||||||
fprintf(stderr, "no drm device found\n");
|
fprintf(stderr, "no drm device found\n");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
ec->base.wl_display = display;
|
ec->base.wl_display = display;
|
||||||
if (init_egl(ec, device) < 0) {
|
if (init_egl(ec, drm_device) < 0) {
|
||||||
fprintf(stderr, "failed to initialize egl\n");
|
fprintf(stderr, "failed to initialize egl\n");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
udev_device_unref(drm_device);
|
||||||
|
|
||||||
ec->base.destroy = drm_destroy;
|
ec->base.destroy = drm_destroy;
|
||||||
ec->base.create_cursor_image = drm_compositor_create_cursor_image;
|
ec->base.create_cursor_image = drm_compositor_create_cursor_image;
|
||||||
|
|
||||||
@@ -825,18 +839,23 @@ WL_EXPORT struct wlsc_compositor *
|
|||||||
backend_init(struct wl_display *display, char *options)
|
backend_init(struct wl_display *display, char *options)
|
||||||
{
|
{
|
||||||
int connector = 0, i;
|
int connector = 0, i;
|
||||||
|
const char *seat;
|
||||||
char *p, *value;
|
char *p, *value;
|
||||||
|
|
||||||
static char * const tokens[] = { "connector", NULL };
|
static char * const tokens[] = { "connector", "seat", NULL };
|
||||||
|
|
||||||
p = options;
|
p = options;
|
||||||
|
seat = default_seat;
|
||||||
while (i = getsubopt(&p, tokens, &value), i != -1) {
|
while (i = getsubopt(&p, tokens, &value), i != -1) {
|
||||||
switch (i) {
|
switch (i) {
|
||||||
case 0:
|
case 0:
|
||||||
connector = strtol(value, NULL, 0);
|
connector = strtol(value, NULL, 0);
|
||||||
break;
|
break;
|
||||||
|
case 1:
|
||||||
|
seat = value;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return drm_compositor_create(display, connector);
|
return drm_compositor_create(display, connector, seat);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user