Index: chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller.mm |
=================================================================== |
--- chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller.mm (revision 91882) |
+++ chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller.mm (working copy) |
@@ -843,14 +843,17 @@ |
return (AnimatableView*)[self view]; |
} |
-// Position the off-the-side chevron to the left of the otherBookmarks button. |
+// Position the off-the-side chevron to the left of the otherBookmarks button, |
+// unless it's hidden in which case it's right aligned on top of it. |
- (void)positionOffTheSideButton { |
NSRect frame = [offTheSideButton_ frame]; |
frame.size.height = bookmarks::kBookmarkFolderButtonHeight; |
- if (otherBookmarksButton_.get()) { |
+ if (otherBookmarksButton_.get() && ![otherBookmarksButton_ isHidden]) { |
frame.origin.x = ([otherBookmarksButton_ frame].origin.x - |
(frame.size.width + |
bookmarks::kBookmarkHorizontalPadding)); |
+ } else { |
+ frame.origin.x = (NSMaxX([otherBookmarksButton_ frame]) - frame.size.width); |
} |
[offTheSideButton_ setFrame:frame]; |
} |
@@ -1314,12 +1317,25 @@ |
} |
} |
+// Shows or hides the Other Bookmarks button as appropriate, and returns |
+// whether it ended up visible. |
+- (BOOL)setOtherBookmarksButtonVisibility { |
+ if (!otherBookmarksButton_.get()) |
+ return NO; |
+ |
+ BOOL visible = ![otherBookmarksButton_ bookmarkNode]->empty(); |
+ [otherBookmarksButton_ setHidden:!visible]; |
+ return visible; |
+} |
+ |
// Create the button for "Other Bookmarks" on the right of the bar. |
- (void)createOtherBookmarksButton { |
// Can't create this until the model is loaded, but only need to |
// create it once. |
- if (otherBookmarksButton_.get()) |
+ if (otherBookmarksButton_.get()) { |
+ [self setOtherBookmarksButtonVisibility]; |
return; |
+ } |
// TODO(jrg): remove duplicate code |
NSCell* cell = [self cellForBookmarkNode:bookmarkModel_->other_node()]; |
@@ -1345,6 +1361,8 @@ |
[button setAction:@selector(openBookmarkFolderFromButton:)]; |
[buttonView_ addSubview:button]; |
+ [self setOtherBookmarksButtonVisibility]; |
+ |
// Now that it's here, move the chevron over. |
[self positionOffTheSideButton]; |
} |
@@ -1554,9 +1572,11 @@ |
CGFloat maxViewX = NSMaxX([[self view] bounds]); |
NSButton* otherBookmarksButton = otherBookmarksButton_.get(); |
// If necessary, pull in the width to account for the Other Bookmarks button. |
- if (otherBookmarksButton_) |
+ if ([self setOtherBookmarksButtonVisibility]) |
maxViewX = [otherBookmarksButton frame].origin.x - |
bookmarks::kBookmarkHorizontalPadding; |
+ |
+ [self positionOffTheSideButton]; |
// If we're already overflowing, then we need to account for the chevron. |
if (barCount > displayedButtonCount_) |
maxViewX = [offTheSideButton_ frame].origin.x - |
@@ -2096,6 +2116,8 @@ |
// If we go from 0 --> 1 bookmarks we may need to hide the |
// "bookmarks go here" text container. |
[self showOrHideNoItemContainerForNode:model->GetBookmarkBarNode()]; |
+ // Cope with chevron or "Other Bookmarks" buttons possibly changing state. |
+ [self reconfigureBookmarkBar]; |
} |
// TODO(jrg): for now this is brute force. |
@@ -2121,9 +2143,8 @@ |
// If the bar is one of the parents we may need to update the visibility |
// of the "bookmarks go here" presentation. |
[self showOrHideNoItemContainerForNode:model->GetBookmarkBarNode()]; |
- // If we moved the only item on the "off the side" menu somewhere |
- // else, we may no longer need to show it. |
- [self configureOffTheSideButtonContentsAndVisibility]; |
+ // Cope with chevron or "Other Bookmarks" buttons possibly changing state. |
+ [self reconfigureBookmarkBar]; |
} |
- (void)nodeRemoved:(BookmarkModel*)model |