aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/api/wayland/context.rs42
-rw-r--r--src/api/wayland/mod.rs3
2 files changed, 44 insertions, 1 deletions
diff --git a/src/api/wayland/context.rs b/src/api/wayland/context.rs
new file mode 100644
index 0000000..4fc743b
--- /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> = {
+ 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<WaylandContext> {
+ 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 246a9e4..f30389c 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()
}