summaryrefslogtreecommitdiff
path: root/Libraries/LibCore/CObject.cpp
diff options
context:
space:
mode:
authorAndreas Kling <awesomekling@gmail.com>2019-11-05 20:41:27 +0100
committerAndreas Kling <awesomekling@gmail.com>2019-11-05 20:41:27 +0100
commitd3558b6137dfe9f8e895dc34844d35082eff5e3d (patch)
tree4b47d3352f8c6b1629fafc7927142c6187eeef63 /Libraries/LibCore/CObject.cpp
parent0f81eaf8a25aa7f87faf934ec0c1fa33e9f4b10d (diff)
downloadserenity-d3558b6137dfe9f8e895dc34844d35082eff5e3d.zip
LibCore+LibGUI: Allow inserting a CObject/GWidget before another
When adding a widget to a parent, you don't always want to append it to the set of existing children, but instead insert it before one of them. This patch makes that possible by adding CObject::insert_child_before() which also produces a ChildAdded event with an additional before_child pointer. This pointer is then used by GWidget to make sure that any layout present maintains the correct order. (Without doing that, newly added children would still be appended into the layout order, despite having a different widget sibling order.)
Diffstat (limited to 'Libraries/LibCore/CObject.cpp')
-rw-r--r--Libraries/LibCore/CObject.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/Libraries/LibCore/CObject.cpp b/Libraries/LibCore/CObject.cpp
index 0058de5b39..7de5a5a044 100644
--- a/Libraries/LibCore/CObject.cpp
+++ b/Libraries/LibCore/CObject.cpp
@@ -64,6 +64,15 @@ void CObject::add_child(CObject& object)
event(*make<CChildEvent>(CEvent::ChildAdded, object));
}
+void CObject::insert_child_before(CObject& new_child, CObject& before_child)
+{
+ // FIXME: Should we support reparenting objects?
+ ASSERT(!new_child.parent() || new_child.parent() == this);
+ new_child.m_parent = this;
+ m_children.insert_before_matching(new_child, [&](auto& existing_child) { return existing_child.ptr() == &before_child; });
+ event(*make<CChildEvent>(CEvent::ChildAdded, new_child, &before_child));
+}
+
void CObject::remove_child(CObject& object)
{
for (int i = 0; i < m_children.size(); ++i) {