diff --git a/src/plugins/debugger/debuggerengine.h b/src/plugins/debugger/debuggerengine.h index 3c143aad635..9c1cd94588b 100644 --- a/src/plugins/debugger/debuggerengine.h +++ b/src/plugins/debugger/debuggerengine.h @@ -357,6 +357,7 @@ private: // Wrapper engine needs access to state of its subengines. friend class Internal::QmlCppEngine; friend class Internal::DebuggerPluginPrivate; + friend class QmlAdapter; virtual void setState(DebuggerState state, bool forced = false); diff --git a/src/plugins/debugger/qml/qmladapter.cpp b/src/plugins/debugger/qml/qmladapter.cpp index b2591056d95..5386fadc679 100644 --- a/src/plugins/debugger/qml/qmladapter.cpp +++ b/src/plugins/debugger/qml/qmladapter.cpp @@ -273,6 +273,25 @@ void QmlAdapter::setConnectionAttemptInterval(int interval) d->m_connectionTimer.setInterval(interval); } +bool QmlAdapter::disableJsDebugging(bool block) +{ + if (d->m_engine.isNull()) + return block; + + bool isBlocked = d->m_engine.data()->state() == InferiorRunOk; + + if (isBlocked == block) + return block; + + if (block) + d->m_engine.data()->continueInferior(); + else + d->m_engine.data()->requestInterruptInferior(); + + return isBlocked; +} + + void QmlAdapter::logServiceStatusChange(const QString &service, QDeclarativeDebugClient::Status newStatus) { switch (newStatus) { diff --git a/src/plugins/debugger/qml/qmladapter.h b/src/plugins/debugger/qml/qmladapter.h index a5e98d8786c..52b5444851c 100644 --- a/src/plugins/debugger/qml/qmladapter.h +++ b/src/plugins/debugger/qml/qmladapter.h @@ -76,6 +76,8 @@ public: void setMaxConnectionAttempts(int maxAttempts); void setConnectionAttemptInterval(int interval); + bool disableJsDebugging(bool block); + public slots: void logServiceStatusChange(const QString &service, QDeclarativeDebugClient::Status newStatus); void logServiceActivity(const QString &service, const QString &logMessage); diff --git a/src/plugins/qmljsinspector/qmljsclientproxy.cpp b/src/plugins/qmljsinspector/qmljsclientproxy.cpp index 4cc1c4e608d..0b12c4caeff 100644 --- a/src/plugins/qmljsinspector/qmljsclientproxy.cpp +++ b/src/plugins/qmljsinspector/qmljsclientproxy.cpp @@ -322,8 +322,12 @@ QDeclarativeDebugExpressionQuery *ClientProxy::queryExpressionResult(int objectD { if (debug) qDebug() << "queryExpressionResult():" << objectDebugId << expr << parent; - if (objectDebugId != -1) - return m_engineClient->queryExpressionResult(objectDebugId,expr,parent); + if (objectDebugId != -1) { + bool block = m_adapter->disableJsDebugging(true); + QDeclarativeDebugExpressionQuery *query = m_engineClient->queryExpressionResult(objectDebugId,expr,parent); + m_adapter->disableJsDebugging(block); + return query; + } return 0; }