Author: abrander
Date: 2009-07-04 16:15:12 +0200 (Sat, 04 Jul 2009)
New Revision: 2527

Modified:
   trunk/librawstudio/rs-filter.c
Log:
Do ref/unref of bound filters.

Modified: trunk/librawstudio/rs-filter.c
===================================================================
--- trunk/librawstudio/rs-filter.c      2009-07-04 12:50:22 UTC (rev 2526)
+++ trunk/librawstudio/rs-filter.c      2009-07-04 14:15:12 UTC (rev 2527)
@@ -93,6 +93,15 @@
        return filter;
 }
 
+static void
+rs_filter_weak_unlink(gpointer data, GObject *where_the_object_was)
+{
+       RSFilter *filter = RS_FILTER(data);
+       RSFilter *next = RS_FILTER(where_the_object_was);
+
+       filter->next_filters = g_slist_remove(filter->next_filters, next);
+}
+
 /**
  * Set the previous RSFilter in a RSFilter-chain
  * @param filter A RSFilter
@@ -106,10 +115,15 @@
        g_assert(RS_IS_FILTER(previous));
 
        if (filter->previous && (filter->previous != previous))
+       {
+               g_object_weak_unref(G_OBJECT(filter), rs_filter_weak_unlink, 
previous);
                filter->previous->next_filters = 
g_slist_remove(filter->previous->next_filters, filter);
+       }
 
        filter->previous = previous;
        previous->next_filters = g_slist_append(previous->next_filters, filter);
+
+       g_object_weak_ref(G_OBJECT(filter), rs_filter_weak_unlink, previous);
 }
 
 /**


_______________________________________________
Rawstudio-commit mailing list
[email protected]
http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-commit

Reply via email to