1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 19:17:44 +00:00

ProfileViewer: Make sure ProfileNodes have the correct parent pointer

We were forgetting to call ProfileNode::add_child() which is how the
parent node pointer gets set. This fixes the weird looking GTreeView.
This commit is contained in:
Andreas Kling 2019-12-12 22:49:54 +01:00
parent d8b7cd940f
commit 9150be4716
3 changed files with 9 additions and 8 deletions

View file

@ -4,7 +4,7 @@
#include <LibCore/CFile.h> #include <LibCore/CFile.h>
#include <stdio.h> #include <stdio.h>
Profile::Profile(const JsonArray& json, NonnullRefPtrVector<ProfileNode>&& roots) Profile::Profile(const JsonArray& json, Vector<NonnullRefPtr<ProfileNode>>&& roots)
: m_json(json) : m_json(json)
, m_roots(move(roots)) , m_roots(move(roots))
{ {

View file

@ -43,7 +43,7 @@ public:
} }
} }
auto new_child = ProfileNode::create(symbol, address, offset); auto new_child = ProfileNode::create(symbol, address, offset);
m_children.append(new_child); add_child(new_child);
return new_child; return new_child;
}; };
@ -77,12 +77,12 @@ public:
GModel& model(); GModel& model();
const NonnullRefPtrVector<ProfileNode>& roots() const { return m_roots; } const Vector<NonnullRefPtr<ProfileNode>>& roots() const { return m_roots; }
private: private:
explicit Profile(const JsonArray&, NonnullRefPtrVector<ProfileNode>&&); explicit Profile(const JsonArray&, Vector<NonnullRefPtr<ProfileNode>>&&);
JsonArray m_json; JsonArray m_json;
RefPtr<ProfileModel> m_model; RefPtr<ProfileModel> m_model;
NonnullRefPtrVector<ProfileNode> m_roots; Vector<NonnullRefPtr<ProfileNode>> m_roots;
}; };

View file

@ -19,7 +19,7 @@ GModelIndex ProfileModel::index(int row, int column, const GModelIndex& parent)
if (!parent.is_valid()) { if (!parent.is_valid()) {
if (m_profile.roots().is_empty()) if (m_profile.roots().is_empty())
return {}; return {};
return create_index(row, column, &m_profile.roots().at(row)); return create_index(row, column, m_profile.roots().at(row).ptr());
} }
auto& remote_parent = *static_cast<ProfileNode*>(parent.internal_data()); auto& remote_parent = *static_cast<ProfileNode*>(parent.internal_data());
return create_index(row, column, remote_parent.children().at(row).ptr()); return create_index(row, column, remote_parent.children().at(row).ptr());
@ -33,11 +33,12 @@ GModelIndex ProfileModel::parent_index(const GModelIndex& index) const
if (!node.parent()) if (!node.parent())
return {}; return {};
// NOTE: If the parent has no parent, it's a root, so we have to look among the remote roots. // NOTE: If the parent has no parent, it's a root, so we have to look among the roots.
if (!node.parent()->parent()) { if (!node.parent()->parent()) {
for (int row = 0; row < m_profile.roots().size(); ++row) { for (int row = 0; row < m_profile.roots().size(); ++row) {
if (&m_profile.roots()[row] == node.parent()) if (m_profile.roots()[row].ptr() == node.parent()) {
return create_index(row, 0, node.parent()); return create_index(row, 0, node.parent());
}
} }
ASSERT_NOT_REACHED(); ASSERT_NOT_REACHED();
return {}; return {};