jay-compositor 1.15.0

The Jay compositor
use crate::configurable::ConfigureGroupsWork;
use crate::state::State;
use crate::transactions::TransactionsWork;
use crate::utils::asyncevent::AsyncEvent;
use std::rc::Rc;

#[derive(Default)]
pub struct TreeSerialGroups {
    scheduled: AsyncEvent,
}

impl TreeSerialGroups {
    pub fn trigger(&self) {
        self.scheduled.trigger();
    }
}

pub async fn handle_tree_serial_groups_scheduled(state: Rc<State>) {
    let tsgs = &state.tree.serial_groups;
    let cgs = &state.tree.configure_groups;
    let ts = &state.tree.transactions;
    let mut cgsw = ConfigureGroupsWork::default();
    let mut tsw = TransactionsWork::default();
    loop {
        tsgs.scheduled.triggered().await;
        let serial = state.next_tree_serial();
        ts.commit(&state, &mut tsw, serial);
        cgs.run_scheduled(&mut cgsw, serial);
    }
}