implement wlr_output_management_unstable_v1
This commit is contained in:
parent
a3c0631f4e
commit
c6060a7389
23 changed files with 1349 additions and 32 deletions
47
src/ifs/wlr_output_manager.rs
Normal file
47
src/ifs/wlr_output_manager.rs
Normal 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();
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue