Chromium Code Reviews| Index: ui/views/controls/menu/menu_controller.cc |
| diff --git a/ui/views/controls/menu/menu_controller.cc b/ui/views/controls/menu/menu_controller.cc |
| index 13d3d3510a45b4cd6a2c358c51e9ff51703bdaca..55b4691d1642fec04341e9030b37c9928bbe40be 100644 |
| --- a/ui/views/controls/menu/menu_controller.cc |
| +++ b/ui/views/controls/menu/menu_controller.cc |
| @@ -46,6 +46,7 @@ |
| #endif |
| #if defined(USE_AURA) |
| +#include "ui/views/controls/menu/activation_change_observer_impl.h" |
| #include "ui/views/controls/menu/menu_key_event_handler.h" |
| #endif |
| @@ -420,7 +421,8 @@ MenuItemView* MenuController::Run(Widget* parent, |
| } |
| } |
| - bool nested_menu = showing_; |
| + // If we are already showing, this new menu is being nested. Such as context |
| + // menus on top of normal menus. |
| if (showing_) { |
| // Only support nesting of blocking_run menus, nesting of |
| // blocking/non-blocking shouldn't be needed. |
| @@ -437,9 +439,17 @@ MenuItemView* MenuController::Run(Widget* parent, |
| } else { |
| showing_ = true; |
| + if (owner_) |
| + owner_->RemoveObserver(this); |
| + owner_ = parent; |
| + if (owner_) |
| + owner_->AddObserver(this); |
| + |
| #if defined(USE_AURA) |
| - // Only create a MenuKeyEventHandler for non-nested menus. Nested menus will |
| - // use the existing one. |
| + // Only create a MenuKeyEventHandler and ActivationChnageObserver for |
|
sky
2016/08/01 21:39:45
'Chnage'->Change
jonross
2016/08/02 15:03:25
Done.
|
| + // non-nested menus. Nested menus will use the existing one. |
| + activation_change_observer_.reset( |
| + new ActivationChangeObserverImpl(this, owner_)); |
| key_event_handler_.reset(new MenuKeyEventHandler); |
| #endif |
| } |
| @@ -449,12 +459,6 @@ MenuItemView* MenuController::Run(Widget* parent, |
| state_ = State(); |
| UpdateInitialLocation(bounds, position, context_menu); |
| - if (owner_) |
| - owner_->RemoveObserver(this); |
| - owner_ = parent; |
| - if (owner_) |
| - owner_->AddObserver(this); |
| - |
| // Set the selection, which opens the initial menu. |
| SetSelection(root, SELECTION_OPEN_SUBMENU | SELECTION_UPDATE_IMMEDIATELY); |
| @@ -483,7 +487,7 @@ MenuItemView* MenuController::Run(Widget* parent, |
| // appears totally broken. |
| message_loop_depth_++; |
| DCHECK_LE(message_loop_depth_, 2); |
| - RunMessageLoop(nested_menu); |
| + RunMessageLoop(); |
| message_loop_depth_--; |
| if (ViewsDelegate::GetInstance()) |
| @@ -1086,7 +1090,6 @@ void MenuController::OnWidgetDestroying(Widget* widget) { |
| DCHECK_EQ(owner_, widget); |
| owner_->RemoveObserver(this); |
| owner_ = NULL; |
| - message_loop_->ClearOwner(); |
| } |
| bool MenuController::IsCancelAllTimerRunningForTest() { |
| @@ -1387,8 +1390,8 @@ MenuController::~MenuController() { |
| StopCancelAllTimer(); |
| } |
| -void MenuController::RunMessageLoop(bool nested_menu) { |
| - message_loop_->Run(this, owner_, nested_menu); |
| +void MenuController::RunMessageLoop() { |
| + message_loop_->Run(); |
| } |
| bool MenuController::SendAcceleratorToHotTrackedView() { |
| @@ -2610,6 +2613,7 @@ MenuItemView* MenuController::ExitMenuRun() { |
| } |
| } else { |
| #if defined(USE_AURA) |
| + activation_change_observer_.reset(); |
| key_event_handler_.reset(); |
| #endif |