diff options
Diffstat (limited to 'src/plugins/debugger/qml/qmlengine.cpp')
-rw-r--r-- | src/plugins/debugger/qml/qmlengine.cpp | 66 |
1 files changed, 40 insertions, 26 deletions
diff --git a/src/plugins/debugger/qml/qmlengine.cpp b/src/plugins/debugger/qml/qmlengine.cpp index abc050cf4c..f0e6ebc572 100644 --- a/src/plugins/debugger/qml/qmlengine.cpp +++ b/src/plugins/debugger/qml/qmlengine.cpp @@ -57,6 +57,7 @@ #include <extensionsystem/pluginmanager.h> #include <projectexplorer/applicationlauncher.h> #include <qmljsdebugclient/qdeclarativeoutputparser.h> +#include <qmljsdebugclient/qmlenginedebugclient.h> #include <qmljseditor/qmljseditorconstants.h> #include <qmljs/parser/qmljsast_p.h> #include <qmljs/qmljsmodelmanagerinterface.h> @@ -119,13 +120,16 @@ private: InteractiveInterpreter m_interpreter; bool m_validContext; QHash<QString,BreakpointModelId> pendingBreakpoints; + QList<quint32> queryIds; bool m_retryOnConnectFail; + bool m_automaticConnect; }; QmlEnginePrivate::QmlEnginePrivate(QmlEngine *q) : m_adapter(q), m_validContext(false), - m_retryOnConnectFail(false) + m_retryOnConnectFail(false), + m_automaticConnect(false) {} class ASTWalker: public Visitor @@ -367,6 +371,7 @@ QmlEngine::QmlEngine(const DebuggerStartParameters &startParameters, if (startParameters.useTerminal) { d->m_noDebugOutputTimer.setInterval(0); d->m_retryOnConnectFail = true; + d->m_automaticConnect = true; } } @@ -397,6 +402,9 @@ void QmlEngine::setupInferior() QTC_ASSERT(state() == InferiorSetupRequested, qDebug() << state()); notifyInferiorSetupOk(); + + if (d->m_automaticConnect) + beginConnection(); } void QmlEngine::appendMessage(const QString &msg, Utils::OutputFormat /* format */) @@ -421,12 +429,22 @@ void QmlEngine::tryToConnect(quint16 port) { showMessage(QLatin1String("QML Debugger: No application output received in time, trying to connect ..."), LogStatus); d->m_retryOnConnectFail = true; - beginConnection(port); + if (state() == EngineRunRequested + && !d->m_automaticConnect) + beginConnection(port); + else + d->m_automaticConnect = true; } void QmlEngine::beginConnection(quint16 port) { d->m_noDebugOutputTimer.stop(); + + if (state() != EngineRunRequested && d->m_retryOnConnectFail) + return; + + QTC_ASSERT(state() == EngineRunRequested, return) + if (port > 0) { QTC_CHECK(startParameters().communicationChannel == DebuggerStartParameters::CommunicationChannelTcpIp); @@ -1038,23 +1056,15 @@ void QmlEngine::synchronizeWatchers() } } -void QmlEngine::onDebugQueryStateChanged( - QmlJsDebugClient::QDeclarativeDebugQuery::State state) +void QmlEngine::expressionEvaluated(quint32 queryId, const QVariant &result) { - QmlJsDebugClient::QDeclarativeDebugExpressionQuery *query = - qobject_cast<QmlJsDebugClient::QDeclarativeDebugExpressionQuery *>( - sender()); - if (query && state != QmlJsDebugClient::QDeclarativeDebugQuery::Error) { + if (d->queryIds.contains(queryId)) { + d->queryIds.removeOne(queryId); QtMessageLogItem *item = constructLogItemTree(qtMessageLogHandler()->root(), - query->result()); + result); if (item) qtMessageLogHandler()->appendItem(item); - } else - qtMessageLogHandler()-> - appendItem(new QtMessageLogItem(qtMessageLogHandler()->root(), - QtMessageLogHandler::ErrorType, - _("Error evaluating expression."))); - delete query; + } } bool QmlEngine::hasCapability(unsigned cap) const @@ -1152,21 +1162,25 @@ bool QmlEngine::evaluateScriptExpression(const QString& expression) //is sent to V8DebugService. In all other cases, the //expression is evaluated by QDeclarativeEngine. if (state() != InferiorStopOk) { - QDeclarativeEngineDebug *engineDebug = + QmlEngineDebugClient *engineDebug = d->m_adapter.engineDebugClient(); int id = d->m_adapter.currentSelectedDebugId(); if (engineDebug && id != -1) { - QDeclarativeDebugExpressionQuery *query = - engineDebug->queryExpressionResult(id, expression); - connect(query, - SIGNAL(stateChanged( - QmlJsDebugClient::QDeclarativeDebugQuery - ::State)), - this, - SLOT(onDebugQueryStateChanged( - QmlJsDebugClient::QDeclarativeDebugQuery - ::State))); + quint32 queryId = + engineDebug->queryExpressionResult( + id, expression); + if (queryId) { + d->queryIds << queryId; + } else { + didEvaluate = false; + qtMessageLogHandler()-> + appendItem( + new QtMessageLogItem( + qtMessageLogHandler()->root(), + QtMessageLogHandler::ErrorType, + _("Error evaluating expression."))); + } } } else { executeDebuggerCommand(expression); |