diff options
author | Peter Hutterer <peter@cs.unisa.edu.au> | 2007-12-20 12:27:32 +1030 |
---|---|---|
committer | Peter Hutterer <peter@cs.unisa.edu.au> | 2007-12-20 12:27:32 +1030 |
commit | d02601e5c88d1d40e12cd71c2c10c7822919f7b8 (patch) | |
tree | ed66fc901148205b1aa264ca0e2575481b813cca | |
parent | 60dafc9de224e2f1e53826858e5335916dc6d8c8 (diff) |
Register for DeviceClassesChangedEvents, reprint the list when we get one.
Only in list --loop mode though.
-rw-r--r-- | src/list.c | 17 |
1 files changed, 16 insertions, 1 deletions
@@ -23,6 +23,7 @@ #include "xinput.h" #include <string.h> +#include <X11/extensions/XIproto.h> /* 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 { |