diff --git a/src/Wt/WEvent.C b/src/Wt/WEvent.C index 174968a7b..a9885fcb8 100644 --- a/src/Wt/WEvent.C +++ b/src/Wt/WEvent.C @@ -258,17 +258,43 @@ Key WKeyEvent::key() const if (key >= 96 && key <= 105) key -= int('0'); - if (key >= 'A' && key <= 'Z') + if ((key >= 'A' && key <= 'Z') + || (key >= '0' && key <= '9') + || (key >= 16 && key <= 18) // modifiers + || (key >= 33 && key <= 40) // cursor + || (key >= 45 && key <= 46) // Ins, Del + || (key >= 106 && key <= 123) // Num pad, F1-F12 + || (key >= 186 && key <= 192) // OEM keys 1/3 + || (key >= 219 && key <= 222)) // OEM keys 2/3 return static_cast(key); - else if (key == 8 || key == 9 || key == 13 || key == 27 || key == 32 - || (key >= 16 && key <= 18) - || (key >= 33 && key <= 40) - || (key >= 45 && key <= 46) - || (key >= 48 && key <= 57) - || (key >= 112 && key <= 123)) - return static_cast(key); - else - return Key::Unknown; + switch (key) + { + case 8: // Backspace + case 9: // Tab + case 12: // NumClear + case 13: // Enter + case 19: // Pause + case 27: // Escape + case 32: // Space + case 91: // Meta + case 93: // ContextMenu + case 226: // OEM keys 3/3 + return static_cast(key); + + // Chromium + case 92: return Key::Meta; // right Windows key + + // Firefox + case 59: return Key::OemSemicolon; + case 60: return Key::OemBackslash; + case 63: return Key::OemOpenBrackets; + case 160: return Key::OemPipe; + case 163: return Key::OemQuestion; + case 171: return Key::OemPlus; + case 173: return Key::OemMinus; + + default: return Key::Unknown; + } #else // WT_TARGET_JAVA return keyFromValue(key); #endif // WT_TARGET_JAVA diff --git a/src/Wt/WGlobal.h b/src/Wt/WGlobal.h index b21f9998b..de2c65bda 100644 --- a/src/Wt/WGlobal.h +++ b/src/Wt/WGlobal.h @@ -822,73 +822,95 @@ W_DECLARE_OPERATORS_FOR_FLAGS(KeyboardModifier) * \ingroup signalslot */ enum class Key { - Unknown = 0, //!< Unknown key. - Enter = 13, //!< Enter key. - Tab = 9, //!< Tab key. - Backspace = 8, //!< Backspace key. - Shift = 16, //!< Shift key. - Control = 17, //!< Control key. - Alt = 18, //!< Alt key. - PageUp = 33, //!< Page up key. - PageDown = 34, //!< Page down key. - End = 35, //!< End key. - Home = 36, //!< Home key. - Left = 37, //!< Left arrow key. - Up = 38, //!< Up arrow key. - Right = 39, //!< Right arrow key. - Down = 40, //!< Down arrow key. - Insert = 45, //!< Insert key. - Delete = 46, //!< Delete key. - Escape = 27, //!< Escape key. - F1 = 112, //!< F1 function key. - F2 = 113, //!< F2 function key. - F3 = 114, //!< F3 function key. - F4 = 115, //!< F4 function key. - F5 = 116, //!< F5 function key. - F6 = 117, //!< F6 function key. - F7 = 118, //!< F7 function key. - F8 = 119, //!< F8 function key. - F9 = 120, //!< F9 function key. - F10 = 121, //!< F10 function key. - F11 = 122, //!< F11 function key. - F12 = 123, //!< F12 function key. - Space = ' ', //!< Space - A = 'A', //!< 'A' key - B = 'B', //!< 'B' key - C = 'C', //!< 'C' key - D = 'D', //!< 'D' key - E = 'E', //!< 'E' key - F = 'F', //!< 'F' key - G = 'G', //!< 'G' key - H = 'H', //!< 'H' key - I = 'I', //!< 'I' key - J = 'J', //!< 'J' key - K = 'K', //!< 'K' key - L = 'L', //!< 'L' key - M = 'M', //!< 'M' key - N = 'N', //!< 'N' key - O = 'O', //!< 'O' key - P = 'P', //!< 'P' key - Q = 'Q', //!< 'Q' key - R = 'R', //!< 'R' key - S = 'S', //!< 'S' key - T = 'T', //!< 'T' key - U = 'U', //!< 'U' key - V = 'V', //!< 'V' key - W = 'W', //!< 'W' key - X = 'X', //!< 'X' key - Y = 'Y', //!< 'Y' key - Z = 'Z', //!< 'Z' key - Key_1 = '1', //!< '1' key - Key_2 = '2', //!< '2' key - Key_3 = '3', //!< '3' key - Key_4 = '4', //!< '4' key - Key_5 = '5', //!< '5' key - Key_6 = '6', //!< '6' key - Key_7 = '7', //!< '7' key - Key_8 = '8', //!< '8' key - Key_9 = '9', //!< '9' key - Key_0 = '0', //!< '0' key + Unknown = 0, //!< Unknown key. + Enter = 13, //!< Enter key. + Tab = 9, //!< Tab key. + Backspace = 8, //!< Backspace key. + Shift = 16, //!< Shift key. + Control = 17, //!< Control key. + Alt = 18, //!< Alt key. + Pause = 19, //!< Pause key. + Escape = 27, //!< Escape key. + PageUp = 33, //!< Page up key. + PageDown = 34, //!< Page down key. + End = 35, //!< End key. + Home = 36, //!< Home key. + Left = 37, //!< Left arrow key. + Up = 38, //!< Up arrow key. + Right = 39, //!< Right arrow key. + Down = 40, //!< Down arrow key. + Insert = 45, //!< Insert key. + Delete = 46, //!< Delete key. + Meta = 91, //!< Meta / Windows key. + ContextMenu = 93, //!< Context menu / Apps key. + NumClear = 12, //!< '5' num pad key / Clear key. + NumMultiply = 106, //!< '*' num pad key. + NumAdd = 107, //!< '+' num pad key. + NumSeparator = 108, //!< ',' num pad key. + NumSubtract = 109, //!< '-' num pad key. + NumDecimal = 110, //!< '.' num pad key. + NumDivide = 111, //!< '/' num pad key. + F1 = 112, //!< F1 function key. + F2 = 113, //!< F2 function key. + F3 = 114, //!< F3 function key. + F4 = 115, //!< F4 function key. + F5 = 116, //!< F5 function key. + F6 = 117, //!< F6 function key. + F7 = 118, //!< F7 function key. + F8 = 119, //!< F8 function key. + F9 = 120, //!< F9 function key. + F10 = 121, //!< F10 function key. + F11 = 122, //!< F11 function key. + F12 = 123, //!< F12 function key. + OemSemicolon = 186, //!< 'Ü' key on German keyboard. + OemPlus = 187, //!< '+' / '*' / '~' key on German keyboard. + OemComma = 188, //!< ',' / ';' key on German keyboard. + OemMinus = 189, //!< '-' / '_' key on German keyboard. + OemPeriod = 190, //!< '.' / ':' key on German keyboard. + OemQuestion = 191, //!< '#' / ''' key on German keyboard. + OemTilde = 192, //!< 'Ö' key on German keyboard. Note: Cannot be distinguished from OemCloseBrackets in Firefox! + OemOpenBrackets = 219, //!< 'ß' / '?' / '\' key on German keyboard. + OemPipe = 220, //!< '^' / '°' key on German keyboard. + OemCloseBrackets = 221, //!< '´' / '`' key on German keyboard. Note: Cannot be distinguished from OemTilde in Firefox! + OemQuotes = 222, //!< 'Ä' key on German keyboard. + OemBackslash = 226, //!< '<' / '>' / '|' key on German keyboard. + Space = ' ', //!< Space + A = 'A', //!< 'A' key + B = 'B', //!< 'B' key + C = 'C', //!< 'C' key + D = 'D', //!< 'D' key + E = 'E', //!< 'E' key + F = 'F', //!< 'F' key + G = 'G', //!< 'G' key + H = 'H', //!< 'H' key + I = 'I', //!< 'I' key + J = 'J', //!< 'J' key + K = 'K', //!< 'K' key + L = 'L', //!< 'L' key + M = 'M', //!< 'M' key + N = 'N', //!< 'N' key + O = 'O', //!< 'O' key + P = 'P', //!< 'P' key + Q = 'Q', //!< 'Q' key + R = 'R', //!< 'R' key + S = 'S', //!< 'S' key + T = 'T', //!< 'T' key + U = 'U', //!< 'U' key + V = 'V', //!< 'V' key + W = 'W', //!< 'W' key + X = 'X', //!< 'X' key + Y = 'Y', //!< 'Y' key + Z = 'Z', //!< 'Z' key + Key_1 = '1', //!< '1' key + Key_2 = '2', //!< '2' key + Key_3 = '3', //!< '3' key + Key_4 = '4', //!< '4' key + Key_5 = '5', //!< '5' key + Key_6 = '6', //!< '6' key + Key_7 = '7', //!< '7' key + Key_8 = '8', //!< '8' key + Key_9 = '9', //!< '9' key + Key_0 = '0', //!< '0' key }; /*! \brief Enumeration for the check state of a check box.