From 5088eec2a2a2bd67f442083c285dd90573b2818e Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Thu, 17 Dec 2015 12:23:39 -0800 Subject: [PATCH] Move directory web UI into the overlay --- examples/directory.js | 2 +- interface/resources/qml/QmlWebWindow.qml | 20 +++++++++++++++++++- libraries/ui/src/QmlWebWindowClass.cpp | 7 +++++++ libraries/ui/src/QmlWebWindowClass.h | 1 + 4 files changed, 28 insertions(+), 2 deletions(-) diff --git a/examples/directory.js b/examples/directory.js index b1fac19e8b..d2a3768051 100644 --- a/examples/directory.js +++ b/examples/directory.js @@ -62,7 +62,7 @@ var directory = (function () { function setUp() { viewport = Controller.getViewportDimensions(); - directoryWindow = new WebWindow('Directory', DIRECTORY_URL, 900, 700, false); + directoryWindow = new OverlayWebWindow('Directory', DIRECTORY_URL, 900, 700, false); directoryWindow.setVisible(false); directoryButton = Overlays.addOverlay("image", { diff --git a/interface/resources/qml/QmlWebWindow.qml b/interface/resources/qml/QmlWebWindow.qml index d59ef4955e..9664c0edb8 100644 --- a/interface/resources/qml/QmlWebWindow.qml +++ b/interface/resources/qml/QmlWebWindow.qml @@ -19,12 +19,27 @@ VrDialog { backgroundColor: "#7f000000" property url source: "about:blank" + signal navigating(string url) + Component.onCompleted: { enabled = true console.log("Web Window Created " + root); webview.javaScriptConsoleMessage.connect(function(level, message, lineNumber, sourceID) { console.log("Web Window JS message: " + sourceID + " " + lineNumber + " " + message); }); + + webview.loadingChanged.connect(handleWebviewLoading) + } + + + function handleWebviewLoading(loadRequest) { + var HIFI_URL_PATTERN = /^hifi:\/\//; + if (WebEngineView.LoadStartedStatus == loadRequest.status) { + var newUrl = loadRequest.url.toString(); + if (newUrl.match(HIFI_URL_PATTERN)) { + root.navigating(newUrl); + } + } } Item { @@ -35,11 +50,14 @@ VrDialog { y: root.clientY width: root.clientWidth height: root.clientHeight - + WebEngineView { id: webview url: root.source anchors.fill: parent + profile: WebEngineProfile { + httpUserAgent: "Mozilla/5.0 (HighFidelityInterface)" + } } } // item } // dialog diff --git a/libraries/ui/src/QmlWebWindowClass.cpp b/libraries/ui/src/QmlWebWindowClass.cpp index 3797034e79..2b7270edf0 100644 --- a/libraries/ui/src/QmlWebWindowClass.cpp +++ b/libraries/ui/src/QmlWebWindowClass.cpp @@ -19,6 +19,7 @@ #include #include +#include #include #include "impl/websocketclientwrapper.h" @@ -86,8 +87,14 @@ QmlWebWindowClass::QmlWebWindowClass(QObject* qmlWindow) qDebug() << "Created window with ID " << _windowId; Q_ASSERT(_qmlWindow); Q_ASSERT(dynamic_cast(_qmlWindow)); + QObject::connect(_qmlWindow, SIGNAL(navigating(QString)), this, SLOT(handleNavigation(QString))); } +void QmlWebWindowClass::handleNavigation(const QString& url) { + DependencyManager::get()->handleLookupString(url); +} + + void QmlWebWindowClass::setVisible(bool visible) { if (QThread::currentThread() != thread()) { QMetaObject::invokeMethod(this, "setVisible", Qt::AutoConnection, Q_ARG(bool, visible)); diff --git a/libraries/ui/src/QmlWebWindowClass.h b/libraries/ui/src/QmlWebWindowClass.h index c166fd2c20..1575ec7916 100644 --- a/libraries/ui/src/QmlWebWindowClass.h +++ b/libraries/ui/src/QmlWebWindowClass.h @@ -81,6 +81,7 @@ signals: private slots: void hasClosed(); + void handleNavigation(const QString& url); private: QmlScriptEventBridge* _eventBridge;