From b916e34fed9148cce5cab1f0c1691e0d2c967675 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Wed, 23 Oct 2019 19:51:09 +0200 Subject: [PATCH] LibGUI: GTabWidget should not set children to have negative size This could happen if a child was added to a GTabWidget before the GTabWidget had its first layout. Also add an assertion to catch this in GWidget::set_relative_rect() since it was not immediately obvious what was happening. --- Libraries/LibGUI/GTabWidget.cpp | 11 ++++++++--- Libraries/LibGUI/GWidget.cpp | 2 ++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/Libraries/LibGUI/GTabWidget.cpp b/Libraries/LibGUI/GTabWidget.cpp index 049be01b1b..a5dc20864f 100644 --- a/Libraries/LibGUI/GTabWidget.cpp +++ b/Libraries/LibGUI/GTabWidget.cpp @@ -45,13 +45,18 @@ void GTabWidget::resize_event(GResizeEvent& event) Rect GTabWidget::child_rect_for_size(const Size& size) const { + Rect rect; switch (m_tab_position) { case TabPosition::Top: - return { { container_padding(), bar_height() + container_padding() }, { size.width() - container_padding() * 2, size.height() - bar_height() - container_padding() * 2 } }; + rect = { { container_padding(), bar_height() + container_padding() }, { size.width() - container_padding() * 2, size.height() - bar_height() - container_padding() * 2 } }; + break; case TabPosition::Bottom: - return { { container_padding(), container_padding() }, { size.width() - container_padding() * 2, size.height() - bar_height() - container_padding() * 2 } }; + rect = { { container_padding(), container_padding() }, { size.width() - container_padding() * 2, size.height() - bar_height() - container_padding() * 2 } }; + break; } - ASSERT_NOT_REACHED(); + if (rect.is_empty()) + return {}; + return rect; } void GTabWidget::child_event(CChildEvent& event) diff --git a/Libraries/LibGUI/GWidget.cpp b/Libraries/LibGUI/GWidget.cpp index ae7f1a0c3a..a89c1062cf 100644 --- a/Libraries/LibGUI/GWidget.cpp +++ b/Libraries/LibGUI/GWidget.cpp @@ -44,6 +44,8 @@ void GWidget::child_event(CChildEvent& event) void GWidget::set_relative_rect(const Rect& rect) { + ASSERT(rect.width() >= 0 && rect.height() >= 0); + if (rect == m_relative_rect) return;