X-Git-Url: https://diplodocus.org/git/xorg-xinput/blobdiff_plain/3cad22debfaceca754fc166ca766d92b7a8faf70..82d338548e22ae271f50592e759794dd7536a207:/src/list.c diff --git a/src/list.c b/src/list.c index 52e3961..2313fbd 100644 --- a/src/list.c +++ b/src/list.c @@ -26,7 +26,7 @@ #include /* for XI_Device***ChangedNotify */ static void -print_info(XDeviceInfo *info, Bool shortformat) +print_info(Display* dpy, XDeviceInfo *info, Bool shortformat) { int i,j; XAnyClassPtr any; @@ -62,6 +62,9 @@ print_info(XDeviceInfo *info, Bool shortformat) if (shortformat) return; + if(info->type != None) + printf("\tType is %s\n", XGetAtomName(dpy, info->type)); + if (info->num_classes > 0) { any = (XAnyClassPtr) (info->inputclassinfo); for (i=0; inum_classes; i++) { @@ -120,7 +123,7 @@ static int list_xi1(Display *display, do { info = XListInputDevices(display, &num_devices); for(loop=0; loopsourceid); 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; } @@ -190,19 +205,19 @@ print_info_xi2(Display* display, XIDeviceInfo *dev, Bool shortformat) printf("%-40s\tid=%d\t[", dev->name, dev->deviceid); switch(dev->use) { - case MasterPointer: + case XIMasterPointer: printf("master pointer (%d)]\n", dev->attachment); break; - case MasterKeyboard: + case XIMasterKeyboard: printf("master keyboard (%d)]\n", dev->attachment); break; - case SlavePointer: + case XISlavePointer: printf("slave pointer (%d)]\n", dev->attachment); break; - case SlaveKeyboard: + case XISlaveKeyboard: printf("slave keyboard (%d)]\n", dev->attachment); break; - case FloatingSlave: + case XIFloatingSlave: printf("floating slave]\n"); break; } @@ -239,15 +254,14 @@ list_xi2(Display *display, return EXIT_FAILURE; } - info = XIQueryDevice(display, AllDevices, &ndevices); - dev = info; + info = XIQueryDevice(display, XIAllDevices, &ndevices); for(i = 0; i < ndevices; i++) { dev = &info[i]; - if (dev->use == MasterPointer || dev->use == MasterKeyboard) + if (dev->use == XIMasterPointer || dev->use == XIMasterKeyboard) { - if (dev->use == MasterPointer) + if (dev->use == XIMasterPointer) printf("⎡ "); else printf("⎣ "); @@ -257,16 +271,26 @@ list_xi2(Display *display, { XIDeviceInfo* sd = &info[j]; - if ((sd->use == SlavePointer || sd->use == SlaveKeyboard) && + if ((sd->use == XISlavePointer || sd->use == XISlaveKeyboard) && (sd->attachment == dev->deviceid)) { - printf("%s ↳ ", dev->use == MasterPointer ? "⎜" : " "); + printf("%s ↳ ", dev->use == XIMasterPointer ? "⎜" : " "); print_info_xi2(display, sd, shortformat); } } } } + 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;