diff --git a/adapters/macos/src/node.rs b/adapters/macos/src/node.rs index f403183de..00a07c0da 100644 --- a/adapters/macos/src/node.rs +++ b/adapters/macos/src/node.rs @@ -241,57 +241,56 @@ fn label_is_exposed_in_value(role: Role) -> bool { ) } -fn ns_sub_role(node: &NodeRef) -> &'static NSAccessibilitySubrole { +fn ns_sub_role(node: &NodeRef) -> Option<&'static NSAccessibilitySubrole> { let role = node.role(); unsafe { match role { - Role::Alert => ns_string!("AXApplicationAlert"), - Role::AlertDialog => NSAccessibilityDialogSubrole, - Role::Article => ns_string!("AXDocumentArticle"), - Role::Banner => ns_string!("AXLandmarkBanner"), - Role::Button if node.toggled().is_some() => NSAccessibilityToggleSubrole, - Role::Code => ns_string!("AXCodeStyleGroup"), - Role::Complementary => ns_string!("AXLandmarkComplementary"), - Role::ContentDeletion => ns_string!("AXDeleteStyleGroup"), - Role::ContentInsertion => ns_string!("AXInsertStyleGroup"), - Role::ContentInfo => ns_string!("AXLandmarkContentInfo"), - Role::Definition => ns_string!("AXDefinition"), - Role::Dialog => NSAccessibilityDialogSubrole, - Role::Document => ns_string!("AXDocument"), - Role::Emphasis => ns_string!("AXEmphasisStyleGroup"), - Role::Feed => ns_string!("AXApplicationGroup"), - Role::Footer => ns_string!("AXLandmarkContentInfo"), - Role::Form => ns_string!("AXLandmarkForm"), - Role::GraphicsDocument => ns_string!("AXDocument"), - Role::Group => ns_string!("AXApplicationGroup"), - Role::Header => ns_string!("AXLandmarkBanner"), - Role::LayoutTableCell => NSAccessibilityGroupRole, - Role::LayoutTableRow => NSAccessibilityTableRowSubrole, - Role::Log => ns_string!("AXApplicationLog"), - Role::Main => ns_string!("AXLandmarkMain"), - Role::Marquee => ns_string!("AXApplicationMarquee"), - Role::Math => ns_string!("AXDocumentMath"), - Role::Meter => ns_string!("AXMeter"), - Role::Navigation => ns_string!("AXLandmarkNavigation"), - Role::Note => ns_string!("AXDocumentNote"), - Role::PasswordInput => NSAccessibilitySecureTextFieldSubrole, - Role::Region => ns_string!("AXLandmarkRegion"), - Role::Search => ns_string!("AXLandmarkSearch"), - Role::SearchInput => NSAccessibilitySearchFieldSubrole, - Role::SectionFooter => ns_string!("AXSectionFooter"), - Role::SectionHeader => ns_string!("AXSectionHeader"), - Role::Status => ns_string!("AXApplicationStatus"), - Role::Strong => ns_string!("AXStrongStyleGroup"), - Role::Switch => NSAccessibilitySwitchSubrole, - Role::Tab => NSAccessibilityTabButtonSubrole, - Role::TabPanel => ns_string!("AXTabPanel"), - Role::Term => ns_string!("AXTerm"), - Role::Time => ns_string!("AXTimeGroup"), - Role::Timer => ns_string!("AXApplicationTimer"), - Role::TreeItem => NSAccessibilityOutlineRowSubrole, - Role::Tooltip => ns_string!("AXUserInterfaceTooltip"), - _ => NSAccessibilityUnknownSubrole, + Role::Alert => Some(ns_string!("AXApplicationAlert")), + Role::AlertDialog => Some(NSAccessibilityDialogSubrole), + Role::Application => Some(ns_string!("AXWebApplication")), + Role::Article => Some(ns_string!("AXDocumentArticle")), + Role::Banner => Some(ns_string!("AXLandmarkBanner")), + Role::Button if node.toggled().is_some() => Some(NSAccessibilityToggleSubrole), + Role::Code => Some(ns_string!("AXCodeStyleGroup")), + Role::Complementary => Some(ns_string!("AXLandmarkComplementary")), + Role::ContentDeletion => Some(ns_string!("AXDeleteStyleGroup")), + Role::ContentInsertion => Some(ns_string!("AXInsertStyleGroup")), + Role::ContentInfo => Some(ns_string!("AXLandmarkContentInfo")), + Role::Definition => Some(ns_string!("AXDefinition")), + Role::Dialog => Some(NSAccessibilityDialogSubrole), + Role::Document => Some(ns_string!("AXDocument")), + Role::Emphasis => Some(ns_string!("AXEmphasisStyleGroup")), + Role::Feed => Some(ns_string!("AXApplicationGroup")), + Role::Footer => Some(ns_string!("AXLandmarkContentInfo")), + Role::Form => Some(ns_string!("AXLandmarkForm")), + Role::GraphicsDocument => Some(ns_string!("AXDocument")), + Role::Group => Some(ns_string!("AXApplicationGroup")), + Role::Header => Some(ns_string!("AXLandmarkBanner")), + Role::Log => Some(ns_string!("AXApplicationLog")), + Role::Main => Some(ns_string!("AXLandmarkMain")), + Role::Marquee => Some(ns_string!("AXApplicationMarquee")), + Role::Math => Some(ns_string!("AXDocumentMath")), + Role::Meter => Some(ns_string!("AXMeter")), + Role::Navigation => Some(ns_string!("AXLandmarkNavigation")), + Role::Note => Some(ns_string!("AXDocumentNote")), + Role::PasswordInput => Some(NSAccessibilitySecureTextFieldSubrole), + Role::Region => Some(ns_string!("AXLandmarkRegion")), + Role::Search => Some(ns_string!("AXLandmarkSearch")), + Role::SearchInput => Some(NSAccessibilitySearchFieldSubrole), + Role::SectionFooter => Some(ns_string!("AXSectionFooter")), + Role::SectionHeader => Some(ns_string!("AXSectionHeader")), + Role::Status => Some(ns_string!("AXApplicationStatus")), + Role::Strong => Some(ns_string!("AXStrongStyleGroup")), + Role::Switch => Some(NSAccessibilitySwitchSubrole), + Role::Tab => Some(NSAccessibilityTabButtonSubrole), + Role::TabPanel => Some(ns_string!("AXTabPanel")), + Role::Term => Some(ns_string!("AXTerm")), + Role::Time => Some(ns_string!("AXTimeGroup")), + Role::Timer => Some(ns_string!("AXApplicationTimer")), + Role::TreeItem => Some(NSAccessibilityOutlineRowSubrole), + Role::Tooltip => Some(ns_string!("AXUserInterfaceTooltip")), + _ => None, } } } @@ -499,10 +498,9 @@ declare_class!( } #[method_id(accessibilitySubrole)] - fn sub_role(&self) -> Id { - self.resolve(ns_sub_role) - .unwrap_or(unsafe { NSAccessibilityUnknownSubrole }) - .copy() + fn sub_role(&self) -> Option> { + self.resolve(|node| ns_sub_role(node).map(|sub_role| sub_role.copy())) + .flatten() } #[method_id(accessibilityRoleDescription)]