Chromium Code Reviews| 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( |