From 1f63f91dc4e121ad3defcda78ec0faa6f6dc6d52 Mon Sep 17 00:00:00 2001 From: Albert Astals Cid Date: Mon, 14 Dec 2020 16:06:32 +0100 Subject: [PATCH] PDF: Merge the certs settings page to the regular pdf settings page --- doc/config-pdf-digital-signatures.png | Bin 28923 -> 19223 bytes doc/index.docbook | 6 +- generators/poppler/CMakeLists.txt | 10 +- generators/poppler/conf/certsettings.kcfg | 19 --- generators/poppler/conf/certsettings.kcfgc | 4 - generators/poppler/conf/certsettingswidget.ui | 94 ------------ generators/poppler/conf/pdfsettings.kcfg | 11 ++ generators/poppler/conf/pdfsettingswidget.ui | 140 ++++++++++++++---- generators/poppler/formfields.cpp | 1 - generators/poppler/generator_pdf.cpp | 19 +-- ...ificatetools.cpp => pdfsettingswidget.cpp} | 48 +++--- ...certificatetools.h => pdfsettingswidget.h} | 15 +- 12 files changed, 170 insertions(+), 197 deletions(-) delete mode 100644 generators/poppler/conf/certsettings.kcfg delete mode 100644 generators/poppler/conf/certsettings.kcfgc delete mode 100644 generators/poppler/conf/certsettingswidget.ui rename generators/poppler/{certificatetools.cpp => pdfsettingswidget.cpp} (66%) rename generators/poppler/{certificatetools.h => pdfsettingswidget.h} (71%) diff --git a/doc/config-pdf-digital-signatures.png b/doc/config-pdf-digital-signatures.png index 1efe5d889f87b8663583983db7c40ef9e3c24e13..37a68e598a81a1b6d3350e2da93d9abf386bb042 100644 GIT binary patch literal 19223 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 L>gTe~DWM4fBCAnt literal 28923 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 diff --git a/doc/index.docbook b/doc/index.docbook index 5dacec5b3..2220914f9 100644 --- a/doc/index.docbook +++ b/doc/index.docbook @@ -486,7 +486,7 @@ Context menu actions like Rename Bookmarks etc.) The system-wide /etc/pki/nssdb certificate store. The current user $HOME/.pki/nssdb - If you want to use a custom certificate store you can do so by setting it in the PDF Digital Signature Certificates section of the Configure Backends... dialog. + If you want to use a custom certificate store you can do so by setting it in the &PDF; Backend Configuration section of the Configure Backends... dialog. @@ -2463,8 +2463,7 @@ Context menu actions like Rename Bookmarks etc.) - - + &PDF; Digital Signature Certificates @@ -2473,6 +2472,7 @@ Context menu actions like Rename Bookmarks etc.) It also lists the certificates available in the current Certificate Database (if any). + diff --git a/generators/poppler/CMakeLists.txt b/generators/poppler/CMakeLists.txt index 511ae67ea..88e2aca34 100644 --- a/generators/poppler/CMakeLists.txt +++ b/generators/poppler/CMakeLists.txt @@ -41,20 +41,14 @@ set(okularGenerator_poppler_PART_SRCS formfields.cpp annots.cpp pdfsignatureutils.cpp + pdfsettingswidget.cpp ) -if(HAVE_POPPLER_SIGNING) - set(okularGenerator_poppler_PART_SRCS - ${okularGenerator_poppler_PART_SRCS} certificatetools.cpp) -endif() - ki18n_wrap_ui(okularGenerator_poppler_PART_SRCS conf/pdfsettingswidget.ui - conf/certsettingswidget.ui ) -kconfig_add_kcfg_files(okularGenerator_poppler_PART_SRCS conf/pdfsettings.kcfgc ) -kconfig_add_kcfg_files(okularGenerator_poppler_PART_SRCS GENERATE_MOC conf/certsettings.kcfgc ) +kconfig_add_kcfg_files(okularGenerator_poppler_PART_SRCS GENERATE_MOC conf/pdfsettings.kcfgc ) okular_add_generator(okularGenerator_poppler ${okularGenerator_poppler_PART_SRCS}) diff --git a/generators/poppler/conf/certsettings.kcfg b/generators/poppler/conf/certsettings.kcfg deleted file mode 100644 index 26cc00ebb..000000000 --- a/generators/poppler/conf/certsettings.kcfg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - true - - - - - - - - diff --git a/generators/poppler/conf/certsettings.kcfgc b/generators/poppler/conf/certsettings.kcfgc deleted file mode 100644 index 5975c7842..000000000 --- a/generators/poppler/conf/certsettings.kcfgc +++ /dev/null @@ -1,4 +0,0 @@ -File=certsettings.kcfg -ClassName=CertificateSettings -Mutators=true -Singleton=true diff --git a/generators/poppler/conf/certsettingswidget.ui b/generators/poppler/conf/certsettingswidget.ui deleted file mode 100644 index 4b9e1d201..000000000 --- a/generators/poppler/conf/certsettingswidget.ui +++ /dev/null @@ -1,94 +0,0 @@ - - - DlgSignaturesBase - - - - 0 - 0 - 675 - 225 - - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - Certificate Database - - - - QFormLayout::ExpandingFieldsGrow - - - - - Default: - - - - - - - Custom: - - - - - - - - - - - - - - - - - Available Certificates - - - - - - - - &Load Signatures - - - - - - - Qt::Vertical - - - QSizePolicy::Expanding - - - - 20 - 4 - - - - - - - - - diff --git a/generators/poppler/conf/pdfsettings.kcfg b/generators/poppler/conf/pdfsettings.kcfg index 65ea82d8d..69204f630 100644 --- a/generators/poppler/conf/pdfsettings.kcfg +++ b/generators/poppler/conf/pdfsettings.kcfg @@ -4,6 +4,8 @@ xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0 http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" > + + No @@ -14,5 +16,14 @@ + + + true + + + + + + diff --git a/generators/poppler/conf/pdfsettingswidget.ui b/generators/poppler/conf/pdfsettingswidget.ui index 488ad3099..c05f65967 100644 --- a/generators/poppler/conf/pdfsettingswidget.ui +++ b/generators/poppler/conf/pdfsettingswidget.ui @@ -1,40 +1,126 @@ - PDFSettingsWidget - - - - QFormLayout::ExpandingFieldsGrow - - - - - Enhance thin lines: - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - - - + PDFSettingsWidgetBase + + + + 0 + 0 + 721 + 431 + + + + + - - No - + + + Enhance thin lines: + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + - - Solid - + + + + No + + + + + Solid + + + + + Shape + + + - - Shape - + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + Certificate Database + + + + QFormLayout::ExpandingFieldsGrow + + + + + Default: + + + + + + + Custom: + + + + + + + + + + + + + + + Available Certificates + + + + + + + + &Load Signatures + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 4 + + + + diff --git a/generators/poppler/formfields.cpp b/generators/poppler/formfields.cpp index 62f135e2a..817d2cf0d 100644 --- a/generators/poppler/formfields.cpp +++ b/generators/poppler/formfields.cpp @@ -13,7 +13,6 @@ #include "core/action.h" -#include "certsettings.h" #include "pdfsignatureutils.h" #include diff --git a/generators/poppler/generator_pdf.cpp b/generators/poppler/generator_pdf.cpp index d53f69884..c8e451521 100644 --- a/generators/poppler/generator_pdf.cpp +++ b/generators/poppler/generator_pdf.cpp @@ -52,10 +52,6 @@ #include #include "pdfsettings.h" -#include "ui_pdfsettingswidget.h" - -#include "certificatetools.h" -#include "certsettings.h" #include @@ -65,6 +61,7 @@ #include "annots.h" #include "debug_pdf.h" #include "formfields.h" +#include "pdfsettingswidget.h" #include "pdfsignatureutils.h" #include "popplerembeddedfile.h" @@ -572,8 +569,8 @@ PDFGenerator::PDFGenerator(QObject *parent, const QVariantList &args) // so doing it all the time won't hurt either Poppler::setDebugErrorFunction(PDFGeneratorPopplerDebugFunction, QVariant()); #ifdef HAVE_POPPLER_SIGNING - if (!CertificateSettings::useDefaultDB()) { - Poppler::setNSSDir(QUrl(CertificateSettings::dBCertificatePath()).toLocalFile()); + if (!PDFSettings::useDefaultCertDB()) { + Poppler::setNSSDir(QUrl(PDFSettings::dBCertificatePath()).toLocalFile()); } #endif } @@ -1478,15 +1475,9 @@ bool PDFGenerator::reparseConfig() void PDFGenerator::addPages(KConfigDialog *dlg) { - Ui_PDFSettingsWidget pdfsw; - QWidget *w = new QWidget(dlg); - pdfsw.setupUi(w); + PDFSettingsWidget *w = new PDFSettingsWidget(dlg); + ; dlg->addPage(w, PDFSettings::self(), i18n("PDF"), QStringLiteral("application-pdf"), i18n("PDF Backend Configuration")); - -#ifdef HAVE_POPPLER_SIGNING - CertificateTools *certTools = new CertificateTools(dlg); - dlg->addPage(certTools, CertificateSettings::self(), i18n("PDF Certificates"), QStringLiteral("application-pkcs7-signature"), i18n("PDF Digital Signature Certificates")); -#endif } bool PDFGenerator::setDocumentRenderHints() diff --git a/generators/poppler/certificatetools.cpp b/generators/poppler/pdfsettingswidget.cpp similarity index 66% rename from generators/poppler/certificatetools.cpp rename to generators/poppler/pdfsettingswidget.cpp index c1607fb4a..93b6c6920 100644 --- a/generators/poppler/certificatetools.cpp +++ b/generators/poppler/pdfsettingswidget.cpp @@ -1,5 +1,6 @@ /*************************************************************************** * Copyright (C) 2019 by Bubli * + * Copyright (C) 2020 by Albert Astals Cid * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -7,9 +8,9 @@ * (at your option) any later version. * ***************************************************************************/ -#include "certificatetools.h" +#include "pdfsettingswidget.h" -#include "certsettings.h" +#include "pdfsettings.h" #include "pdfsignatureutils.h" #include @@ -21,76 +22,83 @@ #include #include -CertificateTools::CertificateTools(QWidget *parent) +PDFSettingsWidget::PDFSettingsWidget(QWidget *parent) : QWidget(parent) { + m_pdfsw.setupUi(this); +#ifdef HAVE_POPPLER_SIGNING if (Poppler::hasNSSSupport()) { - m_certsw.setupUi(this); - m_certsw.loadSignaturesButton->hide(); + m_pdfsw.loadSignaturesButton->hide(); KUrlRequester *pDlg = new KUrlRequester(); pDlg->setObjectName(QStringLiteral("kcfg_DBCertificatePath")); pDlg->setMode(KFile::Directory | KFile::ExistingOnly | KFile::LocalOnly); pDlg->setEnabled(false); - m_certsw.formLayout->setWidget(1, QFormLayout::FieldRole, pDlg); + m_pdfsw.formLayout->setWidget(1, QFormLayout::FieldRole, pDlg); - connect(m_certsw.customRadioButton, &QRadioButton::toggled, pDlg, &KUrlRequester::setEnabled); + connect(m_pdfsw.customRadioButton, &QRadioButton::toggled, pDlg, &KUrlRequester::setEnabled); - if (!CertificateSettings::useDefaultDB()) { - m_certsw.customRadioButton->setChecked(true); - m_certsw.defaultLabel->setVisible(false); + if (!PDFSettings::useDefaultCertDB()) { + m_pdfsw.customRadioButton->setChecked(true); + m_pdfsw.defaultLabel->setVisible(false); } m_tree = new QTreeWidget(this); m_tree->setHeaderLabels({i18nc("Name of the person to whom the cerficate was issued", "Issued to"), i18n("E-mail"), i18nc("Certificate expiration date", "Expiration date")}); m_tree->setRootIsDecorated(false); - m_certsw.certificatesPlaceholder->addWidget(m_tree); + m_pdfsw.certificatesPlaceholder->addWidget(m_tree); - connect(CertificateSettings::self(), &CertificateSettings::useDefaultDBChanged, this, &CertificateTools::warnRestartNeeded); - connect(CertificateSettings::self(), &CertificateSettings::dBCertificatePathChanged, this, [this] { - if (!CertificateSettings::useDefaultDB()) { + connect(PDFSettings::self(), &PDFSettings::useDefaultDBChanged, this, &PDFSettingsWidget::warnRestartNeeded); + connect(PDFSettings::self(), &PDFSettings::dBCertificatePathChanged, this, [this] { + if (!PDFSettings::useDefaultCertDB()) { warnRestartNeeded(); } }); - connect(m_certsw.loadSignaturesButton, &QPushButton::clicked, this, [this] { + connect(m_pdfsw.loadSignaturesButton, &QPushButton::clicked, this, [this] { m_certificatesAsked = false; update(); }); } else { - m_tree = nullptr; QHBoxLayout *lay = new QHBoxLayout(this); QLabel *l = new QLabel(i18n("You are using a Poppler library built without NSS support.\nAdding Digital Signatures isn't available for that reason")); l->setWordWrap(true); lay->addWidget(l); } +#else + m_pdfsw.certDBGroupBox->hide(); + m_pdfsw.certificatesGroup->hide(); + m_pdfsw.loadSignaturesButton->hide(); +#endif } -bool CertificateTools::event(QEvent *e) +bool PDFSettingsWidget::event(QEvent *e) { if (m_tree && e->type() == QEvent::Paint && !m_certificatesAsked) { m_certificatesAsked = true; +#ifdef HAVE_POPPLER_SIGNING PopplerCertificateStore st; bool userCancelled; const QList certs = st.signingCertificates(&userCancelled); - m_certsw.loadSignaturesButton->setVisible(userCancelled); + m_pdfsw.loadSignaturesButton->setVisible(userCancelled); for (auto cert : certs) { new QTreeWidgetItem(m_tree, {cert->subjectInfo(Okular::CertificateInfo::EntityInfoKey::CommonName), cert->subjectInfo(Okular::CertificateInfo::EntityInfoKey::EmailAddress), cert->validityEnd().toString("yyyy-MM-dd")}); } qDeleteAll(certs); - m_certsw.defaultLabel->setText(Poppler::getNSSDir()); + m_pdfsw.defaultLabel->setText(Poppler::getNSSDir()); m_tree->resizeColumnToContents(1); m_tree->resizeColumnToContents(0); +#endif } return QWidget::event(e); } -void CertificateTools::warnRestartNeeded() +void PDFSettingsWidget::warnRestartNeeded() { if (!m_warnedAboutRestart) { m_warnedAboutRestart = true; diff --git a/generators/poppler/certificatetools.h b/generators/poppler/pdfsettingswidget.h similarity index 71% rename from generators/poppler/certificatetools.h rename to generators/poppler/pdfsettingswidget.h index ffc15efa8..4723e76ea 100644 --- a/generators/poppler/certificatetools.h +++ b/generators/poppler/pdfsettingswidget.h @@ -1,5 +1,6 @@ /*************************************************************************** * Copyright (C) 2019 by Bubli * + * Copyright (C) 2020 by Albert Astals Cid * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -7,30 +8,30 @@ * (at your option) any later version. * ***************************************************************************/ -#ifndef _CERTIFICATETOOLS_H_ -#define _CERTIFICATETOOLS_H_ +#ifndef PDFSETTINGSWIDGET_H +#define PDFSETTINGSWIDGET_H #include -#include "ui_certsettingswidget.h" +#include "ui_pdfsettingswidget.h" class QTreeWidget; -class CertificateTools : public QWidget +class PDFSettingsWidget : public QWidget { Q_OBJECT public: - explicit CertificateTools(QWidget *parent = nullptr); + explicit PDFSettingsWidget(QWidget *parent = nullptr); bool event(QEvent *e) override; private: void warnRestartNeeded(); - QTreeWidget *m_tree; + QTreeWidget *m_tree = nullptr; bool m_certificatesAsked = false; bool m_warnedAboutRestart = false; - Ui_DlgSignaturesBase m_certsw; + Ui_PDFSettingsWidgetBase m_pdfsw; }; #endif