| Index: chrome/browser/ui/views/frame/browser_view.cc
|
| diff --git a/chrome/browser/ui/views/frame/browser_view.cc b/chrome/browser/ui/views/frame/browser_view.cc
|
| index 4d87666f877f8f5c0d24805eee55d131636917b0..f20c72d0af4aa323d2e9285425955fc9705d26fd 100644
|
| --- a/chrome/browser/ui/views/frame/browser_view.cc
|
| +++ b/chrome/browser/ui/views/frame/browser_view.cc
|
| @@ -61,6 +61,7 @@
|
| #include "chrome/browser/ui/views/download/download_in_progress_dialog_view.h"
|
| #include "chrome/browser/ui/views/download/download_shelf_view.h"
|
| #include "chrome/browser/ui/views/frame/browser_view_layout.h"
|
| +#include "chrome/browser/ui/views/frame/browser_view_layout_delegate.h"
|
| #include "chrome/browser/ui/views/frame/contents_container.h"
|
| #include "chrome/browser/ui/views/frame/immersive_mode_controller.h"
|
| #include "chrome/browser/ui/views/frame/instant_overlay_controller_views.h"
|
| @@ -254,6 +255,48 @@ bool UseImmersiveFullscreenForUrl(const GURL& url) {
|
| } // namespace
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
| +
|
| +// Delegate implementation for BrowserViewLayout. Usually just forwards calls
|
| +// into BrowserView.
|
| +class BrowserViewLayoutDelegateImpl : public BrowserViewLayoutDelegate {
|
| + public:
|
| + explicit BrowserViewLayoutDelegateImpl(BrowserView* browser_view)
|
| + : browser_view_(browser_view) {}
|
| + virtual ~BrowserViewLayoutDelegateImpl() {}
|
| +
|
| + // BrowserViewLayoutDelegate overrides:
|
| + virtual bool DownloadShelfNeedsLayout() const OVERRIDE {
|
| + DownloadShelfView* download_shelf = browser_view_->download_shelf_.get();
|
| + // Re-layout the shelf either if it is visible or if its close animation
|
| + // is currently running.
|
| + return download_shelf &&
|
| + (download_shelf->IsShowing() || download_shelf->IsClosing());
|
| + }
|
| +
|
| + virtual bool IsTabStripVisible() const OVERRIDE {
|
| + return browser_view_->IsTabStripVisible();
|
| + }
|
| +
|
| + virtual gfx::Rect GetBoundsForTabStrip(
|
| + views::View* tab_strip) const OVERRIDE {
|
| + return browser_view_->frame()->GetBoundsForTabStrip(tab_strip);
|
| + }
|
| +
|
| + virtual bool IsToolbarVisible() const OVERRIDE {
|
| + return browser_view_->IsToolbarVisible();
|
| + }
|
| +
|
| + virtual bool IsBookmarkBarVisible() const OVERRIDE {
|
| + return browser_view_->IsBookmarkBarVisible();
|
| + }
|
| +
|
| + private:
|
| + BrowserView* browser_view_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(BrowserViewLayoutDelegateImpl);
|
| +};
|
| +
|
| +///////////////////////////////////////////////////////////////////////////////
|
| // BookmarkExtensionBackground, private:
|
| // This object serves as the views::Background object which is used to layout
|
| // and paint the bookmark bar.
|
| @@ -442,15 +485,17 @@ BrowserView::~BrowserView() {
|
| // download views from the set of download observers (since the observed
|
| // downloads can be destroyed along with |browser_| and the observer
|
| // notifications will call back into deleted objects).
|
| - download_shelf_.reset();
|
| BrowserViewLayout* browser_view_layout = GetBrowserViewLayout();
|
| if (browser_view_layout)
|
| browser_view_layout->set_download_shelf(NULL);
|
| + download_shelf_.reset();
|
|
|
| // The TabStrip attaches a listener to the model. Make sure we shut down the
|
| // TabStrip first so that it can cleanly remove the listener.
|
| if (tabstrip_) {
|
| tabstrip_->parent()->RemoveChildView(tabstrip_);
|
| + if (browser_view_layout)
|
| + browser_view_layout->set_tab_strip(NULL);
|
| delete tabstrip_;
|
| tabstrip_ = NULL;
|
| }
|
| @@ -897,6 +942,7 @@ void BrowserView::SetWindowSwitcherButton(views::Button* button) {
|
| if (window_switcher_button_)
|
| RemoveChildView(window_switcher_button_);
|
| window_switcher_button_ = button;
|
| + GetBrowserViewLayout()->set_window_switcher_button(button);
|
| AddChildView(button);
|
| }
|
|
|
| @@ -1817,6 +1863,9 @@ void BrowserView::Layout() {
|
|
|
| views::View::Layout();
|
|
|
| + // TODO(jamescook): Why was this in the middle of layout code?
|
| + toolbar_->location_bar()->SetLocationEntryFocusable(IsToolbarVisible());
|
| +
|
| // The status bubble position requires that all other layout finish first.
|
| LayoutStatusBubble();
|
| }
|
| @@ -1876,9 +1925,6 @@ bool BrowserView::AcceleratorPressed(const ui::Accelerator& accelerator) {
|
| return chrome::ExecuteCommand(browser_.get(), command_id);
|
| }
|
|
|
| -///////////////////////////////////////////////////////////////////////////////
|
| -// BrowserView, private
|
| -
|
| SkColor BrowserView::GetInfoBarSeparatorColor() const {
|
| // NOTE: Keep this in sync with ToolbarView::OnPaint()!
|
| return (IsTabStripVisible() || !frame_->ShouldUseNativeFrame()) ?
|
| @@ -1995,12 +2041,17 @@ void BrowserView::InitViews() {
|
| new InstantOverlayControllerViews(browser(), overlay_container_));
|
|
|
| BrowserViewLayout* browser_view_layout = new BrowserViewLayout;
|
| - browser_view_layout->Init(browser(),
|
| + browser_view_layout->Init(new BrowserViewLayoutDelegateImpl(this),
|
| + browser(),
|
| this,
|
| + top_container_,
|
| + tabstrip_,
|
| + toolbar_,
|
| infobar_container_,
|
| contents_split_,
|
| contents_container_,
|
| - overlay_container_);
|
| + overlay_container_,
|
| + immersive_mode_controller_.get());
|
| SetLayoutManager(browser_view_layout);
|
|
|
| #if defined(OS_WIN) && !defined(USE_AURA)
|
|
|