From: Julien Isorce Date: Mon, 12 Jul 2010 16:38:59 +0000 (+0200) Subject: [457/906] gtk examples: adapt code since the native-window changes from gtk X-Git-Tag: 1.19.3~509^2~1701^2~107 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b130c3b75016c0ec2633e1b14b788cd16296b0aa;p=platform%2Fupstream%2Fgstreamer.git [457/906] gtk examples: adapt code since the native-window changes from gtk Fixes bug #599885 --- diff --git a/tests/examples/gtk/fxtest/pixbufdrop.c b/tests/examples/gtk/fxtest/pixbufdrop.c index c2a8716..d9a9512 100644 --- a/tests/examples/gtk/fxtest/pixbufdrop.c +++ b/tests/examples/gtk/fxtest/pixbufdrop.c @@ -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 ();