diff --git a/gtkconfig/kded/CMakeLists.txt b/gtkconfig/kded/CMakeLists.txt --- a/gtkconfig/kded/CMakeLists.txt +++ b/gtkconfig/kded/CMakeLists.txt @@ -19,6 +19,7 @@ Qt5::DBus KF5::CoreAddons KF5::ConfigCore + KF5::IconThemes KF5::DBusAddons ${GIO2_LIBRARY} ${GLIB2_LIBRARY} diff --git a/gtkconfig/kded/gtkconfig.h b/gtkconfig/kded/gtkconfig.h --- a/gtkconfig/kded/gtkconfig.h +++ b/gtkconfig/kded/gtkconfig.h @@ -35,10 +35,11 @@ GtkConfig(QObject *parent, const QVariantList& args); void setFont(const QFont &font); + void setIconTheme(int iconGroup); private: QString getConfigFontName(const QFont &font); - + QString getConfigIconThemeName(); QScopedPointer configEditor; }; diff --git a/gtkconfig/kded/gtkconfig.cpp b/gtkconfig/kded/gtkconfig.cpp --- a/gtkconfig/kded/gtkconfig.cpp +++ b/gtkconfig/kded/gtkconfig.cpp @@ -26,14 +26,17 @@ #include #include +#include +#include #include K_PLUGIN_CLASS_WITH_JSON(GtkConfig, "gtkconfig.json") GtkConfig::GtkConfig(QObject *parent, const QVariantList&) : KDEDModule(parent), configEditor(new ConfigEditor()) { connect(qGuiApp, &QGuiApplication::fontChanged, this, &GtkConfig::setFont); + connect(KIconLoader::global(), &KIconLoader::iconChanged, this, &GtkConfig::setIconTheme); } void GtkConfig::setFont(const QFont &font) @@ -45,11 +48,28 @@ configEditor->setGtk3ConfigValueX11XSettingsd(QStringLiteral("Gtk/FontName"), configFontName); } +void GtkConfig::setIconTheme(int iconGroup) +{ + if (iconGroup == KIconLoader::Group::Desktop) { // This is needed to update icons only once + QString iconThemeName(getConfigIconThemeName()); + configEditor->setGtk2ConfigValue(QStringLiteral("gtk-icon-theme-name"), iconThemeName); + configEditor->setGtk3ConfigValueWayland(QStringLiteral("icon-theme"), iconThemeName); + configEditor->setGtk3ConfigValueX11SettingsIni(QStringLiteral("gtk-icon-theme-name"), iconThemeName); + configEditor->setGtk3ConfigValueX11XSettingsd(QStringLiteral("Net/IconThemeName"), iconThemeName); + } +} + QString GtkConfig::getConfigFontName(const QFont &font) { return font.family() + ' ' + font.styleName() + ' ' + QString::number(font.pointSize()); } +QString GtkConfig::getConfigIconThemeName() +{ + KIconTheme *newIconTheme(KIconLoader::global()->theme()); + return newIconTheme->internalName(); +} + #include "gtkconfig.moc"