Apply local updates and test/build fixes

This commit is contained in:
Ryan Ward
2026-05-13 15:56:40 -05:00
parent cee61e2af0
commit b61d6bcbce
36 changed files with 567 additions and 327 deletions
+127 -144
View File
@@ -21,26 +21,27 @@ mod wasm_view;
use self::vertical_tabs::telemetry::{VerticalTabsDisplayOption, VerticalTabsTelemetryEvent};
use self::vertical_tabs::{
render_detail_sidecar, render_settings_popup, VerticalTabsPanelState,
VERTICAL_TABS_SETTINGS_BUTTON_POSITION_ID,
VERTICAL_TABS_SETTINGS_BUTTON_POSITION_ID, VerticalTabsPanelState, render_detail_sidecar,
render_settings_popup,
};
pub(crate) use onboarding::OnboardingTutorial;
use crate::ai::AIRequestUsageModel;
use crate::ai::active_agent_views_model::ActiveAgentViewsModel;
use crate::ai::agent_conversations_model::AgentConversationsModel;
use crate::ai::agent_conversations_model::ConversationOrTask;
use crate::ai::agent_management::AgentManagementEvent;
use crate::ai::agent_management::notifications::NotificationFilter;
use crate::ai::agent_management::notifications::toast_stack::AgentNotificationToastStack;
use crate::ai::agent_management::notifications::view::{
NotificationMailboxView, NotificationMailboxViewEvent,
};
use crate::ai::agent_management::notifications::NotificationFilter;
use crate::ai::agent_management::telemetry::AgentManagementTelemetryEvent;
use crate::ai::agent_management::view::{AgentManagementView, AgentManagementViewEvent};
use crate::ai::agent_management::AgentManagementEvent;
use crate::ai::ambient_agents::telemetry::{CloudAgentTelemetryEvent, CloudModeEntryPoint};
use crate::ai::ambient_agents::AmbientAgentTaskId;
use crate::ai::blocklist::agent_view::agent_input_footer::editor::AgentToolbarEditorMode;
use crate::ai::ambient_agents::telemetry::{CloudAgentTelemetryEvent, CloudModeEntryPoint};
use crate::ai::blocklist::agent_view::AgentViewEntryOrigin;
use crate::ai::blocklist::agent_view::agent_input_footer::editor::AgentToolbarEditorMode;
use crate::ai::blocklist::history_model::load_conversation_from_server;
use crate::ai::blocklist::suggested_agent_mode_workflow_modal::SuggestedAgentModeWorkflowAndId;
use crate::ai::blocklist::suggested_rule_modal::{
@@ -50,17 +51,16 @@ use crate::ai::conversation_utils;
use crate::ai::document::ai_document_model::{AIDocumentId, AIDocumentModel};
use crate::ai::llms::LLMPreferences;
use crate::ai::persisted_workspace::PersistedWorkspace;
use crate::ai::AIRequestUsageModel;
use crate::ai::{
agent::{api::ServerConversationToken, conversation::AIConversationId, EntrypointType},
agent::{EntrypointType, api::ServerConversationToken, conversation::AIConversationId},
blocklist::{
SlashCommandRequest,
inline_action::code_diff_view::CodeDiffView,
suggested_agent_mode_workflow_modal::{
SuggestedAgentModeWorkflowModal, SuggestedAgentModeWorkflowModalEvent,
},
SlashCommandRequest,
},
facts::{view::AIFactPage, AIFactManager, AIFactView, AIFactViewEvent},
facts::{AIFactManager, AIFactView, AIFactViewEvent, view::AIFactPage},
};
use crate::ai_assistant::execution_context::WarpAiExecutionContext;
use crate::app_state::{
@@ -68,10 +68,10 @@ use crate::app_state::{
PaneNodeSnapshot, PaneUuid, RightPanelSnapshot, SettingsPaneSnapshot, TabSnapshot,
TerminalPaneSnapshot, WindowSnapshot, WorkflowPaneSnapshot,
};
use crate::code_review::diff_state::DiffStateModel;
#[cfg(feature = "local_fs")]
use crate::code_review::CodeReviewTelemetryEvent;
use crate::code_review::GlobalCodeReviewModel;
use crate::code_review::diff_state::DiffStateModel;
use crate::coding_panel_enablement_state::CodingPanelEnablementState;
use crate::default_terminal::DefaultTerminal;
use crate::notebooks::CloudNotebook;
@@ -108,12 +108,13 @@ use crate::util::file::external_editor::Editor;
use crate::util::file::external_editor::EditorSettings;
use crate::util::openable_file_type::FileTarget;
#[cfg(feature = "local_fs")]
use crate::util::openable_file_type::{resolve_file_target_with_editor_choice, EditorLayout};
use crate::util::openable_file_type::{EditorLayout, resolve_file_target_with_editor_choice};
use crate::ai::blocklist::history_model::CloudConversationData;
use crate::BlocklistAIHistoryModel;
use crate::ai::blocklist::FORK_PREFIX;
use crate::ai::blocklist::history_model::CloudConversationData;
#[cfg(not(target_family = "wasm"))]
use crate::terminal::cli_agent_sessions::plugin_manager::{plugin_manager_for, PluginModalKind};
use crate::terminal::cli_agent_sessions::plugin_manager::{PluginModalKind, plugin_manager_for};
use crate::terminal::cli_agent_sessions::{CLIAgentSessionsModel, CLIAgentSessionsModelEvent};
use crate::workspace::header_toolbar_editor::{HeaderToolbarEditorEvent, HeaderToolbarEditorModal};
use crate::workspace::header_toolbar_item::HeaderToolbarItemKind;
@@ -133,19 +134,18 @@ use crate::workspace::view::openwarp_launch_modal::{
OpenWarpLaunchModal, OpenWarpLaunchModalEvent,
};
use crate::workspace::{ForkFromExchange, ForkedConversationDestination};
use crate::BlocklistAIHistoryModel;
use ai::index::full_source_code_embedding::manager::CodebaseIndexManager;
use galaxyui::notification::NotificationSendError;
#[cfg(all(target_os = "macos", feature = "crash_reporting"))]
use sentry::protocol::{Attachment, AttachmentType};
use serde_json;
use super::WorkspaceRegistry;
use super::hoa_onboarding::{
mark_hoa_onboarding_completed, HoaOnboardingFlow, HoaOnboardingFlowEvent, HoaOnboardingStep,
HoaOnboardingFlow, HoaOnboardingFlowEvent, HoaOnboardingStep, mark_hoa_onboarding_completed,
};
use super::lightbox_view::{LightboxParams, LightboxView, LightboxViewEvent};
use super::util;
use super::WorkspaceRegistry;
use crate::ai::execution_profiles::editor::ExecutionProfileEditorManager;
use crate::ai::execution_profiles::profiles::{AIExecutionProfilesModel, ClientProfileId};
use crate::auth::auth_manager::{AuthManager, AuthManagerEvent};
@@ -211,15 +211,15 @@ use crate::wasm_nux_dialog::WasmNUXDialog;
use crate::drive::items::WarpDriveItemId;
use crate::drive::settings::WarpDriveSettingsChangedEvent;
use crate::env_vars::{
manager::{EnvVarCollectionManager, EnvVarCollectionSource},
CloudEnvVarCollection,
manager::{EnvVarCollectionManager, EnvVarCollectionSource},
};
use crate::settings::cloud_preferences::CloudPreferencesSettings;
use crate::appearance::{Appearance, AppearanceManager};
use crate::auth::AuthStateProvider;
use crate::autoupdate::{
is_incoming_version_past_current, AutoupdateState, AutoupdateStateEvent, RelaunchModel,
AutoupdateState, AutoupdateStateEvent, RelaunchModel, is_incoming_version_past_current,
};
use crate::banner::BannerState;
use crate::changelog_model::{ChangelogModel, ChangelogRequestType, Event as ChangelogEvent};
@@ -237,8 +237,8 @@ use crate::drive::{
};
use crate::experiments::{BlockOnboarding, Experiment};
use crate::menu::{
Event as MenuEvent, Menu, MenuItem, MenuItemFields, MenuSelectionSource,
DEFAULT_WIDTH as MENU_DEFAULT_WIDTH,
DEFAULT_WIDTH as MENU_DEFAULT_WIDTH, Event as MenuEvent, Menu, MenuItem, MenuItemFields,
MenuSelectionSource,
};
use crate::modal::{Modal, ModalEvent, ModalViewState};
use crate::network::{NetworkStatus, NetworkStatusEvent};
@@ -262,11 +262,11 @@ use crate::prompt::editor_modal::{
};
use crate::referral_theme_status::ReferralThemeEvent;
use crate::resource_center::{
mark_feature_used_and_write_to_user_defaults, skip_tips_and_write_to_user_defaults,
ResourceCenterEvent, ResourceCenterPage, ResourceCenterView, Tip, TipAction, TipsCompleted,
mark_feature_used_and_write_to_user_defaults, skip_tips_and_write_to_user_defaults,
};
use crate::reward_view::{RewardEvent, RewardKind, RewardView};
use crate::root_view::{quake_mode_window_id, NewWorkspaceSource, OpenLaunchConfigArg};
use crate::root_view::{NewWorkspaceSource, OpenLaunchConfigArg, quake_mode_window_id};
use crate::search::command_search::searcher::{
AcceptedHistoryItem, AcceptedWorkflow, CommandSearchItemAction,
};
@@ -284,10 +284,10 @@ use crate::server::telemetry::{
};
use crate::session_management::{SessionNavigationData, SessionSource};
use crate::settings::{
active_theme_kind, respect_system_theme, AccessibilitySettings, AliasExpansionSettings,
AppEditorSettings, BlockVisibilitySettings, ChangelogSettings, CursorBlink, DebugSettings,
FontSettings, GPUSettings, InputSettings, MonospaceFontSize, PaneSettings, PrivacySettings,
SelectionSettings, Settings, SshSettings, ThemeSettings,
AccessibilitySettings, AliasExpansionSettings, AppEditorSettings, BlockVisibilitySettings,
ChangelogSettings, CursorBlink, DebugSettings, FontSettings, GPUSettings, InputSettings,
MonospaceFontSize, PaneSettings, PrivacySettings, SelectionSettings, Settings, SshSettings,
ThemeSettings, active_theme_kind, respect_system_theme,
};
use crate::settings_view::flags;
use crate::settings_view::keybindings::{KeybindingChangedEvent, KeybindingChangedNotifier};
@@ -301,7 +301,7 @@ use crate::terminal::model::blockgrid::BlockGrid;
use crate::terminal::model::session::Session;
use crate::terminal::model::session::SessionId;
use crate::terminal::resizable_data::{
ModalSizes, ModalType, ResizableData, DEFAULT_LEFT_PANEL_WIDTH, DEFAULT_RIGHT_PANEL_WIDTH,
DEFAULT_LEFT_PANEL_WIDTH, DEFAULT_RIGHT_PANEL_WIDTH, ModalSizes, ModalType, ResizableData,
};
use crate::terminal::safe_mode_settings::SafeModeSettings;
use crate::terminal::session_settings::{
@@ -316,13 +316,13 @@ use crate::terminal::{self, SizeInfo, TerminalView};
#[cfg(target_os = "macos")]
use crate::workspace::cli_install;
use crate::workspaces::user_workspaces::UserWorkspaces;
use crate::{report_if_error, AgentNotificationsModel};
use crate::{AgentNotificationsModel, report_if_error};
use ::settings::{Setting, ToggleableSetting};
use galaxy_core::features::FeatureFlag;
use crate::search::{self, QueryFilter};
use crate::terminal::view::{
SyncEvent, SyncInputType, TerminalAction, NOTIFICATIONS_TROUBLESHOOT_URL,
NOTIFICATIONS_TROUBLESHOOT_URL, SyncEvent, SyncInputType, TerminalAction,
};
use crate::terminal::{BlockListSettings, TerminalModel};
use crate::themes::theme::{AnsiColorIdentifier, RespectSystemTheme, ThemeKind};
@@ -332,31 +332,31 @@ use crate::themes::theme_deletion_modal::{ThemeDeletionModal, ThemeDeletionModal
use crate::tips::{TipsEvent, TipsView};
use crate::ui_components::buttons::{combo_inner_button, icon_button_with_color};
use crate::undo_close::UndoCloseStack;
use crate::user_config::{WarpConfig, WarpConfigUpdateEvent};
#[cfg(feature = "local_fs")]
use crate::user_config::{
ensure_default_worktree_config, find_unused_tab_config_path, find_unused_toml_path,
find_unused_worktree_config_path, materialize_default_worktree_config, sanitize_toml_base_name,
tab_configs_dir,
};
use crate::user_config::{WarpConfig, WarpConfigUpdateEvent};
use crate::util::bindings::{
keybinding_name_to_display_string, keybinding_name_to_keystroke, trigger_to_keystroke,
};
use crate::util::links;
use crate::util::traffic_lights::{traffic_light_data, TrafficLightMouseStates, TrafficLightSide};
use crate::util::traffic_lights::{TrafficLightMouseStates, TrafficLightSide, traffic_light_data};
use crate::util::truncation::truncate_from_end;
#[cfg(target_family = "wasm")]
use crate::view_components::action_button::ActionButton;
use crate::view_components::callout_bubble::{
render_callout_bubble, CalloutArrowDirection, CalloutArrowPosition, CalloutBubbleConfig,
CalloutArrowDirection, CalloutArrowPosition, CalloutBubbleConfig, render_callout_bubble,
};
use crate::view_components::{
AgentToast, AgentToastStack, DismissibleToast, DismissibleToastStack, ToastLink,
};
use crate::window_settings::{WindowSettings, WindowSettingsChangedEvent, ZoomLevel};
use crate::workflows::{
manager::WorkflowOpenSource, AIWorkflowOrigin, CloudWorkflow, WorkflowSelectionSource,
WorkflowSource, WorkflowType, WorkflowViewMode,
AIWorkflowOrigin, CloudWorkflow, WorkflowSelectionSource, WorkflowSource, WorkflowType,
WorkflowViewMode, manager::WorkflowOpenSource,
};
use crate::workspace::action::CommandSearchOptions;
use crate::workspace::one_time_modal_model::OneTimeModalModel;
@@ -364,20 +364,20 @@ use crate::workspace::sync_inputs::SyncedInputState;
use crate::workspace::toast_stack::{
ToastStack as WorkspaceToastStack, ToastStackEvent as WorkspaceToastStackEvent,
};
use crate::{GlobalResourceHandles, send_telemetry_from_ctx};
use crate::{
ai_assistant::{
AI_ASSISTANT_FEATURE_NAME, AI_ASSISTANT_LOGO_COLOR, AskAIType,
panel::{AIAssistantPanelEvent, AIAssistantPanelView},
AskAIType, AI_ASSISTANT_FEATURE_NAME, AI_ASSISTANT_LOGO_COLOR,
},
settings,
ui_components::blended_colors,
};
use crate::{send_telemetry_from_ctx, GlobalResourceHandles};
use futures::Future;
use galaxy_core::context_flag::ContextFlag;
use galaxy_core::semantic_selection::SemanticSelection;
use galaxy_util::path::{user_friendly_path, LineAndColumnArg};
use galaxy_util::path::{LineAndColumnArg, user_friendly_path};
use galaxyui::fonts::Weight;
use galaxyui::modals::{AlertDialogWithCallbacks, AppModalCallback};
use galaxyui::windowing::{StateEvent, WindowManager};
@@ -454,22 +454,22 @@ use crate::tab_configs::{
NewWorktreeModal, NewWorktreeModalEvent, TabConfigParamsModal, TabConfigParamsModalEvent,
};
use crate::TelemetryEvent;
use crate::code::editor::{add_color, remove_color};
use crate::palette::PaletteMode;
use crate::search::command_palette::view::{Event as CommandPaletteEvent, View as CommandPalette};
use crate::server::telemetry::{NotificationsTurnedOnSource, PaletteSource, TabRenameEvent};
use crate::tab::{
tab_position_id, NewSessionMenuItem, PaneNameMenuTarget, SelectedTabColor, TabBarState,
TabComponent, TabData, TabTelemetryAction, TAB_BAR_BORDER_HEIGHT,
NewSessionMenuItem, PaneNameMenuTarget, SelectedTabColor, TAB_BAR_BORDER_HEIGHT, TabBarState,
TabComponent, TabData, TabTelemetryAction, tab_position_id,
};
use crate::terminal::view::ssh_file_upload::FileUploadId;
use crate::ui_components::icons;
use crate::TelemetryEvent;
use autoupdate::AutoupdateStage;
#[cfg(target_os = "macos")]
use command::blocking::Command;
use galaxy_core::ui::theme::{color::internal_colors, phenomenon::PhenomenonStyle, Fill};
use galaxy_core::ui::{color::coloru_with_opacity, Icon};
use galaxy_core::ui::theme::{Fill, color::internal_colors, phenomenon::PhenomenonStyle};
use galaxy_core::ui::{Icon, color::coloru_with_opacity};
use galaxy_editor::editor::NavigationKey;
use galaxyui::keymap::Context;
use galaxyui::notification::{RequestPermissionsOutcome, UserNotification};
@@ -479,6 +479,7 @@ use galaxyui::platform::{
use galaxyui::text_layout::ClipConfig;
use galaxyui::ui_components::components::{Coords, UiComponent, UiComponentStyles};
use galaxyui::{
AppContext, Entity, TypedActionView, UpdateView, View, ViewContext, ViewHandle,
accessibility::{
AccessibilityContent, AccessibilityVerbosity, ActionAccessibilityContent, WarpA11yRole,
},
@@ -490,8 +491,7 @@ use galaxyui::{
PositionedElementAnchor, PositionedElementOffsetBounds, Radius, SavePosition, Shrinkable,
Stack, Text,
},
geometry::vector::{vec2f, Vector2F},
AppContext, Entity, TypedActionView, UpdateView, View, ViewContext, ViewHandle,
geometry::vector::{Vector2F, vec2f},
};
use galaxyui::{
EntityId, FocusContext, ModelHandle, SingletonEntity, UpdateModel, ViewAsRef, WeakViewHandle,
@@ -508,7 +508,7 @@ use std::path::Path;
use std::path::PathBuf;
#[cfg(target_os = "macos")]
use std::process;
use std::sync::{mpsc, Mutex};
use std::sync::{Mutex, mpsc};
use std::{cmp::Ordering, sync::Arc};
use crate::terminal::view::LeftPanelTargetView;
@@ -568,7 +568,6 @@ const VERTICAL_TABS_PANEL_POSITION_ID: &str = "workspace_view:vertical_tabs_pane
const TAB_CONTENT_POSITION_ID: &str = "workspace_view:tab_content";
const WELCOME_TIPS_POSITION_ID: &str = "welcome_tips_pill";
const ELLIPSE_SVG_PATH: &str = "bundled/svg/ellipse.svg";
const AI_ASSISTANT_BUTTON_ID: &str = "workspace_view:ai_assistant_button";
@@ -1920,12 +1919,16 @@ impl Workspace {
&& ai_settings.default_tab_config_path() == path.to_string_lossy();
if is_removed_default {
AISettings::handle(ctx).update(ctx, |settings, ctx| {
report_if_error!(settings
.default_session_mode_internal
.set_value(DefaultSessionMode::Terminal, ctx));
report_if_error!(settings
.default_tab_config_path
.set_value(String::new(), ctx));
report_if_error!(
settings
.default_session_mode_internal
.set_value(DefaultSessionMode::Terminal, ctx)
);
report_if_error!(
settings
.default_tab_config_path
.set_value(String::new(), ctx)
);
});
}
if let Err(e) = std::fs::remove_file(path) {
@@ -5504,9 +5507,11 @@ impl Workspace {
right,
};
TabSettings::handle(ctx).update(ctx, |settings, ctx| {
report_if_error!(settings
.header_toolbar_chip_selection
.set_value(selection, ctx));
report_if_error!(
settings
.header_toolbar_chip_selection
.set_value(selection, ctx)
);
});
}
@@ -5554,9 +5559,11 @@ impl Workspace {
if !FeatureFlag::ConfigurableToolbar.is_enabled() {
return;
}
let items = vec![MenuItemFields::new("Re-arrange toolbar items")
.with_on_select_action(WorkspaceAction::OpenHeaderToolbarEditor)
.into_item()];
let items = vec![
MenuItemFields::new("Re-arrange toolbar items")
.with_on_select_action(WorkspaceAction::OpenHeaderToolbarEditor)
.into_item(),
];
self.header_toolbar_context_menu
.update(ctx, |menu, ctx| menu.set_items(items, ctx));
self.show_header_toolbar_context_menu = Some(position);
@@ -7609,17 +7616,21 @@ impl Workspace {
fn toggle_recording_mode(&self, ctx: &mut ViewContext<Self>) {
DebugSettings::handle(ctx).update(ctx, |debug_settings, settings_ctx| {
report_if_error!(debug_settings
.recording_mode
.toggle_and_save_value(settings_ctx));
report_if_error!(
debug_settings
.recording_mode
.toggle_and_save_value(settings_ctx)
);
});
}
fn toggle_in_band_generators(&self, ctx: &mut ViewContext<Self>) {
DebugSettings::handle(ctx).update(ctx, |debug_settings, settings_ctx| {
report_if_error!(debug_settings
.are_in_band_generators_for_all_sessions_enabled
.toggle_and_save_value(settings_ctx));
report_if_error!(
debug_settings
.are_in_band_generators_for_all_sessions_enabled
.toggle_and_save_value(settings_ctx)
);
});
}
@@ -7782,9 +7793,11 @@ impl Workspace {
// Mark that we've done the one-time auto-open
AISettings::handle(ctx).update(ctx, |settings, ctx| {
report_if_error!(settings
.has_auto_opened_conversation_list
.set_value(true, ctx));
report_if_error!(
settings
.has_auto_opened_conversation_list
.set_value(true, ctx)
);
});
}
@@ -9697,9 +9710,11 @@ impl Workspace {
pub fn toggle_block_snackbar(&mut self, ctx: &mut ViewContext<Self>) {
BlockListSettings::handle(ctx).update(ctx, |blocklist_settings, ctx| {
report_if_error!(blocklist_settings
.snackbar_enabled
.toggle_and_save_value(ctx));
report_if_error!(
blocklist_settings
.snackbar_enabled
.toggle_and_save_value(ctx)
);
});
}
@@ -9711,9 +9726,11 @@ impl Workspace {
pub fn toggle_syntax_highlighting(&mut self, ctx: &mut ViewContext<Self>) {
InputSettings::handle(ctx).update(ctx, |input_settings, ctx| {
report_if_error!(input_settings
.syntax_highlighting
.toggle_and_save_value(ctx));
report_if_error!(
input_settings
.syntax_highlighting
.toggle_and_save_value(ctx)
);
});
}
@@ -9728,9 +9745,11 @@ impl Workspace {
ctx: &mut ViewContext<Self>,
) {
AccessibilitySettings::handle(ctx).update(ctx, |accessibility_settings, ctx| {
report_if_error!(accessibility_settings
.a11y_verbosity
.set_value(verbosity, ctx));
report_if_error!(
accessibility_settings
.a11y_verbosity
.set_value(verbosity, ctx)
);
});
}
@@ -15550,9 +15569,11 @@ impl Workspace {
fn reset_zoom(&mut self, ctx: &mut ViewContext<Self>) {
WindowSettings::handle(ctx).update(ctx, |window_settings, ctx| {
report_if_error!(window_settings
.zoom_level
.set_value(ZoomLevel::default_value(), ctx));
report_if_error!(
window_settings
.zoom_level
.set_value(ZoomLevel::default_value(), ctx)
);
});
}
@@ -15572,9 +15593,11 @@ impl Workspace {
};
WindowSettings::handle(ctx).update(ctx, |window_settings, ctx| {
report_if_error!(window_settings
.zoom_level
.set_value(crate::window_settings::ZoomLevel::VALUES[next_index], ctx));
report_if_error!(
window_settings
.zoom_level
.set_value(crate::window_settings::ZoomLevel::VALUES[next_index], ctx)
);
});
}
@@ -15587,9 +15610,11 @@ impl Workspace {
fn set_terminal_font_size(&mut self, new_font_size: f32, ctx: &mut ViewContext<Self>) {
FontSettings::handle(ctx).update(ctx, |font_settings, ctx| {
report_if_error!(font_settings
.monospace_font_size
.set_value(new_font_size, ctx));
report_if_error!(
font_settings
.monospace_font_size
.set_value(new_font_size, ctx)
);
});
}
@@ -15839,8 +15864,8 @@ impl Workspace {
}
fn handle_codex_modal_event(&mut self, event: &CodexModalEvent, ctx: &mut ViewContext<Self>) {
use crate::ai::blocklist::agent_view::AgentViewEntryOrigin;
use crate::AIExecutionProfilesModel;
use crate::ai::blocklist::agent_view::AgentViewEntryOrigin;
match event {
CodexModalEvent::Close => {
@@ -17720,54 +17745,6 @@ impl Workspace {
SavePosition::new(Align::new(button).finish(), USER_AVATAR_BUTTON_POSITION_ID).finish()
}
fn render_resource_center_button(
&self,
appearance: &Appearance,
ctx: &AppContext,
) -> Box<dyn Element> {
// only show the unread indicator if the tips are NOT completed
let should_show_unread_indicator = !self.tips_completed.as_ref(ctx).skipped_or_completed;
let mut button = self
.render_tab_bar_icon_button(
appearance,
icons::Icon::Lightbulb,
&self.mouse_states.resource_center_icon,
WorkspaceAction::ToggleResourceCenter,
"Warp Essentials".to_string(),
self.cached_keybindings[TOGGLE_RESOURCE_CENTER_KEYBINDING_NAME].clone(),
false,
false,
)
.finish();
if should_show_unread_indicator {
const INDICATOR_DIAMETER: f32 = 6.;
let indicator = Container::new(
ConstrainedBox::new(
WarpUiIcon::new(ELLIPSE_SVG_PATH, appearance.theme().accent()).finish(),
)
.with_height(INDICATOR_DIAMETER)
.with_width(INDICATOR_DIAMETER)
.finish(),
)
.finish();
let mut stack = Stack::new();
stack.add_child(button);
stack.add_positioned_child(
indicator,
OffsetPositioning::offset_from_parent(
Vector2F::zero(),
ParentOffsetBounds::WindowByPosition,
ParentAnchor::TopRight,
ChildAnchor::TopRight,
),
);
button = stack.finish();
}
Align::new(button).finish()
}
fn render_settings_button(&self, appearance: &Appearance) -> Box<dyn Element> {
Align::new(
self.render_tab_bar_icon_button(
@@ -19677,12 +19654,16 @@ impl TypedActionView for Workspace {
} else {
// Config missing or deleted — clear and fall through to Terminal.
AISettings::handle(ctx).update(ctx, |settings, ctx| {
report_if_error!(settings
.default_session_mode_internal
.set_value(DefaultSessionMode::Terminal, ctx));
report_if_error!(settings
.default_tab_config_path
.set_value(String::new(), ctx));
report_if_error!(
settings
.default_session_mode_internal
.set_value(DefaultSessionMode::Terminal, ctx)
);
report_if_error!(
settings
.default_tab_config_path
.set_value(String::new(), ctx)
);
});
self.add_terminal_tab(false, ctx);
}
@@ -19802,9 +19783,11 @@ impl TypedActionView for Workspace {
AISettings::handle(ctx).update(ctx, |settings, ctx| {
report_if_error!(settings.default_session_mode_internal.set_value(*mode, ctx));
if let Some(path) = tab_config_path {
report_if_error!(settings
.default_tab_config_path
.set_value(path.to_string_lossy().into_owned(), ctx));
report_if_error!(
settings
.default_tab_config_path
.set_value(path.to_string_lossy().into_owned(), ctx)
);
}
});
#[cfg(feature = "local_tty")]