This has been bugging me for a while: Nobody wants to see the details for all the devices when querying the device list.
Tom
>From 01850dbbaae5da7c625a91781275e26edd697e5b Mon Sep 17 00:00:00 2001 From: Thomas Jaeger <[email protected]> Date: Wed, 7 Oct 2009 13:05:15 -0400 Subject: [PATCH] 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 <[email protected]> --- man/xinput.man | 5 +-- src/list.c | 90 ++++++++++++++++++++++++++++--------------------------- src/xinput.c | 2 +- 3 files changed, 49 insertions(+), 48 deletions(-) diff --git a/man/xinput.man b/man/xinput.man index 518e1a0..75ca03c 100644 --- a/man/xinput.man +++ b/man/xinput.man @@ -23,9 +23,8 @@ 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). +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). .PP .TP 8 .B xinput get-feedbacks \fIdevice_name\fP diff --git a/src/list.c b/src/list.c index 0abde7a..9cfb8ea 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,45 @@ 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) + { + XDeviceInfo *info; #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", -- 1.6.3.3
_______________________________________________ xorg-devel mailing list [email protected] http://lists.x.org/mailman/listinfo/xorg-devel
