You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kf5-kconfigwidgets/kcolorschememanager-dont-ov...

47 lines
2.0 KiB

From 2cd530626aeafd861c65b434af85d5153da618a2 Mon Sep 17 00:00:00 2001
From: Jan Grulich <jgrulich@redhat.com>
Date: Thu, 9 Mar 2023 11:19:28 +0100
Subject: [PATCH] KColorSchemeManager: don't override color scheme set by
platform theme
This allows to have Qt platform theme setting the color scheme before
it gets set and overriden by KColorSchemeManager. This is useful for 3rd
party platform themes like QGnomePlatform, allowing them to set a color
scheme that would complement QPalette. Since many KDE apps rely on using
KColorScheme, it can happen that they will use a color from KColorScheme
that doesn't correspond to QPalette set through the platform theme and
end up being broken.
BUG: 447029
---
src/kcolorschememanager.cpp | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/src/kcolorschememanager.cpp b/src/kcolorschememanager.cpp
index 4c7e3be0..0c845555 100644
--- a/src/kcolorschememanager.cpp
+++ b/src/kcolorschememanager.cpp
@@ -109,8 +109,17 @@ KColorSchemeManager::KColorSchemeManager(QObject *parent)
QString schemePath;
if (scheme.isEmpty() || scheme == QLatin1String("Default")) {
- schemePath = d->automaticColorSchemePath();
- d->m_defaultSchemeSelected = true;
+ // Color scheme might be already set from a platform theme
+ // This is used for example by QGnomePlatform that can set color scheme
+ // matching GNOME settings. This avoids issues where QGnomePlatform sets
+ // QPalette for dark theme, but end up mixing it also with Breeze light
+ // that is going to be used as a fallback for apps using KColorScheme.
+ // BUG: 447029
+ schemePath = qApp->property("KDE_COLOR_SCHEME_PATH").toString();
+ if (schemePath.isEmpty()) {
+ schemePath = d->automaticColorSchemePath();
+ d->m_defaultSchemeSelected = true;
+ }
} else {
schemePath = indexForScheme(scheme).data(KColorSchemeModel::PathRole).toString();
d->m_defaultSchemeSelected = false;
--
GitLab