Added the option to `KeyboardEvent` to specify the sent character by it's name (if...
authorHeilig Benedek <benecene@gmail.com>
Mon, 16 Nov 2015 03:15:13 +0000 (04:15 +0100)
committerHeilig Benedek <benecene@gmail.com>
Mon, 16 Nov 2015 03:54:21 +0000 (04:54 +0100)
atom/common/keyboad_util.cc
atom/common/keyboad_util.h
atom/common/native_mate_converters/blink_converter.cc

index 29d1a80..9426377 100644 (file)
@@ -2,12 +2,13 @@
 // Use of this source code is governed by the MIT license that can be
 // found in the LICENSE file.
 
+#include <string>
 #include "atom/common/keyboad_util.h"
 
 namespace atom {
 
 // Return key code of the char.
-ui::KeyboardCode KeyboardCodeFromCharCode(char c, bool* shifted) {
+ui::KeyboardCode KeyboardCodeFromCharCode(base::char16 c, bool* shifted) {
   *shifted = false;
   switch (c) {
     case 0x08: return ui::VKEY_BACK;
@@ -71,4 +72,28 @@ ui::KeyboardCode KeyboardCodeFromCharCode(char c, bool* shifted) {
   }
 }
 
+// Return key code of the char.
+ui::KeyboardCode KeyboardCodeFromKeyIdentifier(std::string chr) {
+  if (chr == "enter")        return ui::VKEY_RETURN;
+  if (chr == "backspace")    return ui::VKEY_BACK;
+  if (chr == "delete")       return ui::VKEY_DELETE;
+  if (chr == "tab")          return ui::VKEY_TAB;
+  if (chr == "escape")       return ui::VKEY_ESCAPE;
+  if (chr == "control")      return ui::VKEY_CONTROL;
+  if (chr == "alt")          return ui::VKEY_MENU;
+  if (chr == "shift")        return ui::VKEY_SHIFT;
+  if (chr == "end")          return ui::VKEY_END;
+  if (chr == "home")         return ui::VKEY_HOME;
+  if (chr == "insert")       return ui::VKEY_INSERT;
+  if (chr == "left")         return ui::VKEY_LEFT;
+  if (chr == "up")           return ui::VKEY_UP;
+  if (chr == "right")        return ui::VKEY_RIGHT;
+  if (chr == "down")         return ui::VKEY_DOWN;
+  if (chr == "pageup")       return ui::VKEY_PRIOR;
+  if (chr == "pagedown")     return ui::VKEY_NEXT;
+  if (chr == "printscreen")  return ui::VKEY_SNAPSHOT;
+
+  return ui::VKEY_UNKNOWN;
+}
+
 }  // namespace atom
index 0496886..78e8021 100644 (file)
@@ -5,13 +5,18 @@
 #ifndef ATOM_COMMON_KEYBOAD_UTIL_H_
 #define ATOM_COMMON_KEYBOAD_UTIL_H_
 
+#include <string>
 #include "ui/events/keycodes/keyboard_codes.h"
+#include "base/strings/string_util.h"
 
 namespace atom {
 
 // Return key code of the char, and also determine whether the SHIFT key is
 // pressed.
-ui::KeyboardCode KeyboardCodeFromCharCode(char c, bool* shifted);
+ui::KeyboardCode KeyboardCodeFromCharCode(base::char16 c, bool* shifted);
+
+// Return key code of the char from a string representation of the char
+ui::KeyboardCode KeyboardCodeFromKeyIdentifier(std::string chr);
 
 }  // namespace atom
 
index fcfc890..e82b656 100644 (file)
@@ -159,10 +159,17 @@ bool Converter<blink::WebKeyboardEvent>::FromV8(
   if (!ConvertFromV8(isolate, val, static_cast<blink::WebInputEvent*>(out)))
     return false;
   base::char16 code;
-  if (!dict.Get("keyCode", &code))
-    return false;
+  std::string identifier;
   bool shifted = false;
-  out->windowsKeyCode = atom::KeyboardCodeFromCharCode(code, &shifted);
+
+  if (dict.Get("keyCode", &code))
+    out->windowsKeyCode = atom::KeyboardCodeFromCharCode(code, &shifted);
+  else if (dict.Get("keyIdentifier", &identifier))
+    out->windowsKeyCode = atom::KeyboardCodeFromKeyIdentifier(
+      base::StringToLowerASCII(identifier));
+  else
+    return false;
+
   if (shifted)
     out->modifiers |= blink::WebInputEvent::ShiftKey;
   out->setKeyIdentifierFromWindowsKeyCode();