Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(162)

Unified Diff: ui/message_center/views/message_view_context_menu_controller.cc

Issue 2277833003: Turn Message Center Menus Async (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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
« no previous file with comments | « ui/message_center/views/message_view_context_menu_controller.h ('k') | ui/message_center/views/notifier_settings_view.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698