Hello, I have added X11embed support to the player from V0.9.2 using GtkPlug, maybe you will find it useful.
Regards, Gerard
--- swfplay.orig 2011-04-14 09:03:37.546689819 +0200 +++ swfplay.c 2011-04-14 10:11:58.882689528 +0200 @@ -44,21 +44,32 @@ set_playing (SwfdecGtkWidget *widget, GP } static GtkWidget * -view_swf (SwfdecPlayer *player, gboolean use_image) +view_swf (SwfdecPlayer *player, gboolean use_image, gboolean X11embed) { - GtkWidget *window, *widget; + GtkWidget *window = NULL, *widget; - window = gtk_window_new (GTK_WINDOW_TOPLEVEL); - gtk_window_set_icon_name (GTK_WINDOW (window), "swfdec"); + if(!X11embed) + { + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_window_set_icon_name (GTK_WINDOW (window), "swfdec"); + } widget = swfdec_gtk_widget_new (player); if (use_image) swfdec_gtk_widget_set_renderer (SWFDEC_GTK_WIDGET (widget), CAIRO_SURFACE_TYPE_IMAGE); - gtk_container_add (GTK_CONTAINER (window), widget); - g_signal_connect_swapped (window, "destroy", G_CALLBACK (g_main_loop_quit), loop); - gtk_widget_show_all (window); - g_signal_connect (widget, "notify::has-focus", G_CALLBACK (set_playing), player); + if(!X11embed) + { + gtk_container_add (GTK_CONTAINER (window), widget); + g_signal_connect_swapped (window, "destroy", G_CALLBACK (g_main_loop_quit), loop); + gtk_widget_show_all (window); + g_signal_connect (widget, "notify::has-focus", G_CALLBACK (set_playing), player); + } + else + swfdec_gtk_player_set_playing((SwfdecGtkPlayer *)player,TRUE); - return window; + if(X11embed) + return widget; + else + return window; } static void @@ -85,13 +96,16 @@ main (int argc, char *argv[]) { int speed = 100; int max_runtime = 0; + int xid = 0; SwfdecPlayer *player; GError *error = NULL; gboolean use_image = FALSE, no_sound = FALSE; gboolean trace = FALSE, no_scripts = FALSE; gboolean redraws = FALSE, gc = FALSE; char *variables = NULL; - GtkWidget *window; + GtkWidget *window = NULL; + GtkPlug *plug = NULL; + GtkWidget *embedWidget = NULL; SwfdecURL *url; GOptionEntry options[] = { @@ -104,6 +118,7 @@ main (int argc, char *argv[]) { "speed", 0, 0, G_OPTION_ARG_INT, &speed, "replay speed (will deactivate sound)", "PERCENT" }, { "trace", 't', 0, G_OPTION_ARG_NONE, &trace, "print trace output to stdout", NULL }, { "variables", 'v', 0, G_OPTION_ARG_STRING, &variables, "variables to pass to player", "VAR=NAME[&VAR=NAME..]" }, + { "xid", '0', 0, G_OPTION_ARG_INT, &xid, "X11 window to embed into", "PARENTID" }, { NULL } }; GOptionContext *ctx; @@ -141,20 +156,38 @@ main (int argc, char *argv[]) if (no_sound) swfdec_gtk_player_set_audio_enabled (SWFDEC_GTK_PLAYER (player), FALSE); - window = view_swf (player, use_image); + if(xid > 0) + { + plug = (GtkPlug *)gtk_plug_new(xid); + embedWidget = view_swf (player, use_image, TRUE); + gtk_container_add(GTK_CONTAINER(plug),embedWidget); + gtk_widget_show(embedWidget); + gtk_widget_show((GtkWidget *)plug); + } + else + window = view_swf (player, use_image, FALSE); + if (redraws) gdk_window_set_debug_updates (TRUE); if (!no_scripts) - g_signal_connect (player, "fscommand", G_CALLBACK (do_fscommand), window); - + { + if(xid == 0) + g_signal_connect (player, "fscommand", G_CALLBACK (do_fscommand), window); + else + g_signal_connect (player, "fscommand", G_CALLBACK (do_fscommand), plug); + } + if (variables != NULL) swfdec_player_set_variables (player, variables); url = swfdec_url_new_from_input (argv[1]); swfdec_player_set_url (player, url); - set_title (GTK_WINDOW (window), url); - swfdec_gtk_player_set_missing_plugins_window (SWFDEC_GTK_PLAYER (player), - window->window); + if(xid == 0) + { + set_title (GTK_WINDOW (window), url); + swfdec_gtk_player_set_missing_plugins_window (SWFDEC_GTK_PLAYER (player), + window->window); + } swfdec_url_free (url); if (g_main_loop_is_running (loop))
_______________________________________________ Swfdec mailing list Swfdec@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/swfdec