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

Side by Side 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/views/toolbar/browser_action_view.h" 5 #include "chrome/browser/ui/views/toolbar/browser_action_view.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/strings/utf_string_conversions.h" 9 #include "base/strings/utf_string_conversions.h"
10 #include "chrome/browser/chrome_notification_types.h" 10 #include "chrome/browser/chrome_notification_types.h"
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
123 void BrowserActionView::ButtonPressed(views::Button* sender, 123 void BrowserActionView::ButtonPressed(views::Button* sender,
124 const ui::Event& event) { 124 const ui::Event& event) {
125 view_controller_->ExecuteActionByUser(); 125 view_controller_->ExecuteActionByUser();
126 } 126 }
127 127
128 void BrowserActionView::UpdateState() { 128 void BrowserActionView::UpdateState() {
129 int tab_id = view_controller_->GetCurrentTabId(); 129 int tab_id = view_controller_->GetCurrentTabId();
130 if (tab_id < 0) 130 if (tab_id < 0)
131 return; 131 return;
132 132
133 if (!IsEnabled(tab_id)) { 133 if (!IsEnabled(tab_id))
134 SetState(views::CustomButton::STATE_DISABLED); 134 SetState(views::CustomButton::STATE_DISABLED);
135 } else {
136 SetState(menu_visible_ ?
137 views::CustomButton::STATE_PRESSED :
138 views::CustomButton::STATE_NORMAL);
139 }
140 135
141 gfx::ImageSkia icon = *view_controller_->GetIcon(tab_id).ToImageSkia(); 136 gfx::ImageSkia icon = *view_controller_->GetIcon(tab_id).ToImageSkia();
142 137
143 if (!icon.isNull()) { 138 if (!icon.isNull()) {
144 if (!extension_action()->GetIsVisible(tab_id)) 139 if (!extension_action()->GetIsVisible(tab_id))
145 icon = gfx::ImageSkiaOperations::CreateTransparentImage(icon, .25); 140 icon = gfx::ImageSkiaOperations::CreateTransparentImage(icon, .25);
146 141
147 ThemeService* theme = ThemeServiceFactory::GetForProfile( 142 ThemeService* theme = ThemeServiceFactory::GetForProfile(
148 view_controller_->browser()->profile()); 143 view_controller_->browser()->profile());
149 144
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
248 LabelButton::OnGestureEvent(event); 243 LabelButton::OnGestureEvent(event);
249 } 244 }
250 245
251 scoped_ptr<LabelButtonBorder> BrowserActionView::CreateDefaultBorder() const { 246 scoped_ptr<LabelButtonBorder> BrowserActionView::CreateDefaultBorder() const {
252 scoped_ptr<LabelButtonBorder> border = LabelButton::CreateDefaultBorder(); 247 scoped_ptr<LabelButtonBorder> border = LabelButton::CreateDefaultBorder();
253 border->set_insets(gfx::Insets(kBorderInset, kBorderInset, 248 border->set_insets(gfx::Insets(kBorderInset, kBorderInset,
254 kBorderInset, kBorderInset)); 249 kBorderInset, kBorderInset));
255 return border.Pass(); 250 return border.Pass();
256 } 251 }
257 252
258 void BrowserActionView::SetButtonPushed() {
259 SetState(views::CustomButton::STATE_PRESSED);
260 menu_visible_ = true;
261 }
262
263 void BrowserActionView::SetButtonNotPushed() {
264 SetState(views::CustomButton::STATE_NORMAL);
265 menu_visible_ = false;
266 }
267
268 bool BrowserActionView::IsEnabled(int tab_id) const { 253 bool BrowserActionView::IsEnabled(int tab_id) const {
269 return view_controller_->extension_action()->GetIsVisible(tab_id); 254 return view_controller_->extension_action()->GetIsVisible(tab_id);
270 } 255 }
271 256
272 gfx::ImageSkia BrowserActionView::GetIconWithBadge() { 257 gfx::ImageSkia BrowserActionView::GetIconWithBadge() {
273 int tab_id = view_controller_->GetCurrentTabId(); 258 int tab_id = view_controller_->GetCurrentTabId();
274 gfx::Size spacing(0, ToolbarView::kVertSpacing); 259 gfx::Size spacing(0, ToolbarView::kVertSpacing);
275 gfx::ImageSkia icon = *view_controller_->GetIcon(tab_id).ToImageSkia(); 260 gfx::ImageSkia icon = *view_controller_->GetIcon(tab_id).ToImageSkia();
276 if (!IsEnabled(tab_id)) 261 if (!IsEnabled(tab_id))
277 icon = gfx::ImageSkiaOperations::CreateTransparentImage(icon, .25); 262 icon = gfx::ImageSkiaOperations::CreateTransparentImage(icon, .25);
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
327 return delegate_->GetCurrentWebContents(); 312 return delegate_->GetCurrentWebContents();
328 } 313 }
329 314
330 void BrowserActionView::HideActivePopup() { 315 void BrowserActionView::HideActivePopup() {
331 delegate_->HideActivePopup(); 316 delegate_->HideActivePopup();
332 } 317 }
333 318
334 void BrowserActionView::OnPopupShown(bool grant_tab_permissions) { 319 void BrowserActionView::OnPopupShown(bool grant_tab_permissions) {
335 delegate_->SetPopupOwner(this); 320 delegate_->SetPopupOwner(this);
336 if (grant_tab_permissions) 321 if (grant_tab_permissions)
337 SetButtonPushed(); 322 SetMenuVisible(true);
338 } 323 }
339 324
340 void BrowserActionView::CleanupPopup() { 325 void BrowserActionView::CleanupPopup() {
341 // We need to do these actions synchronously (instead of closing and then 326 // We need to do these actions synchronously (instead of closing and then
342 // performing the rest of the cleanup in OnWidgetDestroyed()) because 327 // performing the rest of the cleanup in OnWidgetDestroyed()) because
343 // OnWidgetDestroyed() can be called asynchronously from Close(), and we need 328 // OnWidgetDestroyed() can be called asynchronously from Close(), and we need
344 // to keep the delegate's popup owner up-to-date. 329 // to keep the delegate's popup owner up-to-date.
345 SetButtonNotPushed(); 330 SetMenuVisible(false);
346 delegate_->SetPopupOwner(NULL); 331 delegate_->SetPopupOwner(NULL);
347 } 332 }
348 333
349 void BrowserActionView::OnWillShowContextMenus() { 334 void BrowserActionView::OnWillShowContextMenus() {
350 SetButtonPushed(); 335 SetMenuVisible(true);
351 } 336 }
352 337
353 void BrowserActionView::OnContextMenuDone() { 338 void BrowserActionView::OnContextMenuDone() {
354 SetButtonNotPushed(); 339 SetMenuVisible(false);
355 } 340 }
341
342 void BrowserActionView::SetMenuVisible(bool menu_visible) {
343 // We set the state of the menu button we're using as a reference view, which
344 // is either this or the overflow reference view.
345 // This cast is safe because GetReferenceViewForPopup returns either |this|
346 // or delegate_->GetOverflowReferenceView(), which returns a MenuButton.
347 views::MenuButton* reference_view =
348 static_cast<views::MenuButton*>(GetReferenceViewForPopup());
349 if (menu_visible)
350 reference_view->AttachMenu();
351 else
352 reference_view->DetachMenu();
353 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698