summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Negyokru <negyokru@inf.u-szeged.hu>2022-04-07 16:55:44 +0200
committerMartin Negyokru <negyokru@inf.u-szeged.hu>2023-02-01 17:10:14 +0100
commit7f5f2d4f75f594a70d1be7ea4559e5c2ac1f560e (patch)
tree0c1ec1396f06fb5a9e6958a518c98a9a6f357829
parent1d0b015d7fcbe8629b4db1aacdac35dec317dc9d (diff)
Fix navigation error for incomplete URLs in webenginequick examples
Use QUrl::fromUserInput in lifecycle and webengineaction examples. Task-number: QTBUG-96010 Pick-to: 6.5 Change-Id: I69cbcb1db31b0766d05f751b4aede11092d078d5 Reviewed-by: Peter Varga <pvarga@inf.u-szeged.hu>
-rw-r--r--examples/webenginequick/lifecycle/CMakeLists.txt1
-rw-r--r--examples/webenginequick/lifecycle/WebTab.qml2
-rw-r--r--examples/webenginequick/lifecycle/doc/src/lifecycle.qdoc3
-rw-r--r--examples/webenginequick/lifecycle/lifecycle.pro1
-rw-r--r--examples/webenginequick/lifecycle/main.cpp6
-rw-r--r--examples/webenginequick/lifecycle/utils.h25
-rw-r--r--examples/webenginequick/webengineaction/CMakeLists.txt1
-rw-r--r--examples/webenginequick/webengineaction/doc/src/webengineaction.qdoc3
-rw-r--r--examples/webenginequick/webengineaction/main.cpp6
-rw-r--r--examples/webenginequick/webengineaction/main.qml2
-rw-r--r--examples/webenginequick/webengineaction/utils.h25
-rw-r--r--examples/webenginequick/webengineaction/webengineaction.pro1
12 files changed, 73 insertions, 3 deletions
diff --git a/examples/webenginequick/lifecycle/CMakeLists.txt b/examples/webenginequick/lifecycle/CMakeLists.txt
index 1aea57c73..d0a378c13 100644
--- a/examples/webenginequick/lifecycle/CMakeLists.txt
+++ b/examples/webenginequick/lifecycle/CMakeLists.txt
@@ -16,6 +16,7 @@ find_package(Qt6 REQUIRED COMPONENTS Core Gui QuickControls2 WebEngineQuick)
qt_add_executable(lifecycle
main.cpp
+ utils.h
)
set_target_properties(lifecycle PROPERTIES
diff --git a/examples/webenginequick/lifecycle/WebTab.qml b/examples/webenginequick/lifecycle/WebTab.qml
index d805628ad..6fb6cb386 100644
--- a/examples/webenginequick/lifecycle/WebTab.qml
+++ b/examples/webenginequick/lifecycle/WebTab.qml
@@ -132,7 +132,7 @@ ColumnLayout {
text: view.url == "about:blank" ? "" : view.url
selectByMouse: true
- onAccepted: { view.url = text }
+ onAccepted: { view.url = utils.fromUserInput(text) }
}
WebToolButton {
text: "⋮"
diff --git a/examples/webenginequick/lifecycle/doc/src/lifecycle.qdoc b/examples/webenginequick/lifecycle/doc/src/lifecycle.qdoc
index b28e3e272..4d997b1c4 100644
--- a/examples/webenginequick/lifecycle/doc/src/lifecycle.qdoc
+++ b/examples/webenginequick/lifecycle/doc/src/lifecycle.qdoc
@@ -31,6 +31,9 @@
window also has a \l {Drawer} for changing settings. The drawer can be
opened by clicking the "⋮" button on the tool bar.
+ \note Note that \c {WebTab.qml} uses \l {QUrl::}
+ {fromUserInput} to handle incomplete URLs.
+
\section1 Lifecycle States in the Example
The example implements two ways of changing the lifecycle state: manual and
diff --git a/examples/webenginequick/lifecycle/lifecycle.pro b/examples/webenginequick/lifecycle/lifecycle.pro
index ccbe801f3..044d025d7 100644
--- a/examples/webenginequick/lifecycle/lifecycle.pro
+++ b/examples/webenginequick/lifecycle/lifecycle.pro
@@ -2,6 +2,7 @@ TEMPLATE = app
QT += quickcontrols2 webenginequick
+HEADERS += utils.h
SOURCES += main.cpp
RESOURCES += resources.qrc
diff --git a/examples/webenginequick/lifecycle/main.cpp b/examples/webenginequick/lifecycle/main.cpp
index 3601bdf5c..1f45ad0ee 100644
--- a/examples/webenginequick/lifecycle/main.cpp
+++ b/examples/webenginequick/lifecycle/main.cpp
@@ -1,6 +1,8 @@
-// Copyright (C) 2019 The Qt Company Ltd.
+// Copyright (C) 2022 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+#include "utils.h"
+
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
@@ -12,6 +14,8 @@ int main(int argc, char *argv[])
QtWebEngineQuick::initialize();
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
+ Utils utils;
+ engine.rootContext()->setContextProperty("utils", &utils);
engine.load(QUrl(QStringLiteral("qrc:/WebBrowser.qml")));
return app.exec();
}
diff --git a/examples/webenginequick/lifecycle/utils.h b/examples/webenginequick/lifecycle/utils.h
new file mode 100644
index 000000000..d9a803907
--- /dev/null
+++ b/examples/webenginequick/lifecycle/utils.h
@@ -0,0 +1,25 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef UTILS_H
+#define UTILS_H
+
+#include <QtCore/QFileInfo>
+#include <QtCore/QUrl>
+
+class Utils : public QObject
+{
+ Q_OBJECT
+public:
+ Q_INVOKABLE static QUrl fromUserInput(const QString &userInput);
+};
+
+inline QUrl Utils::fromUserInput(const QString &userInput)
+{
+ QFileInfo fileInfo(userInput);
+ if (fileInfo.exists())
+ return QUrl::fromLocalFile(fileInfo.absoluteFilePath());
+ return QUrl::fromUserInput(userInput);
+}
+
+#endif // UTILS_H
diff --git a/examples/webenginequick/webengineaction/CMakeLists.txt b/examples/webenginequick/webengineaction/CMakeLists.txt
index e019bccf0..94f03a143 100644
--- a/examples/webenginequick/webengineaction/CMakeLists.txt
+++ b/examples/webenginequick/webengineaction/CMakeLists.txt
@@ -16,6 +16,7 @@ find_package(Qt6 REQUIRED COMPONENTS Core Gui WebEngineQuick)
qt_add_executable(webengineaction
main.cpp
+ utils.h
)
set_target_properties(webengineaction PROPERTIES
diff --git a/examples/webenginequick/webengineaction/doc/src/webengineaction.qdoc b/examples/webenginequick/webengineaction/doc/src/webengineaction.qdoc
index 24394ad04..272853aef 100644
--- a/examples/webenginequick/webengineaction/doc/src/webengineaction.qdoc
+++ b/examples/webenginequick/webengineaction/doc/src/webengineaction.qdoc
@@ -41,4 +41,7 @@
Assigning a \l{WebEngineAction} to multiple UI elements will keep them in sync.
As it can be seen in the picture above, if the browser engine disables a
navigation action, both corresponding menu items will be disabled.
+
+ \note Note that incomplete URLs in the navigation bar are handled by
+ \l {QUrl::} {fromUserInput}.
*/
diff --git a/examples/webenginequick/webengineaction/main.cpp b/examples/webenginequick/webengineaction/main.cpp
index e685a715c..a7bfaaf36 100644
--- a/examples/webenginequick/webengineaction/main.cpp
+++ b/examples/webenginequick/webengineaction/main.cpp
@@ -1,8 +1,11 @@
// Copyright (C) 2018 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+#include "utils.h"
+
#include <QGuiApplication>
#include <QQmlApplicationEngine>
+#include <QQmlContext>
#include <QtWebEngineQuick/qtwebenginequickglobal.h>
int main(int argc, char *argv[])
@@ -13,6 +16,9 @@ int main(int argc, char *argv[])
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
+ Utils utils;
+
+ engine.rootContext()->setContextProperty("utils", &utils);
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
return app.exec();
diff --git a/examples/webenginequick/webengineaction/main.qml b/examples/webenginequick/webengineaction/main.qml
index 149484340..a1483b126 100644
--- a/examples/webenginequick/webengineaction/main.qml
+++ b/examples/webenginequick/webengineaction/main.qml
@@ -50,7 +50,7 @@ ApplicationWindow {
text: webEngineView.url
selectByMouse: true
- onEditingFinished: webEngineView.url = text
+ onEditingFinished: webEngineView.url = utils.fromUserInput(text)
}
ToolButton {
diff --git a/examples/webenginequick/webengineaction/utils.h b/examples/webenginequick/webengineaction/utils.h
new file mode 100644
index 000000000..d9a803907
--- /dev/null
+++ b/examples/webenginequick/webengineaction/utils.h
@@ -0,0 +1,25 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef UTILS_H
+#define UTILS_H
+
+#include <QtCore/QFileInfo>
+#include <QtCore/QUrl>
+
+class Utils : public QObject
+{
+ Q_OBJECT
+public:
+ Q_INVOKABLE static QUrl fromUserInput(const QString &userInput);
+};
+
+inline QUrl Utils::fromUserInput(const QString &userInput)
+{
+ QFileInfo fileInfo(userInput);
+ if (fileInfo.exists())
+ return QUrl::fromLocalFile(fileInfo.absoluteFilePath());
+ return QUrl::fromUserInput(userInput);
+}
+
+#endif // UTILS_H
diff --git a/examples/webenginequick/webengineaction/webengineaction.pro b/examples/webenginequick/webengineaction/webengineaction.pro
index 7ef0a8bcf..223109eb9 100644
--- a/examples/webenginequick/webengineaction/webengineaction.pro
+++ b/examples/webenginequick/webengineaction/webengineaction.pro
@@ -2,6 +2,7 @@ TEMPLATE = app
QT += webenginequick
+HEADERS += utils.h
SOURCES += main.cpp
RESOURCES += qml.qrc