mirror of
https://github.com/niri-wm/niri.git
synced 2026-06-22 02:01:55 +07:00
Add touchpad gesture support
This commit is contained in:
Generated
+1
-1
@@ -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",
|
||||
|
||||
+3
-1
@@ -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",
|
||||
|
||||
+3
-2
@@ -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 = ();
|
||||
|
||||
+111
-5
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user