changeset 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 928daa73de8d
children 5e4ced521696
files gtk/dw.c gtk3/dw.c
diffstat 2 files changed, 15 insertions(+), 42 deletions(-) [+]
line wrap: on
line diff
--- 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;
 }
 
--- 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;
 }