diff libpurple/mediamanager.c @ 26412:86c5499f36e8

Fix embedding video when the sink is a gconfvideosrc pointing to an autovideosrc.
author Mike Ruprecht <maiku@soc.pidgin.im>
date Fri, 03 Apr 2009 04:40:36 +0000
parents 081a819bc710
children 90c65a8575bf
line wrap: on
line diff
--- a/libpurple/mediamanager.c	Fri Apr 03 03:22:23 2009 +0000
+++ b/libpurple/mediamanager.c	Fri Apr 03 04:40:36 2009 +0000
@@ -613,19 +613,26 @@
 static void
 window_id_cb(GstBus *bus, GstMessage *msg, PurpleMediaOutputWindow *ow)
 {
+	GstElement *sink;
+
 	if (GST_MESSAGE_TYPE(msg) != GST_MESSAGE_ELEMENT ||
 			!gst_structure_has_name(msg->structure,
 			"prepare-xwindow-id"))
 		return;
 
-	if (GST_ELEMENT_PARENT(GST_MESSAGE_SRC(msg)) == ow->sink) {
-		g_signal_handlers_disconnect_matched(bus, G_SIGNAL_MATCH_FUNC
-				| G_SIGNAL_MATCH_DATA, 0, 0, NULL,
-				window_id_cb, ow);
+	sink = GST_ELEMENT(GST_MESSAGE_SRC(msg));
+	while (sink != ow->sink) {
+		if (sink == NULL)
+			return;
+		sink = GST_ELEMENT_PARENT(sink);
+	}
 
-		gst_x_overlay_set_xwindow_id(GST_X_OVERLAY(
-				GST_MESSAGE_SRC(msg)), ow->window_id);
-	}
+	g_signal_handlers_disconnect_matched(bus, G_SIGNAL_MATCH_FUNC
+			| G_SIGNAL_MATCH_DATA, 0, 0, NULL,
+			window_id_cb, ow);
+
+	gst_x_overlay_set_xwindow_id(GST_X_OVERLAY(
+			GST_MESSAGE_SRC(msg)), ow->window_id);
 }
 #endif