atspi_common/events/
window.rs

1#[cfg(feature = "zbus")]
2use crate::error::AtspiError;
3#[cfg(feature = "zbus")]
4use crate::events::EventBody;
5#[cfg(feature = "zbus")]
6use crate::events::MessageConversion;
7use crate::events::{
8	DBusInterface, DBusMatchRule, DBusMember, EventBodyOwned, RegistryEventString,
9};
10use crate::object_ref::ObjectRefOwned;
11#[cfg(feature = "zbus")]
12use crate::{EventProperties, ObjectRef};
13use serde::Deserialize;
14use serde::Serialize;
15#[cfg(feature = "zbus")]
16use zbus::message::{Body as DbusBody, Header};
17
18#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Eq, Hash, Default)]
19pub struct PropertyChangeEvent {
20	/// The [`crate::ObjectRef`] which the event applies to.
21	pub item: ObjectRefOwned,
22	pub property: String,
23}
24
25impl_event_type_properties_for_event!(PropertyChangeEvent);
26
27/// The window has been minimized.
28#[derive(Debug, PartialEq, Clone, serde::Serialize, serde::Deserialize, Eq, Hash, Default)]
29pub struct MinimizeEvent {
30	/// The application which has been minimized.
31	pub item: ObjectRefOwned,
32}
33
34impl_event_type_properties_for_event!(MinimizeEvent);
35
36/// The window has been maximized.
37#[derive(Debug, PartialEq, Clone, serde::Serialize, serde::Deserialize, Eq, Hash, Default)]
38pub struct MaximizeEvent {
39	/// The application which has been maximized.
40	pub item: ObjectRefOwned,
41}
42
43impl_event_type_properties_for_event!(MaximizeEvent);
44
45#[derive(Debug, PartialEq, Clone, serde::Serialize, serde::Deserialize, Eq, Hash, Default)]
46pub struct RestoreEvent {
47	/// The [`crate::ObjectRef`] which the event applies to.
48	pub item: ObjectRefOwned,
49}
50
51impl_event_type_properties_for_event!(RestoreEvent);
52
53/// A window has been closed.
54#[derive(Debug, PartialEq, Clone, serde::Serialize, serde::Deserialize, Eq, Hash, Default)]
55pub struct CloseEvent {
56	/// The application which has been closed.
57	pub item: ObjectRefOwned,
58}
59
60impl_event_type_properties_for_event!(CloseEvent);
61
62/// A new window has been created.
63#[derive(Debug, PartialEq, Clone, serde::Serialize, serde::Deserialize, Eq, Hash, Default)]
64pub struct CreateEvent {
65	/// An application to query for additional events from.
66	pub item: ObjectRefOwned,
67}
68
69impl_event_type_properties_for_event!(CreateEvent);
70
71#[derive(Debug, PartialEq, Clone, serde::Serialize, serde::Deserialize, Eq, Hash, Default)]
72pub struct ReparentEvent {
73	/// The [`crate::ObjectRef`] which the event applies to.
74	pub item: ObjectRefOwned,
75}
76
77impl_event_type_properties_for_event!(ReparentEvent);
78
79/// A new virtual desktop has been created.
80#[derive(Debug, PartialEq, Clone, serde::Serialize, serde::Deserialize, Eq, Hash, Default)]
81pub struct DesktopCreateEvent {
82	/// A reference to a new desktop
83	pub item: ObjectRefOwned,
84}
85
86impl_event_type_properties_for_event!(DesktopCreateEvent);
87
88/// A virtual desktop has been deleted.
89#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Eq, Hash, Default)]
90pub struct DesktopDestroyEvent {
91	/// A reference to the destroyed desktop.
92	pub item: ObjectRefOwned,
93}
94
95impl_event_type_properties_for_event!(DesktopDestroyEvent);
96
97#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Eq, Hash, Default)]
98pub struct DestroyEvent {
99	/// The [`crate::ObjectRef`] which the event applies to.
100	pub item: ObjectRefOwned,
101}
102impl_event_type_properties_for_event!(DestroyEvent);
103
104#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Eq, Hash, Default)]
105pub struct ActivateEvent {
106	/// The [`crate::ObjectRef`] which the event applies to.
107	pub item: ObjectRefOwned,
108}
109
110impl_event_type_properties_for_event!(ActivateEvent);
111
112#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Eq, Hash, Default)]
113pub struct DeactivateEvent {
114	/// The [`crate::ObjectRef`] which the event applies to.
115	pub item: ObjectRefOwned,
116}
117
118impl_event_type_properties_for_event!(DeactivateEvent);
119
120#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Eq, Hash, Default)]
121pub struct RaiseEvent {
122	/// The [`crate::ObjectRef`] which the event applies to.
123	pub item: ObjectRefOwned,
124}
125
126impl_event_type_properties_for_event!(RaiseEvent);
127
128#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Eq, Hash, Default)]
129pub struct LowerEvent {
130	/// The [`crate::ObjectRef`] which the event applies to.
131	pub item: ObjectRefOwned,
132}
133
134impl_event_type_properties_for_event!(LowerEvent);
135
136#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Eq, Hash, Default)]
137pub struct MoveEvent {
138	/// The [`crate::ObjectRef`] which the event applies to.
139	pub item: ObjectRefOwned,
140}
141
142impl_event_type_properties_for_event!(MoveEvent);
143
144/// A window has been resized.
145#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Eq, Hash, Default)]
146pub struct ResizeEvent {
147	/// The application which has been resized.
148	pub item: ObjectRefOwned,
149}
150
151impl_event_type_properties_for_event!(ResizeEvent);
152
153#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Eq, Hash, Default)]
154pub struct ShadeEvent {
155	/// The [`crate::ObjectRef`] which the event applies to.
156	pub item: ObjectRefOwned,
157}
158
159impl_event_type_properties_for_event!(ShadeEvent);
160
161#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Eq, Hash, Default)]
162pub struct UUshadeEvent {
163	/// The [`crate::ObjectRef`] which the event applies to.
164	pub item: ObjectRefOwned,
165}
166
167impl_event_type_properties_for_event!(UUshadeEvent);
168
169#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Eq, Hash, Default)]
170pub struct RestyleEvent {
171	/// The [`crate::ObjectRef`] which the event applies to.
172	pub item: ObjectRefOwned,
173}
174
175impl_event_type_properties_for_event!(RestyleEvent);
176
177impl_member_interface_registry_string_and_match_rule_for_event!(
178	PropertyChangeEvent,
179	"PropertyChange",
180	"org.a11y.atspi.Event.Window",
181	"window:property-change",
182	"type='signal',interface='org.a11y.atspi.Event.Window',member='PropertyChange'"
183);
184
185#[cfg(feature = "zbus")]
186impl MessageConversion<'_> for PropertyChangeEvent {
187	type Body<'a> = EventBody<'a>;
188
189	fn from_message_unchecked_parts(item: ObjectRef, body: DbusBody) -> Result<Self, AtspiError> {
190		let mut body = body.deserialize_unchecked::<Self::Body<'_>>()?;
191		Ok(Self { item: item.into(), property: body.take_kind() })
192	}
193
194	fn from_message_unchecked(msg: &zbus::Message, header: &Header) -> Result<Self, AtspiError> {
195		let item = header.try_into()?;
196		let body = msg.body();
197		Self::from_message_unchecked_parts(item, body)
198	}
199
200	fn body(&self) -> Self::Body<'_> {
201		EventBody::Owned(EventBodyOwned { kind: self.property.clone(), ..Default::default() })
202	}
203}
204
205impl_member_interface_registry_string_and_match_rule_for_event!(
206	MinimizeEvent,
207	"Minimize",
208	"org.a11y.atspi.Event.Window",
209	"window:minimize",
210	"type='signal',interface='org.a11y.atspi.Event.Window',member='Minimize'"
211);
212
213impl_member_interface_registry_string_and_match_rule_for_event!(
214	MaximizeEvent,
215	"Maximize",
216	"org.a11y.atspi.Event.Window",
217	"window:maximize",
218	"type='signal',interface='org.a11y.atspi.Event.Window',member='Maximize'"
219);
220
221impl_member_interface_registry_string_and_match_rule_for_event!(
222	RestoreEvent,
223	"Restore",
224	"org.a11y.atspi.Event.Window",
225	"window:restore",
226	"type='signal',interface='org.a11y.atspi.Event.Window',member='Restore'"
227);
228
229impl_member_interface_registry_string_and_match_rule_for_event!(
230	CloseEvent,
231	"Close",
232	"org.a11y.atspi.Event.Window",
233	"window:close",
234	"type='signal',interface='org.a11y.atspi.Event.Window',member='Close'"
235);
236
237impl_member_interface_registry_string_and_match_rule_for_event!(
238	CreateEvent,
239	"Create",
240	"org.a11y.atspi.Event.Window",
241	"window:create",
242	"type='signal',interface='org.a11y.atspi.Event.Window',member='Create'"
243);
244
245impl_member_interface_registry_string_and_match_rule_for_event!(
246	ReparentEvent,
247	"Reparent",
248	"org.a11y.atspi.Event.Window",
249	"window:reparent",
250	"type='signal',interface='org.a11y.atspi.Event.Window',member='Reparent'"
251);
252
253impl_member_interface_registry_string_and_match_rule_for_event!(
254	DesktopCreateEvent,
255	"DesktopCreate",
256	"org.a11y.atspi.Event.Window",
257	"window:desktop-create",
258	"type='signal',interface='org.a11y.atspi.Event.Window',member='DesktopCreate'"
259);
260
261impl_member_interface_registry_string_and_match_rule_for_event!(
262	DesktopDestroyEvent,
263	"DesktopDestroy",
264	"org.a11y.atspi.Event.Window",
265	"window:desktop-destroy",
266	"type='signal',interface='org.a11y.atspi.Event.Window',member='DesktopDestroy'"
267);
268
269impl_member_interface_registry_string_and_match_rule_for_event!(
270	DestroyEvent,
271	"Destroy",
272	"org.a11y.atspi.Event.Window",
273	"window:destroy",
274	"type='signal',interface='org.a11y.atspi.Event.Window',member='Destroy'"
275);
276
277impl_member_interface_registry_string_and_match_rule_for_event!(
278	ActivateEvent,
279	"Activate",
280	"org.a11y.atspi.Event.Window",
281	"window:activate",
282	"type='signal',interface='org.a11y.atspi.Event.Window',member='Activate'"
283);
284
285impl_member_interface_registry_string_and_match_rule_for_event!(
286	DeactivateEvent,
287	"Deactivate",
288	"org.a11y.atspi.Event.Window",
289	"window:deactivate",
290	"type='signal',interface='org.a11y.atspi.Event.Window',member='Deactivate'"
291);
292
293impl_member_interface_registry_string_and_match_rule_for_event!(
294	RaiseEvent,
295	"Raise",
296	"org.a11y.atspi.Event.Window",
297	"window:raise",
298	"type='signal',interface='org.a11y.atspi.Event.Window',member='Raise'"
299);
300
301impl_member_interface_registry_string_and_match_rule_for_event!(
302	LowerEvent,
303	"Lower",
304	"org.a11y.atspi.Event.Window",
305	"window:lower",
306	"type='signal',interface='org.a11y.atspi.Event.Window',member='Lower'"
307);
308
309impl_member_interface_registry_string_and_match_rule_for_event!(
310	MoveEvent,
311	"Move",
312	"org.a11y.atspi.Event.Window",
313	"window:move",
314	"type='signal',interface='org.a11y.atspi.Event.Window',member='Move'"
315);
316
317impl_member_interface_registry_string_and_match_rule_for_event!(
318	ResizeEvent,
319	"Resize",
320	"org.a11y.atspi.Event.Window",
321	"window:resize",
322	"type='signal',interface='org.a11y.atspi.Event.Window',member='Resize'"
323);
324
325impl_member_interface_registry_string_and_match_rule_for_event!(
326	ShadeEvent,
327	"Shade",
328	"org.a11y.atspi.Event.Window",
329	"window:shade",
330	"type='signal',interface='org.a11y.atspi.Event.Window',member='Shade'"
331);
332
333impl_member_interface_registry_string_and_match_rule_for_event!(
334	UUshadeEvent,
335	"uUshade",
336	"org.a11y.atspi.Event.Window",
337	"window:uushade",
338	"type='signal',interface='org.a11y.atspi.Event.Window',member='uUshade'"
339);
340
341impl_member_interface_registry_string_and_match_rule_for_event!(
342	RestyleEvent,
343	"Restyle",
344	"org.a11y.atspi.Event.Window",
345	"window:restyle",
346	"type='signal',interface='org.a11y.atspi.Event.Window',member='Restyle'"
347);
348
349event_test_cases!(PropertyChangeEvent);
350impl_to_dbus_message!(PropertyChangeEvent);
351impl_from_dbus_message!(PropertyChangeEvent);
352impl_event_properties!(PropertyChangeEvent);
353impl From<PropertyChangeEvent> for EventBodyOwned {
354	fn from(event: PropertyChangeEvent) -> Self {
355		EventBodyOwned { kind: event.property, ..Default::default() }
356	}
357}
358
359event_test_cases!(MinimizeEvent);
360impl_to_dbus_message!(MinimizeEvent);
361impl_from_dbus_message!(MinimizeEvent);
362impl_event_properties!(MinimizeEvent);
363impl_from_object_ref!(MinimizeEvent);
364
365event_test_cases!(MaximizeEvent);
366impl_to_dbus_message!(MaximizeEvent);
367impl_from_dbus_message!(MaximizeEvent);
368impl_event_properties!(MaximizeEvent);
369impl_from_object_ref!(MaximizeEvent);
370
371event_test_cases!(RestoreEvent);
372impl_to_dbus_message!(RestoreEvent);
373impl_from_dbus_message!(RestoreEvent);
374impl_event_properties!(RestoreEvent);
375impl_from_object_ref!(RestoreEvent);
376
377event_test_cases!(CloseEvent);
378impl_to_dbus_message!(CloseEvent);
379impl_from_dbus_message!(CloseEvent);
380impl_event_properties!(CloseEvent);
381impl_from_object_ref!(CloseEvent);
382
383event_test_cases!(CreateEvent);
384impl_to_dbus_message!(CreateEvent);
385impl_from_dbus_message!(CreateEvent);
386impl_event_properties!(CreateEvent);
387impl_from_object_ref!(CreateEvent);
388
389event_test_cases!(ReparentEvent);
390impl_to_dbus_message!(ReparentEvent);
391impl_from_dbus_message!(ReparentEvent);
392impl_event_properties!(ReparentEvent);
393impl_from_object_ref!(ReparentEvent);
394
395event_test_cases!(DesktopCreateEvent);
396impl_to_dbus_message!(DesktopCreateEvent);
397impl_from_dbus_message!(DesktopCreateEvent);
398impl_event_properties!(DesktopCreateEvent);
399impl_from_object_ref!(DesktopCreateEvent);
400
401event_test_cases!(DesktopDestroyEvent);
402impl_to_dbus_message!(DesktopDestroyEvent);
403impl_from_dbus_message!(DesktopDestroyEvent);
404impl_event_properties!(DesktopDestroyEvent);
405impl_from_object_ref!(DesktopDestroyEvent);
406
407event_test_cases!(DestroyEvent);
408impl_to_dbus_message!(DestroyEvent);
409impl_from_dbus_message!(DestroyEvent);
410impl_event_properties!(DestroyEvent);
411impl_from_object_ref!(DestroyEvent);
412
413event_test_cases!(ActivateEvent);
414impl_to_dbus_message!(ActivateEvent);
415impl_from_dbus_message!(ActivateEvent);
416impl_event_properties!(ActivateEvent);
417impl_from_object_ref!(ActivateEvent);
418
419event_test_cases!(DeactivateEvent);
420impl_to_dbus_message!(DeactivateEvent);
421impl_from_dbus_message!(DeactivateEvent);
422impl_event_properties!(DeactivateEvent);
423impl_from_object_ref!(DeactivateEvent);
424
425event_test_cases!(RaiseEvent);
426impl_to_dbus_message!(RaiseEvent);
427impl_from_dbus_message!(RaiseEvent);
428impl_event_properties!(RaiseEvent);
429impl_from_object_ref!(RaiseEvent);
430
431event_test_cases!(LowerEvent);
432impl_to_dbus_message!(LowerEvent);
433impl_from_dbus_message!(LowerEvent);
434impl_event_properties!(LowerEvent);
435impl_from_object_ref!(LowerEvent);
436
437event_test_cases!(MoveEvent);
438impl_to_dbus_message!(MoveEvent);
439impl_from_dbus_message!(MoveEvent);
440impl_event_properties!(MoveEvent);
441impl_from_object_ref!(MoveEvent);
442
443event_test_cases!(ResizeEvent);
444impl_to_dbus_message!(ResizeEvent);
445impl_from_dbus_message!(ResizeEvent);
446impl_event_properties!(ResizeEvent);
447impl_from_object_ref!(ResizeEvent);
448
449event_test_cases!(ShadeEvent);
450impl_to_dbus_message!(ShadeEvent);
451impl_from_dbus_message!(ShadeEvent);
452impl_event_properties!(ShadeEvent);
453impl_from_object_ref!(ShadeEvent);
454
455event_test_cases!(UUshadeEvent);
456impl_to_dbus_message!(UUshadeEvent);
457impl_from_dbus_message!(UUshadeEvent);
458impl_event_properties!(UUshadeEvent);
459impl_from_object_ref!(UUshadeEvent);
460
461event_test_cases!(RestyleEvent);
462impl_to_dbus_message!(RestyleEvent);
463impl_from_dbus_message!(RestyleEvent);
464impl_event_properties!(RestyleEvent);
465impl_from_object_ref!(RestyleEvent);
466
467impl_msg_conversion_ext_for_target_type!(PropertyChangeEvent);
468impl_msg_conversion_ext_for_target_type!(MinimizeEvent);
469impl_msg_conversion_ext_for_target_type!(MaximizeEvent);
470impl_msg_conversion_ext_for_target_type!(RestoreEvent);
471impl_msg_conversion_ext_for_target_type!(CloseEvent);
472impl_msg_conversion_ext_for_target_type!(CreateEvent);
473impl_msg_conversion_ext_for_target_type!(ReparentEvent);
474impl_msg_conversion_ext_for_target_type!(DesktopCreateEvent);
475impl_msg_conversion_ext_for_target_type!(DesktopDestroyEvent);
476impl_msg_conversion_ext_for_target_type!(DestroyEvent);
477impl_msg_conversion_ext_for_target_type!(ActivateEvent);
478impl_msg_conversion_ext_for_target_type!(DeactivateEvent);
479impl_msg_conversion_ext_for_target_type!(RaiseEvent);
480impl_msg_conversion_ext_for_target_type!(LowerEvent);
481impl_msg_conversion_ext_for_target_type!(MoveEvent);
482impl_msg_conversion_ext_for_target_type!(ResizeEvent);
483impl_msg_conversion_ext_for_target_type!(ShadeEvent);
484impl_msg_conversion_ext_for_target_type!(UUshadeEvent);
485impl_msg_conversion_ext_for_target_type!(RestyleEvent);
486
487impl_msg_conversion_for_types_built_from_object_ref!(MinimizeEvent);
488impl_msg_conversion_for_types_built_from_object_ref!(MaximizeEvent);
489impl_msg_conversion_for_types_built_from_object_ref!(RestoreEvent);
490impl_msg_conversion_for_types_built_from_object_ref!(CloseEvent);
491impl_msg_conversion_for_types_built_from_object_ref!(CreateEvent);
492impl_msg_conversion_for_types_built_from_object_ref!(ReparentEvent);
493impl_msg_conversion_for_types_built_from_object_ref!(DesktopCreateEvent);
494impl_msg_conversion_for_types_built_from_object_ref!(DesktopDestroyEvent);
495impl_msg_conversion_for_types_built_from_object_ref!(DestroyEvent);
496impl_msg_conversion_for_types_built_from_object_ref!(ActivateEvent);
497impl_msg_conversion_for_types_built_from_object_ref!(DeactivateEvent);
498impl_msg_conversion_for_types_built_from_object_ref!(RaiseEvent);
499impl_msg_conversion_for_types_built_from_object_ref!(LowerEvent);
500impl_msg_conversion_for_types_built_from_object_ref!(MoveEvent);
501impl_msg_conversion_for_types_built_from_object_ref!(ResizeEvent);
502impl_msg_conversion_for_types_built_from_object_ref!(ShadeEvent);
503impl_msg_conversion_for_types_built_from_object_ref!(UUshadeEvent);
504impl_msg_conversion_for_types_built_from_object_ref!(RestyleEvent);