diff --git a/kcms/desktoptheme/CMakeLists.txt b/kcms/desktoptheme/CMakeLists.txt --- a/kcms/desktoptheme/CMakeLists.txt +++ b/kcms/desktoptheme/CMakeLists.txt @@ -5,6 +5,8 @@ kcm.cpp ) +kconfig_add_kcfg_files(kcm_desktoptheme_SRCS desktopthemesettings.kcfgc GENERATE_MOC) + add_library(kcm_desktoptheme MODULE ${kcm_desktoptheme_SRCS}) target_link_libraries(kcm_desktoptheme diff --git a/kcms/desktoptheme/desktopthemesettings.kcfg b/kcms/desktoptheme/desktopthemesettings.kcfg new file mode 100644 --- /dev/null +++ b/kcms/desktoptheme/desktopthemesettings.kcfg @@ -0,0 +1,13 @@ + + + + + + + default + + + diff --git a/kcms/desktoptheme/desktopthemesettings.kcfgc b/kcms/desktoptheme/desktopthemesettings.kcfgc new file mode 100644 --- /dev/null +++ b/kcms/desktoptheme/desktopthemesettings.kcfgc @@ -0,0 +1,5 @@ +File=desktopthemesettings.kcfg +ClassName=DesktopThemeSettings +Mutators=true +DefaultValueGetters=true +GenerateProperties=true diff --git a/kcms/desktoptheme/kcm.h b/kcms/desktoptheme/kcm.h --- a/kcms/desktoptheme/kcm.h +++ b/kcms/desktoptheme/kcm.h @@ -40,6 +40,7 @@ class QQuickItem; class QStandardItemModel; +class DesktopThemeSettings; class KCMDesktopTheme : public KQuickAddons::ConfigModule { @@ -102,6 +103,8 @@ void installTheme(const QString &path); + DesktopThemeSettings *m_settings; + QStandardItemModel *m_model; QString m_selectedPlugin; QStringList m_pendingRemoval; diff --git a/kcms/desktoptheme/kcm.cpp b/kcms/desktoptheme/kcm.cpp --- a/kcms/desktoptheme/kcm.cpp +++ b/kcms/desktoptheme/kcm.cpp @@ -24,7 +24,6 @@ #include #include -#include #include #include @@ -44,14 +43,19 @@ #include +#include "desktopthemesettings.h" + Q_LOGGING_CATEGORY(KCM_DESKTOP_THEME, "kcm_desktoptheme") K_PLUGIN_FACTORY_WITH_JSON(KCMDesktopThemeFactory, "kcm_desktoptheme.json", registerPlugin();) KCMDesktopTheme::KCMDesktopTheme(QObject *parent, const QVariantList &args) : KQuickAddons::ConfigModule(parent, args) + , m_settings(new DesktopThemeSettings) , m_haveThemeExplorerInstalled(false) { + // Unfortunately doesn't generate a ctor taking the parent as parameter + m_settings->setParent(this); qmlRegisterType(); KAboutData* about = new KAboutData(QStringLiteral("kcm_desktoptheme"), i18n("Plasma Style"), @@ -280,31 +284,28 @@ m_model->setSortRole(ThemeNameRole); // FIXME the model should really be just using Qt::DisplayRole m_model->sort(0 /*column*/); - KConfigGroup cg(KSharedConfig::openConfig(QStringLiteral("plasmarc")), "Theme"); - setSelectedPlugin(cg.readEntry("name", QStringLiteral("default"))); + setSelectedPlugin(m_settings->name()); emit selectedPluginIndexChanged(); updateNeedsSave(); } void KCMDesktopTheme::save() { - KConfigGroup cg(KSharedConfig::openConfig(QStringLiteral("plasmarc")), "Theme"); - const auto currentTheme = cg.readEntry("name", QStringLiteral("default")); - if (currentTheme != m_selectedPlugin) { - cg.writeEntry("name", m_selectedPlugin); - cg.sync(); - Plasma::Theme().setThemeName(m_selectedPlugin); + if (m_settings->name() != m_selectedPlugin) { + m_settings->setName(m_selectedPlugin); + m_settings->save(); + Plasma::Theme().setThemeName(m_settings->name()); } processPendingDeletions(); updateNeedsSave(); } void KCMDesktopTheme::defaults() { - setSelectedPlugin(QStringLiteral("default")); + setSelectedPlugin(m_settings->defaultNameValue()); // can this be done more elegantly? const auto pendingDeletions = m_model->match(m_model->index(0, 0), PendingDeletionRole, true); @@ -325,10 +326,8 @@ void KCMDesktopTheme::updateNeedsSave() { - KConfigGroup cg(KSharedConfig::openConfig(QStringLiteral("plasmarc")), "Theme"); - const auto currentTheme = cg.readEntry("name", QStringLiteral("default")); setNeedsSave(!m_model->match(m_model->index(0, 0), PendingDeletionRole, true).isEmpty() - || m_selectedPlugin != currentTheme); + || m_selectedPlugin != m_settings->name()); } void KCMDesktopTheme::processPendingDeletions()