From: Sascha Hlusiak Date: Tue, 30 Sep 2008 13:27:56 +0000 (+0200) Subject: Add --get-button-map option. X-Git-Url: https://diplodocus.org/git/xorg-xinput/commitdiff_plain/50e5235ecd7142892567c7d3ea6460907538b421?ds=inline;hp=--cc Add --get-button-map option. --- 50e5235ecd7142892567c7d3ea6460907538b421 diff --git a/src/buttonmap.c b/src/buttonmap.c index 06f271b..c3dc406 100644 --- a/src/buttonmap.c +++ b/src/buttonmap.c @@ -23,6 +23,72 @@ #include "xinput.h" + +int +get_button_map(Display *display, + int argc, + char *argv[], + char *name, + char *desc) +{ + XDeviceInfo *info; + XDevice *device; + XAnyClassPtr ip; + int i; + int nbuttons; + + if (argc != 1) { + fprintf(stderr, "usage: xinput %s %s\n", name, desc); + return EXIT_FAILURE; + } + + info = find_device_info(display, argv[0], False); + + if (!info) { + fprintf(stderr, "unable to find device %s\n", argv[0]); + return EXIT_FAILURE; + } + + ip = (XAnyClassPtr) info->inputclassinfo; + nbuttons = 0; + + /* try to find the number of buttons */ + for(i=0; inum_classes; i++) { + if (ip->class == ButtonClass) { + nbuttons = ((XButtonInfoPtr)ip)->num_buttons; + break; + } + ip = (XAnyClassPtr) ((char *) ip + ip->length); + } + if (nbuttons == 0) { + fprintf(stderr, "device has no buttons\n"); + return EXIT_FAILURE; + } + + device = XOpenDevice(display, info->id); + if (device) { + int idx; + unsigned char *map; + int min; + + map = (unsigned char *) malloc(sizeof(unsigned char) * nbuttons); + + XGetDeviceButtonMapping(display, device, map, nbuttons); + + for(idx=1; idx < nbuttons + 1; idx++) { + printf("%d ", map[idx - 1]); + } + printf("\n"); + XCloseDevice(display, device); + return EXIT_SUCCESS; + } else { + fprintf(stderr, "Unable to open device\n"); + return EXIT_FAILURE; + } +} + + + int set_button_map(Display *display, int argc, diff --git a/src/xinput.c b/src/xinput.c index b1cd0a3..e174388 100644 --- a/src/xinput.c +++ b/src/xinput.c @@ -53,6 +53,10 @@ static entry drivers[] = " ", set_integer_feedback }, + {"get-button-map", + "", + get_button_map + }, {"set-button-map", " [ [...]]", set_button_map diff --git a/src/xinput.h b/src/xinput.h index d7a5104..532ee9a 100644 --- a/src/xinput.h +++ b/src/xinput.h @@ -68,6 +68,17 @@ set_ptr_feedback( #endif ); +int +get_button_map( +#if NeedFunctionPrototypes + Display* display, + int argc, + char *argv[], + char *prog_name, + char *prog_desc +#endif +); + int set_button_map( #if NeedFunctionPrototypes