diff --git a/Libraries/LibGUI/GScrollableWidget.cpp b/Libraries/LibGUI/GScrollableWidget.cpp index 1647ee6722..597552a001 100644 --- a/Libraries/LibGUI/GScrollableWidget.cpp +++ b/Libraries/LibGUI/GScrollableWidget.cpp @@ -39,8 +39,17 @@ void GScrollableWidget::custom_layout() 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; - m_vertical_scrollbar->set_relative_rect(inner_rect.right() + 1 - m_vertical_scrollbar->preferred_size().width(), inner_rect.top(), m_vertical_scrollbar->preferred_size().width(), inner_rect.height() - height_wanted_by_horizontal_scrollbar); - m_horizontal_scrollbar->set_relative_rect(inner_rect.left(), inner_rect.bottom() + 1 - m_horizontal_scrollbar->preferred_size().height(), inner_rect.width() - m_vertical_scrollbar->preferred_size().width(), width_wanted_by_vertical_scrollbar); + m_vertical_scrollbar->set_relative_rect( + inner_rect.right() + 1 - m_vertical_scrollbar->preferred_size().width(), + inner_rect.top(), + m_vertical_scrollbar->preferred_size().width(), + inner_rect.height() - height_wanted_by_horizontal_scrollbar); + + m_horizontal_scrollbar->set_relative_rect( + inner_rect.left(), + inner_rect.bottom() + 1 - m_horizontal_scrollbar->preferred_size().height(), + inner_rect.width() - width_wanted_by_vertical_scrollbar, + m_horizontal_scrollbar->preferred_size().height()); m_corner_widget->set_visible(m_vertical_scrollbar->is_visible() && m_horizontal_scrollbar->is_visible()); if (m_corner_widget->is_visible()) { @@ -69,9 +78,15 @@ void GScrollableWidget::update_scrollbar_ranges() int excess_height = max(0, m_content_size.height() - available_size.height()); m_vertical_scrollbar->set_range(0, excess_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); + if (should_hide_unnecessary_scrollbars()) + m_horizontal_scrollbar->set_visible(excess_width > 0); + m_vertical_scrollbar->set_big_step(visible_content_rect().height() - m_vertical_scrollbar->step()); } diff --git a/Libraries/LibGUI/GScrollableWidget.h b/Libraries/LibGUI/GScrollableWidget.h index 7232cca753..e4379f247a 100644 --- a/Libraries/LibGUI/GScrollableWidget.h +++ b/Libraries/LibGUI/GScrollableWidget.h @@ -38,6 +38,9 @@ public: int width_occupied_by_vertical_scrollbar() const; int height_occupied_by_horizontal_scrollbar() const; + void set_should_hide_unnecessary_scrollbars(bool b) { m_should_hide_unnecessary_scrollbars = b; } + bool should_hide_unnecessary_scrollbars() const { return m_should_hide_unnecessary_scrollbars; } + protected: explicit GScrollableWidget(GWidget* parent); virtual void custom_layout() override; @@ -56,4 +59,5 @@ private: Size m_content_size; Size m_size_occupied_by_fixed_elements; bool m_scrollbars_enabled { true }; + bool m_should_hide_unnecessary_scrollbars { false }; }; diff --git a/Libraries/LibGUI/GTableView.cpp b/Libraries/LibGUI/GTableView.cpp index 5039518d1e..2c38eeb517 100644 --- a/Libraries/LibGUI/GTableView.cpp +++ b/Libraries/LibGUI/GTableView.cpp @@ -15,6 +15,8 @@ GTableView::GTableView(GWidget* parent) set_frame_shape(FrameShape::Container); set_frame_shadow(FrameShadow::Sunken); set_frame_thickness(2); + + set_should_hide_unnecessary_scrollbars(true); } GTableView::~GTableView() diff --git a/Libraries/LibGUI/GTreeView.cpp b/Libraries/LibGUI/GTreeView.cpp index 0bc5943591..eedb672656 100644 --- a/Libraries/LibGUI/GTreeView.cpp +++ b/Libraries/LibGUI/GTreeView.cpp @@ -29,6 +29,8 @@ GTreeView::GTreeView(GWidget* parent) m_expand_bitmap = GraphicsBitmap::load_from_file("/res/icons/treeview-expand.png"); m_collapse_bitmap = GraphicsBitmap::load_from_file("/res/icons/treeview-collapse.png"); + + set_should_hide_unnecessary_scrollbars(true); } GTreeView::~GTreeView()