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

Side by Side Diff: chrome/browser/ui/views/accelerator_table.cc

Issue 2074643003: MacViews: Views accelerators table should match the Cocoa one. (Closed) Base URL: ssh://bitbucket.browser.yandex-team.ru/chromium/src.git@master
Patch Set: Add tapted's implementation + debugging. Created 4 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/accelerator_table.h" 5 #include "chrome/browser/ui/views/accelerator_table.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <algorithm>
10 #include <initializer_list>
11 #include <tuple>
12
9 #include "base/macros.h" 13 #include "base/macros.h"
10 #include "build/build_config.h" 14 #include "build/build_config.h"
11 #include "chrome/app/chrome_command_ids.h" 15 #include "chrome/app/chrome_command_ids.h"
12 #include "ui/base/accelerators/accelerator.h" 16 #include "ui/base/accelerators/accelerator.h"
13 #include "ui/events/event_constants.h" 17 #include "ui/events/event_constants.h"
14 18
15 #if defined(USE_ASH) 19 #if defined(USE_ASH)
16 #include "ash/accelerators/accelerator_table.h" 20 #include "ash/accelerators/accelerator_table.h"
17 #endif 21 #endif
18 22
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 // On Chrome OS, VKEY_BROWSER_SEARCH is handled in Ash. 167 // On Chrome OS, VKEY_BROWSER_SEARCH is handled in Ash.
164 { ui::VKEY_BACK, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, 168 { ui::VKEY_BACK, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN,
165 IDC_CLEAR_BROWSING_DATA }, 169 IDC_CLEAR_BROWSING_DATA },
166 { ui::VKEY_OEM_2, ui::EF_CONTROL_DOWN, IDC_HELP_PAGE_VIA_KEYBOARD }, 170 { ui::VKEY_OEM_2, ui::EF_CONTROL_DOWN, IDC_HELP_PAGE_VIA_KEYBOARD },
167 { ui::VKEY_OEM_2, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, 171 { ui::VKEY_OEM_2, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN,
168 IDC_HELP_PAGE_VIA_KEYBOARD }, 172 IDC_HELP_PAGE_VIA_KEYBOARD },
169 { ui::VKEY_BROWSER_FAVORITES, ui::EF_NONE, IDC_SHOW_BOOKMARK_MANAGER }, 173 { ui::VKEY_BROWSER_FAVORITES, ui::EF_NONE, IDC_SHOW_BOOKMARK_MANAGER },
170 { ui::VKEY_BROWSER_STOP, ui::EF_NONE, IDC_STOP }, 174 { ui::VKEY_BROWSER_STOP, ui::EF_NONE, IDC_STOP },
171 { ui::VKEY_P, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, 175 { ui::VKEY_P, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN,
172 IDC_TOUCH_HUD_PROJECTION_TOGGLE }, 176 IDC_TOUCH_HUD_PROJECTION_TOGGLE },
173 #else // !OS_MACOSX 177 #else
174 { ui::VKEY_ESCAPE, ui::EF_SHIFT_DOWN, IDC_TASK_MANAGER }, 178 { ui::VKEY_ESCAPE, ui::EF_SHIFT_DOWN, IDC_TASK_MANAGER },
175 { ui::VKEY_DELETE, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, 179 { ui::VKEY_DELETE, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN,
176 IDC_CLEAR_BROWSING_DATA }, 180 IDC_CLEAR_BROWSING_DATA },
177 { ui::VKEY_LMENU, ui::EF_NONE, IDC_FOCUS_MENU_BAR }, 181 { ui::VKEY_LMENU, ui::EF_NONE, IDC_FOCUS_MENU_BAR },
178 { ui::VKEY_MENU, ui::EF_NONE, IDC_FOCUS_MENU_BAR }, 182 { ui::VKEY_MENU, ui::EF_NONE, IDC_FOCUS_MENU_BAR },
179 { ui::VKEY_RMENU, ui::EF_NONE, IDC_FOCUS_MENU_BAR }, 183 { ui::VKEY_RMENU, ui::EF_NONE, IDC_FOCUS_MENU_BAR },
180 // On Windows, all VKEY_BROWSER_* keys except VKEY_BROWSER_SEARCH are handled 184 // On Windows, all VKEY_BROWSER_* keys except VKEY_BROWSER_SEARCH are handled
181 // via WM_APPCOMMAND. 185 // via WM_APPCOMMAND.
182 { ui::VKEY_BROWSER_SEARCH, ui::EF_NONE, IDC_FOCUS_SEARCH }, 186 { ui::VKEY_BROWSER_SEARCH, ui::EF_NONE, IDC_FOCUS_SEARCH },
183 { ui::VKEY_M, ui::EF_SHIFT_DOWN | kPlatformModifier, IDC_SHOW_AVATAR_MENU }, 187 { ui::VKEY_M, ui::EF_SHIFT_DOWN | kPlatformModifier, IDC_SHOW_AVATAR_MENU },
184 // On ChromeOS, these keys are assigned to change UI scale. 188 // On ChromeOS, these keys are assigned to change UI scale.
185 { ui::VKEY_OEM_PLUS, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, IDC_ZOOM_PLUS }, 189 { ui::VKEY_OEM_PLUS, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, IDC_ZOOM_PLUS },
186 { ui::VKEY_OEM_MINUS, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, 190 { ui::VKEY_OEM_MINUS, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN,
187 IDC_ZOOM_MINUS }, 191 IDC_ZOOM_MINUS },
188 // For each entry here add an entry into kChromeCmdId2AshActionId below 192 // For each entry here add an entry into kChromeCmdId2AshActionId below
189 // if Ash has a corresponding accelerator. 193 // if Ash has a corresponding accelerator.
190 #if defined(GOOGLE_CHROME_BUILD) 194 #if defined(GOOGLE_CHROME_BUILD)
191 { ui::VKEY_I, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, IDC_FEEDBACK }, 195 { ui::VKEY_I, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, IDC_FEEDBACK },
192 #endif 196 #endif
193 { ui::VKEY_Q, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, IDC_EXIT }, 197 { ui::VKEY_Q, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, IDC_EXIT },
194 { ui::VKEY_N, ui::EF_SHIFT_DOWN | kPlatformModifier, 198 { ui::VKEY_N, ui::EF_SHIFT_DOWN | kPlatformModifier,
195 IDC_NEW_INCOGNITO_WINDOW }, 199 IDC_NEW_INCOGNITO_WINDOW },
196 { ui::VKEY_T, kPlatformModifier, IDC_NEW_TAB }, 200 { ui::VKEY_T, kPlatformModifier, IDC_NEW_TAB },
197 { ui::VKEY_N, kPlatformModifier, IDC_NEW_WINDOW }, 201 { ui::VKEY_N, kPlatformModifier, IDC_NEW_WINDOW },
198 { ui::VKEY_T, ui::EF_SHIFT_DOWN | kPlatformModifier, IDC_RESTORE_TAB }, 202 { ui::VKEY_T, ui::EF_SHIFT_DOWN | kPlatformModifier, IDC_RESTORE_TAB },
199 #endif // !OS_CHROMEOS && !OS_MACOSX 203 #endif // !OS_CHROMEOS
200 204
201 #if defined(OS_MACOSX) 205 #if defined(OS_MACOSX)
tapted 2016/06/28 05:19:55 Something weird has happened with the diff - I thi
202 // VKEY_OEM_4 is Left Brace '[{' key. 206 // VKEY_OEM_4 is Left Brace '[{' key.
203 { ui::VKEY_OEM_4, ui::EF_COMMAND_DOWN, IDC_BACK }, 207 { ui::VKEY_OEM_4, ui::EF_COMMAND_DOWN, IDC_BACK },
204 { ui::VKEY_P, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, IDC_BASIC_PRINT }, 208 { ui::VKEY_P, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, IDC_BASIC_PRINT },
205 { ui::VKEY_BACK, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN, 209 { ui::VKEY_BACK, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN,
206 IDC_CLEAR_BROWSING_DATA }, 210 IDC_CLEAR_BROWSING_DATA },
207 { ui::VKEY_C, ui::EF_COMMAND_DOWN, IDC_CONTENT_CONTEXT_COPY }, 211 { ui::VKEY_C, ui::EF_COMMAND_DOWN, IDC_CONTENT_CONTEXT_COPY },
208 { ui::VKEY_X, ui::EF_COMMAND_DOWN, IDC_CONTENT_CONTEXT_CUT }, 212 { ui::VKEY_X, ui::EF_COMMAND_DOWN, IDC_CONTENT_CONTEXT_CUT },
209 { ui::VKEY_V, ui::EF_COMMAND_DOWN, IDC_CONTENT_CONTEXT_PASTE }, 213 { ui::VKEY_V, ui::EF_COMMAND_DOWN, IDC_CONTENT_CONTEXT_PASTE },
210 { ui::VKEY_V, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN, 214 { ui::VKEY_V, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN,
211 IDC_CONTENT_CONTEXT_PASTE_AND_MATCH_STYLE }, 215 IDC_CONTENT_CONTEXT_PASTE_AND_MATCH_STYLE },
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
268 #endif // defined(USE_ASH) 272 #endif // defined(USE_ASH)
269 273
270 } // namespace 274 } // namespace
271 275
272 std::vector<AcceleratorMapping> GetAcceleratorList() { 276 std::vector<AcceleratorMapping> GetAcceleratorList() {
273 CR_DEFINE_STATIC_LOCAL(std::vector<AcceleratorMapping>, accelerators, ()); 277 CR_DEFINE_STATIC_LOCAL(std::vector<AcceleratorMapping>, accelerators, ());
274 if (accelerators.empty()) { 278 if (accelerators.empty()) {
275 accelerators.insert(accelerators.begin(), std::begin(kAcceleratorMap), 279 accelerators.insert(accelerators.begin(), std::begin(kAcceleratorMap),
276 std::end(kAcceleratorMap)); 280 std::end(kAcceleratorMap));
277 #if defined(OS_MACOSX) 281 #if defined(OS_MACOSX)
282 #if 1
278 // Alt, Control, Shift without Command and accelerators without modifiers 283 // Alt, Control, Shift without Command and accelerators without modifiers
279 // are not very typical for native Mac apps. Simplify the kAcceleratorMap 284 // are not very typical for native Mac apps. Simplify the kAcceleratorMap
280 // table by filtering them out. 285 // table by filtering them out.
281 auto it = std::remove_if(accelerators.begin(), accelerators.end(), 286 std::vector<AcceleratorMapping> accelerators_mblsha = accelerators;
282 [](const AcceleratorMapping& m) { 287 auto remove_start_mblsha = std::remove_if(accelerators_mblsha.begin(),
288 accelerators_mblsha.end(),
289 [](const AcceleratorMapping& m) {
283 if (m.modifiers & ui::EF_COMMAND_DOWN) { 290 if (m.modifiers & ui::EF_COMMAND_DOWN) {
284 // Command is Mac-specific, so this accelerator should be enabled. 291 // Command is Mac-specific, so this accelerator should be enabled.
285 return false; 292 return false;
286 } 293 }
287 return m.modifiers == ui::EF_NONE || 294 return m.modifiers == ui::EF_NONE ||
288 m.modifiers == ui::EF_SHIFT_DOWN || 295 m.modifiers == ui::EF_SHIFT_DOWN ||
289 m.modifiers == (ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN) || 296 m.modifiers == (ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN) ||
290 m.modifiers & ui::EF_ALT_DOWN || 297 m.modifiers & ui::EF_ALT_DOWN ||
291 m.modifiers & ui::EF_CONTROL_DOWN; 298 m.modifiers & ui::EF_CONTROL_DOWN;
292 }); 299 });
293 accelerators.erase(it, accelerators.end()); 300 accelerators_mblsha.erase(remove_start_mblsha, accelerators_mblsha.end());
301 #endif
302
303 // Alt by itself (or with just shift) is never used on Mac since it's used
304 // to generate non-ASCII characters. Such commands are given Mac-specific
305 // bindings as well, so remove the mappings with Alt, but not those with
306 // Command or Control.
307 const int kMask =
308 ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN;
309 auto remove_start = std::remove_if(accelerators.begin(), accelerators.end(),
310 [](const AcceleratorMapping& m) {
311 return (m.modifiers & kMask) == ui::EF_ALT_DOWN;
312 });
313
314 #if DCHECK_IS_ON()
315 // For everything being removed, ensure there's another mapping.
316 for (auto it = remove_start; it != accelerators.end(); ++it) {
317 auto found = std::find_if(accelerators.begin(), remove_start,
318 [&it](const AcceleratorMapping& m) {
319 return m.command_id == it->command_id;
320 });
321 DCHECK(found != accelerators.end());
322 }
323 #endif
324 accelerators.erase(remove_start, accelerators.end());
325
326 #if 1
327 VLOG(1) << "accelerators";
328 for (auto d : accelerators) {
329 VLOG(1) << d.command_id << " modifiers:"
330 << (d.modifiers & ui::EF_COMMAND_DOWN ? "(Cmd)" : "")
331 << (d.modifiers & ui::EF_CONTROL_DOWN ? "(Ctrl)" : "")
332 << (d.modifiers & ui::EF_ALT_DOWN ? "(Alt)" : "")
333 << (d.modifiers & ui::EF_SHIFT_DOWN ? "(Shift)" : "")
334 << "; keycode:" << d.keycode;
335 }
336
337 VLOG(1) << "\n\n\naccelerators_mblsha";
338 for (auto d : accelerators_mblsha) {
339 VLOG(1) << d.command_id << " modifiers:"
340 << (d.modifiers & ui::EF_COMMAND_DOWN ? "(Cmd)" : "")
341 << (d.modifiers & ui::EF_CONTROL_DOWN ? "(Ctrl)" : "")
342 << (d.modifiers & ui::EF_ALT_DOWN ? "(Alt)" : "")
343 << (d.modifiers & ui::EF_SHIFT_DOWN ? "(Shift)" : "")
344 << "; keycode:" << d.keycode;
345 }
346 #endif
294 #endif // OS_MACOSX 347 #endif // OS_MACOSX
295 } 348 }
296 return accelerators; 349 return accelerators;
297 } 350 }
298 351
299 bool GetAshAcceleratorForCommandId(int command_id, 352 bool GetAshAcceleratorForCommandId(int command_id,
300 ui::Accelerator* accelerator) { 353 ui::Accelerator* accelerator) {
301 #if defined(USE_ASH) 354 #if defined(USE_ASH)
302 for (size_t i = 0; i < kChromeCmdId2AshActionIdLength; ++i) { 355 for (size_t i = 0; i < kChromeCmdId2AshActionIdLength; ++i) {
303 if (command_id == kChromeCmdId2AshActionId[i].chrome_cmd_id) { 356 if (command_id == kChromeCmdId2AshActionId[i].chrome_cmd_id) {
(...skipping 23 matching lines...) Expand all
327 *accelerator = ui::Accelerator(ui::VKEY_C, kPlatformModifier); 380 *accelerator = ui::Accelerator(ui::VKEY_C, kPlatformModifier);
328 return true; 381 return true;
329 case IDC_PASTE: 382 case IDC_PASTE:
330 *accelerator = ui::Accelerator(ui::VKEY_V, kPlatformModifier); 383 *accelerator = ui::Accelerator(ui::VKEY_V, kPlatformModifier);
331 return true; 384 return true;
332 } 385 }
333 return false; 386 return false;
334 } 387 }
335 388
336 } // namespace chrome 389 } // namespace chrome
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698