Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(832)

Unified Diff: chrome/browser/ui/panels/docked_panel_strip.cc

Issue 9547007: Fix handling of minimized panel count (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 8 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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(

Powered by Google App Engine
This is Rietveld 408576698