[Backport release-9.x] Use default palette on all system themes (#3585)
This commit is contained in:
commit
ce0a730531
@ -40,20 +40,29 @@
|
|||||||
#include "HintOverrideProxyStyle.h"
|
#include "HintOverrideProxyStyle.h"
|
||||||
#include "ThemeManager.h"
|
#include "ThemeManager.h"
|
||||||
|
|
||||||
SystemTheme::SystemTheme(const QString& styleName, bool isDefaultTheme)
|
// See https://github.com/MultiMC/Launcher/issues/1790
|
||||||
|
// or https://github.com/PrismLauncher/PrismLauncher/issues/490
|
||||||
|
static const QStringList S_NATIVE_STYLES{ "windows11", "windowsvista", "macos", "system", "windows" };
|
||||||
|
|
||||||
|
SystemTheme::SystemTheme(const QString& styleName, const QPalette& defaultPalette, bool isDefaultTheme)
|
||||||
{
|
{
|
||||||
m_themeName = isDefaultTheme ? "system" : styleName;
|
m_themeName = isDefaultTheme ? "system" : styleName;
|
||||||
m_widgetTheme = styleName;
|
m_widgetTheme = styleName;
|
||||||
auto style = QStyleFactory::create(styleName);
|
// NOTE: SystemTheme is reconstructed on page refresh. We can't accurately determine the system palette here
|
||||||
m_colorPalette = style->standardPalette();
|
// See also S_NATIVE_STYLES comment
|
||||||
delete style;
|
if (S_NATIVE_STYLES.contains(m_themeName)) {
|
||||||
|
m_colorPalette = defaultPalette;
|
||||||
|
} else {
|
||||||
|
auto style = QStyleFactory::create(styleName);
|
||||||
|
m_colorPalette = style->standardPalette();
|
||||||
|
delete style;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SystemTheme::apply(bool initial)
|
void SystemTheme::apply(bool initial)
|
||||||
{
|
{
|
||||||
// See https://github.com/MultiMC/Launcher/issues/1790
|
// See S_NATIVE_STYLES comment
|
||||||
// or https://github.com/PrismLauncher/PrismLauncher/issues/490
|
if (initial && S_NATIVE_STYLES.contains(m_themeName)) {
|
||||||
if (initial && m_themeName == "system") {
|
|
||||||
QApplication::setStyle(new HintOverrideProxyStyle(QStyleFactory::create(qtTheme())));
|
QApplication::setStyle(new HintOverrideProxyStyle(QStyleFactory::create(qtTheme())));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -38,7 +38,7 @@
|
|||||||
|
|
||||||
class SystemTheme : public ITheme {
|
class SystemTheme : public ITheme {
|
||||||
public:
|
public:
|
||||||
SystemTheme(const QString& styleName, bool isDefaultTheme);
|
SystemTheme(const QString& styleName, const QPalette& defaultPalette, bool isDefaultTheme);
|
||||||
virtual ~SystemTheme() {}
|
virtual ~SystemTheme() {}
|
||||||
void apply(bool initial) override;
|
void apply(bool initial) override;
|
||||||
|
|
||||||
|
@ -44,6 +44,8 @@ ThemeManager::ThemeManager()
|
|||||||
m_defaultStyle = style->objectName();
|
m_defaultStyle = style->objectName();
|
||||||
themeDebugLog() << "System theme seems to be:" << m_defaultStyle;
|
themeDebugLog() << "System theme seems to be:" << m_defaultStyle;
|
||||||
|
|
||||||
|
m_defaultPalette = QApplication::palette();
|
||||||
|
|
||||||
initializeThemes();
|
initializeThemes();
|
||||||
initializeCatPacks();
|
initializeCatPacks();
|
||||||
}
|
}
|
||||||
@ -126,7 +128,7 @@ void ThemeManager::initializeIcons()
|
|||||||
void ThemeManager::initializeWidgets()
|
void ThemeManager::initializeWidgets()
|
||||||
{
|
{
|
||||||
themeDebugLog() << "<> Initializing Widget Themes";
|
themeDebugLog() << "<> Initializing Widget Themes";
|
||||||
themeDebugLog() << "Loading Built-in Theme:" << addTheme(std::make_unique<SystemTheme>(m_defaultStyle, true));
|
themeDebugLog() << "Loading Built-in Theme:" << addTheme(std::make_unique<SystemTheme>(m_defaultStyle, m_defaultPalette, true));
|
||||||
auto darkThemeId = addTheme(std::make_unique<DarkTheme>());
|
auto darkThemeId = addTheme(std::make_unique<DarkTheme>());
|
||||||
themeDebugLog() << "Loading Built-in Theme:" << darkThemeId;
|
themeDebugLog() << "Loading Built-in Theme:" << darkThemeId;
|
||||||
themeDebugLog() << "Loading Built-in Theme:" << addTheme(std::make_unique<BrightTheme>());
|
themeDebugLog() << "Loading Built-in Theme:" << addTheme(std::make_unique<BrightTheme>());
|
||||||
@ -139,7 +141,7 @@ void ThemeManager::initializeWidgets()
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
themeDebugLog() << "Loading System Theme:" << addTheme(std::make_unique<SystemTheme>(st, false));
|
themeDebugLog() << "Loading System Theme:" << addTheme(std::make_unique<SystemTheme>(st, m_defaultPalette, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: need some way to differentiate same name themes in different subdirectories
|
// TODO: need some way to differentiate same name themes in different subdirectories
|
||||||
|
@ -68,6 +68,7 @@ class ThemeManager {
|
|||||||
QDir m_applicationThemeFolder{ "themes" };
|
QDir m_applicationThemeFolder{ "themes" };
|
||||||
QDir m_catPacksFolder{ "catpacks" };
|
QDir m_catPacksFolder{ "catpacks" };
|
||||||
std::map<QString, std::unique_ptr<CatPack>> m_catPacks;
|
std::map<QString, std::unique_ptr<CatPack>> m_catPacks;
|
||||||
|
QPalette m_defaultPalette;
|
||||||
QString m_defaultStyle;
|
QString m_defaultStyle;
|
||||||
LogColors m_logColors;
|
LogColors m_logColors;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user