Commit 92adbb2e authored by erikchen@chromium.org's avatar erikchen@chromium.org

mac: [Yosemite] Fix bug where zoom button causes fullscreen mode.

In Yosemite, holding down alt while clicking the fullscreen button is supposed
to zoom the window. This doesn't work because Chrome violates unstated AppKit
assumptions.

The problem seems to lie in hit testing the location of the zoom button.
Reordering the subviews by moving the tab strip and the content view behind the
zoom button fixes the problem.

BUG=393808

Review URL: https://codereview.chromium.org/402443003

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@284544 0039d316-1c4b-4281-b951-d872f2087c98
parent c1841a15
......@@ -6,6 +6,33 @@
#include "base/logging.h"
#include "base/mac/mac_util.h"
#include "base/mac/scoped_nsobject.h"
// This view always takes the size of its superview. It is intended to be used
// as a NSWindow's contentView. It is needed because NSWindow's implementation
// explicitly resizes the contentView at inopportune times.
@interface FullSizeContentView : NSView
@end
namespace {
// Reorders the subviews of NSWindow's root view so that the contentView is
// moved to the back, and the ordering of the other views is unchanged.
// |context| should be an NSArray containing the subviews of the root view as
// they were previously ordered.
int ReorderContentViewToBack(id firstView, id secondView, void* context) {
NSView* contentView = [[firstView window] contentView];
NSArray* subviews = static_cast<NSArray*>(context);
if (firstView == contentView)
return NSOrderedAscending;
if (secondView == contentView)
return NSOrderedDescending;
NSUInteger index1 = [subviews indexOfObject:firstView];
NSUInteger index2 = [subviews indexOfObject:secondView];
return (index1 < index2) ? NSOrderedAscending : NSOrderedDescending;
}
} // namespace
@interface VersionIndependentWindow ()
......@@ -15,12 +42,6 @@
@end
// This view always takes the size of its superview. It is intended to be used
// as a NSWindow's contentView. It is needed because NSWindow's implementation
// explicitly resizes the contentView at inopportune times.
@interface FullSizeContentView : NSView
@end
@implementation FullSizeContentView
// This method is directly called by NSWindow during a window resize on OSX
......@@ -75,6 +96,18 @@
setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
[self setContentView:chromeWindowView_];
[chromeWindowView_ setFrame:[[[self contentView] superview] bounds]];
// Move the content view to the back.
// In Yosemite, the content view takes up the full size of the window,
// and when it is in front of the zoom/fullscreen button, alt-clicking
// the button has the wrong effect.
// Adding subviews to the NSThemeFrame provokes a warning in Yosemite, so
// we sort the subviews in place.
// http://crbug.com/393808
NSView* superview = [[self contentView] superview];
base::scoped_nsobject<NSArray> subviews([[superview subviews] copy]);
[superview sortSubviewsUsingFunction:&ReorderContentViewToBack
context:subviews.get()];
}
}
return self;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment