jay-compositor 1.15.0

The Jay compositor
use crate::client::Client;
use crate::it::test_client::TestClient;
use crate::it::test_client::TestClientExt;
use crate::it::test_error::TestError;
use crate::it::test_error::TestErrorError;
use crate::it::test_ifs::test_xdg_toplevel::TestXdgToplevel;
use crate::it::test_ifs::test_xdg_toplevel::TestXdgToplevelCore;
use crate::wire::XdgSurfaceId;
use crate::wire::xdg_surface::*;
use std::cell::Cell;
use std::rc::Rc;

pub struct TestXdgSurface {
    pub id: XdgSurfaceId,
    pub client: Rc<Client>,
    pub last_serial: Cell<Option<u32>>,
}

impl TestXdgSurface {
    pub async fn create_toplevel(&self) -> Result<Rc<TestXdgToplevel>, TestError> {
        let client = &self.client;
        let id = client.send_xdg_surface_get_toplevel(self.id);
        let core = Rc::new(TestXdgToplevelCore {
            id,
            client: client.clone(),
            configured: Cell::new(false),
            configured_waiter: Cell::new(None),
            width: Cell::new(0),
            height: Cell::new(0),
            states: Default::default(),
            close_requested: Cell::new(false),
        });
        client.set_synthetic_event_handler(id, &core);
        self.client.sync().await;
        let server = client.lookup(id)?;
        let tl = Rc::new(TestXdgToplevel { core, server });
        Ok(tl)
    }

    pub fn ack_configure(&self, serial: u32) {
        self.client.send_xdg_surface_ack_configure(self.id, serial);
    }
}

synthetic_event_handler!(TestXdgSurface);

impl XdgSurfaceEventHandler for TestXdgSurface {
    type Error = TestErrorError;

    fn configure(&self, ev: Configure, _slf: &Rc<Self>) -> Result<(), Self::Error> {
        self.last_serial.set(Some(ev.serial));
        Ok(())
    }
}

impl TestClient {}