Move exports conflicting with QtDeclarative into namespace
authorKai Koehne <kai.koehne@digia.com>
Wed, 8 May 2013 08:24:15 +0000 (10:24 +0200)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Wed, 15 May 2013 07:32:58 +0000 (09:32 +0200)
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 <ogoffart@woboq.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Alan Alpert <aalpert@blackberry.com>
src/qml/qml/qqml.h
src/qml/qml/qqmlengine.cpp
src/qml/qml/qqmlinfo.cpp
src/qml/qml/qqmlinfo.h

index f04cf7d..fb0133f 100644 (file)
@@ -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<typename T>
 QObject *qmlAttachedPropertiesObject(const QObject *obj, bool create = true)
index 377d0c4..bb3ac93 100644 (file)
@@ -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
index 66670e2..32f0eee 100644 (file)
@@ -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<QQmlError> &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<QQmlError> &errors)
+{
+    return QtQml::qmlInfo(me, errors);
+}
+
+#endif // QT_DEPRECATED_SINCE(5, 1)
 
 QT_END_NAMESPACE
index 16fca94..56ac788 100644 (file)
 
 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<QQmlError> &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<QQmlError> &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<QQmlError> &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<QQmlError> &errors);
-
 QT_END_NAMESPACE
 
 #endif // QQMLINFO_H