blob: f13dfe6c419dc88f2b7315691771201abf068da4 [file] [log] [blame]
// 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;
}
}