kwo pushed a commit to branch master.

http://git.enlightenment.org/e16/e16.git/commit/?id=9c7cf39e319f432201d6c4b71c670fb416320286

commit 9c7cf39e319f432201d6c4b71c670fb416320286
Author: Kim Woelders <[email protected]>
Date:   Sat Nov 15 21:10:42 2014 +0100

    Prepare to handle other than XI2 generic events.
---
 src/events.c | 50 ++++++++++++++++++++++++++++++++++----------------
 1 file changed, 34 insertions(+), 16 deletions(-)

diff --git a/src/events.c b/src/events.c
index 49bb0b1..8a0179f 100644
--- a/src/events.c
+++ b/src/events.c
@@ -56,6 +56,7 @@
 #if USE_XI2
 #include <X11/extensions/XInput2.h>
 #endif
+#define USE_GENERIC defined(USE_XI2)
 
 #if ENABLE_DEBUG_EVENTS
 static const char  *EventName(unsigned int type);
@@ -84,7 +85,6 @@ static EServerExtData ExtData[11];
 #define event_base_damage ExtData[XEXT_DAMAGE].event_base
 #define event_base_saver  ExtData[XEXT_SCRSAVER].event_base
 #define event_base_glx    ExtData[XEXT_GLX].event_base
-#define major_op_xi       ExtData[XEXT_XI].major_op
 
 static void
 ExtInitShape(int available)
@@ -790,6 +790,8 @@ EventsCompress(XEvent * evq, int count)
 #endif
 }
 
+#if USE_GENERIC
+
 #if USE_XI2
 typedef union {
    XIEvent             gen;    /* Generic XI2 */
@@ -798,23 +800,15 @@ typedef union {
 } xie_t;
 
 static void
-EventFetchXI2(XEvent * ev)
+_EventFetchXI2(XEvent * ev)
 {
-   XGenericEventCookie gec;
-   xie_t              *xie;
-
-   if (!XGetEventData(disp, &ev->xcookie))
-      return;
-
-   xie = (xie_t *) ev->xcookie.data;
+   xie_t              *xie = (xie_t *) ev->xcookie.data;
 
    if (EDebug(EDBUG_TYPE_XI2))
       Eprintf("%s: %#lx: type=%d devid=%d srcid=%d\n",
              __func__, xie->dev.event, xie->gen.evtype,
              xie->dev.deviceid, xie->dev.sourceid);
 
-   gec = ev->xcookie;          /* Save copy for XFreeEventData() */
-
    switch (xie->gen.evtype)
      {
      default:
@@ -891,10 +885,35 @@ EventFetchXI2(XEvent * ev)
        ev->xfocus.detail = xie->elf.detail;
        break;
      }
+}
+#endif /* USE_XI2 */
 
+static void
+_EventFetchGeneric(XEvent * ev)
+{
+   XGenericEventCookie gec;
+
+   if (!XGetEventData(disp, &ev->xcookie))
+      return;
+
+   gec = ev->xcookie;          /* Save copy for XFreeEventData() */
+
+#if USE_XI2
+   if (ev->xcookie.extension == ExtData[XEXT_XI].major_op)
+     {
+       _EventFetchXI2(ev);
+       goto done;
+     }
+#endif
+   /* We should never go here */
+   Eprintf("*** %s: ext=%d type=%d\n", __func__,
+          ev->xcookie.extension, ev->xcookie.evtype);
+
+ done:
    XFreeEventData(disp, &gec);
 }
-#endif
+
+#endif /* USE_GENERIC */
 
 static int
 EventsFetch(XEvent ** evq_p, int *evq_n)
@@ -916,14 +935,13 @@ EventsFetch(XEvent ** evq_p, int *evq_n)
        for (; i < count; i++, ev++)
          {
             XNextEvent(disp, ev);
-#if USE_XI2
+#if USE_GENERIC
             if (ev->type == GenericEvent)
               {
-                 if (ev->xcookie.extension == major_op_xi)
-                    EventFetchXI2(ev);
+                 _EventFetchGeneric(ev);
                  continue;
               }
-#endif /* USE_XI2 */
+#endif
 
             /* Map some event types to E internals */
             if (ev->type == event_base_shape + ShapeNotify)

-- 


Reply via email to