improve color schemes handling for default values

--when color schemes from themes are used there are
cases that the WM records do not correspond to the
colors that the plasma theme will use. In such cases
the color scheme file that is passed to applets can
create colors inconsistencies. For this reason we
update the default color scheme in order for its
WM values to be consistent with the plasma theme.
For the record plasma theme is using Colors:View
group for its main colors.

BUG: 401431
pull/3/head
Michail Vourlakos 6 years ago
parent 50ea2e1f8b
commit 74238dba6f

@ -35,6 +35,7 @@
#include <KConfigGroup> #include <KConfigGroup>
#include <KSharedConfig> #include <KSharedConfig>
#define DEFAULTCOLORSCHEME "default.colors"
#define REVERSEDCOLORSCHEME "reversed.colors" #define REVERSEDCOLORSCHEME "reversed.colors"
namespace Latte { namespace Latte {
@ -62,7 +63,7 @@ PlasmaThemeExtended::~PlasmaThemeExtended()
{ {
saveConfig(); saveConfig();
m_normalScheme->deleteLater(); m_defaultScheme->deleteLater();
m_reversedScheme->deleteLater(); m_reversedScheme->deleteLater();
} }
@ -128,38 +129,31 @@ bool PlasmaThemeExtended::themeHasExtendedInfo() const
SchemeColors *PlasmaThemeExtended::defaultTheme() const SchemeColors *PlasmaThemeExtended::defaultTheme() const
{ {
return m_normalScheme; return m_defaultScheme;
} }
SchemeColors *PlasmaThemeExtended::lightTheme() const SchemeColors *PlasmaThemeExtended::lightTheme() const
{ {
return m_isLightTheme ? m_normalScheme : m_reversedScheme; return m_isLightTheme ? m_defaultScheme : m_reversedScheme;
} }
SchemeColors *PlasmaThemeExtended::darkTheme() const SchemeColors *PlasmaThemeExtended::darkTheme() const
{ {
return !m_isLightTheme ? m_normalScheme : m_reversedScheme; return !m_isLightTheme ? m_defaultScheme : m_reversedScheme;
} }
void PlasmaThemeExtended::setNormalSchemeFile(const QString &file) void PlasmaThemeExtended::setOriginalSchemeFile(const QString &file)
{ {
if (m_normalSchemePath == file) { if (m_originalSchemePath == file) {
return; return;
} }
m_normalSchemePath = file; m_originalSchemePath = file;
if (m_normalScheme) { qDebug() << "plasma theme original colors ::: " << m_originalSchemePath;
disconnect(m_normalScheme, &SchemeColors::colorsChanged, this, &PlasmaThemeExtended::loadThemeLightness);
m_normalScheme->deleteLater();
}
m_normalScheme = new SchemeColors(this, m_normalSchemePath, true);
connect(m_normalScheme, &SchemeColors::colorsChanged, this, &PlasmaThemeExtended::loadThemeLightness);
qDebug() << "plasma theme normal colors ::: " << m_normalSchemePath;
updateDefaultScheme();
updateReversedScheme(); updateReversedScheme();
loadThemeLightness(); loadThemeLightness();
@ -167,11 +161,59 @@ void PlasmaThemeExtended::setNormalSchemeFile(const QString &file)
emit themeChanged(); emit themeChanged();
} }
//! WM records need to be updated based on the colors that
//! plasma will use in order to be consistent. Such an example
//! are the Breeze color schemes that have different values for
//! WM and the plasma theme records
void PlasmaThemeExtended::updateDefaultScheme()
{
QString defaultFilePath = m_extendedThemeDir.path() + "/" + DEFAULTCOLORSCHEME;
if (QFileInfo(defaultFilePath).exists()) {
QFile(defaultFilePath).remove();
}
QFile(m_originalSchemePath).copy(defaultFilePath);
m_defaultSchemePath = defaultFilePath;
updateDefaultSchemeValues();
if (m_defaultScheme) {
disconnect(m_defaultScheme, &SchemeColors::colorsChanged, this, &PlasmaThemeExtended::loadThemeLightness);
m_defaultScheme->deleteLater();
}
m_defaultScheme = new SchemeColors(this, m_defaultSchemePath, true);
connect(m_defaultScheme, &SchemeColors::colorsChanged, this, &PlasmaThemeExtended::loadThemeLightness);
qDebug() << "plasma theme default colors ::: " << m_defaultSchemePath;
}
void PlasmaThemeExtended::updateDefaultSchemeValues()
{
//! update WM values based on original scheme
KSharedConfigPtr originalPtr = KSharedConfig::openConfig(m_originalSchemePath);
KSharedConfigPtr defaultPtr = KSharedConfig::openConfig(m_defaultSchemePath);
if (originalPtr && defaultPtr) {
KConfigGroup originalViewGroup(originalPtr, "Colors:View");
KConfigGroup defaultWMGroup(defaultPtr, "WM");
defaultWMGroup.writeEntry("activeBackground", originalViewGroup.readEntry("BackgroundNormal", QColor()));
defaultWMGroup.writeEntry("activeForeground", originalViewGroup.readEntry("ForegroundNormal", QColor()));
defaultWMGroup.sync();
}
}
void PlasmaThemeExtended::updateReversedScheme() void PlasmaThemeExtended::updateReversedScheme()
{ {
QString reversedFilePath = m_extendedThemeDir.path() + "/" + REVERSEDCOLORSCHEME; QString reversedFilePath = m_extendedThemeDir.path() + "/" + REVERSEDCOLORSCHEME;
QFile(m_normalSchemePath).copy(reversedFilePath); if (QFileInfo(reversedFilePath).exists()) {
QFile(reversedFilePath).remove();
}
QFile(m_originalSchemePath).copy(reversedFilePath);
m_reversedSchemePath = reversedFilePath; m_reversedSchemePath = reversedFilePath;
updateReversedSchemeValues(); updateReversedSchemeValues();
@ -188,10 +230,10 @@ void PlasmaThemeExtended::updateReversedScheme()
void PlasmaThemeExtended::updateReversedSchemeValues() void PlasmaThemeExtended::updateReversedSchemeValues()
{ {
//! reverse values based on original scheme //! reverse values based on original scheme
KSharedConfigPtr normalPtr = KSharedConfig::openConfig(m_normalSchemePath); KSharedConfigPtr originalPtr = KSharedConfig::openConfig(m_originalSchemePath);
KSharedConfigPtr reversedPtr = KSharedConfig::openConfig(m_reversedSchemePath); KSharedConfigPtr reversedPtr = KSharedConfig::openConfig(m_reversedSchemePath);
if (normalPtr && reversedPtr) { if (originalPtr && reversedPtr) {
foreach (auto groupName, reversedPtr->groupList()) { foreach (auto groupName, reversedPtr->groupList()) {
if (groupName != "Colors:Button") { if (groupName != "Colors:Button") {
KConfigGroup reversedGroup(reversedPtr, groupName); KConfigGroup reversedGroup(reversedPtr, groupName);
@ -199,10 +241,10 @@ void PlasmaThemeExtended::updateReversedSchemeValues()
if (reversedGroup.keyList().contains("BackgroundNormal") if (reversedGroup.keyList().contains("BackgroundNormal")
&& reversedGroup.keyList().contains("ForegroundNormal")) { && reversedGroup.keyList().contains("ForegroundNormal")) {
//! reverse usual text/background values //! reverse usual text/background values
KConfigGroup normalGroup(normalPtr, groupName); KConfigGroup originalGroup(originalPtr, groupName);
reversedGroup.writeEntry("BackgroundNormal", normalGroup.readEntry("ForegroundNormal", QColor())); reversedGroup.writeEntry("BackgroundNormal", originalGroup.readEntry("ForegroundNormal", QColor()));
reversedGroup.writeEntry("ForegroundNormal", normalGroup.readEntry("BackgroundNormal", QColor())); reversedGroup.writeEntry("ForegroundNormal", originalGroup.readEntry("BackgroundNormal", QColor()));
reversedGroup.sync(); reversedGroup.sync();
} }
@ -210,33 +252,34 @@ void PlasmaThemeExtended::updateReversedSchemeValues()
} }
//! update WM group //! update WM group
KConfigGroup reversedGroup(reversedPtr, "WM"); KConfigGroup reversedWMGroup(reversedPtr, "WM");
KConfigGroup originalViewGroup(originalPtr, "Colors:View");
if (reversedGroup.keyList().contains("activeBackground") if (reversedWMGroup.keyList().contains("activeBackground")
&& reversedGroup.keyList().contains("activeForeground") && reversedWMGroup.keyList().contains("activeForeground")
&& reversedGroup.keyList().contains("inactiveBackground") && reversedWMGroup.keyList().contains("inactiveBackground")
&& reversedGroup.keyList().contains("inactiveForeground")) { && reversedWMGroup.keyList().contains("inactiveForeground")) {
//! reverse usual wm titlebar values //! reverse usual wm titlebar values
KConfigGroup normalGroup(normalPtr, "WM"); KConfigGroup originalGroup(originalPtr, "WM");
reversedGroup.writeEntry("activeBackground", normalGroup.readEntry("activeForeground", QColor())); reversedWMGroup.writeEntry("activeBackground", originalViewGroup.readEntry("ForegroundNormal", QColor()));
reversedGroup.writeEntry("activeForeground", normalGroup.readEntry("activeBackground", QColor())); reversedWMGroup.writeEntry("activeForeground", originalViewGroup.readEntry("BackgroundNormal", QColor()));
reversedGroup.writeEntry("inactiveBackground", normalGroup.readEntry("inactiveForeground", QColor())); reversedWMGroup.writeEntry("inactiveBackground", originalGroup.readEntry("inactiveForeground", QColor()));
reversedGroup.writeEntry("inactiveForeground", normalGroup.readEntry("inactiveBackground", QColor())); reversedWMGroup.writeEntry("inactiveForeground", originalGroup.readEntry("inactiveBackground", QColor()));
reversedGroup.sync(); reversedWMGroup.sync();
} }
if (reversedGroup.keyList().contains("activeBlend") if (reversedWMGroup.keyList().contains("activeBlend")
&& reversedGroup.keyList().contains("inactiveBlend")) { && reversedWMGroup.keyList().contains("inactiveBlend")) {
KConfigGroup normalGroup(normalPtr, "WM"); KConfigGroup originalGroup(originalPtr, "WM");
reversedGroup.writeEntry("activeBlend", normalGroup.readEntry("inactiveBlend", QColor())); reversedWMGroup.writeEntry("activeBlend", originalGroup.readEntry("inactiveBlend", QColor()));
reversedGroup.writeEntry("inactiveBlend", normalGroup.readEntry("activeBlend", QColor())); reversedWMGroup.writeEntry("inactiveBlend", originalGroup.readEntry("activeBlend", QColor()));
reversedGroup.sync(); reversedWMGroup.sync();
} }
//! update scheme name //! update scheme name
QString normalSchemeName = SchemeColors::schemeName(m_normalSchemePath); QString originalSchemeName = SchemeColors::schemeName(m_originalSchemePath);
KConfigGroup generalGroup(reversedPtr, "General"); KConfigGroup generalGroup(reversedPtr, "General");
generalGroup.writeEntry("Name", normalSchemeName + "_reversed"); generalGroup.writeEntry("Name", originalSchemeName + "_reversed");
generalGroup.sync(); generalGroup.sync();
} }
} }
@ -309,7 +352,7 @@ void PlasmaThemeExtended::loadThemePaths()
QString themeColorScheme = m_themePath + "/colors"; QString themeColorScheme = m_themePath + "/colors";
if (QFileInfo(themeColorScheme).exists()) { if (QFileInfo(themeColorScheme).exists()) {
setNormalSchemeFile(themeColorScheme); setOriginalSchemeFile(themeColorScheme);
} else { } else {
//! when plasma theme uses the kde colors //! when plasma theme uses the kde colors
//! we track when kde color scheme is changing //! we track when kde color scheme is changing
@ -319,24 +362,24 @@ void PlasmaThemeExtended::loadThemePaths()
m_kdeConnections[0] = connect(KDirWatch::self(), &KDirWatch::dirty, this, [ &, kdeSettingsFile](const QString & path) { m_kdeConnections[0] = connect(KDirWatch::self(), &KDirWatch::dirty, this, [ &, kdeSettingsFile](const QString & path) {
if (path == kdeSettingsFile) { if (path == kdeSettingsFile) {
this->setNormalSchemeFile(SchemeColors::possibleSchemeFile("kdeglobals")); this->setOriginalSchemeFile(SchemeColors::possibleSchemeFile("kdeglobals"));
} }
}); });
m_kdeConnections[1] = connect(KDirWatch::self(), &KDirWatch::created, this, [ &, kdeSettingsFile](const QString & path) { m_kdeConnections[1] = connect(KDirWatch::self(), &KDirWatch::created, this, [ &, kdeSettingsFile](const QString & path) {
if (path == kdeSettingsFile) { if (path == kdeSettingsFile) {
this->setNormalSchemeFile(SchemeColors::possibleSchemeFile("kdeglobals")); this->setOriginalSchemeFile(SchemeColors::possibleSchemeFile("kdeglobals"));
} }
}); });
setNormalSchemeFile(SchemeColors::possibleSchemeFile("kdeglobals")); setOriginalSchemeFile(SchemeColors::possibleSchemeFile("kdeglobals"));
} }
} }
void PlasmaThemeExtended::loadThemeLightness() void PlasmaThemeExtended::loadThemeLightness()
{ {
float textColorLum = Latte::colorLumina(m_normalScheme->textColor()); float textColorLum = Latte::colorLumina(m_defaultScheme->textColor());
float backColorLum = Latte::colorLumina(m_normalScheme->backgroundColor()); float backColorLum = Latte::colorLumina(m_defaultScheme->backgroundColor());
if (backColorLum > textColorLum) { if (backColorLum > textColorLum) {
m_isLightTheme = true; m_isLightTheme = true;

@ -96,7 +96,9 @@ private:
void loadThemePaths(); void loadThemePaths();
void loadRoundness(); void loadRoundness();
void setNormalSchemeFile(const QString &file); void setOriginalSchemeFile(const QString &file);
void updateDefaultScheme();
void updateDefaultSchemeValues();
void updateReversedScheme(); void updateReversedScheme();
void updateReversedSchemeValues(); void updateReversedSchemeValues();
@ -113,7 +115,8 @@ private:
int m_userRoundness{0}; int m_userRoundness{0};
QString m_themePath; QString m_themePath;
QString m_normalSchemePath; QString m_defaultSchemePath;
QString m_originalSchemePath;
QString m_reversedSchemePath; QString m_reversedSchemePath;
std::array<QMetaObject::Connection, 2> m_kdeConnections; std::array<QMetaObject::Connection, 2> m_kdeConnections;
@ -123,7 +126,7 @@ private:
Plasma::Theme m_theme; Plasma::Theme m_theme;
Latte::Corona *m_corona{nullptr}; Latte::Corona *m_corona{nullptr};
SchemeColors *m_normalScheme{nullptr}; SchemeColors *m_defaultScheme{nullptr};
SchemeColors *m_reversedScheme{nullptr}; SchemeColors *m_reversedScheme{nullptr};
}; };

Loading…
Cancel
Save