diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp index 030fd0f1a4a2f1651c9e598bdb689480cc2f4c6f..0558a5644c8f63973e3e9831b54eb1fb7857585b 100644 --- a/src/plugins/debugger/debuggerplugin.cpp +++ b/src/plugins/debugger/debuggerplugin.cpp @@ -1844,6 +1844,7 @@ void DebuggerPluginPrivate::connectEngine(DebuggerEngine *engine) m_threadBox->setModel(engine->threadsModel()); m_threadBox->setModelColumn(ThreadData::NameColumn); m_watchersWindow->setModel(engine->watchersModel()); + engine->watchHandler()->rebuildModel(); } static void changeFontSize(QWidget *widget, qreal size) diff --git a/src/plugins/debugger/qml/qmlengine.cpp b/src/plugins/debugger/qml/qmlengine.cpp index a5958ac2ef0f7f1292be58839807c00dd0be1f78..b4479733a8da93b9d70d2078f51367a3aad1950b 100644 --- a/src/plugins/debugger/qml/qmlengine.cpp +++ b/src/plugins/debugger/qml/qmlengine.cpp @@ -231,6 +231,8 @@ void QmlEngine::connectionEstablished() showMessage(tr("QML Debugger connected."), StatusBar); + synchronizeWatchers(); + notifyEngineRunAndInferiorRunOk(); } @@ -687,22 +689,29 @@ void QmlEngine::updateWatchData(const WatchData &data, } if (!data.name.isEmpty() && data.isChildrenNeeded() - && watchHandler()->isExpandedIName(data.iname)) + && watchHandler()->isExpandedIName(data.iname)) { expandObject(data.iname, data.id); + } + + synchronizeWatchers(); - { + if (!data.isSomethingNeeded()) + watchHandler()->insertData(data); +} + +void QmlEngine::synchronizeWatchers() +{ + if (!watchHandler()->watcherNames().isEmpty()) { + // send watchers list QByteArray reply; QDataStream rs(&reply, QIODevice::WriteOnly); QByteArray cmd = "WATCH_EXPRESSIONS"; rs << cmd; rs << watchHandler()->watchedExpressions(); logMessage(LogSend, QString("%1 %2").arg( - QString(cmd), watchHandler()->watchedExpressions().join(", "))); + QString(cmd), watchHandler()->watchedExpressions().join(", "))); sendMessage(reply); } - - if (!data.isSomethingNeeded()) - watchHandler()->insertData(data); } void QmlEngine::expandObject(const QByteArray &iname, quint64 objectId) diff --git a/src/plugins/debugger/qml/qmlengine.h b/src/plugins/debugger/qml/qmlengine.h index b9c23fca11692a448fcd84f18b16fa8c1d4fcb5d..db03bfbb27efe2bd9816b18f1834006d17e3ec49 100644 --- a/src/plugins/debugger/qml/qmlengine.h +++ b/src/plugins/debugger/qml/qmlengine.h @@ -146,6 +146,8 @@ private: const QString &oldBasePath, const QString &newBasePath) const; QString qmlImportPath() const; + void synchronizeWatchers(); + enum LogDirection { LogSend, LogReceive diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp index f7826ccd289084328abe1f2a5be64ab59763f28b..68597a20b3f3b28d7ca0f7bd400a511530fd04f6 100644 --- a/src/plugins/debugger/watchhandler.cpp +++ b/src/plugins/debugger/watchhandler.cpp @@ -1656,5 +1656,26 @@ void WatchHandler::removeTooltip() m_tooltips->emitAllChanged(); } +void WatchHandler::rebuildModel() +{ + beginCycle(); + + const QList<WatchItem *> watches = m_watchers->rootItem()->children; + for (int i = watches.size() - 1; i >= 0; i--) + m_watchers->destroyItem(watches.at(i)); + + foreach (const QString &exp, watchedExpressions()) { + WatchData data; + data.exp = exp.toLatin1(); + data.name = exp; + data.iname = watcherName(data.exp); + data.setAllUnneeded(); + + insertData(data); + } + + endCycle(); +} + } // namespace Internal } // namespace Debugger diff --git a/src/plugins/debugger/watchhandler.h b/src/plugins/debugger/watchhandler.h index 950bf4fdaa74029e3c7782783900f0d7957ef9cd..6de0c161e9a8ec93a7ef2e0f707b128ee52c3073 100644 --- a/src/plugins/debugger/watchhandler.h +++ b/src/plugins/debugger/watchhandler.h @@ -163,6 +163,7 @@ public: void loadSessionData(); void saveSessionData(); void removeTooltip(); + void rebuildModel(); bool isExpandedIName(const QByteArray &iname) const { return m_expandedINames.contains(iname); }