diff --git a/interface/resources/qml/Browser.qml b/interface/resources/qml/Browser.qml index 496209a2a8..2fefb6bff4 100644 --- a/interface/resources/qml/Browser.qml +++ b/interface/resources/qml/Browser.qml @@ -49,6 +49,12 @@ ScrollingWindow { desktop.setAutoAdd(auto); } + function openExternalBrowser() { + Qt.openUrlExternally(addressBar.text); + root.shown = false; + root.windowClosed(); + } + Item { id:item width: pane.contentWidth @@ -58,34 +64,49 @@ ScrollingWindow { id: buttons spacing: 4 anchors.top: parent.top - anchors.topMargin: 8 + anchors.topMargin: 4 anchors.left: parent.left anchors.leftMargin: 8 HiFiGlyphs { - id: back; - enabled: webview.canGoBack; + id: back + enabled: webview.canGoBack text: hifi.glyphs.backward - color: enabled ? hifi.colors.text : hifi.colors.disabledText + color: enabled ? (backMouseArea.containsMouse ? hifi.colors.blueHighlight : hifi.colors.faintGray) : hifi.colors.lightGray size: 48 - MouseArea { anchors.fill: parent; onClicked: webview.goBack() } + MouseArea { + id: backMouseArea + anchors.fill: parent + hoverEnabled: true + onClicked: webview.goBack(); + } } HiFiGlyphs { - id: forward; - enabled: webview.canGoForward; + id: forward + enabled: webview.canGoForward text: hifi.glyphs.forward - color: enabled ? hifi.colors.text : hifi.colors.disabledText + color: enabled ? (forwardMouseArea.containsMouse ? hifi.colors.blueHighlight : hifi.colors.faintGray) : hifi.colors.lightGray size: 48 - MouseArea { anchors.fill: parent; onClicked: webview.goForward() } + MouseArea { + id: forwardMouseArea + anchors.fill: parent + hoverEnabled: true + onClicked: webview.goForward(); + } } HiFiGlyphs { - id: reload; - enabled: webview.canGoForward; + id: reload + enabled: url !== "" text: webview.loading ? hifi.glyphs.close : hifi.glyphs.reload - color: enabled ? hifi.colors.text : hifi.colors.disabledText + color: enabled ? (reloadMouseArea.containsMouse ? hifi.colors.blueHighlight : hifi.colors.faintGray) : hifi.colors.lightGray size: 48 - MouseArea { anchors.fill: parent; onClicked: webview.goForward() } + MouseArea { + id: reloadMouseArea + anchors.fill: parent + hoverEnabled: true + onClicked: webview.loading ? webview.stop() : webview.reload(); + } } } @@ -94,52 +115,82 @@ ScrollingWindow { id: border height: 48 anchors.top: parent.top - anchors.topMargin: 8 + anchors.topMargin: 4 anchors.right: parent.right anchors.rightMargin: 8 anchors.left: buttons.right anchors.leftMargin: 8 + HiFiGlyphs { + id: externalBrowser + anchors.right: parent.right + anchors.top: parent.top + anchors.topMargin: 4 + enabled: !HMD.active && url !== "" + font.family: "FontAwesome" + text: "\uf24d" + rotation: -90 + color: enabled ? (externalBrowserMouseArea.containsMouse ? hifi.colors.blueHighlight : hifi.colors.faintGray) : hifi.colors.lightGray + size: 32 + MouseArea { + id: externalBrowserMouseArea + anchors.fill: parent + hoverEnabled: true + onClicked: openExternalBrowser(); + } + } + Item { id: barIcon width: parent.height height: parent.height Image { - source: webview.icon; + source: webview.loading ? "" : webview.icon x: (parent.height - height) / 2 y: (parent.width - width) / 2 - sourceSize: Qt.size(width, height); - verticalAlignment: Image.AlignVCenter; + width: 28 + height: 28 + verticalAlignment: Image.AlignVCenter horizontalAlignment: Image.AlignHCenter } } TextField { id: addressBar - anchors.right: parent.right - anchors.rightMargin: 8 + anchors.right: externalBrowser.left + anchors.rightMargin: 32 anchors.left: barIcon.right anchors.leftMargin: 0 anchors.verticalCenter: parent.verticalCenter focus: true colorScheme: hifi.colorSchemes.dark placeholderText: "Enter URL" + inputMethodHints: Qt.ImhUrlCharactersOnly Component.onCompleted: ScriptDiscoveryService.scriptsModelFilter.filterRegExp = new RegExp("^.*$", "i") Keys.onPressed: { switch(event.key) { case Qt.Key_Enter: case Qt.Key_Return: event.accepted = true - if (text.indexOf("http") != 0) { + if (text.indexOf("http") !== 0) { text = "http://" + text; } + + // Setting webiew.url directly doesn't add the URL to the navigation history. + //webview.url = text; + // The following works around this bug. + text = encodeURI(text); + text = text.replace(/;/g, "%3b"); // Prevent script injection. + text = text.replace(/'/g, "%25"); // "" + webview.runJavaScript("window.location='" + text + "'"); + root.hidePermissionsBar(); root.keyboardRaised = false; - webview.url = text; break; } } } + } Rectangle { @@ -204,7 +255,7 @@ ScrollingWindow { parentRoot: root anchors.top: buttons.bottom - anchors.topMargin: 8 + anchors.topMargin: 4 anchors.bottom: parent.bottom anchors.left: parent.left anchors.right: parent.right @@ -216,7 +267,7 @@ ScrollingWindow { Keys.onPressed: { switch(event.key) { case Qt.Key_L: - if (event.modifiers == Qt.ControlModifier) { + if (event.modifiers === Qt.ControlModifier) { event.accepted = true addressBar.selectAll() addressBar.forceActiveFocus() @@ -224,4 +275,5 @@ ScrollingWindow { break; } } + } // dialog