Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(426)

Side by Side Diff: chrome/browser/ui/cocoa/bookmarks/bookmark_context_menu_cocoa_controller.mm

Issue 23522055: [Mac] Show context menu on empty BMB item. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/ui/cocoa/bookmarks/bookmark_context_menu_cocoa_controller.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_context_menu_cocoa_controlle r.h" 5 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_context_menu_cocoa_controlle r.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "chrome/app/chrome_command_ids.h" 9 #include "chrome/app/chrome_command_ids.h"
10 #include "chrome/browser/bookmarks/bookmark_model.h" 10 #include "chrome/browser/bookmarks/bookmark_model.h"
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 } 55 }
56 56
57 // Re-creates |bookmarkContextMenuController_| and |menuController_| based on 57 // Re-creates |bookmarkContextMenuController_| and |menuController_| based on
58 // |bookmarkModel| and the current value of |bookmarkNode_|. 58 // |bookmarkModel| and the current value of |bookmarkNode_|.
59 - (void)createMenuControllers:(BookmarkModel*)bookmarkModel { 59 - (void)createMenuControllers:(BookmarkModel*)bookmarkModel {
60 const BookmarkNode* parent = NULL; 60 const BookmarkNode* parent = NULL;
61 std::vector<const BookmarkNode*> nodes; 61 std::vector<const BookmarkNode*> nodes;
62 if (bookmarkNode_ == bookmarkModel->other_node()) { 62 if (bookmarkNode_ == bookmarkModel->other_node()) {
63 nodes.push_back(bookmarkNode_); 63 nodes.push_back(bookmarkNode_);
64 parent = bookmarkModel->bookmark_bar_node(); 64 parent = bookmarkModel->bookmark_bar_node();
65 } else if (bookmarkNode_ != bookmarkModel->bookmark_bar_node()) { 65 } else if (bookmarkNode_ == bookmarkModel->bookmark_bar_node()) {
66 parent = bookmarkModel->bookmark_bar_node();
67 nodes.push_back(parent);
68 } else if (bookmarkNode_) {
66 nodes.push_back(bookmarkNode_); 69 nodes.push_back(bookmarkNode_);
67 parent = bookmarkNode_->parent(); 70 parent = bookmarkNode_->parent();
68 } else {
69 parent = bookmarkModel->bookmark_bar_node();
70 nodes.push_back(parent);
71 } 71 }
72 72
73 Browser* browser = [bookmarkBarController_ browser]; 73 Browser* browser = [bookmarkBarController_ browser];
74 bookmarkContextMenuController_.reset( 74 bookmarkContextMenuController_.reset(
75 new BookmarkContextMenuController([bookmarkBarController_ browserWindow], 75 new BookmarkContextMenuController([bookmarkBarController_ browserWindow],
76 bridge_.get(), browser, 76 bridge_.get(), browser,
77 browser->profile(), browser, parent, 77 browser->profile(), browser, parent,
78 nodes)); 78 nodes));
79 ui::SimpleMenuModel* menuModel = 79 ui::SimpleMenuModel* menuModel =
80 bookmarkContextMenuController_->menu_model(); 80 bookmarkContextMenuController_->menu_model();
81 menuController_.reset([[MenuController alloc] initWithModel:menuModel 81 menuController_.reset([[MenuController alloc] initWithModel:menuModel
82 useWithPopUpButtonCell:NO]); 82 useWithPopUpButtonCell:NO]);
83 } 83 }
84 84
85 - (NSMenu*)menuForBookmarkNode:(const BookmarkNode*)node { 85 - (BookmarkModel*)bookmarkModel {
86 // Depending on timing, the model may not yet have been loaded. 86 // Depending on timing, the model may not yet have been loaded.
87 BookmarkModel* bookmarkModel = [bookmarkBarController_ bookmarkModel]; 87 BookmarkModel* bookmarkModel = [bookmarkBarController_ bookmarkModel];
88 if (!bookmarkModel || !bookmarkModel->loaded()) 88 if (!bookmarkModel || !bookmarkModel->loaded())
89 return nil; 89 return nil;
90 return bookmarkModel;
91 }
92
93 - (NSMenu*)menuForBookmarkNode:(const BookmarkNode*)node {
94 BookmarkModel* bookmarkModel = [self bookmarkModel];
90 95
91 // This may be called before the BMB view has been added to the window. In 96 // This may be called before the BMB view has been added to the window. In
92 // that case, simply return nil so that BookmarkContextMenuController doesn't 97 // that case, simply return nil so that BookmarkContextMenuController doesn't
93 // get created with a nil window. 98 // get created with a nil window.
94 if (![bookmarkBarController_ browserWindow]) 99 if (!bookmarkModel || ![bookmarkBarController_ browserWindow])
95 return nil; 100 return nil;
96 101
97 if (!node)
98 node = bookmarkModel->bookmark_bar_node();
99
100 // Rebuild the menu if it's for a different node than the last request. 102 // Rebuild the menu if it's for a different node than the last request.
101 if (!menuController_ || node != bookmarkNode_) { 103 if (!menuController_ || node != bookmarkNode_) {
102 bookmarkNode_ = node; 104 bookmarkNode_ = node;
103 [self createMenuControllers:bookmarkModel]; 105 [self createMenuControllers:bookmarkModel];
104 } 106 }
105 return [menuController_ menu]; 107 return [menuController_ menu];
106 } 108 }
107 109
110 - (NSMenu*)menuForBookmarkBar {
111 BookmarkModel* bookmarkModel = [self bookmarkModel];
112 if (!bookmarkModel)
113 return nil;
114
115 return [self menuForBookmarkNode:bookmarkModel->bookmark_bar_node()];
116 }
117
108 - (void)willExecuteCommand:(int)command { 118 - (void)willExecuteCommand:(int)command {
109 // Some items should not close currently-open sub-folder menus. 119 // Some items should not close currently-open sub-folder menus.
110 switch (command) { 120 switch (command) {
111 case IDC_CUT: 121 case IDC_CUT:
112 case IDC_COPY: 122 case IDC_COPY:
113 case IDC_PASTE: 123 case IDC_PASTE:
114 case IDC_BOOKMARK_BAR_REMOVE: 124 case IDC_BOOKMARK_BAR_REMOVE:
115 return; 125 return;
116 } 126 }
117 127
118 [bookmarkBarController_ closeFolderAndStopTrackingMenus]; 128 [bookmarkBarController_ closeFolderAndStopTrackingMenus];
119 [bookmarkBarController_ unhighlightBookmark:bookmarkNode_]; 129 [bookmarkBarController_ unhighlightBookmark:bookmarkNode_];
120 } 130 }
121 131
122 - (void)cancelTracking { 132 - (void)cancelTracking {
123 [[menuController_ menu] cancelTracking]; 133 [[menuController_ menu] cancelTracking];
124 } 134 }
125 135
126 @end 136 @end
OLDNEW
« no previous file with comments | « chrome/browser/ui/cocoa/bookmarks/bookmark_context_menu_cocoa_controller.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698