From 30eabfb9f6982020471b6b09a22b342713f8fa73 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Mon, 21 Oct 2013 15:33:19 +0800 Subject: [PATCH] Allow "F1" - "F24" in accelerator. --- browser/ui/accelerator_util.cc | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/browser/ui/accelerator_util.cc b/browser/ui/accelerator_util.cc index 32ff423..f8af678 100644 --- a/browser/ui/accelerator_util.cc +++ b/browser/ui/accelerator_util.cc @@ -4,6 +4,8 @@ #include "browser/ui/accelerator_util.h" +#include + #include #include "base/string_util.h" @@ -15,6 +17,13 @@ namespace accelerator_util { namespace { +// The sscanf is deprecated in Windows. +#if defined(OS_WIN) +#define SSCANF sscanf_s +#else +#define SSCANF sscanf +#endif + // Return key code of the char. ui::KeyboardCode KeyboardCodeFromCharCode(char c, bool* shifted) { *shifted = false; @@ -161,6 +170,15 @@ bool StringToAccelerator(const std::string& description, key = ui::VKEY_MEDIA_STOP; } else if (tokens[i] == "mediaplaypause") { key = ui::VKEY_MEDIA_PLAY_PAUSE; + } else if (tokens[i].size() > 1 && tokens[i][0] == 'f') { + // F1 - F24. + int n; + if (SSCANF(tokens[i].c_str(), "f%d", &n) == 1 && n > 0 && n < 25) { + key = static_cast(ui::VKEY_F1 + n - 1); + } else { + LOG(WARNING) << tokens[i] << "is not available on keyboard"; + return false; + } } else { LOG(WARNING) << "Invalid accelerator token: " << tokens[i]; return false; -- 2.7.4