summaryrefslogtreecommitdiffstats
path: root/chrome/browser/cocoa/fullscreen_window.mm
diff options
context:
space:
mode:
authorBen Murdoch <benm@google.com>2010-07-29 17:14:53 +0100
committerBen Murdoch <benm@google.com>2010-08-04 14:29:45 +0100
commitc407dc5cd9bdc5668497f21b26b09d988ab439de (patch)
tree7eaf8707c0309516bdb042ad976feedaf72b0bb1 /chrome/browser/cocoa/fullscreen_window.mm
parent0998b1cdac5733f299c12d88bc31ef9c8035b8fa (diff)
downloadexternal_chromium-c407dc5cd9bdc5668497f21b26b09d988ab439de.zip
external_chromium-c407dc5cd9bdc5668497f21b26b09d988ab439de.tar.gz
external_chromium-c407dc5cd9bdc5668497f21b26b09d988ab439de.tar.bz2
Merge Chromium src@r53293
Change-Id: Ia79acf8670f385cee48c45b0a75371d8e950af34
Diffstat (limited to 'chrome/browser/cocoa/fullscreen_window.mm')
-rw-r--r--chrome/browser/cocoa/fullscreen_window.mm106
1 files changed, 106 insertions, 0 deletions
diff --git a/chrome/browser/cocoa/fullscreen_window.mm b/chrome/browser/cocoa/fullscreen_window.mm
new file mode 100644
index 0000000..4fd2be1
--- /dev/null
+++ b/chrome/browser/cocoa/fullscreen_window.mm
@@ -0,0 +1,106 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "chrome/browser/cocoa/fullscreen_window.h"
+
+#include "base/mac_util.h"
+#include "chrome/browser/browser_theme_provider.h"
+#import "chrome/browser/cocoa/themed_window.h"
+
+@implementation FullscreenWindow
+
+// Make sure our designated initializer gets called.
+- (id)init {
+ return [self initForScreen:[NSScreen mainScreen]];
+}
+
+- (id)initForScreen:(NSScreen*)screen {
+ NSRect contentRect;
+ contentRect.origin = NSZeroPoint;
+ contentRect.size = [screen frame].size;
+
+ if ((self = [super initWithContentRect:contentRect
+ styleMask:NSBorderlessWindowMask
+ backing:NSBackingStoreBuffered
+ defer:YES
+ screen:screen])) {
+ [self setReleasedWhenClosed:NO];
+ }
+ return self;
+}
+
+// According to
+// http://www.cocoabuilder.com/archive/message/cocoa/2006/6/19/165953,
+// NSBorderlessWindowMask windows cannot become key or main.
+// In our case, however, we don't want that behavior, so we override
+// canBecomeKeyWindow and canBecomeMainWindow.
+
+- (BOOL)canBecomeKeyWindow {
+ return YES;
+}
+
+- (BOOL)canBecomeMainWindow {
+ return YES;
+}
+
+// When becoming/resigning main status, explicitly set the background color,
+// which is required by |TabView|.
+- (void)becomeMainWindow {
+ [super becomeMainWindow];
+ [self setBackgroundColor:[NSColor windowFrameColor]];
+}
+
+- (void)resignMainWindow {
+ [super resignMainWindow];
+ [self setBackgroundColor:[NSColor windowBackgroundColor]];
+}
+
+// We need our own version, since the default one wants to flash the close
+// button (and possibly other things), which results in nothing happening.
+- (void)performClose:(id)sender {
+ BOOL shouldClose = YES;
+
+ // If applicable, check if this window should close.
+ id delegate = [self delegate];
+ if ([delegate respondsToSelector:@selector(windowShouldClose:)])
+ shouldClose = [delegate windowShouldClose:self];
+
+ if (shouldClose) {
+ [self close];
+ }
+}
+
+- (BOOL)validateUserInterfaceItem:(id<NSValidatedUserInterfaceItem>)item {
+ SEL action = [item action];
+
+ // Explicitly enable |-performClose:| (see above); otherwise the fact that
+ // this window does not have a close button results in it being disabled.
+ if (action == @selector(performClose:))
+ return YES;
+
+ return [super validateUserInterfaceItem:item];
+}
+
+- (ThemeProvider*)themeProvider {
+ id delegate = [self delegate];
+ if (![delegate respondsToSelector:@selector(themeProvider)])
+ return NULL;
+ return [delegate themeProvider];
+}
+
+- (ThemedWindowStyle)themedWindowStyle {
+ id delegate = [self delegate];
+ if (![delegate respondsToSelector:@selector(themedWindowStyle)])
+ return THEMED_NORMAL;
+ return [delegate themedWindowStyle];
+}
+
+- (NSPoint)themePatternPhase {
+ id delegate = [self delegate];
+ if (![delegate respondsToSelector:@selector(themePatternPhase)])
+ return NSMakePoint(0, 0);
+ return [delegate themePatternPhase];
+}
+
+@end