Index: chrome/browser/ui/views/toolbar/browser_actions_container.cc |
diff --git a/chrome/browser/ui/views/toolbar/browser_actions_container.cc b/chrome/browser/ui/views/toolbar/browser_actions_container.cc |
index 2b7c7059a6a7e020675aee3855a0bfd2fcd28eef..5ed94f3e2f00e37eb91ffd966dbf4b2c33d79a12 100644 |
--- a/chrome/browser/ui/views/toolbar/browser_actions_container.cc |
+++ b/chrome/browser/ui/views/toolbar/browser_actions_container.cc |
@@ -192,8 +192,10 @@ void BrowserActionsContainer::Init() { |
// We wait to set the container width until now so that the chevron images |
// will be loaded. The width calculation needs to know the chevron size. |
- if (model_ && model_->extensions_initialized()) |
- SetContainerWidth(); |
+ if (model_ && model_->extensions_initialized()) { |
+ container_width_ = GetPreferredWidth(); |
+ SetChevronVisibility(); |
+ } |
} |
BrowserActionView* BrowserActionsContainer::GetViewForExtension( |
@@ -640,6 +642,7 @@ void BrowserActionsContainer::AnimationEnded(const gfx::Animation* animation) { |
animation_target_size_ = 0; |
resize_amount_ = 0; |
suppress_chevron_ = false; |
+ SetChevronVisibility(); |
OnBrowserActionVisibilityChanged(); |
FOR_EACH_OBSERVER(BrowserActionsContainerObserver, |
@@ -803,17 +806,28 @@ void BrowserActionsContainer::ToolbarExtensionAdded(const Extension* extension, |
if (!model_->extensions_initialized()) |
return; |
- // Enlarge the container if it was already at maximum size and we're not in |
- // the middle of upgrading. |
- if ((model_->GetVisibleIconCount() < 0) && |
- !extensions::ExtensionSystem::Get(profile_)->runtime_data()-> |
+ // If this is just an upgrade, then don't worry about resizing. |
+ if (!extensions::ExtensionSystem::Get(profile_)->runtime_data()-> |
IsBeingUpgraded(extension)) { |
- suppress_chevron_ = true; |
- Animate(gfx::Tween::LINEAR, browser_action_views_.size()); |
- } else { |
- // Just redraw the (possibly modified) visible icon set. |
- OnBrowserActionVisibilityChanged(); |
+ // We need to resize if either: |
+ // - The container is set to display all icons (visible count = -1), or |
+ // - The container will need to expand to include the chevron. This can |
+ // happen when the container is set to display <n> icons, where <n> is |
+ // the number of icons before the new icon. With the new icon, the chevron |
+ // will need to be displayed. |
+ int model_icon_count = model_->GetVisibleIconCount(); |
+ if (model_icon_count == -1 || |
+ (static_cast<size_t>(model_icon_count) < browser_action_views_.size() && |
+ (chevron_ && !chevron_->visible()))) { |
+ suppress_chevron_ = true; |
+ Animate(gfx::Tween::LINEAR, GetIconCount()); |
+ return; |
+ } |
} |
+ |
+ // Otherwise, we don't have to resize, so just redraw the (possibly modified) |
+ // visible icon set. |
+ OnBrowserActionVisibilityChanged(); |
} |
void BrowserActionsContainer::ToolbarExtensionRemoved( |
@@ -902,9 +916,7 @@ bool BrowserActionsContainer::ShowExtensionActionPopup( |
} |
void BrowserActionsContainer::ToolbarVisibleCountChanged() { |
- int old_container_width = container_width_; |
- SetContainerWidth(); |
- if (old_container_width != container_width_) |
+ if (GetPreferredWidth() != container_width_) |
Animate(gfx::Tween::EASE_OUT, GetIconCount()); |
} |
@@ -916,7 +928,7 @@ void BrowserActionsContainer::ToolbarHighlightModeChanged( |
// the extra complexity to create and insert only the new extensions. |
DeleteBrowserActionViews(); |
CreateBrowserActionViews(); |
- Animate(gfx::Tween::LINEAR, browser_action_views_.size()); |
+ Animate(gfx::Tween::LINEAR, GetIconCount()); |
} |
Browser* BrowserActionsContainer::GetBrowser() { |
@@ -943,14 +955,16 @@ void BrowserActionsContainer::OnBrowserActionVisibilityChanged() { |
} |
} |
-void BrowserActionsContainer::SetContainerWidth() { |
- int visible_actions = GetIconCount(); |
- if (chevron_) { |
- chevron_->SetVisible( |
- static_cast<size_t>(visible_actions) < model_->toolbar_items().size()); |
- } |
- container_width_ = |
- IconCountToWidth(visible_actions, chevron_ && chevron_->visible()); |
+int BrowserActionsContainer::GetPreferredWidth() { |
+ size_t visible_actions = GetIconCount(); |
+ return IconCountToWidth( |
+ visible_actions, |
+ chevron_ && visible_actions < browser_action_views_.size()); |
+} |
+ |
+void BrowserActionsContainer::SetChevronVisibility() { |
+ if (chevron_) |
+ chevron_->SetVisible(GetIconCount() < browser_action_views_.size()); |
} |
void BrowserActionsContainer::CloseOverflowMenu() { |