Chromium Code Reviews| 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..037e583bc914c9183fe85764109b12e7568bbfff 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_) { |
|
jianli
2011/11/18 23:03:32
Is this needed now? SetMaxSize seems to be always
jennb
2011/11/18 23:26:00
I'm going to leave this rather than assume the max
|
| + // 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) |
| + SetUpAutoResize(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); |
| + SetUpAutoResize(contents->tab_contents()); |
| + } |
| +} |
| + |
| +void Panel::SetUpAutoResize(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 |
| @@ -558,14 +593,17 @@ void Panel::TabInsertedAt(TabContentsWrapper* contents, |
| content::Source<TabContents>(tab_contents)); |
| } |
|
jennb
2011/11/18 22:31:05
Oops. Will delete this extra line.
|
| + |
| 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 +613,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 +622,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 { |