gconfvideo(src|sink): Disconnect GConf notifications
authorSjoerd Simons <sjoerd@luon.net>
Sun, 22 Feb 2009 18:30:32 +0000 (19:30 +0100)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Sun, 22 Feb 2009 18:30:32 +0000 (19:30 +0100)
Fixes bug #571321.

ext/gconf/gstgconfvideosink.c
ext/gconf/gstgconfvideosink.h
ext/gconf/gstgconfvideosrc.c
ext/gconf/gstgconfvideosrc.h

index 4090cc911477e007b107046cc71950c35cd339a9..1b05fd3717782008cb38494df138e39aa912d6f2 100644 (file)
@@ -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;
   }
index 8f69c81a1521d8c1beec5a618abf35a2ba6466ef..2461e6526bb9b5400890126861e7961f0180ff24 100644 (file)
@@ -46,6 +46,9 @@ typedef struct _GstGConfVideoSink {
   GstElement *kid;
   GstPad *pad;
 
+  /* gconf notify id */
+  guint notify_id;
+
   /* Current gconf string */
   gchar *gconf_str;
 } GstGConfVideoSink;
index fe177d8639f7cc1f8e63bee95e3e4bb7609769e4..6192d73d1d7d7f7cd2fd0920e25094b856da69d3 100644 (file)
@@ -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;
   }
index 6f64e6d1099aea67d749a538a402d7dfc51d6ad0..4a2c8cddf18c0fcf92c1918eaf84ec3ddb112e1d 100644 (file)
@@ -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;