Give up on entities being Send
and Sync
Co-Authored-By: Nathan Sobo <nathan@zed.dev>
This commit is contained in:
parent
3543aceff3
commit
94e9a83326
4 changed files with 11 additions and 7 deletions
|
@ -29,7 +29,7 @@ use std::{
|
||||||
time::Duration,
|
time::Duration,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub trait Entity: 'static + Send + Sync {
|
pub trait Entity: 'static {
|
||||||
type Event;
|
type Event;
|
||||||
|
|
||||||
fn release(&mut self, _: &mut MutableAppContext) {}
|
fn release(&mut self, _: &mut MutableAppContext) {}
|
||||||
|
@ -1738,7 +1738,7 @@ impl Debug for Effect {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub trait AnyModel: Send + Sync {
|
pub trait AnyModel {
|
||||||
fn as_any(&self) -> &dyn Any;
|
fn as_any(&self) -> &dyn Any;
|
||||||
fn as_any_mut(&mut self) -> &mut dyn Any;
|
fn as_any_mut(&mut self) -> &mut dyn Any;
|
||||||
fn release(&mut self, cx: &mut MutableAppContext);
|
fn release(&mut self, cx: &mut MutableAppContext);
|
||||||
|
@ -1761,7 +1761,7 @@ where
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub trait AnyView: Send + Sync {
|
pub trait AnyView {
|
||||||
fn as_any(&self) -> &dyn Any;
|
fn as_any(&self) -> &dyn Any;
|
||||||
fn as_any_mut(&mut self) -> &mut dyn Any;
|
fn as_any_mut(&mut self) -> &mut dyn Any;
|
||||||
fn release(&mut self, cx: &mut MutableAppContext);
|
fn release(&mut self, cx: &mut MutableAppContext);
|
||||||
|
@ -2515,6 +2515,9 @@ pub struct WeakModelHandle<T> {
|
||||||
model_type: PhantomData<T>,
|
model_type: PhantomData<T>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsafe impl<T> Send for WeakModelHandle<T> {}
|
||||||
|
unsafe impl<T> Sync for WeakModelHandle<T> {}
|
||||||
|
|
||||||
impl<T: Entity> WeakModelHandle<T> {
|
impl<T: Entity> WeakModelHandle<T> {
|
||||||
fn new(model_id: usize) -> Self {
|
fn new(model_id: usize) -> Self {
|
||||||
Self {
|
Self {
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
use super::channel::{Channel, ChannelList};
|
use super::channel::{Channel, ChannelList};
|
||||||
use gpui::{Entity, ModelHandle, View};
|
use gpui::{elements::*, Entity, ModelHandle, View};
|
||||||
|
|
||||||
pub struct ChatPanel {
|
pub struct ChatPanel {
|
||||||
channel_list: ModelHandle<ChannelList>,
|
channel_list: ModelHandle<ChannelList>,
|
||||||
active_channel: Option<ModelHandle<Channel>>,
|
active_channel: Option<ModelHandle<Channel>>,
|
||||||
|
messages: ListState,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub enum Event {}
|
pub enum Event {}
|
||||||
|
|
|
@ -169,7 +169,7 @@ pub fn build_app_state(cx: &AppContext) -> Arc<AppState> {
|
||||||
|
|
||||||
pub struct Observer<T>(PhantomData<T>);
|
pub struct Observer<T>(PhantomData<T>);
|
||||||
|
|
||||||
impl<T: 'static + Send + Sync> Entity for Observer<T> {
|
impl<T: 'static> Entity for Observer<T> {
|
||||||
type Event = ();
|
type Event = ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -192,7 +192,7 @@ pub trait ItemHandle: Send + Sync {
|
||||||
fn downgrade(&self) -> Box<dyn WeakItemHandle>;
|
fn downgrade(&self) -> Box<dyn WeakItemHandle>;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub trait WeakItemHandle: Send + Sync {
|
pub trait WeakItemHandle {
|
||||||
fn file<'a>(&'a self, cx: &'a AppContext) -> Option<&'a File>;
|
fn file<'a>(&'a self, cx: &'a AppContext) -> Option<&'a File>;
|
||||||
fn add_view(
|
fn add_view(
|
||||||
&self,
|
&self,
|
||||||
|
@ -203,7 +203,7 @@ pub trait WeakItemHandle: Send + Sync {
|
||||||
fn alive(&self, cx: &AppContext) -> bool;
|
fn alive(&self, cx: &AppContext) -> bool;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub trait ItemViewHandle: Send + Sync {
|
pub trait ItemViewHandle {
|
||||||
fn title(&self, cx: &AppContext) -> String;
|
fn title(&self, cx: &AppContext) -> String;
|
||||||
fn entry_id(&self, cx: &AppContext) -> Option<(usize, Arc<Path>)>;
|
fn entry_id(&self, cx: &AppContext) -> Option<(usize, Arc<Path>)>;
|
||||||
fn boxed_clone(&self) -> Box<dyn ItemViewHandle>;
|
fn boxed_clone(&self) -> Box<dyn ItemViewHandle>;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue