Index: chrome/browser/ui/views/accelerator_table.cc |
diff --git a/chrome/browser/ui/views/accelerator_table.cc b/chrome/browser/ui/views/accelerator_table.cc |
index 0aded273fff70dd16988ca808ea67a2c62d73e35..7fccc9fdb7607cd80401e9533fbe96134ba203b7 100644 |
--- a/chrome/browser/ui/views/accelerator_table.cc |
+++ b/chrome/browser/ui/views/accelerator_table.cc |
@@ -6,6 +6,10 @@ |
#include <stddef.h> |
+#include <algorithm> |
+#include <initializer_list> |
+#include <tuple> |
+ |
#include "base/macros.h" |
#include "build/build_config.h" |
#include "chrome/app/chrome_command_ids.h" |
@@ -170,7 +174,7 @@ const AcceleratorMapping kAcceleratorMap[] = { |
{ ui::VKEY_BROWSER_STOP, ui::EF_NONE, IDC_STOP }, |
{ ui::VKEY_P, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, |
IDC_TOUCH_HUD_PROJECTION_TOGGLE }, |
-#else // !OS_MACOSX |
+#else |
{ ui::VKEY_ESCAPE, ui::EF_SHIFT_DOWN, IDC_TASK_MANAGER }, |
{ ui::VKEY_DELETE, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, |
IDC_CLEAR_BROWSING_DATA }, |
@@ -196,7 +200,7 @@ const AcceleratorMapping kAcceleratorMap[] = { |
{ ui::VKEY_T, kPlatformModifier, IDC_NEW_TAB }, |
{ ui::VKEY_N, kPlatformModifier, IDC_NEW_WINDOW }, |
{ ui::VKEY_T, ui::EF_SHIFT_DOWN | kPlatformModifier, IDC_RESTORE_TAB }, |
-#endif // !OS_CHROMEOS && !OS_MACOSX |
+#endif // !OS_CHROMEOS |
#if defined(OS_MACOSX) |
tapted
2016/06/28 05:19:55
Something weird has happened with the diff - I thi
|
// VKEY_OEM_4 is Left Brace '[{' key. |
@@ -275,11 +279,14 @@ std::vector<AcceleratorMapping> GetAcceleratorList() { |
accelerators.insert(accelerators.begin(), std::begin(kAcceleratorMap), |
std::end(kAcceleratorMap)); |
#if defined(OS_MACOSX) |
+#if 1 |
// Alt, Control, Shift without Command and accelerators without modifiers |
// are not very typical for native Mac apps. Simplify the kAcceleratorMap |
// table by filtering them out. |
- auto it = std::remove_if(accelerators.begin(), accelerators.end(), |
- [](const AcceleratorMapping& m) { |
+ std::vector<AcceleratorMapping> accelerators_mblsha = accelerators; |
+ auto remove_start_mblsha = std::remove_if(accelerators_mblsha.begin(), |
+ accelerators_mblsha.end(), |
+ [](const AcceleratorMapping& m) { |
if (m.modifiers & ui::EF_COMMAND_DOWN) { |
// Command is Mac-specific, so this accelerator should be enabled. |
return false; |
@@ -290,7 +297,53 @@ std::vector<AcceleratorMapping> GetAcceleratorList() { |
m.modifiers & ui::EF_ALT_DOWN || |
m.modifiers & ui::EF_CONTROL_DOWN; |
}); |
- accelerators.erase(it, accelerators.end()); |
+ accelerators_mblsha.erase(remove_start_mblsha, accelerators_mblsha.end()); |
+#endif |
+ |
+ // Alt by itself (or with just shift) is never used on Mac since it's used |
+ // to generate non-ASCII characters. Such commands are given Mac-specific |
+ // bindings as well, so remove the mappings with Alt, but not those with |
+ // Command or Control. |
+ const int kMask = |
+ ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN; |
+ auto remove_start = std::remove_if(accelerators.begin(), accelerators.end(), |
+ [](const AcceleratorMapping& m) { |
+ return (m.modifiers & kMask) == ui::EF_ALT_DOWN; |
+ }); |
+ |
+#if DCHECK_IS_ON() |
+ // For everything being removed, ensure there's another mapping. |
+ for (auto it = remove_start; it != accelerators.end(); ++it) { |
+ auto found = std::find_if(accelerators.begin(), remove_start, |
+ [&it](const AcceleratorMapping& m) { |
+ return m.command_id == it->command_id; |
+ }); |
+ DCHECK(found != accelerators.end()); |
+ } |
+#endif |
+ accelerators.erase(remove_start, accelerators.end()); |
+ |
+#if 1 |
+ VLOG(1) << "accelerators"; |
+ for (auto d : accelerators) { |
+ VLOG(1) << d.command_id << " modifiers:" |
+ << (d.modifiers & ui::EF_COMMAND_DOWN ? "(Cmd)" : "") |
+ << (d.modifiers & ui::EF_CONTROL_DOWN ? "(Ctrl)" : "") |
+ << (d.modifiers & ui::EF_ALT_DOWN ? "(Alt)" : "") |
+ << (d.modifiers & ui::EF_SHIFT_DOWN ? "(Shift)" : "") |
+ << "; keycode:" << d.keycode; |
+ } |
+ |
+ VLOG(1) << "\n\n\naccelerators_mblsha"; |
+ for (auto d : accelerators_mblsha) { |
+ VLOG(1) << d.command_id << " modifiers:" |
+ << (d.modifiers & ui::EF_COMMAND_DOWN ? "(Cmd)" : "") |
+ << (d.modifiers & ui::EF_CONTROL_DOWN ? "(Ctrl)" : "") |
+ << (d.modifiers & ui::EF_ALT_DOWN ? "(Alt)" : "") |
+ << (d.modifiers & ui::EF_SHIFT_DOWN ? "(Shift)" : "") |
+ << "; keycode:" << d.keycode; |
+ } |
+#endif |
#endif // OS_MACOSX |
} |
return accelerators; |