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:
@@ -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);
|
||||||
|
@@ -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)
|
||||||
|
@@ -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);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user