diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/ui/function/ProxyConnectionTestThread.cpp | 56 | ||||
-rw-r--r-- | src/ui/function/ProxyConnectionTestThread.h | 57 | ||||
-rw-r--r-- | src/ui/function/VersionCheckThread.cpp | 3 | ||||
-rw-r--r-- | src/ui/settings/SettingsDialog.cpp | 13 | ||||
-rwxr-xr-x | src/ui/settings/SettingsDialog.h | 2 | ||||
-rw-r--r-- | src/ui/settings/SettingsKeyServer.cpp | 2 | ||||
-rw-r--r-- | src/ui/settings/SettingsNetwork.cpp | 321 | ||||
-rw-r--r-- | src/ui/settings/SettingsNetwork.h | 55 | ||||
-rw-r--r-- | src/ui/settings/SettingsSendMail.cpp | 4 | ||||
-rw-r--r-- | src/ui/settings/SettingsSendMail.h | 26 | ||||
-rw-r--r-- | src/ui/smtp/SendMailDialog.cpp | 2 |
11 files changed, 526 insertions, 15 deletions
diff --git a/src/ui/function/ProxyConnectionTestThread.cpp b/src/ui/function/ProxyConnectionTestThread.cpp new file mode 100644 index 00000000..f644406d --- /dev/null +++ b/src/ui/function/ProxyConnectionTestThread.cpp @@ -0,0 +1,56 @@ +/** + * This file is part of GpgFrontend. + * + * GpgFrontend is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Foobar is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Foobar. If not, see <https://www.gnu.org/licenses/>. + * + * The initial version of the source code is inherited from gpg4usb-team. + * Their source code version also complies with GNU General Public License. + * + * The source code version of this software was modified and released + * by Saturneric<[email protected]><[email protected]> starting on May 12, 2021. + * + */ + +#include "ProxyConnectionTestThread.h" + +void GpgFrontend::UI::ProxyConnectionTestThread::run() { + QNetworkProxyQuery npq({QUrl(url_)}); + auto proxies_list = QNetworkProxyFactory::systemProxyForQuery(npq); + + if (proxies_list.isEmpty()) { + LOG(INFO) << "no proxy applied"; + } else { + LOG(INFO) << "proxies list hostname" + << proxies_list.front().hostName().toStdString(); + } + + LOG(INFO) << "proxies list size" << proxies_list.size(); + + auto manager = std::make_unique<QNetworkAccessManager>(nullptr); + QNetworkRequest url_request; + url_request.setUrl(QUrl(url_)); + auto _reply = manager->get(url_request); + + while (_reply->isRunning()) QApplication::processEvents(); + if (_reply->error() != QNetworkReply::NoError && + !_reply->readAll().isEmpty()) { + result_ = "Reachable"; + } else { + result_ = "Not Reachable"; + } + + _reply->deleteLater(); + + emit signalProxyConnectionTestResult(result_); +} diff --git a/src/ui/function/ProxyConnectionTestThread.h b/src/ui/function/ProxyConnectionTestThread.h new file mode 100644 index 00000000..4ef75050 --- /dev/null +++ b/src/ui/function/ProxyConnectionTestThread.h @@ -0,0 +1,57 @@ +/** + * This file is part of GpgFrontend. + * + * GpgFrontend is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Foobar is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Foobar. If not, see <https://www.gnu.org/licenses/>. + * + * The initial version of the source code is inherited from gpg4usb-team. + * Their source code version also complies with GNU General Public License. + * + * The source code version of this software was modified and released + * by Saturneric<[email protected]><[email protected]> starting on May 12, 2021. + * + */ + +#ifndef GPGFRONTEND_PROXYCONNECTIONTESTTHREAD_H +#define GPGFRONTEND_PROXYCONNECTIONTESTTHREAD_H + +class ProxyConnectionTestThread {}; + +#include <utility> + +#include "GpgFrontendUI.h" + +namespace GpgFrontend::UI { + +class ProxyConnectionTestThread : public QThread { + Q_OBJECT + public: + explicit ProxyConnectionTestThread(QString url, int timeout, + QWidget* parent = nullptr) + : QThread(parent), url_(std::move(url)), timeout_(timeout) {} + + signals: + void signalProxyConnectionTestResult(const QString& result); + + protected: + void run() override; + + private: + QString url_; + QString result_; + int timeout_ = 500; +}; + +} // namespace GpgFrontend::UI + +#endif // GPGFRONTEND_PROXYCONNECTIONTESTTHREAD_H diff --git a/src/ui/function/VersionCheckThread.cpp b/src/ui/function/VersionCheckThread.cpp index bfd6ea46..2a1cf9af 100644 --- a/src/ui/function/VersionCheckThread.cpp +++ b/src/ui/function/VersionCheckThread.cpp @@ -89,6 +89,8 @@ void VersionCheckThread::run() { version.release_note = release_note; } + _reply->deleteLater(); + _reply = manager->get(current_request); while (_reply->isRunning()) QApplication::processEvents(); current_reply_bytes_ = _reply->readAll(); @@ -104,6 +106,7 @@ void VersionCheckThread::run() { version.latest_prerelease = current_prerelease; version.latest_draft = current_draft; } + _reply->deleteLater(); // loading done version.load_info_done = true; diff --git a/src/ui/settings/SettingsDialog.cpp b/src/ui/settings/SettingsDialog.cpp index 7b8a8624..01e4094f 100644 --- a/src/ui/settings/SettingsDialog.cpp +++ b/src/ui/settings/SettingsDialog.cpp @@ -29,6 +29,7 @@ #include "SettingsAppearance.h" #include "SettingsGeneral.h" #include "SettingsKeyServer.h" +#include "SettingsNetwork.h" #ifdef SMTP_SUPPORT #include "SettingsSendMail.h" @@ -37,13 +38,15 @@ namespace GpgFrontend::UI { SettingsDialog::SettingsDialog(QWidget* parent) : QDialog(parent) { - tabWidget = new QTabWidget; + + tabWidget = new QTabWidget(); generalTab = new GeneralTab(); - appearanceTab = new AppearanceTab; + appearanceTab = new AppearanceTab(); #ifdef SMTP_SUPPORT - sendMailTab = new SendMailTab; + sendMailTab = new SendMailTab(); #endif - keyserverTab = new KeyserverTab; + keyserverTab = new KeyserverTab(); + networkTab = new NetworkTab(); #ifdef ADVANCED_SUPPORT advancedTab = new AdvancedTab; #endif @@ -55,6 +58,7 @@ SettingsDialog::SettingsDialog(QWidget* parent) : QDialog(parent) { #endif tabWidget->addTab(keyserverTab, _("Key Server")); // tabWidget->addTab(gpgPathsTab, _("Gpg paths")); + tabWidget->addTab(networkTab, _("Network")); #ifdef ADVANCED_SUPPORT tabWidget->addTab(advancedTab, _("Advanced")); #endif @@ -114,6 +118,7 @@ void SettingsDialog::slotAccept() { #endif appearanceTab->applySettings(); keyserverTab->applySettings(); + networkTab->applySettings(); #ifdef ADVANCED_SUPPORT advancedTab->applySettings(); #endif diff --git a/src/ui/settings/SettingsDialog.h b/src/ui/settings/SettingsDialog.h index b8277906..da3bdba3 100755 --- a/src/ui/settings/SettingsDialog.h +++ b/src/ui/settings/SettingsDialog.h @@ -38,6 +38,7 @@ class SendMailTab; class AppearanceTab; class KeyserverTab; +class NetworkTab; #ifdef ADVANCED_SUPPORT class AdvancedTab; @@ -55,6 +56,7 @@ class SettingsDialog : public QDialog { #endif AppearanceTab* appearanceTab; KeyserverTab* keyserverTab; + NetworkTab* networkTab; #ifdef ADVANCED_SUPPORT AdvancedTab* advancedTab; #endif diff --git a/src/ui/settings/SettingsKeyServer.cpp b/src/ui/settings/SettingsKeyServer.cpp index ee60b40e..0cba7b51 100644 --- a/src/ui/settings/SettingsKeyServer.cpp +++ b/src/ui/settings/SettingsKeyServer.cpp @@ -286,8 +286,6 @@ void KeyserverTab::slotTestListedKeyServer() { connect(waiting_dialog, &QProgressDialog::canceled, [=]() { LOG(INFO) << "cancel clicked"; if (thread->isRunning()) thread->terminate(); - QCoreApplication::quit(); - exit(0); }); // Show Waiting Dialog diff --git a/src/ui/settings/SettingsNetwork.cpp b/src/ui/settings/SettingsNetwork.cpp new file mode 100644 index 00000000..a64a9ea9 --- /dev/null +++ b/src/ui/settings/SettingsNetwork.cpp @@ -0,0 +1,321 @@ +/** + * This file is part of GpgFrontend. + * + * GpgFrontend is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Foobar is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Foobar. If not, see <https://www.gnu.org/licenses/>. + * + * The initial version of the source code is inherited from gpg4usb-team. + * Their source code version also complies with GNU General Public License. + * + * The source code version of this software was modified and released + * by Saturneric<[email protected]> starting on May 12, 2021. + * + */ + +#include "SettingsNetwork.h" + +#include "ui/function/ProxyConnectionTestThread.h" +#include "ui/settings//GlobalSettingStation.h" +#include "ui_NetworkSettings.h" + +GpgFrontend::UI::NetworkTab::NetworkTab(QWidget *parent) + : QWidget(parent), ui(std::make_shared<Ui_NetworkSettings>()) { + ui->setupUi(this); + + connect(ui->enableProxyCheckBox, &QCheckBox::stateChanged, this, + [=](int state) { + ui->proxyServerAddressEdit->setDisabled(state != Qt::Checked); + ui->portSpin->setDisabled(state != Qt::Checked); + ui->proxyTypeComboBox->setDisabled(state != Qt::Checked); + + ui->usernameEdit->setDisabled(state != Qt::Checked); + ui->passwordEdit->setDisabled(state != Qt::Checked); + + ui->checkProxyConnectionButton->setDisabled(state != Qt::Checked); + + proxy_type_ = QNetworkProxy::NoProxy; + }); + + connect(ui->proxyTypeComboBox, &QComboBox::currentTextChanged, this, + [=](const QString ¤t_text) { + if (current_text == "HTTP") { + ui->proxyServerAddressEdit->setDisabled(true); + ui->portSpin->setDisabled(true); + ui->proxyTypeComboBox->setDisabled(true); + ui->usernameEdit->setDisabled(true); + ui->passwordEdit->setDisabled(true); + proxy_type_ = QNetworkProxy::HttpProxy; + } else if (current_text == "Socks5") { + ui->proxyServerAddressEdit->setDisabled(true); + ui->portSpin->setDisabled(true); + ui->proxyTypeComboBox->setDisabled(true); + ui->usernameEdit->setDisabled(true); + ui->passwordEdit->setDisabled(true); + proxy_type_ = QNetworkProxy::Socks5Proxy; + } else { + ui->proxyServerAddressEdit->setDisabled(false); + ui->portSpin->setDisabled(false); + ui->proxyTypeComboBox->setDisabled(false); + ui->usernameEdit->setDisabled(false); + ui->passwordEdit->setDisabled(false); + proxy_type_ = QNetworkProxy::DefaultProxy; + } + }); + + connect(ui->checkProxyConnectionButton, &QPushButton::clicked, this, + &NetworkTab::slotTestProxyConnectionResult); + + ui->proxyGroupBox->setTitle(_("Proxy")); + ui->capabilityGroupBox->setTitle(_("Network Capability")); + ui->operationsGroupBox->setTitle(_("Operations")); + + ui->enableProxyCheckBox->setText(_("Enable Proxy")); + ui->proxyServerPortLabel->setText(_("Port")); + + ui->proxyServerAddressLabel->setText(_("Host Address")); + ui->proxyServerPortLabel->setText(_("Port")); + ui->proxyTypeLabel->setText(_("Proxy Type")); + ui->usernameLabel->setText(_("Username")); + ui->passwordLabel->setText(_("Password")); + + ui->forbidALLCheckBox->setText(_("Forbid all network connection.")); + ui->prohibitUpdateCheck->setText(_("Prohibit checking for updates.")); + ui->checkProxyConnectionButton->setText(_("Check Proxy Connection")); + + setSettings(); +} + +void GpgFrontend::UI::NetworkTab::setSettings() { + auto &settings = GlobalSettingStation::GetInstance().GetUISettings(); + + try { + std::string proxy_host = settings.lookup("proxy.proxy_host"); + ui->proxyServerAddressEdit->setText(proxy_host.c_str()); + } catch (...) { + LOG(ERROR) << _("Setting Operation Error") << _("proxy_host"); + } + + try { + std::string std_username = settings.lookup("proxy.username"); + ui->usernameEdit->setText(std_username.c_str()); + } catch (...) { + LOG(ERROR) << _("Setting Operation Error") << _("username"); + } + + try { + std::string std_password = settings.lookup("proxy.password"); + ui->passwordEdit->setText(std_password.c_str()); + } catch (...) { + LOG(ERROR) << _("Setting Operation Error") << _("password"); + } + + try { + int port = settings.lookup("proxy.port"); + ui->portSpin->setValue(port); + } catch (...) { + LOG(ERROR) << _("Setting Operation Error") << _("port"); + } + + ui->proxyTypeComboBox->setCurrentText("HTTP"); + try { + std::string proxy_type = settings.lookup("proxy.proxy_type"); + ui->proxyTypeComboBox->setCurrentText(proxy_type.c_str()); + } catch (...) { + LOG(ERROR) << _("Setting Operation Error") << _("proxy_type"); + } + + ui->enableProxyCheckBox->setCheckState(Qt::Unchecked); + try { + bool proxy_enable = settings.lookup("proxy.enable"); + if (proxy_enable) + ui->enableProxyCheckBox->setCheckState(Qt::Checked); + else + ui->enableProxyCheckBox->setCheckState(Qt::Unchecked); + } catch (...) { + LOG(ERROR) << _("Setting Operation Error") << _("proxy_enable"); + } + + ui->forbidALLCheckBox->setCheckState(Qt::Unchecked); + try { + bool forbid_all_connection = + settings.lookup("network.forbid_all_connection"); + if (forbid_all_connection) + ui->forbidALLCheckBox->setCheckState(Qt::Checked); + else + ui->forbidALLCheckBox->setCheckState(Qt::Unchecked); + } catch (...) { + LOG(ERROR) << _("Setting Operation Error") << _("forbid_all_connection"); + } + + ui->prohibitUpdateCheck->setCheckState(Qt::Unchecked); + try { + bool prohibit_update = settings.lookup("network.prohibit_update"); + if (prohibit_update) + ui->prohibitUpdateCheck->setCheckState(Qt::Checked); + else + ui->prohibitUpdateCheck->setCheckState(Qt::Unchecked); + } catch (...) { + LOG(ERROR) << _("Setting Operation Error") << _("prohibit_update"); + } +} + +void GpgFrontend::UI::NetworkTab::applySettings() { + auto &settings = + GpgFrontend::UI::GlobalSettingStation::GetInstance().GetUISettings(); + + if (!settings.exists("proxy") || + settings.lookup("proxy").getType() != libconfig::Setting::TypeGroup) + settings.add("proxy", libconfig::Setting::TypeGroup); + + auto &proxy = settings["proxy"]; + + if (!proxy.exists("proxy_host")) + proxy.add("proxy_host", libconfig::Setting::TypeString) = + ui->proxyServerAddressLabel->text().toStdString(); + else { + proxy["proxy_host"] = ui->proxyServerAddressLabel->text().toStdString(); + } + + if (!proxy.exists("username")) + proxy.add("username", libconfig::Setting::TypeString) = + ui->usernameEdit->text().toStdString(); + else { + proxy["username"] = ui->usernameEdit->text().toStdString(); + } + + if (!proxy.exists("password")) + proxy.add("password", libconfig::Setting::TypeString) = + ui->passwordEdit->text().toStdString(); + else { + proxy["password"] = ui->passwordEdit->text().toStdString(); + } + + if (!proxy.exists("port")) + proxy.add("port", libconfig::Setting::TypeInt) = ui->portSpin->value(); + else { + proxy["port"] = ui->portSpin->value(); + } + + if (!proxy.exists("proxy_type")) + proxy.add("proxy_type", libconfig::Setting::TypeString) = + ui->proxyTypeComboBox->currentText().toStdString(); + else { + proxy["proxy_type"] = ui->proxyTypeComboBox->currentText().toStdString(); + } + + if (!proxy.exists("enable")) + proxy.add("enable", libconfig::Setting::TypeBoolean) = + ui->enableProxyCheckBox->isChecked(); + else { + proxy["enable"] = ui->enableProxyCheckBox->isChecked(); + } + + auto &network = settings["network"]; + + if (!network.exists("forbid_all_connection")) + network.add("forbid_all_connection", libconfig::Setting::TypeBoolean) = + ui->forbidALLCheckBox->isChecked(); + else { + network["forbid_all_connection"] = ui->forbidALLCheckBox->isChecked(); + } + + if (!network.exists("prohibit_update")) + network.add("prohibit_update", libconfig::Setting::TypeBoolean) = + ui->prohibitUpdateCheck->isChecked(); + else { + network["prohibit_update"] = ui->prohibitUpdateCheck->isChecked(); + } + + apply_proxy_settings(); +} + +void GpgFrontend::UI::NetworkTab::slotTestProxyConnectionResult() { + apply_proxy_settings(); + + bool ok; + auto url = QInputDialog::getText(this, _("Test Server Url Accessibility"), + tr("Server Url"), QLineEdit::Normal, + "https://", &ok); + if (ok && !url.isEmpty()) { + auto thread = new ProxyConnectionTestThread(url, 800, this); + connect(thread, + &GpgFrontend::UI::ProxyConnectionTestThread:: + signalProxyConnectionTestResult, + this, [=](const QString &result) { + if (result == "Reachable") { + QMessageBox::information( + this, _("Success"), + _("Successfully connected to the target server")); + } else { + QMessageBox::information( + this, _("Failed"), + _("Unable to connect to the target server. Proxy settings " + "may be invalid.")); + } + }); + connect(thread, &QThread::finished, thread, &QThread::deleteLater); + + // Waiting Dialog + auto *waiting_dialog = new QProgressDialog(this); + waiting_dialog->setMaximum(0); + waiting_dialog->setMinimum(0); + auto waiting_dialog_label = new QLabel( + QString(_("Test Proxy Server Connection...")) + "<br /><br />" + + _("Is using your proxy settings to access the url. Note that this test " + "operation will apply your proxy settings to the entire software.")); + waiting_dialog_label->setWordWrap(true); + waiting_dialog->setLabel(waiting_dialog_label); + waiting_dialog->resize(420, 120); + connect(thread, &QThread::finished, [=]() { + waiting_dialog->finished(0); + waiting_dialog->deleteLater(); + }); + connect(waiting_dialog, &QProgressDialog::canceled, [=]() { + LOG(INFO) << "cancel clicked"; + if (thread->isRunning()) thread->terminate(); + }); + + // Show Waiting Dialog + waiting_dialog->show(); + waiting_dialog->setFocus(); + + thread->start(); + QEventLoop loop; + connect(thread, &QThread::finished, &loop, &QEventLoop::quit); + loop.exec(); + } +} + +void GpgFrontend::UI::NetworkTab::apply_proxy_settings() { + // apply settings + QNetworkProxy _proxy; + if (ui->enableProxyCheckBox->isChecked() && + proxy_type_ != QNetworkProxy::DefaultProxy) { + _proxy.setType(proxy_type_); + _proxy.setHostName(ui->proxyServerAddressEdit->text()); + _proxy.setPort(ui->portSpin->value()); + if (!ui->usernameEdit->text().isEmpty()) { + _proxy.setUser(ui->usernameEdit->text()); + _proxy.setPassword(ui->passwordEdit->text()); + } + } + if (proxy_type_ == QNetworkProxy::DefaultProxy) { + ; + } else { + _proxy.setType(proxy_type_); + } + + LOG(INFO) << "proxy" << _proxy.hostName().toStdString() << _proxy.port() + << _proxy.type(); + QNetworkProxy::setApplicationProxy(_proxy); +} diff --git a/src/ui/settings/SettingsNetwork.h b/src/ui/settings/SettingsNetwork.h new file mode 100644 index 00000000..66803970 --- /dev/null +++ b/src/ui/settings/SettingsNetwork.h @@ -0,0 +1,55 @@ +/** + * This file is part of GpgFrontend. + * + * GpgFrontend is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Foobar is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Foobar. If not, see <https://www.gnu.org/licenses/>. + * + * The initial version of the source code is inherited from gpg4usb-team. + * Their source code version also complies with GNU General Public License. + * + * The source code version of this software was modified and released + * by Saturneric<[email protected]> starting on May 12, 2021. + * + */ + +#ifndef GPGFRONTEND_SETTINGSNETWORK_H +#define GPGFRONTEND_SETTINGSNETWORK_H + +#include "ui/GpgFrontendUI.h" + +class Ui_NetworkSettings; + +namespace GpgFrontend::UI { +class NetworkTab : public QWidget { + Q_OBJECT + + public: + explicit NetworkTab(QWidget* parent = nullptr); + + void setSettings(); + + void applySettings(); + + private slots: + + void slotTestProxyConnectionResult(); + + private: + std::shared_ptr<Ui_NetworkSettings> ui; + QNetworkProxy::ProxyType proxy_type_ = QNetworkProxy::HttpProxy; + + void apply_proxy_settings(); +}; +} // namespace GpgFrontend::UI + +#endif // GPGFRONTEND_SETTINGSNETWORK_H diff --git a/src/ui/settings/SettingsSendMail.cpp b/src/ui/settings/SettingsSendMail.cpp index 21911e0f..e4ab9b0b 100644 --- a/src/ui/settings/SettingsSendMail.cpp +++ b/src/ui/settings/SettingsSendMail.cpp @@ -293,8 +293,6 @@ void SendMailTab::slotCheckConnection() { connect(waiting_dialog, &QProgressDialog::canceled, [=]() { LOG(INFO) << "cancel clicked"; if (thread->isRunning()) thread->terminate(); - QCoreApplication::quit(); - exit(0); }); // Show Waiting Dialog @@ -341,8 +339,6 @@ void SendMailTab::slotSendTestMail() { connect(waiting_dialog, &QProgressDialog::canceled, [=]() { LOG(INFO) << "cancel clicked"; if (thread->isRunning()) thread->terminate(); - QCoreApplication::quit(); - exit(0); }); thread->setSender(sender_address); diff --git a/src/ui/settings/SettingsSendMail.h b/src/ui/settings/SettingsSendMail.h index 39ae0b71..2e0302c8 100644 --- a/src/ui/settings/SettingsSendMail.h +++ b/src/ui/settings/SettingsSendMail.h @@ -1,6 +1,26 @@ -// -// Created by saturneric on 2021/11/28. -// +/** + * This file is part of GpgFrontend. + * + * GpgFrontend is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Foobar is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Foobar. If not, see <https://www.gnu.org/licenses/>. + * + * The initial version of the source code is inherited from gpg4usb-team. + * Their source code version also complies with GNU General Public License. + * + * The source code version of this software was modified and released + * by Saturneric<[email protected]> starting on May 12, 2021. + * + */ #ifndef GPGFRONTEND_SETTINGSSENDMAIL_H #define GPGFRONTEND_SETTINGSSENDMAIL_H diff --git a/src/ui/smtp/SendMailDialog.cpp b/src/ui/smtp/SendMailDialog.cpp index f3ec5711..4895d8e4 100644 --- a/src/ui/smtp/SendMailDialog.cpp +++ b/src/ui/smtp/SendMailDialog.cpp @@ -309,8 +309,6 @@ void SendMailDialog::slotConfirm() { connect(waiting_dialog, &QProgressDialog::canceled, [=]() { LOG(INFO) << "cancel clicked"; if (thread->isRunning()) thread->terminate(); - QCoreApplication::quit(); - exit(0); }); // Show Waiting Dialog |