Index: views/controls/menu/menu_item_view.cc |
diff --git a/views/controls/menu/menu_item_view.cc b/views/controls/menu/menu_item_view.cc |
index 89fbfe6eb57b150bcbdf5a245d147a445a1ac993..86a97a8b2e4d5f278d0e6fc64ec60b25809c514f 100644 |
--- a/views/controls/menu/menu_item_view.cc |
+++ b/views/controls/menu/menu_item_view.cc |
@@ -19,10 +19,6 @@ |
#include "views/controls/menu/menu_separator.h" |
#include "views/controls/menu/submenu_view.h" |
-#if defined(OS_WIN) |
-#include "base/win/win_util.h" |
-#endif |
- |
namespace views { |
namespace { |
@@ -100,16 +96,6 @@ MenuItemView::MenuItemView(MenuDelegate* delegate) |
Init(NULL, 0, SUBMENU, delegate); |
} |
-MenuItemView::~MenuItemView() { |
- // TODO(sky): ownership is bit wrong now. In particular if a nested message |
- // loop is running deletion can't be done, otherwise the stack gets |
- // thoroughly screwed. The destructor should be made private, and |
- // MenuController should be the only place handling deletion of the menu. |
- // (57890). |
- delete submenu_; |
- STLDeleteElements(&removed_items_); |
-} |
- |
void MenuItemView::ChildPreferredSizeChanged(View* child) { |
pref_size_.SetSize(0, 0); |
PreferredSizeChanged(); |
@@ -192,87 +178,6 @@ string16 MenuItemView::GetAccessibleNameForMenuItem( |
return accessible_name; |
} |
-void MenuItemView::RunMenuAt(Widget* parent, |
- MenuButton* button, |
- const gfx::Rect& bounds, |
- AnchorPosition anchor, |
- bool has_mnemonics) { |
- // Show mnemonics if the button has focus or alt is pressed. |
- bool show_mnemonics = button ? button->HasFocus() : false; |
-#if defined(OS_WIN) |
- // We don't currently need this on gtk as showing the menu gives focus to the |
- // button first. |
- if (!show_mnemonics) |
- show_mnemonics = base::win::IsAltPressed(); |
-#endif |
- PrepareForRun(has_mnemonics, show_mnemonics); |
- int mouse_event_flags; |
- |
- MenuController* controller = MenuController::GetActiveInstance(); |
- if (controller && !controller->IsBlockingRun()) { |
- // A menu is already showing, but it isn't a blocking menu. Cancel it. |
- // We can get here during drag and drop if the user right clicks on the |
- // menu quickly after the drop. |
- controller->Cancel(MenuController::EXIT_ALL); |
- controller = NULL; |
- } |
- // TODO(sky): remove volatile, used in tracking 90860. |
- volatile bool owns_controller = false; |
- if (!controller) { |
- // No menus are showing, show one. |
- controller = new MenuController(true); |
- MenuController::SetActiveInstance(controller); |
- owns_controller = true; |
- } else { |
- // A menu is already showing, use the same controller. |
- |
- // Don't support blocking from within non-blocking. |
- DCHECK(controller->IsBlockingRun()); |
- } |
- |
- controller_ = controller; |
- |
- // Run the loop. |
- MenuItemView* result = |
- controller->Run(parent, button, this, bounds, anchor, &mouse_event_flags); |
- |
- RemoveEmptyMenus(); |
- |
- controller_ = NULL; |
- |
- if (owns_controller) { |
- // We created the controller and need to delete it. |
- if (MenuController::GetActiveInstance() == controller) |
- MenuController::SetActiveInstance(NULL); |
- delete controller; |
- } |
- // Make sure all the windows we created to show the menus have been |
- // destroyed. |
- DestroyAllMenuHosts(); |
- if (result && delegate_) |
- delegate_->ExecuteCommand(result->GetCommand(), mouse_event_flags); |
-} |
- |
-void MenuItemView::RunMenuForDropAt(Widget* parent, |
- const gfx::Rect& bounds, |
- AnchorPosition anchor) { |
- PrepareForRun(false, false); |
- |
- // If there is a menu, hide it so that only one menu is shown during dnd. |
- MenuController* current_controller = MenuController::GetActiveInstance(); |
- if (current_controller) { |
- current_controller->Cancel(MenuController::EXIT_ALL); |
- } |
- |
- // Always create a new controller for non-blocking. |
- controller_ = new MenuController(false); |
- |
- // Set the instance, that way it can be canceled by another menu. |
- MenuController::SetActiveInstance(controller_); |
- |
- controller_->Run(parent, NULL, this, bounds, anchor, NULL); |
-} |
- |
void MenuItemView::Cancel() { |
if (controller_ && !canceled_) { |
canceled_ = true; |
@@ -559,6 +464,11 @@ MenuItemView::MenuItemView(MenuItemView* parent, |
Init(parent, command, type, NULL); |
} |
+MenuItemView::~MenuItemView() { |
+ delete submenu_; |
+ STLDeleteElements(&removed_items_); |
+} |
+ |
std::string MenuItemView::GetClassName() const { |
return kViewClassName; |
} |
@@ -613,23 +523,6 @@ void MenuItemView::Init(MenuItemView* parent, |
SetEnabled(root_delegate->IsCommandEnabled(command)); |
} |
-void MenuItemView::DropMenuClosed(bool notify_delegate) { |
- DCHECK(controller_); |
- DCHECK(!controller_->IsBlockingRun()); |
- if (MenuController::GetActiveInstance() == controller_) |
- MenuController::SetActiveInstance(NULL); |
- delete controller_; |
- controller_ = NULL; |
- |
- RemoveEmptyMenus(); |
- |
- if (notify_delegate && delegate_) { |
- // Our delegate is null when invoked from the destructor. |
- delegate_->DropMenuClosed(this); |
- } |
- // WARNING: its possible the delegate deleted us at this point. |
-} |
- |
void MenuItemView::PrepareForRun(bool has_mnemonics, bool show_mnemonics) { |
// Currently we only support showing the root. |
DCHECK(!parent_menu_item_); |