summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2009-02-26 16:14:21 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2009-03-21 22:18:41 +1000
commit5aa923fc560718b9a093ad18966f4530eef0efd7 (patch)
tree99b0b9388f5ebb08b8aee628784af68e8627dda3
parenta12acdea9e289c9495bc14dd886e9a68cf9a533f (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.ac9
-rw-r--r--src/hierarchy.c89
-rw-r--r--src/setcp.c15
-rw-r--r--src/xinput.h4
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);