1use crate::atspi_proxy;
14use serde::{Deserialize, Serialize};
15use zbus::zvariant::Type;
16
17#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize, Type)]
18#[repr(u32)]
19pub enum EventType {
20 KeyPressed,
21 KeyReleased,
22 ButtonPressed,
23 ButtonReleased,
24}
25
26#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize, Type)]
27#[repr(u32)]
28pub enum KeySynthType {
29 Press,
30 Release,
31 Pressrelease,
32 Sym,
33 String,
34 Lockmodifiers,
35 Unlockmodifiers,
36}
37
38#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize, Type)]
39pub struct DeviceEvent<'a> {
40 pub event_type: EventType,
41 pub id: i32,
42 pub hw_code: i32,
43 pub modifiers: i32,
44 pub timestamp: i32,
45 pub event_string: &'a str,
46 pub is_text: bool,
47}
48
49#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize, Type)]
50pub struct EventListenerMode {
51 pub synchronous: bool,
56 pub preemptive: bool,
59 pub global: bool,
62}
63
64#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize, Type)]
65pub struct KeyDefinition<'a> {
66 pub keycode: i32,
67 pub keysym: i32,
68 pub keystring: &'a str,
69 pub unused: i32,
70}
71
72#[atspi_proxy(
73 interface = "org.a11y.atspi.DeviceEventController",
74 default_path = "/org/a11y/atspi/registry/deviceeventcontroller",
75 default_service = "org.a11y.atspi.Registry"
76)]
77trait DeviceEventController {
78 fn deregister_device_event_listener(
80 &self,
81 listener: &zbus::zvariant::ObjectPath<'_>,
82 types: EventType,
83 ) -> zbus::Result<()>;
84
85 fn deregister_keystroke_listener(
87 &self,
88 listener: &zbus::zvariant::ObjectPath<'_>,
89 keys: &[KeyDefinition<'_>],
90 mask: u32,
91 type_: EventType,
92 ) -> zbus::Result<()>;
93
94 fn generate_keyboard_event(
96 &self,
97 keycode: i32,
98 keystring: &str,
99 type_: KeySynthType,
100 ) -> zbus::Result<()>;
101
102 fn generate_mouse_event(&self, x: i32, y: i32, event_name: &str) -> zbus::Result<()>;
104
105 fn notify_listeners_async(&self, event: &DeviceEvent<'_>) -> zbus::Result<()>;
107
108 fn notify_listeners_sync(&self, event: &DeviceEvent<'_>) -> zbus::Result<bool>;
110
111 fn register_device_event_listener(
113 &self,
114 listener: &zbus::zvariant::ObjectPath<'_>,
115 types: EventType,
116 ) -> zbus::Result<bool>;
117
118 fn register_keystroke_listener(
120 &self,
121 listener: &zbus::zvariant::ObjectPath<'_>,
122 keys: &[KeyDefinition<'_>],
123 mask: u32,
124 type_: &[EventType],
125 mode: &EventListenerMode,
126 ) -> zbus::Result<bool>;
127}