summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorandresantoso <andresantoso@chromium.org>2014-09-23 21:42:57 -0700
committerCommit bot <commit-bot@chromium.org>2014-09-24 04:43:05 +0000
commit1ccf1740236df20591e4cf5150d3a296faa0efb3 (patch)
treeb12a23456d9f854877998289f72cee9429ea7c0e
parent2e44917894a92a0d6fb0e56e3220811f811d1c8e (diff)
downloadchromium_src-1ccf1740236df20591e4cf5150d3a296faa0efb3.zip
chromium_src-1ccf1740236df20591e4cf5150d3a296faa0efb3.tar.gz
chromium_src-1ccf1740236df20591e4cf5150d3a296faa0efb3.tar.bz2
Mac: Fix tab view accessibility.
The close button was setting the AXDescription property, it somehow caused VoiceOver to use it as the tab view's description. Change it to set the AXTitle property instead to fix the issue, and to match Safari. Also change the tab strips' AX children to be sorted from left to right, so that VoiceOver's "Tab X of Y" order is always ascending left to right. BUG=415570 Review URL: https://codereview.chromium.org/588393002 Cr-Commit-Position: refs/heads/master@{#296346}
-rw-r--r--chrome/browser/ui/cocoa/hover_close_button.mm2
-rw-r--r--chrome/browser/ui/cocoa/tabs/tab_strip_view.mm53
2 files changed, 38 insertions, 17 deletions
diff --git a/chrome/browser/ui/cocoa/hover_close_button.mm b/chrome/browser/ui/cocoa/hover_close_button.mm
index 94ecb0f..4f73f99 100644
--- a/chrome/browser/ui/cocoa/hover_close_button.mm
+++ b/chrome/browser/ui/cocoa/hover_close_button.mm
@@ -184,7 +184,7 @@ NSString* const kFadeOutValueKeyPath = @"fadeOutValue";
// Set accessibility description.
NSCell* cell = [self cell];
[cell accessibilitySetOverrideValue:gDescription
- forAttribute:NSAccessibilityDescriptionAttribute];
+ forAttribute:NSAccessibilityTitleAttribute];
// Add a tooltip. Using 'owner:self' means that
// -view:stringForToolTip:point:userData: will be called to provide the
diff --git a/chrome/browser/ui/cocoa/tabs/tab_strip_view.mm b/chrome/browser/ui/cocoa/tabs/tab_strip_view.mm
index 86ac8ce..2d546af 100644
--- a/chrome/browser/ui/cocoa/tabs/tab_strip_view.mm
+++ b/chrome/browser/ui/cocoa/tabs/tab_strip_view.mm
@@ -227,25 +227,46 @@
return NO;
}
+// Returns AX children (tabs and new tab button), sorted from left to right.
+- (NSArray*)accessibilityChildren {
+ NSArray* children =
+ [super accessibilityAttributeValue:NSAccessibilityChildrenAttribute];
+ return [children sortedArrayUsingComparator:
+ ^NSComparisonResult(id first, id second) {
+ NSPoint firstPosition =
+ [[first accessibilityAttributeValue:
+ NSAccessibilityPositionAttribute] pointValue];
+ NSPoint secondPosition =
+ [[second accessibilityAttributeValue:
+ NSAccessibilityPositionAttribute] pointValue];
+ if (firstPosition.x < secondPosition.x)
+ return NSOrderedAscending;
+ else if (firstPosition.x > secondPosition.x)
+ return NSOrderedDescending;
+ else
+ return NSOrderedSame;
+ }];
+}
+
- (id)accessibilityAttributeValue:(NSString*)attribute {
- if ([attribute isEqual:NSAccessibilityRoleAttribute])
+ if ([attribute isEqual:NSAccessibilityRoleAttribute]) {
return NSAccessibilityTabGroupRole;
- if ([attribute isEqual:NSAccessibilityTabsAttribute]) {
- NSMutableArray* tabs = [[[NSMutableArray alloc] init] autorelease];
- NSArray* children =
- [self accessibilityAttributeValue:NSAccessibilityChildrenAttribute];
- for (id child in children) {
- if ([[child accessibilityAttributeValue:NSAccessibilityRoleAttribute]
- isEqual:NSAccessibilityRadioButtonRole]) {
- [tabs addObject:child];
- }
- }
- return tabs;
- }
- if ([attribute isEqual:NSAccessibilityContentsAttribute])
- return [self accessibilityAttributeValue:NSAccessibilityChildrenAttribute];
- if ([attribute isEqual:NSAccessibilityValueAttribute])
+ } else if ([attribute isEqual:NSAccessibilityChildrenAttribute]) {
+ return [self accessibilityChildren];
+ } else if ([attribute isEqual:NSAccessibilityTabsAttribute]) {
+ NSArray* children = [self accessibilityChildren];
+ NSIndexSet* indexes = [children indexesOfObjectsPassingTest:
+ ^BOOL(id child, NSUInteger idx, BOOL* stop) {
+ NSString* role = [child
+ accessibilityAttributeValue:NSAccessibilityRoleAttribute];
+ return [role isEqualToString:NSAccessibilityRadioButtonRole];
+ }];
+ return [children objectsAtIndexes:indexes];
+ } else if ([attribute isEqual:NSAccessibilityContentsAttribute]) {
+ return [self accessibilityChildren];
+ } else if ([attribute isEqual:NSAccessibilityValueAttribute]) {
return [controller_ activeTabView];
+ }
return [super accessibilityAttributeValue:attribute];
}