We couldn't use SIGIO input for keyboard processing, but we can use
threaded input.

Signed-off-by: Keith Packard <[email protected]>
---
 src/kbd.c | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/src/kbd.c b/src/kbd.c
index e378dcc..3063d27 100644
--- a/src/kbd.c
+++ b/src/kbd.c
@@ -45,6 +45,10 @@
 #include "xkbstr.h"
 #include "xkbsrv.h"
 
+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 23
+#define HAVE_THREADED_INPUT    1
+#endif
+
 #define CAPSFLAG       1
 #define NUMFLAG                2
 #define SCROLLFLAG     4
@@ -352,7 +356,12 @@ KbdProc(DeviceIntPtr device, int what)
      */
     if (pInfo->fd >= 0) {
        xf86FlushInput(pInfo->fd);
+#if HAVE_THREADED_INPUT
+       xf86AddEnabledDevice(pInfo);
+#else
+       /* Can't use xf86AddEnabledDevice on an epollfd */
        AddEnabledDevice(pInfo->fd);
+#endif
     }
 
     device->public.on = TRUE;
@@ -365,8 +374,13 @@ KbdProc(DeviceIntPtr device, int what)
     /*
      * Restore original keyboard directness and translation.
      */
-    if (pInfo->fd != -1)
+    if (pInfo->fd != -1) {
+#if HAVE_THREADED_INPUT
+      xf86RemoveEnabledDevice(pInfo);
+#else
       RemoveEnabledDevice(pInfo->fd);
+#endif
+    }
     pKbd->KbdOff(pInfo, what);
     device->public.on = FALSE;
     break;
-- 
2.8.1

_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: https://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to