Index: ui/views/controls/menu/menu_runner_impl_cocoa.mm |
diff --git a/ui/views/controls/menu/menu_runner_impl_cocoa.mm b/ui/views/controls/menu/menu_runner_impl_cocoa.mm |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c978c7f5fd60987690067344c2d78ae3e205ea21 |
--- /dev/null |
+++ b/ui/views/controls/menu/menu_runner_impl_cocoa.mm |
@@ -0,0 +1,60 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "ui/views/controls/menu/menu_runner_impl_cocoa.h" |
tapted
2014/06/25 08:30:28
nit: import
Andre
2014/06/27 01:18:08
Done.
|
+ |
+#include "ui/base/cocoa/menu_controller.h" |
tapted
2014/06/25 08:30:28
nit: import
Andre
2014/06/27 01:18:08
Done.
|
+#include "ui/events/event_utils.h" |
+#include "ui/gfx/geometry/rect.h" |
+ |
+namespace views { |
+ |
+internal::MenuRunnerImplInterface* MenuRunner::CreateNativeImpl() { |
+ DCHECK(menu_model_); |
+ return new internal::MenuRunnerImplCocoa(menu_model_); |
+} |
+ |
+namespace internal { |
+ |
+MenuRunnerImplCocoa::MenuRunnerImplCocoa(ui::MenuModel* menu) |
+ : closing_event_time_(base::TimeDelta()) { |
+ menu_controller_.reset( |
+ [[MenuController alloc] initWithModel:menu useWithPopUpButtonCell:NO]); |
+} |
+ |
+bool MenuRunnerImplCocoa::running() const { |
+ return [menu_controller_ isMenuOpen]; |
+} |
+ |
+void MenuRunnerImplCocoa::Release() { |
+} |
+ |
+MenuRunner::RunResult MenuRunnerImplCocoa::RunMenuAt(Widget* parent, |
+ MenuButton* button, |
+ const gfx::Rect& bounds, |
+ MenuAnchorPosition anchor, |
+ int32 types) { |
+ DCHECK(types & MenuRunner::CONTEXT_MENU); |
+ DCHECK(!running()); |
+ closing_event_time_ = base::TimeDelta(); |
+ [NSMenu popUpContextMenu:[menu_controller_ menu] |
+ withEvent:[NSApp currentEvent] |
+ forView:nil]; |
+ closing_event_time_ = ui::EventTimeForNow(); |
+ return MenuRunner::NORMAL_EXIT; |
+} |
+ |
+void MenuRunnerImplCocoa::Cancel() { |
+ [menu_controller_ cancel]; |
+} |
+ |
+base::TimeDelta MenuRunnerImplCocoa::closing_event_time() const { |
+ return closing_event_time_; |
+} |
+ |
+MenuRunnerImplCocoa::~MenuRunnerImplCocoa() { |
+} |
+ |
+} // namespace internal |
+} // namespace views |