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 #ifndef UI_VIEWS_CONTROLS_MENU_MENU_RUNNER_IMPL_COCOA_H_ 6 #define UI_VIEWS_CONTROLS_MENU_MENU_RUNNER_IMPL_COCOA_H_ 7 8 #include "ui/views/controls/menu/menu_runner_impl_interface.h" 9 10 #import "base/mac/scoped_nsobject.h" 11 #include "base/time/time.h" 12 13 @class MenuController; 14 15 namespace views { 16 namespace internal { 17 18 // A menu runner implementation that uses NSMenu to show a context menu. 19 class VIEWS_EXPORT MenuRunnerImplCocoa : public MenuRunnerImplInterface { 20 public: 21 explicit MenuRunnerImplCocoa(ui::MenuModel* menu); 22 23 virtual bool IsRunning() const OVERRIDE; 24 virtual void Release() OVERRIDE; 25 virtual MenuRunner::RunResult RunMenuAt(Widget* parent, 26 MenuButton* button, 27 const gfx::Rect& bounds, 28 MenuAnchorPosition anchor, 29 int32 run_types) OVERRIDE; 30 virtual void Cancel() OVERRIDE; 31 virtual base::TimeDelta GetClosingEventTime() const OVERRIDE; 32 33 private: 34 virtual ~MenuRunnerImplCocoa(); 35 36 // The Cocoa menu controller that this instance is bridging. 37 base::scoped_nsobject<MenuController> menu_controller_; 38 39 // Set if |running_| and Release() has been invoked. 40 bool delete_after_run_; 41 42 // The timestamp of the event which closed the menu - or 0. 43 base::TimeDelta closing_event_time_; 44 45 DISALLOW_COPY_AND_ASSIGN(MenuRunnerImplCocoa); 46 }; 47 48 } // namespace internal 49 } // namespace views 50 51 #endif // UI_VIEWS_CONTROLS_MENU_MENU_RUNNER_IMPL_COCOA_H_ 52