[457/906] gtk examples: adapt code since the native-window changes from gtk
authorJulien Isorce <julien.isorce@gmail.com>
Mon, 12 Jul 2010 16:38:59 +0000 (18:38 +0200)
committerMatthew Waters <ystreet00@gmail.com>
Sat, 15 Mar 2014 17:36:41 +0000 (18:36 +0100)
Fixes bug #599885

tests/examples/gtk/fxtest/pixbufdrop.c

index c2a8716..d9a9512 100644 (file)
@@ -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 ();