# HG changeset patch # User Mike Ruprecht # Date 1238733636 0 # Node ID 86c5499f36e8f574adb09560107c5bc0d9a5c16c # Parent c9b22d710a2207dd0f5cceab3d4102ff0ed59a88 Fix embedding video when the sink is a gconfvideosrc pointing to an autovideosrc. diff -r c9b22d710a22 -r 86c5499f36e8 libpurple/mediamanager.c --- 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