Try to guess the default scroll buttons a bit better. Right now we default to
scroll button 0 (disabled) whenever a device doesn't have a middle button but
we might as well cast a wider net here as setting a scroll button only has a
direct effect when button scrolling is enabled.

Use the first extra button we find or fall back onto the right button if we
don't have any extra buttons.

Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net>
---
 src/evdev.c         | 9 +++++++++
 test/test-pointer.c | 4 ++++
 2 files changed, 13 insertions(+)

diff --git a/src/evdev.c b/src/evdev.c
index 2a57b25..e6ae1a3 100644
--- a/src/evdev.c
+++ b/src/evdev.c
@@ -1536,10 +1536,19 @@ static uint32_t
 evdev_scroll_get_default_button(struct libinput_device *device)
 {
        struct evdev_device *evdev = evdev_device(device);
+       unsigned int code;
 
        if (libevdev_has_event_code(evdev->evdev, EV_KEY, BTN_MIDDLE))
                return BTN_MIDDLE;
 
+       for (code = BTN_SIDE; code <= BTN_TASK; code++) {
+               if (libevdev_has_event_code(evdev->evdev, EV_KEY, code))
+                       return code;
+       }
+
+       if (libevdev_has_event_code(evdev->evdev, EV_KEY, BTN_RIGHT))
+               return BTN_RIGHT;
+
        return 0;
 }
 
diff --git a/test/test-pointer.c b/test/test-pointer.c
index 06c45b2..e09f8f8 100644
--- a/test/test-pointer.c
+++ b/test/test-pointer.c
@@ -1176,11 +1176,15 @@ START_TEST(pointer_scroll_defaults_logitech_marble)
        struct litest_device *dev = litest_current_device();
        struct libinput_device *device = dev->libinput_device;
        enum libinput_config_scroll_method method;
+       uint32_t button;
 
        method = libinput_device_config_scroll_get_method(device);
        ck_assert_int_eq(method, LIBINPUT_CONFIG_SCROLL_NO_SCROLL);
        method = libinput_device_config_scroll_get_default_method(device);
        ck_assert_int_eq(method, LIBINPUT_CONFIG_SCROLL_NO_SCROLL);
+
+       button = libinput_device_config_scroll_get_button(device);
+       ck_assert_int_eq(button, BTN_SIDE);
 }
 END_TEST
 
-- 
2.9.3

_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to