From d5f1c57fe2cc7cf863b4c99b4d11460f3b547c2c Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Mon, 23 Sep 2019 20:29:03 +0200 Subject: [PATCH] Inspector: Fix bad RemoteObjectGraphModel::parent_index() We were returning bogus indices and also failing to handle parents that are roots. This was visible in the broken line trees drawn by GTreeView. --- DevTools/Inspector/RemoteObjectGraphModel.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/DevTools/Inspector/RemoteObjectGraphModel.cpp b/DevTools/Inspector/RemoteObjectGraphModel.cpp index 2c9a0c1910..c30f4e7cd4 100644 --- a/DevTools/Inspector/RemoteObjectGraphModel.cpp +++ b/DevTools/Inspector/RemoteObjectGraphModel.cpp @@ -36,8 +36,19 @@ GModelIndex RemoteObjectGraphModel::parent_index(const GModelIndex& index) const auto& remote_object = *static_cast(index.internal_data()); if (!remote_object.parent) return {}; - for (int row = 0; row < remote_object.parent->children.size(); ++row) { - if (&remote_object.parent->children[row] == &remote_object) + + // NOTE: If the parent has no parent, it's a root, so we have to look among the remote roots. + if (!remote_object.parent->parent) { + for (int row = 0; row < m_process.roots().size(); ++row) { + if (&m_process.roots()[row] == remote_object.parent) + return create_index(row, 0, remote_object.parent); + } + ASSERT_NOT_REACHED(); + return {}; + } + + for (int row = 0; row < remote_object.parent->parent->children.size(); ++row) { + if (&remote_object.parent->parent->children[row] == remote_object.parent) return create_index(row, 0, remote_object.parent); }