1
0
Fork 0
forked from wry/wry

implement wlr_output_management_unstable_v1

This commit is contained in:
Mostafa Ibrahim 2025-06-03 22:18:53 +03:00 committed by Julian Orth
parent a3c0631f4e
commit c6060a7389
23 changed files with 1349 additions and 32 deletions

View file

@ -0,0 +1,47 @@
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();
}
}