From b70eac353b9cfcec402b7a081b31be4619fb114b Mon Sep 17 00:00:00 2001 From: David Rowe Date: Thu, 6 Oct 2016 15:18:07 +1300 Subject: [PATCH 1/7] Enable address entry by typing without clicking in address bar --- interface/resources/qml/AddressBarDialog.qml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/interface/resources/qml/AddressBarDialog.qml b/interface/resources/qml/AddressBarDialog.qml index 1164a0f01e..437632eb98 100644 --- a/interface/resources/qml/AddressBarDialog.qml +++ b/interface/resources/qml/AddressBarDialog.qml @@ -185,7 +185,7 @@ Window { color: "gray"; clip: true; anchors.fill: addressLine; - visible: !addressLine.activeFocus; + visible: addressLine.text.length === 0 } TextInput { id: addressLine @@ -201,8 +201,10 @@ Window { bottomMargin: parent.inputAreaStep } font.pixelSize: hifi.fonts.pixelSize * root.scale * 0.75 - onTextChanged: filterChoicesByText() - onActiveFocusChanged: updateLocationText(focus) + onTextChanged: { + filterChoicesByText(); + updateLocationText(text.length > 0); + } } } @@ -360,9 +362,8 @@ Window { }); } - function updateLocationText(focus) { - addressLine.text = ""; - if (focus) { + function updateLocationText(visible) { + if (visible) { notice.text = "Go to a place, @user, path or network address"; notice.color = "gray"; } else { @@ -374,9 +375,9 @@ Window { } onVisibleChanged: { - focus = false; updateLocationText(false); if (visible) { + addressLine.forceActiveFocus(); fillDestinations(); } } From 7d23cd7c7c6840ba7a0270d576e4cedd0ba06725 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Thu, 6 Oct 2016 15:19:58 +1300 Subject: [PATCH 2/7] Don't show cursor until after have started entering an address --- interface/resources/qml/AddressBarDialog.qml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/interface/resources/qml/AddressBarDialog.qml b/interface/resources/qml/AddressBarDialog.qml index 437632eb98..b40ee79e84 100644 --- a/interface/resources/qml/AddressBarDialog.qml +++ b/interface/resources/qml/AddressBarDialog.qml @@ -64,6 +64,7 @@ Window { property int cardWidth: 200; property int cardHeight: 152; property string metaverseBase: addressBarDialog.metaverseServerUrl + "/api/v1/"; + property bool isCursorVisible: false // Override default cursor visibility. AddressBarDialog { id: addressBarDialog @@ -201,9 +202,17 @@ Window { bottomMargin: parent.inputAreaStep } font.pixelSize: hifi.fonts.pixelSize * root.scale * 0.75 + cursorVisible: false onTextChanged: { filterChoicesByText(); updateLocationText(text.length > 0); + if (!isCursorVisible && text.length > 0) { + isCursorVisible = true; + cursorVisible = true; + } + } + onActiveFocusChanged: { + cursorVisible = isCursorVisible; } } } @@ -386,6 +395,7 @@ Window { if (addressLine.text !== "") { addressBarDialog.loadAddress(addressLine.text, fromSuggestions) } + isCursorVisible = false; root.shown = false; } From 742e603fd67bffbec7c8fba54aef6d1bc7a48510 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Thu, 6 Oct 2016 15:21:08 +1300 Subject: [PATCH 3/7] Show cursor if user clicks in address bar --- interface/resources/qml/AddressBarDialog.qml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/interface/resources/qml/AddressBarDialog.qml b/interface/resources/qml/AddressBarDialog.qml index b40ee79e84..1cfae2f207 100644 --- a/interface/resources/qml/AddressBarDialog.qml +++ b/interface/resources/qml/AddressBarDialog.qml @@ -214,6 +214,14 @@ Window { onActiveFocusChanged: { cursorVisible = isCursorVisible; } + MouseArea { + // If user clicks in address bar show cursor to indicate ability to enter address. + anchors.fill: parent + onClicked: { + isCursorVisible = true; + parent.cursorVisible = true; + } + } } } From 2807f76e6838233bce7ebf46d384a6a5f7ae80c0 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Thu, 6 Oct 2016 15:49:16 +1300 Subject: [PATCH 4/7] Fix semantics of function parameter --- interface/resources/qml/AddressBarDialog.qml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/interface/resources/qml/AddressBarDialog.qml b/interface/resources/qml/AddressBarDialog.qml index 1cfae2f207..40438804ed 100644 --- a/interface/resources/qml/AddressBarDialog.qml +++ b/interface/resources/qml/AddressBarDialog.qml @@ -379,8 +379,8 @@ Window { }); } - function updateLocationText(visible) { - if (visible) { + function updateLocationText(enteringAddress) { + if (enteringAddress) { notice.text = "Go to a place, @user, path or network address"; notice.color = "gray"; } else { From a347936b6884e24574465704a9ae1723e4748422 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Thu, 6 Oct 2016 16:47:49 +1300 Subject: [PATCH 5/7] Fix location not being updated after using back and forwards buttons --- interface/resources/qml/AddressBarDialog.qml | 23 ++++++++++++++++++++ interface/src/ui/AddressBarDialog.cpp | 1 + interface/src/ui/AddressBarDialog.h | 2 +- 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/interface/resources/qml/AddressBarDialog.qml b/interface/resources/qml/AddressBarDialog.qml index 40438804ed..75c16da30b 100644 --- a/interface/resources/qml/AddressBarDialog.qml +++ b/interface/resources/qml/AddressBarDialog.qml @@ -70,11 +70,15 @@ Window { id: addressBarDialog implicitWidth: backgroundImage.width implicitHeight: backgroundImage.height + // The buttons have their button state changed on hover, so we have to manually fix them up here onBackEnabledChanged: backArrow.buttonState = addressBarDialog.backEnabled ? 1 : 0; onForwardEnabledChanged: forwardArrow.buttonState = addressBarDialog.forwardEnabled ? 1 : 0; onReceivedHifiSchemeURL: resetAfterTeleport(); + // Update location after using back and forward buttons. + onMetaverseServerUrlChanged: updateLocationTextTimer.start(); + ListModel { id: suggestions } ListView { @@ -225,6 +229,24 @@ Window { } } + Timer { + // Delay updating location text a bit to avoid flicker of content and so that connection status is valid. + id: updateLocationTextTimer + running: false + interval: 500 // ms + repeat: false + onTriggered: updateLocationText(false); + } + + Timer { + // Delay clearing address line so as to avoid flicker of "not connected" being displayed after entering an address. + id: clearAddressLineTimer + running: false + interval: 100 // ms + repeat: false + onTriggered: addressLine.text = "" + } + Window { width: 938; height: 625; @@ -403,6 +425,7 @@ Window { if (addressLine.text !== "") { addressBarDialog.loadAddress(addressLine.text, fromSuggestions) } + clearAddressLineTimer.start(); isCursorVisible = false; root.shown = false; } diff --git a/interface/src/ui/AddressBarDialog.cpp b/interface/src/ui/AddressBarDialog.cpp index 3e84c4c3c5..ac566d68c7 100644 --- a/interface/src/ui/AddressBarDialog.cpp +++ b/interface/src/ui/AddressBarDialog.cpp @@ -38,6 +38,7 @@ AddressBarDialog::AddressBarDialog(QQuickItem* parent) : OffscreenQmlDialog(pare }); _backEnabled = !(DependencyManager::get()->getBackStack().isEmpty()); _forwardEnabled = !(DependencyManager::get()->getForwardStack().isEmpty()); + connect(addressManager.data(), &AddressManager::hostChanged, this, &AddressBarDialog::metaverseServerUrlChanged); connect(DependencyManager::get().data(), &DialogsManager::setUseFeed, this, &AddressBarDialog::setUseFeed); connect(qApp, &Application::receivedHifiSchemeURL, this, &AddressBarDialog::receivedHifiSchemeURL); } diff --git a/interface/src/ui/AddressBarDialog.h b/interface/src/ui/AddressBarDialog.h index 2dad742ebb..921e808abb 100644 --- a/interface/src/ui/AddressBarDialog.h +++ b/interface/src/ui/AddressBarDialog.h @@ -37,7 +37,7 @@ signals: void forwardEnabledChanged(); void useFeedChanged(); void receivedHifiSchemeURL(const QString& url); - void metaverseServerUrlChanged(); // While it is a constant, qml will complain about not seeing a change signal. + void metaverseServerUrlChanged(); protected: void displayAddressOfflineMessage(); From 1ee931723470a6437ab4d7efd0a44605bb7896a7 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Thu, 6 Oct 2016 17:00:25 +1300 Subject: [PATCH 6/7] Fix clearing address and cursor upon address bar closing --- interface/resources/qml/AddressBarDialog.qml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/interface/resources/qml/AddressBarDialog.qml b/interface/resources/qml/AddressBarDialog.qml index 75c16da30b..de4070737e 100644 --- a/interface/resources/qml/AddressBarDialog.qml +++ b/interface/resources/qml/AddressBarDialog.qml @@ -244,7 +244,10 @@ Window { running: false interval: 100 // ms repeat: false - onTriggered: addressLine.text = "" + onTriggered: { + addressLine.text = ""; + isCursorVisible = false; + } } Window { @@ -425,8 +428,6 @@ Window { if (addressLine.text !== "") { addressBarDialog.loadAddress(addressLine.text, fromSuggestions) } - clearAddressLineTimer.start(); - isCursorVisible = false; root.shown = false; } @@ -435,11 +436,13 @@ Window { case Qt.Key_Escape: case Qt.Key_Back: root.shown = false + clearAddressLineTimer.start(); event.accepted = true break case Qt.Key_Enter: case Qt.Key_Return: toggleOrGo() + clearAddressLineTimer.start(); event.accepted = true break } From b6221a5f833ada3e37223fbe1bbd4d2a26e15cdf Mon Sep 17 00:00:00 2001 From: David Rowe Date: Fri, 7 Oct 2016 09:45:34 +1300 Subject: [PATCH 7/7] Fix clearing address bar after navigating using picture card --- interface/resources/qml/AddressBarDialog.qml | 1 + 1 file changed, 1 insertion(+) diff --git a/interface/resources/qml/AddressBarDialog.qml b/interface/resources/qml/AddressBarDialog.qml index de4070737e..efcf14fc89 100644 --- a/interface/resources/qml/AddressBarDialog.qml +++ b/interface/resources/qml/AddressBarDialog.qml @@ -59,6 +59,7 @@ Window { } addressLine.text = targetString; toggleOrGo(true); + clearAddressLineTimer.start(); } property var allStories: []; property int cardWidth: 200;