diff options
-rw-r--r-- | chrome/browser/cocoa/chrome_browser_window.mm | 14 | ||||
-rw-r--r-- | chrome/browser/cocoa/tab_window_controller.h | 3 | ||||
-rw-r--r-- | chrome/browser/cocoa/tab_window_controller.mm | 6 |
3 files changed, 23 insertions, 0 deletions
diff --git a/chrome/browser/cocoa/chrome_browser_window.mm b/chrome/browser/cocoa/chrome_browser_window.mm index 20d3c77..c4b503b 100644 --- a/chrome/browser/cocoa/chrome_browser_window.mm +++ b/chrome/browser/cocoa/chrome_browser_window.mm @@ -329,4 +329,18 @@ namespace { return shouldHideTitle_; } +// This method is called whenever a window is moved in order to ensure it fits +// on the screen. We cannot always handle resizes without breaking, so we +// prevent frame constraining in those cases. +- (NSRect)constrainFrameRect:(NSRect)frame toScreen:(NSScreen*)screen { + // Do not constrain the frame rect if our delegate says no. In this case, + // return the original (unconstrained) frame. + id delegate = [self delegate]; + if ([delegate respondsToSelector:@selector(shouldConstrainFrameRect)] && + ![delegate shouldConstrainFrameRect]) + return frame; + + return [super constrainFrameRect:frame toScreen:screen]; +} + @end diff --git a/chrome/browser/cocoa/tab_window_controller.h b/chrome/browser/cocoa/tab_window_controller.h index 04346e5..c9c2589 100644 --- a/chrome/browser/cocoa/tab_window_controller.h +++ b/chrome/browser/cocoa/tab_window_controller.h @@ -49,6 +49,9 @@ - (void)removeOverlayAfterDelay:(NSTimeInterval)delay; - (NSWindow*)overlayWindow; +// Returns YES if it is ok to constrain the window's frame to fit the screen. +- (BOOL)shouldConstrainFrameRect; + // A collection of methods, stubbed out in this base class, that provide // the implementation of tab dragging based on whatever model is most // appropriate. diff --git a/chrome/browser/cocoa/tab_window_controller.mm b/chrome/browser/cocoa/tab_window_controller.mm index b627214..c8e881c 100644 --- a/chrome/browser/cocoa/tab_window_controller.mm +++ b/chrome/browser/cocoa/tab_window_controller.mm @@ -125,6 +125,12 @@ return overlayWindow_; } +- (BOOL)shouldConstrainFrameRect { + // If we currently have an overlay window, do not attempt to change the + // window's size, as our overlay window doesn't know how to resize properly. + return overlayWindow_ == nil; +} + - (BOOL)canReceiveFrom:(TabWindowController*)source { // subclass must implement NOTIMPLEMENTED(); |