| Index: chrome/browser/ui/panels/panel.cc
|
| diff --git a/chrome/browser/ui/panels/panel.cc b/chrome/browser/ui/panels/panel.cc
|
| index d965f6fc8e536b71c142b8543667cd97a6f02f7b..0ffe31e3d4125dc7b0d74ceab9f3719ae3733fdd 100644
|
| --- a/chrome/browser/ui/panels/panel.cc
|
| +++ b/chrome/browser/ui/panels/panel.cc
|
| @@ -36,11 +36,11 @@ const Extension* Panel::GetExtensionFromBrowser(Browser* browser) {
|
| Panel::Panel(Browser* browser, const gfx::Rect& bounds)
|
| : min_size_(bounds.size()),
|
| max_size_(bounds.size()),
|
| + auto_resizable_(false),
|
| native_panel_(NULL),
|
| expansion_state_(EXPANDED),
|
| restored_height_(bounds.height()) {
|
| native_panel_ = CreateNativePanel(browser, this, bounds);
|
| - browser->tabstrip_model()->AddObserver(this);
|
| }
|
|
|
| Panel::~Panel() {
|
| @@ -48,7 +48,8 @@ Panel::~Panel() {
|
| }
|
|
|
| void Panel::OnNativePanelClosed() {
|
| - native_panel_->GetPanelBrowser()->tabstrip_model()->RemoveObserver(this);
|
| + if (auto_resizable_)
|
| + native_panel_->GetPanelBrowser()->tabstrip_model()->RemoveObserver(this);
|
| manager()->Remove(this);
|
| }
|
|
|
| @@ -77,11 +78,35 @@ void Panel::SetMaxSize(const gfx::Size& max_size) {
|
| return;
|
| max_size_ = max_size;
|
|
|
| - // Note: |render_view_host| might be NULL if the tab has not been created.
|
| - // If so, we will do it when TabInsertedAt() is invoked.
|
| - RenderViewHost* render_view_host = GetRenderViewHost();
|
| - if (render_view_host)
|
| - RequestRenderViewHostToDisableScrollbars(render_view_host);
|
| + if (auto_resizable_) {
|
| + // Note: |render_view_host| might be NULL if the tab has not been created.
|
| + // If so, we will do it when TabInsertedAt() is invoked.
|
| + RenderViewHost* render_view_host = GetRenderViewHost();
|
| + if (render_view_host)
|
| + RequestRenderViewHostToDisableScrollbars(render_view_host);
|
| + }
|
| +}
|
| +
|
| +void Panel::SetMinSize(const gfx::Size& min_size) {
|
| + if (min_size_ == min_size)
|
| + return;
|
| + min_size_ = min_size;
|
| +}
|
| +
|
| +void Panel::SetAutoResizable(bool resizable) {
|
| + if (auto_resizable_ == resizable)
|
| + return;
|
| +
|
| + auto_resizable_ = resizable;
|
| + if (auto_resizable_) {
|
| + browser()->tabstrip_model()->AddObserver(this);
|
| + TabContents* tab_contents = browser()->GetSelectedTabContents();
|
| + if (tab_contents)
|
| + EnableTabContentsAutoResize(tab_contents);
|
| + } else {
|
| + browser()->tabstrip_model()->RemoveObserver(this);
|
| + registrar_.RemoveAll();
|
| + }
|
| }
|
|
|
| void Panel::SetExpansionState(ExpansionState new_state) {
|
| @@ -527,8 +552,10 @@ void Panel::ShowKeyboardOverlay(gfx::NativeWindow owning_window) {
|
|
|
| void Panel::UpdatePreferredSize(TabContents* tab_contents,
|
| const gfx::Size& pref_size) {
|
| - return manager()->OnPreferredWindowSizeChanged(this,
|
| - native_panel_->WindowSizeFromContentSize(pref_size));
|
| + if (auto_resizable_) {
|
| + return manager()->OnPreferredWindowSizeChanged(this,
|
| + native_panel_->WindowSizeFromContentSize(pref_size));
|
| + }
|
| }
|
|
|
| void Panel::ShowAvatarBubble(TabContents* tab_contents, const gfx::Rect& rect) {
|
| @@ -544,9 +571,17 @@ void Panel::ShowAvatarBubbleFromAvatarButton() {
|
| void Panel::TabInsertedAt(TabContentsWrapper* contents,
|
| int index,
|
| bool foreground) {
|
| - DCHECK_EQ(0, index);
|
| - TabContents* tab_contents = contents->tab_contents();
|
| - EnableAutoResize(tab_contents->render_view_host());
|
| + if (auto_resizable_) {
|
| + DCHECK_EQ(0, index);
|
| + EnableTabContentsAutoResize(contents->tab_contents());
|
| + }
|
| +}
|
| +
|
| +void Panel::EnableTabContentsAutoResize(TabContents* tab_contents) {
|
| + DCHECK(tab_contents);
|
| + RenderViewHost* render_view_host = tab_contents->render_view_host();
|
| + if (render_view_host)
|
| + EnableRendererAutoResize(render_view_host);
|
|
|
| // We also need to know when the render view host changes in order
|
| // to turn on preferred size changed notifications in the new
|
| @@ -561,11 +596,13 @@ void Panel::TabInsertedAt(TabContentsWrapper* contents,
|
| void Panel::Observe(int type,
|
| const content::NotificationSource& source,
|
| const content::NotificationDetails& details) {
|
| - DCHECK_EQ(type, content::NOTIFICATION_TAB_CONTENTS_SWAPPED);
|
| - RenderViewHost* render_view_host =
|
| - content::Source<TabContents>(source).ptr()->render_view_host();
|
| - if (render_view_host)
|
| - EnableAutoResize(render_view_host);
|
| + if (auto_resizable_) {
|
| + DCHECK_EQ(type, content::NOTIFICATION_TAB_CONTENTS_SWAPPED);
|
| + RenderViewHost* render_view_host =
|
| + content::Source<TabContents>(source).ptr()->render_view_host();
|
| + if (render_view_host)
|
| + EnableRendererAutoResize(render_view_host);
|
| + }
|
| }
|
|
|
| RenderViewHost* Panel::GetRenderViewHost() const {
|
| @@ -575,7 +612,8 @@ RenderViewHost* Panel::GetRenderViewHost() const {
|
| return tab_contents->render_view_host();
|
| }
|
|
|
| -void Panel::EnableAutoResize(RenderViewHost* render_view_host) {
|
| +void Panel::EnableRendererAutoResize(RenderViewHost* render_view_host) {
|
| + DCHECK(auto_resizable_);
|
| DCHECK(render_view_host);
|
| render_view_host->EnablePreferredSizeMode();
|
| RequestRenderViewHostToDisableScrollbars(render_view_host);
|
| @@ -583,15 +621,18 @@ void Panel::EnableAutoResize(RenderViewHost* render_view_host) {
|
|
|
| void Panel::RequestRenderViewHostToDisableScrollbars(
|
| RenderViewHost* render_view_host) {
|
| + DCHECK(auto_resizable_);
|
| DCHECK(render_view_host);
|
| render_view_host->DisableScrollbarsForThreshold(
|
| native_panel_->ContentSizeFromWindowSize(max_size_));
|
| }
|
|
|
| void Panel::OnWindowSizeAvailable() {
|
| - RenderViewHost* render_view_host = GetRenderViewHost();
|
| - if (render_view_host)
|
| - RequestRenderViewHostToDisableScrollbars(render_view_host);
|
| + if (auto_resizable_) {
|
| + RenderViewHost* render_view_host = GetRenderViewHost();
|
| + if (render_view_host)
|
| + RequestRenderViewHostToDisableScrollbars(render_view_host);
|
| + }
|
| }
|
|
|
| Browser* Panel::browser() const {
|
|
|