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

Side by Side 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, 3 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/message_center/views/message_view_context_menu_controller.h" 5 #include "ui/message_center/views/message_view_context_menu_controller.h"
6 6
7 #include "ui/base/models/menu_model.h" 7 #include "ui/base/models/menu_model.h"
8 #include "ui/message_center/views/message_center_controller.h" 8 #include "ui/message_center/views/message_center_controller.h"
9 #include "ui/message_center/views/message_view.h" 9 #include "ui/message_center/views/message_view.h"
10 #include "ui/views/controls/menu/menu_model_adapter.h"
10 #include "ui/views/controls/menu/menu_runner.h" 11 #include "ui/views/controls/menu/menu_runner.h"
11 #include "ui/views/widget/widget.h" 12 #include "ui/views/widget/widget.h"
12 13
13 namespace message_center { 14 namespace message_center {
14 15
15 MessageViewContextMenuController::MessageViewContextMenuController( 16 MessageViewContextMenuController::MessageViewContextMenuController(
16 MessageCenterController* controller) 17 MessageCenterController* controller)
17 : controller_(controller) { 18 : controller_(controller) {
18 } 19 }
19 20
20 MessageViewContextMenuController::~MessageViewContextMenuController() { 21 MessageViewContextMenuController::~MessageViewContextMenuController() {
21 } 22 }
22 23
23 void MessageViewContextMenuController::ShowContextMenuForView( 24 void MessageViewContextMenuController::ShowContextMenuForView(
24 views::View* source, 25 views::View* source,
25 const gfx::Point& point, 26 const gfx::Point& point,
26 ui::MenuSourceType source_type) { 27 ui::MenuSourceType source_type) {
27 // Assumes that the target view has to be MessageView. 28 // Assumes that the target view has to be MessageView.
28 MessageView* message_view = static_cast<MessageView*>(source); 29 MessageView* message_view = static_cast<MessageView*>(source);
29 std::unique_ptr<ui::MenuModel> menu_model(controller_->CreateMenuModel( 30 menu_model_ = controller_->CreateMenuModel(message_view->notifier_id(),
30 message_view->notifier_id(), message_view->display_source())); 31 message_view->display_source());
31 32
32 if (!menu_model || menu_model->GetItemCount() == 0) 33 if (!menu_model_ || menu_model_->GetItemCount() == 0)
33 return; 34 return;
34 35
35 views::MenuRunner menu_runner(menu_model.get(), 36 menu_model_adapter_.reset(new views::MenuModelAdapter(
36 views::MenuRunner::HAS_MNEMONICS); 37 menu_model_.get(),
38 base::Bind(&MessageViewContextMenuController::OnMenuClosed,
39 base::Unretained(this))));
37 40
38 ignore_result(menu_runner.RunMenuAt(source->GetWidget()->GetTopLevelWidget(), 41 menu_runner_.reset(new views::MenuRunner(
39 NULL, 42 menu_model_adapter_->CreateMenu(),
40 gfx::Rect(point, gfx::Size()), 43 views::MenuRunner::HAS_MNEMONICS | views::MenuRunner::ASYNC));
41 views::MENU_ANCHOR_TOPRIGHT, 44
42 source_type)); 45 menu_runner_->RunMenuAt(source->GetWidget()->GetTopLevelWidget(), NULL,
46 gfx::Rect(point, gfx::Size()),
47 views::MENU_ANCHOR_TOPRIGHT, source_type);
48 }
49
50 void MessageViewContextMenuController::OnMenuClosed() {
51 menu_runner_.reset();
52 menu_model_adapter_.reset();
53 menu_model_.reset();
43 } 54 }
44 55
45 } // namespace message_center 56 } // namespace message_center
OLDNEW
« 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