summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSascha Hlusiak <saschahlusiak@arcor.de>2008-09-30 18:13:19 +0200
committerSascha Hlusiak <saschahlusiak@arcor.de>2008-09-30 18:13:19 +0200
commitba8ea1799cf8911c22b0d90a865cb6e215b23e1c (patch)
tree97c4378f9ed94e2ed1c698cc245599aae1d57c44
parent5c72d146865982dfa727d469d789ceaa6ac33b8d (diff)
Support for setting Button Number property
does not change the button map, which is assumed to be default. Buttons can still be reordered using xmodmap.
-rw-r--r--src/jstk_properties.c29
1 files changed, 25 insertions, 4 deletions
diff --git a/src/jstk_properties.c b/src/jstk_properties.c
index c81c4ac..8e62ab7 100644
--- a/src/jstk_properties.c
+++ b/src/jstk_properties.c
@@ -200,8 +200,25 @@ jstkSetProperty(DeviceIntPtr pJstk, Atom atom, XIPropertyValuePtr val)
}
}else if (atom == prop_button_buttonnumber)
{
- /* FIXME */
- return BadValue;
+ CARD8 *values;
+ if (val->size != priv->num_buttons || val->format != 8 || val->type != XA_INTEGER)
+ return BadMatch;
+ values = (INT8*)val->data;
+ for (i = 0; i<val->size; i++) {
+ if (values[i] > BUTTONMAP_SIZE) {
+ DBG(1, ErrorF("Button number out of range (0..%d): %d\n",
+ BUTTONMAP_SIZE, values[i]));
+ return BadValue;
+ }
+ }
+ for (i = 0; i<val->size; i++) {
+ priv->button[i].buttonnumber =
+ values[i];
+ DBG(1, ErrorF("Button number of button %d set to %d\n",
+ i,
+ priv->button[i].buttonnumber));
+ }
+ return Success;
}else if (atom == prop_button_amplify)
{
/* FIXME */
@@ -323,8 +340,12 @@ jstkInitProperties(DeviceIntPtr pJstk, JoystickDevPtr priv)
XISetDevicePropertyDeletable(pJstk, prop_button_mapping, FALSE);
/* priv->button[].buttonnumber */
- for (i=0;i<priv->num_buttons;i++)
- button_values8[i] = (INT8)priv->button[i].buttonnumber;
+ for (i=0;i<priv->num_buttons;i++) {
+ int index = priv->button[i].buttonnumber;
+ if (index>=0 && index<=MAXBUTTONS)
+ button_values8[i] = (CARD8)index;
+ else button_values8[i] = 0;
+ }
prop_button_buttonnumber = MakeAtom(JSTK_PROP_BUTTON_BUTTONNUMBER, strlen(JSTK_PROP_BUTTON_BUTTONNUMBER), TRUE);
XIChangeDeviceProperty(pJstk, prop_button_buttonnumber, XA_INTEGER, 8,
PropModeReplace, priv->num_buttons,