forked from Lainports/freebsd-ports
Update libinput to 1.12.6. This is the last remaining piece to bring us basically up to date with upstream input stack. PR: 222905 Reported by: Greg V (original version) Obtained from: FreeBSDDesktop development repo https://github.com/FreeBSDDesktop/freebsd-ports/tree/feature/input-ports Tested by: tcberner (kde@), andrnils@gmail.com Sponsored by: B3 Init (zeising)
37 lines
1.3 KiB
C
37 lines
1.3 KiB
C
When a process without full /dev/input access enumerates devices via libudev-devd,
|
|
the udev_device structs do not get udev properties that mark them as inputs, keyboards, etc,
|
|
and get rejected as not being input devices.
|
|
|
|
libinput reopens devices just to check path equality.
|
|
The udev_devices from reopening do have the right properties,
|
|
so we just use them instead of the original (enumerated) ones.
|
|
|
|
--- src/evdev.c.orig 2018-12-18 05:06:18 UTC
|
|
+++ src/evdev.c
|
|
@@ -905,7 +905,7 @@ evdev_sync_device(struct evdev_device *device)
|
|
evdev_device_dispatch_one(device, &ev);
|
|
} while (rc == LIBEVDEV_READ_STATUS_SYNC);
|
|
|
|
- return rc == -EAGAIN ? 0 : rc;
|
|
+ return (rc == -EAGAIN || rc == -EINVAL)? 0 : rc;
|
|
}
|
|
|
|
static void
|
|
@@ -943,6 +943,17 @@ evdev_device_dispatch(void *data)
|
|
|
|
if (rc != -EAGAIN && rc != -EINTR) {
|
|
libinput_remove_source(libinput, device->source);
|
|
+ /*
|
|
+ * Dirty hack to allow cuse-based evdev backends to release
|
|
+ * character device file when device has been detached
|
|
+ * but still have it descriptor opened.
|
|
+ * Issuing evdev_device_suspend() here leads to SIGSEGV
|
|
+ */
|
|
+ int dummy_fd = open("/dev/null", O_RDONLY | O_CLOEXEC);
|
|
+ if (dummy_fd >= 0) {
|
|
+ dup2(dummy_fd, device->fd);
|
|
+ close(dummy_fd);
|
|
+ }
|
|
device->source = NULL;
|
|
}
|
|
}
|