| Index: chrome/browser/cocoa/browser_window_controller.mm
|
| ===================================================================
|
| --- chrome/browser/cocoa/browser_window_controller.mm (revision 20925)
|
| +++ chrome/browser/cocoa/browser_window_controller.mm (working copy)
|
| @@ -24,6 +24,7 @@
|
| #import "chrome/browser/cocoa/find_bar_cocoa_controller.h"
|
| #include "chrome/browser/cocoa/find_bar_bridge.h"
|
| #import "chrome/browser/cocoa/fullscreen_window.h"
|
| +#import "chrome/browser/cocoa/infobar_container_controller.h"
|
| #import "chrome/browser/cocoa/status_bubble_mac.h"
|
| #import "chrome/browser/cocoa/tab_strip_model_observer_bridge.h"
|
| #import "chrome/browser/cocoa/tab_strip_view.h"
|
| @@ -64,6 +65,7 @@
|
|
|
| @interface BrowserWindowController(Private)
|
|
|
| +- (void)positionInfoBar;
|
| - (void)positionToolbar;
|
| - (void)removeToolbar;
|
| - (void)installIncognitoBadge;
|
| @@ -135,14 +137,6 @@
|
|
|
| [self setTheme];
|
|
|
| - // Register ourselves for frame changed notifications from the
|
| - // tabContentArea.
|
| - [[NSNotificationCenter defaultCenter]
|
| - addObserver:self
|
| - selector:@selector(tabContentAreaFrameChanged:)
|
| - name:nil
|
| - object:[self tabContentArea]];
|
| -
|
| // Get the most appropriate size for the window, then enforce the
|
| // minimum width and height. The window shim will handle flipping
|
| // the coordinates for us so we can use it to save some code.
|
| @@ -169,6 +163,14 @@
|
| // Puts the incognito badge on the window frame, if necessary.
|
| [self installIncognitoBadge];
|
|
|
| + // Create the infobar container view, so we can pass it to the
|
| + // ToolbarController, but do not position the view until after the
|
| + // toolbar is in place, as positionToolbar will move the tab content area.
|
| + infoBarContainerController_.reset(
|
| + [[InfoBarContainerController alloc]
|
| + initWithTabStripModel:(browser_->tabstrip_model())
|
| + browserWindowController:self]);
|
| +
|
| // Create a controller for the toolbar, giving it the toolbar model object
|
| // and the toolbar view from the nib. The controller will handle
|
| // registering for the appropriate command state changes from the back-end.
|
| @@ -177,10 +179,25 @@
|
| commands:browser->command_updater()
|
| profile:browser->profile()
|
| webContentView:[self tabContentArea]
|
| + infoBarsView:[infoBarContainerController_ view]
|
| bookmarkDelegate:self]);
|
| [self positionToolbar];
|
| [self fixWindowGradient];
|
|
|
| + // Put the infobar container view into the window above the
|
| + // tabcontentarea. There are no infobars when starting up, so its
|
| + // initial height is 0.
|
| + [self positionInfoBar];
|
| +
|
| + // Register ourselves for frame changed notifications from the
|
| + // tabContentArea. This has to come after all of the resizing and
|
| + // positioning above.
|
| + [[NSNotificationCenter defaultCenter]
|
| + addObserver:self
|
| + selector:@selector(tabContentAreaFrameChanged:)
|
| + name:nil
|
| + object:[self tabContentArea]];
|
| +
|
| // Create the bridge for the status bubble.
|
| statusBubble_.reset(new StatusBubbleMac([self window]));
|
|
|
| @@ -212,6 +229,8 @@
|
| // delegate so nothing tries to call us back in the meantime as part of
|
| // window destruction.
|
| [window_ setDelegate:nil];
|
| +
|
| + [[NSNotificationCenter defaultCenter] removeObserver:self];
|
| [super dealloc];
|
| }
|
|
|
| @@ -751,7 +770,6 @@
|
| // TabContents.
|
| #if 0
|
| // TODO(pinkerton):Update as more things become window-specific
|
| - infobar_container_->ChangeTabContents(new_contents);
|
| contents_container_->SetTabContents(new_contents);
|
| #endif
|
|
|
| @@ -778,6 +796,22 @@
|
| [self applyTheme];
|
| }
|
|
|
| +// TODO(rohitrao, jrg): Move this logic out of BrowserWindowController?
|
| +- (void)infoBarResized:(float)newHeight {
|
| + // The top edge of the infobar is fixed.
|
| + NSView* infoBarView = [infoBarContainerController_ view];
|
| + NSRect infoBarFrame = [infoBarView frame];
|
| + int maxY = NSMaxY(infoBarFrame);
|
| + int minY = maxY - newHeight;
|
| +
|
| + [infoBarView setFrame:NSMakeRect(infoBarFrame.origin.x, minY,
|
| + infoBarFrame.size.width, newHeight)];
|
| +
|
| + NSRect contentFrame = [[self tabContentArea] frame];
|
| + contentFrame.size.height = minY - contentFrame.origin.y;
|
| + [[self tabContentArea] setFrame:contentFrame];
|
| +}
|
| +
|
| - (GTMTheme *)gtm_themeForWindow:(NSWindow*)window {
|
| return theme_ ? theme_ : [GTMTheme defaultTheme];
|
| }
|
| @@ -786,6 +820,16 @@
|
|
|
| @implementation BrowserWindowController (Private)
|
|
|
| +// TODO(rohitrao, jrg): Move this logic out of BrowserWindowController?
|
| +- (void)positionInfoBar {
|
| + NSView* infoBarView = [infoBarContainerController_ view];
|
| + NSRect infoBarFrame = [[self tabContentArea] frame];
|
| + infoBarFrame.origin.y = NSMaxY(infoBarFrame);
|
| + infoBarFrame.size.height = 0;
|
| + [infoBarView setFrame:infoBarFrame];
|
| + [[[self window] contentView] addSubview:infoBarView];
|
| +}
|
| +
|
| // If |add| is YES:
|
| // Position |toolbarView_| below the tab strip, but not as a
|
| // sibling. The toolbar is part of the window's contentView, mainly
|
|
|