diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp index 04befbf071c..72bdb341a3e 100644 --- a/src/plugins/debugger/debuggerengine.cpp +++ b/src/plugins/debugger/debuggerengine.cpp @@ -2411,6 +2411,7 @@ void DebuggerEngine::updateWatchData(const QString &iname) // e.g. when changing the expression in a watcher. UpdateParameters params; params.partialVariable = iname; + params.qmlFocusOnFrame = false; doUpdateLocals(params); } diff --git a/src/plugins/debugger/debuggerengine.h b/src/plugins/debugger/debuggerengine.h index 354ebb95fe0..aed61bbc2e4 100644 --- a/src/plugins/debugger/debuggerengine.h +++ b/src/plugins/debugger/debuggerengine.h @@ -214,6 +214,7 @@ public: } QString partialVariable; + bool qmlFocusOnFrame = true; // QTCREATORBUG-29874 }; class Location diff --git a/src/plugins/debugger/qml/qmlengine.cpp b/src/plugins/debugger/qml/qmlengine.cpp index d418d9cb4dc..3f18b5f5fc8 100644 --- a/src/plugins/debugger/qml/qmlengine.cpp +++ b/src/plugins/debugger/qml/qmlengine.cpp @@ -141,7 +141,7 @@ public: void evaluate(const QString expr, qint64 context, const QmlCallback &cb); void lookup(const LookupItems &items); void backtrace(); - void updateLocals(); + void updateLocals(bool focusOnFrame = true); void scope(int number, int frameNumber = -1); void scripts(int types = 4, const QList ids = QList(), bool includeSource = false, const QVariant filter = QVariant()); @@ -216,6 +216,8 @@ public: FileInProjectFinder fileFinder; + bool skipFocusOnNextHandleFrame = false; + private: ConsoleItem *constructLogItemTree(const QmlV8ObjectData &objectData, QList &seenHandles); void constructChildLogItems(ConsoleItem *item, const QmlV8ObjectData &objectData, @@ -791,7 +793,7 @@ void QmlEngine::assignValueInDebugger(WatchItem *item, StackHandler *handler = stackHandler(); QString exp = QString("%1 = %2;").arg(expression).arg(value.toString()); if (handler->isContentsValid() && handler->currentFrame().isUsable()) { - d->evaluate(exp, -1, [this](const QVariantMap &) { d->updateLocals(); }); + d->evaluate(exp, -1, [this](const QVariantMap &) { d->updateLocals(false); }); } else { showMessage(Tr::tr("Cannot evaluate %1 in current stack frame.") .arg(expression), ConsoleOutput); @@ -941,8 +943,7 @@ void QmlEngine::quitDebugger() void QmlEngine::doUpdateLocals(const UpdateParameters ¶ms) { - Q_UNUSED(params) - d->updateLocals(); + d->updateLocals(params.qmlFocusOnFrame); } Context QmlEngine::languageContext() const @@ -1292,13 +1293,14 @@ void QmlEnginePrivate::backtrace() runCommand(cmd, CB(handleBacktrace)); } -void QmlEnginePrivate::updateLocals() +void QmlEnginePrivate::updateLocals(bool focusOnFrame) { // { "seq" : , // "type" : "request", // "command" : "frame", // "arguments" : { "number" : } // } + skipFocusOnNextHandleFrame = focusOnFrame; DebuggerCommand cmd(FRAME); cmd.arg(NUMBER, stackIndexLookup.value(engine->stackHandler()->currentIndex())); @@ -2136,7 +2138,9 @@ void QmlEnginePrivate::handleFrame(const QVariantMap &response) currentFrameScopes.append(scopeIndex); this->scope(scopeIndex); } - engine->gotoLocation(stackHandler->currentFrame()); + + if (skipFocusOnNextHandleFrame) + engine->gotoLocation(stackHandler->currentFrame()); // Send watchers list if (stackHandler->isContentsValid() && stackHandler->currentFrame().isUsable()) {