summaryrefslogtreecommitdiffstats
path: root/views/controls/menu/menu_host_root_view.h
diff options
context:
space:
mode:
Diffstat (limited to 'views/controls/menu/menu_host_root_view.h')
-rw-r--r--views/controls/menu/menu_host_root_view.h56
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_