wayland_protocols_async/zwlr_output_management_v1/output/
output_manager.rs

1use wayland_client::{Dispatch, Connection, QueueHandle, Proxy};
2use wayland_protocols_wlr::output_management::v1::client::{zwlr_output_manager_v1::{ZwlrOutputManagerV1, self}, zwlr_output_head_v1::ZwlrOutputHeadV1};
3
4use crate::zwlr_output_management_v1::{handler::{OutputManagementEvent, OutputManagementState}, output::output_head::WlOutputHead};
5
6impl Dispatch<ZwlrOutputManagerV1, ()> for OutputManagementState {
7    fn event(
8        state: &mut Self,
9        _: &ZwlrOutputManagerV1,
10        event: <ZwlrOutputManagerV1 as wayland_client::Proxy>::Event,
11        _: &(),
12        _: &Connection,
13        _: &QueueHandle<Self>,
14    ) {
15        match event {
16            zwlr_output_manager_v1::Event::Head { head } => {
17                let head_id = head.clone().id();
18                state.output_heads.insert(head.id(), WlOutputHead::new(head));
19                state.dispatch_event(OutputManagementEvent::Head { id: head_id });
20            },
21            zwlr_output_manager_v1::Event::Done { serial } => {
22                state.output_manager_serial = Some(serial);
23                state.dispatch_event(OutputManagementEvent::Done { serial });
24            },
25            zwlr_output_manager_v1::Event::Finished => {
26                state.output_manager_serial = None;
27                state.dispatch_event(OutputManagementEvent::Finished);
28            },
29            _ => {},
30        }
31    }
32
33    wayland_client::event_created_child!(Self, ZwlrOutputManagerV1, [
34        EVT_HEAD_OPCODE=> (ZwlrOutputHeadV1, ()),
35    ]);
36}