Skip to content

Commit 61d3e72

Browse files
committed
Cleaner version for wayland.
1 parent 6e2dd50 commit 61d3e72

File tree

4 files changed

+30
-21
lines changed

4 files changed

+30
-21
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@ serde = {version = "1.0", features = ["derive"], optional=true}
1818
lazy_static = "1.4"
1919

2020
[features]
21+
default = []
2122
serialize = ["serde"]
2223
unstable_grab = ["evdev-rs", "epoll", "inotify"]
2324
wayland = ["input", "input-linux"]
24-
default = ["wayland"]
2525

2626
[target.'cfg(target_os = "macos")'.dependencies]
2727
cocoa = "0.26"

build.rs

Lines changed: 0 additions & 5 deletions
This file was deleted.

src/linux/mod.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,6 @@ mod wayland;
99

1010
#[cfg(feature = "wayland")]
1111
pub use wayland::*;
12+
13+
#[cfg(not(any(feature = "wayland", feature = "x11")))]
14+
compile_error!("Need to activate either wayland or x11 feature on linux");

src/linux/wayland/simulate.rs

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ use libc::{input_event, O_NONBLOCK};
99
use std::fs::{File, OpenOptions};
1010
use std::os::unix::fs::OpenOptionsExt;
1111
use std::sync::{LazyLock, Mutex};
12+
use std::time::{SystemTime, UNIX_EPOCH};
1213

1314
static HANDLE: LazyLock<Mutex<Option<UInputHandle<File>>>> = LazyLock::new(|| Mutex::new(None));
1415

@@ -48,26 +49,32 @@ impl Handle {
4849
Handle
4950
}
5051

52+
fn get_current_time() -> EventTime {
53+
let now = SystemTime::now()
54+
.duration_since(UNIX_EPOCH)
55+
.unwrap_or_default();
56+
EventTime::new(now.as_secs() as i64, now.subsec_micros() as i64)
57+
}
58+
5159
fn send_key_event(
5260
&self,
5361
handle: &UInputHandle<File>,
5462
ukey: UKey,
5563
state: KeyState,
5664
) -> Result<(), SimulateError> {
57-
const ZERO: EventTime = EventTime::new(0, 0);
58-
let event = KeyEvent::new(ZERO, ukey, state);
65+
let time = Self::get_current_time();
66+
let event = KeyEvent::new(time, ukey, state);
5967
let event: input_event = InputEvent::from(event).into();
60-
let sync = SynchronizeEvent::new(ZERO, SynchronizeKind::Report, 0);
68+
let sync = SynchronizeEvent::new(time, SynchronizeKind::Report, 0);
6169
let sync: input_event = InputEvent::from(sync).into();
62-
70+
6371
handle.write(&[event, sync]).map_err(|_| SimulateError)?;
6472
Ok(())
6573
}
6674

6775
pub fn send(&self, event: &EventType) -> Result<(), SimulateError> {
6876
let handle = HANDLE.lock().unwrap();
6977
if let Some(handle) = handle.as_ref() {
70-
const ZERO: EventTime = EventTime::new(0, 0);
7178
match event {
7279
EventType::KeyPress(key) => {
7380
if let Some(ukey) = ukey_from_key(*key) {
@@ -86,9 +93,10 @@ impl Handle {
8693
Button::Middle => UKey::ButtonMiddle,
8794
Button::Unknown(_) => return Err(SimulateError),
8895
};
89-
let event = KeyEvent::new(ZERO, ukey, KeyState::PRESSED);
96+
let time = Self::get_current_time();
97+
let event = KeyEvent::new(time, ukey, KeyState::PRESSED);
9098
let event: input_event = InputEvent::from(event).into();
91-
let sync = SynchronizeEvent::new(ZERO, SynchronizeKind::Report, 0);
99+
let sync = SynchronizeEvent::new(time, SynchronizeKind::Report, 0);
92100
let sync: input_event = InputEvent::from(sync).into();
93101
handle.write(&[event, sync]).map_err(|_| SimulateError)?;
94102
}
@@ -99,29 +107,32 @@ impl Handle {
99107
Button::Middle => UKey::ButtonMiddle,
100108
Button::Unknown(_) => return Err(SimulateError),
101109
};
102-
let event = KeyEvent::new(ZERO, ukey, KeyState::RELEASED);
110+
let time = Self::get_current_time();
111+
let event = KeyEvent::new(time, ukey, KeyState::RELEASED);
103112
let event: input_event = InputEvent::from(event).into();
104-
let sync = SynchronizeEvent::new(ZERO, SynchronizeKind::Report, 0);
113+
let sync = SynchronizeEvent::new(time, SynchronizeKind::Report, 0);
105114
let sync: input_event = InputEvent::from(sync).into();
106115
handle.write(&[event, sync]).map_err(|_| SimulateError)?;
107116
}
108117
EventType::MouseMove { x, y } => {
109-
let event_x = RelativeEvent::new(ZERO, RelativeAxis::X, *x as i32);
118+
let time = Self::get_current_time();
119+
let event_x = RelativeEvent::new(time, RelativeAxis::X, *x as i32);
110120
let event_x: input_event = InputEvent::from(event_x).into();
111-
let event_y = RelativeEvent::new(ZERO, RelativeAxis::Y, *y as i32);
121+
let event_y = RelativeEvent::new(time, RelativeAxis::Y, *y as i32);
112122
let event_y: input_event = InputEvent::from(event_y).into();
113-
let sync = SynchronizeEvent::new(ZERO, SynchronizeKind::Report, 0);
123+
let sync = SynchronizeEvent::new(time, SynchronizeKind::Report, 0);
114124
let sync: input_event = InputEvent::from(sync).into();
115125
handle
116126
.write(&[event_x, event_y, sync])
117127
.map_err(|_| SimulateError)?;
118128
}
119129
EventType::Wheel { delta_x, delta_y } => {
120-
let event_x = RelativeEvent::new(ZERO, RelativeAxis::Wheel, *delta_x as i32);
130+
let time = Self::get_current_time();
131+
let event_x = RelativeEvent::new(time, RelativeAxis::Wheel, *delta_x as i32);
121132
let event_x: input_event = InputEvent::from(event_x).into();
122-
let event_y = RelativeEvent::new(ZERO, RelativeAxis::Wheel, *delta_y as i32);
133+
let event_y = RelativeEvent::new(time, RelativeAxis::Wheel, *delta_y as i32);
123134
let event_y: input_event = InputEvent::from(event_y).into();
124-
let sync = SynchronizeEvent::new(ZERO, SynchronizeKind::Report, 0);
135+
let sync = SynchronizeEvent::new(time, SynchronizeKind::Report, 0);
125136
let sync: input_event = InputEvent::from(sync).into();
126137
handle
127138
.write(&[event_x, event_y, sync])

0 commit comments

Comments
 (0)