Detailed changes
@@ -176,13 +176,6 @@ impl Entity for Copilot {
}
impl Copilot {
- pub fn starting_task(&self) -> Option<Shared<Task<()>>> {
- match self.server {
- CopilotServer::Starting { ref task } => Some(task.clone()),
- _ => None,
- }
- }
-
pub fn global(cx: &AppContext) -> Option<ModelHandle<Self>> {
if cx.has_global::<ModelHandle<Self>>() {
Some(cx.global::<ModelHandle<Self>>().clone())
@@ -228,13 +228,8 @@ impl CopilotButton {
Copilot::global(cx).map(|copilot| cx.observe(&copilot, |_, _, cx| cx.notify()).detach());
- let this_handle = cx.handle().downgrade();
- cx.observe_global::<Settings, _>(move |cx| {
- if let Some(handle) = this_handle.upgrade(cx) {
- handle.update(cx, |_, cx| cx.notify())
- }
- })
- .detach();
+ cx.observe_global::<Settings, _>(move |_, cx| cx.notify())
+ .detach();
Self {
popup_menu: menu,
@@ -509,7 +509,7 @@ pub struct Editor {
hover_state: HoverState,
gutter_hovered: bool,
link_go_to_definition_state: LinkGoToDefinitionState,
- pub copilot_state: CopilotState,
+ copilot_state: CopilotState,
_subscriptions: Vec<Subscription>,
}
@@ -1255,6 +1255,7 @@ impl Editor {
cx.subscribe(&buffer, Self::on_buffer_event),
cx.observe(&display_map, Self::on_display_map_changed),
cx.observe(&blink_manager, |_, _, cx| cx.notify()),
+ cx.observe_global::<Settings, _>(Self::on_settings_changed),
],
};
this.end_selection(cx);
@@ -2772,8 +2773,8 @@ impl Editor {
fn refresh_copilot_suggestions(&mut self, cx: &mut ViewContext<Self>) -> Option<()> {
let copilot = Copilot::global(cx)?;
-
- if self.mode != EditorMode::Full {
+ if self.mode != EditorMode::Full || !copilot.read(cx).status().is_authorized() {
+ self.clear_copilot_suggestions(cx);
return None;
}
@@ -2789,19 +2790,12 @@ impl Editor {
let language_name = snapshot
.language_at(selection.start)
.map(|language| language.name());
-
- let copilot_enabled = cx.global::<Settings>().copilot_on(language_name.as_deref());
-
- if !copilot_enabled {
+ if !cx.global::<Settings>().copilot_on(language_name.as_deref()) {
+ self.clear_copilot_suggestions(cx);
return None;
}
self.refresh_active_copilot_suggestion(cx);
-
- if !copilot.read(cx).status().is_authorized() {
- return None;
- }
-
let (buffer, buffer_position) =
self.buffer.read(cx).text_anchor_for_position(cursor, cx)?;
self.copilot_state.pending_refresh = cx.spawn_weak(|this, mut cx| async move {
@@ -6444,6 +6438,10 @@ impl Editor {
cx.notify();
}
+ fn on_settings_changed(&mut self, cx: &mut ViewContext<Self>) {
+ self.refresh_copilot_suggestions(cx);
+ }
+
pub fn set_searchable(&mut self, searchable: bool) {
self.searchable = searchable;
}
@@ -3952,6 +3952,19 @@ impl<'a, T: View> ViewContext<'a, T> {
})
}
+ pub fn observe_global<G, F>(&mut self, mut callback: F) -> Subscription
+ where
+ G: Any,
+ F: 'static + FnMut(&mut T, &mut ViewContext<T>),
+ {
+ let observer = self.weak_handle();
+ self.app.observe_global::<G, _>(move |cx| {
+ if let Some(observer) = observer.upgrade(cx) {
+ observer.update(cx, |observer, cx| callback(observer, cx));
+ }
+ })
+ }
+
pub fn observe_focus<F, V>(&mut self, handle: &ViewHandle<V>, mut callback: F) -> Subscription
where
F: 'static + FnMut(&mut T, ViewHandle<V>, bool, &mut ViewContext<T>),
@@ -191,16 +191,8 @@ impl View for WelcomePage {
impl WelcomePage {
pub fn new(cx: &mut ViewContext<Self>) -> Self {
- let handle = cx.weak_handle();
-
- let settings_subscription = cx.observe_global::<Settings, _>(move |cx| {
- if let Some(handle) = handle.upgrade(cx) {
- handle.update(cx, |_, cx| cx.notify())
- }
- });
-
WelcomePage {
- _settings_subscription: settings_subscription,
+ _settings_subscription: cx.observe_global::<Settings, _>(move |_, cx| cx.notify()),
}
}
}