diff --git a/crates/agent_ui/src/conversation_view/thread_view.rs b/crates/agent_ui/src/conversation_view/thread_view.rs index 3cc959fb7f2aaa06ad12e2b30d84523bc62c294c..4d20b08a7adc1ab9c07da9b28237b6029a1bb3db 100644 --- a/crates/agent_ui/src/conversation_view/thread_view.rs +++ b/crates/agent_ui/src/conversation_view/thread_view.rs @@ -4030,6 +4030,13 @@ impl ThreadView { .w_full() .text_ui(cx) .child(self.render_message_context_menu(entry_ix, message_body, cx)) + .when_some( + self.entry_view_state + .read(cx) + .entry(entry_ix) + .and_then(|entry| entry.focus_handle(cx)), + |this, handle| this.track_focus(&handle), + ) .into_any() } } diff --git a/crates/agent_ui/src/entry_view_state.rs b/crates/agent_ui/src/entry_view_state.rs index e6b1124bccf5498ff7851303988d09c74a362972..b133c27aa78e5ba0663f8dadf763641aa1d2bcfa 100644 --- a/crates/agent_ui/src/entry_view_state.rs +++ b/crates/agent_ui/src/entry_view_state.rs @@ -227,7 +227,10 @@ impl EntryViewState { } else { self.set_entry( index, - Entry::AssistantMessage(AssistantMessageEntry::default()), + Entry::AssistantMessage(AssistantMessageEntry { + scroll_handles_by_chunk_index: HashMap::default(), + focus_handle: cx.focus_handle(), + }), ); let Some(Entry::AssistantMessage(entry)) = self.entries.get_mut(index) else { unreachable!() @@ -291,9 +294,10 @@ pub enum ViewEvent { }, } -#[derive(Default, Debug)] +#[derive(Debug)] pub struct AssistantMessageEntry { scroll_handles_by_chunk_index: HashMap, + focus_handle: FocusHandle, } impl AssistantMessageEntry { @@ -326,7 +330,8 @@ impl Entry { pub fn focus_handle(&self, cx: &App) -> Option { match self { Self::UserMessage(editor) => Some(editor.read(cx).focus_handle(cx)), - Self::AssistantMessage(_) | Self::ToolCall(_) => None, + Self::AssistantMessage(message) => Some(message.focus_handle.clone()), + Self::ToolCall(_) => None, } }