From 3edaaf2dfc7f60e1ee5b82374872310ff688f44c Mon Sep 17 00:00:00 2001 From: Schmarni Date: Wed, 1 Oct 2025 00:00:12 +0200 Subject: [PATCH] fix(wayland/pointer): don't send axis_discrete events when using version 8 or above, as required per spec Signed-off-by: Schmarni --- src/wayland/core/pointer.rs | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/src/wayland/core/pointer.rs b/src/wayland/core/pointer.rs index debddf7..5d0a0f8 100644 --- a/src/wayland/core/pointer.rs +++ b/src/wayland/core/pointer.rs @@ -3,12 +3,12 @@ use crate::nodes::items::panel::Geometry; use crate::wayland::core::surface::Surface; use crate::wayland::{Client, WaylandResult}; use mint::Vector2; -use waynest_server::Client as _; use std::sync::Arc; use std::sync::Weak; use tokio::sync::Mutex; use tracing; use waynest::ObjectId; +use waynest_server::Client as _; pub use waynest_protocols::server::core::wayland::wl_pointer::*; @@ -150,13 +150,34 @@ impl Pointer { ) .await?; } + if self.version < 8 + && self.version >= 5 + && let Some(steps) = scroll_steps + { + self.axis_discrete(client, self.id, Axis::HorizontalScroll, steps.x as i32) + .await?; + self.axis_discrete(client, self.id, Axis::VerticalScroll, steps.y as i32) + .await?; + } + if self.version >= 8 + && let Some(steps) = scroll_steps + { + self.axis_value120( + client, + self.id, + Axis::HorizontalScroll, + (steps.x * 120.) as i32, + ) + .await?; + self.axis_value120( + client, + self.id, + Axis::VerticalScroll, + (steps.y * 120.) as i32, + ) + .await?; + } if self.version >= 5 { - if let Some(steps) = scroll_steps { - self.axis_discrete(client, self.id, Axis::HorizontalScroll, steps.x as i32) - .await?; - self.axis_discrete(client, self.id, Axis::VerticalScroll, steps.y as i32) - .await?; - } self.frame(client, self.id).await?; } Ok(())