[gimp] app: connect to the background curves' "dirty" signal in GimpCurveView



commit 5a28791cfb700802800e9c590e6849dfd7a071f2
Author: Michael Natterer <mitch gimp org>
Date:   Wed Feb 9 00:24:43 2011 +0100

    app: connect to the background curves' "dirty" signal in GimpCurveView
    
    and make sure curves are not added twice to the background list.
    Also warn when trying to remove a non-existent background curve.

 app/widgets/gimpcurveview.c |   29 +++++++++++++++++++++++------
 1 files changed, 23 insertions(+), 6 deletions(-)
---
diff --git a/app/widgets/gimpcurveview.c b/app/widgets/gimpcurveview.c
index 04f55fc..b4138b5 100644
--- a/app/widgets/gimpcurveview.c
+++ b/app/widgets/gimpcurveview.c
@@ -244,12 +244,8 @@ gimp_curve_view_dispose (GObject *object)
 
   gimp_curve_view_set_curve (view, NULL);
 
-  while (view->bg_curves)
-    {
-      BGCurve *bg = view->bg_curves->data;
-
-      gimp_curve_view_remove_background (view, bg->curve);
-    }
+  if (view->bg_curves)
+    gimp_curve_view_remove_all_backgrounds (view);
 
   G_OBJECT_CLASS (parent_class)->dispose (object);
 }
@@ -1134,17 +1130,29 @@ gimp_curve_view_add_background (GimpCurveView *view,
                                 GimpCurve     *curve,
                                 const GimpRGB *color)
 {
+  GList   *list;
   BGCurve *bg;
 
   g_return_if_fail (GIMP_IS_CURVE_VIEW (view));
   g_return_if_fail (GIMP_IS_CURVE (curve));
   g_return_if_fail (color != NULL);
 
+  for (list = view->bg_curves; list; list = g_list_next (list))
+    {
+      bg = list->data;
+
+      g_return_if_fail (curve != bg->curve);
+    }
+
   bg = g_slice_new0 (BGCurve);
 
   bg->curve = g_object_ref (curve);
   bg->color = *color;
 
+  g_signal_connect (bg->curve, "dirty",
+                    G_CALLBACK (gimp_curve_view_curve_dirty),
+                    view);
+
   view->bg_curves = g_list_append (view->bg_curves, bg);
 
   gtk_widget_queue_draw (GTK_WIDGET (view));
@@ -1165,6 +1173,9 @@ gimp_curve_view_remove_background (GimpCurveView *view,
 
       if (bg->curve == curve)
         {
+          g_signal_handlers_disconnect_by_func (bg->curve,
+                                                gimp_curve_view_curve_dirty,
+                                                view);
           g_object_unref (bg->curve);
 
           view->bg_curves = g_list_remove (view->bg_curves, bg);
@@ -1176,6 +1187,9 @@ gimp_curve_view_remove_background (GimpCurveView *view,
           break;
         }
     }
+
+  if (! list)
+    g_return_if_reached ();
 }
 
 void
@@ -1187,6 +1201,9 @@ gimp_curve_view_remove_all_backgrounds (GimpCurveView *view)
     {
       BGCurve *bg = view->bg_curves->data;
 
+      g_signal_handlers_disconnect_by_func (bg->curve,
+                                            gimp_curve_view_curve_dirty,
+                                            view);
       g_object_unref (bg->curve);
 
       view->bg_curves = g_list_remove (view->bg_curves, bg);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]