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 { |