atspi_common/events/
keyboard.rs1#[cfg(feature = "zbus")]
2use super::event_body::EventBody;
3#[cfg(feature = "zbus")]
4use crate::error::AtspiError;
5use crate::{
6 events::{DBusInterface, DBusMatchRule, DBusMember, EventBodyOwned, RegistryEventString},
7 object_ref::ObjectRefOwned,
8};
9
10#[cfg(feature = "zbus")]
11use crate::{events::MessageConversion, EventProperties, ObjectRef};
12#[cfg(feature = "zbus")]
13use zbus::message::{Body as DbusBody, Header};
14
15#[derive(Debug, PartialEq, Clone, serde::Serialize, serde::Deserialize, Eq, Hash, Default)]
16pub struct ModifiersEvent {
17 pub item: ObjectRefOwned,
19 pub previous_modifiers: i32,
20 pub current_modifiers: i32,
21}
22
23impl_event_type_properties_for_event!(ModifiersEvent);
24
25impl_member_interface_registry_string_and_match_rule_for_event! {
26 ModifiersEvent,
27 "Modifiers",
28 "org.a11y.atspi.Event.Keyboard",
29 "keyboard:modifiers",
30 "type='signal',interface='org.a11y.atspi.Event.Keyboard',member='Modifiers'"
31}
32
33#[cfg(feature = "zbus")]
34impl MessageConversion<'_> for ModifiersEvent {
35 type Body<'msg> = EventBody<'msg>;
36
37 fn from_message_unchecked_parts(item: ObjectRef, body: DbusBody) -> Result<Self, AtspiError> {
38 let body = body.deserialize_unchecked::<Self::Body<'_>>()?;
39 Ok(Self {
40 item: item.into(),
41 previous_modifiers: body.detail1(),
42 current_modifiers: body.detail2(),
43 })
44 }
45
46 fn from_message_unchecked(msg: &zbus::Message, header: &Header) -> Result<Self, AtspiError> {
47 let item = header.try_into()?;
48 let body = msg.body();
49 Self::from_message_unchecked_parts(item, body)
50 }
51
52 fn body(&self) -> Self::Body<'_> {
53 EventBodyOwned {
54 detail1: self.previous_modifiers,
55 detail2: self.current_modifiers,
56 ..Default::default()
57 }
58 .into()
59 }
60}
61
62impl_msg_conversion_ext_for_target_type!(ModifiersEvent);
63
64event_test_cases!(ModifiersEvent);
65impl_to_dbus_message!(ModifiersEvent);
66impl_from_dbus_message!(ModifiersEvent);
67impl_event_properties!(ModifiersEvent);
68
69impl From<ModifiersEvent> for EventBodyOwned {
70 fn from(event: ModifiersEvent) -> Self {
71 EventBodyOwned {
72 detail1: event.previous_modifiers,
73 detail2: event.current_modifiers,
74 ..Default::default()
75 }
76 }
77}