From bbf4bfad6f7e971a0598aa62a59f9b6151ca6eef Mon Sep 17 00:00:00 2001 From: Mikayla Maki Date: Wed, 8 Oct 2025 00:15:40 -0700 Subject: [PATCH] Implement the unimplemented setting (#39747) Release Notes: - N/A --- crates/settings_ui/src/settings_ui.rs | 30 ++++++++++++++++----------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/crates/settings_ui/src/settings_ui.rs b/crates/settings_ui/src/settings_ui.rs index 002962c1e937610d8aad1094fb22fe28494212b6..c9fce16f890ca63d03e27b5ae9b0dd205133f8d3 100644 --- a/crates/settings_ui/src/settings_ui.rs +++ b/crates/settings_ui/src/settings_ui.rs @@ -55,7 +55,9 @@ actions!( /// Focuses the next file in the file list. FocusNextFile, /// Focuses the previous file in the file list. - FocusPreviousFile + FocusPreviousFile, + /// Opens an editor for the current file + OpenCurrentFile, ] ); @@ -239,20 +241,14 @@ pub fn init(cx: &mut App) { } fn init_renderers(cx: &mut App) { - // fn (field: SettingsField, current_file: SettingsFile, cx) -> (currently_set_in: SettingsFile, overridden_in: Vec) cx.default_global::() .add_renderer::(|_, _, _, _, _| { - // TODO(settings_ui): In non-dev builds (`#[cfg(not(debug_assertions))]`) make this render as edit-in-json - Button::new("unimplemented-field", "UNIMPLEMENTED") - .size(ButtonSize::Medium) - .icon(IconName::XCircle) - .icon_position(IconPosition::Start) - .icon_color(Color::Error) - .icon_size(IconSize::Small) + Button::new("open-in-settings-file", "Edit in settings.json") + .size(ButtonSize::Default) .style(ButtonStyle::Outlined) - .tooltip(Tooltip::text( - "This warning is only displayed in dev builds.", - )) + .on_click(|_, window, cx| { + window.dispatch_action(Box::new(OpenCurrentFile), cx); + }) .into_any_element() }) .add_renderer::(|settings_field, file, _, _, cx| { @@ -792,6 +788,10 @@ enum SettingsUiFile { } impl SettingsUiFile { + fn is_server(&self) -> bool { + matches!(self, SettingsUiFile::Server(_)) + } + fn worktree_id(&self) -> Option { match self { SettingsUiFile::User => None, @@ -1176,6 +1176,9 @@ impl SettingsWindow { let Some(settings_ui_file) = SettingsUiFile::from_settings(file) else { continue; }; + if settings_ui_file.is_server() { + continue; + } if let Some(worktree_id) = settings_ui_file.worktree_id() { let directory_name = all_projects(cx) @@ -1798,6 +1801,9 @@ impl Render for SettingsWindow { .id("settings-window") .key_context("SettingsWindow") .track_focus(&self.focus_handle) + .on_action(cx.listener(|this, _: &OpenCurrentFile, _, cx| { + this.open_current_settings_file(cx); + })) .on_action(|_: &Minimize, window, _cx| { window.minimize_window(); })