aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/gpg/GpgContext.cpp6
-rw-r--r--src/ui/KeygenDialog.cpp4
-rw-r--r--src/ui/KeygenThread.cpp6
-rw-r--r--src/ui/keypair_details/KeyDetailsDialog.cpp10
-rw-r--r--src/ui/keypair_details/KeyPairDetailTab.cpp1
-rw-r--r--src/ui/keypair_details/KeyPairSubkeyTab.cpp2
-rw-r--r--src/ui/keypair_details/KeyPairUIDTab.cpp12
-rw-r--r--src/ui/keypair_details/KeyUIDSignDialog.cpp (renamed from src/ui/keypair_details/KeySignDialog.cpp)30
-rw-r--r--src/ui/widgets/KeyList.cpp22
9 files changed, 59 insertions, 34 deletions
diff --git a/src/gpg/GpgContext.cpp b/src/gpg/GpgContext.cpp
index 3e6a9350..17347a57 100644
--- a/src/gpg/GpgContext.cpp
+++ b/src/gpg/GpgContext.cpp
@@ -859,6 +859,7 @@ namespace GpgME {
void GpgContext::slotRefreshKeyList() {
qDebug() << "Refreshing Keys";
this->fetch_keys();
+ emit signalKeyInfoChanged();
}
/**
@@ -881,7 +882,7 @@ namespace GpgME {
auto it = mKeyMap.find(id);
if(it != mKeyMap.end()) {
- return *it.value();
+ return *(it.value());
}
throw std::runtime_error("key not found");
@@ -935,11 +936,9 @@ namespace GpgME {
void GpgContext::setSigners(const QVector<GpgKey> &keys) {
gpgme_signers_clear(mCtx);
- unsigned int count = 0;
for (const auto &key : keys) {
auto gpgmeError = gpgme_signers_add(mCtx, key.key_refer);
checkErr(gpgmeError);
- gpgme_key_unref(key.key_refer);
}
if (keys.length() != gpgme_signers_count(mCtx)) {
qDebug() << "No All Keys Added";
@@ -963,6 +962,7 @@ namespace GpgME {
if(new_key_refer != nullptr) {
it.value()->swapKeyRefer(new_key_refer);
+ emit signalKeyInfoChanged();
}
}
diff --git a/src/ui/KeygenDialog.cpp b/src/ui/KeygenDialog.cpp
index 435194e1..ef07dc14 100644
--- a/src/ui/KeygenDialog.cpp
+++ b/src/ui/KeygenDialog.cpp
@@ -142,9 +142,7 @@ void KeyGenDialog::slotKeyGenAccept() {
}
kg = new KeyGenThread(&genKeyInfo, mCtx);
-
connect(kg, SIGNAL(signalKeyGenerated(bool)), this, SLOT(slotKeyGenResult(bool)));
-
kg->start();
this->accept();
@@ -169,8 +167,6 @@ void KeyGenDialog::slotKeyGenAccept() {
QCoreApplication::processEvents();
}
- destroy(kg, true);
-
dialog->close();
} else {
diff --git a/src/ui/KeygenThread.cpp b/src/ui/KeygenThread.cpp
index dcd8dd77..defc20bb 100644
--- a/src/ui/KeygenThread.cpp
+++ b/src/ui/KeygenThread.cpp
@@ -24,15 +24,15 @@
#include "ui/KeygenThread.h"
-KeyGenThread::KeyGenThread(GenKeyInfo* keyGenParams, GpgME::GpgContext *ctx) {
+KeyGenThread::KeyGenThread(GenKeyInfo* keyGenParams, GpgME::GpgContext *ctx): QThread(nullptr) {
this->keyGenParams = keyGenParams;
this->mCtx = ctx;
abort = false;
+ connect(this, &KeyGenThread::finished, this, &KeyGenThread::deleteLater);
}
void KeyGenThread::run() {
bool success = mCtx->generateKey(keyGenParams);
-
emit signalKeyGenerated(success);
-
+ emit finished({});
}
diff --git a/src/ui/keypair_details/KeyDetailsDialog.cpp b/src/ui/keypair_details/KeyDetailsDialog.cpp
index 7b09471b..b93244e1 100644
--- a/src/ui/keypair_details/KeyDetailsDialog.cpp
+++ b/src/ui/keypair_details/KeyDetailsDialog.cpp
@@ -27,15 +27,15 @@
KeyDetailsDialog::KeyDetailsDialog(GpgME::GpgContext *ctx, const GpgKey& key, QWidget *parent)
: QDialog(parent) {
-
- tabWidget = new QTabWidget(this);
- tabWidget->addTab(new KeyPairDetailTab(ctx, key, this), tr("KeyPair"));
- tabWidget->addTab(new KeyPairUIDTab(ctx, key, this), tr("UIDs"));
- tabWidget->addTab(new KeyPairSubkeyTab(ctx, key, this), tr("Subkeys"));
+ tabWidget = new QTabWidget();
+ tabWidget->addTab(new KeyPairDetailTab(ctx, key, tabWidget), tr("KeyPair"));
+ tabWidget->addTab(new KeyPairUIDTab(ctx, key, tabWidget), tr("UIDs"));
+ tabWidget->addTab(new KeyPairSubkeyTab(ctx, key, tabWidget), tr("Subkeys"));
auto *mainLayout = new QVBoxLayout;
mainLayout->addWidget(tabWidget);
+ this->setAttribute(Qt::WA_DeleteOnClose, true);
this->setLayout(mainLayout);
this->setWindowTitle(tr("Key Details"));
this->setModal(true);
diff --git a/src/ui/keypair_details/KeyPairDetailTab.cpp b/src/ui/keypair_details/KeyPairDetailTab.cpp
index f0819b1f..366abf27 100644
--- a/src/ui/keypair_details/KeyPairDetailTab.cpp
+++ b/src/ui/keypair_details/KeyPairDetailTab.cpp
@@ -159,6 +159,7 @@ KeyPairDetailTab::KeyPairDetailTab(GpgME::GpgContext *ctx, const GpgKey &key, QW
mvbox->addWidget(buttonBox);
+ setAttribute(Qt::WA_DeleteOnClose, true);
setLayout(mvbox);
}
diff --git a/src/ui/keypair_details/KeyPairSubkeyTab.cpp b/src/ui/keypair_details/KeyPairSubkeyTab.cpp
index 1c112609..2f2a49cf 100644
--- a/src/ui/keypair_details/KeyPairSubkeyTab.cpp
+++ b/src/ui/keypair_details/KeyPairSubkeyTab.cpp
@@ -26,6 +26,8 @@
KeyPairSubkeyTab::KeyPairSubkeyTab(GpgME::GpgContext *ctx, const GpgKey &key, QWidget *parent) : mCtx(ctx), key(key), QWidget(parent) {
+ setAttribute(Qt::WA_DeleteOnClose, true);
+
}
void KeyPairSubkeyTab::creatSubkeyList() {
diff --git a/src/ui/keypair_details/KeyPairUIDTab.cpp b/src/ui/keypair_details/KeyPairUIDTab.cpp
index 9e045daf..ce4256b8 100644
--- a/src/ui/keypair_details/KeyPairUIDTab.cpp
+++ b/src/ui/keypair_details/KeyPairUIDTab.cpp
@@ -38,16 +38,14 @@ KeyPairUIDTab::KeyPairUIDTab(GpgME::GpgContext *ctx, const GpgKey &key, QWidget
setLayout(gridLayout);
- connect(mCtx, SIGNAL(signalKeyDBChanged()), this, SLOT(slotRefreshUIDList()));
- connect(mCtx, SIGNAL(signalKeyDBChanged()), this, SLOT(slotRefreshSigList()));
-
- connect(mCtx, SIGNAL(signalKeyUpdated(QString)), this, SLOT(slotRefreshUIDList()));
- connect(mCtx, SIGNAL(signalKeyUpdated(QString)), this, SLOT(slotRefreshSigList()));
+ connect(mCtx, SIGNAL(signalKeyInfoChanged()), this, SLOT(slotRefreshUIDList()));
+ connect(mCtx, SIGNAL(signalKeyInfoChanged()), this, SLOT(slotRefreshSigList()));
connect(uidList, SIGNAL(itemSelectionChanged()), this, SLOT(slotRefreshSigList()));
-
slotRefreshUIDList();
slotRefreshSigList();
+
+ setAttribute(Qt::WA_DeleteOnClose, true);
}
void KeyPairUIDTab::createUIDList() {
@@ -172,7 +170,7 @@ void KeyPairUIDTab::slotAddSign() {
return;
}
- auto keySignDialog = new KeySignDialog(mCtx, mKey, selected_uids, this);
+ auto keySignDialog = new KeyUIDSignDialog(mCtx, mKey, selected_uids, this);
keySignDialog->show();
}
diff --git a/src/ui/keypair_details/KeySignDialog.cpp b/src/ui/keypair_details/KeyUIDSignDialog.cpp
index e9ac9476..64a15865 100644
--- a/src/ui/keypair_details/KeySignDialog.cpp
+++ b/src/ui/keypair_details/KeyUIDSignDialog.cpp
@@ -2,9 +2,9 @@
// Created by eric on 2021/5/24.
//
-#include "ui/keypair_details/KeySignDialog.h"
+#include "ui/keypair_details/KeyUIDSignDialog.h"
-KeySignDialog::KeySignDialog(GpgME::GpgContext *ctx, const GpgKey &key, const QVector<UID> &uid, QWidget *parent) :
+KeyUIDSignDialog::KeyUIDSignDialog(GpgME::GpgContext *ctx, const GpgKey &key, const QVector<UID> &uid, QWidget *parent) :
mKey(key), mCtx(ctx), mUids(uid), QDialog(parent) {
mKeyList = new KeyList(ctx,
@@ -12,6 +12,9 @@ KeySignDialog::KeySignDialog(GpgME::GpgContext *ctx, const GpgKey &key, const QV
KeyListColumn::NAME | KeyListColumn::EmailAddress,
this);
+ mKeyList->setExcludeKeys({key.id});
+ mKeyList->slotRefresh();
+
signKeyButton = new QPushButton("Sign");
/**
@@ -53,24 +56,33 @@ KeySignDialog::KeySignDialog(GpgME::GpgContext *ctx, const GpgKey &key, const QV
this->setModal(true);
this->setWindowTitle(tr("Sign For Key's UID(s)"));
this->adjustSize();
+
+ setAttribute(Qt::WA_DeleteOnClose, true);
}
-void KeySignDialog::slotSignKey(bool clicked) {
+void KeyUIDSignDialog::slotSignKey(bool clicked) {
+ // Set Signers
QVector<GpgKey> keys;
mKeyList->getCheckedKeys(keys);
mCtx->setSigners(keys);
+
const auto expires = expiresEdit->dateTime();
for(const auto &uid : mUids) {
- for(const auto &key : keys) {
- if (!mCtx->signKey(mKey, uid.uid, &expires)) {
- auto msg = QMessageBox();
- msg.setText(QString("%1 <%2> failed to sign.").arg(key.name, key.email));
- msg.exec();
- }
+ // Sign For mKey
+ if (!mCtx->signKey(mKey, uid.uid, &expires)) {
+ QMessageBox::critical(nullptr,
+ tr("Operation Unsuccessful"),
+ QString("%1 <%2>"+tr(" signature operation failed for UID ") + "%3")
+ .arg(mKey.name, mKey.email, uid.uid));
}
+
}
+ QMessageBox::information(nullptr,
+ tr("Operation Complete"),
+ tr("The signature operation of the UID is complete"));
+
this->close();
}
diff --git a/src/ui/widgets/KeyList.cpp b/src/ui/widgets/KeyList.cpp
index 0e59c9a0..d8e4a094 100644
--- a/src/ui/widgets/KeyList.cpp
+++ b/src/ui/widgets/KeyList.cpp
@@ -85,7 +85,7 @@ KeyList::KeyList(GpgME::GpgContext *ctx,
setLayout(layout);
popupMenu = new QMenu(this);
- connect(mCtx, SIGNAL(signalKeyDBChanged()), this, SLOT(slotRefresh()));
+ connect(mCtx, SIGNAL(signalKeyInfoChanged()), this, SLOT(slotRefresh()));
setAcceptDrops(true);
slotRefresh();
}
@@ -105,6 +105,17 @@ void KeyList::slotRefresh()
int row_count = 0;
while (it != keys.end()) {
+ if(!excluded_key_ids.isEmpty()){
+ bool if_find = false;
+ for(const auto &key_id : excluded_key_ids) {
+ if(it->id == key_id) {
+ it = keys.erase(it);
+ if_find = true;
+ break;
+ }
+ }
+ if(if_find) continue;
+ }
if (mSelectType == KeyListRow::ONLY_SECRET_KEY && !it->is_private_key) {
it = keys.erase(it);
continue;
@@ -398,12 +409,17 @@ void KeyList::uploadFinished()
}
void KeyList::getCheckedKeys(QVector<GpgKey> &keys) {
-
keys.clear();
-
for (int i = 0; i < mKeyList->rowCount(); i++) {
if (mKeyList->item(i, 0)->checkState() == Qt::Checked) {
keys.push_back(buffered_keys[i]);
}
}
}
+
+void KeyList::setExcludeKeys(std::initializer_list<QString> key_ids) {
+ excluded_key_ids.clear();
+ for(auto &key_id : key_ids) {
+ excluded_key_ids.push_back(key_id);
+ }
+}