| Index: ui/views/controls/menu/menu_runner_impl.cc
|
| diff --git a/ui/views/controls/menu/menu_runner_impl.cc b/ui/views/controls/menu/menu_runner_impl.cc
|
| index a247d5129bba444b463610ba9855590974ef70ae..7dd87fe7c322c30d2c89e9bf45fb82b828c34833 100644
|
| --- a/ui/views/controls/menu/menu_runner_impl.cc
|
| +++ b/ui/views/controls/menu/menu_runner_impl.cc
|
| @@ -33,7 +33,6 @@ MenuRunnerImpl::MenuRunnerImpl(MenuItemView* menu)
|
| : menu_(menu),
|
| running_(false),
|
| delete_after_run_(false),
|
| - async_(false),
|
| for_drop_(false),
|
| controller_(NULL),
|
| owns_controller_(false),
|
| @@ -114,7 +113,6 @@ MenuRunner::RunResult MenuRunnerImpl::RunMenuAt(Widget* parent,
|
| }
|
|
|
| running_ = true;
|
| - async_ = (run_types & MenuRunner::ASYNC) != 0;
|
| for_drop_ = (run_types & MenuRunner::FOR_DROP) != 0;
|
| bool has_mnemonics = (run_types & MenuRunner::HAS_MNEMONICS) != 0;
|
| owns_controller_ = false;
|
| @@ -123,7 +121,6 @@ MenuRunner::RunResult MenuRunnerImpl::RunMenuAt(Widget* parent,
|
| controller = new MenuController(!for_drop_, this);
|
| owns_controller_ = true;
|
| }
|
| - controller->SetAsyncRun(async_);
|
| controller->set_is_combobox((run_types & MenuRunner::COMBOBOX) != 0);
|
| controller_ = controller->AsWeakPtr();
|
| menu_->set_controller(controller_.get());
|
| @@ -131,25 +128,13 @@ MenuRunner::RunResult MenuRunnerImpl::RunMenuAt(Widget* parent,
|
| has_mnemonics,
|
| !for_drop_ && ShouldShowMnemonics(button));
|
|
|
| - // Run the loop.
|
| int mouse_event_flags = 0;
|
| - MenuItemView* result =
|
| - controller->Run(parent,
|
| - button,
|
| - menu_,
|
| - bounds,
|
| - anchor,
|
| - (run_types & MenuRunner::CONTEXT_MENU) != 0,
|
| - (run_types & MenuRunner::NESTED_DRAG) != 0,
|
| - &mouse_event_flags);
|
| - // Get the time of the event which closed this menu.
|
| - closing_event_time_ = controller->closing_event_time();
|
| - if (for_drop_ || async_) {
|
| - // Drop and asynchronous menus return immediately. We finish processing in
|
| - // OnMenuClosed.
|
| - return MenuRunner::NORMAL_EXIT;
|
| - }
|
| - return MenuDone(NOTIFY_DELEGATE, result, mouse_event_flags);
|
| + controller->Run(parent, button, menu_, bounds, anchor,
|
| + (run_types & MenuRunner::CONTEXT_MENU) != 0,
|
| + (run_types & MenuRunner::NESTED_DRAG) != 0,
|
| + &mouse_event_flags);
|
| + // We finish processing results in OnMenuClosed.
|
| + return MenuRunner::NORMAL_EXIT;
|
| }
|
|
|
| void MenuRunnerImpl::Cancel() {
|
| @@ -164,25 +149,8 @@ base::TimeTicks MenuRunnerImpl::GetClosingEventTime() const {
|
| void MenuRunnerImpl::OnMenuClosed(NotifyType type,
|
| MenuItemView* menu,
|
| int mouse_event_flags) {
|
| - MenuDone(type, menu, mouse_event_flags);
|
| -}
|
| -
|
| -void MenuRunnerImpl::SiblingMenuCreated(MenuItemView* menu) {
|
| - if (menu != menu_ && sibling_menus_.count(menu) == 0)
|
| - sibling_menus_.insert(menu);
|
| -}
|
| -
|
| -MenuRunnerImpl::~MenuRunnerImpl() {
|
| - delete menu_;
|
| - for (std::set<MenuItemView*>::iterator i = sibling_menus_.begin();
|
| - i != sibling_menus_.end();
|
| - ++i)
|
| - delete *i;
|
| -}
|
| -
|
| -MenuRunner::RunResult MenuRunnerImpl::MenuDone(NotifyType type,
|
| - MenuItemView* result,
|
| - int mouse_event_flags) {
|
| + if (controller_)
|
| + closing_event_time_ = controller_->closing_event_time();
|
| menu_->RemoveEmptyMenus();
|
| menu_->set_controller(nullptr);
|
|
|
| @@ -197,24 +165,35 @@ MenuRunner::RunResult MenuRunnerImpl::MenuDone(NotifyType type,
|
| menu_->DestroyAllMenuHosts();
|
| if (delete_after_run_) {
|
| delete this;
|
| - return MenuRunner::MENU_DELETED;
|
| + return;
|
| }
|
| running_ = false;
|
| if (menu_->GetDelegate()) {
|
| // Executing the command may also delete this.
|
| base::WeakPtr<MenuRunnerImpl> ref(weak_factory_.GetWeakPtr());
|
| - if (result && !for_drop_) {
|
| + if (menu && !for_drop_) {
|
| // Do not execute the menu that was dragged/dropped.
|
| - menu_->GetDelegate()->ExecuteCommand(result->GetCommand(),
|
| + menu_->GetDelegate()->ExecuteCommand(menu->GetCommand(),
|
| mouse_event_flags);
|
| }
|
| // Only notify the delegate if it did not delete this.
|
| if (!ref)
|
| - return MenuRunner::MENU_DELETED;
|
| + return;
|
| else if (type == NOTIFY_DELEGATE)
|
| - menu_->GetDelegate()->OnMenuClosed(result, MenuRunner::NORMAL_EXIT);
|
| + menu_->GetDelegate()->OnMenuClosed(menu, MenuRunner::NORMAL_EXIT);
|
| }
|
| - return MenuRunner::NORMAL_EXIT;
|
| +}
|
| +
|
| +void MenuRunnerImpl::SiblingMenuCreated(MenuItemView* menu) {
|
| + if (menu != menu_ && sibling_menus_.count(menu) == 0)
|
| + sibling_menus_.insert(menu);
|
| +}
|
| +
|
| +MenuRunnerImpl::~MenuRunnerImpl() {
|
| + delete menu_;
|
| + for (std::set<MenuItemView*>::iterator i = sibling_menus_.begin();
|
| + i != sibling_menus_.end(); ++i)
|
| + delete *i;
|
| }
|
|
|
| bool MenuRunnerImpl::ShouldShowMnemonics(MenuButton* button) {
|
|
|