diff --git a/winit-wayland/src/seat/pointer/mod.rs b/winit-wayland/src/seat/pointer/mod.rs index 3e7df4b6d..f266b4d0c 100644 --- a/winit-wayland/src/seat/pointer/mod.rs +++ b/winit-wayland/src/seat/pointer/mod.rs @@ -195,6 +195,7 @@ impl PointerHandler for WinitState { // Get the current phase. let mut pointer_data = pointer.winit_data().inner.lock().unwrap(); + let has_value120_scroll = horizontal.value120 != 0 || vertical.value120 != 0; let has_discrete_scroll = horizontal.discrete != 0 || vertical.discrete != 0; // Figure out what to do about start/ended phases here. @@ -206,7 +207,7 @@ impl PointerHandler for WinitState { } else { match pointer_data.phase { // Discrete scroll only results in moved events. - _ if has_discrete_scroll => TouchPhase::Moved, + _ if has_value120_scroll || has_discrete_scroll => TouchPhase::Moved, TouchPhase::Started | TouchPhase::Moved => TouchPhase::Moved, _ => TouchPhase::Started, } @@ -217,7 +218,13 @@ impl PointerHandler for WinitState { // Mice events have both pixel and discrete delta's at the same time. So prefer // the discrete values if they are present. - let delta = if has_discrete_scroll { + let delta = if has_value120_scroll { + // NOTE: Wayland sign convention is the inverse of winit. + MouseScrollDelta::LineDelta( + (-horizontal.value120) as f32 / 120., + (-vertical.value120) as f32 / 120., + ) + } else if has_discrete_scroll { // NOTE: Wayland sign convention is the inverse of winit. MouseScrollDelta::LineDelta( (-horizontal.discrete) as f32, diff --git a/winit/src/changelog/unreleased.md b/winit/src/changelog/unreleased.md index b4bfe7e76..c2a9e22c0 100644 --- a/winit/src/changelog/unreleased.md +++ b/winit/src/changelog/unreleased.md @@ -268,3 +268,4 @@ changelog entry. - On Windows, `Window::set_theme` will change the title bar color immediately now. - On Windows 11, prevent incorrect shifting when dragging window onto a monitor with different DPI. - On Web, device events are emitted regardless of cursor type. +- On Wayland, `axis_value120` scroll events now generate `MouseScrollDelta::LineDelta`