text: // 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 "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;
  
   private:
    // ui::EventProcessor:
    void OnEventProcessingFinished(ui::Event* event) override;
  
    // Returns the MenuController for this MenuHostRootView.
    MenuController* GetMenuController();
  
    // Returns true if event targets EmptyMenu.
    bool DoesEventTargetEmptyMenuItem(const ui::MouseEvent& event);
  
    // The SubmenuView we contain.
    SubmenuView* submenu_;
  
    // Whether mouse dragged/released should be forwarded to the MenuController.
    bool forward_drag_to_menu_controller_;
  
    DISALLOW_COPY_AND_ASSIGN(MenuHostRootView);
  };
  
  }  // namespace views
  
  #endif  // UI_VIEWS_CONTROLS_MENU_MENU_HOST_ROOT_VIEW_H_
  