From 1b26ba22cbc323f1f46aebf09608981fad9dac96 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Sat, 6 May 2017 11:13:13 +1200 Subject: [PATCH] Fix browser history in goto "i" pages on tablet --- .../resources/qml/controls/TabletWebView.qml | 81 +++++-------------- 1 file changed, 22 insertions(+), 59 deletions(-) diff --git a/interface/resources/qml/controls/TabletWebView.qml b/interface/resources/qml/controls/TabletWebView.qml index 3a6643964b..a718c59659 100644 --- a/interface/resources/qml/controls/TabletWebView.qml +++ b/interface/resources/qml/controls/TabletWebView.qml @@ -23,16 +23,14 @@ Item { property bool keyboardRaised: false property bool punctuationMode: false property bool isDesktop: false - property string initialPage: "" - property bool startingUp: true property alias webView: webview property alias profile: webview.profile property bool remove: false - property var urlList: [] - property var forwardList: [] - - property int currentPage: -1 // used as a model for repeater - property alias pagesModel: pagesModel + + // Manage own browse history because WebEngineView history is wiped when a new URL is loaded via + // onNewViewRequested, e.g., as happens when a social media share button is clicked. + property var history: [] + property int historyIndex: -1 Rectangle { id: buttons @@ -53,7 +51,7 @@ Item { id: back enabledColor: hifi.colors.darkGray disabledColor: hifi.colors.lightGrayText - enabled: webview.canGoBack || web.urlList.length > 0 || web.forwardList.length > 0 + enabled: historyIndex > 0 text: "BACK" MouseArea { @@ -76,7 +74,6 @@ Item { } } - RalewaySemiBold { id: displayUrl color: hifi.colors.baseGray @@ -91,7 +88,6 @@ Item { } } - MouseArea { anchors.fill: parent preventStealing: true @@ -99,24 +95,10 @@ Item { } } - ListModel { - id: pagesModel - onCountChanged: { - currentPage = count - 1; - } - } - function goBack() { - if (webview.canGoBack) { - forwardList.push(webview.url); - webview.goBack(); - } else if (web.urlList.length > 0) { - var url = web.urlList.pop(); - loadUrl(url); - } else if (web.forwardList.length > 0) { - var url = web.forwardList.pop(); - loadUrl(url); - web.forwardList = []; + if (historyIndex > 0) { + historyIndex--; + loadUrl(history[historyIndex]); } } @@ -133,19 +115,12 @@ Item { } function goForward() { - if (currentPage < pagesModel.count - 1) { - currentPage++; + if (historyIndex < history.length - 1) { + historyIndex++; + loadUrl(history[historyIndex]); } } - function gotoPage(url) { - urlAppend(url) - } - - function isUrlLoaded(url) { - return (pagesModel.get(currentPage).webUrl === url); - } - function reloadPage() { view.reloadAndBypassCache() view.setActiveFocusOnPress(true); @@ -157,24 +132,8 @@ Item { web.url = webview.url; } - function onInitialPage(url) { - return (url === webview.url); - } - - function urlAppend(url) { - var lurl = decodeURIComponent(url) - if (lurl[lurl.length - 1] !== "/") { - lurl = lurl + "/" - } - web.urlList.push(url); - } - onUrlChanged: { loadUrl(url); - if (startingUp) { - web.initialPage = webview.url; - startingUp = false; - } } QtObject { @@ -242,6 +201,16 @@ Item { grantFeaturePermission(securityOrigin, feature, true); } + onUrlChanged: { + // Record history, skipping null and duplicate items. + var urlString = url + ""; + if (urlString.length > 0 && (historyIndex === -1 || urlString !== history[historyIndex])) { + historyIndex++; + history = history.slice(0, historyIndex); + history.push(urlString); + } + } + onLoadingChanged: { keyboardRaised = false; punctuationMode = false; @@ -261,17 +230,11 @@ Item { } if (WebEngineView.LoadSucceededStatus == loadRequest.status) { - if (startingUp) { - web.initialPage = webview.url; - startingUp = false; - } webview.forceActiveFocus(); } } onNewViewRequested: { - var currentUrl = webview.url; - urlAppend(currentUrl); request.openIn(webview); } }