mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-17 11:45:25 +00:00
[457/906] gtk examples: adapt code since the native-window changes from gtk
Fixes bug #599885
This commit is contained in:
parent
2c43a348fa
commit
f08b7c892a
1 changed files with 27 additions and 8 deletions
|
@ -57,6 +57,26 @@ create_window (GstBus * bus, GstMessage * message, GtkWidget * widget)
|
|||
return GST_BUS_DROP;
|
||||
}
|
||||
|
||||
static void
|
||||
message_cb (GstBus * bus, GstMessage * message, GstElement * pipeline)
|
||||
{
|
||||
gst_element_set_state (pipeline, GST_STATE_NULL);
|
||||
gst_object_unref (pipeline);
|
||||
|
||||
gtk_main_quit ();
|
||||
}
|
||||
|
||||
static void
|
||||
realize_cb (GtkWidget * widget, GstElement * pipeline)
|
||||
{
|
||||
#if GTK_CHECK_VERSION(2,18,0)
|
||||
if (!gdk_window_ensure_native (widget->window))
|
||||
g_error ("Failed to create native window!");
|
||||
#endif
|
||||
|
||||
gst_element_set_state (pipeline, GST_STATE_PLAYING);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
expose_cb (GtkWidget * widget, GdkEventExpose * event, GstElement * videosink)
|
||||
{
|
||||
|
@ -128,7 +148,8 @@ on_drag_data_received (GtkWidget * widget,
|
|||
{
|
||||
SourceData *userdata = g_new0 (SourceData, 1);
|
||||
#ifdef G_OS_WIN32
|
||||
gchar *filename = g_filename_from_uri ((const gchar *) seldata->data, NULL, NULL);
|
||||
gchar *filename =
|
||||
g_filename_from_uri ((const gchar *) seldata->data, NULL, NULL);
|
||||
#else
|
||||
GdkPixbufFormat *format;
|
||||
gchar **uris = gtk_selection_data_get_uris (seldata);
|
||||
|
@ -160,7 +181,6 @@ on_drag_data_received (GtkWidget * widget,
|
|||
gint
|
||||
main (gint argc, gchar * argv[])
|
||||
{
|
||||
GstStateChangeReturn ret;
|
||||
GstElement *pipeline;
|
||||
GstElement *uload, *filter, *sink;
|
||||
GstElement *sourcebin;
|
||||
|
@ -288,8 +308,13 @@ main (gint argc, gchar * argv[])
|
|||
|
||||
bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
|
||||
gst_bus_set_sync_handler (bus, (GstBusSyncHandler) create_window, screen);
|
||||
gst_bus_add_signal_watch (bus);
|
||||
g_signal_connect (bus, "message::error", G_CALLBACK (message_cb), pipeline);
|
||||
g_signal_connect (bus, "message::warning", G_CALLBACK (message_cb), pipeline);
|
||||
g_signal_connect (bus, "message::eos", G_CALLBACK (message_cb), pipeline);
|
||||
gst_object_unref (bus);
|
||||
g_signal_connect (screen, "expose-event", G_CALLBACK (expose_cb), sink);
|
||||
g_signal_connect (screen, "realize", G_CALLBACK (realize_cb), pipeline);
|
||||
|
||||
gtk_drag_dest_set (screen, GTK_DEST_DEFAULT_ALL, NULL, 0, GDK_ACTION_COPY);
|
||||
gtk_drag_dest_add_uri_targets (screen);
|
||||
|
@ -297,12 +322,6 @@ main (gint argc, gchar * argv[])
|
|||
g_signal_connect (screen, "drag-data-received",
|
||||
G_CALLBACK (on_drag_data_received), filter);
|
||||
|
||||
ret = gst_element_set_state (pipeline, GST_STATE_PLAYING);
|
||||
if (ret == GST_STATE_CHANGE_FAILURE) {
|
||||
g_print ("Failed to start up pipeline!\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
gtk_widget_show_all (GTK_WIDGET (window));
|
||||
|
||||
gtk_main ();
|
||||
|
|
Loading…
Reference in a new issue