Index: chrome/browser/ui/views/toolbar/browser_action_view.cc |
diff --git a/chrome/browser/ui/views/toolbar/browser_action_view.cc b/chrome/browser/ui/views/toolbar/browser_action_view.cc |
index e277c3cd82b50b2bc4c6a84069a3181e0448c063..fa633b6a428883d0bcbddd814162d356eca24a6e 100644 |
--- a/chrome/browser/ui/views/toolbar/browser_action_view.cc |
+++ b/chrome/browser/ui/views/toolbar/browser_action_view.cc |
@@ -16,6 +16,7 @@ |
#include "chrome/browser/themes/theme_service_factory.h" |
#include "chrome/browser/ui/browser.h" |
#include "chrome/browser/ui/view_ids.h" |
+#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 "extensions/common/extension.h" |
@@ -61,7 +62,7 @@ gfx::ImageSkia BrowserActionView::GetIconWithBadge() { |
} |
void BrowserActionView::Layout() { |
- button_->SetBounds(0, y(), width(), height()); |
+ button_->SetBounds(0, 0, width(), height()); |
} |
void BrowserActionView::GetAccessibleState(ui::AXViewState* state) { |
@@ -175,20 +176,34 @@ void BrowserActionButton::ShowContextMenuForView( |
SetButtonPushed(); |
// Reconstructs the menu every time because the menu's contents are dynamic. |
- scoped_refptr<ExtensionContextMenuModel> context_menu_contents_( |
+ scoped_refptr<ExtensionContextMenuModel> context_menu_contents( |
new ExtensionContextMenuModel(extension(), browser_, delegate_)); |
- menu_runner_.reset(new views::MenuRunner(context_menu_contents_.get())); |
+ menu_runner_.reset(new views::MenuRunner(context_menu_contents.get())); |
context_menu_ = menu_runner_->GetMenu(); |
gfx::Point screen_loc; |
views::View::ConvertPointToScreen(this, &screen_loc); |
- if (menu_runner_->RunMenuAt( |
- GetWidget(), |
- NULL, |
- gfx::Rect(screen_loc, size()), |
- views::MENU_ANCHOR_TOPLEFT, |
- source_type, |
- views::MenuRunner::HAS_MNEMONICS | views::MenuRunner::CONTEXT_MENU) == |
+ |
+ views::Widget* parent = NULL; |
+ int run_types = views::MenuRunner::HAS_MNEMONICS | |
+ views::MenuRunner::CONTEXT_MENU; |
+ if (delegate_->ShownInsideMenu()) { |
+ run_types |= views::MenuRunner::IS_NESTED; |
+ // RunMenuAt expects a nested menu to be parented by the same widget as the |
+ // already visible menu, in this case the wrench menu (hamburger). |
Peter Kasting
2014/06/30 23:36:33
Nit: wrench menu (hamburger) -> Chrome menu
(Chro
Finnur
2014/07/02 16:59:55
Done.
|
+ parent = BrowserView::GetBrowserViewForBrowser(browser_)->toolbar() |
+ ->app_menu() |
+ ->GetWidget(); |
+ } else { |
+ parent = GetWidget(); |
+ } |
+ |
+ if (menu_runner_->RunMenuAt(parent, |
+ NULL, |
+ gfx::Rect(screen_loc, size()), |
+ views::MENU_ANCHOR_TOPLEFT, |
+ source_type, |
+ run_types) == |
views::MenuRunner::MENU_DELETED) { |
return; |
} |