1
0
Fork 0
forked from wry/wry
wry/src/ifs/wlr_output_manager.rs
2025-07-17 08:57:24 +02:00

47 lines
1.3 KiB
Rust

use {
crate::{
ifs::wlr_output_manager::zwlr_output_head_v1::WlrOutputHeadIds,
state::{OutputData, State},
utils::{copyhashmap::CopyHashMap, queue::AsyncQueue},
},
std::rc::Rc,
zwlr_output_manager_v1::{WlrOutputManagerId, WlrOutputManagerIds, ZwlrOutputManagerV1},
};
pub mod zwlr_output_configuration_head;
pub mod zwlr_output_configuration_v1;
pub mod zwlr_output_head_v1;
pub mod zwlr_output_manager_v1;
pub mod zwlr_output_mode_v1;
#[derive(Default)]
pub struct WlrOutputManagerState {
queue: AsyncQueue<Rc<ZwlrOutputManagerV1>>,
ids: WlrOutputManagerIds,
head_ids: WlrOutputHeadIds,
managers: CopyHashMap<WlrOutputManagerId, Rc<ZwlrOutputManagerV1>>,
}
impl WlrOutputManagerState {
pub fn clear(&self) {
self.managers.clear();
self.queue.clear();
}
pub fn announce_head(&self, on: &Rc<OutputData>) {
for manager in self.managers.lock().values() {
manager.announce_head(on);
}
}
}
pub async fn wlr_output_manager_done(state: Rc<State>) {
loop {
let manager = state.wlr_output_managers.queue.pop().await;
if manager.destroyed.get() {
continue;
}
manager.done_scheduled.set(false);
manager.send_done();
}
}