smithay-client-toolkit 0.21.0

Toolkit for making client wayland applications.
use std::sync::Arc;
use wayland_client::backend::ObjectData;
use wayland_client::{Connection, Proxy, QueueHandle};

pub trait Dispatch2<I: Proxy, State> {
    fn event(
        &self,
        _: &mut State,
        _: &I,
        _: <I as Proxy>::Event,
        _: &Connection,
        _: &QueueHandle<State>,
    );

    fn event_created_child(opcode: u16, _qh: &QueueHandle<State>) -> Arc<dyn ObjectData> {
        panic!(
            "Missing event_created_child specialization for event opcode {} of {}",
            opcode,
            I::interface().name
        );
    }
}

#[macro_export]
macro_rules! delegate_dispatch2 {
    ($(@<$( $lt:tt $( : $clt:tt $(+ $dlt:tt )* )? ),+>)? $ty: ty) => {
        impl<$( $( $lt $( : $clt $(+ $dlt )* )? ),+, )? I, UserData> $crate::reexports::client::Dispatch<I, UserData> for $ty
        where
            I: $crate::reexports::client::Proxy,
            UserData: $crate::dispatch2::Dispatch2<I, $ty> {
            fn event(
                state: &mut $ty,
                proxy: &I,
                event: <I as $crate::reexports::client::Proxy>::Event,
                data: &UserData,
                conn: &$crate::reexports::client::Connection,
                qh: &$crate::reexports::client::QueueHandle<$ty>,
            ) {
                data.event(state, proxy, event, conn, qh);
            }

            fn event_created_child(opcode: u16, qh: &$crate::reexports::client::QueueHandle<$ty>) -> ::std::sync::Arc<dyn $crate::reexports::client::backend::ObjectData> {
                UserData::event_created_child(opcode, qh)
            }
        }
    };
}