diff options
author | marha <marha@users.sourceforge.net> | 2014-03-12 16:45:42 +0100 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2014-03-12 16:45:42 +0100 |
commit | cc6db22a772cc52ead6a5c11d7d02e7364f6326c (patch) | |
tree | d80b42172d703ec20ccd99c68a067505e2706899 /xorg-server/hw/xfree86/common/xf86Xinput.c | |
parent | 2112b7dec49833ba872bd3ebcd7288930fec0796 (diff) | |
parent | cd8b0d0de3fcb53f6d3ece8ce26d97aaab2c0914 (diff) | |
download | vcxsrv-cc6db22a772cc52ead6a5c11d7d02e7364f6326c.tar.gz vcxsrv-cc6db22a772cc52ead6a5c11d7d02e7364f6326c.tar.bz2 vcxsrv-cc6db22a772cc52ead6a5c11d7d02e7364f6326c.zip |
Merge remote-tracking branch 'origin/released'
* origin/released:
mesa xserver xkbcomp git update 12 Mar 2014
Diffstat (limited to 'xorg-server/hw/xfree86/common/xf86Xinput.c')
-rw-r--r-- | xorg-server/hw/xfree86/common/xf86Xinput.c | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/xorg-server/hw/xfree86/common/xf86Xinput.c b/xorg-server/hw/xfree86/common/xf86Xinput.c index 7c3e479e5..36b92a9f7 100644 --- a/xorg-server/hw/xfree86/common/xf86Xinput.c +++ b/xorg-server/hw/xfree86/common/xf86Xinput.c @@ -81,6 +81,7 @@ #include <stdarg.h> #include <stdint.h> /* for int64_t */ +#include <sys/stat.h> #include <unistd.h> #include "mi.h" @@ -804,6 +805,18 @@ xf86InputDevicePostInit(DeviceIntPtr dev) return Success; } +static void +xf86stat(const char *path, int *maj, int *min) +{ + struct stat st; + + if (stat(path, &st) == -1) + return; + + *maj = major(st.st_rdev); + *min = minor(st.st_rdev); +} + /** * Create a new input device, activate and enable it. * @@ -828,6 +841,7 @@ xf86NewInputDevice(InputInfoPtr pInfo, DeviceIntPtr *pdev, BOOL enable) DeviceIntPtr dev = NULL; Bool paused; int rval; + const char *path; /* Memory leak for every attached device if we don't * test if the module is already loaded first */ @@ -841,9 +855,13 @@ xf86NewInputDevice(InputInfoPtr pInfo, DeviceIntPtr *pdev, BOOL enable) goto unwind; } - if (drv->capabilities & XI86_DRV_CAP_SERVER_FD) { + path = xf86CheckStrOption(pInfo->options, "Device", NULL); + if (path && pInfo->major == 0 && pInfo->minor == 0) + xf86stat(path, &pInfo->major, &pInfo->minor); + + if (path && (drv->capabilities & XI86_DRV_CAP_SERVER_FD)){ int fd = systemd_logind_take_fd(pInfo->major, pInfo->minor, - pInfo->attrs->device, &paused); + path, &paused); if (fd != -1) { if (paused) { /* Put on new_input_devices list for delayed probe */ |