diff options
author | Nikolai Kondrashov <spbnick@gmail.com> | 2010-09-02 18:09:13 +0400 |
---|---|---|
committer | Peter Hutterer <peter.hutterer@who-t.net> | 2010-09-07 10:40:36 +1000 |
commit | 0367e3871f02993b4ce04873d6e40df16fb0a202 (patch) | |
tree | fe6cd010ac062f423c001b7b674597bafa4b9875 | |
parent | 617a09e298768d0a1d33cb6b367410455489e8b8 (diff) |
Clean up button code to number mapping
Now BTN_MOUSE, BTN_MISC and BTN_DIGI button ranges are all mapped to the
same lower numbers including first three, corresponding to the LMR mouse
buttons. Like this:
1 BTN_LEFT BTN_0 BTN_TOUCH
2 BTN_MIDDLE BTN_1 BTN_STYLUS
3 BTN_RIGHT BTN_2 BTN_STYLUS2
8 BTN_SIDE BTN_3
9 BTN_EXTRA BTN_4
10 BTN_FORWARD BTN_5
11 BTN_BACK BTN_6
12 BTN_TASK BTN_7
13 BTN_8
14 BTN_9
This streamlines the button mapping under the assumption that these ranges
don't generally appear in a single device simultaneously. If they do appear,
they will simply report overlapping button numbers.
Signed-off-by: Nikolai Kondrashov <spbnick@gmail.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-rw-r--r-- | src/evdev.c | 99 |
1 files changed, 26 insertions, 73 deletions
diff --git a/src/evdev.c b/src/evdev.c index 910bf5e..f779138 100644 --- a/src/evdev.c +++ b/src/evdev.c @@ -2205,80 +2205,33 @@ _X_EXPORT XF86ModuleData evdevModuleData = unsigned int EvdevUtilButtonEventToButtonNumber(EvdevPtr pEvdev, int code) { - unsigned int button = 0; - - switch(code) { - case BTN_LEFT: - button = 1; - break; - - case BTN_RIGHT: - button = 3; - break; - - case BTN_MIDDLE: - button = 2; - break; - - /* Treat BTN_[0-2] as LMR buttons on devices that do not advertise - BTN_LEFT, BTN_MIDDLE, BTN_RIGHT. - Otherwise, treat BTN_[0+n] as button 5+n. - XXX: This causes duplicate mappings for BTN_0 + n and BTN_SIDE + n - */ - case BTN_0: - button = (TestBit(BTN_LEFT, pEvdev->key_bitmask)) ? 8 : 1; - break; - case BTN_1: - button = (TestBit(BTN_MIDDLE, pEvdev->key_bitmask)) ? 9 : 2; - break; - case BTN_2: - button = (TestBit(BTN_RIGHT, pEvdev->key_bitmask)) ? 10 : 3; - break; - - /* FIXME: BTN_3.. and BTN_SIDE.. have the same button mapping */ - case BTN_3: - case BTN_4: - case BTN_5: - case BTN_6: - case BTN_7: - case BTN_8: - case BTN_9: - button = (code - BTN_0 + 5); - break; - - case BTN_SIDE: - case BTN_EXTRA: - case BTN_FORWARD: - case BTN_BACK: - case BTN_TASK: - button = (code - BTN_LEFT + 5); - break; - - case BTN_TOUCH: - button = 1; - break; - case BTN_STYLUS: - button = 2; - break; - case BTN_STYLUS2: - button = 3; - break; - - default: - if ((code > BTN_TASK) && (code < KEY_OK)) { - if (code < BTN_JOYSTICK) { - if (code < BTN_MOUSE) - button = (code - BTN_0 + 5); - else - button = (code - BTN_LEFT + 5); - } - } + switch (code) + { + /* Mouse buttons */ + case BTN_LEFT: + return 1; + case BTN_MIDDLE: + return 2; + case BTN_RIGHT: + return 3; + case BTN_SIDE ... BTN_TASK: + return 8 + code - BTN_SIDE; + + /* Generic buttons */ + case BTN_0 ... BTN_2: + return 1 + code - BTN_0; + case BTN_3 ... BTN_9: + return 8 + code - BTN_3; + + /* Tablet stylus buttons */ + case BTN_TOUCH ... BTN_STYLUS2: + return 1 + code - BTN_TOUCH; + + /* The rest */ + default: + /* Ignore */ + return 0; } - - if (button > EVDEV_MAXBUTTONS) - return 0; - - return button; } #ifdef HAVE_PROPERTIES |