mirror of
https://github.com/zed-industries/zed.git
synced 2024-11-08 07:35:01 +03:00
Always notify a Picker when its delegate notifies
This commit is contained in:
parent
84df1d6564
commit
3619d4c1c4
@ -139,7 +139,12 @@ impl<D: PickerDelegate> Picker<D> {
|
|||||||
max_size: vec2f(540., 420.),
|
max_size: vec2f(540., 420.),
|
||||||
confirmed: false,
|
confirmed: false,
|
||||||
};
|
};
|
||||||
cx.defer(|this, cx| this.update_matches(String::new(), cx));
|
cx.defer(|this, cx| {
|
||||||
|
if let Some(delegate) = this.delegate.upgrade(cx) {
|
||||||
|
cx.observe(&delegate, |_, _, cx| cx.notify()).detach();
|
||||||
|
this.update_matches(String::new(), cx)
|
||||||
|
}
|
||||||
|
});
|
||||||
this
|
this
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -174,7 +179,6 @@ impl<D: PickerDelegate> Picker<D> {
|
|||||||
pub fn update_matches(&mut self, query: String, cx: &mut ViewContext<Self>) {
|
pub fn update_matches(&mut self, query: String, cx: &mut ViewContext<Self>) {
|
||||||
if let Some(delegate) = self.delegate.upgrade(cx) {
|
if let Some(delegate) = self.delegate.upgrade(cx) {
|
||||||
let update = delegate.update(cx, |d, cx| d.update_matches(query, cx));
|
let update = delegate.update(cx, |d, cx| d.update_matches(query, cx));
|
||||||
cx.notify();
|
|
||||||
cx.spawn(|this, mut cx| async move {
|
cx.spawn(|this, mut cx| async move {
|
||||||
update.await;
|
update.await;
|
||||||
this.update(&mut cx, |this, cx| {
|
this.update(&mut cx, |this, cx| {
|
||||||
|
@ -28,6 +28,7 @@ pub struct ProjectSymbolsView {
|
|||||||
symbols: Vec<Symbol>,
|
symbols: Vec<Symbol>,
|
||||||
match_candidates: Vec<StringMatchCandidate>,
|
match_candidates: Vec<StringMatchCandidate>,
|
||||||
show_worktree_root_name: bool,
|
show_worktree_root_name: bool,
|
||||||
|
pending_update: Task<()>,
|
||||||
matches: Vec<StringMatch>,
|
matches: Vec<StringMatch>,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -65,6 +66,7 @@ impl ProjectSymbolsView {
|
|||||||
match_candidates: Default::default(),
|
match_candidates: Default::default(),
|
||||||
matches: Default::default(),
|
matches: Default::default(),
|
||||||
show_worktree_root_name: false,
|
show_worktree_root_name: false,
|
||||||
|
pending_update: Task::ready(()),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -193,7 +195,7 @@ impl PickerDelegate for ProjectSymbolsView {
|
|||||||
let symbols = self
|
let symbols = self
|
||||||
.project
|
.project
|
||||||
.update(cx, |project, cx| project.symbols(&query, cx));
|
.update(cx, |project, cx| project.symbols(&query, cx));
|
||||||
cx.spawn_weak(|this, mut cx| async move {
|
self.pending_update = cx.spawn_weak(|this, mut cx| async move {
|
||||||
let symbols = symbols.await.log_err();
|
let symbols = symbols.await.log_err();
|
||||||
if let Some(this) = this.upgrade(&cx) {
|
if let Some(this) = this.upgrade(&cx) {
|
||||||
if let Some(symbols) = symbols {
|
if let Some(symbols) = symbols {
|
||||||
@ -214,7 +216,8 @@ impl PickerDelegate for ProjectSymbolsView {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
});
|
||||||
|
Task::ready(())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn render_match(&self, ix: usize, selected: bool, cx: &AppContext) -> ElementBox {
|
fn render_match(&self, ix: usize, selected: bool, cx: &AppContext) -> ElementBox {
|
||||||
|
Loading…
Reference in New Issue
Block a user