From d02601e5c88d1d40e12cd71c2c10c7822919f7b8 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Thu, 20 Dec 2007 12:27:32 +1030 Subject: [PATCH] Register for DeviceClassesChangedEvents, reprint the list when we get one. Only in list --loop mode though. --- src/list.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) 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 { -- 2.56.0