native/JavaKeyCode2X11.cpp (412 lines of code) (raw):
#include <X11/keysym.h>
#include <jni.h>
namespace {
bool GetJNIFieldStaticInt(JNIEnv* env,
jclass cls,
const char* field_name,
int* value) {
jfieldID field = env->GetStaticFieldID(cls, field_name, "I");
if (field) {
*value = env->GetStaticIntField(cls, field);
return true;
}
env->ExceptionClear();
return false;
}
} // namespace
#define JNI_STATIC(name) _static_##name
#define JNI_STATIC_DEFINE_INT_RV(env, cls, name, rv) \
static int JNI_STATIC(name) = -1; \
if (JNI_STATIC(name) == -1 && !GetJNIFieldStaticInt( \
env, cls, #name, &JNI_STATIC(name))) { \
return rv; \
}
int JavaKeyCode2X11(JNIEnv* env,
jclass cls /*KeyEvent*/,
int keycode) {
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_ENTER, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_BACK_SPACE, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_TAB, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_CANCEL, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_CLEAR, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_SHIFT, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_CONTROL, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_ALT, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_PAUSE, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_CAPS_LOCK, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_ESCAPE, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_SPACE, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_PAGE_UP, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_PAGE_DOWN, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_END, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_HOME, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_LEFT, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_UP, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_RIGHT, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_DOWN, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_COMMA, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_MINUS, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_PERIOD, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_SLASH, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_0, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_1, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_2, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_3, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_4, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_5, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_6, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_7, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_8, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_9, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_SEMICOLON, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_EQUALS, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_A, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_B, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_C, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_D, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_E, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_F, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_G, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_H, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_I, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_J, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_K, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_L, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_M, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_N, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_O, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_P, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_Q, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_R, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_S, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_T, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_U, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_V, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_W, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_X, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_Y, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_Z, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_OPEN_BRACKET, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_BACK_SLASH, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_CLOSE_BRACKET, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_NUMPAD0, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_NUMPAD1, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_NUMPAD2, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_NUMPAD3, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_NUMPAD4, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_NUMPAD5, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_NUMPAD6, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_NUMPAD7, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_NUMPAD8, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_NUMPAD9, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_MULTIPLY, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_ADD, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_SEPARATER, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_SEPARATOR, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_SUBTRACT, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_DECIMAL, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_DIVIDE, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_DELETE, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_NUM_LOCK, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_SCROLL_LOCK, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_F1, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_F2, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_F3, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_F4, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_F5, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_F6, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_F7, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_F8, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_F9, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_F10, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_F11, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_F12, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_F13, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_F14, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_F15, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_F16, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_F17, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_F18, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_F19, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_F20, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_F21, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_F22, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_F23, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_F24, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_PRINTSCREEN, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_INSERT, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_HELP, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_META, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_BACK_QUOTE, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_QUOTE, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_KP_UP, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_KP_DOWN, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_KP_LEFT, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_KP_RIGHT, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_DEAD_GRAVE, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_DEAD_ACUTE, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_DEAD_CIRCUMFLEX, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_DEAD_TILDE, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_DEAD_MACRON, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_DEAD_BREVE, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_DEAD_ABOVEDOT, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_DEAD_DIAERESIS, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_DEAD_ABOVERING, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_DEAD_DOUBLEACUTE, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_DEAD_CARON, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_DEAD_CEDILLA, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_DEAD_OGONEK, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_DEAD_IOTA, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_DEAD_VOICED_SOUND, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_DEAD_SEMIVOICED_SOUND, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_AMPERSAND, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_ASTERISK, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_QUOTEDBL, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_LESS, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_GREATER, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_BRACELEFT, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_BRACERIGHT, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_AT, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_COLON, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_CIRCUMFLEX, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_DOLLAR, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_EURO_SIGN, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_EXCLAMATION_MARK, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_INVERTED_EXCLAMATION_MARK,
XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_LEFT_PARENTHESIS, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_NUMBER_SIGN, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_PLUS, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_RIGHT_PARENTHESIS, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_UNDERSCORE, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_WINDOWS, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_CONTEXT_MENU, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_FINAL, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_CONVERT, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_NONCONVERT, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_ACCEPT, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_MODECHANGE, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_KANA, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_KANJI, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_ALPHANUMERIC, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_KATAKANA, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_HIRAGANA, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_FULL_WIDTH, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_HALF_WIDTH, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_ROMAN_CHARACTERS, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_ALL_CANDIDATES, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_PREVIOUS_CANDIDATE, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_CODE_INPUT, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_JAPANESE_KATAKANA, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_JAPANESE_HIRAGANA, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_JAPANESE_ROMAN, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_KANA_LOCK, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_INPUT_METHOD_ON_OFF, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_CUT, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_COPY, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_PASTE, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_UNDO, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_AGAIN, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_FIND, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_PROPS, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_STOP, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_COMPOSE, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_ALT_GRAPH, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_BEGIN, XK_VoidSymbol);
JNI_STATIC_DEFINE_INT_RV(env, cls, VK_UNDEFINED, XK_VoidSymbol);
if (keycode >= JNI_STATIC(VK_A) && keycode <= JNI_STATIC(VK_Z))
return XK_a + (keycode - JNI_STATIC(VK_A));
if (keycode >= JNI_STATIC(VK_0) && keycode <= JNI_STATIC(VK_9))
return XK_0 + (keycode - JNI_STATIC(VK_0));
if (keycode >= JNI_STATIC(VK_NUMPAD0) && keycode <= JNI_STATIC(VK_NUMPAD9))
return XK_KP_0 + (keycode - JNI_STATIC(VK_NUMPAD0));
if (keycode >= JNI_STATIC(VK_F1) && keycode <= JNI_STATIC(VK_F12))
return XK_F1 + (keycode - JNI_STATIC(VK_F1));
if (keycode == JNI_STATIC(VK_ENTER))
return XK_Return;
else if (keycode == JNI_STATIC(VK_BACK_SPACE))
return XK_BackSpace;
else if (keycode == JNI_STATIC(VK_TAB))
return XK_Tab;
else if (keycode == JNI_STATIC(VK_CANCEL))
return XK_Cancel;
else if (keycode == JNI_STATIC(VK_CLEAR))
return XK_Clear;
else if (keycode == JNI_STATIC(VK_SHIFT))
return XK_Shift_L;
else if (keycode == JNI_STATIC(VK_CONTROL))
return XK_Control_L;
else if (keycode == JNI_STATIC(VK_ALT))
return XK_Alt_L;
else if (keycode == JNI_STATIC(VK_PAUSE))
return XK_Pause;
else if (keycode == JNI_STATIC(VK_CAPS_LOCK))
return XK_Caps_Lock;
else if (keycode == JNI_STATIC(VK_ESCAPE))
return XK_Escape;
else if (keycode == JNI_STATIC(VK_SPACE))
return XK_space;
else if (keycode == JNI_STATIC(VK_PAGE_UP))
return XK_Page_Up;
else if (keycode == JNI_STATIC(VK_PAGE_DOWN))
return XK_Page_Down;
else if (keycode == JNI_STATIC(VK_END))
return XK_End;
else if (keycode == JNI_STATIC(VK_HOME))
return XK_Home;
else if (keycode == JNI_STATIC(VK_LEFT))
return XK_Left;
else if (keycode == JNI_STATIC(VK_KP_LEFT))
return XK_KP_Left;
else if (keycode == JNI_STATIC(VK_UP))
return XK_Up;
else if (keycode == JNI_STATIC(VK_KP_UP))
return XK_KP_Up;
else if (keycode == JNI_STATIC(VK_RIGHT))
return XK_Right;
else if (keycode == JNI_STATIC(VK_KP_RIGHT))
return XK_KP_Right;
else if (keycode == JNI_STATIC(VK_DOWN))
return XK_Down;
else if (keycode == JNI_STATIC(VK_KP_DOWN))
return XK_KP_Down;
else if (keycode == JNI_STATIC(VK_COMMA))
return XK_comma;
else if (keycode == JNI_STATIC(VK_MINUS))
return XK_minus;
else if (keycode == JNI_STATIC(VK_PERIOD))
return XK_period;
else if (keycode == JNI_STATIC(VK_SLASH))
return XK_slash;
else if (keycode == JNI_STATIC(VK_SEMICOLON))
return XK_semicolon;
else if (keycode == JNI_STATIC(VK_EQUALS))
return XK_equal;
else if (keycode == JNI_STATIC(VK_OPEN_BRACKET))
return XK_bracketleft;
else if (keycode == JNI_STATIC(VK_BACK_SLASH))
return XK_backslash;
else if (keycode == JNI_STATIC(VK_CLOSE_BRACKET))
return XK_bracketright;
else if (keycode == JNI_STATIC(VK_MULTIPLY))
return XK_multiply;
else if (keycode == JNI_STATIC(VK_ADD))
return XK_KP_Add;
else if (keycode == JNI_STATIC(VK_SEPARATOR))
return XK_KP_Separator;
else if (keycode == JNI_STATIC(VK_SUBTRACT))
return XK_KP_Subtract;
else if (keycode == JNI_STATIC(VK_DECIMAL))
return XK_KP_Decimal;
else if (keycode == JNI_STATIC(VK_DIVIDE))
return XK_KP_Divide;
else if (keycode == JNI_STATIC(VK_DELETE))
return XK_Delete;
else if (keycode == JNI_STATIC(VK_NUM_LOCK))
return XK_Num_Lock;
else if (keycode == JNI_STATIC(VK_SCROLL_LOCK))
return XK_Scroll_Lock;
else if (keycode == JNI_STATIC(VK_PRINTSCREEN))
return XK_Print;
else if (keycode == JNI_STATIC(VK_INSERT))
return XK_Insert;
else if (keycode == JNI_STATIC(VK_HELP))
return XK_Help;
else if (keycode == JNI_STATIC(VK_META))
return XK_Meta_R;
else if (keycode == JNI_STATIC(VK_BACK_QUOTE))
return XK_quoteright;
else if (keycode == JNI_STATIC(VK_QUOTE))
return XK_quoteleft;
else if (keycode == JNI_STATIC(VK_DEAD_GRAVE))
return XK_dead_grave;
else if (keycode == JNI_STATIC(VK_DEAD_ACUTE))
return XK_dead_acute;
else if (keycode == JNI_STATIC(VK_DEAD_CIRCUMFLEX))
return XK_dead_circumflex;
else if (keycode == JNI_STATIC(VK_DEAD_TILDE))
return XK_dead_tilde;
else if (keycode == JNI_STATIC(VK_DEAD_MACRON))
return XK_dead_macron;
else if (keycode == JNI_STATIC(VK_DEAD_BREVE))
return XK_dead_breve;
else if (keycode == JNI_STATIC(VK_DEAD_ABOVEDOT))
return XK_dead_abovedot;
else if (keycode == JNI_STATIC(VK_DEAD_DIAERESIS))
return XK_dead_diaeresis;
else if (keycode == JNI_STATIC(VK_DEAD_ABOVERING))
return XK_dead_abovering;
else if (keycode == JNI_STATIC(VK_DEAD_DOUBLEACUTE))
return XK_dead_doubleacute;
else if (keycode == JNI_STATIC(VK_DEAD_CARON))
return XK_dead_caron;
else if (keycode == JNI_STATIC(VK_DEAD_CEDILLA))
return XK_dead_cedilla;
else if (keycode == JNI_STATIC(VK_DEAD_OGONEK))
return XK_dead_ogonek;
else if (keycode == JNI_STATIC(VK_DEAD_IOTA))
return XK_dead_iota;
else if (keycode == JNI_STATIC(VK_DEAD_VOICED_SOUND))
return XK_dead_voiced_sound;
else if (keycode == JNI_STATIC(VK_DEAD_SEMIVOICED_SOUND))
return XK_dead_semivoiced_sound;
else if (keycode == JNI_STATIC(VK_AMPERSAND))
return XK_ampersand;
else if (keycode == JNI_STATIC(VK_ASTERISK))
return XK_asterisk;
else if (keycode == JNI_STATIC(VK_QUOTEDBL))
return XK_quotedbl;
else if (keycode == JNI_STATIC(VK_LESS))
return XK_less;
else if (keycode == JNI_STATIC(VK_GREATER))
return XK_greater;
else if (keycode == JNI_STATIC(VK_BRACELEFT))
return XK_braceleft;
else if (keycode == JNI_STATIC(VK_BRACERIGHT))
return XK_braceright;
else if (keycode == JNI_STATIC(VK_AT))
return XK_at;
else if (keycode == JNI_STATIC(VK_COLON))
return XK_colon;
else if (keycode == JNI_STATIC(VK_CIRCUMFLEX))
return XK_dead_circumflex;
else if (keycode == JNI_STATIC(VK_DOLLAR))
return XK_dollar;
else if (keycode == JNI_STATIC(VK_EURO_SIGN))
return XK_EuroSign;
else if (keycode == JNI_STATIC(VK_EXCLAMATION_MARK))
return XK_exclamdown;
else if (keycode == JNI_STATIC(VK_INVERTED_EXCLAMATION_MARK))
return XK_exclam;
else if (keycode == JNI_STATIC(VK_LEFT_PARENTHESIS))
return XK_parenleft;
else if (keycode == JNI_STATIC(VK_NUMBER_SIGN))
return XK_numbersign;
else if (keycode == JNI_STATIC(VK_PLUS))
return XK_plus;
else if (keycode == JNI_STATIC(VK_RIGHT_PARENTHESIS))
return XK_parenright;
else if (keycode == JNI_STATIC(VK_UNDERSCORE))
return XK_underscore;
// else if (keycode == JNI_STATIC(VK_CONTEXT_MENU)) return XK_Menu;
// case VK_FINAL:;
// case VK_CONVERT:;
// case VK_NONCONVERT:;
// case VK_ACCEPT:;
// else if (keycode == JNI_STATIC(VK_MODECHANGE)) return XK_Mode_switch;
// case VK_KANA:;
else if (keycode == JNI_STATIC(VK_KANJI))
return XK_Kanji;
// case JNI_STATIC(VK_ALPHANUMERIC):return X11KeyCodes.;
else if (keycode == JNI_STATIC(VK_KATAKANA))
return XK_Katakana;
else if (keycode == JNI_STATIC(VK_HIRAGANA))
return XK_Hiragana;
// case JNI_STATIC(VK_FULL_WIDTH):return X11KeyCodes.;
// case JNI_STATIC(VK_HALF_WIDTH):return X11KeyCodes.;
// case JNI_STATIC(VK_ROMAN_CHARACTERS):return X11KeyCodes.;
else if (keycode == JNI_STATIC(VK_ALL_CANDIDATES))
return XK_MultipleCandidate;
else if (keycode == JNI_STATIC(VK_PREVIOUS_CANDIDATE))
return XK_PreviousCandidate;
else if (keycode == JNI_STATIC(VK_CODE_INPUT))
return XK_Codeinput;
// case JNI_STATIC(VK_JAPANESE_KATAKANA):return X11KeyCodes.;
else if (keycode == JNI_STATIC(VK_JAPANESE_HIRAGANA))
return XK_Hiragana;
// case JNI_STATIC(VK_JAPANESE_ROMAN):return X11KeyCodes.;
else if (keycode == JNI_STATIC(VK_KANA_LOCK))
return XK_Kana_Lock;
// case JNI_STATIC(VK_INPUT_METHOD_ON_OFF):return X11KeyCodes.;
// case JNI_STATIC(VK_CUT):return X11KeyCodes.;
// case JNI_STATIC(VK_COPY):return X11KeyCodes.;
// case JNI_STATIC(VK_PASTE):return X11KeyCodes.;
// case JNI_STATIC(VK_UNDO):return X11KeyCodes.;
// case JNI_STATIC(VK_AGAIN):return X11KeyCodes.;
else if (keycode == JNI_STATIC(VK_FIND))
return XK_Find;
// case JNI_STATIC(VK_PROPS):return X11KeyCodes.;
// case JNI_STATIC(VK_STOP):return X11KeyCodes.;
// case JNI_STATIC(VK_COMPOSE):return X11KeyCodes.;
// case JNI_STATIC(VK_ALT_GRAPH):return X11KeyCodes.;
else if (keycode == JNI_STATIC(VK_BEGIN))
return XK_Begin;
return 0 /*VK_UNDEFINED*/;
}