diff --git a/sixtyfps_runtime/rendering_backends/gl/event_loop.rs b/sixtyfps_runtime/rendering_backends/gl/event_loop.rs index a69d1a86a..d09622c23 100644 --- a/sixtyfps_runtime/rendering_backends/gl/event_loop.rs +++ b/sixtyfps_runtime/rendering_backends/gl/event_loop.rs @@ -226,13 +226,11 @@ thread_local! { scoped_tls_hkt::scoped_thread_local!(static CURRENT_WINDOW_TARGET : for<'a> &'a RunningEventLoop<'a>); -#[cfg(not(target_arch = "wasm32"))] pub(crate) enum GlobalEventLoopProxyOrEventQueue { Proxy(winit::event_loop::EventLoopProxy), Queue(Vec), } -#[cfg(not(target_arch = "wasm32"))] impl GlobalEventLoopProxyOrEventQueue { pub(crate) fn send_event(&mut self, event: CustomEvent) { match self { @@ -256,7 +254,6 @@ impl GlobalEventLoopProxyOrEventQueue { } } -#[cfg(not(target_arch = "wasm32"))] impl Default for GlobalEventLoopProxyOrEventQueue { fn default() -> Self { Self::Queue(Vec::new()) @@ -268,6 +265,11 @@ pub(crate) static GLOBAL_PROXY: once_cell::sync::OnceCell< std::sync::Mutex, > = once_cell::sync::OnceCell::new(); +#[cfg(target_arch = "wasm32")] +thread_local! { + pub(crate) static GLOBAL_PROXY: RefCell> = RefCell::new(None) +} + pub(crate) fn with_window_target(callback: impl FnOnce(&dyn EventLoopInterface) -> T) -> T { if CURRENT_WINDOW_TARGET.is_set() { CURRENT_WINDOW_TARGET.with(|current_target| callback(current_target)) @@ -519,13 +521,14 @@ pub fn run(quit_behavior: sixtyfps_corelib::backend::EventLoopQuitBehavior) { let event_loop_proxy = not_running_loop_instance.event_loop_proxy; #[cfg(not(target_arch = "wasm32"))] - { - GLOBAL_PROXY - .get_or_init(Default::default) - .lock() - .unwrap() - .set_proxy(event_loop_proxy.clone()); - } + GLOBAL_PROXY.get_or_init(Default::default).lock().unwrap().set_proxy(event_loop_proxy.clone()); + #[cfg(target_arch = "wasm32")] + GLOBAL_PROXY.with(|global_proxy| { + global_proxy + .borrow_mut() + .get_or_insert_with(Default::default) + .set_proxy(event_loop_proxy.clone()) + }); let mut winit_loop = not_running_loop_instance.instance; diff --git a/sixtyfps_runtime/rendering_backends/gl/lib.rs b/sixtyfps_runtime/rendering_backends/gl/lib.rs index 221fa7870..5ad308feb 100644 --- a/sixtyfps_runtime/rendering_backends/gl/lib.rs +++ b/sixtyfps_runtime/rendering_backends/gl/lib.rs @@ -1228,9 +1228,9 @@ impl sixtyfps_corelib::backend::Backend for Backend { #[cfg(not(target_arch = "wasm32"))] crate::event_loop::GLOBAL_PROXY.get_or_init(Default::default).lock().unwrap().send_event(e); #[cfg(target_arch = "wasm32")] - crate::event_loop::with_window_target(|event_loop| { - event_loop.event_loop_proxy().send_event(e).ok(); - }) + crate::event_loop::GLOBAL_PROXY.with(|global_proxy| { + global_proxy.borrow_mut().get_or_insert_with(Default::default).send_event(e) + }); } fn image_size(&'static self, image: &Image) -> Size {