Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(634)

Side by Side Diff: chrome/browser/ui/cocoa/browser_window_controller_private.mm

Issue 655393002: mac: Fix a bug where a fullscreened window on Mavericks would be too short. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Comments from rsesek. Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « chrome/browser/ui/cocoa/browser_window_controller_private.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #import "chrome/browser/ui/cocoa/browser_window_controller_private.h" 5 #import "chrome/browser/ui/cocoa/browser_window_controller_private.h"
6 6
7 #include <cmath> 7 #include <cmath>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/mac/bind_objc_block.h"
10 #include "base/mac/mac_util.h" 11 #include "base/mac/mac_util.h"
11 #import "base/mac/scoped_nsobject.h" 12 #import "base/mac/scoped_nsobject.h"
12 #import "base/mac/sdk_forward_declarations.h" 13 #import "base/mac/sdk_forward_declarations.h"
13 #include "base/metrics/histogram.h" 14 #include "base/metrics/histogram.h"
14 #include "base/prefs/pref_service.h" 15 #include "base/prefs/pref_service.h"
15 #include "base/prefs/scoped_user_pref_update.h" 16 #include "base/prefs/scoped_user_pref_update.h"
16 #include "chrome/browser/browser_process.h" 17 #include "chrome/browser/browser_process.h"
17 #include "chrome/browser/fullscreen.h" 18 #include "chrome/browser/fullscreen.h"
18 #include "chrome/browser/profiles/profile.h" 19 #include "chrome/browser/profiles/profile.h"
19 #include "chrome/browser/profiles/profile_avatar_icon_util.h" 20 #include "chrome/browser/profiles/profile_avatar_icon_util.h"
(...skipping 655 matching lines...) Expand 10 before | Expand all | Expand 10 after
675 RecordFullscreenHistogram(APPKIT_FULLSCREEN_MECHANISM, [self window]); 676 RecordFullscreenHistogram(APPKIT_FULLSCREEN_MECHANISM, [self window]);
676 677
677 if (notification) // For System Fullscreen when non-nil. 678 if (notification) // For System Fullscreen when non-nil.
678 [self registerForContentViewResizeNotifications]; 679 [self registerForContentViewResizeNotifications];
679 680
680 NSWindow* window = [self window]; 681 NSWindow* window = [self window];
681 savedRegularWindowFrame_ = [window frame]; 682 savedRegularWindowFrame_ = [window frame];
682 BOOL mode = enteringPresentationMode_ || 683 BOOL mode = enteringPresentationMode_ ||
683 browser_->fullscreen_controller()->IsWindowFullscreenForTabOrPending(); 684 browser_->fullscreen_controller()->IsWindowFullscreenForTabOrPending();
684 enteringAppKitFullscreen_ = YES; 685 enteringAppKitFullscreen_ = YES;
686 enteringAppKitFullscreenOnPrimaryScreen_ =
687 [[[self window] screen] isEqual:[[NSScreen screens] objectAtIndex:0]];
685 688
686 fullscreen_mac::SlidingStyle style = 689 fullscreen_mac::SlidingStyle style =
687 mode ? fullscreen_mac::OMNIBOX_TABS_HIDDEN 690 mode ? fullscreen_mac::OMNIBOX_TABS_HIDDEN
688 : fullscreen_mac::OMNIBOX_TABS_PRESENT; 691 : fullscreen_mac::OMNIBOX_TABS_PRESENT;
689 692
690 [self adjustUIForSlidingFullscreenStyle:style]; 693 [self adjustUIForSlidingFullscreenStyle:style];
691 } 694 }
692 695
693 - (void)windowDidEnterFullScreen:(NSNotification*)notification { 696 - (void)windowDidEnterFullScreen:(NSNotification*)notification {
694 // In Yosemite, some combination of the titlebar and toolbar always show in 697 // In Yosemite, some combination of the titlebar and toolbar always show in
695 // full-screen mode. We do not want either to show. Search for the window that 698 // full-screen mode. We do not want either to show. Search for the window that
696 // contains the views, and hide it. There is no need to ever unhide the view. 699 // contains the views, and hide it. There is no need to ever unhide the view.
697 // http://crbug.com/380235 700 // http://crbug.com/380235
698 if (base::mac::IsOSYosemiteOrLater()) { 701 if (base::mac::IsOSYosemiteOrLater()) {
699 for (NSWindow* window in [[NSApplication sharedApplication] windows]) { 702 for (NSWindow* window in [[NSApplication sharedApplication] windows]) {
700 if ([window 703 if ([window
701 isKindOfClass:NSClassFromString(@"NSToolbarFullScreenWindow")]) { 704 isKindOfClass:NSClassFromString(@"NSToolbarFullScreenWindow")]) {
702 [[window contentView] setHidden:YES]; 705 [[window contentView] setHidden:YES];
703 } 706 }
704 } 707 }
705 } 708 }
706 709
710 if ([self shouldUseMavericksAppKitFullscreenHack]) {
711 // Apply a hack to fix the size of the window. This is the last run of the
712 // MessageLoop where the hack will not work, so dispatch the hack to the
713 // top of the MessageLoop.
714 base::Callback<void(void)> callback = base::BindBlock(^{
715 if (![self isInAppKitFullscreen])
716 return;
717
718 // The window's frame should be exactly 22 points too short.
719 CGFloat kExpectedHeightDifference = 22;
720 NSRect currentFrame = [[self window] frame];
721 NSRect expectedFrame = [[[self window] screen] frame];
722 if (!NSEqualPoints(currentFrame.origin, expectedFrame.origin))
723 return;
724 if (currentFrame.size.width != expectedFrame.size.width)
725 return;
726 CGFloat heightDelta =
727 expectedFrame.size.height - currentFrame.size.height;
728 if (fabs(heightDelta - kExpectedHeightDifference) > 0.01)
729 return;
730
731 [[self window] setFrame:expectedFrame display:YES];
732 });
733 base::MessageLoop::current()->PostTask(FROM_HERE, callback);
734 }
735
707 if (notification) // For System Fullscreen when non-nil. 736 if (notification) // For System Fullscreen when non-nil.
708 [self deregisterForContentViewResizeNotifications]; 737 [self deregisterForContentViewResizeNotifications];
709 enteringAppKitFullscreen_ = NO; 738 enteringAppKitFullscreen_ = NO;
710 enteringImmersiveFullscreen_ = NO; 739 enteringImmersiveFullscreen_ = NO;
711 enteringPresentationMode_ = NO; 740 enteringPresentationMode_ = NO;
712 741
713 [self showFullscreenExitBubbleIfNecessary]; 742 [self showFullscreenExitBubbleIfNecessary];
714 browser_->WindowFullscreenStateChanged(); 743 browser_->WindowFullscreenStateChanged();
715 [[[self window] cr_windowView] setWantsLayer:windowViewWantsLayer_]; 744 [[[self window] cr_windowView] setWantsLayer:windowViewWantsLayer_];
716 } 745 }
(...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after
1042 [self updateLayerOrdering:[avatarButtonController_ view]]; 1071 [self updateLayerOrdering:[avatarButtonController_ view]];
1043 1072
1044 [CATransaction commit]; 1073 [CATransaction commit];
1045 hasAdjustedTabStripWhileEnteringAppKitFullscreen_ = YES; 1074 hasAdjustedTabStripWhileEnteringAppKitFullscreen_ = YES;
1046 } 1075 }
1047 } else { 1076 } else {
1048 hasAdjustedTabStripWhileEnteringAppKitFullscreen_ = NO; 1077 hasAdjustedTabStripWhileEnteringAppKitFullscreen_ = NO;
1049 } 1078 }
1050 } 1079 }
1051 1080
1081 - (BOOL)shouldUseMavericksAppKitFullscreenHack {
1082 if (!base::mac::IsOSMavericks())
1083 return NO;
1084 if (![NSScreen respondsToSelector:@selector(screensHaveSeparateSpaces)] ||
1085 ![NSScreen screensHaveSeparateSpaces]) {
1086 return NO;
1087 }
1088 if (!enteringAppKitFullscreen_)
1089 return NO;
1090 if (enteringAppKitFullscreenOnPrimaryScreen_)
1091 return NO;
1092
1093 return YES;
1094 }
1095
1052 @end // @implementation BrowserWindowController(Private) 1096 @end // @implementation BrowserWindowController(Private)
OLDNEW
« no previous file with comments | « chrome/browser/ui/cocoa/browser_window_controller_private.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698