summaryrefslogtreecommitdiffstats
path: root/chrome/browser/ui/cocoa/browser_window_controller_private.mm
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/ui/cocoa/browser_window_controller_private.mm')
-rw-r--r--chrome/browser/ui/cocoa/browser_window_controller_private.mm60
1 files changed, 56 insertions, 4 deletions
diff --git a/chrome/browser/ui/cocoa/browser_window_controller_private.mm b/chrome/browser/ui/cocoa/browser_window_controller_private.mm
index 36a9ccd..f2c086b 100644
--- a/chrome/browser/ui/cocoa/browser_window_controller_private.mm
+++ b/chrome/browser/ui/cocoa/browser_window_controller_private.mm
@@ -22,6 +22,7 @@
#include "chrome/browser/ui/bookmarks/bookmark_tab_helper.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_window_state.h"
+#import "chrome/browser/ui/cocoa/browser_window_enter_fullscreen_transition.h"
#import "chrome/browser/ui/cocoa/browser_window_layout.h"
#import "chrome/browser/ui/cocoa/dev_tools_controller.h"
#import "chrome/browser/ui/cocoa/fast_resize_view.h"
@@ -682,6 +683,8 @@ willPositionSheet:(NSWindow*)sheet
}
- (void)windowDidEnterFullScreen:(NSNotification*)notification {
+ enterFullscreenTransition_.reset();
+
// In Yosemite, some combination of the titlebar and toolbar always show in
// full-screen mode. We do not want either to show. Search for the window that
// contains the views, and hide it. There is no need to ever unhide the view.
@@ -1002,13 +1005,16 @@ willPositionSheet:(NSWindow*)sheet
}
}
-- (BOOL)shouldUseMavericksAppKitFullscreenHack {
++ (BOOL)systemSettingsRequireMavericksAppKitFullscreenHack {
if (!base::mac::IsOSMavericks())
return NO;
- if (![NSScreen respondsToSelector:@selector(screensHaveSeparateSpaces)] ||
- ![NSScreen screensHaveSeparateSpaces]) {
+ return [NSScreen respondsToSelector:@selector(screensHaveSeparateSpaces)] &&
+ [NSScreen screensHaveSeparateSpaces];
+}
+
+- (BOOL)shouldUseMavericksAppKitFullscreenHack {
+ if (![[self class] systemSettingsRequireMavericksAppKitFullscreenHack])
return NO;
- }
if (!enteringAppKitFullscreen_)
return NO;
if (enteringAppKitFullscreenOnPrimaryScreen_)
@@ -1017,4 +1023,50 @@ willPositionSheet:(NSWindow*)sheet
return YES;
}
+- (BOOL)shouldUseCustomAppKitFullscreenTransition {
+ if (base::mac::IsOSMountainLionOrEarlier())
+ return NO;
+
+ NSView* root = [[self.window contentView] superview];
+ if (!root.layer)
+ return NO;
+
+ // AppKit on OSX 10.9 has a bug for applications linked against OSX 10.8 SDK
+ // and earlier. Under specific circumstances, it prevents the custom AppKit
+ // transition from working well. See http://crbug.com/396980 for more
+ // details.
+ if ([[self class] systemSettingsRequireMavericksAppKitFullscreenHack] &&
+ ![[[self window] screen] isEqual:[[NSScreen screens] objectAtIndex:0]]) {
+ return NO;
+ }
+
+ return YES;
+}
+
+- (NSArray*)customWindowsToEnterFullScreenForWindow:(NSWindow*)window {
+ DCHECK([window isEqual:self.window]);
+
+ if (![self shouldUseCustomAppKitFullscreenTransition])
+ return nil;
+
+ enterFullscreenTransition_.reset(
+ [[BrowserWindowEnterFullscreenTransition alloc]
+ initWithWindow:self.window]);
+ return [enterFullscreenTransition_ customWindowsToEnterFullScreen];
+}
+
+- (void)window:(NSWindow*)window
+ startCustomAnimationToEnterFullScreenWithDuration:(NSTimeInterval)duration {
+ DCHECK([window isEqual:self.window]);
+ [enterFullscreenTransition_
+ startCustomAnimationToEnterFullScreenWithDuration:duration];
+}
+
+- (BOOL)shouldConstrainFrameRect {
+ if ([enterFullscreenTransition_ shouldWindowBeUnconstrained])
+ return NO;
+
+ return [super shouldConstrainFrameRect];
+}
+
@end // @implementation BrowserWindowController(Private)