diff options
-rw-r--r-- | man/evdev.man | 3 | ||||
-rw-r--r-- | src/evdev.c | 22 | ||||
-rw-r--r-- | src/evdev.h | 4 |
3 files changed, 27 insertions, 2 deletions
diff --git a/man/evdev.man b/man/evdev.man index adb3f8d..a202ae8 100644 --- a/man/evdev.man +++ b/man/evdev.man @@ -66,7 +66,8 @@ is used. Buttons not specified in the user's mapping use the default mapping. .BI "Option \*qDevice\*q \*q" string \*q Specifies the device through which the device can be accessed. This will generally be of the form \*q/dev/input/eventX\*q, where X is some integer. -The mapping from device node to hardware is system-dependent. +The mapping from device node to hardware is system-dependent. Property: +"Device Node" (read-only). .TP 7 .BI "Option \*qDragLockButtons\*q \*q" "L1 B2 L3 B4" \*q Sets \*qdrag lock buttons\*q that simulate holding a button down, so diff --git a/src/evdev.c b/src/evdev.c index 74dd04d..9f8e003 100644 --- a/src/evdev.c +++ b/src/evdev.c @@ -113,6 +113,7 @@ static Atom prop_calibration; static Atom prop_swap; static Atom prop_axis_label; static Atom prop_btn_label; +static Atom prop_device; /* All devices the evdev driver has allocated and knows about. * MAXDEVICES is safe as null-terminated array, as two devices (VCP and VCK) @@ -2200,6 +2201,23 @@ EvdevInitProperty(DeviceIntPtr dev) EvdevPtr pEvdev = pInfo->private; int rc; BOOL invert[2]; + char *device_node; + + /* Device node property */ + device_node = strdup(pEvdev->device); + prop_device = MakeAtom(XI_PROP_DEVICE_NODE, + strlen(XI_PROP_DEVICE_NODE), TRUE); + rc = XIChangeDeviceProperty(dev, prop_device, XA_STRING, 8, + PropModeReplace, + strlen(device_node), device_node, + FALSE); + free(device_node); + + if (rc != Success) + return; + + XISetDevicePropertyDeletable(dev, prop_device, FALSE); + if (pEvdev->flags & (EVDEV_RELATIVE_EVENTS | EVDEV_ABSOLUTE_EVENTS)) { @@ -2278,7 +2296,9 @@ EvdevSetProperty(DeviceIntPtr dev, Atom atom, XIPropertyValuePtr val, InputInfoPtr pInfo = dev->public.devicePrivate; EvdevPtr pEvdev = pInfo->private; - if (atom == prop_invert) + if (atom == prop_device) + return BadValue; + else if (atom == prop_invert) { BOOL* data; if (val->format != 8 || val->size != 2 || val->type != XA_INTEGER) diff --git a/src/evdev.h b/src/evdev.h index e68f7f2..73c9acb 100644 --- a/src/evdev.h +++ b/src/evdev.h @@ -80,6 +80,10 @@ #define MAX_VALUATORS 36 #endif +#ifndef XI_PROP_DEVICE_NODE +#define XI_PROP_DEVICE_NODE "Device Node" +#endif + #define LONG_BITS (sizeof(long) * 8) /* Number of longs needed to hold the given number of bits */ |