This changes the user interface. Instead of
xsetwacom set Button1 ...
it's now
xsetwacom set Button 1 ...
(note the space)
Other than that, functionality stays the same.
Signed-off-by: Peter Hutterer <[email protected]>
---
man/xsetwacom.man | 9 ++
tools/xsetwacom.c | 250 +++++-----------------------------------------------
2 files changed, 33 insertions(+), 226 deletions(-)
diff --git a/man/xsetwacom.man b/man/xsetwacom.man
index 1194b58..c7e41e5 100644
--- a/man/xsetwacom.man
+++ b/man/xsetwacom.man
@@ -92,6 +92,15 @@ device's native orientation, regardless of the actual
rotation currently
applied. Input outside of these coordinates will be clipped
to the edges of the area defined.
.TP
+\fBButton\fR button-number [mapping]
+Get or set the specified button. The mapping may be a button number to map
+the physical button to. e.g. a mapping of button 1 to 3 means
+a button 1 press will be interpreted as right click. Alternatively, a
+mapping in the form of "key +a +shift b -shift -a" converts the button into a
series
+of keystrokes, in this example "press a, press shift, press and release b,
+release shift, release a". Such key mappings need to be reapplied whenever
+the keyboard layout changes.
+.TP
\fBMapToOutput\fR output
Map the tablet's input area to the given output (e.g. "VGA1"). The output
must specify one of those available through the XRandR extension. A list of
diff --git a/tools/xsetwacom.c b/tools/xsetwacom.c
index be25b13..1ebe76d 100644
--- a/tools/xsetwacom.c
+++ b/tools/xsetwacom.c
@@ -118,194 +118,8 @@ static param_t parameters[] =
.prop_extra = 3
},
{
- .name = "Button1",
- .desc = "X11 event to which button 1 should be mapped. ",
- .set_func = map_button,
- .get_func = get_button,
- },
- {
- .name = "Button2",
- .desc = "X11 event to which button 2 should be mapped. ",
- .set_func = map_button,
- .get_func = get_button,
- },
- {
- .name = "Button3",
- .desc = "X11 event to which button 3 should be mapped. ",
- .set_func = map_button,
- .get_func = get_button,
- },
- {
- .name = "Button4",
- .desc = "X11 event to which button 4 should be mapped. ",
- .set_func = map_button,
- .get_func = get_button,
- },
- {
- .name = "Button5",
- .desc = "X11 event to which button 5 should be mapped. ",
- .set_func = map_button,
- .get_func = get_button,
- },
- {
- .name = "Button6",
- .desc = "X11 event to which button 6 should be mapped. ",
- .set_func = map_button,
- .get_func = get_button,
- },
- {
- .name = "Button7",
- .desc = "X11 event to which button 7 should be mapped. ",
- .set_func = map_button,
- .get_func = get_button,
- },
- {
- .name = "Button8",
- .desc = "X11 event to which button 8 should be mapped. ",
- .set_func = map_button,
- .get_func = get_button,
- },
- {
- .name = "Button9",
- .desc = "X11 event to which button 9 should be mapped. ",
- .set_func = map_button,
- .get_func = get_button,
- },
- {
- .name = "Button10",
- .desc = "X11 event to which button 10 should be mapped. ",
- .set_func = map_button,
- .get_func = get_button,
- },
- {
- .name = "Button11",
- .desc = "X11 event to which button 11 should be mapped. ",
- .set_func = map_button,
- .get_func = get_button,
- },
- {
- .name = "Button12",
- .desc = "X11 event to which button 12 should be mapped. ",
- .set_func = map_button,
- .get_func = get_button,
- },
- {
- .name = "Button13",
- .desc = "X11 event to which button 13 should be mapped. ",
- .set_func = map_button,
- .get_func = get_button,
- },
- {
- .name = "Button14",
- .desc = "X11 event to which button 14 should be mapped. ",
- .set_func = map_button,
- .get_func = get_button,
- },
- {
- .name = "Button15",
- .desc = "X11 event to which button 15 should be mapped. ",
- .set_func = map_button,
- .get_func = get_button,
- },
- {
- .name = "Button16",
- .desc = "X11 event to which button 16 should be mapped. ",
- .set_func = map_button,
- .get_func = get_button,
- },
- {
- .name = "Button17",
- .desc = "X11 event to which button 17 should be mapped. ",
- .set_func = map_button,
- .get_func = get_button,
- },
- {
- .name = "Button18",
- .desc = "X11 event to which button 18 should be mapped. ",
- .set_func = map_button,
- .get_func = get_button,
- },
- {
- .name = "Button19",
- .desc = "X11 event to which button 19 should be mapped. ",
- .set_func = map_button,
- .get_func = get_button,
- },
- {
- .name = "Button20",
- .desc = "X11 event to which button 20 should be mapped. ",
- .set_func = map_button,
- .get_func = get_button,
- },
- {
- .name = "Button21",
- .desc = "X11 event to which button 21 should be mapped. ",
- .set_func = map_button,
- .get_func = get_button,
- },
- {
- .name = "Button22",
- .desc = "X11 event to which button 22 should be mapped. ",
- .set_func = map_button,
- .get_func = get_button,
- },
- {
- .name = "Button23",
- .desc = "X11 event to which button 23 should be mapped. ",
- .set_func = map_button,
- .get_func = get_button,
- },
- {
- .name = "Button24",
- .desc = "X11 event to which button 24 should be mapped. ",
- .set_func = map_button,
- .get_func = get_button,
- },
- {
- .name = "Button25",
- .desc = "X11 event to which button 25 should be mapped. ",
- .set_func = map_button,
- .get_func = get_button,
- },
- {
- .name = "Button26",
- .desc = "X11 event to which button 26 should be mapped. ",
- .set_func = map_button,
- .get_func = get_button,
- },
- {
- .name = "Button27",
- .desc = "X11 event to which button 27 should be mapped. ",
- .set_func = map_button,
- .get_func = get_button,
- },
- {
- .name = "Button28",
- .desc = "X11 event to which button 28 should be mapped. ",
- .set_func = map_button,
- .get_func = get_button,
- },
- {
- .name = "Button29",
- .desc = "X11 event to which button 29 should be mapped. ",
- .set_func = map_button,
- .get_func = get_button,
- },
- {
- .name = "Button30",
- .desc = "X11 event to which button 30 should be mapped. ",
- .set_func = map_button,
- .get_func = get_button,
- },
- {
- .name = "Button31",
- .desc = "X11 event to which button 31 should be mapped. ",
- .set_func = map_button,
- .get_func = get_button,
- },
- {
- .name = "Button32",
- .desc = "X11 event to which button 32 should be mapped. ",
+ .name = "Button",
+ .desc = "X11 event to which the given button should be mapped.
",
.set_func = map_button,
.get_func = get_button,
},
@@ -1187,14 +1001,6 @@ static char** strjoinsplit(int argc, char **argv, int
*nwords)
return words;
}
-static int get_button_number_from_string(const char* string)
-{
- int slen = strlen("Button");
- if (slen >= strlen(string) || strncasecmp(string, "Button", slen))
- return -1;
- return atoi(&string[strlen("Button")]);
-}
-
static const char *wheel_act_prop[] = {
"Wacom Rel Wheel Up Action",
"Wacom Rel Wheel Down Action",
@@ -1371,53 +1177,44 @@ static void map_wheels(Display *dpy, XDevice *dev,
param_t* param, int argc, cha
}
/* Handles complex button mappings through button actions. */
-static void special_map_buttons(Display *dpy, XDevice *dev, param_t* param,
int argc, char **argv)
+static void special_map_buttons(Display *dpy, XDevice *dev, param_t* param,
+ int button, int argc, char **argv)
{
Atom btnact_prop;
- int slen = strlen("Button");
- int btn_no;
TRACE("Special %s map for device %ld.\n", param->name, dev->device_id);
- if (slen >= strlen(param->name) || strncmp(param->name, "Button", slen))
- return;
-
btnact_prop = XInternAtom(dpy, "Wacom Button Actions", True);
if (!btnact_prop)
return;
- btn_no = get_button_number_from_string(param->name);
- btn_no--; /* property is zero-indexed, button numbers are 1-indexed */
+ button--; /* property is zero-indexed, button numbers are 1-indexed */
- special_map_property(dpy, dev, btnact_prop, btn_no, argc, argv);
+ special_map_property(dpy, dev, btnact_prop, button, argc, argv);
}
-static void map_button_simple(Display *dpy, XDevice *dev, param_t* param, int
button)
+static void map_button_simple(Display *dpy, XDevice *dev, param_t* param,
+ int button, int mapping)
{
int nmap = 256;
unsigned char map[nmap];
- int btn_no = 0;
-
- btn_no = get_button_number_from_string(param->name);
- if (btn_no == -1)
- return;
nmap = XGetDeviceButtonMapping(dpy, dev, map, nmap);
- if (btn_no > nmap)
+ if (button > nmap)
{
fprintf(stderr, "Button number does not exist on device.\n");
return;
}
- TRACE("Mapping button %d to %d.\n", btn_no, button);
+ TRACE("Mapping button %d to %d.\n", button, mapping);
- map[btn_no - 1] = button;
+ map[button - 1] = mapping;
XSetDeviceButtonMapping(dpy, dev, map, nmap);
XFlush(dpy);
/* If there's a property set, unset it */
- special_map_buttons(dpy, dev, param, 0, NULL);
+ special_map_buttons(dpy, dev, param, button, 0, NULL);
}
/*
Supports two variations, simple mapping and special mapping:
@@ -1428,18 +1225,20 @@ static void map_button_simple(Display *dpy, XDevice
*dev, param_t* param, int bu
*/
static void map_button(Display *dpy, XDevice *dev, param_t* param, int argc,
char **argv)
{
- int button;
+ int button, /* button to be mapped */
+ mapping;
- if (argc <= 0)
+ if (argc <= 1 || (sscanf(argv[0], "%d", &button) != 1))
return;
TRACE("Mapping %s for device %ld.\n", param->name, dev->device_id);
+
/* --set "device" Button1 3 */
- if (sscanf(argv[0], "%d", &button) == 1)
- map_button_simple(dpy, dev, param, button);
+ if (sscanf(argv[1], "%d", &mapping) == 1)
+ map_button_simple(dpy, dev, param, button, mapping);
else
- special_map_buttons(dpy, dev, param, argc, argv);
+ special_map_buttons(dpy, dev, param, button, argc - 1,
&argv[1]);
}
static void set_xydefault(Display *dpy, XDevice *dev, param_t* param, int
argc, char **argv)
@@ -1871,27 +1670,26 @@ static void get_button(Display *dpy, XDevice *dev,
param_t *param, int argc,
{
int nmap = 256;
unsigned char map[nmap];
- int btn_no = 0;
+ int button = 0;
- btn_no = get_button_number_from_string(param->name);
- if (btn_no == -1)
+ if (argc < 1 || (sscanf(argv[0], "%d", &button) != 1))
return;
TRACE("Getting button map for device %ld.\n", dev->device_id);
/* if there's a special map, print it and return */
- if (get_special_button_map(dpy, dev, param, btn_no))
+ if (get_special_button_map(dpy, dev, param, button))
return;
nmap = XGetDeviceButtonMapping(dpy, dev, map, nmap);
- if (btn_no > nmap)
+ if (button > nmap)
{
fprintf(stderr, "Button number does not exist on device.\n");
return;
}
- print_value(param, "%d", map[btn_no - 1]);
+ print_value(param, "%d", map[button - 1]);
XSetDeviceButtonMapping(dpy, dev, map, nmap);
XFlush(dpy);
--
1.7.3.5
------------------------------------------------------------------------------
Special Offer-- Download ArcSight Logger for FREE (a $49 USD value)!
Finally, a world-class log management solution at an even better price-free!
Download using promo code Free_Logger_4_Dev2Dev. Offer expires
February 28th, so secure your free ArcSight Logger TODAY!
http://p.sf.net/sfu/arcsight-sfd2d
_______________________________________________
Linuxwacom-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel