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)
	}
}