summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Jaeger <ThJaeger@gmail.com>2009-10-07 13:05:15 -0400
committerPeter Hutterer <peter.hutterer@who-t.net>2009-10-09 14:41:04 +1000
commit7010a6c924ce6937c8e040c837a118663d6dfdb3 (patch)
treed822edaebb7747b7e5faf749d709a1cf5d19a5f9
parent7d930a42e6c294ecaaf42585e37b8dc24be8a805 (diff)
Rework 'xinput list' code
* Drop the questionable --loop option * Add a --long option (opposite of --short) * Make --short the default if no device argument is given * XI2: Make it possible to query a single device Signed-off-by: Thomas Jaeger <ThJaeger@gmail.com> squashed in a man page update for --short and --long. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-rw-r--r--man/xinput.man14
-rw-r--r--src/list.c89
-rw-r--r--src/xinput.c2
3 files changed, 55 insertions, 50 deletions
diff --git a/man/xinput.man b/man/xinput.man
index 518e1a0..eba85fd 100644
--- a/man/xinput.man
+++ b/man/xinput.man
@@ -6,7 +6,9 @@ xinput - utility to configure and test XInput devices
.SH SYNOPSIS
.B xinput
-[version] [list [\fIdevice_name\fP]] [set-pointer \fIdevice_name\fP]
+[version]
+[list [--short || --long] [\fIdevice_name\fP]]
+[set-pointer \fIdevice_name\fP]
[get-feedbacks \fIdevice_name\fP]
[set-mode \fIdevice_name\fP \fIABSOLUTE|RELATIVE\fP]
[set-ptr-feedback \fIdevice_name\fP \fIthreshold\fP \fInum\fP \fIdenom\fP]
@@ -22,10 +24,12 @@ test if the XInput extension is available and return the version number
of the program.
.PP
.TP 8
-.B xinput list [\fIdevice_name\fP]
-If no argument is given list all the input devices showing all their
-features. If an argument is given, show all the feature of \fIdevice_name\fP.
-Uses XListInputDevices(3).
+.B xinput list [--short || --long] [\fIdevice_name\fP]
+If no argument is given list all the input devices. If an argument is given,
+show all the features of \fIdevice_name\fP. Uses XListInputDevices(3).
+If --long is provided, the output includes detailed information about the
+capabilities of each devices. Otherwise, or if --short is provided, only the
+device names and some minimal information is listed.
.PP
.TP 8
.B xinput get-feedbacks \fIdevice_name\fP
diff --git a/src/list.c b/src/list.c
index 0abde7a..ecf1f4b 100644
--- a/src/list.c
+++ b/src/list.c
@@ -104,42 +104,15 @@ print_info(Display* dpy, XDeviceInfo *info, Bool shortformat)
}
static int list_xi1(Display *display,
- int argc,
- char *argv[],
- char *name,
- char *desc)
+ int shortformat)
{
XDeviceInfo *info;
int loop;
- int shortformat = False;
- int daemon = False;
+ int num_devices;
- shortformat = (argc == 1 && strcmp(argv[0], "--short") == 0);
- daemon = (argc == 1 && strcmp(argv[0], "--loop") == 0);
-
- if (argc == 0 || shortformat || daemon) {
- int num_devices;
-
- do {
- info = XListInputDevices(display, &num_devices);
- for(loop=0; loop<num_devices; loop++) {
- print_info(display, info+loop, shortformat);
- }
- } while(daemon);
- } else {
- int ret = EXIT_SUCCESS;
-
- for(loop=0; loop<argc; loop++) {
- info = find_device_info(display, argv[loop], False);
-
- if (!info) {
- fprintf(stderr, "unable to find device %s\n", argv[loop]);
- ret = EXIT_FAILURE;
- } else {
- print_info(display, info, shortformat);
- }
- }
- return ret;
+ info = XListInputDevices(display, &num_devices);
+ for(loop=0; loop<num_devices; loop++) {
+ print_info(display, info+loop, shortformat);
}
return EXIT_SUCCESS;
}
@@ -240,21 +213,16 @@ print_info_xi2(Display* display, XIDeviceInfo *dev, Bool shortformat)
}
-int
-list_xi2(Display *display,
- int argc,
- char *argv[],
- char *name,
- char *desc)
+static int
+list_xi2(Display *display,
+ int shortformat)
{
int major = XI_2_Major,
minor = XI_2_Minor;
int ndevices;
- int i, j, shortformat;
+ int i, j;
XIDeviceInfo *info, *dev;
- shortformat = (argc == 1 && strcmp(argv[0], "--short") == 0);
-
if (XIQueryVersion(display, &major, &minor) != Success ||
(major * 1000 + minor) < (XI_2_Major * 1000 + XI_2_Minor))
{
@@ -312,11 +280,44 @@ list(Display *display,
char *name,
char *desc)
{
+ int shortformat = (argc >= 1 && strcmp(argv[0], "--short") == 0);
+ int longformat = (argc >= 1 && strcmp(argv[0], "--long") == 0);
+ int arg_dev = shortformat || longformat;
+
+ if (argc > arg_dev)
+ {
#ifdef HAVE_XI2
- if (xinput_version(display) == XI_2_Major)
- return list_xi2(display, argc, argv, name, desc);
+ if (xinput_version(display) == XI_2_Major)
+ {
+ XIDeviceInfo *info = xi2_find_device_info(display, argv[arg_dev]);
+
+ if (!info) {
+ fprintf(stderr, "unable to find device %s\n", argv[arg_dev]);
+ return EXIT_FAILURE;
+ } else {
+ print_info_xi2(display, info, shortformat);
+ return EXIT_SUCCESS;
+ }
+ } else
#endif
- return list_xi1(display, argc, argv, name, desc);
+ {
+ XDeviceInfo *info = find_device_info(display, argv[arg_dev], False);
+
+ if (!info) {
+ fprintf(stderr, "unable to find device %s\n", argv[arg_dev]);
+ return EXIT_FAILURE;
+ } else {
+ print_info(display, info, shortformat);
+ return EXIT_SUCCESS;
+ }
+ }
+ } else {
+#ifdef HAVE_XI2
+ if (xinput_version(display) == XI_2_Major)
+ return list_xi2(display, !longformat);
+#endif
+ return list_xi1(display, !longformat);
+ }
}
/* end of list.c */
diff --git a/src/xinput.c b/src/xinput.c
index 1a1e7ce..3c8b23c 100644
--- a/src/xinput.c
+++ b/src/xinput.c
@@ -68,7 +68,7 @@ static entry drivers[] =
set_mode
},
{"list",
- "[--loop || --short || <device name>...]",
+ "[--short || --long] [<device name>...]",
list
},
{"query-state",