atspi_common/events/
keyboard.rs

1#[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	/// The [`crate::ObjectRef`] which the event applies to.
16	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}