]> diplodocus.org Git - xorg-xinput/commitdiff
Obtain the XInput opcode and check that GenericEvents are actually XI events
authorBenjamin Close <Benjamin.Close@clearchain.com>
Wed, 24 Jun 2009 02:25:00 +0000 (11:55 +0930)
committerPeter Hutterer <peter.hutterer@who-t.net>
Wed, 24 Jun 2009 02:35:56 +0000 (12:35 +1000)
Signed-off-by: Benjamin Close <Benjamin.Close@clearchain.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
src/test_xi2.c
src/xinput.c
src/xinput.h

index 22016924e0b0a21f97d32a4ad0c319ce7a26717a..b08a3959054db20c22dde94cdb0553c7265fffdb 100644 (file)
@@ -240,7 +240,7 @@ test_sync_grab(Display *display, Window win)
         XIEvent ev;
 
         XNextEvent(display, (XEvent*)&ev);
         XIEvent ev;
 
         XNextEvent(display, (XEvent*)&ev);
-        if (ev.type == GenericEvent)
+        if (ev.type == GenericEvent && ev.extension == xi_opcode )
         {
             XIDeviceEvent *event = (XIDeviceEvent*)&ev;
             print_deviceevent(event);
         {
             XIDeviceEvent *event = (XIDeviceEvent*)&ev;
             print_deviceevent(event);
@@ -325,7 +325,7 @@ test_xi2(Display    *display,
     {
         XIEvent ev;
         XNextEvent(display, (XEvent*)&ev);
     {
         XIEvent ev;
         XNextEvent(display, (XEvent*)&ev);
-        if (ev.type == GenericEvent)
+        if (ev.type == GenericEvent && ev.extension == xi_opcode)
         {
             XIDeviceEvent *event = (XIDeviceEvent*)&ev;
 
         {
             XIDeviceEvent *event = (XIDeviceEvent*)&ev;
 
index 275fa1b6afe8b62fb067930957d665b4d5b0e9b2..8340211a785e120182fe0a853aaad9dfe9b10ef4 100644 (file)
@@ -25,6 +25,8 @@
 #include <ctype.h>
 #include <string.h>
 
 #include <ctype.h>
 #include <string.h>
 
+int xi_opcode;
+
 typedef int (*prog)(Display* display, int argc, char *argv[],
                    char *prog_name, char *prog_desc);
 
 typedef int (*prog)(Display* display, int argc, char *argv[],
                    char *prog_name, char *prog_desc);
 
@@ -257,6 +259,7 @@ main(int argc, char * argv[])
     Display    *display;
     entry      *driver = drivers;
     char        *func;
     Display    *display;
     entry      *driver = drivers;
     char        *func;
+    int event, error;
 
     if (argc < 2) {
        usage();
 
     if (argc < 2) {
        usage();
@@ -270,6 +273,11 @@ main(int argc, char * argv[])
        return EXIT_FAILURE;
     }
 
        return EXIT_FAILURE;
     }
 
+    if (!XQueryExtension(display, "XInputExtension", &xi_opcode, &event, &error)) {
+        printf("X Input extension not available.\n");
+        return EXIT_FAILURE;
+    }
+
     func = argv[1];
     while((*func) == '-') func++;
 
     func = argv[1];
     while((*func) == '-') func++;
 
index fd468b01530d5c8695aeb79510b40e3479416215..d44ce0960ae751dd81f73e926326fc63acf14a34 100644 (file)
@@ -41,6 +41,7 @@
 #define EXIT_FAILURE 0
 #endif
 
 #define EXIT_FAILURE 0
 #endif
 
+extern int xi_opcode; /* xinput extension op code */
 XDeviceInfo* find_device_info( Display *display, char *name, Bool only_extended);
 #if HAVE_XI2
 XIDeviceInfo* xi2_find_device_info(Display *display, char *name);
 XDeviceInfo* find_device_info( Display *display, char *name, Bool only_extended);
 #if HAVE_XI2
 XIDeviceInfo* xi2_find_device_info(Display *display, char *name);