Index: ui/message_center/views/message_view_context_menu_controller.cc |
diff --git a/ui/message_center/views/message_view_context_menu_controller.cc b/ui/message_center/views/message_view_context_menu_controller.cc |
index 270a4cb3c4815811479cc2a4d406a5c4ff60ceb5..c7a5fed758430b7a6b8bbd8533659192277116b5 100644 |
--- a/ui/message_center/views/message_view_context_menu_controller.cc |
+++ b/ui/message_center/views/message_view_context_menu_controller.cc |
@@ -7,6 +7,7 @@ |
#include "ui/base/models/menu_model.h" |
#include "ui/message_center/views/message_center_controller.h" |
#include "ui/message_center/views/message_view.h" |
+#include "ui/views/controls/menu/menu_model_adapter.h" |
#include "ui/views/controls/menu/menu_runner.h" |
#include "ui/views/widget/widget.h" |
@@ -26,20 +27,30 @@ void MessageViewContextMenuController::ShowContextMenuForView( |
ui::MenuSourceType source_type) { |
// Assumes that the target view has to be MessageView. |
MessageView* message_view = static_cast<MessageView*>(source); |
- std::unique_ptr<ui::MenuModel> menu_model(controller_->CreateMenuModel( |
- message_view->notifier_id(), message_view->display_source())); |
+ menu_model_ = controller_->CreateMenuModel(message_view->notifier_id(), |
+ message_view->display_source()); |
- if (!menu_model || menu_model->GetItemCount() == 0) |
+ if (!menu_model_ || menu_model_->GetItemCount() == 0) |
return; |
- views::MenuRunner menu_runner(menu_model.get(), |
- views::MenuRunner::HAS_MNEMONICS); |
+ menu_model_adapter_.reset(new views::MenuModelAdapter( |
+ menu_model_.get(), |
+ base::Bind(&MessageViewContextMenuController::OnMenuClosed, |
+ base::Unretained(this)))); |
- ignore_result(menu_runner.RunMenuAt(source->GetWidget()->GetTopLevelWidget(), |
- NULL, |
- gfx::Rect(point, gfx::Size()), |
- views::MENU_ANCHOR_TOPRIGHT, |
- source_type)); |
+ menu_runner_.reset(new views::MenuRunner( |
+ menu_model_adapter_->CreateMenu(), |
+ views::MenuRunner::HAS_MNEMONICS | views::MenuRunner::ASYNC)); |
+ |
+ menu_runner_->RunMenuAt(source->GetWidget()->GetTopLevelWidget(), NULL, |
+ gfx::Rect(point, gfx::Size()), |
+ views::MENU_ANCHOR_TOPRIGHT, source_type); |
+} |
+ |
+void MessageViewContextMenuController::OnMenuClosed() { |
+ menu_runner_.reset(); |
+ menu_model_adapter_.reset(); |
+ menu_model_.reset(); |
} |
} // namespace message_center |