[457/906] gtk examples: adapt code since the native-window changes from gtk

Fixes bug #599885
This commit is contained in:
Julien Isorce 2010-07-12 18:38:59 +02:00 committed by Matthew Waters
parent df4b871718
commit b130c3b750

View 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 ();