summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2009-04-19 21:28:25 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2009-04-19 21:28:25 +1000
commit0df21cff5cdf2cf4af0af353f0dbfc7c33388b32 (patch)
tree9ea7fbf4fab7c15caa35b4a8b7ec9444e9458577 /src
parentdd27752cbff03ea79ac76801d3748edc348570dc (diff)
Add a hunk to test XI2 sync'd grabs.
Diffstat (limited to 'src')
-rw-r--r--src/test_xi2.c46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/test_xi2.c b/src/test_xi2.c
index 9f56c2a..04eb9ae 100644
--- a/src/test_xi2.c
+++ b/src/test_xi2.c
@@ -185,6 +185,51 @@ static void print_enterleave(XILeaveEvent* event)
}
+void
+test_sync_grab(Display *display, Window win)
+{
+ int loop = 3;
+ int rc;
+ XIDeviceEventMask mask;
+
+ /* Select for motion events */
+ mask.deviceid = AllDevices;
+ mask.mask_len = 2;
+ mask.mask = calloc(2, sizeof(char));
+ SetBit(mask.mask, XI_ButtonPress);
+
+ if ((rc = XIGrabDevice(display, 2, win, CurrentTime, None, GrabModeSync,
+ GrabModeAsync, False, &mask)) != GrabSuccess)
+ {
+ fprintf(stderr, "Grab failed with %d\n", rc);
+ return;
+ }
+ free(mask.mask);
+
+ XSync(display, True);
+ XIAllowEvents(display, 2, SyncPointer, CurrentTime);
+ XFlush(display);
+
+ printf("Holding sync grab for %d button presses.\n", loop);
+
+ while(loop--)
+ {
+ XIEvent ev;
+
+ XNextEvent(display, (XEvent*)&ev);
+ if (ev.type == GenericEvent)
+ {
+ XIDeviceEvent *event = (XIDeviceEvent*)&ev;
+ print_deviceevent(event);
+ XIAllowEvents(display, 2, SyncPointer, CurrentTime);
+ XIFreeEventData(&ev);
+ }
+ }
+
+ XIUngrabDevice(display, 2, CurrentTime);
+ printf("Done\n");
+}
+
int
test_xi2(Display *display,
int argc,
@@ -228,6 +273,7 @@ test_xi2(Display *display,
XSelectInput(display, win, 0);
}
+ test_sync_grab(display, win);
while(1)
{