[Swfdec-commits] 3 commits - src/plugin.c src/plugin_x11.c src/swfmoz_dialog.c src/swfmoz_loader.c src/swfmoz_loader.h src/swfmoz_player.c src/swfmoz_player.h

Benjamin Otte company at kemper.freedesktop.org
Fri Jan 25 09:21:38 PST 2008


 src/plugin.c        |   27 ++++----
 src/plugin_x11.c    |   29 ++++-----
 src/swfmoz_dialog.c |   39 ++++++++----
 src/swfmoz_loader.c |   51 ++++++----------
 src/swfmoz_loader.h |    7 --
 src/swfmoz_player.c |  165 ++++++++++++++++++++++++++--------------------------
 src/swfmoz_player.h |   18 ++---
 7 files changed, 172 insertions(+), 164 deletions(-)

New commits:
commit e037ae0a8a3db40bfe9910d82d10cb55f2f7ff31
Author: Benjamin Otte <otte at gnome.org>
Date:   Fri Jan 25 18:14:33 2008 +0100

    pass the streams to the right loaders
    
    makes the plugin work again.

diff --git a/src/plugin.c b/src/plugin.c
index eba90d0..0fee553 100644
--- a/src/plugin.c
+++ b/src/plugin.c
@@ -274,8 +274,12 @@ plugin_new_stream (NPP instance, NPMIMEType type, NPStream* stream,
   if (instance == NULL || !SWFMOZ_IS_PLAYER (instance->pdata))
     return NPERR_INVALID_INSTANCE_ERROR;
 
-  if (!swfmoz_player_set_initial_stream (instance->pdata, stream))
-    return NPERR_INVALID_URL;
+  if (!SWFMOZ_IS_LOADER (stream->notifyData)) {
+    if (!swfmoz_player_set_initial_stream (instance->pdata, stream))
+      return NPERR_INVALID_URL;
+  } else {
+    swfmoz_loader_set_stream (stream->notifyData, stream);
+  }
   if (stype)
     *stype = NP_ASFILE;
   return NPERR_NO_ERROR;
@@ -372,10 +376,11 @@ plugin_url_notify (NPP instance, const char* url, NPReason reason, void* notifyD
 
   if (reason == NPRES_NETWORK_ERR) {
     swfdec_stream_error (stream, "Network error");
+    g_object_unref (stream);
   } else if (reason == NPRES_USER_BREAK) {
     swfdec_stream_error (stream, "User interrupt");
+    g_object_unref (stream);
   }
-  g_object_unref (stream);
 }
 
 NPError
diff --git a/src/swfmoz_loader.c b/src/swfmoz_loader.c
index 846de1c..02dee26 100644
--- a/src/swfmoz_loader.c
+++ b/src/swfmoz_loader.c
@@ -54,12 +54,10 @@ swfmoz_loader_load (SwfdecLoader *loader, SwfdecPlayer *player,
   SwfmozPlayer *mozplay = SWFMOZ_PLAYER (player);
   SwfmozLoader *moz = SWFMOZ_LOADER (loader);
 
-  g_printerr ("loading %s\n", url);
   moz->instance = mozplay->instance;
   g_object_ref (moz);
   if (mozplay->initial) {
-    moz->stream = mozplay->initial;
-    moz->stream->pdata = moz;
+    swfmoz_loader_set_stream (moz, mozplay->initial);
     mozplay->initial = NULL;
   } else {
     if (request == SWFDEC_LOADER_REQUEST_POST) {
@@ -104,14 +102,14 @@ swfmoz_loader_init (SwfmozLoader *slow_loader)
 }
 
 void
-swfmoz_loader_set_stream (SwfmozLoader *loader, NPP instance, NPStream *stream)
+swfmoz_loader_set_stream (SwfmozLoader *loader, NPStream *stream)
 {
   g_return_if_fail (SWFMOZ_IS_LOADER (loader));
   g_return_if_fail (loader->stream == NULL);
-  g_return_if_fail (instance != NULL);
   g_return_if_fail (stream != NULL);
 
   g_printerr ("Loading stream: %s\n", stream->url);
+  stream->pdata = loader;
   loader->stream = stream;
   if (stream->end)
     swfdec_loader_set_size (SWFDEC_LOADER (loader), stream->end);
diff --git a/src/swfmoz_loader.h b/src/swfmoz_loader.h
index 9081664..888188e 100644
--- a/src/swfmoz_loader.h
+++ b/src/swfmoz_loader.h
@@ -55,7 +55,6 @@ struct _SwfmozLoaderClass
 GType		swfmoz_loader_get_type   	(void);
 
 void		swfmoz_loader_set_stream	(SwfmozLoader *	loader,
-						 NPP		instance,
 						 NPStream *	stream);
 void		swfmoz_loader_ensure_open	(SwfmozLoader *	loader);
 					 
commit ffd96cef94b8ca800e36ae952c65da2395daab70
Author: Benjamin Otte <otte at gnome.org>
Date:   Fri Jan 25 17:19:37 2008 +0100

    add the loader only when we successfully opened it

diff --git a/src/swfmoz_loader.c b/src/swfmoz_loader.c
index 87526e7..846de1c 100644
--- a/src/swfmoz_loader.c
+++ b/src/swfmoz_loader.c
@@ -73,7 +73,6 @@ swfmoz_loader_load (SwfdecLoader *loader, SwfdecPlayer *player,
       plugin_get_url_notify (moz->instance, url, NULL, moz);
     }
   }
-  swfmoz_player_add_loader (mozplay, moz);
 }
 
 static void
@@ -126,6 +125,7 @@ swfmoz_loader_ensure_open (SwfmozLoader *loader)
   if (loader->open)
     return;
   swfdec_loader_set_url (SWFDEC_LOADER (loader), loader->stream->url);
+  swfmoz_player_add_loader (loader->instance->pdata, loader);
   swfdec_stream_open (SWFDEC_STREAM (loader));
   loader->open = TRUE;
 }
commit 3b16ab4a338c69f2d41ea347fe7d8a588c6dbf6f
Author: Benjamin Otte <otte at gnome.org>
Date:   Fri Jan 25 14:16:20 2008 +0100

    update to SwfdecLoader API changes.

diff --git a/src/plugin.c b/src/plugin.c
index 0cf24fd..eba90d0 100644
--- a/src/plugin.c
+++ b/src/plugin.c
@@ -161,6 +161,7 @@ plugin_new (NPMIMEType mime_type, NPP instance,
     uint16_t mode, int16_t argc, char *argn[], char *argv[],
     NPSavedData * saved)
 {
+  SwfdecPlayer *player;
   int i;
 
   if (instance == NULL)
@@ -188,7 +189,7 @@ plugin_new (NPMIMEType mime_type, NPP instance,
   /* Init functioncalling (even g_type_init) gets postponed until we know we
    * won't be unloaded, i.e. NPPVpluginKeepLibraryInMemory was successful */
   swfdec_init ();
-  instance->pdata = swfmoz_player_new (instance, FALSE);
+  instance->pdata = player = swfmoz_player_new (instance, FALSE);
 
   /* set the properties we support */
   /* FIXME: figure out how variables override each other */
@@ -197,11 +198,11 @@ plugin_new (NPMIMEType mime_type, NPP instance,
       continue;
     if (g_ascii_strcasecmp (argn[i], "flashvars") == 0) {
       if (argv[i])
-	swfmoz_player_add_variables (instance->pdata, argv[i]);
+	swfdec_player_set_variables (player, argv[i]);
     } else if (g_ascii_strcasecmp (argn[i], "bgcolor") == 0) {
       GdkColor color;
       if (gdk_color_parse (argv[i], &color)) {
-	swfdec_player_set_background_color (SWFMOZ_PLAYER (instance->pdata)->player, 
+	swfdec_player_set_background_color (player, 
 	    0xFF000000 | (color.red / 0x101 << 16) | 
 	    (color.green / 0x101 << 8) | (color.blue / 0x101));
       }
@@ -220,7 +221,7 @@ plugin_new (NPMIMEType mime_type, NPP instance,
       } else {
 	scale = SWFDEC_SCALE_SHOW_ALL;
       }
-      swfdec_player_set_scale_mode (SWFMOZ_PLAYER (instance->pdata)->player, scale);
+      swfdec_player_set_scale_mode (player, scale);
     } else if (g_ascii_strcasecmp (argn[i], "salign") == 0) {
       struct {
 	const char *	name;
@@ -244,7 +245,7 @@ plugin_new (NPMIMEType mime_type, NPP instance,
 	  break;
 	}
       }
-      swfdec_player_set_alignment (SWFMOZ_PLAYER (instance->pdata)->player, align);
+      swfdec_player_set_alignment (player, align);
     } else {
       g_printerr ("Unsupported movie property %s with value \"%s\"\n", 
 	  argn[i], argv[i] ? argv[i] : "(null)");
@@ -270,16 +271,11 @@ static NPError
 plugin_new_stream (NPP instance, NPMIMEType type, NPStream* stream, 
     NPBool seekable, uint16* stype)
 {
-  SwfdecLoader *loader;
-
   if (instance == NULL || !SWFMOZ_IS_PLAYER (instance->pdata))
     return NPERR_INVALID_INSTANCE_ERROR;
 
-  loader = swfmoz_player_add_stream (instance->pdata, stream);
-  if (loader == NULL)
+  if (!swfmoz_player_set_initial_stream (instance->pdata, stream))
     return NPERR_INVALID_URL;
-  g_object_ref (loader);
-  stream->pdata = loader;
   if (stype)
     *stype = NP_ASFILE;
   return NPERR_NO_ERROR;
diff --git a/src/plugin_x11.c b/src/plugin_x11.c
index a118c24..7abe0b7 100644
--- a/src/plugin_x11.c
+++ b/src/plugin_x11.c
@@ -29,16 +29,17 @@
 static GdkFilterReturn
 plugin_x11_handle_event (GdkXEvent *gdkxevent, GdkEvent *unused, gpointer playerp)
 {
-  SwfmozPlayer *player = playerp;
+  SwfdecPlayer *player = playerp;
+  SwfmozPlayer *mozplay = playerp;
   XEvent *event = gdkxevent;
 
   switch (event->type) {
     case VisibilityNotify:
       {
-	GdkRectangle rect = { 0, 0, player->target_rect.width, player->target_rect.height };
+	GdkRectangle rect = { 0, 0, mozplay->target_rect.width, mozplay->target_rect.height };
 	GdkRegion *region;
 	region = gdk_region_rectangle (&rect);
-	swfmoz_player_render (player, region);
+	swfmoz_player_render (mozplay, region);
 	gdk_region_destroy (region);
 	break;
       }
@@ -48,20 +49,20 @@ plugin_x11_handle_event (GdkXEvent *gdkxevent, GdkEvent *unused, gpointer player
 	GdkRectangle rect = { expose->x, expose->y, expose->width, expose->height };
 	GdkRegion *region;
 	region = gdk_region_rectangle (&rect);
-	swfmoz_player_render (player, region);
+	swfmoz_player_render (mozplay, region);
 	gdk_region_destroy (region);
 	break;
       }
     case ButtonPress:
       {
 	XButtonEvent *button = (XButtonEvent *) event;
-	swfmoz_player_mouse_press (player, button->x, button->y, button->button);
+	swfmoz_player_mouse_press (mozplay, button->x, button->y, button->button);
 	break;
       }
     case ButtonRelease:
       {
 	XButtonEvent *button = (XButtonEvent *) event;
-	swfmoz_player_mouse_release (player, button->x, button->y, button->button);
+	swfmoz_player_mouse_release (mozplay, button->x, button->y, button->button);
 	break;
       }
     case EnterNotify:
@@ -72,8 +73,8 @@ plugin_x11_handle_event (GdkXEvent *gdkxevent, GdkEvent *unused, gpointer player
       {
 	int winx, winy;
 
-	gdk_window_get_pointer (player->target, &winx, &winy, NULL);
-	swfmoz_player_mouse_move (player, winx, winy);
+	gdk_window_get_pointer (mozplay->target, &winx, &winy, NULL);
+	swfmoz_player_mouse_move (mozplay, winx, winy);
 	break;
       }
     case KeyPress:
@@ -91,9 +92,9 @@ plugin_x11_handle_event (GdkXEvent *gdkxevent, GdkEvent *unused, gpointer player
 	keycode = swfdec_gtk_keycode_from_hardware_keycode (key->keycode);
 	if (keycode != 0) {
 	  if (event->type == KeyPress) {
-	    swfdec_player_key_press (player->player, keycode, gdk_keyval_to_unicode (keyval));
+	    swfdec_player_key_press (player, keycode, gdk_keyval_to_unicode (keyval));
 	  } else {
-	    swfdec_player_key_release (player->player, keycode, gdk_keyval_to_unicode (keyval));
+	    swfdec_player_key_release (player, keycode, gdk_keyval_to_unicode (keyval));
 	  }
 	}
 	break;
@@ -102,7 +103,7 @@ plugin_x11_handle_event (GdkXEvent *gdkxevent, GdkEvent *unused, gpointer player
       {
 	XConfigureEvent *conf = (XConfigureEvent *) event;
 
-	swfmoz_player_set_target (player, player->target, 0, 0, conf->width, conf->height);
+	swfmoz_player_set_target (mozplay, mozplay->target, 0, 0, conf->width, conf->height);
 	break;
       }
     default:
@@ -155,8 +156,8 @@ plugin_x11_setup_windowed (SwfmozPlayer *player, Window xwindow,
     gdk_window_add_filter (window, plugin_x11_handle_event, player);
     gdk_window_show (window);
     swfmoz_player_set_target (player, window, 0, 0, width, height);
-    plugin_x11_notify_cb (player->player, NULL, window);
-    g_signal_connect (player->player, "notify::background-color", 
+    plugin_x11_notify_cb (SWFDEC_PLAYER (player), NULL, window);
+    g_signal_connect (player, "notify::background-color", 
 	G_CALLBACK (plugin_x11_notify_cb), window);
   } else {
     gdk_window_move_resize (player->target, 0, 0, width, height);
@@ -168,7 +169,7 @@ plugin_x11_teardown (SwfmozPlayer *player)
 {
   if (player->target) {
     gdk_window_remove_filter (player->target, plugin_x11_handle_event, player);
-    g_signal_handlers_disconnect_by_func (player->player, 
+    g_signal_handlers_disconnect_by_func (player, 
 	plugin_x11_notify_cb, player->target);
   }
   swfmoz_player_set_target (player, NULL, 0, 0, 0, 0);
diff --git a/src/swfmoz_dialog.c b/src/swfmoz_dialog.c
index a01d67f..b6b73c4 100644
--- a/src/swfmoz_dialog.c
+++ b/src/swfmoz_dialog.c
@@ -21,6 +21,8 @@
 #include "config.h"
 #endif
 
+#include <string.h>
+
 #include "swfmoz_dialog.h"
 #include "plugin.h"
 #include "swfmoz_loader.h"
@@ -90,6 +92,25 @@ error:
   return;
 }
 
+static char *
+swfmoz_dialog_get_loader_filename (SwfdecLoader *loader)
+{
+  const SwfdecURL *url = swfdec_loader_get_url (loader);
+  const char *path;
+
+  path = swfdec_url_get_path (url);
+  if (path == NULL) {
+    return "unknown";
+  } else {
+    const char *slash = strrchr (path, '/');
+    if (slash) {
+      return g_strdup (slash + 1);
+    } else {
+      return g_strdup (path);
+    }
+  }
+}
+
 static void
 swfmoz_dialog_save_media (GtkButton *button, SwfmozDialog *dialog)
 {
@@ -121,7 +142,7 @@ swfmoz_dialog_save_media (GtkButton *button, SwfmozDialog *dialog)
     return;
   }
   
-  filename = swfdec_loader_get_filename (SWFDEC_LOADER (loader));
+  filename = swfmoz_dialog_get_loader_filename (SWFDEC_LOADER (loader));
   s = g_strdup_printf ("Save \"%s\"", filename);
   chooser = gtk_file_chooser_dialog_new (s, GTK_WINDOW (dialog),
       GTK_FILE_CHOOSER_ACTION_SAVE, 
@@ -153,10 +174,12 @@ swfmoz_dialog_get_media_page (SwfmozDialog *dialog)
   dialog->media = widget = gtk_tree_view_new_with_model (dialog->player->loaders);
 
   renderer = gtk_cell_renderer_text_new ();
-  column = gtk_tree_view_column_new_with_attributes ("Name", renderer,
-    "text", SWFMOZ_LOADER_COLUMN_NAME, NULL);
+  g_object_set (renderer, "width-chars", 25, "editable", TRUE,
+      "ellipsize", PANGO_ELLIPSIZE_START, "ellipsize-set", TRUE, NULL);
+  column = gtk_tree_view_column_new_with_attributes ("URL", renderer,
+    "text", SWFMOZ_LOADER_COLUMN_URL, "expand", TRUE, NULL);
   gtk_tree_view_column_set_resizable (column, TRUE);
-  gtk_tree_view_column_set_sort_column_id (column, SWFMOZ_LOADER_COLUMN_NAME);
+  gtk_tree_view_column_set_sort_column_id (column, SWFMOZ_LOADER_COLUMN_URL);
   gtk_tree_view_append_column (GTK_TREE_VIEW (widget), column);
 
   renderer = gtk_cell_renderer_text_new ();
@@ -180,14 +203,6 @@ swfmoz_dialog_get_media_page (SwfmozDialog *dialog)
   gtk_tree_view_column_set_sort_column_id (column, SWFMOZ_LOADER_COLUMN_ERROR);
   gtk_tree_view_append_column (GTK_TREE_VIEW (widget), column);
 
-  renderer = gtk_cell_renderer_text_new ();
-  g_object_set (renderer, "width-chars", 15, "editable", TRUE, NULL);
-  column = gtk_tree_view_column_new_with_attributes ("URL", renderer,
-    "text", SWFMOZ_LOADER_COLUMN_URL, NULL);
-  gtk_tree_view_column_set_resizable (column, TRUE);
-  gtk_tree_view_column_set_sort_column_id (column, SWFMOZ_LOADER_COLUMN_URL);
-  gtk_tree_view_append_column (GTK_TREE_VIEW (widget), column);
-
   align = gtk_scrolled_window_new (NULL, NULL);
   gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (align),
       GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
diff --git a/src/swfmoz_loader.c b/src/swfmoz_loader.c
index a63f39c..87526e7 100644
--- a/src/swfmoz_loader.c
+++ b/src/swfmoz_loader.c
@@ -22,6 +22,7 @@
 #endif
 
 #include "swfmoz_loader.h"
+#include "swfmoz_player.h"
 #include "plugin.h"
 
 /* Note about refcounting:
@@ -47,25 +48,32 @@ swfmoz_loader_dispose (GObject *object)
 }
 
 static void
-swfmoz_loader_load (SwfdecLoader *loader, SwfdecLoader *parent, 
-    SwfdecLoaderRequest request, SwfdecBuffer *buffer)
+swfmoz_loader_load (SwfdecLoader *loader, SwfdecPlayer *player, 
+    const char *url, SwfdecLoaderRequest request, SwfdecBuffer *buffer)
 {
+  SwfmozPlayer *mozplay = SWFMOZ_PLAYER (player);
   SwfmozLoader *moz = SWFMOZ_LOADER (loader);
-  const char *url;
 
-  moz->instance = SWFMOZ_LOADER (parent)->instance;
+  g_printerr ("loading %s\n", url);
+  moz->instance = mozplay->instance;
   g_object_ref (moz);
-  url = swfdec_url_get_url (swfdec_loader_get_url (loader));
-  if (request == SWFDEC_LOADER_REQUEST_POST) {
-    if (buffer) {
-      plugin_post_url_notify (moz->instance, url, NULL, 
-	  (char *) buffer->data, buffer->length, moz);
+  if (mozplay->initial) {
+    moz->stream = mozplay->initial;
+    moz->stream->pdata = moz;
+    mozplay->initial = NULL;
+  } else {
+    if (request == SWFDEC_LOADER_REQUEST_POST) {
+      if (buffer) {
+	plugin_post_url_notify (moz->instance, url, NULL, 
+	    (char *) buffer->data, buffer->length, moz);
+      } else {
+	plugin_post_url_notify (moz->instance, url, NULL, NULL, 0, moz);
+      }
     } else {
-      plugin_post_url_notify (moz->instance, url, NULL, NULL, 0, moz);
+      plugin_get_url_notify (moz->instance, url, NULL, moz);
     }
-  } else {
-    plugin_get_url_notify (moz->instance, url, NULL, moz);
   }
+  swfmoz_player_add_loader (mozplay, moz);
 }
 
 static void
@@ -105,7 +113,6 @@ swfmoz_loader_set_stream (SwfmozLoader *loader, NPP instance, NPStream *stream)
   g_return_if_fail (stream != NULL);
 
   g_printerr ("Loading stream: %s\n", stream->url);
-  loader->instance = instance;
   loader->stream = stream;
   if (stream->end)
     swfdec_loader_set_size (SWFDEC_LOADER (loader), stream->end);
@@ -123,22 +130,6 @@ swfmoz_loader_ensure_open (SwfmozLoader *loader)
   loader->open = TRUE;
 }
 
-SwfdecLoader *
-swfmoz_loader_new (NPP instance, NPStream *stream)
-{
-  SwfmozLoader *ret;
-  SwfdecURL *url;
-
-  g_return_val_if_fail (stream != NULL, NULL);
-
-  url = swfdec_url_new (stream->url);
-  ret = g_object_new (SWFMOZ_TYPE_LOADER, "url", url, NULL);
-  swfdec_url_free (url);
-  swfmoz_loader_set_stream (ret, instance, stream);
-
-  return SWFDEC_LOADER (ret);
-}
-
 const char *
 swfmoz_loader_get_data_type_string (SwfdecLoader *loader)
 {
diff --git a/src/swfmoz_loader.h b/src/swfmoz_loader.h
index 7bbc2dd..9081664 100644
--- a/src/swfmoz_loader.h
+++ b/src/swfmoz_loader.h
@@ -21,7 +21,7 @@
 #define _SWFMOZ_LOADER_H_
 
 #include <npapi.h>
-#include <libswfdec/swfdec.h>
+#include <swfdec/swfdec.h>
 
 G_BEGIN_DECLS
 
@@ -41,7 +41,7 @@ struct _SwfmozLoader
   SwfdecLoader		parent;
 
   NPP			instance;	/* instance we belong to */
-  NPStream *		stream;		/* stream we do */
+  NPStream *		stream;		/* stream we do or NULL if not created yet */
 
   char *		cache_file;	/* where the file is cached */
   gboolean		open;		/* TRUE when data has arrived */
@@ -54,8 +54,6 @@ struct _SwfmozLoaderClass
 
 GType		swfmoz_loader_get_type   	(void);
 
-SwfdecLoader *	swfmoz_loader_new	  	(NPP		instance,
-						 NPStream *	stream);
 void		swfmoz_loader_set_stream	(SwfmozLoader *	loader,
 						 NPP		instance,
 						 NPStream *	stream);
diff --git a/src/swfmoz_player.c b/src/swfmoz_player.c
index 1440833..a000fbe 100644
--- a/src/swfmoz_player.c
+++ b/src/swfmoz_player.c
@@ -97,21 +97,21 @@ swfmoz_player_popup_menu (SwfmozPlayer *player)
     
     item = gtk_check_menu_item_new_with_mnemonic ("Playing");
     g_signal_connect (item, "toggled", 
-	G_CALLBACK (swfmoz_player_menu_playing_toggled), player->player);
-    g_signal_connect (player->player, "notify::playing",
+	G_CALLBACK (swfmoz_player_menu_playing_toggled), player);
+    g_signal_connect (player, "notify::playing",
 	G_CALLBACK (swfmoz_player_menu_notify_playing), item);
     gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item), 
-	swfdec_gtk_player_get_playing (SWFDEC_GTK_PLAYER (player->player)));
+	swfdec_gtk_player_get_playing (SWFDEC_GTK_PLAYER (player)));
     gtk_widget_show (item);
     gtk_menu_shell_append (GTK_MENU_SHELL (player->menu), item);
 
     item = gtk_check_menu_item_new_with_mnemonic ("Enable Audio");
     g_signal_connect (item, "toggled", 
-	G_CALLBACK (swfmoz_player_menu_audio_toggled), player->player);
-    g_signal_connect (player->player, "notify::audio-enabled",
+	G_CALLBACK (swfmoz_player_menu_audio_toggled), player);
+    g_signal_connect (player, "notify::audio-enabled",
 	G_CALLBACK (swfmoz_player_menu_notify_audio), item);
     gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item), 
-	swfdec_gtk_player_get_audio_enabled (SWFDEC_GTK_PLAYER (player->player)));
+	swfdec_gtk_player_get_audio_enabled (SWFDEC_GTK_PLAYER (player)));
     gtk_widget_show (item);
     gtk_menu_shell_append (GTK_MENU_SHELL (player->menu), item);
 
@@ -140,7 +140,7 @@ swfmoz_player_popup_menu (SwfmozPlayer *player)
 
 /*** SWFMOZ_PLAYER ***/
 
-G_DEFINE_TYPE (SwfmozPlayer, swfmoz_player, G_TYPE_OBJECT)
+G_DEFINE_TYPE (SwfmozPlayer, swfmoz_player, SWFDEC_TYPE_GTK_PLAYER)
 
 static gboolean
 swfmoz_player_idle_redraw (gpointer playerp)
@@ -162,8 +162,8 @@ swfmoz_player_idle_redraw (gpointer playerp)
 }
 
 static void
-swfmoz_player_redraw (SwfdecPlayer *swfplayer, const SwfdecRectangle *extents, 
-    const SwfdecRectangle *rects, guint n_rects, SwfmozPlayer *player)
+swfmoz_player_redraw (SwfmozPlayer *player, const SwfdecRectangle *extents, 
+    const SwfdecRectangle *rects, guint n_rects, gpointer unused)
 {
   GdkRegion *region;
   guint i;
@@ -209,8 +209,8 @@ swfmoz_player_redraw (SwfdecPlayer *swfplayer, const SwfdecRectangle *extents,
 }
 
 static void
-swfmoz_player_launch (SwfdecPlayer *swfplayer, SwfdecLoaderRequest request, 
-    const char *url, const char *target, SwfdecBuffer *data, SwfmozPlayer *player)
+swfmoz_player_launch (SwfmozPlayer *player, SwfdecLoaderRequest request, 
+    const char *url, const char *target, SwfdecBuffer *data, gpointer unused)
 {
   if (request == SWFDEC_LOADER_REQUEST_POST) {
     if (data) {
@@ -228,7 +228,7 @@ static void
 swfmoz_player_invalidate (SwfmozPlayer *player)
 {
   SwfdecRectangle rect = { 0, 0, player->target_rect.width, player->target_rect.height };
-  swfmoz_player_redraw (player->player, &rect, &rect, 1, player);
+  swfmoz_player_redraw (player, &rect, &rect, 1, NULL);
 }
 
 /* function stolen from SwfdecGtkWidget */
@@ -243,7 +243,7 @@ swfmoz_player_update_cursor (SwfmozPlayer *player)
   if (window == NULL)
     return;
   display = gdk_drawable_get_display (window);
-  g_object_get (player->player, "mouse-cursor", &swfcursor, NULL);
+  g_object_get (player, "mouse-cursor", &swfcursor, NULL);
 
   switch (swfcursor) {
     case SWFDEC_MOUSE_CURSOR_NONE:
@@ -284,7 +284,7 @@ swfmoz_player_update_cursor (SwfmozPlayer *player)
 }
 
 static void
-swfmoz_player_notify (SwfdecGtkPlayer *gtkplayer, GParamSpec *pspec, SwfmozPlayer *player)
+swfmoz_player_notify (SwfmozPlayer *player, GParamSpec *pspec, gpointer unused)
 {
   if (g_str_equal (pspec->name, "playing")) {
     swfmoz_player_invalidate (player);
@@ -325,18 +325,17 @@ swfmoz_player_dispose (GObject *object)
   SwfmozPlayer *player = SWFMOZ_PLAYER (object);
 
   if (player->menu) {
-    g_signal_handlers_disconnect_matched (player->player, G_SIGNAL_MATCH_FUNC, 0, 0, NULL, 
+    g_signal_handlers_disconnect_matched (player, G_SIGNAL_MATCH_FUNC, 0, 0, NULL, 
 	swfmoz_player_menu_notify_playing, NULL);
-    g_signal_handlers_disconnect_matched (player->player, G_SIGNAL_MATCH_FUNC, 0, 0, NULL, 
+    g_signal_handlers_disconnect_matched (player, G_SIGNAL_MATCH_FUNC, 0, 0, NULL, 
 	swfmoz_player_menu_notify_audio, NULL);
     gtk_widget_destroy (GTK_WIDGET (player->menu));
     player->menu = NULL;
   }
   /* the player might be refed elsewhere */
-  g_signal_handlers_disconnect_by_func (player->player, swfmoz_player_redraw, player);
-  g_signal_handlers_disconnect_by_func (player->player, swfmoz_player_launch, player);
-  g_signal_handlers_disconnect_by_func (player->player, swfmoz_player_notify, player);
-  g_object_unref (player->player);
+  g_signal_handlers_disconnect_by_func (player, swfmoz_player_redraw, NULL);
+  g_signal_handlers_disconnect_by_func (player, swfmoz_player_launch, NULL);
+  g_signal_handlers_disconnect_by_func (player, swfmoz_player_notify, NULL);
   if (player->target) {
     g_object_unref (player->target);
     player->target = NULL;
@@ -356,7 +355,6 @@ swfmoz_player_dispose (GObject *object)
     g_object_unref (player->loaders);
     player->loaders = NULL;
   }
-  g_free (player->variables);
 
   G_OBJECT_CLASS (swfmoz_player_parent_class)->dispose (object);
 }
@@ -374,35 +372,37 @@ swfmoz_player_class_init (SwfmozPlayerClass *klass)
 static void
 swfmoz_player_init (SwfmozPlayer *player)
 {
-  player->player = swfdec_gtk_player_new (NULL);
-  g_signal_connect (player->player, "invalidate", G_CALLBACK (swfmoz_player_redraw), player);
-  g_signal_connect (player->player, "launch", G_CALLBACK (swfmoz_player_launch), player);
-  g_signal_connect (player->player, "notify", G_CALLBACK (swfmoz_player_notify), player);
+  g_signal_connect (player, "invalidate", G_CALLBACK (swfmoz_player_redraw), NULL);
+  g_signal_connect (player, "launch", G_CALLBACK (swfmoz_player_launch), NULL);
+  g_signal_connect (player, "notify", G_CALLBACK (swfmoz_player_notify), NULL);
   player->context = g_main_context_default ();
 
   player->loaders = GTK_TREE_MODEL (gtk_list_store_new (SWFMOZ_LOADER_N_COLUMNS,
       SWFMOZ_TYPE_LOADER, G_TYPE_STRING, G_TYPE_STRING, 
-      G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_UINT));
+      G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_UINT));
 }
 
-SwfmozPlayer *
+SwfdecPlayer *
 swfmoz_player_new (NPP instance, gboolean windowless)
 {
   SwfmozPlayer *ret;
 
-  ret = g_object_new (SWFMOZ_TYPE_PLAYER, NULL);
+  ret = g_object_new (SWFMOZ_TYPE_PLAYER,
+      "loader-type", SWFMOZ_TYPE_LOADER, "socket-type", SWFDEC_TYPE_SOCKET, //SWFDEC_TYPE_GTK_SOCKET,
+      NULL);
   ret->instance = instance;
   ret->windowless = windowless;
 
-  return SWFMOZ_PLAYER (ret);
+  return SWFDEC_PLAYER (ret);
 }
 
 static void
 swfmoz_player_loaders_update (GtkListStore *store, GtkTreeIter *iter, SwfdecLoader *loader)
 {
-  char *filename = swfdec_loader_get_filename (loader);
   glong percent;
   gboolean eof, error;
+  const SwfdecURL *url;
+  const char *url_string;
 
   percent = swfdec_loader_get_size (loader);
   if (percent == 0) {
@@ -415,17 +415,24 @@ swfmoz_player_loaders_update (GtkListStore *store, GtkTreeIter *iter, SwfdecLoad
   }
   /* FIXME: swfdec needs a function for this */
   g_object_get (G_OBJECT (loader), "eof", &eof, "error", &error, NULL);
+  url = swfdec_loader_get_url (loader);
+  if (url) {
+    url_string = swfdec_url_get_url (url);
+  } else if (SWFMOZ_LOADER (loader)->stream) {
+    url_string = SWFMOZ_LOADER (loader)->stream->url;
+  } else {
+    /* we don't store URLs of requests */
+    url_string = "";
+  }
 
   gtk_list_store_set (store, iter,
     SWFMOZ_LOADER_COLUMN_LOADER, loader,
-    SWFMOZ_LOADER_COLUMN_NAME, filename,
-    SWFMOZ_LOADER_COLUMN_URL, swfdec_url_get_url (swfdec_loader_get_url (loader)),
+    SWFMOZ_LOADER_COLUMN_URL, url_string,
     SWFMOZ_LOADER_COLUMN_EOF, eof,
     SWFMOZ_LOADER_COLUMN_ERROR, error,
     SWFMOZ_LOADER_COLUMN_TYPE, swfmoz_loader_get_data_type_string (loader),
     SWFMOZ_LOADER_COLUMN_PERCENT_LOADED, (guint) percent,
     -1);
-  g_free (filename);
 }
 
 static gboolean
@@ -456,31 +463,42 @@ swfmoz_player_loader_notify_cb (SwfdecLoader *loader, GParamSpec *pspec, GtkList
   swfmoz_player_loaders_update (store, &iter, loader);
 }
 
-SwfdecLoader *
-swfmoz_player_add_stream (SwfmozPlayer *player, NPStream *stream)
+gboolean
+swfmoz_player_set_initial_stream (SwfmozPlayer *player, NPStream *stream)
+{
+  SwfdecURL *url;
+
+  g_return_val_if_fail (SWFMOZ_IS_PLAYER (player), FALSE);
+  g_return_val_if_fail (stream != NULL, FALSE);
+
+  if (player->initial || swfdec_player_get_url (SWFDEC_PLAYER (player)))
+    return FALSE;
+  player->initial = stream;
+  url = swfdec_url_new (stream->url);
+  if (url == NULL) {
+    g_printerr ("%s is either a broken URL or Swfdec can't parse it.",
+	stream->url);
+    return FALSE;
+  }
+  swfdec_player_set_url (SWFDEC_PLAYER (player), url);
+  swfdec_url_free (url);
+  return TRUE;
+}
+
+void
+swfmoz_player_add_loader (SwfmozPlayer *player, SwfmozLoader *loader)
 {
   GtkTreeIter iter;
-  SwfdecLoader *loader;
   
-  g_return_val_if_fail (SWFMOZ_IS_PLAYER (player), NULL);
+  g_return_if_fail (SWFMOZ_IS_PLAYER (player));
+  g_return_if_fail (SWFMOZ_IS_LOADER (loader));
 
-  if (stream->notifyData) {
-    loader = SWFDEC_LOADER (stream->notifyData);
-    swfmoz_loader_set_stream (SWFMOZ_LOADER (loader), player->instance, stream);
-  } else {
-    if (player->initial)
-      return NULL;
-    loader = swfmoz_loader_new (player->instance, stream);
-    swfdec_player_set_loader_with_variables (player->player, loader, player->variables);
-    player->initial = loader;
-    g_object_ref (loader);
-  }
   /* add loader to the list of loaders */
   g_signal_connect (loader, "notify", G_CALLBACK (swfmoz_player_loader_notify_cb),
       GTK_LIST_STORE (player->loaders));
   gtk_list_store_append (GTK_LIST_STORE (player->loaders), &iter);
-  swfmoz_player_loaders_update (GTK_LIST_STORE (player->loaders), &iter, loader);
-  return loader;
+  swfmoz_player_loaders_update (GTK_LIST_STORE (player->loaders), &iter, 
+      SWFDEC_LOADER (loader));
 }
 
 void
@@ -498,7 +516,7 @@ swfmoz_player_set_target (SwfmozPlayer *player, GdkWindow *target,
   player->target_rect.y = y;
   player->target_rect.width = width;
   player->target_rect.height = height;
-  swfdec_player_set_size (player->player, width - x, height - y);
+  swfdec_player_set_size (SWFDEC_PLAYER (player), width - x, height - y);
   if (target) {
     g_object_ref (target);
     swfmoz_player_update_cursor (player);
@@ -607,10 +625,10 @@ swfmoz_player_render (SwfmozPlayer *player, GdkRegion *region)
   cairo_clip (cr);
   cairo_translate (cr, player->target_rect.x, player->target_rect.y);
   gdk_region_get_clipbox (region, &rect);
-  swfdec_player_render (player->player, cr, rect.x - player->target_rect.x,
+  swfdec_player_render (SWFDEC_PLAYER (player), cr, rect.x - player->target_rect.x,
       rect.y - player->target_rect.y, rect.width, rect.height);
   /* paint optional pause sign */
-  if (!swfdec_gtk_player_get_playing (SWFDEC_GTK_PLAYER (player->player))) {
+  if (!swfdec_gtk_player_get_playing (SWFDEC_GTK_PLAYER (player))) {
     int w = player->target_rect.width;
     int h = player->target_rect.height;
     int len = MIN (w, h) * 4 / 5;
@@ -638,9 +656,9 @@ swfmoz_player_mouse_press (SwfmozPlayer *player, int x, int y, guint button)
   if (player->menu && GTK_WIDGET_VISIBLE (player->menu))
     gtk_menu_popdown (GTK_MENU (player->menu));
 
-  if (swfdec_gtk_player_get_playing (SWFDEC_GTK_PLAYER (player->player))) {
+  if (swfdec_gtk_player_get_playing (SWFDEC_GTK_PLAYER (player))) {
     plugin_push_allow_popups (player->instance, TRUE);
-    ret = swfdec_player_mouse_press (player->player, x, y, button);
+    ret = swfdec_player_mouse_press (SWFDEC_PLAYER (player), x, y, button);
     plugin_pop_allow_popups (player->instance);
   }
   return ret;
@@ -656,13 +674,13 @@ swfmoz_player_mouse_release (SwfmozPlayer *player, int x, int y, guint button)
   if (button > 32)
     return FALSE;
 
-  if (swfdec_gtk_player_get_playing (SWFDEC_GTK_PLAYER (player->player))) {
+  if (swfdec_gtk_player_get_playing (SWFDEC_GTK_PLAYER (player))) {
     plugin_push_allow_popups (player->instance, TRUE);
-    ret = swfdec_player_mouse_release (player->player, x, y, button);
+    ret = swfdec_player_mouse_release (SWFDEC_PLAYER (player), x, y, button);
     plugin_pop_allow_popups (player->instance);
   } else {
     if (button == 1) {
-      swfdec_gtk_player_set_playing (SWFDEC_GTK_PLAYER (player->player), TRUE);
+      swfdec_gtk_player_set_playing (SWFDEC_GTK_PLAYER (player), TRUE);
       ret = TRUE;
     } else {
       ret = FALSE;
@@ -681,8 +699,8 @@ swfmoz_player_mouse_move (SwfmozPlayer *player, int x, int y)
 {
   g_return_val_if_fail (SWFMOZ_IS_PLAYER (player), FALSE);
 
-  if (swfdec_gtk_player_get_playing (SWFDEC_GTK_PLAYER (player->player))) {
-    swfdec_player_mouse_move (player->player, x, y);
+  if (swfdec_gtk_player_get_playing (SWFDEC_GTK_PLAYER (player))) {
+    swfdec_player_mouse_move (SWFDEC_PLAYER (player), x, y);
   }
   return FALSE;
 }
@@ -690,28 +708,15 @@ swfmoz_player_mouse_move (SwfmozPlayer *player, int x, int y)
 char *
 swfmoz_player_get_filename (SwfmozPlayer *player)
 {
+  const SwfdecURL *url;
+
   g_return_val_if_fail (SWFMOZ_IS_PLAYER (player), NULL);
 
-  if (player->initial == NULL)
+  url = swfdec_player_get_url (SWFDEC_PLAYER (player));
+  if (url == NULL)
     return g_strdup ("unknown.swf");
 
-  return swfdec_loader_get_filename (player->initial);
-}
-
-void
-swfmoz_player_add_variables (SwfmozPlayer *player, const char *variables)
-{
-  g_return_if_fail (SWFMOZ_IS_PLAYER (player));
-  g_return_if_fail (player->initial == NULL);
-  g_return_if_fail (variables != NULL);
-
-  if (player->variables) {
-    char *tmp = g_strconcat (player->variables, "&", variables, NULL);
-    g_free (player->variables);
-    player->variables = tmp;
-  } else {
-    player->variables = g_strdup (variables);
-  }
+  return swfdec_url_format_for_display (url);
 }
 
 void
@@ -722,8 +727,8 @@ swfmoz_player_remove (SwfmozPlayer *player)
    */
   g_return_if_fail (SWFMOZ_IS_PLAYER (player));
 
-  swfdec_gtk_player_set_playing (SWFDEC_GTK_PLAYER (player->player), FALSE);
-  swfdec_gtk_player_set_audio_enabled (SWFDEC_GTK_PLAYER (player->player), FALSE);
+  swfdec_gtk_player_set_playing (SWFDEC_GTK_PLAYER (player), FALSE);
+  swfdec_gtk_player_set_audio_enabled (SWFDEC_GTK_PLAYER (player), FALSE);
   swfmoz_dialog_remove (player);
   g_object_unref (player);
 }
diff --git a/src/swfmoz_player.h b/src/swfmoz_player.h
index 2da826e..e2d1374 100644
--- a/src/swfmoz_player.h
+++ b/src/swfmoz_player.h
@@ -20,14 +20,14 @@
 #ifndef _SWFMOZ_PLAYER_H_
 #define _SWFMOZ_PLAYER_H_
 
-#include <libswfdec-gtk/swfdec-gtk.h>
+#include <swfdec-gtk/swfdec-gtk.h>
 #include <npapi.h>
+#include "swfmoz_loader.h"
 
 G_BEGIN_DECLS
 
 enum {
   SWFMOZ_LOADER_COLUMN_LOADER,
-  SWFMOZ_LOADER_COLUMN_NAME,
   SWFMOZ_LOADER_COLUMN_URL,
   SWFMOZ_LOADER_COLUMN_TYPE,
   SWFMOZ_LOADER_COLUMN_EOF,
@@ -47,15 +47,13 @@ typedef struct _SwfmozPlayerClass SwfmozPlayerClass;
 #define SWFMOZ_PLAYER_GET_CLASS(obj)          (G_TYPE_INSTANCE_GET_CLASS ((obj), SWFMOZ_TYPE_PLAYER, SwfmozPlayerClass))
 
 struct _SwfmozPlayer {
-  GObject		object;
+  SwfdecGtkPlayer	player;
 
   NPP			instance;		/* the mozilla plugin */
 
   GMainContext *	context;		/* the main context run by the thread */
 
-  SwfdecPlayer *	player;			/* the player instance */
-  SwfdecLoader *	initial;		/* loader that spawned this player or NULL if none yet */
-  char *		variables;		/* variables to pass to initial loader */
+  NPStream *		initial;		/* loader that spawned this player or NULL if none yet */
   gboolean		windowless;		/* TRUE if player communicates with the windowing system via the browser */
   GdkWindow *		target;			/* what we draw to */
   GdkRectangle		target_rect;		/* area in target that this plugin occupies */
@@ -70,17 +68,19 @@ struct _SwfmozPlayer {
 };
 
 struct _SwfmozPlayerClass {
-  GObjectClass		object_class;
+  SwfdecGtkPlayerClass	player_class;
 };
 
 GType		swfmoz_player_get_type   	(void);
 
-SwfmozPlayer *	swfmoz_player_new	  	(NPP			instance,
+SwfdecPlayer *	swfmoz_player_new	  	(NPP			instance,
 						 gboolean		windowless);
 void		swfmoz_player_remove		(SwfmozPlayer *		player);
 
-SwfdecLoader *	swfmoz_player_add_stream	(SwfmozPlayer *		player,
+gboolean	swfmoz_player_set_initial_stream (SwfmozPlayer *	player,
 						 NPStream *		stream);
+void		swfmoz_player_add_loader	(SwfmozPlayer *		player,
+						 SwfmozLoader *		loader);
 void		swfmoz_player_set_target	(SwfmozPlayer *		player,
 						 GdkWindow *		target,
 						 int			x,


More information about the Swfdec-commits mailing list