New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Basic Multiwallet GUI support #11383
Conversation
src/qt/bitcoin.cpp
Outdated
window->addWallet(BitcoinGUI::DEFAULT_WALLET, walletModel); | ||
window->setCurrentWallet(BitcoinGUI::DEFAULT_WALLET); | ||
QString WalletName = QString::fromStdString(pwallet->GetName()); | ||
if (WalletName.endsWith(".dat")) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hmm.. not sure if we should hardcode .dat
at this point.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's strictly for stripping.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hmm.. not sure if we should hardcode .dat at this point.
Note: this is now cleaned up in a later commit ("Get wallet name from WalletModel rather than passing it around")
@@ -462,6 +462,15 @@ void BitcoinGUI::createToolBars() | |||
toolbar->addAction(receiveCoinsAction); | |||
toolbar->addAction(historyAction); | |||
overviewAction->setChecked(true); | |||
|
|||
#ifdef ENABLE_WALLET |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this #ifdef
could be avoided/removed, right?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Has to bee there I guess because of bool setCurrentWallet(const QString& name);
being only defined if ENABLE_WALLET
.
Nice! Conceptual issues:
Ideas:
Code:
|
I think we can fairly easily pull out the contentious rpcauth parts of this to make it more palatable for review. I have a branch here: https://github.com/jnewbery/bitcoin/tree/pr11383.1 which removes the first three commits and makes the one change to |
4a1ef70
to
24ca9cd
Compare
Rebased, eliminated I did not address @jonasschnelli's GUI comments, because I feel some is best explored separately, as improvements on top of this, while others (confirming wallet changes with a prompt) I think would make the feature annoying to use. |
static const std::string WALLET_ENDPOINT_BASE = "/wallet/"; | ||
|
||
CWallet *GetWalletForJSONRPCRequest(const JSONRPCRequest& request) | ||
void JSONRPCRequestWalletResolver(JSONRPCRequest& jreq, const HTTPRequest& httpreq) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In commit "RPC: Pass wallet through JSONRPCRequest"
Multiwallet rpc calls are broken in this commit (and the whole PR) because JSONRPCRequestWalletResolver is not actually registered or called anywhere. Maybe a commit was lost in the rebase? The problem causes multiwallet.py test to fail with "Wallet file not specified"
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fixed
src/qt/bitcoin.cpp
Outdated
@@ -252,7 +252,7 @@ public Q_SLOTS: | |||
QTimer *pollShutdownTimer; | |||
#ifdef ENABLE_WALLET | |||
PaymentServer* paymentServer; | |||
WalletModel *walletModel; | |||
std::vector<WalletModel*> walletModels; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In commit "Qt: Load all wallets into WalletModels"
Might be simpler to make this a vector of unique_ptr, to avoid need for manual deletions. Also since renaming this member anyway, could follow current naming convenetion (m_wallet_models).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not sure unique_ptr is the right tool for the job here. Renamed.
@@ -95,13 +95,13 @@ void WalletView::setBitcoinGUI(BitcoinGUI *gui) | |||
connect(this, SIGNAL(message(QString,QString,unsigned int)), gui, SLOT(message(QString,QString,unsigned int))); | |||
|
|||
// Pass through encryption status changed signals | |||
connect(this, SIGNAL(encryptionStatusChanged(int)), gui, SLOT(setEncryptionStatus(int))); | |||
connect(this, SIGNAL(encryptionStatusChanged(int)), gui, SLOT(updateWalletStatus())); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In commit "Qt: Ensure UI updates only come from the currently selected walletView"
This is silently dropping the int status
value passed to encryptionStatusChanged
, and the int hdEnabled
value passed to hdEnabledStatusChanged.
Assuming this is intended, you should clean up after this change by deleting the unused parameters from encryptionStatusChanged
and hdEnabledStatusChanged
declarations and calls.
src/qt/rpcconsole.cpp
Outdated
const int wallet_index = ui->WalletSelector->currentIndex(); | ||
if (wallet_index > 0) { | ||
CWalletRef *ppwallet = (CWalletRef*)ui->WalletSelector->itemData(wallet_index).value<void*>(); | ||
ppwallet = new CWalletRef(*ppwallet); // Refcount |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In commit "Qt: Add wallet selector to debug console"
What does refcount comment mean? Is this a todo suggesting that you want to add refcounting in the future? Should clarify comment or maybe remove it.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Clarified.
@@ -65,6 +65,15 @@ WalletModel::~WalletModel() | |||
unsubscribeFromCoreSignals(); | |||
} | |||
|
|||
QString WalletModel::getWalletName() const |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In commit "Qt: When multiple wallets are used, include in notifications the name"
Would be nice to follow this up by removing the name
parameter passed to BitcoinGUI::addWallet
to avoid duplicating .dat stripping logic.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done.
(Note Travis failure is due to the batch request bug fixed in #11277) |
#11277 is merged. Can you rebase? |
97bd3e7
to
6445a93
Compare
Rebased |
Github-Pull: bitcoin#11383 Rebased-From: ad100ff42c2cec31ae4f1fb9c94ad00c4eedaa86
Github-Pull: bitcoin#11383 Rebased-From: 6445a935e6daeadd38c3d8633083ca45fc2cfe1f
6445a93
to
555eec1
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Lightly tested ACK: 555eec1
Works as intended.
Visually not very elegant, but an acceptable first step.
PrepareJSONRPCRequestCallbacks.connect(preparer); | ||
} | ||
|
||
void UnregisterJSONRPCRequestPreparer(const JSONRPCRequestPreparer& preparer) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This gets never called, right?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Right, nor does /wallet/ get unregistered... Fixing
src/httprpc.cpp
Outdated
@@ -236,6 +251,9 @@ bool StartHTTPRPC() | |||
#ifdef ENABLE_WALLET | |||
// ifdef can be removed once we switch to better endpoint support and API versioning | |||
RegisterHTTPHandler("/wallet/", false, HTTPReq_JSONRPC); | |||
|
|||
void JSONRPCRequestWalletResolver(JSONRPCRequest& jreq, const HTTPRequest& httpreq); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
use extern
outside function scope?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Isn't extern
not needed (nor desirable in our codebase) for function references?
|
||
/** WWW-Authenticate to present with 401 Unauthorized response */ | ||
static const char* WWW_AUTH_HEADER_DATA = "Basic realm=\"jsonrpc\""; | ||
|
||
boost::signals2::signal<void (JSONRPCRequest&, const HTTPRequest&)> PrepareJSONRPCRequestCallbacks; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Isn't the HTTPRequest
object unused? Why pack it into the signal, future extensions?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Right
// in Qt, use always the wallet with index 0 when running with multiple wallets | ||
QByteArray encodedName = QUrl::toPercentEncoding(QString::fromStdString(vpwallets[0]->GetName())); | ||
req.URI = "/wallet/"+std::string(encodedName.constData(), encodedName.length()); | ||
CWalletRef * const ppwallet = (CWalletRef*)ppwallet_v; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
looks like we should use a C++11 (shared?) pointer here to avoid the manual memory management.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Instead of the whole signal & gluing together the wallet and the RPC server, why not just refactor out GetWalletForJSONRPCRequest
and use the same logic here? Seems much more understandable and less code.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Tested, but will look the code. Works as expected.
There are some style issues that could be addressed here or in follow ups:
- combo and label in the toolbar use different style (font for instance) than the buttons;
- not sure if the right side is the best place in terms of UX;
- maybe it should be possible to select wallet from the menu bar (for instance, File -> Wallets -> w1);
- window titles could have the wallet name too;
- the combo in the console is a bit lost (this time is not in a toolbar);
- could show a message in the console when the wallet is changed.
@@ -45,8 +47,9 @@ class JSONRPCRequest | |||
bool fHelp; | |||
std::string URI; | |||
std::string authUser; | |||
CWallet *wallet; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do we want wallet here even an opaque pointer?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
? This is where it belongs..
I tested the debug console by switching wallets (including no wallet) and using I agree with @promag's suggestions and added a few below. I don't think any should block this PR, although some might simplify it. Maybe this is what you were saying, but I have a light preference for reducing UI clutter by removing the dropdowns and instead adding Wallet to the primary menu (between File and Settings). The application title would contain the name of the currently selected wallet, as you suggested. In the Wallet menu, the selected wallet would have a check box, and not be selectable. This has a couple of advantages:
I assume #10740 is needed before wallets can be added through the UI? I like @jonasschnelli's suggestion of allowing each wallet to have a name, so the file name can be inconspicuous. Same for clearly showing the wallet name on the send confirmation screen. I also like the idea of using color, although that can get ugly very quickly. In case anyone else was confused like me, this how you launch with multiple wallets: |
|
||
bool BitcoinGUI::multiWallet() const | ||
{ | ||
return (WalletSelector->count() > 1); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Using a UI element to count the number of wallets doesn't seem ideal.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think a better approach is to give QT access to std::vector<CWalletRef> vpwallets
or m_wallet_models
, and then when the dropdown box (re-)renders itself, it should query that.
That would also avoid passing walletModel instances around like in rpcConsole->addWallet(walletModel);
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Agree with @Sjors
@luke-jr friendly ping, rebase needed. |
As per IRC discussion removing this from high priority for review until review comments get addressed. |
I assume by parse, you mean fabricate...? The JSONRPCRequest only holds a pointer. This is a good design, unlike making up and then parsing strings internally. |
Yes. Since the rpcconsole does already fabricate artificial JSONRPCRequests. There is nothing wrong with that. If you want to avoid the artificial JSONRPCRquest creation, you would need to get rid of it completely. See my commit that...
It also makes this PR more compact (17 additions and 61 deletions.) The other thing that needs fixing is the passing around of pure pointers for |
Another tiny conceptual problem is that if one switches the wallet in the main window, it does not automatically switch in the console window (Not sure if it should, but if so, it can be address in a follow up PR). |
I fundamentally disagree with that approach. It is a poor design, and assumes the RPC layer and GUI share some common wallet name table. Perhaps they do for now, but it doesn't excuse the bad design. |
I rewrote this PR to avoid the pointer passing and the signal & wallet-server coupling: If I'm alone with my design concerns, then I'm fine dropping it. :) |
@jonasschnelli can you turn that into a PR so it's easier to provide line-by-line feedback? It seems |
In the "Sending addresses" and "Receiving addresses" dialogs, it's missing the wallet name. Not sure if the dialog title is the best place. |
wallet = walletModel->getWalletName(); | ||
} | ||
|
||
Q_EMIT incomingTransaction(date, walletModel->getOptionsModel()->getDisplayUnit(), amount, type, address, label, wallet); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why not remove the bitcoinGui
member and always send the wallet name?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
When not in multiwallet mode, this causes the "Wallet" line to be omitted from the notification popup.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Since only bitcoingui.cpp
listens to the incomingTransaction
signal, it could be added or not added there. IMO the signal emitter should not decide wether to show the wallet name or not.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
But there is no wallet name in single-wallet mode...
I really like to merge this,... but I would feel pretty uncomfortable to merge code where we unnecessary glue together the RPC/HTTP layer with the wallet as well as manual pointer memory management... this is something that should be fixed in the initial PR IMO rather the count for follow up PR. |
@jonasschnelli This only reduces/removes existing glue between the RPC/HTTP and wallet. It doesn't add any. The manual pointer management is unavoidable with Qt AFAIK, without resorting to worse, ugly hacks like passing it as a string (which will break as soon as we support wallet unloading). |
Are you referring to this PR? In this PR you are trying to add a
Right now, we do identify wallets in multiwallet by it's filename. IMO identifying wallets by it's name is currently superior to passing around |
Clarification: I'm only referring to the |
Indeed I am. This PR improves the situation by moving the wallet-handling logic out of the RPC/HTTP code, into the wallet-specific module. Having a reference to the wallet for the request, on the request is only reasonable. It is a shortcoming of C++ that it needs to be declared together with the rest of the request class. That could be avoided with a
Only for interfacing to HTTP, an inherently text-based protocol. It makes no sense to do so otherwise, and there are serious shortcomings to this approach. (You could very well end up with a multi-step RPC beginning with one wallet, and finishing in another loaded with the same name after the first was unloaded!)
This code doesn't do that. The only manual allocation is of a CWalletRef (that is, it is currently a pointer to a pointer). We could store the CWalletRef directly in place of it, but that would break when CWalletRef becomes a refcounting type. The only way to avoid this would be to find a way to teach QVariant to hold a CWalletRef directly. |
779c5f9 Qt: hide RPCConsole wallet selector when no wallets are present (Jonas Schnelli) dc6f150 Qt: show wallet name in request dlg in case of multiwallet (Jonas Schnelli) 4826ca4 Qt: show wallet name in send confirmation dlg in case of multiwallet (Jonas Schnelli) cfa4133 GUI: RPCConsole: Log wallet changes (Luke Dashjr) b6d04fc Qt: Get wallet name from WalletModel rather than passing it around (Luke Dashjr) 12d8d26 Qt: When multiple wallets are used, include in notifications the name (Jonas Schnelli) d1ec34a Qt: QComboBox::setVisible doesn't work in toolbars, so defer adding it at all until needed (Luke Dashjr) d49cc70 Qt: Add wallet selector to debug console (Jonas Schnelli) d558f44 Bugfix: RPC: Add missing UnregisterHTTPHandler for /wallet/ (Luke Dashjr) 85d5319 Qt: Ensure UI updates only come from the currently selected walletView (Luke Dashjr) e449f9a Qt: Add a combobox to toolbar to select from multiple wallets (Luke Dashjr) 3dba3c3 Qt: Load all wallets into WalletModels (Luke Dashjr) Pull request description: This is an overhaul of #11383 (plus some additions). It avoids unnecessary coupling of httpserver/jsonrpc and the wallet as well as it avoids pointer pure passing (and pointer deletion) of `CWallet` (plus other minor design changes). Additionally it adds the wallet name to the sendconfirmation and request dialog (in case multiwallet is active) Tree-SHA512: 3d06e18badbc5d1821e488bf1dae463bb0be544cf11b2b618e025812bfdd13c5f39604bb93b4c705313930e7dc4e66f4848b9469ba14871bade58e7a027246a1
Closing in favour of now merged #12610 |
779c5f9 Qt: hide RPCConsole wallet selector when no wallets are present (Jonas Schnelli) dc6f150 Qt: show wallet name in request dlg in case of multiwallet (Jonas Schnelli) 4826ca4 Qt: show wallet name in send confirmation dlg in case of multiwallet (Jonas Schnelli) cfa4133 GUI: RPCConsole: Log wallet changes (Luke Dashjr) b6d04fc Qt: Get wallet name from WalletModel rather than passing it around (Luke Dashjr) 12d8d26 Qt: When multiple wallets are used, include in notifications the name (Jonas Schnelli) d1ec34a Qt: QComboBox::setVisible doesn't work in toolbars, so defer adding it at all until needed (Luke Dashjr) d49cc70 Qt: Add wallet selector to debug console (Jonas Schnelli) d558f44 Bugfix: RPC: Add missing UnregisterHTTPHandler for /wallet/ (Luke Dashjr) 85d5319 Qt: Ensure UI updates only come from the currently selected walletView (Luke Dashjr) e449f9a Qt: Add a combobox to toolbar to select from multiple wallets (Luke Dashjr) 3dba3c3 Qt: Load all wallets into WalletModels (Luke Dashjr) Pull request description: This is an overhaul of bitcoin#11383 (plus some additions). It avoids unnecessary coupling of httpserver/jsonrpc and the wallet as well as it avoids pointer pure passing (and pointer deletion) of `CWallet` (plus other minor design changes). Additionally it adds the wallet name to the sendconfirmation and request dialog (in case multiwallet is active) Tree-SHA512: 3d06e18badbc5d1821e488bf1dae463bb0be544cf11b2b618e025812bfdd13c5f39604bb93b4c705313930e7dc4e66f4848b9469ba14871bade58e7a027246a1
779c5f9 Qt: hide RPCConsole wallet selector when no wallets are present (Jonas Schnelli) dc6f150 Qt: show wallet name in request dlg in case of multiwallet (Jonas Schnelli) 4826ca4 Qt: show wallet name in send confirmation dlg in case of multiwallet (Jonas Schnelli) cfa4133 GUI: RPCConsole: Log wallet changes (Luke Dashjr) b6d04fc Qt: Get wallet name from WalletModel rather than passing it around (Luke Dashjr) 12d8d26 Qt: When multiple wallets are used, include in notifications the name (Jonas Schnelli) d1ec34a Qt: QComboBox::setVisible doesn't work in toolbars, so defer adding it at all until needed (Luke Dashjr) d49cc70 Qt: Add wallet selector to debug console (Jonas Schnelli) d558f44 Bugfix: RPC: Add missing UnregisterHTTPHandler for /wallet/ (Luke Dashjr) 85d5319 Qt: Ensure UI updates only come from the currently selected walletView (Luke Dashjr) e449f9a Qt: Add a combobox to toolbar to select from multiple wallets (Luke Dashjr) 3dba3c3 Qt: Load all wallets into WalletModels (Luke Dashjr) Pull request description: This is an overhaul of bitcoin#11383 (plus some additions). It avoids unnecessary coupling of httpserver/jsonrpc and the wallet as well as it avoids pointer pure passing (and pointer deletion) of `CWallet` (plus other minor design changes). Additionally it adds the wallet name to the sendconfirmation and request dialog (in case multiwallet is active) Tree-SHA512: 3d06e18badbc5d1821e488bf1dae463bb0be544cf11b2b618e025812bfdd13c5f39604bb93b4c705313930e7dc4e66f4848b9469ba14871bade58e7a027246a1
779c5f9 Qt: hide RPCConsole wallet selector when no wallets are present (Jonas Schnelli) dc6f150 Qt: show wallet name in request dlg in case of multiwallet (Jonas Schnelli) 4826ca4 Qt: show wallet name in send confirmation dlg in case of multiwallet (Jonas Schnelli) cfa4133 GUI: RPCConsole: Log wallet changes (Luke Dashjr) b6d04fc Qt: Get wallet name from WalletModel rather than passing it around (Luke Dashjr) 12d8d26 Qt: When multiple wallets are used, include in notifications the name (Jonas Schnelli) d1ec34a Qt: QComboBox::setVisible doesn't work in toolbars, so defer adding it at all until needed (Luke Dashjr) d49cc70 Qt: Add wallet selector to debug console (Jonas Schnelli) d558f44 Bugfix: RPC: Add missing UnregisterHTTPHandler for /wallet/ (Luke Dashjr) 85d5319 Qt: Ensure UI updates only come from the currently selected walletView (Luke Dashjr) e449f9a Qt: Add a combobox to toolbar to select from multiple wallets (Luke Dashjr) 3dba3c3 Qt: Load all wallets into WalletModels (Luke Dashjr) Pull request description: This is an overhaul of bitcoin#11383 (plus some additions). It avoids unnecessary coupling of httpserver/jsonrpc and the wallet as well as it avoids pointer pure passing (and pointer deletion) of `CWallet` (plus other minor design changes). Additionally it adds the wallet name to the sendconfirmation and request dialog (in case multiwallet is active) Tree-SHA512: 3d06e18badbc5d1821e488bf1dae463bb0be544cf11b2b618e025812bfdd13c5f39604bb93b4c705313930e7dc4e66f4848b9469ba14871bade58e7a027246a1
779c5f9 Qt: hide RPCConsole wallet selector when no wallets are present (Jonas Schnelli) dc6f150 Qt: show wallet name in request dlg in case of multiwallet (Jonas Schnelli) 4826ca4 Qt: show wallet name in send confirmation dlg in case of multiwallet (Jonas Schnelli) cfa4133 GUI: RPCConsole: Log wallet changes (Luke Dashjr) b6d04fc Qt: Get wallet name from WalletModel rather than passing it around (Luke Dashjr) 12d8d26 Qt: When multiple wallets are used, include in notifications the name (Jonas Schnelli) d1ec34a Qt: QComboBox::setVisible doesn't work in toolbars, so defer adding it at all until needed (Luke Dashjr) d49cc70 Qt: Add wallet selector to debug console (Jonas Schnelli) d558f44 Bugfix: RPC: Add missing UnregisterHTTPHandler for /wallet/ (Luke Dashjr) 85d5319 Qt: Ensure UI updates only come from the currently selected walletView (Luke Dashjr) e449f9a Qt: Add a combobox to toolbar to select from multiple wallets (Luke Dashjr) 3dba3c3 Qt: Load all wallets into WalletModels (Luke Dashjr) Pull request description: This is an overhaul of bitcoin#11383 (plus some additions). It avoids unnecessary coupling of httpserver/jsonrpc and the wallet as well as it avoids pointer pure passing (and pointer deletion) of `CWallet` (plus other minor design changes). Additionally it adds the wallet name to the sendconfirmation and request dialog (in case multiwallet is active) Tree-SHA512: 3d06e18badbc5d1821e488bf1dae463bb0be544cf11b2b618e025812bfdd13c5f39604bb93b4c705313930e7dc4e66f4848b9469ba14871bade58e7a027246a1
779c5f9 Qt: hide RPCConsole wallet selector when no wallets are present (Jonas Schnelli) dc6f150 Qt: show wallet name in request dlg in case of multiwallet (Jonas Schnelli) 4826ca4 Qt: show wallet name in send confirmation dlg in case of multiwallet (Jonas Schnelli) cfa4133 GUI: RPCConsole: Log wallet changes (Luke Dashjr) b6d04fc Qt: Get wallet name from WalletModel rather than passing it around (Luke Dashjr) 12d8d26 Qt: When multiple wallets are used, include in notifications the name (Jonas Schnelli) d1ec34a Qt: QComboBox::setVisible doesn't work in toolbars, so defer adding it at all until needed (Luke Dashjr) d49cc70 Qt: Add wallet selector to debug console (Jonas Schnelli) d558f44 Bugfix: RPC: Add missing UnregisterHTTPHandler for /wallet/ (Luke Dashjr) 85d5319 Qt: Ensure UI updates only come from the currently selected walletView (Luke Dashjr) e449f9a Qt: Add a combobox to toolbar to select from multiple wallets (Luke Dashjr) 3dba3c3 Qt: Load all wallets into WalletModels (Luke Dashjr) Pull request description: This is an overhaul of bitcoin#11383 (plus some additions). It avoids unnecessary coupling of httpserver/jsonrpc and the wallet as well as it avoids pointer pure passing (and pointer deletion) of `CWallet` (plus other minor design changes). Additionally it adds the wallet name to the sendconfirmation and request dialog (in case multiwallet is active) Tree-SHA512: 3d06e18badbc5d1821e488bf1dae463bb0be544cf11b2b618e025812bfdd13c5f39604bb93b4c705313930e7dc4e66f4848b9469ba14871bade58e7a027246a1
This adds a combobox to the GUI main window and debug window to select the wallet being viewed/used.