From c5c5bee258d87c2394621eb847170d8fb7c4d682 Mon Sep 17 00:00:00 2001 From: "hwaara%gmail.com" Date: Wed, 6 Dec 2006 13:35:56 +0000 Subject: [PATCH] Initial support for popupmenus, r=surkov, b=362080 git-svn-id: svn://10.0.0.236/trunk@216557 18797224-902f-48f8-a5cc-f745e15eee43 --- .../accessible/src/mac/mozActionElements.h | 3 + .../accessible/src/mac/mozActionElements.mm | 74 +++++++++++++++++-- .../accessible/src/mac/nsAccessibleWrap.mm | 3 + mozilla/accessible/src/mac/nsRoleMap.h | 10 +-- 4 files changed, 80 insertions(+), 10 deletions(-) diff --git a/mozilla/accessible/src/mac/mozActionElements.h b/mozilla/accessible/src/mac/mozActionElements.h index 607be0be7c0..b26b933c917 100644 --- a/mozilla/accessible/src/mac/mozActionElements.h +++ b/mozilla/accessible/src/mac/mozActionElements.h @@ -49,3 +49,6 @@ // returns one of the constants defined in CheckboxValue - (int)isChecked; @end + +@interface mozPopupButtonAccessible : mozButtonAccessible +@end diff --git a/mozilla/accessible/src/mac/mozActionElements.mm b/mozilla/accessible/src/mac/mozActionElements.mm index 28d953663b2..e2e1d8a58a2 100644 --- a/mozilla/accessible/src/mac/mozActionElements.mm +++ b/mozilla/accessible/src/mac/mozActionElements.mm @@ -72,6 +72,13 @@ enum CheckboxValue { return attributes; } +- (id)accessibilityAttributeValue:(NSString *)attribute +{ + if ([attribute isEqualToString:NSAccessibilityChildrenAttribute]) + return nil; + return [super accessibilityAttributeValue:attribute]; +} + - (BOOL)accessibilityIsIgnored { return mIsExpired; @@ -106,11 +113,6 @@ enum CheckboxValue { mGeckoAccessible->DoAction(0); } -- (NSArray*)children -{ - return [NSArray array]; -} - @end @implementation mozCheckboxAccessible @@ -146,3 +148,65 @@ enum CheckboxValue { } @end + +@implementation mozPopupButtonAccessible + +- (NSArray *)accessibilityAttributeNames +{ + static NSArray *attributes = nil; + + if (!attributes) { + attributes = [[NSArray alloc] initWithObjects:NSAccessibilityParentAttribute, // required + NSAccessibilityPositionAttribute, // required + NSAccessibilityRoleAttribute, // required + NSAccessibilitySizeAttribute, // required + NSAccessibilityWindowAttribute, // required + kTopLevelUIElementAttribute, // required + NSAccessibilityHelpAttribute, + NSAccessibilityEnabledAttribute, // required + NSAccessibilityFocusedAttribute, // required + NSAccessibilityTitleAttribute, // required for popupmenus, and for menubuttons with a title + NSAccessibilityChildrenAttribute, // required + kInstanceDescriptionAttribute, // required if it has no title attr + nil]; + } + return attributes; +} + +- (id)accessibilityAttributeValue:(NSString *)attribute +{ + if ([attribute isEqualToString:NSAccessibilityChildrenAttribute]) { + return [super children]; + } + return [super accessibilityAttributeValue:attribute]; +} + +- (NSArray *)accessibilityActionNames +{ + if ([self isEnabled]) { + return [NSArray arrayWithObjects:NSAccessibilityPressAction, + NSAccessibilityShowMenuAction, + nil]; + } + return nil; +} + +- (NSString *)accessibilityActionDescription:(NSString *)action +{ + if ([action isEqualToString:NSAccessibilityShowMenuAction]) + return @"show menu"; + return [super accessibilityActionDescription:action]; +} + +- (void)accessibilityPerformAction:(NSString *)action +{ + // both the ShowMenu and Click action do the same thing. + if ([self isEnabled]) { + // TODO: this should bring up the menu, but currently doesn't. + // once msaa and atk have merged better, they will implement + // the action needed to show the menu. + [super click]; + } +} + +@end diff --git a/mozilla/accessible/src/mac/nsAccessibleWrap.mm b/mozilla/accessible/src/mac/nsAccessibleWrap.mm index 5df9c674535..981813d9438 100644 --- a/mozilla/accessible/src/mac/nsAccessibleWrap.mm +++ b/mozilla/accessible/src/mac/nsAccessibleWrap.mm @@ -120,6 +120,9 @@ nsAccessibleWrap::GetNativeType () case ROLE_AUTOCOMPLETE: return [mozTextAccessible class]; + case ROLE_COMBOBOX: + return [mozPopupButtonAccessible class]; + default: return [mozAccessible class]; } diff --git a/mozilla/accessible/src/mac/nsRoleMap.h b/mozilla/accessible/src/mac/nsRoleMap.h index b66aea5cff4..f586ca6a266 100644 --- a/mozilla/accessible/src/mac/nsRoleMap.h +++ b/mozilla/accessible/src/mac/nsRoleMap.h @@ -53,7 +53,7 @@ static const NSString* AXRoles [] = { NSAccessibilityWindowRole, // ROLE_ALERT NSAccessibilityWindowRole, // ROLE_WINDOW. irrelevant on OS X; all window a11y is handled by the system. @"AXWebArea", // ROLE_CLIENT - NSAccessibilityPopUpButtonRole, // ROLE_MENUPOPUP + NSAccessibilityMenuRole, // ROLE_MENUPOPUP. the parent of menuitems NSAccessibilityMenuItemRole, // ROLE_MENUITEM. @"AXHelpTag", // ROLE_TOOLTIP. 10.4+ only, so we re-define the constant. NSAccessibilityGroupRole, // ROLE_APPLICATION. unused on OS X. the system will take care of this. @@ -88,8 +88,8 @@ static const NSString* AXRoles [] = { NSAccessibilityButtonRole, // ROLE_PUSHBUTTON NSAccessibilityCheckBoxRole, // ROLE_CHECKBUTTON NSAccessibilityRadioButtonRole, // ROLE_RADIOBUTTON - NSAccessibilityComboBoxRole, // ROLE_COMBOBOX - NSAccessibilityComboBoxRole, // ROLE_DROPLIST + NSAccessibilityPopUpButtonRole, // ROLE_COMBOBOX + NSAccessibilityPopUpButtonRole, // ROLE_DROPLIST. NSAccessibilityProgressIndicatorRole, // ROLE_PROGRESSBAR NSAccessibilityUnknownRole, // ROLE_DIAL NSAccessibilityUnknownRole, // ROLE_HOTKEYFIELD @@ -98,7 +98,7 @@ static const NSString* AXRoles [] = { NSAccessibilityUnknownRole, // ROLE_DIAGRAM NSAccessibilityUnknownRole, // ROLE_ANIMATION NSAccessibilityUnknownRole, // ROLE_EQUATION - NSAccessibilityPopUpButtonRole, // ROLE_BUTTONDROPDOWN + NSAccessibilityPopUpButtonRole, // ROLE_BUTTONDROPDOWN. NSAccessibilityMenuButtonRole, // ROLE_BUTTONMENU NSAccessibilityGroupRole, // ROLE_BUTTONDROPDOWNGRID NSAccessibilityUnknownRole, // ROLE_WHITESPACE @@ -125,7 +125,7 @@ static const NSString* AXRoles [] = { NSAccessibilityGroupRole, // ROLE_LAYERED_PANE NSAccessibilityGroupRole, // ROLE_OPTION_PANE NSAccessibilityTextFieldRole, // ROLE_PASSWORD_TEXT - NSAccessibilityPopUpButtonRole, // ROLE_POPUP_MENU + NSAccessibilityUnknownRole, // ROLE_POPUP_MENU. unused NSAccessibilityMenuItemRole, // ROLE_RADIO_MENU_ITEM NSAccessibilityGroupRole, // ROLE_ROOT_PANE NSAccessibilityScrollAreaRole, // ROLE_SCROLL_PANE