1
0
Fork 0
forked from wry/wry

wayland: register most singletons before starting async work

This commit is contained in:
Julian Orth 2022-07-03 00:20:48 +02:00
parent 6ccb555638
commit f7e77ca94c
2 changed files with 13 additions and 5 deletions

View file

@ -227,7 +227,7 @@ async fn start_compositor3(state: Rc<State>, test_future: Option<TestFuture>) {
}
};
state.backend.set(backend.clone());
state.globals.add_singletons(&backend);
state.globals.add_backend_singletons(&backend);
if backend.import_environment() {
if let Some(acc) = state.acceptor.get() {

View file

@ -109,12 +109,14 @@ pub struct Globals {
impl Globals {
pub fn new() -> Self {
Self {
let slf = Self {
next_name: NumCell::new(1),
registry: CopyHashMap::new(),
outputs: Default::default(),
seats: Default::default(),
}
};
slf.add_singletons();
slf
}
pub fn clear(&self) {
@ -123,7 +125,7 @@ impl Globals {
self.seats.clear();
}
pub fn add_singletons(&self, backend: &Rc<dyn Backend>) {
fn add_singletons(&self) {
macro_rules! add_singleton {
($name:ident) => {
self.add_global_no_broadcast(&Rc::new($name::new(self.name())));
@ -145,11 +147,17 @@ impl Globals {
add_singleton!(ExtSessionLockManagerV1Global);
add_singleton!(WpViewporterGlobal);
add_singleton!(WpFractionalScaleManagerV1Global);
}
pub fn add_backend_singletons(&self, backend: &Rc<dyn Backend>) {
macro_rules! add_singleton {
($name:ident) => {
self.add_global_no_broadcast(&Rc::new($name::new(self.name())));
};
}
if backend.supports_idle() {
add_singleton!(ZwpIdleInhibitManagerV1Global);
}
if backend.supports_presentation_feedback() {
add_singleton!(WpPresentationGlobal);
}