Benjamin Otte
2007-Aug-22 12:19 UTC
[Swfdec] 3 commits - libswfdec/swfdec_sprite_movie.c player/swfplay.c
libswfdec/swfdec_sprite_movie.c | 33 +++++++++++++++++++++++++++++++-- player/swfplay.c | 6 +++++- 2 files changed, 36 insertions(+), 3 deletions(-) New commits: diff-tree 361082fdf6ede11a08266193ca00247490121f6e (from parents) Merge: 906a2ce832b317cdb0d5cd6fefe01fe17a676cd0 adebed995585fa9f993062a75df17ff464113e93 Author: Benjamin Otte <otte at gnome.org> Date: Wed Aug 22 14:19:14 2007 +0200 Merge branch 'master' of ssh://company at git.freedesktop.org/git/swfdec/swfdec diff-tree 906a2ce832b317cdb0d5cd6fefe01fe17a676cd0 (from b822fe6102c568328608dcce05a412c848005f88) Author: Benjamin Otte <otte at gnome.org> Date: Wed Aug 22 14:18:52 2007 +0200 only quit the main loop once diff --git a/player/swfplay.c b/player/swfplay.c index 996deb2..7521acf 100644 --- a/player/swfplay.c +++ b/player/swfplay.c @@ -62,7 +62,11 @@ static void do_fscommand (SwfdecPlayer *player, const char *command, const char *value, gpointer window) { if (g_str_equal (command, "quit")) { - gtk_main_quit (); + static gboolean already_quit = FALSE; + if (!already_quit) { + gtk_main_quit (); + already_quit = TRUE; + } } /* FIXME: add more */ } diff-tree b822fe6102c568328608dcce05a412c848005f88 (from c5efffeed0afc0e64f4d01a4323c9137189bf41f) Author: Benjamin Otte <otte at gnome.org> Date: Wed Aug 22 14:16:17 2007 +0200 only delete movies with a depth between -16384 and 0 when restarting This fixes lots of issues with movies that were suddenly gone for no reason. In particular, it makes bloxorz.swf playable. diff --git a/libswfdec/swfdec_sprite_movie.c b/libswfdec/swfdec_sprite_movie.c index 9af9370..21a98c6 100644 --- a/libswfdec/swfdec_sprite_movie.c +++ b/libswfdec/swfdec_sprite_movie.c @@ -348,6 +348,22 @@ swfdec_movie_is_compatible (SwfdecMovie return TRUE; } +static GList * +my_g_list_split (GList *list, GList *split) +{ + GList *prev; + + if (split == NULL) + return list; + + prev = split->prev; + if (prev == NULL) + return NULL; + prev->next = NULL; + split->prev = NULL; + return list; +} + void swfdec_sprite_movie_goto (SwfdecSpriteMovie *movie, guint goto_frame) { @@ -377,9 +393,22 @@ swfdec_sprite_movie_goto (SwfdecSpriteMo SWFDEC_DEBUG ("performing goto %u -> %u for character %u", movie->frame, goto_frame, SWFDEC_CHARACTER (movie->sprite)->id); if (goto_frame < movie->frame) { + GList *walk; movie->frame = 0; - old = mov->list; - mov->list = NULL; + for (walk = mov->list; walk && + swfdec_depth_classify (SWFDEC_MOVIE (walk->data)->depth) != SWFDEC_DEPTH_CLASS_TIMELINE; + walk = walk->next) { + /* do nothing */ + } + old = walk; + mov->list = my_g_list_split (mov->list, old); + for (walk = old; walk && + swfdec_depth_classify (SWFDEC_MOVIE (walk->data)->depth) == SWFDEC_DEPTH_CLASS_TIMELINE; + walk = walk->next) { + /* do nothing */ + } + old = my_g_list_split (old, walk); + mov->list = g_list_concat (mov->list, walk); n = goto_frame; movie->next_action = 0; } else {
Maybe Matching Threads
- 2 commits - player/swfplay.c
- 7 commits - configure.ac libswfdec/swfdec_movie.c libswfdec/swfdec_movie.h libswfdec/swfdec_sprite_movie.c test/trace
- Branch 'as' - 8 commits - libswfdec/swfdec_movie.c libswfdec/swfdec_sprite.c libswfdec/swfdec_sprite.h libswfdec/swfdec_sprite_movie.c libswfdec/swfdec_sprite_movie.h libswfdec/swfdec_swf_decoder.c libswfdec/swfdec_swf_decoder.h
- 2 commits - doc/swfdec-sections.txt libswfdec/swfdec_color.h libswfdec/swfdec_player.c libswfdec/swfdec_player.h libswfdec/swfdec_player_internal.h libswfdec/swfdec_sprite.c libswfdec/swfdec_sprite.h libswfdec/swfdec_sprite_movie.c
- Branch 'as' - 6 commits - libswfdec/swfdec_as_interpret.c libswfdec/swfdec_movie_asprops.c libswfdec/swfdec_movie.c libswfdec/swfdec_movie.h libswfdec/swfdec_sprite.c libswfdec/swfdec_sprite.h libswfdec/swfdec_sprite_movie_as.c