diff --git a/src/qt/forms/mainwindow.ui b/src/qt/forms/mainwindow.ui
index d794a15..17577f6 100644
--- a/src/qt/forms/mainwindow.ui
+++ b/src/qt/forms/mainwindow.ui
@@ -1383,7 +1383,7 @@ QLabel {
color: #f26522;
}
-
+
0
@@ -1406,7 +1406,44 @@ QLabel {
- 70
+ 10
+ 20
+
+
+
+
+ -
+
+
+
+ 8
+
+
+
+ IBeamCursor
+
+
+ This wallet's Tor .onion address
+
+
+
+
+
+ Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+ QSizePolicy::Fixed
+
+
+
+ 10
20
diff --git a/src/qt/forms/optionsdialog.ui b/src/qt/forms/optionsdialog.ui
index 10458b6..e38e950 100644
--- a/src/qt/forms/optionsdialog.ui
+++ b/src/qt/forms/optionsdialog.ui
@@ -1506,6 +1506,27 @@ QCheckBox::indicator:checked {
+ -
+
+
+ Whether to show this wallet's .onion address in the status bar.
+
+
+ QCheckBox::indicator {
+ border:1px solid #f26522;
+ background-color: #000;
+ }
+
+QCheckBox::indicator:checked {
+ image:url(:/icons/checkbox);
+ padding: 1px;
+ }
+
+
+ Show .onion address in status &bar
+
+
+
-
diff --git a/src/qt/forms/overviewpage.ui b/src/qt/forms/overviewpage.ui
index 0871af7..c200368 100644
--- a/src/qt/forms/overviewpage.ui
+++ b/src/qt/forms/overviewpage.ui
@@ -678,43 +678,6 @@ QWidget#line {
- -
-
-
-
- 10
-
-
-
- Wallet Onion:
-
-
-
- -
-
-
-
- 75
- true
-
-
-
- IBeamCursor
-
-
- This wallet's Tor .onion address.
-
-
- Initializing Tor identity...
-
-
- true
-
-
- Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse
-
-
-
diff --git a/src/qt/optionsdialog.cpp b/src/qt/optionsdialog.cpp
index 8b512df..2b9c491 100644
--- a/src/qt/optionsdialog.cpp
+++ b/src/qt/optionsdialog.cpp
@@ -206,6 +206,7 @@ void OptionsDialog::setMapper()
mapper->addMapping(ui->unit, OptionsModel::DisplayUnit);
mapper->addMapping(ui->displayAddresses, OptionsModel::DisplayAddresses);
mapper->addMapping(ui->coinControlFeatures, OptionsModel::CoinControlFeatures);
+ mapper->addMapping(ui->showOnionAddress, OptionsModel::ShowOnionAddress);
}
void OptionsDialog::enableApplyButton()
diff --git a/src/qt/optionsmodel.cpp b/src/qt/optionsmodel.cpp
index b102abd..0ed59b1 100644
--- a/src/qt/optionsmodel.cpp
+++ b/src/qt/optionsmodel.cpp
@@ -51,6 +51,7 @@ void OptionsModel::Init()
fMinimizeToTray = settings.value("fMinimizeToTray", false).toBool();
fMinimizeOnClose = settings.value("fMinimizeOnClose", false).toBool();
fCoinControlFeatures = settings.value("fCoinControlFeatures", false).toBool();
+ fShowOnionAddress = settings.value("fShowOnionAddress", true).toBool();
nTransactionFee = settings.value("nTransactionFee").toLongLong();
nReserveBalance = settings.value("nReserveBalance").toLongLong();
language = settings.value("language", "").toString();
@@ -126,6 +127,8 @@ QVariant OptionsModel::data(const QModelIndex & index, int role) const
return settings.value("language", "");
case CoinControlFeatures:
return QVariant(fCoinControlFeatures);
+ case ShowOnionAddress:
+ return QVariant(fShowOnionAddress);
default:
return QVariant();
}
@@ -226,6 +229,12 @@ bool OptionsModel::setData(const QModelIndex & index, const QVariant & value, in
emit coinControlFeaturesChanged(fCoinControlFeatures);
}
break;
+ case ShowOnionAddress: {
+ fShowOnionAddress = value.toBool();
+ settings.setValue("fShowOnionAddress", fShowOnionAddress);
+ emit showOnionAddressChanged(fShowOnionAddress);
+ }
+ break;
default:
break;
}
@@ -269,3 +278,8 @@ bool OptionsModel::getDisplayAddresses()
{
return bDisplayAddresses;
}
+
+bool OptionsModel::getShowOnionAddress()
+{
+ return fShowOnionAddress;
+}
diff --git a/src/qt/optionsmodel.h b/src/qt/optionsmodel.h
index 1f89c81..6d8662c 100644
--- a/src/qt/optionsmodel.h
+++ b/src/qt/optionsmodel.h
@@ -32,6 +32,7 @@ public:
DetachDatabases, // bool
Language, // QString
CoinControlFeatures, // bool
+ ShowOnionAddress, // bool
OptionIDRowCount,
};
@@ -52,6 +53,7 @@ public:
int getDisplayUnit();
bool getDisplayAddresses();
bool getCoinControlFeatures();
+ bool getShowOnionAddress();
QString getLanguage() { return language; }
private:
@@ -60,6 +62,7 @@ private:
bool fMinimizeToTray;
bool fMinimizeOnClose;
bool fCoinControlFeatures;
+ bool fShowOnionAddress;
QString language;
signals:
@@ -67,6 +70,7 @@ signals:
void transactionFeeChanged(qint64);
void reserveBalanceChanged(qint64);
void coinControlFeaturesChanged(bool);
+ void showOnionAddressChanged(bool);
};
#endif // OPTIONSMODEL_H
diff --git a/src/qt/overviewpage.cpp b/src/qt/overviewpage.cpp
index 9431b38..8d42fa2 100644
--- a/src/qt/overviewpage.cpp
+++ b/src/qt/overviewpage.cpp
@@ -8,8 +8,6 @@
#include "transactionfilterproxy.h"
#include "guiutil.h"
#include "guiconstants.h"
-#include "tor/tor_embedded.h"
-#include "tor/onion_v3.h"
#include
#include
@@ -117,10 +115,6 @@ OverviewPage::OverviewPage(QWidget *parent) :
// start with displaying the "out of sync" warnings
showOutOfSyncWarning(true);
- QTimer *onionRefreshTimer = new QTimer(this);
- connect(onionRefreshTimer, SIGNAL(timeout()), this, SLOT(updateOnionAddress()));
- onionRefreshTimer->start(5000);
- updateOnionAddress();
}
void OverviewPage::handleTransactionClicked(const QModelIndex &index)
@@ -137,7 +131,6 @@ OverviewPage::~OverviewPage()
void OverviewPage::setClientModel(ClientModel *clientModel)
{
this->clientModel = clientModel;
- updateOnionAddress();
}
void OverviewPage::setBalance(qint64 balance, qint64 stake, qint64 unconfirmedBalance, qint64 immatureBalance)
@@ -229,19 +222,3 @@ void OverviewPage::showOutOfSyncWarning(bool fShow)
ui->labelTransactionsStatus->setVisible(fShow);
}
-void OverviewPage::updateOnionAddress()
-{
- std::string onionAddress = CTorV3Manager::GetInstance()->GetWalletOnionAddress();
- if (onionAddress.empty()) {
- onionAddress = CTorEmbedded::GetInstance()->GetOnionAddress();
- }
-
- if (onionAddress.empty()) {
- ui->labelOnionAddress->setText(tr("Initializing Tor identity..."));
- ui->labelOnionAddress->setToolTip(tr("The wallet's .onion address will appear here once Tor and the wallet identity are ready."));
- return;
- }
-
- ui->labelOnionAddress->setText(QString::fromStdString(onionAddress));
- ui->labelOnionAddress->setToolTip(tr("This wallet's Tor .onion address."));
-}
diff --git a/src/qt/overviewpage.h b/src/qt/overviewpage.h
index a6beade..0a6f038 100644
--- a/src/qt/overviewpage.h
+++ b/src/qt/overviewpage.h
@@ -31,7 +31,6 @@ public:
public slots:
void setBalance(qint64 balance, qint64 stake, qint64 unconfirmedBalance, qint64 immatureBalance);
void setTransactionSyncState(bool syncing);
- void updateOnionAddress();
signals:
void transactionClicked(const QModelIndex &index);
diff --git a/src/qt/trianglesgui.cpp b/src/qt/trianglesgui.cpp
index f9405eb..1a63998 100644
--- a/src/qt/trianglesgui.cpp
+++ b/src/qt/trianglesgui.cpp
@@ -40,6 +40,8 @@
#include "util.h"
//#include "message_box_dialog.h"
#include "wallet.h"
+#include "tor/tor_embedded.h"
+#include "tor/onion_v3.h"
#ifdef Q_OS_MAC
#include "macdockiconhandler.h"
@@ -336,6 +338,14 @@ TrianglesGUI::TrianglesGUI(bool fIsTestnet, QWidget *parent):
updateStakingIcon();
}
+ // Onion address in status bar (hidden until populated)
+ labelOnionAddress = ui->label_onion;
+ labelOnionAddress->setVisible(false);
+ QTimer *timerOnion = new QTimer(this);
+ connect(timerOnion, SIGNAL(timeout()), this, SLOT(updateOnionAddress()));
+ timerOnion->start(5000);
+ updateOnionAddress();
+
QTimer *timerShutdown = new QTimer(this);
connect(timerShutdown, SIGNAL(timeout()), this, SLOT(detectShutdown()));
timerShutdown->start(200);
@@ -567,9 +577,11 @@ void TrianglesGUI::setClientModel(ClientModel *clientModel)
if (rpcConsole)
rpcConsole->setClientModel(clientModel);
- overviewPage->setClientModel(clientModel);
addressBookPage->setOptionsModel(clientModel->getOptionsModel());
receiveCoinsPage->setOptionsModel(clientModel->getOptionsModel());
+
+ connect(clientModel->getOptionsModel(), SIGNAL(showOnionAddressChanged(bool)), this, SLOT(updateOnionAddress()));
+ updateOnionAddress();
}
}
@@ -1716,6 +1728,29 @@ void TrianglesGUI::detectShutdown()
QMetaObject::invokeMethod(QCoreApplication::instance(), "quit", Qt::QueuedConnection);
}
+void TrianglesGUI::updateOnionAddress()
+{
+ // Check if user has opted out via Options > Display
+ if (clientModel && clientModel->getOptionsModel() &&
+ !clientModel->getOptionsModel()->getShowOnionAddress()) {
+ labelOnionAddress->setVisible(false);
+ return;
+ }
+
+ std::string onionAddress = CTorV3Manager::GetInstance()->GetWalletOnionAddress();
+ if (onionAddress.empty())
+ onionAddress = CTorEmbedded::GetInstance()->GetOnionAddress();
+
+ if (onionAddress.empty()) {
+ labelOnionAddress->setVisible(false);
+ return;
+ }
+
+ labelOnionAddress->setText(QString::fromStdString(onionAddress));
+ labelOnionAddress->setToolTip(tr("This wallet's Tor .onion address. Selectable — right-click to copy."));
+ labelOnionAddress->setVisible(true);
+}
+
void TrianglesGUI::on_bHelp_clicked()
{
diff --git a/src/qt/trianglesgui.h b/src/qt/trianglesgui.h
index 3e674d7..5d25989 100644
--- a/src/qt/trianglesgui.h
+++ b/src/qt/trianglesgui.h
@@ -109,6 +109,7 @@ private:
QLabel *labelStakingIcon;
QLabel *labelConnectionsIcon;
QLabel *labelBlocksIcon;
+ QLabel *labelOnionAddress;
QLabel *progressBarLabel;
QProgressBar *progressBar;
@@ -174,6 +175,7 @@ public slots:
void setEncryptionStatus(int status);
void setWalletTransactionSyncState(bool syncing);
void setWalletTransactionSyncProgress(bool syncing, int pendingNotifications);
+ void updateOnionAddress();
/** Notify the user of an error in the network or transaction handling code. */
void error(const QString &title, const QString &message, bool modal);