| // Licensed to the Apache Software Foundation (ASF) under one |
| // or more contributor license agreements. See the NOTICE file |
| // distributed with this work for additional information |
| // regarding copyright ownership. The ASF licenses this file |
| // to you under the Apache License, Version 2.0 (the |
| // "License"); you may not use this file except in compliance |
| // with the License. You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, |
| // software distributed under the License is distributed on an |
| // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| // KIND, either express or implied. See the License for the |
| // specific language governing permissions and limitations |
| // under the License. |
| package com.cloud.consoleproxy.rdp; |
| |
| import java.awt.event.KeyEvent; |
| |
| public class KeysymToKeycode { |
| |
| // some of this keymap is taken from http://openwonderland.googlecode.com/svn/trunk/modules/foundation/xremwin/src/classes/org/jdesktop/wonderland/modules/xremwin/client/KeycodeToKeysym.java |
| private final static int[][] map = { |
| /* XK_BackSpace */{0xFF08, KeyEvent.VK_BACK_SPACE}, |
| /* XK_Tab */{0xFF09, KeyEvent.VK_TAB}, |
| /* XK_Clear */{0xFF0B, KeyEvent.VK_CLEAR}, |
| /* XK_Return */{0xFF0D, KeyEvent.VK_ENTER}, |
| /* XK_Pause */{0xFF13, KeyEvent.VK_PAUSE}, |
| /* XK_Scroll_Lock */{0xFF14, KeyEvent.VK_SCROLL_LOCK}, |
| /* XK_Escape */{0xFF1B, KeyEvent.VK_ESCAPE}, |
| /* XK_Delete */{0xFFFF, KeyEvent.VK_DELETE}, |
| /* XK_Home */{0xFF50, KeyEvent.VK_HOME}, |
| /* XK_Left */{0xFF51, KeyEvent.VK_LEFT}, |
| /* XK_Up */{0xFF52, KeyEvent.VK_UP}, |
| /* XK_Right */{0xFF53, KeyEvent.VK_RIGHT}, |
| /* XK_Down */{0xFF54, KeyEvent.VK_DOWN}, |
| /* XK_Page_Up */{0xFF55, KeyEvent.VK_PAGE_UP}, |
| /* XK_Page_Down */{0xFF56, KeyEvent.VK_PAGE_DOWN}, |
| /* XK_End */{0xFF57, KeyEvent.VK_END}, |
| /* XK_Print */{0xFF61, KeyEvent.VK_PRINTSCREEN}, |
| /* XK_Insert */{0xFF63, KeyEvent.VK_INSERT}, |
| /* XK_Undo */{0xFF65, KeyEvent.VK_UNDO}, |
| /* XK_Find */{0xFF68, KeyEvent.VK_FIND}, |
| /* XK_Cancel */{0xFF69, KeyEvent.VK_CANCEL}, |
| /* XK_Help */{0xFF6A, KeyEvent.VK_HELP}, |
| /* XK_Mode_switch */{0xFF7E, KeyEvent.VK_MODECHANGE}, |
| /* XK_Num_Lock */{0xFF7F, KeyEvent.VK_NUM_LOCK}, |
| /* XK_F1 */{0xFFBE, KeyEvent.VK_F1}, |
| /* XK_F2 */{0xFFBF, KeyEvent.VK_F2}, |
| /* XK_F3 */{0xFFC0, KeyEvent.VK_F3}, |
| /* XK_F4 */{0xFFC1, KeyEvent.VK_F4}, |
| /* XK_F5 */{0xFFC2, KeyEvent.VK_F5}, |
| /* XK_F6 */{0xFFC3, KeyEvent.VK_F6}, |
| /* XK_F7 */{0xFFC4, KeyEvent.VK_F7}, |
| /* XK_F8 */{0xFFC5, KeyEvent.VK_F8}, |
| /* XK_F9 */{0xFFC6, KeyEvent.VK_F9}, |
| /* XK_F10 */{0xFFC7, KeyEvent.VK_F10}, |
| /* XK_F11 */{0xFFC8, KeyEvent.VK_F11}, |
| /* XK_F12 */{0xFFC9, KeyEvent.VK_F12}, |
| /* XK_F13 */{0xFFCA, KeyEvent.VK_F13}, |
| /* XK_F14 */{0xFFCB, KeyEvent.VK_F14}, |
| /* XK_F15 */{0xFFCC, KeyEvent.VK_F15}, |
| /* XK_F16 */{0xFFCD, KeyEvent.VK_F16}, |
| /* XK_F17 */{0xFFCE, KeyEvent.VK_F17}, |
| /* XK_F18 */{0xFFCF, KeyEvent.VK_F18}, |
| /* XK_F19 */{0xFFD0, KeyEvent.VK_F19}, |
| /* XK_F20 */{0xFFD1, KeyEvent.VK_F20}, |
| /* XK_F21 */{0xFFD2, KeyEvent.VK_F21}, |
| /* XK_F22 */{0xFFD3, KeyEvent.VK_F22}, |
| /* XK_F23 */{0xFFD4, KeyEvent.VK_F23}, |
| /* XK_F24 */{0xFFD5, KeyEvent.VK_F24}, |
| /* XK_Shift_L */{0xFFE1, KeyEvent.VK_SHIFT}, |
| /* XK_Control_L */{0xFFE3, KeyEvent.VK_CONTROL}, |
| /* XK_Caps_Lock */{0xFFE5, KeyEvent.VK_CAPS_LOCK}, |
| /* XK_Meta_L */{0xFFE7, KeyEvent.VK_META}, |
| /* XK_Alt_L */{0xFFE9, KeyEvent.VK_ALT}, |
| /* XK_a */{0x0061, KeyEvent.VK_A}, |
| /* XK_b */{0x0062, KeyEvent.VK_B}, |
| /* XK_c */{0x0063, KeyEvent.VK_C}, |
| /* XK_d */{0x0064, KeyEvent.VK_D}, |
| /* XK_e */{0x0065, KeyEvent.VK_E}, |
| /* XK_f */{0x0066, KeyEvent.VK_F}, |
| /* XK_g */{0x0067, KeyEvent.VK_G}, |
| /* XK_h */{0x0068, KeyEvent.VK_H}, |
| /* XK_i */{0x0069, KeyEvent.VK_I}, |
| /* XK_j */{0x006a, KeyEvent.VK_J}, |
| /* XK_k */{0x006b, KeyEvent.VK_K}, |
| /* XK_l */{0x006c, KeyEvent.VK_L}, |
| /* XK_m */{0x006d, KeyEvent.VK_M}, |
| /* XK_n */{0x006e, KeyEvent.VK_N}, |
| /* XK_o */{0x006f, KeyEvent.VK_O}, |
| /* XK_p */{0x0070, KeyEvent.VK_P}, |
| /* XK_q */{0x0071, KeyEvent.VK_Q}, |
| /* XK_r */{0x0072, KeyEvent.VK_R}, |
| /* XK_s */{0x0073, KeyEvent.VK_S}, |
| /* XK_t */{0x0074, KeyEvent.VK_T}, |
| /* XK_u */{0x0075, KeyEvent.VK_U}, |
| /* XK_v */{0x0076, KeyEvent.VK_V}, |
| /* XK_w */{0x0077, KeyEvent.VK_W}, |
| /* XK_x */{0x0078, KeyEvent.VK_X}, |
| /* XK_y */{0x0079, KeyEvent.VK_Y}, |
| /* XK_z */{0x007a, KeyEvent.VK_Z}, |
| {0x0060, KeyEvent.VK_BACK_QUOTE}, |
| {0x007e, KeyEvent.VK_BACK_QUOTE}, |
| {0x0021, KeyEvent.VK_1}, |
| {0x0040, KeyEvent.VK_2}, |
| {0x0023, KeyEvent.VK_3}, |
| {0x0024, KeyEvent.VK_4}, |
| {0x0025, KeyEvent.VK_5}, |
| {0x005e, KeyEvent.VK_6}, |
| {0x0026, KeyEvent.VK_7}, |
| {0x002A, KeyEvent.VK_8}, |
| {0x0028, KeyEvent.VK_9}, |
| {0x0029, KeyEvent.VK_0}, |
| {0x005f, KeyEvent.VK_MINUS}, |
| {0x002b, KeyEvent.VK_EQUALS}, |
| {0x007b, KeyEvent.VK_OPEN_BRACKET}, |
| {0x007d, KeyEvent.VK_CLOSE_BRACKET}, |
| {0x007c, KeyEvent.VK_BACK_SLASH}, |
| {0x003a, KeyEvent.VK_SEMICOLON}, |
| {0x0027, KeyEvent.VK_QUOTE}, |
| {0x0022, KeyEvent.VK_QUOTE}, |
| {0x003c, KeyEvent.VK_COMMA}, |
| {0x003e, KeyEvent.VK_PERIOD}, |
| {0x003f, KeyEvent.VK_SLASH}, |
| }; |
| |
| public static int getKeycode(int keysym) { |
| for (int i = 0; i < (map.length); i++) { |
| if (map[i][0] == keysym) { |
| return map[i][1]; |
| } |
| } |
| return keysym; |
| } |
| |
| } |