From 7ee78d9c1369033aa4f963e22d2864bbcda1fbff Mon Sep 17 00:00:00 2001 From: Erik Date: Sun, 14 Jun 2026 02:54:22 +0600 Subject: [PATCH] Forward axis relative direction to Wayland clients. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Libinput reports natural scrolling via AxisRelativeDirection. Qt sets QWheelEvent::inverted() from wl_pointer.axis_relative_direction. COSMIC was forwarding axis values but not the direction hint. Tested on Fedora 44 COSMIC Wayland with Telegram Desktop (native Wayland), natural scrolling enabled — horizontal touchpad swipes fixed. Assisted-by: AI (root-cause analysis) Signed-off-by: Erik --- src/input/mod.rs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/input/mod.rs b/src/input/mod.rs index 1114d50b..30e5d4f8 100644 --- a/src/input/mod.rs +++ b/src/input/mod.rs @@ -1003,6 +1003,10 @@ impl State { if let Some(horizontal_amount) = event.amount(Axis::Horizontal) { if horizontal_amount != 0.0 { frame = frame + .relative_direction( + Axis::Horizontal, + event.relative_direction(Axis::Horizontal), + ) .value(Axis::Horizontal, scroll_factor * horizontal_amount); if let Some(discrete) = event.amount_v120(Axis::Horizontal) { frame = frame.v120( @@ -1016,8 +1020,12 @@ impl State { } if let Some(vertical_amount) = event.amount(Axis::Vertical) { if vertical_amount != 0.0 { - frame = - frame.value(Axis::Vertical, scroll_factor * vertical_amount); + frame = frame + .relative_direction( + Axis::Vertical, + event.relative_direction(Axis::Vertical), + ) + .value(Axis::Vertical, scroll_factor * vertical_amount); if let Some(discrete) = event.amount_v120(Axis::Vertical) { frame = frame.v120( Axis::Vertical,