Index: chrome/browser/ui/panels/docked_panel_strip.cc |
diff --git a/chrome/browser/ui/panels/docked_panel_strip.cc b/chrome/browser/ui/panels/docked_panel_strip.cc |
index 57a4bee3e475b948b5a596f5f03c7b7d04b30bc8..ce073f3f6fcfed0667a67cf9f07604f34ad73a2f 100644 |
--- a/chrome/browser/ui/panels/docked_panel_strip.cc |
+++ b/chrome/browser/ui/panels/docked_panel_strip.cc |
@@ -112,7 +112,6 @@ void DockedPanelStrip::AddPanel(Panel* panel) { |
expansion_state_to_restore = Panel::MINIMIZED; |
height = Panel::kMinimizedPanelHeight; |
} |
- IncrementMinimizedPanels(); |
} |
int y = |
GetBottomPositionForExpansionState(expansion_state_to_restore) - height; |
@@ -173,6 +172,8 @@ void DockedPanelStrip::AddPanel(Panel* panel) { |
panels_in_temporary_layout_.insert(panel); |
else |
panels_.push_back(panel); |
+ |
+ UpdateMinimizedPanelCount(); |
} |
int DockedPanelStrip::GetMaxPanelWidth() const { |
@@ -196,9 +197,6 @@ void DockedPanelStrip::RemovePanel(Panel* panel) { |
DCHECK_EQ(this, panel->panel_strip()); |
panel->set_panel_strip(NULL); |
- if (panel->expansion_state() != Panel::EXPANDED) |
- DecrementMinimizedPanels(); |
- |
if (panel->has_temporary_layout()) { |
panels_in_temporary_layout_.erase(panel); |
return; |
@@ -229,6 +227,10 @@ void DockedPanelStrip::RemovePanel(Panel* panel) { |
dragging_panel_original_iterator_ = iter; |
RefreshLayout(); |
} |
+ |
+ if (panel->expansion_state() != Panel::EXPANDED) |
+ UpdateMinimizedPanelCount(); |
+ |
} |
bool DockedPanelStrip::CanShowPanelAsActive(const Panel* panel) const { |
@@ -364,26 +366,20 @@ void DockedPanelStrip::EndDraggingPanel(Panel* panel, bool cancelled) { |
void DockedPanelStrip::OnPanelExpansionStateChanged(Panel* panel) { |
gfx::Size size = panel->restored_size(); |
Panel::ExpansionState expansion_state = panel->expansion_state(); |
- Panel::ExpansionState old_state = panel->old_expansion_state(); |
switch (expansion_state) { |
case Panel::EXPANDED: |
- if (old_state == Panel::TITLE_ONLY || old_state == Panel::MINIMIZED) |
- DecrementMinimizedPanels(); |
break; |
case Panel::TITLE_ONLY: |
size.set_height(panel->TitleOnlyHeight()); |
- if (old_state == Panel::EXPANDED) |
- IncrementMinimizedPanels(); |
break; |
case Panel::MINIMIZED: |
size.set_height(Panel::kMinimizedPanelHeight); |
- if (old_state == Panel::EXPANDED) |
- IncrementMinimizedPanels(); |
break; |
default: |
NOTREACHED(); |
break; |
} |
+ UpdateMinimizedPanelCount(); |
int bottom = GetBottomPositionForExpansionState(expansion_state); |
gfx::Rect bounds = panel->GetBounds(); |
@@ -434,18 +430,21 @@ bool DockedPanelStrip::IsPanelMinimized(const Panel* panel) const { |
return panel->expansion_state() != Panel::EXPANDED; |
} |
-void DockedPanelStrip::IncrementMinimizedPanels() { |
- minimized_panel_count_++; |
- if (minimized_panel_count_ == 1) |
- panel_manager_->mouse_watcher()->AddObserver(this); |
- DCHECK_LE(minimized_panel_count_, num_panels()); |
-} |
+void DockedPanelStrip::UpdateMinimizedPanelCount() { |
jennb
2012/03/12 18:26:27
Way more efficient to incr/decr a count than re-co
|
+ int prev_minimized_panel_count = minimized_panel_count_; |
+ minimized_panel_count_ = 0; |
+ for (Panels::const_iterator i_panel = panels_.begin(); |
jianli
2012/03/12 18:08:56
nit: normally we use iter or panel_iter.
|
+ i_panel != panels_.end(); ++i_panel) { |
+ if ((*i_panel)->expansion_state() != Panel::EXPANDED) |
+ minimized_panel_count_++; |
+ } |
-void DockedPanelStrip::DecrementMinimizedPanels() { |
- minimized_panel_count_--; |
- DCHECK_GE(minimized_panel_count_, 0); |
- if (minimized_panel_count_ == 0) |
+ if (prev_minimized_panel_count == 0 && minimized_panel_count_ > 0) |
+ panel_manager_->mouse_watcher()->AddObserver(this); |
+ if (prev_minimized_panel_count > 0 && minimized_panel_count_ == 0) |
panel_manager_->mouse_watcher()->RemoveObserver(this); |
+ |
+ DCHECK_LE(minimized_panel_count_, num_panels()); |
} |
void DockedPanelStrip::ResizePanelWindow( |