cli: add seat-test
This commit is contained in:
parent
b20abd28d0
commit
2ced50f3a7
11 changed files with 559 additions and 7 deletions
152
src/ifs/jay_seat_events.rs
Normal file
152
src/ifs/jay_seat_events.rs
Normal file
|
|
@ -0,0 +1,152 @@
|
|||
use {
|
||||
crate::{
|
||||
backend::{self, KeyState},
|
||||
client::Client,
|
||||
fixed::Fixed,
|
||||
ifs::wl_seat::{wl_pointer::PendingScroll, SeatId},
|
||||
leaks::Tracker,
|
||||
object::Object,
|
||||
state::DeviceHandlerData,
|
||||
wire::{jay_seat_events::*, JaySeatEventsId},
|
||||
xkbcommon::ModifierState,
|
||||
},
|
||||
std::rc::Rc,
|
||||
};
|
||||
|
||||
pub struct JaySeatEvents {
|
||||
pub id: JaySeatEventsId,
|
||||
pub client: Rc<Client>,
|
||||
pub tracker: Tracker<Self>,
|
||||
}
|
||||
|
||||
impl JaySeatEvents {
|
||||
pub fn send_modifiers(&self, seat: SeatId, mods: &ModifierState) {
|
||||
self.client.event(Modifiers {
|
||||
self_id: self.id,
|
||||
seat: seat.raw(),
|
||||
modifiers: mods.mods_effective,
|
||||
group: mods.group,
|
||||
});
|
||||
}
|
||||
|
||||
pub fn send_key(&self, seat: SeatId, time_usec: u64, key: u32, state: KeyState) {
|
||||
self.client.event(Key {
|
||||
self_id: self.id,
|
||||
seat: seat.raw(),
|
||||
time_usec,
|
||||
key,
|
||||
state: state as u32,
|
||||
});
|
||||
}
|
||||
|
||||
pub fn send_pointer_abs(&self, seat: SeatId, time_usec: u64, x: Fixed, y: Fixed) {
|
||||
self.client.event(PointerAbs {
|
||||
self_id: self.id,
|
||||
seat: seat.raw(),
|
||||
time_usec,
|
||||
x,
|
||||
y,
|
||||
});
|
||||
}
|
||||
|
||||
pub fn send_pointer_rel(
|
||||
&self,
|
||||
seat: SeatId,
|
||||
time_usec: u64,
|
||||
x: Fixed,
|
||||
y: Fixed,
|
||||
dx: Fixed,
|
||||
dy: Fixed,
|
||||
dx_unaccelerated: Fixed,
|
||||
dy_unaccelerated: Fixed,
|
||||
) {
|
||||
self.client.event(PointerRel {
|
||||
self_id: self.id,
|
||||
seat: seat.raw(),
|
||||
time_usec,
|
||||
x,
|
||||
y,
|
||||
dx,
|
||||
dy,
|
||||
dx_unaccelerated,
|
||||
dy_unaccelerated,
|
||||
});
|
||||
}
|
||||
|
||||
pub fn send_button(&self, seat: SeatId, time_usec: u64, button: u32, state: KeyState) {
|
||||
self.client.event(Button {
|
||||
self_id: self.id,
|
||||
seat: seat.raw(),
|
||||
time_usec,
|
||||
button,
|
||||
state: state as u32,
|
||||
});
|
||||
}
|
||||
|
||||
pub fn send_axis(
|
||||
&self,
|
||||
seat: SeatId,
|
||||
time_usec: u64,
|
||||
dev: &DeviceHandlerData,
|
||||
ps: &PendingScroll,
|
||||
) {
|
||||
if let Some(source) = ps.source.get() {
|
||||
self.client.event(AxisSource {
|
||||
self_id: self.id,
|
||||
source,
|
||||
});
|
||||
}
|
||||
for axis in 0..1 {
|
||||
if let Some(dist) = ps.v120[axis].get() {
|
||||
self.client.event(Axis120 {
|
||||
self_id: self.id,
|
||||
dist,
|
||||
axis: axis as _,
|
||||
});
|
||||
let px = (dist as f64 / backend::AXIS_120 as f64) * dev.px_per_scroll_wheel.get();
|
||||
self.client.event(AxisPx {
|
||||
self_id: self.id,
|
||||
dist: Fixed::from_f64(px),
|
||||
axis: axis as _,
|
||||
});
|
||||
} else if let Some(dist) = ps.px[axis].get() {
|
||||
self.client.event(AxisPx {
|
||||
self_id: self.id,
|
||||
dist,
|
||||
axis: axis as _,
|
||||
});
|
||||
}
|
||||
if ps.stop[axis].get() {
|
||||
self.client.event(AxisStop {
|
||||
self_id: self.id,
|
||||
axis: axis as _,
|
||||
});
|
||||
}
|
||||
}
|
||||
self.client.event(AxisFrame {
|
||||
self_id: self.id,
|
||||
seat: seat.raw(),
|
||||
time_usec,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
object_base! {
|
||||
JaySeatEvents;
|
||||
}
|
||||
|
||||
impl Object for JaySeatEvents {
|
||||
fn num_requests(&self) -> u32 {
|
||||
0
|
||||
}
|
||||
|
||||
fn break_loops(&self) {
|
||||
self.client
|
||||
.state
|
||||
.testers
|
||||
.borrow_mut()
|
||||
.remove(&(self.client.id, self.id));
|
||||
}
|
||||
}
|
||||
|
||||
simple_add_obj!(JaySeatEvents);
|
||||
Loading…
Add table
Add a link
Reference in a new issue