From 6ab03c6c1f17d44c5857dbbd9694d338826a0f17 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 b5a2f5de365b581b95cb60269918068345474880..b683b13743819bbba692a99a7c559cfd9823a4b4 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), + ), }); } }