X-Git-Url: https://diplodocus.org/git/xorg-xinput/blobdiff_plain/451740ba094c37ac9e06c7ba7f466b5ab1beea08..86cab0389d9a02901c82e2072e4043a404fb2ebc:/src/list.c diff --git a/src/list.c b/src/list.c index 6e660ae..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,10 +34,36 @@ 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); - printf("\"%s\"\tid=%ld\t[%s]\n", info->name, info->id, - (info->use == IsXExtensionDevice) ? "XExtensionDevice" : - ((info->use == IsXPointer) ? "XPointer" : "XKeyboard")); + switch (info->use) { + case IsXPointer: + printf("XPointer"); + break; + case IsXKeyboard: + printf("XKeyboard"); + break; + case IsXExtensionDevice: + printf("XExtensionDevice"); + break; + case IsXExtensionKeyboard: + printf("XExtensionKeyboard"); + break; + case IsXExtensionPointer: + printf("XExtensionPointer"); + break; + default: + printf("Unknown class"); + break; + } + printf("]\n"); + + if (shortformat) + return; if (info->num_classes > 0) { any = (XAnyClassPtr) (info->inputclassinfo); @@ -55,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"); @@ -67,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"); } @@ -85,26 +118,64 @@ list(Display *display, { XDeviceInfo *info; int loop; + int shortformat = False; + int daemon = False; + + shortformat = (argc == 1 && strcmp(argv[0], "--short") == 0); + daemon = (argc == 1 && strcmp(argv[0], "--loop") == 0); - if (argc == 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