aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2020-06-15 17:52:07 +0200
committerUlf Hermann <ulf.hermann@qt.io>2020-06-16 12:24:15 +0200
commit1061e74206592ec1791cadf47e66cf323f525ea4 (patch)
tree2b83c97a04470b44992b5c58f9f3dfa259e58918 /src
parent0d43e21429ee23442ec3a99f641a5665d66e75e2 (diff)
Make QQmlContext::resolveUrl() const
It doesn't modify anything. Change-Id: If289873415eb5a0483ca49b34abfac6be9a9e2e5 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/qml/qml/qqmlcontext.cpp4
-rw-r--r--src/qml/qml/qqmlcontext.h2
-rw-r--r--src/qml/qml/qqmlcontextdata.cpp29
-rw-r--r--src/qml/qml/qqmlcontextdata_p.h2
4 files changed, 20 insertions, 17 deletions
diff --git a/src/qml/qml/qqmlcontext.cpp b/src/qml/qml/qqmlcontext.cpp
index 0b74b9d643..84d0fd611a 100644
--- a/src/qml/qml/qqmlcontext.cpp
+++ b/src/qml/qml/qqmlcontext.cpp
@@ -410,9 +410,9 @@ QString QQmlContext::nameForObject(QObject *object) const
\sa QQmlEngine::baseUrl(), setBaseUrl()
*/
-QUrl QQmlContext::resolvedUrl(const QUrl &src)
+QUrl QQmlContext::resolvedUrl(const QUrl &src) const
{
- Q_D(QQmlContext);
+ Q_D(const QQmlContext);
return d->m_data->resolvedUrl(src);
}
diff --git a/src/qml/qml/qqmlcontext.h b/src/qml/qml/qqmlcontext.h
index f12a94ef9d..579f278b10 100644
--- a/src/qml/qml/qqmlcontext.h
+++ b/src/qml/qml/qqmlcontext.h
@@ -86,7 +86,7 @@ public:
// ### Qt 6: no need for a mutable object, this should become a const QObject pointer
QString nameForObject(QObject *) const;
- QUrl resolvedUrl(const QUrl &);
+ QUrl resolvedUrl(const QUrl &) const;
void setBaseUrl(const QUrl &);
QUrl baseUrl() const;
diff --git a/src/qml/qml/qqmlcontextdata.cpp b/src/qml/qml/qqmlcontextdata.cpp
index d9aea9b917..e1aa3dd887 100644
--- a/src/qml/qml/qqmlcontextdata.cpp
+++ b/src/qml/qml/qqmlcontextdata.cpp
@@ -46,22 +46,25 @@
QT_BEGIN_NAMESPACE
-QUrl QQmlContextData::resolvedUrl(const QUrl &src)
+QUrl QQmlContextData::resolvedUrl(const QUrl &src) const
{
QUrl resolved;
if (src.isRelative() && !src.isEmpty()) {
- QQmlRefPointer<QQmlContextData> ctxt = this;
- do {
- if (ctxt->url().isValid())
- break;
- else
- ctxt = ctxt->parent();
- } while (ctxt);
-
- if (ctxt)
- resolved = ctxt->url().resolved(src);
- else if (m_engine)
- resolved = m_engine->baseUrl().resolved(src);
+ const QUrl ownUrl = url();
+ if (ownUrl.isValid()) {
+ resolved = ownUrl.resolved(src);
+ } else {
+ for (QQmlRefPointer<QQmlContextData> ctxt = parent(); ctxt; ctxt = ctxt->parent()) {
+ const QUrl ctxtUrl = ctxt->url();
+ if (ctxtUrl.isValid()) {
+ resolved = ctxtUrl.resolved(src);
+ break;
+ }
+ }
+
+ if (m_engine && resolved.isEmpty())
+ resolved = m_engine->baseUrl().resolved(src);
+ }
} else {
resolved = src;
}
diff --git a/src/qml/qml/qqmlcontextdata_p.h b/src/qml/qml/qqmlcontextdata_p.h
index ea0b010d21..0fc3c23a0e 100644
--- a/src/qml/qml/qqmlcontextdata_p.h
+++ b/src/qml/qml/qqmlcontextdata_p.h
@@ -138,7 +138,7 @@ public:
QQmlData *ownedObjects() const { return m_ownedObjects; }
void setOwnedObjects(QQmlData *ownedObjects) { m_ownedObjects = ownedObjects; }
- QUrl resolvedUrl(const QUrl &);
+ QUrl resolvedUrl(const QUrl &) const;
// My containing QQmlContext. If isInternal is true this owns publicContext.
// If internal is false publicContext owns this.