]> diplodocus.org Git - xorg-xinput/blobdiff - src/test_xi2.c
Add Peter and Red Hat's copyright notices and licenses to COPYING
[xorg-xinput] / src / test_xi2.c
index b08a3959054db20c22dde94cdb0553c7265fffdb..53d984f04b9bd2919226b04e86e8656b7cb6c34a 100644 (file)
@@ -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);