Hi,

On 13-04-15 02:23, Peter Hutterer wrote:
Follow-up to e2f61b8fb74a06b86abd02caa4cdfde5edc53a32.

Scroll events are sent through the pointer interface, so we must set the
capability. Otherwise a caller may not have the required bits set up and is a
bit surprised by events coming out of an interface the device doesn't actually
have (xf86-input-libinput crashes when this happens).

Reported-by: Hans de Goede <[email protected]>
Signed-off-by: Peter Hutterer <[email protected]>

Thanks, I've tested, reviewed and pushed the entire set.

I've also tested the 3th patch with the udev rule removed
in combination with my udev patches for wheel-only devices
and I can confirm that that works too.

Regards,

Hans



---
  src/evdev.c   |  4 +++-
  test/device.c | 13 +++++++++++++
  2 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/src/evdev.c b/src/evdev.c
index 243cd22..bcc2958 100644
--- a/src/evdev.c
+++ b/src/evdev.c
@@ -1700,8 +1700,10 @@ evdev_configure_device(struct evdev_device *device)

                /* want natural-scroll config option */
                if (libevdev_has_event_code(evdev, EV_REL, REL_WHEEL) ||
-                   libevdev_has_event_code(evdev, EV_REL, REL_HWHEEL))
+                   libevdev_has_event_code(evdev, EV_REL, REL_HWHEEL)) {
                        device->scroll.natural_scrolling_enabled = true;
+                       device->seat_caps |= EVDEV_DEVICE_POINTER;
+               }
        }

        if (udev_tags & EVDEV_UDEV_TAG_TOUCHSCREEN) {
diff --git a/test/device.c b/test/device.c
index cf9885a..ed3c2e0 100644
--- a/test/device.c
+++ b/test/device.c
@@ -979,6 +979,17 @@ START_TEST(abs_mt_device_missing_res)

  }
  END_TEST
+
+START_TEST(device_wheel_only)
+{
+       struct litest_device *dev = litest_current_device();
+       struct libinput_device *device = dev->libinput_device;
+
+       ck_assert(libinput_device_has_capability(device,
+                                                LIBINPUT_DEVICE_CAP_POINTER));
+}
+END_TEST
+
  int main (int argc, char **argv)
  {
        litest_add("device:sendevents", device_sendevents_config, LITEST_ANY, 
LITEST_TOUCHPAD);
@@ -1016,5 +1027,7 @@ int main (int argc, char **argv)
        litest_add_no_device("device:invalid devices", abs_device_missing_res);
        litest_add_no_device("device:invalid devices", 
abs_mt_device_missing_res);

+       litest_add("device:wheel", device_wheel_only, LITEST_WHEEL, 
LITEST_RELATIVE|LITEST_ABSOLUTE);
+
        return litest_run(argc, argv);
  }

_______________________________________________
wayland-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to