diff options
| author | Ben Murdoch <benm@google.com> | 2010-07-29 17:14:53 +0100 |
|---|---|---|
| committer | Ben Murdoch <benm@google.com> | 2010-08-04 14:29:45 +0100 |
| commit | c407dc5cd9bdc5668497f21b26b09d988ab439de (patch) | |
| tree | 7eaf8707c0309516bdb042ad976feedaf72b0bb1 /chrome/browser/cocoa/fullscreen_window.mm | |
| parent | 0998b1cdac5733f299c12d88bc31ef9c8035b8fa (diff) | |
| download | external_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.mm | 106 |
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 |
