зеркало из https://github.com/mozilla/gecko-dev.git
Initial support for making comboboxes (for example the location bar in firefox) accessible. r=surkov, b=362079
Don't use performance-intensive NSAccessibilityUnignoredChildren() API since we no longer have to. r=surkov, b=363713
This commit is contained in:
Родитель
3dedd0465d
Коммит
050bb0ad77
|
@ -183,7 +183,7 @@ GetNativeFromGeckoAccessible(nsIAccessible *anAccessible)
|
|||
return nil;
|
||||
|
||||
if ([attribute isEqualToString:NSAccessibilityChildrenAttribute])
|
||||
return NSAccessibilityUnignoredChildren ([self children]);
|
||||
return [self children];
|
||||
if ([attribute isEqualToString:NSAccessibilityParentAttribute])
|
||||
return [self parent];
|
||||
|
||||
|
@ -371,6 +371,15 @@ GetNativeFromGeckoAccessible(nsIAccessible *anAccessible)
|
|||
}
|
||||
}
|
||||
|
||||
#ifdef DEBUG_hakan
|
||||
// make sure we're not returning any ignored accessibles.
|
||||
NSEnumerator *e = [mChildren objectEnumerator];
|
||||
mozAccessible *m = nil;
|
||||
while ((m = [e nextObject])) {
|
||||
NSAssert1(![m accessibilityIsIgnored], @"we should never return an ignored accessible! (%@)", m);
|
||||
}
|
||||
#endif
|
||||
|
||||
return mChildren;
|
||||
}
|
||||
|
||||
|
|
|
@ -50,5 +50,6 @@
|
|||
- (int)isChecked;
|
||||
@end
|
||||
|
||||
/* Used for buttons that may pop up a menu. */
|
||||
@interface mozPopupButtonAccessible : mozButtonAccessible
|
||||
@end
|
||||
|
|
|
@ -11,3 +11,13 @@
|
|||
nsIAccessibleEditableText *mGeckoEditableTextAccessible; // strong
|
||||
}
|
||||
@end
|
||||
|
||||
/* A combobox (in the mac world) is a textfield with an associated menu, for example
|
||||
the location bar. */
|
||||
@interface mozComboboxAccessible : mozTextAccessible
|
||||
// equivalent to pressing return key in this textfield.
|
||||
- (void)confirm;
|
||||
|
||||
// shows the menu for this combobox.
|
||||
- (void)showMenu;
|
||||
@end
|
||||
|
|
|
@ -181,3 +181,81 @@ extern const NSString *kTopLevelUIElementAttribute; // NSAccessibilityTopLevel
|
|||
}
|
||||
|
||||
@end
|
||||
|
||||
@implementation mozComboboxAccessible
|
||||
|
||||
- (NSArray*)accessibilityAttributeNames
|
||||
{
|
||||
static NSArray *supportedAttributes = nil;
|
||||
if (!supportedAttributes) {
|
||||
// standard attributes that are shared and supported by all generic elements.
|
||||
supportedAttributes = [[NSArray alloc] initWithObjects:NSAccessibilityParentAttribute, // required
|
||||
NSAccessibilityRoleAttribute, // required
|
||||
NSAccessibilityTitleAttribute,
|
||||
NSAccessibilityValueAttribute, // required
|
||||
NSAccessibilityHelpAttribute,
|
||||
NSAccessibilityRoleDescriptionAttribute,
|
||||
NSAccessibilityPositionAttribute, // required
|
||||
NSAccessibilitySizeAttribute, // required
|
||||
NSAccessibilityWindowAttribute, // required
|
||||
NSAccessibilityFocusedAttribute, // required
|
||||
NSAccessibilityEnabledAttribute, // required
|
||||
NSAccessibilityChildrenAttribute, // required
|
||||
NSAccessibilityHelpAttribute,
|
||||
// NSAccessibilityExpandedAttribute, // required
|
||||
kTopLevelUIElementAttribute, // required (on OS X 10.4+)
|
||||
kInstanceDescriptionAttribute, // required (on OS X 10.4+)
|
||||
/* text-specific attributes */
|
||||
NSAccessibilitySelectedTextAttribute, // required
|
||||
NSAccessibilitySelectedTextRangeAttribute, // required
|
||||
NSAccessibilityNumberOfCharactersAttribute, // required
|
||||
// TODO: NSAccessibilityVisibleCharacterRangeAttribute, // required
|
||||
// TODO: NSAccessibilityInsertionPointLineNumberAttribute
|
||||
nil];
|
||||
}
|
||||
return supportedAttributes;
|
||||
}
|
||||
|
||||
- (NSArray *)accessibilityActionNames
|
||||
{
|
||||
if ([self isEnabled]) {
|
||||
return [NSArray arrayWithObjects:NSAccessibilityConfirmAction,
|
||||
NSAccessibilityShowMenuAction,
|
||||
nil];
|
||||
}
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (NSString *)accessibilityActionDescription:(NSString *)action
|
||||
{
|
||||
if ([action isEqualToString:NSAccessibilityShowMenuAction])
|
||||
return @"show menu";
|
||||
if ([action isEqualToString:NSAccessibilityConfirmAction])
|
||||
return @"confirm";
|
||||
|
||||
return [super accessibilityActionDescription:action];
|
||||
}
|
||||
|
||||
- (void)accessibilityPerformAction:(NSString *)action
|
||||
{
|
||||
// both the ShowMenu and Click action do the same thing.
|
||||
if ([self isEnabled]) {
|
||||
if ([action isEqualToString:NSAccessibilityShowMenuAction])
|
||||
[self showMenu];
|
||||
if ([action isEqualToString:NSAccessibilityConfirmAction])
|
||||
[self confirm];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)showMenu
|
||||
{
|
||||
// currently unimplemented. waiting for support in bug 363697
|
||||
}
|
||||
|
||||
- (void)confirm
|
||||
{
|
||||
// should be the same as pressing enter/return in this textfield.
|
||||
// not yet implemented
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
|
@ -85,8 +85,7 @@ class nsAccessibleWrap : public nsAccessible
|
|||
role == ROLE_PUSHBUTTON ||
|
||||
role == ROLE_TOGGLE_BUTTON ||
|
||||
role == ROLE_SPLITBUTTON ||
|
||||
role == ROLE_ENTRY ||
|
||||
role == ROLE_AUTOCOMPLETE);
|
||||
role == ROLE_ENTRY);
|
||||
}
|
||||
|
||||
// ignored means that the accessible might still have children, but is not displayed
|
||||
|
|
|
@ -117,6 +117,9 @@ nsAccessibleWrap::GetNativeType ()
|
|||
case ROLE_CHECKBUTTON:
|
||||
return [mozCheckboxAccessible class];
|
||||
|
||||
case ROLE_AUTOCOMPLETE:
|
||||
return [mozComboboxAccessible class];
|
||||
|
||||
case ROLE_ENTRY:
|
||||
case ROLE_STATICTEXT:
|
||||
case ROLE_HEADING:
|
||||
|
@ -124,8 +127,8 @@ nsAccessibleWrap::GetNativeType ()
|
|||
case ROLE_CAPTION:
|
||||
case ROLE_ACCEL_LABEL:
|
||||
case ROLE_TEXT_LEAF:
|
||||
case ROLE_AUTOCOMPLETE:
|
||||
return [mozTextAccessible class];
|
||||
// normal textfield (static or editable)
|
||||
return [mozTextAccessible class];
|
||||
|
||||
case ROLE_COMBOBOX:
|
||||
return [mozPopupButtonAccessible class];
|
||||
|
|
|
@ -142,7 +142,7 @@ static const NSString* AXRoles [] = {
|
|||
NSAccessibilityGroupRole, // ROLE_FOOTER
|
||||
NSAccessibilityGroupRole, // ROLE_PARAGRAPH
|
||||
@"AXRuler", // ROLE_RULER. 10.4+ only, so we re-define the constant.
|
||||
NSAccessibilityTextFieldRole, // ROLE_AUTOCOMPLETE
|
||||
NSAccessibilityComboBoxRole, // ROLE_AUTOCOMPLETE
|
||||
NSAccessibilityTextFieldRole, // ROLE_EDITBAR
|
||||
NSAccessibilityTextFieldRole, // ROLE_ENTRY
|
||||
NSAccessibilityStaticTextRole, // ROLE_CAPTION
|
||||
|
|
Загрузка…
Ссылка в новой задаче