Index: chrome/browser/ui/views/extensions/browser_action_overflow_menu_controller.cc |
diff --git a/chrome/browser/ui/views/extensions/browser_action_overflow_menu_controller.cc b/chrome/browser/ui/views/extensions/browser_action_overflow_menu_controller.cc |
index 621886d4896a9759795c57437074db42a7e5260e..b1472cf6563ac6f23a2320e80a63f09e1f39ac64 100644 |
--- a/chrome/browser/ui/views/extensions/browser_action_overflow_menu_controller.cc |
+++ b/chrome/browser/ui/views/extensions/browser_action_overflow_menu_controller.cc |
@@ -15,6 +15,7 @@ |
#include "ui/gfx/canvas_skia.h" |
#include "views/controls/menu/menu_item_view.h" |
#include "views/controls/menu/menu_model_adapter.h" |
+#include "views/controls/menu/menu_runner.h" |
#include "views/controls/menu/submenu_view.h" |
#include "views/widget/widget.h" |
@@ -26,10 +27,12 @@ BrowserActionOverflowMenuController::BrowserActionOverflowMenuController( |
: owner_(owner), |
observer_(NULL), |
menu_button_(menu_button), |
+ menu_(NULL), |
views_(&views), |
start_index_(start_index), |
for_drop_(false) { |
- menu_.reset(new views::MenuItemView(this)); |
+ menu_ = new views::MenuItemView(this); |
+ menu_runner_.reset(new views::MenuRunner(menu_)); |
menu_->set_has_icons(true); |
size_t command_id = 1; // Menu id 0 is reserved, start with 1. |
@@ -67,10 +70,10 @@ bool BrowserActionOverflowMenuController::RunMenu(views::Widget* window, |
bounds.set_y(screen_loc.y()); |
views::MenuItemView::AnchorPosition anchor = views::MenuItemView::TOPRIGHT; |
- if (for_drop) { |
- menu_->RunMenuForDropAt(window, bounds, anchor); |
- } else { |
- menu_->RunMenuAt(window, menu_button_, bounds, anchor, false); |
+ // As we maintain our own lifetime we can safely ignore the result. |
+ ignore_result(menu_runner_->RunMenuAt(window, menu_button_, bounds, anchor, |
+ for_drop_ ? views::MenuRunner::FOR_DROP : 0)); |
+ if (!for_drop_) { |
// Give the context menu (if any) a chance to execute the user-selected |
// command. |
MessageLoop::current()->DeleteSoon(FROM_HERE, this); |
@@ -102,12 +105,14 @@ bool BrowserActionOverflowMenuController::ShowContextMenu( |
new ExtensionContextMenuModel(extension, owner_->browser(), owner_); |
views::MenuModelAdapter context_menu_model_adapter( |
context_menu_contents.get()); |
- views::MenuItemView context_menu(&context_menu_model_adapter); |
- context_menu_model_adapter.BuildMenu(&context_menu); |
+ views::MenuRunner context_menu_runner( |
+ context_menu_model_adapter.CreateMenu()); |
+ // We can ignore the result as we delete ourself. |
// This blocks until the user choses something or dismisses the menu. |
- context_menu.RunMenuAt(menu_button_->GetWidget(), |
- NULL, gfx::Rect(p, gfx::Size()), views::MenuItemView::TOPLEFT, true); |
+ ignore_result(context_menu_runner.RunMenuAt(menu_button_->GetWidget(), |
+ NULL, gfx::Rect(p, gfx::Size()), views::MenuItemView::TOPLEFT, |
+ views::MenuRunner::HAS_MNEMONICS | views::MenuRunner::IS_NESTED)); |
// The user is done with the context menu, so we can close the underlying |
// menu. |