mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-10-21 18:04:00 +00:00
gtkglsink: Hide and clean the GtkWindow we might create
When stopping the sink we should always hide the window. https://bugzilla.gnome.org/show_bug.cgi?id=755249
This commit is contained in:
parent
07203364cb
commit
a2bdce8df3
3 changed files with 24 additions and 8 deletions
|
@ -44,6 +44,7 @@ static void gst_gtk_base_sink_get_property (GObject * object, guint prop_id,
|
||||||
GValue * value, GParamSpec * param_spec);
|
GValue * value, GParamSpec * param_spec);
|
||||||
|
|
||||||
static gboolean gst_gtk_base_sink_start (GstBaseSink * bsink);
|
static gboolean gst_gtk_base_sink_start (GstBaseSink * bsink);
|
||||||
|
static gboolean gst_gtk_base_sink_stop (GstBaseSink * bsink);
|
||||||
|
|
||||||
static GstStateChangeReturn
|
static GstStateChangeReturn
|
||||||
gst_gtk_base_sink_change_state (GstElement * element,
|
gst_gtk_base_sink_change_state (GstElement * element,
|
||||||
|
@ -121,6 +122,7 @@ gst_gtk_base_sink_class_init (GstGtkBaseSinkClass * klass)
|
||||||
gstbasesink_class->set_caps = gst_gtk_base_sink_set_caps;
|
gstbasesink_class->set_caps = gst_gtk_base_sink_set_caps;
|
||||||
gstbasesink_class->get_times = gst_gtk_base_sink_get_times;
|
gstbasesink_class->get_times = gst_gtk_base_sink_get_times;
|
||||||
gstbasesink_class->start = gst_gtk_base_sink_start;
|
gstbasesink_class->start = gst_gtk_base_sink_start;
|
||||||
|
gstbasesink_class->stop = gst_gtk_base_sink_stop;
|
||||||
|
|
||||||
gstvideosink_class->show_frame = gst_gtk_base_sink_show_frame;
|
gstvideosink_class->show_frame = gst_gtk_base_sink_show_frame;
|
||||||
}
|
}
|
||||||
|
@ -279,18 +281,30 @@ gst_gtk_base_sink_start (GstBaseSink * bsink)
|
||||||
|
|
||||||
toplevel = gtk_widget_get_toplevel (GTK_WIDGET (gst_sink->widget));
|
toplevel = gtk_widget_get_toplevel (GTK_WIDGET (gst_sink->widget));
|
||||||
if (!gtk_widget_is_toplevel (toplevel)) {
|
if (!gtk_widget_is_toplevel (toplevel)) {
|
||||||
GtkWidget *window;
|
|
||||||
|
|
||||||
/* sanity check */
|
/* sanity check */
|
||||||
g_assert (klass->window_title);
|
g_assert (klass->window_title);
|
||||||
|
|
||||||
/* User did not add widget its own UI, let's popup a new GtkWindow to
|
/* User did not add widget its own UI, let's popup a new GtkWindow to
|
||||||
* make gst-launch-1.0 work. */
|
* make gst-launch-1.0 work. */
|
||||||
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
gst_sink->window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||||
gtk_window_set_default_size (GTK_WINDOW (window), 640, 480);
|
gtk_window_set_default_size (GTK_WINDOW (gst_sink->window), 640, 480);
|
||||||
gtk_window_set_title (GTK_WINDOW (window), klass->window_title);
|
gtk_window_set_title (GTK_WINDOW (gst_sink->window), klass->window_title);
|
||||||
gtk_container_add (GTK_CONTAINER (window), toplevel);
|
gtk_container_add (GTK_CONTAINER (gst_sink->window), toplevel);
|
||||||
gtk_widget_show_all (window);
|
gtk_widget_show_all (gst_sink->window);
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
gst_gtk_base_sink_stop (GstBaseSink * bsink)
|
||||||
|
{
|
||||||
|
GstGtkBaseSink *gst_sink = GST_GTK_BASE_SINK (bsink);
|
||||||
|
|
||||||
|
if (gst_sink->window) {
|
||||||
|
gtk_widget_destroy (gst_sink->window);
|
||||||
|
gst_sink->window = NULL;
|
||||||
|
gst_sink->widget = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
|
@ -67,6 +67,8 @@ struct _GstGtkBaseSink
|
||||||
|
|
||||||
gboolean ignore_alpha;
|
gboolean ignore_alpha;
|
||||||
GBinding *bind_ignore_alpha;
|
GBinding *bind_ignore_alpha;
|
||||||
|
|
||||||
|
GtkWidget *window;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -212,7 +212,7 @@ gst_gtk_gl_sink_stop (GstBaseSink * bsink)
|
||||||
gtk_sink->gtk_context = NULL;
|
gtk_sink->gtk_context = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
return GST_BASE_SINK_CLASS (parent_class)->stop (bsink);
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
|
|
Loading…
Reference in a new issue