diff --git a/kcms/colors/CMakeLists.txt b/kcms/colors/CMakeLists.txt --- a/kcms/colors/CMakeLists.txt +++ b/kcms/colors/CMakeLists.txt @@ -11,6 +11,8 @@ # needed for krdb qt5_add_dbus_interface(kcm_colors_SRCS ${KINIT_DBUS_INTERFACES_DIR}/kf5_org.kde.KLauncher.xml klauncher_iface) +kconfig_add_kcfg_files(kcm_colors_SRCS colorssettings.kcfgc GENERATE_MOC) + add_library(kcm_colors MODULE ${kcm_colors_SRCS}) target_link_libraries(kcm_colors Qt5::DBus @@ -32,6 +34,7 @@ kcoreaddons_desktop_to_json(kcm_colors "kcm_colors.desktop") +install(FILES colorssettings.kcfg DESTINATION ${KDE_INSTALL_KCFGDIR}) install(FILES kcm_colors.desktop DESTINATION ${KDE_INSTALL_KSERVICES5DIR}) install(TARGETS kcm_colors DESTINATION ${KDE_INSTALL_PLUGINDIR}/kcms) install(FILES colorschemes.knsrc DESTINATION ${KDE_INSTALL_KNSRCDIR}) diff --git a/kcms/colors/colors.h b/kcms/colors/colors.h --- a/kcms/colors/colors.h +++ b/kcms/colors/colors.h @@ -1,5 +1,6 @@ /* * Copyright (c) 2019 Kai Uwe Broulik + * Copyright (c) 2019 Cyril Rossi * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -27,7 +28,7 @@ #include -#include +#include class QProcess; class QTemporaryFile; @@ -39,8 +40,9 @@ class ColorsModel; class FilterProxyModel; +class ColorsSettings; -class KCMColors : public KQuickAddons::ConfigModule +class KCMColors : public KQuickAddons::ManagedConfigModule { Q_OBJECT @@ -79,11 +81,8 @@ public Q_SLOTS: void load() override; void save() override; - void defaults() override; Q_SIGNALS: - void selectedSchemeChanged(); - void selectedSchemeIndexChanged(); void downloadingFileChanged(); void showSuccessMessage(const QString &message); @@ -99,6 +98,7 @@ ColorsModel *m_model; FilterProxyModel *m_filteredModel; + ColorsSettings *m_settings; bool m_selectedSchemeDirty = false; diff --git a/kcms/colors/colors.cpp b/kcms/colors/colors.cpp --- a/kcms/colors/colors.cpp +++ b/kcms/colors/colors.cpp @@ -3,6 +3,7 @@ * Copyright (C) 2007 Jeremy Whiting * Copyright (C) 2016 Olivier Churlaud * Copyright (C) 2019 Kai Uwe Broulik + * Copyright (c) 2019 Cyril Rossi * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -52,15 +53,15 @@ #include "colorsmodel.h" #include "filterproxymodel.h" - -static const QString s_defaultColorSchemeName = QStringLiteral("Breeze"); +#include "colorssettings.h" K_PLUGIN_FACTORY_WITH_JSON(KCMColorsFactory, "kcm_colors.json", registerPlugin();) KCMColors::KCMColors(QObject *parent, const QVariantList &args) - : KQuickAddons::ConfigModule(parent, args) + : KQuickAddons::ManagedConfigModule(parent, args) , m_model(new ColorsModel(this)) , m_filteredModel(new FilterProxyModel(this)) + , m_settings(new ColorsSettings(this)) , m_config(KSharedConfig::openConfig(QStringLiteral("kdeglobals"))) { qmlRegisterUncreatableType("org.kde.private.kcms.colors", 1, 0, "KCM", QStringLiteral("Cannot create instances of KCM")); @@ -72,14 +73,19 @@ about->addAuthor(i18n("Kai Uwe Broulik"), QString(), QStringLiteral("kde@privat.broulik.de")); setAboutData(about); - connect(m_model, &ColorsModel::selectedSchemeChanged, this, [this] { - m_selectedSchemeDirty = true; - setNeedsSave(true); - }); connect(m_model, &ColorsModel::pendingDeletionsChanged, this, [this] { setNeedsSave(true); }); + connect(m_model, &ColorsModel::selectedSchemeChanged, this, [this](const QString &scheme) { + m_selectedSchemeDirty = true; + m_settings->setColorScheme(scheme); + }); + + connect(m_settings, &ColorsSettings::colorSchemeChanged, this, [this] { + m_model->setSelectedScheme(m_settings->colorScheme()); + }); + connect(m_model, &ColorsModel::selectedSchemeChanged, m_filteredModel, &FilterProxyModel::setSelectedScheme); m_filteredModel->setSourceModel(m_model); } @@ -293,49 +299,46 @@ void KCMColors::load() { + ManagedConfigModule::load(); m_model->load(); m_config->markAsClean(); m_config->reparseConfiguration(); - KConfigGroup group(m_config, "General"); - const QString schemeName = group.readEntry("ColorScheme", s_defaultColorSchemeName); + const QString schemeName = m_settings->colorScheme(); // If the scheme named in kdeglobals doesn't exist, show a warning and use default scheme if (m_model->indexOfScheme(schemeName) == -1) { - m_model->setSelectedScheme(s_defaultColorSchemeName); + m_model->setSelectedScheme(m_settings->defaultColorSchemeValue()); // These are normally synced but initially the model doesn't emit a change to avoid the // Apply button from being enabled without any user interaction. Sync manually here. - m_filteredModel->setSelectedScheme(s_defaultColorSchemeName); + m_filteredModel->setSelectedScheme(m_settings->defaultColorSchemeValue()); emit showSchemeNotInstalledWarning(schemeName); } else { m_model->setSelectedScheme(schemeName); m_filteredModel->setSelectedScheme(schemeName); } { KConfig cfg(QStringLiteral("kcmdisplayrc"), KConfig::NoGlobals); + KConfigGroup group(m_config, "General"); group = KConfigGroup(&cfg, "X11"); m_applyToAlien = group.readEntry("exportKDEColors", true); } } void KCMColors::save() { + ManagedConfigModule::save(); if (m_selectedSchemeDirty) { saveColors(); } processPendingDeletions(); - - setNeedsSave(false); } void KCMColors::saveColors() { - KConfigGroup grp(m_config, "General"); - grp.writeEntry("ColorScheme", m_model->selectedScheme()); - const QString path = QStandardPaths::locate(QStandardPaths::GenericDataLocation, QStringLiteral("color-schemes/%1.colors").arg(m_model->selectedScheme())); @@ -464,11 +467,4 @@ m_model->removeItemsPendingDeletion(); } -void KCMColors::defaults() -{ - m_model->setSelectedScheme(s_defaultColorSchemeName); - - setNeedsSave(true); -} - #include "colors.moc" diff --git a/kcms/colors/colorssettings.kcfg b/kcms/colors/colorssettings.kcfg new file mode 100644 --- /dev/null +++ b/kcms/colors/colorssettings.kcfg @@ -0,0 +1,13 @@ + + + + + + + Breeze + + + diff --git a/kcms/colors/colorssettings.kcfgc b/kcms/colors/colorssettings.kcfgc new file mode 100644 --- /dev/null +++ b/kcms/colors/colorssettings.kcfgc @@ -0,0 +1,6 @@ +File=colorssettings.kcfg +ClassName=ColorsSettings +Mutators=true +DefaultValueGetters=true +GenerateProperties=true +ParentInConstructor=true