Query version for X11 XInput2 multitouch separately from base XInput2.
authorRyan C. Gordon <icculus@icculus.org>
Wed, 20 Nov 2013 21:17:26 -0500
changeset 8019 5d85b2186aae
parent 8018 cff03048babd
child 8020 1e390ba95c43
Query version for X11 XInput2 multitouch separately from base XInput2.
src/video/x11/SDL_x11xinput2.c
--- a/src/video/x11/SDL_x11xinput2.c	Wed Nov 20 12:51:18 2013 -0300
+++ b/src/video/x11/SDL_x11xinput2.c	Wed Nov 20 21:17:26 2013 -0500
@@ -59,6 +59,18 @@
         z++;
     }
 }
+
+static SDL_bool
+xinput2_version_okay(Display *display, const int major, const int minor)
+{
+    int outmajor = major;
+    int outminor = minor;
+    if (X11_XIQueryVersion(display, &outmajor, &outminor) != Success) {
+        return SDL_FALSE;
+    }
+
+    return ( ((outmajor * 1000) + outminor) >= ((major * 1000) + minor) );
+}
 #endif /* SDL_VIDEO_DRIVER_X11_XINPUT2 */
 
 void
@@ -70,11 +82,6 @@
     XIEventMask eventmask;
     unsigned char mask[3] = { 0,0,0 };
     int event, err;
-    int major = 2, minor = 0;
-    int outmajor,outminor;
-#if SDL_VIDEO_DRIVER_X11_XINPUT2_SUPPORTS_MULTITOUCH
-    minor = 2;
-#endif
     /*
     * Initialize XInput 2
     * According to http://who-t.blogspot.com/2009/05/xi2-recipes-part-1.html its better
@@ -86,24 +93,17 @@
     */
     if (!SDL_X11_HAVE_XINPUT2 ||
         !X11_XQueryExtension(data->display, "XInputExtension", &xinput2_opcode, &event, &err)) {
-        return;
-    }
-
-    outmajor = major;
-    outminor = minor;
-    if (X11_XIQueryVersion(data->display, &outmajor, &outminor) != Success) {
-        return;
+        return; /* X server does not have XInput at all */
     }
 
-    /* Check supported version */
-    if(outmajor * 1000 + outminor < major * 1000 + minor) {
-        /* X server does not support the version we want */
-        return;
+    if (!xinput2_version_okay(data->display, 2, 0)) {
+        return; /* X server does not support the version we want */
     }
+
     xinput2_initialized = 1;
+
 #if SDL_VIDEO_DRIVER_X11_XINPUT2_SUPPORTS_MULTITOUCH
-    /* XInput 2.2 */
-    if(outmajor * 1000 + outminor >= major * 1000 + minor) {
+    if (xinput2_version_okay(data->display, 2, 2)) {  /* Multitouch needs XInput 2.2 */
         xinput2_multitouch_supported = 1;
     }
 #endif