diff --git a/interface/resources/images/redarrow.svg b/interface/resources/images/redarrow.svg
new file mode 100644
index 0000000000..156f4baa45
--- /dev/null
+++ b/interface/resources/images/redarrow.svg
@@ -0,0 +1,11 @@
+
+
+
diff --git a/interface/resources/images/redarrow_reversed.svg b/interface/resources/images/redarrow_reversed.svg
new file mode 100644
index 0000000000..99c72cadb0
--- /dev/null
+++ b/interface/resources/images/redarrow_reversed.svg
@@ -0,0 +1,11 @@
+
+
+
diff --git a/interface/resources/qml/AddressBarDialog.qml b/interface/resources/qml/AddressBarDialog.qml
index 70cb22dc4d..7531ee3d69 100644
--- a/interface/resources/qml/AddressBarDialog.qml
+++ b/interface/resources/qml/AddressBarDialog.qml
@@ -30,6 +30,7 @@ DialogContainer {
property int maximumX: parent ? parent.width - width : 0
property int maximumY: parent ? parent.height - height : 0
+
AddressBarDialog {
id: addressBarDialog
@@ -48,8 +49,7 @@ DialogContainer {
Image {
id: backArrow
- source: "../images/left-arrow.svg"
- scale: 0.9
+ source: addressBarDialog.backEnabled ? "../images/left-arrow.svg" : "../images/redarrow_reversed.svg"
anchors {
fill: parent
@@ -71,7 +71,7 @@ DialogContainer {
Image {
id: forwardArrow
- source: "../images/darkgreyarrow.svg"
+ source: addressBarDialog.forwardEnabled ? "../images/darkgreyarrow.svg" : "../images/redarrow.svg"
anchors {
fill: parent
@@ -127,6 +127,7 @@ DialogContainer {
}
}
+ // Add this code to make text bar draggable
/*
MouseArea {
// Drag the input rectangle
diff --git a/interface/src/ui/AddressBarDialog.cpp b/interface/src/ui/AddressBarDialog.cpp
index 80f51ff906..5d27af444a 100644
--- a/interface/src/ui/AddressBarDialog.cpp
+++ b/interface/src/ui/AddressBarDialog.cpp
@@ -22,6 +22,20 @@ AddressBarDialog::AddressBarDialog(QQuickItem* parent) : OffscreenQmlDialog(pare
connect(addressManager.data(), &AddressManager::lookupResultIsOffline, this, &AddressBarDialog::displayAddressOfflineMessage);
connect(addressManager.data(), &AddressManager::lookupResultIsNotFound, this, &AddressBarDialog::displayAddressNotFoundMessage);
connect(addressManager.data(), &AddressManager::lookupResultsFinished, this, &AddressBarDialog::hide);
+ connect(addressManager.data(), &AddressManager::goBackPossible, this, [this] (bool isPossible) {
+ if (isPossible != _backEnabled) {
+ _backEnabled = isPossible;
+ emit backEnabledChanged();
+ }
+ });
+ connect(addressManager.data(), &AddressManager::goForwardPossible, this, [this] (bool isPossible) {
+ if (isPossible != _forwardEnabled) {
+ _forwardEnabled = isPossible;
+ emit forwardEnabledChanged();
+ }
+ });
+ _backEnabled = !(DependencyManager::get()->getBackStack().isEmpty());
+ _forwardEnabled = !(DependencyManager::get()->getForwardStack().isEmpty());
}
void AddressBarDialog::hide() {
diff --git a/interface/src/ui/AddressBarDialog.h b/interface/src/ui/AddressBarDialog.h
index da54e29929..e0be8aa3fb 100644
--- a/interface/src/ui/AddressBarDialog.h
+++ b/interface/src/ui/AddressBarDialog.h
@@ -18,9 +18,17 @@ class AddressBarDialog : public OffscreenQmlDialog
{
Q_OBJECT
HIFI_QML_DECL
+ Q_PROPERTY(bool backEnabled READ backEnabled NOTIFY backEnabledChanged)
+ Q_PROPERTY(bool forwardEnabled READ forwardEnabled NOTIFY forwardEnabledChanged)
public:
AddressBarDialog(QQuickItem* parent = nullptr);
+ bool backEnabled() { return _backEnabled; }
+ bool forwardEnabled() { return _forwardEnabled; }
+
+signals:
+ void backEnabledChanged();
+ void forwardEnabledChanged();
protected:
void displayAddressOfflineMessage();
@@ -30,6 +38,9 @@ protected:
Q_INVOKABLE void loadAddress(const QString& address);
Q_INVOKABLE void loadBack();
Q_INVOKABLE void loadForward();
+
+ bool _backEnabled;
+ bool _forwardEnabled;
};
#endif
diff --git a/libraries/networking/src/AddressManager.h b/libraries/networking/src/AddressManager.h
index b4c34176a4..6d9ff01be2 100644
--- a/libraries/networking/src/AddressManager.h
+++ b/libraries/networking/src/AddressManager.h
@@ -62,6 +62,9 @@ public:
void loadSettings(const QString& lookupString = QString());
+ const QStack& getBackStack() const { return _backStack; }
+ const QStack& getForwardStack() const { return _forwardStack; }
+
public slots:
void handleLookupString(const QString& lookupString);