CVSROOT: /sources/gnash Module name: gnash Changes by: Sandro Santilli <strk> 07/11/16 21:28:55
Modified files: . : ChangeLog server : as_environment.cpp as_object.h character.h server/vm : ASHandlers.cpp Log message: add virtual as_object::to_character() casting method. (as_environment::find_target) allow characters targets. Fixes snowman.swf (http://bugs.libming.org/show_bug.cgi?id=41) (ActionStartDragMovie): unknown target would be an ASerror, not a generic one. CVSWeb URLs: http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.4882&r2=1.4883 http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_environment.cpp?cvsroot=gnash&r1=1.108&r2=1.109 http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_object.h?cvsroot=gnash&r1=1.83&r2=1.84 http://cvs.savannah.gnu.org/viewcvs/gnash/server/character.h?cvsroot=gnash&r1=1.109&r2=1.110 http://cvs.savannah.gnu.org/viewcvs/gnash/server/vm/ASHandlers.cpp?cvsroot=gnash&r1=1.152&r2=1.153 Patches: Index: ChangeLog =================================================================== RCS file: /sources/gnash/gnash/ChangeLog,v retrieving revision 1.4882 retrieving revision 1.4883 diff -u -b -r1.4882 -r1.4883 --- ChangeLog 16 Nov 2007 19:43:43 -0000 1.4882 +++ ChangeLog 16 Nov 2007 21:28:53 -0000 1.4883 @@ -1,5 +1,14 @@ 2007-11-16 Sandro Santilli <[EMAIL PROTECTED]> + * server/: as_object.h, character.h: add virtual to_character() + casting method. + * server/as_environment.cpp (find_target): allow characters targets. + Fixes snowman.swf (http://bugs.libming.org/show_bug.cgi?id=41) + * server/vm/ASHandlers.cpp (ActionStartDragMovie): unknown target + would be an ASerror, not a generic one. + +2007-11-16 Sandro Santilli <[EMAIL PROTECTED]> + * server/array.h (visitAll): copy the container before executing arbitrary code while iterating over it. Fixes a memory corruption. * server/asobj/Key.{cpp,h}: Initialize the Key object as an usual Index: server/as_environment.cpp =================================================================== RCS file: /sources/gnash/gnash/server/as_environment.cpp,v retrieving revision 1.108 retrieving revision 1.109 diff -u -b -r1.108 -r1.109 --- server/as_environment.cpp 14 Nov 2007 22:16:05 -0000 1.108 +++ server/as_environment.cpp 16 Nov 2007 21:28:54 -0000 1.109 @@ -17,7 +17,7 @@ // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // -/* $Id: as_environment.cpp,v 1.108 2007/11/14 22:16:05 strk Exp $ */ +/* $Id: as_environment.cpp,v 1.109 2007/11/16 21:28:54 strk Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -494,7 +494,7 @@ as_environment::find_target(const std::string& path_in) const { as_object* o = find_object(path_in); - if ( o ) return o->to_movie(); // can be NULL (not a movie)... + if ( o ) return o->to_character(); // can be NULL (not a character)... else return NULL; } Index: server/as_object.h =================================================================== RCS file: /sources/gnash/gnash/server/as_object.h,v retrieving revision 1.83 retrieving revision 1.84 diff -u -b -r1.83 -r1.84 --- server/as_object.h 16 Nov 2007 07:43:52 -0000 1.83 +++ server/as_object.h 16 Nov 2007 21:28:54 -0000 1.84 @@ -48,6 +48,7 @@ namespace gnash { class as_function; class sprite_instance; + class character; class as_environment; class VM; class Machine; @@ -624,6 +625,9 @@ /// Cast to a as_function, or return NULL virtual as_function* to_function() { return NULL; } + /// Cast to a character, or return NULL + virtual character* to_character() { return NULL; } + /// Return true if this is a Date object. // /// This is needed for special handling of Date objects Index: server/character.h =================================================================== RCS file: /sources/gnash/gnash/server/character.h,v retrieving revision 1.109 retrieving revision 1.110 diff -u -b -r1.109 -r1.110 --- server/character.h 16 Nov 2007 07:43:53 -0000 1.109 +++ server/character.h 16 Nov 2007 21:28:54 -0000 1.110 @@ -19,7 +19,7 @@ // // -/* $Id: character.h,v 1.109 2007/11/16 07:43:53 zoulunkai Exp $ */ +/* $Id: character.h,v 1.110 2007/11/16 21:28:54 strk Exp $ */ #ifndef GNASH_CHARACTER_H #define GNASH_CHARACTER_H @@ -547,6 +547,8 @@ return (m_clip_depth==dynClipDepthValue); } + character* to_character() { return this; } + /// Return the character masked by this instance (if any) character* getMask() const { Index: server/vm/ASHandlers.cpp =================================================================== RCS file: /sources/gnash/gnash/server/vm/ASHandlers.cpp,v retrieving revision 1.152 retrieving revision 1.153 diff -u -b -r1.152 -r1.153 --- server/vm/ASHandlers.cpp 15 Nov 2007 20:46:40 -0000 1.152 +++ server/vm/ASHandlers.cpp 16 Nov 2007 21:28:54 -0000 1.153 @@ -17,7 +17,7 @@ // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // -/* $Id: ASHandlers.cpp,v 1.152 2007/11/15 20:46:40 strk Exp $ */ +/* $Id: ASHandlers.cpp,v 1.153 2007/11/16 21:28:54 strk Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -1262,11 +1262,16 @@ drag_state st; character* tgt = env.find_target(env.top(0).to_string(&env)); - if ( tgt ) { + if ( tgt ) + { st.setCharacter( tgt ); - } else { - log_error(_("start_drag of invalid target '%s'"), + } + else + { + IF_VERBOSE_ASCODING_ERRORS( + log_aserror(_("startDrag: unknown target '%s'"), env.top(0).to_debug_string().c_str()); + ); } st.setLockCentered( env.top(1).to_bool() ); _______________________________________________ Gnash-commit mailing list Gnash-commit@gnu.org http://lists.gnu.org/mailman/listinfo/gnash-commit