diff --git a/src/qt/walletcontroller.h b/src/qt/walletcontroller.h --- a/src/qt/walletcontroller.h +++ b/src/qt/walletcontroller.h @@ -48,6 +48,7 @@ OpenWalletActivity *openWallet(const CChainParams ¶ms, const std::string &name, QWidget *parent = nullptr); + void closeWallet(WalletModel *wallet_model, QWidget *parent = nullptr); private Q_SLOTS: void addWallet(WalletModel *wallet_model); diff --git a/src/qt/walletcontroller.cpp b/src/qt/walletcontroller.cpp --- a/src/qt/walletcontroller.cpp +++ b/src/qt/walletcontroller.cpp @@ -65,6 +65,24 @@ QMetaObject::invokeMethod(activity, "open", Qt::QueuedConnection); return activity; } +void WalletController::closeWallet(WalletModel *wallet_model, QWidget *parent) { + QMessageBox box(parent); + box.setWindowTitle(tr("Close wallet")); + box.setText(tr("Are you sure you wish to close wallet %1?") + .arg(wallet_model->getDisplayName())); + box.setInformativeText( + tr("Closing the wallet for too long can result in having to resync the " + "entire chain if pruning is enabled.")); + box.setStandardButtons(QMessageBox::Yes | QMessageBox::Cancel); + box.setDefaultButton(QMessageBox::Yes); + if (box.exec() != QMessageBox::Yes) return; + + // First remove wallet from node. + wallet_model->wallet().remove(); + // Now release the model. + removeAndDeleteWallet(wallet_model); +} + WalletModel *WalletController::getOrCreateWallet( std::unique_ptr wallet) { QMutexLocker locker(&m_mutex);