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

Unified Diff: chrome/browser/ui/cocoa/extensions/browser_action_button.mm

Issue 869873008: [Extensions Toolbar] Move some popup logic to be platform-agnostic (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 11 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/cocoa/extensions/browser_action_button.mm
diff --git a/chrome/browser/ui/cocoa/extensions/browser_action_button.mm b/chrome/browser/ui/cocoa/extensions/browser_action_button.mm
index 1dd98b22600d35447c32b167873b12e309a3b04b..f9b1a3c34f8e959e69330d52db37dcc9139037a0 100644
--- a/chrome/browser/ui/cocoa/extensions/browser_action_button.mm
+++ b/chrome/browser/ui/cocoa/extensions/browser_action_button.mm
@@ -10,7 +10,6 @@
#include "base/logging.h"
#include "base/memory/weak_ptr.h"
#include "base/strings/sys_string_conversions.h"
-#include "chrome/browser/extensions/extension_context_menu_model.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_window.h"
@@ -20,7 +19,6 @@
#import "chrome/browser/ui/cocoa/toolbar/toolbar_action_view_delegate_cocoa.h"
#import "chrome/browser/ui/cocoa/toolbar/toolbar_controller.h"
#import "chrome/browser/ui/cocoa/wrench_menu/wrench_menu_controller.h"
-#include "chrome/browser/ui/extensions/extension_action_view_controller.h"
#include "chrome/browser/ui/toolbar/toolbar_action_view_controller.h"
#include "grit/theme_resources.h"
#include "skia/ext/skia_utils_mac.h"
@@ -40,6 +38,11 @@ static const CGFloat kBrowserActionBadgeOriginYOffset = 5;
static const CGFloat kAnimationDuration = 0.2;
static const CGFloat kMinimumDragDistance = 5;
+@interface BrowserActionButton (Private)
Avi (use Gerrit) 2015/01/29 02:59:26 You can use a class extension by dropping the cont
Devlin 2015/01/29 17:42:08 Ooh, class extensions vs categories. Nifty. Than
+- (void)endDrag;
+- (void)updateHighlightedState;
+@end
+
// A class to bridge the ToolbarActionViewController and the
// BrowserActionButton.
class ToolbarActionViewDelegateBridge : public ToolbarActionViewDelegateCocoa {
@@ -52,11 +55,15 @@ class ToolbarActionViewDelegateBridge : public ToolbarActionViewDelegateCocoa {
// Shows the context menu for the owning action.
void ShowContextMenu();
+ bool user_shown_popup_visible() const { return user_shown_popup_visible_; }
+
private:
// ToolbarActionViewDelegateCocoa:
ToolbarActionViewController* GetPreferredPopupViewController() override;
content::WebContents* GetCurrentWebContents() const override;
void UpdateState() override;
+ void OnPopupShown(bool by_user) override;
+ void OnPopupClosed() override;
NSPoint GetPopupPoint() override;
// A helper method to implement showing the context menu.
@@ -71,6 +78,9 @@ class ToolbarActionViewDelegateBridge : public ToolbarActionViewDelegateCocoa {
// The ToolbarActionViewController for which this is the delegate. Weak.
ToolbarActionViewController* viewController_;
+ // Whether or not a popup is visible from a user action.
+ bool user_shown_popup_visible_;
+
base::WeakPtrFactory<ToolbarActionViewDelegateBridge> weakFactory_;
DISALLOW_COPY_AND_ASSIGN(ToolbarActionViewDelegateBridge);
@@ -83,6 +93,7 @@ ToolbarActionViewDelegateBridge::ToolbarActionViewDelegateBridge(
: owner_(owner),
controller_(controller),
viewController_(viewController),
+ user_shown_popup_visible_(false),
weakFactory_(this) {
viewController_->SetDelegate(this);
}
@@ -128,6 +139,17 @@ void ToolbarActionViewDelegateBridge::UpdateState() {
[owner_ updateState];
}
+void ToolbarActionViewDelegateBridge::OnPopupShown(bool by_user) {
+ if (by_user)
+ user_shown_popup_visible_ = true;
+ [owner_ updateHighlightedState];
+}
+
+void ToolbarActionViewDelegateBridge::OnPopupClosed() {
+ user_shown_popup_visible_ = false;
+ [owner_ updateHighlightedState];
+}
+
NSPoint ToolbarActionViewDelegateBridge::GetPopupPoint() {
return [controller_ popupPointForId:[owner_ viewController]->GetId()];
}
@@ -158,10 +180,6 @@ void ToolbarActionViewDelegateBridge::DoShowContextMenu() {
forWebContents:(content::WebContents*)webContents;
@end
-@interface BrowserActionButton (Private)
-- (void)endDrag;
-@end
-
@implementation BrowserActionButton
@synthesize isBeingDragged = isBeingDragged_;
@@ -253,10 +271,10 @@ void ToolbarActionViewDelegateBridge::DoShowContextMenu() {
// for now, and revisit it at a later date.
if (NSPointInRect(location, [self bounds]) &&
![browserActionsController_ isOverflow]) {
- [[self cell] setHighlighted:YES];
dragCouldStart_ = YES;
dragStartPoint_ = [self convertPoint:[theEvent locationInWindow]
fromView:nil];
+ [self updateHighlightedState];
}
}
@@ -328,13 +346,24 @@ void ToolbarActionViewDelegateBridge::DoShowContextMenu() {
[super mouseUp:theEvent];
}
}
+ [self updateHighlightedState];
}
- (void)endDrag {
isBeingDragged_ = NO;
[[NSNotificationCenter defaultCenter]
postNotificationName:kBrowserActionButtonDragEndNotification object:self];
- [[self cell] setHighlighted:NO];
+}
+
+- (void)updateHighlightedState {
+ // The button's cell is highlighted if either the popup is showing by a user
+ // action, or the user is about to drag the button, unless the button is
+ // overflowed (in which case it is never highlighted).
+ if ([self superview] && ![browserActionsController_ isOverflow]) {
+ BOOL highlighted = viewControllerDelegate_->user_shown_popup_visible() ||
+ dragCouldStart_;
+ [[self cell] setHighlighted:highlighted];
+ }
}
- (void)setFrame:(NSRect)frameRect animate:(BOOL)animate {

Powered by Google App Engine
This is Rietveld 408576698