diff options
Diffstat (limited to 'views/controls/menu/menu_controller.cc')
-rw-r--r-- | views/controls/menu/menu_controller.cc | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/views/controls/menu/menu_controller.cc b/views/controls/menu/menu_controller.cc index c44aa9a..cb53602 100644 --- a/views/controls/menu/menu_controller.cc +++ b/views/controls/menu/menu_controller.cc @@ -14,6 +14,7 @@ #include "ui/gfx/canvas_skia.h" #include "ui/gfx/screen.h" #include "views/controls/button/menu_button.h" +#include "views/controls/menu/menu_controller_delegate.h" #include "views/controls/menu/menu_scroll_view_container.h" #include "views/controls/menu/submenu_view.h" #include "views/drag_utils.h" @@ -369,7 +370,7 @@ void MenuController::Cancel(ExitType type) { // If the menu has already been destroyed, no further cancellation is // needed. We especially don't want to set the |exit_type_| to a lesser // value. - if (exit_type_ == EXIT_DESTROYED) + if (exit_type_ == EXIT_DESTROYED || exit_type_ == type) return; if (!showing_) { @@ -391,7 +392,9 @@ void MenuController::Cancel(ExitType type) { // triggers deleting us. DCHECK(selected); showing_ = false; - selected->GetRootMenuItem()->DropMenuClosed(true); + delegate_->DropMenuClosed( + internal::MenuControllerDelegate::NOTIFY_DELEGATE, + selected->GetRootMenuItem()); // WARNING: the call to MenuClosed deletes us. return; } @@ -716,8 +719,11 @@ int MenuController::OnPerformDrop(SubmenuView* source, if (drop_target->id() == MenuItemView::kEmptyMenuItemViewID) drop_target = drop_target->GetParentMenuItem(); - if (!IsBlockingRun()) - item->GetRootMenuItem()->DropMenuClosed(false); + if (!IsBlockingRun()) { + delegate_->DropMenuClosed( + internal::MenuControllerDelegate::DONT_NOTIFY_DELEGATE, + item->GetRootMenuItem()); + } // WARNING: the call to MenuClosed deletes us. @@ -808,11 +814,6 @@ void MenuController::SetSelection(MenuItemView* menu_item, } } -// static -void MenuController::SetActiveInstance(MenuController* controller) { - active_instance_ = controller; -} - #if defined(OS_WIN) bool MenuController::Dispatch(const MSG& msg) { DCHECK(blocking_run_); @@ -994,7 +995,8 @@ bool MenuController::OnKeyDown(int key_code return true; } -MenuController::MenuController(bool blocking) +MenuController::MenuController(bool blocking, + internal::MenuControllerDelegate* delegate) : blocking_run_(blocking), showing_(false), exit_type_(EXIT_NONE), @@ -1008,11 +1010,15 @@ MenuController::MenuController(bool blocking) valid_drop_coordinates_(false), showing_submenu_(false), menu_button_(NULL), - active_mouse_view_(NULL) { + active_mouse_view_(NULL), + delegate_(delegate) { + active_instance_ = this; } MenuController::~MenuController() { DCHECK(!showing_); + if (active_instance_ == this) + active_instance_ = NULL; StopShowTimer(); StopCancelAllTimer(); } @@ -1095,6 +1101,8 @@ bool MenuController::ShowSiblingMenu(SubmenuView* source, if (!alt_menu || (state_.item && state_.item->GetRootMenuItem() == alt_menu)) return false; + delegate_->SiblingMenuCreated(alt_menu); + if (!button) { // If the delegate returns a menu, they must also return a button. NOTREACHED(); |