// Copyright (c) 2012 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_HOST_ROOT_VIEW_H_ #define UI_VIEWS_CONTROLS_MENU_MENU_HOST_ROOT_VIEW_H_ #include "base/macros.h" #include "ui/views/widget/root_view.h" namespace views { class MenuController; class SubmenuView; // MenuHostRootView is the RootView of the window showing the menu. // SubmenuView's scroll view is added as a child of MenuHostRootView. // MenuHostRootView forwards relevant events to the MenuController. // // As all the menu items are owned by the root menu item, care must be taken // such that when MenuHostRootView is deleted it doesn't delete the menu items. class MenuHostRootView : public internal::RootView { public: MenuHostRootView(Widget* widget, SubmenuView* submenu); void ClearSubmenu() { submenu_ = NULL; } // Overridden from View: bool OnMousePressed(const ui::MouseEvent& event) override; bool OnMouseDragged(const ui::MouseEvent& event) override; void OnMouseReleased(const ui::MouseEvent& event) override; void OnMouseMoved(const ui::MouseEvent& event) override; bool OnMouseWheel(const ui::MouseWheelEvent& event) override; View* GetTooltipHandlerForPoint(const gfx::Point& point) override; void ViewHierarchyChanged(const ViewHierarchyChangedDetails& details) override; bool ProcessMousePressed(const ui::MouseEvent& event); bool ProcessMouseDragged(const ui::MouseEvent& event); void ProcessMouseReleased(const ui::MouseEvent& event); void ProcessMouseMoved(const ui::MouseEvent& event); View* ProcessGetTooltipHandlerForPoint(const gfx::Point& point); private: // ui::EventProcessor: void OnEventProcessingFinished(ui::Event* event) override; // Returns the MenuController for this MenuHostRootView. MenuController* GetMenuController(); // The SubmenuView we contain. SubmenuView* submenu_; DISALLOW_COPY_AND_ASSIGN(MenuHostRootView); }; } // namespace views #endif // UI_VIEWS_CONTROLS_MENU_MENU_HOST_ROOT_VIEW_H_