diff --git a/Userland/Libraries/LibGUI/ScrollableWidget.cpp b/Userland/Libraries/LibGUI/ScrollableWidget.cpp index 9e724a6c40..ea04ada81f 100644 --- a/Userland/Libraries/LibGUI/ScrollableWidget.cpp +++ b/Userland/Libraries/LibGUI/ScrollableWidget.cpp @@ -111,19 +111,26 @@ void ScrollableWidget::update_scrollbar_ranges() auto available_size = this->available_size(); int excess_height = max(0, m_content_size.height() - available_size.height()); - m_vertical_scrollbar->set_range(0, excess_height); - m_vertical_scrollbar->set_page_step(available_size.height()); - - if (should_hide_unnecessary_scrollbars()) - m_vertical_scrollbar->set_visible(excess_height > 0); - int excess_width = max(0, m_content_size.width() - available_size.width()); - m_horizontal_scrollbar->set_range(0, excess_width); - m_horizontal_scrollbar->set_page_step(available_size.width()); - if (should_hide_unnecessary_scrollbars()) + auto vertical_initial_visibility = m_vertical_scrollbar->is_visible(); + auto horizontal_initial_visibility = m_horizontal_scrollbar->is_visible(); + + if (should_hide_unnecessary_scrollbars()) { + m_vertical_scrollbar->set_visible(excess_height > 0); m_horizontal_scrollbar->set_visible(excess_width > 0); + } + if (m_vertical_scrollbar->is_visible() != vertical_initial_visibility || m_horizontal_scrollbar->is_visible() != horizontal_initial_visibility) { + available_size = this->available_size(); + excess_height = max(0, m_content_size.height() - available_size.height()); + excess_width = max(0, m_content_size.width() - available_size.width()); + } + + m_horizontal_scrollbar->set_range(0, excess_width); + m_horizontal_scrollbar->set_page_step(visible_content_rect().width() - m_horizontal_scrollbar->step()); + + m_vertical_scrollbar->set_range(0, excess_height); m_vertical_scrollbar->set_page_step(visible_content_rect().height() - m_vertical_scrollbar->step()); }