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
@@ -39,6 +39,7 @@
class QQuickItem;
class QStandardItemModel;
+class DesktopThemeSettings;
class KCMDesktopTheme : public KQuickAddons::ConfigModule
{
@@ -101,6 +102,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
@@ -23,7 +23,6 @@
#include
#include
-#include
#include
#include
@@ -43,14 +42,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"),
@@ -279,31 +283,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);
@@ -324,10 +325,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()