diff gtk3/dw.c @ 1486:5cfbf2715eec

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.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Sat, 24 Dec 2011 13:18:03 +0000
parents dd584f431f9f
children d77b8cf25f04
line wrap: on
line diff
--- 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;
 }