diff --git a/atom/common/keyboad_util.cc b/atom/common/keyboad_util.cc index 29d1a800c859..7d7c5d99fabe 100644 --- a/atom/common/keyboad_util.cc +++ b/atom/common/keyboad_util.cc @@ -2,12 +2,13 @@ // Use of this source code is governed by the MIT license that can be // found in the LICENSE file. +#include #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(const 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 diff --git a/atom/common/keyboad_util.h b/atom/common/keyboad_util.h index 0496886e40bd..4a85c190635d 100644 --- a/atom/common/keyboad_util.h +++ b/atom/common/keyboad_util.h @@ -5,13 +5,18 @@ #ifndef ATOM_COMMON_KEYBOAD_UTIL_H_ #define ATOM_COMMON_KEYBOAD_UTIL_H_ +#include #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(const std::string& chr); } // namespace atom diff --git a/atom/common/native_mate_converters/blink_converter.cc b/atom/common/native_mate_converters/blink_converter.cc index fcfc8905b3e2..2c871276ba26 100644 --- a/atom/common/native_mate_converters/blink_converter.cc +++ b/atom/common/native_mate_converters/blink_converter.cc @@ -159,10 +159,17 @@ bool Converter::FromV8( if (!ConvertFromV8(isolate, val, static_cast(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("keyCode", &identifier)) + out->windowsKeyCode = atom::KeyboardCodeFromKeyIdentifier( + base::StringToLowerASCII(identifier)); + else + return false; + if (shifted) out->modifiers |= blink::WebInputEvent::ShiftKey; out->setKeyIdentifierFromWindowsKeyCode(); diff --git a/docs/api/web-contents.md b/docs/api/web-contents.md index 1c73c5713fa1..0988d25276f4 100644 --- a/docs/api/web-contents.md +++ b/docs/api/web-contents.md @@ -590,7 +590,7 @@ Disable device emulation enabled by `webContents.enableDeviceEmulation`. * `event` Object * `type` String (**required**) - The type of the event, can be `mouseDown`, `mouseUp`, `mouseEnter`, `mouseLeave`, `contextMenu`, `mouseWheel`, - `keyDown`, `keyUp`, `char`. + `mouseMove`, `keyDown`, `keyUp`, `char`. * `modifiers` Array - An array of modifiers of the event, can include `shift`, `control`, `alt`, `meta`, `isKeypad`, `isAutoRepeat`, `leftButtonDown`, `middleButtonDown`, `rightButtonDown`, `capsLock`, @@ -600,8 +600,11 @@ Sends an input `event` to the page. For keyboard events, the `event` object also have following properties: -* `keyCode` String (**required**) - A single character that will be sent as - keyboard event. Can be any UTF-8 character. +* `keyCode` Char or String (**required**) - The character that will be sent + as the keyboard event. Can be a single UTF-8 character, or the name of the + key that generates the event. Accepted key names are `enter`, `backspace`, + `delete`, `tab`, `escape`, `control`, `alt`, `shift`, `end`, `home`, `insert`, + `left`, `up`, `right`, `down`, `pageUp`, `pageDown`, `printScreen` For mouse events, the `event` object also have following properties: