diff options
author | Peter Hutterer <peter.hutterer@who-t.net> | 2009-02-26 16:14:21 +1000 |
---|---|---|
committer | Peter Hutterer <peter.hutterer@who-t.net> | 2009-03-21 22:18:41 +1000 |
commit | 5aa923fc560718b9a093ad18966f4530eef0efd7 (patch) | |
tree | 99b0b9388f5ebb08b8aee628784af68e8627dda3 | |
parent | a12acdea9e289c9495bc14dd886e9a68cf9a533f (diff) |
Update to new XI2 requests and sanitize the check for XI2 in configure.
Check for the actual library version, not for some random function inside the
library.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-rw-r--r-- | configure.ac | 9 | ||||
-rw-r--r-- | src/hierarchy.c | 89 | ||||
-rw-r--r-- | src/setcp.c | 15 | ||||
-rw-r--r-- | src/xinput.h | 4 |
4 files changed, 40 insertions, 77 deletions
diff --git a/configure.ac b/configure.ac index 8d96a73..f2ad4f1 100644 --- a/configure.ac +++ b/configure.ac @@ -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) diff --git a/src/hierarchy.c b/src/hierarchy.c index 869c3fd..7739074 100644 --- a/src/hierarchy.c +++ b/src/hierarchy.c @@ -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; } diff --git a/src/setcp.c b/src/setcp.c index e44bb00..f2b2a6c 100644 --- a/src/setcp.c +++ b/src/setcp.c @@ -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; } diff --git a/src/xinput.h b/src/xinput.h index cdb2b2d..4b68090 100644 --- a/src/xinput.h +++ b/src/xinput.h @@ -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); |