瀏覽代碼

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 年之前
父節點
當前提交
00f47bba23
共有 2 個文件被更改,包括 13 次插入1 次删除
  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;