Add a static flag to avoid unnecessary QQmlData::init() calls
authorCharles Yin <charles.yin@nokia.com>
Wed, 2 May 2012 23:55:48 +0000 (09:55 +1000)
committerQt by Nokia <qt-info@nokia.com>
Thu, 3 May 2012 01:56:02 +0000 (03:56 +0200)
Change-Id: I0b38753bfaf2d1e22ab67977001b946a686b0f56
Reviewed-by: Matthew Vogt <matthew.vogt@nokia.com>
src/qml/qml/qqmldata_p.h
src/qml/qml/qqmlengine.cpp

index 0686830..e97bbb1 100644 (file)
@@ -83,14 +83,19 @@ public:
           bindings(0), signalHandlers(0), nextContextObject(0), prevContextObject(0), bindingBitsSize(0), bindingBits(0),
           lineNumber(0), columnNumber(0), deferredComponent(0), deferredIdx(0), v8objectid(0), 
           propertyCache(0), guards(0), extendedData(0) {
+        init();
     }
 
     static inline void init() {
-        QAbstractDeclarativeData::destroyed = destroyed;
-        QAbstractDeclarativeData::parentChanged = parentChanged;
-        QAbstractDeclarativeData::objectNameChanged = objectNameChanged;
-        QAbstractDeclarativeData::signalEmitted = signalEmitted;
-        QAbstractDeclarativeData::receivers = receivers;
+        static bool initialized = false;
+        if (!initialized) {
+            initialized = true;
+            QAbstractDeclarativeData::destroyed = destroyed;
+            QAbstractDeclarativeData::parentChanged = parentChanged;
+            QAbstractDeclarativeData::objectNameChanged = objectNameChanged;
+            QAbstractDeclarativeData::signalEmitted = signalEmitted;
+            QAbstractDeclarativeData::receivers = receivers;
+        }
     }
 
     static void destroyed(QAbstractDeclarativeData *, QObject *);
index 5ae35f9..7cb766b 100644 (file)
@@ -468,15 +468,6 @@ int QQmlData::endpointCount(int index)
     return count;
 }
 
-namespace {
-    class QQmlDataInitializer {
-    public:
-        QQmlDataInitializer() {
-            QQmlData::init();
-        }
-    } _initializer;
-}
-
 void QQmlEnginePrivate::init()
 {
     Q_Q(QQmlEngine);
@@ -485,6 +476,7 @@ void QQmlEnginePrivate::init()
     if (firstTime) {
         qmlRegisterType<QQmlComponent>("QML", 1, 0, "Component");
 
+        QQmlData::init();
         firstTime = false;
     }