| 66 | } |
| 67 | |
| 68 | void ThemeManager::resolveTheme() |
| 69 | { |
| 70 | if (!config) |
| 71 | return; |
| 72 | |
| 73 | const auto &sel = config->selection(); |
| 74 | const ThemeVariant systemVariant = themeVariantFromColorScheme(qGuiApp->styleHints()->colorScheme()); |
| 75 | |
| 76 | QString id; |
| 77 | ThemeVariant fallbackVariant; |
| 78 | switch (sel.mode) { |
| 79 | case ThemeMode::FollowSystem: { |
| 80 | const bool isDark = (systemVariant == ThemeVariant::Dark); |
| 81 | id = isDark ? sel.darkThemeId : sel.lightThemeId; |
| 82 | fallbackVariant = systemVariant; |
| 83 | break; |
| 84 | } |
| 85 | case ThemeMode::Light: |
| 86 | id = sel.lightThemeId; |
| 87 | fallbackVariant = ThemeVariant::Light; |
| 88 | break; |
| 89 | case ThemeMode::Dark: |
| 90 | id = sel.darkThemeId; |
| 91 | fallbackVariant = ThemeVariant::Dark; |
| 92 | break; |
| 93 | case ThemeMode::ForcedTheme: |
| 94 | id = sel.fixedThemeId; |
| 95 | fallbackVariant = systemVariant; |
| 96 | break; |
| 97 | } |
| 98 | |
| 99 | const Theme theme = themeFromId(id, fallbackVariant); |
| 100 | |
| 101 | // Sync Qt's application-level color scheme so native widgets (menus, scrollbars, |
| 102 | // standard dialogs) use the correct palette before themeChanged() is emitted. |
| 103 | #if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0) |
| 104 | Qt::ColorScheme scheme; |
| 105 | switch (sel.mode) { |
| 106 | case ThemeMode::FollowSystem: |
| 107 | scheme = Qt::ColorScheme::Unknown; // delegate to OS |
| 108 | break; |
| 109 | case ThemeMode::Light: |
| 110 | scheme = Qt::ColorScheme::Light; |
| 111 | break; |
| 112 | case ThemeMode::Dark: |
| 113 | scheme = Qt::ColorScheme::Dark; |
| 114 | break; |
| 115 | case ThemeMode::ForcedTheme: |
| 116 | scheme = (theme.meta.variant == ThemeVariant::Dark) |
| 117 | ? Qt::ColorScheme::Dark |
| 118 | : Qt::ColorScheme::Light; |
| 119 | break; |
| 120 | } |
| 121 | qGuiApp->styleHints()->setColorScheme(scheme); |
| 122 | #endif |
| 123 | |
| 124 | setTheme(theme); |
| 125 | } |
nothing calls this directly
no test coverage detected