summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Waters <matthew@centricular.com>2015-10-17 02:40:50 +1100
committerMatthew Waters <matthew@centricular.com>2015-10-19 11:56:33 +1100
commit903691f3888526f240915fa124845a528e85c1b7 (patch)
tree6814234740d399cb770d2ed13eb2b5221b7abdc2
parent3a831e43af1d8efffff1dbb61ecba2be57f9fd80 (diff)
downloadgstreamer-plugins-bad-903691f3888526f240915fa124845a528e85c1b7.tar.gz
gtk: separate out the widget/window destroy callbacks
Fixes assertion due to the sink_finalize() being run before the widget destroy callback. https://bugzilla.gnome.org/show_bug.cgi?id=755969
-rw-r--r--ext/gtk/gstgtkbasesink.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/ext/gtk/gstgtkbasesink.c b/ext/gtk/gstgtkbasesink.c
index dd3af9101..e19294065 100644
--- a/ext/gtk/gstgtkbasesink.c
+++ b/ext/gtk/gstgtkbasesink.c
@@ -152,12 +152,15 @@ static void
widget_destroy_cb (GtkWidget * widget, GstGtkBaseSink * gtk_sink)
{
GST_OBJECT_LOCK (gtk_sink);
- 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 ();
+ g_clear_object (&gtk_sink->widget);
+ GST_OBJECT_UNLOCK (gtk_sink);
+}
+
+static void
+window_destroy_cb (GtkWidget * widget, GstGtkBaseSink * gtk_sink)
+{
+ GST_OBJECT_LOCK (gtk_sink);
+ gtk_sink->window = NULL;
GST_OBJECT_UNLOCK (gtk_sink);
}
@@ -314,7 +317,7 @@ gst_gtk_base_sink_start_on_main (GstBaseSink * bsink)
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);
+ G_CALLBACK (window_destroy_cb), gst_sink);
}
return TRUE;