Qml Debugger: process the contexts recursively

This commit is contained in:
Olivier Goffart
2010-08-20 17:28:12 +02:00
parent 8a91d7f68c
commit af94dad9bc
2 changed files with 22 additions and 17 deletions

View File

@@ -279,19 +279,21 @@ void ClientProxy::queryEngineContext(int id)
void ClientProxy::contextChanged() void ClientProxy::contextChanged()
{ {
if (m_contextQuery) { if (m_contextQuery) {
m_rootObjects = m_contextQuery->rootContext().objects(); m_rootObjects.clear();
QDeclarativeDebugContextReference rootContext = m_contextQuery->rootContext();
delete m_contextQuery; delete m_contextQuery;
m_contextQuery = 0; m_contextQuery = 0;
if (m_rootObjects.isEmpty()) {
emit objectTreeUpdated();
return;
}
qDeleteAll(m_objectTreeQuery); qDeleteAll(m_objectTreeQuery);
m_objectTreeQuery.clear(); m_objectTreeQuery.clear();
foreach(const QDeclarativeDebugObjectReference & obj, m_rootObjects) { fetchContextObjectRecusrsive(rootContext);
}
}
void ClientProxy::fetchContextObjectRecusrsive(const QDeclarativeDebugContextReference& context)
{
foreach (const QDeclarativeDebugObjectReference & obj, context.objects()) {
QDeclarativeDebugObjectQuery* query = m_client->queryObjectRecursive(obj, this); QDeclarativeDebugObjectQuery* query = m_client->queryObjectRecursive(obj, this);
if (!query->isWaiting()) { if (!query->isWaiting()) {
query->deleteLater(); //ignore errors; query->deleteLater(); //ignore errors;
@@ -302,9 +304,11 @@ void ClientProxy::contextChanged()
SLOT(objectTreeFetched(QDeclarativeDebugQuery::State))); SLOT(objectTreeFetched(QDeclarativeDebugQuery::State)));
} }
} }
foreach (const QDeclarativeDebugContextReference& child, context.contexts()) {
fetchContextObjectRecusrsive(child);
}
} }
}
void ClientProxy::objectTreeFetched(QDeclarativeDebugQuery::State state) void ClientProxy::objectTreeFetched(QDeclarativeDebugQuery::State state)
{ {

View File

@@ -124,6 +124,7 @@ private slots:
void onCurrentObjectsChanged(const QList<int> &debugIds, bool requestIfNeeded = true); void onCurrentObjectsChanged(const QList<int> &debugIds, bool requestIfNeeded = true);
void updateEngineList(); void updateEngineList();
void objectTreeFetched(QDeclarativeDebugQuery::State state = QDeclarativeDebugQuery::Completed); void objectTreeFetched(QDeclarativeDebugQuery::State state = QDeclarativeDebugQuery::Completed);
void fetchContextObjectRecusrsive(const QmlJsDebugClient::QDeclarativeDebugContextReference& context);
private: private:
bool isDesignClientConnected() const; bool isDesignClientConnected() const;