From 6ab15f72926f4d0456a337c12860f5bb44bf4cd5 Mon Sep 17 00:00:00 2001 From: Nico Burns Date: Sat, 14 Feb 2026 13:02:59 +0000 Subject: [PATCH] Don't make new windows visible until after AccessKit has initialized Signed-off-by: Nico Burns --- packages/blitz-shell/src/window.rs | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/packages/blitz-shell/src/window.rs b/packages/blitz-shell/src/window.rs index 9c01d9187..4d13ef9f2 100644 --- a/packages/blitz-shell/src/window.rs +++ b/packages/blitz-shell/src/window.rs @@ -89,8 +89,18 @@ impl View { event_loop: &dyn ActiveEventLoop, proxy: &BlitzShellProxy, ) -> Self { - let winit_window: Arc = - Arc::from(event_loop.create_window(config.attributes).unwrap()); + // We create window as invisble and then later make window visible + // after AccessKit has initialised to avoid AccessKit panics + let is_visible = config.attributes.visible; + let attrs = config.attributes.with_visible(false); + + let winit_window: Arc = Arc::from(event_loop.create_window(attrs).unwrap()); + #[cfg(feature = "accessibility")] + let accessibility = AccessibilityState::new(&*winit_window, proxy.clone()); + + if is_visible { + winit_window.set_visible(true); + } // Create viewport // TODO: account for the "safe area" @@ -133,7 +143,7 @@ impl View { pointer_pos: Default::default(), is_visible: winit_window.is_visible().unwrap_or(true), #[cfg(feature = "accessibility")] - accessibility: AccessibilityState::new(&*winit_window, proxy.clone()), + accessibility, #[cfg(target_os = "ios")] ios_request_redraw: std::cell::Cell::new(false),