diff --git a/src/api/wayland/context.rs b/src/api/wayland/context.rs new file mode 100644 index 00000000..4fc743bc --- /dev/null +++ b/src/api/wayland/context.rs @@ -0,0 +1,42 @@ +use wayland_client::EventIterator; +use wayland_client::wayland::get_display; +use wayland_client::wayland::compositor::WlCompositor; +use wayland_client::wayland::seat::WlSeat; +use wayland_client::wayland::shell::WlShell; +use wayland_client::wayland::shm::WlShm; +use wayland_client::wayland::subcompositor::WlSubcompositor; + +lazy_static! { + pub static ref WAYLAND_CONTEXT: Option = { + WaylandContext::init() + }; +} + +wayland_env!(InnerEnv, + compositor: WlCompositor, + seat: WlSeat, + shell: WlShell, + shm: WlShm, + subcompositor: WlSubcompositor +); + +pub struct WaylandContext { + inner: InnerEnv, + iterator: EventIterator +} + +impl WaylandContext { + fn init() -> Option { + let display = match get_display() { + Some(display) => display, + None => return None + }; + + let (inner_env, iterator) = InnerEnv::init(display); + + Some(WaylandContext { + inner: inner_env, + iterator: iterator + }) + } +} \ No newline at end of file diff --git a/src/api/wayland/mod.rs b/src/api/wayland/mod.rs index 246a9e49..f30389c7 100644 --- a/src/api/wayland/mod.rs +++ b/src/api/wayland/mod.rs @@ -6,10 +6,11 @@ pub use self::window::{PollEventsIterator, WaitEventsIterator, Window, WindowPro extern crate wayland_kbd; extern crate wayland_window; +mod context; mod monitor; mod window; #[inline] pub fn is_available() -> bool { - false + context::WAYLAND_CONTEXT.is_some() }