gnash-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Gnash-commit] gnash ChangeLog server/as_object.cpp server/as_...


From: Sandro Santilli
Subject: [Gnash-commit] gnash ChangeLog server/as_object.cpp server/as_...
Date: Mon, 24 Dec 2007 14:00:31 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Sandro Santilli <strk>  07/12/24 14:00:31

Modified files:
        .              : ChangeLog 
        server         : as_object.cpp as_object.h 
        server/asobj   : MovieClipLoader.cpp 
        testsuite/actionscript.all: MovieClipLoader.as 

Log message:
        dispatch MovieClipLoader events to all listeners, not just self. Fixes 
bug #21881.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.5251&r2=1.5252
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_object.cpp?cvsroot=gnash&r1=1.88&r2=1.89
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_object.h?cvsroot=gnash&r1=1.89&r2=1.90
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/MovieClipLoader.cpp?cvsroot=gnash&r1=1.40&r2=1.41
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/actionscript.all/MovieClipLoader.as?cvsroot=gnash&r1=1.8&r2=1.9

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.5251
retrieving revision 1.5252
diff -u -b -r1.5251 -r1.5252
--- ChangeLog   24 Dec 2007 10:08:31 -0000      1.5251
+++ ChangeLog   24 Dec 2007 14:00:30 -0000      1.5252
@@ -1,5 +1,13 @@
 2007-12-24 Sandro Santilli <address@hidden>
 
+       * server/as_object.{cpp,h}: callMethod with 4 args..
+       * server/asobj/MovieClipLoader.cpp: dispatch events to all listeners,
+         not just self. Fixes bug #21881.
+       * testsuite/actionscript.all/MovieClipLoader.as: test that a
+         MovieClipLoader instance is a listener of self.
+
+2007-12-24 Sandro Santilli <address@hidden>
+
        * server/sprite_instance.cpp (get_member): use get_root() to evaluate
          the _root member. This is to get relative url rather then absolute,
          more correct in swf6 and should be easier to handle _lockroot for

Index: server/as_object.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/as_object.cpp,v
retrieving revision 1.88
retrieving revision 1.89
diff -u -b -r1.88 -r1.89
--- server/as_object.cpp        20 Dec 2007 14:28:50 -0000      1.88
+++ server/as_object.cpp        24 Dec 2007 14:00:30 -0000      1.89
@@ -997,6 +997,41 @@
        return ret;
 }
 
+as_value
+as_object::callMethod(string_table::key methodName,
+       const as_value& arg0, const as_value& arg1,
+       const as_value& arg2, const as_value& arg3)
+{
+       as_value ret;
+       as_value method;
+
+       if (! get_member(methodName, &method))
+       {
+               return ret;
+       }
+
+       as_environment env;
+
+#ifndef NDEBUG
+       size_t origStackSize = env.stack_size();
+#endif
+
+       env.push(arg3);
+       env.push(arg2);
+       env.push(arg1);
+       env.push(arg0);
+
+       ret = call_method(method, &env, this, 4, env.stack_size()-1);
+
+       env.drop(4);
+
+#ifndef NDEBUG
+       assert(origStackSize == env.stack_size());
+#endif
+
+       return ret;
+}
+
 as_object*
 as_object::get_path_element(string_table::key key)
 {

Index: server/as_object.h
===================================================================
RCS file: /sources/gnash/gnash/server/as_object.h,v
retrieving revision 1.89
retrieving revision 1.90
diff -u -b -r1.89 -r1.90
--- server/as_object.h  21 Dec 2007 17:18:45 -0000      1.89
+++ server/as_object.h  24 Dec 2007 14:00:30 -0000      1.90
@@ -527,6 +527,7 @@
        as_value callMethod(string_table::key name, const as_value& arg0);
        as_value callMethod(string_table::key name, const as_value& arg0, const 
as_value& arg1);
        as_value callMethod(string_table::key name, const as_value& arg0, const 
as_value& arg1, const as_value& arg2);
+       as_value callMethod(string_table::key name, const as_value& arg0, const 
as_value& arg1, const as_value& arg2, const as_value& arg3);
 
        /// Delete a property of this object, unless protected from deletion.
        //

Index: server/asobj/MovieClipLoader.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/MovieClipLoader.cpp,v
retrieving revision 1.40
retrieving revision 1.41
diff -u -b -r1.40 -r1.41
--- server/asobj/MovieClipLoader.cpp    21 Dec 2007 02:27:52 -0000      1.40
+++ server/asobj/MovieClipLoader.cpp    24 Dec 2007 14:00:31 -0000      1.41
@@ -165,7 +165,9 @@
        _mcl.bytes_loaded = 0;
        _mcl.bytes_total = 0;  
 
-       set_member(NSV::PROP_uLISTENERS, new as_array_object());
+       as_array_object* ar = new as_array_object();
+       ar->push(this);
+       set_member(NSV::PROP_uLISTENERS, ar);
 }
 
 MovieClipLoader::~MovieClipLoader()
@@ -195,27 +197,35 @@
                         
        string_table& st = _vm.getStringTable();
 
+       as_value targetVal(&target);
+       log_debug("Target is %s", targetVal.to_debug_string().c_str());
+
        bool ret = target.loadMovie(url);
        if ( ! ret ) 
        {
                // TODO: find semantic of last argument
-               callMethod(st.find("onLoadError"), as_value(&target), 
as_value("Failed to load movie or jpeg"), as_value(0));
+               as_value met("onLoadError");
+               as_value arg1("Failed to load movie or jpeg");
+               as_value arg2(0);
+               callMethod(NSV::PROP_BROADCAST_MESSAGE, met, targetVal, arg1, 
arg2);
 
                return false;
        }
 
        // Dispatch onLoadStart
-       callMethod(st.find("onLoadStart"), as_value(&target));
+       callMethod(NSV::PROP_BROADCAST_MESSAGE, as_value("onLoadStart"), 
targetVal);
 
        // Dispatch onLoadProgress
        struct mcl *mcl_data = getProgress(&target);
        // the callback since we're done loading the file
        mcl_data->bytes_loaded = target.get_bytes_loaded();
        mcl_data->bytes_total = target.get_bytes_total();
-       callMethod(st.find("onLoadProgress"), as_value(&target), 
mcl_data->bytes_loaded, mcl_data->bytes_total);
+       callMethod(NSV::PROP_BROADCAST_MESSAGE, as_value("onLoadProgress"), 
targetVal,
+               mcl_data->bytes_loaded, mcl_data->bytes_total);
 
        // Dispatch onLoadComplete
-       callMethod(st.find("onLoadComplete"), as_value(&target), as_value(0)); 
// TODO: find semantic of last arg
+       callMethod(NSV::PROP_BROADCAST_MESSAGE, as_value("onLoadComplete"), 
targetVal,
+               as_value(0)); // TODO: find semantic of last arg
 
        /// This event must be dispatched when actions
        /// in first frame of loaded clip have been executed.
@@ -227,7 +237,7 @@
        /// TODO: check if we need to place it before calling
        ///       this function though...
        ///
-       callMethod(st.find("onLoadInit"), as_value(&target));
+       callMethod(NSV::PROP_BROADCAST_MESSAGE, as_value("onLoadInit"), 
targetVal);
 
        return true;
 }

Index: testsuite/actionscript.all/MovieClipLoader.as
===================================================================
RCS file: /sources/gnash/gnash/testsuite/actionscript.all/MovieClipLoader.as,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -b -r1.8 -r1.9
--- testsuite/actionscript.all/MovieClipLoader.as       23 Dec 2007 22:24:51 
-0000      1.8
+++ testsuite/actionscript.all/MovieClipLoader.as       24 Dec 2007 14:00:31 
-0000      1.9
@@ -21,7 +21,7 @@
 // compile this test case with Ming makeswf, and then
 // execute it like this gnash -1 -r 0 -v out.swf
 
-rcsid="$Id: MovieClipLoader.as,v 1.8 2007/12/23 22:24:51 strk Exp $";
+rcsid="$Id: MovieClipLoader.as,v 1.9 2007/12/24 14:00:31 strk Exp $";
 
 #include "check.as"
 
@@ -64,6 +64,8 @@
 
 check_equals(typeOf(mcl._listeners), 'object');
 check(mcl.hasOwnProperty('_listeners'));
+check_equals(mcl._listeners.length, 1);
+check_equals(mcl._listeners[0], mcl);
 
 MovieClipLoader.prototype.bm = MovieClipLoader.prototype.broadcastMessage;
 MovieClipLoader.prototype.broadcastMessage = function(arg1, arg2, arg3, arg4)
@@ -271,7 +273,7 @@
        // subtract the number of progress callback runs reported when playing 
from the totals to get the correct number
        // BUT MAKE SURE nextTestOrEnd CONTAINS THE CORRECT 
testsPerProgressCallback INFO !!
        //
-       expected.totals = 57;
+       expected.totals = 59;
        // gnash doesn't call onLoadInit if the data at the url is not an SWF 
or JPG
        // (or whatever else can become a movie_instance), while the PP does.
        // So in this testcase, the attempt to load vars.txt is invalid for 
Gnash




reply via email to

[Prev in Thread] Current Thread [Next in Thread]