Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1175)

Unified Diff: views/controls/menu/menu_controller.cc

Issue 7720012: Moves ownership of MenuItemView to MenuRunner as well as responbility (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix unit test Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: views/controls/menu/menu_controller.cc
diff --git a/views/controls/menu/menu_controller.cc b/views/controls/menu/menu_controller.cc
index 1a3d7bd40383d5e30c530e911b90bd75e3da8497..1fa4503563a1eccb4456f9fd470524a0d1e3c220 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"
@@ -370,7 +371,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_) {
@@ -392,7 +393,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;
}
@@ -717,8 +720,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.
@@ -809,11 +815,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_);
@@ -995,7 +996,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),
@@ -1009,11 +1011,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();
}
@@ -1096,6 +1102,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();

Powered by Google App Engine
This is Rietveld 408576698