[pim/kdepim-addons] kmail/editorsendcheckplugins/confirm-address: Make sure to delete config. Until now we didn't return subgroup

Laurent Montel <[email protected]>
Newsgroups gmane.comp.kde.cvs
Message-ID <[email protected]>
Git commit 797addf8d173d96d488177bced0a4049738e6e8a by Laurent Montel.
Committed on 15/08/2026 at 08:55.
Pushed by mlaurent into branch 'master'.

Make sure to delete config. Until now we didn't return subgroup

M  +21   -2    kmail/editorsendcheckplugins/confirm-address/autotests/confirmaddressconfigurewidgettest.cpp
M  +1    -0    kmail/editorsendcheckplugins/confirm-address/autotests/confirmaddressconfigurewidgettest.h
M  +7    -5    kmail/editorsendcheckplugins/confirm-address/confirmaddressconfigurewidget.cpp

https://invent.kde.org/pim/kdepim-addons/-/commit/797addf8d173d96d488177bced0a4049738e6e8a

diff --git a/kmail/editorsendcheckplugins/confirm-address/autotests/confirmaddressconfigurewidgettest.cpp b/kmail/editorsendcheckplugins/confirm-address/autotests/confirmaddressconfigurewidgettest.cpp
index 437df8db0..a8c2bfccf 100644
--- a/kmail/editorsendcheckplugins/confirm-address/autotests/confirmaddressconfigurewidgettest.cpp
+++ b/kmail/editorsendcheckplugins/confirm-address/autotests/confirmaddressconfigurewidgettest.cpp
@@ -5,16 +5,18 @@
 */
 
 #include "confirmaddressconfigurewidgettest.h"
-using namespace Qt::Literals::StringLiterals;
 
 #include "../confirmaddressconfiguretab.h"
 #include "../confirmaddressconfigurewidget.h"
 
+#include <KConfigGroup>
+#include <KSharedConfig>
 #include <QCheckBox>
 #include <QStandardPaths>
 #include <QTest>
 #include <QVBoxLayout>
 
+using namespace Qt::Literals::StringLiterals;
 ConfirmAddressConfigureWidgetTest::ConfirmAddressConfigureWidgetTest(QObject *parent)
     : QObject(parent)
 {
@@ -25,7 +27,7 @@ ConfirmAddressConfigureWidgetTest::~ConfirmAddressConfigureWidgetTest() = defaul
 
 void ConfirmAddressConfigureWidgetTest::shouldHaveDefaultValue()
 {
-    ConfirmAddressConfigureWidget w;
+    const ConfirmAddressConfigureWidget w;
 
     auto vboxlayout = w.findChild<QVBoxLayout *>(u"mainlayout"_s);
     QVERIFY(vboxlayout);
@@ -42,6 +44,23 @@ void ConfirmAddressConfigureWidgetTest::shouldLoadSaveResetValue()
     w.resetSettings();
 }
 
+void ConfirmAddressConfigureWidgetTest::shouldRemoveSettingsFromUnknownIdentity()
+{
+    // 4242 is not a known identity uoid, so saving must drop its leftover settings.
+    const QString staleGroupName = u"Confirm Address 4242"_s;
+    KSharedConfig::Ptr config = KSharedConfig::openConfig();
+    KConfigGroup grp(config, u"Confirm Address"_s);
+    KConfigGroup staleGroup = grp.group(staleGroupName);
+    staleGroup.writeEntry("Domains", QStringList() << u"foo.com"_s);
+    staleGroup.sync();
+    QVERIFY(grp.groupList().contains(staleGroupName));
+
+    ConfirmAddressConfigureWidget w;
+    w.saveSettings();
+
+    QVERIFY(!grp.groupList().contains(staleGroupName));
+}
+
 QTEST_MAIN(ConfirmAddressConfigureWidgetTest)
 
 #include "moc_confirmaddressconfigurewidgettest.cpp"
diff --git a/kmail/editorsendcheckplugins/confirm-address/autotests/confirmaddressconfigurewidgettest.h b/kmail/editorsendcheckplugins/confirm-address/autotests/confirmaddressconfigurewidgettest.h
index d2108aa5c..a8791c3b6 100644
--- a/kmail/editorsendcheckplugins/confirm-address/autotests/confirmaddressconfigurewidgettest.h
+++ b/kmail/editorsendcheckplugins/confirm-address/autotests/confirmaddressconfigurewidgettest.h
@@ -17,4 +17,5 @@ public:
 private Q_SLOTS:
     void shouldHaveDefaultValue();
     void shouldLoadSaveResetValue();
+    void shouldRemoveSettingsFromUnknownIdentity();
 };
diff --git a/kmail/editorsendcheckplugins/confirm-address/confirmaddressconfigurewidget.cpp b/kmail/editorsendcheckplugins/confirm-address/confirmaddressconfigurewidget.cpp
index 95e553fe6..842120b80 100644
--- a/kmail/editorsendcheckplugins/confirm-address/confirmaddressconfigurewidget.cpp
+++ b/kmail/editorsendcheckplugins/confirm-address/confirmaddressconfigurewidget.cpp
@@ -37,12 +37,14 @@ void ConfirmAddressConfigureWidget::loadSettings()
 void ConfirmAddressConfigureWidget::saveSettings()
 {
     KSharedConfig::Ptr config = KSharedConfig::openConfig();
-    // first, delete all filter groups:
-    const QStringList filterGroups = config->groupList().filter(QRegularExpression(u"Confirm Address \\d+"_s));
-    for (const QString &group : filterGroups) {
-        config->deleteGroup(group);
-    }
     KConfigGroup grp(config, u"Confirm Address"_s);
+    // The per-identity settings are subgroups of "Confirm Address", so they must be looked up there:
+    // KConfig::groupList() only returns top-level groups. Delete them all first, so that settings
+    // belonging to identities which don't exist anymore don't survive.
+    const QStringList identityGroups = grp.groupList().filter(QRegularExpression(u"^Confirm Address \\d+$"_s));
+    for (const QString &group : identityGroups) {
+        grp.group(group).deleteGroup();
+    }
     mConfirmAddressConfigureTab->saveSettings(grp);
 }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.