forked from qt-creator/qt-creator
macOS: Force light appearance before saving system palette
When using a light theme while macOS is in dark mode, we need to first force the application appearance to be light, before saving the system palette. Otherwise the system palette will contain colors from the dark system appearance. Fixes: QTCREATORBUG-21520 Fixes: QTCREATORBUG-26427 Fixes: QTCREATORBUG-26428 Change-Id: Icf802093de17715d16db5c5735b133f2fc465436 Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
@@ -67,6 +67,18 @@ void setThemeApplicationPalette()
|
||||
QApplication::setPalette(m_creatorTheme->palette());
|
||||
}
|
||||
|
||||
static void maybeForceMacOSLight(Theme *theme)
|
||||
{
|
||||
#ifdef Q_OS_MACOS
|
||||
// Match the native UI theme and palette with the creator
|
||||
// theme by forcing light aqua for light creator themes.
|
||||
if (theme && !theme->flag(Theme::DarkUserInterface))
|
||||
Internal::forceMacOSLightAquaApperance();
|
||||
#else
|
||||
Q_UNUSED(theme)
|
||||
#endif
|
||||
}
|
||||
|
||||
void setCreatorTheme(Theme *theme)
|
||||
{
|
||||
if (m_creatorTheme == theme)
|
||||
@@ -74,13 +86,7 @@ void setCreatorTheme(Theme *theme)
|
||||
delete m_creatorTheme;
|
||||
m_creatorTheme = theme;
|
||||
|
||||
#ifdef Q_OS_MACOS
|
||||
// Match the native UI theme and palette with the creator
|
||||
// theme by forcing light aqua for light creator themes.
|
||||
if (theme && !theme->flag(Theme::DarkUserInterface))
|
||||
Internal::forceMacOSLightAquaApperance();
|
||||
#endif
|
||||
|
||||
maybeForceMacOSLight(theme);
|
||||
setThemeApplicationPalette();
|
||||
}
|
||||
|
||||
@@ -270,6 +276,12 @@ static QPalette copyPalette(const QPalette &p)
|
||||
return res;
|
||||
}
|
||||
|
||||
void Theme::setInitialPalette(Theme *initTheme)
|
||||
{
|
||||
maybeForceMacOSLight(initTheme);
|
||||
initialPalette();
|
||||
}
|
||||
|
||||
QPalette Theme::initialPalette()
|
||||
{
|
||||
static QPalette palette = copyPalette(QApplication::palette());
|
||||
|
@@ -481,6 +481,8 @@ public:
|
||||
static bool systemUsesDarkMode();
|
||||
static QPalette initialPalette();
|
||||
|
||||
static void setInitialPalette(Theme *initTheme);
|
||||
|
||||
protected:
|
||||
Theme(Theme *originTheme, QObject *parent = nullptr);
|
||||
ThemePrivate *d;
|
||||
|
@@ -160,10 +160,11 @@ bool CorePlugin::initialize(const QStringList &arguments, QString *errorMessage)
|
||||
return false;
|
||||
}
|
||||
const CoreArguments args = parseArguments(arguments);
|
||||
Theme::initialPalette(); // Initialize palette before setting it
|
||||
Theme *themeFromArg = ThemeEntry::createTheme(args.themeId);
|
||||
setCreatorTheme(themeFromArg ? themeFromArg
|
||||
: ThemeEntry::createTheme(ThemeEntry::themeSetting()));
|
||||
Theme *theme = themeFromArg ? themeFromArg
|
||||
: ThemeEntry::createTheme(ThemeEntry::themeSetting());
|
||||
Theme::setInitialPalette(theme); // Initialize palette before setting it
|
||||
setCreatorTheme(theme);
|
||||
InfoBar::initialize(ICore::settings());
|
||||
new ActionManager(this);
|
||||
ActionManager::setPresentationModeEnabled(args.presentationMode);
|
||||
|
Reference in New Issue
Block a user