summaryrefslogtreecommitdiff
path: root/ext/gtk
diff options
context:
space:
mode:
authorXavier Claessens <xavier.claessens@collabora.com>2015-06-17 09:36:57 -0400
committerMatthew Waters <matthew@centricular.com>2015-07-09 16:40:19 +1000
commitd95fd04960d53e7314b830135d8d04577e3d6f9c (patch)
tree0d4119916186de728e48835a75e290a3ab1271e5 /ext/gtk
parentb71b7dc9e60bc37a5143310b1bf00658de9a7a8b (diff)
downloadgstreamer-plugins-bad-d95fd04960d53e7314b830135d8d04577e3d6f9c.tar.gz
GstGtkGLSink: Ensure widget has a toplevel parent
Checking for a parent is not enough, it must have a toplevel one. If widget has no toplevel parent then add it in a GtkWindow, that make it usable from gst-launch-1.0. https://bugzilla.gnome.org/show_bug.cgi?id=751104
Diffstat (limited to 'ext/gtk')
-rw-r--r--ext/gtk/gstgtkglsink.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/ext/gtk/gstgtkglsink.c b/ext/gtk/gstgtkglsink.c
index 6f7c2b5c3..1a98c0221 100644
--- a/ext/gtk/gstgtkglsink.c
+++ b/ext/gtk/gstgtkglsink.c
@@ -314,6 +314,7 @@ gst_gtk_gl_sink_change_state (GstElement * element, GstStateChange transition)
{
GstGtkGLSink *gtk_sink = GST_GTK_GL_SINK (element);
GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
+ GtkWidget *toplevel;
GST_DEBUG ("changing state: %s => %s",
gst_element_state_get_name (GST_STATE_TRANSITION_CURRENT (transition)),
@@ -326,10 +327,17 @@ gst_gtk_gl_sink_change_state (GstElement * element, GstStateChange transition)
/* After this point, gtk_sink->widget will always be set */
- if (!gtk_widget_get_parent (GTK_WIDGET (gtk_sink->widget))) {
- GST_ERROR_OBJECT (gtk_sink,
- "gtkglsink widget needs to be parented to work.");
- return GST_STATE_CHANGE_FAILURE;
+ toplevel = gtk_widget_get_toplevel (GTK_WIDGET (gtk_sink->widget));
+ if (!gtk_widget_is_toplevel (toplevel)) {
+ GtkWidget *window;
+
+ /* User did not add widget its own UI, let's popup a new GtkWindow to
+ * make gst-launch-1.0 work. */
+ window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_default_size (GTK_WINDOW (window), 640, 480);
+ gtk_window_set_title (GTK_WINDOW (window), "Gtk+ OpenGL renderer");
+ gtk_container_add (GTK_CONTAINER (window), toplevel);
+ gtk_widget_show_all (window);
}
if (!gtk_gst_gl_widget_init_winsys (gtk_sink->widget))