From 0e4766465fc6e57eb8d93a9c6ab329527c0a1507 Mon Sep 17 00:00:00 2001 From: Christiaan Janssen Date: Mon, 24 Jan 2011 16:30:34 +0100 Subject: [PATCH] QmlDebugger: bypassing jsdebugger stop when querying expressions Reviewed-by: Kai Koehne --- src/plugins/debugger/debuggerengine.h | 1 + src/plugins/debugger/qml/qmladapter.cpp | 19 +++++++++++++++++++ src/plugins/debugger/qml/qmladapter.h | 2 ++ src/plugins/qmljsinspector/qmljsclientproxy.cpp | 8 ++++++-- 4 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/plugins/debugger/debuggerengine.h b/src/plugins/debugger/debuggerengine.h index 3c143aad63..9c1cd94588 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 b2591056d9..5386fadc67 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 a5e98d8786..52b5444851 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 4cc1c4e608..0b12c4caef 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; } -- 2.11.0