summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter@cs.unisa.edu.au>2007-12-20 12:27:32 +1030
committerPeter Hutterer <peter@cs.unisa.edu.au>2007-12-20 12:27:32 +1030
commitd02601e5c88d1d40e12cd71c2c10c7822919f7b8 (patch)
treeed66fc901148205b1aa264ca0e2575481b813cca
parent60dafc9de224e2f1e53826858e5335916dc6d8c8 (diff)
Register for DeviceClassesChangedEvents, reprint the list when we get one.
Only in list --loop mode though.
-rw-r--r--src/list.c17
1 files changed, 16 insertions, 1 deletions
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 <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 {