[Telepathy-commits] [telepathy-stream-engine/master] Only set XID on element that requested it
Olivier Crête
olivier.crete at collabora.co.uk
Thu Feb 19 16:41:55 PST 2009
---
src/videosink.c | 19 +++++++++++++++----
1 files changed, 15 insertions(+), 4 deletions(-)
diff --git a/src/videosink.c b/src/videosink.c
index d8c8da1..032a1a3 100644
--- a/src/videosink.c
+++ b/src/videosink.c
@@ -367,13 +367,20 @@ tp_stream_engine_video_sink_class_init (TpStreamEngineVideoSinkClass *klass)
G_TYPE_NONE, 0);
}
+struct xid_data
+{
+ GstElement *src;
+ gulong window_id;
+};
+
static void
set_window_xid (gpointer data, gpointer user_data)
{
GstXOverlay *xov = GST_X_OVERLAY (data);
- gulong xid = GPOINTER_TO_UINT (user_data);
+ struct xid_data *xiddata = (struct xid_data *) user_data;
- gst_x_overlay_set_xwindow_id (xov, xid);
+ if (xov == xiddata->src)
+ gst_x_overlay_set_xwindow_id (xov, xiddata->window_id);
}
gboolean
@@ -384,6 +391,7 @@ tp_stream_engine_video_sink_bus_sync_message (
const GstStructure *s;
gboolean found = FALSE;
GstIterator *it = NULL;
+ struct xid_data xiddata;
if (GST_MESSAGE_TYPE (message) != GST_MESSAGE_ELEMENT)
return FALSE;
@@ -392,10 +400,13 @@ tp_stream_engine_video_sink_bus_sync_message (
if (!gst_structure_has_name (s, "prepare-xwindow-id"))
return FALSE;
+ xiddata.src = GST_ELEMENT (GST_MESSAGE_SRC (message));
+ xiddata.window_id = self->priv->window_id;
+
it = gst_bin_iterate_all_by_interface (GST_BIN (self->priv->sink),
GST_TYPE_X_OVERLAY);
- while (gst_iterator_foreach (it, set_window_xid,
- GUINT_TO_POINTER (self->priv->window_id)) == GST_ITERATOR_RESYNC)
+ while (gst_iterator_foreach (it, set_window_xid, &xiddata) ==
+ GST_ITERATOR_RESYNC)
gst_iterator_resync (it);
gst_iterator_free (it);
--
1.5.6.5
More information about the telepathy-commits
mailing list