Index: remoting/host/event_executor_mac.cc |
diff --git a/remoting/host/event_executor_mac.cc b/remoting/host/event_executor_mac.cc |
index 47320f91369acff786c12ca1fd4b1ea43fe24f8c..c5b1dddb8377005d921955a8515b6179a3c77d96 100644 |
--- a/remoting/host/event_executor_mac.cc |
+++ b/remoting/host/event_executor_mac.cc |
@@ -89,188 +89,6 @@ EventExecutorMac::EventExecutorMac( |
#pragma clang diagnostic pop |
} |
-// Hard-coded mapping from Virtual Key codes to Mac KeySyms. |
-// This mapping is only valid if both client and host are using a |
-// US English keyboard layout. |
-// Because we're passing VK codes on the wire, with no Scancode, |
-// "extended" flag, etc, things like distinguishing left & right |
-// Shift keys doesn't work. |
-// |
-// TODO(wez): Replace this with something more closely tied to what |
-// WebInputEventFactory does on Linux/GTK, and which respects the |
-// host's keyboard layout. |
-// |
-// TODO(garykac): Remove this table once we switch to using USB |
-// keycodes. |
-const int kUsVkeyToKeysym[256] = { |
- // 0x00 - 0x07 |
- kInvalidKeycode, kInvalidKeycode, kInvalidKeycode, kInvalidKeycode, |
- // 0x04 - 0x07 |
- kInvalidKeycode, kInvalidKeycode, kInvalidKeycode, kInvalidKeycode, |
- // 0x08 - 0x0B |
- kVK_Delete, kVK_Tab, kInvalidKeycode, kInvalidKeycode, |
- // 0x0C - 0x0F |
- kInvalidKeycode, kVK_Return, kInvalidKeycode, kInvalidKeycode, |
- |
- // 0x10 - 0x13 |
- kVK_Shift, kVK_Control, kVK_Option, kInvalidKeycode, |
- // 0x14 - 0x17 |
- kVK_CapsLock, kVK_JIS_Kana, /* VKEY_HANGUL */ kInvalidKeycode, |
- /* VKEY_JUNJA */ kInvalidKeycode, |
- // 0x18 - 0x1B |
- /* VKEY_FINAL */ kInvalidKeycode, /* VKEY_Kanji */ kInvalidKeycode, |
- kInvalidKeycode, kVK_Escape, |
- // 0x1C - 0x1F |
- /* VKEY_CONVERT */ kInvalidKeycode, /* VKEY_NONCONVERT */ kInvalidKeycode, |
- /* VKEY_ACCEPT */ kInvalidKeycode, /* VKEY_MODECHANGE */ kInvalidKeycode, |
- |
- // 0x20 - 0x23 |
- kVK_Space, kVK_PageUp, kVK_PageDown, kVK_End, |
- // 0x24 - 0x27 |
- kVK_Home, kVK_LeftArrow, kVK_UpArrow, kVK_RightArrow, |
- // 0x28 - 0x2B |
- kVK_DownArrow, /* VKEY_SELECT */ kInvalidKeycode, |
- /* VKEY_PRINT */ kInvalidKeycode, /* VKEY_EXECUTE */ kInvalidKeycode, |
- // 0x2C - 0x2F |
- /* VKEY_SNAPSHOT */ kInvalidKeycode, /* XK_INSERT */ kInvalidKeycode, |
- kVK_ForwardDelete, kVK_Help, |
- |
- // 0x30 - 0x33 |
- kVK_ANSI_0, kVK_ANSI_1, kVK_ANSI_2, kVK_ANSI_3, |
- // 0x34 - 0x37 |
- kVK_ANSI_4, kVK_ANSI_5, kVK_ANSI_6, kVK_ANSI_7, |
- // 0x38 - 0x3B |
- kVK_ANSI_8, kVK_ANSI_9, kInvalidKeycode, kInvalidKeycode, |
- // 0x3C - 0x3F |
- kInvalidKeycode, kInvalidKeycode, kInvalidKeycode, kInvalidKeycode, |
- |
- // 0x40 - 0x43 |
- kInvalidKeycode, kVK_ANSI_A, kVK_ANSI_B, kVK_ANSI_C, |
- // 0x44 - 0x47 |
- kVK_ANSI_D, kVK_ANSI_E, kVK_ANSI_F, kVK_ANSI_G, |
- // 0x48 - 0x4B |
- kVK_ANSI_H, kVK_ANSI_I, kVK_ANSI_J, kVK_ANSI_K, |
- // 0x4C - 0x4F |
- kVK_ANSI_L, kVK_ANSI_M, kVK_ANSI_N, kVK_ANSI_O, |
- |
- // 0x50 - 0x53 |
- kVK_ANSI_P, kVK_ANSI_Q, kVK_ANSI_R, kVK_ANSI_S, |
- // 0x54 - 0x57 |
- kVK_ANSI_T, kVK_ANSI_U, kVK_ANSI_V, kVK_ANSI_W, |
- // 0x58 - 0x5B |
- kVK_ANSI_X, kVK_ANSI_Y, kVK_ANSI_Z, kVK_Command, |
- // 0x5C - 0x5F |
- kVK_Command, kVK_Command, kInvalidKeycode, /* VKEY_SLEEP */ kInvalidKeycode, |
- |
- // 0x60 - 0x63 |
- kVK_ANSI_Keypad0, kVK_ANSI_Keypad1, kVK_ANSI_Keypad2, kVK_ANSI_Keypad3, |
- // 0x64 - 0x67 |
- kVK_ANSI_Keypad4, kVK_ANSI_Keypad5, kVK_ANSI_Keypad6, kVK_ANSI_Keypad7, |
- // 0x68 - 0x6B |
- kVK_ANSI_Keypad8, kVK_ANSI_Keypad9, kVK_ANSI_KeypadMultiply, |
- kVK_ANSI_KeypadPlus, |
- // 0x6C - 0x6F |
- /* VKEY_SEPARATOR */ kInvalidKeycode, kVK_ANSI_KeypadMinus, |
- kVK_ANSI_KeypadDecimal, kVK_ANSI_KeypadDivide, |
- |
- // 0x70 - 0x73 |
- kVK_F1, kVK_F2, kVK_F3, kVK_F4, |
- // 0x74 - 0x77 |
- kVK_F5, kVK_F6, kVK_F7, kVK_F8, |
- // 0x78 - 0x7B |
- kVK_F9, kVK_F10, kVK_F11, kVK_F12, |
- // 0x7C - 0x7F |
- kVK_F13, kVK_F14, kVK_F15, kVK_F16, |
- |
- // 0x80 - 0x83 |
- kVK_F17, kVK_F18, kVK_F19, kVK_F20, |
- // 0x84 - 0x87 |
- /* VKEY_F21 */ kInvalidKeycode, /* VKEY_F22 */ kInvalidKeycode, |
- /* VKEY_F23 */ kInvalidKeycode, /* XKEY_F24 */ kInvalidKeycode, |
- // 0x88 - 0x8B |
- kInvalidKeycode, kInvalidKeycode, kInvalidKeycode, kInvalidKeycode, |
- // 0x8C - 0x8F |
- kInvalidKeycode, kInvalidKeycode, kInvalidKeycode, kInvalidKeycode, |
- |
- // 0x90 - 0x93 |
- /* VKEY_NUMLOCK */ kInvalidKeycode, /* VKEY_SCROLL */ kInvalidKeycode, |
- kInvalidKeycode, kInvalidKeycode, |
- // 0x94 - 0x97 |
- kInvalidKeycode, kInvalidKeycode, kInvalidKeycode, kInvalidKeycode, |
- // 0x98 - 0x9B |
- kInvalidKeycode, kInvalidKeycode, kInvalidKeycode, kInvalidKeycode, |
- // 0x9C - 0x9F |
- kInvalidKeycode, kInvalidKeycode, kInvalidKeycode, kInvalidKeycode, |
- |
- // 0xA0 - 0xA3 |
- kVK_Shift, kVK_RightShift, kVK_Control, kVK_RightControl, |
- // 0xA4 - 0xA7 |
- kVK_Option, kVK_RightOption, |
- /* XF86kVK_Back */ kInvalidKeycode, /* XF86kVK_Forward */ kInvalidKeycode, |
- // 0xA8 - 0xAB |
- /* XF86kVK_Refresh */ kInvalidKeycode, /* XF86kVK_Stop */ kInvalidKeycode, |
- /* XF86kVK_Search */ kInvalidKeycode, |
- /* XF86kVK_Favorites */ kInvalidKeycode, |
- // 0xAC - 0xAF |
- /* XF86kVK_HomePage */ kInvalidKeycode, kVK_Mute, kVK_VolumeDown, |
- kVK_VolumeUp, |
- |
- // 0xB0 - 0xB3 |
- /* XF86kVK_AudioNext */ kInvalidKeycode, |
- /* XF86kVK_AudioPrev */ kInvalidKeycode, |
- /* XF86kVK_AudioStop */ kInvalidKeycode, |
- /* XF86kVK_AudioPause */ kInvalidKeycode, |
- // 0xB4 - 0xB7 |
- /* XF86kVK_Mail */ kInvalidKeycode, /* XF86kVK_AudioMedia */ kInvalidKeycode, |
- /* XF86kVK_Launch0 */ kInvalidKeycode, /* XF86kVK_Launch1 */ kInvalidKeycode, |
- // 0xB8 - 0xBB |
- kInvalidKeycode, kInvalidKeycode, kVK_ANSI_Semicolon, kVK_ANSI_Equal, |
- // 0xBC - 0xBF |
- kVK_ANSI_Comma, kVK_ANSI_Minus, kVK_ANSI_Period, kVK_ANSI_Slash, |
- |
- // 0xC0 - 0xC3 |
- kVK_ANSI_Grave, kInvalidKeycode, kInvalidKeycode, kInvalidKeycode, |
- // 0xC4 - 0xC7 |
- kInvalidKeycode, kInvalidKeycode, kInvalidKeycode, kInvalidKeycode, |
- // 0xC8 - 0xCB |
- kInvalidKeycode, kInvalidKeycode, kInvalidKeycode, kInvalidKeycode, |
- // 0xCC - 0xCF |
- kInvalidKeycode, kInvalidKeycode, kInvalidKeycode, kInvalidKeycode, |
- |
- // 0xD0 - 0xD3 |
- kInvalidKeycode, kInvalidKeycode, kInvalidKeycode, kInvalidKeycode, |
- // 0xD4 - 0xD7 |
- kInvalidKeycode, kInvalidKeycode, kInvalidKeycode, kInvalidKeycode, |
- // 0xD8 - 0xDB |
- kInvalidKeycode, kInvalidKeycode, kInvalidKeycode, kVK_ANSI_LeftBracket, |
- // 0xDC - 0xDF |
- kVK_ANSI_Backslash, kVK_ANSI_RightBracket, kVK_ANSI_Quote, |
- /* VKEY_OEM_8 */ kInvalidKeycode, |
- |
- // 0xE0 - 0xE3 |
- kInvalidKeycode, kInvalidKeycode, /* VKEY_OEM_102 */ kInvalidKeycode, |
- kInvalidKeycode, |
- // 0xE4 - 0xE7 |
- kInvalidKeycode, /* VKEY_PROCESSKEY */ kInvalidKeycode, kInvalidKeycode, |
- /* VKEY_PACKET */ kInvalidKeycode, |
- // 0xE8 - 0xEB |
- kInvalidKeycode, kInvalidKeycode, kInvalidKeycode, kInvalidKeycode, |
- // 0xEC - 0xEF |
- kInvalidKeycode, kInvalidKeycode, kInvalidKeycode, kInvalidKeycode, |
- |
- // 0xF0 - 0xF3 |
- kInvalidKeycode, kInvalidKeycode, kInvalidKeycode, kInvalidKeycode, |
- // 0xF4 - 0xF7 |
- kInvalidKeycode, kInvalidKeycode, /* VKEY_ATTN */ kInvalidKeycode, |
- /* VKEY_CRSEL */ kInvalidKeycode, |
- // 0xF8 - 0xFB |
- /* VKEY_EXSEL */ kInvalidKeycode, /* VKEY_EREOF */ kInvalidKeycode, |
- /* VKEY_PLAY */ kInvalidKeycode, /* VKEY_ZOOM */ kInvalidKeycode, |
- // 0xFC - 0xFF |
- /* VKEY_NONAME */ kInvalidKeycode, /* VKEY_PA1 */ kInvalidKeycode, |
- /* VKEY_OEM_CLEAR */ kInvalidKeycode, kInvalidKeycode |
-}; |
- |
void EventExecutorMac::InjectClipboardEvent(const ClipboardEvent& event) { |
if (!task_runner_->BelongsToCurrentThread()) { |
task_runner_->PostTask( |
@@ -287,20 +105,12 @@ void EventExecutorMac::InjectClipboardEvent(const ClipboardEvent& event) { |
void EventExecutorMac::InjectKeyEvent(const KeyEvent& event) { |
// HostEventDispatcher should filter events missing the pressed field. |
DCHECK(event.has_pressed()); |
+ DCHECK(event.has_usb_keycode()); |
- int keycode = kInvalidKeycode; |
- if (event.has_usb_keycode()) { |
- keycode = UsbKeycodeToNativeKeycode(event.usb_keycode()); |
- VLOG(3) << "Converting USB keycode: " << std::hex << event.usb_keycode() |
- << " to keycode: " << keycode << std::dec; |
- } else if (event.has_keycode()) { |
- int win_keycode = event.keycode(); |
- if (win_keycode >= 0 && win_keycode < 256) { |
- keycode = kUsVkeyToKeysym[win_keycode]; |
- } |
- VLOG(3) << "Converting VKEY: " << std::hex << event.keycode() |
- << " to keycode: " << keycode << std::dec; |
- } |
+ int keycode = UsbKeycodeToNativeKeycode(event.usb_keycode()); |
+ |
+ VLOG(3) << "Converting USB keycode: " << std::hex << event.usb_keycode() |
+ << " to keycode: " << keycode << std::dec; |
// If we couldn't determine the Mac virtual key code then ignore the event. |
if (keycode == kInvalidKeycode) |