in modules/x11_out/x11_out.c [297:691]
static void x11_translate_key(u32 X11Key, GF_EventKey *evt)
{
evt->flags = 0;
evt->hw_code = X11Key & 0xFF;
switch (X11Key) {
case XK_BackSpace:
evt->key_code = GF_KEY_BACKSPACE;
break;
case XK_Tab:
evt->key_code = GF_KEY_TAB;
break;
//case XK_Linefeed: evt->key_code = GF_KEY_LINEFEED; break;
case XK_Clear:
evt->key_code = GF_KEY_CLEAR;
break;
case XK_KP_Enter:
evt->flags = GF_KEY_EXT_NUMPAD;
case XK_Return:
evt->key_code = GF_KEY_ENTER;
break;
case XK_Pause:
evt->key_code = GF_KEY_PAUSE;
break;
case XK_Caps_Lock:
evt->key_code = GF_KEY_CAPSLOCK;
break;
case XK_Scroll_Lock:
evt->key_code = GF_KEY_SCROLL;
break;
case XK_Escape:
evt->key_code = GF_KEY_ESCAPE;
break;
case XK_Delete:
evt->key_code = GF_KEY_DEL;
break;
case XK_Kanji:
evt->key_code = GF_KEY_KANJIMODE;
break;
case XK_Katakana:
evt->key_code = GF_KEY_JAPANESEKATAKANA;
break;
case XK_Romaji:
evt->key_code = GF_KEY_JAPANESEROMAJI;
break;
case XK_Hiragana:
evt->key_code = GF_KEY_JAPANESEHIRAGANA;
break;
case XK_Kana_Lock:
evt->key_code = GF_KEY_KANAMODE;
break;
case XK_Home:
evt->key_code = GF_KEY_HOME;
break;
case XK_Left:
evt->key_code = GF_KEY_LEFT;
break;
case XK_Up:
evt->key_code = GF_KEY_UP;
break;
case XK_Right:
evt->key_code = GF_KEY_RIGHT;
break;
case XK_Down:
evt->key_code = GF_KEY_DOWN;
break;
case XK_Page_Up:
evt->key_code = GF_KEY_PAGEUP;
break;
case XK_Page_Down:
evt->key_code = GF_KEY_PAGEDOWN;
break;
case XK_End:
evt->key_code = GF_KEY_END;
break;
//case XK_Begin: evt->key_code = GF_KEY_BEGIN; break;
case XK_Select:
evt->key_code = GF_KEY_SELECT;
break;
case XK_Print:
evt->key_code = GF_KEY_PRINTSCREEN;
break;
case XK_Execute:
evt->key_code = GF_KEY_EXECUTE;
break;
case XK_Insert:
evt->key_code = GF_KEY_INSERT;
break;
case XK_Undo:
evt->key_code = GF_KEY_UNDO;
break;
//case XK_Redo: evt->key_code = GF_KEY_BEGIN; break;
//case XK_Menu: evt->key_code = GF_KEY_BEGIN; break;
case XK_Find:
evt->key_code = GF_KEY_FIND;
break;
case XK_Cancel:
evt->key_code = GF_KEY_CANCEL;
break;
case XK_Help:
evt->key_code = GF_KEY_HELP;
break;
//case XK_Break: evt->key_code = GF_KEY_BREAK; break;
//case XK_Mode_switch: evt->key_code = GF_KEY_BEGIN; break;
case XK_Num_Lock:
evt->key_code = GF_KEY_NUMLOCK;
break;
case XK_F1:
evt->key_code = GF_KEY_F1;
break;
case XK_F2:
evt->key_code = GF_KEY_F2;
break;
case XK_F3:
evt->key_code = GF_KEY_F3;
break;
case XK_F4:
evt->key_code = GF_KEY_F4;
break;
case XK_F5:
evt->key_code = GF_KEY_F5;
break;
case XK_F6:
evt->key_code = GF_KEY_F6;
break;
case XK_F7:
evt->key_code = GF_KEY_F7;
break;
case XK_F8:
evt->key_code = GF_KEY_F8;
break;
case XK_F9:
evt->key_code = GF_KEY_F9;
break;
case XK_F10:
evt->key_code = GF_KEY_F10;
break;
case XK_F11:
evt->key_code = GF_KEY_F11;
break;
case XK_F12:
evt->key_code = GF_KEY_F12;
break;
case XK_F13:
evt->key_code = GF_KEY_F13;
break;
case XK_F14:
evt->key_code = GF_KEY_F14;
break;
case XK_F15:
evt->key_code = GF_KEY_F15;
break;
case XK_F16:
evt->key_code = GF_KEY_F16;
break;
case XK_F17:
evt->key_code = GF_KEY_F17;
break;
case XK_F18:
evt->key_code = GF_KEY_F18;
break;
case XK_F19:
evt->key_code = GF_KEY_F19;
break;
case XK_F20:
evt->key_code = GF_KEY_F20;
break;
case XK_F21:
evt->key_code = GF_KEY_F21;
break;
case XK_F22:
evt->key_code = GF_KEY_F22;
break;
case XK_F23:
evt->key_code = GF_KEY_F23;
break;
case XK_F24:
evt->key_code = GF_KEY_F24;
break;
case XK_KP_Delete:
case XK_KP_Decimal:
evt->flags = GF_KEY_EXT_NUMPAD;
evt->key_code = GF_KEY_COMMA;
break;
case XK_KP_Insert:
case XK_KP_0:
evt->flags = GF_KEY_EXT_NUMPAD;
evt->key_code = GF_KEY_0;
break;
case XK_KP_End:
case XK_KP_1:
evt->flags = GF_KEY_EXT_NUMPAD;
evt->key_code = GF_KEY_1;
break;
case XK_KP_Down:
case XK_KP_2:
evt->flags = GF_KEY_EXT_NUMPAD;
evt->key_code = GF_KEY_2;
break;
case XK_KP_Page_Down:
case XK_KP_3:
evt->flags = GF_KEY_EXT_NUMPAD;
evt->key_code = GF_KEY_3;
break;
case XK_KP_Left:
case XK_KP_4:
evt->flags = GF_KEY_EXT_NUMPAD;
evt->key_code = GF_KEY_4;
break;
case XK_KP_Begin:
case XK_KP_5:
evt->flags = GF_KEY_EXT_NUMPAD;
evt->key_code = GF_KEY_5;
break;
case XK_KP_Right:
case XK_KP_6:
evt->flags = GF_KEY_EXT_NUMPAD;
evt->key_code = GF_KEY_6;
break;
case XK_KP_Home:
case XK_KP_7:
evt->flags = GF_KEY_EXT_NUMPAD;
evt->key_code = GF_KEY_7;
break;
case XK_KP_Up:
case XK_KP_8:
evt->flags = GF_KEY_EXT_NUMPAD;
evt->key_code = GF_KEY_8;
break;
case XK_KP_Page_Up:
case XK_KP_9:
evt->flags = GF_KEY_EXT_NUMPAD;
evt->key_code = GF_KEY_9;
break;
case XK_KP_Add:
evt->flags = GF_KEY_EXT_NUMPAD;
evt->key_code = GF_KEY_PLUS;
break;
case XK_KP_Subtract:
evt->flags = GF_KEY_EXT_NUMPAD;
evt->key_code = GF_KEY_HYPHEN;
break;
case XK_KP_Multiply:
evt->flags = GF_KEY_EXT_NUMPAD;
evt->key_code = GF_KEY_STAR;
break;
case XK_KP_Divide:
evt->flags = GF_KEY_EXT_NUMPAD;
evt->key_code = GF_KEY_SLASH;
break;
case XK_Shift_R:
evt->flags = GF_KEY_EXT_RIGHT;
case XK_Shift_L:
evt->key_code = GF_KEY_SHIFT;
break;
case XK_Control_R:
evt->flags = GF_KEY_EXT_RIGHT;
case XK_Control_L:
evt->key_code = GF_KEY_CONTROL;
break;
case XK_Alt_R:
evt->flags = GF_KEY_EXT_RIGHT;
case XK_Alt_L:
evt->key_code = GF_KEY_ALT;
break;
case XK_Super_R:
evt->flags = GF_KEY_EXT_RIGHT;
case XK_Super_L:
evt->key_code = GF_KEY_WIN;
break;
case XK_Menu:
evt->key_code = GF_KEY_META;
break;
#ifdef XK_XKB_KEYS
case XK_ISO_Level3_Shift:
evt->key_code = GF_KEY_ALTGRAPH;
break;
#endif
case '!':
evt->key_code = GF_KEY_EXCLAMATION;
break;
case '"':
evt->key_code = GF_KEY_QUOTATION;
break;
case '#':
evt->key_code = GF_KEY_NUMBER;
break;
case '$':
evt->key_code = GF_KEY_DOLLAR;
break;
case '&':
evt->key_code = GF_KEY_AMPERSAND;
break;
case '\'':
evt->key_code = GF_KEY_APOSTROPHE;
break;
case '(':
evt->key_code = GF_KEY_LEFTPARENTHESIS;
break;
case ')':
evt->key_code = GF_KEY_RIGHTPARENTHESIS;
break;
case ',':
evt->key_code = GF_KEY_COMMA;
break;
case ':':
evt->key_code = GF_KEY_COLON;
break;
case ';':
evt->key_code = GF_KEY_SEMICOLON;
break;
case '<':
evt->key_code = GF_KEY_LESSTHAN;
break;
case '>':
evt->key_code = GF_KEY_GREATERTHAN;
break;
case '?':
evt->key_code = GF_KEY_QUESTION;
break;
case '@':
evt->key_code = GF_KEY_AT;
break;
case '[':
evt->key_code = GF_KEY_LEFTSQUAREBRACKET;
break;
case ']':
evt->key_code = GF_KEY_RIGHTSQUAREBRACKET;
break;
case '\\':
evt->key_code = GF_KEY_BACKSLASH;
break;
case '_':
evt->key_code = GF_KEY_UNDERSCORE;
break;
case '`':
evt->key_code = GF_KEY_GRAVEACCENT;
break;
case ' ':
evt->key_code = GF_KEY_SPACE;
break;
case '/':
evt->key_code = GF_KEY_SLASH;
break;
case '*':
evt->key_code = GF_KEY_STAR;
break;
case '-':
evt->key_code = GF_KEY_HYPHEN;
break;
case '+':
evt->key_code = GF_KEY_PLUS;
break;
case '=':
evt->key_code = GF_KEY_EQUALS;
break;
case '^':
evt->key_code = GF_KEY_CIRCUM;
break;
case '{':
evt->key_code = GF_KEY_LEFTCURLYBRACKET;
break;
case '}':
evt->key_code = GF_KEY_RIGHTCURLYBRACKET;
break;
case '|':
evt->key_code = GF_KEY_PIPE;
break;
default:
if ((X11Key>='0') && (X11Key<='9')) evt->key_code = GF_KEY_0 + X11Key - '0';
else if ((X11Key>='A') && (X11Key<='Z')) evt->key_code = GF_KEY_A + X11Key - 'A';
/*DOM3: translate to A -> Z, not a -> z*/
else if ((X11Key>='a') && (X11Key<='z')) {
evt->key_code = GF_KEY_A + X11Key - 'a';
evt->hw_code = X11Key - 'a' + 'A';
}
else {
evt->key_code = 0;
GF_LOG(GF_LOG_WARNING, GF_LOG_MMIO, ("[X11] Unrecognized key %X\n", X11Key));
}
break;
}
}