OLD | NEW |
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 Loading... |
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 |
OLD | NEW |