diff options
Diffstat (limited to 'src/declarative/qml')
34 files changed, 172 insertions, 155 deletions
diff --git a/src/declarative/qml/qdeclarative.h b/src/declarative/qml/qdeclarative.h index 7168d4e4..dd08105e 100644 --- a/src/declarative/qml/qdeclarative.h +++ b/src/declarative/qml/qdeclarative.h @@ -49,10 +49,9 @@ #include <QtDeclarative/qdeclarativelist.h> #include <QtCore/qbytearray.h> +#include <QtCore/qurl.h> #include <QtCore/qmetaobject.h> -QT_BEGIN_HEADER - #define QML_DECLARE_TYPE(TYPE) \ Q_DECLARE_METATYPE(TYPE *) \ Q_DECLARE_METATYPE(QDeclarativeListProperty<TYPE>) @@ -390,6 +389,19 @@ int qmlRegisterCustomType(const char *uri, int versionMajor, int versionMinor, return QDeclarativePrivate::qmlregister(QDeclarativePrivate::TypeRegistration, &type); } +inline int qmlRegisterType(const QUrl &url, const char *uri, int versionMajor, int versionMinor, const char *qmlName) +{ + QDeclarativePrivate::RegisterComponent type = { + url, + uri, + qmlName, + versionMajor, + versionMinor + }; + + return QDeclarativePrivate::qmlregister(QDeclarativePrivate::ComponentRegistration, &type); +} + class QDeclarativeContext; class QDeclarativeEngine; Q_DECLARATIVE_EXPORT void qmlExecuteDeferred(QObject *); @@ -410,6 +422,4 @@ QT_END_NAMESPACE QML_DECLARE_TYPE(QObject) Q_DECLARE_METATYPE(QVariant) -QT_END_HEADER - #endif // QDECLARATIVE_H diff --git a/src/declarative/qml/qdeclarativecompiledbindings_p.h b/src/declarative/qml/qdeclarativecompiledbindings_p.h index 23249a79..1419742a 100644 --- a/src/declarative/qml/qdeclarativecompiledbindings_p.h +++ b/src/declarative/qml/qdeclarativecompiledbindings_p.h @@ -56,8 +56,6 @@ #include "private/qdeclarativeexpression_p.h" #include "private/qdeclarativebinding_p.h" -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE struct QDeclarativeBindingCompilerPrivate; @@ -110,7 +108,5 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QDECLARATIVEBINDINGOPTIMIZATIONS_P_H diff --git a/src/declarative/qml/qdeclarativecomponent.h b/src/declarative/qml/qdeclarativecomponent.h index 9687cd8e..b75da2a1 100644 --- a/src/declarative/qml/qdeclarativecomponent.h +++ b/src/declarative/qml/qdeclarativecomponent.h @@ -49,8 +49,6 @@ #include <QtCore/qstring.h> #include <QtScript/qscriptvalue.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE QT_MODULE(Declarative) @@ -127,6 +125,4 @@ Q_DECLARE_METATYPE(QDeclarativeComponent::Status) QML_DECLARE_TYPE(QDeclarativeComponent) QML_DECLARE_TYPEINFO(QDeclarativeComponent, QML_HAS_ATTACHED_PROPERTIES) -QT_END_HEADER - #endif // QDECLARATIVECOMPONENT_H diff --git a/src/declarative/qml/qdeclarativecontext.h b/src/declarative/qml/qdeclarativecontext.h index 3b3cb577..9ed71456 100644 --- a/src/declarative/qml/qdeclarativecontext.h +++ b/src/declarative/qml/qdeclarativecontext.h @@ -49,8 +49,6 @@ #include <QtCore/qmetatype.h> #include <QtCore/qvariant.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE QT_MODULE(Declarative) @@ -110,6 +108,4 @@ QT_END_NAMESPACE Q_DECLARE_METATYPE(QList<QObject*>) -QT_END_HEADER - #endif // QDECLARATIVECONTEXT_H diff --git a/src/declarative/qml/qdeclarativecustomparser_p.h b/src/declarative/qml/qdeclarativecustomparser_p.h index 85f6cc48..415f7889 100644 --- a/src/declarative/qml/qdeclarativecustomparser_p.h +++ b/src/declarative/qml/qdeclarativecustomparser_p.h @@ -61,8 +61,6 @@ #include <QtCore/qbytearray.h> #include <QtCore/qxmlstream.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE QT_MODULE(Declarative) @@ -162,6 +160,4 @@ QT_END_NAMESPACE Q_DECLARE_METATYPE(QDeclarativeCustomParserProperty) Q_DECLARE_METATYPE(QDeclarativeCustomParserNode) -QT_END_HEADER - #endif diff --git a/src/declarative/qml/qdeclarativedom_p.h b/src/declarative/qml/qdeclarativedom_p.h index 5ad35dc7..df1cfdc2 100644 --- a/src/declarative/qml/qdeclarativedom_p.h +++ b/src/declarative/qml/qdeclarativedom_p.h @@ -60,8 +60,6 @@ #include <private/qtdeclarativeglobal_p.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE QT_MODULE(Declarative) @@ -357,6 +355,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QDECLARATIVEDOM_P_H diff --git a/src/declarative/qml/qdeclarativeengine.h b/src/declarative/qml/qdeclarativeengine.h index 8302ce5d..e0ec33ec 100644 --- a/src/declarative/qml/qdeclarativeengine.h +++ b/src/declarative/qml/qdeclarativeengine.h @@ -49,8 +49,6 @@ #include <QtDeclarative/qdeclarativeerror.h> #include <QtDeclarative/qdeclarativedebug.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE QT_MODULE(Declarative) @@ -125,6 +123,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QDECLARATIVEENGINE_H diff --git a/src/declarative/qml/qdeclarativeerror.h b/src/declarative/qml/qdeclarativeerror.h index ac4fba24..3967f503 100644 --- a/src/declarative/qml/qdeclarativeerror.h +++ b/src/declarative/qml/qdeclarativeerror.h @@ -46,8 +46,6 @@ #include <QtCore/qurl.h> #include <QtCore/qstring.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE QT_MODULE(Declarative) @@ -82,6 +80,4 @@ QDebug Q_DECLARATIVE_EXPORT operator<<(QDebug debug, const QDeclarativeError &er QT_END_NAMESPACE -QT_END_HEADER - #endif // QDECLARATIVEERROR_H diff --git a/src/declarative/qml/qdeclarativeexpression.h b/src/declarative/qml/qdeclarativeexpression.h index 68b67315..728a4ac2 100644 --- a/src/declarative/qml/qdeclarativeexpression.h +++ b/src/declarative/qml/qdeclarativeexpression.h @@ -47,8 +47,6 @@ #include <QtCore/qobject.h> #include <QtCore/qvariant.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE QT_MODULE(Declarative) @@ -113,7 +111,5 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QDECLARATIVEEXPRESSION_H diff --git a/src/declarative/qml/qdeclarativeextensioninterface.h b/src/declarative/qml/qdeclarativeextensioninterface.h index 0e705f92..8e7f3f0f 100644 --- a/src/declarative/qml/qdeclarativeextensioninterface.h +++ b/src/declarative/qml/qdeclarativeextensioninterface.h @@ -45,8 +45,6 @@ #include <QtDeclarative/qtdeclarativeglobal.h> #include <QtCore/qobject.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE QT_MODULE(Declarative) @@ -66,6 +64,4 @@ Q_DECLARE_INTERFACE(QDeclarativeExtensionInterface, QDeclarativeExtensionInterfa QT_END_NAMESPACE -QT_END_HEADER - #endif // QDECLARATIVEEXTENSIONINTERFACE_H diff --git a/src/declarative/qml/qdeclarativeextensionplugin.h b/src/declarative/qml/qdeclarativeextensionplugin.h index 745b2cd4..7ff9c787 100644 --- a/src/declarative/qml/qdeclarativeextensionplugin.h +++ b/src/declarative/qml/qdeclarativeextensionplugin.h @@ -46,8 +46,6 @@ #include <QtDeclarative/qdeclarativeextensioninterface.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE QT_MODULE(Declarative) @@ -71,6 +69,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QDECLARATIVEEXTENSIONPLUGIN_H diff --git a/src/declarative/qml/qdeclarativefastproperties_p.h b/src/declarative/qml/qdeclarativefastproperties_p.h index 268dd474..9d3ead0a 100644 --- a/src/declarative/qml/qdeclarativefastproperties_p.h +++ b/src/declarative/qml/qdeclarativefastproperties_p.h @@ -45,8 +45,6 @@ #include <QtCore/qvector.h> #include <QtCore/qhash.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE class QObject; @@ -71,6 +69,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QDECLARATIVEFASTPROPERTIES_P_H diff --git a/src/declarative/qml/qdeclarativeglobal_p.h b/src/declarative/qml/qdeclarativeglobal_p.h index 52b14ffe..11ebd3fd 100644 --- a/src/declarative/qml/qdeclarativeglobal_p.h +++ b/src/declarative/qml/qdeclarativeglobal_p.h @@ -45,8 +45,6 @@ #include <QtCore/qglobal.h> #include <QtCore/QObject> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE QT_MODULE(Declarative) @@ -105,6 +103,4 @@ inline void QDeclarative_setParent_noEvent(QObject *object, QObject *parent) QT_END_NAMESPACE -QT_END_HEADER - #endif // QDECLARATIVEGLOBAL_H diff --git a/src/declarative/qml/qdeclarativeimageprovider.h b/src/declarative/qml/qdeclarativeimageprovider.h index eb5b032e..1b6cc333 100644 --- a/src/declarative/qml/qdeclarativeimageprovider.h +++ b/src/declarative/qml/qdeclarativeimageprovider.h @@ -46,8 +46,6 @@ #include <QtGui/qimage.h> #include <QtGui/qpixmap.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE QT_MODULE(Declarative) @@ -76,6 +74,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QDECLARATIVEIMAGEPROVIDER diff --git a/src/declarative/qml/qdeclarativeimport.cpp b/src/declarative/qml/qdeclarativeimport.cpp index 94883abd..caf97b25 100644 --- a/src/declarative/qml/qdeclarativeimport.cpp +++ b/src/declarative/qml/qdeclarativeimport.cpp @@ -441,6 +441,13 @@ bool QDeclarativeImportsPrivate::add(const QDeclarativeDirComponents &qmldircomp set.insert(prefix,(s=new QDeclarativeImportedNamespace)); } + bool appendInstead = false; + if (importType == QDeclarativeScriptParser::Import::Implicit) { + //Treat same as a File import, but lower precedence + appendInstead = true; + importType = QDeclarativeScriptParser::Import::File; + } + QString url = uri; bool versionFound = false; if (importType == QDeclarativeScriptParser::Import::Library) { @@ -511,6 +518,9 @@ bool QDeclarativeImportsPrivate::add(const QDeclarativeDirComponents &qmldircomp if (QDeclarativeMetaType::isModule(uri.toUtf8(), vmaj, vmin)) versionFound = true; + //Load any type->file mappings registered for this uri + qmldircomponents << QDeclarativeMetaType::qmlComponents(uri.toUtf8(), vmaj, vmin); + if (!versionFound && qmldircomponents.isEmpty()) { if (errorString) { bool anyversion = QDeclarativeMetaType::isModule(uri.toUtf8(), -1, -1); @@ -588,12 +598,21 @@ bool QDeclarativeImportsPrivate::add(const QDeclarativeDirComponents &qmldircomp } } - s->uris.prepend(uri); - s->urls.prepend(url); - s->majversions.prepend(vmaj); - s->minversions.prepend(vmin); - s->isLibrary.prepend(importType == QDeclarativeScriptParser::Import::Library); - s->qmlDirComponents.prepend(qmldircomponents); + if (appendInstead) { + s->uris.append(uri); + s->urls.append(url); + s->majversions.append(vmaj); + s->minversions.append(vmin); + s->isLibrary.append(importType == QDeclarativeScriptParser::Import::Library); + s->qmlDirComponents.append(qmldircomponents); + } else { + s->uris.prepend(uri); + s->urls.prepend(url); + s->majversions.prepend(vmaj); + s->minversions.prepend(vmin); + s->isLibrary.prepend(importType == QDeclarativeScriptParser::Import::Library); + s->qmlDirComponents.prepend(qmldircomponents); + } return true; } diff --git a/src/declarative/qml/qdeclarativeinfo.h b/src/declarative/qml/qdeclarativeinfo.h index 8b9622d8..7b23a341 100644 --- a/src/declarative/qml/qdeclarativeinfo.h +++ b/src/declarative/qml/qdeclarativeinfo.h @@ -46,8 +46,6 @@ #include <QtCore/qurl.h> #include <QtDeclarative/qdeclarativeerror.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE QT_MODULE(Declarative) @@ -99,6 +97,4 @@ Q_DECLARATIVE_EXPORT QDeclarativeInfo qmlInfo(const QObject *me, const QList<QDe QT_END_NAMESPACE -QT_END_HEADER - #endif // QDECLARATIVEINFO_H diff --git a/src/declarative/qml/qdeclarativelist.h b/src/declarative/qml/qdeclarativelist.h index 9722cefb..9b367dd1 100644 --- a/src/declarative/qml/qdeclarativelist.h +++ b/src/declarative/qml/qdeclarativelist.h @@ -46,8 +46,6 @@ #include <QtCore/qlist.h> #include <QtCore/qvariant.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE QT_MODULE(Declarative) @@ -147,6 +145,4 @@ QT_END_NAMESPACE Q_DECLARE_METATYPE(QDeclarativeListReference) -QT_END_HEADER - #endif // QDECLARATIVELIST_H diff --git a/src/declarative/qml/qdeclarativemetatype.cpp b/src/declarative/qml/qdeclarativemetatype.cpp index 1d143963..d90ccad8 100644 --- a/src/declarative/qml/qdeclarativemetatype.cpp +++ b/src/declarative/qml/qdeclarativemetatype.cpp @@ -54,6 +54,8 @@ #include <QtCore/qmetaobject.h> #include <QtCore/qbitarray.h> #include <QtCore/qreadwritelock.h> +#include <qfileinfo.h> +#include <qdir.h> #include <qmetatype.h> #include <qobjectdefs.h> #include <qdatetime.h> @@ -122,6 +124,15 @@ struct QDeclarativeMetaTypeData Q_GLOBAL_STATIC(QDeclarativeMetaTypeData, metaTypeData) Q_GLOBAL_STATIC(QReadWriteLock, metaTypeDataLock) +struct QDeclarativeRegisteredComponentData +{ + ~QDeclarativeRegisteredComponentData() {} ; + QMap<QByteArray, QDeclarativeDirComponents*> registeredComponents; +}; + +Q_GLOBAL_STATIC(QDeclarativeRegisteredComponentData, registeredComponentData) +Q_GLOBAL_STATIC(QReadWriteLock, registeredComponentDataLock) + QDeclarativeMetaTypeData::~QDeclarativeMetaTypeData() { for (int i = 0; i < types.count(); ++i) @@ -667,6 +678,45 @@ int registerType(const QDeclarativePrivate::RegisterType &type) return index; } +int registerComponent(const QDeclarativePrivate::RegisterComponent& data) +{ + if (data.typeName) { + for (int ii = 0; data.typeName[ii]; ++ii) { + if (!isalnum(data.typeName[ii])) { + qWarning("qmlRegisterType(): Invalid QML type name \"%s\"", data.typeName); + return 0; + } + } + } else { + qWarning("qmlRegisterType(): No QML type name for \"%s\"", data.url.toString().toLatin1().constData()); + return 0; + } + + QWriteLocker lock(registeredComponentDataLock()); + QString path; + // Relative paths are relative to application working directory + if (data.url.isRelative() || data.url.scheme() == QLatin1String("file")) // Workaround QTBUG-11929 + path = QUrl::fromLocalFile(QDir::currentPath()+QLatin1String("/")).resolved(data.url).toString(); + else + path = data.url.toString(); + QDeclarativeRegisteredComponentData *d = registeredComponentData(); + QDeclarativeDirParser::Component comp( + QString::fromUtf8(data.typeName), + path, + data.majorVersion, + data.minorVersion + ); + + QDeclarativeDirComponents* comps = d->registeredComponents.value(QByteArray(data.uri), 0); + if (!comps) + d->registeredComponents.insert(QByteArray(data.uri), comps = new QDeclarativeDirComponents); + + // Types added later should take precedence, like registerType + comps->prepend(comp); + + return 1; +} + /* This method is "over generalized" to allow us to (potentially) register more types of things in the future without adding exported symbols. @@ -679,6 +729,8 @@ int QDeclarativePrivate::qmlregister(RegistrationType type, void *data) return registerInterface(*reinterpret_cast<RegisterInterface *>(data)); } else if (type == AutoParentRegistration) { return registerAutoParentFunction(*reinterpret_cast<RegisterAutoParent *>(data)); + } else if (type == ComponentRegistration) { + return registerComponent(*reinterpret_cast<RegisterComponent *>(data)); } return -1; } @@ -984,6 +1036,29 @@ QDeclarativeType *QDeclarativeMetaType::qmlType(int userType) } /*! + Returns the component(s) that have been registered for the module specified by \a uri and the version specified + by \a version_major and \a version_minor. Returns an empty list if no such components were registered. +*/ +QDeclarativeDirComponents QDeclarativeMetaType::qmlComponents(const QByteArray &module, int version_major, int version_minor) +{ + QReadLocker lock(registeredComponentDataLock()); + QDeclarativeRegisteredComponentData *data = registeredComponentData(); + + QDeclarativeDirComponents* comps = data->registeredComponents.value(module, 0); + if (!comps) + return QDeclarativeDirComponents(); + QDeclarativeDirComponents ret = *comps; + for (int i = ret.count() - 1; i >= 0; i--) { + QDeclarativeDirParser::Component &c = ret[i]; + if (version_major >= 0 && (c.majorVersion != version_major || c.minorVersion > version_minor)) + ret.removeAt(i); + } + + return ret; +} + + +/*! Returns the list of registered QML type names. */ QList<QByteArray> QDeclarativeMetaType::qmlTypeNames() diff --git a/src/declarative/qml/qdeclarativemetatype_p.h b/src/declarative/qml/qdeclarativemetatype_p.h index b8c958c3..2ba391a0 100644 --- a/src/declarative/qml/qdeclarativemetatype_p.h +++ b/src/declarative/qml/qdeclarativemetatype_p.h @@ -59,6 +59,7 @@ #include <QtCore/qvariant.h> #include <QtCore/qbitarray.h> #include <private/qtdeclarativeglobal_p.h> +#include <private/qdeclarativedirparser_p.h> QT_BEGIN_NAMESPACE @@ -80,6 +81,8 @@ public: static QDeclarativeType *qmlType(const QMetaObject *metaObject, const QByteArray &module, int version_major, int version_minor); static QDeclarativeType *qmlType(int); + static QDeclarativeDirComponents qmlComponents(const QByteArray& module, int version_major, int version_minor); //### Is this the right place? + static QMetaProperty defaultProperty(const QMetaObject *); static QMetaProperty defaultProperty(QObject *); static QMetaMethod defaultMethod(const QMetaObject *); @@ -161,6 +164,7 @@ private: friend struct QDeclarativeMetaTypeData; friend int registerType(const QDeclarativePrivate::RegisterType &); friend int registerInterface(const QDeclarativePrivate::RegisterInterface &); + friend int registerComponent(const QDeclarativePrivate::RegisterComponent &); QDeclarativeType(int, const QDeclarativePrivate::RegisterInterface &); QDeclarativeType(int, const QDeclarativePrivate::RegisterType &); ~QDeclarativeType(); diff --git a/src/declarative/qml/qdeclarativenetworkaccessmanagerfactory.h b/src/declarative/qml/qdeclarativenetworkaccessmanagerfactory.h index 22824b23..e791825c 100644 --- a/src/declarative/qml/qdeclarativenetworkaccessmanagerfactory.h +++ b/src/declarative/qml/qdeclarativenetworkaccessmanagerfactory.h @@ -45,8 +45,6 @@ #include <QtDeclarative/qtdeclarativeglobal.h> #include <QtCore/qobject.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE QT_MODULE(Declarative) @@ -62,6 +60,4 @@ public: QT_END_NAMESPACE -QT_END_HEADER - #endif // QDECLARATIVENETWORKACCESSMANAGERFACTORY_H diff --git a/src/declarative/qml/qdeclarativeparser_p.h b/src/declarative/qml/qdeclarativeparser_p.h index 42c45210..7a968f1c 100644 --- a/src/declarative/qml/qdeclarativeparser_p.h +++ b/src/declarative/qml/qdeclarativeparser_p.h @@ -65,8 +65,6 @@ #include <private/qdeclarativerefcount_p.h> #include <private/qdeclarativeglobal_p.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE QT_MODULE(Declarative) @@ -376,6 +374,4 @@ QT_END_NAMESPACE Q_DECLARE_METATYPE(QDeclarativeParser::Variant) -QT_END_HEADER - #endif // QDECLARATIVEPARSER_P_H diff --git a/src/declarative/qml/qdeclarativeparserstatus.h b/src/declarative/qml/qdeclarativeparserstatus.h index d2c809db..68a526fb 100644 --- a/src/declarative/qml/qdeclarativeparserstatus.h +++ b/src/declarative/qml/qdeclarativeparserstatus.h @@ -45,8 +45,6 @@ #include <QtDeclarative/qtdeclarativeglobal.h> #include <QtCore/qobject.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE QT_MODULE(Declarative) @@ -74,6 +72,4 @@ Q_DECLARE_INTERFACE(QDeclarativeParserStatus, QDeclarativeParserStatus_iid) QT_END_NAMESPACE -QT_END_HEADER - #endif // QDECLARATIVEPARSERSTATUS_H diff --git a/src/declarative/qml/qdeclarativeprivate.h b/src/declarative/qml/qdeclarativeprivate.h index ab9fe415..05a457c3 100644 --- a/src/declarative/qml/qdeclarativeprivate.h +++ b/src/declarative/qml/qdeclarativeprivate.h @@ -56,8 +56,6 @@ #include <QtDeclarative/qtdeclarativeglobal.h> #include <QtCore/qvariant.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE QT_MODULE(Declarative) @@ -233,10 +231,19 @@ namespace QDeclarativePrivate AutoParentFunction function; }; + struct RegisterComponent { + const QUrl &url; + const char *uri; + const char *typeName; + int majorVersion; + int minorVersion; + }; + enum RegistrationType { TypeRegistration = 0, InterfaceRegistration = 1, - AutoParentRegistration = 2 + AutoParentRegistration = 2, + ComponentRegistration = 3 }; int Q_DECLARATIVE_EXPORT qmlregister(RegistrationType, void *); @@ -244,6 +251,4 @@ namespace QDeclarativePrivate QT_END_NAMESPACE -QT_END_HEADER - #endif // QDECLARATIVEPRIVATE_H diff --git a/src/declarative/qml/qdeclarativeproperty.h b/src/declarative/qml/qdeclarativeproperty.h index 7e8cbcf8..a6ae48d5 100644 --- a/src/declarative/qml/qdeclarativeproperty.h +++ b/src/declarative/qml/qdeclarativeproperty.h @@ -45,8 +45,6 @@ #include <QtDeclarative/qtdeclarativeglobal.h> #include <QtCore/qmetaobject.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE QT_MODULE(Declarative) @@ -139,6 +137,4 @@ inline uint qHash (const QDeclarativeProperty &key) QT_END_NAMESPACE -QT_END_HEADER - #endif // QDECLARATIVEPROPERTY_H diff --git a/src/declarative/qml/qdeclarativepropertyvalueinterceptor.h b/src/declarative/qml/qdeclarativepropertyvalueinterceptor.h index 71050211..f0a0a717 100644 --- a/src/declarative/qml/qdeclarativepropertyvalueinterceptor.h +++ b/src/declarative/qml/qdeclarativepropertyvalueinterceptor.h @@ -45,8 +45,6 @@ #include <QtDeclarative/qtdeclarativeglobal.h> #include <QtCore/qobject.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE QT_MODULE(Declarative) @@ -67,6 +65,4 @@ Q_DECLARE_INTERFACE(QDeclarativePropertyValueInterceptor, QDeclarativePropertyVa QT_END_NAMESPACE -QT_END_HEADER - #endif // QDECLARATIVEPROPERTYVALUEINTERCEPTOR_H diff --git a/src/declarative/qml/qdeclarativepropertyvaluesource.h b/src/declarative/qml/qdeclarativepropertyvaluesource.h index fced27ec..e072fbd0 100644 --- a/src/declarative/qml/qdeclarativepropertyvaluesource.h +++ b/src/declarative/qml/qdeclarativepropertyvaluesource.h @@ -45,8 +45,6 @@ #include <QtDeclarative/qtdeclarativeglobal.h> #include <QtCore/qobject.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE QT_MODULE(Declarative) @@ -66,6 +64,4 @@ Q_DECLARE_INTERFACE(QDeclarativePropertyValueSource, QDeclarativePropertyValueSo QT_END_NAMESPACE -QT_END_HEADER - #endif // QDECLARATIVEPROPERTYVALUESOURCE_H diff --git a/src/declarative/qml/qdeclarativeproxymetaobject_p.h b/src/declarative/qml/qdeclarativeproxymetaobject_p.h index 2178a939..6bfe1991 100644 --- a/src/declarative/qml/qdeclarativeproxymetaobject_p.h +++ b/src/declarative/qml/qdeclarativeproxymetaobject_p.h @@ -61,8 +61,6 @@ #include <private/qobject_p.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE QT_MODULE(Declarative) @@ -94,7 +92,5 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QDECLARATIVEPROXYMETAOBJECT_P_H diff --git a/src/declarative/qml/qdeclarativerefcount_p.h b/src/declarative/qml/qdeclarativerefcount_p.h index 3c2780ee..ac847c6e 100644 --- a/src/declarative/qml/qdeclarativerefcount_p.h +++ b/src/declarative/qml/qdeclarativerefcount_p.h @@ -55,8 +55,6 @@ #include <QtDeclarative/qtdeclarativeglobal.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE QT_MODULE(Declarative) @@ -75,6 +73,4 @@ private: QT_END_NAMESPACE -QT_END_HEADER - #endif // QDECLARATIVEREFCOUNT_P_H diff --git a/src/declarative/qml/qdeclarativescriptparser_p.h b/src/declarative/qml/qdeclarativescriptparser_p.h index 831e1a40..42a29752 100644 --- a/src/declarative/qml/qdeclarativescriptparser_p.h +++ b/src/declarative/qml/qdeclarativescriptparser_p.h @@ -58,8 +58,6 @@ #include <QtCore/QList> #include <QtCore/QUrl> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE QT_MODULE(Declarative) @@ -75,7 +73,7 @@ public: public: Import() : type(Library) {} - enum Type { Library, File, Script }; + enum Type { Library, File, Script, Implicit }; //Implicit is only used internally Type type; QString uri; @@ -143,6 +141,4 @@ public: QT_END_NAMESPACE -QT_END_HEADER - #endif // QDECLARATIVESCRIPTPARSER_P_H diff --git a/src/declarative/qml/qdeclarativescriptstring.h b/src/declarative/qml/qdeclarativescriptstring.h index f84bb980..0bb58093 100644 --- a/src/declarative/qml/qdeclarativescriptstring.h +++ b/src/declarative/qml/qdeclarativescriptstring.h @@ -47,8 +47,6 @@ #include <QtCore/qshareddata.h> #include <QtCore/qmetatype.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE QT_MODULE(Declarative) @@ -82,7 +80,5 @@ QT_END_NAMESPACE Q_DECLARE_METATYPE(QDeclarativeScriptString) -QT_END_HEADER - #endif // QDECLARATIVESCRIPTSTRING_H diff --git a/src/declarative/qml/qdeclarativetypeloader.cpp b/src/declarative/qml/qdeclarativetypeloader.cpp index ee73b738..42847ea9 100644 --- a/src/declarative/qml/qdeclarativetypeloader.cpp +++ b/src/declarative/qml/qdeclarativetypeloader.cpp @@ -1055,19 +1055,6 @@ void QDeclarativeTypeData::resolveTypes() QDeclarativeEnginePrivate *ep = QDeclarativeEnginePrivate::get(m_typeLoader->engine()); QDeclarativeImportDatabase *importDatabase = &ep->importDatabase; - // For local urls, add an implicit import "." as first (most overridden) lookup. - // This will also trigger the loading of the qmldir and the import of any native - // types from available plugins. - if (QDeclarativeQmldirData *qmldir = qmldirForUrl(finalUrl().resolved(QUrl(QLatin1String("./qmldir"))))) { - m_imports.addImport(importDatabase, QLatin1String("."), - QString(), -1, -1, QDeclarativeScriptParser::Import::File, - qmldir->dirComponents(), 0); - } else { - m_imports.addImport(importDatabase, QLatin1String("."), - QString(), -1, -1, QDeclarativeScriptParser::Import::File, - QDeclarativeDirComponents(), 0); - } - foreach (const QDeclarativeScriptParser::Import &import, scriptParser.imports()) { QDeclarativeDirComponents qmldircomponentsnetwork; if (import.type == QDeclarativeScriptParser::Import::Script) @@ -1107,6 +1094,7 @@ void QDeclarativeTypeData::resolveTypes() } } + bool implicitImportLoaded = false; foreach (QDeclarativeScriptParser::TypeReference *parserRef, scriptParser.referencedTypes()) { QByteArray typeName = parserRef->name.toUtf8(); @@ -1123,23 +1111,49 @@ void QDeclarativeTypeData::resolveTypes() // Known to not be a type: // - known to be a namespace (Namespace {}) // - type with unknown namespace (UnknownNamespace.SomeType {}) - QDeclarativeError error; - error.setUrl(m_imports.baseUrl()); - QString userTypeName = parserRef->name; - userTypeName.replace(QLatin1Char('/'),QLatin1Char('.')); - if (typeNamespace) - error.setDescription(QDeclarativeTypeLoader::tr("Namespace %1 cannot be used as a type").arg(userTypeName)); - else - error.setDescription(QDeclarativeTypeLoader::tr("%1 %2").arg(userTypeName).arg(errorString)); - - if (!parserRef->refObjects.isEmpty()) { - QDeclarativeParser::Object *obj = parserRef->refObjects.first(); - error.setLine(obj->location.start.line); - error.setColumn(obj->location.start.column); + bool typeFound = false; + + if (!typeNamespace && !implicitImportLoaded) { + implicitImportLoaded = true; + // For local urls, add an implicit import "." as most overridden lookup. + // This will also trigger the loading of the qmldir and the import of any native + // types from available plugins. + // This is only done if the type is not otherwise found, side effects of plugin loading may be avoided + // ### This should be an acceptable variation because A) It's only side effects (and img providers) B) You shouldn't be doing that in "." anyways! + if (QDeclarativeQmldirData *qmldir = qmldirForUrl(finalUrl().resolved(QUrl(QLatin1String("./qmldir"))))) { + m_imports.addImport(importDatabase, QLatin1String("."), + QString(), -1, -1, QDeclarativeScriptParser::Import::Implicit, + qmldir->dirComponents(), 0); + } else { + m_imports.addImport(importDatabase, QLatin1String("."), + QString(), -1, -1, QDeclarativeScriptParser::Import::Implicit, + QDeclarativeDirComponents(), 0); + } + if (m_imports.resolveType(typeName, &ref.type, &url, &majorVersion, &minorVersion, + &typeNamespace, &errorString) || typeNamespace) { + typeFound = true; + } + } + + if (!typeFound) { + QDeclarativeError error; + error.setUrl(m_imports.baseUrl()); + QString userTypeName = parserRef->name; + userTypeName.replace(QLatin1Char('/'),QLatin1Char('.')); + if (typeNamespace) + error.setDescription(QDeclarativeTypeLoader::tr("Namespace %1 cannot be used as a type").arg(userTypeName)); + else + error.setDescription(QDeclarativeTypeLoader::tr("%1 %2").arg(userTypeName).arg(errorString)); + + if (!parserRef->refObjects.isEmpty()) { + QDeclarativeParser::Object *obj = parserRef->refObjects.first(); + error.setLine(obj->location.start.line); + error.setColumn(obj->location.start.column); + } + + setError(error); + return; } - - setError(error); - return; } if (ref.type) { diff --git a/src/declarative/qml/qdeclarativetypenotavailable_p.h b/src/declarative/qml/qdeclarativetypenotavailable_p.h index 7a6b46fc..c16231cb 100644 --- a/src/declarative/qml/qdeclarativetypenotavailable_p.h +++ b/src/declarative/qml/qdeclarativetypenotavailable_p.h @@ -44,8 +44,6 @@ #include <qdeclarative.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE QT_MODULE(Declarative) @@ -60,6 +58,4 @@ QT_END_NAMESPACE QML_DECLARE_TYPE(QDeclarativeTypeNotAvailable) -QT_END_HEADER - #endif // QDECLARATIVETYPENOTAVAILABLE_H diff --git a/src/declarative/qml/qdeclarativeworkerscript_p.h b/src/declarative/qml/qdeclarativeworkerscript_p.h index 1581fe57..ee271279 100644 --- a/src/declarative/qml/qdeclarativeworkerscript_p.h +++ b/src/declarative/qml/qdeclarativeworkerscript_p.h @@ -60,8 +60,6 @@ #include <QtScript/qscriptvalue.h> #include <QtCore/qurl.h> -QT_BEGIN_HEADER - QT_BEGIN_NAMESPACE QT_MODULE(Declarative) @@ -124,6 +122,4 @@ QT_END_NAMESPACE QML_DECLARE_TYPE(QDeclarativeWorkerScript) -QT_END_HEADER - #endif // QDECLARATIVEWORKERSCRIPT_P_H diff --git a/src/declarative/qml/rewriter/textwriter_p.h b/src/declarative/qml/rewriter/textwriter_p.h index 8a1dfdc8..38b81f6a 100644 --- a/src/declarative/qml/rewriter/textwriter_p.h +++ b/src/declarative/qml/rewriter/textwriter_p.h @@ -48,7 +48,6 @@ #include <QtCore/QList> #include <QtGui/QTextCursor> -QT_BEGIN_HEADER QT_QML_BEGIN_NAMESPACE namespace QDeclarativeJS { @@ -96,6 +95,5 @@ public: } // end of namespace QDeclarativeJS QT_QML_END_NAMESPACE -QT_END_HEADER #endif // TEXTWRITER_H |