[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