gui: Fix duplicate wallet showing up
The slot BitcoinGUI::addWallet can be invoked twice for the same WalletModel due to a concurrent wallet being loaded after the first `connect()`: ```cpp connect(wallet_controller, &WalletController::walletAdded, this, &BitcoinGUI::addWallet); connect(wallet_controller, &WalletController::walletRemoved, this, &BitcoinGUI::removeWallet); for (WalletModel* wallet_model : m_wallet_controller->getOpenWallets()) { addWallet(wallet_model); ``` Github-Pull: #16963 Rebased-From: 6d6a7a8403ae923f189812edebdd95761de0e7f2
This commit is contained in:
parent
7e66d04770
commit
eafcea7a0a
3 changed files with 7 additions and 5 deletions
|
@ -633,10 +633,10 @@ void BitcoinGUI::setWalletController(WalletController* wallet_controller)
|
||||||
void BitcoinGUI::addWallet(WalletModel* walletModel)
|
void BitcoinGUI::addWallet(WalletModel* walletModel)
|
||||||
{
|
{
|
||||||
if (!walletFrame) return;
|
if (!walletFrame) return;
|
||||||
|
if (!walletFrame->addWallet(walletModel)) return;
|
||||||
const QString display_name = walletModel->getDisplayName();
|
const QString display_name = walletModel->getDisplayName();
|
||||||
setWalletActionsEnabled(true);
|
setWalletActionsEnabled(true);
|
||||||
rpcConsole->addWallet(walletModel);
|
rpcConsole->addWallet(walletModel);
|
||||||
walletFrame->addWallet(walletModel);
|
|
||||||
m_wallet_selector->addItem(display_name, QVariant::fromValue(walletModel));
|
m_wallet_selector->addItem(display_name, QVariant::fromValue(walletModel));
|
||||||
if (m_wallet_selector->count() == 2) {
|
if (m_wallet_selector->count() == 2) {
|
||||||
m_wallet_selector_label_action->setVisible(true);
|
m_wallet_selector_label_action->setVisible(true);
|
||||||
|
|
|
@ -40,11 +40,11 @@ void WalletFrame::setClientModel(ClientModel *_clientModel)
|
||||||
this->clientModel = _clientModel;
|
this->clientModel = _clientModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
void WalletFrame::addWallet(WalletModel *walletModel)
|
bool WalletFrame::addWallet(WalletModel *walletModel)
|
||||||
{
|
{
|
||||||
if (!gui || !clientModel || !walletModel) return;
|
if (!gui || !clientModel || !walletModel) return false;
|
||||||
|
|
||||||
if (mapWalletViews.count(walletModel) > 0) return;
|
if (mapWalletViews.count(walletModel) > 0) return false;
|
||||||
|
|
||||||
WalletView *walletView = new WalletView(platformStyle, this);
|
WalletView *walletView = new WalletView(platformStyle, this);
|
||||||
walletView->setBitcoinGUI(gui);
|
walletView->setBitcoinGUI(gui);
|
||||||
|
@ -68,6 +68,8 @@ void WalletFrame::addWallet(WalletModel *walletModel)
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(walletView, &WalletView::outOfSyncWarningClicked, this, &WalletFrame::outOfSyncWarningClicked);
|
connect(walletView, &WalletView::outOfSyncWarningClicked, this, &WalletFrame::outOfSyncWarningClicked);
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void WalletFrame::setCurrentWallet(WalletModel* wallet_model)
|
void WalletFrame::setCurrentWallet(WalletModel* wallet_model)
|
||||||
|
|
|
@ -36,7 +36,7 @@ public:
|
||||||
|
|
||||||
void setClientModel(ClientModel *clientModel);
|
void setClientModel(ClientModel *clientModel);
|
||||||
|
|
||||||
void addWallet(WalletModel *walletModel);
|
bool addWallet(WalletModel *walletModel);
|
||||||
void setCurrentWallet(WalletModel* wallet_model);
|
void setCurrentWallet(WalletModel* wallet_model);
|
||||||
void removeWallet(WalletModel* wallet_model);
|
void removeWallet(WalletModel* wallet_model);
|
||||||
void removeAllWallets();
|
void removeAllWallets();
|
||||||
|
|
Loading…
Add table
Reference in a new issue