diff options
-rw-r--r-- | examples/quick/quick.pro | 5 | ||||
-rw-r--r-- | src/imports/layouts/qquicklayout.cpp | 5 | ||||
-rw-r--r-- | src/qml/qml/ftw/qqmlthread.cpp | 18 | ||||
-rw-r--r-- | src/qml/qml/qqmltypeloader.cpp | 16 | ||||
-rw-r--r-- | src/quick/items/qquickflickable.cpp | 3 | ||||
-rw-r--r-- | src/quick/items/qquickitemview.cpp | 15 | ||||
-rw-r--r-- | src/quick/scenegraph/qsgrenderloop.cpp | 3 |
7 files changed, 24 insertions, 41 deletions
diff --git a/examples/quick/quick.pro b/examples/quick/quick.pro index ef51d98d44..5a4d0c9931 100644 --- a/examples/quick/quick.pro +++ b/examples/quick/quick.pro @@ -21,12 +21,13 @@ SUBDIRS = quick-accessibility \ tutorials \ customitems \ imageprovider \ - imageresponseprovider \ window \ particles \ shapes \ demos - +qtConfig(thread) { +SUBDIRS = imageresponseprovider +} #OpenGL Support Required qtConfig(opengl(es1|es2)?) { SUBDIRS += \ diff --git a/src/imports/layouts/qquicklayout.cpp b/src/imports/layouts/qquicklayout.cpp index b3a5a2cfc8..d2bf0bbe8f 100644 --- a/src/imports/layouts/qquicklayout.cpp +++ b/src/imports/layouts/qquicklayout.cpp @@ -781,7 +781,12 @@ void QQuickLayout::itemChange(ItemChange change, const ItemChangeData &value) if (change == ItemChildAddedChange) { Q_D(QQuickLayout); QQuickItem *item = value.item; +#ifndef QT_NO_THREAD qmlobject_connect(item, QQuickItem, SIGNAL(baselineOffsetChanged(qreal)), this, QQuickLayout, SLOT(invalidateSenderItem())); +#else + // DirectConnection seems too quick for wasm here + QObject::connect(item, SIGNAL(baselineOffsetChanged(qreal)), this, SLOT(invalidateSenderItem())); +#endif QQuickItemPrivate::get(item)->addItemChangeListener(this, changeTypes); d->m_hasItemChangeListeners = true; if (isReady()) diff --git a/src/qml/qml/ftw/qqmlthread.cpp b/src/qml/qml/ftw/qqmlthread.cpp index 9c44e18b87..cffa1b64b0 100644 --- a/src/qml/qml/ftw/qqmlthread.cpp +++ b/src/qml/qml/ftw/qqmlthread.cpp @@ -106,9 +106,6 @@ void QQmlThreadPrivate::triggerMainEvent() { Q_ASSERT(q->isThisThread()); QCoreApplication::postEvent(&m_mainObject, new QEvent(QEvent::User)); -#ifdef Q_OS_HTML5 - QCoreApplication::processEvents(); -#endif } // Trigger even in thread. Must be called from main thread. @@ -116,9 +113,6 @@ void QQmlThreadPrivate::triggerThreadEvent() { Q_ASSERT(!q->isThisThread()); QCoreApplication::postEvent(this, new QEvent(QEvent::User)); -#ifdef Q_OS_HTML5 - QCoreApplication::processEvents(); -#endif } bool QQmlThreadPrivate::MainObject::event(QEvent *e) @@ -329,14 +323,12 @@ void QQmlThread::internalCallMethodInThread(Message *message) bool wasEmpty = d->threadList.isEmpty(); d->threadList.append(message); -#ifdef QT_NO_THREAD - d->mainSync = message; -#endif if (wasEmpty && d->m_threadProcessing == false) d->triggerThreadEvent(); - -#ifndef QT_NO_THREAD +#ifdef QT_NO_THREAD + message->call(this); +#else d->m_mainThreadWaiting = true; do { if (d->mainSync) { @@ -412,10 +404,6 @@ void QQmlThread::waitForNextMessage() Q_ASSERT(!isThisThread()); d->lock(); Q_ASSERT(d->m_mainThreadWaiting == false); - -#ifdef QT_NO_THREAD - d->triggerThreadEvent(); -#endif d->m_mainThreadWaiting = true; if (d->mainSync || !d->threadList.isEmpty()) { if (d->mainSync) { diff --git a/src/qml/qml/qqmltypeloader.cpp b/src/qml/qml/qqmltypeloader.cpp index ed742c3681..1cab827b9f 100644 --- a/src/qml/qml/qqmltypeloader.cpp +++ b/src/qml/qml/qqmltypeloader.cpp @@ -495,9 +495,8 @@ The setError() method may only be called from within a QQmlDataBlob callback. */ void QQmlDataBlob::addDependency(QQmlDataBlob *blob) { -#ifndef Q_OS_HTML5 ASSERT_CALLBACK(); -#endif + Q_ASSERT(status() != Null); if (!blob || @@ -1005,12 +1004,7 @@ struct StaticLoader { void loadThread(QQmlTypeLoader *loader, QQmlDataBlob *blob) const { -#ifdef QT_NO_THREAD - loader->m_thread->loadWithStaticDataAsync(blob, data); - return; -#else loader->loadWithStaticDataThread(blob, data); -#endif } void load(QQmlTypeLoader *loader, QQmlDataBlob *blob) const { @@ -1047,9 +1041,6 @@ void QQmlTypeLoader::doLoad(const Loader &loader, QQmlDataBlob *blob, Mode mode) qWarning("QQmlTypeLoader::doLoad(%s): %s thread", qPrintable(blob->urlString()), m_thread->isThisThread()?"Compile":"Engine"); #endif -#ifdef QT_NO_THREAD - mode = Asynchronous; -#endif if (m_thread->isThisThread()) { unlock(); loader.loadThread(this, blob); @@ -1688,7 +1679,6 @@ QQmlTypeData *QQmlTypeLoader::getType(const QUrl &url, Mode mode) } else if ((mode == PreferSynchronous || mode == Synchronous) && QQmlFile::isSynchronous(url)) { // this was started Asynchronous, but we need to force Synchronous // completion now (if at all possible with this type of URL). -#ifndef QT_NO_THREAD if (!m_thread->isThisThread()) { // this only works when called directly from the UI thread, but not // when recursively called on the QML thread via resolveTypes() @@ -1699,7 +1689,6 @@ QQmlTypeData *QQmlTypeLoader::getType(const QUrl &url, Mode mode) lock(); } } -#endif } typeData->addref(); @@ -1713,9 +1702,6 @@ QQmlTypeData will not be cached. */ QQmlTypeData *QQmlTypeLoader::getType(const QByteArray &data, const QUrl &url, Mode mode) { -#ifdef QT_NO_THREAD - mode = Asynchronous; -#endif LockHolder<QQmlTypeLoader> holder(this); QQmlTypeData *typeData = new QQmlTypeData(url, this); diff --git a/src/quick/items/qquickflickable.cpp b/src/quick/items/qquickflickable.cpp index cefe2de883..9c775f7e93 100644 --- a/src/quick/items/qquickflickable.cpp +++ b/src/quick/items/qquickflickable.cpp @@ -493,9 +493,6 @@ void QQuickFlickablePrivate::fixup(AxisData &data, qreal minExtent, qreal maxExt data.inOvershoot = false; fixupMode = Normal; data.vTime = timeline.time(); -#ifdef Q_OS_HTML5 - QCoreApplication::processEvents(QEventLoop::EventLoopExec); -#endif } static bool fuzzyLessThanOrEqualTo(qreal a, qreal b) diff --git a/src/quick/items/qquickitemview.cpp b/src/quick/items/qquickitemview.cpp index f2e055e874..bc8163d53c 100644 --- a/src/quick/items/qquickitemview.cpp +++ b/src/quick/items/qquickitemview.cpp @@ -331,9 +331,18 @@ void QQuickItemView::setModel(const QVariant &m) if (d->model) { d->bufferMode = QQuickItemViewPrivate::BufferBefore | QQuickItemViewPrivate::BufferAfter; - connect(d->model, SIGNAL(createdItem(int,QObject*)), this, SLOT(createdItem(int,QObject*))); - connect(d->model, SIGNAL(initItem(int,QObject*)), this, SLOT(initItem(int,QObject*))); - connect(d->model, SIGNAL(destroyingItem(QObject*)), this, SLOT(destroyingItem(QObject*))); + + Qt::ConnectionType type = Qt::AutoConnection; +#ifdef QT_NO_THREAD + // This is needed because the thread affinity of the receiving object + // will be different from the executing thread, when threads are not + // supported + type = Qt::DirectConnection; +#endif + QObject::connect(d->model, SIGNAL(createdItem(int,QObject*)), this, SLOT(createdItem(int,QObject*)), type); + QObject::connect(d->model, SIGNAL(initItem(int,QObject*)), this, SLOT(initItem(int,QObject*)), type); + QObject::connect(d->model, SIGNAL(destroyingItem(QObject*)), this, SLOT(destroyingItem(QObject*)), type); + if (isComponentComplete()) { d->updateSectionCriteria(); d->refill(); diff --git a/src/quick/scenegraph/qsgrenderloop.cpp b/src/quick/scenegraph/qsgrenderloop.cpp index 3cdf851a8f..c126bcee0a 100644 --- a/src/quick/scenegraph/qsgrenderloop.cpp +++ b/src/quick/scenegraph/qsgrenderloop.cpp @@ -474,9 +474,6 @@ void QSGGuiThreadRenderLoop::renderWindow(QQuickWindow *window) // Might have been set during syncSceneGraph() if (data.updatePending) maybeUpdate(window); -#ifdef Q_OS_HTML5 - QCoreApplication::processEvents(QEventLoop::EventLoopExec); -#endif } void QSGGuiThreadRenderLoop::exposureChanged(QQuickWindow *window) |