use xcb::xinerama::ScreenInfo; use super::Client; /// Info stored for each monitor #[derive(Debug)] pub struct MonitorInfo { /// Clients attached to that monitor pub clients: Vec, /// The monitor's geometry pub screen_info: MonitorGeometry, } impl MonitorInfo { /// Iterate over all tiled clients, returning a mutable reference to each. pub fn clients_tiled_mut(&mut self) -> impl Iterator { // TODO: tag filtering self.clients.iter_mut().filter(|c| !c.floating()) } } impl Default for MonitorInfo { fn default() -> Self { Self { clients: vec![], screen_info: MonitorGeometry { x_org: 0, y_org: 0, width: 0, height: 0, }, } } } /// Info on the monitor's geometry. #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub struct MonitorGeometry { pub x_org: i16, pub y_org: i16, pub width: u16, pub height: u16, } impl From for MonitorGeometry { fn from(value: ScreenInfo) -> Self { Self { x_org: value.x_org, y_org: value.y_org, width: value.width, height: value.height, } } }