Index: ui/views/controls/menu/menu_controller.h |
diff --git a/ui/views/controls/menu/menu_controller.h b/ui/views/controls/menu/menu_controller.h |
index dd1485dc858cc58d30242ec507a70bf6c5fae735..a0201447d8a3a1bc5571794db0d1446075d6a7d2 100644 |
--- a/ui/views/controls/menu/menu_controller.h |
+++ b/ui/views/controls/menu/menu_controller.h |
@@ -12,11 +12,13 @@ |
#include <vector> |
#include "base/compiler_specific.h" |
+#include "base/memory/linked_ptr.h" |
#include "base/memory/scoped_ptr.h" |
#include "base/timer/timer.h" |
#include "ui/events/event.h" |
#include "ui/events/event_constants.h" |
#include "ui/events/platform/platform_event_dispatcher.h" |
+#include "ui/views/controls/button/menu_button.h" |
#include "ui/views/controls/menu/menu_config.h" |
#include "ui/views/controls/menu/menu_delegate.h" |
#include "ui/views/widget/widget_observer.h" |
@@ -549,7 +551,8 @@ class VIEWS_EXPORT MenuController : public WidgetObserver { |
// If not empty, it means we're nested. When Run is invoked from within |
// Run, the current state (state_) is pushed onto menu_stack_. This allows |
// MenuController to restore the state when the nested run returns. |
- std::list<State> menu_stack_; |
+ typedef std::pair<State, linked_ptr<MenuButton::PressedLock> > NestedState; |
+ std::list<NestedState> menu_stack_; |
// As the mouse moves around submenus are not opened immediately. Instead |
// they open after this timer fires. |
@@ -596,7 +599,8 @@ class VIEWS_EXPORT MenuController : public WidgetObserver { |
// underway. |
scoped_ptr<MenuScrollTask> scroll_task_; |
- MenuButton* menu_button_; |
+ // The lock to keep the menu button pressed while a menu is visible. |
+ scoped_ptr<MenuButton::PressedLock> pressed_lock_; |
// ViewStorage id used to store the view mouse drag events are forwarded to. |
// See UpdateActiveMouseView() for details. |