#![allow(dead_code, non_camel_case_types)]
use std::os::raw::{c_char, c_int, c_void, c_uint};
pub mod keysyms;
pub const XKB_MOD_NAME_SHIFT : &'static str = "Shift";
pub const XKB_MOD_NAME_CAPS : &'static str = "Lock";
pub const XKB_MOD_NAME_CTRL : &'static str = "Control";
pub const XKB_MOD_NAME_ALT : &'static str = "Mod1";
pub const XKB_MOD_NAME_NUM : &'static str = "Mod2";
pub const XKB_MOD_NAME_LOGO : &'static str = "Mod4";
pub const XKB_LED_NAME_CAPS : &'static str = "Caps Lock";
pub const XKB_LED_NAME_NUM : &'static str = "Num Lock";
pub const XKB_LED_NAME_SCROLL : &'static str = "Scroll Lock";
pub struct xkb_context;
pub struct xkb_keymap;
pub struct xkb_state;
pub type xkb_keycode_t = u32;
pub type xkb_keysym_t = u32;
pub type xkb_layout_index_t = u32;
pub type xkb_layout_mask_t = u32;
pub type xkb_level_index_t = u32;
pub type xkb_mod_index_t = u32;
pub type xkb_mod_mask_t = u32;
pub type xkb_led_index_t = u32;
pub type xkb_led_mask_t = u32;
pub const XKB_KEYCODE_INVALID :u32 = 0xffffffff;
pub const XKB_LAYOUT_INVALID :u32 = 0xffffffff;
pub const XKB_LEVEL_INVALID :u32 = 0xffffffff;
pub const XKB_MOD_INVALID :u32 = 0xffffffff;
pub const XKB_LED_INVALID :u32 = 0xffffffff;
pub const XKB_KEYCODE_MAX :u32 = 0xffffffff - 1;
#[repr(C)]
pub struct xkb_rule_names {
rules: *const c_char,
model: *const c_char ,
layout: *const c_char,
variant: *const c_char,
options: *const c_char,
}
#[repr(C)]
pub enum xkb_keysym_flags {
XKB_KEYSYM_NO_FLAGS = 0,
XKB_KEYSYM_CASE_INSENSITIVE = (1 << 0)
}
#[repr(C)]
pub enum xkb_context_flags {
XKB_CONTEXT_NO_FLAGS = 0,
XKB_CONTEXT_NO_DEFAULT_INCLUDES = (1 << 0),
XKB_CONTEXT_NO_ENVIRONMENT_NAMES = (1 << 1)
}
#[repr(C)]
pub enum xkb_log_level {
XKB_LOG_LEVEL_CRITICAL = 10,
XKB_LOG_LEVEL_ERROR = 20,
XKB_LOG_LEVEL_WARNING = 30,
XKB_LOG_LEVEL_INFO = 40,
XKB_LOG_LEVEL_DEBUG = 50
}
#[repr(C)]
pub enum xkb_keymap_compile_flags {
XKB_KEYMAP_COMPILE_NO_FLAGS = 0,
__not_univariant = 42,
}
#[repr(C)]
pub enum xkb_keymap_format {
XKB_KEYMAP_USE_ORIGINAL_FORMAT = 0,
XKB_KEYMAP_FORMAT_TEXT_V1 = 1,
}
#[repr(C)]
pub enum xkb_key_direction {
XKB_KEY_UP,
XKB_KEY_DOWN
}
bitflags!(
flags xkb_state_component: u32 {
const XKB_STATE_MODS_DEPRESSED = (1 << 0),
const XKB_STATE_MODS_LATCHED = (1 << 1),
const XKB_STATE_MODS_LOCKED = (1 << 2),
const XKB_STATE_MODS_EFFECTIVE = (1 << 3),
const XKB_STATE_LAYOUT_DEPRESSED = (1 << 4),
const XKB_STATE_LAYOUT_LATCHED = (1 << 5),
const XKB_STATE_LAYOUT_LOCKED = (1 << 6),
const XKB_STATE_LAYOUT_EFFECTIVE = (1 << 7),
const XKB_STATE_LEDS = (1 << 8)
}
);
dlopen_external_library!(XkbCommon,
functions:
fn xkb_keysym_get_name(xkb_keysym_t, *mut c_char, usize) -> c_int,
fn xkb_keysym_from_name(*const c_char, xkb_keysym_flags) -> xkb_keysym_t,
fn xkb_keysym_to_utf8(xkb_keysym_t, *mut c_char, usize) -> c_int,
fn xkb_keysym_to_utf32(xkb_keysym_t) -> u32,
fn xkb_context_new(xkb_context_flags) -> *mut xkb_context,
fn xkb_context_ref(*mut xkb_context) -> *mut xkb_context,
fn xkb_context_unref(*mut xkb_context) -> (),
fn xkb_context_set_user_data(*mut xkb_context, *mut c_void) -> (),
fn xkb_context_get_user_data(*mut xkb_context) -> *mut c_void,
fn xkb_context_include_path_append(*mut xkb_context, *const c_char) -> c_int,
fn xkb_context_include_path_append_default(*mut xkb_context) -> c_int,
fn xkb_context_include_path_reset_defaults(*mut xkb_context) -> c_int,
fn xkb_context_include_path_clear(*mut xkb_context) -> (),
fn xkb_context_num_include_paths(*mut xkb_context) -> c_uint,
fn xkb_context_include_path_get(*mut xkb_context, c_uint) -> *const c_char,
fn xkb_context_set_log_level(*mut xkb_context, xkb_log_level) -> (),
fn xkb_context_get_log_level(*mut xkb_context) -> xkb_log_level,
fn xkb_context_set_log_verbosity(*mut xkb_context, c_int) -> (),
fn xkb_context_get_log_verbosity(*mut xkb_context) -> c_int,
fn xkb_keymap_new_from_names(*mut xkb_context,
*const xkb_rule_names,
xkb_keymap_compile_flags
) -> *mut xkb_keymap,
fn xkb_keymap_new_from_string(*mut xkb_context,
*const c_char,
xkb_keymap_format,
xkb_keymap_compile_flags
) -> *mut xkb_keymap,
fn xkb_keymap_new_from_buffer(*mut xkb_context,
*const c_char,
usize,
xkb_keymap_format,
xkb_keymap_compile_flags
) -> *mut xkb_keymap,
fn xkb_keymap_ref(*mut xkb_keymap) -> *mut xkb_keymap,
fn xkb_keymap_unref(*mut xkb_keymap) -> (),
fn xkb_keymap_get_as_string(*mut xkb_keymap, xkb_keymap_format) -> *const c_char,
fn xkb_state_new(*mut xkb_keymap) -> *mut xkb_state,
fn xkb_state_ref(*mut xkb_state) -> *mut xkb_state,
fn xkb_state_unref(*mut xkb_state) -> (),
fn xkb_state_update_mask(*mut xkb_state,
xkb_mod_mask_t,
xkb_mod_mask_t,
xkb_mod_mask_t,
xkb_layout_index_t,
xkb_layout_index_t,
xkb_layout_index_t
) -> xkb_state_component,
fn xkb_state_update_key(*mut xkb_state,
xkb_keycode_t,
xkb_key_direction
) -> xkb_state_component,
fn xkb_state_key_get_syms(*mut xkb_state,
xkb_keycode_t,
*const *mut xkb_keysym_t
) -> c_int,
fn xkb_state_key_get_utf8(*mut xkb_state,
xkb_keycode_t,
*mut c_char,
usize
) -> c_int,
fn xkb_state_key_get_utf32(*mut xkb_state, xkb_keycode_t) -> u32,
fn xkb_state_key_get_one_sym(*mut xkb_state, xkb_keycode_t) -> xkb_keysym_t
);
lazy_static!(
pub static ref XKBCOMMON_OPTION: Option<XkbCommon> = {
XkbCommon::open("libxkbcommon.so").ok()
};
pub static ref XKBCOMMON_HANDLE: &'static XkbCommon = {
XKBCOMMON_OPTION.as_ref().expect("Library libxkbcommon.so could not be loaded.")
};
);