From bb02a1eda2650d6fa6d75d9edcf23e606d80f15a Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Fri, 15 Jan 2016 14:45:40 -0800 Subject: [PATCH] Fix JS web window crash caused by race condition --- libraries/ui/src/QmlWebWindowClass.cpp | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/libraries/ui/src/QmlWebWindowClass.cpp b/libraries/ui/src/QmlWebWindowClass.cpp index 8bf36b111f..96e99654c8 100644 --- a/libraries/ui/src/QmlWebWindowClass.cpp +++ b/libraries/ui/src/QmlWebWindowClass.cpp @@ -42,19 +42,15 @@ QmlWebWindowClass::QmlWebWindowClass(QObject* qmlWindow) : QmlWindowClass(qmlWin void QmlWebWindowClass::handleNavigation(const QString& url) { } -QString QmlWebWindowClass::getURL() const { - if (QThread::currentThread() != thread()) { - QString result; - QMetaObject::invokeMethod(const_cast(this), "getURL", Qt::BlockingQueuedConnection, Q_RETURN_ARG(QString, result)); - return result; - } - - return _qmlWindow->property(URL_PROPERTY).toString(); +QString QmlWebWindowClass::getURL() const { + QVariant result = DependencyManager::get()->returnFromUiThread([&]()->QVariant { + return _qmlWindow->property(URL_PROPERTY); + }); + return result.toString(); } void QmlWebWindowClass::setURL(const QString& urlString) { - if (QThread::currentThread() != thread()) { - QMetaObject::invokeMethod(this, "setURL", Qt::QueuedConnection, Q_ARG(QString, urlString)); - } - _qmlWindow->setProperty(URL_PROPERTY, urlString); -} \ No newline at end of file + DependencyManager::get()->executeOnUiThread([=] { + _qmlWindow->setProperty(URL_PROPERTY, urlString); + }); +}