wl-client 0.2.0

Safe client-side libwayland wrapper
Documentation
use {
    crate::{
        Queue,
        test_protocols::core::{
            wl_callback::{WlCallbackEventHandler, WlCallbackRef},
            wl_display::WlDisplay,
            wl_root::WlRoot,
        },
    },
    parking_lot::Mutex,
};

pub struct Callback<F>(Mutex<Option<F>>);

pub fn callback<F>(f: F) -> Callback<F> {
    Callback(Mutex::new(Some(f)))
}

impl<F> WlCallbackEventHandler for Callback<F>
where
    F: FnOnce(),
{
    fn done(&self, _slf: &WlCallbackRef, _callback_data: u32) {
        self.0.lock().take().unwrap()()
    }
}

pub fn get_root(queue: &Queue) -> WlRoot {
    queue.display::<WlDisplay>().get_registry().bind(0, 1)
}