X-Git-Url: https://diplodocus.org/git/xorg-xinput/blobdiff_plain/60dafc9de224e2f1e53826858e5335916dc6d8c8..7f046c957d4529249bcb69b35f6513411f6efcf5:/src/list.c diff --git a/src/list.c b/src/list.c index 85b766d..de8aca7 100644 --- a/src/list.c +++ b/src/list.c @@ -5,15 +5,15 @@ * 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, + * 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 @@ -23,6 +23,7 @@ #include "xinput.h" #include +#include /* for XI_Device***ChangedNotify */ static void print_info(XDeviceInfo *info, Bool shortformat) @@ -33,7 +34,9 @@ print_info(XDeviceInfo *info, Bool shortformat) XButtonInfoPtr b; XValuatorInfoPtr v; XAxisInfoPtr a; +#if HAVE_XI2 XAttachInfoPtr att; +#endif printf("\"%s\"\tid=%ld\t[", info->name, info->id); @@ -92,11 +95,12 @@ print_info(XDeviceInfo *info, Bool shortformat) 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"); } @@ -123,13 +127,15 @@ list(Display *display, if (argc == 0 || shortformat || daemon) { int num_devices; XEvent ev; - int daemon = argc; +#if HAVE_XI2 if (daemon) { - XiSelectEvent(display, DefaultRootWindow(display), - XI_DeviceHierarchyChangedMask); + XiSelectEvent(display, DefaultRootWindow(display), NULL, + XI_DeviceHierarchyChangedMask | + XI_DeviceClassesChangedMask); } +#endif do { info = XListInputDevices(display, &num_devices); @@ -137,21 +143,36 @@ list(Display *display, print_info(info+loop, shortformat); } +#if HAVE_XI2 /* just wait for the next generic event to come along */ while (daemon && !XNextEvent(display, &ev)) { if (ev.type == GenericEvent) + { + XGenericEvent* gev = (XGenericEvent*)&ev; + /* we just assume that extension is IReqCode, pretty save + since we don't register for other events. */ + if (gev->evtype == 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