diff --git a/crates/editor/src/mouse_context_menu.rs b/crates/editor/src/mouse_context_menu.rs index 7c83113f7837565efc59889e74bf397b392c516b..2a63e39adda52734b301eda0d32a5bfa10a8e47e 100644 --- a/crates/editor/src/mouse_context_menu.rs +++ b/crates/editor/src/mouse_context_menu.rs @@ -8,6 +8,8 @@ use crate::{ }; use gpui::prelude::FluentBuilder; use gpui::{Context, DismissEvent, Entity, Focusable as _, Pixels, Point, Subscription, Window}; +use project::DisableAiSettings; +use settings::Settings; use std::ops::Range; use text::PointUtf16; use workspace::OpenInTerminal; @@ -202,6 +204,7 @@ pub fn deploy_context_menu( let evaluate_selection = window.is_action_available(&EvaluateSelectedText, cx); let run_to_cursor = window.is_action_available(&RunToCursor, cx); + let disable_ai = DisableAiSettings::get_global(cx).disable_ai; ui::ContextMenu::build(window, cx, |menu, _window, _cx| { let builder = menu @@ -234,7 +237,9 @@ pub fn deploy_context_menu( quick_launch: false, }), ) - .action("Add to Agent Thread", Box::new(AddSelectionToThread)) + .when(!disable_ai && has_selections, |this| { + this.action("Add to Agent Thread", Box::new(AddSelectionToThread)) + }) .separator() .action("Cut", Box::new(Cut)) .action("Copy", Box::new(Copy)) diff --git a/crates/zed/src/zed/app_menus.rs b/crates/zed/src/zed/app_menus.rs index af68cbbbe9c5178db80f1fc9adc0a922e634c82a..b86889f60acb5f738c93012335ef27b091edc0e2 100644 --- a/crates/zed/src/zed/app_menus.rs +++ b/crates/zed/src/zed/app_menus.rs @@ -2,7 +2,7 @@ use collab_ui::collab_panel; use gpui::{App, Menu, MenuItem, OsAction}; use release_channel::ReleaseChannel; use terminal_view::terminal_panel; -use zed_actions::{ToggleFocus as ToggleDebugPanel, agent::AddSelectionToThread, dev}; +use zed_actions::{ToggleFocus as ToggleDebugPanel, dev}; pub fn app_menus(cx: &mut App) -> Vec { use zed_actions::Quit; @@ -218,8 +218,6 @@ pub fn app_menus(cx: &mut App) -> Vec { MenuItem::action("Move Line Up", editor::actions::MoveLineUp), MenuItem::action("Move Line Down", editor::actions::MoveLineDown), MenuItem::action("Duplicate Selection", editor::actions::DuplicateLineDown), - MenuItem::separator(), - MenuItem::action("Add to Agent Thread", AddSelectionToThread), ], }, Menu { diff --git a/crates/zed/src/zed/quick_action_bar.rs b/crates/zed/src/zed/quick_action_bar.rs index 273e99588b90d16f6c0b7c4f2982cd995d4ca2f1..402881680232ea636f7cb105db759f417a435145 100644 --- a/crates/zed/src/zed/quick_action_bar.rs +++ b/crates/zed/src/zed/quick_action_bar.rs @@ -15,7 +15,7 @@ use gpui::{ FocusHandle, Focusable, InteractiveElement, ParentElement, Render, Styled, Subscription, WeakEntity, Window, anchored, deferred, point, }; -use project::project_settings::DiagnosticSeverity; +use project::{DisableAiSettings, project_settings::DiagnosticSeverity}; use search::{BufferSearchBar, buffer_search}; use settings::{Settings, SettingsStore}; use ui::{ @@ -27,7 +27,7 @@ use workspace::item::ItemBufferKind; use workspace::{ ToolbarItemEvent, ToolbarItemLocation, ToolbarItemView, Workspace, item::ItemHandle, }; -use zed_actions::{assistant::InlineAssist, outline::ToggleOutline}; +use zed_actions::{agent::AddSelectionToThread, assistant::InlineAssist, outline::ToggleOutline}; const MAX_CODE_ACTION_MENU_LINES: u32 = 16; @@ -241,8 +241,14 @@ impl Render for QuickActionBar { .read(cx) .snapshot(cx) .has_diff_hunks(); + let has_selection = editor.update(cx, |editor, cx| { + editor.has_non_empty_selection(&editor.display_snapshot(cx)) + }); + let focus = editor.focus_handle(cx); + let disable_ai = DisableAiSettings::get_global(cx).disable_ai; + PopoverMenu::new("editor-selections-dropdown") .trigger_with_tooltip( IconButton::new("toggle_editor_selections_icon", IconName::CursorIBeam) @@ -278,6 +284,13 @@ impl Render for QuickActionBar { skip_soft_wrap: true, }), ) + .when(!disable_ai, |this| { + this.separator().action_disabled_when( + !has_selection, + "Add to Agent Thread", + Box::new(AddSelectionToThread), + ) + }) .separator() .action("Go to Symbol", Box::new(ToggleOutline)) .action("Go to Line/Column", Box::new(ToggleGoToLine))