aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPierre Krieger <pierre.krieger1708@gmail.com>2014-07-28 14:15:02 +0200
committerPierre Krieger <pierre.krieger1708@gmail.com>2014-07-28 14:41:12 +0200
commitc1da2b1273cb1154625a942633bdc2d09b64d680 (patch)
tree1b7b16a3291d18c28715856cff3d9440e39214bd
parent433c5b956ee83e2a1c3be67e5333db90c9c3cb8a (diff)
downloadglutin-c1da2b1273cb1154625a942633bdc2d09b64d680.tar.gz
glutin-c1da2b1273cb1154625a942633bdc2d09b64d680.zip
Work on input support for X11
-rw-r--r--src/lib.rs2
-rw-r--r--src/x11/events.rs1002
-rw-r--r--src/x11/ffi.rs1037
-rw-r--r--src/x11/mod.rs29
4 files changed, 2068 insertions, 2 deletions
diff --git a/src/lib.rs b/src/lib.rs
index b18b5fe..8b1c30e 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -3,7 +3,7 @@
extern crate libc;
pub use events::{Event, Element, PositionChanged, SizeChanged, Closed, CursorPositionChanged, Focused};
-pub use events::{Iconified, NeedRefresh};
+pub use events::{Iconified, NeedRefresh, Pressed, Released};
pub use hints::{Hints, ClientAPI, Profile};
#[cfg(windows)]
diff --git a/src/x11/events.rs b/src/x11/events.rs
new file mode 100644
index 0000000..8b78136
--- /dev/null
+++ b/src/x11/events.rs
@@ -0,0 +1,1002 @@
+use {events, libc};
+use super::ffi;
+use Element;
+
+pub fn keycode_to_element(scancode: libc::c_uint) -> Option<Element> {
+ Some(match scancode {
+ //ffi::XK_BackSpace => events::Backspace,
+ //ffi::XK_Tab => events::Tab,
+ //ffi::XK_Linefeed => events::Linefeed,
+ //ffi::XK_Clear => events::Clear,
+ //ffi::XK_Return => events::Return,
+ //ffi::XK_Pause => events::Pause,
+ //ffi::XK_Scroll_Lock => events::Scroll_lock,
+ //ffi::XK_Sys_Req => events::Sys_req,
+ //ffi::XK_Escape => events::Escape,
+ //ffi::XK_Delete => events::Delete,
+ //ffi::XK_Multi_key => events::Multi_key,
+ //ffi::XK_Kanji => events::Kanji,
+ //ffi::XK_Muhenkan => events::Muhenkan,
+ //ffi::XK_Henkan_Mode => events::Henkan_mode,
+ //ffi::XK_Henkan => events::Henkan,
+ //ffi::XK_Romaji => events::Romaji,
+ //ffi::XK_Hiragana => events::Hiragana,
+ //ffi::XK_Katakana => events::Katakana,
+ //ffi::XK_Hiragana_Katakana => events::Hiragana_katakana,
+ //ffi::XK_Zenkaku => events::Zenkaku,
+ //ffi::XK_Hankaku => events::Hankaku,
+ //ffi::XK_Zenkaku_Hankaku => events::Zenkaku_hankaku,
+ //ffi::XK_Touroku => events::Touroku,
+ //ffi::XK_Massyo => events::Massyo,
+ //ffi::XK_Kana_Lock => events::Kana_lock,
+ //ffi::XK_Kana_Shift => events::Kana_shift,
+ //ffi::XK_Eisu_Shift => events::Eisu_shift,
+ //ffi::XK_Eisu_toggle => events::Eisu_toggle,
+ //ffi::XK_Home => events::Home,
+ //ffi::XK_Left => events::Left,
+ //ffi::XK_Up => events::Up,
+ //ffi::XK_Right => events::Right,
+ //ffi::XK_Down => events::Down,
+ //ffi::XK_Prior => events::Prior,
+ //ffi::XK_Page_Up => events::Page_up,
+ //ffi::XK_Next => events::Next,
+ //ffi::XK_Page_Down => events::Page_down,
+ //ffi::XK_End => events::End,
+ //ffi::XK_Begin => events::Begin,
+ //ffi::XK_Win_L => events::Win_l,
+ //ffi::XK_Win_R => events::Win_r,
+ //ffi::XK_App => events::App,
+ //ffi::XK_Select => events::Select,
+ //ffi::XK_Print => events::Print,
+ //ffi::XK_Execute => events::Execute,
+ //ffi::XK_Insert => events::Insert,
+ //ffi::XK_Undo => events::Undo,
+ //ffi::XK_Redo => events::Redo,
+ //ffi::XK_Menu => events::Menu,
+ //ffi::XK_Find => events::Find,
+ //ffi::XK_Cancel => events::Cancel,
+ //ffi::XK_Help => events::Help,
+ //ffi::XK_Break => events::Break,
+ //ffi::XK_Mode_switch => events::Mode_switch,
+ //ffi::XK_script_switch => events::Script_switch,
+ //ffi::XK_Num_Lock => events::Num_lock,
+ //ffi::XK_KP_Space => events::Kp_space,
+ //ffi::XK_KP_Tab => events::Kp_tab,
+ //ffi::XK_KP_Enter => events::Kp_enter,
+ //ffi::XK_KP_F1 => events::Kp_f1,
+ //ffi::XK_KP_F2 => events::Kp_f2,
+ //ffi::XK_KP_F3 => events::Kp_f3,
+ //ffi::XK_KP_F4 => events::Kp_f4,
+ //ffi::XK_KP_Home => events::Kp_home,
+ //ffi::XK_KP_Left => events::Kp_left,
+ //ffi::XK_KP_Up => events::Kp_up,
+ //ffi::XK_KP_Right => events::Kp_right,
+ //ffi::XK_KP_Down => events::Kp_down,
+ //ffi::XK_KP_Prior => events::Kp_prior,
+ //ffi::XK_KP_Page_Up => events::Kp_page_up,
+ //ffi::XK_KP_Next => events::Kp_next,
+ //ffi::XK_KP_Page_Down => events::Kp_page_down,
+ //ffi::XK_KP_End => events::Kp_end,
+ //ffi::XK_KP_Begin => events::Kp_begin,
+ //ffi::XK_KP_Insert => events::Kp_insert,
+ //ffi::XK_KP_Delete => events::Kp_delete,
+ //ffi::XK_KP_Equal => events::Kp_equal,
+ //ffi::XK_KP_Multiply => events::Kp_multiply,
+ //ffi::XK_KP_Add => events::Kp_add,
+ //ffi::XK_KP_Separator => events::Kp_separator,
+ //ffi::XK_KP_Subtract => events::Kp_subtract,
+ //ffi::XK_KP_Decimal => events::Kp_decimal,
+ //ffi::XK_KP_Divide => events::Kp_divide,
+ //ffi::XK_KP_0 => events::Kp_0,
+ //ffi::XK_KP_1 => events::Kp_1,
+ //ffi::XK_KP_2 => events::Kp_2,
+ //ffi::XK_KP_3 => events::Kp_3,
+ //ffi::XK_KP_4 => events::Kp_4,
+ //ffi::XK_KP_5 => events::Kp_5,
+ //ffi::XK_KP_6 => events::Kp_6,
+ //ffi::XK_KP_7 => events::Kp_7,
+ //ffi::XK_KP_8 => events::Kp_8,
+ //ffi::XK_KP_9 => events::Kp_9,
+ //ffi::XK_F1 => events::F1,
+ //ffi::XK_F2 => events::F2,
+ //ffi::XK_F3 => events::F3,
+ //ffi::XK_F4 => events::F4,
+ //ffi::XK_F5 => events::F5,
+ //ffi::XK_F6 => events::F6,
+ //ffi::XK_F7 => events::F7,
+ //ffi::XK_F8 => events::F8,
+ //ffi::XK_F9 => events::F9,
+ //ffi::XK_F10 => events::F10,
+ //ffi::XK_F11 => events::F11,
+ //ffi::XK_L1 => events::L1,
+ //ffi::XK_F12 => events::F12,
+ //ffi::XK_L2 => events::L2,
+ //ffi::XK_F13 => events::F13,
+ //ffi::XK_L3 => events::L3,
+ //ffi::XK_F14 => events::F14,
+ //ffi::XK_L4 => events::L4,
+ //ffi::XK_F15 => events::F15,
+ //ffi::XK_L5 => events::L5,
+ //ffi::XK_F16 => events::F16,
+ //ffi::XK_L6 => events::L6,
+ //ffi::XK_F17 => events::F17,
+ //ffi::XK_L7 => events::L7,
+ //ffi::XK_F18 => events::F18,
+ //ffi::XK_L8 => events::L8,
+ //ffi::XK_F19 => events::F19,
+ //ffi::XK_L9 => events::L9,
+ //ffi::XK_F20 => events::F20,
+ //ffi::XK_L10 => events::L10,
+ //ffi::XK_F21 => events::F21,
+ //ffi::XK_R1 => events::R1,
+ //ffi::XK_F22 => events::F22,
+ //ffi::XK_R2 => events::R2,
+ //ffi::XK_F23 => events::F23,
+ //ffi::XK_R3 => events::R3,
+ //ffi::XK_F24 => events::F24,
+ //ffi::XK_R4 => events::R4,
+ //ffi::XK_F25 => events::F25,
+ //ffi::XK_R5 => events::R5,
+ //ffi::XK_F26 => events::F26,
+ //ffi::XK_R6 => events::R6,
+ //ffi::XK_F27 => events::F27,
+ //ffi::XK_R7 => events::R7,
+ //ffi::XK_F28 => events::F28,
+ //ffi::XK_R8 => events::R8,
+ //ffi::XK_F29 => events::F29,
+ //ffi::XK_R9 => events::R9,
+ //ffi::XK_F30 => events::F30,
+ //ffi::XK_R10 => events::R10,
+ //ffi::XK_F31 => events::F31,
+ //ffi::XK_R11 => events::R11,
+ //ffi::XK_F32 => events::F32,
+ //ffi::XK_R12 => events::R12,
+ //ffi::XK_F33 => events::F33,
+ //ffi::XK_R13 => events::R13,
+ //ffi::XK_F34 => events::F34,
+ //ffi::XK_R14 => events::R14,
+ //ffi::XK_F35 => events::F35,
+ //ffi::XK_R15 => events::R15,
+ //ffi::XK_Shift_L => events::Shift_l,
+ //ffi::XK_Shift_R => events::Shift_r,
+ //ffi::XK_Control_L => events::Control_l,
+ //ffi::XK_Control_R => events::Control_r,
+ //ffi::XK_Caps_Lock => events::Caps_lock,
+ //ffi::XK_Shift_Lock => events::Shift_lock,
+ //ffi::XK_Meta_L => events::Meta_l,
+ //ffi::XK_Meta_R => events::Meta_r,
+ //ffi::XK_Alt_L => events::Alt_l,
+ //ffi::XK_Alt_R => events::Alt_r,
+ //ffi::XK_Super_L => events::Super_l,
+ //ffi::XK_Super_R => events::Super_r,
+ //ffi::XK_Hyper_L => events::Hyper_l,
+ //ffi::XK_Hyper_R => events::Hyper_r,
+ //ffi::XK_space => events::Space,
+ //ffi::XK_exclam => events::Exclam,
+ //ffi::XK_quotedbl => events::Quotedbl,
+ //ffi::XK_numbersign => events::Numbersign,
+ //ffi::XK_dollar => events::Dollar,
+ //ffi::XK_percent => events::Percent,
+ //ffi::XK_ampersand => events::Ampersand,
+ //ffi::XK_apostrophe => events::Apostrophe,
+ //ffi::XK_quoteright => events::Quoteright,
+ //ffi::XK_parenleft => events::Parenleft,
+ //ffi::XK_parenright => events::Parenright,
+ //ffi::XK_asterisk => events::Asterisk,
+ //ffi::XK_plus => events::Plus,
+ //ffi::XK_comma => events::Comma,
+ //ffi::XK_minus => events::Minus,
+ //ffi::XK_period => events::Period,
+ //ffi::XK_slash => events::Slash,
+ //ffi::XK_0 => events::0,
+ //ffi::XK_1 => events::1,
+ //ffi::XK_2 => events::2,
+ //ffi::XK_3 => events::3,
+ //ffi::XK_4 => events::4,
+ //ffi::XK_5 => events::5,
+ //ffi::XK_6 => events::6,
+ //ffi::XK_7 => events::7,
+ //ffi::XK_8 => events::8,
+ //ffi::XK_9 => events::9,
+ //ffi::XK_colon => events::Colon,
+ //ffi::XK_semicolon => events::Semicolon,
+ //ffi::XK_less => events::Less,
+ //ffi::XK_equal => events::Equal,
+ //ffi::XK_greater => events::Greater,
+ //ffi::XK_question => events::Question,
+ //ffi::XK_at => events::At,
+ ffi::XK_A => events::A,
+ ffi::XK_B => events::B,
+ ffi::XK_C => events::C,
+ ffi::XK_D => events::D,
+ ffi::XK_E => events::E,
+ ffi::XK_F => events::F,
+ ffi::XK_G => events::G,
+ ffi::XK_H => events::H,
+ ffi::XK_I => events::I,
+ ffi::XK_J => events::J,
+ ffi::XK_K => events::K,
+ ffi::XK_L => events::L,
+ ffi::XK_M => events::M,
+ ffi::XK_N => events::N,
+ ffi::XK_O => events::O,
+ ffi::XK_P => events::P,
+ ffi::XK_Q => events::Q,
+ ffi::XK_R => events::R,
+ ffi::XK_S => events::S,
+ ffi::XK_T => events::T,
+ ffi::XK_U => events::U,
+ ffi::XK_V => events::V,
+ ffi::XK_W => events::W,
+ ffi::XK_X => events::X,
+ ffi::XK_Y => events::Y,
+ ffi::XK_Z => events::Z,
+ //ffi::XK_bracketleft => events::Bracketleft,
+ //ffi::XK_backslash => events::Backslash,
+ //ffi::XK_bracketright => events::Bracketright,
+ //ffi::XK_asciicircum => events::Asciicircum,
+ //ffi::XK_underscore => events::Underscore,
+ //ffi::XK_grave => events::Grave,
+ //ffi::XK_quoteleft => events::Quoteleft,
+ ffi::XK_a => events::A,
+ ffi::XK_b => events::B,
+ ffi::XK_c => events::C,
+ ffi::XK_d => events::D,
+ ffi::XK_e => events::E,
+ ffi::XK_f => events::F,
+ ffi::XK_g => events::G,
+ ffi::XK_h => events::H,
+ ffi::XK_i => events::I,
+ ffi::XK_j => events::J,
+ ffi::XK_k => events::K,
+ ffi::XK_l => events::L,
+ ffi::XK_m => events::M,
+ ffi::XK_n => events::N,
+ ffi::XK_o => events::O,
+ ffi::XK_p => events::P,
+ ffi::XK_q => events::Q,
+ ffi::XK_r => events::R,
+ ffi::XK_s => events::S,
+ ffi::XK_t => events::T,
+ ffi::XK_u => events::U,
+ ffi::XK_v => events::V,
+ ffi::XK_w => events::W,
+ ffi::XK_x => events::X,
+ ffi::XK_y => events::Y,
+ ffi::XK_z => events::Z,
+ //ffi::XK_braceleft => events::Braceleft,
+ //ffi::XK_bar => events::Bar,
+ //ffi::XK_braceright => events::Braceright,
+ //ffi::XK_asciitilde => events::Asciitilde,
+ //ffi::XK_nobreakspace => events::Nobreakspace,
+ //ffi::XK_exclamdown => events::Exclamdown,
+ //ffi::XK_cent => events::Cent,
+ //ffi::XK_sterling => events::Sterling,
+ //ffi::XK_currency => events::Currency,
+ //ffi::XK_yen => events::Yen,
+ //ffi::XK_brokenbar => events::Brokenbar,
+ //ffi::XK_section => events::Section,
+ //ffi::XK_diaeresis => events::Diaeresis,
+ //ffi::XK_copyright => events::Copyright,
+ //ffi::XK_ordfeminine => events::Ordfeminine,
+ //ffi::XK_guillemotleft => events::Guillemotleft,
+ //ffi::XK_notsign => events::Notsign,
+ //ffi::XK_hyphen => events::Hyphen,
+ //ffi::XK_registered => events::Registered,
+ //ffi::XK_macron => events::Macron,
+ //ffi::XK_degree => events::Degree,
+ //ffi::XK_plusminus => events::Plusminus,
+ //ffi::XK_twosuperior => events::Twosuperior,
+ //ffi::XK_threesuperior => events::Threesuperior,
+ //ffi::XK_acute => events::Acute,
+ //ffi::XK_mu => events::Mu,
+ //ffi::XK_paragraph => events::Paragraph,
+ //ffi::XK_periodcentered => events::Periodcentered,
+ //ffi::XK_cedilla => events::Cedilla,
+ //ffi::XK_onesuperior => events::Onesuperior,
+ //ffi::XK_masculine => events::Masculine,
+ //ffi::XK_guillemotright => events::Guillemotright,
+ //ffi::XK_onequarter => events::Onequarter,
+ //ffi::XK_onehalf => events::Onehalf,
+ //ffi::XK_threequarters => events::Threequarters,
+ //ffi::XK_questiondown => events::Questiondown,
+ //ffi::XK_Agrave => events::Agrave,
+ //ffi::XK_Aacute => events::Aacute,
+ //ffi::XK_Acircumflex => events::Acircumflex,
+ //ffi::XK_Atilde => events::Atilde,
+ //ffi::XK_Adiaeresis => events::Adiaeresis,
+ //ffi::XK_Aring => events::Aring,
+ //ffi::XK_AE => events::Ae,
+ //ffi::XK_Ccedilla => events::Ccedilla,
+ //ffi::XK_Egrave => events::Egrave,
+ //ffi::XK_Eacute => events::Eacute,
+ //ffi::XK_Ecircumflex => events::Ecircumflex,
+ //ffi::XK_Ediaeresis => events::Ediaeresis,
+ //ffi::XK_Igrave => events::Igrave,
+ //ffi::XK_Iacute => events::Iacute,
+ //ffi::XK_Icircumflex => events::Icircumflex,
+ //ffi::XK_Idiaeresis => events::Idiaeresis,
+ //ffi::XK_ETH => events::Eth,
+ //ffi::XK_Eth => events::Eth,
+ //ffi::XK_Ntilde => events::Ntilde,
+ //ffi::XK_Ograve => events::Ograve,
+ //ffi::XK_Oacute => events::Oacute,
+ //ffi::XK_Ocircumflex => events::Ocircumflex,
+ //ffi::XK_Otilde => events::Otilde,
+ //ffi::XK_Odiaeresis => events::Odiaeresis,
+ //ffi::XK_multiply => events::Multiply,
+ //ffi::XK_Ooblique => events::Ooblique,
+ //ffi::XK_Ugrave => events::Ugrave,
+ //ffi::XK_Uacute => events::Uacute,
+ //ffi::XK_Ucircumflex => events::Ucircumflex,
+ //ffi::XK_Udiaeresis => events::Udiaeresis,
+ //ffi::XK_Yacute => events::Yacute,
+ //ffi::XK_THORN => events::Thorn,
+ //ffi::XK_Thorn => events::Thorn,
+ //ffi::XK_ssharp => events::Ssharp,
+ //ffi::XK_agrave => events::Agrave,
+ //ffi::XK_aacute => events::Aacute,
+ //ffi::XK_acircumflex => events::Acircumflex,
+ //ffi::XK_atilde => events::Atilde,
+ //ffi::XK_adiaeresis => events::Adiaeresis,
+ //ffi::XK_aring => events::Aring,
+ //ffi::XK_ae => events::Ae,
+ //ffi::XK_ccedilla => events::Ccedilla,
+ //ffi::XK_egrave => events::Egrave,
+ //ffi::XK_eacute => events::Eacute,
+ //ffi::XK_ecircumflex => events::Ecircumflex,
+ //ffi::XK_ediaeresis => events::Ediaeresis,
+ //ffi::XK_igrave => events::Igrave,
+ //ffi::XK_iacute => events::Iacute,
+ //ffi::XK_icircumflex => events::Icircumflex,
+ //ffi::XK_idiaeresis => events::Idiaeresis,
+ //ffi::XK_eth => events::Eth,
+ //ffi::XK_ntilde => events::Ntilde,
+ //ffi::XK_ograve => events::Ograve,
+ //ffi::XK_oacute => events::Oacute,
+ //ffi::XK_ocircumflex => events::Ocircumflex,
+ //ffi::XK_otilde => events::Otilde,
+ //ffi::XK_odiaeresis => events::Odiaeresis,
+ //ffi::XK_division => events::Division,
+ //ffi::XK_oslash => events::Oslash,
+ //ffi::XK_ugrave => events::Ugrave,
+ //ffi::XK_uacute => events::Uacute,
+ //ffi::XK_ucircumflex => events::Ucircumflex,
+ //ffi::XK_udiaeresis => events::Udiaeresis,
+ //ffi::XK_yacute => events::Yacute,
+ //ffi::XK_thorn => events::Thorn,
+ //ffi::XK_ydiaeresis => events::Ydiaeresis,
+ //ffi::XK_Aogonek => events::Aogonek,
+ //ffi::XK_breve => events::Breve,
+ //ffi::XK_Lstroke => events::Lstroke,
+ //ffi::XK_Lcaron => events::Lcaron,
+ //ffi::XK_Sacute => events::Sacute,
+ //ffi::XK_Scaron => events::Scaron,
+ //ffi::XK_Scedilla => events::Scedilla,
+ //ffi::XK_Tcaron => events::Tcaron,
+ //ffi::XK_Zacute => events::Zacute,
+ //ffi::XK_Zcaron => events::Zcaron,
+ //ffi::XK_Zabovedot => events::Zabovedot,
+ //ffi::XK_aogonek => events::Aogonek,
+ //ffi::XK_ogonek => events::Ogonek,
+ //ffi::XK_lstroke => events::Lstroke,
+ //ffi::XK_lcaron => events::Lcaron,
+ //ffi::XK_sacute => events::Sacute,
+ //ffi::XK_caron => events::Caron,
+ //ffi::XK_scaron => events::Scaron,
+ //ffi::XK_scedilla => events::Scedilla,
+ //ffi::XK_tcaron => events::Tcaron,
+ //ffi::XK_zacute => events::Zacute,
+ //ffi::XK_doubleacute => events::Doubleacute,
+ //ffi::XK_zcaron => events::Zcaron,
+ //ffi::XK_zabovedot => events::Zabovedot,
+ //ffi::XK_Racute => events::Racute,
+ //ffi::XK_Abreve => events::Abreve,
+ //ffi::XK_Lacute => events::Lacute,
+ //ffi::XK_Cacute => events::Cacute,
+ //ffi::XK_Ccaron => events::Ccaron,
+ //ffi::XK_Eogonek => events::Eogonek,
+ //ffi::XK_Ecaron => events::Ecaron,
+ //ffi::XK_Dcaron => events::Dcaron,
+ //ffi::XK_Dstroke => events::Dstroke,
+ //ffi::XK_Nacute => events::Nacute,
+ //ffi::XK_Ncaron => events::Ncaron,
+ //ffi::XK_Odoubleacute => events::Odoubleacute,
+ //ffi::XK_Rcaron => events::Rcaron,
+ //ffi::XK_Uring => events::Uring,
+ //ffi::XK_Udoubleacute => events::Udoubleacute,
+ //ffi::XK_Tcedilla => events::Tcedilla,
+ //ffi::XK_racute => events::Racute,
+ //ffi::XK_abreve => events::Abreve,
+ //ffi::XK_lacute => events::Lacute,
+ //ffi::XK_cacute => events::Cacute,
+ //ffi::XK_ccaron => events::Ccaron,
+ //ffi::XK_eogonek => events::Eogonek,
+ //ffi::XK_ecaron => events::Ecaron,
+ //ffi::XK_dcaron => events::Dcaron,
+ //ffi::XK_dstroke => events::Dstroke,
+ //ffi::XK_nacute => events::Nacute,
+ //ffi::XK_ncaron => events::Ncaron,
+ //ffi::XK_odoubleacute => events::Odoubleacute,
+ //ffi::XK_udoubleacute => events::Udoubleacute,
+ //ffi::XK_rcaron => events::Rcaron,
+ //ffi::XK_uring => events::Uring,
+ //ffi::XK_tcedilla => events::Tcedilla,
+ //ffi::XK_abovedot => events::Abovedot,
+ //ffi::XK_Hstroke => events::Hstroke,
+ //ffi::XK_Hcircumflex => events::Hcircumflex,
+ //ffi::XK_Iabovedot => events::Iabovedot,
+ //ffi::XK_Gbreve => events::Gbreve,
+ //ffi::XK_Jcircumflex => events::Jcircumflex,
+ //ffi::XK_hstroke => events::Hstroke,
+ //ffi::XK_hcircumflex => events::Hcircumflex,
+ //ffi::XK_idotless => events::Idotless,
+ //ffi::XK_gbreve => events::Gbreve,
+ //ffi::XK_jcircumflex => events::Jcircumflex,
+ //ffi::XK_Cabovedot => events::Cabovedot,
+ //ffi::XK_Ccircumflex => events::Ccircumflex,
+ //ffi::XK_Gabovedot => events::Gabovedot,
+ //ffi::XK_Gcircumflex => events::Gcircumflex,
+ //ffi::XK_Ubreve => events::Ubreve,
+ //ffi::XK_Scircumflex => events::Scircumflex,
+ //ffi::XK_cabovedot => events::Cabovedot,
+ //ffi::XK_ccircumflex => events::Ccircumflex,
+ //ffi::XK_gabovedot => events::Gabovedot,
+ //ffi::XK_gcircumflex => events::Gcircumflex,
+ //ffi::XK_ubreve => events::Ubreve,
+ //ffi::XK_scircumflex => events::Scircumflex,
+ //ffi::XK_kra => events::Kra,
+ //ffi::XK_kappa => events::Kappa,
+ //ffi::XK_Rcedilla => events::Rcedilla,
+ //ffi::XK_Itilde => events::Itilde,
+ //ffi::XK_Lcedilla => events::Lcedilla,
+ //ffi::XK_Emacron => events::Emacron,
+ //ffi::XK_Gcedilla => events::Gcedilla,
+ //ffi::XK_Tslash => events::Tslash,
+ //ffi::XK_rcedilla => events::Rcedilla,
+ //ffi::XK_itilde => events::Itilde,
+ //ffi::XK_lcedilla => events::Lcedilla,
+ //ffi::XK_emacron => events::Emacron,
+ //ffi::XK_gcedilla => events::Gcedilla,
+ //ffi::XK_tslash => events::Tslash,
+ //ffi::XK_ENG => events::Eng,
+ //ffi::XK_eng => events::Eng,
+ //ffi::XK_Amacron => events::Amacron,
+ //ffi::XK_Iogonek => events::Iogonek,
+ //ffi::XK_Eabovedot => events::Eabovedot,
+ //ffi::XK_Imacron => events::Imacron,
+ //ffi::XK_Ncedilla => events::Ncedilla,
+ //ffi::XK_Omacron => events::Omacron,
+ //ffi::XK_Kcedilla => events::Kcedilla,
+ //ffi::XK_Uogonek => events::Uogonek,
+ //ffi::XK_Utilde => events::Utilde,
+ //ffi::XK_Umacron => events::Umacron,
+ //ffi::XK_amacron => events::Amacron,
+ //ffi::XK_iogonek => events::Iogonek,
+ //ffi::XK_eabovedot => events::Eabovedot,
+ //ffi::XK_imacron => events::Imacron,
+ //ffi::XK_ncedilla => events::Ncedilla,
+ //ffi::XK_omacron => events::Omacron,
+ //ffi::XK_kcedilla => events::Kcedilla,
+ //ffi::XK_uogonek => events::Uogonek,
+ //ffi::XK_utilde => events::Utilde,
+ //ffi::XK_umacron => events::Umacron,
+ //ffi::XK_overline => events::Overline,
+ //ffi::XK_kana_fullstop => events::Kana_fullstop,
+ //ffi::XK_kana_openingbracket => events::Kana_openingbracket,
+ //ffi::XK_kana_closingbracket => events::Kana_closingbracket,
+ //ffi::XK_kana_comma => events::Kana_comma,
+ //ffi::XK_kana_conjunctive => events::Kana_conjunctive,
+ //ffi::XK_kana_middledot => events::Kana_middledot,
+ //ffi::XK_kana_WO => events::Kana_wo,
+ //ffi::XK_kana_a => events::Kana_a,
+ //ffi::XK_kana_i => events::Kana_i,
+ //ffi::XK_kana_u => events::Kana_u,
+ //ffi::XK_kana_e => events::Kana_e,
+ //ffi::XK_kana_o => events::Kana_o,
+ //ffi::XK_kana_ya => events::Kana_ya,
+ //ffi::XK_kana_yu => events::Kana_yu,
+ //ffi::XK_kana_yo => events::Kana_yo,
+ //ffi::XK_kana_tsu => events::Kana_tsu,
+ //ffi::XK_kana_tu => events::Kana_tu,
+ //ffi::XK_prolongedsound => events::Prolongedsound,
+ //ffi::XK_kana_A => events::Kana_a,
+ //ffi::XK_kana_I => events::Kana_i,
+ //ffi::XK_kana_U => events::Kana_u,
+ //ffi::XK_kana_E => events::Kana_e,
+ //ffi::XK_kana_O => events::Kana_o,
+ //ffi::XK_kana_KA => events::Kana_ka,
+ //ffi::XK_kana_KI => events::Kana_ki,
+ //ffi::XK_kana_KU => events::Kana_ku,
+ //ffi::XK_kana_KE => events::Kana_ke,
+ //ffi::XK_kana_KO => events::Kana_ko,
+ //ffi::XK_kana_SA => events::Kana_sa,
+ //ffi::XK_kana_SHI => events::Kana_shi,
+ //ffi::XK_kana_SU => events::Kana_su,
+ //ffi::XK_kana_SE => events::Kana_se,
+ //ffi::XK_kana_SO => events::Kana_so,
+ //ffi::XK_kana_TA => events::Kana_ta,
+ //ffi::XK_kana_CHI => events::Kana_chi,
+ //ffi::XK_kana_TI => events::Kana_ti,
+ //ffi::XK_kana_TSU => events::Kana_tsu,
+ //ffi::XK_kana_TU => events::Kana_tu,
+ //ffi::XK_kana_TE => events::Kana_te,
+ //ffi::XK_kana_TO => events::Kana_to,
+ //ffi::XK_kana_NA => events::Kana_na,
+ //ffi::XK_kana_NI => events::Kana_ni,
+ //ffi::XK_kana_NU => events::Kana_nu,
+ //ffi::XK_kana_NE => events::Kana_ne,
+ //ffi::XK_kana_NO => events::Kana_no,
+ //ffi::XK_kana_HA => events::Kana_ha,
+ //ffi::XK_kana_HI => events::Kana_hi,
+ //ffi::XK_kana_FU => events::Kana_fu,
+ //ffi::XK_kana_HU => events::Kana_hu,
+ //ffi::XK_kana_HE => events::Kana_he,
+ //ffi::XK_kana_HO => events::Kana_ho,
+ //ffi::XK_kana_MA => events::Kana_ma,
+ //ffi::XK_kana_MI => events::Kana_mi,
+ //ffi::XK_kana_MU => events::Kana_mu,
+ //ffi::XK_kana_ME => events::Kana_me,
+ //ffi::XK_kana_MO => events::Kana_mo,
+ //ffi::XK_kana_YA => events::Kana_ya,
+ //ffi::XK_kana_YU => events::Kana_yu,
+ //ffi::XK_kana_YO => events::Kana_yo,
+ //ffi::XK_kana_RA => events::Kana_ra,
+ //ffi::XK_kana_RI => events::Kana_ri,
+ //ffi::XK_kana_RU => events::Kana_ru,
+ //ffi::XK_kana_RE => events::Kana_re,
+ //ffi::XK_kana_RO => events::Kana_ro,
+ //ffi::XK_kana_WA => events::Kana_wa,
+ //ffi::XK_kana_N => events::Kana_n,
+ //ffi::XK_voicedsound => events::Voicedsound,
+ //ffi::XK_semivoicedsound => events::Semivoicedsound,
+ //ffi::XK_kana_switch => events::Kana_switch,
+ //ffi::XK_Arabic_comma => events::Arabic_comma,
+ //ffi::XK_Arabic_semicolon => events::Arabic_semicolon,
+ //ffi::XK_Arabic_question_mark => events::Arabic_question_mark,
+ //ffi::XK_Arabic_hamza => events::Arabic_hamza,
+ //ffi::XK_Arabic_maddaonalef => events::Arabic_maddaonalef,
+ //ffi::XK_Arabic_hamzaonalef => events::Arabic_hamzaonalef,
+ //ffi::XK_Arabic_hamzaonwaw => events::Arabic_hamzaonwaw,
+ //ffi::XK_Arabic_hamzaunderalef => events::Arabic_hamzaunderalef,
+ //ffi::XK_Arabic_hamzaonyeh => events::Arabic_hamzaonyeh,
+ //ffi::XK_Arabic_alef => events::Arabic_alef,
+ //ffi::XK_Arabic_beh => events::Arabic_beh,
+ //ffi::XK_Arabic_tehmarbuta => events::Arabic_tehmarbuta,
+ //ffi::XK_Arabic_teh => events::Arabic_teh,
+ //ffi::XK_Arabic_theh => events::Arabic_theh,
+ //ffi::XK_Arabic_jeem => events::Arabic_jeem,
+ //ffi::XK_Arabic_hah => events::Arabic_hah,
+ //ffi::XK_Arabic_khah => events::Arabic_khah,
+ //ffi::XK_Arabic_dal => events::Arabic_dal,
+ //ffi::XK_Arabic_thal => events::Arabic_thal,
+ //ffi::XK_Arabic_ra => events::Arabic_ra,
+ //ffi::XK_Arabic_zain => events::Arabic_zain,
+ //ffi::XK_Arabic_seen => events::Arabic_seen,
+ //ffi::XK_Arabic_sheen => events::Arabic_sheen,
+ //ffi::XK_Arabic_sad => events::Arabic_sad,
+ //ffi::XK_Arabic_dad => events::Arabic_dad,
+ //ffi::XK_Arabic_tah => events::Arabic_tah,
+ //ffi::XK_Arabic_zah => events::Arabic_zah,
+ //ffi::XK_Arabic_ain => events::Arabic_ain,
+ //ffi::XK_Arabic_ghain => events::Arabic_ghain,
+ //ffi::XK_Arabic_tatweel => events::Arabic_tatweel,
+ //ffi::XK_Arabic_feh => events::Arabic_feh,
+ //ffi::XK_Arabic_qaf => events::Arabic_qaf,
+ //ffi::XK_Arabic_kaf => events::Arabic_kaf,
+ //ffi::XK_Arabic_lam => events::Arabic_lam,
+ //ffi::XK_Arabic_meem => events::Arabic_meem,
+ //ffi::XK_Arabic_noon => events::Arabic_noon,
+ //ffi::XK_Arabic_ha => events::Arabic_ha,
+ //ffi::XK_Arabic_heh => events::Arabic_heh,
+ //ffi::XK_Arabic_waw => events::Arabic_waw,
+ //ffi::XK_Arabic_alefmaksura => events::Arabic_alefmaksura,
+ //ffi::XK_Arabic_yeh => events::Arabic_yeh,
+ //ffi::XK_Arabic_fathatan => events::Arabic_fathatan,
+ //ffi::XK_Arabic_dammatan => events::Arabic_dammatan,
+ //ffi::XK_Arabic_kasratan => events::Arabic_kasratan,
+ //ffi::XK_Arabic_fatha => events::Arabic_fatha,
+ //ffi::XK_Arabic_damma => events::Arabic_damma,
+ //ffi::XK_Arabic_kasra => events::Arabic_kasra,
+ //ffi::XK_Arabic_shadda => events::Arabic_shadda,
+ //ffi::XK_Arabic_sukun => events::Arabic_sukun,
+ //ffi::XK_Arabic_switch => events::Arabic_switch,
+ //ffi::XK_Serbian_dje => events::Serbian_dje,
+ //ffi::XK_Macedonia_gje => events::Macedonia_gje,
+ //ffi::XK_Cyrillic_io => events::Cyrillic_io,
+ //ffi::XK_Ukrainian_ie => events::Ukrainian_ie,
+ //ffi::XK_Ukranian_je => events::Ukranian_je,
+ //ffi::XK_Macedonia_dse => events::Macedonia_dse,
+ //ffi::XK_Ukrainian_i => events::Ukrainian_i,
+ //ffi::XK_Ukranian_i => events::Ukranian_i,
+ //ffi::XK_Ukrainian_yi => events::Ukrainian_yi,
+ //ffi::XK_Ukranian_yi => events::Ukranian_yi,
+ //ffi::XK_Cyrillic_je => events::Cyrillic_je,
+ //ffi::XK_Serbian_je => events::Serbian_je,
+ //ffi::XK_Cyrillic_lje => events::Cyrillic_lje,
+ //ffi::XK_Serbian_lje => events::Serbian_lje,
+ //ffi::XK_Cyrillic_nje => events::Cyrillic_nje,
+ //ffi::XK_Serbian_nje => events::Serbian_nje,
+ //ffi::XK_Serbian_tshe => events::Serbian_tshe,
+ //ffi::XK_Macedonia_kje => events::Macedonia_kje,
+ //ffi::XK_Byelorussian_shortu => events::Byelorussian_shortu,
+ //ffi::XK_Cyrillic_dzhe => events::Cyrillic_dzhe,
+ //ffi::XK_Serbian_dze => events::Serbian_dze,
+ //ffi::XK_numerosign => events::Numerosign,
+ //ffi::XK_Serbian_DJE => events::Serbian_dje,
+ //ffi::XK_Macedonia_GJE => events::Macedonia_gje,
+ //ffi::XK_Cyrillic_IO => events::Cyrillic_io,
+ //ffi::XK_Ukrainian_IE => events::Ukrainian_ie,
+ //ffi::XK_Ukranian_JE => events::Ukranian_je,
+ //ffi::XK_Macedonia_DSE => events::Macedonia_dse,
+ //ffi::XK_Ukrainian_I => events::Ukrainian_i,
+ //ffi::XK_Ukranian_I => events::Ukranian_i,
+ //ffi::XK_Ukrainian_YI => events::Ukrainian_yi,
+ //ffi::XK_Ukranian_YI => events::Ukranian_yi,
+ //ffi::XK_Cyrillic_JE => events::Cyrillic_je,
+ //ffi::XK_Serbian_JE => events::Serbian_je,
+ //ffi::XK_Cyrillic_LJE => events::Cyrillic_lje,
+ //ffi::XK_Serbian_LJE => events::Serbian_lje,
+ //ffi::XK_Cyrillic_NJE => events::Cyrillic_nje,
+ //ffi::XK_Serbian_NJE => events::Serbian_nje,
+ //ffi::XK_Serbian_TSHE => events::Serbian_tshe,
+ //ffi::XK_Macedonia_KJE => events::Macedonia_kje,
+ //ffi::XK_Byelorussian_SHORTU => events::Byelorussian_shortu,
+ //ffi::XK_Cyrillic_DZHE => events::Cyrillic_dzhe,
+ //ffi::XK_Serbian_DZE => events::Serbian_dze,
+ //ffi::XK_Cyrillic_yu => events::Cyrillic_yu,
+ //ffi::XK_Cyrillic_a => events::Cyrillic_a,
+ //ffi::XK_Cyrillic_be => events::Cyrillic_be,
+ //ffi::XK_Cyrillic_tse => events::Cyrillic_tse,
+ //ffi::XK_Cyrillic_de => events::Cyrillic_de,
+ //ffi::XK_Cyrillic_ie => events::Cyrillic_ie,
+ //ffi::XK_Cyrillic_ef => events::Cyrillic_ef,
+ //ffi::XK_Cyrillic_ghe => events::Cyrillic_ghe,
+ //ffi::XK_Cyrillic_ha => events::Cyrillic_ha,
+ //ffi::XK_Cyrillic_i => events::Cyrillic_i,
+ //ffi::XK_Cyrillic_shorti => events::Cyrillic_shorti,
+ //ffi::XK_Cyrillic_ka => events::Cyrillic_ka,
+ //ffi::XK_Cyrillic_el => events::Cyrillic_el,
+ //ffi::XK_Cyrillic_em => events::Cyrillic_em,
+ //ffi::XK_Cyrillic_en => events::Cyrillic_en,
+ //ffi::XK_Cyrillic_o => events::Cyrillic_o,
+ //ffi::XK_Cyrillic_pe => events::Cyrillic_pe,
+ //ffi::XK_Cyrillic_ya => events::Cyrillic_ya,
+ //ffi::XK_Cyrillic_er => events::Cyrillic_er,
+ //ffi::XK_Cyrillic_es => events::Cyrillic_es,
+ //ffi::XK_Cyrillic_te => events::Cyrillic_te,
+ //ffi::XK_Cyrillic_u => events::Cyrillic_u,
+ //ffi::XK_Cyrillic_zhe => events::Cyrillic_zhe,
+ //ffi::XK_Cyrillic_ve => events::Cyrillic_ve,
+ //ffi::XK_Cyrillic_softsign => events::Cyrillic_softsign,
+ //ffi::XK_Cyrillic_yeru => events::Cyrillic_yeru,
+ //ffi::XK_Cyrillic_ze => events::Cyrillic_ze,
+ //ffi::XK_Cyrillic_sha => events::Cyrillic_sha,
+ //ffi::XK_Cyrillic_e => events::Cyrillic_e,
+ //ffi::XK_Cyrillic_shcha => events::Cyrillic_shcha,
+ //ffi::XK_Cyrillic_che => events::Cyrillic_che,
+ //ffi::XK_Cyrillic_hardsign => events::Cyrillic_hardsign,
+ //ffi::XK_Cyrillic_YU => events::Cyrillic_yu,
+ //ffi::XK_Cyrillic_A => events::Cyrillic_a,
+ //ffi::XK_Cyrillic_BE => events::Cyrillic_be,
+ //ffi::XK_Cyrillic_TSE => events::Cyrillic_tse,
+ //ffi::XK_Cyrillic_DE => events::Cyrillic_de,
+ //ffi::XK_Cyrillic_IE => events::Cyrillic_ie,
+ //ffi::XK_Cyrillic_EF => events::Cyrillic_ef,
+ //ffi::XK_Cyrillic_GHE => events::Cyrillic_ghe,
+ //ffi::XK_Cyrillic_HA => events::Cyrillic_ha,
+ //ffi::XK_Cyrillic_I => events::Cyrillic_i,
+ //ffi::XK_Cyrillic_SHORTI => events::Cyrillic_shorti,
+ //ffi::XK_Cyrillic_KA => events::Cyrillic_ka,
+ //ffi::XK_Cyrillic_EL => events::Cyrillic_el,
+ //ffi::XK_Cyrillic_EM => events::Cyrillic_em,
+ //ffi::XK_Cyrillic_EN => events::Cyrillic_en,
+ //ffi::XK_Cyrillic_O => events::Cyrillic_o,
+ //ffi::XK_Cyrillic_PE => events::Cyrillic_pe,
+ //ffi::XK_Cyrillic_YA => events::Cyrillic_ya,
+ //ffi::XK_Cyrillic_ER => events::Cyrillic_er,
+ //ffi::XK_Cyrillic_ES => events::Cyrillic_es,
+ //ffi::XK_Cyrillic_TE => events::Cyrillic_te,
+ //ffi::XK_Cyrillic_U => events::Cyrillic_u,
+ //ffi::XK_Cyrillic_ZHE => events::Cyrillic_zhe,
+ //ffi::XK_Cyrillic_VE => events::Cyrillic_ve,
+ //ffi::XK_Cyrillic_SOFTSIGN => events::Cyrillic_softsign,
+ //ffi::XK_Cyrillic_YERU => events::Cyrillic_yeru,
+ //ffi::XK_Cyrillic_ZE => events::Cyrillic_ze,
+ //ffi::XK_Cyrillic_SHA => events::Cyrillic_sha,
+ //ffi::XK_Cyrillic_E => events::Cyrillic_e,
+ //ffi::XK_Cyrillic_SHCHA => events::Cyrillic_shcha,
+ //ffi::XK_Cyrillic_CHE => events::Cyrillic_che,
+ //ffi::XK_Cyrillic_HARDSIGN => events::Cyrillic_hardsign,
+ //ffi::XK_Greek_ALPHAaccent => events::Greek_alphaaccent,
+ //ffi::XK_Greek_EPSILONaccent => events::Greek_epsilonaccent,
+ //ffi::XK_Greek_ETAaccent => events::Greek_etaaccent,
+ //ffi::XK_Greek_IOTAaccent => events::Greek_iotaaccent,
+ //ffi::XK_Greek_IOTAdiaeresis => events::Greek_iotadiaeresis,
+ //ffi::XK_Greek_OMICRONaccent => events::Greek_omicronaccent,
+ //ffi::XK_Greek_UPSILONaccent => events::Greek_upsilonaccent,
+ //ffi::XK_Greek_UPSILONdieresis => events::Greek_upsilondieresis,
+ //ffi::XK_Greek_OMEGAaccent => events::Greek_omegaaccent,
+ //ffi::XK_Greek_accentdieresis => events::Greek_accentdieresis,
+ //ffi::XK_Greek_horizbar => events::Greek_horizbar,
+ //ffi::XK_Greek_alphaaccent => events::Greek_alphaaccent,
+ //ffi::XK_Greek_epsilonaccent => events::Greek_epsilonaccent,
+ //ffi::XK_Greek_etaaccent => events::Greek_etaaccent,
+ //ffi::XK_Greek_iotaaccent => events::Greek_iotaaccent,
+ //ffi::XK_Greek_iotadieresis => events::Greek_iotadieresis,
+ //ffi::XK_Greek_iotaaccentdieresis => events::Greek_iotaaccentdieresis,
+ //ffi::XK_Greek_omicronaccent => events::Greek_omicronaccent,
+ //ffi::XK_Greek_upsilonaccent => events::Greek_upsilonaccent,
+ //ffi::XK_Greek_upsilondieresis => events::Greek_upsilondieresis,
+ //ffi::XK_Greek_upsilonaccentdieresis => events::Greek_upsilonaccentdieresis,
+ //ffi::XK_Greek_omegaaccent => events::Greek_omegaaccent,
+ //ffi::XK_Greek_ALPHA => events::Greek_alpha,
+ //ffi::XK_Greek_BETA => events::Greek_beta,
+ //ffi::XK_Greek_GAMMA => events::Greek_gamma,
+ //ffi::XK_Greek_DELTA => events::Greek_delta,
+ //ffi::XK_Greek_EPSILON => events::Greek_epsilon,
+ //ffi::XK_Greek_ZETA => events::Greek_zeta,
+ //ffi::XK_Greek_ETA => events::Greek_eta,
+ //ffi::XK_Greek_THETA => events::Greek_theta,
+ //ffi::XK_Greek_IOTA => events::Greek_iota,
+ //ffi::XK_Greek_KAPPA => events::Greek_kappa,
+ //ffi::XK_Greek_LAMDA => events::Greek_lamda,
+ //ffi::XK_Greek_LAMBDA => events::Greek_lambda,
+ //ffi::XK_Greek_MU => events::Greek_mu,
+ //ffi::XK_Greek_NU => events::Greek_nu,
+ //ffi::XK_Greek_XI => events::Greek_xi,
+ //ffi::XK_Greek_OMICRON => events::Greek_omicron,
+ //ffi::XK_Greek_PI => events::Greek_pi,
+ //ffi::XK_Greek_RHO => events::Greek_rho,
+ //ffi::XK_Greek_SIGMA => events::Greek_sigma,
+ //ffi::XK_Greek_TAU => events::Greek_tau,
+ //ffi::XK_Greek_UPSILON => events::Greek_upsilon,
+ //ffi::XK_Greek_PHI => events::Greek_phi,
+ //ffi::XK_Greek_CHI => events::Greek_chi,
+ //ffi::XK_Greek_PSI => events::Greek_psi,
+ //ffi::XK_Greek_OMEGA => events::Greek_omega,
+ //ffi::XK_Greek_alpha => events::Greek_alpha,
+ //ffi::XK_Greek_beta => events::Greek_beta,
+ //ffi::XK_Greek_gamma => events::Greek_gamma,
+ //ffi::XK_Greek_delta => events::Greek_delta,
+ //ffi::XK_Greek_epsilon => events::Greek_epsilon,
+ //ffi::XK_Greek_zeta => events::Greek_zeta,
+ //ffi::XK_Greek_eta => events::Greek_eta,
+ //ffi::XK_Greek_theta => events::Greek_theta,
+ //ffi::XK_Greek_iota => events::Greek_iota,
+ //ffi::XK_Greek_kappa => events::Greek_kappa,
+ //ffi::XK_Greek_lamda => events::Greek_lamda,
+ //ffi::XK_Greek_lambda => events::Greek_lambda,
+ //ffi::XK_Greek_mu => events::Greek_mu,
+ //ffi::XK_Greek_nu => events::Greek_nu,
+ //ffi::XK_Greek_xi => events::Greek_xi,
+ //ffi::XK_Greek_omicron => events::Greek_omicron,
+ //ffi::XK_Greek_pi => events::Greek_pi,
+ //ffi::XK_Greek_rho => events::Greek_rho,
+ //ffi::XK_Greek_sigma => events::Greek_sigma,
+ //ffi::XK_Greek_finalsmallsigma => events::Greek_finalsmallsigma,
+ //ffi::XK_Greek_tau => events::Greek_tau,
+ //ffi::XK_Greek_upsilon => events::Greek_upsilon,
+ //ffi::XK_Greek_phi => events::Greek_phi,
+ //ffi::XK_Greek_chi => events::Greek_chi,
+ //ffi::XK_Greek_psi => events::Greek_psi,
+ //ffi::XK_Greek_omega => events::Greek_omega,
+ //ffi::XK_Greek_switch => events::Greek_switch,
+ //ffi::XK_leftradical => events::Leftradical,
+ //ffi::XK_topleftradical => events::Topleftradical,
+ //ffi::XK_horizconnector => events::Horizconnector,
+ //ffi::XK_topintegral => events::Topintegral,
+ //ffi::XK_botintegral => events::Botintegral,
+ //ffi::XK_vertconnector => events::Vertconnector,
+ //ffi::XK_topleftsqbracket => events::Topleftsqbracket,
+ //ffi::XK_botleftsqbracket => events::Botleftsqbracket,
+ //ffi::XK_toprightsqbracket => events::Toprightsqbracket,
+ //ffi::XK_botrightsqbracket => events::Botrightsqbracket,
+ //ffi::XK_topleftparens => events::Topleftparens,
+ //ffi::XK_botleftparens => events::Botleftparens,
+ //ffi::XK_toprightparens => events::Toprightparens,
+ //ffi::XK_botrightparens => events::Botrightparens,
+ //ffi::XK_leftmiddlecurlybrace => events::Leftmiddlecurlybrace,
+ //ffi::XK_rightmiddlecurlybrace => events::Rightmiddlecurlybrace,
+ //ffi::XK_topleftsummation => events::Topleftsummation,
+ //ffi::XK_botleftsummation => events::Botleftsummation,
+ //ffi::XK_topvertsummationconnector => events::Topvertsummationconnector,
+ //ffi::XK_botvertsummationconnector => events::Botvertsummationconnector,
+ //ffi::XK_toprightsummation => events::Toprightsummation,
+ //ffi::XK_botrightsummation => events::Botrightsummation,
+ //ffi::XK_rightmiddlesummation => events::Rightmiddlesummation,
+ //ffi::XK_lessthanequal => events::Lessthanequal,
+ //ffi::XK_notequal => events::Notequal,
+ //ffi::XK_greaterthanequal => events::Greaterthanequal,
+ //ffi::XK_integral => events::Integral,
+ //ffi::XK_therefore => events::Therefore,
+ //ffi::XK_variation => events::Variation,
+ //ffi::XK_infinity => events::Infinity,
+ //ffi::XK_nabla => events::Nabla,
+ //ffi::XK_approximate => events::Approximate,
+ //ffi::XK_similarequal => events::Similarequal,
+ //ffi::XK_ifonlyif => events::Ifonlyif,
+ //ffi::XK_implies => events::Implies,
+ //ffi::XK_identical => events::Identical,
+ //ffi::XK_radical => events::Radical,
+ //ffi::XK_includedin => events::Includedin,
+ //ffi::XK_includes => events::Includes,
+ //ffi::XK_intersection => events::Intersection,
+ //ffi::XK_union => events::Union,
+ //ffi::XK_logicaland => events::Logicaland,
+ //ffi::XK_logicalor => events::Logicalor,
+ //ffi::XK_partialderivative => events::Partialderivative,
+ //ffi::XK_function => events::Function,
+ //ffi::XK_leftarrow => events::Leftarrow,
+ //ffi::XK_uparrow => events::Uparrow,
+ //ffi::XK_rightarrow => events::Rightarrow,
+ //ffi::XK_downarrow => events::Downarrow,
+ //ffi::XK_blank => events::Blank,
+ //ffi::XK_soliddiamond => events::Soliddiamond,
+ //ffi::XK_checkerboard => events::Checkerboard,
+ //ffi::XK_ht => events::Ht,
+ //ffi::XK_ff => events::Ff,
+ //ffi::XK_cr => events::Cr,
+ //ffi::XK_lf => events::Lf,
+ //ffi::XK_nl => events::Nl,
+ //ffi::XK_vt => events::Vt,
+ //ffi::XK_lowrightcorner => events::Lowrightcorner,
+ //ffi::XK_uprightcorner => events::Uprightcorner,
+ //ffi::XK_upleftcorner => events::Upleftcorner,
+ //ffi::XK_lowleftcorner => events::Lowleftcorner,
+ //ffi::XK_crossinglines => events::Crossinglines,
+ //ffi::XK_horizlinescan1 => events::Horizlinescan1,
+ //ffi::XK_horizlinescan3 => events::Horizlinescan3,
+ //ffi::XK_horizlinescan5 => events::Horizlinescan5,
+ //ffi::XK_horizlinescan7 => events::Horizlinescan7,
+ //ffi::XK_horizlinescan9 => events::Horizlinescan9,
+ //ffi::XK_leftt => events::Leftt,
+ //ffi::XK_rightt => events::Rightt,
+ //ffi::XK_bott => events::Bott,
+ //ffi::XK_topt => events::Topt,
+ //ffi::XK_vertbar => events::Vertbar,
+ //ffi::XK_emspace => events::Emspace,
+ //ffi::XK_enspace => events::Enspace,
+ //ffi::XK_em3space => events::Em3space,
+ //ffi::XK_em4space => events::Em4space,
+ //ffi::XK_digitspace => events::Digitspace,
+ //ffi::XK_punctspace => events::Punctspace,
+ //ffi::XK_thinspace => events::Thinspace,
+ //ffi::XK_hairspace => events::Hairspace,
+ //ffi::XK_emdash => events::Emdash,
+ //ffi::XK_endash => events::Endash,
+ //ffi::XK_signifblank => events::Signifblank,
+ //ffi::XK_ellipsis => events::Ellipsis,
+ //ffi::XK_doubbaselinedot => events::Doubbaselinedot,
+ //ffi::XK_onethird => events::Onethird,
+ //ffi::XK_twothirds => events::Twothirds,
+ //ffi::XK_onefifth => events::Onefifth,
+ //ffi::XK_twofifths => events::Twofifths,
+ //ffi::XK_threefifths => events::Threefifths,
+ //ffi::XK_fourfifths => events::Fourfifths,
+ //ffi::XK_onesixth => events::Onesixth,
+ //ffi::XK_fivesixths => events::Fivesixths,
+ //ffi::XK_careof => events::Careof,
+ //ffi::XK_figdash => events::Figdash,
+ //ffi::XK_leftanglebracket => events::Leftanglebracket,
+ //ffi::XK_decimalpoint => events::Decimalpoint,
+ //ffi::XK_rightanglebracket => events::Rightanglebracket,
+ //ffi::XK_marker => events::Marker,
+ //ffi::XK_oneeighth => events::Oneeighth,
+ //ffi::XK_threeeighths => events::Threeeighths,
+ //ffi::XK_fiveeighths => events::Fiveeighths,
+ //ffi::XK_seveneighths => events::Seveneighths,
+ //ffi::XK_trademark => events::Trademark,
+ //ffi::XK_signaturemark => events::Signaturemark,
+ //ffi::XK_trademarkincircle => events::Trademarkincircle,
+ //ffi::XK_leftopentriangle => events::Leftopentriangle,
+ //ffi::XK_rightopentriangle => events::Rightopentriangle,
+ //ffi::XK_emopencircle => events::Emopencircle,
+ //ffi::XK_emopenrectangle => events::Emopenrectangle,
+ //ffi::XK_leftsinglequotemark => events::Leftsinglequotemark,
+ //ffi::XK_rightsinglequotemark => events::Rightsinglequotemark,
+ //ffi::XK_leftdoublequotemark => events::Leftdoublequotemark,
+ //ffi::XK_rightdoublequotemark => events::Rightdoublequotemark,
+ //ffi::XK_prescription => events::Prescription,
+ //ffi::XK_minutes => events::Minutes,
+ //ffi::XK_seconds => events::Seconds,
+ //ffi::XK_latincross => events::Latincross,
+ //ffi::XK_hexagram => events::Hexagram,
+ //ffi::XK_filledrectbullet => events::Filledrectbullet,
+ //ffi::XK_filledlefttribullet => events::Filledlefttribullet,
+ //ffi::XK_filledrighttribullet => events::Filledrighttribullet,
+ //ffi::XK_emfilledcircle => events::Emfilledcircle,
+ //ffi::XK_emfilledrect => events::Emfilledrect,
+ //ffi::XK_enopencircbullet => events::Enopencircbullet,
+ //ffi::XK_enopensquarebullet => events::Enopensquarebullet,
+ //ffi::XK_openrectbullet => events::Openrectbullet,
+ //ffi::XK_opentribulletup => events::Opentribulletup,
+ //ffi::XK_opentribulletdown => events::Opentribulletdown,
+ //ffi::XK_openstar => events::Openstar,
+ //ffi::XK_enfilledcircbullet => events::Enfilledcircbullet,
+ //ffi::XK_enfilledsqbullet => events::Enfilledsqbullet,
+ //ffi::XK_filledtribulletup => events::Filledtribulletup,
+ //ffi::XK_filledtribulletdown => events::Filledtribulletdown,
+ //ffi::XK_leftpointer => events::Leftpointer,
+ //ffi::XK_rightpointer => events::Rightpointer,
+ //ffi::XK_club => events::Club,
+ //ffi::XK_diamond => events::Diamond,
+ //ffi::XK_heart => events::Heart,
+ //ffi::XK_maltesecross => events::Maltesecross,
+ //ffi::XK_dagger => events::Dagger,
+ //ffi::XK_doubledagger => events::Doubledagger,
+ //ffi::XK_checkmark => events::Checkmark,
+ //ffi::XK_ballotcross => events::Ballotcross,
+ //ffi::XK_musicalsharp => events::Musicalsharp,
+ //ffi::XK_musicalflat => events::Musicalflat,
+ //ffi::XK_malesymbol => events::Malesymbol,
+ //ffi::XK_femalesymbol => events::Femalesymbol,
+ //ffi::XK_telephone => events::Telephone,
+ //ffi::XK_telephonerecorder => events::Telephonerecorder,
+ //ffi::XK_phonographcopyright => events::Phonographcopyright,
+ //ffi::XK_caret => events::Caret,
+ //ffi::XK_singlelowquotemark => events::Singlelowquotemark,
+ //ffi::XK_doublelowquotemark => events::Doublelowquotemark,
+ //ffi::XK_cursor => events::Cursor,
+ //ffi::XK_leftcaret => events::Leftcaret,
+ //ffi::XK_rightcaret => events::Rightcaret,
+ //ffi::XK_downcaret => events::Downcaret,
+ //ffi::XK_upcaret => events::Upcaret,
+ //ffi::XK_overbar => events::Overbar,
+ //ffi::XK_downtack => events::Downtack,
+ //ffi::XK_upshoe => events::Upshoe,
+ //ffi::XK_downstile => events::Downstile,
+ //ffi::XK_underbar => events::Underbar,
+ //ffi::XK_jot => events::Jot,
+ //ffi::XK_quad => events::Quad,
+ //ffi::XK_uptack => events::Uptack,
+ //ffi::XK_circle => events::Circle,
+ //ffi::XK_upstile => events::Upstile,
+ //ffi::XK_downshoe => events::Downshoe,
+ //ffi::XK_rightshoe => events::Rightshoe,
+ //ffi::XK_leftshoe => events::Leftshoe,
+ //ffi::XK_lefttack => events::Lefttack,
+ //ffi::XK_righttack => events::Righttack,
+ //ffi::XK_hebrew_doublelowline => events::Hebrew_doublelowline,
+ //ffi::XK_hebrew_aleph => events::Hebrew_aleph,
+ //ffi::XK_hebrew_bet => events::Hebrew_bet,
+ //ffi::XK_hebrew_beth => events::Hebrew_beth,
+ //ffi::XK_hebrew_gimel => events::Hebrew_gimel,
+ //ffi::XK_hebrew_gimmel => events::Hebrew_gimmel,
+ //ffi::XK_hebrew_dalet => events::Hebrew_dalet,
+ //ffi::XK_hebrew_daleth => events::Hebrew_daleth,
+ //ffi::XK_hebrew_he => events::Hebrew_he,
+ //ffi::XK_hebrew_waw => events::Hebrew_waw,
+ //ffi::XK_hebrew_zain => events::Hebrew_zain,
+ //ffi::XK_hebrew_zayin => events::Hebrew_zayin,
+ //ffi::XK_hebrew_chet => events::Hebrew_chet,
+ //ffi::XK_hebrew_het => events::Hebrew_het,
+ //ffi::XK_hebrew_tet => events::Hebrew_tet,
+ //ffi::XK_hebrew_teth => events::Hebrew_teth,
+ //ffi::XK_hebrew_yod => events::Hebrew_yod,
+ //ffi::XK_hebrew_finalkaph => events::Hebrew_finalkaph,
+ //ffi::XK_hebrew_kaph => events::Hebrew_kaph,
+ //ffi::XK_hebrew_lamed => events::Hebrew_lamed,
+ //ffi::XK_hebrew_finalmem => events::Hebrew_finalmem,
+ //ffi::XK_hebrew_mem => events::Hebrew_mem,
+ //ffi::XK_hebrew_finalnun => events::Hebrew_finalnun,
+ //ffi::XK_hebrew_nun => events::Hebrew_nun,
+ //ffi::XK_hebrew_samech => events::Hebrew_samech,
+ //ffi::XK_hebrew_samekh => events::Hebrew_samekh,
+ //ffi::XK_hebrew_ayin => events::Hebrew_ayin,
+ //ffi::XK_hebrew_finalpe => events::Hebrew_finalpe,
+ //ffi::XK_hebrew_pe => events::Hebrew_pe,
+ //ffi::XK_hebrew_finalzade => events::Hebrew_finalzade,
+ //ffi::XK_hebrew_finalzadi => events::Hebrew_finalzadi,
+ //ffi::XK_hebrew_zade => events::Hebrew_zade,
+ //ffi::XK_hebrew_zadi => events::Hebrew_zadi,
+ //ffi::XK_hebrew_qoph => events::Hebrew_qoph,
+ //ffi::XK_hebrew_kuf => events::Hebrew_kuf,
+ //ffi::XK_hebrew_resh => events::Hebrew_resh,
+ //ffi::XK_hebrew_shin => events::Hebrew_shin,
+ //ffi::XK_hebrew_taw => events::Hebrew_taw,
+ //ffi::XK_hebrew_taf => events::Hebrew_taf,
+ //ffi::XK_Hebrew_switch => events::Hebrew_switch,
+ _ => return None
+ })
+} \ No newline at end of file
diff --git a/src/x11/ffi.rs b/src/x11/ffi.rs
index c021867..553c62e 100644
--- a/src/x11/ffi.rs
+++ b/src/x11/ffi.rs
@@ -16,6 +16,8 @@ pub type GLXFBConfig = ();
pub type GLXPbuffer = XID;
pub type GLXPixmap = XID;
pub type GLXWindow = XID;
+pub type KeyCode = libc::c_ulong;
+pub type KeySym = XID;
pub type Pixmap = XID;
pub type Status = libc::c_int; // TODO: not sure
pub type Time = libc::c_ulong;
@@ -191,6 +193,1001 @@ pub static GLX_PBUFFER: libc::c_int = 0x8023;
pub static GLX_PBUFFER_HEIGHT: libc::c_int = 0x8040;
pub static GLX_PBUFFER_WIDTH: libc::c_int = 0x8041;
+pub static XK_BackSpace: libc::c_uint = 0xFF08;
+pub static XK_Tab: libc::c_uint = 0xFF09;
+pub static XK_Linefeed: libc::c_uint = 0xFF0A;
+pub static XK_Clear: libc::c_uint = 0xFF0B;
+pub static XK_Return: libc::c_uint = 0xFF0D;
+pub static XK_Pause: libc::c_uint = 0xFF13;
+pub static XK_Scroll_Lock: libc::c_uint = 0xFF14;
+pub static XK_Sys_Req: libc::c_uint = 0xFF15;
+pub static XK_Escape: libc::c_uint = 0xFF1B;
+pub static XK_Delete: libc::c_uint = 0xFFFF;
+pub static XK_Multi_key: libc::c_uint = 0xFF20;
+pub static XK_Kanji: libc::c_uint = 0xFF21;
+pub static XK_Muhenkan: libc::c_uint = 0xFF22;
+pub static XK_Henkan_Mode: libc::c_uint = 0xFF23;
+pub static XK_Henkan: libc::c_uint = 0xFF23;
+pub static XK_Romaji: libc::c_uint = 0xFF24;
+pub static XK_Hiragana: libc::c_uint = 0xFF25;
+pub static XK_Katakana: libc::c_uint = 0xFF26;
+pub static XK_Hiragana_Katakana: libc::c_uint = 0xFF27;
+pub static XK_Zenkaku: libc::c_uint = 0xFF28;
+pub static XK_Hankaku: libc::c_uint = 0xFF29;
+pub static XK_Zenkaku_Hankaku: libc::c_uint = 0xFF2A;
+pub static XK_Touroku: libc::c_uint = 0xFF2B;
+pub static XK_Massyo: libc::c_uint = 0xFF2C;
+pub static XK_Kana_Lock: libc::c_uint = 0xFF2D;
+pub static XK_Kana_Shift: libc::c_uint = 0xFF2E;
+pub static XK_Eisu_Shift: libc::c_uint = 0xFF2F;
+pub static XK_Eisu_toggle: libc::c_uint = 0xFF30;
+pub static XK_Home: libc::c_uint = 0xFF50;
+pub static XK_Left: libc::c_uint = 0xFF51;
+pub static XK_Up: libc::c_uint = 0xFF52;
+pub static XK_Right: libc::c_uint = 0xFF53;
+pub static XK_Down: libc::c_uint = 0xFF54;
+pub static XK_Prior: libc::c_uint = 0xFF55;
+pub static XK_Page_Up: libc::c_uint = 0xFF55;
+pub static XK_Next: libc::c_uint = 0xFF56;
+pub static XK_Page_Down: libc::c_uint = 0xFF56;
+pub static XK_End: libc::c_uint = 0xFF57;
+pub static XK_Begin: libc::c_uint = 0xFF58;
+pub static XK_Win_L: libc::c_uint = 0xFF5B;
+pub static XK_Win_R: libc::c_uint = 0xFF5C;
+pub static XK_App: libc::c_uint = 0xFF5D;
+pub static XK_Select: libc::c_uint = 0xFF60;
+pub static XK_Print: libc::c_uint = 0xFF61;
+pub static XK_Execute: libc::c_uint = 0xFF62;
+pub static XK_Insert: libc::c_uint = 0xFF63;
+pub static XK_Undo: libc::c_uint = 0xFF65;
+pub static XK_Redo: libc::c_uint = 0xFF66;
+pub static XK_Menu: libc::c_uint = 0xFF67;
+pub static XK_Find: libc::c_uint = 0xFF68;
+pub static XK_Cancel: libc::c_uint = 0xFF69;
+pub static XK_Help: libc::c_uint = 0xFF6A;
+pub static XK_Break: libc::c_uint = 0xFF6B;
+pub static XK_Mode_switch: libc::c_uint = 0xFF7E;
+pub static XK_script_switch: libc::c_uint = 0xFF7E;
+pub static XK_Num_Lock: libc::c_uint = 0xFF7F;
+pub static XK_KP_Space: libc::c_uint = 0xFF80;
+pub static XK_KP_Tab: libc::c_uint = 0xFF89;
+pub static XK_KP_Enter: libc::c_uint = 0xFF8D;
+pub static XK_KP_F1: libc::c_uint = 0xFF91;
+pub static XK_KP_F2: libc::c_uint = 0xFF92;
+pub static XK_KP_F3: libc::c_uint = 0xFF93;
+pub static XK_KP_F4: libc::c_uint = 0xFF94;
+pub static XK_KP_Home: libc::c_uint = 0xFF95;
+pub static XK_KP_Left: libc::c_uint = 0xFF96;
+pub static XK_KP_Up: libc::c_uint = 0xFF97;
+pub static XK_KP_Right: libc::c_uint = 0xFF98;
+pub static XK_KP_Down: libc::c_uint = 0xFF99;
+pub static XK_KP_Prior: libc::c_uint = 0xFF9A;
+pub static XK_KP_Page_Up: libc::c_uint = 0xFF9A;
+pub static XK_KP_Next: libc::c_uint = 0xFF9B;
+pub static XK_KP_Page_Down: libc::c_uint = 0xFF9B;
+pub static XK_KP_End: libc::c_uint = 0xFF9C;
+pub static XK_KP_Begin: libc::c_uint = 0xFF9D;
+pub static XK_KP_Insert: libc::c_uint = 0xFF9E;
+pub static XK_KP_Delete: libc::c_uint = 0xFF9F;
+pub static XK_KP_Equal: libc::c_uint = 0xFFBD;
+pub static XK_KP_Multiply: libc::c_uint = 0xFFAA;
+pub static XK_KP_Add: libc::c_uint = 0xFFAB;
+pub static XK_KP_Separator: libc::c_uint = 0xFFAC;
+pub static XK_KP_Subtract: libc::c_uint = 0xFFAD;
+pub static XK_KP_Decimal: libc::c_uint = 0xFFAE;
+pub static XK_KP_Divide: libc::c_uint = 0xFFAF;
+pub static XK_KP_0: libc::c_uint = 0xFFB0;
+pub static XK_KP_1: libc::c_uint = 0xFFB1;
+pub static XK_KP_2: libc::c_uint = 0xFFB2;
+pub static XK_KP_3: libc::c_uint = 0xFFB3;
+pub static XK_KP_4: libc::c_uint = 0xFFB4;
+pub static XK_KP_5: libc::c_uint = 0xFFB5;
+pub static XK_KP_6: libc::c_uint = 0xFFB6;
+pub static XK_KP_7: libc::c_uint = 0xFFB7;
+pub static XK_KP_8: libc::c_uint = 0xFFB8;
+pub static XK_KP_9: libc::c_uint = 0xFFB9;
+pub static XK_F1: libc::c_uint = 0xFFBE;
+pub static XK_F2: libc::c_uint = 0xFFBF;
+pub static XK_F3: libc::c_uint = 0xFFC0;
+pub static XK_F4: libc::c_uint = 0xFFC1;
+pub static XK_F5: libc::c_uint = 0xFFC2;
+pub static XK_F6: libc::c_uint = 0xFFC3;
+pub static XK_F7: libc::c_uint = 0xFFC4;
+pub static XK_F8: libc::c_uint = 0xFFC5;
+pub static XK_F9: libc::c_uint = 0xFFC6;
+pub static XK_F10: libc::c_uint = 0xFFC7;
+pub static XK_F11: libc::c_uint = 0xFFC8;
+pub static XK_L1: libc::c_uint = 0xFFC8;
+pub static XK_F12: libc::c_uint = 0xFFC9;
+pub static XK_L2: libc::c_uint = 0xFFC9;
+pub static XK_F13: libc::c_uint = 0xFFCA;
+pub static XK_L3: libc::c_uint = 0xFFCA;
+pub static XK_F14: libc::c_uint = 0xFFCB;
+pub static XK_L4: libc::c_uint = 0xFFCB;
+pub static XK_F15: libc::c_uint = 0xFFCC;
+pub static XK_L5: libc::c_uint = 0xFFCC;
+pub static XK_F16: libc::c_uint = 0xFFCD;
+pub static XK_L6: libc::c_uint = 0xFFCD;
+pub static XK_F17: libc::c_uint = 0xFFCE;
+pub static XK_L7: libc::c_uint = 0xFFCE;
+pub static XK_F18: libc::c_uint = 0xFFCF;
+pub static XK_L8: libc::c_uint = 0xFFCF;
+pub static XK_F19: libc::c_uint = 0xFFD0;
+pub static XK_L9: libc::c_uint = 0xFFD0;
+pub static XK_F20: libc::c_uint = 0xFFD1;
+pub static XK_L10: libc::c_uint = 0xFFD1;
+pub static XK_F21: libc::c_uint = 0xFFD2;
+pub static XK_R1: libc::c_uint = 0xFFD2;
+pub static XK_F22: libc::c_uint = 0xFFD3;
+pub static XK_R2: libc::c_uint = 0xFFD3;
+pub static XK_F23: libc::c_uint = 0xFFD4;
+pub static XK_R3: libc::c_uint = 0xFFD4;
+pub static XK_F24: libc::c_uint = 0xFFD5;
+pub static XK_R4: libc::c_uint = 0xFFD5;
+pub static XK_F25: libc::c_uint = 0xFFD6;
+pub static XK_R5: libc::c_uint = 0xFFD6;
+pub static XK_F26: libc::c_uint = 0xFFD7;
+pub static XK_R6: libc::c_uint = 0xFFD7;
+pub static XK_F27: libc::c_uint = 0xFFD8;
+pub static XK_R7: libc::c_uint = 0xFFD8;
+pub static XK_F28: libc::c_uint = 0xFFD9;
+pub static XK_R8: libc::c_uint = 0xFFD9;
+pub static XK_F29: libc::c_uint = 0xFFDA;
+pub static XK_R9: libc::c_uint = 0xFFDA;
+pub static XK_F30: libc::c_uint = 0xFFDB;
+pub static XK_R10: libc::c_uint = 0xFFDB;
+pub static XK_F31: libc::c_uint = 0xFFDC;
+pub static XK_R11: libc::c_uint = 0xFFDC;
+pub static XK_F32: libc::c_uint = 0xFFDD;
+pub static XK_R12: libc::c_uint = 0xFFDD;
+pub static XK_F33: libc::c_uint = 0xFFDE;
+pub static XK_R13: libc::c_uint = 0xFFDE;
+pub static XK_F34: libc::c_uint = 0xFFDF;
+pub static XK_R14: libc::c_uint = 0xFFDF;
+pub static XK_F35: libc::c_uint = 0xFFE0;
+pub static XK_R15: libc::c_uint = 0xFFE0;
+pub static XK_Shift_L: libc::c_uint = 0xFFE1;
+pub static XK_Shift_R: libc::c_uint = 0xFFE2;
+pub static XK_Control_L: libc::c_uint = 0xFFE3;
+pub static XK_Control_R: libc::c_uint = 0xFFE4;
+pub static XK_Caps_Lock: libc::c_uint = 0xFFE5;
+pub static XK_Shift_Lock: libc::c_uint = 0xFFE6;
+pub static XK_Meta_L: libc::c_uint = 0xFFE7;
+pub static XK_Meta_R: libc::c_uint = 0xFFE8;
+pub static XK_Alt_L: libc::c_uint = 0xFFE9;
+pub static XK_Alt_R: libc::c_uint = 0xFFEA;
+pub static XK_Super_L: libc::c_uint = 0xFFEB;
+pub static XK_Super_R: libc::c_uint = 0xFFEC;
+pub static XK_Hyper_L: libc::c_uint = 0xFFED;
+pub static XK_Hyper_R: libc::c_uint = 0xFFEE;
+pub static XK_space: libc::c_uint = 0x020;
+pub static XK_exclam: libc::c_uint = 0x021;
+pub static XK_quotedbl: libc::c_uint = 0x022;
+pub static XK_numbersign: libc::c_uint = 0x023;
+pub static XK_dollar: libc::c_uint = 0x024;
+pub static XK_percent: libc::c_uint = 0x025;
+pub static XK_ampersand: libc::c_uint = 0x026;
+pub static XK_apostrophe: libc::c_uint = 0x027;
+pub static XK_quoteright: libc::c_uint = 0x027;
+pub static XK_parenleft: libc::c_uint = 0x028;
+pub static XK_parenright: libc::c_uint = 0x029;
+pub static XK_asterisk: libc::c_uint = 0x02a;
+pub static XK_plus: libc::c_uint = 0x02b;
+pub static XK_comma: libc::c_uint = 0x02c;
+pub static XK_minus: libc::c_uint = 0x02d;
+pub static XK_period: libc::c_uint = 0x02e;
+pub static XK_slash: libc::c_uint = 0x02f;
+pub static XK_0: libc::c_uint = 0x030;
+pub static XK_1: libc::c_uint = 0x031;
+pub static XK_2: libc::c_uint = 0x032;
+pub static XK_3: libc::c_uint = 0x033;
+pub static XK_4: libc::c_uint = 0x034;
+pub static XK_5: libc::c_uint = 0x035;
+pub static XK_6: libc::c_uint = 0x036;
+pub static XK_7: libc::c_uint = 0x037;
+pub static XK_8: libc::c_uint = 0x038;
+pub static XK_9: libc::c_uint = 0x039;
+pub static XK_colon: libc::c_uint = 0x03a;
+pub static XK_semicolon: libc::c_uint = 0x03b;
+pub static XK_less: libc::c_uint = 0x03c;
+pub static XK_equal: libc::c_uint = 0x03d;
+pub static XK_greater: libc::c_uint = 0x03e;
+pub static XK_question: libc::c_uint = 0x03f;
+pub static XK_at: libc::c_uint = 0x040;
+pub static XK_A: libc::c_uint = 0x041;
+pub static XK_B: libc::c_uint = 0x042;
+pub static XK_C: libc::c_uint = 0x043;
+pub static XK_D: libc::c_uint = 0x044;
+pub static XK_E: libc::c_uint = 0x045;
+pub static XK_F: libc::c_uint = 0x046;
+pub static XK_G: libc::c_uint = 0x047;
+pub static XK_H: libc::c_uint = 0x048;
+pub static XK_I: libc::c_uint = 0x049;
+pub static XK_J: libc::c_uint = 0x04a;
+pub static XK_K: libc::c_uint = 0x04b;
+pub static XK_L: libc::c_uint = 0x04c;
+pub static XK_M: libc::c_uint = 0x04d;
+pub static XK_N: libc::c_uint = 0x04e;
+pub static XK_O: libc::c_uint = 0x04f;
+pub static XK_P: libc::c_uint = 0x050;
+pub static XK_Q: libc::c_uint = 0x051;
+pub static XK_R: libc::c_uint = 0x052;
+pub static XK_S: libc::c_uint = 0x053;
+pub static XK_T: libc::c_uint = 0x054;
+pub static XK_U: libc::c_uint = 0x055;
+pub static XK_V: libc::c_uint = 0x056;
+pub static XK_W: libc::c_uint = 0x057;
+pub static XK_X: libc::c_uint = 0x058;
+pub static XK_Y: libc::c_uint = 0x059;
+pub static XK_Z: libc::c_uint = 0x05a;
+pub static XK_bracketleft: libc::c_uint = 0x05b;
+pub static XK_backslash: libc::c_uint = 0x05c;
+pub static XK_bracketright: libc::c_uint = 0x05d;
+pub static XK_asciicircum: libc::c_uint = 0x05e;
+pub static XK_underscore: libc::c_uint = 0x05f;
+pub static XK_grave: libc::c_uint = 0x060;
+pub static XK_quoteleft: libc::c_uint = 0x060;
+pub static XK_a: libc::c_uint = 0x061;
+pub static XK_b: libc::c_uint = 0x062;
+pub static XK_c: libc::c_uint = 0x063;
+pub static XK_d: libc::c_uint = 0x064;
+pub static XK_e: libc::c_uint = 0x065;
+pub static XK_f: libc::c_uint = 0x066;
+pub static XK_g: libc::c_uint = 0x067;
+pub static XK_h: libc::c_uint = 0x068;
+pub static XK_i: libc::c_uint = 0x069;
+pub static XK_j: libc::c_uint = 0x06a;
+pub static XK_k: libc::c_uint = 0x06b;
+pub static XK_l: libc::c_uint = 0x06c;
+pub static XK_m: libc::c_uint = 0x06d;
+pub static XK_n: libc::c_uint = 0x06e;
+pub static XK_o: libc::c_uint = 0x06f;
+pub static XK_p: libc::c_uint = 0x070;
+pub static XK_q: libc::c_uint = 0x071;
+pub static XK_r: libc::c_uint = 0x072;
+pub static XK_s: libc::c_uint = 0x073;
+pub static XK_t: libc::c_uint = 0x074;
+pub static XK_u: libc::c_uint = 0x075;
+pub static XK_v: libc::c_uint = 0x076;
+pub static XK_w: libc::c_uint = 0x077;
+pub static XK_x: libc::c_uint = 0x078;
+pub static XK_y: libc::c_uint = 0x079;
+pub static XK_z: libc::c_uint = 0x07a;
+pub static XK_braceleft: libc::c_uint = 0x07b;
+pub static XK_bar: libc::c_uint = 0x07c;
+pub static XK_braceright: libc::c_uint = 0x07d;
+pub static XK_asciitilde: libc::c_uint = 0x07e;
+pub static XK_nobreakspace: libc::c_uint = 0x0a0;
+pub static XK_exclamdown: libc::c_uint = 0x0a1;
+pub static XK_cent: libc::c_uint = 0x0a2;
+pub static XK_sterling: libc::c_uint = 0x0a3;
+pub static XK_currency: libc::c_uint = 0x0a4;
+pub static XK_yen: libc::c_uint = 0x0a5;
+pub static XK_brokenbar: libc::c_uint = 0x0a6;
+pub static XK_section: libc::c_uint = 0x0a7;
+pub static XK_diaeresis: libc::c_uint = 0x0a8;
+pub static XK_copyright: libc::c_uint = 0x0a9;
+pub static XK_ordfeminine: libc::c_uint = 0x0aa;
+pub static XK_guillemotleft: libc::c_uint = 0x0ab;
+pub static XK_notsign: libc::c_uint = 0x0ac;
+pub static XK_hyphen: libc::c_uint = 0x0ad;
+pub static XK_registered: libc::c_uint = 0x0ae;
+pub static XK_macron: libc::c_uint = 0x0af;
+pub static XK_degree: libc::c_uint = 0x0b0;
+pub static XK_plusminus: libc::c_uint = 0x0b1;
+pub static XK_twosuperior: libc::c_uint = 0x0b2;
+pub static XK_threesuperior: libc::c_uint = 0x0b3;
+pub static XK_acute: libc::c_uint = 0x0b4;
+pub static XK_mu: libc::c_uint = 0x0b5;
+pub static XK_paragraph: libc::c_uint = 0x0b6;
+pub static XK_periodcentered: libc::c_uint = 0x0b7;
+pub static XK_cedilla: libc::c_uint = 0x0b8;
+pub static XK_onesuperior: libc::c_uint = 0x0b9;
+pub static XK_masculine: libc::c_uint = 0x0ba;
+pub static XK_guillemotright: libc::c_uint = 0x0bb;
+pub static XK_onequarter: libc::c_uint = 0x0bc;
+pub static XK_onehalf: libc::c_uint = 0x0bd;
+pub static XK_threequarters: libc::c_uint = 0x0be;
+pub static XK_questiondown: libc::c_uint = 0x0bf;
+pub static XK_Agrave: libc::c_uint = 0x0c0;
+pub static XK_Aacute: libc::c_uint = 0x0c1;
+pub static XK_Acircumflex: libc::c_uint = 0x0c2;
+pub static XK_Atilde: libc::c_uint = 0x0c3;
+pub static XK_Adiaeresis: libc::c_uint = 0x0c4;
+pub static XK_Aring: libc::c_uint = 0x0c5;
+pub static XK_AE: libc::c_uint = 0x0c6;
+pub static XK_Ccedilla: libc::c_uint = 0x0c7;
+pub static XK_Egrave: libc::c_uint = 0x0c8;
+pub static XK_Eacute: libc::c_uint = 0x0c9;
+pub static XK_Ecircumflex: libc::c_uint = 0x0ca;
+pub static XK_Ediaeresis: libc::c_uint = 0x0cb;
+pub static XK_Igrave: libc::c_uint = 0x0cc;
+pub static XK_Iacute: libc::c_uint = 0x0cd;
+pub static XK_Icircumflex: libc::c_uint = 0x0ce;
+pub static XK_Idiaeresis: libc::c_uint = 0x0cf;
+pub static XK_ETH: libc::c_uint = 0x0d0;
+pub static XK_Eth: libc::c_uint = 0x0d0;
+pub static XK_Ntilde: libc::c_uint = 0x0d1;
+pub static XK_Ograve: libc::c_uint = 0x0d2;
+pub static XK_Oacute: libc::c_uint = 0x0d3;
+pub static XK_Ocircumflex: libc::c_uint = 0x0d4;
+pub static XK_Otilde: libc::c_uint = 0x0d5;
+pub static XK_Odiaeresis: libc::c_uint = 0x0d6;
+pub static XK_multiply: libc::c_uint = 0x0d7;
+pub static XK_Ooblique: libc::c_uint = 0x0d8;
+pub static XK_Ugrave: libc::c_uint = 0x0d9;
+pub static XK_Uacute: libc::c_uint = 0x0da;
+pub static XK_Ucircumflex: libc::c_uint = 0x0db;
+pub static XK_Udiaeresis: libc::c_uint = 0x0dc;
+pub static XK_Yacute: libc::c_uint = 0x0dd;
+pub static XK_THORN: libc::c_uint = 0x0de;
+pub static XK_Thorn: libc::c_uint = 0x0de;
+pub static XK_ssharp: libc::c_uint = 0x0df;
+pub static XK_agrave: libc::c_uint = 0x0e0;
+pub static XK_aacute: libc::c_uint = 0x0e1;
+pub static XK_acircumflex: libc::c_uint = 0x0e2;
+pub static XK_atilde: libc::c_uint = 0x0e3;
+pub static XK_adiaeresis: libc::c_uint = 0x0e4;
+pub static XK_aring: libc::c_uint = 0x0e5;
+pub static XK_ae: libc::c_uint = 0x0e6;
+pub static XK_ccedilla: libc::c_uint = 0x0e7;
+pub static XK_egrave: libc::c_uint = 0x0e8;
+pub static XK_eacute: libc::c_uint = 0x0e9;
+pub static XK_ecircumflex: libc::c_uint = 0x0ea;
+pub static XK_ediaeresis: libc::c_uint = 0x0eb;
+pub static XK_igrave: libc::c_uint = 0x0ec;
+pub static XK_iacute: libc::c_uint = 0x0ed;
+pub static XK_icircumflex: libc::c_uint = 0x0ee;
+pub static XK_idiaeresis: libc::c_uint = 0x0ef;
+pub static XK_eth: libc::c_uint = 0x0f0;
+pub static XK_ntilde: libc::c_uint = 0x0f1;
+pub static XK_ograve: libc::c_uint = 0x0f2;
+pub static XK_oacute: libc::c_uint = 0x0f3;
+pub static XK_ocircumflex: libc::c_uint = 0x0f4;
+pub static XK_otilde: libc::c_uint = 0x0f5;
+pub static XK_odiaeresis: libc::c_uint = 0x0f6;
+pub static XK_division: libc::c_uint = 0x0f7;
+pub static XK_oslash: libc::c_uint = 0x0f8;
+pub static XK_ugrave: libc::c_uint = 0x0f9;
+pub static XK_uacute: libc::c_uint = 0x0fa;
+pub static XK_ucircumflex: libc::c_uint = 0x0fb;
+pub static XK_udiaeresis: libc::c_uint = 0x0fc;
+pub static XK_yacute: libc::c_uint = 0x0fd;
+pub static XK_thorn: libc::c_uint = 0x0fe;
+pub static XK_ydiaeresis: libc::c_uint = 0x0ff;
+pub static XK_Aogonek: libc::c_uint = 0x1a1;
+pub static XK_breve: libc::c_uint = 0x1a2;
+pub static XK_Lstroke: libc::c_uint = 0x1a3;
+pub static XK_Lcaron: libc::c_uint = 0x1a5;
+pub static XK_Sacute: libc::c_uint = 0x1a6;
+pub static XK_Scaron: libc::c_uint = 0x1a9;
+pub static XK_Scedilla: libc::c_uint = 0x1aa;
+pub static XK_Tcaron: libc::c_uint = 0x1ab;
+pub static XK_Zacute: libc::c_uint = 0x1ac;
+pub static XK_Zcaron: libc::c_uint = 0x1ae;
+pub static XK_Zabovedot: libc::c_uint = 0x1af;
+pub static XK_aogonek: libc::c_uint = 0x1b1;
+pub static XK_ogonek: libc::c_uint = 0x1b2;
+pub static XK_lstroke: libc::c_uint = 0x1b3;
+pub static XK_lcaron: libc::c_uint = 0x1b5;
+pub static XK_sacute: libc::c_uint = 0x1b6;
+pub static XK_caron: libc::c_uint = 0x1b7;
+pub static XK_scaron: libc::c_uint = 0x1b9;
+pub static XK_scedilla: libc::c_uint = 0x1ba;
+pub static XK_tcaron: libc::c_uint = 0x1bb;
+pub static XK_zacute: libc::c_uint = 0x1bc;
+pub static XK_doubleacute: libc::c_uint = 0x1bd;
+pub static XK_zcaron: libc::c_uint = 0x1be;
+pub static XK_zabovedot: libc::c_uint = 0x1bf;
+pub static XK_Racute: libc::c_uint = 0x1c0;
+pub static XK_Abreve: libc::c_uint = 0x1c3;
+pub static XK_Lacute: libc::c_uint = 0x1c5;
+pub static XK_Cacute: libc::c_uint = 0x1c6;
+pub static XK_Ccaron: libc::c_uint = 0x1c8;
+pub static XK_Eogonek: libc::c_uint = 0x1ca;
+pub static XK_Ecaron: libc::c_uint = 0x1cc;
+pub static XK_Dcaron: libc::c_uint = 0x1cf;
+pub static XK_Dstroke: libc::c_uint = 0x1d0;
+pub static XK_Nacute: libc::c_uint = 0x1d1;
+pub static XK_Ncaron: libc::c_uint = 0x1d2;
+pub static XK_Odoubleacute: libc::c_uint = 0x1d5;
+pub static XK_Rcaron: libc::c_uint = 0x1d8;
+pub static XK_Uring: libc::c_uint = 0x1d9;
+pub static XK_Udoubleacute: libc::c_uint = 0x1db;
+pub static XK_Tcedilla: libc::c_uint = 0x1de;
+pub static XK_racute: libc::c_uint = 0x1e0;
+pub static XK_abreve: libc::c_uint = 0x1e3;
+pub static XK_lacute: libc::c_uint = 0x1e5;
+pub static XK_cacute: libc::c_uint = 0x1e6;
+pub static XK_ccaron: libc::c_uint = 0x1e8;
+pub static XK_eogonek: libc::c_uint = 0x1ea;
+pub static XK_ecaron: libc::c_uint = 0x1ec;
+pub static XK_dcaron: libc::c_uint = 0x1ef;
+pub static XK_dstroke: libc::c_uint = 0x1f0;
+pub static XK_nacute: libc::c_uint = 0x1f1;
+pub static XK_ncaron: libc::c_uint = 0x1f2;
+pub static XK_odoubleacute: libc::c_uint = 0x1f5;
+pub static XK_udoubleacute: libc::c_uint = 0x1fb;
+pub static XK_rcaron: libc::c_uint = 0x1f8;
+pub static XK_uring: libc::c_uint = 0x1f9;
+pub static XK_tcedilla: libc::c_uint = 0x1fe;
+pub static XK_abovedot: libc::c_uint = 0x1ff;
+pub static XK_Hstroke: libc::c_uint = 0x2a1;
+pub static XK_Hcircumflex: libc::c_uint = 0x2a6;
+pub static XK_Iabovedot: libc::c_uint = 0x2a9;
+pub static XK_Gbreve: libc::c_uint = 0x2ab;
+pub static XK_Jcircumflex: libc::c_uint = 0x2ac;
+pub static XK_hstroke: libc::c_uint = 0x2b1;
+pub static XK_hcircumflex: libc::c_uint = 0x2b6;
+pub static XK_idotless: libc::c_uint = 0x2b9;
+pub static XK_gbreve: libc::c_uint = 0x2bb;
+pub static XK_jcircumflex: libc::c_uint = 0x2bc;
+pub static XK_Cabovedot: libc::c_uint = 0x2c5;
+pub static XK_Ccircumflex: libc::c_uint = 0x2c6;
+pub static XK_Gabovedot: libc::c_uint = 0x2d5;
+pub static XK_Gcircumflex: libc::c_uint = 0x2d8;
+pub static XK_Ubreve: libc::c_uint = 0x2dd;
+pub static XK_Scircumflex: libc::c_uint = 0x2de;
+pub static XK_cabovedot: libc::c_uint = 0x2e5;
+pub static XK_ccircumflex: libc::c_uint = 0x2e6;
+pub static XK_gabovedot: libc::c_uint = 0x2f5;
+pub static XK_gcircumflex: libc::c_uint = 0x2f8;
+pub static XK_ubreve: libc::c_uint = 0x2fd;
+pub static XK_scircumflex: libc::c_uint = 0x2fe;
+pub static XK_kra: libc::c_uint = 0x3a2;
+pub static XK_kappa: libc::c_uint = 0x3a2;
+pub static XK_Rcedilla: libc::c_uint = 0x3a3;
+pub static XK_Itilde: libc::c_uint = 0x3a5;
+pub static XK_Lcedilla: libc::c_uint = 0x3a6;
+pub static XK_Emacron: libc::c_uint = 0x3aa;
+pub static XK_Gcedilla: libc::c_uint = 0x3ab;
+pub static XK_Tslash: libc::c_uint = 0x3ac;
+pub static XK_rcedilla: libc::c_uint = 0x3b3;
+pub static XK_itilde: libc::c_uint = 0x3b5;
+pub static XK_lcedilla: libc::c_uint = 0x3b6;
+pub static XK_emacron: libc::c_uint = 0x3ba;
+pub static XK_gcedilla: libc::c_uint = 0x3bb;
+pub static XK_tslash: libc::c_uint = 0x3bc;
+pub static XK_ENG: libc::c_uint = 0x3bd;
+pub static XK_eng: libc::c_uint = 0x3bf;
+pub static XK_Amacron: libc::c_uint = 0x3c0;
+pub static XK_Iogonek: libc::c_uint = 0x3c7;
+pub static XK_Eabovedot: libc::c_uint = 0x3cc;
+pub static XK_Imacron: libc::c_uint = 0x3cf;
+pub static XK_Ncedilla: libc::c_uint = 0x3d1;
+pub static XK_Omacron: libc::c_uint = 0x3d2;
+pub static XK_Kcedilla: libc::c_uint = 0x3d3;
+pub static XK_Uogonek: libc::c_uint = 0x3d9;
+pub static XK_Utilde: libc::c_uint = 0x3dd;
+pub static XK_Umacron: libc::c_uint = 0x3de;
+pub static XK_amacron: libc::c_uint = 0x3e0;
+pub static XK_iogonek: libc::c_uint = 0x3e7;
+pub static XK_eabovedot: libc::c_uint = 0x3ec;
+pub static XK_imacron: libc::c_uint = 0x3ef;
+pub static XK_ncedilla: libc::c_uint = 0x3f1;
+pub static XK_omacron: libc::c_uint = 0x3f2;
+pub static XK_kcedilla: libc::c_uint = 0x3f3;
+pub static XK_uogonek: libc::c_uint = 0x3f9;
+pub static XK_utilde: libc::c_uint = 0x3fd;
+pub static XK_umacron: libc::c_uint = 0x3fe;
+pub static XK_overline: libc::c_uint = 0x47e;
+pub static XK_kana_fullstop: libc::c_uint = 0x4a1;
+pub static XK_kana_openingbracket: libc::c_uint = 0x4a2;
+pub static XK_kana_closingbracket: libc::c_uint = 0x4a3;
+pub static XK_kana_comma: libc::c_uint = 0x4a4;
+pub static XK_kana_conjunctive: libc::c_uint = 0x4a5;
+pub static XK_kana_middledot: libc::c_uint = 0x4a5;
+pub static XK_kana_WO: libc::c_uint = 0x4a6;
+pub static XK_kana_a: libc::c_uint = 0x4a7;
+pub static XK_kana_i: libc::c_uint = 0x4a8;
+pub static XK_kana_u: libc::c_uint = 0x4a9;
+pub static XK_kana_e: libc::c_uint = 0x4aa;
+pub static XK_kana_o: libc::c_uint = 0x4ab;
+pub static XK_kana_ya: libc::c_uint = 0x4ac;
+pub static XK_kana_yu: libc::c_uint = 0x4ad;
+pub static XK_kana_yo: libc::c_uint = 0x4ae;
+pub static XK_kana_tsu: libc::c_uint = 0x4af;
+pub static XK_kana_tu: libc::c_uint = 0x4af;
+pub static XK_prolongedsound: libc::c_uint = 0x4b0;
+pub static XK_kana_A: libc::c_uint = 0x4b1;
+pub static XK_kana_I: libc::c_uint = 0x4b2;
+pub static XK_kana_U: libc::c_uint = 0x4b3;
+pub static XK_kana_E: libc::c_uint = 0x4b4;
+pub static XK_kana_O: libc::c_uint = 0x4b5;
+pub static XK_kana_KA: libc::c_uint = 0x4b6;
+pub static XK_kana_KI: libc::c_uint = 0x4b7;
+pub static XK_kana_KU: libc::c_uint = 0x4b8;
+pub static XK_kana_KE: libc::c_uint = 0x4b9;
+pub static XK_kana_KO: libc::c_uint = 0x4ba;
+pub static XK_kana_SA: libc::c_uint = 0x4bb;
+pub static XK_kana_SHI: libc::c_uint = 0x4bc;
+pub static XK_kana_SU: libc::c_uint = 0x4bd;
+pub static XK_kana_SE: libc::c_uint = 0x4be;
+pub static XK_kana_SO: libc::c_uint = 0x4bf;
+pub static XK_kana_TA: libc::c_uint = 0x4c0;
+pub static XK_kana_CHI: libc::c_uint = 0x4c1;
+pub static XK_kana_TI: libc::c_uint = 0x4c1;
+pub static XK_kana_TSU: libc::c_uint = 0x4c2;
+pub static XK_kana_TU: libc::c_uint = 0x4c2;
+pub static XK_kana_TE: libc::c_uint = 0x4c3;
+pub static XK_kana_TO: libc::c_uint = 0x4c4;
+pub static XK_kana_NA: libc::c_uint = 0x4c5;
+pub static XK_kana_NI: libc::c_uint = 0x4c6;
+pub static XK_kana_NU: libc::c_uint = 0x4c7;
+pub static XK_kana_NE: libc::c_uint = 0x4c8;
+pub static XK_kana_NO: libc::c_uint = 0x4c9;
+pub static XK_kana_HA: libc::c_uint = 0x4ca;
+pub static XK_kana_HI: libc::c_uint = 0x4cb;
+pub static XK_kana_FU: libc::c_uint = 0x4cc;
+pub static XK_kana_HU: libc::c_uint = 0x4cc;
+pub static XK_kana_HE: libc::c_uint = 0x4cd;
+pub static XK_kana_HO: libc::c_uint = 0x4ce;
+pub static XK_kana_MA: libc::c_uint = 0x4cf;
+pub static XK_kana_MI: libc::c_uint = 0x4d0;
+pub static XK_kana_MU: libc::c_uint = 0x4d1;
+pub static XK_kana_ME: libc::c_uint = 0x4d2;
+pub static XK_kana_MO: libc::c_uint = 0x4d3;
+pub static XK_kana_YA: libc::c_uint = 0x4d4;
+pub static XK_kana_YU: libc::c_uint = 0x4d5;
+pub static XK_kana_YO: libc::c_uint = 0x4d6;
+pub static XK_kana_RA: libc::c_uint = 0x4d7;
+pub static XK_kana_RI: libc::c_uint = 0x4d8;
+pub static XK_kana_RU: libc::c_uint = 0x4d9;
+pub static XK_kana_RE: libc::c_uint = 0x4da;
+pub static XK_kana_RO: libc::c_uint = 0x4db;
+pub static XK_kana_WA: libc::c_uint = 0x4dc;
+pub static XK_kana_N: libc::c_uint = 0x4dd;
+pub static XK_voicedsound: libc::c_uint = 0x4de;
+pub static XK_semivoicedsound: libc::c_uint = 0x4df;
+pub static XK_kana_switch: libc::c_uint = 0xFF7E;
+pub static XK_Arabic_comma: libc::c_uint = 0x5ac;
+pub static XK_Arabic_semicolon: libc::c_uint = 0x5bb;
+pub static XK_Arabic_question_mark: libc::c_uint = 0x5bf;
+pub static XK_Arabic_hamza: libc::c_uint = 0x5c1;
+pub static XK_Arabic_maddaonalef: libc::c_uint = 0x5c2;
+pub static XK_Arabic_hamzaonalef: libc::c_uint = 0x5c3;
+pub static XK_Arabic_hamzaonwaw: libc::c_uint = 0x5c4;
+pub static XK_Arabic_hamzaunderalef: libc::c_uint = 0x5c5;
+pub static XK_Arabic_hamzaonyeh: libc::c_uint = 0x5c6;
+pub static XK_Arabic_alef: libc::c_uint = 0x5c7;
+pub static XK_Arabic_beh: libc::c_uint = 0x5c8;
+pub static XK_Arabic_tehmarbuta: libc::c_uint = 0x5c9;
+pub static XK_Arabic_teh: libc::c_uint = 0x5ca;
+pub static XK_Arabic_theh: libc::c_uint = 0x5cb;
+pub static XK_Arabic_jeem: libc::c_uint = 0x5cc;
+pub static XK_Arabic_hah: libc::c_uint = 0x5cd;
+pub static XK_Arabic_khah: libc::c_uint = 0x5ce;
+pub static XK_Arabic_dal: libc::c_uint = 0x5cf;
+pub static XK_Arabic_thal: libc::c_uint = 0x5d0;
+pub static XK_Arabic_ra: libc::c_uint = 0x5d1;
+pub static XK_Arabic_zain: libc::c_uint = 0x5d2;
+pub static XK_Arabic_seen: libc::c_uint = 0x5d3;
+pub static XK_Arabic_sheen: libc::c_uint = 0x5d4;
+pub static XK_Arabic_sad: libc::c_uint = 0x5d5;
+pub static XK_Arabic_dad: libc::c_uint = 0x5d6;
+pub static XK_Arabic_tah: libc::c_uint = 0x5d7;
+pub static XK_Arabic_zah: libc::c_uint = 0x5d8;
+pub static XK_Arabic_ain: libc::c_uint = 0x5d9;
+pub static XK_Arabic_ghain: libc::c_uint = 0x5da;
+pub static XK_Arabic_tatweel: libc::c_uint = 0x5e0;
+pub static XK_Arabic_feh: libc::c_uint = 0x5e1;
+pub static XK_Arabic_qaf: libc::c_uint = 0x5e2;
+pub static XK_Arabic_kaf: libc::c_uint = 0x5e3;
+pub static XK_Arabic_lam: libc::c_uint = 0x5e4;
+pub static XK_Arabic_meem: libc::c_uint = 0x5e5;
+pub static XK_Arabic_noon: libc::c_uint = 0x5e6;
+pub static XK_Arabic_ha: libc::c_uint = 0x5e7;
+pub static XK_Arabic_heh: libc::c_uint = 0x5e7;
+pub static XK_Arabic_waw: libc::c_uint = 0x5e8;
+pub static XK_Arabic_alefmaksura: libc::c_uint = 0x5e9;
+pub static XK_Arabic_yeh: libc::c_uint = 0x5ea;
+pub static XK_Arabic_fathatan: libc::c_uint = 0x5eb;
+pub static XK_Arabic_dammatan: libc::c_uint = 0x5ec;
+pub static XK_Arabic_kasratan: libc::c_uint = 0x5ed;
+pub static XK_Arabic_fatha: libc::c_uint = 0x5ee;
+pub static XK_Arabic_damma: libc::c_uint = 0x5ef;
+pub static XK_Arabic_kasra: libc::c_uint = 0x5f0;
+pub static XK_Arabic_shadda: libc::c_uint = 0x5f1;
+pub static XK_Arabic_sukun: libc::c_uint = 0x5f2;
+pub static XK_Arabic_switch: libc::c_uint = 0xFF7E;
+pub static XK_Serbian_dje: libc::c_uint = 0x6a1;
+pub static XK_Macedonia_gje: libc::c_uint = 0x6a2;
+pub static XK_Cyrillic_io: libc::c_uint = 0x6a3;
+pub static XK_Ukrainian_ie: libc::c_uint = 0x6a4;
+pub static XK_Ukranian_je: libc::c_uint = 0x6a4;
+pub static XK_Macedonia_dse: libc::c_uint = 0x6a5;
+pub static XK_Ukrainian_i: libc::c_uint = 0x6a6;
+pub static XK_Ukranian_i: libc::c_uint = 0x6a6;
+pub static XK_Ukrainian_yi: libc::c_uint = 0x6a7;
+pub static XK_Ukranian_yi: libc::c_uint = 0x6a7;
+pub static XK_Cyrillic_je: libc::c_uint = 0x6a8;
+pub static XK_Serbian_je: libc::c_uint = 0x6a8;
+pub static XK_Cyrillic_lje: libc::c_uint = 0x6a9;
+pub static XK_Serbian_lje: libc::c_uint = 0x6a9;
+pub static XK_Cyrillic_nje: libc::c_uint = 0x6aa;
+pub static XK_Serbian_nje: libc::c_uint = 0x6aa;
+pub static XK_Serbian_tshe: libc::c_uint = 0x6ab;
+pub static XK_Macedonia_kje: libc::c_uint = 0x6ac;
+pub static XK_Byelorussian_shortu: libc::c_uint = 0x6ae;
+pub static XK_Cyrillic_dzhe: libc::c_uint = 0x6af;
+pub static XK_Serbian_dze: libc::c_uint = 0x6af;
+pub static XK_numerosign: libc::c_uint = 0x6b0;
+pub static XK_Serbian_DJE: libc::c_uint = 0x6b1;
+pub static XK_Macedonia_GJE: libc::c_uint = 0x6b2;
+pub static XK_Cyrillic_IO: libc::c_uint = 0x6b3;
+pub static XK_Ukrainian_IE: libc::c_uint = 0x6b4;
+pub static XK_Ukranian_JE: libc::c_uint = 0x6b4;
+pub static XK_Macedonia_DSE: libc::c_uint = 0x6b5;
+pub static XK_Ukrainian_I: libc::c_uint = 0x6b6;
+pub static XK_Ukranian_I: libc::c_uint = 0x6b6;
+pub static XK_Ukrainian_YI: libc::c_uint = 0x6b7;
+pub static XK_Ukranian_YI: libc::c_uint = 0x6b7;
+pub static XK_Cyrillic_JE: libc::c_uint = 0x6b8;
+pub static XK_Serbian_JE: libc::c_uint = 0x6b8;
+pub static XK_Cyrillic_LJE: libc::c_uint = 0x6b9;
+pub static XK_Serbian_LJE: libc::c_uint = 0x6b9;
+pub static XK_Cyrillic_NJE: libc::c_uint = 0x6ba;
+pub static XK_Serbian_NJE: libc::c_uint = 0x6ba;
+pub static XK_Serbian_TSHE: libc::c_uint = 0x6bb;
+pub static XK_Macedonia_KJE: libc::c_uint = 0x6bc;
+pub static XK_Byelorussian_SHORTU: libc::c_uint = 0x6be;
+pub static XK_Cyrillic_DZHE: libc::c_uint = 0x6bf;
+pub static XK_Serbian_DZE: libc::c_uint = 0x6bf;
+pub static XK_Cyrillic_yu: libc::c_uint = 0x6c0;
+pub static XK_Cyrillic_a: libc::c_uint = 0x6c1;
+pub static XK_Cyrillic_be: libc::c_uint = 0x6c2;
+pub static XK_Cyrillic_tse: libc::c_uint = 0x6c3;
+pub static XK_Cyrillic_de: libc::c_uint = 0x6c4;
+pub static XK_Cyrillic_ie: libc::c_uint = 0x6c5;
+pub static XK_Cyrillic_ef: libc::c_uint = 0x6c6;
+pub static XK_Cyrillic_ghe: libc::c_uint = 0x6c7;
+pub static XK_Cyrillic_ha: libc::c_uint = 0x6c8;
+pub static XK_Cyrillic_i: libc::c_uint = 0x6c9;
+pub static XK_Cyrillic_shorti: libc::c_uint = 0x6ca;
+pub static XK_Cyrillic_ka: libc::c_uint = 0x6cb;
+pub static XK_Cyrillic_el: libc::c_uint = 0x6cc;
+pub static XK_Cyrillic_em: libc::c_uint = 0x6cd;
+pub static XK_Cyrillic_en: libc::c_uint = 0x6ce;
+pub static XK_Cyrillic_o: libc::c_uint = 0x6cf;
+pub static XK_Cyrillic_pe: libc::c_uint = 0x6d0;
+pub static XK_Cyrillic_ya: libc::c_uint = 0x6d1;
+pub static XK_Cyrillic_er: libc::c_uint = 0x6d2;
+pub static XK_Cyrillic_es: libc::c_uint = 0x6d3;
+pub static XK_Cyrillic_te: libc::c_uint = 0x6d4;
+pub static XK_Cyrillic_u: libc::c_uint = 0x6d5;
+pub static XK_Cyrillic_zhe: libc::c_uint = 0x6d6;
+pub static XK_Cyrillic_ve: libc::c_uint = 0x6d7;
+pub static XK_Cyrillic_softsign: libc::c_uint = 0x6d8;
+pub static XK_Cyrillic_yeru: libc::c_uint = 0x6d9;
+pub static XK_Cyrillic_ze: libc::c_uint = 0x6da;
+pub static XK_Cyrillic_sha: libc::c_uint = 0x6db;
+pub static XK_Cyrillic_e: libc::c_uint = 0x6dc;
+pub static XK_Cyrillic_shcha: libc::c_uint = 0x6dd;
+pub static XK_Cyrillic_che: libc::c_uint = 0x6de;
+pub static XK_Cyrillic_hardsign: libc::c_uint = 0x6df;
+pub static XK_Cyrillic_YU: libc::c_uint = 0x6e0;
+pub static XK_Cyrillic_A: libc::c_uint = 0x6e1;
+pub static XK_Cyrillic_BE: libc::c_uint = 0x6e2;
+pub static XK_Cyrillic_TSE: libc::c_uint = 0x6e3;
+pub static XK_Cyrillic_DE: libc::c_uint = 0x6e4;
+pub static XK_Cyrillic_IE: libc::c_uint = 0x6e5;
+pub static XK_Cyrillic_EF: libc::c_uint = 0x6e6;
+pub static XK_Cyrillic_GHE: libc::c_uint = 0x6e7;
+pub static XK_Cyrillic_HA: libc::c_uint = 0x6e8;
+pub static XK_Cyrillic_I: libc::c_uint = 0x6e9;
+pub static XK_Cyrillic_SHORTI: libc::c_uint = 0x6ea;
+pub static XK_Cyrillic_KA: libc::c_uint = 0x6eb;
+pub static XK_Cyrillic_EL: libc::c_uint = 0x6ec;
+pub static XK_Cyrillic_EM: libc::c_uint = 0x6ed;
+pub static XK_Cyrillic_EN: libc::c_uint = 0x6ee;
+pub static XK_Cyrillic_O: libc::c_uint = 0x6ef;
+pub static XK_Cyrillic_PE: libc::c_uint = 0x6f0;
+pub static XK_Cyrillic_YA: libc::c_uint = 0x6f1;
+pub static XK_Cyrillic_ER: libc::c_uint = 0x6f2;
+pub static XK_Cyrillic_ES: libc::c_uint = 0x6f3;
+pub static XK_Cyrillic_TE: libc::c_uint = 0x6f4;
+pub static XK_Cyrillic_U: libc::c_uint = 0x6f5;
+pub static XK_Cyrillic_ZHE: libc::c_uint = 0x6f6;
+pub static XK_Cyrillic_VE: libc::c_uint = 0x6f7;
+pub static XK_Cyrillic_SOFTSIGN: libc::c_uint = 0x6f8;
+pub static XK_Cyrillic_YERU: libc::c_uint = 0x6f9;
+pub static XK_Cyrillic_ZE: libc::c_uint = 0x6fa;
+pub static XK_Cyrillic_SHA: libc::c_uint = 0x6fb;
+pub static XK_Cyrillic_E: libc::c_uint = 0x6fc;
+pub static XK_Cyrillic_SHCHA: libc::c_uint = 0x6fd;
+pub static XK_Cyrillic_CHE: libc::c_uint = 0x6fe;
+pub static XK_Cyrillic_HARDSIGN: libc::c_uint = 0x6ff;
+pub static XK_Greek_ALPHAaccent: libc::c_uint = 0x7a1;
+pub static XK_Greek_EPSILONaccent: libc::c_uint = 0x7a2;
+pub static XK_Greek_ETAaccent: libc::c_uint = 0x7a3;
+pub static XK_Greek_IOTAaccent: libc::c_uint = 0x7a4;
+pub static XK_Greek_IOTAdiaeresis: libc::c_uint = 0x7a5;
+pub static XK_Greek_OMICRONaccent: libc::c_uint = 0x7a7;
+pub static XK_Greek_UPSILONaccent: libc::c_uint = 0x7a8;
+pub static XK_Greek_UPSILONdieresis: libc::c_uint = 0x7a9;
+pub static XK_Greek_OMEGAaccent: libc::c_uint = 0x7ab;
+pub static XK_Greek_accentdieresis: libc::c_uint = 0x7ae;
+pub static XK_Greek_horizbar: libc::c_uint = 0x7af;
+pub static XK_Greek_alphaaccent: libc::c_uint = 0x7b1;
+pub static XK_Greek_epsilonaccent: libc::c_uint = 0x7b2;
+pub static XK_Greek_etaaccent: libc::c_uint = 0x7b3;
+pub static XK_Greek_iotaaccent: libc::c_uint = 0x7b4;
+pub static XK_Greek_iotadieresis: libc::c_uint = 0x7b5;
+pub static XK_Greek_iotaaccentdieresis: libc::c_uint = 0x7b6;
+pub static XK_Greek_omicronaccent: libc::c_uint = 0x7b7;
+pub static XK_Greek_upsilonaccent: libc::c_uint = 0x7b8;
+pub static XK_Greek_upsilondieresis: libc::c_uint = 0x7b9;
+pub static XK_Greek_upsilonaccentdieresis: libc::c_uint = 0x7ba;
+pub static XK_Greek_omegaaccent: libc::c_uint = 0x7bb;
+pub static XK_Greek_ALPHA: libc::c_uint = 0x7c1;
+pub static XK_Greek_BETA: libc::c_uint = 0x7c2;
+pub static XK_Greek_GAMMA: libc::c_uint = 0x7c3;
+pub static XK_Greek_DELTA: libc::c_uint = 0x7c4;
+pub static XK_Greek_EPSILON: libc::c_uint = 0x7c5;
+pub static XK_Greek_ZETA: libc::c_uint = 0x7c6;
+pub static XK_Greek_ETA: libc::c_uint = 0x7c7;
+pub static XK_Greek_THETA: libc::c_uint = 0x7c8;
+pub static XK_Greek_IOTA: libc::c_uint = 0x7c9;
+pub static XK_Greek_KAPPA: libc::c_uint = 0x7ca;
+pub static XK_Greek_LAMDA: libc::c_uint = 0x7cb;
+pub static XK_Greek_LAMBDA: libc::c_uint = 0x7cb;
+pub static XK_Greek_MU: libc::c_uint = 0x7cc;
+pub static XK_Greek_NU: libc::c_uint = 0x7cd;
+pub static XK_Greek_XI: libc::c_uint = 0x7ce;
+pub static XK_Greek_OMICRON: libc::c_uint = 0x7cf;
+pub static XK_Greek_PI: libc::c_uint = 0x7d0;
+pub static XK_Greek_RHO: libc::c_uint = 0x7d1;
+pub static XK_Greek_SIGMA: libc::c_uint = 0x7d2;
+pub static XK_Greek_TAU: libc::c_uint = 0x7d4;
+pub static XK_Greek_UPSILON: libc::c_uint = 0x7d5;
+pub static XK_Greek_PHI: libc::c_uint = 0x7d6;
+pub static XK_Greek_CHI: libc::c_uint = 0x7d7;
+pub static XK_Greek_PSI: libc::c_uint = 0x7d8;
+pub static XK_Greek_OMEGA: libc::c_uint = 0x7d9;
+pub static XK_Greek_alpha: libc::c_uint = 0x7e1;
+pub static XK_Greek_beta: libc::c_uint = 0x7e2;
+pub static XK_Greek_gamma: libc::c_uint = 0x7e3;
+pub static XK_Greek_delta: libc::c_uint = 0x7e4;
+pub static XK_Greek_epsilon: libc::c_uint = 0x7e5;
+pub static XK_Greek_zeta: libc::c_uint = 0x7e6;
+pub static XK_Greek_eta: libc::c_uint = 0x7e7;
+pub static XK_Greek_theta: libc::c_uint = 0x7e8;
+pub static XK_Greek_iota: libc::c_uint = 0x7e9;
+pub static XK_Greek_kappa: libc::c_uint = 0x7ea;
+pub static XK_Greek_lamda: libc::c_uint = 0x7eb;
+pub static XK_Greek_lambda: libc::c_uint = 0x7eb;
+pub static XK_Greek_mu: libc::c_uint = 0x7ec;
+pub static XK_Greek_nu: libc::c_uint = 0x7ed;
+pub static XK_Greek_xi: libc::c_uint = 0x7ee;
+pub static XK_Greek_omicron: libc::c_uint = 0x7ef;
+pub static XK_Greek_pi: libc::c_uint = 0x7f0;
+pub static XK_Greek_rho: libc::c_uint = 0x7f1;
+pub static XK_Greek_sigma: libc::c_uint = 0x7f2;
+pub static XK_Greek_finalsmallsigma: libc::c_uint = 0x7f3;
+pub static XK_Greek_tau: libc::c_uint = 0x7f4;
+pub static XK_Greek_upsilon: libc::c_uint = 0x7f5;
+pub static XK_Greek_phi: libc::c_uint = 0x7f6;
+pub static XK_Greek_chi: libc::c_uint = 0x7f7;
+pub static XK_Greek_psi: libc::c_uint = 0x7f8;
+pub static XK_Greek_omega: libc::c_uint = 0x7f9;
+pub static XK_Greek_switch: libc::c_uint = 0xFF7E;
+pub static XK_leftradical: libc::c_uint = 0x8a1;
+pub static XK_topleftradical: libc::c_uint = 0x8a2;
+pub static XK_horizconnector: libc::c_uint = 0x8a3;
+pub static XK_topintegral: libc::c_uint = 0x8a4;
+pub static XK_botintegral: libc::c_uint = 0x8a5;
+pub static XK_vertconnector: libc::c_uint = 0x8a6;
+pub static XK_topleftsqbracket: libc::c_uint = 0x8a7;
+pub static XK_botleftsqbracket: libc::c_uint = 0x8a8;
+pub static XK_toprightsqbracket: libc::c_uint = 0x8a9;
+pub static XK_botrightsqbracket: libc::c_uint = 0x8aa;
+pub static XK_topleftparens: libc::c_uint = 0x8ab;
+pub static XK_botleftparens: libc::c_uint = 0x8ac;
+pub static XK_toprightparens: libc::c_uint = 0x8ad;
+pub static XK_botrightparens: libc::c_uint = 0x8ae;
+pub static XK_leftmiddlecurlybrace: libc::c_uint = 0x8af;
+pub static XK_rightmiddlecurlybrace: libc::c_uint = 0x8b0;
+pub static XK_topleftsummation: libc::c_uint = 0x8b1;
+pub static XK_botleftsummation: libc::c_uint = 0x8b2;
+pub static XK_topvertsummationconnector: libc::c_uint = 0x8b3;
+pub static XK_botvertsummationconnector: libc::c_uint = 0x8b4;
+pub static XK_toprightsummation: libc::c_uint = 0x8b5;
+pub static XK_botrightsummation: libc::c_uint = 0x8b6;
+pub static XK_rightmiddlesummation: libc::c_uint = 0x8b7;
+pub static XK_lessthanequal: libc::c_uint = 0x8bc;
+pub static XK_notequal: libc::c_uint = 0x8bd;
+pub static XK_greaterthanequal: libc::c_uint = 0x8be;
+pub static XK_integral: libc::c_uint = 0x8bf;
+pub static XK_therefore: libc::c_uint = 0x8c0;
+pub static XK_variation: libc::c_uint = 0x8c1;
+pub static XK_infinity: libc::c_uint = 0x8c2;
+pub static XK_nabla: libc::c_uint = 0x8c5;
+pub static XK_approximate: libc::c_uint = 0x8c8;
+pub static XK_similarequal: libc::c_uint = 0x8c9;
+pub static XK_ifonlyif: libc::c_uint = 0x8cd;
+pub static XK_implies: libc::c_uint = 0x8ce;
+pub static XK_identical: libc::c_uint = 0x8cf;
+pub static XK_radical: libc::c_uint = 0x8d6;
+pub static XK_includedin: libc::c_uint = 0x8da;
+pub static XK_includes: libc::c_uint = 0x8db;
+pub static XK_intersection: libc::c_uint = 0x8dc;
+pub static XK_union: libc::c_uint = 0x8dd;
+pub static XK_logicaland: libc::c_uint = 0x8de;
+pub static XK_logicalor: libc::c_uint = 0x8df;
+pub static XK_partialderivative: libc::c_uint = 0x8ef;
+pub static XK_function: libc::c_uint = 0x8f6;
+pub static XK_leftarrow: libc::c_uint = 0x8fb;
+pub static XK_uparrow: libc::c_uint = 0x8fc;
+pub static XK_rightarrow: libc::c_uint = 0x8fd;
+pub static XK_downarrow: libc::c_uint = 0x8fe;
+pub static XK_blank: libc::c_uint = 0x9df;
+pub static XK_soliddiamond: libc::c_uint = 0x9e0;
+pub static XK_checkerboard: libc::c_uint = 0x9e1;
+pub static XK_ht: libc::c_uint = 0x9e2;
+pub static XK_ff: libc::c_uint = 0x9e3;
+pub static XK_cr: libc::c_uint = 0x9e4;
+pub static XK_lf: libc::c_uint = 0x9e5;
+pub static XK_nl: libc::c_uint = 0x9e8;
+pub static XK_vt: libc::c_uint = 0x9e9;
+pub static XK_lowrightcorner: libc::c_uint = 0x9ea;
+pub static XK_uprightcorner: libc::c_uint = 0x9eb;
+pub static XK_upleftcorner: libc::c_uint = 0x9ec;
+pub static XK_lowleftcorner: libc::c_uint = 0x9ed;
+pub static XK_crossinglines: libc::c_uint = 0x9ee;
+pub static XK_horizlinescan1: libc::c_uint = 0x9ef;
+pub static XK_horizlinescan3: libc::c_uint = 0x9f0;
+pub static XK_horizlinescan5: libc::c_uint = 0x9f1;
+pub static XK_horizlinescan7: libc::c_uint = 0x9f2;
+pub static XK_horizlinescan9: libc::c_uint = 0x9f3;
+pub static XK_leftt: libc::c_uint = 0x9f4;
+pub static XK_rightt: libc::c_uint = 0x9f5;
+pub static XK_bott: libc::c_uint = 0x9f6;
+pub static XK_topt: libc::c_uint = 0x9f7;
+pub static XK_vertbar: libc::c_uint = 0x9f8;
+pub static XK_emspace: libc::c_uint = 0xaa1;
+pub static XK_enspace: libc::c_uint = 0xaa2;
+pub static XK_em3space: libc::c_uint = 0xaa3;
+pub static XK_em4space: libc::c_uint = 0xaa4;
+pub static XK_digitspace: libc::c_uint = 0xaa5;
+pub static XK_punctspace: libc::c_uint = 0xaa6;
+pub static XK_thinspace: libc::c_uint = 0xaa7;
+pub static XK_hairspace: libc::c_uint = 0xaa8;
+pub static XK_emdash: libc::c_uint = 0xaa9;
+pub static XK_endash: libc::c_uint = 0xaaa;
+pub static XK_signifblank: libc::c_uint = 0xaac;
+pub static XK_ellipsis: libc::c_uint = 0xaae;
+pub static XK_doubbaselinedot: libc::c_uint = 0xaaf;
+pub static XK_onethird: libc::c_uint = 0xab0;
+pub static XK_twothirds: libc::c_uint = 0xab1;
+pub static XK_onefifth: libc::c_uint = 0xab2;
+pub static XK_twofifths: libc::c_uint = 0xab3;
+pub static XK_threefifths: libc::c_uint = 0xab4;
+pub static XK_fourfifths: libc::c_uint = 0xab5;
+pub static XK_onesixth: libc::c_uint = 0xab6;
+pub static XK_fivesixths: libc::c_uint = 0xab7;
+pub static XK_careof: libc::c_uint = 0xab8;
+pub static XK_figdash: libc::c_uint = 0xabb;
+pub static XK_leftanglebracket: libc::c_uint = 0xabc;
+pub static XK_decimalpoint: libc::c_uint = 0xabd;
+pub static XK_rightanglebracket: libc::c_uint = 0xabe;
+pub static XK_marker: libc::c_uint = 0xabf;
+pub static XK_oneeighth: libc::c_uint = 0xac3;
+pub static XK_threeeighths: libc::c_uint = 0xac4;
+pub static XK_fiveeighths: libc::c_uint = 0xac5;
+pub static XK_seveneighths: libc::c_uint = 0xac6;
+pub static XK_trademark: libc::c_uint = 0xac9;
+pub static XK_signaturemark: libc::c_uint = 0xaca;
+pub static XK_trademarkincircle: libc::c_uint = 0xacb;
+pub static XK_leftopentriangle: libc::c_uint = 0xacc;
+pub static XK_rightopentriangle: libc::c_uint = 0xacd;
+pub static XK_emopencircle: libc::c_uint = 0xace;
+pub static XK_emopenrectangle: libc::c_uint = 0xacf;
+pub static XK_leftsinglequotemark: libc::c_uint = 0xad0;
+pub static XK_rightsinglequotemark: libc::c_uint = 0xad1;
+pub static XK_leftdoublequotemark: libc::c_uint = 0xad2;
+pub static XK_rightdoublequotemark: libc::c_uint = 0xad3;
+pub static XK_prescription: libc::c_uint = 0xad4;
+pub static XK_minutes: libc::c_uint = 0xad6;
+pub static XK_seconds: libc::c_uint = 0xad7;
+pub static XK_latincross: libc::c_uint = 0xad9;
+pub static XK_hexagram: libc::c_uint = 0xada;
+pub static XK_filledrectbullet: libc::c_uint = 0xadb;
+pub static XK_filledlefttribullet: libc::c_uint = 0xadc;
+pub static XK_filledrighttribullet: libc::c_uint = 0xadd;
+pub static XK_emfilledcircle: libc::c_uint = 0xade;
+pub static XK_emfilledrect: libc::c_uint = 0xadf;
+pub static XK_enopencircbullet: libc::c_uint = 0xae0;
+pub static XK_enopensquarebullet: libc::c_uint = 0xae1;
+pub static XK_openrectbullet: libc::c_uint = 0xae2;
+pub static XK_opentribulletup: libc::c_uint = 0xae3;
+pub static XK_opentribulletdown: libc::c_uint = 0xae4;
+pub static XK_openstar: libc::c_uint = 0xae5;
+pub static XK_enfilledcircbullet: libc::c_uint = 0xae6;
+pub static XK_enfilledsqbullet: libc::c_uint = 0xae7;
+pub static XK_filledtribulletup: libc::c_uint = 0xae8;
+pub static XK_filledtribulletdown: libc::c_uint = 0xae9;
+pub static XK_leftpointer: libc::c_uint = 0xaea;
+pub static XK_rightpointer: libc::c_uint = 0xaeb;
+pub static XK_club: libc::c_uint = 0xaec;
+pub static XK_diamond: libc::c_uint = 0xaed;
+pub static XK_heart: libc::c_uint = 0xaee;
+pub static XK_maltesecross: libc::c_uint = 0xaf0;
+pub static XK_dagger: libc::c_uint = 0xaf1;
+pub static XK_doubledagger: libc::c_uint = 0xaf2;
+pub static XK_checkmark: libc::c_uint = 0xaf3;
+pub static XK_ballotcross: libc::c_uint = 0xaf4;
+pub static XK_musicalsharp: libc::c_uint = 0xaf5;
+pub static XK_musicalflat: libc::c_uint = 0xaf6;
+pub static XK_malesymbol: libc::c_uint = 0xaf7;
+pub static XK_femalesymbol: libc::c_uint = 0xaf8;
+pub static XK_telephone: libc::c_uint = 0xaf9;
+pub static XK_telephonerecorder: libc::c_uint = 0xafa;
+pub static XK_phonographcopyright: libc::c_uint = 0xafb;
+pub static XK_caret: libc::c_uint = 0xafc;
+pub static XK_singlelowquotemark: libc::c_uint = 0xafd;
+pub static XK_doublelowquotemark: libc::c_uint = 0xafe;
+pub static XK_cursor: libc::c_uint = 0xaff;
+pub static XK_leftcaret: libc::c_uint = 0xba3;
+pub static XK_rightcaret: libc::c_uint = 0xba6;
+pub static XK_downcaret: libc::c_uint = 0xba8;
+pub static XK_upcaret: libc::c_uint = 0xba9;
+pub static XK_overbar: libc::c_uint = 0xbc0;
+pub static XK_downtack: libc::c_uint = 0xbc2;
+pub static XK_upshoe: libc::c_uint = 0xbc3;
+pub static XK_downstile: libc::c_uint = 0xbc4;
+pub static XK_underbar: libc::c_uint = 0xbc6;
+pub static XK_jot: libc::c_uint = 0xbca;
+pub static XK_quad: libc::c_uint = 0xbcc;
+pub static XK_uptack: libc::c_uint = 0xbce;
+pub static XK_circle: libc::c_uint = 0xbcf;
+pub static XK_upstile: libc::c_uint = 0xbd3;
+pub static XK_downshoe: libc::c_uint = 0xbd6;
+pub static XK_rightshoe: libc::c_uint = 0xbd8;
+pub static XK_leftshoe: libc::c_uint = 0xbda;
+pub static XK_lefttack: libc::c_uint = 0xbdc;
+pub static XK_righttack: libc::c_uint = 0xbfc;
+pub static XK_hebrew_doublelowline: libc::c_uint = 0xcdf;
+pub static XK_hebrew_aleph: libc::c_uint = 0xce0;
+pub static XK_hebrew_bet: libc::c_uint = 0xce1;
+pub static XK_hebrew_beth: libc::c_uint = 0xce1;
+pub static XK_hebrew_gimel: libc::c_uint = 0xce2;
+pub static XK_hebrew_gimmel: libc::c_uint = 0xce2;
+pub static XK_hebrew_dalet: libc::c_uint = 0xce3;
+pub static XK_hebrew_daleth: libc::c_uint = 0xce3;
+pub static XK_hebrew_he: libc::c_uint = 0xce4;
+pub static XK_hebrew_waw: libc::c_uint = 0xce5;
+pub static XK_hebrew_zain: libc::c_uint = 0xce6;
+pub static XK_hebrew_zayin: libc::c_uint = 0xce6;
+pub static XK_hebrew_chet: libc::c_uint = 0xce7;
+pub static XK_hebrew_het: libc::c_uint = 0xce7;
+pub static XK_hebrew_tet: libc::c_uint = 0xce8;
+pub static XK_hebrew_teth: libc::c_uint = 0xce8;
+pub static XK_hebrew_yod: libc::c_uint = 0xce9;
+pub static XK_hebrew_finalkaph: libc::c_uint = 0xcea;
+pub static XK_hebrew_kaph: libc::c_uint = 0xceb;
+pub static XK_hebrew_lamed: libc::c_uint = 0xcec;
+pub static XK_hebrew_finalmem: libc::c_uint = 0xced;
+pub static XK_hebrew_mem: libc::c_uint = 0xcee;
+pub static XK_hebrew_finalnun: libc::c_uint = 0xcef;
+pub static XK_hebrew_nun: libc::c_uint = 0xcf0;
+pub static XK_hebrew_samech: libc::c_uint = 0xcf1;
+pub static XK_hebrew_samekh: libc::c_uint = 0xcf1;
+pub static XK_hebrew_ayin: libc::c_uint = 0xcf2;
+pub static XK_hebrew_finalpe: libc::c_uint = 0xcf3;
+pub static XK_hebrew_pe: libc::c_uint = 0xcf4;
+pub static XK_hebrew_finalzade: libc::c_uint = 0xcf5;
+pub static XK_hebrew_finalzadi: libc::c_uint = 0xcf5;
+pub static XK_hebrew_zade: libc::c_uint = 0xcf6;
+pub static XK_hebrew_zadi: libc::c_uint = 0xcf6;
+pub static XK_hebrew_qoph: libc::c_uint = 0xcf7;
+pub static XK_hebrew_kuf: libc::c_uint = 0xcf7;
+pub static XK_hebrew_resh: libc::c_uint = 0xcf8;
+pub static XK_hebrew_shin: libc::c_uint = 0xcf9;
+pub static XK_hebrew_taw: libc::c_uint = 0xcfa;
+pub static XK_hebrew_taf: libc::c_uint = 0xcfa;
+pub static XK_Hebrew_switch: libc::c_uint = 0xFF7E;
+
+
#[repr(C)]
pub struct XVisualInfo {
pub visual: *mut Visual,
@@ -272,6 +1269,44 @@ pub struct XMotionEvent {
pub same_screen: Bool,
}
+#[repr(C)]
+pub struct XKeyEvent {
+ pub type_: libc::c_int,
+ pub serial: libc::c_ulong,
+ pub send_event: Bool,
+ pub display: *mut Display,
+ pub window: Window,
+ pub root: Window,
+ pub subwindow: Window,
+ pub time: Time,
+ pub x: libc::c_int,
+ pub y: libc::c_int,
+ pub x_root: libc::c_int,
+ pub y_root: libc::c_int,
+ pub state: libc::c_uint,
+ pub keycode: libc::c_uint,
+ pub same_screen: Bool,
+}
+
+#[repr(C)]
+pub struct XButtonEvent {
+ pub type_: libc::c_int,
+ pub serial: libc::c_ulong,
+ pub send_event: Bool,
+ pub display: *mut Display,
+ pub window: Window,
+ pub root: Window,
+ pub subwindow: Window,
+ pub time: Time,
+ pub x: libc::c_int,
+ pub y: libc::c_int,
+ pub x_root: libc::c_int,
+ pub y_root: libc::c_int,
+ pub state: libc::c_uint,
+ pub button: libc::c_uint,
+ pub same_screen: Bool,
+}
+
#[link(name = "GL")]
#[link(name = "X11")]
extern "C" {
@@ -289,6 +1324,8 @@ extern "C" {
pub fn XFlush(display: *mut Display);
pub fn XInternAtom(display: *mut Display, atom_name: *const libc::c_char,
only_if_exists: Bool) -> Atom;
+ pub fn XKeycodeToKeysym(display: *mut Display, keycode: KeyCode,
+ index: libc::c_int) -> KeySym;
pub fn XMapWindow(display: *mut Display, w: Window);
pub fn XNextEvent(display: *mut Display, event_return: *mut XEvent);
pub fn XOpenDisplay(display_name: *const libc::c_char) -> *mut Display;
diff --git a/src/x11/mod.rs b/src/x11/mod.rs
index 9f773f4..a917fc1 100644
--- a/src/x11/mod.rs
+++ b/src/x11/mod.rs
@@ -3,6 +3,7 @@ use libc;
use std::{mem, ptr};
use std::sync::atomics::AtomicBool;
+mod events;
mod ffi;
pub struct Window {
@@ -61,7 +62,9 @@ impl Window {
let mut swa: ffi::XSetWindowAttributes = unsafe { mem::zeroed() };
swa.colormap = cmap;
swa.event_mask = ffi::ExposureMask | ffi::ResizeRedirectMask |
- ffi::VisibilityChangeMask | ffi::KeyPressMask | ffi::PointerMotionMask;
+ ffi::VisibilityChangeMask | ffi::KeyPressMask | ffi::PointerMotionMask |
+ ffi::KeyPressMask | ffi::KeyReleaseMask | ffi::ButtonPressMask |
+ ffi::ButtonReleaseMask;
swa
};
@@ -174,6 +177,30 @@ impl Window {
events.push(CursorPositionChanged(event.x as uint, event.y as uint));
},
+ ffi::KeyPress | ffi::KeyRelease => {
+ use {Pressed, Released};
+ let event: &ffi::XKeyEvent = unsafe { mem::transmute(&xev) };
+
+ let keysym = unsafe { ffi::XKeycodeToKeysym(self.display, event.keycode as ffi::KeyCode, 0) };
+
+ match events::keycode_to_element(keysym as libc::c_uint) {
+ Some(elem) if xev.type_ == ffi::KeyPress => {
+ events.push(Pressed(elem));
+ },
+ Some(elem) if xev.type_ == ffi::KeyRelease => {
+ events.push(Released(elem));
+ },
+ _ => ()
+ }
+ //
+ },
+
+ ffi::ButtonPress | ffi::ButtonRelease => {
+ use {Pressed, Released};
+ let event: &ffi::XButtonEvent = unsafe { mem::transmute(&xev) };
+ //events.push(CursorPositionChanged(event.x as uint, event.y as uint));
+ },
+
_ => ()
}