atspi_common/events/
keyboard.rs1#[cfg(feature = "zbus")]
2use crate::{
3 error::AtspiError,
4 events::{MessageConversion, MessageConversionExt},
5 ObjectRef,
6};
7use crate::{events::event_body::EventBodyOwned, EventProperties};
8use zbus_names::UniqueName;
9use zvariant::{ObjectPath, OwnedValue};
10
11use super::{event_body::Properties, BusProperties};
12
13#[derive(Debug, PartialEq, Clone, serde::Serialize, serde::Deserialize, Eq, Hash, Default)]
14pub struct ModifiersEvent {
15 pub item: crate::events::ObjectRef,
17 pub previous_modifiers: i32,
18 pub current_modifiers: i32,
19}
20
21impl BusProperties for ModifiersEvent {
22 const DBUS_MEMBER: &'static str = "Modifiers";
23 const DBUS_INTERFACE: &'static str = "org.a11y.atspi.Event.Keyboard";
24 const MATCH_RULE_STRING: &'static str =
25 "type='signal',interface='org.a11y.atspi.Event.Keyboard',member='Modifiers'";
26 const REGISTRY_EVENT_STRING: &'static str = "Keyboard:";
27}
28
29#[cfg(feature = "zbus")]
30impl MessageConversion for ModifiersEvent {
31 type Body = EventBodyOwned;
32
33 fn from_message_unchecked_parts(item: ObjectRef, body: Self::Body) -> Result<Self, AtspiError> {
34 Ok(Self { item, previous_modifiers: body.detail1, current_modifiers: body.detail2 })
35 }
36 fn from_message_unchecked(msg: &zbus::Message) -> Result<Self, AtspiError> {
37 let item = msg.try_into()?;
38 let body = msg.body();
39 let body: Self::Body = body.deserialize_unchecked()?;
40 Self::from_message_unchecked_parts(item, body)
41 }
42 fn body(&self) -> Self::Body {
43 let copy = self.clone();
44 copy.into()
45 }
46}
47
48event_test_cases!(ModifiersEvent);
49impl_to_dbus_message!(ModifiersEvent);
50impl_from_dbus_message!(ModifiersEvent);
51impl_event_properties!(ModifiersEvent);
52impl From<ModifiersEvent> for EventBodyOwned {
53 fn from(event: ModifiersEvent) -> Self {
54 EventBodyOwned {
55 properties: Properties,
56 kind: String::default(),
57 detail1: event.previous_modifiers,
58 detail2: event.current_modifiers,
59 any_data: OwnedValue::from(0u8),
60 }
61 }
62}