[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gnash-commit] gnash ChangeLog server/ActionExec.cpp server/Mo...
From: |
Sandro Santilli |
Subject: |
[Gnash-commit] gnash ChangeLog server/ActionExec.cpp server/Mo... |
Date: |
Fri, 07 Jul 2006 01:01:12 +0000 |
CVSROOT: /sources/gnash
Module name: gnash
Changes by: Sandro Santilli <strk> 06/07/07 01:01:12
Modified files:
. : ChangeLog
server : ActionExec.cpp MovieClipLoader.cpp
as_environment.cpp as_environment.h
character.cpp character.h sprite_instance.cpp
sprite_instance.h
server/swf : ASHandlers.cpp
Log message:
Changed as_environment's target to be a character rather
then a sprite_instance (it seems buttons are valid targets);
Handled invalid values for sprite_instance members
_xscale and _yscale.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.474&r2=1.475
http://cvs.savannah.gnu.org/viewcvs/gnash/server/ActionExec.cpp?cvsroot=gnash&r1=1.12&r2=1.13
http://cvs.savannah.gnu.org/viewcvs/gnash/server/MovieClipLoader.cpp?cvsroot=gnash&r1=1.27&r2=1.28
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_environment.cpp?cvsroot=gnash&r1=1.10&r2=1.11
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_environment.h?cvsroot=gnash&r1=1.12&r2=1.13
http://cvs.savannah.gnu.org/viewcvs/gnash/server/character.cpp?cvsroot=gnash&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/gnash/server/character.h?cvsroot=gnash&r1=1.7&r2=1.8
http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_instance.cpp?cvsroot=gnash&r1=1.18&r2=1.19
http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_instance.h?cvsroot=gnash&r1=1.10&r2=1.11
http://cvs.savannah.gnu.org/viewcvs/gnash/server/swf/ASHandlers.cpp?cvsroot=gnash&r1=1.31&r2=1.32
Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.474
retrieving revision 1.475
diff -u -b -r1.474 -r1.475
--- ChangeLog 6 Jul 2006 21:56:47 -0000 1.474
+++ ChangeLog 7 Jul 2006 01:01:11 -0000 1.475
@@ -1,5 +1,13 @@
2006-07-07 Sandro Santilli <address@hidden>
+ * server/ActionExec.cpp, server/MovieClipLoader.cpp,
+ server/as_environment.cpp, server/as_environment.h,
+ server/character.cpp, server/character.h, server/sprite_instance.cpp,
+ server/sprite_instance.h, server/swf/ASHandlers.cpp:
+ Changed as_environment's target to be a character rather
+ then a sprite_instance (it seems buttons are valid targets);
+ Handled invalid values for sprite_instance members
+ _xscale and _yscale.
* server/action_buffer.cpp, server/swf/ASHandlers.cpp:
removed -pedantic compiler warnings, fixed a bug in
fix_stack_underrun pushing more undefined values then
Index: server/ActionExec.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/ActionExec.cpp,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -b -r1.12 -r1.13
--- server/ActionExec.cpp 5 Jul 2006 23:56:08 -0000 1.12
+++ server/ActionExec.cpp 7 Jul 2006 01:01:11 -0000 1.13
@@ -126,7 +126,7 @@
}
#endif
- sprite_instance* original_target = env.get_target();
+ character* original_target = env.get_target();
//UNUSED(original_target); // Avoid warnings.
#if DEBUG_STACK
Index: server/MovieClipLoader.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/MovieClipLoader.cpp,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -b -r1.27 -r1.28
--- server/MovieClipLoader.cpp 5 Jul 2006 17:10:39 -0000 1.27
+++ server/MovieClipLoader.cpp 7 Jul 2006 01:01:11 -0000 1.28
@@ -71,6 +71,7 @@
#include "URL.h"
#include "GnashException.h"
#include "sprite_instance.h"
+#include "character.h"
#include "fn_call.h"
#include <string>
@@ -232,7 +233,7 @@
}
tu_string tu_url = fn.arg(0).to_string();
- sprite_instance* target = fn.env->find_target(fn.arg(1));
+ character* target = fn.env->find_target(fn.arg(1));
if ( ! target )
{
log_error("Could not find target %s", fn.arg(1).to_string());
@@ -348,7 +349,7 @@
save_extern_movie(extern_movie);
- character* tar = (character*)target;
+ character* tar = target;
const char* name = tar->get_name().c_str();
uint16_t depth = tar->get_depth();
bool use_cxform = false;
@@ -358,12 +359,12 @@
float ratio = tar->get_ratio();
uint16_t clip_depth = tar->get_clip_depth();
- movie* new_movie = static_cast<movie*>(extern_movie)->get_root_movie();
+ character* new_movie = extern_movie->get_root_movie();
- ((character*)new_movie)->set_parent(parent);
+ new_movie->set_parent(parent);
parent->replace_display_object(
- (character*) new_movie,
+ new_movie,
name,
depth,
use_cxform,
Index: server/as_environment.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/as_environment.cpp,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -b -r1.10 -r1.11
--- server/as_environment.cpp 5 Jul 2006 23:56:08 -0000 1.10
+++ server/as_environment.cpp 7 Jul 2006 01:01:11 -0000 1.11
@@ -40,6 +40,7 @@
#include "as_environment.h"
#include "sprite_instance.h"
+#include "character.h"
#include "as_value.h"
#include "log.h"
#include "with_stack_entry.h"
@@ -51,10 +52,11 @@
// Return the value of the given var, if it's defined.
as_value
-as_environment::get_variable(const tu_string& varname, const
std::vector<with_stack_entry>& with_stack) const
+as_environment::get_variable(const tu_string& varname,
+ const std::vector<with_stack_entry>& with_stack) const
{
// Path lookup rigamarole.
- sprite_instance* target = m_target;
+ character* target = m_target;
tu_string path;
tu_string var;
if (parse_path(varname, &path, &var)) {
@@ -113,7 +115,7 @@
return val;
}
- // Check sprite_instance members.
+ // Check target members.
if (m_target->get_member(varname, &val)) {
return val;
}
@@ -155,7 +157,7 @@
varname.c_str(), val.to_string());
// Path lookup rigamarole.
- sprite_instance* target = m_target;
+ character* target = m_target;
tu_string path;
tu_string var;
if (parse_path(varname, &path, &var)) {
@@ -382,14 +384,14 @@
return true;
}
-sprite_instance*
+character*
as_environment::find_target(const as_value& val) const
{
if (val.get_type() == as_value::OBJECT)
{
as_object* obj = val.to_object();
assert (obj);
- sprite_instance* s=dynamic_cast<sprite_instance*>(obj);
+ character* s=dynamic_cast<character*>(obj);
return s; // might be NULL
}
else if (val.get_type() == as_value::STRING)
@@ -421,7 +423,7 @@
}
// Find the sprite/movie referenced by the given path.
-sprite_instance*
+character*
as_environment::find_target(const tu_string& path) const
{
if (path.length() <= 0) {
@@ -431,7 +433,7 @@
// we'd have returned m_target in this case
//assert(path.length() > 0);
- sprite_instance* env = m_target;
+ character* env = m_target;
assert(env);
const char* p = path.c_str();
@@ -440,7 +442,6 @@
if (*p == '/') {
// Absolute path. Start at the root.
env = env->get_root_movie();
- //env = env->get_relative_target("_level0");
p++;
}
@@ -474,7 +475,7 @@
int
as_environment::get_version() const
{
- sprite_instance* si=m_target;
+ sprite_instance* si=m_target->get_root_movie();
movie_definition* md=si->get_movie_definition();
return md->get_version();
}
Index: server/as_environment.h
===================================================================
RCS file: /sources/gnash/gnash/server/as_environment.h,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -b -r1.12 -r1.13
--- server/as_environment.h 5 Jul 2006 23:56:08 -0000 1.12
+++ server/as_environment.h 7 Jul 2006 01:01:11 -0000 1.13
@@ -58,7 +58,7 @@
namespace gnash {
// Forward declarations
-class sprite_instance;
+class character;
struct with_stack_entry;
/// ActionScript "environment", essentially VM state?
@@ -98,8 +98,8 @@
{
}
- sprite_instance* get_target() { return m_target; }
- void set_target(sprite_instance* target) { m_target = target; }
+ character* get_target() { return m_target; }
+ void set_target(character* target) { m_target = target; }
// stack access/manipulation
// @@ TODO do more checking on these
@@ -234,14 +234,14 @@
}
/// Find the sprite/movie referenced by the given path.
- sprite_instance* find_target(const tu_string& path) const;
+ character* find_target(const tu_string& path) const;
/// \brief
/// Find the sprite/movie represented by the given value.
//
/// The value might be a reference to the object itself, or a
/// string giving a relative path name to the object.
- sprite_instance* find_target(const as_value& val) const;
+ character* find_target(const as_value& val) const;
/// Dump content of the stack to a std::ostream
void dump_stack(std::ostream& out=std::cerr)
@@ -296,7 +296,7 @@
std::vector<as_value> m_local_register;
/// Movie target.
- sprite_instance* m_target;
+ character* m_target;
int find_local(const tu_string& varname) const;
Index: server/character.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/character.cpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- server/character.cpp 28 Jun 2006 23:27:44 -0000 1.2
+++ server/character.cpp 7 Jul 2006 01:01:11 -0000 1.3
@@ -141,6 +141,27 @@
get_parent()->get_mouse_state(x, y, buttons);
}
+character*
+character::get_relative_target_common(const tu_string& name)
+{
+ if (name == "." || name == "this")
+ {
+ return this;
+ }
+ else if (name == "..")
+ {
+ // this is possibly NULL, it seems
+ return get_parent();
+ }
+ else if (name == "_level0"
+ || name == "_root")
+ {
+ return get_root_movie();
+ }
+
+ return NULL;
+}
+
} // namespace gnash
// Local Variables:
Index: server/character.h
===================================================================
RCS file: /sources/gnash/gnash/server/character.h,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -b -r1.7 -r1.8
--- server/character.h 1 Jul 2006 20:44:10 -0000 1.7
+++ server/character.h 7 Jul 2006 01:01:11 -0000 1.8
@@ -90,6 +90,9 @@
/// Implement mouse-dragging for this movie.
void do_mouse_drag();
+ /// look for '.', '..', '_level0' and '_root'
+ character* get_relative_target_common(const tu_string& name);
+
public:
character(character* parent, int id)
@@ -180,6 +183,30 @@
virtual float get_width() { return 0; }
virtual sprite_instance* get_root_movie();
+
+ /// Find the character which is one degree removed from us,
+ /// given the relative pathname.
+ ///
+ /// If the pathname is "..", then return our parent.
+ /// If the pathname is ".", then return ourself. If
+ /// the pathname is "_level0" or "_root", then return
+ /// the root movie.
+ ///
+ /// Otherwise, the name should refer to one our our
+ /// named characters, so we return it.
+ ///
+ /// NOTE: In ActionScript 2.0, top level names (like
+ /// "_root" and "_level0") are CASE SENSITIVE.
+ /// Character names in a display list are CASE
+ /// SENSITIVE. Member names are CASE INSENSITIVE. Gah.
+ ///
+ /// In ActionScript 1.0, everything seems to be CASE
+ /// INSENSITIVE.
+ virtual character* get_relative_target(const tu_string& name)
+ {
+ return get_relative_target_common(name);
+ }
+
virtual int get_current_frame() const { assert(0); return 0; }
virtual bool has_looped() const { assert(0); return false; }
virtual void restart() { /*assert(0);*/ }
Index: server/sprite_instance.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/sprite_instance.cpp,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -b -r1.18 -r1.19
--- server/sprite_instance.cpp 5 Jul 2006 17:10:39 -0000 1.18
+++ server/sprite_instance.cpp 7 Jul 2006 01:01:11 -0000 1.19
@@ -50,6 +50,7 @@
#include <vector>
#include <string>
+#include <cmath>
#include "log.h"
//#include "action.h"
@@ -91,7 +92,7 @@
sprite_instance* sprite = static_cast<sprite_instance*>(fn.this_ptr);
if (sprite == NULL)
{
- sprite = fn.env->get_target();
+ sprite = dynamic_cast<sprite_instance*>(fn.env->get_target());
}
assert(sprite);
sprite->set_play_state(movie_interface::PLAY);
@@ -103,7 +104,7 @@
sprite_instance* sprite = static_cast<sprite_instance*>(fn.this_ptr);
if (sprite == NULL)
{
- sprite = fn.env->get_target();
+ sprite = dynamic_cast<sprite_instance*>(fn.env->get_target());
}
assert(sprite);
sprite->set_play_state(movie_interface::STOP);
@@ -115,7 +116,7 @@
sprite_instance* sprite = static_cast<sprite_instance*>(fn.this_ptr);
if (sprite == NULL)
{
- sprite = fn.env->get_target();
+ sprite = dynamic_cast<sprite_instance*>(fn.env->get_target());
}
assert(sprite);
@@ -138,7 +139,7 @@
sprite_instance* sprite = static_cast<sprite_instance*>(fn.this_ptr);
if (sprite == NULL)
{
- sprite = fn.env->get_target();
+ sprite = dynamic_cast<sprite_instance*>(fn.env->get_target());
}
assert(sprite);
@@ -161,7 +162,7 @@
sprite_instance* sprite = static_cast<sprite_instance*>(fn.this_ptr);
if (sprite == NULL)
{
- sprite = fn.env->get_target();
+ sprite = dynamic_cast<sprite_instance*>(fn.env->get_target());
}
assert(sprite);
@@ -180,7 +181,7 @@
sprite_instance* sprite = static_cast<sprite_instance*>(fn.this_ptr);
if (sprite == NULL)
{
- sprite = fn.env->get_target();
+ sprite = dynamic_cast<sprite_instance*>(fn.env->get_target());
}
assert(sprite);
@@ -198,7 +199,7 @@
sprite_instance* sprite = static_cast<sprite_instance*>(fn.this_ptr);
if (sprite == NULL)
{
- sprite = fn.env->get_target();
+ sprite = dynamic_cast<sprite_instance*>(fn.env->get_target());
}
assert(sprite);
@@ -211,7 +212,7 @@
sprite_instance* sprite = static_cast<sprite_instance*>(fn.this_ptr);
if (sprite == NULL)
{
- sprite = fn.env->get_target();
+ sprite = dynamic_cast<sprite_instance*>(fn.env->get_target());
}
assert(sprite);
@@ -855,34 +856,18 @@
return called;
}
-sprite_instance*
+character*
sprite_instance::get_relative_target(const tu_string& name)
{
- if (name == "." || name == "this")
- {
- return this;
- }
- else if (name == "..")
- {
- character* parent = get_parent();
- assert(dynamic_cast<sprite_instance*>(parent));
- return static_cast<sprite_instance*>(parent);
- //return get_parent();
- }
- else if (name == "_level0"
- || name == "_root")
- {
- //we must return the _root movie as a sprite_instance
- return get_root_movie();
- }
+ character* ch = get_relative_target_common(name);
- // See if we have a match on the display list.
- character* ch = m_display_list.get_character_by_name(name);
- if ( ch )
+ if ( ! ch )
{
- return dynamic_cast<sprite_instance*>(ch);
+ // See if we have a match on the display list.
+ return m_display_list.get_character_by_name(name);
}
- return NULL;
+
+ return ch; // possibly NULL
}
void sprite_instance::set_member(const tu_stringi& name,
@@ -921,8 +906,33 @@
{
matrix m = get_matrix();
+ double scale_percent = val.to_number();
+
+ // Handle bogus values
+ if (isnan(scale_percent))
+ {
+ log_warning("Attempt to set _xscale to %g, refused",
+ scale_percent);
+ return;
+ }
+ else if (scale_percent < 0 )
+ {
+ log_warning("Attempt to set _xscale to %g, use 0",
+ scale_percent);
+ scale_percent = 0;
+ }
+ else if (scale_percent > 100 )
+ {
+ log_warning("Attempt to set _xscale to %g, use 100",
+ scale_percent);
+ scale_percent = 100;
+ }
+
+ // input is in percent
+ float scale = (float)scale_percent/100.f;
+
// Decompose matrix and insert the desired value.
- float x_scale = (float) val.to_number() / 100.f;
// input is in percent
+ float x_scale = scale;
float y_scale = m.get_y_scale();
float rotation = m.get_rotation();
m.set_scale_rotation(x_scale, y_scale, rotation);
@@ -936,9 +946,34 @@
{
matrix m = get_matrix();
+ double scale_percent = val.to_number();
+
+ // Handle bogus values
+ if (isnan(scale_percent))
+ {
+ log_warning("Attempt to set _yscale to %g, refused",
+ scale_percent);
+ return;
+ }
+ else if (scale_percent < 0 )
+ {
+ log_warning("Attempt to set _yscale to %g, use 0",
+ scale_percent);
+ scale_percent = 0;
+ }
+ else if (scale_percent > 100 )
+ {
+ log_warning("Attempt to set _yscale to %g, use 100",
+ scale_percent);
+ scale_percent = 100;
+ }
+
+ // input is in percent
+ float scale = (float)scale_percent/100.f;
+
// Decompose matrix and insert the desired value.
float x_scale = m.get_x_scale();
- float y_scale = (float) val.to_number() / 100.f;
// input is in percent
+ float y_scale = scale;
float rotation = m.get_rotation();
m.set_scale_rotation(x_scale, y_scale, rotation);
@@ -1050,22 +1085,6 @@
ch->set_text_value(text);
return;
}
-#if 0 // avoid use of DisplayList method taking indexes (moved to private)
- bool success = false;
- for (int i = 0, n = m_display_list.get_character_count(); i
< n; i++)
- {
- character* ch = m_display_list.get_character(i);
- // CASE INSENSITIVE compare. In ActionScript 2.0,
this
- // changes to CASE SENSITIVE!!!
- if (name == ch->get_text_name())
- {
- const char* text = val.to_string();
- ch->set_text_value(text);
- success = true;
- }
- }
- if (success) return;
-#endif // 0
}
// If that didn't work, set a variable within this environment.
Index: server/sprite_instance.h
===================================================================
RCS file: /sources/gnash/gnash/server/sprite_instance.h,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -b -r1.10 -r1.11
--- server/sprite_instance.h 1 Jul 2006 20:44:10 -0000 1.10
+++ server/sprite_instance.h 7 Jul 2006 01:01:11 -0000 1.11
@@ -338,27 +338,8 @@
virtual void set_member(const tu_stringi& name,
const as_value& val);
-
- /// Find the movie which is one degree removed from us,
- /// given the relative pathname.
- ///
- /// If the pathname is "..", then return our parent.
- /// If the pathname is ".", then return ourself. If
- /// the pathname is "_level0" or "_root", then return
- /// the root movie.
- ///
- /// Otherwise, the name should refer to one our our
- /// named characters, so we return it.
- ///
- /// NOTE: In ActionScript 2.0, top level names (like
- /// "_root" and "_level0") are CASE SENSITIVE.
- /// Character names in a display list are CASE
- /// SENSITIVE. Member names are CASE INSENSITIVE. Gah.
- ///
- /// In ActionScript 1.0, everything seems to be CASE
- /// INSENSITIVE.
- virtual sprite_instance* get_relative_target(const tu_string& name);
-
+ /// Overridden to look in DisplayList for a match
+ virtual character* get_relative_target(const tu_string& name);
/// Execute the actions for the specified frame.
//
Index: server/swf/ASHandlers.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/swf/ASHandlers.cpp,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -b -r1.31 -r1.32
--- server/swf/ASHandlers.cpp 6 Jul 2006 21:56:48 -0000 1.31
+++ server/swf/ASHandlers.cpp 7 Jul 2006 01:01:11 -0000 1.32
@@ -592,7 +592,7 @@
// log_error("get url: target=%s, url=%s\n", target, url);
tu_string tu_target = target;
- sprite_instance* target_movie = env.find_target(tu_target);
+ character* target_movie = env.find_target(tu_target);
if (target_movie != NULL)
{
sprite_instance* root_movie =
env.get_target()->get_root_movie();
@@ -658,9 +658,11 @@
const action_buffer& code = thread.code;
size_t pc = thread.pc;
+ assert(code[pc] == SWF::ACTION_SETTARGET); // 0x8B
+
// Change the movie we're working on.
const char* target_name = code.read_string(pc+3);
- sprite_instance *new_target;
+ character *new_target;
// if the string is blank, we set target to the root movie
// TODO - double check this is correct?
@@ -693,8 +695,16 @@
const action_buffer& code = thread.code;
const char* frame_label = code.read_string(thread.pc+3);
- sprite_instance *target = env.get_target();
+ character *target = env.get_target();
+ sprite_instance *target_sprite = dynamic_cast<sprite_instance*>(target);
+ if ( ! target_sprite )
+ {
+ log_error("environment target is not a sprite_instance while
executing ActionGotoLabel");
+ }
+ else
+ {
target->goto_labeled_frame(frame_label);
+ }
}
void
@@ -906,7 +916,7 @@
tu_string target_name = env.top(0).to_string();
env.drop(1); // pop the target name off the stack
- sprite_instance *new_target;
+ character *new_target;
// if the string is blank, we set target to the root movie
// TODO - double check this is correct?
@@ -954,7 +964,7 @@
ensure_stack(env, 2); // prop num, target
- sprite_instance *target = env.find_target(env.top(1));
+ character *target = env.find_target(env.top(1));
unsigned int prop_number = (unsigned int)env.top(0).to_number();
if (target)
{
@@ -987,7 +997,7 @@
ensure_stack(env, 3); // prop val, prop num, target
- sprite_instance *target = env.find_target(env.top(2));
+ character *target = env.find_target(env.top(2));
unsigned int prop_number = (unsigned int)env.top(1).to_number();
as_value prop_val = env.top(0);
@@ -1014,10 +1024,18 @@
ensure_stack(env, 3);
- env.get_target()->clone_display_object(
+ sprite_instance* si = dynamic_cast<sprite_instance*>(env.get_target());
+ if ( ! si )
+ {
+ log_error("environment target is not a sprite_instance while
executing ActionDuplicateClip");
+ }
+ else
+ {
+ si->clone_display_object(
env.top(2).to_tu_string(),
env.top(1).to_tu_string(),
(int) env.top(0).to_number());
+ }
env.drop(3);
}
@@ -1426,7 +1444,7 @@
#ifdef EXTERN_MOVIE
// log_error("get url2: target=%s, url=%s\n", target, url);
- sprite_instance* target_movie = env.find_target(env.top(0));
+ character* target_movie = env.find_target(env.top(0));
if (target_movie != NULL)
{
sprite_instance* root_movie =
env.get_target()->get_root_movie();
@@ -1519,7 +1537,14 @@
unsigned char play_flag = code[pc + 3];
movie::play_state state = play_flag ? movie::PLAY : movie::STOP;
- sprite_instance* target = env.get_target();
+ sprite_instance* target =
dynamic_cast<sprite_instance*>(env.get_target());
+ if ( ! target )
+ {
+ log_error("environment target is not a sprite_instance while
executing ActionGotoExpression");
+ env.drop(1);
+ return;
+ }
+
bool success = false;
if (env.top(0).get_type() == as_value::UNDEFINED)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Gnash-commit] gnash ChangeLog server/ActionExec.cpp server/Mo...,
Sandro Santilli <=