mirror of
https://github.com/dashpay/dash.git
synced 2024-12-25 03:52:49 +01:00
Merge pull request #4565 from kittywhiskers/auxports19
merge bitcoin#15474...#16774: miscellaneous backports
This commit is contained in:
commit
ee34678d94
4
.gitignore
vendored
4
.gitignore
vendored
@ -151,3 +151,7 @@ cmake-build-debug
|
||||
|
||||
# clang-check
|
||||
*.plist
|
||||
|
||||
osx_volname
|
||||
dist/
|
||||
*.background.tiff
|
||||
|
@ -304,3 +304,4 @@ clean-docs:
|
||||
clean-local: clean-docs
|
||||
rm -rf coverage_percent.txt test_dash.coverage/ total.coverage/ test/tmp/ cache/ $(OSX_APP)
|
||||
rm -rf test/functional/__pycache__ test/functional/test_framework/__pycache__ test/cache share/rpcauth/__pycache__
|
||||
rm -rf osx_volname dist/ dpi36.background.tiff dpi72.background.tiff
|
||||
|
@ -606,8 +606,15 @@ void openConfigfile()
|
||||
fs::path pathConfig = GetConfigFile(gArgs.GetArg("-conf", BITCOIN_CONF_FILENAME));
|
||||
|
||||
/* Open dash.conf with the associated application */
|
||||
if (fs::exists(pathConfig))
|
||||
QDesktopServices::openUrl(QUrl::fromLocalFile(boostPathToQString(pathConfig)));
|
||||
if (fs::exists(pathConfig)) {
|
||||
// Workaround for macOS-specific behavior; see #15409.
|
||||
if (!QDesktopServices::openUrl(QUrl::fromLocalFile(boostPathToQString(pathConfig)))) {
|
||||
#ifdef Q_OS_MAC
|
||||
QProcess::startDetached("/usr/bin/open", QStringList{"-t", boostPathToQString(pathConfig)});
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void showBackups()
|
||||
|
@ -221,7 +221,7 @@ void ReceiveCoinsDialog::copyColumnToClipboard(int column)
|
||||
if (!firstIndex.isValid()) {
|
||||
return;
|
||||
}
|
||||
GUIUtil::setClipboard(model->getRecentRequestsTableModel()->data(firstIndex.child(firstIndex.row(), column), Qt::EditRole).toString());
|
||||
GUIUtil::setClipboard(model->getRecentRequestsTableModel()->index(firstIndex.row(), column).data(Qt::EditRole).toString());
|
||||
}
|
||||
|
||||
// context menu
|
||||
|
@ -68,7 +68,7 @@ public:
|
||||
QVariant data(const QModelIndex &index, int role) const override;
|
||||
bool setData(const QModelIndex &index, const QVariant &value, int role) override;
|
||||
QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
|
||||
QModelIndex index(int row, int column, const QModelIndex &parent) const override;
|
||||
QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override;
|
||||
bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) override;
|
||||
Qt::ItemFlags flags(const QModelIndex &index) const override;
|
||||
/*@}*/
|
||||
|
@ -40,7 +40,6 @@
|
||||
#include <QMessageBox>
|
||||
#include <QScrollBar>
|
||||
#include <QSettings>
|
||||
#include <QSignalMapper>
|
||||
#include <QTime>
|
||||
#include <QTimer>
|
||||
#include <QStringList>
|
||||
@ -651,19 +650,10 @@ void RPCConsole::setClientModel(ClientModel *model)
|
||||
peersTableContextMenu->addAction(banAction7d);
|
||||
peersTableContextMenu->addAction(banAction365d);
|
||||
|
||||
// Add a signal mapping to allow dynamic context menu arguments.
|
||||
// We need to use int (instead of int64_t), because signal mapper only supports
|
||||
// int or objects, which is okay because max bantime (1 year) is < int_max.
|
||||
QSignalMapper* signalMapper = new QSignalMapper(this);
|
||||
signalMapper->setMapping(banAction1h, 60*60);
|
||||
signalMapper->setMapping(banAction24h, 60*60*24);
|
||||
signalMapper->setMapping(banAction7d, 60*60*24*7);
|
||||
signalMapper->setMapping(banAction365d, 60*60*24*365);
|
||||
connect(banAction1h, &QAction::triggered, signalMapper, static_cast<void (QSignalMapper::*)()>(&QSignalMapper::map));
|
||||
connect(banAction24h, &QAction::triggered, signalMapper, static_cast<void (QSignalMapper::*)()>(&QSignalMapper::map));
|
||||
connect(banAction7d, &QAction::triggered, signalMapper, static_cast<void (QSignalMapper::*)()>(&QSignalMapper::map));
|
||||
connect(banAction365d, &QAction::triggered, signalMapper, static_cast<void (QSignalMapper::*)()>(&QSignalMapper::map));
|
||||
connect(signalMapper, static_cast<void (QSignalMapper::*)(int)>(&QSignalMapper::mapped), this, &RPCConsole::banSelectedNode);
|
||||
connect(banAction1h, &QAction::triggered, [this] { banSelectedNode(60 * 60); });
|
||||
connect(banAction24h, &QAction::triggered, [this] { banSelectedNode(60 * 60 * 24); });
|
||||
connect(banAction7d, &QAction::triggered, [this] { banSelectedNode(60 * 60 * 24 * 7); });
|
||||
connect(banAction365d, &QAction::triggered, [this] { banSelectedNode(60 * 60 * 24 * 365); });
|
||||
|
||||
// peer table context menu signals
|
||||
connect(ui->peerWidget, &QTableView::customContextMenuRequested, this, &RPCConsole::showPeersTableContextMenu);
|
||||
|
@ -125,6 +125,7 @@ void TrafficGraphWidget::paintEvent(QPaintEvent *)
|
||||
const TrafficGraphData::SampleQueue& queue = trafficGraphData.getCurrentRangeQueueWithAverageBandwidth();
|
||||
|
||||
if(!queue.empty()) {
|
||||
painter.setRenderHint(QPainter::Antialiasing);
|
||||
QPainterPath pIn;
|
||||
QColor lucentGreen = green;
|
||||
lucentGreen.setAlpha(128);
|
||||
@ -142,6 +143,7 @@ void TrafficGraphWidget::paintEvent(QPaintEvent *)
|
||||
painter.fillPath(pOut, lucentRed);
|
||||
painter.setPen(red);
|
||||
painter.drawPath(pOut);
|
||||
painter.setRenderHint(QPainter::Antialiasing, false);
|
||||
}
|
||||
|
||||
// draw text
|
||||
|
@ -33,7 +33,6 @@
|
||||
#include <QPoint>
|
||||
#include <QScrollBar>
|
||||
#include <QSettings>
|
||||
#include <QSignalMapper>
|
||||
#include <QTableView>
|
||||
#include <QTextCharFormat>
|
||||
#include <QTimer>
|
||||
@ -173,11 +172,6 @@ transactionView(nullptr), abandonAction(nullptr), columnResizingFixer(nullptr)
|
||||
contextMenu->addAction(abandonAction);
|
||||
contextMenu->addAction(editLabelAction);
|
||||
|
||||
mapperThirdPartyTxUrls = new QSignalMapper(this);
|
||||
|
||||
// Connect actions
|
||||
connect(mapperThirdPartyTxUrls, static_cast<void (QSignalMapper::*)(const QString&)>(&QSignalMapper::mapped), this, &TransactionView::openThirdPartyTxUrl);
|
||||
|
||||
connect(dateWidget, static_cast<void (QComboBox::*)(int)>(&QComboBox::activated), this, &TransactionView::chooseDate);
|
||||
connect(typeWidget, static_cast<void (QComboBox::*)(int)>(&QComboBox::activated), this, &TransactionView::chooseType);
|
||||
connect(watchOnlyWidget, static_cast<void (QComboBox::*)(int)>(&QComboBox::activated), this, &TransactionView::chooseWatchonly);
|
||||
@ -244,15 +238,15 @@ void TransactionView::setModel(WalletModel *_model)
|
||||
QStringList listUrls = _model->getOptionsModel()->getThirdPartyTxUrls().split("|", QString::SkipEmptyParts);
|
||||
for (int i = 0; i < listUrls.size(); ++i)
|
||||
{
|
||||
QString host = QUrl(listUrls[i].trimmed(), QUrl::StrictMode).host();
|
||||
QString url = listUrls[i].trimmed();
|
||||
QString host = QUrl(url, QUrl::StrictMode).host();
|
||||
if (!host.isEmpty())
|
||||
{
|
||||
QAction *thirdPartyTxUrlAction = new QAction(host, this); // use host as menu item label
|
||||
if (i == 0)
|
||||
contextMenu->addSeparator();
|
||||
contextMenu->addAction(thirdPartyTxUrlAction);
|
||||
connect(thirdPartyTxUrlAction, &QAction::triggered, mapperThirdPartyTxUrls, static_cast<void (QSignalMapper::*)()>(&QSignalMapper::map));
|
||||
mapperThirdPartyTxUrls->setMapping(thirdPartyTxUrlAction, listUrls[i].trimmed());
|
||||
connect(thirdPartyTxUrlAction, &QAction::triggered, [this, url] { openThirdPartyTxUrl(url); });
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -23,7 +23,6 @@ class QItemSelectionModel;
|
||||
class QLineEdit;
|
||||
class QMenu;
|
||||
class QModelIndex;
|
||||
class QSignalMapper;
|
||||
class QTableView;
|
||||
QT_END_NAMESPACE
|
||||
|
||||
@ -71,7 +70,6 @@ private:
|
||||
QLineEdit *amountWidget;
|
||||
|
||||
QMenu *contextMenu;
|
||||
QSignalMapper *mapperThirdPartyTxUrls;
|
||||
|
||||
QFrame *dateRangeWidget;
|
||||
QDateTimeEdit *dateFrom;
|
||||
|
@ -1680,6 +1680,8 @@ static UniValue getchaintips(const JSONRPCRequest& request)
|
||||
|
||||
UniValue MempoolInfoToJSON(const CTxMemPool& pool)
|
||||
{
|
||||
// Make sure this call is atomic in the pool.
|
||||
LOCK(pool.cs);
|
||||
UniValue ret(UniValue::VOBJ);
|
||||
ret.pushKV("size", (int64_t)pool.size());
|
||||
ret.pushKV("bytes", (int64_t)pool.GetTotalTxSize());
|
||||
|
@ -381,8 +381,8 @@ UniValue deriveaddresses(const JSONRPCRequest& request)
|
||||
}
|
||||
}
|
||||
|
||||
FlatSigningProvider provider;
|
||||
auto desc = Parse(desc_str, provider, /* require_checksum = */ true);
|
||||
FlatSigningProvider key_provider;
|
||||
auto desc = Parse(desc_str, key_provider, /* require_checksum = */ true);
|
||||
if (!desc) {
|
||||
throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, strprintf("Invalid descriptor"));
|
||||
}
|
||||
@ -398,8 +398,9 @@ UniValue deriveaddresses(const JSONRPCRequest& request)
|
||||
UniValue addresses(UniValue::VARR);
|
||||
|
||||
for (int i = range_begin; i <= range_end; ++i) {
|
||||
FlatSigningProvider provider;
|
||||
std::vector<CScript> scripts;
|
||||
if (!desc->Expand(i, provider, scripts, provider)) {
|
||||
if (!desc->Expand(i, key_provider, scripts, provider)) {
|
||||
throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, strprintf("Cannot derive script without private keys"));
|
||||
}
|
||||
|
||||
|
@ -86,10 +86,14 @@ class TestNode():
|
||||
# Note that common args are set in the config file (see initialize_datadir)
|
||||
self.extra_args = extra_args
|
||||
self.extra_args_from_options = extra_args_from_options
|
||||
# Configuration for logging is set as command-line args rather than in the bitcoin.conf file.
|
||||
# This means that starting a bitcoind using the temp dir to debug a failed test won't
|
||||
# spam debug.log.
|
||||
self.args = [
|
||||
self.binary,
|
||||
"-datadir=" + self.datadir,
|
||||
"-logtimemicros",
|
||||
"-logthreadnames",
|
||||
"-debug",
|
||||
"-debugexclude=libevent",
|
||||
"-debugexclude=leveldb",
|
||||
|
Loading…
Reference in New Issue
Block a user