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]; |
} |