Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
100 changes: 49 additions & 51 deletions adapters/macos/src/node.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
}
}
}
Expand Down Expand Up @@ -499,10 +498,9 @@ declare_class!(
}

#[method_id(accessibilitySubrole)]
fn sub_role(&self) -> Id<NSAccessibilitySubrole> {
self.resolve(ns_sub_role)
.unwrap_or(unsafe { NSAccessibilityUnknownSubrole })
.copy()
fn sub_role(&self) -> Option<Id<NSAccessibilitySubrole>> {
self.resolve(|node| ns_sub_role(node).map(|sub_role| sub_role.copy()))
.flatten()
}

#[method_id(accessibilityRoleDescription)]
Expand Down
Loading