Index: chrome/browser/ui/views/toolbar/wrench_menu.cc |
diff --git a/chrome/browser/ui/views/toolbar/wrench_menu.cc b/chrome/browser/ui/views/toolbar/wrench_menu.cc |
index 026ea2a1783f90ed800e3a0858aa351d14b29584..fb6eeb900eb6eaacb02184bbbb2eb29081c6d055 100644 |
--- a/chrome/browser/ui/views/toolbar/wrench_menu.cc |
+++ b/chrome/browser/ui/views/toolbar/wrench_menu.cc |
@@ -948,7 +948,8 @@ class WrenchMenu::RecentTabsMenuModelDelegate : public ui::MenuModelDelegate { |
WrenchMenu::WrenchMenu(Browser* browser, |
bool use_new_menu, |
- bool supports_new_separators) |
+ bool supports_new_separators, |
+ bool for_drop) |
: root_(NULL), |
browser_(browser), |
selected_menu_model_(NULL), |
@@ -956,7 +957,8 @@ WrenchMenu::WrenchMenu(Browser* browser, |
bookmark_menu_(NULL), |
feedback_menu_item_(NULL), |
use_new_menu_(use_new_menu), |
- supports_new_separators_(supports_new_separators) { |
+ supports_new_separators_(supports_new_separators), |
+ for_drop_(for_drop) { |
registrar_.Add(this, chrome::NOTIFICATION_GLOBAL_ERRORS_CHANGED, |
content::Source<Profile>(browser_->profile())); |
} |
@@ -985,8 +987,9 @@ void WrenchMenu::Init(ui::MenuModel* model) { |
DCHECK(command_id_to_entry_.find(i) == command_id_to_entry_.end()); |
#endif // defined(DEBUG) |
- menu_runner_.reset( |
- new views::MenuRunner(root_, views::MenuRunner::HAS_MNEMONICS)); |
+ int32 types = views::MenuRunner::HAS_MNEMONICS | |
+ (for_drop_ ? views::MenuRunner::FOR_DROP : 0); |
+ menu_runner_.reset(new views::MenuRunner(root_, types)); |
} |
void WrenchMenu::RunMenu(views::MenuButton* host) { |
@@ -1011,6 +1014,11 @@ void WrenchMenu::RunMenu(views::MenuButton* host) { |
selected_menu_model_->ActivatedAt(selected_index_); |
} |
+void WrenchMenu::CloseMenu() { |
+ if (menu_runner_.get()) |
+ menu_runner_->Cancel(); |
+} |
+ |
bool WrenchMenu::IsShowing() { |
return menu_runner_.get() && menu_runner_->IsRunning(); |
} |
@@ -1225,6 +1233,12 @@ bool WrenchMenu::ShouldCloseOnDragComplete() { |
return false; |
} |
+bool WrenchMenu::InNestedDrag() { |
+ // We're only in a nested drag (that our MenuController wouldn't know about) |
+ // if the menu was opened specifically for a drag-and-drop operation. |
+ return for_drop_; |
+} |
+ |
void WrenchMenu::BookmarkModelChanged() { |
DCHECK(bookmark_menu_delegate_.get()); |
if (!bookmark_menu_delegate_->is_mutating_model()) |
@@ -1259,7 +1273,8 @@ void WrenchMenu::PopulateMenu(MenuItemView* parent, |
scoped_ptr<ExtensionToolbarMenuView> extension_toolbar_menu_view; |
if (model->GetCommandIdAt(i) == IDC_EXTENSIONS_OVERFLOW_MENU) { |
- extension_toolbar_menu_view.reset(new ExtensionToolbarMenuView(browser_)); |
+ extension_toolbar_menu_view.reset( |
+ new ExtensionToolbarMenuView(browser_, this)); |
height = extension_toolbar_menu_view->GetPreferredSize().height(); |
} |