summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThibault Saunier <tsaunier@gnome.org>2015-09-21 10:47:15 +0200
committerThibault Saunier <tsaunier@gnome.org>2015-09-21 13:03:53 +0200
commit717f922701eb359ca7ed22239423a3257e0e66f4 (patch)
treee28c00195d0f58325cbf4e9f37cebabb8791fe65
parent46e83f5d506b92588d934bac56f024fa1d51505f (diff)
downloadgstreamer-plugins-bad-717f922701eb359ca7ed22239423a3257e0e66f4.tar.gz
gtksink: Do not re destroy the GtkWindow if destroyed by the user
Otherwise we will get an ASSERT. Fixes https://bugzilla.gnome.org/show_bug.cgi?id=755249
-rw-r--r--ext/gtk/gstgtkbasesink.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/ext/gtk/gstgtkbasesink.c b/ext/gtk/gstgtkbasesink.c
index 42f74261a..0aeed1f35 100644
--- a/ext/gtk/gstgtkbasesink.c
+++ b/ext/gtk/gstgtkbasesink.c
@@ -150,7 +150,12 @@ static void
widget_destroy_cb (GtkWidget * widget, GstGtkBaseSink * gtk_sink)
{
GST_OBJECT_LOCK (gtk_sink);
- g_clear_object (&gtk_sink->widget);
+ if (widget == GTK_WIDGET (gtk_sink->widget))
+ g_clear_object (&gtk_sink->widget);
+ else if (widget == gtk_sink->window)
+ gtk_sink->window = NULL;
+ else
+ g_assert_not_reached ();
GST_OBJECT_UNLOCK (gtk_sink);
}
@@ -290,6 +295,8 @@ gst_gtk_base_sink_start (GstBaseSink * bsink)
gtk_window_set_default_size (GTK_WINDOW (gst_sink->window), 640, 480);
gtk_window_set_title (GTK_WINDOW (gst_sink->window), klass->window_title);
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);
}