From 787c2aaaa5ee256a9467aef73f61887b93894ec9 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Thu, 1 Mar 2018 15:31:49 +0100 Subject: Fixed the foundAllKeys feature in the composer setProperty doesn't work anymore for some reason, so we use a regular Q_PROPERTY. We have to explicitly reference the composerController variable, otherwise cc/bcc refernces don't work. --- framework/src/domain/composercontroller.cpp | 26 +++++++++++++++++++++++++- framework/src/domain/controller.cpp | 1 + framework/src/domain/controller.h | 1 + views/composer/qml/View.qml | 2 +- 4 files changed, 28 insertions(+), 2 deletions(-) diff --git a/framework/src/domain/composercontroller.cpp b/framework/src/domain/composercontroller.cpp index 4bfc34ab..09d4c154 100644 --- a/framework/src/domain/composercontroller.cpp +++ b/framework/src/domain/composercontroller.cpp @@ -94,8 +94,11 @@ public: class AddresseeController : public Kube::ListPropertyController { + Q_OBJECT + Q_PROPERTY(bool foundAllKeys READ foundAllKeys NOTIFY foundAllKeysChanged) public: + bool mFoundAllKeys = true; QSet mMissingKeys; AddresseeController() : Kube::ListPropertyController{{"name", "keyFound", "key"}} @@ -103,11 +106,29 @@ public: QObject::connect(this, &Kube::ListPropertyController::added, this, [this] (const QByteArray &id, const QVariantMap &map) { findKey(id, map.value("name").toString()); }); + QObject::connect(this, &Kube::ListPropertyController::removed, this, [this] (const QByteArray &id) { + mMissingKeys.remove(id); + setFoundAllKeys(mMissingKeys.isEmpty()); + }); + + + } + + bool foundAllKeys() + { + return mFoundAllKeys; + } + + void setFoundAllKeys(bool found) + { + mFoundAllKeys = found; + emit foundAllKeysChanged(); } void findKey(const QByteArray &id, const QString &addressee) { mMissingKeys << id; + setFoundAllKeys(mMissingKeys.isEmpty()); KMime::Types::Mailbox mb; mb.fromUnicodeString(addressee); @@ -124,7 +145,7 @@ public: setValue(id, "keyFound", true); setValue(id, "key", QVariant::fromValue(keys)); mMissingKeys.remove(id); - setProperty("foundAllKeys", mMissingKeys.isEmpty()); + setFoundAllKeys(mMissingKeys.isEmpty()); } else { SinkWarning() << "Failed to find key for recipient."; } @@ -137,6 +158,8 @@ public: add({{"name", email}}); } } +signals: + void foundAllKeysChanged(); }; class AttachmentController : public Kube::ListPropertyController @@ -542,3 +565,4 @@ void ComposerController::saveAsDraft() run(job); } +#include "composercontroller.moc" diff --git a/framework/src/domain/controller.cpp b/framework/src/domain/controller.cpp index 226615ad..09fe0b9d 100644 --- a/framework/src/domain/controller.cpp +++ b/framework/src/domain/controller.cpp @@ -123,6 +123,7 @@ void ListPropertyController::remove(const QByteArray &id) break; } } + emit removed(id); if (mModel->rowCount() <= 0) { emit emptyChanged(); } diff --git a/framework/src/domain/controller.h b/framework/src/domain/controller.h index 5f610012..9166a63a 100644 --- a/framework/src/domain/controller.h +++ b/framework/src/domain/controller.h @@ -137,6 +137,7 @@ public: Q_SIGNALS: void added(QByteArray, QVariantMap); + void removed(QByteArray); void emptyChanged(); protected: diff --git a/views/composer/qml/View.qml b/views/composer/qml/View.qml index 1ea67513..d444ea47 100644 --- a/views/composer/qml/View.qml +++ b/views/composer/qml/View.qml @@ -42,7 +42,7 @@ Kube.View { encrypt: encryptCheckbox.checked onDone: Kube.Fabric.postMessage(Kube.Messages.componentDone, {}) - property bool foundAllKeys: to.foundAllKeys && cc.foundAllKeys && bcc.foundAllKeys + property bool foundAllKeys: composerController.to.foundAllKeys && composerController.cc.foundAllKeys && composerController.bcc.foundAllKeys sendAction.enabled: composerController.accountId && composerController.subject && (!composerController.encrypt || composerController.foundAllKeys) && (!composerController.sign && !composerController.encrypt || composerController.foundPersonalKeys) && !composerController.to.empty saveAsDraftAction.enabled: composerController.accountId -- cgit v1.2.3