mod controller;
mod error;
mod xwrapper;
pub use controller::Controller;
pub use crate::instance::error::Error;
pub use controller::ControllerBackend;
use crate::instance::xwrapper::Display;
use std::ffi::CStr;
pub struct Instance {
xcon: Display,
controllers: Vec<Box<dyn Controller>>
}
impl Instance {
pub fn new() -> Result<Instance, Error> {
let xcon = Display::from_display_name(None)?;
let controllers = controller::get_controllers(&xcon);
Ok(Instance {
xcon,
controllers
})
}
pub fn from_display_name(name: &CStr) -> Result<Instance, Error> {
let xcon = Display::from_display_name(Some(name))?;
let controllers = controller::get_controllers(&xcon);
Ok(Instance {
xcon,
controllers
})
}
pub fn controllers(&self) -> &[Box<dyn Controller>] {
&self.controllers
}
pub fn xcon(&self) -> *mut x11::xlib::Display {
self.xcon.xcon()
}
}