diff --git a/crates/gpui2/src/app.rs b/crates/gpui2/src/app.rs index 16dc5440bdd3457effc9163834663bf073c27904..990dcd4591829d712f2ab750aa0e5b7e2efa7d76 100644 --- a/crates/gpui2/src/app.rs +++ b/crates/gpui2/src/app.rs @@ -596,13 +596,26 @@ impl AppContext { } } - for (_, window) in &self.windows { + for window in self.windows.values() { if let Some(window) = window.as_ref() { if window.dirty { window.platform_window.invalidate(); } } } + + #[cfg(any(test, feature = "test-support"))] + for window in self + .windows + .values() + .filter_map(|window| { + let window = window.as_ref()?; + window.dirty.then_some(window.handle) + }) + .collect::>() + { + self.update_window(window, |_, cx| cx.draw()).ok(); + } } /// Repeatedly called during `flush_effects` to release any entities whose diff --git a/crates/gpui2/src/platform/test/window.rs b/crates/gpui2/src/platform/test/window.rs index 02b3982d1250ba66453275d4e1745e15cf3b155f..a99629b07a7be96744275c58b17cfad8ef5a61bc 100644 --- a/crates/gpui2/src/platform/test/window.rs +++ b/crates/gpui2/src/platform/test/window.rs @@ -168,7 +168,7 @@ impl PlatformWindow for TestWindow { } fn invalidate(&self) { - (self.draw.lock())().unwrap(); + // (self.draw.lock())().unwrap(); } fn sprite_atlas(&self) -> sync::Arc { diff --git a/crates/gpui2/src/window.rs b/crates/gpui2/src/window.rs index 06412889a1038fd6bcaddabd31e03c692d7672d6..c86f232544e6b01c557d440b7c94ce74c0566153 100644 --- a/crates/gpui2/src/window.rs +++ b/crates/gpui2/src/window.rs @@ -1181,7 +1181,7 @@ impl<'a> WindowContext<'a> { } /// Draw pixels to the display for this window based on the contents of its scene. - fn draw(&mut self) -> Scene { + pub(crate) fn draw(&mut self) -> Scene { self.text_system().start_frame(); self.window.platform_window.clear_input_handler(); self.window.layout_engine.as_mut().unwrap().clear();