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

Side by Side Diff: ui/views/controls/menu/menu_runner_impl_cocoa.mm

Issue 331993009: MacViews: Run native Cocoa context menus to support Services. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase. Fixes for sky. Created 6 years, 5 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 | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #import "ui/views/controls/menu/menu_runner_impl_cocoa.h"
6
7 #import "ui/base/cocoa/menu_controller.h"
8 #include "ui/events/event_utils.h"
9 #include "ui/gfx/geometry/rect.h"
10 #include "ui/views/controls/menu/menu_runner_impl_adapter.h"
11
12 namespace views {
13 namespace internal {
14
15 // static
16 MenuRunnerImplInterface* MenuRunnerImplInterface::Create(
17 ui::MenuModel* menu_model,
18 int32 run_types) {
19 if ((run_types & MenuRunner::CONTEXT_MENU) != 0 &&
20 (run_types & MenuRunner::IS_NESTED) == 0) {
21 return new MenuRunnerImplCocoa(menu_model);
22 }
23
24 return new MenuRunnerImplAdapter(menu_model);
25 }
26
27 MenuItemView* MenuRunnerImplCocoa::GetMenu() const {
28 return NULL;
29 }
30
31 MenuRunnerImplCocoa::MenuRunnerImplCocoa(ui::MenuModel* menu)
32 : delete_after_run_(false), closing_event_time_(base::TimeDelta()) {
33 menu_controller_.reset(
34 [[MenuController alloc] initWithModel:menu useWithPopUpButtonCell:NO]);
35 }
36
37 bool MenuRunnerImplCocoa::IsRunning() const {
38 return [menu_controller_ isMenuOpen];
39 }
40
41 void MenuRunnerImplCocoa::Release() {
42 if (IsRunning()) {
43 if (delete_after_run_)
44 return; // We already canceled.
45
46 delete_after_run_ = true;
47 [menu_controller_ cancel];
48 } else {
49 delete this;
50 }
51 }
52
53 MenuRunner::RunResult MenuRunnerImplCocoa::RunMenuAt(Widget* parent,
54 MenuButton* button,
55 const gfx::Rect& bounds,
56 MenuAnchorPosition anchor,
57 int32 run_types) {
58 DCHECK(run_types & MenuRunner::CONTEXT_MENU);
59 DCHECK(!IsRunning());
60 closing_event_time_ = base::TimeDelta();
61 [NSMenu popUpContextMenu:[menu_controller_ menu]
62 withEvent:[NSApp currentEvent]
63 forView:nil];
64 closing_event_time_ = ui::EventTimeForNow();
65
66 if (delete_after_run_) {
67 delete this;
68 return MenuRunner::MENU_DELETED;
69 }
70
71 return MenuRunner::NORMAL_EXIT;
72 }
73
74 void MenuRunnerImplCocoa::Cancel() {
75 [menu_controller_ cancel];
76 }
77
78 base::TimeDelta MenuRunnerImplCocoa::GetClosingEventTime() const {
79 return closing_event_time_;
80 }
81
82 MenuRunnerImplCocoa::~MenuRunnerImplCocoa() {
83 }
84
85 } // namespace internal
86 } // namespace views
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698