Author: jannis
Date: 2008-09-01 13:28:58 +0000 (Mon, 01 Sep 2008)
New Revision: 27639

Modified:
   xfce4-mixer/trunk/ChangeLog
   xfce4-mixer/trunk/libxfce4mixer/xfce-mixer-card.c
   xfce4-mixer/trunk/libxfce4mixer/xfce-mixer-card.h
   xfce4-mixer/trunk/xfce4-mixer/xfce-mixer.c
Log:
        * libxfce4mixer/xfce-mixer-card.{c,h}: Add new method
          xfce_mixer_card_disconnect() and return the signal handler ID from
          xfce_mixer_card_connect().
        * xfce4-mixer/xfce-mixer.c: Disconnect from the XfceMixeCard in
          xfce_mixer_finalize(). This way there will be no GstBus messages
          sent to finalized XfceMixer objects any more. Fixes a bug on first
          startup.


Modified: xfce4-mixer/trunk/ChangeLog
===================================================================
--- xfce4-mixer/trunk/ChangeLog 2008-09-01 12:12:51 UTC (rev 27638)
+++ xfce4-mixer/trunk/ChangeLog 2008-09-01 13:28:58 UTC (rev 27639)
@@ -1,5 +1,15 @@
 2008-09-01     Jannis Pohlmann <[EMAIL PROTECTED]>
 
+       * libxfce4mixer/xfce-mixer-card.{c,h}: Add new method
+         xfce_mixer_card_disconnect() and return the signal handler ID from
+         xfce_mixer_card_connect(). 
+       * xfce4-mixer/xfce-mixer.c: Disconnect from the XfceMixeCard in
+         xfce_mixer_finalize(). This way there will be no GstBus messages
+         sent to finalized XfceMixer objects any more. Fixes a bug on first
+         startup.
+
+2008-09-01     Jannis Pohlmann <[EMAIL PROTECTED]>
+
        * xfce4-mixer/xfce-mixer.c: Add g_return_val_if_fail() call to
          xfce_mixer_bus_message() in order to return when an invalid mixer
          object is passed to the function.

Modified: xfce4-mixer/trunk/libxfce4mixer/xfce-mixer-card.c
===================================================================
--- xfce4-mixer/trunk/libxfce4mixer/xfce-mixer-card.c   2008-09-01 12:12:51 UTC 
(rev 27638)
+++ xfce4-mixer/trunk/libxfce4mixer/xfce-mixer-card.c   2008-09-01 13:28:58 UTC 
(rev 27639)
@@ -352,7 +352,7 @@
 
 
 #ifdef HAVE_GST_MIXER_NOTIFICATION
-void
+gint
 xfce_mixer_card_connect (XfceMixerCard *card,
                          GCallback      callback_func,
                          gpointer       user_data)
@@ -366,11 +366,23 @@
       gst_element_set_bus (card->element, card->bus);
     }
 
-  g_signal_connect (G_OBJECT (card->bus), "message::element", callback_func, 
user_data);
+  return g_signal_connect (G_OBJECT (card->bus), "message::element", 
callback_func, user_data);
 }
 
 
 
+void
+xfce_mixer_card_disconnect (XfceMixerCard *card,
+                            gint           handler_id)
+{
+  g_return_if_fail (IS_XFCE_MIXER_CARD (card));
+
+  if (G_LIKELY (card->bus != NULL))
+    g_signal_handler_disconnect (card->bus, handler_id);
+}
+
+
+
 gboolean
 xfce_mixer_card_get_message_owner (XfceMixerCard *card,
                                    GstMessage    *message)

Modified: xfce4-mixer/trunk/libxfce4mixer/xfce-mixer-card.h
===================================================================
--- xfce4-mixer/trunk/libxfce4mixer/xfce-mixer-card.h   2008-09-01 12:12:51 UTC 
(rev 27638)
+++ xfce4-mixer/trunk/libxfce4mixer/xfce-mixer-card.h   2008-09-01 13:28:58 UTC 
(rev 27639)
@@ -68,9 +68,11 @@
                                                      GstMixerTrack *track,
                                                      gchar         *option);
 #ifdef HAVE_GST_MIXER_NOTIFICATION
-void           xfce_mixer_card_connect              (XfceMixerCard *card,
+gint           xfce_mixer_card_connect              (XfceMixerCard *card,
                                                      GCallback      
callback_func,
                                                      gpointer       user_data);
+void           xfce_mixer_card_disconnect           (XfceMixerCard *card,
+                                                     gint           
handler_id);
 gboolean       xfce_mixer_card_get_message_owner    (XfceMixerCard *card,
                                                      GstMessage    *message);
 #endif

Modified: xfce4-mixer/trunk/xfce4-mixer/xfce-mixer.c
===================================================================
--- xfce4-mixer/trunk/xfce4-mixer/xfce-mixer.c  2008-09-01 12:12:51 UTC (rev 
27638)
+++ xfce4-mixer/trunk/xfce4-mixer/xfce-mixer.c  2008-09-01 13:28:58 UTC (rev 
27639)
@@ -62,6 +62,10 @@
 
   XfceMixerCard *card;
 
+#ifdef HAVE_GST_MIXER_NOTIFICATION
+  gint           bus_connection_id;
+#endif
+
   GHashTable    *widgets;
 };
 
@@ -119,6 +123,7 @@
 xfce_mixer_init (XfceMixer *mixer)
 {
   mixer->widgets = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, NULL);
+  mixer->bus_connection_id = 0;
 }
 
 
@@ -136,6 +141,10 @@
 {
   XfceMixer *mixer = XFCE_MIXER (object);
 
+#ifdef HAVE_GST_MIXER_NOTIFICATION
+  xfce_mixer_card_disconnect (mixer->card, mixer->bus_connection_id);
+#endif
+
   g_object_unref (G_OBJECT (mixer->card));
 
   g_hash_table_unref (mixer->widgets);
@@ -321,7 +330,7 @@
     }
 
 #ifdef HAVE_GST_MIXER_NOTIFICATION
-  xfce_mixer_card_connect (mixer->card, G_CALLBACK (xfce_mixer_bus_message), 
mixer);
+  mixer->bus_connection_id = xfce_mixer_card_connect (mixer->card, G_CALLBACK 
(xfce_mixer_bus_message), mixer);
 #endif
 }
 

_______________________________________________
Xfce4-commits mailing list
Xfce4-commits@xfce.org
http://foo-projects.org/mailman/listinfo/xfce4-commits

Reply via email to