summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2012-01-12 16:01:28 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2012-01-12 16:01:28 +1000
commitfb6f41ced063c558f7bf8f10898f027612e2ad34 (patch)
tree10313d8e630f48c9e13d1c0d27df1aa44f621488
parentc690fad9aa0dbc9d574d25e014d1dc15281b0870 (diff)
parent7f2f41d2c8fa7dad9596c34160a85fea026afccb (diff)
Merge branch 'multitouch'
-rw-r--r--configure.ac3
-rw-r--r--src/list.c11
-rw-r--r--src/test_xi2.c27
-rw-r--r--src/xinput.c2
4 files changed, 41 insertions, 2 deletions
diff --git a/configure.ac b/configure.ac
index 5a64837..ea2b5bb 100644
--- a/configure.ac
+++ b/configure.ac
@@ -50,6 +50,9 @@ AC_SUBST(HAVE_XI2)
# XI2.1 support
PKG_CHECK_MODULES(XI21, [xi >= 1.4.99.1] [inputproto >= 2.0.99.1],
AC_DEFINE(HAVE_XI21, 1, [XI2.1 available]));
+# XI2.2 support
+PKG_CHECK_MODULES(XI22, [xi >= 1.5.99.1] [inputproto >= 2.1.99.1],
+ AC_DEFINE(HAVE_XI22, 1, [XI2.2 available]));
AC_OUTPUT([Makefile
src/Makefile
diff --git a/src/list.c b/src/list.c
index 3be20eb..cc39bd3 100644
--- a/src/list.c
+++ b/src/list.c
@@ -225,6 +225,17 @@ print_classes_xi2(Display* display, XIAnyClassInfo **classes,
}
break;
#endif
+#if HAVE_XI22
+ case XITouchClass:
+ {
+ XITouchClassInfo *t = (XITouchClassInfo*)classes[i];
+
+ printf("XITouchClass\n");
+ printf("\t\tTouch mode: %s\n",
+ (t->mode == XIDirectTouch) ? "direct" : "dependent");
+ printf("\t\tMax number of touches: %d\n", t->num_touches);
+ }
+#endif
}
}
diff --git a/src/test_xi2.c b/src/test_xi2.c
index 4a6c3b6..7fd6f85 100644
--- a/src/test_xi2.c
+++ b/src/test_xi2.c
@@ -301,6 +301,12 @@ static const char* type_to_name(int evtype)
case XI_RawButtonPress: name = "RawButtonPress"; break;
case XI_RawButtonRelease: name = "RawButtonRelease"; break;
case XI_RawMotion: name = "RawMotion"; break;
+ case XI_TouchBegin: name = "TouchBegin"; break;
+ case XI_TouchUpdate: name = "TouchUpdate"; break;
+ case XI_TouchEnd: name = "TouchEnd"; break;
+ case XI_RawTouchBegin: name = "RawTouchBegin"; break;
+ case XI_RawTouchUpdate: name = "RawTouchUpdate"; break;
+ case XI_RawTouchEnd: name = "RawTouchEnd"; break;
default:
name = "unknown event type"; break;
}
@@ -318,8 +324,12 @@ test_xi2(Display *display,
XIEventMask mask;
Window win;
int deviceid = -1;
+ int rc;
+
+ rc = list(display, argc, argv, name, desc);
+ if (rc != EXIT_SUCCESS)
+ return rc;
- list(display, argc, argv, name, desc);
if (argc >= 1) {
XIDeviceInfo *info;
info = xi2_find_device_info(display, argv[0]);
@@ -329,7 +339,7 @@ test_xi2(Display *display,
/* Select for motion events */
mask.deviceid = (deviceid == -1) ? XIAllDevices : deviceid;
- mask.mask_len = XIMaskLen(XI_RawMotion);
+ mask.mask_len = XIMaskLen(XI_LASTEVENT);
mask.mask = calloc(mask.mask_len, sizeof(char));
XISetMask(mask.mask, XI_ButtonPress);
XISetMask(mask.mask, XI_ButtonRelease);
@@ -341,6 +351,11 @@ test_xi2(Display *display,
XISetMask(mask.mask, XI_Leave);
XISetMask(mask.mask, XI_FocusIn);
XISetMask(mask.mask, XI_FocusOut);
+#ifdef HAVE_XI22
+ XISetMask(mask.mask, XI_TouchBegin);
+ XISetMask(mask.mask, XI_TouchUpdate);
+ XISetMask(mask.mask, XI_TouchEnd);
+#endif
if (mask.deviceid == XIAllDevices)
XISetMask(mask.mask, XI_HierarchyChanged);
XISetMask(mask.mask, XI_PropertyEvent);
@@ -374,6 +389,11 @@ test_xi2(Display *display,
XISetMask(mask.mask, XI_RawButtonPress);
XISetMask(mask.mask, XI_RawButtonRelease);
XISetMask(mask.mask, XI_RawMotion);
+#ifdef HAVE_XI22
+ XISetMask(mask.mask, XI_RawTouchBegin);
+ XISetMask(mask.mask, XI_RawTouchUpdate);
+ XISetMask(mask.mask, XI_RawTouchEnd);
+#endif
XISelectEvents(display, DefaultRootWindow(display), &mask, 1);
free(mask.mask);
@@ -412,6 +432,9 @@ test_xi2(Display *display,
case XI_RawButtonPress:
case XI_RawButtonRelease:
case XI_RawMotion:
+ case XI_RawTouchBegin:
+ case XI_RawTouchUpdate:
+ case XI_RawTouchEnd:
print_rawevent(cookie->data);
break;
case XI_Enter:
diff --git a/src/xinput.c b/src/xinput.c
index 9460175..80a1789 100644
--- a/src/xinput.c
+++ b/src/xinput.c
@@ -197,6 +197,8 @@ xinput_version(Display *display)
#if HAVE_XI21
min = 1;
+#elif HAVE_XI22
+ min = 2;
#endif
XIQueryVersion(display, &maj, &min);