| Index: chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_controller.mm
|
| ===================================================================
|
| --- chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_controller.mm (revision 75353)
|
| +++ chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_controller.mm (working copy)
|
| @@ -458,7 +458,8 @@
|
| // coordinates). The top left is positioned in a manner similar to
|
| // cascading menus. Windows may grow to either the right or left of
|
| // their parent (if a sub-folder) so we need to know |windowWidth|.
|
| -- (NSPoint)windowTopLeftForWidth:(int)windowWidth {
|
| +- (NSPoint)windowTopLeftForWidth:(int)windowWidth height:(int)windowHeight {
|
| + CGFloat kMinSqueezedMenuHeight = bookmarks::kBookmarkFolderButtonHeight * 2.0;
|
| NSPoint newWindowTopLeft;
|
| if (![parentController_ isKindOfClass:[self class]]) {
|
| // If we're not popping up from one of ourselves, we must be
|
| @@ -485,6 +486,18 @@
|
| newWindowTopLeft.x = std::max(newWindowTopLeft.x - spillOff,
|
| NSMinX(screenFrame));
|
| }
|
| + // The menu looks bad when it is squeezed up against the bottom of the
|
| + // screen and ends up being only a few pixels tall. If it meets the
|
| + // threshold for this case, instead show the menu above the button.
|
| + NSRect visFrame = [[[parentButton_ window] screen] visibleFrame];
|
| + CGFloat availableVerticalSpace = newWindowTopLeft.y -
|
| + (NSMinY(visFrame) + bookmarks::kScrollWindowVerticalMargin);
|
| + if ((availableVerticalSpace < kMinSqueezedMenuHeight) &&
|
| + (windowHeight > availableVerticalSpace)) {
|
| + newWindowTopLeft.y = std::min(
|
| + newWindowTopLeft.y + windowHeight + NSHeight([parentButton_ frame]),
|
| + NSMaxY(visFrame));
|
| + }
|
| } else {
|
| // Parent is a folder: expose as much as we can vertically; grow right/left.
|
| newWindowTopLeft.x = [self childFolderWindowLeftForWidth:windowWidth];
|
| @@ -702,7 +715,8 @@
|
| folderFrame.size.height += deltaMenuHeight;
|
| [folderView_ setFrameSize:folderFrame.size];
|
| CGFloat windowWidth = [self adjustButtonWidths] + padding_;
|
| - NSPoint newWindowTopLeft = [self windowTopLeftForWidth:windowWidth];
|
| + NSPoint newWindowTopLeft = [self windowTopLeftForWidth:windowWidth
|
| + height:deltaMenuHeight];
|
| CGFloat left = newWindowTopLeft.x;
|
| NSSize newSize = NSMakeSize(windowWidth, deltaMenuHeight);
|
| [self adjustWindowLeft:left size:newSize scrollingBy:0.0];
|
| @@ -762,7 +776,8 @@
|
| // base the window width on this ideal button width.
|
| CGFloat buttonWidth = [self adjustButtonWidths];
|
| CGFloat windowWidth = buttonWidth + padding_;
|
| - NSPoint newWindowTopLeft = [self windowTopLeftForWidth:windowWidth];
|
| + NSPoint newWindowTopLeft = [self windowTopLeftForWidth:windowWidth
|
| + height:height];
|
| // Make sure as much of a submenu is exposed (which otherwise would be a
|
| // problem if the parent button is close to the bottom of the screen).
|
| if ([parentController_ isKindOfClass:[self class]]) {
|
|
|