Chromium Code Reviews| Index: chrome/browser/fullscreen_mac.mm |
| =================================================================== |
| --- chrome/browser/fullscreen_mac.mm (revision 0) |
| +++ chrome/browser/fullscreen_mac.mm (revision 0) |
| @@ -0,0 +1,107 @@ |
| +// Copyright (c) 2011 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/fullscreen.h" |
| + |
| +#import "base/logging.h" |
|
dmac
2011/01/21 19:34:44
base/logging should be under system imports.
jianli
2011/01/21 20:21:00
Done.
|
| +#import <Carbon/Carbon.h> |
| +#import <Cocoa/Cocoa.h> |
| + |
| +@interface FullScreenMonitor : NSObject { |
| + @private |
| + BOOL isFullScreen_; |
| + EventHandlerRef eventHandler_; |
| +} |
| + |
| +- (BOOL) isFullScreen; |
|
dmac
2011/01/21 19:34:44
no space between ) and i (same on line below)
jianli
2011/01/21 20:21:00
Done.
|
| +- (void) setIsFullScreen:(BOOL)newIsFullScreen; |
|
dmac
2011/01/21 19:34:44
cocoa naming would be isFullScreen and setFullScre
jianli
2011/01/21 20:21:00
Done.
|
| + |
| +@end |
| + |
| +static OSStatus handleAppEvent(EventHandlerCallRef myHandler, |
| + EventRef event, |
| + void* userData) { |
| + DCHECK(userData); |
| + |
| + FullScreenMonitor* fullScreenMonitor = |
| + reinterpret_cast<FullScreenMonitor*>(userData); |
| + |
| + UInt32 mode = 0; |
| + (void) GetEventParameter(event, |
| + kEventParamSystemUIMode, |
| + typeUInt32, |
| + /*outActualType*/ NULL, |
|
dmac
2011/01/21 19:34:44
get rid of /*value*/ and do you want to check for
jianli
2011/01/21 20:21:00
Done.
|
| + sizeof(UInt32), |
| + /*outActualSize*/ NULL, |
| + &mode); |
| + BOOL isFullScreenMode = mode == kUIModeAllHidden; |
| + [fullScreenMonitor setIsFullScreen:isFullScreenMode]; |
| + return noErr; |
| +} |
| + |
| +@implementation FullScreenMonitor |
| + |
| +- (id)init { |
| + if ((self = [super init])) { |
| + // Check if the user is in presentation mode initially. We do this by |
|
dmac
2011/01/21 19:34:44
When this is initialized, do we expect Chrome to b
jianli
2011/01/21 20:21:00
No. InitFullScreenMonitor is called when Notificat
|
| + // checking if the menu bar is visible. |
| + NSArray* screens = [NSScreen screens]; |
| + if ([screens count] > 0) { |
| + NSScreen* screen = [screens objectAtIndex:0]; |
| + NSRect fullBounds = [screen frame]; |
| + NSRect workBounds = [screen visibleFrame]; |
| + if (NSMaxY(fullBounds) == NSMaxY(workBounds)) |
| + isFullScreen_ = YES; |
| + } |
| + |
| + // Register a Carbon event to receive the notification about the login |
| + // session's UI mode change. |
| + EventTypeSpec events[] = |
| + {{ kEventClassApplication, kEventAppSystemUIModeChanged }}; |
| + OSStatus res = InstallApplicationEventHandler( |
| + NewEventHandlerUPP(handleAppEvent), |
| + GetEventTypeCount(events), |
| + events, |
| + self, |
| + &eventHandler_); |
| + DCHECK(res == noErr); |
| + (void) res; // Work around unused variable warning. |
| + } |
| + return self; |
| +} |
| + |
| +- (void)dealloc { |
| + if (eventHandler_) |
| + RemoveEventHandler(eventHandler_); |
| + [super dealloc]; |
| +} |
| + |
| +- (BOOL)isFullScreen { |
| + return isFullScreen_; |
| +} |
| + |
| +- (void)setIsFullScreen:(BOOL)newIsFullScreen { |
| + isFullScreen_ = newIsFullScreen; |
| +} |
| + |
| +@end |
| + |
| +FullScreenMonitor* g_fullScreenMonitor = nil; |
| + |
| +void InitFullScreenMonitor() { |
| + if (!g_fullScreenMonitor) |
| + g_fullScreenMonitor = [[FullScreenMonitor alloc] init]; |
| +} |
| + |
| +void StopFullScreenMonitor() { |
| + g_fullScreenMonitor = nil; |
|
dmac
2011/01/21 19:34:44
[g_fullScreenMonitor release]; ?
jianli
2011/01/21 20:21:00
Done.
|
| +} |
| + |
| +bool IsFullScreenMode() { |
| + // Check if the main display has been captured (game in particular). |
| + if (CGDisplayIsCaptured(CGMainDisplayID())) |
| + return true; |
| + |
| + return [g_fullScreenMonitor isFullScreen]; |
| +} |
| Property changes on: chrome\browser\fullscreen_mac.mm |
| ___________________________________________________________________ |
| Added: svn:eol-style |
| + LF |