jay-compositor 1.15.0

The Jay compositor
use crate::it::test_error::TestErrorError;
use crate::it::test_utils::test_expected_event::TEEH;
use crate::utils::numcell::NumCell;
use crate::wire::WlSurfaceId;
use crate::wire::wl_keyboard::*;
use std::rc::Rc;

pub struct TestEnterEvent {
    pub serial: u32,
    pub surface: WlSurfaceId,
    _keys: Vec<u32>,
}

pub struct TestKeyboard {
    pub keymap: TEEH<(usize, Keymap)>,
    pub key: TEEH<(usize, Key)>,
    pub modifiers: TEEH<(usize, Modifiers)>,
    pub enter: TEEH<TestEnterEvent>,
    pub leave: TEEH<Leave>,
    pub event_id: NumCell<usize>,
}

synthetic_event_handler!(TestKeyboard);

impl WlKeyboardEventHandler for TestKeyboard {
    type Error = TestErrorError;

    fn keymap(&self, ev: Keymap, _slf: &Rc<Self>) -> Result<(), Self::Error> {
        self.keymap.push((self.event_id.fetch_add(1), ev));
        Ok(())
    }

    fn enter(&self, ev: Enter<'_>, _slf: &Rc<Self>) -> Result<(), Self::Error> {
        self.enter.push(TestEnterEvent {
            serial: ev.serial,
            surface: ev.surface,
            _keys: ev.keys.to_vec(),
        });
        Ok(())
    }

    fn leave(&self, ev: Leave, _slf: &Rc<Self>) -> Result<(), Self::Error> {
        self.leave.push(ev);
        Ok(())
    }

    fn key(&self, ev: Key, _slf: &Rc<Self>) -> Result<(), Self::Error> {
        self.key.push((self.event_id.fetch_add(1), ev));
        Ok(())
    }

    fn modifiers(&self, ev: Modifiers, _slf: &Rc<Self>) -> Result<(), Self::Error> {
        self.modifiers.push((self.event_id.fetch_add(1), ev));
        Ok(())
    }

    fn repeat_info(&self, _ev: RepeatInfo, _slf: &Rc<Self>) -> Result<(), Self::Error> {
        Ok(())
    }
}