diff options
author | Sascha Hlusiak <saschahlusiak@arcor.de> | 2008-09-30 18:13:19 +0200 |
---|---|---|
committer | Sascha Hlusiak <saschahlusiak@arcor.de> | 2008-09-30 18:13:19 +0200 |
commit | ba8ea1799cf8911c22b0d90a865cb6e215b23e1c (patch) | |
tree | 97c4378f9ed94e2ed1c698cc245599aae1d57c44 | |
parent | 5c72d146865982dfa727d469d789ceaa6ac33b8d (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.c | 29 |
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, |