diff --git a/crates/language_model_selector/src/language_model_selector.rs b/crates/language_model_selector/src/language_model_selector.rs index 9b6ed96b20..10e8b57d68 100644 --- a/crates/language_model_selector/src/language_model_selector.rs +++ b/crates/language_model_selector/src/language_model_selector.rs @@ -197,6 +197,7 @@ impl PickerDelegate for LanguageModelPickerDelegate { cx: &mut Context>, ) -> Task<()> { let all_models = self.all_models.clone(); + let current_index = self.selected_index; let llm_registry = LanguageModelRegistry::global(cx); @@ -243,18 +244,27 @@ impl PickerDelegate for LanguageModelPickerDelegate { this.update_in(&mut cx, |this, window, cx| { this.delegate.filtered_models = filtered_models; - this.delegate.set_selected_index(0, window, cx); + // Preserve selection focus + let new_index = if current_index >= this.delegate.filtered_models.len() { + 0 + } else { + current_index + }; + this.delegate.set_selected_index(new_index, window, cx); cx.notify(); }) .ok(); }) } - fn confirm(&mut self, _secondary: bool, _: &mut Window, cx: &mut Context>) { + fn confirm(&mut self, _secondary: bool, window: &mut Window, cx: &mut Context>) { if let Some(model_info) = self.filtered_models.get(self.selected_index) { let model = model_info.model.clone(); (self.on_model_changed)(model.clone(), cx); + let current_index = self.selected_index; + self.set_selected_index(current_index, window, cx); + cx.emit(DismissEvent); } }