| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef VIEWS_CONTROLS_MENU_MENU_HOST_H_ | 5 #ifndef VIEWS_CONTROLS_MENU_MENU_HOST_H_ |
| 6 #define VIEWS_CONTROLS_MENU_MENU_HOST_H_ | 6 #define VIEWS_CONTROLS_MENU_MENU_HOST_H_ |
| 7 #pragma once | 7 #pragma once |
| 8 | 8 |
| 9 #include "base/compiler_specific.h" | 9 #include "base/compiler_specific.h" |
| 10 #include "ui/gfx/native_widget_types.h" | 10 #include "ui/gfx/native_widget_types.h" |
| 11 #include "ui/gfx/rect.h" | 11 #include "ui/gfx/rect.h" |
| 12 #include "views/controls/menu/native_menu_host_delegate.h" | 12 #include "views/controls/menu/native_menu_host_delegate.h" |
| 13 #include "views/widget/widget.h" |
| 13 | 14 |
| 14 namespace views { | 15 namespace views { |
| 15 | 16 |
| 16 class NativeMenuHost; | 17 class NativeMenuHost; |
| 17 class NativeWidget; | 18 class NativeWidget; |
| 18 class SubmenuView; | 19 class SubmenuView; |
| 19 class View; | 20 class View; |
| 20 class Widget; | 21 class Widget; |
| 21 | 22 |
| 22 // SubmenuView uses a MenuHost to house the SubmenuView. MenuHost typically | 23 // SubmenuView uses a MenuHost to house the SubmenuView. MenuHost typically |
| 23 // extends the native Widget type, but is defined here for clarity of what | 24 // extends the native Widget type, but is defined here for clarity of what |
| 24 // methods SubmenuView uses. | 25 // methods SubmenuView uses. |
| 25 // | 26 // |
| 26 // SubmenuView owns the MenuHost. When SubmenuView is done with the MenuHost | 27 // SubmenuView owns the MenuHost. When SubmenuView is done with the MenuHost |
| 27 // |DestroyMenuHost| is invoked. The one exception to this is if the native | 28 // |DestroyMenuHost| is invoked. The one exception to this is if the native |
| 28 // OS destroys the widget out from under us, in which case |MenuHostDestroyed| | 29 // OS destroys the widget out from under us, in which case |MenuHostDestroyed| |
| 29 // is invoked back on the SubmenuView and the SubmenuView then drops references | 30 // is invoked back on the SubmenuView and the SubmenuView then drops references |
| 30 // to the MenuHost. | 31 // to the MenuHost. |
| 31 class MenuHost : public internal::NativeMenuHostDelegate { | 32 class MenuHost : public Widget, |
| 33 public internal::NativeMenuHostDelegate { |
| 32 public: | 34 public: |
| 33 explicit MenuHost(SubmenuView* submenu); | 35 explicit MenuHost(SubmenuView* submenu); |
| 34 virtual ~MenuHost(); | 36 virtual ~MenuHost(); |
| 35 | 37 |
| 36 // Initializes and shows the MenuHost. | 38 // Initializes and shows the MenuHost. |
| 37 void InitMenuHost(gfx::NativeWindow parent, | 39 void InitMenuHost(gfx::NativeWindow parent, |
| 38 const gfx::Rect& bounds, | 40 const gfx::Rect& bounds, |
| 39 View* contents_view, | 41 View* contents_view, |
| 40 bool do_capture); | 42 bool do_capture); |
| 41 | 43 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 58 // Releases a mouse grab installed by |ShowMenuHost|. | 60 // Releases a mouse grab installed by |ShowMenuHost|. |
| 59 void ReleaseMenuHostCapture(); | 61 void ReleaseMenuHostCapture(); |
| 60 | 62 |
| 61 // Returns the native window of the MenuHost. | 63 // Returns the native window of the MenuHost. |
| 62 gfx::NativeWindow GetMenuHostWindow(); | 64 gfx::NativeWindow GetMenuHostWindow(); |
| 63 | 65 |
| 64 Widget* GetWidget(); | 66 Widget* GetWidget(); |
| 65 NativeWidget* GetNativeWidget(); | 67 NativeWidget* GetNativeWidget(); |
| 66 | 68 |
| 67 private: | 69 private: |
| 70 // Overridden from Widget: |
| 71 virtual RootView* CreateRootView() OVERRIDE; |
| 72 virtual bool ShouldReleaseCaptureOnMouseReleased() const OVERRIDE; |
| 73 |
| 68 // Overridden from NativeMenuHostDelegate: | 74 // Overridden from NativeMenuHostDelegate: |
| 69 virtual void OnNativeMenuHostDestroy() OVERRIDE; | 75 virtual void OnNativeMenuHostDestroy() OVERRIDE; |
| 70 virtual void OnNativeMenuHostCancelCapture() OVERRIDE; | 76 virtual void OnNativeMenuHostCancelCapture() OVERRIDE; |
| 71 virtual RootView* CreateRootView() OVERRIDE; | 77 virtual internal::NativeWidgetDelegate* AsNativeWidgetDelegate() OVERRIDE; |
| 72 virtual bool ShouldReleaseCaptureOnMouseRelease() const OVERRIDE; | |
| 73 | 78 |
| 74 NativeMenuHost* native_menu_host_; | 79 NativeMenuHost* native_menu_host_; |
| 75 | 80 |
| 76 // The view we contain. | 81 // The view we contain. |
| 77 SubmenuView* submenu_; | 82 SubmenuView* submenu_; |
| 78 | 83 |
| 79 // If true, DestroyMenuHost has been invoked. | 84 // If true, DestroyMenuHost has been invoked. |
| 80 bool destroying_; | 85 bool destroying_; |
| 81 | 86 |
| 82 DISALLOW_COPY_AND_ASSIGN(MenuHost); | 87 DISALLOW_COPY_AND_ASSIGN(MenuHost); |
| 83 }; | 88 }; |
| 84 | 89 |
| 85 } // namespace views | 90 } // namespace views |
| 86 | 91 |
| 87 #endif // VIEWS_CONTROLS_MENU_MENU_HOST_H_ | 92 #endif // VIEWS_CONTROLS_MENU_MENU_HOST_H_ |
| OLD | NEW |