From ed20397a2bdf7ee209dbe4143eac33cf54f52688 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Thu, 5 Oct 2023 00:13:17 -0600 Subject: [PATCH] Checkpoint --- crates/gpui3/src/app.rs | 1 + crates/gpui3/src/app/async_context.rs | 6 ++++++ crates/gpui3/src/elements/img.rs | 7 +++---- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/crates/gpui3/src/app.rs b/crates/gpui3/src/app.rs index 9ffb23943b..9a58112e00 100644 --- a/crates/gpui3/src/app.rs +++ b/crates/gpui3/src/app.rs @@ -146,6 +146,7 @@ impl AppContext { } fn flush_effects(&mut self) { + dbg!("flush effects"); while let Some(effect) = self.pending_effects.pop_front() { match effect { Effect::Notify(entity_id) => self.apply_notify_effect(entity_id), diff --git a/crates/gpui3/src/app/async_context.rs b/crates/gpui3/src/app/async_context.rs index 65f4e666b3..026a1b0a07 100644 --- a/crates/gpui3/src/app/async_context.rs +++ b/crates/gpui3/src/app/async_context.rs @@ -67,6 +67,12 @@ impl AsyncWindowContext { pub fn update(&self, update: impl FnOnce(&mut WindowContext) -> R) -> Result { self.app.update_window(self.window, update) } + + pub fn on_next_frame(&mut self, f: impl FnOnce(&mut WindowContext) + Send + 'static) { + self.app + .update_window(self.window, |cx| cx.on_next_frame(f)) + .ok(); + } } impl Context for AsyncWindowContext { diff --git a/crates/gpui3/src/elements/img.rs b/crates/gpui3/src/elements/img.rs index 28bc51a04d..29ddcc3702 100644 --- a/crates/gpui3/src/elements/img.rs +++ b/crates/gpui3/src/elements/img.rs @@ -75,12 +75,11 @@ impl Element for Img { let corner_radii = style.corner_radii.to_pixels(bounds, cx.rem_size()); cx.paint_image(bounds, corner_radii, order, data, self.grayscale)?; } else { - cx.spawn(|view, mut cx| async move { + cx.spawn(|_, mut cx| async move { if image_future.await.log_err().is_some() { - view.update(&mut cx, |_, cx| { + cx.on_next_frame(|cx| { cx.notify(); - }) - .ok(); + }); } }) .detach()