From 18d1e8c0482f70cd7b978169e7b8f7ab137bfc03 Mon Sep 17 00:00:00 2001 From: Aaron McCarthy Date: Fri, 2 Dec 2011 13:35:07 +1000 Subject: [PATCH] Fix loading imports from Qt resource. Loading an import from a Qt resource fails because the url of the module was erroneously being converted to a file:// url. This results in a url that looks like "file://:/MyModule". Fixed by adding a check to see if the module path is a resource path (starts with :) and if so constructs a qrc:// url instead. Change-Id: I41a24a93d085baaf68d58c4e991d6ba2aff5e7ff Reviewed-by: Martin Jones --- src/declarative/qml/qdeclarativeimport.cpp | 17 ++++++++++++++--- 1 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/declarative/qml/qdeclarativeimport.cpp b/src/declarative/qml/qdeclarativeimport.cpp index 0a03443..cddebcd 100644 --- a/src/declarative/qml/qdeclarativeimport.cpp +++ b/src/declarative/qml/qdeclarativeimport.cpp @@ -480,7 +480,11 @@ bool QDeclarativeImportsPrivate::add(const QDeclarativeDirComponents &qmldircomp if (fi.isFile()) { found = true; - url = QUrl::fromLocalFile(fi.absolutePath()).toString(); + const QString absolutePath = fi.absolutePath(); + if (absolutePath.at(0) == QLatin1Char(':')) + url = QLatin1String("qrc://") + absolutePath.mid(1); + else + url = QUrl::fromLocalFile(fi.absolutePath()).toString(); uri = resolvedUri(dir, database); if (!importExtension(absoluteFilePath, uri, database, &qmldircomponents, errors)) return false; @@ -498,7 +502,11 @@ bool QDeclarativeImportsPrivate::add(const QDeclarativeDirComponents &qmldircomp if (fi.isFile()) { found = true; - url = QUrl::fromLocalFile(fi.absolutePath()).toString(); + const QString absolutePath = fi.absolutePath(); + if (absolutePath.at(0) == QLatin1Char(':')) + url = QLatin1String("qrc://") + absolutePath.mid(1); + else + url = QUrl::fromLocalFile(fi.absolutePath()).toString(); uri = resolvedUri(dir, database); if (!importExtension(absoluteFilePath, uri, database, &qmldircomponents, errors)) return false; @@ -517,7 +525,10 @@ bool QDeclarativeImportsPrivate::add(const QDeclarativeDirComponents &qmldircomp if (!absoluteFilePath.isEmpty()) { found = true; QString absolutePath = absoluteFilePath.left(absoluteFilePath.lastIndexOf(Slash)+1); - url = QLatin1String("file://") + absolutePath; + if (absolutePath.at(0) == QLatin1Char(':')) + url = QLatin1String("qrc://") + absolutePath.mid(1); + else + url = QLatin1String("file://") + absolutePath; uri = resolvedUri(dir, database); if (!importExtension(absoluteFilePath, uri, database, &qmldircomponents, errors)) return false; -- 1.7.2.5