use {
crate::{
async_engine::{AsyncEngine, SpawnedFuture},
backend::{
Backend, BackendEvent, Connector, ConnectorId, ConnectorIds, InputDevice,
InputDeviceId, InputDeviceIds, MonitorInfo,
},
client::{Client, Clients},
config::ConfigProxy,
cursor::ServerCursors,
dbus::Dbus,
event_loop::EventLoop,
forker::ForkerProxy,
globals::{Globals, GlobalsError, WaylandGlobal},
ifs::{
wl_seat::{SeatIds, WlSeatGlobal},
wl_surface::NoneSurfaceExt,
},
logger::Logger,
rect::Rect,
render::RenderContext,
theme::Theme,
tree::{
ContainerNode, ContainerSplit, DisplayNode, FloatNode, Node, NodeIds, NodeVisitorBase,
OutputNode, SizedNode, WorkspaceNode,
},
utils::{
asyncevent::AsyncEvent, clonecell::CloneCell, copyhashmap::CopyHashMap,
errorfmt::ErrorFmt, fdcloser::FdCloser, linkedlist::LinkedList, queue::AsyncQueue,
},
wheel::Wheel,
xkbcommon::{XkbContext, XkbKeymap},
},
ahash::AHashMap,
jay_config::Direction,
std::{
cell::{Cell, RefCell},
rc::Rc,
sync::Arc,
time::Duration,
},
};
pub struct State {
pub xkb_ctx: XkbContext,
pub backend: CloneCell