X-Git-Url: https://diplodocus.org/git/xorg-xinput/blobdiff_plain/c0178d2afef586f58f42508a9b8bd78e4e6e0cb8..1c7b473b7e64f8b616aba70926f93d37d5269c28:/src/list.c diff --git a/src/list.c b/src/list.c index 79c2aa4..de8aca7 100644 --- a/src/list.c +++ b/src/list.c @@ -1,19 +1,19 @@ /* * Copyright 1996 by Frederic Lepied, France. - * + * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting - * documentation, and that the name of Frederic Lepied not be used in + * documentation, and that the name of the authors not be used in * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Frederic Lepied makes no + * specific, written prior permission. The authors make no * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * FREDERIC LEPIED DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * is provided "as is" without express or implied warranty. + * + * THE AUTHORS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL FREDERIC LEPIED BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR @@ -22,9 +22,11 @@ */ #include "xinput.h" +#include +#include /* for XI_Device***ChangedNotify */ static void -print_info(XDeviceInfo *info) +print_info(XDeviceInfo *info, Bool shortformat) { int i,j; XAnyClassPtr any; @@ -32,6 +34,9 @@ print_info(XDeviceInfo *info) XButtonInfoPtr b; XValuatorInfoPtr v; XAxisInfoPtr a; +#if HAVE_XI2 + XAttachInfoPtr att; +#endif printf("\"%s\"\tid=%ld\t[", info->name, info->id); @@ -57,6 +62,9 @@ print_info(XDeviceInfo *info) } printf("]\n"); + if (shortformat) + return; + if (info->num_classes > 0) { any = (XAnyClassPtr) (info->inputclassinfo); for (i=0; inum_classes; i++) { @@ -75,7 +83,7 @@ print_info(XDeviceInfo *info) case ValuatorClass: v = (XValuatorInfoPtr) any; - a = (XAxisInfoPtr) ((char *) v + + a = (XAxisInfoPtr) ((char *) v + sizeof (XValuatorInfo)); printf("\tNum_axes is %d\n", v->num_axes); printf("\tMode is %s\n", (v->mode == Absolute) ? "Absolute" : "Relative"); @@ -87,7 +95,12 @@ print_info(XDeviceInfo *info) printf ("\t\tResolution is %d\n", a->resolution); } break; - +#if HAVE_XI2 + case AttachClass: + att = (XAttachInfoPtr)any; + printf("\tAttached to %d\n", att->attached); + break; +#endif default: printf ("unknown class\n"); } @@ -105,26 +118,64 @@ list(Display *display, { XDeviceInfo *info; int loop; + int shortformat = False; + int daemon = False; - if (argc == 0) { + shortformat = (argc == 1 && strcmp(argv[0], "--short") == 0); + daemon = (argc == 1 && strcmp(argv[0], "--loop") == 0); + + if (argc == 0 || shortformat || daemon) { int num_devices; - - info = XListInputDevices(display, &num_devices); - - for(loop=0; loopevtype == XI_DeviceHierarchyChangedNotify) + { + printf("Hierarchy change.\n"); + } else if (gev->evtype == XI_DeviceClassesChangedNotify) + { + printf("Device classes changed.\n"); + free(((XDeviceClassesChangedEvent*)&ev)->inputclassinfo); + } + break; + } + } +#endif + } while(daemon); } else { int ret = EXIT_SUCCESS; for(loop=0; loop