diff --git a/src/gtk/scrolwin.cpp b/src/gtk/scrolwin.cpp index 0c1bfa444c..021c5243ce 100644 --- a/src/gtk/scrolwin.cpp +++ b/src/gtk/scrolwin.cpp @@ -69,17 +69,22 @@ void wxScrollHelper::DoAdjustScrollbar(GtkRange* range, } GtkAdjustment* adj = gtk_range_get_adjustment(range); - const bool wasVisible = gtk_adjustment_get_upper(adj) > gtk_adjustment_get_page_size(adj); + const double adj_upper = gtk_adjustment_get_upper(adj); + const double adj_page_size = gtk_adjustment_get_page_size(adj); + if (adj_upper != upper || adj_page_size != page_size) + { + const bool wasVisible = adj_upper > adj_page_size; - g_object_freeze_notify(G_OBJECT(adj)); - gtk_range_set_increments(range, 1, page_size); - gtk_adjustment_set_page_size(adj, page_size); - gtk_range_set_range(range, 0, upper); - g_object_thaw_notify(G_OBJECT(adj)); + g_object_freeze_notify(G_OBJECT(adj)); + gtk_range_set_increments(range, 1, page_size); + gtk_adjustment_set_page_size(adj, page_size); + gtk_range_set_range(range, 0, upper); + g_object_thaw_notify(G_OBJECT(adj)); - const bool isVisible = gtk_adjustment_get_upper(adj) > gtk_adjustment_get_page_size(adj); - if (isVisible != wasVisible) - m_win->m_useCachedClientSize = false; + const bool isVisible = gtk_adjustment_get_upper(adj) > gtk_adjustment_get_page_size(adj); + if (isVisible != wasVisible) + m_win->m_useCachedClientSize = false; + } // ensure that the scroll position is always in valid range if (*pos > *lines)