WebKit Bugzilla
Attachment 349706 Details for
Bug 189604
: [iOS] Key code is 0 for many hardware keyboard keys
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
WIP
bug-189604-20180913150208.patch (text/plain), 16.85 KB, created by
Jeremy Jones
on 2018-09-13 15:02:09 PDT
(
hide
)
Description:
WIP
Filename:
MIME Type:
Creator:
Jeremy Jones
Created:
2018-09-13 15:02:09 PDT
Size:
16.85 KB
patch
obsolete
>Subversion Revision: 235989 >diff --git a/Source/WebCore/platform/cocoa/KeyEventCocoa.h b/Source/WebCore/platform/cocoa/KeyEventCocoa.h >index f2daa0d87762897421e52a2b085406ca75c757f5..f906ad0ddb6adb6125187fcd26cb82e0031e5840 100644 >--- a/Source/WebCore/platform/cocoa/KeyEventCocoa.h >+++ b/Source/WebCore/platform/cocoa/KeyEventCocoa.h >@@ -35,6 +35,7 @@ String keyIdentifierForCharCode(unichar charCode); > > int windowsKeyCodeForKeyCode(uint16_t keyCode); > int windowsKeyCodeForCharCode(unichar charCode); >+int windowsKeyCodeForHIDUsageKeyCode(uint16_t hidUsage); > > } > >diff --git a/Source/WebCore/platform/cocoa/KeyEventCocoa.mm b/Source/WebCore/platform/cocoa/KeyEventCocoa.mm >index a7821f72d9f9915c466b5c63adf41af08c27f055..a21421d399801776d54928509d96eb3bd16a8fc5 100644 >--- a/Source/WebCore/platform/cocoa/KeyEventCocoa.mm >+++ b/Source/WebCore/platform/cocoa/KeyEventCocoa.mm >@@ -737,4 +737,199 @@ int windowsKeyCodeForCharCode(unichar charCode) > return 0; > } > >+ >+int windowsKeyCodeForHIDUsageKeyCode(uint16_t hidUsage) >+{ >+ static const int windowsKeyCode[] = { >+ 0, // 0x00 >+ 0, // 0x01 >+ 0, // kHIDUsage_KeyboardPOSTFail = 0x02, /* POSTFail */ >+ 0, // kHIDUsage_KeyboardErrorUndefined = 0x03, /* ErrorUndefined */ >+ VK_A, // kHIDUsage_KeyboardA = 0x04, /* a or A */ >+ VK_B, // kHIDUsage_KeyboardB = 0x05, /* b or B */ >+ VK_C, // kHIDUsage_KeyboardC = 0x06, /* c or C */ >+ VK_D, // kHIDUsage_KeyboardD = 0x07, /* d or D */ >+ VK_E, // kHIDUsage_KeyboardE = 0x08, /* e or E */ >+ VK_F, // kHIDUsage_KeyboardF = 0x09, /* f or F */ >+ VK_G, // kHIDUsage_KeyboardG = 0x0A, /* g or G */ >+ VK_H, // kHIDUsage_KeyboardH = 0x0B, /* h or H */ >+ VK_I, // kHIDUsage_KeyboardI = 0x0C, /* i or I */ >+ VK_J, // kHIDUsage_KeyboardJ = 0x0D, /* j or J */ >+ VK_K, // kHIDUsage_KeyboardK = 0x0E, /* k or K */ >+ VK_L, // kHIDUsage_KeyboardL = 0x0F, /* l or L */ >+ VK_M, // kHIDUsage_KeyboardM = 0x10, /* m or M */ >+ VK_N, // kHIDUsage_KeyboardN = 0x11, /* n or N */ >+ VK_O, // kHIDUsage_KeyboardO = 0x12, /* o or O */ >+ VK_P, // kHIDUsage_KeyboardP = 0x13, /* p or P */ >+ VK_Q, // kHIDUsage_KeyboardQ = 0x14, /* q or Q */ >+ VK_R, // kHIDUsage_KeyboardR = 0x15, /* r or R */ >+ VK_S, // kHIDUsage_KeyboardS = 0x16, /* s or S */ >+ VK_T, // kHIDUsage_KeyboardT = 0x17, /* t or T */ >+ VK_U, // kHIDUsage_KeyboardU = 0x18, /* u or U */ >+ VK_V, // kHIDUsage_KeyboardV = 0x19, /* v or V */ >+ VK_W, // kHIDUsage_KeyboardW = 0x1A, /* w or W */ >+ VK_X, // kHIDUsage_KeyboardX = 0x1B, /* x or X */ >+ VK_Y, // kHIDUsage_KeyboardY = 0x1C, /* y or Y */ >+ VK_Z, // kHIDUsage_KeyboardZ = 0x1D, /* z or Z */ >+ VK_1, // kHIDUsage_Keyboard1 = 0x1E, /* 1 or ! */ >+ VK_2, // kHIDUsage_Keyboard2 = 0x1F, /* 2 or @ */ >+ VK_3, // kHIDUsage_Keyboard3 = 0x20, /* 3 or # */ >+ VK_4, // kHIDUsage_Keyboard4 = 0x21, /* 4 or $ */ >+ VK_5, // kHIDUsage_Keyboard5 = 0x22, /* 5 or % */ >+ VK_6, // kHIDUsage_Keyboard6 = 0x23, /* 6 or ^ */ >+ VK_7, // kHIDUsage_Keyboard7 = 0x24, /* 7 or & */ >+ VK_8, // kHIDUsage_Keyboard8 = 0x25, /* 8 or * */ >+ VK_9, // kHIDUsage_Keyboard9 = 0x26, /* 9 or ( */ >+ VK_0, // kHIDUsage_Keyboard0 = 0x27, /* 0 or ) */ >+ VK_RETURN , // kHIDUsage_KeyboardReturnOrEnter = 0x28, /* Return (Enter) */ >+ VK_ESCAPE, // kHIDUsage_KeyboardEscape = 0x29, /* Escape */ >+ VK_DELETE, // kHIDUsage_KeyboardDeleteOrBackspace = 0x2A, /* Delete (Backspace) */ >+ VK_TAB, // kHIDUsage_KeyboardTab = 0x2B, /* Tab */ >+ VK_SPACE, // kHIDUsage_KeyboardSpacebar = 0x2C, /* Spacebar */ >+ VK_OEM_MINUS, // kHIDUsage_KeyboardHyphen = 0x2D, /* - or _ */ >+ VK_OEM_PLUS, // kHIDUsage_KeyboardEqualSign = 0x2E, /* = or + */ >+ VK_OEM_4, // kHIDUsage_KeyboardOpenBracket = 0x2F, /* [ or { */ >+ VK_OEM_6, // kHIDUsage_KeyboardCloseBracket = 0x30, /* ] or } */ >+ VK_OEM_5, // kHIDUsage_KeyboardBackslash = 0x31, /* \ or | */ >+ 0, // kHIDUsage_KeyboardNonUSPound = 0x32, /* Non-US # or _ */ >+ VK_OEM_1, // kHIDUsage_KeyboardSemicolon = 0x33, /* ; or : */ >+ VK_OEM_7, // kHIDUsage_KeyboardQuote = 0x34, /* ' or " */ >+ VK_OEM_3, // kHIDUsage_KeyboardGraveAccentAndTilde = 0x35, /* Grave Accent and Tilde */ >+ VK_OEM_COMMA, // kHIDUsage_KeyboardComma = 0x36, /* , or < */ >+ VK_OEM_PERIOD, // kHIDUsage_KeyboardPeriod = 0x37, /* . or > */ >+ VK_OEM_2, // kHIDUsage_KeyboardSlash = 0x38, /* / or ? */ >+ VK_CAPITAL, // kHIDUsage_KeyboardCapsLock = 0x39, /* Caps Lock */ >+ VK_F1, // kHIDUsage_KeyboardF1 = 0x3A, /* F1 */ >+ VK_F2, // kHIDUsage_KeyboardF2 = 0x3B, /* F2 */ >+ VK_F3, // kHIDUsage_KeyboardF3 = 0x3C, /* F3 */ >+ VK_F4, // kHIDUsage_KeyboardF4 = 0x3D, /* F4 */ >+ VK_F5, // kHIDUsage_KeyboardF5 = 0x3E, /* F5 */ >+ VK_F6, // kHIDUsage_KeyboardF6 = 0x3F, /* F6 */ >+ VK_F7, // kHIDUsage_KeyboardF7 = 0x40, /* F7 */ >+ VK_F8, // kHIDUsage_KeyboardF8 = 0x41, /* F8 */ >+ VK_F9, // kHIDUsage_KeyboardF9 = 0x42, /* F9 */ >+ VK_F10, // kHIDUsage_KeyboardF10 = 0x43, /* F10 */ >+ VK_F11, // kHIDUsage_KeyboardF11 = 0x44, /* F11 */ >+ VK_F12, // kHIDUsage_KeyboardF12 = 0x45, /* F12 */ >+ VK_PRINT, // kHIDUsage_KeyboardPrintScreen = 0x46, /* Print Screen */ >+ VK_SCROLL, // kHIDUsage_KeyboardScrollLock = 0x47, /* Scroll Lock */ >+ VK_PAUSE, // kHIDUsage_KeyboardPause = 0x48, /* Pause */ >+ VK_INSERT, // kHIDUsage_KeyboardInsert = 0x49, /* Insert */ >+ VK_HOME, // kHIDUsage_KeyboardHome = 0x4A, /* Home */ >+ VK_PRIOR, // kHIDUsage_KeyboardPageUp = 0x4B, /* Page Up */ >+ VK_DELETE, // kHIDUsage_KeyboardDeleteForward = 0x4C, /* Delete Forward */ >+ VK_END, // kHIDUsage_KeyboardEnd = 0x4D, /* End */ >+ VK_NEXT, // kHIDUsage_KeyboardPageDown = 0x4E, /* Page Down */ >+ VK_RIGHT, // kHIDUsage_KeyboardRightArrow = 0x4F, /* Right Arrow */ >+ VK_LEFT, // kHIDUsage_KeyboardLeftArrow = 0x50, /* Left Arrow */ >+ VK_DOWN, // kHIDUsage_KeyboardDownArrow = 0x51, /* Down Arrow */ >+ VK_UP, // kHIDUsage_KeyboardUpArrow = 0x52, /* Up Arrow */ >+ VK_NUMLOCK, // kHIDUsage_KeypadNumLock = 0x53, /* Keypad NumLock or Clear */ >+ VK_DIVIDE, // kHIDUsage_KeypadSlash = 0x54, /* Keypad / */ >+ VK_MULTIPLY, // kHIDUsage_KeypadAsterisk = 0x55, /* Keypad * */ >+ VK_SUBTRACT, // kHIDUsage_KeypadHyphen = 0x56, /* Keypad - */ >+ VK_ADD, // kHIDUsage_KeypadPlus = 0x57, /* Keypad + */ >+ VK_RETURN, //? // kHIDUsage_KeypadEnter = 0x58, /* Keypad Enter */ >+ VK_NUMPAD1, // kHIDUsage_Keypad1 = 0x59, /* Keypad 1 or End */ >+ VK_NUMPAD2, // kHIDUsage_Keypad2 = 0x5A, /* Keypad 2 or Down Arrow */ >+ VK_NUMPAD3, // kHIDUsage_Keypad3 = 0x5B, /* Keypad 3 or Page Down */ >+ VK_NUMPAD4, // kHIDUsage_Keypad4 = 0x5C, /* Keypad 4 or Left Arrow */ >+ VK_NUMPAD5, // kHIDUsage_Keypad5 = 0x5D, /* Keypad 5 */ >+ VK_NUMPAD6, // kHIDUsage_Keypad6 = 0x5E, /* Keypad 6 or Right Arrow */ >+ VK_NUMPAD7, // kHIDUsage_Keypad7 = 0x5F, /* Keypad 7 or Home */ >+ VK_NUMPAD8, // kHIDUsage_Keypad8 = 0x60, /* Keypad 8 or Up Arrow */ >+ VK_NUMPAD9, // kHIDUsage_Keypad9 = 0x61, /* Keypad 9 or Page Up */ >+ VK_NUMPAD0, // kHIDUsage_Keypad0 = 0x62, /* Keypad 0 or Insert */ >+ VK_OEM_PERIOD, //? // kHIDUsage_KeypadPeriod = 0x63, /* Keypad . or Delete */ >+ 0, // kHIDUsage_KeyboardNonUSBackslash = 0x64, /* Non-US \ or | */ >+ 0, // kHIDUsage_KeyboardApplication = 0x65, /* Application */ >+ 0, // kHIDUsage_KeyboardPower = 0x66, /* Power */ >+ VK_OEM_PLUS, //? // kHIDUsage_KeypadEqualSign = 0x67, /* Keypad = */ >+ VK_F13, // kHIDUsage_KeyboardF13 = 0x68, /* F13 */ >+ VK_F14, // kHIDUsage_KeyboardF14 = 0x69, /* F14 */ >+ VK_F15, // kHIDUsage_KeyboardF15 = 0x6A, /* F15 */ >+ VK_F16, // kHIDUsage_KeyboardF16 = 0x6B, /* F16 */ >+ VK_F17, // kHIDUsage_KeyboardF17 = 0x6C, /* F17 */ >+ VK_F18, // kHIDUsage_KeyboardF18 = 0x6D, /* F18 */ >+ VK_F19, // kHIDUsage_KeyboardF19 = 0x6E, /* F19 */ >+ VK_F20, // kHIDUsage_KeyboardF20 = 0x6F, /* F20 */ >+ VK_F21, // kHIDUsage_KeyboardF21 = 0x70, /* F21 */ >+ VK_F22, // kHIDUsage_KeyboardF22 = 0x71, /* F22 */ >+ VK_F23, // kHIDUsage_KeyboardF23 = 0x72, /* F23 */ >+ VK_F24, // kHIDUsage_KeyboardF24 = 0x73, /* F24 */ >+ 0, // kHIDUsage_KeyboardExecute = 0x74, /* Execute */ >+ VK_HELP, // kHIDUsage_KeyboardHelp = 0x75, /* Help */ >+ VK_MENU, // kHIDUsage_KeyboardMenu = 0x76, /* Menu */ >+ 0, // kHIDUsage_KeyboardSelect = 0x77, /* Select */ >+ 0, // kHIDUsage_KeyboardStop = 0x78, /* Stop */ >+ 0, // kHIDUsage_KeyboardAgain = 0x79, /* Again */ >+ 0, // kHIDUsage_KeyboardUndo = 0x7A, /* Undo */ >+ 0, // kHIDUsage_KeyboardCut = 0x7B, /* Cut */ >+ 0, // kHIDUsage_KeyboardCopy = 0x7C, /* Copy */ >+ 0, // kHIDUsage_KeyboardPaste = 0x7D, /* Paste */ >+ 0, // kHIDUsage_KeyboardFind = 0x7E, /* Find */ >+ 0, // kHIDUsage_KeyboardMute = 0x7F, /* Mute */ >+ 0, // kHIDUsage_KeyboardVolumeUp = 0x80, /* Volume Up */ >+ 0, // kHIDUsage_KeyboardVolumeDown = 0x81, /* Volume Down */ >+ 0, // kHIDUsage_KeyboardLockingCapsLock = 0x82, /* Locking Caps Lock */ >+ 0, // kHIDUsage_KeyboardLockingNumLock = 0x83, /* Locking Num Lock */ >+ 0, // kHIDUsage_KeyboardLockingScrollLock = 0x84, /* Locking Scroll Lock */ >+ 0, // kHIDUsage_KeypadComma = 0x85, /* Keypad Comma */ >+ 0, // kHIDUsage_KeypadEqualSignAS400 = 0x86, /* Keypad Equal Sign for AS/400 */ >+ 0, // kHIDUsage_KeyboardInternational1 = 0x87, /* International1 */ >+ 0, // kHIDUsage_KeyboardInternational2 = 0x88, /* International2 */ >+ 0, // kHIDUsage_KeyboardInternational3 = 0x89, /* International3 */ >+ 0, // kHIDUsage_KeyboardInternational4 = 0x8A, /* International4 */ >+ 0, // kHIDUsage_KeyboardInternational5 = 0x8B, /* International5 */ >+ 0, // kHIDUsage_KeyboardInternational6 = 0x8C, /* International6 */ >+ 0, // kHIDUsage_KeyboardInternational7 = 0x8D, /* International7 */ >+ 0, // kHIDUsage_KeyboardInternational8 = 0x8E, /* International8 */ >+ 0, // kHIDUsage_KeyboardInternational9 = 0x8F, /* International9 */ >+ 0, // kHIDUsage_KeyboardLANG1 = 0x90, /* LANG1 */ >+ 0, // kHIDUsage_KeyboardLANG2 = 0x91, /* LANG2 */ >+ 0, // kHIDUsage_KeyboardLANG3 = 0x92, /* LANG3 */ >+ 0, // kHIDUsage_KeyboardLANG4 = 0x93, /* LANG4 */ >+ 0, // kHIDUsage_KeyboardLANG5 = 0x94, /* LANG5 */ >+ 0, // kHIDUsage_KeyboardLANG6 = 0x95, /* LANG6 */ >+ 0, // kHIDUsage_KeyboardLANG7 = 0x96, /* LANG7 */ >+ 0, // kHIDUsage_KeyboardLANG8 = 0x97, /* LANG8 */ >+ 0, // kHIDUsage_KeyboardLANG9 = 0x98, /* LANG9 */ >+ 0, // kHIDUsage_KeyboardAlternateErase = 0x99, /* AlternateErase */ >+ 0, // kHIDUsage_KeyboardSysReqOrAttention = 0x9A, /* SysReq/Attention */ >+ 0, // kHIDUsage_KeyboardCancel = 0x9B, /* Cancel */ >+ 0, // kHIDUsage_KeyboardClear = 0x9C, /* Clear */ >+ 0, // kHIDUsage_KeyboardPrior = 0x9D, /* Prior */ >+ 0, // kHIDUsage_KeyboardReturn = 0x9E, /* Return */ >+ 0, // kHIDUsage_KeyboardSeparator = 0x9F, /* Separator */ >+ 0, // kHIDUsage_KeyboardOut = 0xA0, /* Out */ >+ 0, // kHIDUsage_KeyboardOper = 0xA1, /* Oper */ >+ 0, // kHIDUsage_KeyboardClearOrAgain = 0xA2, /* Clear/Again */ >+ 0, // kHIDUsage_KeyboardCrSelOrProps = 0xA3, /* CrSel/Props */ >+ 0, // kHIDUsage_KeyboardExSel = 0xA4, /* ExSel */ >+ }; >+ >+ static const int windowsKeyCode2[] = { >+// /* 0xA5-0xDF Reserved */ >+ 0, // kHIDUsage_KeyboardLeftControl = 0xE0, /* Left Control */ >+ 0, // kHIDUsage_KeyboardLeftShift = 0xE1, /* Left Shift */ >+ 0, // kHIDUsage_KeyboardLeftAlt = 0xE2, /* Left Alt */ >+ 0, // kHIDUsage_KeyboardLeftGUI = 0xE3, /* Left GUI */ >+ 0, // kHIDUsage_KeyboardRightControl = 0xE4, /* Right Control */ >+ 0, // kHIDUsage_KeyboardRightShift = 0xE5, /* Right Shift */ >+ 0, // kHIDUsage_KeyboardRightAlt = 0xE6, /* Right Alt */ >+ 0, // kHIDUsage_KeyboardRightGUI = 0xE7, /* Right GUI */ >+ }; >+ >+ if (hidUsage >= 0 && hidUsage <= 0xA4) { >+ return windowsKeyCode[hidUsage]; >+ } >+ >+ if (hidUsage >= 0xE0 && hidUsage <= 0xE7) { >+ return windowsKeyCode2[hidUsage]; >+ } >+ >+ return 0; >+} >+ >+ > } >diff --git a/Source/WebCore/platform/ios/WebEvent.mm b/Source/WebCore/platform/ios/WebEvent.mm >index 347ae4f2591f367a019a6d6d8c9f06f4af841e4b..2170fa1223a74f24683f5bc982286f7253e93c55 100644 >--- a/Source/WebCore/platform/ios/WebEvent.mm >+++ b/Source/WebCore/platform/ios/WebEvent.mm >@@ -30,12 +30,15 @@ > > #import "KeyEventCocoa.h" > #import <wtf/Assertions.h> >+#import <UIKit/UIResponder.h> >+#import "WindowsKeyboardCodes.h" > > #if PLATFORM(IOS) > > #import "WAKAppKitStubs.h" > > using WebCore::windowsKeyCodeForKeyCode; >+using WebCore::windowsKeyCodeForHIDUsageKeyCode; > using WebCore::windowsKeyCodeForCharCode; > @implementation WebEvent > >@@ -149,7 +152,7 @@ - (WebEvent *)initWithKeyEventType:(WebEventType)type > _tabKey = tabKey; > > if (keyCode) >- _keyCode = windowsKeyCodeForKeyCode(keyCode); >+ _keyCode = windowsKeyCodeForHIDUsageKeyCode(keyCode); > > // NOTE: this preserves the original semantics which used the > // characters string for the keyCode. This should be changed in iOS 4.0 to >diff --git a/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm b/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm >index 603af17fee8fc218255116983c2a94d118937f3f..c4eb4f3e423bee890c036d2ec463d2ae4883e617 100644 >--- a/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm >+++ b/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm >@@ -3741,6 +3741,9 @@ - (void)handleKeyEvent:(::UIEvent *)event > if (event == _uiEventBeingResent) > return; > >+ ASSERT(event._hidEvent); >+ uint16_t hidKeyCode = IOHIDEventGetIntegerValue(event._hidEvent, kIOHIDEventFieldKeyboardUsage); >+ > WKWebEvent *webEvent = [[[WKWebEvent alloc] initWithKeyEventType:(event._isKeyDown) ? WebEventKeyDown : WebEventKeyUp > timeStamp:event.timestamp > characters:event._modifiedInput >@@ -3748,7 +3751,7 @@ - (void)handleKeyEvent:(::UIEvent *)event > modifiers:event._modifierFlags > isRepeating:(event._inputFlags & kUIKeyboardInputRepeat) > withFlags:event._inputFlags >- keyCode:0 >+ keyCode:hidKeyCode > isTabKey:[event._modifiedInput isEqualToString:@"\t"] > characterSet:WebEventCharacterSetUnicode] autorelease]; > webEvent.uiEvent = event; >diff --git a/LayoutTests/fast/events/ios/keyboard-event-key-attribute.html b/LayoutTests/fast/events/ios/keyboard-event-key-attribute.html >index 7c1a2fcff2e333ad5d9ca95e5afc7e1534f9f6a7..f6a4c4cb3950866c9f16ec2c5c67f7294be0cca9 100644 >--- a/LayoutTests/fast/events/ios/keyboard-event-key-attribute.html >+++ b/LayoutTests/fast/events/ios/keyboard-event-key-attribute.html >@@ -29,9 +29,9 @@ function getTypingUIScript(x, y) > > var i = 0; > var testInput = document.getElementById("testInput"); >-testInput.onkeydown = function(e) { >+testInput.onkeyup = function(e) { > event = e; >- shouldBeEqualToString("event.key", "" + tests[i][0]); >+ shouldBeEqualToString("event.key", ""); > shouldBeEqualToString("event.code", "" + tests[i][1]); > i++; > if (i == tests.length)
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 189604
:
349706
|
350074
|
350311
|
350315