Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #import "chrome/browser/ui/cocoa/tabs/tab_strip_view.h" | 5 #import "chrome/browser/ui/cocoa/tabs/tab_strip_view.h" |
| 6 | 6 |
| 7 #include <cmath> // floor | 7 #include <cmath> // floor |
| 8 | 8 |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/mac/mac_util.h" | 10 #include "base/mac/mac_util.h" |
| (...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 220 | 220 |
| 221 // (URLDropTarget protocol) | 221 // (URLDropTarget protocol) |
| 222 - (BOOL)performDragOperation:(id<NSDraggingInfo>)sender { | 222 - (BOOL)performDragOperation:(id<NSDraggingInfo>)sender { |
| 223 return [dropHandler_ performDragOperation:sender]; | 223 return [dropHandler_ performDragOperation:sender]; |
| 224 } | 224 } |
| 225 | 225 |
| 226 - (BOOL)accessibilityIsIgnored { | 226 - (BOOL)accessibilityIsIgnored { |
| 227 return NO; | 227 return NO; |
| 228 } | 228 } |
| 229 | 229 |
| 230 // Returns AX children (tabs and new tab button), sorted from left to right. | |
| 231 - (NSArray*)accessibilityChildren { | |
| 232 NSArray* children = | |
| 233 [super accessibilityAttributeValue:NSAccessibilityChildrenAttribute]; | |
|
Avi (use Gerrit)
2014/09/23 20:44:21
Oh, yikes, was it really returning them in Z order
| |
| 234 return [children sortedArrayUsingComparator: | |
| 235 ^NSComparisonResult(id first, id second) { | |
| 236 NSPoint firstPosition = | |
| 237 [[first accessibilityAttributeValue: | |
| 238 NSAccessibilityPositionAttribute] pointValue]; | |
| 239 NSPoint secondPosition = | |
| 240 [[second accessibilityAttributeValue: | |
| 241 NSAccessibilityPositionAttribute] pointValue]; | |
| 242 if (firstPosition.x < secondPosition.x) | |
| 243 return NSOrderedAscending; | |
| 244 else if (firstPosition.x > secondPosition.x) | |
| 245 return NSOrderedDescending; | |
| 246 else | |
| 247 return NSOrderedSame; | |
| 248 }]; | |
| 249 } | |
| 250 | |
| 230 - (id)accessibilityAttributeValue:(NSString*)attribute { | 251 - (id)accessibilityAttributeValue:(NSString*)attribute { |
| 231 if ([attribute isEqual:NSAccessibilityRoleAttribute]) | 252 if ([attribute isEqual:NSAccessibilityRoleAttribute]) { |
| 232 return NSAccessibilityTabGroupRole; | 253 return NSAccessibilityTabGroupRole; |
| 233 if ([attribute isEqual:NSAccessibilityTabsAttribute]) { | 254 } else if ([attribute isEqual:NSAccessibilityChildrenAttribute]) { |
| 234 NSMutableArray* tabs = [[[NSMutableArray alloc] init] autorelease]; | 255 return [self accessibilityChildren]; |
| 235 NSArray* children = | 256 } else if ([attribute isEqual:NSAccessibilityTabsAttribute]) { |
| 236 [self accessibilityAttributeValue:NSAccessibilityChildrenAttribute]; | 257 NSArray* children = [self accessibilityChildren]; |
| 258 NSMutableArray* tabs = [NSMutableArray arrayWithCapacity:[children count]]; | |
| 237 for (id child in children) { | 259 for (id child in children) { |
| 238 if ([[child accessibilityAttributeValue:NSAccessibilityRoleAttribute] | 260 if ([[child accessibilityAttributeValue:NSAccessibilityRoleAttribute] |
| 239 isEqual:NSAccessibilityRadioButtonRole]) { | 261 isEqual:NSAccessibilityRadioButtonRole]) { |
| 240 [tabs addObject:child]; | 262 [tabs addObject:child]; |
| 241 } | 263 } |
| 242 } | 264 } |
| 243 return tabs; | 265 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
| |
| 266 } else if ([attribute isEqual:NSAccessibilityContentsAttribute]) { | |
| 267 return [self accessibilityChildren]; | |
| 268 } else if ([attribute isEqual:NSAccessibilityValueAttribute]) { | |
| 269 return [controller_ activeTabView]; | |
| 244 } | 270 } |
| 245 if ([attribute isEqual:NSAccessibilityContentsAttribute]) | |
| 246 return [self accessibilityAttributeValue:NSAccessibilityChildrenAttribute]; | |
| 247 if ([attribute isEqual:NSAccessibilityValueAttribute]) | |
| 248 return [controller_ activeTabView]; | |
| 249 | 271 |
| 250 return [super accessibilityAttributeValue:attribute]; | 272 return [super accessibilityAttributeValue:attribute]; |
| 251 } | 273 } |
| 252 | 274 |
| 253 - (NSArray*)accessibilityAttributeNames { | 275 - (NSArray*)accessibilityAttributeNames { |
| 254 NSMutableArray* attributes = | 276 NSMutableArray* attributes = |
| 255 [[super accessibilityAttributeNames] mutableCopy]; | 277 [[super accessibilityAttributeNames] mutableCopy]; |
| 256 [attributes addObject:NSAccessibilityTabsAttribute]; | 278 [attributes addObject:NSAccessibilityTabsAttribute]; |
| 257 [attributes addObject:NSAccessibilityContentsAttribute]; | 279 [attributes addObject:NSAccessibilityContentsAttribute]; |
| 258 [attributes addObject:NSAccessibilityValueAttribute]; | 280 [attributes addObject:NSAccessibilityValueAttribute]; |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 270 | 292 |
| 271 - (void)setNewTabButton:(NewTabButton*)button { | 293 - (void)setNewTabButton:(NewTabButton*)button { |
| 272 newTabButton_.reset([button retain]); | 294 newTabButton_.reset([button retain]); |
| 273 } | 295 } |
| 274 | 296 |
| 275 - (void)setController:(TabStripController*)controller { | 297 - (void)setController:(TabStripController*)controller { |
| 276 controller_ = controller; | 298 controller_ = controller; |
| 277 } | 299 } |
| 278 | 300 |
| 279 @end | 301 @end |
| OLD | NEW |