diff options
author | rsesek@chromium.org <rsesek@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-02-18 20:59:16 +0000 |
---|---|---|
committer | rsesek@chromium.org <rsesek@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-02-18 20:59:16 +0000 |
commit | e888d1b13a4785adf3b5db897becd6a644a4e3ad (patch) | |
tree | 25b3de947b8be797f481d70cafa5ef175234fa6e /chrome/browser/ui/cocoa | |
parent | 5580fbe8f52193a367e5de5b1d7f798ad8880e74 (diff) | |
download | chromium_src-e888d1b13a4785adf3b5db897becd6a644a4e3ad.zip chromium_src-e888d1b13a4785adf3b5db897becd6a644a4e3ad.tar.gz chromium_src-e888d1b13a4785adf3b5db897becd6a644a4e3ad.tar.bz2 |
[Mac] Fix cut-off Browser chrome when opening Tabpose with an infobar showing.
BUG=73357
TEST=Get an infobar to show. Open Tab Overview/Tabpose. Everything looks correct.
Review URL: http://codereview.chromium.org/6543012
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@75429 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/ui/cocoa')
-rw-r--r-- | chrome/browser/ui/cocoa/browser_window_controller.h | 3 | ||||
-rw-r--r-- | chrome/browser/ui/cocoa/browser_window_controller.mm | 35 | ||||
-rw-r--r-- | chrome/browser/ui/cocoa/tabpose_window.mm | 16 |
3 files changed, 45 insertions, 9 deletions
diff --git a/chrome/browser/ui/cocoa/browser_window_controller.h b/chrome/browser/ui/cocoa/browser_window_controller.h index 0820217..597ed90 100644 --- a/chrome/browser/ui/cocoa/browser_window_controller.h +++ b/chrome/browser/ui/cocoa/browser_window_controller.h @@ -156,6 +156,9 @@ class TabContents; // Return a weak pointer to the tab strip controller. - (TabStripController*)tabStripController; +// Access the ObjC controller that contains the infobars. +- (InfoBarContainerController*)infoBarContainerController; + // Access the C++ bridge object representing the status bubble for the window. - (StatusBubbleMac*)statusBubble; diff --git a/chrome/browser/ui/cocoa/browser_window_controller.mm b/chrome/browser/ui/cocoa/browser_window_controller.mm index ce8697a..ef18ebb 100644 --- a/chrome/browser/ui/cocoa/browser_window_controller.mm +++ b/chrome/browser/ui/cocoa/browser_window_controller.mm @@ -424,6 +424,10 @@ return tabStripController_.get(); } +- (InfoBarContainerController*)infoBarContainerController { + return infoBarContainerController_.get(); +} + - (StatusBubbleMac*)statusBubble { return statusBubble_; } @@ -2039,6 +2043,11 @@ willAnimateFromState:(bookmarks::VisualState)oldState return [focused isKindOfClass:[AutocompleteTextFieldEditor class]]; } +- (void)tabposeWillClose:(NSNotification*)notif { + // Re-show the container after Tabpose closes. + [[infoBarContainerController_ view] setHidden:NO]; +} + - (void)openTabpose { NSUInteger modifierFlags = [[NSApp currentEvent] modifierFlags]; BOOL slomo = (modifierFlags & NSShiftKeyMask) != 0; @@ -2046,17 +2055,33 @@ willAnimateFromState:(bookmarks::VisualState)oldState // Cover info bars, inspector window, and detached bookmark bar on NTP. // Do not cover download shelf. NSRect activeArea = [[self tabContentArea] frame]; + // Take out the anti-spoof height so that Tabpose doesn't draw on top of the + // browser chrome. activeArea.size.height += - NSHeight([[infoBarContainerController_ view] frame]); + NSHeight([[infoBarContainerController_ view] frame]) - + [infoBarContainerController_ antiSpoofHeight]; if ([self isBookmarkBarVisible] && [self placeBookmarkBarBelowInfoBar]) { NSView* bookmarkBarView = [bookmarkBarController_ view]; activeArea.size.height += NSHeight([bookmarkBarView frame]); } - [TabposeWindow openTabposeFor:[self window] - rect:activeArea - slomo:slomo - tabStripModel:browser_->tabstrip_model()]; + // Hide the infobar container so that the anti-spoof bulge doesn't show when + // Tabpose is open. + [[infoBarContainerController_ view] setHidden:YES]; + + TabposeWindow* window = + [TabposeWindow openTabposeFor:[self window] + rect:activeArea + slomo:slomo + tabStripModel:browser_->tabstrip_model()]; + + // When the Tabpose window closes, the infobar container needs to be made + // visible again. + NSNotificationCenter* center = [NSNotificationCenter defaultCenter]; + [center addObserver:self + selector:@selector(tabposeWillClose:) + name:NSWindowWillCloseNotification + object:window]; } @end // @implementation BrowserWindowController(Fullscreen) diff --git a/chrome/browser/ui/cocoa/tabpose_window.mm b/chrome/browser/ui/cocoa/tabpose_window.mm index 22aa6ad..65556aa 100644 --- a/chrome/browser/ui/cocoa/tabpose_window.mm +++ b/chrome/browser/ui/cocoa/tabpose_window.mm @@ -24,6 +24,7 @@ #include "chrome/browser/tab_contents/thumbnail_generator.h" #import "chrome/browser/ui/cocoa/bookmarks/bookmark_bar_constants.h" #import "chrome/browser/ui/cocoa/browser_window_controller.h" +#import "chrome/browser/ui/cocoa/infobars/infobar_container_controller.h" #import "chrome/browser/ui/cocoa/tabs/tab_strip_controller.h" #import "chrome/browser/ui/cocoa/tabs/tab_strip_model_observer_bridge.h" #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" @@ -186,10 +187,17 @@ void ThumbnailLoader::LoadThumbnail() { int topOffset = 0; // Medium term, we want to show thumbs of the actual info bar views, which - // means I need to create InfoBarControllers here. At that point, we can get - // the height from that controller. Until then, hardcode. :-/ - const int kInfoBarHeight = 31; - topOffset += contents_->infobar_count() * kInfoBarHeight; + // means I need to create InfoBarControllers here. + NSWindow* window = [contents_->GetNativeView() window]; + NSWindowController* windowController = [window windowController]; + DCHECK(windowController); + if ([windowController isKindOfClass:[BrowserWindowController class]]) { + BrowserWindowController* bwc = + static_cast<BrowserWindowController*>(windowController); + InfoBarContainerController* infoBarContainer = + [bwc infoBarContainerController]; + topOffset += NSHeight([[infoBarContainer view] frame]); + } bool always_show_bookmark_bar = contents_->profile()->GetPrefs()->GetBoolean(prefs::kShowBookmarkBar); |