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

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: 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..e66650171931e96d9e030beefdcb04e0719a9d4a 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);
}
@@ -334,7 +319,7 @@ void BrowserActionView::HideActivePopup() {
void BrowserActionView::OnPopupShown(bool grant_tab_permissions) {
delegate_->SetPopupOwner(this);
if (grant_tab_permissions)
- SetButtonPushed();
+ SetMenuVisible(true);
}
void BrowserActionView::CleanupPopup() {
@@ -342,14 +327,27 @@ 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();
+ SetMenuVisible(false);
delegate_->SetPopupOwner(NULL);
}
void BrowserActionView::OnWillShowContextMenus() {
- SetButtonPushed();
+ SetMenuVisible(true);
}
void BrowserActionView::OnContextMenuDone() {
- SetButtonNotPushed();
+ SetMenuVisible(false);
+}
+
+void BrowserActionView::SetMenuVisible(bool menu_visible) {
+ // 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());
+ if (menu_visible)
+ reference_view->AttachMenu();
+ else
+ reference_view->DetachMenu();
}

Powered by Google App Engine
This is Rietveld 408576698