From 7f5f2d4f75f594a70d1be7ea4559e5c2ac1f560e Mon Sep 17 00:00:00 2001 From: Martin Negyokru Date: Thu, 7 Apr 2022 16:55:44 +0200 Subject: 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 --- examples/webenginequick/lifecycle/CMakeLists.txt | 1 + examples/webenginequick/lifecycle/WebTab.qml | 2 +- .../lifecycle/doc/src/lifecycle.qdoc | 3 +++ examples/webenginequick/lifecycle/lifecycle.pro | 1 + examples/webenginequick/lifecycle/main.cpp | 6 +++++- examples/webenginequick/lifecycle/utils.h | 25 ++++++++++++++++++++++ .../webenginequick/webengineaction/CMakeLists.txt | 1 + .../webengineaction/doc/src/webengineaction.qdoc | 3 +++ examples/webenginequick/webengineaction/main.cpp | 6 ++++++ examples/webenginequick/webengineaction/main.qml | 2 +- examples/webenginequick/webengineaction/utils.h | 25 ++++++++++++++++++++++ .../webengineaction/webengineaction.pro | 1 + 12 files changed, 73 insertions(+), 3 deletions(-) create mode 100644 examples/webenginequick/lifecycle/utils.h create mode 100644 examples/webenginequick/webengineaction/utils.h (limited to 'examples') 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 #include #include @@ -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 +#include + +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 #include +#include #include 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 +#include + +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 -- cgit v1.2.1