libinput 1.29-rc1 (1.28.901) is now available. This release brings a large number of internal changes, so we're going through the release-candidate process to iron out potential issues before the proper release. Expect the final 1.29 release in the next few weeks, depending on how much testing feedback we get.
The vast majority of patches this cycle were internal rework but we do have a few notable user-visible changes. For scroll wheel mice we have a new heuristic for detecting inadvertent scroll wheel movement. This should improve scroll wheel responsiveness for most devices. Some Asus "ASUE ..." touchpads had quite jerky motion and cursor jumps. This was caused by (kernel-triggered) key repeat events that weren't fully ignored by libinput. This issue is fixed now. Virtual devices (e.g. those created by uinput) are now detected in libinput and some internal features are disabled (currently the scroll wheel heuristics and tablet smoothing). If a device is software-controlled anyway we can punt these heuristics to said software. A new set of configuration options are available with libinput_tablet_tool_config_eraser_button_set_button and libinput_tablet_tool_config_eraser_button_set_mode and the corresponding get/get_default calls. An eraser button on a tablet tool is one hardcoded (in the firmware, as per MS specs) to emulate the pen going out of proximity and immediately re-entering proximity as eraser - as if the pen was inverted to use the eraser end. With the new configuration options users can now opt to have those eraser buttons send an actual button event instead. The biggest internal change is the implementation of an internal plugin pipeline. Kernel evdev event frames are now passed through a pipeline of plugins that can modify and/or emulate additional events and frames in the process. This allowed us to move a few internal features to plugins, making them more self-contained and easier to maintain. There is no public plugin interface yet, we're hoping to ship one in the next version once we know the internal pipeline works fine. This rework came on top of a few code modernisation features such as finally using __attribute__((cleanup)), improvements to the test suite and use of clang-format for consistency in the code. The mtdev dependency is now optional but should generally be left enabled to support kernel multitouch protocol A devices. And of course we have the usual assortment of device-specific quirks and fixes. As usual, the git shortlog is below. Araz Abdyev (1): quirks: add touchpad quirk for ThinkBook 16 G7+ ASP Benjamin Tissoires (2): CI: replace b2c with virtme-ng CI: run marge-bot pipelines as priority:high Borui Wang (1): quirks: disable BTN_RIGHT on MS Surface Pro Flex Keyboard Jan Engelhardt (1): Teach meson about pkgconfig Requires.private José Expósito (10): quirks: add Contour Design RollerMouse USB Receiver wheel: Remove unused argument from fallback_rotate_wheel() wheel: Remove unused argument from fallback_wheel_process_relative() wheel: Use libinput_device_has_capability() wheel: Rename scroll timeout callback function fallback: Remove fallback_init_debounce() declaration wheel: Drop high-resolution wheel emulation workaround wheel: Remove unnecessary pending event evdev: Handle scroll wheel with a plugin tools/libinput-replay: Warn if writing to local-overrides fails K900 (1): quirks: add quirk for Asus ROG Flow Z13 2025 (GZ302EA) tablet Kacper Piwiński (5): util: change n type to size_t in strneq util: use already computed strlen util: don't call function in macro argument util: don't call function in macro argument v2 util: use already computed strlen v2 Peter Hutterer (208): CI: bump to FreeBSD 14.2 CI: disable docs on the arch build test: re-enable the selftests tools/record: correct the --help output for autorestart test: fix wacom test devices to use pressure 0 on proximity out test: abort litest_wait_for_events() if we don't get events after 2s test: switch to litest_dispatch() test: add missing proximity timeouts to the tablet tests test: print drained events when draining typed events test: allow passing func/line up from litest_abort_msg() test: use a single litest_timeout function only test: make the timeout functions auto-dispatching test: use the local variable for njobs, not the global one test: split litest's main() into a separate file util: add a newtype macro Add a few 0 enum values to shut up clang-tidy tools: add missing include test: rename test-util-includes.c to .c.in util: use a late declaration to avoid one ifdef util: change the builddir_lookup() to return a boolean util: shut up clang-tidy about our use of strcat util: fix a memleak in mkdir_p tools: disable clang-tidy warning about using floats for loop counters udev: remove accidentally-checked in file Add a few missing includes for config.h util: add some extra strv helpers tablet: revamp the tablet pressure range handling Add a clang-tidy file CI: replace the scan-build job with a clang-tidy job util: add a wrapper for the C23 auto keyword test: remove a race condition test: correct the libevdev initialization in two tests test: switch some xasprintf to strdup_printf() test: modernize a test slightly test: indentation fixes test: improve the direct tool switch test test: add litest_with_event_frame() to make things easier to visualize test: mark a checkpoint when asserting a tip or button event test: disable the proximity timer for the touch arbitration test test: annotate/shorten a test case test: print the full test result in the list of failed tests test: fix missing SYN_REPORT events between events test: combine two REL_WHEEL_HI_RES events into one test: convert push/pop event frames to with_event_frame test: properly batch litest events Remove empty lines between closing braces CI: check for empty lines between closing braces util: add various helper functions to use __attribute__(cleanup) util: add a list helper for handing a pointer to a list util: define a cleanup for stringbuf Define a set of cleanup helpers util: use cleanup in the event printing helpers tools: use __attribute__(cleanup) quirks: use __attribute__(cleanup) test: use __attribute__(cleanup) in the litest-runner test: use __attribute__(cleanup) in litest test: use __attribute__(cleanup) in the path tests test: use __attribute__(cleanup) in the switch tests test: remove an unused variable in the totem tests test: use __attribute__(cleanup) for the test libinput contexts test: rename litest_delete_device to litest_device_destroy util: add an _unused_ macro and replace LIBINPUT_UNUSED test: auto-unref the litest devices Use _unref_ for the udev handling in path and udev seat implementations test: use __attribute__(cleanup) in udev tests test: parametrize some of the misc tests test: use litest_dispatch() in litest_wait_for_events() test: rewrite the udev seat change test test: improve debugging for one of the tablet tests quirks: add quirk for the RazerBladeLate2020Base keyboard evdev: use autofree for the sysname utils: add strv_find() test: call rmdir for directories, not unlink CI: bump to Ubuntu 24.04 util: add the macros required for magic vararg expansion Constify libinput_config_accel_set_points() meson.build: fix detection of C23 auto CI: update to latest ci-templates CI: bump to Ubuntu 25.04 gestures: rewrite the gesture state transition debugging code Fix links to point to the current doc pages meson.build: don't error on deprecated declarations with -Werror CI: bump to use Fedora 42 test: improve an error message for unhandled parameter types test: improve an error message for an unlikely error util: move zalloc to util-mem.h util: add a helper to find substrings in a strv util: add a helper to find files in a set of directories util: add an rmdir_r helper function util: add a tmpdir helper test: add litest_assert_not_reached() test: add litest_assert_str_in/not_in() helpers evdev: Handle MSC_SERIAL better in the event log print util: add a number of list helpers test: add helpers for private data handling in tests test: add litest_log_group() for easier test log grouping util: return early when listing files from a NULL directory list tablet: shut up deprecated declarations warnings Move libinput_now() to our timer.c helper functions Move the log #defines and declarations to a separate header Add an evdev_frame wrapper struct evdev: use frame-based dispatching of events Introduce our own evdev_event struct Switch the fallback and touchpad backends to use struct evdev_event Switch the tablet backend to use struct evdev_event Switch the totem backend to struct evdev_event Switch the tablet pad backend to use struct evdev_event Drop struct input-event from dispatch->interface->process Use a newtype for the keycode, button code and pad button Switch some uint32_t usage loops to use evdev_usage_next tablet: disable smoothing for uinput devices test: insert libinput_dispatch() on the secondary context to avoid timeouts test: fix the valgrind/debugger check doc/user: device quirk matches have to be 0x prefixed touchpad: remove a workaround for an old libevdev bug test: print the log message to a buffer, then print the whole lot util: add safe_atou64 for 64-bit values util: add ANSI escape codes for rgb and background rgb test: add logcapturing to litest test: add litest_assert_strv_substring util: fix a memleak for the dwtp string test: restore prefix search in the format Add an internal plugin system to libinput evdev: don't notify plugins about devices we will never add plugin: add ability to queue more events in the evdev_frame callback plugin: allow a prefix during event frame printing plugin: wrap timers for use by plugins plugins: Add the ability for a plugin to inject evdev frames evdev: implement our evdev device dispatch as plugin util: add a bitmask_t type for bit masks tablet: move the libwacom stylus query out into the caller tablet: keep a ref to the last tablet in proximity for each tool tablet: implement the tablet double tool quirk as plugin tablet: implement the tablet proximity timer as plugin Add an API for configurable eraser button behavior plugin: add internal api to notify plugins of tool configuration tablet: implement eraser button disabling tools: add pressure threshold support to analyze per-slot-delta tablet: take an uint32_t for the eraser button tablet: always allow BTN_STYLUS* for eraser button configuration tools: disable GTK's deprecated warnings Remove unused pc.in files zsh: fix shell completion for set-area zsh: add shell completion for the eraser button test: handle plugin bugs and log messages in the test suite plugin: only load the plugin system once plugin: log a debug message when a plugin terminates the event frame list plugin: require plugins to enable the frame callback for a device touchpad: fix a debug message "released" -> "is no longer palm" wheel: match the state debug prefix with our other debug logs util: add white to the ansi color escape codes util: fix the ANSI escape codes for bright colors, add some more evdev: replace get_key_type with evdev_usage_is_button/key quirks: add a helper function for returning quirks for a device evdev: replace the debounce handler with a plugin tools: per-slot-delta initialize the pressure thresholds to zero tools: handle an empty quirks list in the libinput recording plugins: fix some indentation in the eraser button plugin plugins: fix the timer name for the tablet proximity timer evdev: rename evdev_device_dispatch_one to evdev_device_dispatch_frame doc/user: update architecture docs with the plugin pipeline util: allow strv_from_string() with NULL nelems test: replace two goto outs with _unref_ touchpad: rename a function for consistency test: only check error messages for bugs meson.build: require libevdev 1.10 test: fix automatic -j0 in debugger test: replace some litest_test_param_fetch with getters test: add missing NULL for a test device's udev properties test: move a comment to avoid confusing clang-format test: switch more tests to litest_with_parameters test: add clang-format directives to prevent formatting Add trailing commas to prevent clang-format oddities test: disable clang-format in test collections test: add missing libevdev and util-mem includes Run clang-format over the code Add a clang-format file for consistent code formatting test: update a test for current kernels test: correct two capability checks plugin: only register the wheel plugin on devices that have a wheel git: add git-blame-ignore-revs to ignore the clang-format commits Add evdev_frame_append_one() Switch our internal dispatch interface to take an evdev frame Move mtdev into a plugin CI: retry valgrind jobs on failure test: if we fail to receive our udev device, abort with a useful error test: keep waiting for a udev device on EAGAIN test: de-duplicate some pad event handling with a helper test: write pad events with a SYN_REPORT 0 evdev: discard any frame with EV_SYN SYN_REPORT 1 test: parametrize a test instead of in-test looping plugin: use evdev_frame_append_one() for simpler code plugin/wheel: don't cancel the timer before re-setting it plugin/wheel: ratelimit the 'missing hires' warning to once a day CI: drop the separate python-format job pre-commit: bump to latest ruff-format plugin/wheel: tighten the wheel debouncing code plugin/wheel: don't accumulate for low HID resolution multipliers tablet: fix segfault on pressure-less tablets test: add missing tip events in the tablet calibration test test: fix failing tablet tests for pressure-less tablets test: sort the litest tablet device list alphabetically again test: add a test device for a pressureless tablet test: fix a race condition during a switch test Make the model quirk check available on the libinput device quirks: sort the quirk enum alphabetically plugins: restore the wheel plugin specifically for the MX Master 3 libinput 1.28.901 Ryan Hendrickson (3): evdev: detect virtual devices wheel: add and use ignore_small_hi_res_movements tools: store virtual property in recordings Sebastian Lövdahl (1): Fix typos in index.rst Subhaditya Nath (1): zsh: add missing backslash Wren Turkal (1): Fix some inconsistent whitespace. Yang Kun (1): quirks: modify touchpad quirk for ThinkBook G7+ cptpcrd (1): pad: honor send-events mode tokyo4j (1): gestures: fix acceleration in 3fg drag
signature.asc
Description: PGP signature