diff --git a/kcms/fonts/fonts.h b/kcms/fonts/fonts.h --- a/kcms/fonts/fonts.h +++ b/kcms/fonts/fonts.h @@ -184,6 +184,9 @@ private: void updateNeedsSave(); QFont applyFontDiff(const QFont &fnt, const QFont &newFont, int fontDiffFlags); + void saveFontToGtkConfigs(); + void saveFontToGtk2Config(); + void saveFontToGtk3Config(); QFont m_defaultFont; QFont m_generalFont; diff --git a/kcms/fonts/fonts.cpp b/kcms/fonts/fonts.cpp --- a/kcms/fonts/fonts.cpp +++ b/kcms/fonts/fonts.cpp @@ -34,6 +34,7 @@ #include #include #include +#include #include #include @@ -568,6 +569,8 @@ cg = KConfigGroup(config, "WM"); cg.writeEntry("activeFont", m_windowTitleFont.toString()); cg.sync(); + + saveFontToGtkConfigs(); m_defaultFontOriginal = m_defaultFont; m_generalFontOriginal = m_generalFont; @@ -602,6 +605,61 @@ setNeedsSave(false); } +void KFonts::saveFontToGtkConfigs() { + saveFontToGtk2Config(); + saveFontToGtk3Config(); +} + +void KFonts::saveFontToGtk2Config() +{ + QString configPath{QDir::homePath() + "/.gtkrc-2.0"}; + QFile configFile{configPath}; + + if (configFile.open(QIODevice::ReadOnly | QIODevice::Text)) { + QString fileContents{configFile.readAll()}; + + QRegularExpression regExp{"gtk-font-name=[^\n]*($|\n)"}; + + QString configValue = QString{ + m_generalFont.family() + " " + + m_generalFont.styleName() + " " + + QString::number(m_generalFont.pointSize()) + }; + + QString newConfigString = QString{"gtk-font-name=\"" + configValue + "\"\n"}; + + if (fileContents.contains(regExp)) { + fileContents.replace(regExp, newConfigString); + } else { + fileContents = QString{newConfigString + "\n"} + fileContents; + } + + configFile.remove(); + configFile.open(QIODevice::WriteOnly | QIODevice::Text); + configFile.write(fileContents.toUtf8()); + } else { + qWarning() << "Unable to modify " << configFile.fileName(); + } +} + +void KFonts::saveFontToGtk3Config() +{ + using qsp = QStandardPaths; + QString configLocation = qsp::writableLocation(qsp::GenericConfigLocation); + QString gtk3ConfigPath{configLocation + "/gtk-3.0/settings.ini"}; + + KSharedConfig::Ptr gtk3Config = KSharedConfig::openConfig(gtk3ConfigPath, KConfig::NoGlobals); + KConfigGroup group{gtk3Config, "Settings"}; + + QString configValue = QString{ + m_generalFont.family() + " " + + m_generalFont.styleName() + " " + + QString::number(m_generalFont.pointSize()) + }; + group.writeEntry("gtk-font-name", configValue); + group.sync(); +} + void KFonts::updateNeedsSave() { setNeedsSave(m_defaultFontOriginal != m_defaultFont ||