From b8519930e415043545e87ea660f6f0b3109537bf Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Wed, 20 May 2009 11:57:01 +1000 Subject: Ensure enough buttons are advertised to pass the button mapping. Some buttons are mapped to higher button numbers. For example, BTN_0 is posted as button 8 if BTN_LEFT is present. On top of that, the driver-specific button mapping may map the button to something else again. We need to take these mappings into account when counting the number of buttons on the device. Example: A device with BTN_LEFT and BTN_0 and a mapping from 1 -> 7 and 8 -> 2. BTN_LEFT is mapped to 1. 1 is mapped to 7. num_buttons is 7. BTN_0 is mapped to 8. 8 is mapped to 2. num_buttons remains 7. Signed-off-by: Peter Hutterer (cherry picked from commit b358f1eb3a4ef8fdee099114d6c70d6ea06eba95) --- src/evdev.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/evdev.c b/src/evdev.c index 80ba276..a9e1d27 100644 --- a/src/evdev.c +++ b/src/evdev.c @@ -1466,8 +1466,14 @@ EvdevProbe(InputInfoPtr pInfo) /* count all buttons */ for (i = BTN_MISC; i < BTN_JOYSTICK; i++) { + int mapping = 0; if (TestBit(i, pEvdev->key_bitmask)) - num_buttons++; + { + mapping = + pEvdev->btnmap[EvdevUtilButtonEventToButtonNumber(pEvdev, i)]; + if (mapping > num_buttons) + num_buttons = mapping; + } } if (num_buttons) -- cgit v1.2.3