#include <cmath> // floor
#include "base/logging.h"
-#include "base/mac/mac_util.h"
#include "chrome/browser/themes/theme_service.h"
#import "chrome/browser/ui/cocoa/browser_window_controller.h"
#import "chrome/browser/ui/cocoa/new_tab_button.h"
-#import "chrome/browser/ui/cocoa/nsview_additions.h"
#import "chrome/browser/ui/cocoa/tabs/tab_strip_controller.h"
#import "chrome/browser/ui/cocoa/tabs/tab_view.h"
#import "chrome/browser/ui/cocoa/view_id_util.h"
-#include "grit/generated_resources.h"
+#include "chrome/grit/generated_resources.h"
#include "grit/theme_resources.h"
+#import "ui/base/cocoa/appkit_utils.h"
#import "ui/base/cocoa/nsgraphics_context_additions.h"
+#import "ui/base/cocoa/nsview_additions.h"
#include "ui/base/l10n/l10n_util_mac.h"
#include "ui/gfx/scoped_ns_graphics_context_save_gstate_mac.h"
// Register to be an URL drop target.
dropHandler_.reset([[URLDropTargetHandler alloc] initWithView:self]);
- // Give this view its own layer, and squash child layers into this layer
- // so that the text in the infobar have sub-pixel anti-aliasing.
- [self cr_setWantsLayer:YES withSquashing:YES];
+ [self setWantsLayer:YES];
}
return self;
}
// "short" as 0.8 seconds. (Measuring up-to-up isn't enough to properly
// detect double-clicks, but we're actually using Cocoa for that.)
if (clickCount == 2 && (timestamp - lastMouseUp_) < 0.8) {
- if (base::mac::ShouldWindowsMiniaturizeOnDoubleClick())
- [[self window] performMiniaturize:self];
+ ui::WindowTitlebarReceivedDoubleClick([self window], self);
} else {
[super mouseUp:event];
}
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];
}