| Index: chrome/browser/ui/views/toolbar/extension_toolbar_menu_view.cc
|
| diff --git a/chrome/browser/ui/views/toolbar/extension_toolbar_menu_view.cc b/chrome/browser/ui/views/toolbar/extension_toolbar_menu_view.cc
|
| index e8a01e2c702ba00aa8a543baa18238ff35e56cb9..14196d848ca29373f615b949560af8a5f7d7d6db 100644
|
| --- a/chrome/browser/ui/views/toolbar/extension_toolbar_menu_view.cc
|
| +++ b/chrome/browser/ui/views/toolbar/extension_toolbar_menu_view.cc
|
| @@ -7,6 +7,7 @@
|
| #include "chrome/browser/ui/views/frame/browser_view.h"
|
| #include "chrome/browser/ui/views/toolbar/browser_actions_container.h"
|
| #include "chrome/browser/ui/views/toolbar/toolbar_view.h"
|
| +#include "chrome/browser/ui/views/toolbar/wrench_menu.h"
|
| #include "ui/views/controls/menu/menu_item_view.h"
|
|
|
| namespace {
|
| @@ -18,15 +19,29 @@ const int kVerticalPadding = 8;
|
|
|
| } // namespace
|
|
|
| -ExtensionToolbarMenuView::ExtensionToolbarMenuView(Browser* browser)
|
| - : browser_(browser) {
|
| - BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser);
|
| +ExtensionToolbarMenuView::ExtensionToolbarMenuView(Browser* browser,
|
| + WrenchMenu* wrench_menu)
|
| + : browser_(browser),
|
| + wrench_menu_(wrench_menu),
|
| + container_(NULL),
|
| + browser_actions_container_observer_(this),
|
| + weak_factory_(this) {
|
| + BrowserActionsContainer* main =
|
| + BrowserView::GetBrowserViewForBrowser(browser)
|
| + ->toolbar()->browser_actions();
|
| container_ = new BrowserActionsContainer(
|
| browser_,
|
| NULL, // No owner view, means no extra keybindings are registered.
|
| - browser_view->GetToolbarView()->browser_actions());
|
| + main);
|
| container_->Init();
|
| AddChildView(container_);
|
| +
|
| + // If we were opened for a drop command, we have to wait for the drop to
|
| + // finish so we can close the wrench menu.
|
| + if (wrench_menu_->for_drop()) {
|
| + browser_actions_container_observer_.Add(container_);
|
| + browser_actions_container_observer_.Add(main);
|
| + }
|
| }
|
|
|
| ExtensionToolbarMenuView::~ExtensionToolbarMenuView() {
|
| @@ -48,3 +63,18 @@ void ExtensionToolbarMenuView::Layout() {
|
| SetBounds(views::MenuItemView::label_start(), 0, sz.width(), height);
|
| container_->SetBounds(0, 0, sz.width(), height);
|
| }
|
| +
|
| +void ExtensionToolbarMenuView::OnBrowserActionDropped() {
|
| + DCHECK(wrench_menu_->for_drop());
|
| + // We have to post this in a message loop because it results in the menu being
|
| + // closed, which deletes this view. Since this is in an observer method, that
|
| + // could break the BrowserActionsContainer's observer list if done here.
|
| + base::MessageLoop::current()->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(&ExtensionToolbarMenuView::CloseWrenchMenu,
|
| + weak_factory_.GetWeakPtr()));
|
| +}
|
| +
|
| +void ExtensionToolbarMenuView::CloseWrenchMenu() {
|
| + wrench_menu_->CloseMenu();
|
| +}
|
|
|