avoid multiple emissions of the GtkAdjustment "changed" signal when configuring scrollbar

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@78114 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Paul Cornett
2014-11-10 17:10:35 +00:00
parent a16a0e092d
commit 807a3091c0
3 changed files with 11 additions and 1 deletions

View File

@@ -209,9 +209,14 @@ void wxScrollBar::SetScrollbar(int position, int thumbSize, int range, int pageS
} }
g_signal_handlers_block_by_func(m_widget, (void*)gtk_value_changed, this); g_signal_handlers_block_by_func(m_widget, (void*)gtk_value_changed, this);
GtkRange* widget = GTK_RANGE(m_widget); GtkRange* widget = GTK_RANGE(m_widget);
gtk_adjustment_set_page_size(gtk_range_get_adjustment(widget), thumbSize); GtkAdjustment* adj = gtk_range_get_adjustment(widget);
g_object_freeze_notify(G_OBJECT(adj));
gtk_range_set_increments(widget, 1, pageSize); gtk_range_set_increments(widget, 1, pageSize);
gtk_adjustment_set_page_size(adj, thumbSize);
gtk_range_set_range(widget, 0, range); gtk_range_set_range(widget, 0, range);
g_object_thaw_notify(G_OBJECT(adj));
gtk_range_set_value(widget, position); gtk_range_set_value(widget, position);
m_scrollPos[0] = gtk_range_get_value(widget); m_scrollPos[0] = gtk_range_get_value(widget);
g_signal_handlers_unblock_by_func(m_widget, (void*)gtk_value_changed, this); g_signal_handlers_unblock_by_func(m_widget, (void*)gtk_value_changed, this);

View File

@@ -71,9 +71,11 @@ void wxScrollHelper::DoAdjustScrollbar(GtkRange* range,
GtkAdjustment* adj = gtk_range_get_adjustment(range); GtkAdjustment* adj = gtk_range_get_adjustment(range);
const bool wasVisible = gtk_adjustment_get_upper(adj) > gtk_adjustment_get_page_size(adj); const bool wasVisible = gtk_adjustment_get_upper(adj) > gtk_adjustment_get_page_size(adj);
g_object_freeze_notify(G_OBJECT(adj));
gtk_range_set_increments(range, 1, page_size); gtk_range_set_increments(range, 1, page_size);
gtk_adjustment_set_page_size(adj, page_size); gtk_adjustment_set_page_size(adj, page_size);
gtk_range_set_range(range, 0, upper); 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); const bool isVisible = gtk_adjustment_get_upper(adj) > gtk_adjustment_get_page_size(adj);
if (isVisible != wasVisible) if (isVisible != wasVisible)

View File

@@ -4878,9 +4878,12 @@ void wxWindowGTK::SetScrollbar(int orient,
GtkAdjustment* adj = gtk_range_get_adjustment(sb); GtkAdjustment* adj = gtk_range_get_adjustment(sb);
const bool wasVisible = gtk_adjustment_get_upper(adj) > gtk_adjustment_get_page_size(adj); const bool wasVisible = gtk_adjustment_get_upper(adj) > gtk_adjustment_get_page_size(adj);
g_object_freeze_notify(G_OBJECT(adj));
gtk_range_set_increments(sb, 1, thumbVisible); gtk_range_set_increments(sb, 1, thumbVisible);
gtk_adjustment_set_page_size(adj, thumbVisible); gtk_adjustment_set_page_size(adj, thumbVisible);
gtk_range_set_range(sb, 0, range); gtk_range_set_range(sb, 0, range);
g_object_thaw_notify(G_OBJECT(adj));
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);