X-Git-Url: https://diplodocus.org/git/xorg-xinput/blobdiff_plain/239cd6a673be2821915301c1b3c3bae063e9dd94..09b075863708e43b9c1202dd052f36d5f865f571:/src/list.c diff --git a/src/list.c b/src/list.c index daebf3f..ecf1f4b 100644 --- a/src/list.c +++ b/src/list.c @@ -104,42 +104,15 @@ print_info(Display* dpy, XDeviceInfo *info, Bool shortformat) } static int list_xi1(Display *display, - int argc, - char *argv[], - char *name, - char *desc) + int shortformat) { XDeviceInfo *info; int loop; - int shortformat = False; - int daemon = False; + int num_devices; - shortformat = (argc == 1 && strcmp(argv[0], "--short") == 0); - daemon = (argc == 1 && strcmp(argv[0], "--loop") == 0); - - if (argc == 0 || shortformat || daemon) { - int num_devices; - - do { - info = XListInputDevices(display, &num_devices); - for(loop=0; loopsourceid); switch(classes[i]->type) { - case ButtonClass: + case XIButtonClass: { XIButtonClassInfo *b = (XIButtonClassInfo*)classes[i]; + char *name; printf("\t\tButtons supported: %d\n", b->num_buttons); + printf("\t\tButton labels:"); + for (j = 0; j < b->num_buttons; j++) + { + name = (b->labels[j]) ? XGetAtomName(display, b->labels[j]) : NULL; + printf(" %s", (name) ? name : "None"); + XFree(name); + } + 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]; + char *name = v->label ? XGetAtomName(display, v->label) : NULL; + 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", (name) ? name : "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); + XFree(name); } break; } @@ -220,21 +213,16 @@ print_info_xi2(Display* display, XIDeviceInfo *dev, Bool shortformat) } -int -list_xi2(Display *display, - int argc, - char *argv[], - char *name, - char *desc) +static int +list_xi2(Display *display, + int shortformat) { int major = XI_2_Major, minor = XI_2_Minor; int ndevices; - int i, j, shortformat; + int i, j; XIDeviceInfo *info, *dev; - shortformat = (argc == 1 && strcmp(argv[0], "--short") == 0); - if (XIQueryVersion(display, &major, &minor) != Success || (major * 1000 + minor) < (XI_2_Major * 1000 + XI_2_Minor)) { @@ -243,7 +231,6 @@ list_xi2(Display *display, } info = XIQueryDevice(display, XIAllDevices, &ndevices); - dev = info; for(i = 0; i < ndevices; i++) { @@ -270,6 +257,16 @@ list_xi2(Display *display, } } + 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; @@ -283,11 +280,44 @@ list(Display *display, char *name, char *desc) { + int shortformat = (argc >= 1 && strcmp(argv[0], "--short") == 0); + int longformat = (argc >= 1 && strcmp(argv[0], "--long") == 0); + int arg_dev = shortformat || longformat; + + if (argc > arg_dev) + { +#ifdef HAVE_XI2 + if (xinput_version(display) == XI_2_Major) + { + XIDeviceInfo *info = xi2_find_device_info(display, argv[arg_dev]); + + if (!info) { + fprintf(stderr, "unable to find device %s\n", argv[arg_dev]); + return EXIT_FAILURE; + } else { + print_info_xi2(display, info, shortformat); + return EXIT_SUCCESS; + } + } else +#endif + { + XDeviceInfo *info = find_device_info(display, argv[arg_dev], False); + + if (!info) { + fprintf(stderr, "unable to find device %s\n", argv[arg_dev]); + return EXIT_FAILURE; + } else { + print_info(display, info, shortformat); + return EXIT_SUCCESS; + } + } + } else { #ifdef HAVE_XI2 - if (xinput_version(display) == XI_2_Major) - return list_xi2(display, argc, argv, name, desc); + if (xinput_version(display) == XI_2_Major) + return list_xi2(display, !longformat); #endif - return list_xi1(display, argc, argv, name, desc); + return list_xi1(display, !longformat); + } } /* end of list.c */