Fix loading imports from Qt resource.
authorAaron McCarthy <aaron.mccarthy@nokia.com>
Fri, 2 Dec 2011 03:35:07 +0000 (13:35 +1000)
committerQt by Nokia <qt-info@nokia.com>
Mon, 5 Dec 2011 09:13:00 +0000 (10:13 +0100)
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 <martin.jones@nokia.com>

src/declarative/qml/qdeclarativeimport.cpp

index 0a03443..cddebcd 100644 (file)
@@ -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;