summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--man/evdev.man3
-rw-r--r--src/evdev.c22
-rw-r--r--src/evdev.h4
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 */