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