| Index: chrome/browser/ui/cocoa/bookmarks/bookmark_bubble_controller.mm
|
| diff --git a/chrome/browser/ui/cocoa/bookmarks/bookmark_bubble_controller.mm b/chrome/browser/ui/cocoa/bookmarks/bookmark_bubble_controller.mm
|
| index 61e51ac245cb50bc28d58345192c4e9fbc88deef..04112a5d13833a538e557210baffbf19ca98675b 100644
|
| --- a/chrome/browser/ui/cocoa/bookmarks/bookmark_bubble_controller.mm
|
| +++ b/chrome/browser/ui/cocoa/bookmarks/bookmark_bubble_controller.mm
|
| @@ -70,7 +70,6 @@ void BookmarkBubbleNotificationBridge::Observe(
|
| @interface BookmarkBubbleController (PrivateAPI)
|
| - (void)updateBookmarkNode;
|
| - (void)fillInFolderList;
|
| -- (void)parentWindowWillClose:(NSNotification*)notification;
|
| @end
|
|
|
| @implementation BookmarkBubbleController
|
| @@ -91,26 +90,19 @@ void BookmarkBubbleNotificationBridge::Observe(
|
| model:(BookmarkModel*)model
|
| node:(const BookmarkNode*)node
|
| alreadyBookmarked:(BOOL)alreadyBookmarked {
|
| - NSString* nibPath =
|
| - [base::mac::FrameworkBundle() pathForResource:@"BookmarkBubble"
|
| - ofType:@"nib"];
|
| - if ((self = [super initWithWindowNibPath:nibPath owner:self])) {
|
| - parentWindow_ = parentWindow;
|
| + if ((self = [super initWithWindowNibPath:@"BookmarkBubble"
|
| + parentWindow:parentWindow
|
| + anchoredAt:NSZeroPoint])) {
|
| model_ = model;
|
| node_ = node;
|
| alreadyBookmarked_ = alreadyBookmarked;
|
| -
|
| - // Watch to see if the parent window closes, and if so, close this one.
|
| - NSNotificationCenter* center = [NSNotificationCenter defaultCenter];
|
| - [center addObserver:self
|
| - selector:@selector(parentWindowWillClose:)
|
| - name:NSWindowWillCloseNotification
|
| - object:parentWindow_];
|
| }
|
| return self;
|
| }
|
|
|
| - (void)awakeFromNib {
|
| + [super awakeFromNib];
|
| +
|
| // Check if NSTextFieldCell supports the method. This check is in place as
|
| // only 10.6 and greater support the setUsesSingleLineMode method.
|
| // TODO(kushi.p): Remove this when the project hits a 10.6+ only state.
|
| @@ -121,11 +113,6 @@ void BookmarkBubbleNotificationBridge::Observe(
|
| }
|
| }
|
|
|
| -- (void)dealloc {
|
| - [[NSNotificationCenter defaultCenter] removeObserver:self];
|
| - [super dealloc];
|
| -}
|
| -
|
| // If this is a new bookmark somewhere visible (e.g. on the bookmark
|
| // bar), pulse it. Else, call ourself recursively with our parent
|
| // until we find something visible to pulse.
|
| @@ -177,42 +164,37 @@ void BookmarkBubbleNotificationBridge::Observe(
|
| [self close];
|
| }
|
|
|
| -- (void)parentWindowWillClose:(NSNotification*)notification {
|
| - [self close];
|
| -}
|
| -
|
| - (void)windowWillClose:(NSNotification*)notification {
|
| // We caught a close so we don't need to watch for the parent closing.
|
| - [[NSNotificationCenter defaultCenter] removeObserver:self];
|
| bookmark_observer_.reset(NULL);
|
| chrome_observer_.reset(NULL);
|
| [self stopPulsingBookmarkButton];
|
| - [self autorelease];
|
| + [super windowWillClose:notification];
|
| }
|
|
|
| -// We want this to be a child of a browser window. addChildWindow:
|
| -// (called from this function) will bring the window on-screen;
|
| -// unfortunately, [NSWindowController showWindow:] will also bring it
|
| -// on-screen (but will cause unexpected changes to the window's
|
| -// position). We cannot have an addChildWindow: and a subsequent
|
| -// showWindow:. Thus, we have our own version.
|
| +// Override -[BaseBubbleController showWindow:] to tweak bubble location and
|
| +// set up UI elements.
|
| - (void)showWindow:(id)sender {
|
| + NSWindow* window = [self window]; // Force load the NIB.
|
| + NSWindow* parentWindow = self.parentWindow;
|
| BrowserWindowController* bwc =
|
| - [BrowserWindowController browserWindowControllerForWindow:parentWindow_];
|
| + [BrowserWindowController browserWindowControllerForWindow:parentWindow];
|
| [bwc lockBarVisibilityForOwner:self withAnimation:NO delay:NO];
|
| - NSWindow* window = [self window]; // completes nib load
|
| - [bubble_ setArrowLocation:info_bubble::kTopRight];
|
| +
|
| + InfoBubbleView* bubble = self.bubble;
|
| + [bubble setArrowLocation:info_bubble::kTopRight];
|
| +
|
| // Insure decent positioning even in the absence of a browser controller,
|
| // which will occur for some unit tests.
|
| - NSPoint arrowtip = bwc ? [bwc bookmarkBubblePoint] :
|
| + NSPoint arrowTip = bwc ? [bwc bookmarkBubblePoint] :
|
| NSMakePoint([window frame].size.width, [window frame].size.height);
|
| - NSPoint origin = [parentWindow_ convertBaseToScreen:arrowtip];
|
| - NSPoint bubbleArrowtip = [bubble_ arrowTip];
|
| - bubbleArrowtip = [bubble_ convertPoint:bubbleArrowtip toView:nil];
|
| - origin.y -= bubbleArrowtip.y;
|
| - origin.x -= bubbleArrowtip.x;
|
| - [window setFrameOrigin:origin];
|
| - [parentWindow_ addChildWindow:window ordered:NSWindowAbove];
|
| + arrowTip = [parentWindow convertBaseToScreen:arrowTip];
|
| + NSPoint bubbleArrowTip = [bubble arrowTip];
|
| + bubbleArrowTip = [bubble convertPoint:bubbleArrowTip toView:nil];
|
| + arrowTip.y -= bubbleArrowTip.y;
|
| + arrowTip.x -= bubbleArrowTip.x;
|
| + [window setFrameOrigin:arrowTip];
|
| +
|
| // Default is IDS_BOOKMARK_BUBBLE_PAGE_BOOKMARK; "Bookmark".
|
| // If adding for the 1st time the string becomes "Bookmark Added!"
|
| if (!alreadyBookmarked_) {
|
| @@ -237,24 +219,13 @@ void BookmarkBubbleNotificationBridge::Observe(
|
| // Pulse something interesting on the bookmark bar.
|
| [self startPulsingBookmarkButton:node_];
|
|
|
| + [parentWindow addChildWindow:window ordered:NSWindowAbove];
|
| [window makeKeyAndOrderFront:self];
|
| }
|
|
|
| - (void)close {
|
| - [[BrowserWindowController browserWindowControllerForWindow:parentWindow_]
|
| + [[BrowserWindowController browserWindowControllerForWindow:self.parentWindow]
|
| releaseBarVisibilityForOwner:self withAnimation:YES delay:NO];
|
| - [parentWindow_ removeChildWindow:[self window]];
|
| -
|
| - // If you quit while the bubble is open, sometimes we get a
|
| - // DidResignKey before we get our parent's WindowWillClose and
|
| - // sometimes not. We protect against a multiple close (or reference
|
| - // to parentWindow_ at a bad time) by clearing it out once we're
|
| - // done, and by removing ourself from future notifications.
|
| - [[NSNotificationCenter defaultCenter]
|
| - removeObserver:self
|
| - name:NSWindowWillCloseNotification
|
| - object:parentWindow_];
|
| - parentWindow_ = nil;
|
|
|
| [super close];
|
| }
|
| @@ -304,7 +275,7 @@ void BookmarkBubbleNotificationBridge::Observe(
|
| // It is possible that due to model change our parent window has been closed
|
| // but the popup is still showing and able to notify the controller of a
|
| // folder change. We ignore the sender in this case.
|
| - if (!parentWindow_)
|
| + if (!self.parentWindow)
|
| return;
|
| NSMenuItem* selected = [folderPopUpButton_ selectedItem];
|
| ChooseAnotherFolder* chooseItem = [[self class] chooseAnotherFolderObject];
|
| @@ -382,7 +353,7 @@ void BookmarkBubbleNotificationBridge::Observe(
|
| @end // BookmarkBubbleController
|
|
|
|
|
| -@implementation BookmarkBubbleController(ExposedForUnitTesting)
|
| +@implementation BookmarkBubbleController (ExposedForUnitTesting)
|
|
|
| + (NSString*)chooseAnotherFolderString {
|
| return l10n_util::GetNSStringWithFixup(
|
|
|