aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml/qqmlnotifier.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/qml/qml/qqmlnotifier.cpp')
-rw-r--r--src/qml/qml/qqmlnotifier.cpp20
1 files changed, 19 insertions, 1 deletions
diff --git a/src/qml/qml/qqmlnotifier.cpp b/src/qml/qml/qqmlnotifier.cpp
index 1ed3a2957d..20b90a7111 100644
--- a/src/qml/qml/qqmlnotifier.cpp
+++ b/src/qml/qml/qqmlnotifier.cpp
@@ -41,6 +41,8 @@
#include "qqmlnotifier_p.h"
#include "qqmlproperty_p.h"
+#include <QtCore/qdebug.h>
+#include <private/qthread_p.h>
QT_BEGIN_NAMESPACE
@@ -67,10 +69,26 @@ void QQmlNotifier::emitNotify(QQmlNotifierEndpoint *endpoint, void **a)
else if (endpoint) endpoint->notifying = 0;
}
-void QQmlNotifierEndpoint::connect(QObject *source, int sourceSignal)
+void QQmlNotifierEndpoint::connect(QObject *source, int sourceSignal, QQmlEngine *engine)
{
disconnect();
+ Q_ASSERT(engine);
+ if (QObjectPrivate::get(source)->threadData->threadId !=
+ QObjectPrivate::get(engine)->threadData->threadId) {
+
+ QString sourceName;
+ QDebug(&sourceName) << source;
+ sourceName = sourceName.left(sourceName.length() - 1);
+ QString engineName;
+ QDebug(&engineName).nospace() << engine;
+ engineName = engineName.left(engineName.length() - 1);
+
+ qFatal("QQmlEngine: Illegal attempt to connect to %s that is in"
+ " a different thread than the QML engine %s.", qPrintable(sourceName),
+ qPrintable(engineName));
+ }
+
this->source = source;
this->sourceSignal = sourceSignal;
QQmlPropertyPrivate::flushSignal(source, sourceSignal);