summaryrefslogtreecommitdiffstats
path: root/src/declarative/qml
diff options
context:
space:
mode:
authorWarwick Allison <warwick.allison@nokia.com>2009-10-14 03:09:38 (GMT)
committerWarwick Allison <warwick.allison@nokia.com>2009-10-14 03:09:38 (GMT)
commit403350d5d6d85fb1ef9718401a6a60af313eaf5a (patch)
tree6b8fa0c0de673a5f34ab8a74ae76d8742ce4fc67 /src/declarative/qml
parent3491cdb2c1c9184adfb0fab1e636afd784a6565e (diff)
downloadQt-403350d5d6d85fb1ef9718401a6a60af313eaf5a.zip
Qt-403350d5d6d85fb1ef9718401a6a60af313eaf5a.tar.gz
Qt-403350d5d6d85fb1ef9718401a6a60af313eaf5a.tar.bz2
Workaround QUrl::toLocalFile not knowing about qrc:
QNetworkAccess does similar things.
Diffstat (limited to 'src/declarative/qml')
-rw-r--r--src/declarative/qml/qmlcompositetypemanager.cpp18
-rw-r--r--src/declarative/qml/qmlengine.cpp13
2 files changed, 25 insertions, 6 deletions
diff --git a/src/declarative/qml/qmlcompositetypemanager.cpp b/src/declarative/qml/qmlcompositetypemanager.cpp
index 13bd02c..3c76344 100644
--- a/src/declarative/qml/qmlcompositetypemanager.cpp
+++ b/src/declarative/qml/qmlcompositetypemanager.cpp
@@ -262,13 +262,22 @@ void QmlCompositeTypeManager::resourceReplyFinished()
reply->deleteLater();
}
+static QString toLocalFileOrQrc(const QUrl& url)
+{
+ QString r = url.toLocalFile();
+ if (r.isEmpty() && url.scheme() == QLatin1String("qrc"))
+ r = QLatin1Char(':') + url.path();
+ return r;
+}
+
void QmlCompositeTypeManager::loadResource(QmlCompositeTypeResource *resource)
{
QUrl url(resource->url);
- if (url.scheme() == QLatin1String("file")) {
+ QString lf = toLocalFileOrQrc(url);
+ if (!lf.isEmpty()) {
- QFile file(url.toLocalFile());
+ QFile file(lf);
if (file.open(QFile::ReadOnly)) {
resource->data = file.readAll();
resource->status = QmlCompositeTypeResource::Complete;
@@ -290,9 +299,10 @@ void QmlCompositeTypeManager::loadSource(QmlCompositeTypeData *unit)
{
QUrl url(unit->imports.baseUrl());
- if (url.scheme() == QLatin1String("file")) {
+ QString lf = toLocalFileOrQrc(url);
+ if (!lf.isEmpty()) {
- QFile file(url.toLocalFile());
+ QFile file(lf);
if (file.open(QFile::ReadOnly)) {
QByteArray data = file.readAll();
setData(unit, data, url);
diff --git a/src/declarative/qml/qmlengine.cpp b/src/declarative/qml/qmlengine.cpp
index ef0f975..2bec140 100644
--- a/src/declarative/qml/qmlengine.cpp
+++ b/src/declarative/qml/qmlengine.cpp
@@ -955,6 +955,15 @@ QVariant QmlScriptClass::toVariant(QmlEngine *engine, const QScriptValue &val)
return QVariant();
}
+// XXX this beyonds in QUrl::toLocalFile()
+static QString toLocalFileOrQrc(const QUrl& url)
+{
+ QString r = url.toLocalFile();
+ if (r.isEmpty() && url.scheme() == QLatin1String("qrc"))
+ r = QLatin1Char(':') + url.path();
+ return r;
+}
+
/////////////////////////////////////////////////////////////
struct QmlEnginePrivate::ImportedNamespace {
QStringList urls;
@@ -985,7 +994,7 @@ struct QmlEnginePrivate::ImportedNamespace {
QUrl url = QUrl(urls.at(i) + QLatin1String("/") + QString::fromUtf8(type) + QLatin1String(".qml"));
if (vmaj || vmin) {
// Check version file - XXX cache these in QmlEngine!
- QFile qmldir(QUrl(urls.at(i)+QLatin1String("/qmldir")).toLocalFile());
+ QFile qmldir(toLocalFileOrQrc(QUrl(urls.at(i)+QLatin1String("/qmldir"))));
if (qmldir.open(QIODevice::ReadOnly)) {
do {
QByteArray lineba = qmldir.readLine();
@@ -1016,7 +1025,7 @@ struct QmlEnginePrivate::ImportedNamespace {
}
} else {
// XXX search non-files too! (eg. zip files, see QT-524)
- QFileInfo f(url.toLocalFile());
+ QFileInfo f(toLocalFileOrQrc(url));
if (f.exists()) {
if (url_return)
*url_return = url;