diff --git a/assets/keymaps/default-linux.json b/assets/keymaps/default-linux.json index 49eeebc91407727a60f9926f70a172caa5decce7..4462ac4429a9f24db7da981f4fc9b44c37605302 100644 --- a/assets/keymaps/default-linux.json +++ b/assets/keymaps/default-linux.json @@ -247,6 +247,7 @@ "ctrl-alt-p": "agent::ManageProfiles", "ctrl-alt-l": "agent::OpenRulesLibrary", "ctrl-i": "agent::ToggleProfileSelector", + "shift-tab": "agent::CycleModeSelector", "ctrl-alt-/": "agent::ToggleModelSelector", "alt-tab": "agent::CycleFavoriteModels", // `alt-l` is provided as an alternative to `alt-tab` as the latter breaks on Linux under the `AgentPanel` context diff --git a/assets/keymaps/default-macos.json b/assets/keymaps/default-macos.json index 751f5e6547a4c1268ac9cd1849eef5e8704b5542..8ca82963523a65cfd483935edd33e1cb00f5cc55 100644 --- a/assets/keymaps/default-macos.json +++ b/assets/keymaps/default-macos.json @@ -288,6 +288,7 @@ "cmd-alt-l": "agent::OpenRulesLibrary", "cmd-alt-p": "agent::ManageProfiles", "cmd-i": "agent::ToggleProfileSelector", + "shift-tab": "agent::CycleModeSelector", "cmd-alt-/": "agent::ToggleModelSelector", "alt-tab": "agent::CycleFavoriteModels", "cmd-shift-j": "agent::ToggleNavigationMenu", diff --git a/assets/keymaps/default-windows.json b/assets/keymaps/default-windows.json index b8b9262bcdad58e54899ae0faae1b837479e1c3a..41d4a976b0773ab3ae7b4cdb0b7ce271cf303432 100644 --- a/assets/keymaps/default-windows.json +++ b/assets/keymaps/default-windows.json @@ -248,6 +248,7 @@ "shift-alt-l": "agent::OpenRulesLibrary", "shift-alt-p": "agent::ManageProfiles", "ctrl-i": "agent::ToggleProfileSelector", + "shift-tab": "agent::CycleModeSelector", "alt-tab": "agent::CycleFavoriteModels", // `alt-l` is provided as an alternative to `alt-tab` as the latter breaks on Windows under the `AgentPanel` context "alt-l": "agent::CycleFavoriteModels", diff --git a/crates/agent_ui/src/acp/mode_selector.rs b/crates/agent_ui/src/acp/mode_selector.rs index 1dbc05dddba849821448f74a6f98f5a72c67d684..9ec25d6d2a1e11a12ef8f05061f143fec5fe53bb 100644 --- a/crates/agent_ui/src/acp/mode_selector.rs +++ b/crates/agent_ui/src/acp/mode_selector.rs @@ -3,7 +3,7 @@ use agent_client_protocol as acp; use agent_servers::AgentServer; use agent_settings::AgentSettings; use fs::Fs; -use gpui::{Context, Entity, FocusHandle, WeakEntity, Window, prelude::*}; +use gpui::{Context, Entity, WeakEntity, Window, prelude::*}; use settings::Settings as _; use std::{rc::Rc, sync::Arc}; use ui::{ @@ -17,7 +17,6 @@ pub struct ModeSelector { connection: Rc, agent_server: Rc, menu_handle: PopoverMenuHandle, - focus_handle: FocusHandle, fs: Arc, setting_mode: bool, } @@ -27,7 +26,6 @@ impl ModeSelector { session_modes: Rc, agent_server: Rc, fs: Arc, - focus_handle: FocusHandle, ) -> Self { Self { connection: session_modes, @@ -35,7 +33,6 @@ impl ModeSelector { menu_handle: PopoverMenuHandle::default(), fs, setting_mode: false, - focus_handle, } } @@ -182,7 +179,6 @@ impl Render for ModeSelector { .trigger_with_tooltip( trigger_button, Tooltip::element({ - let focus_handle = self.focus_handle.clone(); move |_window, cx| { v_flex() .gap_1() @@ -191,25 +187,17 @@ impl Render for ModeSelector { .gap_2() .justify_between() .child(Label::new("Change Mode")) - .child(KeyBinding::for_action_in( - &ToggleProfileSelector, - &focus_handle, - cx, - )), + .child(KeyBinding::for_action(&ToggleProfileSelector, cx)), ) .child( h_flex() - .pb_1() + .pt_1() .gap_2() - .justify_between() - .border_b_1() + .border_t_1() .border_color(cx.theme().colors().border_variant) + .justify_between() .child(Label::new("Cycle Through Modes")) - .child(KeyBinding::for_action_in( - &CycleModeSelector, - &focus_handle, - cx, - )), + .child(KeyBinding::for_action(&CycleModeSelector, cx)), ) .into_any() } diff --git a/crates/agent_ui/src/acp/model_selector_popover.rs b/crates/agent_ui/src/acp/model_selector_popover.rs index 34b77704cc87c963fff16ca9f90959dbe0f6d35f..941a84faa8782603eb448b3296b99b7d41ab77a0 100644 --- a/crates/agent_ui/src/acp/model_selector_popover.rs +++ b/crates/agent_ui/src/acp/model_selector_popover.rs @@ -13,7 +13,6 @@ use crate::ui::ModelSelectorTooltip; pub struct AcpModelSelectorPopover { selector: Entity, menu_handle: PopoverMenuHandle, - focus_handle: FocusHandle, } impl AcpModelSelectorPopover { @@ -26,20 +25,11 @@ impl AcpModelSelectorPopover { window: &mut Window, cx: &mut Context, ) -> Self { - let focus_handle_clone = focus_handle.clone(); Self { selector: cx.new(move |cx| { - acp_model_selector( - selector, - agent_server, - fs, - focus_handle_clone.clone(), - window, - cx, - ) + acp_model_selector(selector, agent_server, fs, focus_handle.clone(), window, cx) }), menu_handle, - focus_handle, } } @@ -69,8 +59,6 @@ impl Render for AcpModelSelectorPopover { let model_icon = model.as_ref().and_then(|model| model.icon.clone()); - let focus_handle = self.focus_handle.clone(); - let (color, icon) = if self.menu_handle.is_deployed() { (Color::Accent, IconName::ChevronUp) } else { @@ -81,7 +69,7 @@ impl Render for AcpModelSelectorPopover { let tooltip = Tooltip::element({ move |_, _cx| { - ModelSelectorTooltip::new(focus_handle.clone()) + ModelSelectorTooltip::new() .show_cycle_row(show_cycle_row) .into_any_element() } diff --git a/crates/agent_ui/src/acp/thread_view.rs b/crates/agent_ui/src/acp/thread_view.rs index e2933ac46cb5aa1d23dfea9bd3e242f39056f75e..34bf7caa4dbda33e151b0c58415cbf1d902c3e1d 100644 --- a/crates/agent_ui/src/acp/thread_view.rs +++ b/crates/agent_ui/src/acp/thread_view.rs @@ -707,10 +707,7 @@ impl AcpServerView { .session_modes(&session_id, cx) .map(|session_modes| { let fs = self.project.read(cx).fs().clone(); - let focus_handle = self.focus_handle(cx); - cx.new(|_cx| { - ModeSelector::new(session_modes, self.agent.clone(), fs, focus_handle) - }) + cx.new(|_cx| ModeSelector::new(session_modes, self.agent.clone(), fs)) }); } diff --git a/crates/agent_ui/src/agent_model_selector.rs b/crates/agent_ui/src/agent_model_selector.rs index caeba3d26d892aefbb879f6a4e0c9dad603e478f..465eb808404dd5521ef056b62c813a9566bb7a47 100644 --- a/crates/agent_ui/src/agent_model_selector.rs +++ b/crates/agent_ui/src/agent_model_selector.rs @@ -14,7 +14,6 @@ use ui::{ButtonLike, PopoverMenuHandle, TintColor, Tooltip, prelude::*}; pub struct AgentModelSelector { selector: Entity, menu_handle: PopoverMenuHandle, - focus_handle: FocusHandle, } impl AgentModelSelector { @@ -26,8 +25,6 @@ impl AgentModelSelector { window: &mut Window, cx: &mut Context, ) -> Self { - let focus_handle_clone = focus_handle.clone(); - Self { selector: cx.new(move |cx| { language_model_selector( @@ -64,13 +61,12 @@ impl AgentModelSelector { } }, true, // Use popover styles for picker - focus_handle_clone, + focus_handle.clone(), window, cx, ) }), menu_handle, - focus_handle, } } @@ -106,11 +102,9 @@ impl Render for AgentModelSelector { let show_cycle_row = self.selector.read(cx).delegate.favorites_count() > 1; - let focus_handle = self.focus_handle.clone(); - let tooltip = Tooltip::element({ move |_, _cx| { - ModelSelectorTooltip::new(focus_handle.clone()) + ModelSelectorTooltip::new() .show_cycle_row(show_cycle_row) .into_any_element() } diff --git a/crates/agent_ui/src/profile_selector.rs b/crates/agent_ui/src/profile_selector.rs index 6cf4b6fb3d3017449ef07c9cbe7fb68176eb7ba5..45d7232e0dff8b2ab1056b522b5994e11236d843 100644 --- a/crates/agent_ui/src/profile_selector.rs +++ b/crates/agent_ui/src/profile_selector.rs @@ -167,7 +167,6 @@ impl Render for ProfileSelector { let selected_profile = profile .map(|profile| profile.name.clone()) .unwrap_or_else(|| "Unknown".into()); - let focus_handle = self.focus_handle.clone(); let icon = if self.picker_handle.is_deployed() { IconName::ChevronUp @@ -192,20 +191,18 @@ impl Render for ProfileSelector { let container = || h_flex().gap_1().justify_between(); v_flex() .gap_1() - .child(container().child(Label::new("Change Profile")).child( - KeyBinding::for_action_in(&ToggleProfileSelector, &focus_handle, cx), - )) + .child( + container() + .child(Label::new("Change Profile")) + .child(KeyBinding::for_action(&ToggleProfileSelector, cx)), + ) .child( container() .pt_1() .border_t_1() .border_color(cx.theme().colors().border_variant) .child(Label::new("Cycle Through Profiles")) - .child(KeyBinding::for_action_in( - &CycleModeSelector, - &focus_handle, - cx, - )), + .child(KeyBinding::for_action(&CycleModeSelector, cx)), ) .into_any() } diff --git a/crates/agent_ui/src/text_thread_editor.rs b/crates/agent_ui/src/text_thread_editor.rs index 784f88d79d05ad46af90d8c8d8b22a81349774db..447449fe72fee89b0c6775bbbcf8836141efb2b9 100644 --- a/crates/agent_ui/src/text_thread_editor.rs +++ b/crates/agent_ui/src/text_thread_editor.rs @@ -2252,8 +2252,6 @@ impl TextThreadEditor { .map(|p| p.icon()) .unwrap_or(IconOrSvg::Icon(IconName::Ai)); - let focus_handle = self.editor().focus_handle(cx); - let (color, icon) = if self.language_model_selector_menu_handle.is_deployed() { (Color::Accent, IconName::ChevronUp) } else { @@ -2276,7 +2274,7 @@ impl TextThreadEditor { let tooltip = Tooltip::element({ move |_, _cx| { - ModelSelectorTooltip::new(focus_handle.clone()) + ModelSelectorTooltip::new() .show_cycle_row(show_cycle_row) .into_any_element() } diff --git a/crates/agent_ui/src/ui/model_selector_components.rs b/crates/agent_ui/src/ui/model_selector_components.rs index 57b64dec94b0985e36d1221c3846837458ec88d8..f2ffd53a4b5d29e46b4bb657a2f537258d12aa0a 100644 --- a/crates/agent_ui/src/ui/model_selector_components.rs +++ b/crates/agent_ui/src/ui/model_selector_components.rs @@ -204,14 +204,12 @@ impl RenderOnce for ModelSelectorFooter { #[derive(IntoElement)] pub struct ModelSelectorTooltip { - focus_handle: FocusHandle, show_cycle_row: bool, } impl ModelSelectorTooltip { - pub fn new(focus_handle: FocusHandle) -> Self { + pub fn new() -> Self { Self { - focus_handle, show_cycle_row: true, } } @@ -231,11 +229,7 @@ impl RenderOnce for ModelSelectorTooltip { .gap_2() .justify_between() .child(Label::new("Change Model")) - .child(KeyBinding::for_action_in( - &ToggleModelSelector, - &self.focus_handle, - cx, - )), + .child(KeyBinding::for_action(&ToggleModelSelector, cx)), ) .when(self.show_cycle_row, |this| { this.child( @@ -246,11 +240,7 @@ impl RenderOnce for ModelSelectorTooltip { .border_color(cx.theme().colors().border_variant) .justify_between() .child(Label::new("Cycle Favorited Models")) - .child(KeyBinding::for_action_in( - &CycleFavoriteModels, - &self.focus_handle, - cx, - )), + .child(KeyBinding::for_action(&CycleFavoriteModels, cx)), ) }) }