Refactor InputState functions for AccessKit actions

This commit is contained in:
Matt Campbell 2022-11-29 13:04:37 -06:00
parent 9e10822172
commit b65fd40f8c

View file

@ -395,47 +395,30 @@ impl InputState {
} }
#[cfg(feature = "accesskit")] #[cfg(feature = "accesskit")]
pub fn accesskit_action_request( pub fn accesskit_action_requests(
&self, &self,
id: crate::Id, id: crate::Id,
action: accesskit::Action, action: accesskit::Action,
) -> Option<&accesskit::ActionRequest> { ) -> impl Iterator<Item = &accesskit::ActionRequest> {
let accesskit_id = id.accesskit_id(); let accesskit_id = id.accesskit_id();
for event in &self.events { self.events.iter().filter_map(move |event| {
if let Event::AccessKitActionRequest(request) = event { if let Event::AccessKitActionRequest(request) = event {
if request.target == accesskit_id && request.action == action { if request.target == accesskit_id && request.action == action {
return Some(request); return Some(request);
} }
} }
} None
None })
} }
#[cfg(feature = "accesskit")] #[cfg(feature = "accesskit")]
pub fn has_accesskit_action_request(&self, id: crate::Id, action: accesskit::Action) -> bool { pub fn has_accesskit_action_request(&self, id: crate::Id, action: accesskit::Action) -> bool {
self.accesskit_action_request(id, action).is_some() self.accesskit_action_requests(id, action).next().is_some()
} }
#[cfg(feature = "accesskit")] #[cfg(feature = "accesskit")]
pub fn num_accesskit_action_requests( pub fn num_accesskit_action_requests(&self, id: crate::Id, action: accesskit::Action) -> usize {
&self, self.accesskit_action_requests(id, action).count()
id: crate::Id,
desired_action: accesskit::Action,
) -> usize {
let accesskit_id = id.accesskit_id();
self.events
.iter()
.filter(|event| {
matches!(
event,
Event::AccessKitActionRequest(accesskit::ActionRequest {
target,
action,
..
}) if *target == accesskit_id && *action == desired_action
)
})
.count()
} }
} }