Author: post
Date: 2010-03-23 21:40:16 +0100 (Tue, 23 Mar 2010)
New Revision: 3264

Modified:
   trunk/plugins/dcp/dcp.c
   trunk/plugins/dcp/dcp.h
   trunk/plugins/denoise/denoise.c
Log:
Properly disconnect "setting-changed" property to avoid crash when adjusting 
image after using "Export As".

Modified: trunk/plugins/dcp/dcp.c
===================================================================
--- trunk/plugins/dcp/dcp.c     2010-03-21 20:24:06 UTC (rev 3263)
+++ trunk/plugins/dcp/dcp.c     2010-03-23 20:40:16 UTC (rev 3264)
@@ -62,6 +62,11 @@
        g_free(dcp->_looktable_precalc_unaligned);
 
        free_dcp_profile(dcp);  
+       
+       if (dcp->settings_signal_id)
+               g_signal_handler_disconnect(dcp->settings, 
dcp->settings_signal_id);
+       dcp->settings_signal_id = 0;
+       dcp->settings = NULL;
 }
 
 static void
@@ -335,14 +340,15 @@
 {
        RSDcp *dcp = RS_DCP(object);
        RSFilter *filter = RS_FILTER(dcp);
-       RSSettings *settings;
 
        switch (property_id)
        {
                case PROP_SETTINGS:
-                       settings = g_value_get_object(value);
-                       g_signal_connect(settings, "settings-changed", 
G_CALLBACK(settings_changed), dcp);
-                       settings_changed(settings, MASK_ALL, dcp);
+                       if (dcp->settings && dcp->settings_signal_id)
+                               g_signal_handler_disconnect(dcp->settings, 
dcp->settings_signal_id);
+                       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);
                        break;
                case PROP_PROFILE:
                        read_profile(dcp, g_value_get_object(value));

Modified: trunk/plugins/dcp/dcp.h
===================================================================
--- trunk/plugins/dcp/dcp.h     2010-03-21 20:24:06 UTC (rev 3263)
+++ trunk/plugins/dcp/dcp.h     2010-03-23 20:40:16 UTC (rev 3264)
@@ -46,6 +46,8 @@
 
 struct _RSDcp {
        RSFilter parent;
+       gulong settings_signal_id;
+       RSSettings *settings;
 
        gfloat exposure;
        gfloat saturation;

Modified: trunk/plugins/denoise/denoise.c
===================================================================
--- trunk/plugins/denoise/denoise.c     2010-03-21 20:24:06 UTC (rev 3263)
+++ trunk/plugins/denoise/denoise.c     2010-03-23 20:40:16 UTC (rev 3264)
@@ -77,6 +77,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);
+       denoise->settings_signal_id = 0;
+       denoise->settings = NULL;
 }
 
 static void


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

Reply via email to