diff options
| -rw-r--r-- | Cargo.lock | 2 | ||||
| -rw-r--r-- | Cargo.toml | 4 | ||||
| -rw-r--r-- | src/handlers/mod.rs | 5 | ||||
| -rw-r--r-- | src/input.rs | 116 | ||||
| -rw-r--r-- | src/niri.rs | 4 |
5 files changed, 122 insertions, 9 deletions
@@ -1847,7 +1847,7 @@ checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9" [[package]] name = "smithay" version = "0.3.0" -source = "git+https://github.com/Smithay/smithay#e241ccbbc4dfc6ce38e33856d9d159e436db3b5e" +source = "git+https://github.com/YaLTeR/smithay.git?branch=pointer-gestures#07b89166679ae280acff8aff93d0ecbbbbbcef5c" dependencies = [ "appendlist", "bitflags 2.4.0", @@ -24,7 +24,8 @@ xcursor = "0.3.4" zbus = { version = "3.14.1" } [dependencies.smithay] -git = "https://github.com/Smithay/smithay" +git = "https://github.com/YaLTeR/smithay.git" +branch = "pointer-gestures" default-features = false features = [ "backend_drm", @@ -35,6 +36,7 @@ features = [ "backend_udev", "backend_winit", "desktop", + "libinput_1_19", "renderer_gl", "renderer_multi", "use_system_lib", diff --git a/src/handlers/mod.rs b/src/handlers/mod.rs index a496b341..782b7b37 100644 --- a/src/handlers/mod.rs +++ b/src/handlers/mod.rs @@ -12,8 +12,8 @@ use smithay::wayland::data_device::{ ServerDndGrabHandler, }; use smithay::{ - delegate_data_device, delegate_output, delegate_presentation, delegate_seat, - delegate_tablet_manager, + delegate_data_device, delegate_output, delegate_pointer_gestures, delegate_presentation, + delegate_seat, delegate_tablet_manager, }; use crate::Niri; @@ -40,6 +40,7 @@ impl SeatHandler for Niri { } delegate_seat!(Niri); delegate_tablet_manager!(Niri); +delegate_pointer_gestures!(Niri); impl DataDeviceHandler for Niri { type SelectionUserData = (); diff --git a/src/input.rs b/src/input.rs index 21b57e4a..05a7d0f1 100644 --- a/src/input.rs +++ b/src/input.rs @@ -2,13 +2,18 @@ use std::process::Command; use smithay::backend::input::{ AbsolutePositionEvent, Axis, AxisSource, ButtonState, Device, DeviceCapability, Event, - InputBackend, InputEvent, KeyState, KeyboardKeyEvent, PointerAxisEvent, PointerButtonEvent, - PointerMotionEvent, ProximityState, TabletToolButtonEvent, TabletToolEvent, - TabletToolProximityEvent, TabletToolTipEvent, TabletToolTipState, + GestureBeginEvent, GestureEndEvent, InputBackend, InputEvent, KeyState, KeyboardKeyEvent, + PointerAxisEvent, PointerButtonEvent, PointerMotionEvent, ProximityState, + TabletToolButtonEvent, TabletToolEvent, TabletToolProximityEvent, TabletToolTipEvent, + TabletToolTipState, }; use smithay::backend::libinput::LibinputInputBackend; use smithay::input::keyboard::{keysyms, FilterResult, KeysymHandle, ModifiersState}; -use smithay::input::pointer::{AxisFrame, ButtonEvent, MotionEvent, RelativeMotionEvent}; +use smithay::input::pointer::{ + AxisFrame, ButtonEvent, GestureHoldBeginEvent, GestureHoldEndEvent, GesturePinchBeginEvent, + GesturePinchEndEvent, GesturePinchUpdateEvent, GestureSwipeBeginEvent, GestureSwipeEndEvent, + GestureSwipeUpdateEvent, MotionEvent, RelativeMotionEvent, +}; use smithay::utils::SERIAL_COUNTER; use smithay::wayland::tablet_manager::{TabletDescriptor, TabletSeatTrait}; @@ -610,7 +615,108 @@ impl Niri { } } } - _ => {} + InputEvent::GestureSwipeBegin { event } => { + let serial = SERIAL_COUNTER.next_serial(); + let pointer = self.seat.get_pointer().unwrap(); + pointer.gesture_swipe_begin( + self, + &GestureSwipeBeginEvent { + serial, + time: event.time_msec(), + fingers: event.fingers(), + }, + ); + } + InputEvent::GestureSwipeUpdate { event } => { + let pointer = self.seat.get_pointer().unwrap(); + pointer.gesture_swipe_update( + self, + &GestureSwipeUpdateEvent { + time: event.time_msec(), + delta: smithay::backend::input::GestureSwipeUpdateEvent::delta(&event), + }, + ); + } + InputEvent::GestureSwipeEnd { event } => { + let serial = SERIAL_COUNTER.next_serial(); + let pointer = self.seat.get_pointer().unwrap(); + pointer.gesture_swipe_end( + self, + &GestureSwipeEndEvent { + serial, + time: event.time_msec(), + cancelled: event.cancelled(), + }, + ); + } + InputEvent::GesturePinchBegin { event } => { + let serial = SERIAL_COUNTER.next_serial(); + let pointer = self.seat.get_pointer().unwrap(); + pointer.gesture_pinch_begin( + self, + &GesturePinchBeginEvent { + serial, + time: event.time_msec(), + fingers: event.fingers(), + }, + ); + } + InputEvent::GesturePinchUpdate { event } => { + let pointer = self.seat.get_pointer().unwrap(); + pointer.gesture_pinch_update( + self, + &GesturePinchUpdateEvent { + time: event.time_msec(), + delta: smithay::backend::input::GesturePinchUpdateEvent::delta(&event), + scale: smithay::backend::input::GesturePinchUpdateEvent::scale(&event), + rotation: smithay::backend::input::GesturePinchUpdateEvent::rotation( + &event, + ), + }, + ); + } + InputEvent::GesturePinchEnd { event } => { + let serial = SERIAL_COUNTER.next_serial(); + let pointer = self.seat.get_pointer().unwrap(); + pointer.gesture_pinch_end( + self, + &GesturePinchEndEvent { + serial, + time: event.time_msec(), + cancelled: event.cancelled(), + }, + ); + } + InputEvent::GestureHoldBegin { event } => { + let serial = SERIAL_COUNTER.next_serial(); + let pointer = self.seat.get_pointer().unwrap(); + pointer.gesture_hold_begin( + self, + &GestureHoldBeginEvent { + serial, + time: event.time_msec(), + fingers: event.fingers(), + }, + ); + } + InputEvent::GestureHoldEnd { event } => { + let serial = SERIAL_COUNTER.next_serial(); + let pointer = self.seat.get_pointer().unwrap(); + pointer.gesture_hold_end( + self, + &GestureHoldEndEvent { + serial, + time: event.time_msec(), + cancelled: event.cancelled(), + }, + ); + } + InputEvent::TouchDown { .. } => (), + InputEvent::TouchMotion { .. } => (), + InputEvent::TouchUp { .. } => (), + InputEvent::TouchCancel { .. } => (), + InputEvent::TouchFrame { .. } => (), + InputEvent::Special(_) => (), } BackendAction::None diff --git a/src/niri.rs b/src/niri.rs index b7361e64..97195f8c 100644 --- a/src/niri.rs +++ b/src/niri.rs @@ -44,6 +44,7 @@ use smithay::utils::{ use smithay::wayland::compositor::{with_states, CompositorClientState, CompositorState}; use smithay::wayland::data_device::DataDeviceState; use smithay::wayland::output::OutputManagerState; +use smithay::wayland::pointer_gestures::PointerGesturesState; use smithay::wayland::presentation::PresentationState; use smithay::wayland::shell::wlr_layer::{Layer, WlrLayerShellState}; use smithay::wayland::shell::xdg::XdgShellState; @@ -86,6 +87,7 @@ pub struct Niri { pub output_manager_state: OutputManagerState, pub seat_state: SeatState<Self>, pub tablet_state: TabletManagerState, + pub pointer_gestures_state: PointerGesturesState, pub data_device_state: DataDeviceState, pub popups: PopupManager, pub presentation_state: PresentationState, @@ -131,6 +133,7 @@ impl Niri { let output_manager_state = OutputManagerState::new_with_xdg_output::<Self>(&display_handle); let mut seat_state = SeatState::new(); let tablet_state = TabletManagerState::new::<Self>(&display_handle); + let pointer_gestures_state = PointerGesturesState::new::<Self>(&display_handle); let data_device_state = DataDeviceState::new::<Self>(&display_handle); let presentation_state = PresentationState::new::<Self>(&display_handle, CLOCK_MONOTONIC as u32); @@ -243,6 +246,7 @@ impl Niri { output_manager_state, seat_state, tablet_state, + pointer_gestures_state, data_device_state, popups: PopupManager::default(), presentation_state, |
