DesignerSupport: Adding separate flag for component completion
authorThomas Hartmann <Thomas.Hartmann@digia.com>
Tue, 9 Apr 2013 10:54:09 +0000 (12:54 +0200)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Thu, 11 Apr 2013 06:50:58 +0000 (08:50 +0200)
The designer should only disable completion of components
if the component is created directly by the designer.

Change-Id: Id86d2b2f2e61355240bdbbb7875db3e97fb0da17
Reviewed-by: Marco Bubke <marco.bubke@digia.com>
src/qml/qml/qqmlvme.cpp
src/qml/qml/qqmlvme_p.h
src/quick/designer/designersupport.cpp
src/quick/designer/designersupport.h

index 8198eec..c34b922 100644 (file)
@@ -91,6 +91,8 @@ using namespace QQmlVMETypes;
         goto exceptionExit; \
     }
 
+bool QQmlVME::s_enableComponentComplete = true;
+
 void QQmlVME::init(QQmlContextData *ctxt, QQmlCompiledData *comp, int start,
                            QQmlContextData *creation)
 {
@@ -1326,7 +1328,7 @@ QQmlContextData *QQmlVME::complete(const Interrupt &interrupt)
     bindValues.deallocate();
     }
 
-    if (!QQmlEnginePrivate::designerMode()) { // the qml designer does the component complete later
+    if (componentCompleteEnabled()) { // the qml designer does the component complete later
         QQmlTrace trace("VME Component Complete");
         while (!parserStatus.isEmpty()) {
             QQmlParserStatus *status = parserStatus.pop();
@@ -1390,6 +1392,21 @@ QQmlContextData *QQmlVME::complete(const Interrupt &interrupt)
     return rv;
 }
 
+void QQmlVME::enableComponentComplete()
+{
+    s_enableComponentComplete = true;
+}
+
+void QQmlVME::disableComponentComplete()
+{
+    s_enableComponentComplete = false;
+}
+
+bool QQmlVME::componentCompleteEnabled()
+{
+    return s_enableComponentComplete;
+}
+
 void QQmlVME::blank(QFiniteStack<QQmlAbstractBinding *> &bs)
 {
     for (int ii = 0; ii < bs.count(); ++ii) {
index 62ba47f..405a83c 100644 (file)
@@ -140,6 +140,10 @@ public:
     QObject *execute(QList<QQmlError> *errors, const Interrupt & = Interrupt());
     QQmlContextData *complete(const Interrupt & = Interrupt());
 
+    static void enableComponentComplete();
+    static void disableComponentComplete();
+    static bool componentCompleteEnabled();
+
 private:
     friend class QQmlVMEGuard;
 
@@ -179,6 +183,8 @@ private:
 
     static void blank(QFiniteStack<QQmlParserStatus *> &);
     static void blank(QFiniteStack<QQmlAbstractBinding *> &);
+
+    static bool s_enableComponentComplete;
 };
 
 // Used to check that a QQmlVME that is interrupted mid-execution
index 7f75857..063fa6e 100644 (file)
@@ -437,6 +437,16 @@ void DesignerSupport::activateDesignerMode()
     QQmlEnginePrivate::activateDesignerMode();
 }
 
+void DesignerSupport::disableComponentComplete()
+{
+    QQmlVME::disableComponentComplete();
+}
+
+void DesignerSupport::enableComponentComplete()
+{
+    QQmlVME::enableComponentComplete();
+}
+
 void DesignerSupport::createOpenGLContext(QQuickWindow *window)
 {
     DesignerWindowManager::createOpenGLContext(window);
index c93cffa..4567e5c 100644 (file)
@@ -145,6 +145,9 @@ public:
     static void activateDesignerWindowManager();
     static void activateDesignerMode();
 
+    static void disableComponentComplete();
+    static void enableComponentComplete();
+
     static void createOpenGLContext(QQuickWindow *window);
 
     static void polishItems(QQuickWindow *window);