From a60f648ed78736f3d20880a4a04c11392f2907ef Mon Sep 17 00:00:00 2001 From: "Wladimir J. van der Laan" Date: Wed, 22 Jan 2020 16:03:27 +0100 Subject: [PATCH] Merge #17965: qt: Revert changes of pr17943 70e4706093fd7b08a32f9638dace178852a9d249 Revert "refactor: Remove never used default parameter" (Hennadii Stepanov) 219417b388a0373f9eb71446e1b0499ab55dd3e2 Revert "refactor: Simplify connection syntax" (Hennadii Stepanov) Pull request description: The code, the `bool* ret = nullptr` parameter in the `BitcoinGUI::message()` slot, removed in #17943 is not dead actually. It is used in `ThreadSafeMessageBox()` function: https://github.com/bitcoin/bitcoin/blob/a654626f076a72416a3d354218d7107571d6caaf/src/qt/bitcoingui.cpp#L1363-L1368 Now in master (a654626f076a72416a3d354218d7107571d6caaf): ``` $ ./src/qt/bitcoin-qt -prune=-1 Error: Prune cannot be configured with a negative value. bitcoin-qt: qt/bitcoingui.cpp:1369: bool ThreadSafeMessageBox(BitcoinGUI*, const string&, const string&, unsigned int): Assertion `invoked' failed. Aborted (core dumped) ``` This PR reverts all commits of #17943 Additional notes: the bug was missed due to dynamic function call `QMetaObject::invokeMethod()` which cannot be checked at compile time. See #16348 for more discussion. Sorry for introducing a bug. ACKs for top commit: Sjors: ACK 70e4706093fd7b08a32f9638dace178852a9d249 laanwj: ACK 70e4706093fd7b08a32f9638dace178852a9d249 Tree-SHA512: b968a026eaa4f5f39fd36ddc715d8e233f3c6420e6580f11d4ca422a5ff5d1d9d3df9ac11b353c3d4f434d67d6a69e37d2e26b8248d72bedd14ecba0a545a327 --- src/qt/bitcoingui.cpp | 10 +++++++--- src/qt/bitcoingui.h | 3 ++- src/qt/dash.cpp | 4 +++- src/qt/walletview.cpp | 4 +++- 4 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp index 7f60a52571..fba897e92b 100644 --- a/src/qt/bitcoingui.cpp +++ b/src/qt/bitcoingui.cpp @@ -801,7 +801,9 @@ void BitcoinGUI::setClientModel(ClientModel *_clientModel) connect(_clientModel, &ClientModel::additionalDataSyncProgressChanged, this, &BitcoinGUI::setAdditionalDataSyncProgress); // Receive and report messages from client model - connect(_clientModel, &ClientModel::message, this, &BitcoinGUI::message); + connect(_clientModel, &ClientModel::message, [this](const QString &title, const QString &message, unsigned int style){ + this->message(title, message, style); + }); // Show progress dialog connect(_clientModel, &ClientModel::showProgress, this, &BitcoinGUI::showProgress); @@ -1504,7 +1506,7 @@ void BitcoinGUI::setAdditionalDataSyncProgress(double nSyncProgress) progressBar->setToolTip(tooltip); } -void BitcoinGUI::message(const QString& title, QString message, unsigned int style) +void BitcoinGUI::message(const QString& title, QString message, unsigned int style, bool* ret) { // Default title. On macOS, the window title is ignored (as required by the macOS Guidelines). QString strTitle{PACKAGE_NAME}; @@ -1558,7 +1560,9 @@ void BitcoinGUI::message(const QString& title, QString message, unsigned int sty showNormalIfMinimized(); QMessageBox mBox(static_cast(nMBoxIcon), strTitle, message, buttons, this); mBox.setTextFormat(Qt::PlainText); - mBox.exec(); + int r = mBox.exec(); + if (ret != nullptr) + *ret = r == QMessageBox::Ok; } else { notificator->notify(static_cast(nNotifyIcon), strTitle, message); } diff --git a/src/qt/bitcoingui.h b/src/qt/bitcoingui.h index 23a17c14d5..ca9247b439 100644 --- a/src/qt/bitcoingui.h +++ b/src/qt/bitcoingui.h @@ -260,8 +260,9 @@ public Q_SLOTS: @param[in] message the displayed text @param[in] style modality and style definitions (icon and used buttons - buttons only for message boxes) @see CClientUIInterface::MessageBoxFlags + @param[in] ret pointer to a bool that will be modified to whether Ok was clicked (modal only) */ - void message(const QString& title, QString message, unsigned int style); + void message(const QString& title, QString message, unsigned int style, bool* ret = nullptr); #ifdef ENABLE_WALLET void setCurrentWallet(WalletModel* wallet_model); diff --git a/src/qt/dash.cpp b/src/qt/dash.cpp index 207defaff7..bd95dd9c27 100644 --- a/src/qt/dash.cpp +++ b/src/qt/dash.cpp @@ -387,7 +387,9 @@ void BitcoinApplication::initializeResult(bool success) if (paymentServer) { connect(paymentServer, &PaymentServer::receivedPaymentRequest, window, &BitcoinGUI::handlePaymentRequest); connect(window, &BitcoinGUI::receivedURI, paymentServer, &PaymentServer::handleURIOrFile); - connect(paymentServer, &PaymentServer::message, window, &BitcoinGUI::message); + connect(paymentServer, &PaymentServer::message, [this](const QString& title, const QString& message, unsigned int style) { + window->message(title, message, style); + }); QTimer::singleShot(100, paymentServer, &PaymentServer::uiReady); } #endif diff --git a/src/qt/walletview.cpp b/src/qt/walletview.cpp index e1d3a9f930..f096403930 100644 --- a/src/qt/walletview.cpp +++ b/src/qt/walletview.cpp @@ -134,7 +134,9 @@ void WalletView::setBitcoinGUI(BitcoinGUI *gui) connect(coinJoinCoinsPage, &SendCoinsDialog::coinsSent, gui, &BitcoinGUI::gotoHistoryPage); // Receive and report messages - connect(this, &WalletView::message, gui, &BitcoinGUI::message); + connect(this, &WalletView::message, [gui](const QString &title, const QString &message, unsigned int style) { + gui->message(title, message, style); + }); // Pass through encryption status changed signals connect(this, &WalletView::encryptionStatusChanged, gui, &BitcoinGUI::updateWalletStatus);