diff --git a/src/qt/bitcoingui.h b/src/qt/bitcoingui.h --- a/src/qt/bitcoingui.h +++ b/src/qt/bitcoingui.h @@ -143,6 +143,7 @@ QAction *openRPCConsoleAction = nullptr; QAction *openAction = nullptr; QAction *showHelpMessageAction = nullptr; + QAction *m_open_wallet_action{nullptr}; QAction *m_wallet_selector_label_action = nullptr; QAction *m_wallet_selector_action = nullptr; diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp --- a/src/qt/bitcoingui.cpp +++ b/src/qt/bitcoingui.cpp @@ -394,6 +394,10 @@ .arg(QString::fromStdString( config->GetChainParams().CashAddrPrefix()))); + m_open_wallet_action = new QAction(tr("Open Wallet"), this); + m_open_wallet_action->setMenu(new QMenu(this)); + m_open_wallet_action->setStatusTip(tr("Open a wallet")); + showHelpMessageAction = new QAction(platformStyle->TextColorIcon(":/icons/info"), tr("&Command-line options"), this); @@ -440,6 +444,20 @@ &WalletFrame::usedReceivingAddresses); connect(openAction, &QAction::triggered, this, &BitcoinGUI::openClicked); + connect(m_open_wallet_action->menu(), &QMenu::aboutToShow, [this] { + m_open_wallet_action->menu()->clear(); + for (std::string path : + m_wallet_controller->getWalletsAvailableToOpen()) { + QString name = path.empty() + ? QString("[" + tr("default wallet") + "]") + : QString::fromStdString(path); + QAction *action = m_open_wallet_action->menu()->addAction(name); + connect(action, &QAction::triggered, [this, path] { + setCurrentWallet(m_wallet_controller->openWallet( + config->GetChainParams(), path)); + }); + } + }); } #endif // ENABLE_WALLET @@ -463,6 +481,8 @@ // Configure the menus QMenu *file = appMenuBar->addMenu(tr("&File")); if (walletFrame) { + file->addAction(m_open_wallet_action); + file->addSeparator(); file->addAction(openAction); file->addAction(backupWalletAction); file->addAction(signMessageAction);