2022-10-04 23:26:07 +01:00
|
|
|
mod client;
|
|
|
|
mod toplevel;
|
|
|
|
mod toplevel_manager;
|
|
|
|
|
|
|
|
extern crate smithay_client_toolkit as sctk;
|
|
|
|
|
|
|
|
use async_once::AsyncOnce;
|
|
|
|
use lazy_static::lazy_static;
|
2022-11-06 23:38:51 +00:00
|
|
|
pub use toplevel::{ToplevelChange, ToplevelEvent, ToplevelInfo};
|
|
|
|
use toplevel_manager::{ToplevelHandler, ToplevelHandling, ToplevelStatusListener};
|
2022-10-04 23:26:07 +01:00
|
|
|
use wayland_client::{Attached, DispatchData, Interface};
|
|
|
|
use wayland_protocols::wlr::unstable::foreign_toplevel::v1::client::{
|
|
|
|
zwlr_foreign_toplevel_handle_v1::ZwlrForeignToplevelHandleV1,
|
|
|
|
zwlr_foreign_toplevel_manager_v1::ZwlrForeignToplevelManagerV1,
|
|
|
|
};
|
|
|
|
|
|
|
|
pub use client::WaylandClient;
|
|
|
|
|
|
|
|
/// A utility for lazy-loading globals.
|
2022-10-10 21:59:44 +01:00
|
|
|
/// Taken from `smithay_client_toolkit` where it's not exposed
|
2022-10-04 23:26:07 +01:00
|
|
|
#[derive(Debug)]
|
|
|
|
enum LazyGlobal<I: Interface> {
|
|
|
|
Unknown,
|
|
|
|
Seen { id: u32, version: u32 },
|
|
|
|
Bound(Attached<I>),
|
|
|
|
}
|
|
|
|
|
|
|
|
sctk::default_environment!(Env,
|
|
|
|
fields = [
|
|
|
|
toplevel: ToplevelHandler
|
|
|
|
],
|
|
|
|
singles = [
|
|
|
|
ZwlrForeignToplevelManagerV1 => toplevel
|
|
|
|
],
|
|
|
|
);
|
|
|
|
|
|
|
|
impl ToplevelHandling for Env {
|
|
|
|
fn listen<F>(&mut self, f: F) -> ToplevelStatusListener
|
|
|
|
where
|
|
|
|
F: FnMut(ZwlrForeignToplevelHandleV1, ToplevelEvent, DispatchData) + 'static,
|
|
|
|
{
|
|
|
|
self.toplevel.listen(f)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
lazy_static! {
|
|
|
|
static ref CLIENT: AsyncOnce<WaylandClient> =
|
|
|
|
AsyncOnce::new(async { WaylandClient::new().await });
|
|
|
|
}
|
|
|
|
|
|
|
|
pub async fn get_client() -> &'static WaylandClient {
|
|
|
|
CLIENT.get().await
|
|
|
|
}
|