]> diplodocus.org Git - xorg-xinput/commitdiff
Update to new XI2 requests and sanitize the check for XI2 in configure.
authorPeter Hutterer <peter.hutterer@who-t.net>
Thu, 26 Feb 2009 06:14:21 +0000 (16:14 +1000)
committerPeter Hutterer <peter.hutterer@who-t.net>
Sat, 21 Mar 2009 12:18:41 +0000 (22:18 +1000)
Check for the actual library version, not for some random function inside the
library.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
configure.ac
src/hierarchy.c
src/setcp.c
src/xinput.h

index 8d96a73..f2ad4f1 100644 (file)
@@ -20,11 +20,12 @@ XORG_CWARNFLAGS
 # Checks for pkg-config packages
 PKG_CHECK_MODULES(XINPUT, x11 xext [xi >= 1.2] [inputproto >= 1.5])
 
-LIBS="$XINPUT_LIBS $LIBS"
-AC_CHECK_FUNC(XSetClientPointer,AC_DEFINE(HAVE_XI2,1,[XInput Version 2 Enabled]))
-AM_CONDITIONAL(HAVE_XI2, [test "x$ac_cv_func_XSetClientPointer" = "xyes"] )
+# XI2 support
+PKG_CHECK_MODULES(XI2, [xi >= 1.2.99],
+                  HAVE_XI2="yes"; AC_DEFINE(HAVE_XI2, 1, "foo"),
+                  HAVE_XI2="no");
+AM_CONDITIONAL(HAVE_XI2, [ test "$HAVE_XI2" = "yes" ])
 
-XINPUT_CFLAGS="$CWARNFLAGS $XINPUT_CFLAGS"
 AC_SUBST(XINPUT_CFLAGS)
 AC_SUBST(XINPUT_LIBS)
 AC_SUBST(HAVE_XI2)
index 869c3fd..7739074 100644 (file)
@@ -40,7 +40,7 @@
 int
 create_master(Display* dpy, int argc, char** argv, char* name, char *desc)
 {
-    XCreateMasterInfo c;
+    XICreateMasterInfo c;
 
     if (argc == 0)
     {
@@ -53,7 +53,7 @@ create_master(Display* dpy, int argc, char** argv, char* name, char *desc)
     c.sendCore = (argc >= 2) ? atoi(argv[1]) : 1;
     c.enable = (argc >= 3) ? atoi(argv[2]) : 1;
 
-    return XChangeDeviceHierarchy(dpy, (XAnyHierarchyChangeInfo*)&c, 1);
+    return XIChangeDeviceHierarchy(dpy, (XIAnyHierarchyChangeInfo*)&c, 1);
 }
 
 /**
@@ -64,10 +64,8 @@ create_master(Display* dpy, int argc, char** argv, char* name, char *desc)
 int
 remove_master(Display* dpy, int argc, char** argv, char *name, char *desc)
 {
-    XDeviceInfo *info;
-    XRemoveMasterInfo r;
-    XDevice* master = NULL, *ptr = NULL, *keybd = NULL;
-    int ret;
+    XIRemoveMasterInfo r;
+    int ret, id;
 
     if (argc == 0)
     {
@@ -75,19 +73,15 @@ remove_master(Display* dpy, int argc, char** argv, char *name, char *desc)
         return EXIT_FAILURE;
     }
 
-    info = find_device_info(dpy, argv[0], False);
+    id = xi2_find_device_id(dpy, argv[0]);
 
-    if (!info) {
+    if (id == -1) {
        fprintf(stderr, "unable to find device %s\n", argv[0]);
        return EXIT_FAILURE;
     }
 
-    master = XOpenDevice(dpy, info->id);
-    if (!master)
-        Error(BadValue, "Unable to open device %s.\n", argv[0]);
-
     r.type = CH_RemoveMasterDevice;
-    r.device = master;
+    r.device = id;
     if (argc >= 2)
     {
         if (!strcmp(argv[1], "Floating"))
@@ -101,19 +95,11 @@ remove_master(Display* dpy, int argc, char** argv, char *name, char *desc)
 
     if (r.returnMode == AttachToMaster)
     {
-        ptr = XOpenDevice(dpy, atoi(argv[2]));
-        keybd = XOpenDevice(dpy, atoi(argv[3]));
-        if (!ptr || !keybd)
-            Error(BadValue, "Invalid fallback master.\n");
-        r.returnPointer = ptr;
-        r.returnKeyboard = keybd;
+        r.returnPointer = atoi(argv[2]);
+        r.returnKeyboard = atoi(argv[3]);
     }
 
-    ret = XChangeDeviceHierarchy(dpy, (XAnyHierarchyChangeInfo*)&r, 1);
-    if (ptr)
-        XCloseDevice(dpy, ptr);
-    if (keybd)
-        XCloseDevice(dpy, keybd);
+    ret = XIChangeDeviceHierarchy(dpy, (XIAnyHierarchyChangeInfo*)&r, 1);
     return ret;
 }
 
@@ -123,9 +109,8 @@ remove_master(Display* dpy, int argc, char** argv, char *name, char *desc)
 int
 change_attachment(Display* dpy, int argc, char** argv, char *name, char* desc)
 {
-    XDeviceInfo *info_sd, *info_md;
-    XChangeAttachmentInfo c;
-    XDevice *slave, *master;
+    int sd_id, md_id;
+    XIAttachSlaveInfo c;
     int ret;
 
     if (argc < 2)
@@ -134,36 +119,24 @@ change_attachment(Display* dpy, int argc, char** argv, char *name, char* desc)
         return EXIT_FAILURE;
     }
 
-    info_sd = find_device_info(dpy, argv[0], True);
-    info_md = find_device_info(dpy, argv[1], False);
+    sd_id = xi2_find_device_id(dpy, argv[0]);
+    md_id = xi2_find_device_id(dpy, argv[1]);
 
-    if (!info_sd) {
+    if (sd_id == -1) {
        fprintf(stderr, "unable to find device %s\n", argv[0]);
        return EXIT_FAILURE;
     }
 
-    if (!info_md) {
+    if (md_id == -1) {
        fprintf(stderr, "unable to find device %s\n", argv[1]);
        return EXIT_FAILURE;
     }
 
-    slave = XOpenDevice(dpy, info_sd->id);
-    master = XOpenDevice(dpy, info_md->id);
-
-    if (!slave)
-        Error(BadValue, "Invalid slave device given %d\n", atoi(argv[0]));
-
-    if (!master)
-        Error(BadValue, "Invalid master device given %d\n", atoi(argv[1]));
+    c.type = CH_AttachSlave;
+    c.device = sd_id;
+    c.newMaster = md_id;
 
-    c.type = CH_ChangeAttachment;
-    c.changeMode = AttachToMaster;
-    c.device = slave;
-    c.newMaster = master;
-
-    ret = XChangeDeviceHierarchy(dpy, (XAnyHierarchyChangeInfo*)&c, 1);
-    XCloseDevice(dpy, slave);
-    XCloseDevice(dpy, master);
+    ret = XIChangeDeviceHierarchy(dpy, (XIAnyHierarchyChangeInfo*)&c, 1);
     return ret;
 }
 
@@ -173,9 +146,8 @@ change_attachment(Display* dpy, int argc, char** argv, char *name, char* desc)
 int
 float_device(Display* dpy, int argc, char** argv, char* name, char* desc)
 {
-    XDeviceInfo *info;
-    XChangeAttachmentInfo c;
-    XDevice *slave;
+    int id;
+    XIDetachSlaveInfo c;
     int ret;
 
     if (argc < 1)
@@ -184,24 +156,17 @@ float_device(Display* dpy, int argc, char** argv, char* name, char* desc)
         return EXIT_FAILURE;
     }
 
-    info = find_device_info(dpy, argv[0], True);
+    id = xi2_find_device_id(dpy, argv[0]);
 
-    if (!info) {
+    if (id == -1) {
        fprintf(stderr, "unable to find device %s\n", argv[0]);
        return EXIT_FAILURE;
     }
 
-    slave = XOpenDevice(dpy, info->id);
-
-    if (!slave)
-        return BadValue;
-
-    c.type = CH_ChangeAttachment;
-    c.changeMode = Floating;
-    c.device = slave;
+    c.type = CH_DetachSlave;
+    c.device = id;
 
-    ret = XChangeDeviceHierarchy(dpy, (XAnyHierarchyChangeInfo*)&c, 1);
-    XCloseDevice(dpy, slave);
+    ret = XIChangeDeviceHierarchy(dpy, (XIAnyHierarchyChangeInfo*)&c, 1);
     return ret;
 }
 
index e44bb00..f2b2a6c 100644 (file)
@@ -32,9 +32,8 @@
 int
 set_clientpointer(Display* dpy, int argc, char** argv, char* name, char *desc)
 {
-    XDeviceInfo* info;
+    int deviceid;
     XID window;
-    XDevice* dev = NULL;
     char* id;
     char* dummy;
 
@@ -50,19 +49,13 @@ set_clientpointer(Display* dpy, int argc, char** argv, char* name, char *desc)
 
     window = strtol(argv[0], &dummy, (*id == 'x') ? 16 : 10);
 
-    info = find_device_info(dpy, argv[1], False);
+    deviceid = xi2_find_device_id(dpy, argv[1]);
 
-    if (!info) {
+    if (deviceid == -1) {
        fprintf(stderr, "unable to find device %s\n", argv[1]);
        return EXIT_FAILURE;
     }
 
-    dev = XOpenDevice(dpy, info->id);
-
-    if (!dev)
-    {
-        fprintf(stderr, "Cannot open device %s.\n", argv[1]);
-    } else
-        XSetClientPointer(dpy, window, dev);
+    XISetClientPointer(dpy, window, deviceid);
     return 0;
 }
index cdb2b2d..4b68090 100644 (file)
@@ -27,6 +27,9 @@
 
 #include <X11/Xlib.h>
 #include <X11/extensions/XInput.h>
+#ifdef HAVE_XI2
+#include <X11/extensions/XInput2.h>
+#endif
 #include <X11/Xutil.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -74,6 +77,7 @@ DECLARE(remove_master);
 DECLARE(change_attachment);
 DECLARE(float_device);
 DECLARE(set_clientpointer);
+DECLARE(test_xi2);
 DECLARE(list_props);
 DECLARE(set_int_prop);
 DECLARE(set_float_prop);