print_classes_xi2(Display* display, XIAnyClassInfo **classes,
int num_classes)
{
- int i;
+ int i, j;
printf("\tReporting %d classes:\n", num_classes);
for (i = 0; i < num_classes; i++)
{
+ printf("\t\tClass originated from: %d\n", classes[i]->sourceid);
switch(classes[i]->type)
{
- case ButtonClass:
+ case XIButtonClass:
{
XIButtonClassInfo *b = (XIButtonClassInfo*)classes[i];
printf("\t\tButtons supported: %d\n", b->num_buttons);
+ printf("\t\tButton labels:");
+ for (j = 0; j < b->num_buttons; j++)
+ printf(" %s", (b->labels[j]) ? XGetAtomName(display, b->labels[j]) : "None");
+ printf("\n");
+ printf("\t\tButton state:");
+ for (j = 0; j < b->state.mask_len * 8; j++)
+ if (XIMaskIsSet(b->state.mask, j))
+ printf(" %d", j);
+ printf("\n");
}
break;
- case KeyClass:
+ case XIKeyClass:
{
XIKeyClassInfo *k = (XIKeyClassInfo*)classes[i];
printf("\t\tKeycodes supported: %d\n", k->num_keycodes);
}
break;
- case ValuatorClass:
+ case XIValuatorClass:
{
XIValuatorClassInfo *v = (XIValuatorClassInfo*)classes[i];
printf("\t\tDetail for Valuator %d:\n", v->number);
- printf("\t\t Name: %s\n", XGetAtomName(display, v->name));
+ printf("\t\t Label: %s\n", v->label ? XGetAtomName(display, v->label) : "None");
printf("\t\t Range: %f - %f\n", v->min, v->max);
printf("\t\t Resolution: %d units/m\n", v->resolution);
printf("\t\t Mode: %s\n", v->mode == Absolute ? "absolute" :
"relative");
+ if (v->mode == Absolute)
+ printf("\t\t Current value: %f\n", v->value);
}
break;
}
}
info = XIQueryDevice(display, XIAllDevices, &ndevices);
- dev = info;
for(i = 0; i < ndevices; i++)
{
}
}
+ for (i = 0; i < ndevices; i++)
+ {
+ dev = &info[i];
+ if (dev->use == XIFloatingSlave)
+ {
+ printf("∼ ");
+ print_info_xi2(display, dev, shortformat);
+ }
+ }
+
XIFreeDeviceInfo(info);
return EXIT_SUCCESS;