Chromium Code Reviews| Index: chrome/browser/ui/cocoa/tabs/tab_strip_view.mm |
| diff --git a/chrome/browser/ui/cocoa/tabs/tab_strip_view.mm b/chrome/browser/ui/cocoa/tabs/tab_strip_view.mm |
| index 86ac8ce7399bb5bec11f6f9fea33447cbffd92d8..1458026385b54ac8a5e6c89f9232d5853ecdf4b0 100644 |
| --- a/chrome/browser/ui/cocoa/tabs/tab_strip_view.mm |
| +++ b/chrome/browser/ui/cocoa/tabs/tab_strip_view.mm |
| @@ -227,13 +227,35 @@ |
| return NO; |
| } |
| +// Returns AX children (tabs and new tab button), sorted from left to right. |
| +- (NSArray*)accessibilityChildren { |
| + NSArray* children = |
| + [super accessibilityAttributeValue:NSAccessibilityChildrenAttribute]; |
|
Avi (use Gerrit)
2014/09/23 20:44:21
Oh, yikes, was it really returning them in Z order
|
| + 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]; |
| + } else if ([attribute isEqual:NSAccessibilityChildrenAttribute]) { |
| + return [self accessibilityChildren]; |
| + } else if ([attribute isEqual:NSAccessibilityTabsAttribute]) { |
| + NSArray* children = [self accessibilityChildren]; |
| + NSMutableArray* tabs = [NSMutableArray arrayWithCapacity:[children count]]; |
| for (id child in children) { |
| if ([[child accessibilityAttributeValue:NSAccessibilityRoleAttribute] |
| isEqual:NSAccessibilityRadioButtonRole]) { |
| @@ -241,11 +263,11 @@ |
| } |
| } |
| return tabs; |
|
Avi (use Gerrit)
2014/09/23 20:44:20
If you're already introducing blocks code, you cou
Andre
2014/09/23 21:41:55
Done.
I love programming with higher order functio
Avi (use Gerrit)
2014/09/23 23:24:54
I was honestly shocked that Apple didn't already h
|
| - } |
| - if ([attribute isEqual:NSAccessibilityContentsAttribute]) |
| - return [self accessibilityAttributeValue:NSAccessibilityChildrenAttribute]; |
| - if ([attribute isEqual:NSAccessibilityValueAttribute]) |
| + } else if ([attribute isEqual:NSAccessibilityContentsAttribute]) { |
| + return [self accessibilityChildren]; |
| + } else if ([attribute isEqual:NSAccessibilityValueAttribute]) { |
| return [controller_ activeTabView]; |
| + } |
| return [super accessibilityAttributeValue:attribute]; |
| } |