diff options
Diffstat (limited to 'src/qml')
-rw-r--r-- | src/qml/animations/qabstractanimationjob.cpp | 13 | ||||
-rw-r--r-- | src/qml/qml/qqmlengine.cpp | 11 | ||||
-rw-r--r-- | src/qml/qml/qqmlengine_p.h | 4 | ||||
-rw-r--r-- | src/qml/qml/qqmlvme.cpp | 32 |
4 files changed, 43 insertions, 17 deletions
diff --git a/src/qml/animations/qabstractanimationjob.cpp b/src/qml/animations/qabstractanimationjob.cpp index 20b8b4bf57..df8431e746 100644 --- a/src/qml/animations/qabstractanimationjob.cpp +++ b/src/qml/animations/qabstractanimationjob.cpp @@ -44,6 +44,7 @@ #include "private/qabstractanimationjob_p.h" #include "private/qanimationgroupjob_p.h" #include "private/qanimationjobutil_p.h" +#include "private/qqmlengine_p.h" #define DEFAULT_TIMER_INTERVAL 16 @@ -473,7 +474,17 @@ void QAbstractAnimationJob::start() { if (m_state == Running) return; - setState(Running); + + if (QQmlEnginePrivate::designerMode()) { + if (state() != Stopped) { + m_currentTime = duration(); + m_totalCurrentTime = totalDuration(); + setState(Running); + setState(Stopped); + } + } else { + setState(Running); + } } void QAbstractAnimationJob::stop() diff --git a/src/qml/qml/qqmlengine.cpp b/src/qml/qml/qqmlengine.cpp index f0bf6e4e20..1376ad7106 100644 --- a/src/qml/qml/qqmlengine.cpp +++ b/src/qml/qml/qqmlengine.cpp @@ -165,6 +165,7 @@ void qmlRegisterBaseTypes(const char *uri, int versionMajor, int versionMinor) */ bool QQmlEnginePrivate::qml_debugging_enabled = false; +bool QQmlEnginePrivate::s_designerMode = false; // these types are part of the QML language void QQmlEnginePrivate::registerBaseTypes(const char *uri, int versionMajor, int versionMinor) @@ -192,6 +193,16 @@ void QQmlEnginePrivate::defineQtQuick2Module() qmlRegisterUncreatableType<QQmlLocale>("QtQuick", 2, 0, "Locale", QQmlEngine::tr("Locale cannot be instantiated. Use Qt.locale()")); } +bool QQmlEnginePrivate::designerMode() +{ + return s_designerMode; +} + +void QQmlEnginePrivate::activateDesignerMode() +{ + s_designerMode = true; +} + /*! \class QQmlImageProviderBase diff --git a/src/qml/qml/qqmlengine_p.h b/src/qml/qml/qqmlengine_p.h index cc07ee5a2e..4f1ab84104 100644 --- a/src/qml/qml/qqmlengine_p.h +++ b/src/qml/qml/qqmlengine_p.h @@ -265,6 +265,9 @@ public: static void registerQtQuick2Types(const char *uri, int versionMajor, int versionMinor); static void defineQtQuick2Module(); + static bool designerMode(); + static void activateDesignerMode(); + static bool qml_debugging_enabled; mutable QMutex mutex; @@ -305,6 +308,7 @@ private: QHash<int, int> m_qmlLists; QHash<int, QQmlCompiledData *> m_compositeTypes; QHash<QUrl, QByteArray> debugChangesHash; + static bool s_designerMode; // These members is protected by the full QQmlEnginePrivate::mutex mutex struct Deletable { Deletable():next(0) {} virtual ~Deletable() {} Deletable *next; }; diff --git a/src/qml/qml/qqmlvme.cpp b/src/qml/qml/qqmlvme.cpp index 12de9ffebd..3ad442fb36 100644 --- a/src/qml/qml/qqmlvme.cpp +++ b/src/qml/qml/qqmlvme.cpp @@ -1322,28 +1322,28 @@ QQmlContextData *QQmlVME::complete(const Interrupt &interrupt) bindValues.deallocate(); } - { - QQmlTrace trace("VME Component Complete"); - while (!parserStatus.isEmpty()) { - QQmlParserStatus *status = parserStatus.pop(); + if (!QQmlEnginePrivate::designerMode()) { // the qml designer does the component complete later + QQmlTrace trace("VME Component Complete"); + while (!parserStatus.isEmpty()) { + QQmlParserStatus *status = parserStatus.pop(); #ifdef QML_ENABLE_TRACE - QQmlData *data = parserStatusData.pop(); + QQmlData *data = parserStatusData.pop(); #endif - if (status && status->d) { - status->d = 0; + if (status && status->d) { + status->d = 0; #ifdef QML_ENABLE_TRACE - QQmlTrace trace("Component complete"); - trace.addDetail("URL", data->outerContext->url); - trace.addDetail("Line", data->lineNumber); + QQmlTrace trace("Component complete"); + trace.addDetail("URL", data->outerContext->url); + trace.addDetail("Line", data->lineNumber); #endif - status->componentComplete(); + status->componentComplete(); + } + + if (watcher.hasRecursed() || interrupt.shouldInterrupt()) + return 0; } - - if (watcher.hasRecursed() || interrupt.shouldInterrupt()) - return 0; - } - parserStatus.deallocate(); + parserStatus.deallocate(); } { |