Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package libinput for openSUSE:Factory checked in at 2021-10-04 18:38:56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libinput (Old) and /work/SRC/openSUSE:Factory/.libinput.new.2443 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libinput" Mon Oct 4 18:38:56 2021 rev:104 rq:921955 version:1.19.1 Changes: -------- --- /work/SRC/openSUSE:Factory/libinput/libinput.changes 2021-09-20 23:32:03.735092713 +0200 +++ /work/SRC/openSUSE:Factory/.libinput.new.2443/libinput.changes 2021-10-04 18:38:58.177960513 +0200 @@ -1,0 +2,10 @@ +Tue Sep 28 08:28:21 UTC 2021 - Jan Engelhardt <jeng...@inai.de> + +- Update to release 1.19.1 + * New: Detects (and works around) buggy devices that claim to + have a high-resolution scroll wheel but which do not actually + send events. + * New assumption that any non-bluetooth touchpad is internal. + * Jumping cursor warning has been reduced once again. + +------------------------------------------------------------------- Old: ---- libinput-1.19.0.tar.xz libinput-1.19.0.tar.xz.sig New: ---- libinput-1.19.1.tar.xz libinput-1.19.1.tar.xz.sig ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libinput.spec ++++++ --- /var/tmp/diff_new_pack.MtyMKP/_old 2021-10-04 18:38:58.937961748 +0200 +++ /var/tmp/diff_new_pack.MtyMKP/_new 2021-10-04 18:38:58.941961754 +0200 @@ -37,7 +37,7 @@ %define lname libinput10 %define pname libinput Name: libinput%{?xsuffix} -Version: 1.19.0 +Version: 1.19.1 Release: 0 Summary: Input device and event processing library License: MIT ++++++ libinput-1.19.0.tar.xz -> libinput-1.19.1.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.19.0/doc/user/incorrectly-enabled-hires.rst new/libinput-1.19.1/doc/user/incorrectly-enabled-hires.rst --- old/libinput-1.19.0/doc/user/incorrectly-enabled-hires.rst 1970-01-01 01:00:00.000000000 +0100 +++ new/libinput-1.19.1/doc/user/incorrectly-enabled-hires.rst 2021-09-28 03:51:11.888798000 +0200 @@ -0,0 +1,62 @@ +.. _incorrectly_enabled_hires: + +============================================================================== +Incorrectly enabled high-resolution scroll +============================================================================== + +Some devices might announce support for high-resolution scroll wheel by enabling +``REL_WHEEL_HI_RES`` and/or ``REL_HWHEEL_HI_RES`` but never send a +high-resolution scroll event. + +When the first low-resolution scroll event is received without any previous +high-resolution event, libinput prints a bug warning with the text **"device +supports high-resolution scroll but only low-resolution events have been +received"** and a link to this page. + +.. note:: This warning will be printed only once + +In most cases this is a bug on the device firmware, the kernel driver or in a +software used to create user-space devices through uinput. + +Once the bug is detected, libinput will start emulating high-resolution scroll +events. + +------------------------------------------------------------------------------ +Detecting and fixing the issue +------------------------------------------------------------------------------ + +Events sent by a buggy device can be shown in the +:ref:`libinput record <libinput-record>` output for the device. Notice that +``REL_WHEEL_HI_RES`` and ``REL_HWHEEL_HI_RES`` are set but only ``REL_WHEEL`` +events are sent: :: + + # Supported Events: + # Event type 0 (EV_SYN) + # Event type 1 (EV_KEY) + # Event code 272 (BTN_LEFT) + # Event type 2 (EV_REL) + # Event code 0 (REL_X) + # Event code 1 (REL_Y) + # Event code 6 (REL_HWHEEL) + # Event code 8 (REL_WHEEL) + # Event code 11 (REL_WHEEL_HI_RES) + # Event code 12 (REL_HWHEEL_HI_RES) + [...] + quirks: + events: + - evdev: + - [ 0, 0, 2, 8, 1] # EV_REL / REL_WHEEL 1 + - [ 0, 0, 0, 0, 0] # ------------ SYN_REPORT (0) ---------- +0ms + - evdev: + - [ 0, 15126, 2, 8, 1] # EV_REL / REL_WHEEL 1 + - [ 0, 15126, 0, 0, 0] # ------------ SYN_REPORT (0) ---------- +15ms + - evdev: + - [ 0, 30250, 2, 8, 1] # EV_REL / REL_WHEEL 1 + - [ 0, 30250, 0, 0, 0] # ------------ SYN_REPORT (0) ---------- +15ms + +The issue can be fixed by adding a quirk to unset the ``REL_WHEEL_HI_RES`` and +``REL_HWHEEL_HI_RES`` event codes: :: + + AttrEventCodeDisable=REL_WHEEL_HI_RES;REL_HWHEEL_HI_RES; + +Please see :ref:`device-quirks` for details. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.19.0/doc/user/meson.build new/libinput-1.19.1/doc/user/meson.build --- old/libinput-1.19.0/doc/user/meson.build 2021-09-14 10:30:52.774955300 +0200 +++ new/libinput-1.19.1/doc/user/meson.build 2021-09-28 03:51:11.888798000 +0200 @@ -50,6 +50,7 @@ [ 'faqs.rst', 'faq.html'], [ 'features.rst', 'features.html'], [ 'gestures.rst', 'gestures.html'], + [ 'incorrectly-enabled-hires.rst', 'incorrectly-enabled-hires.html'], [ 'middle-button-emulation.rst', 'middle_button_emulation.html'], [ 'normalization-of-relative-motion.rst', 'motion_normalization.html'], [ 'palm-detection.rst', 'palm_detection.html'], @@ -143,6 +144,7 @@ 'device-quirks.rst', 'faqs.rst', 'gestures.rst', + 'incorrectly-enabled-hires.rst', 'middle-button-emulation.rst', 'normalization-of-relative-motion.rst', 'palm-detection.rst', diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.19.0/doc/user/troubleshooting.rst new/libinput-1.19.1/doc/user/troubleshooting.rst --- old/libinput-1.19.0/doc/user/troubleshooting.rst 2021-09-14 10:30:52.779955400 +0200 +++ new/libinput-1.19.1/doc/user/troubleshooting.rst 2021-09-28 03:51:11.895798000 +0200 @@ -14,3 +14,4 @@ touchpad-pressure-debugging.rst trackpoint-configuration.rst tablet-debugging.rst + incorrectly-enabled-hires.rst diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.19.0/meson.build new/libinput-1.19.1/meson.build --- old/libinput-1.19.0/meson.build 2021-09-14 10:30:52.780955300 +0200 +++ new/libinput-1.19.1/meson.build 2021-09-28 03:51:11.896798000 +0200 @@ -1,5 +1,5 @@ project('libinput', 'c', - version : '1.19.0', + version : '1.19.1', license : 'MIT/Expat', default_options : [ 'c_std=gnu99', 'warning_level=2' ], meson_version : '>= 0.49.0') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.19.0/quirks/50-system-dell.quirks new/libinput-1.19.1/quirks/50-system-dell.quirks --- old/libinput-1.19.0/quirks/50-system-dell.quirks 2021-09-14 10:30:52.781955200 +0200 +++ new/libinput-1.19.1/quirks/50-system-dell.quirks 2021-09-28 03:51:11.897798000 +0200 @@ -14,7 +14,7 @@ [Dell Inspiron 15R N5110 Touchpad] MatchUdevType=touchpad MatchName=*AlpsPS/2 ALPS GlidePoint -MatchDMIModalias=dmi:*svnDellInc.:*pnInspironN5110* +MatchDMIModalias=dmi:*bvrA07*svnDellInc.:*pnInspironN5110* AttrPressureRange=100:95 [Dell Latitude E5510 Touchpad] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.19.0/quirks/50-system-prestigio.quirks new/libinput-1.19.1/quirks/50-system-prestigio.quirks --- old/libinput-1.19.0/quirks/50-system-prestigio.quirks 1970-01-01 01:00:00.000000000 +0100 +++ new/libinput-1.19.1/quirks/50-system-prestigio.quirks 2021-09-28 03:51:11.897798000 +0200 @@ -0,0 +1,7 @@ +# Clickpad that announces BTN_RIGHT +# https://gitlab.freedesktop.org/libinput/libinput/-/issues/674 +[Prestigio Smartbook 141 C2 Touchpad] +MatchName=SYNA3602:00 0911:5288 Touchpad +MatchUdevType=touchpad +MatchDMIModalias=dmi:*svnPrestigio:*pnPSB141C02* +AttrEventCodeDisable=BTN_RIGHT diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.19.0/src/evdev-fallback.c new/libinput-1.19.1/src/evdev-fallback.c --- old/libinput-1.19.0/src/evdev-fallback.c 2021-09-14 10:30:52.782955400 +0200 +++ new/libinput-1.19.1/src/evdev-fallback.c 2021-09-28 03:51:11.898798000 +0200 @@ -235,6 +235,18 @@ if (!(device->seat_caps & EVDEV_DEVICE_POINTER)) return; + if (!dispatch->wheel.emulate_hi_res_wheel && + !dispatch->wheel.hi_res_event_received && + (dispatch->wheel.lo_res.x != 0 || dispatch->wheel.lo_res.y != 0)) { + evdev_log_bug_kernel(device, + "device supports high-resolution scroll but only low-resolution events have been received.\n" + "See %s/incorrectly-enabled-hires.html for details\n", + HTTP_DOC_LINK); + dispatch->wheel.emulate_hi_res_wheel = true; + dispatch->wheel.hi_res.x = dispatch->wheel.lo_res.x * 120; + dispatch->wheel.hi_res.y = dispatch->wheel.lo_res.y * 120; + } + if (dispatch->wheel.is_inhibited) { dispatch->wheel.hi_res.x = 0; dispatch->wheel.hi_res.y = 0; @@ -897,10 +909,12 @@ break; case REL_WHEEL_HI_RES: dispatch->wheel.hi_res.y += e->value; + dispatch->wheel.hi_res_event_received = true; dispatch->pending_event |= EVDEV_WHEEL; break; case REL_HWHEEL_HI_RES: dispatch->wheel.hi_res.x += e->value; + dispatch->wheel.hi_res_event_received = true; dispatch->pending_event |= EVDEV_WHEEL; break; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.19.0/src/evdev-fallback.h new/libinput-1.19.1/src/evdev-fallback.h --- old/libinput-1.19.0/src/evdev-fallback.h 2021-09-14 10:30:52.782955400 +0200 +++ new/libinput-1.19.1/src/evdev-fallback.h 2021-09-28 03:51:11.898798000 +0200 @@ -102,6 +102,7 @@ struct device_coords hi_res; bool emulate_hi_res_wheel; bool is_inhibited; + bool hi_res_event_received; } wheel; struct { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.19.0/src/evdev-mt-touchpad.c new/libinput-1.19.1/src/evdev-mt-touchpad.c --- old/libinput-1.19.0/src/evdev-mt-touchpad.c 2021-09-14 10:30:52.783955300 +0200 +++ new/libinput-1.19.1/src/evdev-mt-touchpad.c 2021-09-28 03:51:11.899798000 +0200 @@ -1999,9 +1999,15 @@ tp_interface_remove(struct evdev_dispatch *dispatch) { struct tp_dispatch *tp = tp_dispatch(dispatch); + struct evdev_paired_keyboard *kbd; libinput_timer_cancel(&tp->arbitration.arbitration_timer); + list_for_each_safe(kbd, &tp->dwt.paired_keyboard_list, link) { + evdev_paired_keyboard_destroy(kbd); + } + tp->dwt.keyboard_active = false; + tp_remove_tap(tp); tp_remove_buttons(tp); tp_remove_sendevents(tp); @@ -2400,14 +2406,13 @@ struct evdev_device *trackpoint) { struct tp_dispatch *tp = (struct tp_dispatch*)touchpad->dispatch; - unsigned int bus_tp = libevdev_get_id_bustype(touchpad->evdev), - bus_trp = libevdev_get_id_bustype(trackpoint->evdev); + unsigned int bus_trp = libevdev_get_id_bustype(trackpoint->evdev); bool tp_is_internal, trp_is_internal; if ((trackpoint->tags & EVDEV_TAG_TRACKPOINT) == 0) return; - tp_is_internal = bus_tp != BUS_USB && bus_tp != BUS_BLUETOOTH; + tp_is_internal = !!(touchpad->tags & EVDEV_TAG_INTERNAL_TOUCHPAD); trp_is_internal = bus_trp != BUS_USB && bus_trp != BUS_BLUETOOTH; if (tp->buttons.trackpoint == NULL && @@ -2724,22 +2729,15 @@ /* The hwdb is the authority on integration, these heuristics are * the fallback only (they precede the hwdb too). * - * Simple approach: USB is unknown, with the exception - * of Apple where internal touchpads are connected over USB and it - * doesn't have external USB touchpads anyway. - * + * Simple approach: * Bluetooth touchpads are considered external, anything else is - * internal. + * internal. Except the ones from some vendors that only make external + * touchpads. */ bustype = libevdev_get_id_bustype(device->evdev); vendor = libevdev_get_id_vendor(device->evdev); switch (bustype) { - case BUS_USB: - if (evdev_device_has_model_quirk(device, - QUIRK_MODEL_APPLE_TOUCHPAD)) - evdev_tag_touchpad_internal(device); - break; case BUS_BLUETOOTH: evdev_tag_touchpad_external(device); break; @@ -3661,8 +3659,8 @@ if (!use_touch_size) tp_init_pressure(tp, device); - /* 5 warnings per 2 hours should be enough */ - ratelimit_init(&tp->jump.warning, s2us(2 * 60 * 60), 5); + /* 5 warnings per 24 hours should be enough */ + ratelimit_init(&tp->jump.warning, h2us(24), 5); /* Set the dpi to that of the x axis, because that's what we normalize to when needed*/ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.19.0/src/evdev.c new/libinput-1.19.1/src/evdev.c --- old/libinput-1.19.0/src/evdev.c 2021-09-14 10:30:52.784955300 +0200 +++ new/libinput-1.19.1/src/evdev.c 2021-09-28 03:51:11.900797800 +0200 @@ -415,6 +415,11 @@ struct normalized_coords delta = *delta_in; struct wheel_v120 v120 = *v120_in; + if (device->scroll.invert_horizontal_scrolling) { + delta.x *= -1; + v120.x *= -1; + } + if (device->scroll.natural_scrolling_enabled) { delta.x *= -1; delta.y *= -1; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.19.0/src/libinput.c new/libinput-1.19.1/src/libinput.c --- old/libinput-1.19.0/src/libinput.c 2021-09-14 10:30:52.785955400 +0200 +++ new/libinput-1.19.1/src/libinput.c 2021-09-28 03:51:11.901798000 +0200 @@ -3567,7 +3567,9 @@ LIBINPUT_EVENT_GESTURE_SWIPE_END, LIBINPUT_EVENT_GESTURE_PINCH_BEGIN, LIBINPUT_EVENT_GESTURE_PINCH_UPDATE, - LIBINPUT_EVENT_GESTURE_PINCH_END); + LIBINPUT_EVENT_GESTURE_PINCH_END, + LIBINPUT_EVENT_GESTURE_HOLD_BEGIN, + LIBINPUT_EVENT_GESTURE_HOLD_END); return &event->base; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.19.0/src/libinput.h new/libinput-1.19.1/src/libinput.h --- old/libinput-1.19.0/src/libinput.h 2021-09-14 10:30:52.786955400 +0200 +++ new/libinput-1.19.1/src/libinput.h 2021-09-28 03:51:11.902798000 +0200 @@ -1561,8 +1561,8 @@ * libinput_event_pointer_get_scroll_value_v120() for a simpler API of * handling scroll wheel events of different step sizes. * - * If the source is @ref LIBINPUT_POINTER_AXIS_SOURCE_CONTINUOUS, no - * terminating event is guaranteed (though it may happen). + * If the source is @ref LIBINPUT_POINTER_AXIS_SOURCE_CONTINUOUS, libinput + * guarantees that a scroll sequence is terminated with a scroll value of 0. * The coordinate system is identical to the cursor movement, i.e. a * scroll value of 1 represents the equivalent relative motion of 1. * @@ -1642,8 +1642,8 @@ * libinput_event_pointer_get_scroll_value_v120() for a simpler API of * handling scroll wheel events of different step sizes. * - * If the event is @ref LIBINPUT_EVENT_POINTER_SCROLL_CONTINUOUS, no - * terminating event is guaranteed (though it may happen). + * If the event is @ref LIBINPUT_EVENT_POINTER_SCROLL_CONTINUOUS, libinput + * guarantees that a scroll sequence is terminated with a scroll value of 0. * The coordinate system is identical to the cursor movement, i.e. a * scroll value of 1 represents the equivalent relative motion of 1. * diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.19.0/src/util-time.h new/libinput-1.19.1/src/util-time.h --- old/libinput-1.19.0/src/util-time.h 2021-09-14 10:30:52.787955300 +0200 +++ new/libinput-1.19.1/src/util-time.h 2021-09-28 03:51:11.903797900 +0200 @@ -63,6 +63,12 @@ return ms2us(s * 1000); } +static inline uint64_t +h2us(uint64_t h) +{ + return s2us(h * 3600); +} + static inline uint32_t us2ms(uint64_t us) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.19.0/test/litest.c new/libinput-1.19.1/test/litest.c --- old/libinput-1.19.0/test/litest.c 2021-09-14 10:30:52.792955400 +0200 +++ new/libinput-1.19.1/test/litest.c 2021-09-28 03:51:11.907798000 +0200 @@ -1750,7 +1750,8 @@ va_list args) { if (strstr(format, "client bug: ") || - strstr(format, "libinput bug: ")) + strstr(format, "libinput bug: ") || + strstr(format, "kernel bug: ")) return; litest_abort_msg("Expected bug statement in log msg, aborting.\n"); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.19.0/test/test-misc.c new/libinput-1.19.1/test/test-misc.c --- old/libinput-1.19.0/test/test-misc.c 2021-09-14 10:30:52.793955300 +0200 +++ new/libinput-1.19.1/test/test-misc.c 2021-09-28 03:51:11.908798000 +0200 @@ -366,6 +366,9 @@ litest_touch_down(dev, 0, 70, 30); litest_touch_down(dev, 1, 30, 70); + libinput_dispatch(li); + litest_timeout_gesture_hold(); + for (i = 0; i < 8; i++) { litest_push_event_frame(dev); litest_touch_move(dev, 0, 70 - i * 5, 30 + i * 5); @@ -379,7 +382,7 @@ type = libinput_event_get_type(event); if (type >= LIBINPUT_EVENT_GESTURE_SWIPE_BEGIN && - type <= LIBINPUT_EVENT_GESTURE_PINCH_END) { + type <= LIBINPUT_EVENT_GESTURE_HOLD_END) { struct libinput_event_gesture *g; struct libinput_event *base; g = libinput_event_get_gesture_event(event); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.19.0/test/test-pointer.c new/libinput-1.19.1/test/test-pointer.c --- old/libinput-1.19.0/test/test-pointer.c 2021-09-14 10:30:52.793955300 +0200 +++ new/libinput-1.19.1/test/test-pointer.c 2021-09-28 03:51:11.908798000 +0200 @@ -803,6 +803,70 @@ } END_TEST +START_TEST(pointer_scroll_wheel_hires_send_only_lores_vertical) +{ + struct litest_device *dev = litest_current_device(); + struct libinput *li = dev->libinput; + + if (!libevdev_has_event_code(dev->evdev, EV_REL, REL_WHEEL_HI_RES) && + !libevdev_has_event_code(dev->evdev, EV_REL, REL_HWHEEL_HI_RES)) + return; + + litest_drain_events(dev->libinput); + litest_set_log_handler_bug(li); + + litest_event(dev, EV_REL, REL_WHEEL, 1); + litest_event(dev, EV_SYN, SYN_REPORT, 0); + libinput_dispatch(li); + test_high_and_low_wheel_events_value(dev, REL_WHEEL, -120); + + litest_event(dev, EV_REL, REL_WHEEL, -1); + litest_event(dev, EV_SYN, SYN_REPORT, 0); + libinput_dispatch(li); + test_high_and_low_wheel_events_value(dev, REL_WHEEL, 120); + + litest_event(dev, EV_REL, REL_HWHEEL, 1); + litest_event(dev, EV_SYN, SYN_REPORT, 0); + libinput_dispatch(li); + test_high_and_low_wheel_events_value(dev, REL_HWHEEL, 120); + + litest_assert_empty_queue(li); + litest_restore_log_handler(li); +} +END_TEST + +START_TEST(pointer_scroll_wheel_hires_send_only_lores_horizontal) +{ + struct litest_device *dev = litest_current_device(); + struct libinput *li = dev->libinput; + + if (!libevdev_has_event_code(dev->evdev, EV_REL, REL_WHEEL_HI_RES) && + !libevdev_has_event_code(dev->evdev, EV_REL, REL_HWHEEL_HI_RES)) + return; + + litest_drain_events(dev->libinput); + litest_set_log_handler_bug(li); + + litest_event(dev, EV_REL, REL_HWHEEL, 2); + litest_event(dev, EV_SYN, SYN_REPORT, 0); + libinput_dispatch(li); + test_high_and_low_wheel_events_value(dev, REL_HWHEEL, 240); + + litest_event(dev, EV_REL, REL_WHEEL, -1); + litest_event(dev, EV_SYN, SYN_REPORT, 0); + libinput_dispatch(li); + test_high_and_low_wheel_events_value(dev, REL_WHEEL, 120); + + litest_event(dev, EV_REL, REL_HWHEEL, 1); + litest_event(dev, EV_SYN, SYN_REPORT, 0); + libinput_dispatch(li); + test_high_and_low_wheel_events_value(dev, REL_HWHEEL, 120); + + litest_assert_empty_queue(li); + litest_restore_log_handler(li); +} +END_TEST + START_TEST(pointer_scroll_natural_defaults) { struct litest_device *dev = litest_current_device(); @@ -3429,6 +3493,8 @@ litest_add_for_device(pointer_scroll_wheel_pressed_noscroll, LITEST_MOUSE); litest_add_for_device(pointer_scroll_hi_res_wheel_pressed_noscroll, LITEST_MOUSE); litest_add(pointer_scroll_wheel_hires, LITEST_WHEEL, LITEST_TABLET); + litest_add(pointer_scroll_wheel_hires_send_only_lores_vertical, LITEST_WHEEL, LITEST_TABLET); + litest_add(pointer_scroll_wheel_hires_send_only_lores_horizontal, LITEST_WHEEL, LITEST_TABLET); litest_add(pointer_scroll_button, LITEST_RELATIVE|LITEST_BUTTON, LITEST_ANY); litest_add(pointer_scroll_button_noscroll, LITEST_ABSOLUTE|LITEST_BUTTON, LITEST_RELATIVE); litest_add(pointer_scroll_button_noscroll, LITEST_ANY, LITEST_RELATIVE|LITEST_BUTTON); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.19.0/test/test-touchpad.c new/libinput-1.19.1/test/test-touchpad.c --- old/libinput-1.19.0/test/test-touchpad.c 2021-09-14 10:30:52.795955400 +0200 +++ new/libinput-1.19.1/test/test-touchpad.c 2021-09-28 03:51:11.910797800 +0200 @@ -5119,6 +5119,23 @@ } END_TEST +START_TEST(touchpad_dwt_remove_before_keyboard) +{ + struct litest_device *keyboard = litest_current_device(); + struct litest_device *touchpad; + struct libinput *li = keyboard->libinput; + + touchpad = litest_add_device(li, LITEST_SYNAPTICS_RMI4); + ck_assert(has_disable_while_typing(touchpad)); + + libinput_dispatch(li); + + /* remove the touchpad before the keyboard. + * this test can fail in valgrind only */ + litest_delete_device(touchpad); +} +END_TEST + START_TEST(touchpad_dwt_multiple_keyboards_bothkeys) { struct litest_device *touchpad = litest_current_device(); @@ -7293,6 +7310,7 @@ litest_add_for_device(touchpad_dwt_multiple_keyboards_bothkeys, LITEST_SYNAPTICS_I2C); litest_add_for_device(touchpad_dwt_multiple_keyboards_bothkeys_modifier, LITEST_SYNAPTICS_I2C); litest_add_ranged_for_device(touchpad_dwt_multiple_keyboards_remove, LITEST_SYNAPTICS_I2C, &twice); + litest_add_for_device(touchpad_dwt_remove_before_keyboard, LITEST_KEYBOARD); litest_add(touchpad_thumb_lower_area_movement, LITEST_CLICKPAD, LITEST_ANY); litest_add(touchpad_thumb_lower_area_movement_rethumb, LITEST_CLICKPAD, LITEST_ANY); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.19.0/test/test-utils.c new/libinput-1.19.1/test/test-utils.c --- old/libinput-1.19.0/test/test-utils.c 2021-09-14 10:30:52.796955300 +0200 +++ new/libinput-1.19.1/test/test-utils.c 2021-09-28 03:51:11.911798000 +0200 @@ -707,6 +707,7 @@ ck_assert_int_eq(ns2us(10000), 10); ck_assert_int_eq(ms2us(10), 10000); ck_assert_int_eq(s2us(1), 1000000); + ck_assert_int_eq(h2us(2), s2us(2 * 60 * 60)); ck_assert_int_eq(us2ms(10000), 10); } END_TEST