1use crate::events::registry::socket::AvailableEvent;
2
3use crate::events::registry::{EventListenerDeregisteredEvent, EventListenerRegisteredEvent};
4#[cfg(feature = "zbus")]
5use crate::events::traits::{EventWrapperMessageConversion, TryFromMessage};
6#[cfg(feature = "zbus")]
7use crate::events::MessageConversion;
8use crate::CacheItem;
9use crate::{
10 error::AtspiError,
11 events::{
12 cache::{AddAccessibleEvent, LegacyAddAccessibleEvent, RemoveAccessibleEvent},
13 document::{
14 AttributesChangedEvent as DocumentAttributesChangedEvent, ContentChangedEvent,
15 LoadCompleteEvent, LoadStoppedEvent, PageChangedEvent, ReloadEvent,
16 },
17 focus::FocusEvent,
18 keyboard::ModifiersEvent,
19 mouse::{AbsEvent, ButtonEvent, RelEvent},
20 object::{
21 ActiveDescendantChangedEvent, AnnouncementEvent,
22 AttributesChangedEvent as ObjectAttributesChangedEvent, BoundsChangedEvent,
23 ChildrenChangedEvent, ColumnDeletedEvent, ColumnInsertedEvent, ColumnReorderedEvent,
24 LinkSelectedEvent, ModelChangedEvent, PropertyChangeEvent as ObjectPropertyChangeEvent,
25 RowDeletedEvent, RowInsertedEvent, RowReorderedEvent, SelectionChangedEvent,
26 StateChangedEvent, TextAttributesChangedEvent, TextBoundsChangedEvent,
27 TextCaretMovedEvent, TextChangedEvent, TextSelectionChangedEvent,
28 VisibleDataChangedEvent,
29 },
30 terminal::{
31 ApplicationChangedEvent, CharWidthChangedEvent, ColumnCountChangedEvent,
32 LineChangedEvent, LineCountChangedEvent,
33 },
34 window::{
35 ActivateEvent, CloseEvent, CreateEvent, DeactivateEvent, DesktopCreateEvent,
36 DesktopDestroyEvent, DestroyEvent, LowerEvent, MaximizeEvent, MinimizeEvent, MoveEvent,
37 PropertyChangeEvent as WindowPropertyChangeEvent, RaiseEvent, ReparentEvent,
38 ResizeEvent, RestoreEvent, RestyleEvent, ShadeEvent, UUshadeEvent,
39 },
40 DBusInterface, DBusMatchRule, DBusMember, EventTypeProperties, RegistryEventString,
41 },
42 EventProperties, LegacyCacheItem,
43};
44use serde::{Deserialize, Serialize};
45#[cfg(feature = "zbus")]
46use zbus::message::Header;
47use zbus_names::UniqueName;
48use zvariant::{ObjectPath, Type};
49
50impl_from_user_facing_event_for_interface_event_enum!(
51 EventListenerRegisteredEvent,
52 EventListenerEvents,
53 EventListenerEvents::Registered
54);
55
56impl_from_user_facing_type_for_event_enum!(EventListenerRegisteredEvent, Event::Listener);
57
58impl_try_from_event_for_user_facing_type!(
59 EventListenerRegisteredEvent,
60 EventListenerEvents::Registered,
61 Event::Listener
62);
63
64impl_from_user_facing_event_for_interface_event_enum!(
65 EventListenerDeregisteredEvent,
66 EventListenerEvents,
67 EventListenerEvents::Deregistered
68);
69
70impl_from_user_facing_type_for_event_enum!(EventListenerDeregisteredEvent, Event::Listener);
71impl_try_from_event_for_user_facing_type!(
72 EventListenerDeregisteredEvent,
73 EventListenerEvents::Deregistered,
74 Event::Listener
75);
76
77#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq, Hash)]
78pub enum KeyboardEvents {
79 Modifiers(ModifiersEvent),
81}
82
83impl_tryfrommessage_for_event_wrapper!(KeyboardEvents);
84impl_try_from_event_for_interface_enum!(KeyboardEvents, Event::Keyboard);
85impl_from_interface_event_enum_for_event!(KeyboardEvents, Event::Keyboard);
86
87impl_from_user_facing_event_for_interface_event_enum!(
88 ModifiersEvent,
89 KeyboardEvents,
90 KeyboardEvents::Modifiers
91);
92impl EventTypeProperties for KeyboardEvents {
93 fn member(&self) -> &'static str {
94 match self {
95 Self::Modifiers(inner) => inner.member(),
96 }
97 }
98 fn match_rule(&self) -> &'static str {
99 match self {
100 Self::Modifiers(inner) => inner.match_rule(),
101 }
102 }
103 fn interface(&self) -> &'static str {
104 match self {
105 Self::Modifiers(inner) => inner.interface(),
106 }
107 }
108 fn registry_string(&self) -> &'static str {
109 match self {
110 Self::Modifiers(inner) => inner.registry_string(),
111 }
112 }
113}
114
115impl EventProperties for KeyboardEvents {
116 fn path(&self) -> ObjectPath<'_> {
117 match self {
118 Self::Modifiers(inner) => inner.path(),
119 }
120 }
121 fn sender(&self) -> UniqueName<'_> {
122 match self {
123 Self::Modifiers(inner) => inner.sender(),
124 }
125 }
126}
127
128event_wrapper_test_cases!(KeyboardEvents, ModifiersEvent);
129
130impl DBusMatchRule for KeyboardEvents {
131 const MATCH_RULE_STRING: &'static str =
132 "type='signal',interface='org.a11y.atspi.Event.Keyboard'";
133}
134
135impl DBusInterface for KeyboardEvents {
136 const DBUS_INTERFACE: &'static str = "org.a11y.atspi.Event.Keyboard";
137}
138
139impl RegistryEventString for KeyboardEvents {
140 const REGISTRY_EVENT_STRING: &'static str = "keyboard:";
141}
142
143impl_from_user_facing_type_for_event_enum!(ModifiersEvent, Event::Keyboard);
144
145#[cfg(feature = "zbus")]
146impl TryFrom<&zbus::Message> for KeyboardEvents {
147 type Error = AtspiError;
148 fn try_from(msg: &zbus::Message) -> Result<Self, Self::Error> {
149 Self::try_from_message(msg)
150 }
151}
152
153impl_try_from_event_for_user_facing_type!(
154 ModifiersEvent,
155 KeyboardEvents::Modifiers,
156 Event::Keyboard
157);
158
159#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq, Hash)]
160pub enum MouseEvents {
161 Abs(AbsEvent),
163
164 Rel(RelEvent),
166
167 Button(ButtonEvent),
169}
170
171impl DBusMatchRule for MouseEvents {
172 const MATCH_RULE_STRING: &'static str = "type='signal',interface='org.a11y.atspi.Event.Mouse'";
173}
174
175impl DBusInterface for MouseEvents {
176 const DBUS_INTERFACE: &'static str = "org.a11y.atspi.Event.Mouse";
177}
178
179impl RegistryEventString for MouseEvents {
180 const REGISTRY_EVENT_STRING: &'static str = "mouse:";
181}
182
183impl_tryfrommessage_for_event_wrapper!(MouseEvents);
184
185#[cfg(feature = "zbus")]
186impl EventWrapperMessageConversion for KeyboardEvents {
187 fn try_from_message_interface_checked(
188 msg: &zbus::Message,
189 hdr: &Header,
190 ) -> Result<Self, AtspiError> {
191 let member = hdr
192 .member()
193 .ok_or(AtspiError::MemberMatch("Event without member".into()))?;
194 match member.as_str() {
195 ModifiersEvent::DBUS_MEMBER => {
196 Ok(KeyboardEvents::Modifiers(ModifiersEvent::from_message_unchecked(msg, hdr)?))
197 }
198 _ => Err(AtspiError::MemberMatch("No matching member for Keyboard".into())),
199 }
200 }
201}
202
203impl EventProperties for MouseEvents {
204 fn path(&self) -> ObjectPath<'_> {
205 match self {
206 Self::Abs(inner) => inner.path(),
207 Self::Rel(inner) => inner.path(),
208 Self::Button(inner) => inner.path(),
209 }
210 }
211 fn sender(&self) -> UniqueName<'_> {
212 match self {
213 Self::Abs(inner) => inner.sender(),
214 Self::Rel(inner) => inner.sender(),
215 Self::Button(inner) => inner.sender(),
216 }
217 }
218}
219
220impl EventTypeProperties for MouseEvents {
221 fn member(&self) -> &'static str {
222 match self {
223 Self::Abs(inner) => inner.member(),
224 Self::Rel(inner) => inner.member(),
225 Self::Button(inner) => inner.member(),
226 }
227 }
228 fn interface(&self) -> &'static str {
229 match self {
230 Self::Abs(inner) => inner.interface(),
231 Self::Rel(inner) => inner.interface(),
232 Self::Button(inner) => inner.interface(),
233 }
234 }
235 fn match_rule(&self) -> &'static str {
236 match self {
237 Self::Abs(inner) => inner.match_rule(),
238 Self::Rel(inner) => inner.match_rule(),
239 Self::Button(inner) => inner.match_rule(),
240 }
241 }
242 fn registry_string(&self) -> &'static str {
243 match self {
244 Self::Abs(inner) => inner.registry_string(),
245 Self::Rel(inner) => inner.registry_string(),
246 Self::Button(inner) => inner.registry_string(),
247 }
248 }
249}
250
251event_wrapper_test_cases!(MouseEvents, AbsEvent);
252impl_try_from_event_for_interface_enum!(MouseEvents, Event::Mouse);
253impl_from_interface_event_enum_for_event!(MouseEvents, Event::Mouse);
254
255impl_from_user_facing_event_for_interface_event_enum!(RelEvent, MouseEvents, MouseEvents::Rel);
256impl_try_from_event_for_user_facing_type!(RelEvent, MouseEvents::Rel, Event::Mouse);
257impl_from_user_facing_event_for_interface_event_enum!(
258 ButtonEvent,
259 MouseEvents,
260 MouseEvents::Button
261);
262impl_try_from_event_for_user_facing_type!(ButtonEvent, MouseEvents::Button, Event::Mouse);
263
264#[cfg(feature = "zbus")]
265impl EventWrapperMessageConversion for MouseEvents {
266 fn try_from_message_interface_checked(
267 msg: &zbus::Message,
268 hdr: &Header,
269 ) -> Result<Self, AtspiError> {
270 let member = hdr.member().ok_or(AtspiError::MissingMember)?;
271 match member.as_str() {
272 AbsEvent::DBUS_MEMBER => {
273 Ok(MouseEvents::Abs(AbsEvent::from_message_unchecked(msg, hdr)?))
274 }
275 RelEvent::DBUS_MEMBER => {
276 Ok(MouseEvents::Rel(RelEvent::from_message_unchecked(msg, hdr)?))
277 }
278 ButtonEvent::DBUS_MEMBER => {
279 Ok(MouseEvents::Button(ButtonEvent::from_message_unchecked(msg, hdr)?))
280 }
281 _ => Err(AtspiError::MemberMatch("No matching member for Mouse".into())),
282 }
283 }
284}
285
286#[cfg(feature = "zbus")]
287impl TryFrom<&zbus::Message> for MouseEvents {
288 type Error = AtspiError;
289 fn try_from(msg: &zbus::Message) -> Result<Self, Self::Error> {
290 Self::try_from_message(msg)
291 }
292}
293
294impl_from_user_facing_type_for_event_enum!(ButtonEvent, Event::Mouse);
295impl_from_user_facing_type_for_event_enum!(RelEvent, Event::Mouse);
296impl_from_user_facing_type_for_event_enum!(AbsEvent, Event::Mouse);
297
298impl_from_user_facing_event_for_interface_event_enum!(AbsEvent, MouseEvents, MouseEvents::Abs);
299impl_try_from_event_for_user_facing_type!(AbsEvent, MouseEvents::Abs, Event::Mouse);
300
301#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq, Hash)]
302pub enum ObjectEvents {
303 PropertyChange(ObjectPropertyChangeEvent),
305 BoundsChanged(BoundsChangedEvent),
307 LinkSelected(LinkSelectedEvent),
309 StateChanged(StateChangedEvent),
311 ChildrenChanged(ChildrenChangedEvent),
313 VisibleDataChanged(VisibleDataChangedEvent),
315 SelectionChanged(SelectionChangedEvent),
317 ModelChanged(ModelChangedEvent),
319 ActiveDescendantChanged(ActiveDescendantChangedEvent),
321 Announcement(AnnouncementEvent),
323 AttributesChanged(ObjectAttributesChangedEvent),
325 RowInserted(RowInsertedEvent),
327 RowReordered(RowReorderedEvent),
329 RowDeleted(RowDeletedEvent),
331 ColumnInserted(ColumnInsertedEvent),
333 ColumnReordered(ColumnReorderedEvent),
335 ColumnDeleted(ColumnDeletedEvent),
337 TextBoundsChanged(TextBoundsChangedEvent),
339 TextSelectionChanged(TextSelectionChangedEvent),
341 TextChanged(TextChangedEvent),
343 TextAttributesChanged(TextAttributesChangedEvent),
345 TextCaretMoved(TextCaretMovedEvent),
347}
348
349impl_tryfrommessage_for_event_wrapper!(ObjectEvents);
350
351impl EventTypeProperties for ObjectEvents {
352 fn member(&self) -> &'static str {
353 match self {
354 Self::PropertyChange(inner) => inner.member(),
355 Self::BoundsChanged(inner) => inner.member(),
356 Self::LinkSelected(inner) => inner.member(),
357 Self::StateChanged(inner) => inner.member(),
358 Self::ChildrenChanged(inner) => inner.member(),
359 Self::VisibleDataChanged(inner) => inner.member(),
360 Self::SelectionChanged(inner) => inner.member(),
361 Self::ModelChanged(inner) => inner.member(),
362 Self::ActiveDescendantChanged(inner) => inner.member(),
363 Self::Announcement(inner) => inner.member(),
364 Self::AttributesChanged(inner) => inner.member(),
365 Self::RowInserted(inner) => inner.member(),
366 Self::RowReordered(inner) => inner.member(),
367 Self::RowDeleted(inner) => inner.member(),
368 Self::ColumnInserted(inner) => inner.member(),
369 Self::ColumnReordered(inner) => inner.member(),
370 Self::ColumnDeleted(inner) => inner.member(),
371 Self::TextBoundsChanged(inner) => inner.member(),
372 Self::TextSelectionChanged(inner) => inner.member(),
373 Self::TextChanged(inner) => inner.member(),
374 Self::TextAttributesChanged(inner) => inner.member(),
375 Self::TextCaretMoved(inner) => inner.member(),
376 }
377 }
378 fn interface(&self) -> &'static str {
379 match self {
380 Self::PropertyChange(inner) => inner.interface(),
381 Self::BoundsChanged(inner) => inner.interface(),
382 Self::LinkSelected(inner) => inner.interface(),
383 Self::StateChanged(inner) => inner.interface(),
384 Self::ChildrenChanged(inner) => inner.interface(),
385 Self::VisibleDataChanged(inner) => inner.interface(),
386 Self::SelectionChanged(inner) => inner.interface(),
387 Self::ModelChanged(inner) => inner.interface(),
388 Self::ActiveDescendantChanged(inner) => inner.interface(),
389 Self::Announcement(inner) => inner.interface(),
390 Self::AttributesChanged(inner) => inner.interface(),
391 Self::RowInserted(inner) => inner.interface(),
392 Self::RowReordered(inner) => inner.interface(),
393 Self::RowDeleted(inner) => inner.interface(),
394 Self::ColumnInserted(inner) => inner.interface(),
395 Self::ColumnReordered(inner) => inner.interface(),
396 Self::ColumnDeleted(inner) => inner.interface(),
397 Self::TextBoundsChanged(inner) => inner.interface(),
398 Self::TextSelectionChanged(inner) => inner.interface(),
399 Self::TextChanged(inner) => inner.interface(),
400 Self::TextAttributesChanged(inner) => inner.interface(),
401 Self::TextCaretMoved(inner) => inner.interface(),
402 }
403 }
404 fn match_rule(&self) -> &'static str {
405 match self {
406 Self::PropertyChange(inner) => inner.match_rule(),
407 Self::BoundsChanged(inner) => inner.match_rule(),
408 Self::LinkSelected(inner) => inner.match_rule(),
409 Self::StateChanged(inner) => inner.match_rule(),
410 Self::ChildrenChanged(inner) => inner.match_rule(),
411 Self::VisibleDataChanged(inner) => inner.match_rule(),
412 Self::SelectionChanged(inner) => inner.match_rule(),
413 Self::ModelChanged(inner) => inner.match_rule(),
414 Self::ActiveDescendantChanged(inner) => inner.match_rule(),
415 Self::Announcement(inner) => inner.match_rule(),
416 Self::AttributesChanged(inner) => inner.match_rule(),
417 Self::RowInserted(inner) => inner.match_rule(),
418 Self::RowReordered(inner) => inner.match_rule(),
419 Self::RowDeleted(inner) => inner.match_rule(),
420 Self::ColumnInserted(inner) => inner.match_rule(),
421 Self::ColumnReordered(inner) => inner.match_rule(),
422 Self::ColumnDeleted(inner) => inner.match_rule(),
423 Self::TextBoundsChanged(inner) => inner.match_rule(),
424 Self::TextSelectionChanged(inner) => inner.match_rule(),
425 Self::TextChanged(inner) => inner.match_rule(),
426 Self::TextAttributesChanged(inner) => inner.match_rule(),
427 Self::TextCaretMoved(inner) => inner.match_rule(),
428 }
429 }
430 fn registry_string(&self) -> &'static str {
431 match self {
432 Self::PropertyChange(inner) => inner.registry_string(),
433 Self::BoundsChanged(inner) => inner.registry_string(),
434 Self::LinkSelected(inner) => inner.registry_string(),
435 Self::StateChanged(inner) => inner.registry_string(),
436 Self::ChildrenChanged(inner) => inner.registry_string(),
437 Self::VisibleDataChanged(inner) => inner.registry_string(),
438 Self::SelectionChanged(inner) => inner.registry_string(),
439 Self::ModelChanged(inner) => inner.registry_string(),
440 Self::ActiveDescendantChanged(inner) => inner.registry_string(),
441 Self::Announcement(inner) => inner.registry_string(),
442 Self::AttributesChanged(inner) => inner.registry_string(),
443 Self::RowInserted(inner) => inner.registry_string(),
444 Self::RowReordered(inner) => inner.registry_string(),
445 Self::RowDeleted(inner) => inner.registry_string(),
446 Self::ColumnInserted(inner) => inner.registry_string(),
447 Self::ColumnReordered(inner) => inner.registry_string(),
448 Self::ColumnDeleted(inner) => inner.registry_string(),
449 Self::TextBoundsChanged(inner) => inner.registry_string(),
450 Self::TextSelectionChanged(inner) => inner.registry_string(),
451 Self::TextChanged(inner) => inner.registry_string(),
452 Self::TextAttributesChanged(inner) => inner.registry_string(),
453 Self::TextCaretMoved(inner) => inner.registry_string(),
454 }
455 }
456}
457
458impl EventProperties for ObjectEvents {
459 fn path(&self) -> ObjectPath<'_> {
460 match self {
461 Self::PropertyChange(inner) => inner.path(),
462 Self::BoundsChanged(inner) => inner.path(),
463 Self::LinkSelected(inner) => inner.path(),
464 Self::StateChanged(inner) => inner.path(),
465 Self::ChildrenChanged(inner) => inner.path(),
466 Self::VisibleDataChanged(inner) => inner.path(),
467 Self::SelectionChanged(inner) => inner.path(),
468 Self::ModelChanged(inner) => inner.path(),
469 Self::ActiveDescendantChanged(inner) => inner.path(),
470 Self::Announcement(inner) => inner.path(),
471 Self::AttributesChanged(inner) => inner.path(),
472 Self::RowInserted(inner) => inner.path(),
473 Self::RowReordered(inner) => inner.path(),
474 Self::RowDeleted(inner) => inner.path(),
475 Self::ColumnInserted(inner) => inner.path(),
476 Self::ColumnReordered(inner) => inner.path(),
477 Self::ColumnDeleted(inner) => inner.path(),
478 Self::TextBoundsChanged(inner) => inner.path(),
479 Self::TextSelectionChanged(inner) => inner.path(),
480 Self::TextChanged(inner) => inner.path(),
481 Self::TextAttributesChanged(inner) => inner.path(),
482 Self::TextCaretMoved(inner) => inner.path(),
483 }
484 }
485 fn sender(&self) -> UniqueName<'_> {
486 match self {
487 Self::PropertyChange(inner) => inner.sender(),
488 Self::BoundsChanged(inner) => inner.sender(),
489 Self::LinkSelected(inner) => inner.sender(),
490 Self::StateChanged(inner) => inner.sender(),
491 Self::ChildrenChanged(inner) => inner.sender(),
492 Self::VisibleDataChanged(inner) => inner.sender(),
493 Self::SelectionChanged(inner) => inner.sender(),
494 Self::ModelChanged(inner) => inner.sender(),
495 Self::ActiveDescendantChanged(inner) => inner.sender(),
496 Self::Announcement(inner) => inner.sender(),
497 Self::AttributesChanged(inner) => inner.sender(),
498 Self::RowInserted(inner) => inner.sender(),
499 Self::RowReordered(inner) => inner.sender(),
500 Self::RowDeleted(inner) => inner.sender(),
501 Self::ColumnInserted(inner) => inner.sender(),
502 Self::ColumnReordered(inner) => inner.sender(),
503 Self::ColumnDeleted(inner) => inner.sender(),
504 Self::TextBoundsChanged(inner) => inner.sender(),
505 Self::TextSelectionChanged(inner) => inner.sender(),
506 Self::TextChanged(inner) => inner.sender(),
507 Self::TextAttributesChanged(inner) => inner.sender(),
508 Self::TextCaretMoved(inner) => inner.sender(),
509 }
510 }
511}
512
513impl_try_from_event_for_interface_enum!(ObjectEvents, Event::Object);
514impl_from_interface_event_enum_for_event!(ObjectEvents, Event::Object);
515
516event_wrapper_test_cases!(ObjectEvents, ObjectPropertyChangeEvent);
517
518impl_from_user_facing_event_for_interface_event_enum!(
519 TextChangedEvent,
520 ObjectEvents,
521 ObjectEvents::TextChanged
522);
523impl_try_from_event_for_user_facing_type!(
524 TextChangedEvent,
525 ObjectEvents::TextChanged,
526 Event::Object
527);
528
529#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq, Hash)]
530pub enum DocumentEvents {
531 LoadComplete(LoadCompleteEvent),
533 Reload(ReloadEvent),
535 LoadStopped(LoadStoppedEvent),
537 ContentChanged(ContentChangedEvent),
539 AttributesChanged(DocumentAttributesChangedEvent),
541 PageChanged(PageChangedEvent),
543}
544
545impl_tryfrommessage_for_event_wrapper!(DocumentEvents);
546
547impl DBusInterface for DocumentEvents {
548 const DBUS_INTERFACE: &'static str = "org.a11y.atspi.Event.Document";
549}
550
551impl DBusMatchRule for DocumentEvents {
552 const MATCH_RULE_STRING: &'static str =
553 "type='signal',interface='org.a11y.atspi.Event.Document'";
554}
555
556impl RegistryEventString for DocumentEvents {
557 const REGISTRY_EVENT_STRING: &'static str = "Document:";
558}
559
560impl EventTypeProperties for DocumentEvents {
561 fn member(&self) -> &'static str {
562 match self {
563 Self::LoadComplete(inner) => inner.member(),
564 Self::Reload(inner) => inner.member(),
565 Self::LoadStopped(inner) => inner.member(),
566 Self::ContentChanged(inner) => inner.member(),
567 Self::AttributesChanged(inner) => inner.member(),
568 Self::PageChanged(inner) => inner.member(),
569 }
570 }
571 fn interface(&self) -> &'static str {
572 match self {
573 Self::LoadComplete(inner) => inner.interface(),
574 Self::Reload(inner) => inner.interface(),
575 Self::LoadStopped(inner) => inner.interface(),
576 Self::ContentChanged(inner) => inner.interface(),
577 Self::AttributesChanged(inner) => inner.interface(),
578 Self::PageChanged(inner) => inner.interface(),
579 }
580 }
581 fn match_rule(&self) -> &'static str {
582 match self {
583 Self::LoadComplete(inner) => inner.match_rule(),
584 Self::Reload(inner) => inner.match_rule(),
585 Self::LoadStopped(inner) => inner.match_rule(),
586 Self::ContentChanged(inner) => inner.match_rule(),
587 Self::AttributesChanged(inner) => inner.match_rule(),
588 Self::PageChanged(inner) => inner.match_rule(),
589 }
590 }
591 fn registry_string(&self) -> &'static str {
592 match self {
593 Self::LoadComplete(inner) => inner.registry_string(),
594 Self::Reload(inner) => inner.registry_string(),
595 Self::LoadStopped(inner) => inner.registry_string(),
596 Self::ContentChanged(inner) => inner.registry_string(),
597 Self::AttributesChanged(inner) => inner.registry_string(),
598 Self::PageChanged(inner) => inner.registry_string(),
599 }
600 }
601}
602
603impl EventProperties for DocumentEvents {
604 fn path(&self) -> ObjectPath<'_> {
605 match self {
606 Self::LoadComplete(inner) => inner.path(),
607 Self::Reload(inner) => inner.path(),
608 Self::LoadStopped(inner) => inner.path(),
609 Self::ContentChanged(inner) => inner.path(),
610 Self::AttributesChanged(inner) => inner.path(),
611 Self::PageChanged(inner) => inner.path(),
612 }
613 }
614 fn sender(&self) -> UniqueName<'_> {
615 match self {
616 Self::LoadComplete(inner) => inner.sender(),
617 Self::Reload(inner) => inner.sender(),
618 Self::LoadStopped(inner) => inner.sender(),
619 Self::ContentChanged(inner) => inner.sender(),
620 Self::AttributesChanged(inner) => inner.sender(),
621 Self::PageChanged(inner) => inner.sender(),
622 }
623 }
624}
625
626impl_from_user_facing_type_for_event_enum!(PageChangedEvent, Event::Document);
627impl_from_user_facing_type_for_event_enum!(DocumentAttributesChangedEvent, Event::Document);
628impl_from_user_facing_type_for_event_enum!(ContentChangedEvent, Event::Document);
629impl_from_user_facing_type_for_event_enum!(LoadStoppedEvent, Event::Document);
630impl_from_user_facing_type_for_event_enum!(ReloadEvent, Event::Document);
631impl_from_user_facing_type_for_event_enum!(LoadCompleteEvent, Event::Document);
632
633impl_try_from_event_for_interface_enum!(DocumentEvents, Event::Document);
634impl_from_interface_event_enum_for_event!(DocumentEvents, Event::Document);
635
636event_wrapper_test_cases!(DocumentEvents, LoadCompleteEvent);
637
638#[cfg(feature = "zbus")]
639impl EventWrapperMessageConversion for DocumentEvents {
640 fn try_from_message_interface_checked(
641 msg: &zbus::Message,
642 hdr: &Header,
643 ) -> Result<Self, AtspiError> {
644 let member = hdr.member().ok_or(AtspiError::MissingMember)?;
645 match member.as_str() {
646 LoadCompleteEvent::DBUS_MEMBER => Ok(DocumentEvents::LoadComplete(
647 LoadCompleteEvent::from_message_unchecked(msg, hdr)?,
648 )),
649 ReloadEvent::DBUS_MEMBER => {
650 Ok(DocumentEvents::Reload(ReloadEvent::from_message_unchecked(msg, hdr)?))
651 }
652 LoadStoppedEvent::DBUS_MEMBER => {
653 Ok(DocumentEvents::LoadStopped(LoadStoppedEvent::from_message_unchecked(msg, hdr)?))
654 }
655 ContentChangedEvent::DBUS_MEMBER => Ok(DocumentEvents::ContentChanged(
656 ContentChangedEvent::from_message_unchecked(msg, hdr)?,
657 )),
658 DocumentAttributesChangedEvent::DBUS_MEMBER => Ok(DocumentEvents::AttributesChanged(
659 DocumentAttributesChangedEvent::from_message_unchecked(msg, hdr)?,
660 )),
661 PageChangedEvent::DBUS_MEMBER => {
662 Ok(DocumentEvents::PageChanged(PageChangedEvent::from_message_unchecked(msg, hdr)?))
663 }
664 _ => Err(AtspiError::MemberMatch("No matching member for Document".into())),
665 }
666 }
667}
668
669#[cfg(feature = "zbus")]
670impl TryFrom<&zbus::Message> for DocumentEvents {
671 type Error = AtspiError;
672 fn try_from(msg: &zbus::Message) -> Result<Self, Self::Error> {
673 Self::try_from_message(msg)
674 }
675}
676
677impl_from_user_facing_event_for_interface_event_enum!(
678 LoadCompleteEvent,
679 DocumentEvents,
680 DocumentEvents::LoadComplete
681);
682impl_try_from_event_for_user_facing_type!(
683 LoadCompleteEvent,
684 DocumentEvents::LoadComplete,
685 Event::Document
686);
687
688impl_from_user_facing_event_for_interface_event_enum!(
689 ReloadEvent,
690 DocumentEvents,
691 DocumentEvents::Reload
692);
693impl_try_from_event_for_user_facing_type!(ReloadEvent, DocumentEvents::Reload, Event::Document);
694
695impl_from_user_facing_event_for_interface_event_enum!(
696 LoadStoppedEvent,
697 DocumentEvents,
698 DocumentEvents::LoadStopped
699);
700impl_try_from_event_for_user_facing_type!(
701 LoadStoppedEvent,
702 DocumentEvents::LoadStopped,
703 Event::Document
704);
705
706impl_from_user_facing_event_for_interface_event_enum!(
707 ContentChangedEvent,
708 DocumentEvents,
709 DocumentEvents::ContentChanged
710);
711impl_try_from_event_for_user_facing_type!(
712 ContentChangedEvent,
713 DocumentEvents::ContentChanged,
714 Event::Document
715);
716
717impl_from_user_facing_event_for_interface_event_enum!(
718 DocumentAttributesChangedEvent,
719 DocumentEvents,
720 DocumentEvents::AttributesChanged
721);
722impl_try_from_event_for_user_facing_type!(
723 DocumentAttributesChangedEvent,
724 DocumentEvents::AttributesChanged,
725 Event::Document
726);
727
728impl_from_user_facing_event_for_interface_event_enum!(
729 PageChangedEvent,
730 DocumentEvents,
731 DocumentEvents::PageChanged
732);
733impl_try_from_event_for_user_facing_type!(
734 PageChangedEvent,
735 DocumentEvents::PageChanged,
736 Event::Document
737);
738
739#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
743#[non_exhaustive]
744pub enum Event {
745 Document(DocumentEvents),
747 Focus(FocusEvents),
749 Keyboard(KeyboardEvents),
751 Mouse(MouseEvents),
753 Object(ObjectEvents),
755 Terminal(TerminalEvents),
757 Window(WindowEvents),
759 Available(AvailableEvent),
761 Cache(CacheEvents),
763 Listener(EventListenerEvents),
765}
766
767impl EventTypeProperties for Event {
768 fn member(&self) -> &'static str {
769 match self {
770 Self::Document(inner) => inner.member(),
771 Self::Focus(inner) => inner.member(),
772 Self::Keyboard(inner) => inner.member(),
773 Self::Mouse(inner) => inner.member(),
774 Self::Object(inner) => inner.member(),
775 Self::Terminal(inner) => inner.member(),
776 Self::Window(inner) => inner.member(),
777 Self::Available(inner) => inner.member(),
778 Self::Cache(inner) => inner.member(),
779 Self::Listener(inner) => inner.member(),
780 }
781 }
782 fn interface(&self) -> &'static str {
783 match self {
784 Self::Document(inner) => inner.interface(),
785 Self::Focus(inner) => inner.interface(),
786 Self::Keyboard(inner) => inner.interface(),
787 Self::Mouse(inner) => inner.interface(),
788 Self::Object(inner) => inner.interface(),
789 Self::Terminal(inner) => inner.interface(),
790 Self::Window(inner) => inner.interface(),
791 Self::Available(inner) => inner.interface(),
792 Self::Cache(inner) => inner.interface(),
793 Self::Listener(inner) => inner.interface(),
794 }
795 }
796 fn match_rule(&self) -> &'static str {
797 match self {
798 Self::Document(inner) => inner.match_rule(),
799 Self::Focus(inner) => inner.match_rule(),
800 Self::Keyboard(inner) => inner.match_rule(),
801 Self::Mouse(inner) => inner.match_rule(),
802 Self::Object(inner) => inner.match_rule(),
803 Self::Terminal(inner) => inner.match_rule(),
804 Self::Window(inner) => inner.match_rule(),
805 Self::Available(inner) => inner.match_rule(),
806 Self::Cache(inner) => inner.match_rule(),
807 Self::Listener(inner) => inner.match_rule(),
808 }
809 }
810 fn registry_string(&self) -> &'static str {
811 match self {
812 Self::Document(inner) => inner.registry_string(),
813 Self::Focus(inner) => inner.registry_string(),
814 Self::Keyboard(inner) => inner.registry_string(),
815 Self::Mouse(inner) => inner.registry_string(),
816 Self::Object(inner) => inner.registry_string(),
817 Self::Terminal(inner) => inner.registry_string(),
818 Self::Window(inner) => inner.registry_string(),
819 Self::Available(inner) => inner.registry_string(),
820 Self::Cache(inner) => inner.registry_string(),
821 Self::Listener(inner) => inner.registry_string(),
822 }
823 }
824}
825
826impl EventProperties for Event {
827 fn path(&self) -> ObjectPath<'_> {
828 match self {
829 Self::Document(inner) => inner.path(),
830 Self::Focus(inner) => inner.path(),
831 Self::Keyboard(inner) => inner.path(),
832 Self::Mouse(inner) => inner.path(),
833 Self::Object(inner) => inner.path(),
834 Self::Terminal(inner) => inner.path(),
835 Self::Window(inner) => inner.path(),
836 Self::Available(inner) => inner.path(),
837 Self::Cache(inner) => inner.path(),
838 Self::Listener(inner) => inner.path(),
839 }
840 }
841 fn sender(&self) -> UniqueName<'_> {
842 match self {
843 Self::Document(inner) => inner.sender(),
844 Self::Focus(inner) => inner.sender(),
845 Self::Keyboard(inner) => inner.sender(),
846 Self::Mouse(inner) => inner.sender(),
847 Self::Object(inner) => inner.sender(),
848 Self::Terminal(inner) => inner.sender(),
849 Self::Window(inner) => inner.sender(),
850 Self::Available(inner) => inner.sender(),
851 Self::Cache(inner) => inner.sender(),
852 Self::Listener(inner) => inner.sender(),
853 }
854 }
855}
856
857#[cfg(feature = "zbus")]
858impl TryFrom<&zbus::Message> for Event {
859 type Error = AtspiError;
860
861 fn try_from(msg: &zbus::Message) -> Result<Event, AtspiError> {
862 let header = msg.header();
863 let interface = header.interface().ok_or(AtspiError::MissingInterface)?;
864 let interface_str = interface.as_str();
865
866 match interface_str {
867 <ObjectEvents as DBusInterface>::DBUS_INTERFACE => {
868 Ok(Event::Object(ObjectEvents::try_from_message_interface_checked(msg, &header)?))
869 }
870 <FocusEvents as DBusInterface>::DBUS_INTERFACE => {
871 Ok(Event::Focus(FocusEvents::try_from_message_interface_checked(msg, &header)?))
872 }
873 <CacheEvents as DBusInterface>::DBUS_INTERFACE => {
874 Ok(Event::Cache(CacheEvents::try_from_message_interface_checked(msg, &header)?))
875 }
876 <WindowEvents as DBusInterface>::DBUS_INTERFACE => {
877 Ok(Event::Window(WindowEvents::try_from_message_interface_checked(msg, &header)?))
878 }
879 <MouseEvents as DBusInterface>::DBUS_INTERFACE => {
880 Ok(Event::Mouse(MouseEvents::try_from_message_interface_checked(msg, &header)?))
881 }
882 <TerminalEvents as DBusInterface>::DBUS_INTERFACE => Ok(Event::Terminal(
883 TerminalEvents::try_from_message_interface_checked(msg, &header)?,
884 )),
885 <DocumentEvents as DBusInterface>::DBUS_INTERFACE => Ok(Event::Document(
886 DocumentEvents::try_from_message_interface_checked(msg, &header)?,
887 )),
888 <KeyboardEvents as DBusInterface>::DBUS_INTERFACE => Ok(Event::Keyboard(
889 KeyboardEvents::try_from_message_interface_checked(msg, &header)?,
890 )),
891 <EventListenerEvents as DBusInterface>::DBUS_INTERFACE => Ok(Event::Listener(
892 EventListenerEvents::try_from_message_interface_checked(msg, &header)?,
893 )),
894 <AvailableEvent as DBusInterface>::DBUS_INTERFACE => {
895 Ok(AvailableEvent::try_from(msg)?.into())
896 }
897 _ => Err(AtspiError::InterfaceMatch(format!(
898 "No events found with interface {interface_str}"
899 ))),
900 }
901 }
902}
903
904impl_from_user_facing_type_for_event_enum!(TextCaretMovedEvent, Event::Object);
905impl_from_user_facing_type_for_event_enum!(TextAttributesChangedEvent, Event::Object);
906impl_from_user_facing_type_for_event_enum!(TextChangedEvent, Event::Object);
907impl_from_user_facing_type_for_event_enum!(TextSelectionChangedEvent, Event::Object);
908impl_from_user_facing_type_for_event_enum!(TextBoundsChangedEvent, Event::Object);
909impl_from_user_facing_type_for_event_enum!(ColumnDeletedEvent, Event::Object);
910impl_from_user_facing_type_for_event_enum!(ColumnReorderedEvent, Event::Object);
911impl_from_user_facing_type_for_event_enum!(ColumnInsertedEvent, Event::Object);
912impl_from_user_facing_type_for_event_enum!(RowDeletedEvent, Event::Object);
913impl_from_user_facing_type_for_event_enum!(RowReorderedEvent, Event::Object);
914impl_from_user_facing_type_for_event_enum!(RowInsertedEvent, Event::Object);
915impl_from_user_facing_type_for_event_enum!(ObjectAttributesChangedEvent, Event::Object);
916impl_from_user_facing_type_for_event_enum!(AnnouncementEvent, Event::Object);
917impl_from_user_facing_type_for_event_enum!(ActiveDescendantChangedEvent, Event::Object);
918impl_from_user_facing_type_for_event_enum!(ModelChangedEvent, Event::Object);
919impl_from_user_facing_type_for_event_enum!(SelectionChangedEvent, Event::Object);
920impl_from_user_facing_type_for_event_enum!(VisibleDataChangedEvent, Event::Object);
921impl_from_user_facing_type_for_event_enum!(ChildrenChangedEvent, Event::Object);
922impl_from_user_facing_type_for_event_enum!(StateChangedEvent, Event::Object);
923impl_from_user_facing_type_for_event_enum!(LinkSelectedEvent, Event::Object);
924impl_from_user_facing_type_for_event_enum!(BoundsChangedEvent, Event::Object);
925impl_from_user_facing_type_for_event_enum!(ObjectPropertyChangeEvent, Event::Object);
926
927impl_from_user_facing_event_for_interface_event_enum!(
928 ObjectPropertyChangeEvent,
929 ObjectEvents,
930 ObjectEvents::PropertyChange
931);
932impl_try_from_event_for_user_facing_type!(
933 ObjectPropertyChangeEvent,
934 ObjectEvents::PropertyChange,
935 Event::Object
936);
937impl_from_user_facing_event_for_interface_event_enum!(
938 BoundsChangedEvent,
939 ObjectEvents,
940 ObjectEvents::BoundsChanged
941);
942impl_try_from_event_for_user_facing_type!(
943 BoundsChangedEvent,
944 ObjectEvents::BoundsChanged,
945 Event::Object
946);
947impl_from_user_facing_event_for_interface_event_enum!(
948 LinkSelectedEvent,
949 ObjectEvents,
950 ObjectEvents::LinkSelected
951);
952impl_try_from_event_for_user_facing_type!(
953 LinkSelectedEvent,
954 ObjectEvents::LinkSelected,
955 Event::Object
956);
957impl_from_user_facing_event_for_interface_event_enum!(
958 StateChangedEvent,
959 ObjectEvents,
960 ObjectEvents::StateChanged
961);
962impl_try_from_event_for_user_facing_type!(
963 StateChangedEvent,
964 ObjectEvents::StateChanged,
965 Event::Object
966);
967impl_from_user_facing_event_for_interface_event_enum!(
968 ChildrenChangedEvent,
969 ObjectEvents,
970 ObjectEvents::ChildrenChanged
971);
972impl_try_from_event_for_user_facing_type!(
973 ChildrenChangedEvent,
974 ObjectEvents::ChildrenChanged,
975 Event::Object
976);
977impl_from_user_facing_event_for_interface_event_enum!(
978 VisibleDataChangedEvent,
979 ObjectEvents,
980 ObjectEvents::VisibleDataChanged
981);
982impl_try_from_event_for_user_facing_type!(
983 VisibleDataChangedEvent,
984 ObjectEvents::VisibleDataChanged,
985 Event::Object
986);
987impl_from_user_facing_event_for_interface_event_enum!(
988 SelectionChangedEvent,
989 ObjectEvents,
990 ObjectEvents::SelectionChanged
991);
992impl_try_from_event_for_user_facing_type!(
993 SelectionChangedEvent,
994 ObjectEvents::SelectionChanged,
995 Event::Object
996);
997impl_from_user_facing_event_for_interface_event_enum!(
998 ModelChangedEvent,
999 ObjectEvents,
1000 ObjectEvents::ModelChanged
1001);
1002impl_try_from_event_for_user_facing_type!(
1003 ModelChangedEvent,
1004 ObjectEvents::ModelChanged,
1005 Event::Object
1006);
1007impl_from_user_facing_event_for_interface_event_enum!(
1008 ActiveDescendantChangedEvent,
1009 ObjectEvents,
1010 ObjectEvents::ActiveDescendantChanged
1011);
1012impl_try_from_event_for_user_facing_type!(
1013 ActiveDescendantChangedEvent,
1014 ObjectEvents::ActiveDescendantChanged,
1015 Event::Object
1016);
1017impl_from_user_facing_event_for_interface_event_enum!(
1018 AnnouncementEvent,
1019 ObjectEvents,
1020 ObjectEvents::Announcement
1021);
1022impl_try_from_event_for_user_facing_type!(
1023 AnnouncementEvent,
1024 ObjectEvents::Announcement,
1025 Event::Object
1026);
1027impl_from_user_facing_event_for_interface_event_enum!(
1028 ObjectAttributesChangedEvent,
1029 ObjectEvents,
1030 ObjectEvents::AttributesChanged
1031);
1032impl_try_from_event_for_user_facing_type!(
1033 ObjectAttributesChangedEvent,
1034 ObjectEvents::AttributesChanged,
1035 Event::Object
1036);
1037impl_from_user_facing_event_for_interface_event_enum!(
1038 RowInsertedEvent,
1039 ObjectEvents,
1040 ObjectEvents::RowInserted
1041);
1042impl_try_from_event_for_user_facing_type!(
1043 RowInsertedEvent,
1044 ObjectEvents::RowInserted,
1045 Event::Object
1046);
1047impl_from_user_facing_event_for_interface_event_enum!(
1048 RowReorderedEvent,
1049 ObjectEvents,
1050 ObjectEvents::RowReordered
1051);
1052impl_try_from_event_for_user_facing_type!(
1053 RowReorderedEvent,
1054 ObjectEvents::RowReordered,
1055 Event::Object
1056);
1057impl_from_user_facing_event_for_interface_event_enum!(
1058 RowDeletedEvent,
1059 ObjectEvents,
1060 ObjectEvents::RowDeleted
1061);
1062impl_try_from_event_for_user_facing_type!(RowDeletedEvent, ObjectEvents::RowDeleted, Event::Object);
1063impl_from_user_facing_event_for_interface_event_enum!(
1064 ColumnInsertedEvent,
1065 ObjectEvents,
1066 ObjectEvents::ColumnInserted
1067);
1068impl_try_from_event_for_user_facing_type!(
1069 ColumnInsertedEvent,
1070 ObjectEvents::ColumnInserted,
1071 Event::Object
1072);
1073impl_from_user_facing_event_for_interface_event_enum!(
1074 ColumnReorderedEvent,
1075 ObjectEvents,
1076 ObjectEvents::ColumnReordered
1077);
1078impl_try_from_event_for_user_facing_type!(
1079 ColumnReorderedEvent,
1080 ObjectEvents::ColumnReordered,
1081 Event::Object
1082);
1083impl_from_user_facing_event_for_interface_event_enum!(
1084 ColumnDeletedEvent,
1085 ObjectEvents,
1086 ObjectEvents::ColumnDeleted
1087);
1088impl_try_from_event_for_user_facing_type!(
1089 ColumnDeletedEvent,
1090 ObjectEvents::ColumnDeleted,
1091 Event::Object
1092);
1093impl_from_user_facing_event_for_interface_event_enum!(
1094 TextBoundsChangedEvent,
1095 ObjectEvents,
1096 ObjectEvents::TextBoundsChanged
1097);
1098impl_try_from_event_for_user_facing_type!(
1099 TextBoundsChangedEvent,
1100 ObjectEvents::TextBoundsChanged,
1101 Event::Object
1102);
1103impl_from_user_facing_event_for_interface_event_enum!(
1104 TextSelectionChangedEvent,
1105 ObjectEvents,
1106 ObjectEvents::TextSelectionChanged
1107);
1108impl_try_from_event_for_user_facing_type!(
1109 TextSelectionChangedEvent,
1110 ObjectEvents::TextSelectionChanged,
1111 Event::Object
1112);
1113impl_from_user_facing_event_for_interface_event_enum!(
1114 TextAttributesChangedEvent,
1115 ObjectEvents,
1116 ObjectEvents::TextAttributesChanged
1117);
1118impl_try_from_event_for_user_facing_type!(
1119 TextAttributesChangedEvent,
1120 ObjectEvents::TextAttributesChanged,
1121 Event::Object
1122);
1123impl_from_user_facing_event_for_interface_event_enum!(
1124 TextCaretMovedEvent,
1125 ObjectEvents,
1126 ObjectEvents::TextCaretMoved
1127);
1128impl_try_from_event_for_user_facing_type!(
1129 TextCaretMovedEvent,
1130 ObjectEvents::TextCaretMoved,
1131 Event::Object
1132);
1133
1134impl DBusMatchRule for ObjectEvents {
1135 const MATCH_RULE_STRING: &'static str = "type='signal',interface='org.a11y.atspi.Event.Object'";
1136}
1137
1138impl DBusInterface for ObjectEvents {
1139 const DBUS_INTERFACE: &'static str = "org.a11y.atspi.Event.Object";
1140}
1141
1142impl RegistryEventString for ObjectEvents {
1143 const REGISTRY_EVENT_STRING: &'static str = "object:";
1144}
1145
1146#[cfg(feature = "zbus")]
1147impl EventWrapperMessageConversion for ObjectEvents {
1148 fn try_from_message_interface_checked(
1149 msg: &zbus::Message,
1150 hdr: &Header,
1151 ) -> Result<Self, AtspiError> {
1152 let member = hdr.member().ok_or(AtspiError::MissingMember)?;
1153 match member.as_str() {
1154 ObjectPropertyChangeEvent::DBUS_MEMBER => Ok(ObjectEvents::PropertyChange(
1155 ObjectPropertyChangeEvent::from_message_unchecked(msg, hdr)?,
1156 )),
1157 BoundsChangedEvent::DBUS_MEMBER => Ok(ObjectEvents::BoundsChanged(
1158 BoundsChangedEvent::from_message_unchecked(msg, hdr)?,
1159 )),
1160 LinkSelectedEvent::DBUS_MEMBER => {
1161 Ok(ObjectEvents::LinkSelected(LinkSelectedEvent::from_message_unchecked(msg, hdr)?))
1162 }
1163 StateChangedEvent::DBUS_MEMBER => {
1164 Ok(ObjectEvents::StateChanged(StateChangedEvent::from_message_unchecked(msg, hdr)?))
1165 }
1166 ChildrenChangedEvent::DBUS_MEMBER => Ok(ObjectEvents::ChildrenChanged(
1167 ChildrenChangedEvent::from_message_unchecked(msg, hdr)?,
1168 )),
1169 VisibleDataChangedEvent::DBUS_MEMBER => Ok(ObjectEvents::VisibleDataChanged(
1170 VisibleDataChangedEvent::from_message_unchecked(msg, hdr)?,
1171 )),
1172 SelectionChangedEvent::DBUS_MEMBER => Ok(ObjectEvents::SelectionChanged(
1173 SelectionChangedEvent::from_message_unchecked(msg, hdr)?,
1174 )),
1175 ModelChangedEvent::DBUS_MEMBER => {
1176 Ok(ObjectEvents::ModelChanged(ModelChangedEvent::from_message_unchecked(msg, hdr)?))
1177 }
1178 ActiveDescendantChangedEvent::DBUS_MEMBER => Ok(ObjectEvents::ActiveDescendantChanged(
1179 ActiveDescendantChangedEvent::from_message_unchecked(msg, hdr)?,
1180 )),
1181 AnnouncementEvent::DBUS_MEMBER => {
1182 Ok(ObjectEvents::Announcement(AnnouncementEvent::from_message_unchecked(msg, hdr)?))
1183 }
1184 ObjectAttributesChangedEvent::DBUS_MEMBER => Ok(ObjectEvents::AttributesChanged(
1185 ObjectAttributesChangedEvent::from_message_unchecked(msg, hdr)?,
1186 )),
1187 RowInsertedEvent::DBUS_MEMBER => {
1188 Ok(ObjectEvents::RowInserted(RowInsertedEvent::from_message_unchecked(msg, hdr)?))
1189 }
1190 RowReorderedEvent::DBUS_MEMBER => {
1191 Ok(ObjectEvents::RowReordered(RowReorderedEvent::from_message_unchecked(msg, hdr)?))
1192 }
1193 RowDeletedEvent::DBUS_MEMBER => {
1194 Ok(ObjectEvents::RowDeleted(RowDeletedEvent::from_message_unchecked(msg, hdr)?))
1195 }
1196 ColumnInsertedEvent::DBUS_MEMBER => Ok(ObjectEvents::ColumnInserted(
1197 ColumnInsertedEvent::from_message_unchecked(msg, hdr)?,
1198 )),
1199 ColumnReorderedEvent::DBUS_MEMBER => Ok(ObjectEvents::ColumnReordered(
1200 ColumnReorderedEvent::from_message_unchecked(msg, hdr)?,
1201 )),
1202 ColumnDeletedEvent::DBUS_MEMBER => Ok(ObjectEvents::ColumnDeleted(
1203 ColumnDeletedEvent::from_message_unchecked(msg, hdr)?,
1204 )),
1205 TextBoundsChangedEvent::DBUS_MEMBER => Ok(ObjectEvents::TextBoundsChanged(
1206 TextBoundsChangedEvent::from_message_unchecked(msg, hdr)?,
1207 )),
1208 TextSelectionChangedEvent::DBUS_MEMBER => Ok(ObjectEvents::TextSelectionChanged(
1209 TextSelectionChangedEvent::from_message_unchecked(msg, hdr)?,
1210 )),
1211 TextChangedEvent::DBUS_MEMBER => {
1212 Ok(ObjectEvents::TextChanged(TextChangedEvent::from_message_unchecked(msg, hdr)?))
1213 }
1214 TextAttributesChangedEvent::DBUS_MEMBER => Ok(ObjectEvents::TextAttributesChanged(
1215 TextAttributesChangedEvent::from_message_unchecked(msg, hdr)?,
1216 )),
1217 TextCaretMovedEvent::DBUS_MEMBER => Ok(ObjectEvents::TextCaretMoved(
1218 TextCaretMovedEvent::from_message_unchecked(msg, hdr)?,
1219 )),
1220 _ => Err(AtspiError::MemberMatch(format!(
1221 "No matching member {member} for interface {}",
1222 Self::DBUS_INTERFACE,
1223 ))),
1224 }
1225 }
1226}
1227
1228#[cfg(feature = "zbus")]
1229impl TryFrom<&zbus::Message> for ObjectEvents {
1230 type Error = AtspiError;
1231 fn try_from(msg: &zbus::Message) -> Result<Self, Self::Error> {
1232 Self::try_from_message(msg)
1233 }
1234}
1235
1236#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Eq, Hash)]
1240#[allow(clippy::module_name_repetitions)]
1241pub enum CacheEvents {
1242 Add(AddAccessibleEvent),
1244 LegacyAdd(LegacyAddAccessibleEvent),
1246 Remove(RemoveAccessibleEvent),
1248}
1249
1250impl_from_user_facing_type_for_event_enum!(RemoveAccessibleEvent, Event::Cache);
1251impl_from_user_facing_type_for_event_enum!(AddAccessibleEvent, Event::Cache);
1252impl_from_user_facing_type_for_event_enum!(LegacyAddAccessibleEvent, Event::Cache);
1253
1254impl DBusMatchRule for CacheEvents {
1255 const MATCH_RULE_STRING: &'static str = "type='signal',interface='org.a11y.atspi.Cache'";
1256}
1257
1258impl RegistryEventString for CacheEvents {
1259 const REGISTRY_EVENT_STRING: &'static str = "Cache";
1260}
1261
1262impl DBusInterface for CacheEvents {
1263 const DBUS_INTERFACE: &'static str = "org.a11y.atspi.Cache";
1264}
1265
1266impl EventTypeProperties for CacheEvents {
1267 fn member(&self) -> &'static str {
1268 match self {
1269 Self::Add(inner) => inner.member(),
1270 Self::LegacyAdd(inner) => inner.member(),
1271 Self::Remove(inner) => inner.member(),
1272 }
1273 }
1274 fn interface(&self) -> &'static str {
1275 match self {
1276 Self::Add(inner) => inner.interface(),
1277 Self::LegacyAdd(inner) => inner.interface(),
1278 Self::Remove(inner) => inner.interface(),
1279 }
1280 }
1281 fn match_rule(&self) -> &'static str {
1282 match self {
1283 Self::Add(inner) => inner.match_rule(),
1284 Self::LegacyAdd(inner) => inner.match_rule(),
1285 Self::Remove(inner) => inner.match_rule(),
1286 }
1287 }
1288 fn registry_string(&self) -> &'static str {
1289 match self {
1290 Self::Add(inner) => inner.registry_string(),
1291 Self::LegacyAdd(inner) => inner.registry_string(),
1292 Self::Remove(inner) => inner.registry_string(),
1293 }
1294 }
1295}
1296
1297impl EventProperties for CacheEvents {
1298 fn path(&self) -> ObjectPath<'_> {
1299 match self {
1300 Self::Add(inner) => inner.path(),
1301 Self::LegacyAdd(inner) => inner.path(),
1302 Self::Remove(inner) => inner.path(),
1303 }
1304 }
1305 fn sender(&self) -> UniqueName<'_> {
1306 match self {
1307 Self::Add(inner) => inner.sender(),
1308 Self::LegacyAdd(inner) => inner.sender(),
1309 Self::Remove(inner) => inner.sender(),
1310 }
1311 }
1312}
1313
1314#[cfg(feature = "zbus")]
1315impl EventWrapperMessageConversion for CacheEvents {
1316 fn try_from_message_interface_checked(
1317 msg: &zbus::Message,
1318 hdr: &Header,
1319 ) -> Result<Self, AtspiError> {
1320 let member = hdr.member().ok_or(AtspiError::MissingMember)?;
1321 match member.as_str() {
1322 AddAccessibleEvent::DBUS_MEMBER => {
1323 let body = msg.body();
1324 let sig = body.signature();
1325 if sig == CacheItem::SIGNATURE {
1326 Ok(CacheEvents::Add(AddAccessibleEvent::from_message_unchecked(msg, hdr)?))
1327 } else if sig == LegacyCacheItem::SIGNATURE {
1328 Ok(CacheEvents::LegacyAdd(LegacyAddAccessibleEvent::from_message_unchecked(
1329 msg, hdr,
1330 )?))
1331 } else {
1332 Err(AtspiError::SignatureMatch(format!(
1333 "No matching event for signature {} in interface {}",
1334 &sig.to_string(),
1335 Self::DBUS_INTERFACE
1336 )))
1337 }
1338 }
1339 RemoveAccessibleEvent::DBUS_MEMBER => {
1340 Ok(CacheEvents::Remove(RemoveAccessibleEvent::from_message_unchecked(msg, hdr)?))
1341 }
1342 _ => Err(AtspiError::MemberMatch(format!(
1343 "No member {} in {}",
1344 member.as_str(),
1345 Self::DBUS_INTERFACE
1346 ))),
1347 }
1348 }
1349}
1350
1351impl_tryfrommessage_for_event_wrapper!(CacheEvents);
1352
1353#[cfg(feature = "zbus")]
1354impl TryFrom<&zbus::Message> for CacheEvents {
1355 type Error = AtspiError;
1356 fn try_from(msg: &zbus::Message) -> Result<Self, Self::Error> {
1357 Self::try_from_message(msg)
1358 }
1359}
1360
1361impl_from_user_facing_event_for_interface_event_enum!(
1362 LegacyAddAccessibleEvent,
1363 CacheEvents,
1364 CacheEvents::LegacyAdd
1365);
1366impl_try_from_event_for_user_facing_type!(
1367 LegacyAddAccessibleEvent,
1368 CacheEvents::LegacyAdd,
1369 Event::Cache
1370);
1371impl_from_user_facing_event_for_interface_event_enum!(
1372 AddAccessibleEvent,
1373 CacheEvents,
1374 CacheEvents::Add
1375);
1376impl_try_from_event_for_user_facing_type!(AddAccessibleEvent, CacheEvents::Add, Event::Cache);
1377impl_from_user_facing_event_for_interface_event_enum!(
1378 RemoveAccessibleEvent,
1379 CacheEvents,
1380 CacheEvents::Remove
1381);
1382impl_try_from_event_for_user_facing_type!(RemoveAccessibleEvent, CacheEvents::Remove, Event::Cache);
1383impl_try_from_event_for_interface_enum!(CacheEvents, Event::Cache);
1384
1385#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq, Hash)]
1386pub enum FocusEvents {
1387 Focus(FocusEvent),
1389}
1390
1391impl_tryfrommessage_for_event_wrapper!(FocusEvents);
1392
1393#[cfg(feature = "zbus")]
1394impl TryFrom<&zbus::Message> for FocusEvents {
1395 type Error = AtspiError;
1396 fn try_from(msg: &zbus::Message) -> Result<Self, Self::Error> {
1397 Self::try_from_message(msg)
1398 }
1399}
1400
1401impl_from_interface_event_enum_for_event!(FocusEvents, Event::Focus);
1402impl_try_from_event_for_user_facing_type!(FocusEvent, FocusEvents::Focus, Event::Focus);
1403
1404impl EventTypeProperties for FocusEvents {
1405 fn member(&self) -> &'static str {
1406 match self {
1407 Self::Focus(inner) => inner.member(),
1408 }
1409 }
1410 fn match_rule(&self) -> &'static str {
1411 match self {
1412 Self::Focus(inner) => inner.match_rule(),
1413 }
1414 }
1415 fn interface(&self) -> &'static str {
1416 match self {
1417 Self::Focus(inner) => inner.interface(),
1418 }
1419 }
1420 fn registry_string(&self) -> &'static str {
1421 match self {
1422 Self::Focus(inner) => inner.registry_string(),
1423 }
1424 }
1425}
1426
1427impl EventProperties for FocusEvents {
1428 fn path(&self) -> ObjectPath<'_> {
1429 match self {
1430 Self::Focus(inner) => inner.path(),
1431 }
1432 }
1433 fn sender(&self) -> UniqueName<'_> {
1434 match self {
1435 Self::Focus(inner) => inner.sender(),
1436 }
1437 }
1438}
1439
1440impl_try_from_event_for_interface_enum!(FocusEvents, Event::Focus);
1441
1442impl_from_user_facing_event_for_interface_event_enum!(FocusEvent, FocusEvents, FocusEvents::Focus);
1443impl_from_user_facing_type_for_event_enum!(FocusEvent, Event::Focus);
1444event_wrapper_test_cases!(FocusEvents, FocusEvent);
1445
1446#[cfg(feature = "zbus")]
1447impl EventWrapperMessageConversion for FocusEvents {
1448 fn try_from_message_interface_checked(
1449 msg: &zbus::Message,
1450 hdr: &Header,
1451 ) -> Result<Self, AtspiError> {
1452 let member = hdr.member().ok_or(AtspiError::MissingMember)?;
1453 match member.as_str() {
1454 FocusEvent::DBUS_MEMBER => {
1455 Ok(FocusEvents::Focus(FocusEvent::from_message_unchecked(msg, hdr)?))
1456 }
1457 _ => Err(AtspiError::MemberMatch(format!(
1458 "No matching member {member} for interface {}",
1459 Self::DBUS_INTERFACE,
1460 ))),
1461 }
1462 }
1463}
1464
1465impl DBusMatchRule for FocusEvents {
1466 const MATCH_RULE_STRING: &'static str = "type='signal',interface='org.a11y.atspi.Event.Focus'";
1467}
1468
1469impl RegistryEventString for FocusEvents {
1470 const REGISTRY_EVENT_STRING: &'static str = "focus:";
1471}
1472
1473impl DBusInterface for FocusEvents {
1474 const DBUS_INTERFACE: &'static str = "org.a11y.atspi.Event.Focus";
1475}
1476
1477#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq, Hash)]
1479pub enum TerminalEvents {
1480 LineChanged(LineChangedEvent),
1482 ColumnCountChanged(ColumnCountChangedEvent),
1484 LineCountChanged(LineCountChangedEvent),
1486 ApplicationChanged(ApplicationChangedEvent),
1488 CharWidthChanged(CharWidthChangedEvent),
1490}
1491
1492impl_tryfrommessage_for_event_wrapper!(TerminalEvents);
1493
1494impl EventTypeProperties for TerminalEvents {
1495 fn member(&self) -> &'static str {
1496 match self {
1497 Self::LineChanged(inner) => inner.member(),
1498 Self::ColumnCountChanged(inner) => inner.member(),
1499 Self::LineCountChanged(inner) => inner.member(),
1500 Self::ApplicationChanged(inner) => inner.member(),
1501 Self::CharWidthChanged(inner) => inner.member(),
1502 }
1503 }
1504 fn interface(&self) -> &'static str {
1505 match self {
1506 Self::LineChanged(inner) => inner.interface(),
1507 Self::ColumnCountChanged(inner) => inner.interface(),
1508 Self::LineCountChanged(inner) => inner.interface(),
1509 Self::ApplicationChanged(inner) => inner.interface(),
1510 Self::CharWidthChanged(inner) => inner.interface(),
1511 }
1512 }
1513 fn match_rule(&self) -> &'static str {
1514 match self {
1515 Self::LineChanged(inner) => inner.match_rule(),
1516 Self::ColumnCountChanged(inner) => inner.match_rule(),
1517 Self::LineCountChanged(inner) => inner.match_rule(),
1518 Self::ApplicationChanged(inner) => inner.match_rule(),
1519 Self::CharWidthChanged(inner) => inner.match_rule(),
1520 }
1521 }
1522 fn registry_string(&self) -> &'static str {
1523 match self {
1524 Self::LineChanged(inner) => inner.registry_string(),
1525 Self::ColumnCountChanged(inner) => inner.registry_string(),
1526 Self::LineCountChanged(inner) => inner.registry_string(),
1527 Self::ApplicationChanged(inner) => inner.registry_string(),
1528 Self::CharWidthChanged(inner) => inner.registry_string(),
1529 }
1530 }
1531}
1532
1533impl EventProperties for TerminalEvents {
1534 fn path(&self) -> ObjectPath<'_> {
1535 match self {
1536 Self::LineChanged(inner) => inner.path(),
1537 Self::ColumnCountChanged(inner) => inner.path(),
1538 Self::LineCountChanged(inner) => inner.path(),
1539 Self::ApplicationChanged(inner) => inner.path(),
1540 Self::CharWidthChanged(inner) => inner.path(),
1541 }
1542 }
1543 fn sender(&self) -> UniqueName<'_> {
1544 match self {
1545 Self::LineChanged(inner) => inner.sender(),
1546 Self::ColumnCountChanged(inner) => inner.sender(),
1547 Self::LineCountChanged(inner) => inner.sender(),
1548 Self::ApplicationChanged(inner) => inner.sender(),
1549 Self::CharWidthChanged(inner) => inner.sender(),
1550 }
1551 }
1552}
1553
1554impl_from_user_facing_type_for_event_enum!(CharWidthChangedEvent, Event::Terminal);
1555impl_from_user_facing_type_for_event_enum!(ApplicationChangedEvent, Event::Terminal);
1556impl_from_user_facing_type_for_event_enum!(LineCountChangedEvent, Event::Terminal);
1557impl_from_user_facing_type_for_event_enum!(ColumnCountChangedEvent, Event::Terminal);
1558impl_from_user_facing_type_for_event_enum!(LineChangedEvent, Event::Terminal);
1559
1560impl_try_from_event_for_interface_enum!(TerminalEvents, Event::Terminal);
1561impl_from_interface_event_enum_for_event!(TerminalEvents, Event::Terminal);
1562
1563event_wrapper_test_cases!(TerminalEvents, LineChangedEvent);
1564
1565impl DBusMatchRule for TerminalEvents {
1566 const MATCH_RULE_STRING: &'static str =
1567 "type='signal',interface='org.a11y.atspi.Event.Terminal'";
1568}
1569
1570impl RegistryEventString for TerminalEvents {
1571 const REGISTRY_EVENT_STRING: &'static str = "terminal:";
1572}
1573
1574impl DBusInterface for TerminalEvents {
1575 const DBUS_INTERFACE: &'static str = "org.a11y.atspi.Event.Terminal";
1576}
1577
1578#[cfg(feature = "zbus")]
1579impl EventWrapperMessageConversion for TerminalEvents {
1580 fn try_from_message_interface_checked(
1581 msg: &zbus::Message,
1582 hdr: &Header,
1583 ) -> Result<Self, AtspiError> {
1584 let member = hdr
1585 .member()
1586 .ok_or(AtspiError::MemberMatch("Event without member".into()))?;
1587 match member.as_str() {
1588 LineChangedEvent::DBUS_MEMBER => {
1589 Ok(TerminalEvents::LineChanged(LineChangedEvent::from_message_unchecked(msg, hdr)?))
1590 }
1591 ColumnCountChangedEvent::DBUS_MEMBER => Ok(TerminalEvents::ColumnCountChanged(
1592 ColumnCountChangedEvent::from_message_unchecked(msg, hdr)?,
1593 )),
1594 LineCountChangedEvent::DBUS_MEMBER => Ok(TerminalEvents::LineCountChanged(
1595 LineCountChangedEvent::from_message_unchecked(msg, hdr)?,
1596 )),
1597 ApplicationChangedEvent::DBUS_MEMBER => Ok(TerminalEvents::ApplicationChanged(
1598 ApplicationChangedEvent::from_message_unchecked(msg, hdr)?,
1599 )),
1600 CharWidthChangedEvent::DBUS_MEMBER => Ok(TerminalEvents::CharWidthChanged(
1601 CharWidthChangedEvent::from_message_unchecked(msg, hdr)?,
1602 )),
1603 _ => Err(AtspiError::MemberMatch("No matching member for Terminal".into())),
1604 }
1605 }
1606}
1607
1608#[cfg(feature = "zbus")]
1609impl TryFrom<&zbus::Message> for TerminalEvents {
1610 type Error = AtspiError;
1611 fn try_from(msg: &zbus::Message) -> Result<Self, Self::Error> {
1612 Self::try_from_message(msg)
1613 }
1614}
1615
1616impl_from_user_facing_event_for_interface_event_enum!(
1617 LineChangedEvent,
1618 TerminalEvents,
1619 TerminalEvents::LineChanged
1620);
1621impl_try_from_event_for_user_facing_type!(
1622 LineChangedEvent,
1623 TerminalEvents::LineChanged,
1624 Event::Terminal
1625);
1626impl_from_user_facing_event_for_interface_event_enum!(
1627 ColumnCountChangedEvent,
1628 TerminalEvents,
1629 TerminalEvents::ColumnCountChanged
1630);
1631impl_try_from_event_for_user_facing_type!(
1632 ColumnCountChangedEvent,
1633 TerminalEvents::ColumnCountChanged,
1634 Event::Terminal
1635);
1636impl_from_user_facing_event_for_interface_event_enum!(
1637 LineCountChangedEvent,
1638 TerminalEvents,
1639 TerminalEvents::LineCountChanged
1640);
1641impl_try_from_event_for_user_facing_type!(
1642 LineCountChangedEvent,
1643 TerminalEvents::LineCountChanged,
1644 Event::Terminal
1645);
1646impl_from_user_facing_event_for_interface_event_enum!(
1647 ApplicationChangedEvent,
1648 TerminalEvents,
1649 TerminalEvents::ApplicationChanged
1650);
1651impl_try_from_event_for_user_facing_type!(
1652 ApplicationChangedEvent,
1653 TerminalEvents::ApplicationChanged,
1654 Event::Terminal
1655);
1656impl_from_user_facing_event_for_interface_event_enum!(
1657 CharWidthChangedEvent,
1658 TerminalEvents,
1659 TerminalEvents::CharWidthChanged
1660);
1661impl_try_from_event_for_user_facing_type!(
1662 CharWidthChangedEvent,
1663 TerminalEvents::CharWidthChanged,
1664 Event::Terminal
1665);
1666
1667#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq, Hash)]
1669pub enum WindowEvents {
1670 PropertyChange(WindowPropertyChangeEvent),
1672 Minimize(MinimizeEvent),
1674 Maximize(MaximizeEvent),
1676 Restore(RestoreEvent),
1678 Close(CloseEvent),
1680 Create(CreateEvent),
1682 Reparent(ReparentEvent),
1684 DesktopCreate(DesktopCreateEvent),
1686 DesktopDestroy(DesktopDestroyEvent),
1688 Destroy(DestroyEvent),
1690 Activate(ActivateEvent),
1692 Deactivate(DeactivateEvent),
1694 Raise(RaiseEvent),
1696 Lower(LowerEvent),
1698 Move(MoveEvent),
1700 Resize(ResizeEvent),
1702 Shade(ShadeEvent),
1704 UUshade(UUshadeEvent),
1706 Restyle(RestyleEvent),
1708}
1709
1710impl_tryfrommessage_for_event_wrapper!(WindowEvents);
1711
1712impl EventTypeProperties for WindowEvents {
1713 fn member(&self) -> &'static str {
1714 match self {
1715 Self::PropertyChange(inner) => inner.member(),
1716 Self::Minimize(inner) => inner.member(),
1717 Self::Maximize(inner) => inner.member(),
1718 Self::Restore(inner) => inner.member(),
1719 Self::Close(inner) => inner.member(),
1720 Self::Create(inner) => inner.member(),
1721 Self::Reparent(inner) => inner.member(),
1722 Self::DesktopCreate(inner) => inner.member(),
1723 Self::DesktopDestroy(inner) => inner.member(),
1724 Self::Destroy(inner) => inner.member(),
1725 Self::Activate(inner) => inner.member(),
1726 Self::Deactivate(inner) => inner.member(),
1727 Self::Raise(inner) => inner.member(),
1728 Self::Lower(inner) => inner.member(),
1729 Self::Move(inner) => inner.member(),
1730 Self::Resize(inner) => inner.member(),
1731 Self::Shade(inner) => inner.member(),
1732 Self::UUshade(inner) => inner.member(),
1733 Self::Restyle(inner) => inner.member(),
1734 }
1735 }
1736 fn interface(&self) -> &'static str {
1737 match self {
1738 Self::PropertyChange(inner) => inner.interface(),
1739 Self::Minimize(inner) => inner.interface(),
1740 Self::Maximize(inner) => inner.interface(),
1741 Self::Restore(inner) => inner.interface(),
1742 Self::Close(inner) => inner.interface(),
1743 Self::Create(inner) => inner.interface(),
1744 Self::Reparent(inner) => inner.interface(),
1745 Self::DesktopCreate(inner) => inner.interface(),
1746 Self::DesktopDestroy(inner) => inner.interface(),
1747 Self::Destroy(inner) => inner.interface(),
1748 Self::Activate(inner) => inner.interface(),
1749 Self::Deactivate(inner) => inner.interface(),
1750 Self::Raise(inner) => inner.interface(),
1751 Self::Lower(inner) => inner.interface(),
1752 Self::Move(inner) => inner.interface(),
1753 Self::Resize(inner) => inner.interface(),
1754 Self::Shade(inner) => inner.interface(),
1755 Self::UUshade(inner) => inner.interface(),
1756 Self::Restyle(inner) => inner.interface(),
1757 }
1758 }
1759 fn match_rule(&self) -> &'static str {
1760 match self {
1761 Self::PropertyChange(inner) => inner.match_rule(),
1762 Self::Minimize(inner) => inner.match_rule(),
1763 Self::Maximize(inner) => inner.match_rule(),
1764 Self::Restore(inner) => inner.match_rule(),
1765 Self::Close(inner) => inner.match_rule(),
1766 Self::Create(inner) => inner.match_rule(),
1767 Self::Reparent(inner) => inner.match_rule(),
1768 Self::DesktopCreate(inner) => inner.match_rule(),
1769 Self::DesktopDestroy(inner) => inner.match_rule(),
1770 Self::Destroy(inner) => inner.match_rule(),
1771 Self::Activate(inner) => inner.match_rule(),
1772 Self::Deactivate(inner) => inner.match_rule(),
1773 Self::Raise(inner) => inner.match_rule(),
1774 Self::Lower(inner) => inner.match_rule(),
1775 Self::Move(inner) => inner.match_rule(),
1776 Self::Resize(inner) => inner.match_rule(),
1777 Self::Shade(inner) => inner.match_rule(),
1778 Self::UUshade(inner) => inner.match_rule(),
1779 Self::Restyle(inner) => inner.match_rule(),
1780 }
1781 }
1782 fn registry_string(&self) -> &'static str {
1783 match self {
1784 Self::PropertyChange(inner) => inner.registry_string(),
1785 Self::Minimize(inner) => inner.registry_string(),
1786 Self::Maximize(inner) => inner.registry_string(),
1787 Self::Restore(inner) => inner.registry_string(),
1788 Self::Close(inner) => inner.registry_string(),
1789 Self::Create(inner) => inner.registry_string(),
1790 Self::Reparent(inner) => inner.registry_string(),
1791 Self::DesktopCreate(inner) => inner.registry_string(),
1792 Self::DesktopDestroy(inner) => inner.registry_string(),
1793 Self::Destroy(inner) => inner.registry_string(),
1794 Self::Activate(inner) => inner.registry_string(),
1795 Self::Deactivate(inner) => inner.registry_string(),
1796 Self::Raise(inner) => inner.registry_string(),
1797 Self::Lower(inner) => inner.registry_string(),
1798 Self::Move(inner) => inner.registry_string(),
1799 Self::Resize(inner) => inner.registry_string(),
1800 Self::Shade(inner) => inner.registry_string(),
1801 Self::UUshade(inner) => inner.registry_string(),
1802 Self::Restyle(inner) => inner.registry_string(),
1803 }
1804 }
1805}
1806
1807impl EventProperties for WindowEvents {
1808 fn path(&self) -> ObjectPath<'_> {
1809 match self {
1810 Self::PropertyChange(inner) => inner.path(),
1811 Self::Minimize(inner) => inner.path(),
1812 Self::Maximize(inner) => inner.path(),
1813 Self::Restore(inner) => inner.path(),
1814 Self::Close(inner) => inner.path(),
1815 Self::Create(inner) => inner.path(),
1816 Self::Reparent(inner) => inner.path(),
1817 Self::DesktopCreate(inner) => inner.path(),
1818 Self::DesktopDestroy(inner) => inner.path(),
1819 Self::Destroy(inner) => inner.path(),
1820 Self::Activate(inner) => inner.path(),
1821 Self::Deactivate(inner) => inner.path(),
1822 Self::Raise(inner) => inner.path(),
1823 Self::Lower(inner) => inner.path(),
1824 Self::Move(inner) => inner.path(),
1825 Self::Resize(inner) => inner.path(),
1826 Self::Shade(inner) => inner.path(),
1827 Self::UUshade(inner) => inner.path(),
1828 Self::Restyle(inner) => inner.path(),
1829 }
1830 }
1831 fn sender(&self) -> UniqueName<'_> {
1832 match self {
1833 Self::PropertyChange(inner) => inner.sender(),
1834 Self::Minimize(inner) => inner.sender(),
1835 Self::Maximize(inner) => inner.sender(),
1836 Self::Restore(inner) => inner.sender(),
1837 Self::Close(inner) => inner.sender(),
1838 Self::Create(inner) => inner.sender(),
1839 Self::Reparent(inner) => inner.sender(),
1840 Self::DesktopCreate(inner) => inner.sender(),
1841 Self::DesktopDestroy(inner) => inner.sender(),
1842 Self::Destroy(inner) => inner.sender(),
1843 Self::Activate(inner) => inner.sender(),
1844 Self::Deactivate(inner) => inner.sender(),
1845 Self::Raise(inner) => inner.sender(),
1846 Self::Lower(inner) => inner.sender(),
1847 Self::Move(inner) => inner.sender(),
1848 Self::Resize(inner) => inner.sender(),
1849 Self::Shade(inner) => inner.sender(),
1850 Self::UUshade(inner) => inner.sender(),
1851 Self::Restyle(inner) => inner.sender(),
1852 }
1853 }
1854}
1855
1856impl_from_user_facing_type_for_event_enum!(ReparentEvent, Event::Window);
1857impl_from_user_facing_type_for_event_enum!(CloseEvent, Event::Window);
1858impl_from_user_facing_type_for_event_enum!(RestoreEvent, Event::Window);
1859impl_from_user_facing_type_for_event_enum!(MaximizeEvent, Event::Window);
1860impl_from_user_facing_type_for_event_enum!(MinimizeEvent, Event::Window);
1861impl_from_user_facing_type_for_event_enum!(WindowPropertyChangeEvent, Event::Window);
1862impl_from_user_facing_type_for_event_enum!(RestyleEvent, Event::Window);
1863impl_from_user_facing_type_for_event_enum!(UUshadeEvent, Event::Window);
1864impl_from_user_facing_type_for_event_enum!(ShadeEvent, Event::Window);
1865impl_from_user_facing_type_for_event_enum!(ResizeEvent, Event::Window);
1866impl_from_user_facing_type_for_event_enum!(MoveEvent, Event::Window);
1867impl_from_user_facing_type_for_event_enum!(LowerEvent, Event::Window);
1868impl_from_user_facing_type_for_event_enum!(RaiseEvent, Event::Window);
1869impl_from_user_facing_type_for_event_enum!(DeactivateEvent, Event::Window);
1870impl_from_user_facing_type_for_event_enum!(ActivateEvent, Event::Window);
1871impl_from_user_facing_type_for_event_enum!(DestroyEvent, Event::Window);
1872impl_from_user_facing_type_for_event_enum!(DesktopDestroyEvent, Event::Window);
1873impl_from_user_facing_type_for_event_enum!(DesktopCreateEvent, Event::Window);
1874impl_from_user_facing_type_for_event_enum!(CreateEvent, Event::Window);
1875
1876impl_try_from_event_for_interface_enum!(WindowEvents, Event::Window);
1877impl_from_interface_event_enum_for_event!(WindowEvents, Event::Window);
1878
1879event_wrapper_test_cases!(WindowEvents, MoveEvent);
1880
1881impl DBusMatchRule for WindowEvents {
1882 const MATCH_RULE_STRING: &'static str = "type='signal',interface='org.a11y.atspi.Event.Window'";
1883}
1884
1885impl DBusInterface for WindowEvents {
1886 const DBUS_INTERFACE: &'static str = "org.a11y.atspi.Event.Window";
1887}
1888
1889impl RegistryEventString for WindowEvents {
1890 const REGISTRY_EVENT_STRING: &'static str = "window:";
1891}
1892
1893#[cfg(feature = "zbus")]
1894impl EventWrapperMessageConversion for WindowEvents {
1895 fn try_from_message_interface_checked(
1896 msg: &zbus::Message,
1897 hdr: &Header,
1898 ) -> Result<Self, AtspiError> {
1899 let member = hdr.member().ok_or(AtspiError::MissingMember)?;
1900 match member.as_str() {
1901 WindowPropertyChangeEvent::DBUS_MEMBER => Ok(WindowEvents::PropertyChange(
1902 WindowPropertyChangeEvent::from_message_unchecked(msg, hdr)?,
1903 )),
1904 MinimizeEvent::DBUS_MEMBER => {
1905 Ok(WindowEvents::Minimize(MinimizeEvent::from_message_unchecked(msg, hdr)?))
1906 }
1907 MaximizeEvent::DBUS_MEMBER => {
1908 Ok(WindowEvents::Maximize(MaximizeEvent::from_message_unchecked(msg, hdr)?))
1909 }
1910 RestoreEvent::DBUS_MEMBER => {
1911 Ok(WindowEvents::Restore(RestoreEvent::from_message_unchecked(msg, hdr)?))
1912 }
1913 CloseEvent::DBUS_MEMBER => {
1914 Ok(WindowEvents::Close(CloseEvent::from_message_unchecked(msg, hdr)?))
1915 }
1916 CreateEvent::DBUS_MEMBER => {
1917 Ok(WindowEvents::Create(CreateEvent::from_message_unchecked(msg, hdr)?))
1918 }
1919 ReparentEvent::DBUS_MEMBER => {
1920 Ok(WindowEvents::Reparent(ReparentEvent::from_message_unchecked(msg, hdr)?))
1921 }
1922 DesktopCreateEvent::DBUS_MEMBER => Ok(WindowEvents::DesktopCreate(
1923 DesktopCreateEvent::from_message_unchecked(msg, hdr)?,
1924 )),
1925 DesktopDestroyEvent::DBUS_MEMBER => Ok(WindowEvents::DesktopDestroy(
1926 DesktopDestroyEvent::from_message_unchecked(msg, hdr)?,
1927 )),
1928 DestroyEvent::DBUS_MEMBER => {
1929 Ok(WindowEvents::Destroy(DestroyEvent::from_message_unchecked(msg, hdr)?))
1930 }
1931 ActivateEvent::DBUS_MEMBER => {
1932 Ok(WindowEvents::Activate(ActivateEvent::from_message_unchecked(msg, hdr)?))
1933 }
1934 DeactivateEvent::DBUS_MEMBER => {
1935 Ok(WindowEvents::Deactivate(DeactivateEvent::from_message_unchecked(msg, hdr)?))
1936 }
1937 RaiseEvent::DBUS_MEMBER => {
1938 Ok(WindowEvents::Raise(RaiseEvent::from_message_unchecked(msg, hdr)?))
1939 }
1940 LowerEvent::DBUS_MEMBER => {
1941 Ok(WindowEvents::Lower(LowerEvent::from_message_unchecked(msg, hdr)?))
1942 }
1943 MoveEvent::DBUS_MEMBER => {
1944 Ok(WindowEvents::Move(MoveEvent::from_message_unchecked(msg, hdr)?))
1945 }
1946 ResizeEvent::DBUS_MEMBER => {
1947 Ok(WindowEvents::Resize(ResizeEvent::from_message_unchecked(msg, hdr)?))
1948 }
1949 ShadeEvent::DBUS_MEMBER => {
1950 Ok(WindowEvents::Shade(ShadeEvent::from_message_unchecked(msg, hdr)?))
1951 }
1952 UUshadeEvent::DBUS_MEMBER => {
1953 Ok(WindowEvents::UUshade(UUshadeEvent::from_message_unchecked(msg, hdr)?))
1954 }
1955 RestyleEvent::DBUS_MEMBER => {
1956 Ok(WindowEvents::Restyle(RestyleEvent::from_message_unchecked(msg, hdr)?))
1957 }
1958 _ => Err(AtspiError::MemberMatch("No matching member for Window".into())),
1959 }
1960 }
1961}
1962
1963#[cfg(feature = "zbus")]
1964impl TryFrom<&zbus::Message> for WindowEvents {
1965 type Error = AtspiError;
1966 fn try_from(msg: &zbus::Message) -> Result<Self, Self::Error> {
1967 Self::try_from_message(msg)
1968 }
1969}
1970
1971impl_from_user_facing_event_for_interface_event_enum!(
1972 WindowPropertyChangeEvent,
1973 WindowEvents,
1974 WindowEvents::PropertyChange
1975);
1976impl_try_from_event_for_user_facing_type!(
1977 WindowPropertyChangeEvent,
1978 WindowEvents::PropertyChange,
1979 Event::Window
1980);
1981impl_from_user_facing_event_for_interface_event_enum!(
1982 MinimizeEvent,
1983 WindowEvents,
1984 WindowEvents::Minimize
1985);
1986impl_try_from_event_for_user_facing_type!(MinimizeEvent, WindowEvents::Minimize, Event::Window);
1987impl_from_user_facing_event_for_interface_event_enum!(
1988 MaximizeEvent,
1989 WindowEvents,
1990 WindowEvents::Maximize
1991);
1992impl_try_from_event_for_user_facing_type!(MaximizeEvent, WindowEvents::Maximize, Event::Window);
1993impl_from_user_facing_event_for_interface_event_enum!(
1994 RestoreEvent,
1995 WindowEvents,
1996 WindowEvents::Restore
1997);
1998impl_try_from_event_for_user_facing_type!(RestoreEvent, WindowEvents::Restore, Event::Window);
1999impl_from_user_facing_event_for_interface_event_enum!(
2000 CloseEvent,
2001 WindowEvents,
2002 WindowEvents::Close
2003);
2004impl_try_from_event_for_user_facing_type!(CloseEvent, WindowEvents::Close, Event::Window);
2005impl_from_user_facing_event_for_interface_event_enum!(
2006 CreateEvent,
2007 WindowEvents,
2008 WindowEvents::Create
2009);
2010impl_try_from_event_for_user_facing_type!(CreateEvent, WindowEvents::Create, Event::Window);
2011impl_from_user_facing_event_for_interface_event_enum!(
2012 ReparentEvent,
2013 WindowEvents,
2014 WindowEvents::Reparent
2015);
2016impl_try_from_event_for_user_facing_type!(ReparentEvent, WindowEvents::Reparent, Event::Window);
2017impl_from_user_facing_event_for_interface_event_enum!(
2018 DesktopCreateEvent,
2019 WindowEvents,
2020 WindowEvents::DesktopCreate
2021);
2022impl_try_from_event_for_user_facing_type!(
2023 DesktopCreateEvent,
2024 WindowEvents::DesktopCreate,
2025 Event::Window
2026);
2027impl_from_user_facing_event_for_interface_event_enum!(
2028 DesktopDestroyEvent,
2029 WindowEvents,
2030 WindowEvents::DesktopDestroy
2031);
2032impl_try_from_event_for_user_facing_type!(
2033 DesktopDestroyEvent,
2034 WindowEvents::DesktopDestroy,
2035 Event::Window
2036);
2037impl_from_user_facing_event_for_interface_event_enum!(
2038 DestroyEvent,
2039 WindowEvents,
2040 WindowEvents::Destroy
2041);
2042impl_try_from_event_for_user_facing_type!(DestroyEvent, WindowEvents::Destroy, Event::Window);
2043impl_from_user_facing_event_for_interface_event_enum!(
2044 ActivateEvent,
2045 WindowEvents,
2046 WindowEvents::Activate
2047);
2048impl_try_from_event_for_user_facing_type!(ActivateEvent, WindowEvents::Activate, Event::Window);
2049impl_from_user_facing_event_for_interface_event_enum!(
2050 DeactivateEvent,
2051 WindowEvents,
2052 WindowEvents::Deactivate
2053);
2054impl_try_from_event_for_user_facing_type!(DeactivateEvent, WindowEvents::Deactivate, Event::Window);
2055impl_from_user_facing_event_for_interface_event_enum!(
2056 RaiseEvent,
2057 WindowEvents,
2058 WindowEvents::Raise
2059);
2060impl_try_from_event_for_user_facing_type!(RaiseEvent, WindowEvents::Raise, Event::Window);
2061impl_from_user_facing_event_for_interface_event_enum!(
2062 LowerEvent,
2063 WindowEvents,
2064 WindowEvents::Lower
2065);
2066impl_try_from_event_for_user_facing_type!(LowerEvent, WindowEvents::Lower, Event::Window);
2067impl_from_user_facing_event_for_interface_event_enum!(MoveEvent, WindowEvents, WindowEvents::Move);
2068impl_try_from_event_for_user_facing_type!(MoveEvent, WindowEvents::Move, Event::Window);
2069impl_from_user_facing_event_for_interface_event_enum!(
2070 ResizeEvent,
2071 WindowEvents,
2072 WindowEvents::Resize
2073);
2074impl_try_from_event_for_user_facing_type!(ResizeEvent, WindowEvents::Resize, Event::Window);
2075impl_from_user_facing_event_for_interface_event_enum!(
2076 ShadeEvent,
2077 WindowEvents,
2078 WindowEvents::Shade
2079);
2080impl_try_from_event_for_user_facing_type!(ShadeEvent, WindowEvents::Shade, Event::Window);
2081impl_from_user_facing_event_for_interface_event_enum!(
2082 UUshadeEvent,
2083 WindowEvents,
2084 WindowEvents::UUshade
2085);
2086impl_try_from_event_for_user_facing_type!(UUshadeEvent, WindowEvents::UUshade, Event::Window);
2087impl_from_user_facing_event_for_interface_event_enum!(
2088 RestyleEvent,
2089 WindowEvents,
2090 WindowEvents::Restyle
2091);
2092impl_try_from_event_for_user_facing_type!(RestyleEvent, WindowEvents::Restyle, Event::Window);
2093
2094#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
2098#[allow(clippy::module_name_repetitions)]
2099pub enum EventListenerEvents {
2100 Registered(EventListenerRegisteredEvent),
2102 Deregistered(EventListenerDeregisteredEvent),
2104}
2105
2106impl_tryfrommessage_for_event_wrapper!(EventListenerEvents);
2107
2108impl DBusInterface for EventListenerEvents {
2109 const DBUS_INTERFACE: &'static str = "org.a11y.atspi.Registry";
2110}
2111
2112impl DBusMatchRule for EventListenerEvents {
2113 const MATCH_RULE_STRING: &'static str =
2114 "type='signal',interface='org.a11y.atspi.Event.Registry'";
2115}
2116
2117impl RegistryEventString for EventListenerEvents {
2118 const REGISTRY_EVENT_STRING: &'static str = "Event";
2119}
2120
2121impl EventTypeProperties for EventListenerEvents {
2122 fn member(&self) -> &'static str {
2123 match self {
2124 Self::Registered(inner) => inner.member(),
2125 Self::Deregistered(inner) => inner.member(),
2126 }
2127 }
2128
2129 fn match_rule(&self) -> &'static str {
2130 match self {
2131 Self::Registered(inner) => inner.match_rule(),
2132 Self::Deregistered(inner) => inner.match_rule(),
2133 }
2134 }
2135
2136 fn interface(&self) -> &'static str {
2137 match self {
2138 Self::Registered(inner) => inner.interface(),
2139 Self::Deregistered(inner) => inner.interface(),
2140 }
2141 }
2142
2143 fn registry_string(&self) -> &'static str {
2144 match self {
2145 Self::Registered(inner) => inner.registry_string(),
2146 Self::Deregistered(inner) => inner.registry_string(),
2147 }
2148 }
2149}
2150
2151impl EventProperties for EventListenerEvents {
2152 fn path(&self) -> ObjectPath<'_> {
2153 match self {
2154 Self::Registered(inner) => inner.path(),
2155 Self::Deregistered(inner) => inner.path(),
2156 }
2157 }
2158 fn sender(&self) -> UniqueName<'_> {
2159 match self {
2160 Self::Registered(inner) => inner.sender(),
2161 Self::Deregistered(inner) => inner.sender(),
2162 }
2163 }
2164}
2165
2166#[cfg(feature = "zbus")]
2167impl crate::events::traits::EventWrapperMessageConversion for EventListenerEvents {
2168 fn try_from_message_interface_checked(
2169 msg: &zbus::Message,
2170 hdr: &zbus::message::Header,
2171 ) -> Result<Self, crate::AtspiError> {
2172 let member = hdr.member().ok_or(AtspiError::MissingMember)?;
2173 match member.as_str() {
2174 EventListenerRegisteredEvent::DBUS_MEMBER => Ok(EventListenerEvents::Registered(
2175 EventListenerRegisteredEvent::from_message_unchecked(msg, hdr)?,
2176 )),
2177 EventListenerDeregisteredEvent::DBUS_MEMBER => Ok(EventListenerEvents::Deregistered(
2178 EventListenerDeregisteredEvent::from_message_unchecked(msg, hdr)?,
2179 )),
2180 _ => Err(AtspiError::MemberMatch(format!(
2181 "No member {} in {}",
2182 member.as_str(),
2183 Self::DBUS_INTERFACE
2184 ))),
2185 }
2186 }
2187}
2188
2189#[cfg(feature = "zbus")]
2190impl TryFrom<&zbus::Message> for EventListenerEvents {
2191 type Error = AtspiError;
2192 fn try_from(msg: &zbus::Message) -> Result<Self, Self::Error> {
2193 <Self as crate::events::traits::TryFromMessage>::try_from_message(msg)
2194 }
2195}
2196
2197impl_try_from_event_for_interface_enum!(EventListenerEvents, Event::Listener);
2198impl_from_interface_event_enum_for_event!(EventListenerEvents, Event::Listener);
2199
2200impl From<AvailableEvent> for Event {
2201 fn from(ev: AvailableEvent) -> Event {
2202 Event::Available(ev)
2203 }
2204}
2205
2206#[cfg(feature = "zbus")]
2207impl TryFrom<Event> for AvailableEvent {
2208 type Error = AtspiError;
2209 fn try_from(generic_event: Event) -> Result<AvailableEvent, Self::Error> {
2210 if let Event::Available(specific_event) = generic_event {
2211 Ok(specific_event)
2212 } else {
2213 Err(AtspiError::Conversion("Invalid type"))
2214 }
2215 }
2216}
2217
2218event_wrapper_test_cases!(EventListenerEvents, EventListenerRegisteredEvent);