From: Peter Hutterer Date: Thu, 20 Dec 2007 01:57:32 +0000 (+1030) Subject: Register for DeviceClassesChangedEvents, reprint the list when we get one. X-Git-Url: https://diplodocus.org/git/xorg-xinput/commitdiff_plain/d02601e5c88d1d40e12cd71c2c10c7822919f7b8?ds=inline;hp=-c Register for DeviceClassesChangedEvents, reprint the list when we get one. Only in list --loop mode though. --- d02601e5c88d1d40e12cd71c2c10c7822919f7b8 diff --git a/src/list.c b/src/list.c index 85b766d..e288642 100644 --- a/src/list.c +++ b/src/list.c @@ -23,6 +23,7 @@ #include "xinput.h" #include +#include /* for XI_Device***ChangedNotify */ static void print_info(XDeviceInfo *info, Bool shortformat) @@ -128,7 +129,8 @@ list(Display *display, if (daemon) { XiSelectEvent(display, DefaultRootWindow(display), - XI_DeviceHierarchyChangedMask); + XI_DeviceHierarchyChangedMask | + XI_DeviceClassesChangedMask); } do { @@ -141,7 +143,20 @@ list(Display *display, 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; + } } } while(daemon); } else {