diff --git a/kcms/activities/ActivitiesTab.h b/kcms/activities/ActivitiesTab.h --- a/kcms/activities/ActivitiesTab.h +++ b/kcms/activities/ActivitiesTab.h @@ -34,14 +34,6 @@ explicit ActivitiesTab(QWidget *parent); ~ActivitiesTab() override; -public Q_SLOTS: - void defaults(); - void load(); - void save(); - -Q_SIGNALS: - void changed(); - private: D_PTR; }; diff --git a/kcms/activities/ActivitiesTab.cpp b/kcms/activities/ActivitiesTab.cpp --- a/kcms/activities/ActivitiesTab.cpp +++ b/kcms/activities/ActivitiesTab.cpp @@ -61,14 +61,3 @@ { } -void ActivitiesTab::defaults() -{ -} - -void ActivitiesTab::load() -{ -} - -void ActivitiesTab::save() -{ -} diff --git a/kcms/activities/BlacklistedApplicationsModel.h b/kcms/activities/BlacklistedApplicationsModel.h --- a/kcms/activities/BlacklistedApplicationsModel.h +++ b/kcms/activities/BlacklistedApplicationsModel.h @@ -49,7 +49,8 @@ QHash roleNames() const override; Q_SIGNALS: - void changed(); + void changed(bool changed); + void defaulted(bool isDefault); void enabledChanged(bool enabled); public Q_SLOTS: diff --git a/kcms/activities/BlacklistedApplicationsModel.cpp b/kcms/activities/BlacklistedApplicationsModel.cpp --- a/kcms/activities/BlacklistedApplicationsModel.cpp +++ b/kcms/activities/BlacklistedApplicationsModel.cpp @@ -29,9 +29,8 @@ #include #include -#include -#include -#include + +#include "kactivitymanagerd_plugins_settings.h" #include @@ -48,16 +47,22 @@ QList applications; QSqlDatabase database; - - KSharedConfig::Ptr pluginConfig; + + KActivityManagerdPluginsSettings *pluginConfig; bool enabled; }; BlacklistedApplicationsModel::BlacklistedApplicationsModel(QObject *parent) : QAbstractListModel(parent) { d->enabled = false; - d->pluginConfig = KSharedConfig::openConfig(QStringLiteral("kactivitymanagerd-pluginsrc")); + d->pluginConfig = new KActivityManagerdPluginsSettings; + + const QString path + = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + + QStringLiteral("/kactivitymanagerd/resources/database"); + d->database = QSqlDatabase::addDatabase(QStringLiteral("QSQLITE"), QStringLiteral("plugins_sqlite_db_resources")); + d->database.setDatabaseName(path); } BlacklistedApplicationsModel::~BlacklistedApplicationsModel() @@ -77,22 +82,13 @@ void BlacklistedApplicationsModel::load() { // Loading plugin configuration - - const auto config = d->pluginConfig->group(SQLITE_PLUGIN_CONFIG_KEY); - - const auto defaultBlockedValue = config.readEntry("blocked-by-default", false); - auto blockedApplications = QSet::fromList(config.readEntry("blocked-applications", QStringList())); - auto allowedApplications = QSet::fromList(config.readEntry("allowed-applications", QStringList())); + d->pluginConfig->load(); + const auto defaultBlockedValue = d->pluginConfig->defaultBlockedByDefaultValue(); + auto blockedApplications = QSet::fromList(d->pluginConfig->blockedApplications()); + auto allowedApplications = QSet::fromList(d->pluginConfig->allowedApplications()); // Reading new applications from the database - const QString path - = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) - + QStringLiteral("/kactivitymanagerd/resources/database"); - - d->database = QSqlDatabase::addDatabase(QStringLiteral("QSQLITE"), QStringLiteral("plugins_sqlite_db_resources")); - d->database.setDatabaseName(path); - if (!d->database.open()) { // qDebug() << "Failed to open the database" << path << d->database.lastError(); return; @@ -150,17 +146,8 @@ void BlacklistedApplicationsModel::save() { - auto config = d->pluginConfig->group(SQLITE_PLUGIN_CONFIG_KEY); - QStringList blockedApplications; - QStringList allowedApplications; - - for (int i = 0; i < rowCount(); i++) { - (d->applications[i].blocked ? blockedApplications : allowedApplications) - << d->applications[i].name; - } - - config.writeEntry("allowed-applications", allowedApplications); - config.writeEntry("blocked-applications", blockedApplications); + d->pluginConfig->save(); + emit changed(false); } void BlacklistedApplicationsModel::defaults() @@ -171,6 +158,8 @@ dataChanged(QAbstractListModel::index(0), QAbstractListModel::index(rowCount() - 1)); + + emit defaulted(true); } void BlacklistedApplicationsModel::toggleApplicationBlocked(int index) @@ -183,14 +172,35 @@ dataChanged(QAbstractListModel::index(index), QAbstractListModel::index(index)); - emit changed(); + QStringList blockedApplications; + QStringList allowedApplications; + + for (int i = 0; i < rowCount(); i++) { + const auto name = d->applications[i].name; + if (d->applications[i].blocked) { + blockedApplications << name; + } else { + allowedApplications << name; + } + } + + d->pluginConfig->setBlockedApplications(blockedApplications); + d->pluginConfig->setAllowedApplications(allowedApplications); + + const auto allowedApplicationsItem = d->pluginConfig->findItem("allowedApplications"); + Q_ASSERT(allowedApplicationsItem); + const auto blockedApplicationsItem = d->pluginConfig->findItem("allowedApplications"); + Q_ASSERT(blockedApplicationsItem); + + emit changed(blockedApplicationsItem->isSaveNeeded() && allowedApplicationsItem->isSaveNeeded()); + emit defaulted(blockedApplicationsItem->isDefault() && allowedApplicationsItem->isDefault()); } QVariant BlacklistedApplicationsModel::headerData(int section, Qt::Orientation orientation, int role) const { - Q_UNUSED(section); - Q_UNUSED(orientation); - Q_UNUSED(role); + Q_UNUSED(section) + Q_UNUSED(orientation) + Q_UNUSED(role) return QVariant(); } @@ -224,7 +234,7 @@ int BlacklistedApplicationsModel::rowCount(const QModelIndex &parent) const { - Q_UNUSED(parent); + Q_UNUSED(parent) return d->applications.size(); } diff --git a/kcms/activities/MainConfigurationWidget.h b/kcms/activities/MainConfigurationWidget.h --- a/kcms/activities/MainConfigurationWidget.h +++ b/kcms/activities/MainConfigurationWidget.h @@ -42,12 +42,6 @@ void load() override; void save() override; -private Q_SLOTS: - void onChanged(); - -private: - void checkDefault(); - private: D_PTR; }; diff --git a/kcms/activities/MainConfigurationWidget.cpp b/kcms/activities/MainConfigurationWidget.cpp --- a/kcms/activities/MainConfigurationWidget.cpp +++ b/kcms/activities/MainConfigurationWidget.cpp @@ -46,48 +46,37 @@ d->tabs->insertTab(0, d->tabActivities = new ActivitiesTab(d->tabs), i18n("Activities")); d->tabs->insertTab(1, d->tabSwitching = new SwitchingTab(d->tabs), i18n("Switching")); d->tabs->insertTab(2, d->tabPrivacy = new PrivacyTab(d->tabs), i18n("Privacy")); - - connect(d->tabActivities, &ActivitiesTab::changed, this, &MainConfigurationWidget::onChanged); - connect(d->tabSwitching, &SwitchingTab::changed, this, &MainConfigurationWidget::onChanged); - connect(d->tabPrivacy, &PrivacyTab::changed, this, &MainConfigurationWidget::onChanged); + + addConfig(d->tabPrivacy->pluginConfig(), d->tabPrivacy); + addConfig(d->tabSwitching->mainConfig(), d->tabSwitching); + + connect (d->tabPrivacy, &PrivacyTab::blackListModelChanged, this, &MainConfigurationWidget::unmanagedWidgetChangeState); + connect (d->tabPrivacy, &PrivacyTab::blackListModelDefaulted, this, &MainConfigurationWidget::unmanagedWidgetDefaultState); } MainConfigurationWidget::~MainConfigurationWidget() { } -void MainConfigurationWidget::checkDefault() -{ - defaulted(d->tabSwitching->isDefault() && d->tabPrivacy->isDefault()); -} - -void MainConfigurationWidget::onChanged() -{ - checkDefault(); - markAsChanged(); -} - void MainConfigurationWidget::defaults() { - d->tabActivities->defaults(); + KCModule::defaults(); + d->tabPrivacy->defaults(); - d->tabSwitching->defaults(); } void MainConfigurationWidget::load() { - d->tabActivities->load(); + KCModule::load(); + d->tabPrivacy->load(); - d->tabSwitching->load(); - - checkDefault(); } void MainConfigurationWidget::save() { - d->tabActivities->save(); + KCModule::save(); + d->tabPrivacy->save(); - d->tabSwitching->save(); } #include "MainConfigurationWidget.moc" diff --git a/kcms/activities/PrivacyTab.h b/kcms/activities/PrivacyTab.h --- a/kcms/activities/PrivacyTab.h +++ b/kcms/activities/PrivacyTab.h @@ -25,6 +25,8 @@ #include +class KCoreConfigSkeleton; + /** * PrivacyTab */ @@ -35,7 +37,8 @@ ~PrivacyTab() override; bool isDefault(); - + KCoreConfigSkeleton *pluginConfig(); + public Q_SLOTS: void defaults(); void load(); @@ -51,7 +54,8 @@ void spinKeepHistoryValueChanged(int value); Q_SIGNALS: - void changed(); + void blackListModelChanged(bool changed); + void blackListModelDefaulted(bool isDefault); private: enum WhatToRemember { diff --git a/kcms/activities/PrivacyTab.cpp b/kcms/activities/PrivacyTab.cpp --- a/kcms/activities/PrivacyTab.cpp +++ b/kcms/activities/PrivacyTab.cpp @@ -63,18 +63,23 @@ } }; +KCoreConfigSkeleton *PrivacyTab::pluginConfig() +{ + return d->pluginConfig; +} + PrivacyTab::PrivacyTab(QWidget *parent) : QWidget(parent) , d(this) { d->setupUi(this); // Keep history initialization - d->spinKeepHistory->setRange(0, INT_MAX); - d->spinKeepHistory->setSpecialValueText(i18nc("unlimited number of months", "Forever")); + d->kcfg_keepHistoryFor->setRange(0, INT_MAX); + d->kcfg_keepHistoryFor->setSpecialValueText(i18nc("unlimited number of months", "Forever")); - connect(d->spinKeepHistory, SIGNAL(valueChanged(int)), + connect(d->kcfg_keepHistoryFor, SIGNAL(valueChanged(int)), this, SLOT(spinKeepHistoryValueChanged(int))); spinKeepHistoryValueChanged(0); @@ -96,6 +101,8 @@ // Blacklist applications d->blacklistedApplicationsModel = new BlacklistedApplicationsModel(this); + connect(d->blacklistedApplicationsModel, &BlacklistedApplicationsModel::changed, this, &PrivacyTab::blackListModelChanged); + connect(d->blacklistedApplicationsModel, &BlacklistedApplicationsModel::defaulted, this, &PrivacyTab::blackListModelDefaulted); new QGridLayout(d->viewBlacklistedApplicationsContainer); @@ -108,74 +115,36 @@ // React to changes - connect(d->radioRememberAllApplications, &QAbstractButton::toggled, this, &PrivacyTab::changed); - connect(d->radioDontRememberApplications, &QAbstractButton::toggled, this, &PrivacyTab::changed); - connect(d->spinKeepHistory, SIGNAL(valueChanged(int)), this, SIGNAL(changed())); - connect(d->blacklistedApplicationsModel, &BlacklistedApplicationsModel::changed, this, &PrivacyTab::changed); - connect(d->radioRememberSpecificApplications, &QAbstractButton::toggled, d->blacklistedApplicationsModel, &BlacklistedApplicationsModel::setEnabled); - - connect(d->checkBlacklistAllNotOnList, &QAbstractButton::toggled, this, &PrivacyTab::changed); - - defaults(); - - d->checkBlacklistAllNotOnList->setEnabled(false); d->blacklistedApplicationsModel->setEnabled(false); - d->viewBlacklistedApplicationsContainer->setEnabled(false); d->messageWidget->setVisible(false); } PrivacyTab::~PrivacyTab() { } -bool PrivacyTab::isDefault() -{ - return d->radioRememberAllApplications->isChecked() && - d->spinKeepHistory->value() == d->pluginConfig->defaultKeepHistoryForValue() && - d->checkBlacklistAllNotOnList->isChecked() == d->pluginConfig->defaultBlockedByDefaultValue(); -} - void PrivacyTab::defaults() { d->blacklistedApplicationsModel->defaults(); - - d->radioRememberAllApplications->click(); - d->spinKeepHistory->setValue(d->pluginConfig->defaultKeepHistoryForValue()); - d->checkBlacklistAllNotOnList->setChecked(d->pluginConfig->defaultBlockedByDefaultValue()); } void PrivacyTab::load() { d->blacklistedApplicationsModel->load(); - - const auto whatToRemember = static_cast(d->pluginConfig->whatToRemember()); - - d->radioRememberAllApplications->setChecked(whatToRemember == AllApplications); - d->radioRememberSpecificApplications->setChecked(whatToRemember == SpecificApplications); - d->radioDontRememberApplications->setChecked(whatToRemember == NoApplications); - - d->spinKeepHistory->setValue(d->pluginConfig->keepHistoryFor()); - d->checkBlacklistAllNotOnList->setChecked(d->pluginConfig->blockedByDefault()); } void PrivacyTab::save() { d->blacklistedApplicationsModel->save(); - + const auto whatToRemember = d->radioRememberSpecificApplications->isChecked() ? SpecificApplications : d->radioDontRememberApplications->isChecked() ? NoApplications : /* otherwise */ AllApplications; - - d->pluginConfig->setWhatToRemember(static_cast(whatToRemember)); - d->pluginConfig->setKeepHistoryFor(d->spinKeepHistory->value()); - d->pluginConfig->setBlockedByDefault(d->checkBlacklistAllNotOnList->isChecked()); - - d->pluginConfig->save(); - + d->mainConfig->setResourceScoringEnabled(whatToRemember != NoApplications); d->mainConfig->save(); } @@ -216,8 +185,8 @@ " month", " months"); if (value) { - d->spinKeepHistory->setPrefix( + d->kcfg_keepHistoryFor->setPrefix( i18nc("for in 'keep history for 5 months'", "For ")); - d->spinKeepHistory->setSuffix(months.subs(value).toString()); + d->kcfg_keepHistoryFor->setSuffix(months.subs(value).toString()); } } diff --git a/kcms/activities/SwitchingTab.h b/kcms/activities/SwitchingTab.h --- a/kcms/activities/SwitchingTab.h +++ b/kcms/activities/SwitchingTab.h @@ -26,6 +26,7 @@ #include class QKeySequence; +class KCoreConfigSkeleton; /** * SwitchingTab @@ -36,19 +37,11 @@ explicit SwitchingTab(QWidget *parent); ~SwitchingTab() override; - bool isDefault(); - -public Q_SLOTS: - void defaults(); - void load(); - void save(); + KCoreConfigSkeleton *mainConfig(); private Q_SLOTS: void shortcutChanged(const QKeySequence &sequence); -Q_SIGNALS: - void changed(); - private: D_PTR; }; diff --git a/kcms/activities/SwitchingTab.cpp b/kcms/activities/SwitchingTab.cpp --- a/kcms/activities/SwitchingTab.cpp +++ b/kcms/activities/SwitchingTab.cpp @@ -33,7 +33,7 @@ class SwitchingTab::Private : public Ui::SwitchingTabBase { public: - KActivityManagerdSettings mainConfig; + KActivityManagerdSettings *mainConfig; KActionCollection *mainActionCollection; KActivities::Consumer activities; @@ -49,7 +49,8 @@ } Private() - : mainActionCollection(nullptr) + : mainConfig(new KActivityManagerdSettings), + mainActionCollection(nullptr) { } }; @@ -74,22 +75,15 @@ d->scActivities->setActionTypes(KShortcutsEditor::GlobalAction); d->scActivities->addCollection(d->mainActionCollection); - - connect(d->scActivities, &KShortcutsEditor::keyChange, - this, [this] { changed(); }); - connect(d->checkRememberVirtualDesktop, &QAbstractButton::toggled, - this, &SwitchingTab::changed); - - defaults(); } SwitchingTab::~SwitchingTab() { } -bool SwitchingTab::isDefault() +KCoreConfigSkeleton *SwitchingTab::mainConfig() { - return !d->checkRememberVirtualDesktop->isChecked(); + return d->mainConfig; } void SwitchingTab::shortcutChanged(const QKeySequence &sequence) @@ -105,23 +99,5 @@ KGlobalAccel::self()->setShortcut(action, { sequence }, KGlobalAccel::NoAutoloading); d->mainActionCollection->writeSettings(); - - emit changed(); -} - -void SwitchingTab::defaults() -{ - d->checkRememberVirtualDesktop->setChecked(false); } -void SwitchingTab::load() -{ - - d->checkRememberVirtualDesktop->setChecked(d->mainConfig.virtualDesktopSwitchEnabled()); -} - -void SwitchingTab::save() -{ - d->mainConfig.setVirtualDesktopSwitchEnabled(d->checkRememberVirtualDesktop->isChecked()); - d->mainConfig.save(); -} diff --git a/kcms/activities/kactivitymanagerd_plugins_settings.kcfg b/kcms/activities/kactivitymanagerd_plugins_settings.kcfg --- a/kcms/activities/kactivitymanagerd_plugins_settings.kcfg +++ b/kcms/activities/kactivitymanagerd_plugins_settings.kcfg @@ -16,6 +16,12 @@ 0 - + + + + + + + diff --git a/kcms/activities/ui/PrivacyTabBase.ui b/kcms/activities/ui/PrivacyTabBase.ui --- a/kcms/activities/ui/PrivacyTabBase.ui +++ b/kcms/activities/ui/PrivacyTabBase.ui @@ -30,41 +30,17 @@ Qt::AlignHCenter|Qt::AlignTop - - - - Remember opened documents: - - - - - - - For a&ll applications - - - true - - - - - - - &Do not remember - - - - - + + - O&nly for specific applications: + Keep history: - + @@ -79,10 +55,46 @@ - - + + + + + + + true + + + + + + For a&ll applications + + + true + + + + + + + &Do not remember + + + + + + + O&nly for specific applications: + + + + + + + + - Keep history: + Remember opened documents: @@ -104,7 +116,7 @@ 6 - + Blacklist applications not on the list @@ -142,7 +154,7 @@ radioRememberSpecificApplications toggled(bool) - checkBlacklistAllNotOnList + kcfg_blockedByDefault setEnabled(bool) diff --git a/kcms/activities/ui/SwitchingTabBase.ui b/kcms/activities/ui/SwitchingTabBase.ui --- a/kcms/activities/ui/SwitchingTabBase.ui +++ b/kcms/activities/ui/SwitchingTabBase.ui @@ -17,7 +17,7 @@ Qt::AlignHCenter|Qt::AlignTop - + Remember for each activity (needs restart) @@ -47,10 +47,13 @@ Qt::Vertical + + QSizePolicy::Expanding + - 20 - 195 + 0 + 0