Bladeren bron

LibGUI: Don't accomodate invisible children in ToolBarContainer height

Skip over invisible children so they don't take up vertical space in
the container. Also make sure we update the preferred size whenever the
widget layout is invalidated.

Fixes #3139.
Andreas Kling 4 jaren geleden
bovenliggende
commit
00f47bba23
2 gewijzigde bestanden met toevoegingen van 13 en 1 verwijderingen
  1. 12 1
      Libraries/LibGUI/ToolBarContainer.cpp
  2. 1 0
      Libraries/LibGUI/ToolBarContainer.h

+ 12 - 1
Libraries/LibGUI/ToolBarContainer.cpp

@@ -58,17 +58,28 @@ void ToolBarContainer::did_add_toolbar(Widget& toolbar)
     recompute_preferred_size();
 }
 
+void ToolBarContainer::custom_layout()
+{
+    recompute_preferred_size();
+}
+
 void ToolBarContainer::recompute_preferred_size()
 {
-    int preferred_size = 4 + (m_toolbars.size() - 1) * 2;
+    int visible_toolbar_count = 0;
+    int preferred_size = 4;
 
     for (auto& toolbar : m_toolbars) {
+        if (!toolbar.is_visible())
+            continue;
+        ++visible_toolbar_count;
         if (m_orientation == Gfx::Orientation::Horizontal)
             preferred_size += toolbar.preferred_size().height();
         else
             preferred_size += toolbar.preferred_size().width();
     }
 
+    preferred_size += (visible_toolbar_count - 1) * 2;
+
     if (m_orientation == Gfx::Orientation::Horizontal)
         set_preferred_size(0, preferred_size);
     else

+ 1 - 0
Libraries/LibGUI/ToolBarContainer.h

@@ -38,6 +38,7 @@ public:
 private:
     explicit ToolBarContainer(Gfx::Orientation = Gfx::Orientation::Horizontal);
 
+    virtual void custom_layout() override;
     virtual void paint_event(GUI::PaintEvent&) override;
     virtual void child_event(Core::ChildEvent&) override;