diff --git a/src/libs/utils/theme/theme.cpp b/src/libs/utils/theme/theme.cpp index ca9bbebabf0..2b9b12ebc37 100644 --- a/src/libs/utils/theme/theme.cpp +++ b/src/libs/utils/theme/theme.cpp @@ -26,6 +26,7 @@ #include "theme.h" #include "theme_p.h" #include "../algorithm.h" +#include "../hostosinfo.h" #include "../qtcassert.h" #ifdef Q_OS_MACOS #import "theme_mac.h" @@ -242,6 +243,18 @@ void Theme::readSettings(QSettings &settings) } } +bool Theme::systemUsesDarkMode() +{ + if (HostOsInfo::isWindowsHost()) { + constexpr char regkey[] + = "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; + bool ok; + const auto setting = QSettings(regkey, QSettings::NativeFormat).value("AppsUseLightTheme").toInt(&ok); + return ok && setting == 0; + } + return false; +} + // If you copy QPalette, default values stay at default, even if that default is different // within the context of different widgets. Create deep copy. static QPalette copyPalette(const QPalette &p) diff --git a/src/libs/utils/theme/theme.h b/src/libs/utils/theme/theme.h index fa66980126b..a266c62bb5b 100644 --- a/src/libs/utils/theme/theme.h +++ b/src/libs/utils/theme/theme.h @@ -394,6 +394,7 @@ public: void readSettings(QSettings &settings); + static bool systemUsesDarkMode(); static QPalette initialPalette(); protected: diff --git a/src/plugins/coreplugin/coreconstants.h b/src/plugins/coreplugin/coreconstants.h index 8e4b8af366e..83b007146d4 100644 --- a/src/plugins/coreplugin/coreconstants.h +++ b/src/plugins/coreplugin/coreconstants.h @@ -220,6 +220,7 @@ const char SETTINGS_DEFAULT_LINE_TERMINATOR[] = "General/DefaultLineTerminator"; const char SETTINGS_THEME[] = "Core/CreatorTheme"; const char DEFAULT_THEME[] = "flat"; +const char DEFAULT_DARK_THEME[] = "flat-dark"; const char TR_CLEAR_MENU[] = QT_TRANSLATE_NOOP("Core", "Clear Menu"); diff --git a/src/plugins/coreplugin/themechooser.cpp b/src/plugins/coreplugin/themechooser.cpp index 9ef53718443..2f4127b5a98 100644 --- a/src/plugins/coreplugin/themechooser.cpp +++ b/src/plugins/coreplugin/themechooser.cpp @@ -225,9 +225,10 @@ QList ThemeEntry::availableThemes() Id ThemeEntry::themeSetting() { - const Id setting = - Id::fromSetting(ICore::settings()->value(QLatin1String(Constants::SETTINGS_THEME), - QLatin1String(Constants::DEFAULT_THEME))); + auto defaultId = Theme::systemUsesDarkMode() ? Constants::DEFAULT_DARK_THEME + : Constants::DEFAULT_THEME; + const Id setting = Id::fromSetting( + ICore::settings()->value(Constants::SETTINGS_THEME, defaultId)); const QList themes = availableThemes(); if (themes.empty())