invalidate cached client size when scrollbar visibility changes
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_3_0_BRANCH@78113 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -68,10 +68,17 @@ void wxScrollHelper::DoAdjustScrollbar(GtkRange* range,
|
|||||||
*linesPerPage = 0;
|
*linesPerPage = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GtkAdjustment* adj = gtk_range_get_adjustment(range);
|
||||||
|
const bool wasVisible = gtk_adjustment_get_upper(adj) > gtk_adjustment_get_page_size(adj);
|
||||||
|
|
||||||
gtk_range_set_increments(range, 1, page_size);
|
gtk_range_set_increments(range, 1, page_size);
|
||||||
gtk_adjustment_set_page_size(gtk_range_get_adjustment(range), page_size);
|
gtk_adjustment_set_page_size(adj, page_size);
|
||||||
gtk_range_set_range(range, 0, upper);
|
gtk_range_set_range(range, 0, upper);
|
||||||
|
|
||||||
|
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
|
// ensure that the scroll position is always in valid range
|
||||||
if (*pos > *lines)
|
if (*pos > *lines)
|
||||||
*pos = *lines;
|
*pos = *lines;
|
||||||
|
@@ -4827,12 +4827,19 @@ void wxWindowGTK::SetScrollbar(int orient,
|
|||||||
g_signal_handlers_block_by_func(
|
g_signal_handlers_block_by_func(
|
||||||
sb, (void*)gtk_scrollbar_value_changed, this);
|
sb, (void*)gtk_scrollbar_value_changed, this);
|
||||||
|
|
||||||
|
GtkAdjustment* adj = gtk_range_get_adjustment(sb);
|
||||||
|
const bool wasVisible = gtk_adjustment_get_upper(adj) > gtk_adjustment_get_page_size(adj);
|
||||||
|
|
||||||
gtk_range_set_increments(sb, 1, thumbVisible);
|
gtk_range_set_increments(sb, 1, thumbVisible);
|
||||||
gtk_adjustment_set_page_size(gtk_range_get_adjustment(sb), thumbVisible);
|
gtk_adjustment_set_page_size(adj, thumbVisible);
|
||||||
gtk_range_set_range(sb, 0, range);
|
gtk_range_set_range(sb, 0, range);
|
||||||
gtk_range_set_value(sb, pos);
|
gtk_range_set_value(sb, pos);
|
||||||
m_scrollPos[dir] = gtk_range_get_value(sb);
|
m_scrollPos[dir] = gtk_range_get_value(sb);
|
||||||
|
|
||||||
|
const bool isVisible = gtk_adjustment_get_upper(adj) > gtk_adjustment_get_page_size(adj);
|
||||||
|
if (isVisible != wasVisible)
|
||||||
|
m_useCachedClientSize = false;
|
||||||
|
|
||||||
g_signal_handlers_unblock_by_func(
|
g_signal_handlers_unblock_by_func(
|
||||||
sb, (void*)gtk_scrollbar_value_changed, this);
|
sb, (void*)gtk_scrollbar_value_changed, this);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user