input: implement wl_seat version 9
This commit is contained in:
parent
887e2b6cbc
commit
78b557b4a1
15 changed files with 91 additions and 20 deletions
|
|
@ -98,6 +98,11 @@ impl JaySeatEvents {
|
|||
});
|
||||
}
|
||||
if let Some(dist) = ps.px[axis].get() {
|
||||
self.client.event(AxisInverted {
|
||||
self_id: self.id,
|
||||
axis: axis as _,
|
||||
inverted: ps.inverted[axis].get() as _,
|
||||
});
|
||||
self.client.event(AxisPx {
|
||||
self_id: self.id,
|
||||
dist,
|
||||
|
|
|
|||
|
|
@ -902,7 +902,7 @@ impl Global for WlSeatGlobal {
|
|||
}
|
||||
|
||||
fn version(&self) -> u32 {
|
||||
8
|
||||
9
|
||||
}
|
||||
|
||||
fn break_loops(&self) {
|
||||
|
|
|
|||
|
|
@ -15,9 +15,9 @@ use {
|
|||
wl_keyboard::{self, WlKeyboard},
|
||||
wl_pointer::{
|
||||
self, PendingScroll, WlPointer, AXIS_DISCRETE_SINCE_VERSION,
|
||||
AXIS_SOURCE_SINCE_VERSION, AXIS_STOP_SINCE_VERSION,
|
||||
AXIS_VALUE120_SINCE_VERSION, POINTER_FRAME_SINCE_VERSION, WHEEL_TILT,
|
||||
WHEEL_TILT_SINCE_VERSION,
|
||||
AXIS_RELATIVE_DIRECTION_SINCE_VERSION, AXIS_SOURCE_SINCE_VERSION,
|
||||
AXIS_STOP_SINCE_VERSION, AXIS_VALUE120_SINCE_VERSION, IDENTICAL, INVERTED,
|
||||
POINTER_FRAME_SINCE_VERSION, WHEEL_TILT, WHEEL_TILT_SINCE_VERSION,
|
||||
},
|
||||
zwp_pointer_constraints_v1::{ConstraintType, SeatConstraintStatus},
|
||||
zwp_relative_pointer_v1::ZwpRelativePointerV1,
|
||||
|
|
@ -199,8 +199,16 @@ impl WlSeatGlobal {
|
|||
} => self.button_event(time_usec, button, state),
|
||||
|
||||
InputEvent::AxisSource { source } => self.pointer_owner.axis_source(source),
|
||||
InputEvent::Axis120 { dist, axis } => self.pointer_owner.axis_120(dist, axis),
|
||||
InputEvent::AxisPx { dist, axis } => self.pointer_owner.axis_px(dist, axis),
|
||||
InputEvent::Axis120 {
|
||||
dist,
|
||||
axis,
|
||||
inverted,
|
||||
} => self.pointer_owner.axis_120(dist, axis, inverted),
|
||||
InputEvent::AxisPx {
|
||||
dist,
|
||||
axis,
|
||||
inverted,
|
||||
} => self.pointer_owner.axis_px(dist, axis, inverted),
|
||||
InputEvent::AxisStop { axis } => self.pointer_owner.axis_stop(axis),
|
||||
InputEvent::AxisFrame { time_usec } => self.pointer_owner.frame(dev, self, time_usec),
|
||||
}
|
||||
|
|
@ -613,6 +621,13 @@ impl WlSeatGlobal {
|
|||
}
|
||||
}
|
||||
if let Some(delta) = event.px[i].get() {
|
||||
if p.seat.version >= AXIS_RELATIVE_DIRECTION_SINCE_VERSION {
|
||||
let direction = match event.inverted[i].get() {
|
||||
false => IDENTICAL,
|
||||
true => INVERTED,
|
||||
};
|
||||
p.send_axis_relative_direction(axis, direction);
|
||||
}
|
||||
p.send_axis(time, axis, delta);
|
||||
}
|
||||
if p.seat.version >= AXIS_STOP_SINCE_VERSION && event.stop[i].get() {
|
||||
|
|
|
|||
|
|
@ -40,12 +40,14 @@ impl PointerOwnerHolder {
|
|||
self.pending_scroll.source.set(Some(axis_source as _));
|
||||
}
|
||||
|
||||
pub fn axis_120(&self, delta: i32, axis: ScrollAxis) {
|
||||
pub fn axis_120(&self, delta: i32, axis: ScrollAxis, inverted: bool) {
|
||||
self.pending_scroll.v120[axis as usize].set(Some(delta));
|
||||
self.pending_scroll.inverted[axis as usize].set(inverted);
|
||||
}
|
||||
|
||||
pub fn axis_px(&self, delta: Fixed, axis: ScrollAxis) {
|
||||
pub fn axis_px(&self, delta: Fixed, axis: ScrollAxis, inverted: bool) {
|
||||
self.pending_scroll.px[axis as usize].set(Some(delta));
|
||||
self.pending_scroll.inverted[axis as usize].set(inverted);
|
||||
}
|
||||
|
||||
pub fn axis_stop(&self, axis: ScrollAxis) {
|
||||
|
|
|
|||
|
|
@ -28,16 +28,21 @@ pub const CONTINUOUS: u32 = 2;
|
|||
#[allow(dead_code)]
|
||||
pub const WHEEL_TILT: u32 = 3;
|
||||
|
||||
pub const IDENTICAL: u32 = 0;
|
||||
pub const INVERTED: u32 = 1;
|
||||
|
||||
pub const POINTER_FRAME_SINCE_VERSION: u32 = 5;
|
||||
pub const AXIS_SOURCE_SINCE_VERSION: u32 = 5;
|
||||
pub const AXIS_DISCRETE_SINCE_VERSION: u32 = 5;
|
||||
pub const AXIS_STOP_SINCE_VERSION: u32 = 5;
|
||||
pub const WHEEL_TILT_SINCE_VERSION: u32 = 6;
|
||||
pub const AXIS_VALUE120_SINCE_VERSION: u32 = 8;
|
||||
pub const AXIS_RELATIVE_DIRECTION_SINCE_VERSION: u32 = 9;
|
||||
|
||||
#[derive(Default, Debug)]
|
||||
pub struct PendingScroll {
|
||||
pub v120: [Cell<Option<i32>>; 2],
|
||||
pub inverted: [Cell<bool>; 2],
|
||||
pub px: [Cell<Option<Fixed>>; 2],
|
||||
pub stop: [Cell<bool>; 2],
|
||||
pub source: Cell<Option<u32>>,
|
||||
|
|
@ -51,6 +56,10 @@ impl PendingScroll {
|
|||
Cell::new(self.v120[0].take()),
|
||||
Cell::new(self.v120[1].take()),
|
||||
],
|
||||
inverted: [
|
||||
Cell::new(self.inverted[0].take()),
|
||||
Cell::new(self.inverted[1].take()),
|
||||
],
|
||||
px: [Cell::new(self.px[0].take()), Cell::new(self.px[1].take())],
|
||||
stop: [
|
||||
Cell::new(self.stop[0].take()),
|
||||
|
|
@ -114,6 +123,14 @@ impl WlPointer {
|
|||
})
|
||||
}
|
||||
|
||||
pub fn send_axis_relative_direction(&self, axis: u32, direction: u32) {
|
||||
self.seat.client.event(AxisRelativeDirection {
|
||||
self_id: self.id,
|
||||
axis,
|
||||
direction,
|
||||
})
|
||||
}
|
||||
|
||||
pub fn send_axis(&self, time: u32, axis: u32, value: Fixed) {
|
||||
self.seat.client.event(Axis {
|
||||
self_id: self.id,
|
||||
|
|
@ -123,12 +140,10 @@ impl WlPointer {
|
|||
})
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
pub fn send_frame(&self) {
|
||||
self.seat.client.event(Frame { self_id: self.id })
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
pub fn send_axis_source(&self, axis_source: u32) {
|
||||
self.seat.client.event(AxisSource {
|
||||
self_id: self.id,
|
||||
|
|
@ -136,7 +151,6 @@ impl WlPointer {
|
|||
})
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
pub fn send_axis_stop(&self, time: u32, axis: u32) {
|
||||
self.seat.client.event(AxisStop {
|
||||
self_id: self.id,
|
||||
|
|
@ -145,7 +159,6 @@ impl WlPointer {
|
|||
})
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
pub fn send_axis_discrete(&self, axis: u32, discrete: i32) {
|
||||
self.seat.client.event(AxisDiscrete {
|
||||
self_id: self.id,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue