diff options
author | Peter Hutterer <peter.hutterer@who-t.net> | 2009-04-19 21:28:25 +1000 |
---|---|---|
committer | Peter Hutterer <peter.hutterer@who-t.net> | 2009-04-19 21:28:25 +1000 |
commit | 0df21cff5cdf2cf4af0af353f0dbfc7c33388b32 (patch) | |
tree | 9ea7fbf4fab7c15caa35b4a8b7ec9444e9458577 /src | |
parent | dd27752cbff03ea79ac76801d3748edc348570dc (diff) |
Add a hunk to test XI2 sync'd grabs.
Diffstat (limited to 'src')
-rw-r--r-- | src/test_xi2.c | 46 |
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) { |