diff options
-rw-r--r-- | chrome/browser/cocoa/bookmark_bar_controller.mm | 7 | ||||
-rw-r--r-- | chrome/browser/cocoa/bookmark_bar_folder_controller.mm | 14 | ||||
-rw-r--r-- | chrome/browser/cocoa/bookmark_button_cell.mm | 4 |
3 files changed, 22 insertions, 3 deletions
diff --git a/chrome/browser/cocoa/bookmark_bar_controller.mm b/chrome/browser/cocoa/bookmark_bar_controller.mm index 245f599..89d4273 100644 --- a/chrome/browser/cocoa/bookmark_bar_controller.mm +++ b/chrome/browser/cocoa/bookmark_bar_controller.mm @@ -1373,6 +1373,7 @@ const NSTimeInterval kBookmarkBarAnimationDuration = 0.12; if (NSMaxX([button frame]) < maxViewX) break; [buttons_ removeLastObject]; + [button setDelegate:nil]; [button removeFromSuperview]; --displayedButtonCount_; } @@ -1440,7 +1441,10 @@ const NSTimeInterval kBookmarkBarAnimationDuration = 0.12; // Delete all buttons (bookmarks, chevron, "other bookmarks") from the // bookmark bar; reset knowledge of bookmarks. - (void)clearBookmarkBar { - [buttons_ makeObjectsPerformSelector:@selector(removeFromSuperview)]; + for (BookmarkButton* button in buttons_.get()) { + [button setDelegate:nil]; + [button removeFromSuperview]; + } [buttons_ removeAllObjects]; [self clearMenuTagMap]; displayedButtonCount_ = 0; @@ -2379,6 +2383,7 @@ static BOOL ValueInRangeInclusive(CGFloat low, CGFloat value, CGFloat high) { poofPoint = [oldButton convertPoint:poofPoint toView:nil]; poofPoint = [[oldButton window] convertBaseToScreen:poofPoint]; NSRect oldFrame = [oldButton frame]; + [oldButton setDelegate:nil]; [oldButton removeFromSuperview]; if (animate && !ignoreAnimations_ && [self isVisible]) NSShowAnimationEffect(NSAnimationEffectDisappearingItemDefault, poofPoint, diff --git a/chrome/browser/cocoa/bookmark_bar_folder_controller.mm b/chrome/browser/cocoa/bookmark_bar_folder_controller.mm index 34cfd20..26e498a 100644 --- a/chrome/browser/cocoa/bookmark_bar_folder_controller.mm +++ b/chrome/browser/cocoa/bookmark_bar_folder_controller.mm @@ -146,6 +146,14 @@ const CGFloat kScrollWindowVerticalMargin = 0.0; [self removeScrollTracking]; [self endScroll]; [hoverState_ draggingExited]; + + // Delegate pattern does not retain; make sure pointers to us are removed. + for (BookmarkButton* button in buttons_.get()) { + [button setDelegate:nil]; + [button setTarget:nil]; + [button setAction:nil]; + } + // Note: we don't need to // [NSObject cancelPreviousPerformRequestsWithTarget:self]; // Because all of our performSelector: calls use withDelay: which @@ -175,8 +183,10 @@ const CGFloat kScrollWindowVerticalMargin = 0.0; - (void)reconfigureMenu { [NSObject cancelPreviousPerformRequestsWithTarget:self]; - for (BookmarkButton* button in buttons_.get()) + for (BookmarkButton* button in buttons_.get()) { + [button setDelegate:nil]; [button removeFromSuperview]; + } [buttons_ removeAllObjects]; [self configureWindow]; } @@ -1222,6 +1232,7 @@ static BOOL ValueInRangeInclusive(CGFloat low, CGFloat value, CGFloat high) { if (parentNode->GetChildCount() == 1) { BookmarkButton* emptyButton = [buttons_ lastObject]; newButtonFrame = [emptyButton frame]; + [emptyButton setDelegate:nil]; [emptyButton removeFromSuperview]; [buttons_ removeLastObject]; } @@ -1349,6 +1360,7 @@ static BOOL ValueInRangeInclusive(CGFloat low, CGFloat value, CGFloat high) { buttonThatMouseIsIn_ = nil; } + [oldButton setDelegate:nil]; [oldButton removeFromSuperview]; if (animate && !ignoreAnimations_) NSShowAnimationEffect(NSAnimationEffectDisappearingItemDefault, poofPoint, diff --git a/chrome/browser/cocoa/bookmark_button_cell.mm b/chrome/browser/cocoa/bookmark_button_cell.mm index 48b7a7d..cc03904 100644 --- a/chrome/browser/cocoa/bookmark_button_cell.mm +++ b/chrome/browser/cocoa/bookmark_button_cell.mm @@ -180,6 +180,8 @@ // To implement "hover open a bookmark button to open the folder" // which feels like menus, we override NSButtonCell's mouseEntered: // and mouseExited:, then and pass them along to our owning control. +// Note: as verified in a debugger, mouseEntered: does NOT increase +// the retainCount of the cell or its owning control. - (void)mouseEntered:(NSEvent*)event { [super mouseEntered:event]; [[self controlView] mouseEntered:event]; @@ -187,8 +189,8 @@ // See comment above mouseEntered:, above. - (void)mouseExited:(NSEvent*)event { - [super mouseExited:event]; [[self controlView] mouseExited:event]; + [super mouseExited:event]; } - (void)setDrawFolderArrow:(BOOL)draw { |