Chromium Code Reviews| 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..7dbf311ae08432e57628cb71e79f431c4e3f6ee7 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,24 +21,18 @@ 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 { |
| + // In Yosemite, the fullscreen button replaces the zoom button. We no longer |
|
Robert Sesek
2015/03/05 18:33:26
I think this is OK, but for extra safety I'd do th
jackhou1
2015/03/06 01:49:38
Done.
|
| + // need to swizzle out this AppKit private method. |
| + if (!base::mac::IsOSMavericksOrEarlier()) |
| + return; |
| + |
| // Swizzling should only happen in the browser process. Interacting with |
| // AppKit will run +[borderViewClass initialize] in the renderer, which |
| // may establish Mach IPC with com.apple.windowserver. |
| @@ -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]; |