Chromium Code Reviews| Index: chrome/browser/ui/cocoa/extensions/browser_actions_controller.mm |
| diff --git a/chrome/browser/ui/cocoa/extensions/browser_actions_controller.mm b/chrome/browser/ui/cocoa/extensions/browser_actions_controller.mm |
| index 94ac7d7b293f77dfb29bd51abbc58828086954f6..96f53e0766a234120ddc87d7fc6363b0d0c17374 100644 |
| --- a/chrome/browser/ui/cocoa/extensions/browser_actions_controller.mm |
| +++ b/chrome/browser/ui/cocoa/extensions/browser_actions_controller.mm |
| @@ -19,6 +19,7 @@ |
| #import "chrome/browser/ui/cocoa/extensions/browser_actions_container_view.h" |
| #import "chrome/browser/ui/cocoa/extensions/extension_popup_controller.h" |
| #import "chrome/browser/ui/cocoa/extensions/toolbar_actions_bar_bubble_mac.h" |
| +#import "chrome/browser/ui/cocoa/extensions/toolbar_actions_bar_bubble_views_presenter.h" |
| #import "chrome/browser/ui/cocoa/image_button_cell.h" |
| #import "chrome/browser/ui/cocoa/l10n_util.h" |
| #import "chrome/browser/ui/cocoa/menu_button.h" |
| @@ -142,10 +143,6 @@ const CGFloat kBrowserActionBubbleYOffset = 3.0; |
| - (void)createMessageBubble: |
| (std::unique_ptr<ToolbarActionsBarBubbleDelegate>)delegate; |
| -// Called when the window for the active bubble is closing, and sets the active |
| -// bubble to nil. |
| -- (void)bubbleWindowClosing:(NSNotification*)notification; |
| - |
| // Sets the current focused view. Should only be used for the overflow |
| // container. |
| - (void)setFocusedViewIndex:(NSInteger)index; |
| @@ -271,6 +268,10 @@ void ToolbarActionsBarBridge::ShowToolbarActionBubble( |
| new ToolbarActionsBar(toolbarActionsBarBridge_.get(), |
| browser_, |
| mainBar)); |
| + if (ui::MaterialDesignController::IsSecondaryUiMaterial()) { |
| + viewsBubblePresenter_ = |
| + base::MakeUnique<ToolbarActionsBarBubbleViewsPresenter>(self); |
| + } |
| containerView_ = container; |
| [containerView_ setMinWidth:toolbarActionsBar_->GetMinimumWidth()]; |
| @@ -403,6 +404,11 @@ void ToolbarActionsBarBridge::ShowToolbarActionBubble( |
| return [self preferredSize]; |
| } |
| +- (void)bubbleWindowClosing:(NSNotification*)notification { |
| + activeBubble_ = nil; |
| + toolbarActionsBar_->OnBubbleClosed(); |
| +} |
| + |
| - (void)updateMaxWidth { |
| const CGFloat ownMaxWidth = toolbarActionsBar_->GetMaximumWidth(); |
| containerView_.maxWidth = |
| @@ -730,10 +736,16 @@ void ToolbarActionsBarBridge::ShowToolbarActionBubble( |
| - (NSPoint)popupPointForView:(NSView*)view |
| withBounds:(NSRect)bounds { |
| - // Anchor point just above the center of the bottom. |
| - int y = [view isFlipped] ? NSMaxY(bounds) - kBrowserActionBubbleYOffset : |
| - kBrowserActionBubbleYOffset; |
| - NSPoint anchor = NSMakePoint(NSMidX(bounds), y); |
| + NSPoint anchor; |
| + if (ui::MaterialDesignController::IsSecondaryUiMaterial()) { |
| + // Anchor to the bottom-right of the button. |
| + anchor = NSMakePoint(NSMaxX(bounds), [view isFlipped] ? NSMaxY(bounds) : 0); |
| + } else { |
| + // Anchor point just above the center of the bottom. |
| + int y = [view isFlipped] ? NSMaxY(bounds) - kBrowserActionBubbleYOffset |
| + : kBrowserActionBubbleYOffset; |
| + anchor = NSMakePoint(NSMidX(bounds), y); |
| + } |
| // Convert the point to the container view's frame, and adjust for animation. |
| NSPoint anchorInContainer = |
| [containerView_ convertPoint:anchor fromView:view]; |
| @@ -806,7 +818,15 @@ void ToolbarActionsBarBridge::ShowToolbarActionBubble( |
| NSPoint anchor = [self popupPointForView:anchorView |
| withBounds:[anchorView bounds]]; |
| - anchor = ui::ConvertPointFromWindowToScreen([containerView_ window], anchor); |
| + NSWindow* parentWindow = [containerView_ window]; |
| + anchor = ui::ConvertPointFromWindowToScreen(parentWindow, anchor); |
| + if (viewsBubblePresenter_) { |
| + viewsBubblePresenter_->PresentAt(std::move(delegate), parentWindow, anchor, |
| + anchoredToAction); |
| + // No need to set |activeBubble_| as it's only used for Cocoa tests. |
|
Devlin
2017/03/09 02:49:48
Maybe also comment that bubbleWindowClosing will b
tapted
2017/03/09 10:24:15
Done.
|
| + return; |
| + } |
| + |
| activeBubble_ = [[ToolbarActionsBarBubbleMac alloc] |
| initWithParentWindow:[containerView_ window] |
| anchorPoint:anchor |
| @@ -820,11 +840,6 @@ void ToolbarActionsBarBridge::ShowToolbarActionBubble( |
| [activeBubble_ showWindow:nil]; |
| } |
| -- (void)bubbleWindowClosing:(NSNotification*)notification { |
| - activeBubble_ = nil; |
| - toolbarActionsBar_->OnBubbleClosed(); |
| -} |
| - |
| - (void)setFocusedViewIndex:(NSInteger)index { |
| DCHECK(isOverflow_); |
| focusedViewIndex_ = index; |