X-Git-Url: https://diplodocus.org/git/xorg-xinput/blobdiff_plain/248faefc957a9b0877384842540b2d935e1b5c07..a80014b71a878c5377c3b853f242ead4a6f8a270:/src/test_xi2.c diff --git a/src/test_xi2.c b/src/test_xi2.c index b08a395..53d984f 100644 --- a/src/test_xi2.c +++ b/src/test_xi2.c @@ -48,27 +48,28 @@ static void print_deviceevent(XIDeviceEvent* event) printf(" device: %d (%d)\n", event->deviceid, event->sourceid); printf(" detail: %d\n", event->detail); + printf(" flags: %s\n", (event->flags & XIKeyRepeat) ? "repeat" : ""); printf(" root: %.2f/%.2f\n", event->root_x, event->root_y); printf(" event: %.2f/%.2f\n", event->event_x, event->event_y); printf(" buttons:"); - for (i = 0; i < event->buttons->mask_len * 8; i++) - if (XIMaskIsSet(event->buttons->mask, i)) + for (i = 0; i < event->buttons.mask_len * 8; i++) + if (XIMaskIsSet(event->buttons.mask, i)) printf(" %d", i); printf("\n"); - printf(" modifiers: locked %#x latched %#x base %#x\n", - event->mods->locked, event->mods->latched, - event->mods->base); - printf(" group: locked %#x latched %#x base %#x\n", - event->group->locked, event->group->latched, - event->group->base); + printf(" modifiers: locked %#x latched %#x base %#x effective: %#x\n", + event->mods.locked, event->mods.latched, + event->mods.base, event->mods.effective); + printf(" group: locked %#x latched %#x base %#x effective: %#x\n", + event->group.locked, event->group.latched, + event->group.base, event->group.effective); printf(" valuators:"); - val = event->valuators->values; - for (i = 0; i < event->valuators->mask_len * 8; i++) - if (XIMaskIsSet(event->valuators->mask, i)) + val = event->valuators.values; + for (i = 0; i < event->valuators.mask_len * 8; i++) + if (XIMaskIsSet(event->valuators.mask, i)) printf(" %.2f", *val++); printf("\n"); @@ -139,10 +140,10 @@ static void print_rawevent(XIRawEvent *event) printf(" detail: %d\n", event->detail); printf(" valuators:\n"); - val = event->valuators->values; + val = event->valuators.values; raw_val = event->raw_values; - for (i = 0; i < event->valuators->mask_len * 8; i++) - if (XIMaskIsSet(event->valuators->mask, i)) + for (i = 0; i < event->valuators.mask_len * 8; i++) + if (XIMaskIsSet(event->valuators.mask, i)) printf(" %2d: %.2f (%.2f)\n", i, *val++, *raw_val++); printf("\n"); } @@ -152,41 +153,44 @@ static void print_enterleave(XILeaveEvent* event) char *mode, *detail; int i; + printf(" device: %d\n", event->deviceid); printf(" windows: root 0x%lx event 0x%lx child 0x%ld\n", event->root, event->event, event->child); switch(event->mode) { - case NotifyNormal: mode = "NotifyNormal"; break; - case NotifyGrab: mode = "NotifyGrab"; break; - case NotifyUngrab: mode = "NotifyUngrab"; break; - case NotifyWhileGrabbed: mode = "NotifyWhileGrabbed"; break; + case XINotifyNormal: mode = "NotifyNormal"; break; + case XINotifyGrab: mode = "NotifyGrab"; break; + case XINotifyUngrab: mode = "NotifyUngrab"; break; + case XINotifyWhileGrabbed: mode = "NotifyWhileGrabbed"; break; + case XINotifyPassiveGrab: mode = "NotifyPassiveGrab"; break; + case XINotifyPassiveUngrab:mode = "NotifyPassiveUngrab"; break; } switch (event->detail) { - case NotifyAncestor: detail = "NotifyAncestor"; break; - case NotifyVirtual: detail = "NotifyVirtual"; break; - case NotifyInferior: detail = "NotifyInferior"; break; - case NotifyNonlinear: detail = "NotifyNonlinear"; break; - case NotifyNonlinearVirtual: detail = "NotifyNonlinearVirtual"; break; - case NotifyPointer: detail = "NotifyPointer"; break; - case NotifyPointerRoot: detail = "NotifyPointerRoot"; break; - case NotifyDetailNone: detail = "NotifyDetailNone"; break; + case XINotifyAncestor: detail = "NotifyAncestor"; break; + case XINotifyVirtual: detail = "NotifyVirtual"; break; + case XINotifyInferior: detail = "NotifyInferior"; break; + case XINotifyNonlinear: detail = "NotifyNonlinear"; break; + case XINotifyNonlinearVirtual: detail = "NotifyNonlinearVirtual"; break; + case XINotifyPointer: detail = "NotifyPointer"; break; + case XINotifyPointerRoot: detail = "NotifyPointerRoot"; break; + case XINotifyDetailNone: detail = "NotifyDetailNone"; break; } printf(" mode: %s (detail %s)\n", mode, detail); printf(" flags: %s %s\n", event->focus ? "[focus]" : "", event->same_screen ? "[same screen]" : ""); printf(" buttons:"); - for (i = 0; i < event->buttons->mask_len * 8; i++) - if (XIMaskIsSet(event->buttons->mask, i)) + for (i = 0; i < event->buttons.mask_len * 8; i++) + if (XIMaskIsSet(event->buttons.mask, i)) printf(" %d", i); printf("\n"); - printf(" modifiers: locked %#x latched %#x base %#x\n", - event->mods->locked, event->mods->latched, - event->mods->base); - printf(" group: locked %#x latched %#x base %#x\n", - event->group->locked, event->group->latched, - event->group->base); + printf(" modifiers: locked %#x latched %#x base %#x effective: %#x\n", + event->mods.locked, event->mods.latched, + event->mods.base, event->mods.effective); + printf(" group: locked %#x latched %#x base %#x effective: %#x\n", + event->group.locked, event->group.latched, + event->group.base, event->group.effective); printf(" root x/y: %.2f / %.2f\n", event->root_x, event->root_y); printf(" event x/y: %.2f / %.2f\n", event->event_x, event->event_y); @@ -196,6 +200,7 @@ static void print_enterleave(XILeaveEvent* event) static void print_propertyevent(Display *display, XIPropertyEvent* event) { char *changed; + char *name; if (event->what == XIPropertyDeleted) changed = "deleted"; @@ -203,10 +208,11 @@ static void print_propertyevent(Display *display, XIPropertyEvent* event) changed = "created"; else changed = "modified"; - - printf(" property: %ld '%s'\n", event->property, XGetAtomName(display, event->property)); + name = XGetAtomName(display, event->property); + printf(" property: %ld '%s'\n", event->property, name); printf(" changed: %s\n", changed); + XFree(name); } void test_sync_grab(Display *display, Window win) @@ -245,7 +251,6 @@ test_sync_grab(Display *display, Window win) XIDeviceEvent *event = (XIDeviceEvent*)&ev; print_deviceevent(event); XIAllowEvents(display, 2, SyncPointer, CurrentTime); - XIFreeEventData(&ev); } } @@ -268,7 +273,7 @@ test_xi2(Display *display, /* Select for motion events */ mask.deviceid = XIAllDevices; - mask.mask_len = 2; + mask.mask_len = XIMaskLen(XI_RawMotion); mask.mask = calloc(mask.mask_len, sizeof(char)); XISetMask(mask.mask, XI_ButtonPress); XISetMask(mask.mask, XI_ButtonRelease); @@ -295,18 +300,23 @@ test_xi2(Display *display, XISetMask(mask.mask, XI_KeyPress); XISetMask(mask.mask, XI_KeyRelease); XISetMask(mask.mask, XI_ButtonPress); + XISetMask(mask.mask, XI_ButtonRelease); XISetMask(mask.mask, XI_Motion); XIGrabButton(display, 2, 1, win, None, GrabModeAsync, GrabModeAsync, False, &mask, nmods, modifiers); - XIGrabKeysym(display, 3, 0x71, win, GrabModeAsync, GrabModeAsync, + XIGrabKeycode(display, 3, 24 /* q */, win, GrabModeAsync, GrabModeAsync, False, &mask, nmods, modifiers); XIUngrabButton(display, 3, 1, win, nmods - 2, &modifiers[2]); - XIUngrabKeysym(display, 3, 0x71, win, nmods - 2, &modifiers[2]); + XIUngrabKeycode(display, 3, 24 /* q */, win, nmods - 2, &modifiers[2]); } mask.deviceid = XIAllMasterDevices; memset(mask.mask, 0, 2); - XISetMask(mask.mask, XI_RawEvent); + XISetMask(mask.mask, XI_RawKeyPress); + XISetMask(mask.mask, XI_RawKeyRelease); + XISetMask(mask.mask, XI_RawButtonPress); + XISetMask(mask.mask, XI_RawButtonRelease); + XISetMask(mask.mask, XI_RawMotion); XISelectEvents(display, DefaultRootWindow(display), &mask, 1); free(mask.mask); @@ -323,41 +333,46 @@ test_xi2(Display *display, while(1) { - XIEvent ev; + XEvent ev; + XGenericEventCookie *cookie = (XGenericEventCookie*)&ev.xcookie; XNextEvent(display, (XEvent*)&ev); - if (ev.type == GenericEvent && ev.extension == xi_opcode) - { - XIDeviceEvent *event = (XIDeviceEvent*)&ev; - printf("EVENT type %d\n", event->evtype); - switch (event->evtype) + if (XGetEventData(display, cookie) && + cookie->type == GenericEvent && + cookie->extension == xi_opcode) + { + printf("EVENT type %d\n", cookie->evtype); + switch (cookie->evtype) { case XI_DeviceChanged: - print_devicechangedevent(display, - (XIDeviceChangedEvent*)event); + print_devicechangedevent(display, cookie->data); break; case XI_HierarchyChanged: - print_hierarchychangedevent((XIHierarchyEvent*)event); + print_hierarchychangedevent(cookie->data); break; - case XI_RawEvent: - print_rawevent((XIRawEvent*)event); + case XI_RawKeyPress: + case XI_RawKeyRelease: + case XI_RawButtonPress: + case XI_RawButtonRelease: + case XI_RawMotion: + print_rawevent(cookie->data); break; case XI_Enter: case XI_Leave: case XI_FocusIn: case XI_FocusOut: - print_enterleave((XILeaveEvent*)event); + print_enterleave(cookie->data); break; case XI_PropertyEvent: - print_propertyevent(display, (XIPropertyEvent*)event); + print_propertyevent(display, cookie->data); break; default: - print_deviceevent(event); + print_deviceevent(cookie->data); break; } } - XIFreeEventData(&ev); + XFreeEventData(display, cookie); } XDestroyWindow(display, win);