diff --git a/Libraries/LibGUI/GScrollableWidget.cpp b/Libraries/LibGUI/GScrollableWidget.cpp index 906572f26e..1647ee6722 100644 --- a/Libraries/LibGUI/GScrollableWidget.cpp +++ b/Libraries/LibGUI/GScrollableWidget.cpp @@ -33,11 +33,9 @@ void GScrollableWidget::mousewheel_event(GMouseEvent& event) vertical_scrollbar().set_value(vertical_scrollbar().value() + event.wheel_delta() * 20); } -void GScrollableWidget::resize_event(GResizeEvent& event) +void GScrollableWidget::custom_layout() { - auto inner_rect = frame_inner_rect_for_size(event.size()); - update_scrollbar_ranges(); - + auto inner_rect = frame_inner_rect_for_size(size()); int height_wanted_by_horizontal_scrollbar = m_horizontal_scrollbar->is_visible() ? m_horizontal_scrollbar->preferred_size().height() : 0; int width_wanted_by_vertical_scrollbar = m_vertical_scrollbar->is_visible() ? m_vertical_scrollbar->preferred_size().width() : 0; @@ -51,6 +49,12 @@ void GScrollableWidget::resize_event(GResizeEvent& event) } } +void GScrollableWidget::resize_event(GResizeEvent& event) +{ + GFrame::resize_event(event); + update_scrollbar_ranges(); +} + Size GScrollableWidget::available_size() const { int available_width = frame_inner_rect().width() - m_size_occupied_by_fixed_elements.width() - width_occupied_by_vertical_scrollbar(); diff --git a/Libraries/LibGUI/GScrollableWidget.h b/Libraries/LibGUI/GScrollableWidget.h index 1d0610b4e2..7232cca753 100644 --- a/Libraries/LibGUI/GScrollableWidget.h +++ b/Libraries/LibGUI/GScrollableWidget.h @@ -40,13 +40,13 @@ public: protected: explicit GScrollableWidget(GWidget* parent); + virtual void custom_layout() override; virtual void resize_event(GResizeEvent&) override; virtual void mousewheel_event(GMouseEvent&) override; virtual void did_scroll() {} void set_content_size(const Size&); void set_size_occupied_by_fixed_elements(const Size&); - private: void update_scrollbar_ranges(); diff --git a/Libraries/LibGUI/GWidget.cpp b/Libraries/LibGUI/GWidget.cpp index 67a679bcae..ff67d00b09 100644 --- a/Libraries/LibGUI/GWidget.cpp +++ b/Libraries/LibGUI/GWidget.cpp @@ -144,6 +144,7 @@ void GWidget::set_layout(OwnPtr&& layout) void GWidget::do_layout() { + custom_layout(); if (!m_layout) return; m_layout->run(*this); @@ -157,8 +158,7 @@ void GWidget::notify_layout_changed(Badge) void GWidget::handle_resize_event(GResizeEvent& event) { - if (layout()) - do_layout(); + do_layout(); return resize_event(event); } diff --git a/Libraries/LibGUI/GWidget.h b/Libraries/LibGUI/GWidget.h index 34376a9fee..902f0c7329 100644 --- a/Libraries/LibGUI/GWidget.h +++ b/Libraries/LibGUI/GWidget.h @@ -219,6 +219,8 @@ public: virtual void save_to(AK::JsonObject&) override; +protected: + virtual void custom_layout() {} virtual void did_change_font() {} private: