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

Side by Side Diff: chrome/browser/ui/views/bookmarks/bookmark_menu_delegate.cc

Issue 7066034: Fixes couple of issues with bookmarks in wrench menu: (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 7 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
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 #include "chrome/browser/ui/views/bookmarks/bookmark_menu_delegate.h" 5 #include "chrome/browser/ui/views/bookmarks/bookmark_menu_delegate.h"
6 6
7 #include "base/stl_util-inl.h" 7 #include "base/stl_util-inl.h"
8 #include "base/utf_string_conversions.h" 8 #include "base/utf_string_conversions.h"
9 #include "chrome/browser/bookmarks/bookmark_model.h" 9 #include "chrome/browser/bookmarks/bookmark_model.h"
10 #include "chrome/browser/bookmarks/bookmark_node_data.h" 10 #include "chrome/browser/bookmarks/bookmark_node_data.h"
(...skipping 23 matching lines...) Expand all
34 34
35 BookmarkMenuDelegate::BookmarkMenuDelegate(Profile* profile, 35 BookmarkMenuDelegate::BookmarkMenuDelegate(Profile* profile,
36 PageNavigator* navigator, 36 PageNavigator* navigator,
37 gfx::NativeWindow parent, 37 gfx::NativeWindow parent,
38 int first_menu_id) 38 int first_menu_id)
39 : profile_(profile), 39 : profile_(profile),
40 page_navigator_(navigator), 40 page_navigator_(navigator),
41 parent_(parent), 41 parent_(parent),
42 menu_(NULL), 42 menu_(NULL),
43 for_drop_(false), 43 for_drop_(false),
44 parent_menu_item_(NULL),
44 next_menu_id_(first_menu_id), 45 next_menu_id_(first_menu_id),
45 real_delegate_(NULL), 46 real_delegate_(NULL),
46 is_mutating_model_(false) { 47 is_mutating_model_(false) {
47 } 48 }
48 49
49 BookmarkMenuDelegate::~BookmarkMenuDelegate() { 50 BookmarkMenuDelegate::~BookmarkMenuDelegate() {
50 profile_->GetBookmarkModel()->RemoveObserver(this); 51 profile_->GetBookmarkModel()->RemoveObserver(this);
51 STLDeleteValues(&node_to_menu_map_); 52 STLDeleteValues(&node_to_menu_map_);
52 } 53 }
53 54
54 void BookmarkMenuDelegate::Init(views::MenuDelegate* real_delegate, 55 void BookmarkMenuDelegate::Init(views::MenuDelegate* real_delegate,
55 MenuItemView* parent, 56 MenuItemView* parent,
56 const BookmarkNode* node, 57 const BookmarkNode* node,
57 int start_child_index, 58 int start_child_index,
58 ShowOptions show_options) { 59 ShowOptions show_options) {
59 profile_->GetBookmarkModel()->AddObserver(this); 60 profile_->GetBookmarkModel()->AddObserver(this);
60 real_delegate_ = real_delegate; 61 real_delegate_ = real_delegate;
61 if (parent) { 62 if (parent) {
63 parent_menu_item_ = parent;
62 BuildMenu(node, start_child_index, parent, &next_menu_id_); 64 BuildMenu(node, start_child_index, parent, &next_menu_id_);
63 if (show_options == SHOW_OTHER_FOLDER) 65 if (show_options == SHOW_OTHER_FOLDER)
64 BuildOtherFolderMenu(parent, &next_menu_id_); 66 BuildOtherFolderMenu(parent, &next_menu_id_);
65 } else { 67 } else {
66 menu_ = CreateMenu(node, start_child_index, show_options); 68 menu_ = CreateMenu(node, start_child_index, show_options);
67 } 69 }
68 } 70 }
69 71
70 void BookmarkMenuDelegate::SetActiveMenu(const BookmarkNode* node, 72 void BookmarkMenuDelegate::SetActiveMenu(const BookmarkNode* node,
71 int start_index) { 73 int start_index) {
74 DCHECK(!parent_menu_item_);
72 if (!node_to_menu_map_[node]) 75 if (!node_to_menu_map_[node])
73 CreateMenu(node, start_index, HIDE_OTHER_FOLDER); 76 CreateMenu(node, start_index, HIDE_OTHER_FOLDER);
74 menu_ = node_to_menu_map_[node]; 77 menu_ = node_to_menu_map_[node];
75 } 78 }
76 79
77 std::wstring BookmarkMenuDelegate::GetTooltipText( 80 std::wstring BookmarkMenuDelegate::GetTooltipText(
78 int id, 81 int id,
79 const gfx::Point& screen_loc) { 82 const gfx::Point& screen_loc) {
80 DCHECK(menu_id_to_node_map_.find(id) != menu_id_to_node_map_.end()); 83 DCHECK(menu_id_to_node_map_.find(id) != menu_id_to_node_map_.end());
81 84
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
272 275
273 // Iterate through the menus looking for the menu containing node. 276 // Iterate through the menus looking for the menu containing node.
274 for (NodeToMenuMap::iterator i = node_to_menu_map_.begin(); 277 for (NodeToMenuMap::iterator i = node_to_menu_map_.begin();
275 i != node_to_menu_map_.end(); ++i) { 278 i != node_to_menu_map_.end(); ++i) {
276 MenuItemView* menu_item = i->second->GetMenuItemByID(menu_pair->second); 279 MenuItemView* menu_item = i->second->GetMenuItemByID(menu_pair->second);
277 if (menu_item) { 280 if (menu_item) {
278 menu_item->SetIcon(model->GetFavicon(node)); 281 menu_item->SetIcon(model->GetFavicon(node));
279 return; 282 return;
280 } 283 }
281 } 284 }
285
286 if (parent_menu_item_) {
287 MenuItemView* menu_item = parent_menu_item_->GetMenuItemByID(
288 menu_pair->second);
289 if (menu_item)
290 menu_item->SetIcon(model->GetFavicon(node));
291 }
282 } 292 }
283 293
284 void BookmarkMenuDelegate::WillRemoveBookmarks( 294 void BookmarkMenuDelegate::WillRemoveBookmarks(
285 const std::vector<const BookmarkNode*>& bookmarks) { 295 const std::vector<const BookmarkNode*>& bookmarks) {
286 DCHECK(!is_mutating_model_); 296 DCHECK(!is_mutating_model_);
287 is_mutating_model_ = true; 297 is_mutating_model_ = true;
288 std::set<MenuItemView*> removed_menus; 298 std::set<MenuItemView*> removed_menus;
289 WillRemoveBookmarksImpl(bookmarks, &removed_menus); 299 WillRemoveBookmarksImpl(bookmarks, &removed_menus);
290 STLDeleteElements(&removed_menus); 300 STLDeleteElements(&removed_menus);
291 } 301 }
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
359 } 369 }
360 } 370 }
361 371
362 MenuItemView* BookmarkMenuDelegate::GetMenuByID(int id) { 372 MenuItemView* BookmarkMenuDelegate::GetMenuByID(int id) {
363 for (NodeToMenuMap::const_iterator i = node_to_menu_map_.begin(); 373 for (NodeToMenuMap::const_iterator i = node_to_menu_map_.begin();
364 i != node_to_menu_map_.end(); ++i) { 374 i != node_to_menu_map_.end(); ++i) {
365 MenuItemView* menu = i->second->GetMenuItemByID(id); 375 MenuItemView* menu = i->second->GetMenuItemByID(id);
366 if (menu) 376 if (menu)
367 return menu; 377 return menu;
368 } 378 }
369 return NULL; 379
380 return parent_menu_item_ ? parent_menu_item_->GetMenuItemByID(id) : NULL;
370 } 381 }
371 382
372 void BookmarkMenuDelegate::WillRemoveBookmarksImpl( 383 void BookmarkMenuDelegate::WillRemoveBookmarksImpl(
373 const std::vector<const BookmarkNode*>& bookmarks, 384 const std::vector<const BookmarkNode*>& bookmarks,
374 std::set<views::MenuItemView*>* removed_menus) { 385 std::set<views::MenuItemView*>* removed_menus) {
375 // Remove the observer so that when the remove happens we don't prematurely 386 // Remove the observer so that when the remove happens we don't prematurely
376 // cancel the menu. The observer ias added back in DidRemoveBookmarks. 387 // cancel the menu. The observer ias added back in DidRemoveBookmarks.
377 profile_->GetBookmarkModel()->RemoveObserver(this); 388 profile_->GetBookmarkModel()->RemoveObserver(this);
378 389
379 // Remove the menu items. 390 // Remove the menu items.
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
414 break; 425 break;
415 } 426 }
416 } 427 }
417 if (ancestor_removed) { 428 if (ancestor_removed) {
418 node_to_menu_id_map_.erase(i++); 429 node_to_menu_id_map_.erase(i++);
419 } else { 430 } else {
420 ++i; 431 ++i;
421 } 432 }
422 } 433 }
423 } 434 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698