| Index: chrome/browser/ui/cocoa/custom_frame_view.mm
|
| diff --git a/chrome/browser/ui/cocoa/custom_frame_view.mm b/chrome/browser/ui/cocoa/custom_frame_view.mm
|
| index 3628c1a29fbf83e24d4acabdaf0cbcb510ef9fc3..acfff1ffe5b4ce9f95a4488b8e76b425aa86c140 100644
|
| --- a/chrome/browser/ui/cocoa/custom_frame_view.mm
|
| +++ b/chrome/browser/ui/cocoa/custom_frame_view.mm
|
| @@ -13,13 +13,7 @@
|
| #include "base/mac/mac_util.h"
|
| #include "base/mac/scoped_nsautorelease_pool.h"
|
|
|
| -namespace {
|
| -BOOL gCanDrawTitle = NO;
|
| -BOOL gCanGetCornerRadius = NO;
|
| -} // namespace
|
| -
|
| @interface NSView (Swizzles)
|
| -- (void)drawRectOriginal:(NSRect)rect;
|
| - (NSPoint)_fullScreenButtonOriginOriginal;
|
| @end
|
|
|
| @@ -27,23 +21,12 @@ BOOL gCanGetCornerRadius = NO;
|
| - (NSPoint)fullScreenButtonOriginAdjustment;
|
| @end
|
|
|
| -@implementation NSWindow (CustomFrameView)
|
| -- (void)drawCustomFrameRect:(NSRect)rect forView:(NSView*)view {
|
| - [view drawRectOriginal:rect];
|
| -}
|
| -@end
|
| -
|
| @interface CustomFrameView : NSView
|
|
|
| @end
|
|
|
| @implementation CustomFrameView
|
|
|
| -// This is where we swizzle drawRect, and add in two methods that we
|
| -// need. If any of these fail it shouldn't affect the functionality of the
|
| -// others. If they all fail, we will lose window frame theming and
|
| -// roll overs for our close widgets, but things should still function
|
| -// correctly.
|
| + (void)load {
|
| // Swizzling should only happen in the browser process. Interacting with
|
| // AppKit will run +[borderViewClass initialize] in the renderer, which
|
| @@ -59,6 +42,11 @@ BOOL gCanGetCornerRadius = NO;
|
| return;
|
| }
|
|
|
| + // In Yosemite, the fullscreen button replaces the zoom button. We no longer
|
| + // need to swizzle out this AppKit private method.
|
| + if (!base::mac::IsOSMavericksOrEarlier())
|
| + return;
|
| +
|
| base::mac::ScopedNSAutoreleasePool pool;
|
|
|
| // On 10.8+ the background for textured windows are no longer drawn by
|
| @@ -68,58 +56,25 @@ BOOL gCanGetCornerRadius = NO;
|
| DCHECK(borderViewClass);
|
| if (!borderViewClass) return;
|
|
|
| - // Exchange draw rect.
|
| - Method m0 = class_getInstanceMethod([self class], @selector(drawRect:));
|
| - DCHECK(m0);
|
| + // Swizzle the method that sets the origin for the Lion fullscreen button.
|
| + // Do nothing if it cannot be found.
|
| + Method m0 = class_getInstanceMethod([self class],
|
| + @selector(_fullScreenButtonOrigin));
|
| if (m0) {
|
| BOOL didAdd = class_addMethod(borderViewClass,
|
| - @selector(drawRectOriginal:),
|
| + @selector(_fullScreenButtonOriginOriginal),
|
| method_getImplementation(m0),
|
| method_getTypeEncoding(m0));
|
| - DCHECK(didAdd);
|
| if (didAdd) {
|
| Method m1 = class_getInstanceMethod(borderViewClass,
|
| - @selector(drawRect:));
|
| - Method m2 = class_getInstanceMethod(borderViewClass,
|
| - @selector(drawRectOriginal:));
|
| - DCHECK(m1 && m2);
|
| + @selector(_fullScreenButtonOrigin));
|
| + Method m2 = class_getInstanceMethod(
|
| + borderViewClass, @selector(_fullScreenButtonOriginOriginal));
|
| if (m1 && m2) {
|
| method_exchangeImplementations(m1, m2);
|
| }
|
| }
|
| }
|
| -
|
| - // In Yosemite, the fullscreen button replaces the zoom button. We no longer
|
| - // need to swizzle out this AppKit private method.
|
| - if (base::mac::IsOSMavericksOrEarlier()) {
|
| - // Swizzle the method that sets the origin for the Lion fullscreen button.
|
| - // Do nothing if it cannot be found.
|
| - m0 = class_getInstanceMethod([self class],
|
| - @selector(_fullScreenButtonOrigin));
|
| - if (m0) {
|
| - BOOL didAdd = class_addMethod(borderViewClass,
|
| - @selector(_fullScreenButtonOriginOriginal),
|
| - method_getImplementation(m0),
|
| - method_getTypeEncoding(m0));
|
| - if (didAdd) {
|
| - Method m1 = class_getInstanceMethod(borderViewClass,
|
| - @selector(_fullScreenButtonOrigin));
|
| - Method m2 = class_getInstanceMethod(
|
| - borderViewClass, @selector(_fullScreenButtonOriginOriginal));
|
| - if (m1 && m2) {
|
| - method_exchangeImplementations(m1, m2);
|
| - }
|
| - }
|
| - }
|
| - }
|
| -}
|
| -
|
| -+ (BOOL)canDrawTitle {
|
| - return gCanDrawTitle;
|
| -}
|
| -
|
| -+ (BOOL)canGetCornerRadius {
|
| - return gCanGetCornerRadius;
|
| }
|
|
|
| - (id)initWithFrame:(NSRect)frame {
|
| @@ -134,13 +89,6 @@ BOOL gCanGetCornerRadius = NO;
|
| return nil;
|
| }
|
|
|
| -// Here is our custom drawing for our frame.
|
| -- (void)drawRect:(NSRect)rect {
|
| - // Delegate drawing to the window, whose default implementation (above) is to
|
| - // call into the original implementation.
|
| - [[self window] drawCustomFrameRect:rect forView:self];
|
| -}
|
| -
|
| // Override to move the fullscreen button to the left of the profile avatar.
|
| - (NSPoint)_fullScreenButtonOrigin {
|
| NSWindow* window = [self window];
|
|
|