From 00f47bba237bc87c648e0777f0f4ee9eaca9aa4f Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sat, 3 Oct 2020 13:56:09 +0200 Subject: [PATCH] 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. --- Libraries/LibGUI/ToolBarContainer.cpp | 13 ++++++++++++- Libraries/LibGUI/ToolBarContainer.h | 1 + 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/Libraries/LibGUI/ToolBarContainer.cpp b/Libraries/LibGUI/ToolBarContainer.cpp index 4a453cacbe..ce961b38e1 100644 --- a/Libraries/LibGUI/ToolBarContainer.cpp +++ b/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 diff --git a/Libraries/LibGUI/ToolBarContainer.h b/Libraries/LibGUI/ToolBarContainer.h index e624700249..4a49ac6b8e 100644 --- a/Libraries/LibGUI/ToolBarContainer.h +++ b/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;