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

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

Issue 7720012: Moves ownership of MenuItemView to MenuRunner as well as responbility (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix unit test Created 9 years, 4 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_controller_views.h" 5 #include "chrome/browser/ui/views/bookmarks/bookmark_menu_controller_views.h"
6 6
7 #include "base/stl_util.h" 7 #include "base/stl_util.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"
11 #include "chrome/browser/bookmarks/bookmark_utils.h" 11 #include "chrome/browser/bookmarks/bookmark_utils.h"
12 #include "chrome/browser/prefs/pref_service.h" 12 #include "chrome/browser/prefs/pref_service.h"
13 #include "chrome/browser/profiles/profile.h" 13 #include "chrome/browser/profiles/profile.h"
14 #include "chrome/browser/ui/views/bookmarks/bookmark_bar_view.h" 14 #include "chrome/browser/ui/views/bookmarks/bookmark_bar_view.h"
15 #include "chrome/browser/ui/views/bookmarks/bookmark_menu_delegate.h" 15 #include "chrome/browser/ui/views/bookmarks/bookmark_menu_delegate.h"
16 #include "chrome/browser/ui/views/event_utils.h" 16 #include "chrome/browser/ui/views/event_utils.h"
17 #include "chrome/common/pref_names.h" 17 #include "chrome/common/pref_names.h"
18 #include "content/browser/tab_contents/page_navigator.h" 18 #include "content/browser/tab_contents/page_navigator.h"
19 #include "content/browser/user_metrics.h" 19 #include "content/browser/user_metrics.h"
20 #include "content/common/page_transition_types.h" 20 #include "content/common/page_transition_types.h"
21 #include "grit/generated_resources.h" 21 #include "grit/generated_resources.h"
22 #include "grit/theme_resources.h" 22 #include "grit/theme_resources.h"
23 #include "grit/ui_resources.h" 23 #include "grit/ui_resources.h"
24 #include "ui/base/dragdrop/os_exchange_data.h" 24 #include "ui/base/dragdrop/os_exchange_data.h"
25 #include "ui/base/resource/resource_bundle.h" 25 #include "ui/base/resource/resource_bundle.h"
26 #include "views/controls/button/menu_button.h" 26 #include "views/controls/button/menu_button.h"
27 #include "views/controls/menu/menu_runner.h"
27 #include "views/widget/widget.h" 28 #include "views/widget/widget.h"
28 29
29 using views::MenuItemView; 30 using views::MenuItemView;
30 31
31 BookmarkMenuController::BookmarkMenuController(Profile* profile, 32 BookmarkMenuController::BookmarkMenuController(Profile* profile,
32 PageNavigator* navigator, 33 PageNavigator* navigator,
33 views::Widget* parent, 34 views::Widget* parent,
34 const BookmarkNode* node, 35 const BookmarkNode* node,
35 int start_child_index) 36 int start_child_index)
36 : menu_delegate_(new BookmarkMenuDelegate(profile, navigator, parent, 1)), 37 : menu_delegate_(new BookmarkMenuDelegate(profile, navigator, parent, 1)),
37 node_(node), 38 node_(node),
38 observer_(NULL), 39 observer_(NULL),
39 for_drop_(false), 40 for_drop_(false),
40 bookmark_bar_(NULL) { 41 bookmark_bar_(NULL) {
41 menu_delegate_->Init(this, NULL, node, start_child_index, 42 menu_delegate_->Init(this, NULL, node, start_child_index,
42 BookmarkMenuDelegate::HIDE_OTHER_FOLDER); 43 BookmarkMenuDelegate::HIDE_OTHER_FOLDER);
44 menu_runner_.reset(new views::MenuRunner(menu_delegate_->menu()));
43 } 45 }
44 46
45 void BookmarkMenuController::RunMenuAt(BookmarkBarView* bookmark_bar, 47 void BookmarkMenuController::RunMenuAt(BookmarkBarView* bookmark_bar,
46 bool for_drop) { 48 bool for_drop) {
47 bookmark_bar_ = bookmark_bar; 49 bookmark_bar_ = bookmark_bar;
48 views::MenuButton* menu_button = bookmark_bar_->GetMenuButtonForNode(node_); 50 views::MenuButton* menu_button = bookmark_bar_->GetMenuButtonForNode(node_);
49 DCHECK(menu_button); 51 DCHECK(menu_button);
50 MenuItemView::AnchorPosition anchor; 52 MenuItemView::AnchorPosition anchor;
51 bookmark_bar_->GetAnchorPositionForButton(menu_button, &anchor); 53 bookmark_bar_->GetAnchorPositionForButton(menu_button, &anchor);
52 RunMenuAt(menu_button, anchor, for_drop);
53 }
54
55 void BookmarkMenuController::RunMenuAt(
56 views::MenuButton* button,
57 MenuItemView::AnchorPosition position,
58 bool for_drop) {
59 gfx::Point screen_loc; 54 gfx::Point screen_loc;
60 views::View::ConvertPointToScreen(button, &screen_loc); 55 views::View::ConvertPointToScreen(menu_button, &screen_loc);
61 // Subtract 1 from the height to make the popup flush with the button border. 56 // Subtract 1 from the height to make the popup flush with the button border.
62 gfx::Rect bounds(screen_loc.x(), screen_loc.y(), button->width(), 57 gfx::Rect bounds(screen_loc.x(), screen_loc.y(), menu_button->width(),
63 button->height() - 1); 58 menu_button->height() - 1);
64 for_drop_ = for_drop; 59 for_drop_ = for_drop;
65 menu_delegate_->profile()->GetBookmarkModel()->AddObserver(this); 60 menu_delegate_->profile()->GetBookmarkModel()->AddObserver(this);
66 if (for_drop) { 61 // We only delete ourself after the menu completes, so we can safely ignore
67 menu()->RunMenuForDropAt(menu_delegate_->parent(), bounds, position); 62 // the return value.
68 } else { 63 ignore_result(menu_runner_->RunMenuAt(menu_delegate_->parent(), menu_button,
69 menu()->RunMenuAt(menu_delegate_->parent(), button, bounds, position, 64 bounds, anchor, for_drop ? views::MenuRunner::FOR_DROP : 0));
70 false); 65 if (!for_drop)
71 delete this; 66 delete this;
72 }
73 } 67 }
74 68
75 void BookmarkMenuController::Cancel() { 69 void BookmarkMenuController::Cancel() {
76 menu_delegate_->menu()->Cancel(); 70 menu_delegate_->menu()->Cancel();
77 } 71 }
78 72
79 MenuItemView* BookmarkMenuController::menu() const { 73 MenuItemView* BookmarkMenuController::menu() const {
80 return menu_delegate_->menu(); 74 return menu_delegate_->menu();
81 } 75 }
82 76
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
184 void BookmarkMenuController::BookmarkModelChanged() { 178 void BookmarkMenuController::BookmarkModelChanged() {
185 if (!menu_delegate_->is_mutating_model()) 179 if (!menu_delegate_->is_mutating_model())
186 menu()->Cancel(); 180 menu()->Cancel();
187 } 181 }
188 182
189 BookmarkMenuController::~BookmarkMenuController() { 183 BookmarkMenuController::~BookmarkMenuController() {
190 menu_delegate_->profile()->GetBookmarkModel()->RemoveObserver(this); 184 menu_delegate_->profile()->GetBookmarkModel()->RemoveObserver(this);
191 if (observer_) 185 if (observer_)
192 observer_->BookmarkMenuDeleted(this); 186 observer_->BookmarkMenuDeleted(this);
193 } 187 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698