diff --git a/src/conf/groupsconfigdialog.cpp b/src/conf/groupsconfigdialog.cpp index cae15fe78..22e8b0bf3 100644 --- a/src/conf/groupsconfigdialog.cpp +++ b/src/conf/groupsconfigdialog.cpp @@ -1,113 +1,111 @@ /* conf/groupsconfigdialog.h This file is part of Kleopatra, the KDE keymanager SPDX-FileCopyrightText: 2021 g10 Code GmbH SPDX-FileContributor: Ingo Klöcker SPDX-License-Identifier: GPL-2.0-or-later */ #include #include "groupsconfigdialog.h" #include "groupsconfigpage.h" #include #include #include #include #include #include #include class GroupsConfigDialog::Private { friend class ::GroupsConfigDialog; GroupsConfigDialog *const q; GroupsConfigPage *configPage = nullptr; - bool changed = false; public: Private(GroupsConfigDialog *qq) : q(qq) , configPage(new GroupsConfigPage(qq)) { restoreLayout(); } ~Private() { saveLayout(); } private: void saveLayout() { KConfigGroup configGroup(KSharedConfig::openStateConfig(), "GroupsConfigDialog"); configGroup.writeEntry("Size", q->size()); configGroup.sync(); } void restoreLayout(const QSize &defaultSize = QSize()) { const KConfigGroup configGroup(KSharedConfig::openStateConfig(), "GroupsConfigDialog"); const QSize size = configGroup.readEntry("Size", defaultSize); if (size.isValid()) { q->resize(size); } } }; GroupsConfigDialog::GroupsConfigDialog(QWidget *parent) : KConfigDialog(parent, GroupsConfigDialog::dialogName(), /*config=*/ nullptr) , d(new Private(this)) { setWindowTitle(i18nc("@title:window", "Configure Groups")); setFaceType(KPageDialog::Plain); addPage(d->configPage, i18n("Groups"), /*pixmapName=*/ QString(), /*header=*/ QString(), /*manage=*/ false); // there are no defaults to restore buttonBox()->removeButton(buttonBox()->button(QDialogButtonBox::RestoreDefaults)); QPushButton *resetButton = buttonBox()->addButton(QDialogButtonBox::Reset); KGuiItem::assign(resetButton, KStandardGuiItem::reset()); resetButton->setEnabled(false); connect(buttonBox()->button(QDialogButtonBox::Reset), &QAbstractButton::clicked, this, &GroupsConfigDialog::updateWidgets); connect(d->configPage, &GroupsConfigPage::changed, this, [this] (bool state) { - d->changed = state; updateButtons(); if (QPushButton *button = buttonBox()->button(QDialogButtonBox::Reset)) { - button->setEnabled(d->changed); + button->setEnabled(d->configPage->hasChanged()); } }); } GroupsConfigDialog::~GroupsConfigDialog() = default; QString GroupsConfigDialog::dialogName() { return QStringLiteral("Group Settings"); } void GroupsConfigDialog::updateSettings() { d->configPage->save(); } void GroupsConfigDialog::updateWidgets() { d->configPage->load(); } bool GroupsConfigDialog::hasChanged() { - return d->changed; + return d->configPage->hasChanged(); } diff --git a/src/conf/groupsconfigpage.cpp b/src/conf/groupsconfigpage.cpp index af99da3b6..f92decad2 100644 --- a/src/conf/groupsconfigpage.cpp +++ b/src/conf/groupsconfigpage.cpp @@ -1,76 +1,90 @@ /* conf/groupsconfigpage.cpp This file is part of Kleopatra, the KDE keymanager SPDX-FileCopyrightText: 2021 g10 Code GmbH SPDX-FileContributor: Ingo Klöcker SPDX-License-Identifier: GPL-2.0-or-later */ #include #include "groupsconfigpage.h" #include "groupsconfigwidget.h" #include #include #include #include #include "kleopatra_debug.h" using namespace Kleo; class GroupsConfigPage::Private { friend class ::GroupsConfigPage; GroupsConfigPage *const q; Private(GroupsConfigPage *qq); public: ~Private() = default; + void setChanged(bool changed); + private: GroupsConfigWidget *widget = nullptr; + bool changed = false; }; GroupsConfigPage::Private::Private(GroupsConfigPage *qq) : q(qq) { } +void GroupsConfigPage::Private::setChanged(bool state) +{ + changed = state; + Q_EMIT q->changed(changed); +} + GroupsConfigPage::GroupsConfigPage(QWidget *parent) : QWidget(parent) , d(new Private(this)) { auto layout = new QVBoxLayout(this); layout->setContentsMargins(0, 0, 0, 0); d->widget = new Kleo::GroupsConfigWidget(this); if (QLayout *l = d->widget->layout()) { l->setContentsMargins(0, 0, 0, 0); } layout->addWidget(d->widget); - connect(d->widget, &GroupsConfigWidget::changed, this, [this] () { Q_EMIT changed(true); }); + connect(d->widget, &GroupsConfigWidget::changed, this, [this] () { d->setChanged(true); }); } GroupsConfigPage::~GroupsConfigPage() = default; +bool GroupsConfigPage::hasChanged() const +{ + return d->changed; +} + void GroupsConfigPage::load() { d->widget->setGroups(KeyCache::instance()->configurableGroups()); - Q_EMIT changed(false); + d->setChanged(false); } void GroupsConfigPage::save() { KeyCache::mutableInstance()->saveConfigurableGroups(d->widget->groups()); // reload after saving to ensure that the groups reflect the saved groups (e.g. in case of immutable entries) load(); } diff --git a/src/conf/groupsconfigpage.h b/src/conf/groupsconfigpage.h index 26bd29e0c..4ebefd491 100644 --- a/src/conf/groupsconfigpage.h +++ b/src/conf/groupsconfigpage.h @@ -1,35 +1,37 @@ /* conf/groupsconfigpage.h This file is part of Kleopatra, the KDE keymanager SPDX-FileCopyrightText: 2021 g10 Code GmbH SPDX-FileContributor: Ingo Klöcker SPDX-License-Identifier: GPL-2.0-or-later */ #pragma once #include #include class GroupsConfigPage : public QWidget { Q_OBJECT public: explicit GroupsConfigPage(QWidget *parent = nullptr); ~GroupsConfigPage() override; + bool hasChanged() const; + public Q_SLOTS: void load(); void save(); Q_SIGNALS: void changed(bool state); private: class Private; const std::unique_ptr d; };