accesskit_consumer/
filters.rs
1use accesskit::Role;
7
8use crate::node::Node;
9
10#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
11pub enum FilterResult {
12 Include,
13 ExcludeNode,
14 ExcludeSubtree,
15}
16
17pub fn common_filter(node: &Node) -> FilterResult {
18 if node.is_focused() {
19 return FilterResult::Include;
20 }
21
22 if node.is_hidden() {
23 return FilterResult::ExcludeSubtree;
24 }
25
26 if let Some(parent) = node.parent() {
27 if common_filter(&parent) == FilterResult::ExcludeSubtree {
28 return FilterResult::ExcludeSubtree;
29 }
30 }
31
32 let role = node.role();
33 if role == Role::GenericContainer || role == Role::TextRun {
34 return FilterResult::ExcludeNode;
35 }
36
37 FilterResult::Include
38}
39
40pub fn common_filter_with_root_exception(node: &Node) -> FilterResult {
41 if node.is_root() {
42 return FilterResult::Include;
43 }
44 common_filter(node)
45}