1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
extern crate libc; pub mod key; pub mod mouse; pub use self::key::*; pub use self::mouse::*; type Display = *const libc::c_void; type Window = libc::c_int; #[link(name = "X11")] extern { fn XOpenDisplay(string: *const std::os::raw::c_char) -> Display; fn XFlush(display: Display) -> libc::c_int; fn XRootWindow(display: Display, index: libc::c_int) -> Window; } pub fn open_display(name: Option<&str>) -> Display { unsafe { match name { Some(string) => { XOpenDisplay(std::ffi::CString::new(string).unwrap().as_ptr()) }, None => XOpenDisplay(std::ptr::null()), } } } pub fn flush(display: Display) { unsafe { XFlush(display); } } pub fn root_window(display: Display, index: i32) -> Window { unsafe { XRootWindow(display, index as libc::c_int) } }