xkbcommon_dl/
x11.rs
1use std::os::raw::c_int;
2
3use once_cell::sync::OnceCell;
4
5pub type xcb_connection_t = c_void;
6
7use super::*;
8
9pub const XKB_X11_MIN_MAJOR_XKB_VERSION: u16 = 1;
10pub const XKB_X11_MIN_MINOR_XKB_VERSION: u16 = 0;
11
12#[repr(C)]
13#[derive(Copy, Clone, Debug, PartialEq)]
14pub enum xkb_x11_setup_xkb_extension_flags {
15 XKB_X11_SETUP_XKB_EXTENSION_NO_FLAGS = 0,
17}
18
19dlopen_external_library!(XkbCommonX11,
20functions:
21 fn xkb_x11_setup_xkb_extension(
22 *mut xcb_connection_t,
23 u16,
24 u16,
25 xkb_x11_setup_xkb_extension_flags,
26 *mut u16,
27 *mut u16,
28 *mut u8,
29 *mut u8
30 ) -> c_int,
31 fn xkb_x11_get_core_keyboard_device_id(*mut xcb_connection_t) -> i32,
32 fn xkb_x11_keymap_new_from_device(
33 *mut xkb_context,
34 *mut xcb_connection_t,
35 i32,
36 xkb_keymap_compile_flags
37 ) -> *mut xkb_keymap,
38 fn xkb_x11_state_new_from_device(
39 *mut xkb_keymap,
40 *mut xcb_connection_t,
41 i32
42 ) -> *mut xkb_state,
43);
44
45pub fn xkbcommon_x11_option() -> Option<&'static XkbCommonX11> {
46 static XKBCOMMON_X11_OPTION: OnceCell<Option<XkbCommonX11>> = OnceCell::new();
47 XKBCOMMON_X11_OPTION
48 .get_or_init(|| {
49 open_with_sonames(
50 &["libxkbcommon-x11.so.0", "libxkbcommon-x11.so"],
51 None,
52 |name| unsafe { XkbCommonX11::open(name) },
53 )
54 })
55 .as_ref()
56}
57
58pub fn xkbcommon_x11_handle() -> &'static XkbCommonX11 {
59 xkbcommon_x11_option().expect("Library libxkbcommon-x11.so could not be loaded.")
60}