[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