shikane 1.0.1

dynamic output configuration tool focusing on accuracy and determinism
Documentation
#[allow(unused_imports)]
use log::{debug, error, info, trace, warn};
use wayland_client::event_created_child;
use wayland_client::{Connection, Dispatch, Proxy, QueueHandle};
use wayland_protocols_wlr::output_management::v1::client::zwlr_output_head_v1::ZwlrOutputHeadV1;
use wayland_protocols_wlr::output_management::v1::client::zwlr_output_manager_v1::Event as ZwlrOutputManagerEvent;
use wayland_protocols_wlr::output_management::v1::client::zwlr_output_manager_v1::ZwlrOutputManagerV1;
use wayland_protocols_wlr::output_management::v1::client::zwlr_output_manager_v1::EVT_HEAD_OPCODE;

use crate::wl_backend::WlBackendEvent;

use super::WlrootsBackend;

impl Dispatch<ZwlrOutputManagerV1, ()> for WlrootsBackend {
    fn event(
        backend: &mut Self,
        _: &ZwlrOutputManagerV1,
        event: <ZwlrOutputManagerV1 as Proxy>::Event,
        _: &(),
        _: &Connection,
        _: &QueueHandle<Self>,
    ) {
        match event {
            ZwlrOutputManagerEvent::Head { head } => {
                trace!("[Event::Head] id: {:?}", head.id());
                backend.wl_store.insert_head(head)
            }
            ZwlrOutputManagerEvent::Done { serial } => {
                trace!("[Event::Done] serial: {}", serial);
                backend.wlr_output_manager_serial = serial;
                backend.queue_event(WlBackendEvent::AtomicChangeDone);
            }
            ZwlrOutputManagerEvent::Finished => {
                trace!("[Event::Finished]");
                backend.wlr_output_manager_serial = 0;
                backend.queue_event(WlBackendEvent::NeededResourceFinished);
            }
            unknown => warn!("[Event] Unknown event received: {unknown:?}"),
        }
    }

    event_created_child!(WlrootsBackend, ZwlrOutputManagerV1, [
        EVT_HEAD_OPCODE=> (ZwlrOutputHeadV1, ()),
    ]);
}