From c74e4a74ba97d32df7406fb684527d415dd8a6ba Mon Sep 17 00:00:00 2001 From: Kai Koehne Date: Wed, 8 May 2013 10:24:15 +0200 Subject: [PATCH] Move exports conflicting with QtDeclarative into namespace Move exported qml* symbols that conflict with QtDeclarative into an - automatically imported - namespace. This ensures apps can link against both QtDeclarative and QtQml. To keep the BC promise the old symbols are still exported. Task-number: QTBUG-29584 Change-Id: I3d31c36ca4e2faaf6f5d67a77c5c5a304c0338a4 Reviewed-by: Olivier Goffart Reviewed-by: Thiago Macieira Reviewed-by: Alan Alpert --- src/qml/qml/qqml.h | 16 +++++++++++----- src/qml/qml/qqmlengine.cpp | 37 +++++++++++++++++++++++++++++++++++++ src/qml/qml/qqmlinfo.cpp | 24 ++++++++++++++++++++++++ src/qml/qml/qqmlinfo.h | 19 ++++++++++++------- 4 files changed, 84 insertions(+), 12 deletions(-) diff --git a/src/qml/qml/qqml.h b/src/qml/qml/qqml.h index f04cf7d..fb0133f 100644 --- a/src/qml/qml/qqml.h +++ b/src/qml/qml/qqml.h @@ -419,11 +419,17 @@ class QQmlContext; class QQmlEngine; class QJSValue; class QJSEngine; -Q_QML_EXPORT void qmlExecuteDeferred(QObject *); -Q_QML_EXPORT QQmlContext *qmlContext(const QObject *); -Q_QML_EXPORT QQmlEngine *qmlEngine(const QObject *); -Q_QML_EXPORT QObject *qmlAttachedPropertiesObjectById(int, const QObject *, bool create = true); -Q_QML_EXPORT QObject *qmlAttachedPropertiesObject(int *, const QObject *, const QMetaObject *, bool create); + +namespace QtQml { + // declared in namespace to avoid symbol conflicts with QtDeclarative + Q_QML_EXPORT void qmlExecuteDeferred(QObject *); + Q_QML_EXPORT QQmlContext *qmlContext(const QObject *); + Q_QML_EXPORT QQmlEngine *qmlEngine(const QObject *); + Q_QML_EXPORT QObject *qmlAttachedPropertiesObjectById(int, const QObject *, bool create = true); + Q_QML_EXPORT QObject *qmlAttachedPropertiesObject(int *, const QObject *, + const QMetaObject *, bool create); +} +using namespace QtQml; template QObject *qmlAttachedPropertiesObject(const QObject *obj, bool create = true) diff --git a/src/qml/qml/qqmlengine.cpp b/src/qml/qml/qqmlengine.cpp index 377d0c4..bb3ac93 100644 --- a/src/qml/qml/qqmlengine.cpp +++ b/src/qml/qml/qqmlengine.cpp @@ -1279,6 +1279,8 @@ void QQmlEnginePrivate::doDeleteInEngineThread() delete d; } +namespace QtQml { + Q_AUTOTEST_EXPORT void qmlExecuteDeferred(QObject *object) { QQmlData *data = QQmlData::get(object); @@ -1352,6 +1354,41 @@ QObject *qmlAttachedPropertiesObject(int *idCache, const QObject *object, return qmlAttachedPropertiesObjectById(*idCache, object, create); } +} // namespace QtQml + +#if QT_DEPRECATED_SINCE(5, 1) + +// Also define symbols outside namespace to keep binary compatibility with Qt 5.0 + +Q_QML_EXPORT void qmlExecuteDeferred(QObject *obj) +{ + QtQml::qmlExecuteDeferred(obj); +} + +Q_QML_EXPORT QQmlContext *qmlContext(const QObject *obj) +{ + return QtQml::qmlContext(obj); +} + +Q_QML_EXPORT QQmlEngine *qmlEngine(const QObject *obj) +{ + return QtQml::qmlEngine(obj); +} + +Q_QML_EXPORT QObject *qmlAttachedPropertiesObjectById(int id, const QObject *obj, bool create) +{ + return QtQml::qmlAttachedPropertiesObjectById(id, obj, create); +} + +Q_QML_EXPORT QObject *qmlAttachedPropertiesObject(int *idCache, const QObject *object, + const QMetaObject *attachedMetaObject, + bool create) +{ + return QtQml::qmlAttachedPropertiesObject(idCache, object, attachedMetaObject, create); +} + +#endif // QT_DEPRECATED_SINCE(5, 1) + QQmlDebuggingEnabler::QQmlDebuggingEnabler(bool printWarning) { #ifndef QQML_NO_DEBUG_PROTOCOL diff --git a/src/qml/qml/qqmlinfo.cpp b/src/qml/qml/qqmlinfo.cpp index 66670e2..32f0eee 100644 --- a/src/qml/qml/qqmlinfo.cpp +++ b/src/qml/qml/qqmlinfo.cpp @@ -165,6 +165,8 @@ QQmlInfo::~QQmlInfo() } } +namespace QtQml { + QQmlInfo qmlInfo(const QObject *me) { QQmlInfoPrivate *d = new QQmlInfoPrivate; @@ -188,5 +190,27 @@ QQmlInfo qmlInfo(const QObject *me, const QList &errors) return QQmlInfo(d); } +} // namespace QtQml + +#if QT_DEPRECATED_SINCE(5, 1) + +// Also define symbols outside namespace to keep binary compatibility with Qt 5.0 + +QQmlInfo qmlInfo(const QObject *me) +{ + return QtQml::qmlInfo(me); +} + +QQmlInfo qmlInfo(const QObject *me, const QQmlError &error) +{ + return QtQml::qmlInfo(me, error); +} + +QQmlInfo qmlInfo(const QObject *me, const QList &errors) +{ + return QtQml::qmlInfo(me, errors); +} + +#endif // QT_DEPRECATED_SINCE(5, 1) QT_END_NAMESPACE diff --git a/src/qml/qml/qqmlinfo.h b/src/qml/qml/qqmlinfo.h index 16fca94..56ac788 100644 --- a/src/qml/qml/qqmlinfo.h +++ b/src/qml/qml/qqmlinfo.h @@ -48,6 +48,15 @@ QT_BEGIN_NAMESPACE +class QQmlInfo; + +namespace QtQml { + // declared in namespace to avoid symbol conflicts with QtDeclarative + Q_QML_EXPORT QQmlInfo qmlInfo(const QObject *me); + Q_QML_EXPORT QQmlInfo qmlInfo(const QObject *me, const QQmlError &error); + Q_QML_EXPORT QQmlInfo qmlInfo(const QObject *me, const QList &errors); +} +using namespace QtQml; class QQmlInfoPrivate; class Q_QML_EXPORT QQmlInfo : public QDebug @@ -82,18 +91,14 @@ public: #endif private: - friend Q_QML_EXPORT QQmlInfo qmlInfo(const QObject *me); - friend Q_QML_EXPORT QQmlInfo qmlInfo(const QObject *me, const QQmlError &error); - friend Q_QML_EXPORT QQmlInfo qmlInfo(const QObject *me, const QList &errors); + friend Q_QML_EXPORT QQmlInfo QtQml::qmlInfo(const QObject *me); + friend Q_QML_EXPORT QQmlInfo QtQml::qmlInfo(const QObject *me, const QQmlError &error); + friend Q_QML_EXPORT QQmlInfo QtQml::qmlInfo(const QObject *me, const QList &errors); QQmlInfo(QQmlInfoPrivate *); QQmlInfoPrivate *d; }; -Q_QML_EXPORT QQmlInfo qmlInfo(const QObject *me); -Q_QML_EXPORT QQmlInfo qmlInfo(const QObject *me, const QQmlError &error); -Q_QML_EXPORT QQmlInfo qmlInfo(const QObject *me, const QList &errors); - QT_END_NAMESPACE #endif // QQMLINFO_H -- 1.7.2.5