Allow direct read/update of WeakViewHandle only in AsyncAppContext

This commit is contained in:
Antonio Scandurra 2023-04-26 11:59:38 +02:00
parent 2b6830c798
commit 57beec6071
3 changed files with 13 additions and 12 deletions

View file

@ -4086,10 +4086,10 @@ impl<V: View> WeakViewHandle<V> {
pub fn read_with<T>(
&self,
cx: &impl BorrowAppContext,
cx: &AsyncAppContext,
read: impl FnOnce(&V, &ViewContext<V>) -> T,
) -> Result<T> {
cx.read_with(|cx| {
cx.read(|cx| {
let handle = cx
.upgrade_view_handle(self)
.ok_or_else(|| anyhow!("view {} was dropped", V::ui_name()))?;
@ -4100,7 +4100,7 @@ impl<V: View> WeakViewHandle<V> {
pub fn update<T>(
&self,
cx: &mut impl BorrowAppContext,
cx: &mut AsyncAppContext,
update: impl FnOnce(&mut V, &mut ViewContext<V>) -> T,
) -> Result<T> {
cx.update(|cx| {

View file

@ -201,10 +201,11 @@ impl ToolbarItemView for BufferSearchBar {
Some(searchable_item_handle.subscribe_to_search_events(
cx,
Box::new(move |search_event, cx| {
if let Some(this) = this.upgrade(cx) {
this.update(cx, |this, cx| {
this.on_active_searchable_item_event(search_event, cx)
})
.log_err();
});
}
}),
));

View file

@ -2005,13 +2005,13 @@ impl NavHistory {
}
fn did_update(&self, cx: &mut WindowContext) {
let pane = self.pane.clone();
if let Some(pane) = self.pane.upgrade(cx) {
cx.defer(move |cx| {
pane.update(cx, |pane, cx| pane.history_updated(cx))
.log_err();
pane.update(cx, |pane, cx| pane.history_updated(cx));
});
}
}
}
pub struct PaneBackdrop<V: View> {
child_view: usize,