Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1948)

Unified Diff: chrome/browser/ui/views/toolbar/browser_action_view.cc

Issue 547303003: Keep reference view pressed while extension actions have a popup (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: VIEWS_EXPORT fix Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 02a63533a0ff8358099ccf48fdd7c4a369b13d51..2ae971d8dcba2eaa335234b188a76332b6962c05 100644
--- a/chrome/browser/ui/views/toolbar/browser_action_view.cc
+++ b/chrome/browser/ui/views/toolbar/browser_action_view.cc
@@ -130,13 +130,8 @@ void BrowserActionView::UpdateState() {
if (tab_id < 0)
return;
- if (!IsEnabled(tab_id)) {
+ if (!IsEnabled(tab_id))
SetState(views::CustomButton::STATE_DISABLED);
- } else {
- SetState(menu_visible_ ?
- views::CustomButton::STATE_PRESSED :
- views::CustomButton::STATE_NORMAL);
- }
gfx::ImageSkia icon = *view_controller_->GetIcon(tab_id).ToImageSkia();
@@ -255,16 +250,6 @@ scoped_ptr<LabelButtonBorder> BrowserActionView::CreateDefaultBorder() const {
return border.Pass();
}
-void BrowserActionView::SetButtonPushed() {
- SetState(views::CustomButton::STATE_PRESSED);
- menu_visible_ = true;
-}
-
-void BrowserActionView::SetButtonNotPushed() {
- SetState(views::CustomButton::STATE_NORMAL);
- menu_visible_ = false;
-}
-
bool BrowserActionView::IsEnabled(int tab_id) const {
return view_controller_->extension_action()->GetIsVisible(tab_id);
}
@@ -323,6 +308,11 @@ views::View* BrowserActionView::GetReferenceViewForPopup() {
return visible() ? this : delegate_->GetOverflowReferenceView();
}
+views::MenuButton* BrowserActionView::GetContextMenuButton() {
+ DCHECK(visible()); // We should never show a context menu for a hidden item.
+ return this;
+}
+
content::WebContents* BrowserActionView::GetCurrentWebContents() {
return delegate_->GetCurrentWebContents();
}
@@ -333,8 +323,16 @@ void BrowserActionView::HideActivePopup() {
void BrowserActionView::OnPopupShown(bool grant_tab_permissions) {
delegate_->SetPopupOwner(this);
- if (grant_tab_permissions)
- SetButtonPushed();
+ // If this was through direct user action, we press the menu button.
+ if (grant_tab_permissions) {
+ // We set the state of the menu button we're using as a reference view,
+ // which is either this or the overflow reference view.
+ // This cast is safe because GetReferenceViewForPopup returns either |this|
+ // or delegate_->GetOverflowReferenceView(), which returns a MenuButton.
+ views::MenuButton* reference_view =
+ static_cast<views::MenuButton*>(GetReferenceViewForPopup());
+ pressed_lock_.reset(new views::MenuButton::PressedLock(reference_view));
+ }
}
void BrowserActionView::CleanupPopup() {
@@ -342,14 +340,6 @@ void BrowserActionView::CleanupPopup() {
// performing the rest of the cleanup in OnWidgetDestroyed()) because
// OnWidgetDestroyed() can be called asynchronously from Close(), and we need
// to keep the delegate's popup owner up-to-date.
- SetButtonNotPushed();
delegate_->SetPopupOwner(NULL);
-}
-
-void BrowserActionView::OnWillShowContextMenus() {
- SetButtonPushed();
-}
-
-void BrowserActionView::OnContextMenuDone() {
- SetButtonNotPushed();
+ pressed_lock_.reset(); // Unpress the menu button if it was pressed.
}
« no previous file with comments | « chrome/browser/ui/views/toolbar/browser_action_view.h ('k') | chrome/browser/ui/views/toolbar/browser_actions_container.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698