aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZephaniah E. Hull <warp@agamemnon.b5>2007-06-06 05:00:29 -0400
committerZephaniah E. Hull <warp@agamemnon.b5>2007-06-06 05:00:29 -0400
commit6b97bf7a4eaa34ebde4ac7250f660da5bab8164d (patch)
tree51d341c6dcb02c1f8b14cdc9fb93f35285fad980
parentMove MapButtons_t closer to where it's used. (diff)
downloadxf86-input-evdev-6b97bf7a4eaa34ebde4ac7250f660da5bab8164d.tar.gz
xf86-input-evdev-6b97bf7a4eaa34ebde4ac7250f660da5bab8164d.tar.bz2
xf86-input-evdev-6b97bf7a4eaa34ebde4ac7250f660da5bab8164d.zip
Handle default remapping around existing button targets better.
-rw-r--r--src/evdev_btn.c30
1 files changed, 19 insertions, 11 deletions
diff --git a/src/evdev_btn.c b/src/evdev_btn.c
index 90f33b4..c03f879 100644
--- a/src/evdev_btn.c
+++ b/src/evdev_btn.c
@@ -362,7 +362,7 @@ EvdevBtnNew1(InputInfoRec *pInfo)
evdevStateRec *state = &pEvdev->state;
evdevBtnRec *btn = state->btn;
char option[128], value[128];
- int i, b, j;
+ int i, b, j, target;
if (!btn)
return !Success;
@@ -375,24 +375,32 @@ EvdevBtnNew1(InputInfoRec *pInfo)
btn->real_buttons++;
snprintf(option, sizeof(option), "Button%sMapTo", button_names[i]);
+
if (b >= BTN_DIGI && b < BTN_WHEEL)
- snprintf (value, sizeof (value), "null");
+ target = -1;
else if (b == BTN_RIGHT)
- snprintf (value, sizeof (value), "Button 3");
+ target = 3;
else if (b == BTN_MIDDLE)
- snprintf (value, sizeof (value), "Button 2");
+ target = 2;
else if (b >= BTN_MOUSE && b < BTN_JOYSTICK)
- snprintf (value, sizeof (value), "Button %d", 1 + i - (BTN_MOUSE - BTN_MISC));
+ target = 1 + i - (BTN_MOUSE - BTN_MISC);
else if (b >= BTN_MISC && b < BTN_MOUSE)
- snprintf (value, sizeof (value), "Button %d", 1 + i + (BTN_MOUSE - BTN_MISC));
- else if (btn->b_flags[i] & EV_BTN_B_PRESENT) {
- for (j = i; j < BTN_MAX; j++)
+ target = 1 + i + (BTN_MOUSE - BTN_MISC);
+ else
+ target = 1 + i;
+
+ if (btn->b_flags[target] & EV_BTN_B_PRESENT) {
+ for (j = target; j < BTN_MAX; j++)
if (!(btn->b_flags[j] & EV_BTN_B_PRESENT)) {
- snprintf (value, sizeof (value), "Button %d", j + 1);
+ target = j;
break;
}
- } else
- snprintf (value, sizeof (value), "Button %d", i + 1);
+ }
+
+ if (target > 0)
+ snprintf (value, sizeof (value), "Button %d", target);
+ else
+ snprintf (value, sizeof (value), "null");
EvdevParseMapOption (pInfo, option, value, &btn->b_map_data[i], &btn->b_map[i]);
}