Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 |
| OLD | NEW |