[this got stuck in my drafts folder, sorry]

On Thu, Apr 14, 2016 at 03:33:53PM -0700, Jason Gerecke wrote:
> On 04/10/2016 09:15 PM, Peter Hutterer wrote:
> > Signed-off-by: Peter Hutterer <[email protected]>
> > ---
> > Adjustments for the new API in 2/5
> > +static void
> > +pad_init_buttons(struct pad_dispatch *pad,
> > +            struct evdev_device *device)
> > +{
> > +   unsigned int code;
> > +   size_t i;
> > +   int map = 0;
> > +
> > +   for (i = 0; i < ARRAY_LENGTH(pad->button_map); i++)
> > +           pad->button_map[i] = -1;
> > +
> > +   for (code = BTN_0; code < BTN_MOUSE; code++) {
> > +           if (libevdev_has_event_code(device->evdev, EV_KEY, code))
> > +                   pad->button_map[code] = map++;
> > +   }
> > +
> > +   for (code = BTN_A; code < BTN_DIGI; code++) {
> > +           if (libevdev_has_event_code(device->evdev, EV_KEY, code))
> > +                   pad->button_map[code] = map++;
> > +   }
> > +
> > +   pad->nbuttons = map;
> > +}
> > +
> 
> For the sake of the compatibility with future devices, I'd recommend
> more strictly following the button ranges used by the kernel:
> http://lxr.free-electrons.com/source/drivers/hid/wacom_wac.c#L2712
> 
> Also, note that you're missing coverage of BTN_BASE and BTN_BASE2.

good point, I squashed this diff in:

diff --git a/src/evdev-tablet-pad.c b/src/evdev-tablet-pad.c
index 8c64830..ad6ead8 100644
--- a/src/evdev-tablet-pad.c
+++ b/src/evdev-tablet-pad.c
@@ -459,12 +459,18 @@ pad_init_buttons(struct pad_dispatch *pad,
        for (i = 0; i < ARRAY_LENGTH(pad->button_map); i++)
                pad->button_map[i] = -1;
 
-       for (code = BTN_0; code < BTN_MOUSE; code++) {
+       /* we match wacom_report_numbered_buttons() from the kernel */
+       for (code = BTN_0; code < BTN_0 + 10; code++) {
                if (libevdev_has_event_code(device->evdev, EV_KEY, code))
                        pad->button_map[code] = map++;
        }
 
-       for (code = BTN_A; code < BTN_DIGI; code++) {
+       for (code = BTN_A; code < BTN_A + 6; code++) {
+               if (libevdev_has_event_code(device->evdev, EV_KEY, code))
+                       pad->button_map[code] = map++;
+       }
+
+       for (code = BTN_BASE; code < BTN_BASE + 2; code++) {
                if (libevdev_has_event_code(device->evdev, EV_KEY, code))
                        pad->button_map[code] = map++;
        }


Cheers,
   Peter
_______________________________________________
wayland-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to