diff --git a/src/libs/utils/theme/theme.cpp b/src/libs/utils/theme/theme.cpp index 95b03c9c86f..ccfba5f6fcc 100644 --- a/src/libs/utils/theme/theme.cpp +++ b/src/libs/utils/theme/theme.cpp @@ -324,14 +324,20 @@ void Theme::readSettings(QSettings &settings) } } -QPalette Theme::palette(const QPalette &base) const +QPalette Theme::initialPalette() { + static QPalette palette = QApplication::palette(); + return palette; +} + +QPalette Theme::palette() const +{ + QPalette pal = initialPalette(); if (!flag(DerivePaletteFromTheme)) - return base; + return pal; // FIXME: introduce some more color roles for this - QPalette pal = base; pal.setColor(QPalette::All, QPalette::Window, color(Theme::BackgroundColorNormal)); pal.setBrush(QPalette::All, QPalette::WindowText, color(Theme::TextColorNormal)); pal.setColor(QPalette::All, QPalette::Base, color(Theme::BackgroundColorNormal)); diff --git a/src/libs/utils/theme/theme.h b/src/libs/utils/theme/theme.h index 64411b2dd13..8c6aa9bf630 100644 --- a/src/libs/utils/theme/theme.h +++ b/src/libs/utils/theme/theme.h @@ -33,8 +33,9 @@ #include "../utils_global.h" -#include #include +#include +#include QT_FORWARD_DECLARE_CLASS(QSettings) @@ -199,7 +200,7 @@ public: QColor color(Color role) const; QString imageFile(ImageFile imageFile, const QString &fallBack) const; QGradientStops gradient(Gradient role) const; - QPalette palette(const QPalette &base) const; + QPalette palette() const; QStringList preferredStyles() const; QString fileName() const; @@ -209,6 +210,9 @@ public: void writeSettings(const QString &filename) const; void readSettings(QSettings &settings); + + static QPalette initialPalette(); + ThemePrivate *d; signals: diff --git a/src/plugins/coreplugin/coreplugin.cpp b/src/plugins/coreplugin/coreplugin.cpp index cd50daf04bb..e84be25ac64 100644 --- a/src/plugins/coreplugin/coreplugin.cpp +++ b/src/plugins/coreplugin/coreplugin.cpp @@ -133,7 +133,7 @@ void CorePlugin::parseArguments(const QStringList &arguments) theme->readSettings(themeSettings); setCreatorTheme(theme); if (theme->flag(Theme::ApplyThemePaletteGlobally)) - QApplication::setPalette(creatorTheme()->palette(QApplication::palette())); + QApplication::setPalette(creatorTheme()->palette()); // defer creation of these widgets until here, // because they need a valid theme set @@ -148,6 +148,7 @@ void CorePlugin::parseArguments(const QStringList &arguments) bool CorePlugin::initialize(const QStringList &arguments, QString *errorMessage) { + Theme::initialPalette(); // Initialize palette before setting it qsrand(QDateTime::currentDateTime().toTime_t()); parseArguments(arguments); const bool success = m_mainWindow->init(errorMessage); diff --git a/src/plugins/coreplugin/themesettingswidget.cpp b/src/plugins/coreplugin/themesettingswidget.cpp index ab753319600..fd29e643639 100644 --- a/src/plugins/coreplugin/themesettingswidget.cpp +++ b/src/plugins/coreplugin/themesettingswidget.cpp @@ -419,7 +419,7 @@ void ThemeSettingsWidget::apply() { d->m_ui->editor->model()->toTheme(creatorTheme()); if (creatorTheme()->flag(Theme::ApplyThemePaletteGlobally)) - QApplication::setPalette(creatorTheme()->palette(QApplication::palette())); + QApplication::setPalette(creatorTheme()->palette()); foreach (QWidget *w, QApplication::topLevelWidgets()) w->update(); }