diff options
Diffstat (limited to 'views/controls/menu/menu_host_root_view.h')
-rw-r--r-- | views/controls/menu/menu_host_root_view.h | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/views/controls/menu/menu_host_root_view.h b/views/controls/menu/menu_host_root_view.h new file mode 100644 index 0000000..2ae774e --- /dev/null +++ b/views/controls/menu/menu_host_root_view.h @@ -0,0 +1,56 @@ +// Copyright (c) 2009 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 VIEWS_CONTROLS_MENU_MENU_HOST_ROOT_VIEW_H_ +#define VIEWS_CONTROLS_MENU_MENU_HOST_ROOT_VIEW_H_ + +#include "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 RootView { + public: + MenuHostRootView(Widget* widget, SubmenuView* submenu); + + // When invoked subsequent events are NOT forwarded to the MenuController. + void suspend_events() { + suspend_events_ = true; + } + + virtual bool OnMousePressed(const MouseEvent& event); + virtual bool OnMouseDragged(const MouseEvent& event); + virtual void OnMouseReleased(const MouseEvent& event, bool canceled); + virtual void OnMouseMoved(const MouseEvent& event); + virtual void ProcessOnMouseExited(); + virtual bool ProcessMouseWheelEvent(const MouseWheelEvent& e); + + private: + // Returns the MenuController for this MenuHostRootView. + MenuController* GetMenuController(); + + // The SubmenuView we contain. + SubmenuView* submenu_; + + // Whether mouse dragged/released should be forwarded to the MenuController. + bool forward_drag_to_menu_controller_; + + // Whether events are suspended. If true, no events are forwarded to the + // MenuController. + bool suspend_events_; + + DISALLOW_COPY_AND_ASSIGN(MenuHostRootView); +}; + +} // namespace views + +#endif // VIEWS_CONTROLS_MENU_MENU_HOST_ROOT_VIEW_H_ |