Index: chrome/browser/ui/cocoa/browser/avatar_button.mm |
diff --git a/chrome/browser/ui/cocoa/browser/avatar_button.mm b/chrome/browser/ui/cocoa/browser/avatar_button.mm |
index d3e7c598c23b2f39ea4b727bf5e67dc667aee5ec..d052fe36649f777724970a5d8875b928fa60fb00 100644 |
--- a/chrome/browser/ui/cocoa/browser/avatar_button.mm |
+++ b/chrome/browser/ui/cocoa/browser/avatar_button.mm |
@@ -10,6 +10,7 @@ |
#include "chrome/browser/profiles/profile_info_cache.h" |
#include "chrome/browser/profiles/profile_manager.h" |
#include "chrome/browser/ui/browser.h" |
+#import "chrome/browser/ui/cocoa/browser/avatar_menu_bubble_controller.h" |
#import "chrome/browser/ui/cocoa/browser_window_controller.h" |
#import "chrome/browser/ui/cocoa/image_utils.h" |
#import "chrome/browser/ui/cocoa/menu_controller.h" |
@@ -25,7 +26,6 @@ |
@interface AvatarButton (Private) |
- (IBAction)buttonClicked:(id)sender; |
- (NSImage*)compositeImageWithShadow:(NSImage*)image; |
-- (void)updateMenu; |
- (void)updateAvatar; |
@end |
@@ -45,7 +45,6 @@ class Observer : public NotificationObserver { |
switch (type) { |
case chrome::NOTIFICATION_PROFILE_CACHED_INFO_CHANGED: |
[button_ updateAvatar]; |
- [button_ updateMenu]; |
break; |
default: |
NOTREACHED(); |
@@ -61,6 +60,12 @@ class Observer : public NotificationObserver { |
} // namespace AvatarButtonInternal |
+namespace { |
+ |
+const CGFloat kMenuYOffsetAdjust = 5.0; |
+ |
+} // namespace |
+ |
//////////////////////////////////////////////////////////////////////////////// |
@implementation AvatarButton |
@@ -68,7 +73,6 @@ class Observer : public NotificationObserver { |
- (id)initWithBrowser:(Browser*)browser { |
if ((self = [super init])) { |
browser_ = browser; |
- [self updateMenu]; |
// This view's single child view is a button with the same size and width as |
// the parent. Set it to automatically resize to the size of this view and |
@@ -112,9 +116,17 @@ class Observer : public NotificationObserver { |
- (IBAction)buttonClicked:(id)sender { |
DCHECK_EQ(button_.get(), sender); |
- [NSMenu popUpContextMenu:[menuController_ menu] |
- withEvent:[NSApp currentEvent] |
- forView:self]; |
+ |
+ NSPoint point = NSMakePoint(NSMidX([self bounds]), |
+ NSMinY([self bounds]) + kMenuYOffsetAdjust); |
+ point = [self convertPoint:point toView:nil]; |
+ point = [[self window] convertBaseToScreen:point]; |
+ |
+ // |menu| will automatically release itself on close. |
+ AvatarMenuBubbleController* menu = |
+ [[AvatarMenuBubbleController alloc] initWithBrowser:browser_ |
+ anchoredAt:point]; |
+ [menu showWindow:self]; |
} |
// This will take in an original image and redraw it with a shadow. |
@@ -147,13 +159,6 @@ class Observer : public NotificationObserver { |
return [destination.release() autorelease]; |
} |
-// Rebuilds the menu and menu controller. |
-- (void)updateMenu { |
- model_.reset(new ProfileMenuModel(browser_)); |
- menuController_.reset([[MenuController alloc] initWithModel:model_.get() |
- useWithPopUpButtonCell:NO]); |
-} |
- |
// Updates the avatar information from the profile cache. |
- (void)updateAvatar { |
ProfileInfoCache& cache = |