[PATCH] xfree86: Use "Ignore" option in InputClass to skip devices

Peter Hutterer peter.hutterer at who-t.net
Thu Feb 4 19:58:18 PST 2010


From: Dan Nicholson <dbn.lists at gmail.com>

Sometimes it is desirable to skip adding specific input devices to the
server. The "Ignore" option is used similarly to Monitor sections so
that matched devices will not be added. BadDevice is returned to the
config backend so that it will clean up all resources.

Signed-off-by: Dan Nicholson <dbn.lists at gmail.com>
Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
---
Dan:
tested, works. Only change to your patch is BadIDChoice -> BadDevice which
seems somewhat more explanatory to me.

 hw/xfree86/common/xf86Xinput.c       |   26 ++++++++++++++++++++++++++
 hw/xfree86/doc/man/xorg.conf.man.pre |   13 +++++++++++--
 2 files changed, 37 insertions(+), 2 deletions(-)

diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c
index fb0ee9c..4dcc124 100644
--- a/hw/xfree86/common/xf86Xinput.c
+++ b/hw/xfree86/common/xf86Xinput.c
@@ -574,6 +574,27 @@ MergeInputClasses(IDevPtr idev, InputAttributes *attrs)
     return Success;
 }
 
+static Bool
+IgnoreInputClass(IDevPtr idev, InputAttributes *attrs)
+{
+    XF86ConfInputClassPtr cl;
+    Bool ignore;
+
+    for (cl = xf86configptr->conf_inputclass_lst; cl; cl = cl->list.next) {
+        if (!InputClassMatches(cl, attrs))
+            continue;
+        if (xf86findOption(cl->option_lst, "Ignore")) {
+            ignore = xf86CheckBoolOption(cl->option_lst, "Ignore", FALSE);
+            if (ignore)
+                xf86Msg(X_CONFIG,
+                        "%s: Ignoring device from InputClass \"%s\"\n",
+                        idev->identifier, cl->identifier);
+            return ignore;
+        }
+    }
+    return FALSE;
+}
+
 /**
  * Create a new input device, activate and enable it.
  *
@@ -736,6 +757,11 @@ NewInputDeviceRequest (InputOption *options, InputAttributes *attrs,
 
     /* Apply InputClass settings */
     if (attrs) {
+        if (IgnoreInputClass(idev, attrs)) {
+            rval = BadDevice;
+            goto unwind;
+        }
+
         rval = MergeInputClasses(idev, attrs);
         if (rval != Success)
             goto unwind;
diff --git a/hw/xfree86/doc/man/xorg.conf.man.pre b/hw/xfree86/doc/man/xorg.conf.man.pre
index 222530b..8546924 100644
--- a/hw/xfree86/doc/man/xorg.conf.man.pre
+++ b/hw/xfree86/doc/man/xorg.conf.man.pre
@@ -1070,11 +1070,20 @@ When an input device has been matched to the
 .B InputClass
 section, any
 .B Option
-entries are applied to the device. See the
+entries are applied to the device. One
+.B InputClass
+specific
+.B Option
+is recognized. See the
 .B InputDevice
-section above for a description of the various
+section above for a description of the remaining
 .B Option
 entries.
+.TP 7
+.BI "Option \*qIgnore\*q \*q" boolean \*q
+This optional entry specifies that the device should be ignored entirely,
+and not added to the server. This can be useful when the device is handled
+by another program and no X events should be generated.
 .SH "DEVICE SECTION"
 The config file may have multiple
 .B Device
-- 
1.6.6



More information about the xorg-devel mailing list