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