High-resolution scroll wheel support
This requires a kernel release with the matching features, scheduled for v5.0.
This includes a new event
LIBINPUT_EVENT_POINTER_AXIS_WHEEL and a new API
libinput_pointer_axis_get_value_v120(). I couldn't make the existing pointer axis events work with existing clients and a new event is necessary. The v120 API is necessary anyway but the only way to merge this into the existing axis events was to have those send discrete events of zero. Turns out that's not something callers expect because it never happened before
- xf86-input-libinput had a divide-by-zero bug (fixed in 0.28.2)
- weston ends up sending scroll stop events for discrete 0
- mutter does a lot of busywork for nothing to actually happen, which I guess is lucky
- kwin/wlroots are fine though
Where discrete 0 events end up on the Wayland protocol (all but kwin, iirc), XWayland would scroll 200% (first based on the value, then one full movement for the discrete event). So less than ideal.
libinput_pointer_axis_get_value_v120() is a mirror from the kernel API (itself a copy of the Windows API). The new event is sent for all wheel events, so callers can simply ignore any old axis events with source wheel - unless they want to use those for pointer emulation.