Index: chrome/browser/cocoa/browser_window_controller.mm |
=================================================================== |
--- chrome/browser/cocoa/browser_window_controller.mm (revision 23676) |
+++ chrome/browser/cocoa/browser_window_controller.mm (working copy) |
@@ -9,6 +9,7 @@ |
#import "base/scoped_nsobject.h" |
#include "base/sys_string_conversions.h" |
#include "chrome/app/chrome_dll_resource.h" // IDC_* |
+#include "chrome/browser/bookmarks/bookmark_editor.h" |
#include "chrome/browser/browser.h" |
#include "chrome/browser/browser_list.h" |
#include "chrome/browser/browser_process.h" |
@@ -20,6 +21,7 @@ |
#include "chrome/browser/tab_contents/tab_contents_view.h" |
#include "chrome/browser/tabs/tab_strip_model.h" |
#import "chrome/browser/cocoa/bookmark_bar_controller.h" |
+#import "chrome/browser/cocoa/bookmark_editor_controller.h" |
#import "chrome/browser/cocoa/browser_window_cocoa.h" |
#import "chrome/browser/cocoa/browser_window_controller.h" |
#import "chrome/browser/cocoa/download_shelf_controller.h" |
@@ -936,6 +938,53 @@ |
return theme_ ? theme_ : [GTMTheme defaultTheme]; |
} |
+- (NSPoint)topLeftForBubble { |
+ NSRect rect = [toolbarController_ starButtonInWindowCoordinates]; |
+ NSPoint p = NSMakePoint(NSMinX(rect), NSMinY(rect)); // bottom left |
+ return p; |
+} |
+ |
+// Show the bookmark bubble (e.g. user just clicked on the STAR). |
+- (void)showBookmarkBubbleForURL:(const GURL&)url |
+ alreadyBookmarked:(BOOL)alreadyBookmarked { |
+ BookmarkModel* model = browser_->profile()->GetBookmarkModel(); |
+ const BookmarkNode* node = model->GetMostRecentlyAddedNodeForURL(url); |
+ |
+ // Bring up the bubble. But clicking on STAR while the bubble is |
+ // open should make it go away. |
+ if (bookmarkBubbleController_.get()) { |
+ [self doneWithBubbleController:bookmarkBubbleController_.get()]; |
+ } else { |
+ bookmarkBubbleController_.reset([[BookmarkBubbleController alloc] |
+ initWithDelegate:self |
+ parentWindow:[self window] |
+ topLeftForBubble:[self topLeftForBubble] |
+ model:model |
+ node:node |
+ alreadyBookmarked:alreadyBookmarked]); |
+ [bookmarkBubbleController_ showWindow]; |
+ } |
+} |
+ |
+// Implement BookmarkBubbleControllerDelegate |
+- (void)editBookmarkNode:(const BookmarkNode*)node { |
+ // A BookmarkEditorController is a sheet that owns itself, and |
+ // deallocates itself when closed. |
+ [[[BookmarkEditorController alloc] |
+ initWithParentWindow:[self window] |
+ profile:browser_->profile() |
+ parent:node->GetParent() |
+ node:node |
+ configuration:BookmarkEditor::SHOW_TREE |
+ handler:NULL] |
+ runAsModalSheet]; |
+} |
+ |
+// Implement BookmarkBubbleControllerDelegate |
+- (void)doneWithBubbleController:(BookmarkBubbleController*)controller { |
+ bookmarkBubbleController_.reset(nil); |
+} |
+ |
@end |
@implementation BrowserWindowController (Private) |