use crate::async_engine::{AsyncEngine, SpawnedFuture}; use crate::backend::{BackendEvent, OutputId, OutputIds, SeatId, SeatIds}; use crate::client::{Client, Clients}; use crate::event_loop::EventLoop; use crate::format::Format; use crate::globals::{AddGlobal, Globals}; use crate::ifs::wl_output::WlOutputGlobal; use crate::ifs::wl_seat::WlSeatGlobal; use crate::ifs::wl_surface::NoneSurfaceExt; use crate::tree::{DisplayNode, NodeIds}; use crate::utils::asyncevent::AsyncEvent; use crate::utils::copyhashmap::CopyHashMap; use crate::utils::linkedlist::LinkedList; use crate::utils::numcell::NumCell; use crate::utils::queue::AsyncQueue; use crate::Wheel; use ahash::AHashMap; use std::cell::RefCell; use std::rc::Rc; pub struct State { pub eng: Rc, pub el: Rc, pub wheel: Rc, pub clients: Clients, pub next_name: NumCell, pub globals: Globals, pub formats: AHashMap, pub output_ids: OutputIds, pub seat_ids: SeatIds, pub node_ids: NodeIds, pub root: Rc, pub backend_events: AsyncQueue, pub output_handlers: RefCell>>, pub seats: RefCell>, pub outputs: CopyHashMap>, pub seat_queue: LinkedList>, pub slow_clients: AsyncQueue>, pub none_surface_ext: Rc, } pub struct SeatData { pub handler: SpawnedFuture<()>, pub tree_changed: Rc, } impl State { pub fn add_global(&self, global: &Rc) where Globals: AddGlobal, { self.globals.add_global(self, global) } pub fn tree_changed(&self) { let seats = self.seats.borrow(); for seat in seats.values() { seat.tree_changed.trigger(); } } }