[PATCH] xf86ActivateDevice(): Add "Device Node" property to input devices

Peter Korsgaard peter.korsgaard at barco.com
Wed May 5 03:12:00 PDT 2010


Add "Device Node" xinput property containing the device node path to
all input devices with a device property. This is useful to figure out
the relation between xinput ids and kernel devices.

Signed-off-by: Peter Korsgaard <peter.korsgaard at barco.com>
---
As requested by Peter Hutterer during the "Evdev Physical Path" discussion.

 Xi/xiproperty.c                |    4 +++-
 hw/xfree86/common/xf86Xinput.c |   13 +++++++++++++
 include/xserver-properties.h   |    3 +++
 3 files changed, 19 insertions(+), 1 deletions(-)

diff --git a/Xi/xiproperty.c b/Xi/xiproperty.c
index be07831..d265b67 100644
--- a/Xi/xiproperty.c
+++ b/Xi/xiproperty.c
@@ -177,7 +177,9 @@ static struct dev_properties
     {0, BTN_LABEL_PROP_BTN_TOOL_TRIPLETAP},
 
     {0, BTN_LABEL_PROP_BTN_GEAR_DOWN},
-    {0, BTN_LABEL_PROP_BTN_GEAR_UP}
+    {0, BTN_LABEL_PROP_BTN_GEAR_UP},
+
+    {0, XI_PROP_DEVICE_NODE}
 };
 
 static long XIPropHandlerID = 1;
diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c
index a1a5527..b88baae 100644
--- a/hw/xfree86/common/xf86Xinput.c
+++ b/hw/xfree86/common/xf86Xinput.c
@@ -328,6 +328,7 @@ int
 xf86ActivateDevice(LocalDevicePtr local)
 {
     DeviceIntPtr	dev;
+    char *device;
 
     if (local->flags & XI86_CONFIGURED) {
         dev = AddInputDevice(serverClient, local->device_control, TRUE);
@@ -357,6 +358,18 @@ xf86ActivateDevice(LocalDevicePtr local)
         RegisterOtherDevice(dev);
         XkbSetExtension(dev, ProcessKeyboardEvent);
 
+        device = xf86CheckStrOption(local->conf_idev->commonOptions,
+                                    "Device", NULL);
+        if (device)
+        {
+            XIChangeDeviceProperty(dev, XIGetKnownProperty(XI_PROP_DEVICE_NODE),
+                                   XA_STRING, 8, PropModeReplace,
+                                   strlen(device), device, FALSE);
+            XISetDevicePropertyDeletable(dev, XIGetKnownProperty(XI_PROP_DEVICE_NODE),
+                                         FALSE);
+            xfree(device);
+        }
+
         if (serverGeneration == 1) 
             xf86Msg(X_INFO, "XINPUT: Adding extended input device \"%s\" (type: %s)\n",
                     local->name, local->type_name);
diff --git a/include/xserver-properties.h b/include/xserver-properties.h
index 30e8efb..6a05178 100644
--- a/include/xserver-properties.h
+++ b/include/xserver-properties.h
@@ -35,6 +35,9 @@
 /* BOOL. If present, device is a virtual XTEST device */
 #define XI_PROP_XTEST_DEVICE  "XTEST Device"
 
+/* STRING. Device node path of device */
+#define XI_PROP_DEVICE_NODE "Device Node"
+
 /* Pointer acceleration properties */
 /* INTEGER of any format */
 #define ACCEL_PROP_PROFILE_NUMBER "Device Accel Profile"
-- 
1.7.0


More information about the xorg-devel mailing list