From b1f8fc88a10d6b47583019cc1f7f57858c34e38b Mon Sep 17 00:00:00 2001 From: Keenan Wresch Date: Thu, 4 Jul 2024 10:22:42 -0400 Subject: [PATCH] Allow Shift + Scroll to Horizontally Scroll in X11 and Wayland (#13676) Release Notes: - Allows shift + scroll horizontal scrolling on X11 and Wayland. [Screencast from 2024-06-29 17-17-59.webm](https://github.com/zed-industries/zed/assets/14155062/2cac77b9-ecc8-4ddb-b08d-b5d964c8dc84) --- crates/gpui/src/platform/linux/wayland/client.rs | 15 +++++++++++++++ crates/gpui/src/platform/linux/x11/client.rs | 7 ++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/crates/gpui/src/platform/linux/wayland/client.rs b/crates/gpui/src/platform/linux/wayland/client.rs index 2728a141ee..dd645e959b 100644 --- a/crates/gpui/src/platform/linux/wayland/client.rs +++ b/crates/gpui/src/platform/linux/wayland/client.rs @@ -1508,6 +1508,11 @@ impl Dispatch for WaylandClientStatePtr { if state.axis_source == AxisSource::Wheel { return; } + let axis = if state.modifiers.shift { + wl_pointer::Axis::HorizontalScroll + } else { + axis + }; let axis_modifier = match axis { wl_pointer::Axis::VerticalScroll => state.vertical_modifier, wl_pointer::Axis::HorizontalScroll => state.horizontal_modifier, @@ -1533,6 +1538,11 @@ impl Dispatch for WaylandClientStatePtr { discrete, } => { state.scroll_event_received = true; + let axis = if state.modifiers.shift { + wl_pointer::Axis::HorizontalScroll + } else { + axis + }; let axis_modifier = match axis { wl_pointer::Axis::VerticalScroll => state.vertical_modifier, wl_pointer::Axis::HorizontalScroll => state.horizontal_modifier, @@ -1555,6 +1565,11 @@ impl Dispatch for WaylandClientStatePtr { value120, } => { state.scroll_event_received = true; + let axis = if state.modifiers.shift { + wl_pointer::Axis::HorizontalScroll + } else { + axis + }; let axis_modifier = match axis { wl_pointer::Axis::VerticalScroll => state.vertical_modifier, wl_pointer::Axis::HorizontalScroll => state.horizontal_modifier, diff --git a/crates/gpui/src/platform/linux/x11/client.rs b/crates/gpui/src/platform/linux/x11/client.rs index 39c0b0fd6d..27ee1c8ea4 100644 --- a/crates/gpui/src/platform/linux/x11/client.rs +++ b/crates/gpui/src/platform/linux/x11/client.rs @@ -817,10 +817,15 @@ impl X11Client { if let Some(old_scroll) = old_scroll { let delta_scroll = old_scroll - new_scroll; + let (x, y) = if !modifiers.shift { + (0.0, delta_scroll) + } else { + (delta_scroll, 0.0) + }; window.handle_input(PlatformInput::ScrollWheel( crate::ScrollWheelEvent { position, - delta: ScrollDelta::Lines(Point::new(0.0, delta_scroll)), + delta: ScrollDelta::Lines(Point::new(x, y)), modifiers, touch_phase: TouchPhase::default(), },