From fd20675dd76a77e71cc09fb681a27f8725ca96b5 Mon Sep 17 00:00:00 2001 From: Michael Hackner Date: Wed, 21 Jan 2026 02:12:29 -0800 Subject: [PATCH] onboarding: Fix theme picker always updating theme based on system appearance (#47245) The settings store separate themes for Light and Dark modes. When the user clicks a theme, the code uses the system appearance to decide which to update, rather than the mode the user selected in the UI. This causes the wrong theme to be saved when the system appearance differs from the selected mode. image Release Notes: - Fixed onboarding page sometimes rendering the wrong theme --------- Co-authored-by: Claude Opus 4.5 Co-authored-by: MrSubidubi --- crates/onboarding/src/basics_page.rs | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/crates/onboarding/src/basics_page.rs b/crates/onboarding/src/basics_page.rs index b5a2f5de36..b683b13743 100644 --- a/crates/onboarding/src/basics_page.rs +++ b/crates/onboarding/src/basics_page.rs @@ -209,8 +209,8 @@ fn render_theme_section(tab_index: &mut isize, cx: &mut App) -> impl IntoElement ) { let fs = ::global(cx); let theme = theme.into(); - update_settings_file(fs, cx, move |settings, cx| { - if theme_mode == ThemeAppearanceMode::System { + update_settings_file(fs, cx, move |settings, cx| match theme_mode { + ThemeAppearanceMode::System => { let (light_theme, dark_theme) = get_theme_family_themes(&theme).unwrap_or((theme.as_ref(), theme.as_ref())); @@ -219,10 +219,19 @@ fn render_theme_section(tab_index: &mut isize, cx: &mut App) -> impl IntoElement light: ThemeName(light_theme.into()), dark: ThemeName(dark_theme.into()), }); - } else { - let appearance = *SystemAppearance::global(cx); - theme::set_theme(settings, theme, appearance, appearance); } + ThemeAppearanceMode::Light => theme::set_theme( + settings, + theme, + Appearance::Light, + *SystemAppearance::global(cx), + ), + ThemeAppearanceMode::Dark => theme::set_theme( + settings, + theme, + Appearance::Dark, + *SystemAppearance::global(cx), + ), }); } }