diff options
author | Matthew Waters <matthew@centricular.com> | 2015-10-17 02:40:50 +1100 |
---|---|---|
committer | Matthew Waters <matthew@centricular.com> | 2015-10-19 11:56:33 +1100 |
commit | 903691f3888526f240915fa124845a528e85c1b7 (patch) | |
tree | 6814234740d399cb770d2ed13eb2b5221b7abdc2 /ext | |
parent | 3a831e43af1d8efffff1dbb61ecba2be57f9fd80 (diff) | |
download | gstreamer-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
Diffstat (limited to 'ext')
-rw-r--r-- | ext/gtk/gstgtkbasesink.c | 17 |
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 (>k_sink->widget); - else if (widget == gtk_sink->window) - gtk_sink->window = NULL; - else - g_assert_not_reached (); + g_clear_object (>k_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; |