Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package libinput for openSUSE:Factory checked in at 2026-05-16 19:23:33 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libinput (Old) and /work/SRC/openSUSE:Factory/.libinput.new.1966 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libinput" Sat May 16 19:23:33 2026 rev:131 rq:1353245 version:1.31.2 Changes: -------- --- /work/SRC/openSUSE:Factory/libinput/libinput.changes 2026-04-04 19:06:45.567506483 +0200 +++ /work/SRC/openSUSE:Factory/.libinput.new.1966/libinput.changes 2026-05-16 19:23:46.692203032 +0200 @@ -1,0 +2,12 @@ +Thu May 14 23:58:01 UTC 2026 - Jan Engelhardt <[email protected]> + +- Update to release 1.31.2 + * A bunch of device-specific quirks + * Fix for the new fast-swipe interaction during 3fg dragging. A + wrong timestamp calculation could cause slow movements to be + interpreted as swipes in some cases. + * A fix for the Acer Swift SFX14-73G (and likely other devices + with a similar touchpad) fixes a stuttering cursor caused by + wrong SYN_REPORT handling in libinput. + +------------------------------------------------------------------- Old: ---- libinput-1.31.1.tar.gz New: ---- libinput-1.31.2.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libinput.spec ++++++ --- /var/tmp/diff_new_pack.36y0aQ/_old 2026-05-16 19:23:48.284268189 +0200 +++ /var/tmp/diff_new_pack.36y0aQ/_new 2026-05-16 19:23:48.288268353 +0200 @@ -37,7 +37,7 @@ %define lname libinput10 %define pname libinput Name: libinput%{?xsuffix} -Version: 1.31.1 +Version: 1.31.2 Release: 0 Summary: Input device and event processing library License: MIT ++++++ _scmsync.obsinfo ++++++ --- /var/tmp/diff_new_pack.36y0aQ/_old 2026-05-16 19:23:48.348270809 +0200 +++ /var/tmp/diff_new_pack.36y0aQ/_new 2026-05-16 19:23:48.352270972 +0200 @@ -1,5 +1,5 @@ -mtime: 1775114676 -commit: 6cfb5d9611a339e3f447be0287373aed1776c9a947e0c8c8296b75ee548aa3f1 +mtime: 1778803125 +commit: 35d2d9dc284600b2191c7ce44233899d3564df78e84a2dee5caf6ab7c6b50bbb url: https://src.opensuse.org/jengelh/libinput revision: master ++++++ build.specials.obscpio ++++++ ++++++ build.specials.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/.gitignore new/.gitignore --- old/.gitignore 1970-01-01 01:00:00.000000000 +0100 +++ new/.gitignore 2026-05-15 01:58:45.000000000 +0200 @@ -0,0 +1 @@ +.osc ++++++ libinput-1.31.1.tar.gz -> libinput-1.31.2.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.31.1/meson.build new/libinput-1.31.2/meson.build --- old/libinput-1.31.1/meson.build 2026-04-02 03:04:12.000000000 +0200 +++ new/libinput-1.31.2/meson.build 2026-05-14 12:56:17.000000000 +0200 @@ -1,5 +1,5 @@ project('libinput', 'c', - version : '1.31.1', + version : '1.31.2', license : 'MIT/Expat', default_options : [ 'c_std=gnu99', 'warning_level=2' ], meson_version : '>= 0.64.0') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.31.1/quirks/30-vendor-clevetura.quirks new/libinput-1.31.2/quirks/30-vendor-clevetura.quirks --- old/libinput-1.31.1/quirks/30-vendor-clevetura.quirks 1970-01-01 01:00:00.000000000 +0100 +++ new/libinput-1.31.2/quirks/30-vendor-clevetura.quirks 2026-05-14 12:56:17.000000000 +0200 @@ -0,0 +1,11 @@ +# Do not edit this file, it will be overwritten on update + +# Touchpad is not a clickpad but INPUT_PROP_BUTTONPAD is set, +# causing libinput to drop physical button events. +[Clevetura CLVX S Touchpad] +MatchUdevType=touchpad +MatchBus=bluetooth +MatchVendor=0x36F7 +MatchProduct=0x5755 +AttrInputProp=-INPUT_PROP_BUTTONPAD +AttrEventCode=+BTN_RIGHT diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.31.1/quirks/30-vendor-elantech.quirks new/libinput-1.31.2/quirks/30-vendor-elantech.quirks --- old/libinput-1.31.1/quirks/30-vendor-elantech.quirks 2026-04-02 03:04:12.000000000 +0200 +++ new/libinput-1.31.2/quirks/30-vendor-elantech.quirks 2026-05-14 12:56:17.000000000 +0200 @@ -9,3 +9,11 @@ MatchName=*Elan Touchpad* AttrResolutionHint=31x31 AttrPressureRange=10:8 + +# Elan Hapticpad mostly used in Lenovo laptops. +[Elan Haptic Touchpad (04F3:3355)] +MatchBus=i2c +MatchVendor=0x04F3 +MatchProduct=0x3355 +MatchUdevType=touchpad +AttrInputProp=+INPUT_PROP_PRESSUREPAD diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.31.1/quirks/30-vendor-goodix.quirks new/libinput-1.31.2/quirks/30-vendor-goodix.quirks --- old/libinput-1.31.1/quirks/30-vendor-goodix.quirks 2026-04-02 03:04:12.000000000 +0200 +++ new/libinput-1.31.2/quirks/30-vendor-goodix.quirks 2026-05-14 12:56:17.000000000 +0200 @@ -2,6 +2,15 @@ # "GXTP5100 Touchpad": pressure touchpad mostly used in Lenovo laptops. # Match vid and pid as it can have other names. +[Goodix Haptic Touchpad (27C6:01E7)] +MatchBus=i2c +MatchVendor=0x27C6 +MatchProduct=0x01E7 +MatchUdevType=touchpad +AttrInputProp=+INPUT_PROP_PRESSUREPAD + +# "GXTP5100 Touchpad": pressure touchpad mostly used in Lenovo laptops. +# GXTP5100:00 27C6:01E8 Touchpad [Goodix Haptic Touchpad (27C6:01E8)] MatchBus=i2c MatchVendor=0x27C6 @@ -9,6 +18,42 @@ MatchUdevType=touchpad AttrInputProp=+INPUT_PROP_PRESSUREPAD +# "GXTP5100 Touchpad": pressure touchpad mostly used in Lenovo laptops. +# GXTP5100:00 27C6:01E9 Touchpad +[Goodix Haptic Touchpad (27C6:01E9)] +MatchBus=i2c +MatchVendor=0x27C6 +MatchProduct=0x01E9 +MatchUdevType=touchpad +AttrInputProp=+INPUT_PROP_PRESSUREPAD + +# "GXTP5100 Touchpad": pressure touchpad mostly used in Lenovo laptops. +# GXTP5100:00 27C6:01EA Touchpad +[Goodix Haptic Touchpad (27C6:01EA)] +MatchBus=i2c +MatchVendor=0x27C6 +MatchProduct=0x01EA +MatchUdevType=touchpad +AttrInputProp=+INPUT_PROP_PRESSUREPAD + +# "GXTP5100 Touchpad": pressure touchpad mostly used in Lenovo laptops. +# GXTP5100:00 27C6:01EB Touchpad +[Goodix Haptic Touchpad (27C6:01EB)] +MatchBus=i2c +MatchVendor=0x27C6 +MatchProduct=0x01EB +MatchUdevType=touchpad +AttrInputProp=+INPUT_PROP_PRESSUREPAD + +# "GXTP5400 Touchpad": pressure touchpad mostly used in Lenovo laptops. +# GXTP5400:00 27C6:0F96 Touchpad +[Goodix Haptic Touchpad (27C6:0F96)] +MatchBus=i2c +MatchVendor=0x27C6 +MatchProduct=0x0F96 +MatchUdevType=touchpad +AttrInputProp=+INPUT_PROP_PRESSUREPAD + # "GXTP5420 Touchpad": pressure touchpad mostly used in Lenovo laptops. # GXTP5420:00 27C6:0F95 Touchpad [Goodix Haptic Touchpad (27C6:0F95)] @@ -17,3 +62,11 @@ MatchProduct=0x0F95 MatchUdevType=touchpad AttrInputProp=+INPUT_PROP_PRESSUREPAD + +# "GXTP5420 Touchpad": pressure touchpad mostly used in Lenovo laptops. +[Goodix Haptic Touchpad (27C6:0F90)] +MatchBus=i2c +MatchVendor=0x27C6 +MatchProduct=0x0F90 +MatchUdevType=touchpad +AttrInputProp=+INPUT_PROP_PRESSUREPAD diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.31.1/quirks/50-system-hp.quirks new/libinput-1.31.2/quirks/50-system-hp.quirks --- old/libinput-1.31.1/quirks/50-system-hp.quirks 2026-04-02 03:04:12.000000000 +0200 +++ new/libinput-1.31.2/quirks/50-system-hp.quirks 2026-05-14 12:56:17.000000000 +0200 @@ -24,28 +24,27 @@ MatchDMIModalias=dmi:*:svnHP:pnHPElitex21013G3:* ModelTabletModeSwitchUnreliable=1 -# The HP OmniBook Ultra Flip Laptop 14-fh0xxx's custom Intel ISH firmware -# filters out events from its builtin keyboard and touchpad when the hinge is -# opened little more than 180 degrees but toggles tablet-mode when it's opened -# little less than 180 degrees. -# Do not suspend the keyboard and touchpad to let use the device in flat -# position and also give consistency with some keyboard keys controlled by the -# Video Bus device (brightness down/up), the HP WMI hotkeys device (mic mute and -# hp hubs launcher key) and the backlight getting on and off by the firmware at -# the same time it enables disables the input. -# This one is for the keyboard and... -[HP OmniBook Ultra Flip Laptop 14-fh0xxx Keyboard] +# The HP OmniBook Ultra Flip 14 toggles tablet mode at a little less than 180 +# degrees and hardware switches off inputs at a little more than 180 degrees. +# We don't suspend ourselves to allow using them in flat position. It is +# possible that HP fixes this in the future (i.e. so tablet mode toggles +# after 180 degrees) so check before removing these rules. +# This rule is for the keyboard and... +[HP OmniBook Ultra Flip Laptop 14-fh0xxx and 14t-fh000 Keyboard] MatchBus=ps2 MatchUdevType=keyboard -MatchDMIModalias=dmi:*:svnHP:pnHPOmniBookUltraFlipLaptop14-fh0xxx:* +MatchDMIModalias=dmi:*:svnHP:*:rn8CDE:* ModelTabletModeNoSuspend=1 -# ...this one is for the touchpad. -[HP OmniBook Ultra Flip Laptop 14-fh0xxx Touchpad] +# ...this rule is for the touchpad. +[HP OmniBook Ultra Flip Laptop 14-fh0xxx and 14t-fh000 Touchpad] MatchBus=i2c MatchUdevType=touchpad -MatchDMIModalias=dmi:*:svnHP:pnHPOmniBookUltraFlipLaptop14-fh0xxx:* +MatchDMIModalias=dmi:*:svnHP:*:rn8CDE:* ModelTabletModeNoSuspend=1 +AttrPressureRange=15:5 +AttrThumbPressureThreshold=80 +AttrPalmPressureThreshold=125 [HP Pavilion dm4] MatchName=*SynPS/2 Synaptics TouchPad diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.31.1/quirks/50-system-positivo.quirks new/libinput-1.31.2/quirks/50-system-positivo.quirks --- old/libinput-1.31.1/quirks/50-system-positivo.quirks 1970-01-01 01:00:00.000000000 +0100 +++ new/libinput-1.31.2/quirks/50-system-positivo.quirks 2026-05-14 12:56:17.000000000 +0200 @@ -0,0 +1,11 @@ +# Do not edit this file, it will be overwritten on update + +# Most Pixart Touchpad (093A:0255) devices don't have buttons so we remove right +# button in 30-vendor-pixart.quirks, but this one does. +[Positivo VAIO FE15 Touchpad] +MatchBus=i2c +MatchVendor=0x093A +MatchProduct=0x0255 +MatchUdevType=touchpad +MatchDMIModalias=dmi:*:svnPositivoBahia-VAIO:pnVJFE59F11X-*:* +AttrEventCode=+BTN_RIGHT diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.31.1/quirks/50-system-wareus.quirks new/libinput-1.31.2/quirks/50-system-wareus.quirks --- old/libinput-1.31.1/quirks/50-system-wareus.quirks 1970-01-01 01:00:00.000000000 +0100 +++ new/libinput-1.31.2/quirks/50-system-wareus.quirks 2026-05-14 12:56:17.000000000 +0200 @@ -0,0 +1,6 @@ +# Clickpad that announces BTN_RIGHT +[Wareus B15 Touchpad] +MatchName=HTIX5288:00 36B6:C001 Touchpad +MatchUdevType=touchpad +MatchDMIModalias=dmi:*svnWareus:*pnB15* +AttrEventCode=-BTN_RIGHT diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.31.1/src/evdev-frame.h new/libinput-1.31.2/src/evdev-frame.h --- old/libinput-1.31.1/src/evdev-frame.h 2026-04-02 03:04:12.000000000 +0200 +++ new/libinput-1.31.2/src/evdev-frame.h 2026-05-14 12:56:17.000000000 +0200 @@ -332,9 +332,9 @@ case EVDEV_BTN_TOOL_FINGER: case EVDEV_BTN_TOUCH: return false; - case BTN_STYLUS: - case BTN_STYLUS2: - case BTN_STYLUS3: + case EVDEV_BTN_STYLUS: + case EVDEV_BTN_STYLUS2: + case EVDEV_BTN_STYLUS3: return true; case EVDEV_BTN_MISC ... EVDEV_BTN_DIGI - 1: case EVDEV_BTN_WHEEL ... EVDEV_BTN_GEAR_UP: @@ -550,10 +550,12 @@ size_t nevents) { assert(nevents > 0); + int syn_report_value = 0; for (size_t i = 0; i < nevents; i++) { if (evdev_usage_eq(events[i].usage, EVDEV_SYN_REPORT)) { nevents = i; + syn_report_value = events[i].value; break; } } @@ -568,14 +570,24 @@ frame->count += nevents; } + frame->events[frame->count - 1] = (struct evdev_event){ + .usage = evdev_usage_from_uint32_t(EVDEV_SYN_REPORT), + .value = syn_report_value, + }; + return 0; } static inline int evdev_frame_append_one(struct evdev_frame *frame, evdev_usage_t usage, int32_t value) { - if (evdev_usage_eq(usage, EVDEV_SYN_REPORT)) + if (evdev_usage_eq(usage, EVDEV_SYN_REPORT)) { + frame->events[frame->count - 1] = (struct evdev_event){ + .usage = evdev_usage_from_uint32_t(EVDEV_SYN_REPORT), + .value = value, + }; return 0; + } if (frame->count >= frame->max_size) return -ENOMEM; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.31.1/src/evdev-mt-touchpad-gestures.c new/libinput-1.31.2/src/evdev-mt-touchpad-gestures.c --- old/libinput-1.31.1/src/evdev-mt-touchpad-gestures.c 2026-04-02 03:04:12.000000000 +0200 +++ new/libinput-1.31.2/src/evdev-mt-touchpad-gestures.c 2026-05-14 12:56:17.000000000 +0200 @@ -585,8 +585,28 @@ static void tp_gesture_set_3fg_drag_3fg_or_swipe_timer(struct tp_dispatch *tp, usec_t time) { - libinput_timer_set(&tp->gesture.drag_3fg_or_swipe_timer, - usec_add(time, DRAG_3FG_OR_SWIPE_TIMEOUT)); + usec_t expire = usec_add(tp->gesture.initial_time, DRAG_3FG_OR_SWIPE_TIMEOUT); + + /* This is a hack to avoid the state machine getting even more complicated. + * For a slow drag/fast swipe we want the time from the *initial* touch point, + * not the time from when we realised the fingers are moving. IOW + * putting 3fg down, resting for 80ms and then moving fast must trigger + * a drag, not a swipe. + * + * In theory we should set the timer in the NONE/UNKNOWN states but that would + * require a whole parallel set of states like + * NONE_BUT_TIMEOUT_FOR_FAST_STATE_EXPIRED. Let's not do that, instead we set a + * negative timer and let the normal state proceed. Either we moved by the + * threshold already (in which case we shouldn't ever get here anyway) or + * we didn't in which case the neg timer will do the right thing too when it + * fires. + */ + if (usec_cmp(expire, time) < 0) + libinput_timer_set_flags(&tp->gesture.drag_3fg_or_swipe_timer, + expire, + TIMER_FLAG_ALLOW_NEGATIVE); + else + libinput_timer_set(&tp->gesture.drag_3fg_or_swipe_timer, expire); } static void diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.31.1/src/libinput.c new/libinput-1.31.2/src/libinput.c --- old/libinput-1.31.1/src/libinput.c 2026-04-02 03:04:12.000000000 +0200 +++ new/libinput-1.31.2/src/libinput.c 2026-05-14 12:56:17.000000000 +0200 @@ -5206,7 +5206,7 @@ if (!libinput_tablet_tool_config_eraser_button_get_modes(tool)) return LIBINPUT_CONFIG_ERASER_BUTTON_DEFAULT; - return tool->config.eraser_button.get_mode(tool); + return tool->config.eraser_button.get_default_mode(tool); } LIBINPUT_EXPORT enum libinput_config_status @@ -5246,7 +5246,7 @@ if (!libinput_tablet_tool_config_eraser_button_get_modes(tool)) return 0; - return tool->config.eraser_button.get_button(tool); + return tool->config.eraser_button.get_default_button(tool); } #ifdef HAVE_LIBWACOM diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.31.1/src/util-time.h new/libinput-1.31.2/src/util-time.h --- old/libinput-1.31.1/src/util-time.h 2026-04-02 03:04:12.000000000 +0200 +++ new/libinput-1.31.2/src/util-time.h 2026-05-14 12:56:17.000000000 +0200 @@ -41,19 +41,19 @@ static inline usec_t usec_from_millis(uint32_t millis) { - return usec_from_uint64_t(millis * 1000); + return usec_from_uint64_t(millis * 1000ULL); } static inline usec_t usec_from_seconds(uint32_t secs) { - return usec_from_millis(secs * 1000); + return usec_from_uint64_t(secs * 1000000ULL); } static inline usec_t usec_from_hours(uint32_t hours) { - return usec_from_seconds(hours * 3600); + return usec_from_uint64_t((uint64_t)hours * 3600 * 1000000ULL); } static inline uint32_t @@ -83,7 +83,7 @@ static inline usec_t usec_add_millis(usec_t us, uint32_t millis) { - return usec_from_uint64_t(usec_as_uint64_t(us) + millis * 1000); + return usec_from_uint64_t(usec_as_uint64_t(us) + millis * 1000ULL); } static inline usec_t @@ -101,13 +101,13 @@ static inline usec_t usec_from_timeval(const struct timeval *tv) { - return usec_from_uint64_t(tv->tv_sec * 1000000 + tv->tv_usec); + return usec_from_uint64_t(tv->tv_sec * 1000000ULL + tv->tv_usec); } static inline usec_t usec_from_timespec(const struct timespec *tp) { - return usec_from_uint64_t(tp->tv_sec * 1000000 + tp->tv_nsec / 1000); + return usec_from_uint64_t(tp->tv_sec * 1000000ULL + tp->tv_nsec / 1000); } static inline usec_t diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.31.1/test/test-gestures.c new/libinput-1.31.2/test/test-gestures.c --- old/libinput-1.31.1/test/test-gestures.c 2026-04-02 03:04:12.000000000 +0200 +++ new/libinput-1.31.2/test/test-gestures.c 2026-05-14 12:56:17.000000000 +0200 @@ -2161,6 +2161,65 @@ } END_TEST +START_TEST(gestures_3fg_drag_slow_start) +{ + struct litest_device *dev = litest_current_device(); + struct libinput *li = dev->libinput; + + uint32_t finger_count = litest_test_param_get_u32(test_env->params, "fingers"); + bool tap_enabled = litest_test_param_get_bool(test_env->params, "tap-enabled"); + + if (litest_slot_count(dev) < 3) + return LITEST_NOT_APPLICABLE; + if (libinput_device_config_3fg_drag_get_finger_count(dev->libinput_device) < + (int)finger_count) + return LITEST_NOT_APPLICABLE; + + litest_enable_3fg_drag(dev->libinput_device, finger_count); + if (tap_enabled) + litest_enable_tap(dev->libinput_device); + else + litest_disable_tap(dev->libinput_device); + + litest_drain_events(li); + + /* Fingers are set down, then we do nothing, then we swipe fast. Because + * we did nothing at first even fast movement must become a 3fg drag, not + * a swipe. + */ + double y = 30.0; + for (uint32_t i = 0; i < finger_count; i++) + litest_touch_down(dev, i, 10 + i, y); + + litest_checkpoint("Waiting past timeout before fast finger move"); + litest_timeout_3fg_drag_or_swipe(li); + + /* Now move fast */ + while (y < 60.0) { + y += 2; + for (uint32_t i = 0; i < finger_count; i++) { + litest_touch_move(dev, i, 10 + i, y); + } + litest_dispatch(li); + } + + drain_cancelled_swipe_gesture(li); + litest_checkpoint("Expecting button press for 3fg drag"); + litest_assert_button_event(li, BTN_LEFT, LIBINPUT_BUTTON_STATE_PRESSED); + litest_assert_only_typed_events(li, LIBINPUT_EVENT_POINTER_MOTION); + + for (uint32_t i = 0; i < finger_count; i++) + litest_touch_up(dev, i); + + litest_dispatch(li); + litest_assert_empty_queue(li); + + litest_timeout_3fg_drag(li); + + litest_assert_button_event(li, BTN_LEFT, LIBINPUT_BUTTON_STATE_RELEASED); +} +END_TEST + TEST_COLLECTION(gestures) { /* clang-format off */ @@ -2247,6 +2306,7 @@ "fingers", 'u', 2, 3, 4, "tap-enabled", 'b') { litest_add_parametrized(gestures_3fg_drag_fast_swipe, LITEST_TOUCHPAD, LITEST_SINGLE_TOUCH, params); + litest_add_parametrized(gestures_3fg_drag_slow_start, LITEST_TOUCHPAD, LITEST_SINGLE_TOUCH, params); } /* Timing-sensitive test, valgrind is too slow */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.31.1/test/test-utils.c new/libinput-1.31.2/test/test-utils.c --- old/libinput-1.31.1/test/test-utils.c 2026-04-02 03:04:12.000000000 +0200 +++ new/libinput-1.31.2/test/test-utils.c 2026-05-14 12:56:17.000000000 +0200 @@ -3168,6 +3168,49 @@ ARRAY_LENGTH(events)); litest_assert_int_eq(frame->max_size, ARRAY_LENGTH(events)); } + { + struct evdev_event events[] = { + { + .usage = U(EVDEV_ABS_X), + .value = 1, + }, + { + .usage = U(EVDEV_ABS_Y), + .value = 2, + }, + { + .usage = U(EVDEV_SYN_REPORT), + .value = 1, + }, + }; + + _unref_(evdev_frame) *frame = evdev_frame_new(3); + int rc = evdev_frame_append(frame, events, 3); + litest_assert_neg_errno_success(rc); + + litest_assert_int_eq(evdev_frame_get_count(frame), + ARRAY_LENGTH(events)); + litest_assert_int_eq(frame->max_size, ARRAY_LENGTH(events)); + + size_t nevents; + rc = memcmp(evdev_frame_get_events(frame, &nevents), + events, + sizeof(events)); + litest_assert_int_eq(rc, 0); + litest_assert_int_eq(nevents, ARRAY_LENGTH(events)); + + for (int v = 0; v < 2; v++) { + /* Appending SYN_REPORT changes the value to zero */ + rc = evdev_frame_append_one(frame, U(EVDEV_SYN_REPORT), v); + litest_assert_neg_errno_success(rc); + litest_assert_int_eq(evdev_frame_get_count(frame), + ARRAY_LENGTH(events)); + struct evdev_event *evs = + evdev_frame_get_events(frame, &nevents); + litest_assert(evdev_usage_eq(evs[2].usage, EVDEV_SYN_REPORT)); + litest_assert_int_eq(evs[2].value, v); + } + } } END_TEST diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.31.1/tools/libinput-record.c new/libinput-1.31.2/tools/libinput-record.c --- old/libinput-1.31.1/tools/libinput-record.c 2026-04-02 03:04:12.000000000 +0200 +++ new/libinput-1.31.2/tools/libinput-record.c 2026-05-14 12:56:17.000000000 +0200 @@ -257,6 +257,7 @@ usec_t time = input_event_time(ev); usec_t dt = usec_delta(time, last_time); + last_time = time; snprintf(desc, sizeof(desc), @@ -908,7 +909,7 @@ tool_type = "brush"; break; case LIBINPUT_TABLET_TOOL_TYPE_PENCIL: - tool_type = "brush"; + tool_type = "pencil"; break; case LIBINPUT_TABLET_TOOL_TYPE_AIRBRUSH: tool_type = "airbrush"; @@ -1404,7 +1405,7 @@ _autofree_ char *dmistr = strdup("unknown"); // if (dmi) { char buf[2048] = "unknown"; - size_t n = fread(buf, sizeof(buf), 1, dmi); // NOLINT: unix.Stream + size_t n = fread(buf, 1, sizeof(buf), dmi); // NOLINT: unix.Stream if (n > 0) { free(dmistr); dmistr = strndup(buf, n - 1); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libinput-1.31.1/tools/shared.c new/libinput-1.31.2/tools/shared.c --- old/libinput-1.31.1/tools/shared.c 2026-04-02 03:04:12.000000000 +0200 +++ new/libinput-1.31.2/tools/shared.c 2026-05-14 12:56:17.000000000 +0200 @@ -787,7 +787,7 @@ continue; const char *sysname = udev_device_get_sysname(device); - if (!strstartswith("event", sysname)) { + if (!strstartswith(sysname, "event")) { continue; }
