Change summary
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(-)
Detailed changes
@@ -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),
@@ -67,6 +67,12 @@ impl AsyncWindowContext {
pub fn update<R>(&self, update: impl FnOnce(&mut WindowContext) -> R) -> Result<R> {
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 {
@@ -75,12 +75,11 @@ impl<S: Send + Sync + 'static> Element for Img<S> {
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()