Check for the actual library version, not for some random function inside the
library.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
# Checks for pkg-config packages
PKG_CHECK_MODULES(XINPUT, x11 xext [xi >= 1.2] [inputproto >= 1.5])
# 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)
AC_SUBST(XINPUT_CFLAGS)
AC_SUBST(XINPUT_LIBS)
AC_SUBST(HAVE_XI2)
int
create_master(Display* dpy, int argc, char** argv, char* name, char *desc)
{
int
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;
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);
int
remove_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;
- info = find_device_info(dpy, argv[0], False);
+ id = xi2_find_device_id(dpy, argv[0]);
fprintf(stderr, "unable to find device %s\n", argv[0]);
return EXIT_FAILURE;
}
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.type = CH_RemoveMasterDevice;
if (argc >= 2)
{
if (!strcmp(argv[1], "Floating"))
if (argc >= 2)
{
if (!strcmp(argv[1], "Floating"))
if (r.returnMode == AttachToMaster)
{
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);
int
change_attachment(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;
- 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]);
fprintf(stderr, "unable to find device %s\n", argv[0]);
return EXIT_FAILURE;
}
fprintf(stderr, "unable to find device %s\n", argv[0]);
return EXIT_FAILURE;
}
fprintf(stderr, "unable to find device %s\n", argv[1]);
return EXIT_FAILURE;
}
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);
int
float_device(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;
- info = find_device_info(dpy, argv[0], True);
+ id = xi2_find_device_id(dpy, argv[0]);
fprintf(stderr, "unable to find device %s\n", argv[0]);
return EXIT_FAILURE;
}
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);
int
set_clientpointer(Display* dpy, int argc, char** argv, char* name, char *desc)
{
int
set_clientpointer(Display* dpy, int argc, char** argv, char* name, char *desc)
{
window = strtol(argv[0], &dummy, (*id == 'x') ? 16 : 10);
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]);
fprintf(stderr, "unable to find device %s\n", argv[1]);
return EXIT_FAILURE;
}
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);
#include <X11/Xlib.h>
#include <X11/extensions/XInput.h>
#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>
#include <X11/Xutil.h>
#include <stdio.h>
#include <stdlib.h>
DECLARE(change_attachment);
DECLARE(float_device);
DECLARE(set_clientpointer);
DECLARE(change_attachment);
DECLARE(float_device);
DECLARE(set_clientpointer);
DECLARE(list_props);
DECLARE(set_int_prop);
DECLARE(set_float_prop);
DECLARE(list_props);
DECLARE(set_int_prop);
DECLARE(set_float_prop);