void df_keyboard_init() { memset(keymap, 0, sizeof(keymap)); /* Map DirectFB keycodes to Virtual Key Codes */ keymap[DIKI_A - DIKI_UNKNOWN] = VK_KEY_A; keymap[DIKI_B - DIKI_UNKNOWN] = VK_KEY_B; keymap[DIKI_C - DIKI_UNKNOWN] = VK_KEY_C; keymap[DIKI_D - DIKI_UNKNOWN] = VK_KEY_D; keymap[DIKI_E - DIKI_UNKNOWN] = VK_KEY_E; keymap[DIKI_F - DIKI_UNKNOWN] = VK_KEY_F; keymap[DIKI_G - DIKI_UNKNOWN] = VK_KEY_G; keymap[DIKI_H - DIKI_UNKNOWN] = VK_KEY_H; keymap[DIKI_I - DIKI_UNKNOWN] = VK_KEY_I; keymap[DIKI_J - DIKI_UNKNOWN] = VK_KEY_J; keymap[DIKI_K - DIKI_UNKNOWN] = VK_KEY_K; keymap[DIKI_L - DIKI_UNKNOWN] = VK_KEY_L; keymap[DIKI_M - DIKI_UNKNOWN] = VK_KEY_M; keymap[DIKI_N - DIKI_UNKNOWN] = VK_KEY_N; keymap[DIKI_O - DIKI_UNKNOWN] = VK_KEY_O; keymap[DIKI_P - DIKI_UNKNOWN] = VK_KEY_P; keymap[DIKI_Q - DIKI_UNKNOWN] = VK_KEY_Q; keymap[DIKI_R - DIKI_UNKNOWN] = VK_KEY_R; keymap[DIKI_S - DIKI_UNKNOWN] = VK_KEY_S; keymap[DIKI_T - DIKI_UNKNOWN] = VK_KEY_T; keymap[DIKI_U - DIKI_UNKNOWN] = VK_KEY_U; keymap[DIKI_V - DIKI_UNKNOWN] = VK_KEY_V; keymap[DIKI_W - DIKI_UNKNOWN] = VK_KEY_W; keymap[DIKI_X - DIKI_UNKNOWN] = VK_KEY_X; keymap[DIKI_Y - DIKI_UNKNOWN] = VK_KEY_Y; keymap[DIKI_Z - DIKI_UNKNOWN] = VK_KEY_Z; keymap[DIKI_0 - DIKI_UNKNOWN] = VK_KEY_0; keymap[DIKI_1 - DIKI_UNKNOWN] = VK_KEY_1; keymap[DIKI_2 - DIKI_UNKNOWN] = VK_KEY_2; keymap[DIKI_3 - DIKI_UNKNOWN] = VK_KEY_3; keymap[DIKI_4 - DIKI_UNKNOWN] = VK_KEY_4; keymap[DIKI_5 - DIKI_UNKNOWN] = VK_KEY_5; keymap[DIKI_6 - DIKI_UNKNOWN] = VK_KEY_6; keymap[DIKI_7 - DIKI_UNKNOWN] = VK_KEY_7; keymap[DIKI_8 - DIKI_UNKNOWN] = VK_KEY_8; keymap[DIKI_9 - DIKI_UNKNOWN] = VK_KEY_9; keymap[DIKI_F1 - DIKI_UNKNOWN] = VK_F1; keymap[DIKI_F2 - DIKI_UNKNOWN] = VK_F2; keymap[DIKI_F3 - DIKI_UNKNOWN] = VK_F3; keymap[DIKI_F4 - DIKI_UNKNOWN] = VK_F4; keymap[DIKI_F5 - DIKI_UNKNOWN] = VK_F5; keymap[DIKI_F6 - DIKI_UNKNOWN] = VK_F6; keymap[DIKI_F7 - DIKI_UNKNOWN] = VK_F7; keymap[DIKI_F8 - DIKI_UNKNOWN] = VK_F8; keymap[DIKI_F9 - DIKI_UNKNOWN] = VK_F9; keymap[DIKI_F10 - DIKI_UNKNOWN] = VK_F10; keymap[DIKI_F11 - DIKI_UNKNOWN] = VK_F11; keymap[DIKI_F12 - DIKI_UNKNOWN] = VK_F12; keymap[DIKI_COMMA - DIKI_UNKNOWN] = VK_OEM_COMMA; keymap[DIKI_PERIOD - DIKI_UNKNOWN] = VK_OEM_PERIOD; keymap[DIKI_MINUS_SIGN - DIKI_UNKNOWN] = VK_OEM_MINUS; keymap[DIKI_EQUALS_SIGN - DIKI_UNKNOWN] = VK_OEM_PLUS; keymap[DIKI_ESCAPE - DIKI_UNKNOWN] = VK_ESCAPE; keymap[DIKI_LEFT - DIKI_UNKNOWN] = VK_LEFT; keymap[DIKI_RIGHT - DIKI_UNKNOWN] = VK_RIGHT; keymap[DIKI_UP - DIKI_UNKNOWN] = VK_UP; keymap[DIKI_DOWN - DIKI_UNKNOWN] = VK_DOWN; keymap[DIKI_CONTROL_L - DIKI_UNKNOWN] = VK_LCONTROL; keymap[DIKI_CONTROL_R - DIKI_UNKNOWN] = VK_RCONTROL; keymap[DIKI_SHIFT_L - DIKI_UNKNOWN] = VK_LSHIFT; keymap[DIKI_SHIFT_R - DIKI_UNKNOWN] = VK_RSHIFT; keymap[DIKI_ALT_L - DIKI_UNKNOWN] = VK_LMENU; keymap[DIKI_ALT_R - DIKI_UNKNOWN] = VK_RMENU; keymap[DIKI_TAB - DIKI_UNKNOWN] = VK_TAB; keymap[DIKI_ENTER - DIKI_UNKNOWN] = VK_RETURN; keymap[DIKI_SPACE - DIKI_UNKNOWN] = VK_SPACE; keymap[DIKI_BACKSPACE - DIKI_UNKNOWN] = VK_BACK; keymap[DIKI_INSERT - DIKI_UNKNOWN] = VK_INSERT; keymap[DIKI_DELETE - DIKI_UNKNOWN] = VK_DELETE; keymap[DIKI_HOME - DIKI_UNKNOWN] = VK_HOME; keymap[DIKI_END - DIKI_UNKNOWN] = VK_END; keymap[DIKI_PAGE_UP - DIKI_UNKNOWN] = VK_PRIOR; keymap[DIKI_PAGE_DOWN - DIKI_UNKNOWN] = VK_NEXT; keymap[DIKI_CAPS_LOCK - DIKI_UNKNOWN] = VK_CAPITAL; keymap[DIKI_NUM_LOCK - DIKI_UNKNOWN] = VK_NUMLOCK; keymap[DIKI_SCROLL_LOCK - DIKI_UNKNOWN] = VK_SCROLL; keymap[DIKI_PRINT - DIKI_UNKNOWN] = VK_PRINT; keymap[DIKI_PAUSE - DIKI_UNKNOWN] = VK_PAUSE; keymap[DIKI_KP_DIV - DIKI_UNKNOWN] = VK_DIVIDE; keymap[DIKI_KP_MULT - DIKI_UNKNOWN] = VK_MULTIPLY; keymap[DIKI_KP_MINUS - DIKI_UNKNOWN] = VK_SUBTRACT; keymap[DIKI_KP_PLUS - DIKI_UNKNOWN] = VK_ADD; keymap[DIKI_KP_ENTER - DIKI_UNKNOWN] = VK_RETURN; keymap[DIKI_KP_DECIMAL - DIKI_UNKNOWN] = VK_DECIMAL; keymap[DIKI_QUOTE_LEFT - DIKI_UNKNOWN] = VK_OEM_3; keymap[DIKI_BRACKET_LEFT - DIKI_UNKNOWN] = VK_OEM_4; keymap[DIKI_BRACKET_RIGHT - DIKI_UNKNOWN] = VK_OEM_6; keymap[DIKI_BACKSLASH - DIKI_UNKNOWN] = VK_OEM_5; keymap[DIKI_SEMICOLON - DIKI_UNKNOWN] = VK_OEM_1; keymap[DIKI_QUOTE_RIGHT - DIKI_UNKNOWN] = VK_OEM_7; keymap[DIKI_COMMA - DIKI_UNKNOWN] = VK_OEM_COMMA; keymap[DIKI_PERIOD - DIKI_UNKNOWN] = VK_OEM_PERIOD; keymap[DIKI_SLASH - DIKI_UNKNOWN] = VK_OEM_2; keymap[DIKI_LESS_SIGN - DIKI_UNKNOWN] = 0; keymap[DIKI_KP_0 - DIKI_UNKNOWN] = VK_NUMPAD0; keymap[DIKI_KP_1 - DIKI_UNKNOWN] = VK_NUMPAD1; keymap[DIKI_KP_2 - DIKI_UNKNOWN] = VK_NUMPAD2; keymap[DIKI_KP_3 - DIKI_UNKNOWN] = VK_NUMPAD3; keymap[DIKI_KP_4 - DIKI_UNKNOWN] = VK_NUMPAD4; keymap[DIKI_KP_5 - DIKI_UNKNOWN] = VK_NUMPAD5; keymap[DIKI_KP_6 - DIKI_UNKNOWN] = VK_NUMPAD6; keymap[DIKI_KP_7 - DIKI_UNKNOWN] = VK_NUMPAD7; keymap[DIKI_KP_8 - DIKI_UNKNOWN] = VK_NUMPAD8; keymap[DIKI_KP_9 - DIKI_UNKNOWN] = VK_NUMPAD9; keymap[DIKI_META_L - DIKI_UNKNOWN] = VK_LWIN; keymap[DIKI_META_R - DIKI_UNKNOWN] = VK_RWIN; keymap[DIKI_SUPER_L - DIKI_UNKNOWN] = VK_APPS; memset(functionmap, 0, sizeof(functionmap)); functionmap[DFB_FUNCTION_KEY(23) - DFB_FUNCTION_KEY(0)] = VK_HANGUL; functionmap[DFB_FUNCTION_KEY(24) - DFB_FUNCTION_KEY(0)] = VK_HANJA; }
BOOL df_event_process(freerdp* instance, DFBEvent* event) { int flags; rdpGdi* gdi; dfInfo* dfi; int pointer_x; int pointer_y; DFBInputEvent* input_event; gdi = instance->context->gdi; dfi = ((dfContext*) instance->context)->dfi; dfi->layer->GetCursorPosition(dfi->layer, &pointer_x, &pointer_y); if (event->clazz == DFEC_INPUT) { flags = 0; input_event = (DFBInputEvent*) event; switch (input_event->type) { case DIET_AXISMOTION: if (pointer_x > (gdi->width - 1)) pointer_x = gdi->width - 1; if (pointer_y > (gdi->height - 1)) pointer_y = gdi->height - 1; if (input_event->axis == DIAI_Z) { df_send_mouse_wheel_event(instance->input, input_event->axisrel, pointer_x, pointer_y); } else { df_send_mouse_motion_event(instance->input, pointer_x, pointer_y); } break; case DIET_BUTTONPRESS: df_send_mouse_button_event(instance->input, TRUE, input_event->button, pointer_x, pointer_y); break; case DIET_BUTTONRELEASE: df_send_mouse_button_event(instance->input, FALSE, input_event->button, pointer_x, pointer_y); break; case DIET_KEYPRESS: df_send_keyboard_event(instance->input, TRUE, input_event->key_id - DIKI_UNKNOWN, input_event->key_symbol - DFB_FUNCTION_KEY(0)); break; case DIET_KEYRELEASE: df_send_keyboard_event(instance->input, FALSE, input_event->key_id - DIKI_UNKNOWN, input_event->key_symbol - DFB_FUNCTION_KEY(0)); break; case DIET_UNKNOWN: break; } } return TRUE; }
DIKI_CONTROL_L, DIKI_A, DIKI_S, DIKI_D, DIKI_F, DIKI_G, DIKI_H, DIKI_J, DIKI_K, DIKI_L, DIKI_SEMICOLON, DIKI_QUOTE_RIGHT, DIKI_QUOTE_LEFT, DIKI_SHIFT_L, DIKI_BACKSLASH, DIKI_Z, DIKI_X, DIKI_C, DIKI_V, DIKI_B, DIKI_N, DIKI_M, DIKI_COMMA, DIKI_PERIOD, DIKI_SLASH, DIKI_SHIFT_R, DIKI_KP_MULT, DIKI_ALT_L, DIKI_SPACE, DIKI_CAPS_LOCK, DIKI_F1, DIKI_F2, DIKI_F3, DIKI_F4, DIKI_F5, DIKI_F6, DIKI_F7, DIKI_F8, DIKI_F9, DIKI_F10, DIKI_NUM_LOCK, DIKI_SCROLL_LOCK, DIKI_KP_7, DIKI_KP_8, DIKI_KP_9, DIKI_KP_MINUS, DIKI_KP_4, DIKI_KP_5, DIKI_KP_6, DIKI_KP_PLUS, DIKI_KP_1, DIKI_KP_2, DIKI_KP_3, DIKI_KP_0, DIKI_KP_DECIMAL, /*KEY_103RD,*/ DIKI_BACKSLASH, /*KEY_F13,*/ DFB_FUNCTION_KEY(13), /*KEY_102ND*/ DIKI_LESS_SIGN, DIKI_F11, DIKI_F12, DFB_FUNCTION_KEY(14), DFB_FUNCTION_KEY(15), DFB_FUNCTION_KEY(16), DFB_FUNCTION_KEY(17), DFB_FUNCTION_KEY(18), DFB_FUNCTION_KEY(19), DFB_FUNCTION_KEY(20), DIKI_KP_ENTER, DIKI_CONTROL_R, DIKI_KP_DIV, DIKI_PRINT, DIKI_ALT_R, /*KEY_LINEFEED*/ DIKI_UNKNOWN, DIKI_HOME, DIKI_UP, DIKI_PAGE_UP, DIKI_LEFT, DIKI_RIGHT, DIKI_END, DIKI_DOWN, DIKI_PAGE_DOWN, DIKI_INSERT, DIKI_DELETE, /*KEY_MACRO,*/ DIKI_UNKNOWN,
static DFBInputDeviceKeySymbol keyboard_get_symbol( int code, unsigned short value, DFBInputDeviceKeymapSymbolIndex level ) { unsigned char type = KTYP(value); unsigned char index = KVAL(value); int base = (level == DIKSI_BASE); switch (type) { case KT_FN: if (index < 20) return DFB_FUNCTION_KEY( index + 1 ); break; case KT_LETTER: case KT_LATIN: switch (index) { case 0x1c: return DIKS_PRINT; case 0x7f: return DIKS_BACKSPACE; case 0xa4: return 0x20ac; /* euro currency sign */ default: return index; } break; case KT_DEAD: switch (value) { case K_DGRAVE: return DIKS_DEAD_GRAVE; case K_DACUTE: return DIKS_DEAD_ACUTE; case K_DCIRCM: return DIKS_DEAD_CIRCUMFLEX; case K_DTILDE: return DIKS_DEAD_TILDE; case K_DDIERE: return DIKS_DEAD_DIAERESIS; case K_DCEDIL: return DIKS_DEAD_CEDILLA; default: break; } break; case KT_PAD: if (index <= 9 && level != DIKSI_BASE) return DIKS_0 + index; break; case 0xe: /* special IPAQ H3600 case - AH */ switch (index) { case 0x20: return DIKS_CALENDAR; case 0x1a: return DIKS_BACK; case 0x1c: return DIKS_MEMO; case 0x21: return DIKS_POWER; } break; case 0xd: /* another special IPAQ H3600 case - AH */ switch (index) { case 0x2: return DIKS_DIRECTORY; case 0x1: return DIKS_MAIL; /* Q on older iPaqs */ } break; } switch (value) { case K_LEFT: return DIKS_CURSOR_LEFT; case K_RIGHT: return DIKS_CURSOR_RIGHT; case K_UP: return DIKS_CURSOR_UP; case K_DOWN: return DIKS_CURSOR_DOWN; case K_ENTER: return DIKS_ENTER; case K_CTRL: return DIKS_CONTROL; case K_SHIFT: return DIKS_SHIFT; case K_ALT: return DIKS_ALT; case K_ALTGR: return DIKS_ALTGR; case K_INSERT: return DIKS_INSERT; case K_REMOVE: return DIKS_DELETE; case K_FIND: return DIKS_HOME; case K_SELECT: return DIKS_END; case K_PGUP: return DIKS_PAGE_UP; case K_PGDN: return DIKS_PAGE_DOWN; case K_NUM: return DIKS_NUM_LOCK; case K_HOLD: return DIKS_SCROLL_LOCK; case K_PAUSE: return DIKS_PAUSE; case K_BREAK: return DIKS_BREAK; case K_CAPS: return DIKS_CAPS_LOCK; case K_P0: return DIKS_INSERT; case K_P1: return DIKS_END; case K_P2: return DIKS_CURSOR_DOWN; case K_P3: return DIKS_PAGE_DOWN; case K_P4: return DIKS_CURSOR_LEFT; case K_P5: return DIKS_BEGIN; case K_P6: return DIKS_CURSOR_RIGHT; case K_P7: return DIKS_HOME; case K_P8: return DIKS_CURSOR_UP; case K_P9: return DIKS_PAGE_UP; case K_PPLUS: return DIKS_PLUS_SIGN; case K_PMINUS: return DIKS_MINUS_SIGN; case K_PSTAR: return DIKS_ASTERISK; case K_PSLASH: return DIKS_SLASH; case K_PENTER: return DIKS_ENTER; case K_PCOMMA: return base ? DIKS_DELETE : DIKS_COMMA; case K_PDOT: return base ? DIKS_DELETE : DIKS_PERIOD; case K_PPARENL: return DIKS_PARENTHESIS_LEFT; case K_PPARENR: return DIKS_PARENTHESIS_RIGHT; } /* special keys not in the map, hack? */ if (code == 99) return DIKS_PRINT; if (code == 124) /* keypad equal key */ return DIKS_EQUALS_SIGN; if (code == 125) /* left windows key */ return DIKS_META; if (code == 126) /* right windows key */ return DIKS_META; if (code == 127) /* context menu key */ return DIKS_SUPER; return DIKS_NULL; }
static DFBInputDeviceKeySymbol xsymbol_to_symbol( KeySym xKeySymbol ) { if (xKeySymbol >= 0x20 && xKeySymbol <= 0xff) return xKeySymbol; if (xKeySymbol >= XK_F1 && xKeySymbol <= XK_F35) return DFB_FUNCTION_KEY( xKeySymbol - XK_F1 + 1 ); switch (xKeySymbol) { case XK_Shift_L : return DIKS_SHIFT; case XK_Shift_R : return DIKS_SHIFT; case XK_Control_L : return DIKS_CONTROL; case XK_Control_R : return DIKS_CONTROL; case XK_Alt_L : return DIKS_ALT; case XK_Alt_R : return DIKS_ALT; case XK_Meta_L : return DIKS_META; case XK_Meta_R : return DIKS_META; case XK_Super_L : return DIKS_SUPER; case XK_Super_R : return DIKS_SUPER; case XK_Hyper_L : return DIKS_HYPER; case XK_Hyper_R : return DIKS_HYPER; case XK_Mode_switch : return DIKS_ALTGR; case XK_Caps_Lock : return DIKS_CAPS_LOCK; case XK_Num_Lock : return DIKS_NUM_LOCK; case XK_Scroll_Lock : return DIKS_SCROLL_LOCK; case XK_Escape : return DIKS_ESCAPE; case XK_Left : return DIKS_CURSOR_LEFT; case XK_Right : return DIKS_CURSOR_RIGHT; case XK_Up : return DIKS_CURSOR_UP; case XK_Down : return DIKS_CURSOR_DOWN; case XK_Tab : return DIKS_TAB; case XK_ISO_Left_Tab : return DIKS_TAB; case XK_Return : return DIKS_ENTER; case XK_space : return DIKS_SPACE; case XK_BackSpace : return DIKS_BACKSPACE; case XK_Insert : return DIKS_INSERT; case XK_Delete : return DIKS_DELETE; case XK_Home : return DIKS_HOME; case XK_End : return DIKS_END; case XK_Page_Up : return DIKS_PAGE_UP; case XK_Page_Down : return DIKS_PAGE_DOWN; case XK_Print : return DIKS_PRINT; case XK_Pause : return DIKS_PAUSE; case XK_KP_Divide : return DIKS_SLASH; case XK_KP_Multiply : return DIKS_ASTERISK; case XK_KP_Subtract : return DIKS_MINUS_SIGN; case XK_KP_Add : return DIKS_PLUS_SIGN; case XK_KP_Enter : return DIKS_ENTER; case XK_KP_Space : return DIKS_SPACE; case XK_KP_Tab : return DIKS_TAB; case XK_KP_F1 : return DIKS_F1; case XK_KP_F2 : return DIKS_F2; case XK_KP_F3 : return DIKS_F3; case XK_KP_F4 : return DIKS_F4; case XK_KP_Equal : return DIKS_EQUALS_SIGN; case XK_KP_Separator : return DIKS_COLON; /* FIXME: what is a separator */ case XK_KP_Delete : return DIKS_DELETE; case XK_KP_Insert : return DIKS_INSERT; case XK_KP_End : return DIKS_END; case XK_KP_Down : return DIKS_CURSOR_DOWN; case XK_KP_Page_Down : return DIKS_PAGE_DOWN; case XK_KP_Left : return DIKS_CURSOR_LEFT; case XK_KP_Begin : return DIKS_BEGIN; case XK_KP_Right : return DIKS_CURSOR_RIGHT; case XK_KP_Home : return DIKS_HOME; case XK_KP_Up : return DIKS_CURSOR_UP; case XK_KP_Page_Up : return DIKS_PAGE_UP; case XK_KP_Decimal : return DIKS_PERIOD; case XK_KP_0 : return DIKS_0; case XK_KP_1 : return DIKS_1; case XK_KP_2 : return DIKS_2; case XK_KP_3 : return DIKS_3; case XK_KP_4 : return DIKS_4; case XK_KP_5 : return DIKS_5; case XK_KP_6 : return DIKS_6; case XK_KP_7 : return DIKS_7; case XK_KP_8 : return DIKS_8; case XK_KP_9 : return DIKS_9; case 0 : break; default: D_DEBUG("X11: Unknown key symbol 0x%lx\n", xKeySymbol); } return DIKS_NULL; }
static KeySym DirectFBTranslateSymbol (DFBInputDeviceKeymapEntry *entry, int index) { DFBInputDeviceKeySymbol symbol = entry->symbols[diksi[index]]; DFBInputDeviceKeyIdentifier id = entry->identifier; if (id >= DIKI_KP_DIV && id <= DIKI_KP_9) { if (symbol >= DIKS_0 && symbol <= DIKS_9) return XK_KP_0 + symbol - DIKS_0; switch (symbol) { case DIKS_HOME: return XK_KP_Home; case DIKS_CURSOR_LEFT: return XK_KP_Left; case DIKS_CURSOR_UP: return XK_KP_Up; case DIKS_CURSOR_RIGHT: return XK_KP_Right; case DIKS_CURSOR_DOWN: return XK_KP_Down; case DIKS_PAGE_UP: return XK_KP_Page_Up; case DIKS_PAGE_DOWN: return XK_KP_Page_Down; case DIKS_END: return XK_KP_End; case DIKS_BEGIN: return XK_KP_Begin; case DIKS_INSERT: return XK_KP_Insert; case DIKS_DELETE: return XK_KP_Delete; default: ; } switch (id) { case DIKI_KP_DIV: return XK_KP_Divide; case DIKI_KP_MULT: return XK_KP_Multiply; case DIKI_KP_MINUS: return XK_KP_Subtract; case DIKI_KP_PLUS: return XK_KP_Add; case DIKI_KP_ENTER: return XK_KP_Enter; case DIKI_KP_SPACE: return XK_KP_Space; case DIKI_KP_TAB: return XK_KP_Tab; case DIKI_KP_F1: return XK_KP_F1; case DIKI_KP_F2: return XK_KP_F2; case DIKI_KP_F3: return XK_KP_F3; case DIKI_KP_F4: return XK_KP_F4; case DIKI_KP_EQUAL: return XK_KP_Equal; case DIKI_KP_DECIMAL: return XK_KP_Decimal; case DIKI_KP_SEPARATOR: return XK_KP_Separator; default: ; } } if (symbol == DIKS_TAB && (index & 1)) return XK_ISO_Left_Tab; if (symbol > 0 && symbol < 256) return latin1_to_x[symbol]; if (DFB_KEY_TYPE (symbol) == DIKT_FUNCTION && symbol < DFB_FUNCTION_KEY(36)) return XK_F1 + symbol - DIKS_F1; switch (id) { case DIKI_SHIFT_L: return XK_Shift_L; case DIKI_SHIFT_R: return XK_Shift_R; case DIKI_CONTROL_L: return XK_Control_L; case DIKI_CONTROL_R: return XK_Control_R; default: ; } switch (symbol) { case DIKS_CURSOR_LEFT: return XK_Left; case DIKS_CURSOR_RIGHT: return XK_Right; case DIKS_CURSOR_UP: return XK_Up; case DIKS_CURSOR_DOWN: return XK_Down; case DIKS_INSERT: return XK_Insert; case DIKS_HOME: return XK_Home; case DIKS_END: return XK_End; case DIKS_PAGE_UP: return XK_Page_Up; case DIKS_PAGE_DOWN: return XK_Page_Down; case DIKS_PRINT: return XK_Print; case DIKS_PAUSE: return XK_Pause; case DIKS_OK: return XK_Return; case DIKS_SELECT: return XK_Select; case DIKS_CLEAR: return XK_Clear; case DIKS_MENU: return XK_Menu; case DIKS_HELP: return XK_Help; case DIKS_ALT: return XK_Alt_L; case DIKS_ALTGR: return XK_Mode_switch; case DIKS_META: return XK_Meta_L; case DIKS_SUPER: return XK_Super_L; case DIKS_HYPER: return XK_Hyper_L; case DIKS_CAPS_LOCK: return XK_Caps_Lock; case DIKS_NUM_LOCK: return XK_Num_Lock; case DIKS_SCROLL_LOCK: return XK_Scroll_Lock; case DIKS_DEAD_GRAVE: return XK_dead_grave; case DIKS_DEAD_ACUTE: return XK_dead_acute; case DIKS_DEAD_CIRCUMFLEX: return XK_dead_circumflex; case DIKS_DEAD_TILDE: return XK_dead_tilde; case DIKS_DEAD_DIAERESIS: return XK_dead_diaeresis; case DIKS_DEAD_CEDILLA: return XK_dead_cedilla; default: ; } return 0; }