(keycode, shiftPressed)
| 198 | // Given a keycode, try to predict which keysym it might be. |
| 199 | // If the keycode is unknown, null is returned. |
| 200 | function keysymFromKeyCode(keycode, shiftPressed) { |
| 201 | if (typeof(keycode) !== 'number') { |
| 202 | return null; |
| 203 | } |
| 204 | // won't be accurate for azerty |
| 205 | if (keycode >= 0x30 && keycode <= 0x39) { |
| 206 | return keycode; // digit |
| 207 | } |
| 208 | if (keycode >= 0x41 && keycode <= 0x5a) { |
| 209 | // remap to lowercase unless shift is down |
| 210 | return shiftPressed ? keycode : keycode + 32; // A-Z |
| 211 | } |
| 212 | if (keycode >= 0x60 && keycode <= 0x69) { |
| 213 | return XK_KP_0 + (keycode - 0x60); // numpad 0-9 |
| 214 | } |
| 215 | |
| 216 | switch(keycode) { |
| 217 | case 0x20: return XK_space; |
| 218 | case 0x6a: return XK_KP_Multiply; |
| 219 | case 0x6b: return XK_KP_Add; |
| 220 | case 0x6c: return XK_KP_Separator; |
| 221 | case 0x6d: return XK_KP_Subtract; |
| 222 | case 0x6e: return XK_KP_Decimal; |
| 223 | case 0x6f: return XK_KP_Divide; |
| 224 | case 0xbb: return XK_plus; |
| 225 | case 0xbc: return XK_comma; |
| 226 | case 0xbd: return XK_minus; |
| 227 | case 0xbe: return XK_period; |
| 228 | } |
| 229 | |
| 230 | return nonCharacterKey({keyCode: keycode}); |
| 231 | } |
| 232 | |
| 233 | // if the key is a known non-character key (any key which doesn't generate character data) |
| 234 | // return its keysym value. Otherwise return null |
no test coverage detected