// 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. #ifndef UI_VIEWS_CONTROLS_MENU_MENU_MESSAGE_LOOP_H_ #define UI_VIEWS_CONTROLS_MENU_MENU_MESSAGE_LOOP_H_ #include "ui/gfx/native_widget_types.h" namespace gfx { class Point; } namespace ui { class LocatedEvent; } namespace views { class MenuController; class Widget; // Interface used by MenuController to run a nested message loop while // showing a menu, allowing for platform specific implementations. class MenuMessageLoop { public: virtual ~MenuMessageLoop() {} // Create a platform specific instance. static MenuMessageLoop* Create(); // Runs the platform specific bits of the message loop. If |nested_menu| is // true we're being asked to run a menu from within a menu (eg a context // menu). virtual void Run(MenuController*, Widget* owner, bool nested_menu) = 0; // Returns true if it is a good time to call QuitNow(). // Returns false otherwise, for example if a drag and drop is in progress. virtual bool ShouldQuitNow() const = 0; // Quit an earlier call to Run(). virtual void QuitNow() = 0; // Repost |event| to |window|. // |screen_loc| is the event's location in screen coordinates. virtual void RepostEventToWindow(const ui::LocatedEvent& event, gfx::NativeWindow window, const gfx::Point& screen_loc) = 0; // Clear any references to the owner widget that was passed into the previous // call to Run(). virtual void ClearOwner() = 0; }; } // namespace views #endif // UI_VIEWS_CONTROLS_MENU_MENU_MESSAGE_LOOP_H_