summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThibault Saunier <tsaunier@gnome.org>2015-09-23 11:42:51 +0200
committerThibault Saunier <tsaunier@gnome.org>2015-09-23 12:08:18 +0200
commit3417a1507657505cae943d161282dc72982c2241 (patch)
treeeb5771a5b166ecad932903dd725b8a52f536857f
parenta25253130b573c842805439e424eb048c1ef9bbc (diff)
downloadgstreamer-plugins-bad-3417a1507657505cae943d161282dc72982c2241.tar.gz
gtksink: Do not show window until we reach the PAUSED state
https://bugzilla.gnome.org/show_bug.cgi?id=755459
-rw-r--r--ext/gtk/gstgtkbasesink.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/ext/gtk/gstgtkbasesink.c b/ext/gtk/gstgtkbasesink.c
index 0aeed1f35..6321bdaae 100644
--- a/ext/gtk/gstgtkbasesink.c
+++ b/ext/gtk/gstgtkbasesink.c
@@ -297,7 +297,6 @@ gst_gtk_base_sink_start (GstBaseSink * bsink)
gtk_container_add (GTK_CONTAINER (gst_sink->window), toplevel);
g_signal_connect (gst_sink->window, "destroy",
G_CALLBACK (widget_destroy_cb), gst_sink);
- gtk_widget_show_all (gst_sink->window);
}
return TRUE;
@@ -317,6 +316,14 @@ gst_gtk_base_sink_stop (GstBaseSink * bsink)
return TRUE;
}
+static gboolean
+_show_window_cb (GstGtkBaseSink * gtk_sink)
+{
+ gtk_widget_show_all (gtk_sink->window);
+
+ return FALSE;
+}
+
static GstStateChangeReturn
gst_gtk_base_sink_change_state (GstElement * element, GstStateChange transition)
{
@@ -332,6 +339,12 @@ gst_gtk_base_sink_change_state (GstElement * element, GstStateChange transition)
return ret;
switch (transition) {
+ case GST_STATE_CHANGE_READY_TO_PAUSED:
+ GST_OBJECT_LOCK (gtk_sink);
+ if (gtk_sink->window)
+ g_idle_add ((GSourceFunc) _show_window_cb, gtk_sink);
+ GST_OBJECT_UNLOCK (gtk_sink);
+ break;
case GST_STATE_CHANGE_PAUSED_TO_READY:
GST_OBJECT_LOCK (gtk_sink);
if (gtk_sink->widget)