Commit fe2fccdd authored by Wei Li's avatar Wei Li Committed by Commit Bot

Allow AltGr+Arrows keys used for navigation

Add shortcut keys AltGr+Left/Right for nagivating back and forth among
pages. This allows users of some European keyboards to navigate with one
hand key operations.

BUG=613201

Change-Id: I5eceeaacf0df8029f2b1d6f7dd6a2d85e1100682
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1993845Reviewed-by: default avatarPeter Kasting <pkasting@chromium.org>
Reviewed-by: default avatarScott Violet <sky@chromium.org>
Commit-Queue: Wei Li <weili@chromium.org>
Cr-Commit-Position: refs/heads/master@{#732678}
parent 1dfa4882
......@@ -29,14 +29,14 @@ constexpr char kAshAcceleratorsHash[] = "1287cacd678f63ab151fbf25383ac19c";
#if BUILDFLAG(GOOGLE_CHROME_BRANDING)
// Internal builds add an extra accelerator for the Feedback app.
// The total number of Chrome accelerators (available on Chrome OS).
constexpr int kChromeAcceleratorsTotalNum = 93;
constexpr int kChromeAcceleratorsTotalNum = 95;
// The hash of Chrome accelerators (available on Chrome OS).
constexpr char kChromeAcceleratorsHash[] = "73c842a72d77e7b9e69e92a6ee7900d3";
constexpr char kChromeAcceleratorsHash[] = "ef0b7eb1a1dabd26e964c6593e4698a4";
#else
// The total number of Chrome accelerators (available on Chrome OS).
constexpr int kChromeAcceleratorsTotalNum = 92;
constexpr int kChromeAcceleratorsTotalNum = 94;
// The hash of Chrome accelerators (available on Chrome OS).
constexpr char kChromeAcceleratorsHash[] = "7c45362e298cf77aae142dec7154adcf";
constexpr char kChromeAcceleratorsHash[] = "f22167989af00d94f8de75cbc89b977e";
#endif // BUILDFLAG(GOOGLE_CHROME_BRANDING)
const char* BooleanToString(bool value) {
......
......@@ -170,6 +170,7 @@ const AcceleratorMapping kAcceleratorMap[] = {
// bindings as well. Mapping with just Alt appear here, and should have an
// alternative mapping in the block above.
{ui::VKEY_LEFT, ui::EF_ALT_DOWN, IDC_BACK},
{ui::VKEY_LEFT, ui::EF_ALTGR_DOWN, IDC_BACK},
#if BUILDFLAG(ENABLE_PRINTING)
{ui::VKEY_P, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, IDC_BASIC_PRINT},
#endif // ENABLE_PRINTING
......@@ -190,6 +191,7 @@ const AcceleratorMapping kAcceleratorMap[] = {
{ui::VKEY_K, ui::EF_CONTROL_DOWN, IDC_FOCUS_SEARCH},
{ui::VKEY_T, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, IDC_FOCUS_TOOLBAR},
{ui::VKEY_RIGHT, ui::EF_ALT_DOWN, IDC_FORWARD},
{ui::VKEY_RIGHT, ui::EF_ALTGR_DOWN, IDC_FORWARD},
{ui::VKEY_HOME, ui::EF_ALT_DOWN, IDC_HOME},
{ui::VKEY_E, ui::EF_ALT_DOWN, IDC_SHOW_APP_MENU},
{ui::VKEY_F, ui::EF_ALT_DOWN, IDC_SHOW_APP_MENU},
......
......@@ -42,7 +42,8 @@ TEST(AcceleratorTableTest, CheckDuplicatedAccelerators) {
<< "Duplicated accelerator: " << entry.keycode << ", "
<< (entry.modifiers & ui::EF_SHIFT_DOWN) << ", "
<< (entry.modifiers & ui::EF_CONTROL_DOWN) << ", "
<< (entry.modifiers & ui::EF_ALT_DOWN);
<< (entry.modifiers & ui::EF_ALT_DOWN) << ", "
<< (entry.modifiers & ui::EF_ALTGR_DOWN);
}
}
......@@ -98,7 +99,8 @@ TEST(AcceleratorTableTest, CheckDuplicatedAcceleratorsAsh) {
<< "Duplicated accelerator: " << entry.keycode << ", "
<< (entry.modifiers & ui::EF_SHIFT_DOWN) << ", "
<< (entry.modifiers & ui::EF_CONTROL_DOWN) << ", "
<< (entry.modifiers & ui::EF_ALT_DOWN) << ", action "
<< (entry.modifiers & ui::EF_ALT_DOWN) << ", "
<< (entry.modifiers & ui::EF_ALTGR_DOWN) << ", action "
<< (ash_entry.action);
}
}
......
......@@ -133,6 +133,10 @@ bool Accelerator::IsAltDown() const {
return (modifiers_ & EF_ALT_DOWN) != 0;
}
bool Accelerator::IsAltGrDown() const {
return (modifiers_ & EF_ALTGR_DOWN) != 0;
}
bool Accelerator::IsCmdDown() const {
return (modifiers_ & EF_COMMAND_DOWN) != 0;
}
......
......@@ -83,6 +83,7 @@ class UI_BASE_EXPORT Accelerator {
bool IsShiftDown() const;
bool IsCtrlDown() const;
bool IsAltDown() const;
bool IsAltGrDown() const;
bool IsCmdDown() const;
bool IsRepeat() const;
......
......@@ -357,8 +357,8 @@ void Combobox::OnBoundsChanged(const gfx::Rect& previous_bounds) {
bool Combobox::SkipDefaultKeyEventProcessing(const ui::KeyEvent& e) {
// Escape should close the drop down list when it is active, not host UI.
if (e.key_code() != ui::VKEY_ESCAPE ||
e.IsShiftDown() || e.IsControlDown() || e.IsAltDown()) {
if (e.key_code() != ui::VKEY_ESCAPE || e.IsShiftDown() || e.IsControlDown() ||
e.IsAltDown() || e.IsAltGrDown()) {
return false;
}
return !!menu_runner_;
......
......@@ -553,7 +553,8 @@ void FocusManager::RemoveFocusChangeListener(FocusChangeListener* listener) {
}
bool FocusManager::ProcessArrowKeyTraversal(const ui::KeyEvent& event) {
if (event.IsShiftDown() || event.IsControlDown() || event.IsAltDown())
if (event.IsShiftDown() || event.IsControlDown() || event.IsAltDown() ||
event.IsAltGrDown())
return false;
const ui::KeyboardCode key = event.key_code();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment