diff --git a/Userland/Libraries/LibGUI/Statusbar.cpp b/Userland/Libraries/LibGUI/Statusbar.cpp index c5dd6075dc4..0ae54eb3f8a 100644 --- a/Userland/Libraries/LibGUI/Statusbar.cpp +++ b/Userland/Libraries/LibGUI/Statusbar.cpp @@ -38,6 +38,19 @@ NonnullRefPtr Statusbar::create_segment() return widget; } +void Statusbar::child_event(Core::ChildEvent& event) +{ + auto& event_to_forward = event; + // To ensure that the ResizeCorner is always the last widget, and thus stays in the corner, + // we replace ChildAdded events that do not request specific placement with events that request placement before the corner + if (event.type() == Event::ChildAdded && is(*event.child()) && !event.insertion_before_child()) { + Core::ChildEvent new_event(Event::ChildAdded, *event.child(), m_corner.ptr()); + event_to_forward = new_event; + } + + return Widget::child_event(event_to_forward); +} + void Statusbar::set_segment_count(size_t count) { if (count <= 1) diff --git a/Userland/Libraries/LibGUI/Statusbar.h b/Userland/Libraries/LibGUI/Statusbar.h index 197e8f7ceb6..d36dd825e13 100644 --- a/Userland/Libraries/LibGUI/Statusbar.h +++ b/Userland/Libraries/LibGUI/Statusbar.h @@ -76,6 +76,8 @@ private: void update_segment(size_t); NonnullRefPtr create_segment(); + virtual void child_event(Core::ChildEvent&) override; + NonnullRefPtrVector m_segments; RefPtr m_corner; };