| Index: chrome/browser/ui/views/bookmarks/bookmark_menu_delegate.cc
|
| diff --git a/chrome/browser/ui/views/bookmarks/bookmark_menu_delegate.cc b/chrome/browser/ui/views/bookmarks/bookmark_menu_delegate.cc
|
| index 10b4e24dbc2bb616f0d7a0ca838b127b4998303b..34eddb0767ac401612efc72be288979217fe60f6 100644
|
| --- a/chrome/browser/ui/views/bookmarks/bookmark_menu_delegate.cc
|
| +++ b/chrome/browser/ui/views/bookmarks/bookmark_menu_delegate.cc
|
| @@ -69,14 +69,8 @@ void BookmarkMenuDelegate::Init(
|
| parent->AppendSeparator();
|
| }
|
| BuildMenu(node, start_child_index, parent, &next_menu_id_);
|
| - if (show_options == SHOW_OTHER_FOLDER) {
|
| - const BookmarkNode* other_folder =
|
| - profile_->GetBookmarkModel()->other_node();
|
| - if (!other_folder->empty()) {
|
| - parent->AppendSeparator();
|
| - BuildOtherFolderMenu(parent, &next_menu_id_);
|
| - }
|
| - }
|
| + if (show_options == SHOW_PERMANENT_FOLDERS)
|
| + BuildMenusForPermanentNodes(parent, &next_menu_id_);
|
| } else {
|
| menu_ = CreateMenu(node, start_child_index, show_options);
|
| }
|
| @@ -94,7 +88,7 @@ void BookmarkMenuDelegate::SetActiveMenu(const BookmarkNode* node,
|
| int start_index) {
|
| DCHECK(!parent_menu_item_);
|
| if (!node_to_menu_map_[node])
|
| - CreateMenu(node, start_index, HIDE_OTHER_FOLDER);
|
| + CreateMenu(node, start_index, HIDE_PERMANENT_FOLDERS);
|
| menu_ = node_to_menu_map_[node];
|
| }
|
|
|
| @@ -189,16 +183,31 @@ int BookmarkMenuDelegate::GetDropOperation(
|
| const BookmarkNode* node = menu_id_to_node_map_[item->GetCommand()];
|
| const BookmarkNode* drop_parent = node->parent();
|
| int index_to_drop_at = drop_parent->GetIndexOf(node);
|
| - if (*position == views::MenuDelegate::DROP_AFTER) {
|
| - if (node == profile_->GetBookmarkModel()->other_node()) {
|
| - // The other folder is shown after all bookmarks on the bookmark bar.
|
| - // Dropping after the other folder makes no sense.
|
| - *position = views::MenuDelegate::DROP_NONE;
|
| - }
|
| - index_to_drop_at++;
|
| - } else if (*position == views::MenuDelegate::DROP_ON) {
|
| - drop_parent = node;
|
| - index_to_drop_at = node->child_count();
|
| + switch (*position) {
|
| + case views::MenuDelegate::DROP_AFTER:
|
| + if (node == profile_->GetBookmarkModel()->other_node() ||
|
| + node == profile_->GetBookmarkModel()->mobile_node()) {
|
| + // Dropping after these nodes makes no sense.
|
| + *position = views::MenuDelegate::DROP_NONE;
|
| + }
|
| + index_to_drop_at++;
|
| + break;
|
| +
|
| + case views::MenuDelegate::DROP_BEFORE:
|
| + if (node == profile_->GetBookmarkModel()->mobile_node()) {
|
| + // Dropping before this node makes no sense.
|
| + *position = views::MenuDelegate::DROP_NONE;
|
| + }
|
| + index_to_drop_at++;
|
| + break;
|
| +
|
| + case views::MenuDelegate::DROP_ON:
|
| + drop_parent = node;
|
| + index_to_drop_at = node->child_count();
|
| + break;
|
| +
|
| + default:
|
| + break;
|
| }
|
| DCHECK(drop_parent);
|
| return bookmark_utils::BookmarkDropOperation(
|
| @@ -228,8 +237,9 @@ int BookmarkMenuDelegate::OnPerformDrop(
|
| break;
|
|
|
| case views::MenuDelegate::DROP_BEFORE:
|
| - if (drop_node == model->other_node()) {
|
| - // This can happen with SHOW_OTHER_FOLDER.
|
| + if (drop_node == model->other_node() ||
|
| + drop_node == model->mobile_node()) {
|
| + // This can happen with SHOW_PERMANENT_FOLDERS.
|
| drop_parent = model->bookmark_bar_node();
|
| index_to_drop_at = drop_parent->child_count();
|
| }
|
| @@ -391,25 +401,43 @@ MenuItemView* BookmarkMenuDelegate::CreateMenu(const BookmarkNode* parent,
|
| menu_id_to_node_map_[menu->GetCommand()] = parent;
|
| menu->set_has_icons(true);
|
| BuildMenu(parent, start_child_index, menu, &next_menu_id_);
|
| - if (show_options == SHOW_OTHER_FOLDER)
|
| - BuildOtherFolderMenu(menu, &next_menu_id_);
|
| + if (show_options == SHOW_PERMANENT_FOLDERS)
|
| + BuildMenusForPermanentNodes(menu, &next_menu_id_);
|
| node_to_menu_map_[parent] = menu;
|
| return menu;
|
| }
|
|
|
| -void BookmarkMenuDelegate::BuildOtherFolderMenu(
|
| - MenuItemView* menu, int* next_menu_id) {
|
| - const BookmarkNode* other_folder = profile_->GetBookmarkModel()->other_node();
|
| +void BookmarkMenuDelegate::BuildMenusForPermanentNodes(
|
| + views::MenuItemView* menu,
|
| + int* next_menu_id) {
|
| + BookmarkModel* model = profile_->GetBookmarkModel();
|
| + bool added_separator = false;
|
| + BuildMenuForPermanentNode(model->other_node(), menu, next_menu_id,
|
| + &added_separator);
|
| + BuildMenuForPermanentNode(model->mobile_node(), menu, next_menu_id,
|
| + &added_separator);
|
| +}
|
| +
|
| +void BookmarkMenuDelegate::BuildMenuForPermanentNode(
|
| + const BookmarkNode* node,
|
| + MenuItemView* menu,
|
| + int* next_menu_id,
|
| + bool* added_separator) {
|
| + if (node->GetTotalNodeCount() == 1)
|
| + return; // No children, don't create a menu.
|
| +
|
| + if (!*added_separator) {
|
| + *added_separator = true;
|
| + menu->AppendSeparator();
|
| + }
|
| int id = *next_menu_id;
|
| (*next_menu_id)++;
|
| SkBitmap* folder_icon = ResourceBundle::GetSharedInstance().
|
| GetBitmapNamed(IDR_BOOKMARK_BAR_FOLDER);
|
| MenuItemView* submenu = menu->AppendSubMenuWithIcon(
|
| - id,
|
| - l10n_util::GetStringUTF16(IDS_BOOKMARK_BAR_OTHER_BOOKMARKED),
|
| - *folder_icon);
|
| - BuildMenu(other_folder, 0, submenu, next_menu_id);
|
| - menu_id_to_node_map_[id] = other_folder;
|
| + id, node->GetTitle(), *folder_icon);
|
| + BuildMenu(node, 0, submenu, next_menu_id);
|
| + menu_id_to_node_map_[id] = node;
|
| }
|
|
|
| void BookmarkMenuDelegate::BuildMenu(const BookmarkNode* parent,
|
|
|