comparison 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
comparison
equal deleted inserted replaced
26411:c9b22d710a22 26412:86c5499f36e8
611 611
612 #ifdef USE_VV 612 #ifdef USE_VV
613 static void 613 static void
614 window_id_cb(GstBus *bus, GstMessage *msg, PurpleMediaOutputWindow *ow) 614 window_id_cb(GstBus *bus, GstMessage *msg, PurpleMediaOutputWindow *ow)
615 { 615 {
616 GstElement *sink;
617
616 if (GST_MESSAGE_TYPE(msg) != GST_MESSAGE_ELEMENT || 618 if (GST_MESSAGE_TYPE(msg) != GST_MESSAGE_ELEMENT ||
617 !gst_structure_has_name(msg->structure, 619 !gst_structure_has_name(msg->structure,
618 "prepare-xwindow-id")) 620 "prepare-xwindow-id"))
619 return; 621 return;
620 622
621 if (GST_ELEMENT_PARENT(GST_MESSAGE_SRC(msg)) == ow->sink) { 623 sink = GST_ELEMENT(GST_MESSAGE_SRC(msg));
622 g_signal_handlers_disconnect_matched(bus, G_SIGNAL_MATCH_FUNC 624 while (sink != ow->sink) {
623 | G_SIGNAL_MATCH_DATA, 0, 0, NULL, 625 if (sink == NULL)
624 window_id_cb, ow); 626 return;
625 627 sink = GST_ELEMENT_PARENT(sink);
626 gst_x_overlay_set_xwindow_id(GST_X_OVERLAY( 628 }
627 GST_MESSAGE_SRC(msg)), ow->window_id); 629
628 } 630 g_signal_handlers_disconnect_matched(bus, G_SIGNAL_MATCH_FUNC
631 | G_SIGNAL_MATCH_DATA, 0, 0, NULL,
632 window_id_cb, ow);
633
634 gst_x_overlay_set_xwindow_id(GST_X_OVERLAY(
635 GST_MESSAGE_SRC(msg)), ow->window_id);
629 } 636 }
630 #endif 637 #endif
631 638
632 gboolean 639 gboolean
633 purple_media_manager_create_output_window(PurpleMediaManager *manager, 640 purple_media_manager_create_output_window(PurpleMediaManager *manager,