Index: chrome/browser/fullscreen_mac.mm |
=================================================================== |
--- chrome/browser/fullscreen_mac.mm (revision 0) |
+++ chrome/browser/fullscreen_mac.mm (revision 0) |
@@ -0,0 +1,100 @@ |
+// 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 <Carbon/Carbon.h> |
+#import <Cocoa/Cocoa.h> |
+ |
+#import "base/logging.h" |
+ |
+@interface FullScreenMonitor : NSObject { |
+ @private |
+ BOOL fullScreen_; |
+ EventHandlerRef eventHandler_; |
+} |
+ |
+@property (nonatomic, getter=isFullScreen) BOOL fullScreen; |
+ |
+@end |
+ |
+static OSStatus handleAppEvent(EventHandlerCallRef myHandler, |
+ EventRef event, |
+ void* userData) { |
+ DCHECK(userData); |
+ |
+ FullScreenMonitor* fullScreenMonitor = |
+ reinterpret_cast<FullScreenMonitor*>(userData); |
+ |
+ UInt32 mode = 0; |
+ OSStatus status = GetEventParameter(event, |
+ kEventParamSystemUIMode, |
+ typeUInt32, |
+ NULL, |
+ sizeof(UInt32), |
+ NULL, |
+ &mode); |
+ if (status != noErr) |
+ return status; |
+ BOOL isFullScreenMode = mode == kUIModeAllHidden; |
+ [fullScreenMonitor setFullScreen:isFullScreenMode]; |
+ return noErr; |
+} |
+ |
+@implementation FullScreenMonitor |
+ |
+@synthesize fullScreen = fullScreen_; |
+ |
+- (id)init { |
+ if ((self = [super init])) { |
+ // Check if the user is in presentation mode initially. |
+ SystemUIMode currentMode; |
+ GetSystemUIMode(¤tMode, NULL); |
+ fullScreen_ = currentMode == kUIModeAllHidden; |
+ |
+ // Register a Carbon event to receive the notification about the login |
+ // session's UI mode change. |
+ EventTypeSpec events[] = |
+ {{ kEventClassApplication, kEventAppSystemUIModeChanged }}; |
+ OSStatus status = InstallApplicationEventHandler( |
+ NewEventHandlerUPP(handleAppEvent), |
+ GetEventTypeCount(events), |
+ events, |
+ self, |
+ &eventHandler_); |
+ if (status) { |
+ [self release]; |
+ self = nil; |
+ } |
+ } |
+ return self; |
+} |
+ |
+- (void)dealloc { |
+ if (eventHandler_) |
+ RemoveEventHandler(eventHandler_); |
+ [super dealloc]; |
+} |
+ |
+@end |
+ |
+static FullScreenMonitor* g_fullScreenMonitor = nil; |
+ |
+void InitFullScreenMonitor() { |
+ if (!g_fullScreenMonitor) |
+ g_fullScreenMonitor = [[FullScreenMonitor alloc] init]; |
+} |
+ |
+void StopFullScreenMonitor() { |
+ [g_fullScreenMonitor release]; |
+ g_fullScreenMonitor = nil; |
+} |
+ |
+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 |