diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2024-02-03 09:00:08 +0400 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2024-02-03 09:00:08 +0400 |
| commit | b23dd4b800285f120ad556d77c2357b17c1ea6a2 (patch) | |
| tree | c565059c0b58f731025f251ed8910bd622f70708 | |
| parent | 1f72089a46a965fa98c833de3c76da2fb8b6a5f7 (diff) | |
| download | niri-b23dd4b800285f120ad556d77c2357b17c1ea6a2.tar.gz niri-b23dd4b800285f120ad556d77c2357b17c1ea6a2.tar.bz2 niri-b23dd4b800285f120ad556d77c2357b17c1ea6a2.zip | |
Respect natural-scroll for workspace switch gesture
| -rw-r--r-- | src/input.rs | 19 | ||||
| -rw-r--r-- | src/layout/mod.rs | 2 |
2 files changed, 15 insertions, 6 deletions
diff --git a/src/input.rs b/src/input.rs index a357eac1..f06f6142 100644 --- a/src/input.rs +++ b/src/input.rs @@ -1156,11 +1156,20 @@ impl State { ); } - fn on_gesture_swipe_update<I: InputBackend>(&mut self, event: I::GestureSwipeUpdateEvent) { - let res = self - .niri - .layout - .workspace_switch_gesture_update(event.delta_y()); + fn on_gesture_swipe_update<I: InputBackend>(&mut self, event: I::GestureSwipeUpdateEvent) + where + I::Device: 'static, + { + let mut delta_y = event.delta_y(); + + let device = event.device(); + if let Some(device) = (&device as &dyn Any).downcast_ref::<input::Device>() { + if device.config_scroll_natural_scroll_enabled() { + delta_y = -delta_y; + } + } + + let res = self.niri.layout.workspace_switch_gesture_update(delta_y); if let Some(output) = res { if let Some(output) = output { self.niri.queue_redraw(output); diff --git a/src/layout/mod.rs b/src/layout/mod.rs index 3dc47561..e50c52a2 100644 --- a/src/layout/mod.rs +++ b/src/layout/mod.rs @@ -1462,7 +1462,7 @@ impl<W: LayoutElement> Layout<W> { for monitor in monitors { if let Some(WorkspaceSwitch::Gesture(gesture)) = &mut monitor.workspace_switch { // Normalize like GNOME Shell's workspace switching. - let delta_y = -delta_y / 400.; + let delta_y = delta_y / 400.; let min = gesture.center_idx.saturating_sub(1) as f64; let max = (gesture.center_idx + 1).min(monitor.workspaces.len() - 1) as f64; |
