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

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

Issue 1216053013: [Extension Toolbar Redesign] Wants to act treatment, redux - left click (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 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
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/toolbar_action_view.h" 5 #include "chrome/browser/ui/views/toolbar/toolbar_action_view.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "chrome/browser/chrome_notification_types.h" 9 #include "chrome/browser/chrome_notification_types.h"
10 #include "chrome/browser/profiles/profile.h" 10 #include "chrome/browser/profiles/profile.h"
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 wants_to_run_border_->Paint(*this, canvas); 130 wants_to_run_border_->Paint(*this, canvas);
131 } 131 }
132 132
133 void ToolbarActionView::GetAccessibleState(ui::AXViewState* state) { 133 void ToolbarActionView::GetAccessibleState(ui::AXViewState* state) {
134 views::MenuButton::GetAccessibleState(state); 134 views::MenuButton::GetAccessibleState(state);
135 state->role = ui::AX_ROLE_BUTTON; 135 state->role = ui::AX_ROLE_BUTTON;
136 } 136 }
137 137
138 void ToolbarActionView::ButtonPressed(views::Button* sender, 138 void ToolbarActionView::ButtonPressed(views::Button* sender,
139 const ui::Event& event) { 139 const ui::Event& event) {
140 view_controller_->ExecuteAction(true); 140 gfx::Point menu_point;
141 ui::MenuSourceType type = ui::MENU_SOURCE_NONE;
142 if (event.IsMouseEvent()) {
143 menu_point = static_cast<const ui::MouseEvent&>(event).location();
144 type = ui::MENU_SOURCE_MOUSE;
145 } else if (event.IsKeyEvent()) {
146 menu_point = GetKeyboardContextMenuLocation();
147 type = ui::MENU_SOURCE_KEYBOARD;
148 } else if (event.IsGestureEvent()) {
149 menu_point = static_cast<const ui::GestureEvent&>(event).location();
150 type = ui::MENU_SOURCE_TOUCH;
151 }
152
153 HandleActivation(menu_point, type);
141 } 154 }
142 155
143 void ToolbarActionView::UpdateState() { 156 void ToolbarActionView::UpdateState() {
144 content::WebContents* web_contents = GetCurrentWebContents(); 157 content::WebContents* web_contents = GetCurrentWebContents();
145 if (SessionTabHelper::IdForTab(web_contents) < 0) 158 if (SessionTabHelper::IdForTab(web_contents) < 0)
146 return; 159 return;
147 160
148 if (!view_controller_->IsEnabled(web_contents)) 161 if (!view_controller_->IsEnabled(web_contents) &&
149 SetState(views::CustomButton::STATE_DISABLED); 162 !view_controller_->DisabledClickOpensMenu()) {
150 else if (state() == views::CustomButton::STATE_DISABLED) 163 SetState(views::CustomButton::STATE_DISABLED);
164 } else if (state() == views::CustomButton::STATE_DISABLED) {
151 SetState(views::CustomButton::STATE_NORMAL); 165 SetState(views::CustomButton::STATE_NORMAL);
166 }
152 167
153 wants_to_run_ = view_controller_->WantsToRun(web_contents); 168 wants_to_run_ = view_controller_->WantsToRun(web_contents);
154 169
155 gfx::ImageSkia icon( 170 gfx::ImageSkia icon(
156 view_controller_->GetIcon(web_contents, 171 view_controller_->GetIcon(web_contents,
157 GetPreferredSize()).AsImageSkia()); 172 GetPreferredSize()).AsImageSkia());
158 173
159 if (!icon.isNull()) { 174 if (!icon.isNull()) {
160 ThemeService* theme = ThemeServiceFactory::GetForProfile(profile_); 175 ThemeService* theme = ThemeServiceFactory::GetForProfile(profile_);
161 176
(...skipping 13 matching lines...) Expand all
175 const content::NotificationSource& source, 190 const content::NotificationSource& source,
176 const content::NotificationDetails& details) { 191 const content::NotificationDetails& details) {
177 DCHECK_EQ(chrome::NOTIFICATION_BROWSER_THEME_CHANGED, type); 192 DCHECK_EQ(chrome::NOTIFICATION_BROWSER_THEME_CHANGED, type);
178 UpdateState(); 193 UpdateState();
179 } 194 }
180 195
181 bool ToolbarActionView::Activate() { 196 bool ToolbarActionView::Activate() {
182 if (!view_controller_->HasPopup(GetCurrentWebContents())) 197 if (!view_controller_->HasPopup(GetCurrentWebContents()))
183 return true; 198 return true;
184 199
185 view_controller_->ExecuteAction(true); 200 // Unfortunately, we don't get any of the event points for this call. Since
201 // these are only used for showing a context menu when an action is disabled,
202 // it's not that big a deal. Fake it.
203 // TODO(devlin): This could obviously be improved.
204 HandleActivation(GetKeyboardContextMenuLocation(), ui::MENU_SOURCE_KEYBOARD);
186 205
187 // TODO(erikkay): Run a nested modal loop while the mouse is down to 206 // TODO(erikkay): Run a nested modal loop while the mouse is down to
188 // enable menu-like drag-select behavior. 207 // enable menu-like drag-select behavior.
189 208
190 // The return value of this method is returned via OnMousePressed. 209 // The return value of this method is returned via OnMousePressed.
191 // We need to return false here since we're handing off focus to another 210 // We need to return false here since we're handing off focus to another
192 // widget/view, and true will grab it right back and try to send events 211 // widget/view, and true will grab it right back and try to send events
193 // to us. 212 // to us.
194 return false; 213 return false;
195 } 214 }
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
374 if (menu_controller->in_nested_run()) { 393 if (menu_controller->in_nested_run()) {
375 // There is another menu showing. Close the outermost menu (since we are 394 // There is another menu showing. Close the outermost menu (since we are
376 // shown in the same menu, we don't want to close the whole thing). 395 // shown in the same menu, we don't want to close the whole thing).
377 menu_controller->Cancel(views::MenuController::EXIT_OUTERMOST); 396 menu_controller->Cancel(views::MenuController::EXIT_OUTERMOST);
378 return true; 397 return true;
379 } 398 }
380 } 399 }
381 400
382 return false; 401 return false;
383 } 402 }
403
404 void ToolbarActionView::HandleActivation(const gfx::Point& menu_point,
405 ui::MenuSourceType source_type) {
406 if (!view_controller_->IsEnabled(GetCurrentWebContents())) {
407 // We should only get a button pressed event with a non-enabled action if
408 // the left-click behavior should open the menu.
409 DCHECK(view_controller_->DisabledClickOpensMenu());
410 context_menu_controller()->ShowContextMenuForView(
411 this, menu_point, source_type);
412 } else {
413 view_controller_->ExecuteAction(true);
414 }
415 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/views/toolbar/toolbar_action_view.h ('k') | chrome/browser/ui/views/toolbar/toolbar_action_view_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698