# HG changeset patch # User bsmith@81767d24-ef19-dc11-ae90-00e081727c95 # Date 1324732683 0 # Node ID 5cfbf2715eecd7558870073f3f0930661937dc83 # Parent 928daa73de8dbf131bea46ccef264a72bab8e37e Code simplification on GTK2 and ported the fix to GTK3. If we need to add the fix to spinbuttons and sliders we need only set the data in those functions now. diff -r 928daa73de8d -r 5cfbf2715eec gtk/dw.c --- a/gtk/dw.c Sat Dec 24 12:28:29 2011 +0000 +++ b/gtk/dw.c Sat Dec 24 13:18:03 2011 +0000 @@ -1808,8 +1808,12 @@ GtkWidget *spinbutton = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(adjustment), "_dw_spinbutton"); GtkWidget *scrollbar = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(adjustment), "_dw_scrollbar"); + if(gtk_object_get_data(GTK_OBJECT(adjustment), "_dw_suppress_value_changed_event")) + return FALSE; + if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__); - if (slider) + + if (slider || spinbutton || scrollbar) { SignalHandler work = _get_signal_handler((GtkWidget *)adjustment, data); @@ -1817,39 +1821,12 @@ { int (*valuechangedfunc)(HWND, int, void *) = work.func; - if(GTK_IS_VSCALE(slider)) + if(slider && GTK_IS_VSCALE(slider)) valuechangedfunc(work.window, (max - val) - 1, work.data); else valuechangedfunc(work.window, val, work.data); } } - else if (spinbutton) - { - SignalHandler work = _get_signal_handler((GtkWidget *)adjustment, data); - - if (work.window) - { - int (*valuechangedfunc)(HWND, int, void *) = work.func; - - valuechangedfunc(work.window, val, work.data); - } - } - else if (scrollbar) - { - gint suppress; - suppress = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(adjustment), "_dw_suppress_value_changed_event")); - if (!suppress ) - { - SignalHandler work = _get_signal_handler((GtkWidget *)adjustment, data); - - if (work.window) - { - int (*valuechangedfunc)(HWND, int, void *) = work.func; - - valuechangedfunc(work.window, val, work.data); - } - } - } return FALSE; } diff -r 928daa73de8d -r 5cfbf2715eec gtk3/dw.c --- a/gtk3/dw.c Sat Dec 24 12:28:29 2011 +0000 +++ b/gtk3/dw.c Sat Dec 24 13:18:03 2011 +0000 @@ -1658,7 +1658,10 @@ GtkWidget *spinbutton = (GtkWidget *)g_object_get_data(G_OBJECT(adjustment), "_dw_spinbutton"); GtkWidget *scrollbar = (GtkWidget *)g_object_get_data(G_OBJECT(adjustment), "_dw_scrollbar"); - if (slider) + if(g_object_get_data(G_OBJECT(adjustment), "_dw_suppress_value_changed_event")) + return FALSE; + + if (slider || spinbutton || scrollbar) { SignalHandler work = _get_signal_handler((GtkWidget *)adjustment, data); @@ -1666,23 +1669,12 @@ { int (*valuechangedfunc)(HWND, int, void *) = work.func; - if(GTK_IS_VSCALE(slider)) + if(slider && GTK_IS_VSCALE(slider)) valuechangedfunc(work.window, (max - val) - 1, work.data); else valuechangedfunc(work.window, val, work.data); } } - else if (scrollbar || spinbutton) - { - SignalHandler work = _get_signal_handler((GtkWidget *)adjustment, data); - - if (work.window) - { - int (*valuechangedfunc)(HWND, int, void *) = work.func; - - valuechangedfunc(work.window, val, work.data); - } - } return FALSE; } @@ -4941,7 +4933,11 @@ DW_MUTEX_LOCK; adjustment = (GtkAdjustment *)g_object_get_data(G_OBJECT(handle), "_dw_adjustment"); if(adjustment) + { + g_object_set_data(G_OBJECT(adjustment), "_dw_suppress_value_changed_event", GINT_TO_POINTER(1)); gtk_adjustment_set_value(adjustment, (gfloat)position); + g_object_set_data(G_OBJECT(adjustment), "_dw_suppress_value_changed_event", GINT_TO_POINTER(0)); + } DW_MUTEX_UNLOCK; }