]> diplodocus.org Git - xorg-xinput/commitdiff
Print DeviceChanged events.
authorPeter Hutterer <peter.hutterer@who-t.net>
Sun, 8 Mar 2009 02:25:15 +0000 (12:25 +1000)
committerPeter Hutterer <peter.hutterer@who-t.net>
Sat, 21 Mar 2009 12:18:42 +0000 (22:18 +1000)
src/test_xi2.c

index ecaf0dc..dbd7102 100644 (file)
@@ -25,6 +25,8 @@
 
 #include "xinput.h"
 
 
 #include "xinput.h"
 
+extern void print_classes_xi2(Display*, XIAnyClassInfo **classes,
+                              int num_classes);
 
 #define BitIsOn(ptr, bit) (((BYTE *) (ptr))[(bit)>>3] & (1 << ((bit) & 7)))
 
 
 #define BitIsOn(ptr, bit) (((BYTE *) (ptr))[(bit)>>3] & (1 << ((bit) & 7)))
 
@@ -38,6 +40,46 @@ static Window create_win(Display *dpy)
     return win;
 }
 
     return win;
 }
 
+static void print_deviceevent(XIDeviceEvent* event)
+{
+    double *val;
+    int i;
+
+    printf("    device: %d (%d)\n", event->deviceid, event->sourceid);
+    printf("    detail: %d\n", event->detail);
+    printf("    buttons:");
+    for (i = 0; i < event->buttons->mask_len * 8; i++)
+        if (BitIsOn(event->buttons->mask, i))
+            printf(" %d", i);
+    printf("\n");
+
+    printf("    modifiers: locked 0x%x latched 0x%x base 0x%x\n",
+            event->mods->locked, event->mods->latched,
+            event->mods->base);
+    printf("    group: locked 0x%x latched 0x%x base 0x%x\n",
+            event->group->locked, event->group->latched,
+            event->group->base);
+    printf("    valuators:");
+
+    val = event->valuators->values;
+    for (i = 0; i < event->valuators->mask_len * 8; i++)
+        if (BitIsOn(event->valuators->mask, i))
+            printf(" %.2f", *val++);
+    printf("\n");
+
+    printf("    windows: root 0x%lx event 0x%lx child 0x%ld\n",
+            event->root, event->event, event->child);
+}
+
+static void print_devicechangedevent(Display *dpy, XIDeviceChangedEvent *event)
+{
+    printf("    device: %d (%d)\n", event->deviceid, event->sourceid);
+    printf("    reason: %s\n", (event->reason == SlaveSwitch) ? "SlaveSwitch" :
+                                "DeviceChanged");
+    print_classes_xi2(dpy, event->classes, event->num_classes);
+}
+
+
 int
 test_xi2(Display       *display,
          int   argc,
 int
 test_xi2(Display       *display,
          int   argc,
@@ -45,7 +87,6 @@ test_xi2(Display      *display,
          char  *name,
          char  *desc)
 {
          char  *name,
          char  *desc)
 {
-    int i;
     XIDeviceEventMask mask;
     Window win;
 
     XIDeviceEventMask mask;
     Window win;
 
@@ -54,10 +95,10 @@ test_xi2(Display    *display,
 
     /* Select for motion events */
     mask.deviceid = AllDevices;
 
     /* Select for motion events */
     mask.deviceid = AllDevices;
-    mask.mask_len = 1;
-    mask.mask = calloc(1, sizeof(char));
+    mask.mask_len = 2;
+    mask.mask = calloc(2, sizeof(char));
     mask.mask[0] = XI_ButtonPressMask | XI_ButtonReleaseMask | XI_MotionMask |
     mask.mask[0] = XI_ButtonPressMask | XI_ButtonReleaseMask | XI_MotionMask |
-        XI_KeyPressMask | XI_KeyReleaseMask;
+        XI_KeyPressMask | XI_KeyReleaseMask | XI_DeviceChangedMask;
     XISelectEvent(display, win, &mask, 1);
     free(mask.mask);
 
     XISelectEvent(display, win, &mask, 1);
     free(mask.mask);
 
@@ -68,33 +109,18 @@ test_xi2(Display   *display,
         if (ev.type == GenericEvent)
         {
             XIDeviceEvent *event = (XIDeviceEvent*)&ev;
         if (ev.type == GenericEvent)
         {
             XIDeviceEvent *event = (XIDeviceEvent*)&ev;
-            double *val;
 
             printf("EVENT type %d\n", event->evtype);
 
             printf("EVENT type %d\n", event->evtype);
-            printf("    device: %d (%d)\n", event->deviceid, event->sourceid);
-            printf("    detail: %d\n", event->detail);
-            printf("    buttons:");
-            for (i = 0; i < event->buttons->mask_len * 8; i++)
-                if (BitIsOn(event->buttons->mask, i))
-                    printf(" %d", i);
-            printf("\n");
-
-            printf("    modifiers: locked 0x%x latched 0x%x base 0x%x\n",
-                    event->mods->locked, event->mods->latched,
-                    event->mods->base);
-            printf("    group: locked 0x%x latched 0x%x base 0x%x\n",
-                    event->group->locked, event->group->latched,
-                    event->group->base);
-            printf("    valuators:");
-
-            val = event->valuators->values;
-            for (i = 0; i < event->valuators->mask_len * 8; i++)
-                if (BitIsOn(event->valuators->mask, i))
-                    printf(" %.2f", *val++);
-            printf("\n");
-
-            printf("    windows: root 0x%lx event 0x%lx child 0x%ld\n",
-                    event->root, event->event, event->child);
+            switch (event->evtype)
+            {
+                case XI_DeviceChanged:
+                    print_devicechangedevent(display,
+                                             (XIDeviceChangedEvent*)event);
+                    break;
+                default:
+                    print_deviceevent(event);
+                    break;
+            }
         }
 
         XIFreeEventData(&ev);
         }
 
         XIFreeEventData(&ev);