From 6e4f74ae35c4c0da9fa8a2d3020992106a151ccd Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Mon, 21 Oct 2013 14:25:36 +0800 Subject: [PATCH] Allow more special keys in the accelerator. --- browser/ui/accelerator_util.cc | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/browser/ui/accelerator_util.cc b/browser/ui/accelerator_util.cc index 41cce2c..64aae0b 100644 --- a/browser/ui/accelerator_util.cc +++ b/browser/ui/accelerator_util.cc @@ -117,6 +117,8 @@ bool StringToAccelerator(const std::string& description, int modifiers = ui::EF_NONE; ui::KeyboardCode key = ui::VKEY_UNKNOWN; for (size_t i = 0; i < tokens.size(); i++) { + // We use straight comparing instead of map because the accelerator tends + // to be correct and usually only uses few special tokens. if (tokens[i].size() == 1) { bool shifted = false; key = KeyboardCodeFromCharCode(tokens[i][0], &shifted); @@ -130,6 +132,46 @@ bool StringToAccelerator(const std::string& description, modifiers |= ui::EF_ALT_DOWN; } else if (tokens[i] == "shift") { modifiers |= ui::EF_SHIFT_DOWN; + } else if (tokens[i] == "tab") { + key = ui::VKEY_TAB; + } else if (tokens[i] == "backspace") { + key = ui::VKEY_BACK; + } else if (tokens[i] == "delete") { + key = ui::VKEY_DELETE; + } else if (tokens[i] == "enter" || tokens[i] == "return") { + key = ui::VKEY_RETURN; + } else if (tokens[i] == "up") { + key = ui::VKEY_UP; + } else if (tokens[i] == "down") { + key = ui::VKEY_DOWN; + } else if (tokens[i] == "left") { + key = ui::VKEY_LEFT; + } else if (tokens[i] == "right") { + key = ui::VKEY_RIGHT; + } else if (tokens[i] == "home") { + key = ui::VKEY_HOME; + } else if (tokens[i] == "end") { + key = ui::VKEY_END; + } else if (tokens[i] == "pagedown") { + key = ui::VKEY_PRIOR; + } else if (tokens[i] == "pageup") { + key = ui::VKEY_NEXT; + } else if (tokens[i] == "esc") { + key = ui::VKEY_ESCAPE; + } else if (tokens[i] == "volumemute") { + key = ui::VKEY_VOLUME_MUTE; + } else if (tokens[i] == "volumeup") { + key = ui::VKEY_VOLUME_UP; + } else if (tokens[i] == "volumedown") { + key = ui::VKEY_VOLUME_DOWN; + } else if (tokens[i] == "medianexttrack") { + key = ui::VKEY_MEDIA_NEXT_TRACK; + } else if (tokens[i] == "mediaprevioustrack") { + key = ui::VKEY_MEDIA_PREV_TRACK; + } else if (tokens[i] == "mediastop") { + key = ui::VKEY_MEDIA_STOP; + } else if (tokens[i] == "mediaplaypause") { + key = ui::VKEY_MEDIA_PLAY_PAUSE; } else { LOG(WARNING) << "Invalid accelerator token: " << tokens[i]; return false; -- 2.7.4