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

Side by Side Diff: chrome/browser/ui/views/toolbar/browser_action_view.cc

Issue 393943006: MacViews: Remove GetMenu() from MenuRunner. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix unit test compile Created 6 years, 5 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 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 #include "chrome/browser/ui/views/toolbar/browser_action_view.h" 5 #include "chrome/browser/ui/views/toolbar/browser_action_view.h"
6 6
7 #include "base/strings/utf_string_conversions.h" 7 #include "base/strings/utf_string_conversions.h"
8 #include "chrome/browser/chrome_notification_types.h" 8 #include "chrome/browser/chrome_notification_types.h"
9 #include "chrome/browser/extensions/api/commands/command_service.h" 9 #include "chrome/browser/extensions/api/commands/command_service.h"
10 #include "chrome/browser/extensions/extension_action.h" 10 #include "chrome/browser/extensions/extension_action.h"
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
103 Browser* browser, 103 Browser* browser,
104 BrowserActionView::Delegate* delegate) 104 BrowserActionView::Delegate* delegate)
105 : MenuButton(this, base::string16(), NULL, false), 105 : MenuButton(this, base::string16(), NULL, false),
106 browser_(browser), 106 browser_(browser),
107 browser_action_( 107 browser_action_(
108 extensions::ExtensionActionManager::Get(browser->profile())-> 108 extensions::ExtensionActionManager::Get(browser->profile())->
109 GetBrowserAction(*extension)), 109 GetBrowserAction(*extension)),
110 extension_(extension), 110 extension_(extension),
111 icon_factory_(browser->profile(), extension, browser_action_, this), 111 icon_factory_(browser->profile(), extension, browser_action_, this),
112 delegate_(delegate), 112 delegate_(delegate),
113 context_menu_(NULL),
114 called_registered_extension_command_(false), 113 called_registered_extension_command_(false),
115 icon_observer_(NULL) { 114 icon_observer_(NULL) {
116 SetHorizontalAlignment(gfx::ALIGN_CENTER); 115 SetHorizontalAlignment(gfx::ALIGN_CENTER);
117 set_context_menu_controller(this); 116 set_context_menu_controller(this);
118 117
119 // No UpdateState() here because View hierarchy not setup yet. Our parent 118 // No UpdateState() here because View hierarchy not setup yet. Our parent
120 // should call UpdateState() after creation. 119 // should call UpdateState() after creation.
121 120
122 content::NotificationSource notification_source = 121 content::NotificationSource notification_source =
123 content::Source<Profile>(browser_->profile()->GetOriginalProfile()); 122 content::Source<Profile>(browser_->profile()->GetOriginalProfile());
124 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_BROWSER_ACTION_UPDATED, 123 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_BROWSER_ACTION_UPDATED,
125 content::Source<ExtensionAction>(browser_action_)); 124 content::Source<ExtensionAction>(browser_action_));
126 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_COMMAND_ADDED, 125 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_COMMAND_ADDED,
127 notification_source); 126 notification_source);
128 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_COMMAND_REMOVED, 127 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_COMMAND_REMOVED,
129 notification_source); 128 notification_source);
130 129
131 // We also listen for browser theme changes on linux because a switch from or 130 // We also listen for browser theme changes on linux because a switch from or
132 // to GTK requires that we regrab our browser action images. 131 // to GTK requires that we regrab our browser action images.
133 registrar_.Add( 132 registrar_.Add(
134 this, 133 this,
135 chrome::NOTIFICATION_BROWSER_THEME_CHANGED, 134 chrome::NOTIFICATION_BROWSER_THEME_CHANGED,
136 content::Source<ThemeService>( 135 content::Source<ThemeService>(
137 ThemeServiceFactory::GetForProfile(browser->profile()))); 136 ThemeServiceFactory::GetForProfile(browser->profile())));
138 } 137 }
139 138
140 void BrowserActionButton::Destroy() { 139 void BrowserActionButton::Destroy() {
141 MaybeUnregisterExtensionCommand(false); 140 MaybeUnregisterExtensionCommand(false);
142 141
143 if (context_menu_) { 142 if (menu_runner_) {
144 context_menu_->Cancel(); 143 menu_runner_->Cancel();
145 base::MessageLoop::current()->DeleteSoon(FROM_HERE, this); 144 base::MessageLoop::current()->DeleteSoon(FROM_HERE, this);
146 } else { 145 } else {
147 delete this; 146 delete this;
148 } 147 }
149 } 148 }
150 149
151 void BrowserActionButton::ViewHierarchyChanged( 150 void BrowserActionButton::ViewHierarchyChanged(
152 const ViewHierarchyChangedDetails& details) { 151 const ViewHierarchyChangedDetails& details) {
153 if (details.is_add && !called_registered_extension_command_ && 152 if (details.is_add && !called_registered_extension_command_ &&
154 GetFocusManager()) { 153 GetFocusManager()) {
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 // already visible menu, in this case the Chrome menu. 199 // already visible menu, in this case the Chrome menu.
201 parent = BrowserView::GetBrowserViewForBrowser(browser_)->toolbar() 200 parent = BrowserView::GetBrowserViewForBrowser(browser_)->toolbar()
202 ->app_menu() 201 ->app_menu()
203 ->GetWidget(); 202 ->GetWidget();
204 } else { 203 } else {
205 parent = GetWidget(); 204 parent = GetWidget();
206 } 205 }
207 206
208 menu_runner_.reset( 207 menu_runner_.reset(
209 new views::MenuRunner(context_menu_contents.get(), run_types)); 208 new views::MenuRunner(context_menu_contents.get(), run_types));
210 context_menu_ = menu_runner_->GetMenu();
211 209
212 if (menu_runner_->RunMenuAt(parent, 210 if (menu_runner_->RunMenuAt(parent,
213 NULL, 211 NULL,
214 gfx::Rect(screen_loc, size()), 212 gfx::Rect(screen_loc, size()),
215 views::MENU_ANCHOR_TOPLEFT, 213 views::MENU_ANCHOR_TOPLEFT,
216 source_type) == 214 source_type) ==
217 views::MenuRunner::MENU_DELETED) { 215 views::MenuRunner::MENU_DELETED) {
218 return; 216 return;
219 } 217 }
220 218
221 menu_runner_.reset(); 219 menu_runner_.reset();
222 SetButtonNotPushed(); 220 SetButtonNotPushed();
223 context_menu_ = NULL;
224 } 221 }
225 222
226 void BrowserActionButton::UpdateState() { 223 void BrowserActionButton::UpdateState() {
227 int tab_id = delegate_->GetCurrentTabId(); 224 int tab_id = delegate_->GetCurrentTabId();
228 if (tab_id < 0) 225 if (tab_id < 0)
229 return; 226 return;
230 227
231 if (!IsEnabled(tab_id)) { 228 if (!IsEnabled(tab_id)) {
232 SetState(views::CustomButton::STATE_DISABLED); 229 SetState(views::CustomButton::STATE_DISABLED);
233 } else { 230 } else {
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
335 if (!views::View::ShouldShowContextMenuOnMousePress()) { 332 if (!views::View::ShouldShowContextMenuOnMousePress()) {
336 // See comments in MenuButton::Activate() as to why this is needed. 333 // See comments in MenuButton::Activate() as to why this is needed.
337 SetMouseHandler(NULL); 334 SetMouseHandler(NULL);
338 335
339 ShowContextMenu(gfx::Point(), ui::MENU_SOURCE_MOUSE); 336 ShowContextMenu(gfx::Point(), ui::MENU_SOURCE_MOUSE);
340 } 337 }
341 return false; 338 return false;
342 } 339 }
343 340
344 void BrowserActionButton::OnMouseReleased(const ui::MouseEvent& event) { 341 void BrowserActionButton::OnMouseReleased(const ui::MouseEvent& event) {
345 if (IsPopup() || context_menu_) { 342 if (IsPopup() || menu_runner_) {
346 // TODO(erikkay) this never actually gets called (probably because of the 343 // TODO(erikkay) this never actually gets called (probably because of the
347 // loss of focus). 344 // loss of focus).
348 MenuButton::OnMouseReleased(event); 345 MenuButton::OnMouseReleased(event);
349 } else { 346 } else {
350 LabelButton::OnMouseReleased(event); 347 LabelButton::OnMouseReleased(event);
351 } 348 }
352 } 349 }
353 350
354 void BrowserActionButton::OnMouseExited(const ui::MouseEvent& event) { 351 void BrowserActionButton::OnMouseExited(const ui::MouseEvent& event) {
355 if (IsPopup() || context_menu_) 352 if (IsPopup() || menu_runner_)
356 MenuButton::OnMouseExited(event); 353 MenuButton::OnMouseExited(event);
357 else 354 else
358 LabelButton::OnMouseExited(event); 355 LabelButton::OnMouseExited(event);
359 } 356 }
360 357
361 bool BrowserActionButton::OnKeyReleased(const ui::KeyEvent& event) { 358 bool BrowserActionButton::OnKeyReleased(const ui::KeyEvent& event) {
362 return IsPopup() ? MenuButton::OnKeyReleased(event) : 359 return IsPopup() ? MenuButton::OnKeyReleased(event) :
363 LabelButton::OnKeyReleased(event); 360 LabelButton::OnKeyReleased(event);
364 } 361 }
365 362
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
448 extensions::Command browser_action_command; 445 extensions::Command browser_action_command;
449 if (!only_if_active || !command_service->GetBrowserActionCommand( 446 if (!only_if_active || !command_service->GetBrowserActionCommand(
450 extension_->id(), 447 extension_->id(),
451 extensions::CommandService::ACTIVE_ONLY, 448 extensions::CommandService::ACTIVE_ONLY,
452 &browser_action_command, 449 &browser_action_command,
453 NULL)) { 450 NULL)) {
454 GetFocusManager()->UnregisterAccelerator(*keybinding_.get(), this); 451 GetFocusManager()->UnregisterAccelerator(*keybinding_.get(), this);
455 keybinding_.reset(NULL); 452 keybinding_.reset(NULL);
456 } 453 }
457 } 454 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/views/toolbar/browser_action_view.h ('k') | ui/views/controls/combobox/combobox.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698