Detailed changes
@@ -1567,7 +1567,6 @@ impl Render for PromptEditor {
]
}
});
- let fs_clone = self.fs.clone();
h_flex()
.key_context("PromptEditor")
@@ -1590,12 +1589,15 @@ impl Render for PromptEditor {
.w(gutter_dimensions.full_width() + (gutter_dimensions.margin / 2.0))
.justify_center()
.gap_2()
- .child(inline_language_model_selector(move |model, cx| {
- update_settings_file::<AssistantSettings>(
- fs_clone.clone(),
- cx,
- move |settings, _| settings.set_model(model.clone()),
- );
+ .child(inline_language_model_selector({
+ let fs = self.fs.clone();
+ move |model, cx| {
+ update_settings_file::<AssistantSettings>(
+ fs.clone(),
+ cx,
+ move |settings, _| settings.set_model(model.clone()),
+ );
+ }
}))
.map(|el| {
let CodegenStatus::Error(error) = self.codegen.read(cx).status(cx) else {
@@ -624,8 +624,6 @@ impl Render for PromptEditor {
}
};
- let fs_clone = self.fs.clone();
-
h_flex()
.bg(cx.theme().colors().editor_background)
.border_y_1()
@@ -643,12 +641,15 @@ impl Render for PromptEditor {
.w_12()
.justify_center()
.gap_2()
- .child(inline_language_model_selector(move |model, cx| {
- update_settings_file::<AssistantSettings>(
- fs_clone.clone(),
- cx,
- move |settings, _| settings.set_model(model.clone()),
- );
+ .child(inline_language_model_selector({
+ let fs = self.fs.clone();
+ move |model, cx| {
+ update_settings_file::<AssistantSettings>(
+ fs.clone(),
+ cx,
+ move |settings, _| settings.set_model(model.clone()),
+ );
+ }
}))
.children(
if let CodegenStatus::Error(error) = &self.codegen.read(cx).status {
@@ -33,17 +33,19 @@ impl AssistantModelSelector {
impl Render for AssistantModelSelector {
fn render(&mut self, _: &mut Window, cx: &mut Context<Self>) -> impl IntoElement {
- let fs_clone = self.fs.clone();
assistant_language_model_selector(
self.focus_handle.clone(),
Some(self.menu_handle.clone()),
cx,
- move |model, cx| {
- update_settings_file::<AssistantSettings>(
- fs_clone.clone(),
- cx,
- move |settings, _| settings.set_model(model.clone()),
- );
+ {
+ let fs = self.fs.clone();
+ move |model, cx| {
+ update_settings_file::<AssistantSettings>(
+ fs.clone(),
+ cx,
+ move |settings, _| settings.set_model(model.clone()),
+ );
+ }
},
)
}
@@ -2818,7 +2818,6 @@ impl Render for ContextEditor {
} else {
None
};
- let fs_clone = self.fs.clone();
let language_model_selector = self.language_model_selector.clone();
v_flex()
@@ -2877,12 +2876,17 @@ impl Render for ContextEditor {
self.editor().focus_handle(cx),
Some(self.language_model_selector.clone()),
cx,
- move |model, cx| {
- update_settings_file::<AssistantSettings>(
- fs_clone.clone(),
- cx,
- move |settings, _| settings.set_model(model.clone()),
- );
+ {
+ let fs = self.fs.clone();
+ move |model, cx| {
+ update_settings_file::<AssistantSettings>(
+ fs.clone(),
+ cx,
+ move |settings, _| {
+ settings.set_model(model.clone())
+ },
+ );
+ }
},
))),
)
@@ -484,17 +484,17 @@ impl PickerDelegate for LanguageModelPickerDelegate {
}
pub fn inline_language_model_selector(
- f: impl Fn(Arc<dyn LanguageModel>, &App) + 'static,
-) -> AnyElement {
- let f = Rc::new(f);
+ on_model_changed: impl Fn(Arc<dyn LanguageModel>, &App) + 'static,
+) -> PopoverMenu<LanguageModelSelector> {
+ let on_model_changed = Rc::new(on_model_changed);
PopoverMenu::new("popover-button")
.menu(move |window, cx| {
Some(cx.new(|cx| {
LanguageModelSelector::new(
{
- let f = f.clone();
+ let on_model_changed = on_model_changed.clone();
move |model, cx| {
- f(model, cx);
+ on_model_changed(model, cx);
}
},
window,
@@ -524,36 +524,34 @@ pub fn inline_language_model_selector(
},
)
.anchor(gpui::Corner::TopRight)
- // .when_some(menu_handle, |el, handle| el.with_handle(handle))
.offset(gpui::Point {
x: px(0.0),
y: px(-2.0),
})
- .into_any_element()
}
pub fn assistant_language_model_selector(
keybinding_target: FocusHandle,
menu_handle: Option<PopoverMenuHandle<LanguageModelSelector>>,
cx: &App,
- f: impl Fn(Arc<dyn LanguageModel>, &App) + 'static,
-) -> AnyElement {
+ on_model_changed: impl Fn(Arc<dyn LanguageModel>, &App) + 'static,
+) -> PopoverMenu<LanguageModelSelector> {
let active_model = LanguageModelRegistry::read_global(cx).active_model();
let model_name = match active_model {
Some(model) => model.name().0,
_ => SharedString::from("No model selected"),
};
- let f = Rc::new(f);
+ let on_model_changed = Rc::new(on_model_changed);
PopoverMenu::new("popover-button")
.menu(move |window, cx| {
Some(cx.new(|cx| {
LanguageModelSelector::new(
{
- let f = f.clone();
+ let on_model_changed = on_model_changed.clone();
move |model, cx| {
- f(model, cx);
+ on_model_changed(model, cx);
}
},
window,
@@ -594,5 +592,4 @@ pub fn assistant_language_model_selector(
x: px(0.0),
y: px(-2.0),
})
- .into_any_element()
}