diff options
| author | Peter Hutterer <peter@cs.unisa.edu.au> | 2007-12-20 12:21:34 +1030 |
|---|---|---|
| committer | Peter Hutterer <peter@cs.unisa.edu.au> | 2007-12-20 12:23:08 +1030 |
| commit | 60dafc9de224e2f1e53826858e5335916dc6d8c8 (patch) | |
| tree | 6f6c5cadd86ec6dbf6a58ecff0b0d0e96fe61d38 | |
| parent | d1428764180c927cfa45298f5b7d0bf14eacc2da (diff) | |
Add --loop to "xinput list". Re-prints devices when hierarchy changes.
| -rw-r--r-- | src/list.c | 32 | ||||
| -rw-r--r-- | src/xinput.c | 12 |
2 files changed, 31 insertions, 13 deletions
@@ -115,17 +115,35 @@ list(Display *display, XDeviceInfo *info; int loop; int shortformat = False; + int daemon = False; shortformat = (argc == 1 && strcmp(argv[0], "--short") == 0); + daemon = (argc == 1 && strcmp(argv[0], "--loop") == 0); - if (argc == 0 || shortformat) { + if (argc == 0 || shortformat || daemon) { int num_devices; - - info = XListInputDevices(display, &num_devices); - - for(loop=0; loop<num_devices; loop++) { - print_info(info+loop, shortformat); - } + XEvent ev; + int daemon = argc; + + if (daemon) + { + XiSelectEvent(display, DefaultRootWindow(display), + XI_DeviceHierarchyChangedMask); + } + + do { + info = XListInputDevices(display, &num_devices); + for(loop=0; loop<num_devices; loop++) { + print_info(info+loop, shortformat); + } + + /* just wait for the next generic event to come along */ + while (daemon && !XNextEvent(display, &ev)) + { + if (ev.type == GenericEvent) + break; + } + } while(daemon); } else { int ret = EXIT_SUCCESS; diff --git a/src/xinput.c b/src/xinput.c index 68f7f0b..47603d2 100644 --- a/src/xinput.c +++ b/src/xinput.c @@ -1,6 +1,6 @@ /* * Copyright 1996 by Frederic Lepied, France. <Frederic.Lepied@sugix.frmug.org> - * + * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that @@ -9,8 +9,8 @@ * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. Frederic Lepied makes no * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * + * is provided "as is" without express or implied warranty. + * * FREDERIC LEPIED DISCLAIMS 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 @@ -32,7 +32,7 @@ typedef int (*prog)( #endif ); -typedef struct +typedef struct { char *func_name; char *arg_desc; @@ -66,7 +66,7 @@ static entry drivers[] = set_mode }, {"list", - "[--short || <device name>...]", + "[--loop || --short || <device name>...]", list }, {"query-state", @@ -106,7 +106,7 @@ is_xinput_present(Display *display) { XExtensionVersion *version; Bool present; - + version = XGetExtensionVersion(display, INAME); if (version && (version != (XExtensionVersion*) NoSuchExtension)) { |
