Avoid double borrow in tests by drawing windows explicitly in flush_effects

Co-authored-by: Antonio <antonio@zed.dev>
This commit is contained in:
Max Brunsfeld 2023-12-11 12:35:59 -08:00
parent 9b94f1483a
commit fbfe108317
3 changed files with 16 additions and 3 deletions

View file

@ -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 let Some(window) = window.as_ref() {
if window.dirty { if window.dirty {
window.platform_window.invalidate(); 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::<Vec<_>>()
{
self.update_window(window, |_, cx| cx.draw()).ok();
}
} }
/// Repeatedly called during `flush_effects` to release any entities whose /// Repeatedly called during `flush_effects` to release any entities whose

View file

@ -168,7 +168,7 @@ impl PlatformWindow for TestWindow {
} }
fn invalidate(&self) { fn invalidate(&self) {
(self.draw.lock())().unwrap(); // (self.draw.lock())().unwrap();
} }
fn sprite_atlas(&self) -> sync::Arc<dyn crate::PlatformAtlas> { fn sprite_atlas(&self) -> sync::Arc<dyn crate::PlatformAtlas> {

View file

@ -1181,7 +1181,7 @@ impl<'a> WindowContext<'a> {
} }
/// Draw pixels to the display for this window based on the contents of its scene. /// 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.text_system().start_frame();
self.window.platform_window.clear_input_handler(); self.window.platform_window.clear_input_handler();
self.window.layout_engine.as_mut().unwrap().clear(); self.window.layout_engine.as_mut().unwrap().clear();