diff --git a/Source/WebCore/platform/haiku/PlatformKeyboardEventHaiku.cpp b/Source/WebCore/platform/haiku/PlatformKeyboardEventHaiku.cpp index 9dcf3f9ee3db8..f18d17723a0fa 100644 --- a/Source/WebCore/platform/haiku/PlatformKeyboardEventHaiku.cpp +++ b/Source/WebCore/platform/haiku/PlatformKeyboardEventHaiku.cpp @@ -77,7 +77,7 @@ static String keyIdentifierForHaikuKeyCode(char singleByte, int keyCode) case B_SCROLL_KEY: return ""; // FIXME } - break; + break; case B_BACKSPACE: return "U+0008"; @@ -324,6 +324,326 @@ static int windowsKeyCodeForKeyEvent(char singleByte, int keyCode) return singleByte; } +static String KeyValueForKeyEvent(BString bytes, int keyCode) +{ + switch (singleByte) { + + case B_FUNCTION_KEY: + switch (keyCode) { + case B_F1_KEY: + return "F1"; + case B_F2_KEY: + return "F2"; + case B_F3_KEY: + return "F3"; + case B_F4_KEY: + return "F4"; + case B_F5_KEY: + return "F5"; + case B_F6_KEY: + return "F6"; + case B_F7_KEY: + return "F7"; + case B_F8_KEY: + return "F8"; + case B_F9_KEY: + return "F9"; + case B_F10_KEY: + return "F10"; + case B_F11_KEY: + return "F11"; + case B_F12_KEY: + return "F12"; + case B_PRINT_KEY: + return "Print"; + case B_PAUSE_KEY: + return "Pause"; + case B_SCROLL_KEY: + return "ScrollLock"; + case B_SHIFT_KEY: + return "Shift"; + case B_LEFT_CONTROL_KEY: // B_CONTROL_KEY = B_F3_KEY..? + case B_RIGHT_CONTROL_KEY: + return "Control"; + } + break; + + case B_BACKSPACE: + return "Backspace"; + case B_LEFT_ARROW: + return "ArrowLeft"; + case B_RIGHT_ARROW: + return "ArrowRight"; + case B_UP_ARROW: + return "ArrowUp"; + case B_DOWN_ARROW: + return "ArrowDown"; + case B_INSERT: + return "Insert"; + case B_ENTER: + return "Enter"; + case B_DELETE: + return "Delete"; + case B_HOME: + return "Home"; + case B_END: + return "End"; + case B_PAGE_UP: + return "PageUp"; + case B_PAGE_DOWN: + return "PageDown"; + case B_TAB: + return "Tab"; + case B_SPACE: + return " "; // (20) SPACEBAR + + case B_COMMAND_KEY: + return "Alt"; + + case B_OPTION_KEY: + return "Compose"; // fx also said "Process" + case B_MENU_KEY: + return "ContextMenu"; + case B_ESCAPE: + return "Escape"; + + default: { + return bytes; + } + } + return "Unidentified"; +} + +static String KeyCodeForKeyEvent(int keyCode) +{ + switch (keyCode) { + case 0x0001: + return "Escape"; + case 0x0002: + return "F1"; + case 0x0003: + return "F2"; + case 0x0004: + return "F3"; + case 0x0005: + return "F4"; + case 0x0006: + return "F5"; + case 0x0007: + return "F6"; + case 0x0008: + return "F7"; + case 0x0009: + return "F8"; + case 0x000A: + return "F9"; + case 0x000B: + return "F10"; + case 0x000C: + return "F11"; + case 0x000D: + return "F12"; + + case 0x000E: + return "PrintScreen"; + case 0x000F: + return "ScrollLock"; + case 0x0010: + return "Pause"; + + case 0x0011: + return "Backquote"; + case 0x0012: + return "Digit1"; + case 0x0013: + return "Digit2"; + case 0x0014: + return "Digit3"; + case 0x0015: + return "Digit4"; + case 0x0016: + return "Digit5"; + case 0x0017: + return "Digit6"; + case 0x0018: + return "Digit7"; + case 0x0019: + return "Digit8"; + case 0x001A: + return "Digit9"; + case 0x001B: + return "Digit0"; + case 0x001C: + return "Minus"; + case 0x001D: + return "Equal"; + case 0x001E: + return "Backspace"; // IntYen + + case 0x001F: + return "Insert"; + case 0x0020: + return "Home"; + case 0x0021: + return "PageUp"; + + case 0x0022: + return "NumLock"; + case 0x0023: + return "NumpadDivide"; + case 0x0024: + return "NumpadMultiply"; + case 0x0025: + return "NumpadSubtract"; + + case 0x0026: + return "Tab"; + case 0x0027: + return "KeyQ"; + case 0x0028: + return "KeyW"; + case 0x0029: + return "KeyE"; + case 0x002A: + return "KeyR"; + case 0x002B: + return "KeyT"; + case 0x002C: + return "KeyY"; + case 0x002D: + return "KeyU"; + case 0x002E: + return "KeyI"; + case 0x002F: + return "KeyO"; + case 0x0030: + return "KepP"; + case 0x0031: + return "BracketLeft"; + case 0x0032: + return "BracketRight"; + case 0x0033: + return "Backslash"; + + case 0x0034: + return "Delete"; + case 0x0035: + return "End"; + case 0x0036: + return "PageDown"; + + case 0x0037: + return "Numpad7"; + case 0x0038: + return "Numpad8"; + case 0x0039: + return "Numpad9"; + case 0x003A: + return "NumpadAdd"; + + case 0x003B: + return "CapsLock"; + case 0x003C: + return "KeyA"; + case 0x003D: + return "KeyS"; + case 0x003E: + return "KeyD"; + case 0x003F: + return "KeyF"; + case 0x0040: + return "KeyG"; + case 0x0041: + return "KeyH"; + case 0x0042: + return "KeyJ"; + case 0x0043: + return "KeyK"; + case 0x0044: + return "KeyL"; + case 0x0045: + return "Semicolon"; + case 0x0046: + return "Quote"; + case 0x0047: + return "Return"; + + case 0x0048: + return "Numpad4"; + case 0x0049: + return "Numpad5"; + case 0x004A: + return "Numpad6"; + + case 0x004B: + return "ShiftLeft"; + case 0x004C: + return "KeyZ"; + case 0x004D: + return "KeyX"; + case 0x004E: + return "KeyC"; + case 0x004F: + return "KeyV"; + case 0x0050: + return "KeyB"; + case 0x0051: + return "KeyN"; + case 0x0052: + return "KeyM"; + case 0x0053: + return "Comma"; + case 0x0054: + return "Period"; + case 0x0055: + return "Slash"; + case 0x0056: + return "ShiftRight"; + + case 0x0057: + return "ArrowUp"; + case 0x0058: + return "Digit1"; + case 0x0059: + return "Digit2"; + case 0x005A: + return "Digit3"; + case 0x005B: + return "NumpadEnter"; + case 0x005C: + return "ControlLeft"; + case 0x005D: + return "AltLeft"; + case 0x005E: + return "Space"; + case 0x005F: + return "AltRight"; + case 0x0060: + return "ControlRight"; + case 0x0061: + return "ArrowLeft"; + case 0x0062: + return "ArrowDown"; + case 0x0063: + return "ArrowRight"; + case 0x0064: + return "Numpad0"; + case 0x0065: + return "NumpadDecimal"; + case 0x0066: + return "OSLeft"; // MetaLeft + case 0x0067: + return "OSRight"; + case 0x0068: + return "ContextMenu"; + case 0x0069: + return "IntlBackslash"; + case 0x006a: + return "NumPadEqual"; + } + return "Unidentified"; +} + PlatformKeyboardEvent::PlatformKeyboardEvent(BMessage* message) : m_autoRepeat(false) , m_isKeypad(false) @@ -337,6 +657,8 @@ PlatformKeyboardEvent::PlatformKeyboardEvent(BMessage* message) m_keyIdentifier = keyIdentifierForHaikuKeyCode(bytes.ByteAt(0), nativeVirtualKeyCode); m_windowsVirtualKeyCode = windowsKeyCodeForKeyEvent(bytes.ByteAt(0), nativeVirtualKeyCode); + m_key = KeyValueForKeyEvent(bytes, nativeVirtualKeyCode); + m_code = KeyCodeForKeyEvent(nativeVirtualKeyCode); if (message->what == B_KEY_UP) m_type = KeyUp;