Przeglądaj źródła

LibGUI: Add Widgets before the ResizeCorner by default in Statusbar

Before this, any Widgets added through e.g. GML appeared after the
ResizeCorner, which didn't make sense. (see FileManager)
FrHun 2 lat temu
rodzic
commit
00acf56e94

+ 13 - 0
Userland/Libraries/LibGUI/Statusbar.cpp

@@ -38,6 +38,19 @@ NonnullRefPtr<Statusbar::Segment> 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<Widget>(*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)

+ 2 - 0
Userland/Libraries/LibGUI/Statusbar.h

@@ -76,6 +76,8 @@ private:
     void update_segment(size_t);
     NonnullRefPtr<Segment> create_segment();
 
+    virtual void child_event(Core::ChildEvent&) override;
+
     NonnullRefPtrVector<Segment> m_segments;
     RefPtr<ResizeCorner> m_corner;
 };