Index: ui/views/controls/menu/menu_item_view.cc |
diff --git a/ui/views/controls/menu/menu_item_view.cc b/ui/views/controls/menu/menu_item_view.cc |
index 97f8a8f2b66dcaab2c0ef964acb9f5392856878b..be8b87d6a3f151177ef7a9fa4598d3e269362789 100644 |
--- a/ui/views/controls/menu/menu_item_view.cc |
+++ b/ui/views/controls/menu/menu_item_view.cc |
@@ -237,7 +237,7 @@ MenuItemView* MenuItemView::AddMenuItemAt( |
DCHECK_NE(type, EMPTY); |
DCHECK_LE(0, index); |
if (!submenu_) |
- CreateSubmenu(); |
+ submenu_ = CreateSubmenu(); |
DCHECK_GE(submenu_->child_count(), index); |
if (type == SEPARATOR) { |
submenu_->AddChildViewAt(new MenuSeparator(this, separator_style), index); |
@@ -252,8 +252,8 @@ MenuItemView* MenuItemView::AddMenuItemAt( |
item->SetMinorText(minor_text); |
if (!icon.isNull()) |
item->SetIcon(icon); |
- if (type == SUBMENU) |
- item->CreateSubmenu(); |
+ if (type == SUBMENU && !item->HasSubmenu()) |
+ item->submenu_ = CreateSubmenu(); |
if (GetDelegate() && !GetDelegate()->IsCommandVisible(item_id)) |
item->SetVisible(false); |
submenu_->AddChildViewAt(item, index); |
@@ -331,9 +331,7 @@ MenuItemView* MenuItemView::AppendMenuItemImpl( |
} |
SubmenuView* MenuItemView::CreateSubmenu() { |
- if (!submenu_) |
- submenu_ = new SubmenuView(this); |
- return submenu_; |
+ return new SubmenuView(this); |
} |
bool MenuItemView::HasSubmenu() const { |
@@ -666,7 +664,8 @@ void MenuItemView::PrepareForRun(bool is_first_menu, |
DCHECK(!parent_menu_item_); |
// Force us to have a submenu. |
- CreateSubmenu(); |
+ if (!submenu_) |
+ submenu_ = CreateSubmenu(); |
actual_menu_position_ = requested_menu_position_; |
canceled_ = false; |