Chromium Code Reviews| 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 |