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

Attachment: signature.asc
Description: PGP signature

Reply via email to