Author: post
Date: 2010-03-23 22:20:25 +0100 (Tue, 23 Mar 2010)
New Revision: 3265

Modified:
   trunk/plugins/dcp/dcp.c
   trunk/plugins/denoise/denoise.c
Log:
Add weak reference from DCP to settings, and remember to unref them. Fixes a 
couple of warnings.

Modified: trunk/plugins/dcp/dcp.c
===================================================================
--- trunk/plugins/dcp/dcp.c     2010-03-23 20:40:16 UTC (rev 3264)
+++ trunk/plugins/dcp/dcp.c     2010-03-23 21:20:25 UTC (rev 3265)
@@ -38,6 +38,7 @@
 static void set_property (GObject *object, guint property_id, const GValue 
*value, GParamSpec *pspec);
 static RSFilterResponse *get_image(RSFilter *filter, const RSFilterRequest 
*request);
 static void settings_changed(RSSettings *settings, RSSettingsMask mask, RSDcp 
*dcp);
+static void settings_weak_notify(gpointer data, GObject *where_the_object_was);
 static RS_xy_COORD neutral_to_xy(RSDcp *dcp, const RS_VECTOR3 *neutral);
 static RS_MATRIX3 find_xyz_to_camera(RSDcp *dcp, const RS_xy_COORD *white_xy, 
RS_MATRIX3 *forward_matrix);
 static void set_white_xy(RSDcp *dcp, const RS_xy_COORD *xy);
@@ -63,8 +64,11 @@
 
        free_dcp_profile(dcp);  
        
-       if (dcp->settings_signal_id)
+       if (dcp->settings_signal_id && dcp->settings)
+       {
                g_signal_handler_disconnect(dcp->settings, 
dcp->settings_signal_id);
+               g_object_weak_unref(G_OBJECT(dcp->settings), 
settings_weak_notify, dcp);
+       }
        dcp->settings_signal_id = 0;
        dcp->settings = NULL;
 }
@@ -345,10 +349,14 @@
        {
                case PROP_SETTINGS:
                        if (dcp->settings && dcp->settings_signal_id)
+                       {
                                g_signal_handler_disconnect(dcp->settings, 
dcp->settings_signal_id);
+                               g_object_weak_unref(G_OBJECT(dcp->settings), 
settings_weak_notify, dcp);
+                       }
                        dcp->settings = g_value_get_object(value);
                        dcp->settings_signal_id = 
g_signal_connect(dcp->settings, "settings-changed", 
G_CALLBACK(settings_changed), dcp);
                        settings_changed(dcp->settings, MASK_ALL, dcp);
+                       g_object_weak_ref(G_OBJECT(dcp->settings), 
settings_weak_notify, dcp);
                        break;
                case PROP_PROFILE:
                        read_profile(dcp, g_value_get_object(value));
@@ -364,7 +372,15 @@
        }
 }
 
+static void
+settings_weak_notify(gpointer data, GObject *where_the_object_was)
+{
+       RSDcp *dcp = RS_DCP(data);
 
+       dcp->settings = NULL;
+}
+
+
 gpointer
 start_single_dcp_thread(gpointer _thread_info)
 {

Modified: trunk/plugins/denoise/denoise.c
===================================================================
--- trunk/plugins/denoise/denoise.c     2010-03-23 20:40:16 UTC (rev 3264)
+++ trunk/plugins/denoise/denoise.c     2010-03-23 21:20:25 UTC (rev 3265)
@@ -78,7 +78,10 @@
        RSDenoise *denoise = RS_DENOISE(object);
        destroyDenoiser(&denoise->info);
        if (denoise->settings && denoise->settings_signal_id)
+       {
                g_signal_handler_disconnect(denoise->settings, 
denoise->settings_signal_id);
+               g_object_weak_unref(G_OBJECT(denoise->settings), 
settings_weak_notify, denoise);
+       }
        denoise->settings_signal_id = 0;
        denoise->settings = NULL;
 }
@@ -179,7 +182,10 @@
        {
                case PROP_SETTINGS:
                        if (denoise->settings && denoise->settings_signal_id)
+                       {
                                g_signal_handler_disconnect(denoise->settings, 
denoise->settings_signal_id);
+                               
g_object_weak_unref(G_OBJECT(denoise->settings), settings_weak_notify, denoise);
+                       }
                        denoise->settings = g_value_get_object(value);
                        denoise->settings_signal_id = 
g_signal_connect(denoise->settings, "settings-changed", 
G_CALLBACK(settings_changed), denoise);
                        settings_changed(denoise->settings, MASK_ALL, denoise);


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

Reply via email to