From 2c1d2ce0d33401990734d07d5910def97dc82998 Mon Sep 17 00:00:00 2001 From: Ivan Molodetskikh Date: Sat, 2 Sep 2023 15:09:07 +0400 Subject: Add touchpad gesture support --- src/input.rs | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 111 insertions(+), 5 deletions(-) (limited to 'src/input.rs') 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 -- cgit