WIP

Antonio Scandurra created

Change summary

crates/gpui2/src/app/model_context.rs | 18 +++++++++++++++---
1 file changed, 15 insertions(+), 3 deletions(-)

Detailed changes

crates/gpui2/src/app/model_context.rs 🔗

@@ -1,8 +1,8 @@
 use crate::{
-    AppContext, Context, Effect, EntityId, EventEmitter, Executor, Handle, Reference, Subscription,
-    WeakHandle,
+    AppContext, AsyncAppContext, Context, Effect, EntityId, EventEmitter, Handle, Reference,
+    Subscription, Task, WeakHandle,
 };
-use std::marker::PhantomData;
+use std::{future::Future, marker::PhantomData};
 
 pub struct ModelContext<'a, T> {
     app: Reference<'a, AppContext>,
@@ -112,6 +112,18 @@ impl<'a, T: Send + Sync + 'static> ModelContext<'a, T> {
         self.app.push_global(global);
         result
     }
+
+    pub fn spawn<Fut, R>(
+        &self,
+        f: impl FnOnce(WeakHandle<T>, AsyncAppContext) -> Fut + Send + 'static,
+    ) -> Task<R>
+    where
+        Fut: Future<Output = R> + Send + 'static,
+        R: Send + 'static,
+    {
+        let this = self.handle();
+        self.app.spawn(|cx| f(this, cx))
+    }
 }
 
 impl<'a, T: EventEmitter + Send + Sync + 'static> ModelContext<'a, T> {