@@ -142,23 +142,6 @@ pub trait UpdateModel {
) -> O;
}
-pub trait UpgradeModelHandle {
- fn upgrade_model_handle<T: Entity>(
- &self,
- handle: &WeakModelHandle<T>,
- ) -> Option<ModelHandle<T>>;
-
- fn model_handle_is_upgradable<T: Entity>(&self, handle: &WeakModelHandle<T>) -> bool;
-
- fn upgrade_any_model_handle(&self, handle: &AnyWeakModelHandle) -> Option<AnyModelHandle>;
-}
-
-// pub trait UpgradeViewHandle {
-// fn upgrade_view_handle<T: View>(&self, handle: &WeakViewHandle<T>) -> Option<ViewHandle<T>>;
-
-// fn upgrade_any_view_handle(&self, handle: &AnyWeakViewHandle) -> Option<AnyViewHandle>;
-// }
-
pub trait ReadViewWith {
fn read_view_with<V, T>(
&self,
@@ -431,23 +414,6 @@ impl UpdateModel for AsyncAppContext {
}
}
-impl UpgradeModelHandle for AsyncAppContext {
- fn upgrade_model_handle<T: Entity>(
- &self,
- handle: &WeakModelHandle<T>,
- ) -> Option<ModelHandle<T>> {
- self.0.borrow().upgrade_model_handle(handle)
- }
-
- fn model_handle_is_upgradable<T: Entity>(&self, handle: &WeakModelHandle<T>) -> bool {
- self.0.borrow().model_handle_is_upgradable(handle)
- }
-
- fn upgrade_any_model_handle(&self, handle: &AnyWeakModelHandle) -> Option<AnyModelHandle> {
- self.0.borrow().upgrade_any_model_handle(handle)
- }
-}
-
impl ReadModelWith for AsyncAppContext {
fn read_model_with<E: Entity, T>(
&self,
@@ -1297,6 +1263,33 @@ impl AppContext {
}
}
+ fn upgrade_model_handle<T: Entity>(
+ &self,
+ handle: &WeakModelHandle<T>,
+ ) -> Option<ModelHandle<T>> {
+ if self.ref_counts.lock().is_entity_alive(handle.model_id) {
+ Some(ModelHandle::new(handle.model_id, &self.ref_counts))
+ } else {
+ None
+ }
+ }
+
+ fn model_handle_is_upgradable<T: Entity>(&self, handle: &WeakModelHandle<T>) -> bool {
+ self.ref_counts.lock().is_entity_alive(handle.model_id)
+ }
+
+ fn upgrade_any_model_handle(&self, handle: &AnyWeakModelHandle) -> Option<AnyModelHandle> {
+ if self.ref_counts.lock().is_entity_alive(handle.model_id) {
+ Some(AnyModelHandle::new(
+ handle.model_id,
+ handle.model_type,
+ self.ref_counts.clone(),
+ ))
+ } else {
+ None
+ }
+ }
+
pub fn add_window<V, F>(
&mut self,
window_options: WindowOptions,
@@ -2154,35 +2147,6 @@ impl UpdateModel for AppContext {
}
}
-impl UpgradeModelHandle for AppContext {
- fn upgrade_model_handle<T: Entity>(
- &self,
- handle: &WeakModelHandle<T>,
- ) -> Option<ModelHandle<T>> {
- if self.ref_counts.lock().is_entity_alive(handle.model_id) {
- Some(ModelHandle::new(handle.model_id, &self.ref_counts))
- } else {
- None
- }
- }
-
- fn model_handle_is_upgradable<T: Entity>(&self, handle: &WeakModelHandle<T>) -> bool {
- self.ref_counts.lock().is_entity_alive(handle.model_id)
- }
-
- fn upgrade_any_model_handle(&self, handle: &AnyWeakModelHandle) -> Option<AnyModelHandle> {
- if self.ref_counts.lock().is_entity_alive(handle.model_id) {
- Some(AnyModelHandle::new(
- handle.model_id,
- handle.model_type,
- self.ref_counts.clone(),
- ))
- } else {
- None
- }
- }
-}
-
#[derive(Debug)]
pub enum ParentId {
View(usize),
@@ -2868,6 +2832,16 @@ impl<M> AsMut<AppContext> for ModelContext<'_, M> {
}
}
+impl<M> BorrowAppContext for ModelContext<'_, M> {
+ fn read_with<T, F: FnOnce(&AppContext) -> T>(&self, f: F) -> T {
+ self.app.read_with(f)
+ }
+
+ fn update<T, F: FnOnce(&mut AppContext) -> T>(&mut self, f: F) -> T {
+ self.app.update(f)
+ }
+}
+
impl<M> UpdateModel for ModelContext<'_, M> {
fn update_model<T: Entity, V>(
&mut self,
@@ -2878,23 +2852,6 @@ impl<M> UpdateModel for ModelContext<'_, M> {
}
}
-impl<M> UpgradeModelHandle for ModelContext<'_, M> {
- fn upgrade_model_handle<T: Entity>(
- &self,
- handle: &WeakModelHandle<T>,
- ) -> Option<ModelHandle<T>> {
- self.app.upgrade_model_handle(handle)
- }
-
- fn model_handle_is_upgradable<T: Entity>(&self, handle: &WeakModelHandle<T>) -> bool {
- self.app.model_handle_is_upgradable(handle)
- }
-
- fn upgrade_any_model_handle(&self, handle: &AnyWeakModelHandle) -> Option<AnyModelHandle> {
- self.app.upgrade_any_model_handle(handle)
- }
-}
-
impl<M> Deref for ModelContext<'_, M> {
type Target = AppContext;
@@ -3450,23 +3407,6 @@ impl<V> BorrowAppContext for ViewContext<'_, '_, V> {
}
}
-impl<V> UpgradeModelHandle for ViewContext<'_, '_, V> {
- fn upgrade_model_handle<T: Entity>(
- &self,
- handle: &WeakModelHandle<T>,
- ) -> Option<ModelHandle<T>> {
- self.window_context.upgrade_model_handle(handle)
- }
-
- fn model_handle_is_upgradable<T: Entity>(&self, handle: &WeakModelHandle<T>) -> bool {
- self.window_context.model_handle_is_upgradable(handle)
- }
-
- fn upgrade_any_model_handle(&self, handle: &AnyWeakModelHandle) -> Option<AnyModelHandle> {
- self.window_context.upgrade_any_model_handle(handle)
- }
-}
-
impl<V: View> UpdateModel for ViewContext<'_, '_, V> {
fn update_model<T: Entity, O>(
&mut self,
@@ -3524,6 +3464,16 @@ impl<V: View> DerefMut for EventContext<'_, '_, '_, V> {
}
}
+impl<V: View> BorrowAppContext for EventContext<'_, '_, '_, V> {
+ fn read_with<T, F: FnOnce(&AppContext) -> T>(&self, f: F) -> T {
+ self.view_context.read_with(f)
+ }
+
+ fn update<T, F: FnOnce(&mut AppContext) -> T>(&mut self, f: F) -> T {
+ self.view_context.update(f)
+ }
+}
+
impl<V: View> UpdateModel for EventContext<'_, '_, '_, V> {
fn update_model<T: Entity, O>(
&mut self,
@@ -3549,23 +3499,6 @@ impl<V: View> UpdateView for EventContext<'_, '_, '_, V> {
}
}
-impl<V: View> UpgradeModelHandle for EventContext<'_, '_, '_, V> {
- fn upgrade_model_handle<T: Entity>(
- &self,
- handle: &WeakModelHandle<T>,
- ) -> Option<ModelHandle<T>> {
- self.view_context.upgrade_model_handle(handle)
- }
-
- fn model_handle_is_upgradable<T: Entity>(&self, handle: &WeakModelHandle<T>) -> bool {
- self.view_context.model_handle_is_upgradable(handle)
- }
-
- fn upgrade_any_model_handle(&self, handle: &AnyWeakModelHandle) -> Option<AnyModelHandle> {
- self.view_context.upgrade_any_model_handle(handle)
- }
-}
-
pub(crate) enum Reference<'a, T> {
Immutable(&'a T),
Mutable(&'a mut T),
@@ -3808,12 +3741,12 @@ impl<T: Entity> WeakModelHandle<T> {
self.model_id
}
- pub fn is_upgradable(&self, cx: &impl UpgradeModelHandle) -> bool {
- cx.model_handle_is_upgradable(self)
+ pub fn is_upgradable(&self, cx: &impl BorrowAppContext) -> bool {
+ cx.read_with(|cx| cx.model_handle_is_upgradable(self))
}
- pub fn upgrade(&self, cx: &impl UpgradeModelHandle) -> Option<ModelHandle<T>> {
- cx.upgrade_model_handle(self)
+ pub fn upgrade(&self, cx: &impl BorrowAppContext) -> Option<ModelHandle<T>> {
+ cx.read_with(|cx| cx.upgrade_model_handle(self))
}
}
@@ -4189,9 +4122,10 @@ pub struct AnyWeakModelHandle {
}
impl AnyWeakModelHandle {
- pub fn upgrade(&self, cx: &impl UpgradeModelHandle) -> Option<AnyModelHandle> {
- cx.upgrade_any_model_handle(self)
+ pub fn upgrade(&self, cx: &impl BorrowAppContext) -> Option<AnyModelHandle> {
+ cx.read_with(|cx| cx.upgrade_any_model_handle(self))
}
+
pub fn model_type(&self) -> TypeId {
self.model_type
}
@@ -13,10 +13,9 @@ use crate::{
},
text_layout::TextLayoutCache,
util::post_inc,
- Action, AnyModelHandle, AnyView, AnyViewHandle, AnyWeakModelHandle, AppContext,
- BorrowAppContext, Effect, Element, Entity, Handle, ModelContext, ModelHandle, MouseRegion,
- MouseRegionId, ParentId, SceneBuilder, Subscription, UpdateModel, UpdateView,
- UpgradeModelHandle, View, ViewContext, ViewHandle, WeakModelHandle, WindowInvalidation,
+ Action, AnyView, AnyViewHandle, AppContext, BorrowAppContext, Effect, Element, Entity, Handle,
+ ModelContext, ModelHandle, MouseRegion, MouseRegionId, ParentId, SceneBuilder, Subscription,
+ UpdateModel, UpdateView, View, ViewContext, ViewHandle, WindowInvalidation,
};
use anyhow::{anyhow, bail, Result};
use collections::{HashMap, HashSet};
@@ -176,23 +175,6 @@ impl UpdateView for WindowContext<'_> {
}
}
-impl UpgradeModelHandle for WindowContext<'_> {
- fn upgrade_model_handle<T: Entity>(
- &self,
- handle: &WeakModelHandle<T>,
- ) -> Option<ModelHandle<T>> {
- self.app_context.upgrade_model_handle(handle)
- }
-
- fn model_handle_is_upgradable<T: Entity>(&self, handle: &WeakModelHandle<T>) -> bool {
- self.app_context.model_handle_is_upgradable(handle)
- }
-
- fn upgrade_any_model_handle(&self, handle: &AnyWeakModelHandle) -> Option<AnyModelHandle> {
- self.app_context.upgrade_any_model_handle(handle)
- }
-}
-
impl<'a> WindowContext<'a> {
pub fn mutable(
app_context: &'a mut AppContext,
@@ -19,8 +19,8 @@ use futures::{
AsyncWriteExt, Future, FutureExt, StreamExt, TryFutureExt,
};
use gpui::{
- AnyModelHandle, AppContext, AsyncAppContext, Entity, ModelContext, ModelHandle, Task,
- UpgradeModelHandle, WeakModelHandle,
+ AnyModelHandle, AppContext, AsyncAppContext, BorrowAppContext, Entity, ModelContext,
+ ModelHandle, Task, WeakModelHandle,
};
use language::{
point_to_lsp,
@@ -6356,7 +6356,7 @@ impl WorktreeHandle {
}
impl OpenBuffer {
- pub fn upgrade(&self, cx: &impl UpgradeModelHandle) -> Option<ModelHandle<Buffer>> {
+ pub fn upgrade(&self, cx: &impl BorrowAppContext) -> Option<ModelHandle<Buffer>> {
match self {
OpenBuffer::Strong(handle) => Some(handle.clone()),
OpenBuffer::Weak(handle) => handle.upgrade(cx),