diff options
Diffstat (limited to 'src/x11')
-rw-r--r-- | src/x11/ffi.rs | 1545 | ||||
-rw-r--r-- | src/x11/headless.rs | 4 | ||||
-rw-r--r-- | src/x11/window/mod.rs | 185 |
3 files changed, 120 insertions, 1614 deletions
diff --git a/src/x11/ffi.rs b/src/x11/ffi.rs index c58647f..2fcda3b 100644 --- a/src/x11/ffi.rs +++ b/src/x11/ffi.rs @@ -1,10 +1,12 @@ -#![allow(dead_code)] -#![allow(non_snake_case)] -#![allow(non_camel_case_types)] -#![allow(non_upper_case_globals)] +#[cfg(feature="headless")] +pub use osmesa_sys::*; +pub use x11::keysym::*; +pub use x11::xcursor::*; +pub use x11::xf86vmode::*; +pub use x11::xlib::*; +pub use x11::xlib::xkb::*; -pub use self::glx::types::*; -use libc; +pub use self::glx::types::GLXContext; /// GLX bindings pub mod glx { @@ -15,1534 +17,3 @@ pub mod glx { pub mod glx_extra { include!(concat!(env!("OUT_DIR"), "/glx_extra_bindings.rs")); } - -pub type Atom = libc::c_ulong; -pub type Colormap = XID; -pub type Cursor = XID; -pub type Drawable = XID; // TODO: not sure -pub type KeyCode = libc::c_ulong; -pub type KeySym = XID; -pub type OSMesaContext = *const (); -pub type Status = libc::c_int; // TODO: not sure -pub type Time = libc::c_ulong; -pub type XrmDatabase = *const (); // TODO: not sure -pub type XIC = *mut (); -pub type XIM = *mut (); -pub type Screen = (); - -pub const AllocNone: libc::c_int = 0; -pub const AllocAll: libc::c_int = 1; - -pub const Button1: libc::c_uint = 1; -pub const Button2: libc::c_uint = 2; -pub const Button3: libc::c_uint = 3; -pub const Button4: libc::c_uint = 4; -pub const Button5: libc::c_uint = 5; - -pub const InputOutput: libc::c_uint = 1; -pub const InputOnly: libc::c_uint = 2; - -pub const CurrentTime: Time = 0; - -pub const GrabModeSync: libc::c_int = 0; -pub const GrabModeAsync: libc::c_int = 1; - -pub const GrabSuccess: libc::c_int = 0; -pub const AlreadyGrabbed: libc::c_int = 1; -pub const GrabInvalidTime: libc::c_int = 2; -pub const GrabNotViewable: libc::c_int = 3; -pub const GrabFrozen: libc::c_int = 4; - -pub const CWBackPixmap: libc::c_ulong = (1<<0); -pub const CWBackPixel: libc::c_ulong = (1<<1); -pub const CWBorderPixmap: libc::c_ulong = (1<<2); -pub const CWBorderPixel: libc::c_ulong = (1<<3); -pub const CWBitGravity: libc::c_ulong = (1<<4); -pub const CWWinGravity: libc::c_ulong = (1<<5); -pub const CWBackingStore: libc::c_ulong = (1<<6); -pub const CWBackingPlanes: libc::c_ulong = (1<<7); -pub const CWBackingPixel: libc::c_ulong = (1<<8); -pub const CWOverrideRedirect: libc::c_ulong = (1<<9); -pub const CWSaveUnder: libc::c_ulong = (1<<10); -pub const CWEventMask: libc::c_ulong = (1<<11); -pub const CWDontPropagate: libc::c_ulong = (1<<12); -pub const CWColormap: libc::c_ulong = (1<<13); -pub const CWCursor: libc::c_ulong = (1<<14); - -pub const NoEventMask: libc::c_long = 0; -pub const KeyPressMask: libc::c_long = (1<<0); -pub const KeyReleaseMask: libc::c_long = (1<<1); -pub const ButtonPressMask: libc::c_long = (1<<2); -pub const ButtonReleaseMask: libc::c_long = (1<<3); -pub const EnterWindowMask: libc::c_long = (1<<4); -pub const LeaveWindowMask: libc::c_long = (1<<5); -pub const PointerMotionMask: libc::c_long = (1<<6); -pub const PointerMotionHintMask: libc::c_long = (1<<7); -pub const Button1MotionMask: libc::c_long = (1<<8); -pub const Button2MotionMask: libc::c_long = (1<<9); -pub const Button3MotionMask: libc::c_long = (1<<10); -pub const Button4MotionMask: libc::c_long = (1<<11); -pub const Button5MotionMask: libc::c_long = (1<<12); -pub const ButtonMotionMask: libc::c_long = (1<<13); -pub const KeymapStateMask: libc::c_long = (1<<14); -pub const ExposureMask: libc::c_long = (1<<15); -pub const VisibilityChangeMask: libc::c_long = (1<<16); -pub const StructureNotifyMask: libc::c_long = (1<<17); -pub const ResizeRedirectMask: libc::c_long = (1<<18); -pub const SubstructureNotifyMask: libc::c_long = (1<<19); -pub const SubstructureRedirectMask: libc::c_long = (1<<20); -pub const FocusChangeMask: libc::c_long = (1<<21); -pub const PropertyChangeMask: libc::c_long = (1<<22); -pub const ColormapChangeMask: libc::c_long = (1<<23); -pub const OwnerGrabButtonMask: libc::c_long = (1<<24); - -pub const KeyPress: libc::c_int = 2; -pub const KeyRelease: libc::c_int = 3; -pub const ButtonPress: libc::c_int = 4; -pub const ButtonRelease: libc::c_int = 5; -pub const MotionNotify: libc::c_int = 6; -pub const EnterNotify: libc::c_int = 7; -pub const LeaveNotify: libc::c_int = 8; -pub const FocusIn: libc::c_int = 9; -pub const FocusOut: libc::c_int = 10; -pub const KeymapNotify: libc::c_int = 11; -pub const Expose: libc::c_int = 12; -pub const GraphicsExpose: libc::c_int = 13; -pub const NoExpose: libc::c_int = 14; -pub const VisibilityNotify: libc::c_int = 15; -pub const CreateNotify: libc::c_int = 16; -pub const DestroyNotify: libc::c_int = 17; -pub const UnmapNotify: libc::c_int = 18; -pub const MapNotify: libc::c_int = 19; -pub const MapRequest: libc::c_int = 20; -pub const ReparentNotify: libc::c_int = 21; -pub const ConfigureNotify: libc::c_int = 22; -pub const ConfigureRequest: libc::c_int = 23; -pub const GravityNotify: libc::c_int = 24; -pub const ResizeRequest: libc::c_int = 25; -pub const CirculateNotify: libc::c_int = 26; -pub const CirculateRequest: libc::c_int = 27; -pub const PropertyNotify: libc::c_int = 28; -pub const SelectionClear: libc::c_int = 29; -pub const SelectionRequest: libc::c_int = 30; -pub const SelectionNotify: libc::c_int = 31; -pub const ColormapNotify: libc::c_int = 32; -pub const ClientMessage: libc::c_int = 33; -pub const MappingNotify: libc::c_int = 34; - -pub const GLX_USE_GL: libc::c_int = 1; -pub const GLX_BUFFER_SIZE: libc::c_int = 2; -pub const GLX_LEVEL: libc::c_int = 3; -pub const GLX_RGBA: libc::c_int = 4; -pub const GLX_DOUBLEBUFFER: libc::c_int = 5; -pub const GLX_STEREO: libc::c_int = 6; -pub const GLX_AUX_BUFFERS: libc::c_int = 7; -pub const GLX_RED_SIZE: libc::c_int = 8; -pub const GLX_GREEN_SIZE: libc::c_int = 9; -pub const GLX_BLUE_SIZE: libc::c_int = 10; -pub const GLX_ALPHA_SIZE: libc::c_int = 11; -pub const GLX_DEPTH_SIZE: libc::c_int = 12; -pub const GLX_STENCIL_SIZE: libc::c_int = 13; -pub const GLX_ACCUM_RED_SIZE: libc::c_int = 14; -pub const GLX_ACCUM_GREEN_SIZE: libc::c_int = 15; -pub const GLX_ACCUM_BLUE_SIZE: libc::c_int = 16; -pub const GLX_ACCUM_ALPHA_SIZE: libc::c_int = 17; -pub const GLX_BAD_SCREEN: libc::c_int = 1; -pub const GLX_BAD_ATTRIBUTE: libc::c_int = 2; -pub const GLX_NO_EXTENSION: libc::c_int = 3; -pub const GLX_BAD_VISUAL: libc::c_int = 4; -pub const GLX_BAD_CONTEXT: libc::c_int = 5; -pub const GLX_BAD_VALUE: libc::c_int = 6; -pub const GLX_BAD_ENUM: libc::c_int = 7; -pub const GLX_VENDOR: libc::c_int = 1; -pub const GLX_VERSION: libc::c_int = 2; -pub const GLX_EXTENSIONS: libc::c_int = 3; -pub const GLX_WINDOW_BIT: libc::c_int = 0x00000001; -pub const GLX_PIXMAP_BIT: libc::c_int = 0x00000002; -pub const GLX_PBUFFER_BIT: libc::c_int = 0x00000004; -pub const GLX_RGBA_BIT: libc::c_int = 0x00000001; -pub const GLX_COLOR_INDEX_BIT: libc::c_int = 0x00000002; -pub const GLX_PBUFFER_CLOBBER_MASK: libc::c_int = 0x08000000; -pub const GLX_FRONT_LEFT_BUFFER_BIT: libc::c_int = 0x00000001; -pub const GLX_FRONT_RIGHT_BUFFER_BIT: libc::c_int = 0x00000002; -pub const GLX_BACK_LEFT_BUFFER_BIT: libc::c_int = 0x00000004; -pub const GLX_BACK_RIGHT_BUFFER_BIT: libc::c_int = 0x00000008; -pub const GLX_AUX_BUFFERS_BIT: libc::c_int = 0x00000010; -pub const GLX_DEPTH_BUFFER_BIT: libc::c_int = 0x00000020; -pub const GLX_STENCIL_BUFFER_BIT: libc::c_int = 0x00000040; -pub const GLX_ACCUM_BUFFER_BIT: libc::c_int = 0x00000080; -pub const GLX_CONFIG_CAVEAT: libc::c_int = 0x20; -pub const GLX_X_VISUAL_TYPE: libc::c_int = 0x22; -pub const GLX_TRANSPARENT_TYPE: libc::c_int = 0x23; -pub const GLX_TRANSPARENT_INDEX_VALUE: libc::c_int = 0x24; -pub const GLX_TRANSPARENT_RED_VALUE: libc::c_int = 0x25; -pub const GLX_TRANSPARENT_GREEN_VALUE: libc::c_int = 0x26; -pub const GLX_TRANSPARENT_BLUE_VALUE: libc::c_int = 0x27; -pub const GLX_TRANSPARENT_ALPHA_VALUE: libc::c_int = 0x28; -#[allow(overflowing_literals)] -pub const GLX_DONT_CARE: libc::c_int = 0xFFFFFFFF; -pub const GLX_NONE: libc::c_int = 0x8000; -pub const GLX_SLOW_CONFIG: libc::c_int = 0x8001; -pub const GLX_TRUE_COLOR: libc::c_int = 0x8002; -pub const GLX_DIRECT_COLOR: libc::c_int = 0x8003; -pub const GLX_PSEUDO_COLOR: libc::c_int = 0x8004; -pub const GLX_const_COLOR: libc::c_int = 0x8005; -pub const GLX_GRAY_SCALE: libc::c_int = 0x8006; -pub const GLX_const_GRAY: libc::c_int = 0x8007; -pub const GLX_TRANSPARENT_RGB: libc::c_int = 0x8008; -pub const GLX_TRANSPARENT_INDEX: libc::c_int = 0x8009; -pub const GLX_VISUAL_ID: libc::c_int = 0x800B; -pub const GLX_SCREEN: libc::c_int = 0x800C; -pub const GLX_NON_CONFORMANT_CONFIG: libc::c_int = 0x800D; -pub const GLX_DRAWABLE_TYPE: libc::c_int = 0x8010; -pub const GLX_RENDER_TYPE: libc::c_int = 0x8011; -pub const GLX_X_RENDERABLE: libc::c_int = 0x8012; -pub const GLX_FBCONFIG_ID: libc::c_int = 0x8013; -pub const GLX_RGBA_TYPE: libc::c_int = 0x8014; -pub const GLX_COLOR_INDEX_TYPE: libc::c_int = 0x8015; -pub const GLX_MAX_PBUFFER_WIDTH: libc::c_int = 0x8016; -pub const GLX_MAX_PBUFFER_HEIGHT: libc::c_int = 0x8017; -pub const GLX_MAX_PBUFFER_PIXELS: libc::c_int = 0x8018; -pub const GLX_PRESERVED_CONTENTS: libc::c_int = 0x801B; -pub const GLX_LARGEST_PBUFFER: libc::c_int = 0x801C; -pub const GLX_WIDTH: libc::c_int = 0x801D; -pub const GLX_HEIGHT: libc::c_int = 0x801E; -pub const GLX_EVENT_MASK: libc::c_int = 0x801F; -pub const GLX_DAMAGED: libc::c_int = 0x8020; -pub const GLX_SAVED: libc::c_int = 0x8021; -pub const GLX_WINDOW: libc::c_int = 0x8022; -pub const GLX_PBUFFER: libc::c_int = 0x8023; -pub const GLX_PBUFFER_HEIGHT: libc::c_int = 0x8040; -pub const GLX_PBUFFER_WIDTH: libc::c_int = 0x8041; - -pub const GLX_CONTEXT_MAJOR_VERSION: libc::c_int = 0x2091; -pub const GLX_CONTEXT_MINOR_VERSION: libc::c_int = 0x2092; -pub const GLX_CONTEXT_FLAGS: libc::c_int = 0x2094; -pub const GLX_CONTEXT_PROFILE_MASK: libc::c_int = 0x9126; -pub const GLX_CONTEXT_DEBUG_BIT: libc::c_int = 0x0001; -pub const GLX_CONTEXT_FORWARD_COMPATIBLE_BIT: libc::c_int = 0x0002; -pub const GLX_CONTEXT_CORE_PROFILE_BIT: libc::c_int = 0x00000001; -pub const GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT: libc::c_int = 0x00000002; - -pub const XIMPreeditArea: libc::c_long = 0x0001; -pub const XIMPreeditCallbacks: libc::c_long = 0x0002; -pub const XIMPreeditPosition: libc::c_long = 0x0004; -pub const XIMPreeditNothing: libc::c_long = 0x0008; -pub const XIMPreeditNone: libc::c_long = 0x0010; -pub const XIMStatusArea: libc::c_long = 0x0100; -pub const XIMStatusCallbacks: libc::c_long = 0x0200; -pub const XIMStatusNothing: libc::c_long = 0x0400; -pub const XIMStatusNone: libc::c_long = 0x0800; - -pub const XK_BackSpace: libc::c_uint = 0xFF08; -pub const XK_Tab: libc::c_uint = 0xFF09; -pub const XK_Linefeed: libc::c_uint = 0xFF0A; -pub const XK_Clear: libc::c_uint = 0xFF0B; -pub const XK_Return: libc::c_uint = 0xFF0D; -pub const XK_Pause: libc::c_uint = 0xFF13; -pub const XK_Scroll_Lock: libc::c_uint = 0xFF14; -pub const XK_Sys_Req: libc::c_uint = 0xFF15; -pub const XK_Escape: libc::c_uint = 0xFF1B; -pub const XK_Delete: libc::c_uint = 0xFFFF; -pub const XK_Multi_key: libc::c_uint = 0xFF20; -pub const XK_Kanji: libc::c_uint = 0xFF21; -pub const XK_Muhenkan: libc::c_uint = 0xFF22; -pub const XK_Henkan_Mode: libc::c_uint = 0xFF23; -pub const XK_Henkan: libc::c_uint = 0xFF23; -pub const XK_Romaji: libc::c_uint = 0xFF24; -pub const XK_Hiragana: libc::c_uint = 0xFF25; -pub const XK_Katakana: libc::c_uint = 0xFF26; -pub const XK_Hiragana_Katakana: libc::c_uint = 0xFF27; -pub const XK_Zenkaku: libc::c_uint = 0xFF28; -pub const XK_Hankaku: libc::c_uint = 0xFF29; -pub const XK_Zenkaku_Hankaku: libc::c_uint = 0xFF2A; -pub const XK_Touroku: libc::c_uint = 0xFF2B; -pub const XK_Massyo: libc::c_uint = 0xFF2C; -pub const XK_Kana_Lock: libc::c_uint = 0xFF2D; -pub const XK_Kana_Shift: libc::c_uint = 0xFF2E; -pub const XK_Eisu_Shift: libc::c_uint = 0xFF2F; -pub const XK_Eisu_toggle: libc::c_uint = 0xFF30; -pub const XK_Home: libc::c_uint = 0xFF50; -pub const XK_Left: libc::c_uint = 0xFF51; -pub const XK_Up: libc::c_uint = 0xFF52; -pub const XK_Right: libc::c_uint = 0xFF53; -pub const XK_Down: libc::c_uint = 0xFF54; -pub const XK_Prior: libc::c_uint = 0xFF55; -pub const XK_Page_Up: libc::c_uint = 0xFF55; -pub const XK_Next: libc::c_uint = 0xFF56; -pub const XK_Page_Down: libc::c_uint = 0xFF56; -pub const XK_End: libc::c_uint = 0xFF57; -pub const XK_Begin: libc::c_uint = 0xFF58; -pub const XK_Win_L: libc::c_uint = 0xFF5B; -pub const XK_Win_R: libc::c_uint = 0xFF5C; -pub const XK_App: libc::c_uint = 0xFF5D; -pub const XK_Select: libc::c_uint = 0xFF60; -pub const XK_Print: libc::c_uint = 0xFF61; -pub const XK_Execute: libc::c_uint = 0xFF62; -pub const XK_Insert: libc::c_uint = 0xFF63; -pub const XK_Undo: libc::c_uint = 0xFF65; -pub const XK_Redo: libc::c_uint = 0xFF66; -pub const XK_Menu: libc::c_uint = 0xFF67; -pub const XK_Find: libc::c_uint = 0xFF68; -pub const XK_Cancel: libc::c_uint = 0xFF69; -pub const XK_Help: libc::c_uint = 0xFF6A; -pub const XK_Break: libc::c_uint = 0xFF6B; -pub const XK_Mode_switch: libc::c_uint = 0xFF7E; -pub const XK_script_switch: libc::c_uint = 0xFF7E; -pub const XK_Num_Lock: libc::c_uint = 0xFF7F; -pub const XK_KP_Space: libc::c_uint = 0xFF80; -pub const XK_KP_Tab: libc::c_uint = 0xFF89; -pub const XK_KP_Enter: libc::c_uint = 0xFF8D; -pub const XK_KP_F1: libc::c_uint = 0xFF91; -pub const XK_KP_F2: libc::c_uint = 0xFF92; -pub const XK_KP_F3: libc::c_uint = 0xFF93; -pub const XK_KP_F4: libc::c_uint = 0xFF94; -pub const XK_KP_Home: libc::c_uint = 0xFF95; -pub const XK_KP_Left: libc::c_uint = 0xFF96; -pub const XK_KP_Up: libc::c_uint = 0xFF97; -pub const XK_KP_Right: libc::c_uint = 0xFF98; -pub const XK_KP_Down: libc::c_uint = 0xFF99; -pub const XK_KP_Prior: libc::c_uint = 0xFF9A; -pub const XK_KP_Page_Up: libc::c_uint = 0xFF9A; -pub const XK_KP_Next: libc::c_uint = 0xFF9B; -pub const XK_KP_Page_Down: libc::c_uint = 0xFF9B; -pub const XK_KP_End: libc::c_uint = 0xFF9C; -pub const XK_KP_Begin: libc::c_uint = 0xFF9D; -pub const XK_KP_Insert: libc::c_uint = 0xFF9E; -pub const XK_KP_Delete: libc::c_uint = 0xFF9F; -pub const XK_KP_Equal: libc::c_uint = 0xFFBD; -pub const XK_KP_Multiply: libc::c_uint = 0xFFAA; -pub const XK_KP_Add: libc::c_uint = 0xFFAB; -pub const XK_KP_Separator: libc::c_uint = 0xFFAC; -pub const XK_KP_Subtract: libc::c_uint = 0xFFAD; -pub const XK_KP_Decimal: libc::c_uint = 0xFFAE; -pub const XK_KP_Divide: libc::c_uint = 0xFFAF; -pub const XK_KP_0: libc::c_uint = 0xFFB0; -pub const XK_KP_1: libc::c_uint = 0xFFB1; -pub const XK_KP_2: libc::c_uint = 0xFFB2; -pub const XK_KP_3: libc::c_uint = 0xFFB3; -pub const XK_KP_4: libc::c_uint = 0xFFB4; -pub const XK_KP_5: libc::c_uint = 0xFFB5; -pub const XK_KP_6: libc::c_uint = 0xFFB6; -pub const XK_KP_7: libc::c_uint = 0xFFB7; -pub const XK_KP_8: libc::c_uint = 0xFFB8; -pub const XK_KP_9: libc::c_uint = 0xFFB9; -pub const XK_F1: libc::c_uint = 0xFFBE; -pub const XK_F2: libc::c_uint = 0xFFBF; -pub const XK_F3: libc::c_uint = 0xFFC0; -pub const XK_F4: libc::c_uint = 0xFFC1; -pub const XK_F5: libc::c_uint = 0xFFC2; -pub const XK_F6: libc::c_uint = 0xFFC3; -pub const XK_F7: libc::c_uint = 0xFFC4; -pub const XK_F8: libc::c_uint = 0xFFC5; -pub const XK_F9: libc::c_uint = 0xFFC6; -pub const XK_F10: libc::c_uint = 0xFFC7; -pub const XK_F11: libc::c_uint = 0xFFC8; -pub const XK_L1: libc::c_uint = 0xFFC8; -pub const XK_F12: libc::c_uint = 0xFFC9; -pub const XK_L2: libc::c_uint = 0xFFC9; -pub const XK_F13: libc::c_uint = 0xFFCA; -pub const XK_L3: libc::c_uint = 0xFFCA; -pub const XK_F14: libc::c_uint = 0xFFCB; -pub const XK_L4: libc::c_uint = 0xFFCB; -pub const XK_F15: libc::c_uint = 0xFFCC; -pub const XK_L5: libc::c_uint = 0xFFCC; -pub const XK_F16: libc::c_uint = 0xFFCD; -pub const XK_L6: libc::c_uint = 0xFFCD; -pub const XK_F17: libc::c_uint = 0xFFCE; -pub const XK_L7: libc::c_uint = 0xFFCE; -pub const XK_F18: libc::c_uint = 0xFFCF; -pub const XK_L8: libc::c_uint = 0xFFCF; -pub const XK_F19: libc::c_uint = 0xFFD0; -pub const XK_L9: libc::c_uint = 0xFFD0; -pub const XK_F20: libc::c_uint = 0xFFD1; -pub const XK_L10: libc::c_uint = 0xFFD1; -pub const XK_F21: libc::c_uint = 0xFFD2; -pub const XK_R1: libc::c_uint = 0xFFD2; -pub const XK_F22: libc::c_uint = 0xFFD3; -pub const XK_R2: libc::c_uint = 0xFFD3; -pub const XK_F23: libc::c_uint = 0xFFD4; -pub const XK_R3: libc::c_uint = 0xFFD4; -pub const XK_F24: libc::c_uint = 0xFFD5; -pub const XK_R4: libc::c_uint = 0xFFD5; -pub const XK_F25: libc::c_uint = 0xFFD6; -pub const XK_R5: libc::c_uint = 0xFFD6; -pub const XK_F26: libc::c_uint = 0xFFD7; -pub const XK_R6: libc::c_uint = 0xFFD7; -pub const XK_F27: libc::c_uint = 0xFFD8; -pub const XK_R7: libc::c_uint = 0xFFD8; -pub const XK_F28: libc::c_uint = 0xFFD9; -pub const XK_R8: libc::c_uint = 0xFFD9; -pub const XK_F29: libc::c_uint = 0xFFDA; -pub const XK_R9: libc::c_uint = 0xFFDA; -pub const XK_F30: libc::c_uint = 0xFFDB; -pub const XK_R10: libc::c_uint = 0xFFDB; -pub const XK_F31: libc::c_uint = 0xFFDC; -pub const XK_R11: libc::c_uint = 0xFFDC; -pub const XK_F32: libc::c_uint = 0xFFDD; -pub const XK_R12: libc::c_uint = 0xFFDD; -pub const XK_F33: libc::c_uint = 0xFFDE; -pub const XK_R13: libc::c_uint = 0xFFDE; -pub const XK_F34: libc::c_uint = 0xFFDF; -pub const XK_R14: libc::c_uint = 0xFFDF; -pub const XK_F35: libc::c_uint = 0xFFE0; -pub const XK_R15: libc::c_uint = 0xFFE0; -pub const XK_Shift_L: libc::c_uint = 0xFFE1; -pub const XK_Shift_R: libc::c_uint = 0xFFE2; -pub const XK_Control_L: libc::c_uint = 0xFFE3; -pub const XK_Control_R: libc::c_uint = 0xFFE4; -pub const XK_Caps_Lock: libc::c_uint = 0xFFE5; -pub const XK_Shift_Lock: libc::c_uint = 0xFFE6; -pub const XK_Meta_L: libc::c_uint = 0xFFE7; -pub const XK_Meta_R: libc::c_uint = 0xFFE8; -pub const XK_Alt_L: libc::c_uint = 0xFFE9; -pub const XK_Alt_R: libc::c_uint = 0xFFEA; -pub const XK_Super_L: libc::c_uint = 0xFFEB; -pub const XK_Super_R: libc::c_uint = 0xFFEC; -pub const XK_Hyper_L: libc::c_uint = 0xFFED; -pub const XK_Hyper_R: libc::c_uint = 0xFFEE; -pub const XK_space: libc::c_uint = 0x020; -pub const XK_exclam: libc::c_uint = 0x021; -pub const XK_quotedbl: libc::c_uint = 0x022; -pub const XK_numbersign: libc::c_uint = 0x023; -pub const XK_dollar: libc::c_uint = 0x024; -pub const XK_percent: libc::c_uint = 0x025; -pub const XK_ampersand: libc::c_uint = 0x026; -pub const XK_apostrophe: libc::c_uint = 0x027; -pub const XK_quoteright: libc::c_uint = 0x027; -pub const XK_parenleft: libc::c_uint = 0x028; -pub const XK_parenright: libc::c_uint = 0x029; -pub const XK_asterisk: libc::c_uint = 0x02a; -pub const XK_plus: libc::c_uint = 0x02b; -pub const XK_comma: libc::c_uint = 0x02c; -pub const XK_minus: libc::c_uint = 0x02d; -pub const XK_period: libc::c_uint = 0x02e; -pub const XK_slash: libc::c_uint = 0x02f; -pub const XK_0: libc::c_uint = 0x030; -pub const XK_1: libc::c_uint = 0x031; -pub const XK_2: libc::c_uint = 0x032; -pub const XK_3: libc::c_uint = 0x033; -pub const XK_4: libc::c_uint = 0x034; -pub const XK_5: libc::c_uint = 0x035; -pub const XK_6: libc::c_uint = 0x036; -pub const XK_7: libc::c_uint = 0x037; -pub const XK_8: libc::c_uint = 0x038; -pub const XK_9: libc::c_uint = 0x039; -pub const XK_colon: libc::c_uint = 0x03a; -pub const XK_semicolon: libc::c_uint = 0x03b; -pub const XK_less: libc::c_uint = 0x03c; -pub const XK_equal: libc::c_uint = 0x03d; -pub const XK_greater: libc::c_uint = 0x03e; -pub const XK_question: libc::c_uint = 0x03f; -pub const XK_at: libc::c_uint = 0x040; -pub const XK_A: libc::c_uint = 0x041; -pub const XK_B: libc::c_uint = 0x042; -pub const XK_C: libc::c_uint = 0x043; -pub const XK_D: libc::c_uint = 0x044; -pub const XK_E: libc::c_uint = 0x045; -pub const XK_F: libc::c_uint = 0x046; -pub const XK_G: libc::c_uint = 0x047; -pub const XK_H: libc::c_uint = 0x048; -pub const XK_I: libc::c_uint = 0x049; -pub const XK_J: libc::c_uint = 0x04a; -pub const XK_K: libc::c_uint = 0x04b; -pub const XK_L: libc::c_uint = 0x04c; -pub const XK_M: libc::c_uint = 0x04d; -pub const XK_N: libc::c_uint = 0x04e; -pub const XK_O: libc::c_uint = 0x04f; -pub const XK_P: libc::c_uint = 0x050; -pub const XK_Q: libc::c_uint = 0x051; -pub const XK_R: libc::c_uint = 0x052; -pub const XK_S: libc::c_uint = 0x053; -pub const XK_T: libc::c_uint = 0x054; -pub const XK_U: libc::c_uint = 0x055; -pub const XK_V: libc::c_uint = 0x056; -pub const XK_W: libc::c_uint = 0x057; -pub const XK_X: libc::c_uint = 0x058; -pub const XK_Y: libc::c_uint = 0x059; -pub const XK_Z: libc::c_uint = 0x05a; -pub const XK_bracketleft: libc::c_uint = 0x05b; -pub const XK_backslash: libc::c_uint = 0x05c; -pub const XK_bracketright: libc::c_uint = 0x05d; -pub const XK_asciicircum: libc::c_uint = 0x05e; -pub const XK_underscore: libc::c_uint = 0x05f; -pub const XK_grave: libc::c_uint = 0x060; -pub const XK_quoteleft: libc::c_uint = 0x060; -pub const XK_a: libc::c_uint = 0x061; -pub const XK_b: libc::c_uint = 0x062; -pub const XK_c: libc::c_uint = 0x063; -pub const XK_d: libc::c_uint = 0x064; -pub const XK_e: libc::c_uint = 0x065; -pub const XK_f: libc::c_uint = 0x066; -pub const XK_g: libc::c_uint = 0x067; -pub const XK_h: libc::c_uint = 0x068; -pub const XK_i: libc::c_uint = 0x069; -pub const XK_j: libc::c_uint = 0x06a; -pub const XK_k: libc::c_uint = 0x06b; -pub const XK_l: libc::c_uint = 0x06c; -pub const XK_m: libc::c_uint = 0x06d; -pub const XK_n: libc::c_uint = 0x06e; -pub const XK_o: libc::c_uint = 0x06f; -pub const XK_p: libc::c_uint = 0x070; -pub const XK_q: libc::c_uint = 0x071; -pub const XK_r: libc::c_uint = 0x072; -pub const XK_s: libc::c_uint = 0x073; -pub const XK_t: libc::c_uint = 0x074; -pub const XK_u: libc::c_uint = 0x075; -pub const XK_v: libc::c_uint = 0x076; -pub const XK_w: libc::c_uint = 0x077; -pub const XK_x: libc::c_uint = 0x078; -pub const XK_y: libc::c_uint = 0x079; -pub const XK_z: libc::c_uint = 0x07a; -pub const XK_braceleft: libc::c_uint = 0x07b; -pub const XK_bar: libc::c_uint = 0x07c; -pub const XK_braceright: libc::c_uint = 0x07d; -pub const XK_asciitilde: libc::c_uint = 0x07e; -pub const XK_nobreakspace: libc::c_uint = 0x0a0; -pub const XK_exclamdown: libc::c_uint = 0x0a1; -pub const XK_cent: libc::c_uint = 0x0a2; -pub const XK_sterling: libc::c_uint = 0x0a3; -pub const XK_currency: libc::c_uint = 0x0a4; -pub const XK_yen: libc::c_uint = 0x0a5; -pub const XK_brokenbar: libc::c_uint = 0x0a6; -pub const XK_section: libc::c_uint = 0x0a7; -pub const XK_diaeresis: libc::c_uint = 0x0a8; -pub const XK_copyright: libc::c_uint = 0x0a9; -pub const XK_ordfeminine: libc::c_uint = 0x0aa; -pub const XK_guillemotleft: libc::c_uint = 0x0ab; -pub const XK_notsign: libc::c_uint = 0x0ac; -pub const XK_hyphen: libc::c_uint = 0x0ad; -pub const XK_registered: libc::c_uint = 0x0ae; -pub const XK_macron: libc::c_uint = 0x0af; -pub const XK_degree: libc::c_uint = 0x0b0; -pub const XK_plusminus: libc::c_uint = 0x0b1; -pub const XK_twosuperior: libc::c_uint = 0x0b2; -pub const XK_threesuperior: libc::c_uint = 0x0b3; -pub const XK_acute: libc::c_uint = 0x0b4; -pub const XK_mu: libc::c_uint = 0x0b5; -pub const XK_paragraph: libc::c_uint = 0x0b6; -pub const XK_periodcentered: libc::c_uint = 0x0b7; -pub const XK_cedilla: libc::c_uint = 0x0b8; -pub const XK_onesuperior: libc::c_uint = 0x0b9; -pub const XK_masculine: libc::c_uint = 0x0ba; -pub const XK_guillemotright: libc::c_uint = 0x0bb; -pub const XK_onequarter: libc::c_uint = 0x0bc; -pub const XK_onehalf: libc::c_uint = 0x0bd; -pub const XK_threequarters: libc::c_uint = 0x0be; -pub const XK_questiondown: libc::c_uint = 0x0bf; -pub const XK_Agrave: libc::c_uint = 0x0c0; -pub const XK_Aacute: libc::c_uint = 0x0c1; -pub const XK_Acircumflex: libc::c_uint = 0x0c2; -pub const XK_Atilde: libc::c_uint = 0x0c3; -pub const XK_Adiaeresis: libc::c_uint = 0x0c4; -pub const XK_Aring: libc::c_uint = 0x0c5; -pub const XK_AE: libc::c_uint = 0x0c6; -pub const XK_Ccedilla: libc::c_uint = 0x0c7; -pub const XK_Egrave: libc::c_uint = 0x0c8; -pub const XK_Eacute: libc::c_uint = 0x0c9; -pub const XK_Ecircumflex: libc::c_uint = 0x0ca; -pub const XK_Ediaeresis: libc::c_uint = 0x0cb; -pub const XK_Igrave: libc::c_uint = 0x0cc; -pub const XK_Iacute: libc::c_uint = 0x0cd; -pub const XK_Icircumflex: libc::c_uint = 0x0ce; -pub const XK_Idiaeresis: libc::c_uint = 0x0cf; -pub const XK_ETH: libc::c_uint = 0x0d0; -pub const XK_Eth: libc::c_uint = 0x0d0; -pub const XK_Ntilde: libc::c_uint = 0x0d1; -pub const XK_Ograve: libc::c_uint = 0x0d2; -pub const XK_Oacute: libc::c_uint = 0x0d3; -pub const XK_Ocircumflex: libc::c_uint = 0x0d4; -pub const XK_Otilde: libc::c_uint = 0x0d5; -pub const XK_Odiaeresis: libc::c_uint = 0x0d6; -pub const XK_multiply: libc::c_uint = 0x0d7; -pub const XK_Ooblique: libc::c_uint = 0x0d8; -pub const XK_Ugrave: libc::c_uint = 0x0d9; -pub const XK_Uacute: libc::c_uint = 0x0da; -pub const XK_Ucircumflex: libc::c_uint = 0x0db; -pub const XK_Udiaeresis: libc::c_uint = 0x0dc; -pub const XK_Yacute: libc::c_uint = 0x0dd; -pub const XK_THORN: libc::c_uint = 0x0de; -pub const XK_Thorn: libc::c_uint = 0x0de; -pub const XK_ssharp: libc::c_uint = 0x0df; -pub const XK_agrave: libc::c_uint = 0x0e0; -pub const XK_aacute: libc::c_uint = 0x0e1; -pub const XK_acircumflex: libc::c_uint = 0x0e2; -pub const XK_atilde: libc::c_uint = 0x0e3; -pub const XK_adiaeresis: libc::c_uint = 0x0e4; -pub const XK_aring: libc::c_uint = 0x0e5; -pub const XK_ae: libc::c_uint = 0x0e6; -pub const XK_ccedilla: libc::c_uint = 0x0e7; -pub const XK_egrave: libc::c_uint = 0x0e8; -pub const XK_eacute: libc::c_uint = 0x0e9; -pub const XK_ecircumflex: libc::c_uint = 0x0ea; -pub const XK_ediaeresis: libc::c_uint = 0x0eb; -pub const XK_igrave: libc::c_uint = 0x0ec; -pub const XK_iacute: libc::c_uint = 0x0ed; -pub const XK_icircumflex: libc::c_uint = 0x0ee; -pub const XK_idiaeresis: libc::c_uint = 0x0ef; -pub const XK_eth: libc::c_uint = 0x0f0; -pub const XK_ntilde: libc::c_uint = 0x0f1; -pub const XK_ograve: libc::c_uint = 0x0f2; -pub const XK_oacute: libc::c_uint = 0x0f3; -pub const XK_ocircumflex: libc::c_uint = 0x0f4; -pub const XK_otilde: libc::c_uint = 0x0f5; -pub const XK_odiaeresis: libc::c_uint = 0x0f6; -pub const XK_division: libc::c_uint = 0x0f7; -pub const XK_oslash: libc::c_uint = 0x0f8; -pub const XK_ugrave: libc::c_uint = 0x0f9; -pub const XK_uacute: libc::c_uint = 0x0fa; -pub const XK_ucircumflex: libc::c_uint = 0x0fb; -pub const XK_udiaeresis: libc::c_uint = 0x0fc; -pub const XK_yacute: libc::c_uint = 0x0fd; -pub const XK_thorn: libc::c_uint = 0x0fe; -pub const XK_ydiaeresis: libc::c_uint = 0x0ff; -pub const XK_Aogonek: libc::c_uint = 0x1a1; -pub const XK_breve: libc::c_uint = 0x1a2; -pub const XK_Lstroke: libc::c_uint = 0x1a3; -pub const XK_Lcaron: libc::c_uint = 0x1a5; -pub const XK_Sacute: libc::c_uint = 0x1a6; -pub const XK_Scaron: libc::c_uint = 0x1a9; -pub const XK_Scedilla: libc::c_uint = 0x1aa; -pub const XK_Tcaron: libc::c_uint = 0x1ab; -pub const XK_Zacute: libc::c_uint = 0x1ac; -pub const XK_Zcaron: libc::c_uint = 0x1ae; -pub const XK_Zabovedot: libc::c_uint = 0x1af; -pub const XK_aogonek: libc::c_uint = 0x1b1; -pub const XK_ogonek: libc::c_uint = 0x1b2; -pub const XK_lstroke: libc::c_uint = 0x1b3; -pub const XK_lcaron: libc::c_uint = 0x1b5; -pub const XK_sacute: libc::c_uint = 0x1b6; -pub const XK_caron: libc::c_uint = 0x1b7; -pub const XK_scaron: libc::c_uint = 0x1b9; -pub const XK_scedilla: libc::c_uint = 0x1ba; -pub const XK_tcaron: libc::c_uint = 0x1bb; -pub const XK_zacute: libc::c_uint = 0x1bc; -pub const XK_doubleacute: libc::c_uint = 0x1bd; -pub const XK_zcaron: libc::c_uint = 0x1be; -pub const XK_zabovedot: libc::c_uint = 0x1bf; -pub const XK_Racute: libc::c_uint = 0x1c0; -pub const XK_Abreve: libc::c_uint = 0x1c3; -pub const XK_Lacute: libc::c_uint = 0x1c5; -pub const XK_Cacute: libc::c_uint = 0x1c6; -pub const XK_Ccaron: libc::c_uint = 0x1c8; -pub const XK_Eogonek: libc::c_uint = 0x1ca; -pub const XK_Ecaron: libc::c_uint = 0x1cc; -pub const XK_Dcaron: libc::c_uint = 0x1cf; -pub const XK_Dstroke: libc::c_uint = 0x1d0; -pub const XK_Nacute: libc::c_uint = 0x1d1; -pub const XK_Ncaron: libc::c_uint = 0x1d2; -pub const XK_Odoubleacute: libc::c_uint = 0x1d5; -pub const XK_Rcaron: libc::c_uint = 0x1d8; -pub const XK_Uring: libc::c_uint = 0x1d9; -pub const XK_Udoubleacute: libc::c_uint = 0x1db; -pub const XK_Tcedilla: libc::c_uint = 0x1de; -pub const XK_racute: libc::c_uint = 0x1e0; -pub const XK_abreve: libc::c_uint = 0x1e3; -pub const XK_lacute: libc::c_uint = 0x1e5; -pub const XK_cacute: libc::c_uint = 0x1e6; -pub const XK_ccaron: libc::c_uint = 0x1e8; -pub const XK_eogonek: libc::c_uint = 0x1ea; -pub const XK_ecaron: libc::c_uint = 0x1ec; -pub const XK_dcaron: libc::c_uint = 0x1ef; -pub const XK_dstroke: libc::c_uint = 0x1f0; -pub const XK_nacute: libc::c_uint = 0x1f1; -pub const XK_ncaron: libc::c_uint = 0x1f2; -pub const XK_odoubleacute: libc::c_uint = 0x1f5; -pub const XK_udoubleacute: libc::c_uint = 0x1fb; -pub const XK_rcaron: libc::c_uint = 0x1f8; -pub const XK_uring: libc::c_uint = 0x1f9; -pub const XK_tcedilla: libc::c_uint = 0x1fe; -pub const XK_abovedot: libc::c_uint = 0x1ff; -pub const XK_Hstroke: libc::c_uint = 0x2a1; -pub const XK_Hcircumflex: libc::c_uint = 0x2a6; -pub const XK_Iabovedot: libc::c_uint = 0x2a9; -pub const XK_Gbreve: libc::c_uint = 0x2ab; -pub const XK_Jcircumflex: libc::c_uint = 0x2ac; -pub const XK_hstroke: libc::c_uint = 0x2b1; -pub const XK_hcircumflex: libc::c_uint = 0x2b6; -pub const XK_idotless: libc::c_uint = 0x2b9; -pub const XK_gbreve: libc::c_uint = 0x2bb; -pub const XK_jcircumflex: libc::c_uint = 0x2bc; -pub const XK_Cabovedot: libc::c_uint = 0x2c5; -pub const XK_Ccircumflex: libc::c_uint = 0x2c6; -pub const XK_Gabovedot: libc::c_uint = 0x2d5; -pub const XK_Gcircumflex: libc::c_uint = 0x2d8; -pub const XK_Ubreve: libc::c_uint = 0x2dd; -pub const XK_Scircumflex: libc::c_uint = 0x2de; -pub const XK_cabovedot: libc::c_uint = 0x2e5; -pub const XK_ccircumflex: libc::c_uint = 0x2e6; -pub const XK_gabovedot: libc::c_uint = 0x2f5; -pub const XK_gcircumflex: libc::c_uint = 0x2f8; -pub const XK_ubreve: libc::c_uint = 0x2fd; -pub const XK_scircumflex: libc::c_uint = 0x2fe; -pub const XK_kra: libc::c_uint = 0x3a2; -pub const XK_kappa: libc::c_uint = 0x3a2; -pub const XK_Rcedilla: libc::c_uint = 0x3a3; -pub const XK_Itilde: libc::c_uint = 0x3a5; -pub const XK_Lcedilla: libc::c_uint = 0x3a6; -pub const XK_Emacron: libc::c_uint = 0x3aa; -pub const XK_Gcedilla: libc::c_uint = 0x3ab; -pub const XK_Tslash: libc::c_uint = 0x3ac; -pub const XK_rcedilla: libc::c_uint = 0x3b3; -pub const XK_itilde: libc::c_uint = 0x3b5; -pub const XK_lcedilla: libc::c_uint = 0x3b6; -pub const XK_emacron: libc::c_uint = 0x3ba; -pub const XK_gcedilla: libc::c_uint = 0x3bb; -pub const XK_tslash: libc::c_uint = 0x3bc; -pub const XK_ENG: libc::c_uint = 0x3bd; -pub const XK_eng: libc::c_uint = 0x3bf; -pub const XK_Amacron: libc::c_uint = 0x3c0; -pub const XK_Iogonek: libc::c_uint = 0x3c7; -pub const XK_Eabovedot: libc::c_uint = 0x3cc; -pub const XK_Imacron: libc::c_uint = 0x3cf; -pub const XK_Ncedilla: libc::c_uint = 0x3d1; -pub const XK_Omacron: libc::c_uint = 0x3d2; -pub const XK_Kcedilla: libc::c_uint = 0x3d3; -pub const XK_Uogonek: libc::c_uint = 0x3d9; -pub const XK_Utilde: libc::c_uint = 0x3dd; -pub const XK_Umacron: libc::c_uint = 0x3de; -pub const XK_amacron: libc::c_uint = 0x3e0; -pub const XK_iogonek: libc::c_uint = 0x3e7; -pub const XK_eabovedot: libc::c_uint = 0x3ec; -pub const XK_imacron: libc::c_uint = 0x3ef; -pub const XK_ncedilla: libc::c_uint = 0x3f1; -pub const XK_omacron: libc::c_uint = 0x3f2; -pub const XK_kcedilla: libc::c_uint = 0x3f3; -pub const XK_uogonek: libc::c_uint = 0x3f9; -pub const XK_utilde: libc::c_uint = 0x3fd; -pub const XK_umacron: libc::c_uint = 0x3fe; -pub const XK_overline: libc::c_uint = 0x47e; -pub const XK_kana_fullstop: libc::c_uint = 0x4a1; -pub const XK_kana_openingbracket: libc::c_uint = 0x4a2; -pub const XK_kana_closingbracket: libc::c_uint = 0x4a3; -pub const XK_kana_comma: libc::c_uint = 0x4a4; -pub const XK_kana_conjunctive: libc::c_uint = 0x4a5; -pub const XK_kana_middledot: libc::c_uint = 0x4a5; -pub const XK_kana_WO: libc::c_uint = 0x4a6; -pub const XK_kana_a: libc::c_uint = 0x4a7; -pub const XK_kana_i: libc::c_uint = 0x4a8; -pub const XK_kana_u: libc::c_uint = 0x4a9; -pub const XK_kana_e: libc::c_uint = 0x4aa; -pub const XK_kana_o: libc::c_uint = 0x4ab; -pub const XK_kana_ya: libc::c_uint = 0x4ac; -pub const XK_kana_yu: libc::c_uint = 0x4ad; -pub const XK_kana_yo: libc::c_uint = 0x4ae; -pub const XK_kana_tsu: libc::c_uint = 0x4af; -pub const XK_kana_tu: libc::c_uint = 0x4af; -pub const XK_prolongedsound: libc::c_uint = 0x4b0; -pub const XK_kana_A: libc::c_uint = 0x4b1; -pub const XK_kana_I: libc::c_uint = 0x4b2; -pub const XK_kana_U: libc::c_uint = 0x4b3; -pub const XK_kana_E: libc::c_uint = 0x4b4; -pub const XK_kana_O: libc::c_uint = 0x4b5; -pub const XK_kana_KA: libc::c_uint = 0x4b6; -pub const XK_kana_KI: libc::c_uint = 0x4b7; -pub const XK_kana_KU: libc::c_uint = 0x4b8; -pub const XK_kana_KE: libc::c_uint = 0x4b9; -pub const XK_kana_KO: libc::c_uint = 0x4ba; -pub const XK_kana_SA: libc::c_uint = 0x4bb; -pub const XK_kana_SHI: libc::c_uint = 0x4bc; -pub const XK_kana_SU: libc::c_uint = 0x4bd; -pub const XK_kana_SE: libc::c_uint = 0x4be; -pub const XK_kana_SO: libc::c_uint = 0x4bf; -pub const XK_kana_TA: libc::c_uint = 0x4c0; -pub const XK_kana_CHI: libc::c_uint = 0x4c1; -pub const XK_kana_TI: libc::c_uint = 0x4c1; -pub const XK_kana_TSU: libc::c_uint = 0x4c2; -pub const XK_kana_TU: libc::c_uint = 0x4c2; -pub const XK_kana_TE: libc::c_uint = 0x4c3; -pub const XK_kana_TO: libc::c_uint = 0x4c4; -pub const XK_kana_NA: libc::c_uint = 0x4c5; -pub const XK_kana_NI: libc::c_uint = 0x4c6; -pub const XK_kana_NU: libc::c_uint = 0x4c7; -pub const XK_kana_NE: libc::c_uint = 0x4c8; -pub const XK_kana_NO: libc::c_uint = 0x4c9; -pub const XK_kana_HA: libc::c_uint = 0x4ca; -pub const XK_kana_HI: libc::c_uint = 0x4cb; -pub const XK_kana_FU: libc::c_uint = 0x4cc; -pub const XK_kana_HU: libc::c_uint = 0x4cc; -pub const XK_kana_HE: libc::c_uint = 0x4cd; -pub const XK_kana_HO: libc::c_uint = 0x4ce; -pub const XK_kana_MA: libc::c_uint = 0x4cf; -pub const XK_kana_MI: libc::c_uint = 0x4d0; -pub const XK_kana_MU: libc::c_uint = 0x4d1; -pub const XK_kana_ME: libc::c_uint = 0x4d2; -pub const XK_kana_MO: libc::c_uint = 0x4d3; -pub const XK_kana_YA: libc::c_uint = 0x4d4; -pub const XK_kana_YU: libc::c_uint = 0x4d5; -pub const XK_kana_YO: libc::c_uint = 0x4d6; -pub const XK_kana_RA: libc::c_uint = 0x4d7; -pub const XK_kana_RI: libc::c_uint = 0x4d8; -pub const XK_kana_RU: libc::c_uint = 0x4d9; -pub const XK_kana_RE: libc::c_uint = 0x4da; -pub const XK_kana_RO: libc::c_uint = 0x4db; -pub const XK_kana_WA: libc::c_uint = 0x4dc; -pub const XK_kana_N: libc::c_uint = 0x4dd; -pub const XK_voicedsound: libc::c_uint = 0x4de; -pub const XK_semivoicedsound: libc::c_uint = 0x4df; -pub const XK_kana_switch: libc::c_uint = 0xFF7E; -pub const XK_Arabic_comma: libc::c_uint = 0x5ac; -pub const XK_Arabic_semicolon: libc::c_uint = 0x5bb; -pub const XK_Arabic_question_mark: libc::c_uint = 0x5bf; -pub const XK_Arabic_hamza: libc::c_uint = 0x5c1; -pub const XK_Arabic_maddaonalef: libc::c_uint = 0x5c2; -pub const XK_Arabic_hamzaonalef: libc::c_uint = 0x5c3; -pub const XK_Arabic_hamzaonwaw: libc::c_uint = 0x5c4; -pub const XK_Arabic_hamzaunderalef: libc::c_uint = 0x5c5; -pub const XK_Arabic_hamzaonyeh: libc::c_uint = 0x5c6; -pub const XK_Arabic_alef: libc::c_uint = 0x5c7; -pub const XK_Arabic_beh: libc::c_uint = 0x5c8; -pub const XK_Arabic_tehmarbuta: libc::c_uint = 0x5c9; -pub const XK_Arabic_teh: libc::c_uint = 0x5ca; -pub const XK_Arabic_theh: libc::c_uint = 0x5cb; -pub const XK_Arabic_jeem: libc::c_uint = 0x5cc; -pub const XK_Arabic_hah: libc::c_uint = 0x5cd; -pub const XK_Arabic_khah: libc::c_uint = 0x5ce; -pub const XK_Arabic_dal: libc::c_uint = 0x5cf; -pub const XK_Arabic_thal: libc::c_uint = 0x5d0; -pub const XK_Arabic_ra: libc::c_uint = 0x5d1; -pub const XK_Arabic_zain: libc::c_uint = 0x5d2; -pub const XK_Arabic_seen: libc::c_uint = 0x5d3; -pub const XK_Arabic_sheen: libc::c_uint = 0x5d4; -pub const XK_Arabic_sad: libc::c_uint = 0x5d5; -pub const XK_Arabic_dad: libc::c_uint = 0x5d6; -pub const XK_Arabic_tah: libc::c_uint = 0x5d7; -pub const XK_Arabic_zah: libc::c_uint = 0x5d8; -pub const XK_Arabic_ain: libc::c_uint = 0x5d9; -pub const XK_Arabic_ghain: libc::c_uint = 0x5da; -pub const XK_Arabic_tatweel: libc::c_uint = 0x5e0; -pub const XK_Arabic_feh: libc::c_uint = 0x5e1; -pub const XK_Arabic_qaf: libc::c_uint = 0x5e2; -pub const XK_Arabic_kaf: libc::c_uint = 0x5e3; -pub const XK_Arabic_lam: libc::c_uint = 0x5e4; -pub const XK_Arabic_meem: libc::c_uint = 0x5e5; -pub const XK_Arabic_noon: libc::c_uint = 0x5e6; -pub const XK_Arabic_ha: libc::c_uint = 0x5e7; -pub const XK_Arabic_heh: libc::c_uint = 0x5e7; -pub const XK_Arabic_waw: libc::c_uint = 0x5e8; -pub const XK_Arabic_alefmaksura: libc::c_uint = 0x5e9; -pub const XK_Arabic_yeh: libc::c_uint = 0x5ea; -pub const XK_Arabic_fathatan: libc::c_uint = 0x5eb; -pub const XK_Arabic_dammatan: libc::c_uint = 0x5ec; -pub const XK_Arabic_kasratan: libc::c_uint = 0x5ed; -pub const XK_Arabic_fatha: libc::c_uint = 0x5ee; -pub const XK_Arabic_damma: libc::c_uint = 0x5ef; -pub const XK_Arabic_kasra: libc::c_uint = 0x5f0; -pub const XK_Arabic_shadda: libc::c_uint = 0x5f1; -pub const XK_Arabic_sukun: libc::c_uint = 0x5f2; -pub const XK_Arabic_switch: libc::c_uint = 0xFF7E; -pub const XK_Serbian_dje: libc::c_uint = 0x6a1; -pub const XK_Macedonia_gje: libc::c_uint = 0x6a2; -pub const XK_Cyrillic_io: libc::c_uint = 0x6a3; -pub const XK_Ukrainian_ie: libc::c_uint = 0x6a4; -pub const XK_Ukranian_je: libc::c_uint = 0x6a4; -pub const XK_Macedonia_dse: libc::c_uint = 0x6a5; -pub const XK_Ukrainian_i: libc::c_uint = 0x6a6; -pub const XK_Ukranian_i: libc::c_uint = 0x6a6; -pub const XK_Ukrainian_yi: libc::c_uint = 0x6a7; -pub const XK_Ukranian_yi: libc::c_uint = 0x6a7; -pub const XK_Cyrillic_je: libc::c_uint = 0x6a8; -pub const XK_Serbian_je: libc::c_uint = 0x6a8; -pub const XK_Cyrillic_lje: libc::c_uint = 0x6a9; -pub const XK_Serbian_lje: libc::c_uint = 0x6a9; -pub const XK_Cyrillic_nje: libc::c_uint = 0x6aa; -pub const XK_Serbian_nje: libc::c_uint = 0x6aa; -pub const XK_Serbian_tshe: libc::c_uint = 0x6ab; -pub const XK_Macedonia_kje: libc::c_uint = 0x6ac; -pub const XK_Byelorussian_shortu: libc::c_uint = 0x6ae; -pub const XK_Cyrillic_dzhe: libc::c_uint = 0x6af; -pub const XK_Serbian_dze: libc::c_uint = 0x6af; -pub const XK_numerosign: libc::c_uint = 0x6b0; -pub const XK_Serbian_DJE: libc::c_uint = 0x6b1; -pub const XK_Macedonia_GJE: libc::c_uint = 0x6b2; -pub const XK_Cyrillic_IO: libc::c_uint = 0x6b3; -pub const XK_Ukrainian_IE: libc::c_uint = 0x6b4; -pub const XK_Ukranian_JE: libc::c_uint = 0x6b4; -pub const XK_Macedonia_DSE: libc::c_uint = 0x6b5; -pub const XK_Ukrainian_I: libc::c_uint = 0x6b6; -pub const XK_Ukranian_I: libc::c_uint = 0x6b6; -pub const XK_Ukrainian_YI: libc::c_uint = 0x6b7; -pub const XK_Ukranian_YI: libc::c_uint = 0x6b7; -pub const XK_Cyrillic_JE: libc::c_uint = 0x6b8; -pub const XK_Serbian_JE: libc::c_uint = 0x6b8; -pub const XK_Cyrillic_LJE: libc::c_uint = 0x6b9; -pub const XK_Serbian_LJE: libc::c_uint = 0x6b9; -pub const XK_Cyrillic_NJE: libc::c_uint = 0x6ba; -pub const XK_Serbian_NJE: libc::c_uint = 0x6ba; -pub const XK_Serbian_TSHE: libc::c_uint = 0x6bb; -pub const XK_Macedonia_KJE: libc::c_uint = 0x6bc; -pub const XK_Byelorussian_SHORTU: libc::c_uint = 0x6be; -pub const XK_Cyrillic_DZHE: libc::c_uint = 0x6bf; -pub const XK_Serbian_DZE: libc::c_uint = 0x6bf; -pub const XK_Cyrillic_yu: libc::c_uint = 0x6c0; -pub const XK_Cyrillic_a: libc::c_uint = 0x6c1; -pub const XK_Cyrillic_be: libc::c_uint = 0x6c2; -pub const XK_Cyrillic_tse: libc::c_uint = 0x6c3; -pub const XK_Cyrillic_de: libc::c_uint = 0x6c4; -pub const XK_Cyrillic_ie: libc::c_uint = 0x6c5; -pub const XK_Cyrillic_ef: libc::c_uint = 0x6c6; -pub const XK_Cyrillic_ghe: libc::c_uint = 0x6c7; -pub const XK_Cyrillic_ha: libc::c_uint = 0x6c8; -pub const XK_Cyrillic_i: libc::c_uint = 0x6c9; -pub const XK_Cyrillic_shorti: libc::c_uint = 0x6ca; -pub const XK_Cyrillic_ka: libc::c_uint = 0x6cb; -pub const XK_Cyrillic_el: libc::c_uint = 0x6cc; -pub const XK_Cyrillic_em: libc::c_uint = 0x6cd; -pub const XK_Cyrillic_en: libc::c_uint = 0x6ce; -pub const XK_Cyrillic_o: libc::c_uint = 0x6cf; -pub const XK_Cyrillic_pe: libc::c_uint = 0x6d0; -pub const XK_Cyrillic_ya: libc::c_uint = 0x6d1; -pub const XK_Cyrillic_er: libc::c_uint = 0x6d2; -pub const XK_Cyrillic_es: libc::c_uint = 0x6d3; -pub const XK_Cyrillic_te: libc::c_uint = 0x6d4; -pub const XK_Cyrillic_u: libc::c_uint = 0x6d5; -pub const XK_Cyrillic_zhe: libc::c_uint = 0x6d6; -pub const XK_Cyrillic_ve: libc::c_uint = 0x6d7; -pub const XK_Cyrillic_softsign: libc::c_uint = 0x6d8; -pub const XK_Cyrillic_yeru: libc::c_uint = 0x6d9; -pub const XK_Cyrillic_ze: libc::c_uint = 0x6da; -pub const XK_Cyrillic_sha: libc::c_uint = 0x6db; -pub const XK_Cyrillic_e: libc::c_uint = 0x6dc; -pub const XK_Cyrillic_shcha: libc::c_uint = 0x6dd; -pub const XK_Cyrillic_che: libc::c_uint = 0x6de; -pub const XK_Cyrillic_hardsign: libc::c_uint = 0x6df; -pub const XK_Cyrillic_YU: libc::c_uint = 0x6e0; -pub const XK_Cyrillic_A: libc::c_uint = 0x6e1; -pub const XK_Cyrillic_BE: libc::c_uint = 0x6e2; -pub const XK_Cyrillic_TSE: libc::c_uint = 0x6e3; -pub const XK_Cyrillic_DE: libc::c_uint = 0x6e4; -pub const XK_Cyrillic_IE: libc::c_uint = 0x6e5; -pub const XK_Cyrillic_EF: libc::c_uint = 0x6e6; -pub const XK_Cyrillic_GHE: libc::c_uint = 0x6e7; -pub const XK_Cyrillic_HA: libc::c_uint = 0x6e8; -pub const XK_Cyrillic_I: libc::c_uint = 0x6e9; -pub const XK_Cyrillic_SHORTI: libc::c_uint = 0x6ea; -pub const XK_Cyrillic_KA: libc::c_uint = 0x6eb; -pub const XK_Cyrillic_EL: libc::c_uint = 0x6ec; -pub const XK_Cyrillic_EM: libc::c_uint = 0x6ed; -pub const XK_Cyrillic_EN: libc::c_uint = 0x6ee; -pub const XK_Cyrillic_O: libc::c_uint = 0x6ef; -pub const XK_Cyrillic_PE: libc::c_uint = 0x6f0; -pub const XK_Cyrillic_YA: libc::c_uint = 0x6f1; -pub const XK_Cyrillic_ER: libc::c_uint = 0x6f2; -pub const XK_Cyrillic_ES: libc::c_uint = 0x6f3; -pub const XK_Cyrillic_TE: libc::c_uint = 0x6f4; -pub const XK_Cyrillic_U: libc::c_uint = 0x6f5; -pub const XK_Cyrillic_ZHE: libc::c_uint = 0x6f6; -pub const XK_Cyrillic_VE: libc::c_uint = 0x6f7; -pub const XK_Cyrillic_SOFTSIGN: libc::c_uint = 0x6f8; -pub const XK_Cyrillic_YERU: libc::c_uint = 0x6f9; -pub const XK_Cyrillic_ZE: libc::c_uint = 0x6fa; -pub const XK_Cyrillic_SHA: libc::c_uint = 0x6fb; -pub const XK_Cyrillic_E: libc::c_uint = 0x6fc; -pub const XK_Cyrillic_SHCHA: libc::c_uint = 0x6fd; -pub const XK_Cyrillic_CHE: libc::c_uint = 0x6fe; -pub const XK_Cyrillic_HARDSIGN: libc::c_uint = 0x6ff; -pub const XK_Greek_ALPHAaccent: libc::c_uint = 0x7a1; -pub const XK_Greek_EPSILONaccent: libc::c_uint = 0x7a2; -pub const XK_Greek_ETAaccent: libc::c_uint = 0x7a3; -pub const XK_Greek_IOTAaccent: libc::c_uint = 0x7a4; -pub const XK_Greek_IOTAdiaeresis: libc::c_uint = 0x7a5; -pub const XK_Greek_OMICRONaccent: libc::c_uint = 0x7a7; -pub const XK_Greek_UPSILONaccent: libc::c_uint = 0x7a8; -pub const XK_Greek_UPSILONdieresis: libc::c_uint = 0x7a9; -pub const XK_Greek_OMEGAaccent: libc::c_uint = 0x7ab; -pub const XK_Greek_accentdieresis: libc::c_uint = 0x7ae; -pub const XK_Greek_horizbar: libc::c_uint = 0x7af; -pub const XK_Greek_alphaaccent: libc::c_uint = 0x7b1; -pub const XK_Greek_epsilonaccent: libc::c_uint = 0x7b2; -pub const XK_Greek_etaaccent: libc::c_uint = 0x7b3; -pub const XK_Greek_iotaaccent: libc::c_uint = 0x7b4; -pub const XK_Greek_iotadieresis: libc::c_uint = 0x7b5; -pub const XK_Greek_iotaaccentdieresis: libc::c_uint = 0x7b6; -pub const XK_Greek_omicronaccent: libc::c_uint = 0x7b7; -pub const XK_Greek_upsilonaccent: libc::c_uint = 0x7b8; -pub const XK_Greek_upsilondieresis: libc::c_uint = 0x7b9; -pub const XK_Greek_upsilonaccentdieresis: libc::c_uint = 0x7ba; -pub const XK_Greek_omegaaccent: libc::c_uint = 0x7bb; -pub const XK_Greek_ALPHA: libc::c_uint = 0x7c1; -pub const XK_Greek_BETA: libc::c_uint = 0x7c2; -pub const XK_Greek_GAMMA: libc::c_uint = 0x7c3; -pub const XK_Greek_DELTA: libc::c_uint = 0x7c4; -pub const XK_Greek_EPSILON: libc::c_uint = 0x7c5; -pub const XK_Greek_ZETA: libc::c_uint = 0x7c6; -pub const XK_Greek_ETA: libc::c_uint = 0x7c7; -pub const XK_Greek_THETA: libc::c_uint = 0x7c8; -pub const XK_Greek_IOTA: libc::c_uint = 0x7c9; -pub const XK_Greek_KAPPA: libc::c_uint = 0x7ca; -pub const XK_Greek_LAMDA: libc::c_uint = 0x7cb; -pub const XK_Greek_LAMBDA: libc::c_uint = 0x7cb; -pub const XK_Greek_MU: libc::c_uint = 0x7cc; -pub const XK_Greek_NU: libc::c_uint = 0x7cd; -pub const XK_Greek_XI: libc::c_uint = 0x7ce; -pub const XK_Greek_OMICRON: libc::c_uint = 0x7cf; -pub const XK_Greek_PI: libc::c_uint = 0x7d0; -pub const XK_Greek_RHO: libc::c_uint = 0x7d1; -pub const XK_Greek_SIGMA: libc::c_uint = 0x7d2; -pub const XK_Greek_TAU: libc::c_uint = 0x7d4; -pub const XK_Greek_UPSILON: libc::c_uint = 0x7d5; -pub const XK_Greek_PHI: libc::c_uint = 0x7d6; -pub const XK_Greek_CHI: libc::c_uint = 0x7d7; -pub const XK_Greek_PSI: libc::c_uint = 0x7d8; -pub const XK_Greek_OMEGA: libc::c_uint = 0x7d9; -pub const XK_Greek_alpha: libc::c_uint = 0x7e1; -pub const XK_Greek_beta: libc::c_uint = 0x7e2; -pub const XK_Greek_gamma: libc::c_uint = 0x7e3; -pub const XK_Greek_delta: libc::c_uint = 0x7e4; -pub const XK_Greek_epsilon: libc::c_uint = 0x7e5; -pub const XK_Greek_zeta: libc::c_uint = 0x7e6; -pub const XK_Greek_eta: libc::c_uint = 0x7e7; -pub const XK_Greek_theta: libc::c_uint = 0x7e8; -pub const XK_Greek_iota: libc::c_uint = 0x7e9; -pub const XK_Greek_kappa: libc::c_uint = 0x7ea; -pub const XK_Greek_lamda: libc::c_uint = 0x7eb; -pub const XK_Greek_lambda: libc::c_uint = 0x7eb; -pub const XK_Greek_mu: libc::c_uint = 0x7ec; -pub const XK_Greek_nu: libc::c_uint = 0x7ed; -pub const XK_Greek_xi: libc::c_uint = 0x7ee; -pub const XK_Greek_omicron: libc::c_uint = 0x7ef; -pub const XK_Greek_pi: libc::c_uint = 0x7f0; -pub const XK_Greek_rho: libc::c_uint = 0x7f1; -pub const XK_Greek_sigma: libc::c_uint = 0x7f2; -pub const XK_Greek_finalsmallsigma: libc::c_uint = 0x7f3; -pub const XK_Greek_tau: libc::c_uint = 0x7f4; -pub const XK_Greek_upsilon: libc::c_uint = 0x7f5; -pub const XK_Greek_phi: libc::c_uint = 0x7f6; -pub const XK_Greek_chi: libc::c_uint = 0x7f7; -pub const XK_Greek_psi: libc::c_uint = 0x7f8; -pub const XK_Greek_omega: libc::c_uint = 0x7f9; -pub const XK_Greek_switch: libc::c_uint = 0xFF7E; -pub const XK_leftradical: libc::c_uint = 0x8a1; -pub const XK_topleftradical: libc::c_uint = 0x8a2; -pub const XK_horizconnector: libc::c_uint = 0x8a3; -pub const XK_topintegral: libc::c_uint = 0x8a4; -pub const XK_botintegral: libc::c_uint = 0x8a5; -pub const XK_vertconnector: libc::c_uint = 0x8a6; -pub const XK_topleftsqbracket: libc::c_uint = 0x8a7; -pub const XK_botleftsqbracket: libc::c_uint = 0x8a8; -pub const XK_toprightsqbracket: libc::c_uint = 0x8a9; -pub const XK_botrightsqbracket: libc::c_uint = 0x8aa; -pub const XK_topleftparens: libc::c_uint = 0x8ab; -pub const XK_botleftparens: libc::c_uint = 0x8ac; -pub const XK_toprightparens: libc::c_uint = 0x8ad; -pub const XK_botrightparens: libc::c_uint = 0x8ae; -pub const XK_leftmiddlecurlybrace: libc::c_uint = 0x8af; -pub const XK_rightmiddlecurlybrace: libc::c_uint = 0x8b0; -pub const XK_topleftsummation: libc::c_uint = 0x8b1; -pub const XK_botleftsummation: libc::c_uint = 0x8b2; -pub const XK_topvertsummationconnector: libc::c_uint = 0x8b3; -pub const XK_botvertsummationconnector: libc::c_uint = 0x8b4; -pub const XK_toprightsummation: libc::c_uint = 0x8b5; -pub const XK_botrightsummation: libc::c_uint = 0x8b6; -pub const XK_rightmiddlesummation: libc::c_uint = 0x8b7; -pub const XK_lessthanequal: libc::c_uint = 0x8bc; -pub const XK_notequal: libc::c_uint = 0x8bd; -pub const XK_greaterthanequal: libc::c_uint = 0x8be; -pub const XK_integral: libc::c_uint = 0x8bf; -pub const XK_therefore: libc::c_uint = 0x8c0; -pub const XK_variation: libc::c_uint = 0x8c1; -pub const XK_infinity: libc::c_uint = 0x8c2; -pub const XK_nabla: libc::c_uint = 0x8c5; -pub const XK_approximate: libc::c_uint = 0x8c8; -pub const XK_similarequal: libc::c_uint = 0x8c9; -pub const XK_ifonlyif: libc::c_uint = 0x8cd; -pub const XK_implies: libc::c_uint = 0x8ce; -pub const XK_identical: libc::c_uint = 0x8cf; -pub const XK_radical: libc::c_uint = 0x8d6; -pub const XK_includedin: libc::c_uint = 0x8da; -pub const XK_includes: libc::c_uint = 0x8db; -pub const XK_intersection: libc::c_uint = 0x8dc; -pub const XK_union: libc::c_uint = 0x8dd; -pub const XK_logicaland: libc::c_uint = 0x8de; -pub const XK_logicalor: libc::c_uint = 0x8df; -pub const XK_partialderivative: libc::c_uint = 0x8ef; -pub const XK_function: libc::c_uint = 0x8f6; -pub const XK_leftarrow: libc::c_uint = 0x8fb; -pub const XK_uparrow: libc::c_uint = 0x8fc; -pub const XK_rightarrow: libc::c_uint = 0x8fd; -pub const XK_downarrow: libc::c_uint = 0x8fe; -pub const XK_blank: libc::c_uint = 0x9df; -pub const XK_soliddiamond: libc::c_uint = 0x9e0; -pub const XK_checkerboard: libc::c_uint = 0x9e1; -pub const XK_ht: libc::c_uint = 0x9e2; -pub const XK_ff: libc::c_uint = 0x9e3; -pub const XK_cr: libc::c_uint = 0x9e4; -pub const XK_lf: libc::c_uint = 0x9e5; -pub const XK_nl: libc::c_uint = 0x9e8; -pub const XK_vt: libc::c_uint = 0x9e9; -pub const XK_lowrightcorner: libc::c_uint = 0x9ea; -pub const XK_uprightcorner: libc::c_uint = 0x9eb; -pub const XK_upleftcorner: libc::c_uint = 0x9ec; -pub const XK_lowleftcorner: libc::c_uint = 0x9ed; -pub const XK_crossinglines: libc::c_uint = 0x9ee; -pub const XK_horizlinescan1: libc::c_uint = 0x9ef; -pub const XK_horizlinescan3: libc::c_uint = 0x9f0; -pub const XK_horizlinescan5: libc::c_uint = 0x9f1; -pub const XK_horizlinescan7: libc::c_uint = 0x9f2; -pub const XK_horizlinescan9: libc::c_uint = 0x9f3; -pub const XK_leftt: libc::c_uint = 0x9f4; -pub const XK_rightt: libc::c_uint = 0x9f5; -pub const XK_bott: libc::c_uint = 0x9f6; -pub const XK_topt: libc::c_uint = 0x9f7; -pub const XK_vertbar: libc::c_uint = 0x9f8; -pub const XK_emspace: libc::c_uint = 0xaa1; -pub const XK_enspace: libc::c_uint = 0xaa2; -pub const XK_em3space: libc::c_uint = 0xaa3; -pub const XK_em4space: libc::c_uint = 0xaa4; -pub const XK_digitspace: libc::c_uint = 0xaa5; -pub const XK_punctspace: libc::c_uint = 0xaa6; -pub const XK_thinspace: libc::c_uint = 0xaa7; -pub const XK_hairspace: libc::c_uint = 0xaa8; -pub const XK_emdash: libc::c_uint = 0xaa9; -pub const XK_endash: libc::c_uint = 0xaaa; -pub const XK_signifblank: libc::c_uint = 0xaac; -pub const XK_ellipsis: libc::c_uint = 0xaae; -pub const XK_doubbaselinedot: libc::c_uint = 0xaaf; -pub const XK_onethird: libc::c_uint = 0xab0; -pub const XK_twothirds: libc::c_uint = 0xab1; -pub const XK_onefifth: libc::c_uint = 0xab2; -pub const XK_twofifths: libc::c_uint = 0xab3; -pub const XK_threefifths: libc::c_uint = 0xab4; -pub const XK_fourfifths: libc::c_uint = 0xab5; -pub const XK_onesixth: libc::c_uint = 0xab6; -pub const XK_fivesixths: libc::c_uint = 0xab7; -pub const XK_careof: libc::c_uint = 0xab8; -pub const XK_figdash: libc::c_uint = 0xabb; -pub const XK_leftanglebracket: libc::c_uint = 0xabc; -pub const XK_decimalpoint: libc::c_uint = 0xabd; -pub const XK_rightanglebracket: libc::c_uint = 0xabe; -pub const XK_marker: libc::c_uint = 0xabf; -pub const XK_oneeighth: libc::c_uint = 0xac3; -pub const XK_threeeighths: libc::c_uint = 0xac4; -pub const XK_fiveeighths: libc::c_uint = 0xac5; -pub const XK_seveneighths: libc::c_uint = 0xac6; -pub const XK_trademark: libc::c_uint = 0xac9; -pub const XK_signaturemark: libc::c_uint = 0xaca; -pub const XK_trademarkincircle: libc::c_uint = 0xacb; -pub const XK_leftopentriangle: libc::c_uint = 0xacc; -pub const XK_rightopentriangle: libc::c_uint = 0xacd; -pub const XK_emopencircle: libc::c_uint = 0xace; -pub const XK_emopenrectangle: libc::c_uint = 0xacf; -pub const XK_leftsinglequotemark: libc::c_uint = 0xad0; -pub const XK_rightsinglequotemark: libc::c_uint = 0xad1; -pub const XK_leftdoublequotemark: libc::c_uint = 0xad2; -pub const XK_rightdoublequotemark: libc::c_uint = 0xad3; -pub const XK_prescription: libc::c_uint = 0xad4; -pub const XK_minutes: libc::c_uint = 0xad6; -pub const XK_seconds: libc::c_uint = 0xad7; -pub const XK_latincross: libc::c_uint = 0xad9; -pub const XK_hexagram: libc::c_uint = 0xada; -pub const XK_filledrectbullet: libc::c_uint = 0xadb; -pub const XK_filledlefttribullet: libc::c_uint = 0xadc; -pub const XK_filledrighttribullet: libc::c_uint = 0xadd; -pub const XK_emfilledcircle: libc::c_uint = 0xade; -pub const XK_emfilledrect: libc::c_uint = 0xadf; -pub const XK_enopencircbullet: libc::c_uint = 0xae0; -pub const XK_enopensquarebullet: libc::c_uint = 0xae1; -pub const XK_openrectbullet: libc::c_uint = 0xae2; -pub const XK_opentribulletup: libc::c_uint = 0xae3; -pub const XK_opentribulletdown: libc::c_uint = 0xae4; -pub const XK_openstar: libc::c_uint = 0xae5; -pub const XK_enfilledcircbullet: libc::c_uint = 0xae6; -pub const XK_enfilledsqbullet: libc::c_uint = 0xae7; -pub const XK_filledtribulletup: libc::c_uint = 0xae8; -pub const XK_filledtribulletdown: libc::c_uint = 0xae9; -pub const XK_leftpointer: libc::c_uint = 0xaea; -pub const XK_rightpointer: libc::c_uint = 0xaeb; -pub const XK_club: libc::c_uint = 0xaec; -pub const XK_diamond: libc::c_uint = 0xaed; -pub const XK_heart: libc::c_uint = 0xaee; -pub const XK_maltesecross: libc::c_uint = 0xaf0; -pub const XK_dagger: libc::c_uint = 0xaf1; -pub const XK_doubledagger: libc::c_uint = 0xaf2; -pub const XK_checkmark: libc::c_uint = 0xaf3; -pub const XK_ballotcross: libc::c_uint = 0xaf4; -pub const XK_musicalsharp: libc::c_uint = 0xaf5; -pub const XK_musicalflat: libc::c_uint = 0xaf6; -pub const XK_malesymbol: libc::c_uint = 0xaf7; -pub const XK_femalesymbol: libc::c_uint = 0xaf8; -pub const XK_telephone: libc::c_uint = 0xaf9; -pub const XK_telephonerecorder: libc::c_uint = 0xafa; -pub const XK_phonographcopyright: libc::c_uint = 0xafb; -pub const XK_caret: libc::c_uint = 0xafc; -pub const XK_singlelowquotemark: libc::c_uint = 0xafd; -pub const XK_doublelowquotemark: libc::c_uint = 0xafe; -pub const XK_cursor: libc::c_uint = 0xaff; -pub const XK_leftcaret: libc::c_uint = 0xba3; -pub const XK_rightcaret: libc::c_uint = 0xba6; -pub const XK_downcaret: libc::c_uint = 0xba8; -pub const XK_upcaret: libc::c_uint = 0xba9; -pub const XK_overbar: libc::c_uint = 0xbc0; -pub const XK_downtack: libc::c_uint = 0xbc2; -pub const XK_upshoe: libc::c_uint = 0xbc3; -pub const XK_downstile: libc::c_uint = 0xbc4; -pub const XK_underbar: libc::c_uint = 0xbc6; -pub const XK_jot: libc::c_uint = 0xbca; -pub const XK_quad: libc::c_uint = 0xbcc; -pub const XK_uptack: libc::c_uint = 0xbce; -pub const XK_circle: libc::c_uint = 0xbcf; -pub const XK_upstile: libc::c_uint = 0xbd3; -pub const XK_downshoe: libc::c_uint = 0xbd6; -pub const XK_rightshoe: libc::c_uint = 0xbd8; -pub const XK_leftshoe: libc::c_uint = 0xbda; -pub const XK_lefttack: libc::c_uint = 0xbdc; -pub const XK_righttack: libc::c_uint = 0xbfc; -pub const XK_hebrew_doublelowline: libc::c_uint = 0xcdf; -pub const XK_hebrew_aleph: libc::c_uint = 0xce0; -pub const XK_hebrew_bet: libc::c_uint = 0xce1; -pub const XK_hebrew_beth: libc::c_uint = 0xce1; -pub const XK_hebrew_gimel: libc::c_uint = 0xce2; -pub const XK_hebrew_gimmel: libc::c_uint = 0xce2; -pub const XK_hebrew_dalet: libc::c_uint = 0xce3; -pub const XK_hebrew_daleth: libc::c_uint = 0xce3; -pub const XK_hebrew_he: libc::c_uint = 0xce4; -pub const XK_hebrew_waw: libc::c_uint = 0xce5; -pub const XK_hebrew_zain: libc::c_uint = 0xce6; -pub const XK_hebrew_zayin: libc::c_uint = 0xce6; -pub const XK_hebrew_chet: libc::c_uint = 0xce7; -pub const XK_hebrew_het: libc::c_uint = 0xce7; -pub const XK_hebrew_tet: libc::c_uint = 0xce8; -pub const XK_hebrew_teth: libc::c_uint = 0xce8; -pub const XK_hebrew_yod: libc::c_uint = 0xce9; -pub const XK_hebrew_finalkaph: libc::c_uint = 0xcea; -pub const XK_hebrew_kaph: libc::c_uint = 0xceb; -pub const XK_hebrew_lamed: libc::c_uint = 0xcec; -pub const XK_hebrew_finalmem: libc::c_uint = 0xced; -pub const XK_hebrew_mem: libc::c_uint = 0xcee; -pub const XK_hebrew_finalnun: libc::c_uint = 0xcef; -pub const XK_hebrew_nun: libc::c_uint = 0xcf0; -pub const XK_hebrew_samech: libc::c_uint = 0xcf1; -pub const XK_hebrew_samekh: libc::c_uint = 0xcf1; -pub const XK_hebrew_ayin: libc::c_uint = 0xcf2; -pub const XK_hebrew_finalpe: libc::c_uint = 0xcf3; -pub const XK_hebrew_pe: libc::c_uint = 0xcf4; -pub const XK_hebrew_finalzade: libc::c_uint = 0xcf5; -pub const XK_hebrew_finalzadi: libc::c_uint = 0xcf5; -pub const XK_hebrew_zade: libc::c_uint = 0xcf6; -pub const XK_hebrew_zadi: libc::c_uint = 0xcf6; -pub const XK_hebrew_qoph: libc::c_uint = 0xcf7; -pub const XK_hebrew_kuf: libc::c_uint = 0xcf7; -pub const XK_hebrew_resh: libc::c_uint = 0xcf8; -pub const XK_hebrew_shin: libc::c_uint = 0xcf9; -pub const XK_hebrew_taw: libc::c_uint = 0xcfa; -pub const XK_hebrew_taf: libc::c_uint = 0xcfa; -pub const XK_Hebrew_switch: libc::c_uint = 0xFF7E; - - - -#[repr(C)] -pub struct XSetWindowAttributes { - pub background_pixmap: Pixmap, - pub background_pixel: libc::c_ulong, - pub border_pixmap: Pixmap, - pub border_pixel: libc::c_ulong, - pub bit_gravity: libc::c_int, - pub win_gravity: libc::c_int, - pub backing_store: libc::c_int, - pub backing_planes: libc::c_ulong, - pub backing_pixel: libc::c_long, - pub save_under: Bool, - pub event_mask: libc::c_long, - pub do_not_propagate_mask: libc::c_long, - pub override_redirect: Bool, - pub colormap: Colormap, - pub cursor: Cursor, -} - -#[repr(C)] -pub struct XEvent { - pub type_: libc::c_int, - pad: [libc::c_long; 24], -} - -#[repr(C)] -pub struct XClientMessageEvent { - pub type_: libc::c_int, - pub serial: libc::c_ulong, - pub send_event: Bool, - pub display: *mut Display, - pub window: Window, - pub message_type: Atom, - pub format: libc::c_int, - pub l: [libc::c_long; 5], -} - -#[repr(C)] -pub struct XResizeRequestEvent { - pub type_: libc::c_int, - pub serial: libc::c_ulong, - pub send_event: Bool, - pub display: *mut Display, - pub window: Window, - pub width: libc::c_int, - pub height: libc::c_int, -} - -#[repr(C)] -pub struct XMotionEvent { - 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 is_hint: libc::c_char, - 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, -} - -#[repr(C)] -pub struct XConfigureEvent { - pub type_: libc::c_int, - pub serial: libc::c_ulong, - pub send_event: Bool, - pub display: *mut Display, - pub event: Window, - pub window: Window, - pub x: libc::c_int, - pub y: libc::c_int, - pub width: libc::c_int, - pub height: libc::c_int, - pub border_width: libc::c_int, - pub above: Window, - pub override_redirect: Bool, -} - -#[repr(C)] -pub struct XF86VidModeModeInfo { - pub dotclock: libc::c_uint, - pub hdisplay: libc::c_ushort, - pub hsyncstart: libc::c_ushort, - pub hsyncend: libc::c_ushort, - pub htotal: libc::c_ushort, - pub hskew: libc::c_ushort, - pub vdisplay: libc::c_ushort, - pub vsyncstart: libc::c_ushort, - pub vsyncend: libc::c_ushort, - pub vtotal: libc::c_ushort, - pub flags: libc::c_uint, - privsize: libc::c_int, - private: libc::c_long, -} - -#[repr(C)] -pub struct XErrorEvent { - pub type_: libc::c_int, - pub display: *mut Display, - pub resourceid: XID, - pub serial: libc::c_ulong, - pub error_code: libc::c_char, - pub request_code: libc::c_char, - pub minor_code: libc::c_char, -} - -#[cfg(feature = "headless")] -#[link(name = "OSMesa")] -extern "C" { - pub fn OSMesaCreateContext(format: libc::c_uint, sharelist: OSMesaContext) -> OSMesaContext; - pub fn OSMesaCreateContextExt(format: libc::c_uint, depthBits: libc::c_int, - stencilBits: libc::c_int, accumBits: libc::c_int, sharelist: OSMesaContext) - -> OSMesaContext; - pub fn OSMesaDestroyContext(ctx: OSMesaContext); - pub fn OSMesaMakeCurrent(ctx: OSMesaContext, buffer: *mut libc::c_void, type_: libc::c_uint, - width: libc::c_int, height: libc::c_int) -> libc::c_uchar; - pub fn OSMesaGetCurrentContext() -> OSMesaContext; - pub fn OSMesaPixelStore(pname: libc::c_int, value: libc::c_int); - pub fn OSMesaGetIntegerv(pname: libc::c_int, value: *mut libc::c_int); - pub fn OSMesaGetDepthBuffer(c: OSMesaContext, width: *mut libc::c_int, - height: *mut libc::c_int, bytesPerValue: *mut libc::c_int, - buffer: *mut *mut libc::c_void); - pub fn OSMesaGetColorBuffer(c: OSMesaContext, width: *mut libc::c_int, - height: *mut libc::c_int, format: *mut libc::c_int, buffer: *mut *mut libc::c_void); - pub fn OSMesaGetProcAddress(funcName: *const libc::c_char) -> *const libc::c_void; - pub fn OSMesaColorClamp(enable: libc::c_uchar); -} - -#[cfg(feature = "window")] -#[link(name = "GL")] -#[link(name = "X11")] -#[link(name = "Xxf86vm")] -#[link(name = "Xcursor")] -extern "C" { - pub fn XCloseDisplay(display: *mut Display); - pub fn XCheckMaskEvent(display: *mut Display, event_mask: libc::c_long, - event_return: *mut XEvent) -> Bool; - pub fn XCheckTypedEvent(display: *mut Display, event_type: libc::c_int, - event_return: *mut XEvent) -> Bool; - pub fn XCreateColormap(display: *mut Display, w: Window, - visual: *mut Visual, alloc: libc::c_int) -> Colormap; - pub fn XCreateWindow(display: *mut Display, parent: Window, x: libc::c_int, - y: libc::c_int, width: libc::c_uint, height: libc::c_uint, - border_width: libc::c_uint, depth: libc::c_int, class: libc::c_uint, - visual: *mut Visual, valuemask: libc::c_ulong, - attributes: *mut XSetWindowAttributes) -> Window; - pub fn XDefaultRootWindow(display: *mut Display) -> Window; - pub fn XDefaultScreen(display: *mut Display) -> libc::c_int; - pub fn XDestroyWindow(display: *mut Display, w: Window); - pub fn XFilterEvent(event: *mut XEvent, w: Window) -> Bool; - pub fn XFlush(display: *mut Display); - pub fn XFree(data: *const libc::c_void); - pub fn XGetGeometry(display: *mut Display, d: Drawable, root_return: *mut Window, - x_return: *mut libc::c_int, y_return: *mut libc::c_int, - width_return: *mut libc::c_uint, height_return: *mut libc::c_uint, - border_width_return: *mut libc::c_uint, depth_return: *mut libc::c_uint) -> Status; - pub fn XSendEvent(display: *mut Display, window: Window, propagate: Bool, - event_mask: libc::c_long, event_send: *mut XEvent) -> Status; - 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 XMoveWindow(display: *mut Display, w: Window, x: libc::c_int, y: libc::c_int); - pub fn XMapWindow(display: *mut Display, w: Window); - pub fn XMapRaised(display: *mut Display, w: Window); - pub fn XUnmapWindow(display: *mut Display, w: Window); - pub fn XNextEvent(display: *mut Display, event_return: *mut XEvent); - pub fn XInitThreads() -> Status; - pub fn XOpenDisplay(display_name: *const libc::c_char) -> *mut Display; - pub fn XPeekEvent(display: *mut Display, event_return: *mut XEvent); - pub fn XRefreshKeyboardMapping(event_map: *const XEvent); - pub fn XSetWMProtocols(display: *mut Display, w: Window, protocols: *mut Atom, - count: libc::c_int) -> Status; - pub fn XStoreName(display: *mut Display, w: Window, window_name: *const libc::c_char); - pub fn XScreenCount(display: *mut Display) -> libc::c_int; - pub fn XScreenOfDisplay(display: *mut Display, screen_number: libc::c_int) -> *const Screen; - pub fn XWidthOfScreen(screen: *const Screen) -> libc::c_int; - pub fn XHeightOfScreen(screen: *const Screen) -> libc::c_int; - pub fn XSetErrorHandler(callback: fn(display: *mut Display, event: *mut XErrorEvent) -> libc::c_int) -> libc::c_int; - - pub fn XCloseIM(im: XIM) -> Status; - pub fn XOpenIM(display: *mut Display, db: XrmDatabase, res_name: *mut libc::c_char, - res_class: *mut libc::c_char) -> XIM; - - // TODO: this is a vararg function - //pub fn XCreateIC(im: XIM; .) -> XIC; - pub fn XCreateIC(im: XIM, a: *const libc::c_char, b: libc::c_long, c: *const libc::c_char, - d: Window, e: *const ()) -> XIC; - pub fn XDestroyIC(ic: XIC); - pub fn XSetICFocus(ic: XIC); - pub fn XUnsetICFocus(ic: XIC); - - pub fn Xutf8LookupString(ic: XIC, event: *mut XKeyEvent, - buffer_return: *mut libc::c_char, bytes_buffer: libc::c_int, - keysym_return: *mut KeySym, status_return: *mut Status) -> libc::c_int; - - pub fn XkbSetDetectableAutoRepeat(dpy: *mut Display, detectable: bool, supported_rtm: *mut bool) -> bool; - - pub fn XF86VidModeSwitchToMode(dpy: *mut Display, screen: libc::c_int, - modeline: *mut XF86VidModeModeInfo) -> Bool; - pub fn XF86VidModeSetViewPort(dpy: *mut Display, screen: libc::c_int, - x: libc::c_int, y: libc::c_int) -> Bool; - pub fn XF86VidModeGetAllModeLines(dpy: *mut Display, screen: libc::c_int, - modecount_return: *mut libc::c_int, modesinfo: *mut *mut *mut XF86VidModeModeInfo) -> Bool; - - pub fn XcursorLibraryLoadCursor(dpy: *mut Display, name: *const libc::c_char) -> Cursor; - pub fn XDefineCursor(dby: *mut Display, w: Window, cursor: Cursor); - pub fn XGrabPointer(dpy: *mut Display, w: Window, owner_events: bool, event_mask: libc::c_long, - pointer_mode: libc::c_int, keyboard_mode: libc::c_int, confine_to: Window, cursor: Cursor, - time: Time) -> libc::c_int; - pub fn XUngrabPointer(dpy: *mut Display, time: Time); - - pub fn XWarpPointer(display: *mut Display, src_w: Window, dest_w: Window, src_x: libc::c_int, - src_y: libc::c_int, src_width: libc::c_uint, src_height: libc::c_uint, - dest_x: libc::c_int, dest_y: libc::c_int); -} - -/* -GLXFBConfig *glXGetFBConfigs (Display *dpy, int screen, int *nelements); -int glXGetFBConfigAttrib (Display *dpy, GLXFBConfig config, int attribute, int *value); -GLXWindow glXCreateWindow (Display *dpy, GLXFBConfig config, Window win, const int *attrib_list); -void glXDestroyWindow (Display *dpy, GLXWindow win); -GLXPixmap glXCreatePixmap (Display *dpy, GLXFBConfig config, Pixmap pixmap, const int *attrib_list); -void glXDestroyPixmap (Display *dpy, GLXPixmap pixmap); -GLXPbuffer glXCreatePbuffer (Display *dpy, GLXFBConfig config, const int *attrib_list); -void glXDestroyPbuffer (Display *dpy, GLXPbuffer pbuf); -void glXQueryDrawable (Display *dpy, GLXDrawable draw, int attribute, unsigned int *value); -GLXContext glXCreateNewContext (Display *dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct); -Bool glXMakeContextCurrent (Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx); -GLXDrawable glXGetCurrentReadDrawable (void); -int glXQueryContext (Display *dpy, GLXContext ctx, int attribute, int *value); -void glXSelectEvent (Display *dpy, GLXDrawable draw, unsigned long event_mask); -void glXGetSelectedEvent (Display *dpy, GLXDrawable draw, unsigned long *event_mask); - - -extern void glXCopyContext( Display *dpy, GLXContext src, GLXContext dst, - unsigned long mask ); - - -extern GLXPixmap glXCreateGLXPixmap( Display *dpy, XVisualInfo *visual, - Pixmap pixmap ); - -extern void glXDestroyGLXPixmap( Display *dpy, GLXPixmap pixmap ); - -extern Bool glXQueryExtension( Display *dpy, int *errorb, int *event ); - -extern Bool glXQueryVersion( Display *dpy, int *maj, int *min ); - -extern Bool glXIsDirect( Display *dpy, GLXContext ctx ); - -extern int glXGetConfig( Display *dpy, XVisualInfo *visual, - int attrib, int *value ); - -extern GLXContext glXGetCurrentContext( void ); - -extern GLXDrawable glXGetCurrentDrawable( void ); - -extern void glXWaitGL( void ); - -extern void glXWaitX( void ); - -extern void glXUseXFont( Font font, int first, int count, int list ); - -extern const char *glXQueryExtensionsString( Display *dpy, int screen ); - -extern const char *glXQueryServerString( Display *dpy, int screen, int name ); - -extern const char *glXGetClientString( Display *dpy, int name ); - -extern Display *glXGetCurrentDisplay( void ); - -*/ diff --git a/src/x11/headless.rs b/src/x11/headless.rs index 291f04d..8dffdea 100644 --- a/src/x11/headless.rs +++ b/src/x11/headless.rs @@ -22,7 +22,7 @@ impl HeadlessContext { buffer: ::std::iter::repeat(unsafe { mem::uninitialized() }) .take((dimensions.0 * dimensions.1) as usize).collect(), context: unsafe { - let ctxt = ffi::OSMesaCreateContext(0x1908, ptr::null()); + let ctxt = ffi::OSMesaCreateContext(0x1908, ptr::null_mut()); if ctxt.is_null() { return Err(OsError("OSMesaCreateContext failed".to_string())); } @@ -49,7 +49,7 @@ impl HeadlessContext { unsafe { use std::ffi::CString; let c_str = CString::new(addr.as_bytes().to_vec()).unwrap(); - ffi::OSMesaGetProcAddress(mem::transmute(c_str.as_ptr())) as *const () + mem::transmute(ffi::OSMesaGetProcAddress(mem::transmute(c_str.as_ptr()))) } } diff --git a/src/x11/window/mod.rs b/src/x11/window/mod.rs index d58b2d2..9f600a8 100644 --- a/src/x11/window/mod.rs +++ b/src/x11/window/mod.rs @@ -12,6 +12,7 @@ use std::sync::{Arc, Mutex, Once, ONCE_INIT}; use Api; use CursorState; use GlRequest; +use PixelFormat; pub use self::monitor::{MonitorID, get_available_monitors, get_primary_monitor}; @@ -25,10 +26,8 @@ lazy_static! { // TODO: use a static mutex when that's possible, and put me static ref GLOBAL_XOPENIM_LOCK: Mutex<()> = Mutex::new(()); } -fn x_error_callback(_: *mut ffi::Display, event: *mut ffi::XErrorEvent) -> libc::c_int { - unsafe { - println!("[glutin] x error code={} major={} minor={}!", (*event).error_code, (*event).request_code, (*event).minor_code); - } +unsafe extern "C" fn x_error_callback(_: *mut ffi::Display, event: *mut ffi::XErrorEvent) -> libc::c_int { + println!("[glutin] x error code={} major={} minor={}!", (*event).error_code, (*event).request_code, (*event).minor_code); 0 } @@ -36,7 +35,7 @@ fn ensure_thread_init() { THREAD_INIT.call_once(|| { unsafe { ffi::XInitThreads(); - ffi::XSetErrorHandler(x_error_callback); + ffi::XSetErrorHandler(Some(x_error_callback)); } }); } @@ -69,7 +68,7 @@ impl Drop for XWindow { unsafe { // we don't call MakeCurrent(0, 0) because we are not sure that the context // is still the current one - ffi::glx::DestroyContext(self.display, self.context); + ffi::glx::DestroyContext(self.display as *mut _, self.context); if self.is_fullscreen { ffi::XF86VidModeSwitchToMode(self.display, self.screen_id, self.xf86_desk_mode); @@ -99,7 +98,7 @@ impl WindowProxy { serial: 0, send_event: 0, display: self.x.display, - l: [0, 0, 0, 0, 0], + data: unsafe { mem::zeroed() }, }; unsafe { @@ -124,34 +123,34 @@ impl<'a> Iterator for PollEventsIterator<'a> { loop { let mut xev = unsafe { mem::uninitialized() }; let res = unsafe { ffi::XCheckMaskEvent(self.window.x.display, -1, &mut xev) }; - + if res == 0 { let res = unsafe { ffi::XCheckTypedEvent(self.window.x.display, ffi::ClientMessage, &mut xev) }; - + if res == 0 { return None; } } - - match xev.type_ { + + match xev.get_type() { ffi::KeymapNotify => { - unsafe { ffi::XRefreshKeyboardMapping(&xev) } + unsafe { ffi::XRefreshKeyboardMapping(mem::transmute(&xev)); } }, - + ffi::ClientMessage => { use events::Event::{Closed, Awakened}; use std::sync::atomic::Ordering::Relaxed; - + let client_msg: &ffi::XClientMessageEvent = unsafe { mem::transmute(&xev) }; - - if client_msg.l[0] == self.window.wm_delete_window as libc::c_long { + + if client_msg.data.get_long(0) == self.window.wm_delete_window as libc::c_long { self.window.is_closed.store(true, Relaxed); return Some(Closed); } else { return Some(Awakened); } }, - + ffi::ConfigureNotify => { use events::Event::Resized; let cfg_event: &ffi::XConfigureEvent = unsafe { mem::transmute(&xev) }; @@ -161,62 +160,62 @@ impl<'a> Iterator for PollEventsIterator<'a> { return Some(Resized(cfg_event.width as u32, cfg_event.height as u32)); } }, - + ffi::MotionNotify => { use events::Event::MouseMoved; let event: &ffi::XMotionEvent = unsafe { mem::transmute(&xev) }; return Some(MouseMoved((event.x as i32, event.y as i32))); }, - + ffi::KeyPress | ffi::KeyRelease => { use events::Event::{KeyboardInput, ReceivedCharacter}; use events::ElementState::{Pressed, Released}; let event: &mut ffi::XKeyEvent = unsafe { mem::transmute(&xev) }; - + if event.type_ == ffi::KeyPress { let raw_ev: *mut ffi::XKeyEvent = event; unsafe { ffi::XFilterEvent(mem::transmute(raw_ev), self.window.x.window) }; } - - let state = if xev.type_ == ffi::KeyPress { Pressed } else { Released }; - + + let state = if xev.get_type() == ffi::KeyPress { Pressed } else { Released }; + let written = unsafe { use std::str; - + let mut buffer: [u8; 16] = [mem::uninitialized(); 16]; let raw_ev: *mut ffi::XKeyEvent = event; let count = ffi::Xutf8LookupString(self.window.x.ic, mem::transmute(raw_ev), mem::transmute(buffer.as_mut_ptr()), buffer.len() as libc::c_int, ptr::null_mut(), ptr::null_mut()); - + str::from_utf8(&buffer[..count as usize]).unwrap_or("").to_string() }; - + { let mut pending = self.window.pending_events.lock().unwrap(); for chr in written.chars() { pending.push_back(ReceivedCharacter(chr)); } } - + let keysym = unsafe { ffi::XKeycodeToKeysym(self.window.x.display, event.keycode as ffi::KeyCode, 0) }; - + let vkey = events::keycode_to_element(keysym as libc::c_uint); - + return Some(KeyboardInput(state, event.keycode as u8, vkey)); }, - + ffi::ButtonPress | ffi::ButtonRelease => { use events::Event::{MouseInput, MouseWheel}; use events::ElementState::{Pressed, Released}; use events::MouseButton::{Left, Right, Middle}; - + let event: &ffi::XButtonEvent = unsafe { mem::transmute(&xev) }; - - let state = if xev.type_ == ffi::ButtonPress { Pressed } else { Released }; - + + let state = if xev.get_type() == ffi::ButtonPress { Pressed } else { Released }; + let button = match event.button { ffi::Button1 => Some(Left), ffi::Button2 => Some(Middle), @@ -231,14 +230,14 @@ impl<'a> Iterator for PollEventsIterator<'a> { } _ => None }; - + match button { Some(button) => return Some(MouseInput(state, button)), None => () }; }, - + _ => () }; } @@ -280,6 +279,7 @@ pub struct Window { is_closed: AtomicBool, wm_delete_window: ffi::Atom, current_size: Cell<(libc::c_int, libc::c_int)>, + pixel_format: PixelFormat, /// Events that have been retreived with XLib but not dispatched with iterators yet pending_events: Mutex<VecDeque<Event>>, cursor_state: Mutex<CursorState>, @@ -307,17 +307,17 @@ impl Window { // getting the FBConfig let fb_config = unsafe { let mut visual_attributes = vec![ - ffi::GLX_X_RENDERABLE, 1, - ffi::GLX_DRAWABLE_TYPE, ffi::GLX_WINDOW_BIT, - ffi::GLX_RENDER_TYPE, ffi::GLX_RGBA_BIT, - ffi::GLX_X_VISUAL_TYPE, ffi::GLX_TRUE_COLOR, - ffi::GLX_RED_SIZE, 8, - ffi::GLX_GREEN_SIZE, 8, - ffi::GLX_BLUE_SIZE, 8, - ffi::GLX_ALPHA_SIZE, 8, - ffi::GLX_DEPTH_SIZE, 24, - ffi::GLX_STENCIL_SIZE, 8, - ffi::GLX_DOUBLEBUFFER, 1, + ffi::glx::X_RENDERABLE as libc::c_int, 1, + ffi::glx::DRAWABLE_TYPE as libc::c_int, ffi::glx::WINDOW_BIT as libc::c_int, + ffi::glx::RENDER_TYPE as libc::c_int, ffi::glx::RGBA_BIT as libc::c_int, + ffi::glx::X_VISUAL_TYPE as libc::c_int, ffi::glx::TRUE_COLOR as libc::c_int, + ffi::glx::RED_SIZE as libc::c_int, 8, + ffi::glx::GREEN_SIZE as libc::c_int, 8, + ffi::glx::BLUE_SIZE as libc::c_int, 8, + ffi::glx::ALPHA_SIZE as libc::c_int, 8, + ffi::glx::DEPTH_SIZE as libc::c_int, 24, + ffi::glx::STENCIL_SIZE as libc::c_int, 8, + ffi::glx::DOUBLEBUFFER as libc::c_int, 1, ]; if let Some(val) = builder.multisampling { @@ -327,17 +327,22 @@ impl Window { visual_attributes.push(val as libc::c_int); } + if let Some(val) = builder.srgb { + visual_attributes.push(ffi::glx_extra::FRAMEBUFFER_SRGB_CAPABLE_ARB as libc::c_int); + visual_attributes.push(if val {1} else {0}); + } + visual_attributes.push(0); let mut num_fb: libc::c_int = mem::uninitialized(); - let fb = ffi::glx::ChooseFBConfig(display, ffi::XDefaultScreen(display), + let fb = ffi::glx::ChooseFBConfig(display as *mut _, ffi::XDefaultScreen(display), visual_attributes.as_ptr(), &mut num_fb); if fb.is_null() { return Err(OsError(format!("glx::ChooseFBConfig failed"))); } let preferred_fb = *fb; // TODO: choose more wisely - ffi::XFree(fb as *const libc::c_void); + ffi::XFree(fb as *mut _); preferred_fb }; @@ -368,22 +373,47 @@ impl Window { // getting the visual infos let mut visual_infos: ffi::glx::types::XVisualInfo = unsafe { - let vi = ffi::glx::GetVisualFromFBConfig(display, fb_config); + let vi = ffi::glx::GetVisualFromFBConfig(display as *mut _, fb_config); if vi.is_null() { return Err(OsError(format!("glx::ChooseVisual failed"))); } let vi_copy = ptr::read(vi as *const _); - ffi::XFree(vi as *const libc::c_void); + ffi::XFree(vi as *mut _); vi_copy }; + // querying the chosen pixel format + let pixel_format = { + let get_attrib = |attrib: libc::c_int| -> i32 { + let mut value = 0; + unsafe { ffi::glx::GetFBConfigAttrib(display as *mut _, fb_config, attrib, &mut value); } + value + }; + + PixelFormat { + hardware_accelerated: true, + red_bits: get_attrib(ffi::glx::RED_SIZE as libc::c_int) as u8, + green_bits: get_attrib(ffi::glx::GREEN_SIZE as libc::c_int) as u8, + blue_bits: get_attrib(ffi::glx::BLUE_SIZE as libc::c_int) as u8, + alpha_bits: get_attrib(ffi::glx::ALPHA_SIZE as libc::c_int) as u8, + depth_bits: get_attrib(ffi::glx::DEPTH_SIZE as libc::c_int) as u8, + stencil_bits: get_attrib(ffi::glx::STENCIL_SIZE as libc::c_int) as u8, + stereoscopy: get_attrib(ffi::glx::STEREO as libc::c_int) != 0, + double_buffer: get_attrib(ffi::glx::DOUBLEBUFFER as libc::c_int) != 0, + multisampling: if get_attrib(ffi::glx::SAMPLE_BUFFERS as libc::c_int) != 0 { + Some(get_attrib(ffi::glx::SAMPLES as libc::c_int) as u16) + }else { None }, + srgb: get_attrib(ffi::glx_extra::FRAMEBUFFER_SRGB_CAPABLE_ARB as libc::c_int) != 0, + } + }; + // getting the root window let root = unsafe { ffi::XDefaultRootWindow(display) }; // creating the color map let cmap = unsafe { let cmap = ffi::XCreateColormap(display, root, - visual_infos.visual, ffi::AllocNone); + visual_infos.visual as *mut _, ffi::AllocNone); // TODO: error checking? cmap }; @@ -414,8 +444,8 @@ impl Window { // finally creating the window let window = unsafe { let win = ffi::XCreateWindow(display, root, 0, 0, dimensions.0 as libc::c_uint, - dimensions.1 as libc::c_uint, 0, visual_infos.depth, ffi::InputOutput, - visual_infos.visual, window_attributes, + dimensions.1 as libc::c_uint, 0, visual_infos.depth, ffi::InputOutput as libc::c_uint, + visual_infos.visual as *mut _, window_attributes, &mut set_win_attr); win }; @@ -430,7 +460,7 @@ impl Window { // creating window, step 2 let wm_delete_window = unsafe { - let mut wm_delete_window = with_c_str("WM_DELETE_WINDOW", |delete_window| + let mut wm_delete_window = with_c_str("WM_DELETE_WINDOW", |delete_window| ffi::XInternAtom(display, delete_window, 0) ); ffi::XSetWMProtocols(display, window, &mut wm_delete_window, 1); @@ -446,7 +476,7 @@ impl Window { let im = unsafe { let _lock = GLOBAL_XOPENIM_LOCK.lock().unwrap(); - let im = ffi::XOpenIM(display, ptr::null(), ptr::null_mut(), ptr::null_mut()); + let im = ffi::XOpenIM(display, ptr::null_mut(), ptr::null_mut(), ptr::null_mut()); if im.is_null() { return Err(OsError(format!("XOpenIM failed"))); } @@ -460,7 +490,7 @@ impl Window { ffi::XCreateIC( im, input_style, ffi::XIMPreeditNothing | ffi::XIMStatusNothing, client_window, - window, ptr::null() + window, ptr::null::<()>() ) ) ); @@ -473,9 +503,9 @@ impl Window { // Attempt to make keyboard input repeat detectable unsafe { - let mut supported_ptr = false; - ffi::XkbSetDetectableAutoRepeat(display, true, &mut supported_ptr); - if !supported_ptr { + let mut supported_ptr = ffi::False; + ffi::XkbSetDetectableAutoRepeat(display, ffi::True, &mut supported_ptr); + if supported_ptr == ffi::False { return Err(OsError(format!("XkbSetDetectableAutoRepeat failed"))); } } @@ -488,16 +518,16 @@ impl Window { match builder.gl_version { GlRequest::Latest => {}, GlRequest::Specific(Api::OpenGl, (major, minor)) => { - attributes.push(ffi::GLX_CONTEXT_MAJOR_VERSION); + attributes.push(ffi::glx_extra::CONTEXT_MAJOR_VERSION_ARB as libc::c_int); attributes.push(major as libc::c_int); - attributes.push(ffi::GLX_CONTEXT_MINOR_VERSION); + attributes.push(ffi::glx_extra::CONTEXT_MINOR_VERSION_ARB as libc::c_int); attributes.push(minor as libc::c_int); }, GlRequest::Specific(_, _) => panic!("Only OpenGL is supported"), GlRequest::GlThenGles { opengl_version: (major, minor), .. } => { - attributes.push(ffi::GLX_CONTEXT_MAJOR_VERSION); + attributes.push(ffi::glx_extra::CONTEXT_MAJOR_VERSION_ARB as libc::c_int); attributes.push(major as libc::c_int); - attributes.push(ffi::GLX_CONTEXT_MINOR_VERSION); + attributes.push(ffi::glx_extra::CONTEXT_MINOR_VERSION_ARB as libc::c_int); attributes.push(minor as libc::c_int); }, } @@ -531,7 +561,7 @@ impl Window { }; if context.is_null() { - context = ffi::glx::CreateContext(display, &mut visual_infos, share, 1) + context = ffi::glx::CreateContext(display as *mut _, &mut visual_infos, share, 1) } if context.is_null() { @@ -543,7 +573,7 @@ impl Window { // vsync if builder.vsync { - unsafe { ffi::glx::MakeCurrent(display, window, context) }; + unsafe { ffi::glx::MakeCurrent(display as *mut _, window, context) }; if extra_functions.SwapIntervalEXT.is_loaded() { // this should be the most common extension @@ -555,7 +585,7 @@ impl Window { if builder.strict { let mut swap = unsafe { mem::uninitialized() }; unsafe { - ffi::glx::QueryDrawable(display, window, + ffi::glx::QueryDrawable(display as *mut _, window, ffi::glx_extra::SWAP_INTERVAL_EXT as i32, &mut swap); } @@ -581,7 +611,7 @@ impl Window { return Err(OsError(format!("Couldn't find any available vsync extension"))); } - unsafe { ffi::glx::MakeCurrent(display, 0, ptr::null()) }; + unsafe { ffi::glx::MakeCurrent(display as *mut _, 0, ptr::null()) }; } // creating the window object @@ -599,6 +629,7 @@ impl Window { is_closed: AtomicBool::new(false), wm_delete_window: wm_delete_window, current_size: Cell::new((0, 0)), + pixel_format: pixel_format, pending_events: Mutex::new(VecDeque::new()), cursor_state: Mutex::new(CursorState::Normal), }; @@ -661,7 +692,7 @@ impl Window { } pub fn set_position(&self, x: i32, y: i32) { - unsafe { ffi::XMoveWindow(self.x.display, self.x.window, x as libc::c_int, y as libc::c_int) } + unsafe { ffi::XMoveWindow(self.x.display, self.x.window, x as libc::c_int, y as libc::c_int); } } pub fn get_inner_size(&self) -> Option<(u32, u32)> { @@ -695,7 +726,7 @@ impl Window { } pub unsafe fn make_current(&self) { - let res = ffi::glx::MakeCurrent(self.x.display, self.x.window, self.x.context); + let res = ffi::glx::MakeCurrent(self.x.display as *mut _, self.x.window, self.x.context); if res == 0 { panic!("glx::MakeCurrent failed"); } @@ -716,7 +747,7 @@ impl Window { } pub fn swap_buffers(&self) { - unsafe { ffi::glx::SwapBuffers(self.x.display, self.x.window) } + unsafe { ffi::glx::SwapBuffers(self.x.display as *mut _, self.x.window) } } pub fn platform_display(&self) -> *mut libc::c_void { @@ -732,6 +763,10 @@ impl Window { ::Api::OpenGl } + pub fn get_pixel_format(&self) -> PixelFormat { + self.pixel_format.clone() + } + pub fn set_window_resize_callback(&mut self, _: Option<fn(u32, u32)>) { } @@ -769,7 +804,7 @@ impl Window { MouseCursor::Text | MouseCursor::VerticalText => "xterm", MouseCursor::Wait => "watch", - + /// TODO: Find matching X11 cursors MouseCursor::ContextMenu | MouseCursor::NoneCursor | MouseCursor::AllScroll | MouseCursor::ZoomIn | @@ -799,12 +834,12 @@ impl Window { *cursor_state = CursorState::Grab; match ffi::XGrabPointer( - self.x.display, self.x.window, false, - ffi::ButtonPressMask | ffi::ButtonReleaseMask | ffi::EnterWindowMask | + self.x.display, self.x.window, ffi::False, + (ffi::ButtonPressMask | ffi::ButtonReleaseMask | ffi::EnterWindowMask | ffi::LeaveWindowMask | ffi::PointerMotionMask | ffi::PointerMotionHintMask | ffi::Button1MotionMask | ffi::Button2MotionMask | ffi::Button3MotionMask | ffi::Button4MotionMask | ffi::Button5MotionMask | ffi::ButtonMotionMask | - ffi::KeymapStateMask, + ffi::KeymapStateMask) as libc::c_uint, ffi::GrabModeAsync, ffi::GrabModeAsync, self.x.window, 0, ffi::CurrentTime ) { |