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

Reply via email to