summaryrefslogtreecommitdiffstats
path: root/ext/gconf
diff options
context:
space:
mode:
authorSjoerd Simons <sjoerd@luon.net>2009-02-22 19:30:32 +0100
committerSebastian Dröge <sebastian.droege@collabora.co.uk>2009-02-22 19:30:32 +0100
commitef33cf891f7a9f97f178169adb87aa3695bf9b2b (patch)
treebf7246e0577a48969e97ca239e93f0dba26b8e7b /ext/gconf
parenta7c2b1354310b3c0fa81dc1d164fffca9c573c67 (diff)
gconfvideo(src|sink): Disconnect GConf notifications
Fixes bug #571321.
Diffstat (limited to 'ext/gconf')
-rw-r--r--ext/gconf/gstgconfvideosink.c5
-rw-r--r--ext/gconf/gstgconfvideosink.h3
-rw-r--r--ext/gconf/gstgconfvideosrc.c5
-rw-r--r--ext/gconf/gstgconfvideosrc.h3
4 files changed, 14 insertions, 2 deletions
diff --git a/ext/gconf/gstgconfvideosink.c b/ext/gconf/gstgconfvideosink.c
index 4090cc91..1b05fd37 100644
--- a/ext/gconf/gstgconfvideosink.c
+++ b/ext/gconf/gstgconfvideosink.c
@@ -122,7 +122,7 @@ gst_gconf_video_sink_init (GstGConfVideoSink * sink,
sink->client = gconf_client_get_default ();
gconf_client_add_dir (sink->client, GST_GCONF_DIR,
GCONF_CLIENT_PRELOAD_RECURSIVE, NULL);
- gconf_client_notify_add (sink->client,
+ sink->notify_id = gconf_client_notify_add (sink->client,
GST_GCONF_DIR "/" GST_GCONF_VIDEOSINK_KEY,
cb_toggle_element, sink, NULL, NULL);
}
@@ -133,6 +133,9 @@ gst_gconf_video_sink_dispose (GObject * object)
GstGConfVideoSink *sink = GST_GCONF_VIDEO_SINK (object);
if (sink->client) {
+ if (sink->notify_id != 0)
+ gconf_client_notify_remove (sink->client, sink->notify_id);
+
g_object_unref (G_OBJECT (sink->client));
sink->client = NULL;
}
diff --git a/ext/gconf/gstgconfvideosink.h b/ext/gconf/gstgconfvideosink.h
index 8f69c81a..2461e652 100644
--- a/ext/gconf/gstgconfvideosink.h
+++ b/ext/gconf/gstgconfvideosink.h
@@ -46,6 +46,9 @@ typedef struct _GstGConfVideoSink {
GstElement *kid;
GstPad *pad;
+ /* gconf notify id */
+ guint notify_id;
+
/* Current gconf string */
gchar *gconf_str;
} GstGConfVideoSink;
diff --git a/ext/gconf/gstgconfvideosrc.c b/ext/gconf/gstgconfvideosrc.c
index fe177d86..6192d73d 100644
--- a/ext/gconf/gstgconfvideosrc.c
+++ b/ext/gconf/gstgconfvideosrc.c
@@ -124,7 +124,7 @@ gst_gconf_video_src_init (GstGConfVideoSrc * src,
src->client = gconf_client_get_default ();
gconf_client_add_dir (src->client, GST_GCONF_DIR,
GCONF_CLIENT_PRELOAD_RECURSIVE, NULL);
- gconf_client_notify_add (src->client,
+ src->notify_id = gconf_client_notify_add (src->client,
GST_GCONF_DIR "/" GST_GCONF_VIDEOSRC_KEY,
cb_toggle_element, src, NULL, NULL);
}
@@ -135,6 +135,9 @@ gst_gconf_video_src_dispose (GObject * object)
GstGConfVideoSrc *src = GST_GCONF_VIDEO_SRC (object);
if (src->client) {
+ if (src->notify_id != 0)
+ gconf_client_notify_remove (src->client, src->notify_id);
+
g_object_unref (G_OBJECT (src->client));
src->client = NULL;
}
diff --git a/ext/gconf/gstgconfvideosrc.h b/ext/gconf/gstgconfvideosrc.h
index 6f64e6d1..4a2c8cdd 100644
--- a/ext/gconf/gstgconfvideosrc.h
+++ b/ext/gconf/gstgconfvideosrc.h
@@ -40,6 +40,9 @@ typedef struct _GstGConfVideoSrc {
GstElement *kid;
GstPad *pad;
+ /* gconf key notification id */
+ guint notify_id;
+
/* Current gconf string */
gchar *gconf_str;
} GstGConfVideoSrc;