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