Blob Blame History Raw
--- gnome-applets-2.16.0.1/mixer/load.c.delay-gstreamer-initialization	2006-12-12 15:20:06.000000000 -0500
+++ gnome-applets-2.16.0.1/mixer/load.c	2006-12-12 15:29:08.000000000 -0500
@@ -25,7 +25,7 @@
 
 #include <string.h>
 
-#include <glib/glist.h>
+#include <glib.h>
 #ifdef HAVE_GST10
 #include <gst/audio/mixerutils.h>
 #else
@@ -293,21 +293,41 @@
 #endif
 
 static gboolean
-gnome_volume_applet_factory (PanelApplet *applet,
-			     const gchar *iid,
-			     gpointer     data)
+gnome_volume_applet_toplevel_configure_handler (GtkWidget *widget,
+						GdkEventConfigure *event,
+						gpointer data)
 {
   GList *elements;
   static gboolean init = FALSE;
 
+  g_signal_handlers_disconnect_by_func (widget,
+				        gnome_volume_applet_toplevel_configure_handler,
+				        data);
+
   if (!init) {
     gst_init (NULL, NULL);
     init = TRUE;
   }
 
   elements = create_mixer_collection ();
-  gnome_volume_applet_setup (GNOME_VOLUME_APPLET (applet), elements);
+  gnome_volume_applet_setup (GNOME_VOLUME_APPLET (data), elements);
+
+  return FALSE;
+}
 
+static gboolean
+gnome_volume_applet_factory (PanelApplet *applet,
+			     const gchar *iid,
+			     gpointer     data)
+{
+  /* we delay applet specific initialization until the applet 
+   * is fully registered with the panel since gst_init() can block
+   * for longer than the service activation timeouts
+   */
+  g_signal_connect (gtk_widget_get_toplevel (GTK_WIDGET (applet)),
+		    "configure-event",
+		    G_CALLBACK (gnome_volume_applet_toplevel_configure_handler),
+		    applet);
   return TRUE;
 }