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 <peter.hutterer@who-t.net>
(cherry picked from commit b358f1eb3a)
This commit is contained in:
Peter Hutterer
2009-05-20 11:57:01 +10:00
parent 6d43a45b99
commit b8519930e4

View File

@@ -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)