Index: chrome/browser/ui/cocoa/toolbar/toolbar_controller.mm |
diff --git a/chrome/browser/ui/cocoa/toolbar/toolbar_controller.mm b/chrome/browser/ui/cocoa/toolbar/toolbar_controller.mm |
index f71d45dd52cc728c465a1b9bf554379c8a176175..ea9f76d8a869d4f986512938cf399fc9daa9b0ae 100644 |
--- a/chrome/browser/ui/cocoa/toolbar/toolbar_controller.mm |
+++ b/chrome/browser/ui/cocoa/toolbar/toolbar_controller.mm |
@@ -81,6 +81,42 @@ const CGFloat kMinimumLocationBarWidth = 100.0; |
// The amount of left padding that the wrench menu should have. |
const CGFloat kWrenchMenuLeftPadding = 3.0; |
+class BrowserActionsContainerDelegate : |
+ public BrowserActionsContainerViewSizeDelegate { |
+ public: |
+ BrowserActionsContainerDelegate( |
+ AutocompleteTextField* location_bar, |
+ BrowserActionsContainerView* browser_actions_container_view); |
+ ~BrowserActionsContainerDelegate() override; |
+ |
+ private: |
+ // BrowserActionsContainerSizeDelegate: |
+ CGFloat GetMaxAllowedWidth() override; |
+ |
+ AutocompleteTextField* location_bar_; |
+ BrowserActionsContainerView* browser_actions_container_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(BrowserActionsContainerDelegate); |
+}; |
+ |
+BrowserActionsContainerDelegate::BrowserActionsContainerDelegate( |
+ AutocompleteTextField* location_bar, |
+ BrowserActionsContainerView* browser_actions_container_view) |
+ : location_bar_(location_bar), |
+ browser_actions_container_(browser_actions_container_view) { |
+ [browser_actions_container_ setDelegate:this]; |
+} |
+ |
+BrowserActionsContainerDelegate::~BrowserActionsContainerDelegate() { |
+ [browser_actions_container_ setDelegate:nil]; |
+} |
+ |
+CGFloat BrowserActionsContainerDelegate::GetMaxAllowedWidth() { |
+ CGFloat location_bar_flex = |
+ NSWidth([location_bar_ frame]) - kMinimumLocationBarWidth; |
+ return NSWidth([browser_actions_container_ frame]) + location_bar_flex; |
+} |
+ |
} // namespace |
@interface ToolbarController() |
@@ -93,7 +129,6 @@ const CGFloat kWrenchMenuLeftPadding = 3.0; |
- (void)pinLocationBarToLeftOfBrowserActionsContainerAndAnimate:(BOOL)animate; |
- (void)maintainMinimumLocationBarWidth; |
- (void)adjustBrowserActionsContainerForNewWindow:(NSNotification*)notification; |
-- (void)browserActionsContainerWillDrag:(NSNotification*)notification; |
- (void)browserActionsContainerDragged:(NSNotification*)notification; |
- (void)browserActionsVisibilityChanged:(NSNotification*)notification; |
- (void)browserActionsContainerWillAnimate:(NSNotification*)notification; |
@@ -184,6 +219,8 @@ class NotificationBridge : public WrenchMenuBadgeController::Delegate { |
- (void)dealloc { |
+ browserActionsContainerDelegate_.reset(); |
+ |
// Unset ViewIDs of toolbar elements. |
// ViewIDs of |toolbarView|, |reloadButton_|, |locationBar_| and |
// |browserActionsContainerView_| are handled by themselves. |
@@ -589,17 +626,15 @@ class NotificationBridge : public WrenchMenuBadgeController::Delegate { |
- (void)createBrowserActionButtons { |
if (!browserActionsController_.get()) { |
+ browserActionsContainerDelegate_.reset( |
+ new BrowserActionsContainerDelegate(locationBar_, |
+ browserActionsContainerView_)); |
browserActionsController_.reset([[BrowserActionsController alloc] |
initWithBrowser:browser_ |
containerView:browserActionsContainerView_ |
mainController:nil]); |
[[NSNotificationCenter defaultCenter] |
addObserver:self |
- selector:@selector(browserActionsContainerWillDrag:) |
- name:kBrowserActionGrippyWillDragNotification |
- object:browserActionsContainerView_]; |
- [[NSNotificationCenter defaultCenter] |
- addObserver:self |
selector:@selector(browserActionsContainerDragged:) |
name:kBrowserActionGrippyDraggingNotification |
object:browserActionsContainerView_]; |
@@ -637,24 +672,10 @@ class NotificationBridge : public WrenchMenuBadgeController::Delegate { |
- (void)browserActionsContainerDragged:(NSNotification*)notification { |
CGFloat locationBarWidth = NSWidth([locationBar_ frame]); |
locationBarAtMinSize_ = locationBarWidth <= kMinimumLocationBarWidth; |
- [browserActionsContainerView_ setCanDragLeft:!locationBarAtMinSize_]; |
- [browserActionsContainerView_ setGrippyPinned:locationBarAtMinSize_]; |
[self adjustLocationSizeBy: |
[browserActionsContainerView_ resizeDeltaX] animate:NO]; |
} |
-- (void)browserActionsContainerWillDrag:(NSNotification*)notification { |
- CGFloat deltaX = [[notification.userInfo objectForKey:kTranslationWithDelta] |
- floatValue]; |
- CGFloat locationBarWidth = NSWidth([locationBar_ frame]); |
- BOOL locationBarWillBeAtMinSize = |
- (locationBarWidth + deltaX) <= kMinimumLocationBarWidth; |
- |
- // Prevent the |browserActionsContainerView_| from dragging if the width of |
- // location bar will reach the minimum. |
- [browserActionsContainerView_ setCanDragLeft:!locationBarWillBeAtMinSize]; |
-} |
- |
- (void)browserActionsVisibilityChanged:(NSNotification*)notification { |
[self pinLocationBarToLeftOfBrowserActionsContainerAndAnimate:NO]; |
} |
@@ -665,7 +686,7 @@ class NotificationBridge : public WrenchMenuBadgeController::Delegate { |
- (void)pinLocationBarToLeftOfBrowserActionsContainerAndAnimate:(BOOL)animate { |
CGFloat locationBarXPos = NSMaxX([locationBar_ frame]); |
- CGFloat leftDistance; |
+ CGFloat leftDistance = 0.0; |
if ([browserActionsContainerView_ isHidden]) { |
CGFloat edgeXPos = [wrenchButton_ frame].origin.x; |