Allow to reuse PickerPopoverMenu outside of the model selector (#31684)

LSP button preparation step: move out the component that will be used to
build the button's context menu.

Release Notes:

- N/A
This commit is contained in:
Kirill Bulatov 2025-05-29 15:55:47 +03:00 committed by GitHub
parent 45f9edcbb9
commit f792827a01
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 243 additions and 235 deletions

View file

@ -1,6 +1,6 @@
use crate::{
language_model_selector::{
LanguageModelSelector, LanguageModelSelectorPopoverMenu, ToggleModelSelector,
LanguageModelSelector, ToggleModelSelector, language_model_selector,
},
max_mode_tooltip::MaxModeTooltip,
};
@ -43,7 +43,7 @@ use language_model::{
Role,
};
use multi_buffer::MultiBufferRow;
use picker::Picker;
use picker::{Picker, popover_menu::PickerPopoverMenu};
use project::{Project, Worktree};
use project::{ProjectPath, lsp_store::LocalLspAdapterDelegate};
use rope::Point;
@ -283,7 +283,7 @@ impl ContextEditor {
slash_menu_handle: Default::default(),
dragged_file_worktrees: Vec::new(),
language_model_selector: cx.new(|cx| {
LanguageModelSelector::new(
language_model_selector(
|cx| LanguageModelRegistry::read_global(cx).default_model(),
move |model, cx| {
update_settings_file::<AgentSettings>(
@ -2100,7 +2100,11 @@ impl ContextEditor {
)
}
fn render_language_model_selector(&self, cx: &mut Context<Self>) -> impl IntoElement {
fn render_language_model_selector(
&self,
window: &mut Window,
cx: &mut Context<Self>,
) -> impl IntoElement {
let active_model = LanguageModelRegistry::read_global(cx)
.default_model()
.map(|default| default.model);
@ -2110,7 +2114,7 @@ impl ContextEditor {
None => SharedString::from("No model selected"),
};
LanguageModelSelectorPopoverMenu::new(
PickerPopoverMenu::new(
self.language_model_selector.clone(),
ButtonLike::new("active-model")
.style(ButtonStyle::Subtle)
@ -2138,8 +2142,10 @@ impl ContextEditor {
)
},
gpui::Corner::BottomLeft,
cx,
)
.with_handle(self.language_model_selector_menu_handle.clone())
.render(window, cx)
}
fn render_last_error(&self, cx: &mut Context<Self>) -> Option<AnyElement> {
@ -2615,7 +2621,7 @@ impl Render for ContextEditor {
.child(
h_flex()
.gap_1()
.child(self.render_language_model_selector(cx))
.child(self.render_language_model_selector(window, cx))
.child(self.render_send_button(window, cx)),
),
)