| Index: chrome/browser/cocoa/bookmark_bar_controller.mm
|
| ===================================================================
|
| --- chrome/browser/cocoa/bookmark_bar_controller.mm (revision 31745)
|
| +++ chrome/browser/cocoa/bookmark_bar_controller.mm (working copy)
|
| @@ -23,6 +23,7 @@
|
| #import "chrome/browser/cocoa/menu_button.h"
|
| #import "chrome/browser/cocoa/toolbar_controller.h"
|
| #import "chrome/browser/cocoa/view_resizer.h"
|
| +#include "chrome/browser/metrics/user_metrics.h"
|
| #include "chrome/browser/profile.h"
|
| #include "chrome/browser/tab_contents/tab_contents.h"
|
| #include "chrome/browser/tab_contents/tab_contents_view.h"
|
| @@ -64,8 +65,7 @@
|
| - (id)initWithBrowser:(Browser*)browser
|
| initialWidth:(float)initialWidth
|
| compressDelegate:(id<ToolbarCompressable>)compressDelegate
|
| - resizeDelegate:(id<ViewResizer>)resizeDelegate
|
| - urlDelegate:(id<BookmarkURLOpener>)urlDelegate {
|
| + resizeDelegate:(id<ViewResizer>)resizeDelegate {
|
| if ((self = [super initWithNibName:@"BookmarkBar"
|
| bundle:mac_util::MainAppBundle()])) {
|
| browser_ = browser;
|
| @@ -74,7 +74,6 @@
|
| buttons_.reset([[NSMutableArray alloc] init]);
|
| compressDelegate_ = compressDelegate;
|
| resizeDelegate_ = resizeDelegate;
|
| - urlDelegate_ = urlDelegate;
|
| tabObserver_.reset(
|
| new TabStripModelObserverBridge(browser_->tabstrip_model(), self));
|
|
|
| @@ -305,22 +304,31 @@
|
| return node;
|
| }
|
|
|
| -// At this time, the only item which ever gets disabled is "Open All
|
| -// Bookmarks".
|
| +// At this time, the only items which ever get disabled are the "Open All
|
| +// Bookmarks" options.
|
| - (BOOL)validateUserInterfaceItem:(id<NSValidatedUserInterfaceItem>)item {
|
| SEL action = [item action];
|
| - if ((action == @selector(openAllBookmarks:)) &&
|
| + if (((action == @selector(openAllBookmarks:)) ||
|
| + (action == @selector(openAllBookmarksNewWindow:)) ||
|
| + (action == @selector(openAllBookmarksIncognitoWindow:))) &&
|
| (![buttons_ count])) {
|
| return NO;
|
| }
|
| return YES;
|
| }
|
|
|
| +// Actually open the URL. This is the last chance for a unit test to
|
| +// override.
|
| +- (void)openURL:(GURL)url disposition:(WindowOpenDisposition)disposition {
|
| + BrowserList::GetLastActive()->OpenURL(url, GURL(), disposition,
|
| + PageTransition::AUTO_BOOKMARK);
|
| +}
|
| +
|
| - (IBAction)openBookmark:(id)sender {
|
| BookmarkNode* node = [self nodeFromButton:sender];
|
| - [urlDelegate_ openBookmarkURL:node->GetURL()
|
| - disposition:event_utils::WindowOpenDispositionFromNSEvent(
|
| - [NSApp currentEvent])];
|
| + WindowOpenDisposition disposition =
|
| + event_utils::WindowOpenDispositionFromNSEvent([NSApp currentEvent]);
|
| + [self openURL:node->GetURL() disposition:disposition];
|
| }
|
|
|
| // Given a NSMenuItem tag, return the appropriate bookmark node id.
|
| @@ -475,17 +483,17 @@
|
|
|
| - (IBAction)openBookmarkInNewForegroundTab:(id)sender {
|
| BookmarkNode* node = [self nodeFromMenuItem:sender];
|
| - [urlDelegate_ openBookmarkURL:node->GetURL() disposition:NEW_FOREGROUND_TAB];
|
| + [self openURL:node->GetURL() disposition:NEW_FOREGROUND_TAB];
|
| }
|
|
|
| - (IBAction)openBookmarkInNewWindow:(id)sender {
|
| BookmarkNode* node = [self nodeFromMenuItem:sender];
|
| - [urlDelegate_ openBookmarkURL:node->GetURL() disposition:NEW_WINDOW];
|
| + [self openURL:node->GetURL() disposition:NEW_WINDOW];
|
| }
|
|
|
| - (IBAction)openBookmarkInIncognitoWindow:(id)sender {
|
| BookmarkNode* node = [self nodeFromMenuItem:sender];
|
| - [urlDelegate_ openBookmarkURL:node->GetURL() disposition:OFF_THE_RECORD];
|
| + [self openURL:node->GetURL() disposition:OFF_THE_RECORD];
|
| }
|
|
|
| - (IBAction)editBookmark:(id)sender {
|
| @@ -533,14 +541,19 @@
|
| node->GetParent()->IndexOfChild(node));
|
| }
|
|
|
| -- (void)openBookmarkNodesRecursive:(BookmarkNode*)node {
|
| +// An ObjC version of bookmark_utils::OpenAllImpl().
|
| +- (void)openBookmarkNodesRecursive:(BookmarkNode*)node
|
| + disposition:(WindowOpenDisposition)disposition {
|
| for (int i = 0; i < node->GetChildCount(); i++) {
|
| BookmarkNode* child = node->GetChild(i);
|
| - if (child->is_url())
|
| - [urlDelegate_ openBookmarkURL:child->GetURL()
|
| - disposition:NEW_BACKGROUND_TAB];
|
| - else
|
| - [self openBookmarkNodesRecursive:child];
|
| + if (child->is_url()) {
|
| + [self openURL:child->GetURL() disposition:disposition];
|
| + // We revert to a basic disposition in case the initial
|
| + // disposition opened a new window.
|
| + disposition = NEW_BACKGROUND_TAB;
|
| + } else {
|
| + [self openBookmarkNodesRecursive:child disposition:disposition];
|
| + }
|
| }
|
| }
|
|
|
| @@ -548,11 +561,26 @@
|
| // TODO(jrg):
|
| // Is there an easier way to get a non-const root node for the bookmark bar?
|
| // I can't iterate over them unless it's non-const.
|
| + BookmarkNode* node = const_cast<BookmarkNode*>(
|
| + bookmarkModel_->GetBookmarkBarNode());
|
| + [self openBookmarkNodesRecursive:node disposition:NEW_FOREGROUND_TAB];
|
| + UserMetrics::RecordAction(L"OpenAllBookmarks", browser_->profile());
|
| +}
|
|
|
| - BookmarkNode* node = (BookmarkNode*)bookmarkModel_->GetBookmarkBarNode();
|
| - [self openBookmarkNodesRecursive:node];
|
| +- (IBAction)openAllBookmarksNewWindow:(id)sender {
|
| + BookmarkNode* node = const_cast<BookmarkNode*>(
|
| + bookmarkModel_->GetBookmarkBarNode());
|
| + [self openBookmarkNodesRecursive:node disposition:NEW_WINDOW];
|
| + UserMetrics::RecordAction(L"OpenAllBookmarksNewWindow", browser_->profile());
|
| }
|
|
|
| +- (IBAction)openAllBookmarksIncognitoWindow:(id)sender {
|
| + BookmarkNode* node = const_cast<BookmarkNode*>(
|
| + bookmarkModel_->GetBookmarkBarNode());
|
| + [self openBookmarkNodesRecursive:node disposition:OFF_THE_RECORD];
|
| + UserMetrics::RecordAction(L"OpenAllBookmarksIncognitoWindow", browser_->profile());
|
| +}
|
| +
|
| // May be called from the bar or from a folder button.
|
| // If called from a button, that button becomes the parent.
|
| - (IBAction)addPage:(id)sender {
|
| @@ -600,7 +628,10 @@
|
|
|
| NSImage* image = [self getFavIconForNode:node];
|
| [cell setBookmarkCellText:title image:image];
|
| - [cell setMenu:buttonContextMenu_];
|
| + if (node->is_folder())
|
| + [cell setMenu:[[self view] menu]];
|
| + else
|
| + [cell setMenu:buttonContextMenu_];
|
| return cell;
|
| }
|
|
|
| @@ -670,7 +701,7 @@
|
| const BookmarkNode* node = bookmarkModel_->GetNodeByID(tag);
|
| WindowOpenDisposition disposition =
|
| event_utils::WindowOpenDispositionFromNSEvent([NSApp currentEvent]);
|
| - [urlDelegate_ openBookmarkURL:node->GetURL() disposition:disposition];
|
| + [self openURL:node->GetURL() disposition:disposition];
|
| }
|
|
|
| // Create buttons for all items in the bookmark node tree.
|
| @@ -880,10 +911,6 @@
|
| [self loaded:model];
|
| }
|
|
|
| -- (void)setUrlDelegate:(id<BookmarkURLOpener>)urlDelegate {
|
| - urlDelegate_ = urlDelegate;
|
| -}
|
| -
|
| - (NSArray*)buttons {
|
| return buttons_.get();
|
| }
|
|
|