| Index: chrome/browser/views/bookmark_editor_view.cc
|
| ===================================================================
|
| --- chrome/browser/views/bookmark_editor_view.cc (revision 22376)
|
| +++ chrome/browser/views/bookmark_editor_view.cc (working copy)
|
| @@ -203,9 +203,14 @@
|
| }
|
|
|
| void BookmarkEditorView::ExecuteCommand(int command_id) {
|
| - DCHECK(tree_view_->GetSelectedNode());
|
| + TreeModelNode* selected_node = tree_view_->GetSelectedNode();
|
| + DCHECK(selected_node);
|
| if (command_id == IDS_EDIT) {
|
| - tree_view_->StartEditing(tree_view_->GetSelectedNode());
|
| + tree_view_->StartEditing(selected_node);
|
| + } else if (command_id == IDS_DELETE) {
|
| + // We can only delete newly created folders. Remove the node from the
|
| + // TreeModel.
|
| + ApplyDelete(selected_node);
|
| } else {
|
| DCHECK(command_id == IDS_BOOMARK_EDITOR_NEW_FOLDER_MENU_ITEM);
|
| NewGroup();
|
| @@ -234,14 +239,30 @@
|
| int y,
|
| bool is_mouse_gesture) {
|
| DCHECK(source == tree_view_);
|
| - if (!tree_view_->GetSelectedNode())
|
| + TreeModelNode* selected_node = tree_view_->GetSelectedNode();
|
| + if (!selected_node)
|
| return;
|
| running_menu_for_root_ =
|
| - (tree_model_->GetParent(tree_view_->GetSelectedNode()) ==
|
| - tree_model_->GetRoot());
|
| - if (!context_menu_contents_.get()) {
|
| + (tree_model_->GetParent(selected_node) == tree_model_->GetRoot());
|
| +
|
| + EditorNode* node = tree_model_->AsNode(selected_node);
|
| +
|
| + bool reload_menu_contents = false;
|
| + if (context_menu_contents_.get()) {
|
| + bool has_delete_in_menu =
|
| + context_menu_contents_->GetCommandIdAt(1) == IDS_DELETE;
|
| +
|
| + // Only show delete option for new groups.
|
| + reload_menu_contents = (node->value == 0) ^ has_delete_in_menu;
|
| + }
|
| +
|
| + if (!context_menu_contents_.get() || reload_menu_contents) {
|
| context_menu_contents_.reset(new views::SimpleMenuModel(this));
|
| context_menu_contents_->AddItemWithStringId(IDS_EDIT, IDS_EDIT);
|
| + // If this is a newly created folder that has not been added to the
|
| + // BookmarkModel, a user may delete the folder.
|
| + if (node->value == 0)
|
| + context_menu_contents_->AddItemWithStringId(IDS_DELETE, IDS_DELETE);
|
| context_menu_contents_->AddItemWithStringId(
|
| IDS_BOOMARK_EDITOR_NEW_FOLDER_MENU_ITEM,
|
| IDS_BOOMARK_EDITOR_NEW_FOLDER_MENU_ITEM);
|
| @@ -490,6 +511,26 @@
|
| return NULL;
|
| }
|
|
|
| +void BookmarkEditorView::ApplyDelete(TreeModelNode* node) {
|
| + EditorNode* deleted_node = show_tree_ ?
|
| + tree_model_->AsNode(node) : NULL;
|
| +
|
| + if (show_tree_ && !deleted_node) {
|
| + NOTREACHED();
|
| + return;
|
| + }
|
| +
|
| + EditorNode* parent = deleted_node ? deleted_node->GetParent() : NULL;
|
| + const int index = parent ? parent->IndexOfChild(deleted_node) : -1;
|
| +
|
| + if (index == -1) {
|
| + NOTREACHED();
|
| + return;
|
| + }
|
| +
|
| + tree_model_->Remove(parent, index);
|
| +}
|
| +
|
| void BookmarkEditorView::ApplyEdits() {
|
| DCHECK(bb_model_->IsLoaded());
|
|
|
|
|