Index: chrome/browser/ui/cocoa/bookmarks/bookmark_menu_bridge.mm |
diff --git a/chrome/browser/ui/cocoa/bookmarks/bookmark_menu_bridge.mm b/chrome/browser/ui/cocoa/bookmarks/bookmark_menu_bridge.mm |
index 79766db8ba418d0935487faa2669647beb086771..0af4b23b6038caed012ef6e86bc5816ea70ae59e 100644 |
--- a/chrome/browser/ui/cocoa/bookmarks/bookmark_menu_bridge.mm |
+++ b/chrome/browser/ui/cocoa/bookmarks/bookmark_menu_bridge.mm |
@@ -4,8 +4,6 @@ |
#import <AppKit/AppKit.h> |
-#include "chrome/browser/ui/cocoa/bookmarks/bookmark_menu_bridge.h" |
- |
#include "base/sys_string_conversions.h" |
#include "chrome/app/chrome_command_ids.h" |
#import "chrome/browser/app_controller_mac.h" |
@@ -13,6 +11,7 @@ |
#include "chrome/browser/profiles/profile.h" |
#include "chrome/browser/profiles/profile_manager.h" |
#include "chrome/browser/ui/browser_list.h" |
+#include "chrome/browser/ui/cocoa/bookmarks/bookmark_menu_bridge.h" |
#import "chrome/browser/ui/cocoa/bookmarks/bookmark_menu_cocoa_controller.h" |
#include "grit/generated_resources.h" |
#include "grit/theme_resources.h" |
@@ -24,22 +23,7 @@ |
BookmarkMenuBridge::BookmarkMenuBridge(Profile* profile, |
NSMenu *menu) |
- : menu_is_valid_(false), |
- root_node_(NULL), |
- off_the_side_node_start_index_(0), |
- profile_(profile), |
- controller_([[BookmarkMenuCocoaController alloc] initWithBridge:this |
- andMenu:menu]) { |
- if (GetBookmarkModel()) |
- ObserveBookmarkModel(); |
-} |
- |
-BookmarkMenuBridge::BookmarkMenuBridge(const BookmarkNode* root_node, |
- Profile* profile, |
- NSMenu* menu) |
- : menu_is_valid_(false), |
- root_node_(root_node), |
- off_the_side_node_start_index_(0), |
+ : menuIsValid_(false), |
profile_(profile), |
controller_([[BookmarkMenuCocoaController alloc] initWithBridge:this |
andMenu:menu]) { |
@@ -51,6 +35,7 @@ BookmarkMenuBridge::~BookmarkMenuBridge() { |
BookmarkModel *model = GetBookmarkModel(); |
if (model) |
model->RemoveObserver(this); |
+ [controller_ release]; |
} |
NSMenu* BookmarkMenuBridge::BookmarkMenu() { |
@@ -72,7 +57,7 @@ void BookmarkMenuBridge::UpdateSubMenu(NSMenu* bookmark_menu) { |
void BookmarkMenuBridge::UpdateMenuInternal(NSMenu* bookmark_menu, |
bool is_submenu) { |
DCHECK(bookmark_menu); |
- if (menu_is_valid_) |
+ if (menuIsValid_) |
return; |
BookmarkModel* model = GetBookmarkModel(); |
if (!model || !model->IsLoaded()) |
@@ -86,31 +71,27 @@ void BookmarkMenuBridge::UpdateMenuInternal(NSMenu* bookmark_menu, |
ClearBookmarkMenu(bookmark_menu); |
- if (!root_node_) { |
- // Add bookmark bar items, if any. |
- const BookmarkNode* bar_node = model->bookmark_bar_node(); |
- CHECK(bar_node); |
- if (!bar_node->empty()) { |
- [bookmark_menu addItem:[NSMenuItem separatorItem]]; |
- AddNodeToMenu(bar_node, bookmark_menu, !is_submenu); |
- } |
+ // Add bookmark bar items, if any. |
+ const BookmarkNode* barNode = model->bookmark_bar_node(); |
+ CHECK(barNode); |
+ if (!barNode->empty()) { |
+ [bookmark_menu addItem:[NSMenuItem separatorItem]]; |
+ AddNodeToMenu(barNode, bookmark_menu, !is_submenu); |
+ } |
- // If the "Other Bookmarks" folder has any content, make a submenu for it |
- // and fill it in. |
- if (!model->other_node()->empty()) { |
- NSString* other_items_title = |
- l10n_util::GetNSString(IDS_BOOKMARK_BAR_OTHER_FOLDER_NAME); |
- [bookmark_menu addItem:[NSMenuItem separatorItem]]; |
- AddNodeAsSubmenu(bookmark_menu, |
- model->other_node(), |
- other_items_title, |
- !is_submenu); |
- } |
- } else { |
- AddNodeToMenu(root_node_, bookmark_menu, false); |
+ // If the "Other Bookmarks" folder has any content, make a submenu for it and |
+ // fill it in. |
+ if (!model->other_node()->empty()) { |
+ NSString* other_items_title = |
+ l10n_util::GetNSString(IDS_BOOKMARK_BAR_OTHER_FOLDER_NAME); |
+ [bookmark_menu addItem:[NSMenuItem separatorItem]]; |
+ AddNodeAsSubmenu(bookmark_menu, |
+ model->other_node(), |
+ other_items_title, |
+ !is_submenu); |
} |
- menu_is_valid_ = true; |
+ menuIsValid_ = true; |
} |
void BookmarkMenuBridge::BookmarkModelBeingDeleted(BookmarkModel* model) { |
@@ -228,16 +209,9 @@ void BookmarkMenuBridge::AddNodeAsSubmenu(NSMenu* menu, |
AddNodeToMenu(node, other_submenu, add_extra_items); |
} |
-void BookmarkMenuBridge::AddNodeToMenu(const BookmarkNode* node, |
- NSMenu* menu, |
+// TODO(jrg): limit the number of bookmarks in the menubar? |
+void BookmarkMenuBridge::AddNodeToMenu(const BookmarkNode* node, NSMenu* menu, |
bool add_extra_items) { |
- AddNodeToMenuRecursive(node, menu, add_extra_items, 0); |
-} |
- |
-void BookmarkMenuBridge::AddNodeToMenuRecursive(const BookmarkNode* node, |
- NSMenu* menu, |
- bool add_extra_items, |
- int recursion_depth) { |
int child_count = node->child_count(); |
if (!child_count) { |
NSString* empty_string = l10n_util::GetNSString(IDS_MENU_EMPTY_SUBMENU); |
@@ -245,27 +219,21 @@ void BookmarkMenuBridge::AddNodeToMenuRecursive(const BookmarkNode* node, |
action:nil |
keyEquivalent:@""] autorelease]; |
[menu addItem:item]; |
- } else { |
- // If this is the first recursive pass, start adding children from the |
- // start index, which defaults to 0. |
- const int start = recursion_depth == 0 ? off_the_side_node_start_index_ : 0; |
- for (int i = start; i < child_count; i++) { |
- const BookmarkNode* child = node->GetChild(i); |
- NSString* title = [BookmarkMenuCocoaController menuTitleForNode:child]; |
- NSMenuItem* item = [[[NSMenuItem alloc] initWithTitle:title |
- action:nil |
- keyEquivalent:@""] autorelease]; |
- [menu addItem:item]; |
- bookmark_nodes_[child] = item; |
- if (child->is_folder()) { |
- [item setImage:folder_image_]; |
- NSMenu* submenu = [[[NSMenu alloc] initWithTitle:title] autorelease]; |
- [menu setSubmenu:submenu forItem:item]; |
- AddNodeToMenuRecursive(child, submenu, add_extra_items, |
- recursion_depth + 1); // Recursive call. |
- } else { |
- ConfigureMenuItem(child, item, false); |
- } |
+ } else for (int i = 0; i < child_count; i++) { |
+ const BookmarkNode* child = node->GetChild(i); |
+ NSString* title = [BookmarkMenuCocoaController menuTitleForNode:child]; |
+ NSMenuItem* item = [[[NSMenuItem alloc] initWithTitle:title |
+ action:nil |
+ keyEquivalent:@""] autorelease]; |
+ [menu addItem:item]; |
+ bookmark_nodes_[child] = item; |
+ if (child->is_folder()) { |
+ [item setImage:folder_image_]; |
+ NSMenu* submenu = [[[NSMenu alloc] initWithTitle:title] autorelease]; |
+ [menu setSubmenu:submenu forItem:item]; |
+ AddNodeToMenu(child, submenu, add_extra_items); // recursive call |
+ } else { |
+ ConfigureMenuItem(child, item, false); |
} |
} |