diff options
| author | Ulf Hermann <ulf.hermann@qt.io> | 2020-06-15 17:52:07 +0200 |
|---|---|---|
| committer | Ulf Hermann <ulf.hermann@qt.io> | 2020-06-16 12:24:15 +0200 |
| commit | 1061e74206592ec1791cadf47e66cf323f525ea4 (patch) | |
| tree | 2b83c97a04470b44992b5c58f9f3dfa259e58918 /src | |
| parent | 0d43e21429ee23442ec3a99f641a5665d66e75e2 (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.cpp | 4 | ||||
| -rw-r--r-- | src/qml/qml/qqmlcontext.h | 2 | ||||
| -rw-r--r-- | src/qml/qml/qqmlcontextdata.cpp | 29 | ||||
| -rw-r--r-- | src/qml/qml/qqmlcontextdata_p.h | 2 |
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. |
