Index: chrome/browser/ui/views/toolbar/wrench_menu.cc |
diff --git a/chrome/browser/ui/views/toolbar/wrench_menu.cc b/chrome/browser/ui/views/toolbar/wrench_menu.cc |
index 7c10f2940f88f8b16c6a588c122dc9d1e2978b47..c196e7129f9c5cd1801efbb72775dc4b779d3820 100644 |
--- a/chrome/browser/ui/views/toolbar/wrench_menu.cc |
+++ b/chrome/browser/ui/views/toolbar/wrench_menu.cc |
@@ -1062,6 +1062,13 @@ bool WrenchMenu::GetAccelerator(int command_id, |
} |
void WrenchMenu::WillShowMenu(MenuItemView* menu) { |
+ // If we're showing the root menu, we need to initialize the extension |
+ // overflow container, because it needs to know the width of other |
+ // children in the menu before it can size itself. |
+ // Ideally, we'd do this earlier, but other menu sizes aren't fully set until |
+ // after the menu is told to run. |
+ if (menu == root_ && extension_overflow_.get()) |
+ extension_overflow_->Init(root_); |
if (menu == bookmark_menu_) |
CreateBookmarkMenu(); |
} |
@@ -1135,12 +1142,14 @@ void WrenchMenu::PopulateMenu(MenuItemView* parent, |
switch (model->GetCommandIdAt(i)) { |
case IDC_EXTENSIONS_OVERFLOW_MENU: { |
- scoped_ptr<ExtensionToolbarMenuView> extension_toolbar( |
- new ExtensionToolbarMenuView(browser_, this)); |
- if (extension_toolbar->GetPreferredSize().height() > 0) |
- item->AddChildView(extension_toolbar.release()); |
- else |
+ extension_overflow_.reset(new ExtensionToolbarMenuView(browser_, this)); |
+ if (extension_overflow_->GetPreferredSize().height() > 0) { |
+ extension_overflow_->set_owned_by_client(); |
+ item->AddChildView(extension_overflow_.get()); |
+ } else { |
+ extension_overflow_.reset(); |
item->SetVisible(false); |
+ } |
break; |
} |