[Swfdec-commits] 3 commits - swfdec/swfdec_actor.h swfdec/swfdec_movie_asprops.c swfdec/swfdec_movie.h swfdec/swfdec_player.c swfdec/swfdec_resource.c test/trace

Benjamin Otte company at kemper.freedesktop.org
Mon Mar 31 14:53:14 PDT 2008


 swfdec/swfdec_actor.h                   |    2 
 swfdec/swfdec_movie.h                   |    6 
 swfdec/swfdec_movie_asprops.c           |  112 ++++++++++--
 swfdec/swfdec_player.c                  |    1 
 swfdec/swfdec_resource.c                |    1 
 test/trace/Makefile.am                  |    9 +
 test/trace/focusrect-values-5.swf       |binary
 test/trace/focusrect-values-5.swf.trace |  286 +++++++++++++++++++++++++++++++
 test/trace/focusrect-values-6.swf       |binary
 test/trace/focusrect-values-6.swf.trace |  287 ++++++++++++++++++++++++++++++++
 test/trace/focusrect-values-7.swf       |binary
 test/trace/focusrect-values-7.swf.trace |  287 ++++++++++++++++++++++++++++++++
 test/trace/focusrect-values-8.swf       |binary
 test/trace/focusrect-values-8.swf.trace |  287 ++++++++++++++++++++++++++++++++
 test/trace/focusrect-values.as          |   19 ++
 15 files changed, 1276 insertions(+), 21 deletions(-)

New commits:
commit 2c8040d431fc40833694eff546237041b3735122
Author: Benjamin Otte <otte at gnome.org>
Date:   Mon Mar 31 23:50:34 2008 +0200

    add a test for focusrect values

diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am
index 7e44ea6..9d392d1 100644
--- a/test/trace/Makefile.am
+++ b/test/trace/Makefile.am
@@ -1053,6 +1053,15 @@ EXTRA_DIST = \
 	file-reference-list-properties-7.swf.trace \
 	file-reference-list-properties-8.swf \
 	file-reference-list-properties-8.swf.trace \
+	focusrect-values-5.swf \
+	focusrect-values-5.swf.trace \
+	focusrect-values-6.swf \
+	focusrect-values-6.swf.trace \
+	focusrect-values-7.swf \
+	focusrect-values-7.swf.trace \
+	focusrect-values-8.swf \
+	focusrect-values-8.swf.trace \
+	focusrect-values.as \
 	foreach-propflags.as \
 	foreach-propflags-5.swf \
 	foreach-propflags-5.swf.trace \
diff --git a/test/trace/focusrect-values-5.swf b/test/trace/focusrect-values-5.swf
new file mode 100644
index 0000000..5bada6d
Binary files /dev/null and b/test/trace/focusrect-values-5.swf differ
diff --git a/test/trace/focusrect-values-5.swf.trace b/test/trace/focusrect-values-5.swf.trace
new file mode 100644
index 0000000..f597464
--- /dev/null
+++ b/test/trace/focusrect-values-5.swf.trace
@@ -0,0 +1,286 @@
+valueOf called
+toString called
+toString called with 
+valueOf called with 
+0: valueOf!
+1: valueOf!
+2: valueOf!
+3: valueOf!
+4: valueOf!
+5: valueOf!
+6: valueOf!
+7: valueOf!
+8: valueOf!
+9: valueOf!
+10: valueOf!
+11: valueOf!
+12: valueOf!
+13: valueOf!
+14: valueOf!
+15: valueOf!
+16: valueOf!
+17: valueOf!
+18: valueOf!
+19: valueOf!
+20: valueOf!
+21: valueOf!
+22: valueOf!
+22: toString!
+23: valueOf!
+23: toString!
+24: valueOf!
+24: toString!
+25: valueOf!
+26: valueOf!
+26: toString!
+27: valueOf!
+27: toString!
+28: valueOf!
+28: toString!
+29: valueOf!
+29: toString!
+initial:  /  / 1
+(0)  (undefined):  /  / 1
+(0)  (undefined)[2]:  /  / 0
+(0)  (undefined)[3]:  /  / 1
+(1) null (null):  /  / 1
+(1) null (null)[2]:  /  / 0
+(1) null (null)[3]:  /  / 1
+(2) true (boolean):  /  / 1
+(2) true (boolean)[2]:  /  / 1
+(2) true (boolean)[3]:  /  / 1
+(3) false (boolean):  /  / 1
+(3) false (boolean)[2]:  /  / 0
+(3) false (boolean)[3]:  /  / 0
+(4) 0 (number):  /  / 0
+(4) 0 (number)[2]:  /  / 0
+(4) 0 (number)[3]:  /  / 0
+(5) 1 (number):  /  / 0
+(5) 1 (number)[2]:  /  / 1
+(5) 1 (number)[3]:  /  / 1
+(6) 0.5 (number):  /  / 1
+(6) 0.5 (number)[2]:  /  / 1
+(6) 0.5 (number)[3]:  /  / 1
+(7) -1 (number):  /  / 1
+(7) -1 (number)[2]:  /  / 1
+(7) -1 (number)[3]:  /  / 1
+(8) -0.5 (number):  /  / 1
+(8) -0.5 (number)[2]:  /  / 1
+(8) -0.5 (number)[3]:  /  / 1
+(9) Infinity (number):  /  / 1
+(9) Infinity (number)[2]:  /  / 1
+(9) Infinity (number)[3]:  /  / 1
+(10) -Infinity (number):  /  / 1
+(10) -Infinity (number)[2]:  /  / 1
+(10) -Infinity (number)[3]:  /  / 1
+(11) NaN (number):  /  / 1
+(11) NaN (number)[2]:  /  / 0
+(11) NaN (number)[3]:  /  / 1
+(12)  (string):  /  / 1
+(12)  (string)[2]:  /  / 0
+(12)  (string)[3]:  /  / 1
+(13) 0 (string):  /  / 1
+(13) 0 (string)[2]:  /  / 0
+(13) 0 (string)[3]:  /  / 0
+(14) -0 (string):  /  / 0
+(14) -0 (string)[2]:  /  / 0
+(14) -0 (string)[3]:  /  / 0
+(15) 0.0 (string):  /  / 0
+(15) 0.0 (string)[2]:  /  / 0
+(15) 0.0 (string)[3]:  /  / 0
+(16) 1 (string):  /  / 0
+(16) 1 (string)[2]:  /  / 1
+(16) 1 (string)[3]:  /  / 1
+(17) Hello World! (string):  /  / 1
+(17) Hello World! (string)[2]:  /  / 0
+(17) Hello World! (string)[3]:  /  / 1
+(18) true (string):  /  / 1
+(18) true (string)[2]:  /  / 0
+(18) true (string)[3]:  /  / 1
+(19) _level0 (string):  /  / 1
+(19) _level0 (string)[2]:  /  / 0
+(19) _level0 (string)[3]:  /  / 1
+(20) äöü (string):  /  / 1
+(20) äöü (string)[2]:  /  / 0
+(20) äöü (string)[3]:  /  / 1
+(21) _level0 (movieclip):  /  / 1
+(21) _level0 (movieclip)[2]:  /  / 0
+(21) _level0 (movieclip)[3]:  /  / 1
+(22) [object Object] (object):  /  / 1
+(22) [object Object] (object)[2]:  /  / 0
+(22) [object Object] (object)[3]:  /  / 1
+(23) 1035840244000 (object):  /  / 1
+(23) 1035840244000 (object)[2]:  /  / 1
+(23) 1035840244000 (object)[3]:  /  / 1
+(24)  (object):  /  / 1
+(24)  (object)[2]:  /  / 0
+(24)  (object)[3]:  /  / 1
+(25)  (undefined):  /  / 1
+(25)  (undefined)[2]:  /  / 0
+(25)  (undefined)[3]:  /  / 1
+(26) [type Object] (object):  /  / 1
+valueOf called
+(26) [type Object] (object)[2]:  /  / 0
+valueOf called
+(26) [type Object] (object)[3]:  /  / 1
+(27) [type Object] (object):  /  / 1
+(27) [type Object] (object)[2]:  /  / 0
+(27) [type Object] (object)[3]:  /  / 1
+(28) [object Object] (object):  /  / 1
+valueOf called with 
+(28) [object Object] (object)[2]:  /  / 0
+valueOf called with 
+(28) [object Object] (object)[3]:  /  / 1
+(29)  (object):  /  / 1
+(29)  (object)[2]:  /  / 0
+(29)  (object)[3]:  /  / 0
+(30)  (object):  /  / 0
+0: valueOf!
+(30)  (object)[2]:  /  / 0
+0: valueOf!
+(30)  (object)[3]:  /  / 0
+(31) null (object):  /  / 0
+1: valueOf!
+(31) null (object)[2]:  /  / 0
+1: valueOf!
+(31) null (object)[3]:  /  / 0
+(32) true (object):  /  / 0
+2: valueOf!
+(32) true (object)[2]:  /  / 1
+2: valueOf!
+(32) true (object)[3]:  /  / 1
+(33) false (object):  /  / 1
+3: valueOf!
+(33) false (object)[2]:  /  / 0
+3: valueOf!
+(33) false (object)[3]:  /  / 0
+(34) 0 (object):  /  / 0
+4: valueOf!
+(34) 0 (object)[2]:  /  / 0
+4: valueOf!
+(34) 0 (object)[3]:  /  / 0
+(35) 1 (object):  /  / 0
+5: valueOf!
+(35) 1 (object)[2]:  /  / 1
+5: valueOf!
+(35) 1 (object)[3]:  /  / 1
+(36) 0.5 (object):  /  / 1
+6: valueOf!
+(36) 0.5 (object)[2]:  /  / 1
+6: valueOf!
+(36) 0.5 (object)[3]:  /  / 1
+(37) -1 (object):  /  / 1
+7: valueOf!
+(37) -1 (object)[2]:  /  / 1
+7: valueOf!
+(37) -1 (object)[3]:  /  / 1
+(38) -0.5 (object):  /  / 1
+8: valueOf!
+(38) -0.5 (object)[2]:  /  / 1
+8: valueOf!
+(38) -0.5 (object)[3]:  /  / 1
+(39) Infinity (object):  /  / 1
+9: valueOf!
+(39) Infinity (object)[2]:  /  / 1
+9: valueOf!
+(39) Infinity (object)[3]:  /  / 1
+(40) -Infinity (object):  /  / 1
+10: valueOf!
+(40) -Infinity (object)[2]:  /  / 1
+10: valueOf!
+(40) -Infinity (object)[3]:  /  / 1
+(41) NaN (object):  /  / 1
+11: valueOf!
+(41) NaN (object)[2]:  /  / 0
+11: valueOf!
+(41) NaN (object)[3]:  /  / 1
+(42)  (object):  /  / 1
+12: valueOf!
+(42)  (object)[2]:  /  / 0
+12: valueOf!
+(42)  (object)[3]:  /  / 1
+(43) 0 (object):  /  / 1
+13: valueOf!
+(43) 0 (object)[2]:  /  / 0
+13: valueOf!
+(43) 0 (object)[3]:  /  / 0
+(44) -0 (object):  /  / 0
+14: valueOf!
+(44) -0 (object)[2]:  /  / 0
+14: valueOf!
+(44) -0 (object)[3]:  /  / 0
+(45) 0.0 (object):  /  / 0
+15: valueOf!
+(45) 0.0 (object)[2]:  /  / 0
+15: valueOf!
+(45) 0.0 (object)[3]:  /  / 0
+(46) 1 (object):  /  / 0
+16: valueOf!
+(46) 1 (object)[2]:  /  / 1
+16: valueOf!
+(46) 1 (object)[3]:  /  / 1
+(47) Hello World! (object):  /  / 1
+17: valueOf!
+(47) Hello World! (object)[2]:  /  / 0
+17: valueOf!
+(47) Hello World! (object)[3]:  /  / 1
+(48) true (object):  /  / 1
+18: valueOf!
+(48) true (object)[2]:  /  / 0
+18: valueOf!
+(48) true (object)[3]:  /  / 1
+(49) _level0 (object):  /  / 1
+19: valueOf!
+(49) _level0 (object)[2]:  /  / 0
+19: valueOf!
+(49) _level0 (object)[3]:  /  / 1
+(50) äöü (object):  /  / 1
+20: valueOf!
+(50) äöü (object)[2]:  /  / 0
+20: valueOf!
+(50) äöü (object)[3]:  /  / 1
+(51) _level0 (object):  /  / 1
+21: valueOf!
+(51) _level0 (object)[2]:  /  / 0
+21: valueOf!
+(51) _level0 (object)[3]:  /  / 1
+(52) [type Object] (object):  /  / 1
+22: valueOf!
+(52) [type Object] (object)[2]:  /  / 0
+22: valueOf!
+(52) [type Object] (object)[3]:  /  / 1
+(53) [type Object] (object):  /  / 1
+23: valueOf!
+(53) [type Object] (object)[2]:  /  / 0
+23: valueOf!
+(53) [type Object] (object)[3]:  /  / 1
+(54) [type Object] (object):  /  / 1
+24: valueOf!
+(54) [type Object] (object)[2]:  /  / 0
+24: valueOf!
+(54) [type Object] (object)[3]:  /  / 1
+(55)  (object):  /  / 1
+25: valueOf!
+(55)  (object)[2]:  /  / 0
+25: valueOf!
+(55)  (object)[3]:  /  / 0
+(56) [type Object] (object):  /  / 0
+26: valueOf!
+(56) [type Object] (object)[2]:  /  / 0
+26: valueOf!
+(56) [type Object] (object)[3]:  /  / 1
+(57) [type Object] (object):  /  / 1
+27: valueOf!
+(57) [type Object] (object)[2]:  /  / 0
+27: valueOf!
+(57) [type Object] (object)[3]:  /  / 1
+(58) [type Object] (object):  /  / 1
+28: valueOf!
+(58) [type Object] (object)[2]:  /  / 0
+28: valueOf!
+(58) [type Object] (object)[3]:  /  / 1
+(59) [type Object] (object):  /  / 1
+29: valueOf!
+(59) [type Object] (object)[2]:  /  / 0
+29: valueOf!
+(59) [type Object] (object)[3]:  /  / 1
diff --git a/test/trace/focusrect-values-6.swf b/test/trace/focusrect-values-6.swf
new file mode 100644
index 0000000..0b42253
Binary files /dev/null and b/test/trace/focusrect-values-6.swf differ
diff --git a/test/trace/focusrect-values-6.swf.trace b/test/trace/focusrect-values-6.swf.trace
new file mode 100644
index 0000000..8ef69e2
--- /dev/null
+++ b/test/trace/focusrect-values-6.swf.trace
@@ -0,0 +1,287 @@
+valueOf called
+toString called
+toString called with 
+valueOf called with 
+0: valueOf!
+1: valueOf!
+2: valueOf!
+3: valueOf!
+4: valueOf!
+5: valueOf!
+6: valueOf!
+7: valueOf!
+8: valueOf!
+9: valueOf!
+10: valueOf!
+11: valueOf!
+12: valueOf!
+13: valueOf!
+14: valueOf!
+15: valueOf!
+16: valueOf!
+17: valueOf!
+18: valueOf!
+19: valueOf!
+20: valueOf!
+21: valueOf!
+22: valueOf!
+22: toString!
+23: valueOf!
+23: toString!
+24: valueOf!
+24: toString!
+25: valueOf!
+25: toString!
+26: valueOf!
+26: toString!
+27: valueOf!
+27: toString!
+28: valueOf!
+28: toString!
+29: valueOf!
+29: toString!
+initial: null / null / true
+(0)  (undefined): null / null / true
+(0)  (undefined)[2]: null / null / false
+(0)  (undefined)[3]: null / null / true
+(1) null (null): null / null / true
+(1) null (null)[2]: null / null / false
+(1) null (null)[3]: null / null / true
+(2) true (boolean): true / null / true
+(2) true (boolean)[2]: true / null / true
+(2) true (boolean)[3]: true / null / true
+(3) false (boolean): false / null / true
+(3) false (boolean)[2]: false / null / false
+(3) false (boolean)[3]: false / null / false
+(4) 0 (number): false / null / false
+(4) 0 (number)[2]: false / null / false
+(4) 0 (number)[3]: false / null / false
+(5) 1 (number): true / null / false
+(5) 1 (number)[2]: true / null / true
+(5) 1 (number)[3]: true / null / true
+(6) 0.5 (number): true / null / true
+(6) 0.5 (number)[2]: true / null / true
+(6) 0.5 (number)[3]: true / null / true
+(7) -1 (number): true / null / true
+(7) -1 (number)[2]: true / null / true
+(7) -1 (number)[3]: true / null / true
+(8) -0.5 (number): true / null / true
+(8) -0.5 (number)[2]: true / null / true
+(8) -0.5 (number)[3]: true / null / true
+(9) Infinity (number): true / null / true
+(9) Infinity (number)[2]: true / null / true
+(9) Infinity (number)[3]: true / null / true
+(10) -Infinity (number): true / null / true
+(10) -Infinity (number)[2]: true / null / true
+(10) -Infinity (number)[3]: true / null / true
+(11) NaN (number): false / null / true
+(11) NaN (number)[2]: false / null / false
+(11) NaN (number)[3]: false / null / true
+(12)  (string): false / null / true
+(12)  (string)[2]: false / null / false
+(12)  (string)[3]: false / null / true
+(13) 0 (string): false / null / true
+(13) 0 (string)[2]: false / null / false
+(13) 0 (string)[3]: false / null / false
+(14) -0 (string): false / null / false
+(14) -0 (string)[2]: false / null / false
+(14) -0 (string)[3]: false / null / false
+(15) 0.0 (string): false / null / false
+(15) 0.0 (string)[2]: false / null / false
+(15) 0.0 (string)[3]: false / null / false
+(16) 1 (string): true / null / false
+(16) 1 (string)[2]: true / null / true
+(16) 1 (string)[3]: true / null / true
+(17) Hello World! (string): false / null / true
+(17) Hello World! (string)[2]: false / null / false
+(17) Hello World! (string)[3]: false / null / true
+(18) true (string): false / null / true
+(18) true (string)[2]: false / null / false
+(18) true (string)[3]: false / null / true
+(19) _level0 (string): false / null / true
+(19) _level0 (string)[2]: false / null / false
+(19) _level0 (string)[3]: false / null / true
+(20) äöü (string): false / null / true
+(20) äöü (string)[2]: false / null / false
+(20) äöü (string)[3]: false / null / true
+(21) _level0 (movieclip): true / null / true
+(21) _level0 (movieclip)[2]: true / null / false
+(21) _level0 (movieclip)[3]: true / null / true
+(22) [object Object] (object): true / null / true
+(22) [object Object] (object)[2]: true / null / false
+(22) [object Object] (object)[3]: true / null / true
+(23) Mon Oct 28 21:24:04 GMT+0000 2002 (object): true / null / true
+(23) Mon Oct 28 21:24:04 GMT+0000 2002 (object)[2]: true / null / true
+(23) Mon Oct 28 21:24:04 GMT+0000 2002 (object)[3]: true / null / true
+(24)  (object): true / null / true
+(24)  (object)[2]: true / null / false
+(24)  (object)[3]: true / null / true
+(25) [type Function] (function): true / null / true
+(25) [type Function] (function)[2]: true / null / false
+(25) [type Function] (function)[3]: true / null / true
+(26) [type Object] (object): true / null / true
+valueOf called
+(26) [type Object] (object)[2]: true / null / false
+valueOf called
+(26) [type Object] (object)[3]: true / null / true
+(27) [type Object] (object): true / null / true
+(27) [type Object] (object)[2]: true / null / false
+(27) [type Object] (object)[3]: true / null / true
+(28) [object Object] (object): true / null / true
+valueOf called with 
+(28) [object Object] (object)[2]: true / null / false
+valueOf called with 
+(28) [object Object] (object)[3]: true / null / true
+(29)  (object): true / null / true
+(29)  (object)[2]: true / null / false
+(29)  (object)[3]: true / null / false
+(30)  (object): true / null / false
+0: valueOf!
+(30)  (object)[2]: true / null / false
+0: valueOf!
+(30)  (object)[3]: true / null / false
+(31) null (object): true / null / false
+1: valueOf!
+(31) null (object)[2]: true / null / false
+1: valueOf!
+(31) null (object)[3]: true / null / false
+(32) true (object): true / null / false
+2: valueOf!
+(32) true (object)[2]: true / null / true
+2: valueOf!
+(32) true (object)[3]: true / null / true
+(33) false (object): true / null / true
+3: valueOf!
+(33) false (object)[2]: true / null / false
+3: valueOf!
+(33) false (object)[3]: true / null / false
+(34) 0 (object): true / null / false
+4: valueOf!
+(34) 0 (object)[2]: true / null / false
+4: valueOf!
+(34) 0 (object)[3]: true / null / false
+(35) 1 (object): true / null / false
+5: valueOf!
+(35) 1 (object)[2]: true / null / true
+5: valueOf!
+(35) 1 (object)[3]: true / null / true
+(36) 0.5 (object): true / null / true
+6: valueOf!
+(36) 0.5 (object)[2]: true / null / true
+6: valueOf!
+(36) 0.5 (object)[3]: true / null / true
+(37) -1 (object): true / null / true
+7: valueOf!
+(37) -1 (object)[2]: true / null / true
+7: valueOf!
+(37) -1 (object)[3]: true / null / true
+(38) -0.5 (object): true / null / true
+8: valueOf!
+(38) -0.5 (object)[2]: true / null / true
+8: valueOf!
+(38) -0.5 (object)[3]: true / null / true
+(39) Infinity (object): true / null / true
+9: valueOf!
+(39) Infinity (object)[2]: true / null / true
+9: valueOf!
+(39) Infinity (object)[3]: true / null / true
+(40) -Infinity (object): true / null / true
+10: valueOf!
+(40) -Infinity (object)[2]: true / null / true
+10: valueOf!
+(40) -Infinity (object)[3]: true / null / true
+(41) NaN (object): true / null / true
+11: valueOf!
+(41) NaN (object)[2]: true / null / false
+11: valueOf!
+(41) NaN (object)[3]: true / null / true
+(42)  (object): true / null / true
+12: valueOf!
+(42)  (object)[2]: true / null / false
+12: valueOf!
+(42)  (object)[3]: true / null / true
+(43) 0 (object): true / null / true
+13: valueOf!
+(43) 0 (object)[2]: true / null / false
+13: valueOf!
+(43) 0 (object)[3]: true / null / false
+(44) -0 (object): true / null / false
+14: valueOf!
+(44) -0 (object)[2]: true / null / false
+14: valueOf!
+(44) -0 (object)[3]: true / null / false
+(45) 0.0 (object): true / null / false
+15: valueOf!
+(45) 0.0 (object)[2]: true / null / false
+15: valueOf!
+(45) 0.0 (object)[3]: true / null / false
+(46) 1 (object): true / null / false
+16: valueOf!
+(46) 1 (object)[2]: true / null / true
+16: valueOf!
+(46) 1 (object)[3]: true / null / true
+(47) Hello World! (object): true / null / true
+17: valueOf!
+(47) Hello World! (object)[2]: true / null / false
+17: valueOf!
+(47) Hello World! (object)[3]: true / null / true
+(48) true (object): true / null / true
+18: valueOf!
+(48) true (object)[2]: true / null / false
+18: valueOf!
+(48) true (object)[3]: true / null / true
+(49) _level0 (object): true / null / true
+19: valueOf!
+(49) _level0 (object)[2]: true / null / false
+19: valueOf!
+(49) _level0 (object)[3]: true / null / true
+(50) äöü (object): true / null / true
+20: valueOf!
+(50) äöü (object)[2]: true / null / false
+20: valueOf!
+(50) äöü (object)[3]: true / null / true
+(51) _level0 (object): true / null / true
+21: valueOf!
+(51) _level0 (object)[2]: true / null / false
+21: valueOf!
+(51) _level0 (object)[3]: true / null / true
+(52) [type Object] (object): true / null / true
+22: valueOf!
+(52) [type Object] (object)[2]: true / null / false
+22: valueOf!
+(52) [type Object] (object)[3]: true / null / true
+(53) [type Object] (object): true / null / true
+23: valueOf!
+(53) [type Object] (object)[2]: true / null / false
+23: valueOf!
+(53) [type Object] (object)[3]: true / null / true
+(54) [type Object] (object): true / null / true
+24: valueOf!
+(54) [type Object] (object)[2]: true / null / false
+24: valueOf!
+(54) [type Object] (object)[3]: true / null / true
+(55) [type Object] (object): true / null / true
+25: valueOf!
+(55) [type Object] (object)[2]: true / null / false
+25: valueOf!
+(55) [type Object] (object)[3]: true / null / true
+(56) [type Object] (object): true / null / true
+26: valueOf!
+(56) [type Object] (object)[2]: true / null / false
+26: valueOf!
+(56) [type Object] (object)[3]: true / null / true
+(57) [type Object] (object): true / null / true
+27: valueOf!
+(57) [type Object] (object)[2]: true / null / false
+27: valueOf!
+(57) [type Object] (object)[3]: true / null / true
+(58) [type Object] (object): true / null / true
+28: valueOf!
+(58) [type Object] (object)[2]: true / null / false
+28: valueOf!
+(58) [type Object] (object)[3]: true / null / true
+(59) [type Object] (object): true / null / true
+29: valueOf!
+(59) [type Object] (object)[2]: true / null / false
+29: valueOf!
+(59) [type Object] (object)[3]: true / null / true
diff --git a/test/trace/focusrect-values-7.swf b/test/trace/focusrect-values-7.swf
new file mode 100644
index 0000000..81f6daf
Binary files /dev/null and b/test/trace/focusrect-values-7.swf differ
diff --git a/test/trace/focusrect-values-7.swf.trace b/test/trace/focusrect-values-7.swf.trace
new file mode 100644
index 0000000..7f33a12
--- /dev/null
+++ b/test/trace/focusrect-values-7.swf.trace
@@ -0,0 +1,287 @@
+valueOf called
+toString called
+toString called with 
+valueOf called with 
+0: valueOf!
+1: valueOf!
+2: valueOf!
+3: valueOf!
+4: valueOf!
+5: valueOf!
+6: valueOf!
+7: valueOf!
+8: valueOf!
+9: valueOf!
+10: valueOf!
+11: valueOf!
+12: valueOf!
+13: valueOf!
+14: valueOf!
+15: valueOf!
+16: valueOf!
+17: valueOf!
+18: valueOf!
+19: valueOf!
+20: valueOf!
+21: valueOf!
+22: valueOf!
+22: toString!
+23: valueOf!
+23: toString!
+24: valueOf!
+24: toString!
+25: valueOf!
+25: toString!
+26: valueOf!
+26: toString!
+27: valueOf!
+27: toString!
+28: valueOf!
+28: toString!
+29: valueOf!
+29: toString!
+initial: null / null / true
+(0) undefined (undefined): null / null / true
+(0) undefined (undefined)[2]: null / null / false
+(0) undefined (undefined)[3]: null / null / true
+(1) null (null): null / null / true
+(1) null (null)[2]: null / null / false
+(1) null (null)[3]: null / null / true
+(2) true (boolean): true / null / true
+(2) true (boolean)[2]: true / null / true
+(2) true (boolean)[3]: true / null / true
+(3) false (boolean): false / null / true
+(3) false (boolean)[2]: false / null / false
+(3) false (boolean)[3]: false / null / false
+(4) 0 (number): false / null / false
+(4) 0 (number)[2]: false / null / false
+(4) 0 (number)[3]: false / null / false
+(5) 1 (number): true / null / false
+(5) 1 (number)[2]: true / null / true
+(5) 1 (number)[3]: true / null / true
+(6) 0.5 (number): true / null / true
+(6) 0.5 (number)[2]: true / null / true
+(6) 0.5 (number)[3]: true / null / true
+(7) -1 (number): true / null / true
+(7) -1 (number)[2]: true / null / true
+(7) -1 (number)[3]: true / null / true
+(8) -0.5 (number): true / null / true
+(8) -0.5 (number)[2]: true / null / true
+(8) -0.5 (number)[3]: true / null / true
+(9) Infinity (number): true / null / true
+(9) Infinity (number)[2]: true / null / true
+(9) Infinity (number)[3]: true / null / true
+(10) -Infinity (number): true / null / true
+(10) -Infinity (number)[2]: true / null / true
+(10) -Infinity (number)[3]: true / null / true
+(11) NaN (number): false / null / true
+(11) NaN (number)[2]: false / null / false
+(11) NaN (number)[3]: false / null / true
+(12)  (string): false / null / true
+(12)  (string)[2]: false / null / false
+(12)  (string)[3]: false / null / true
+(13) 0 (string): true / null / true
+(13) 0 (string)[2]: true / null / false
+(13) 0 (string)[3]: true / null / false
+(14) -0 (string): true / null / false
+(14) -0 (string)[2]: true / null / false
+(14) -0 (string)[3]: true / null / false
+(15) 0.0 (string): true / null / false
+(15) 0.0 (string)[2]: true / null / false
+(15) 0.0 (string)[3]: true / null / false
+(16) 1 (string): true / null / false
+(16) 1 (string)[2]: true / null / true
+(16) 1 (string)[3]: true / null / true
+(17) Hello World! (string): true / null / true
+(17) Hello World! (string)[2]: true / null / false
+(17) Hello World! (string)[3]: true / null / true
+(18) true (string): true / null / true
+(18) true (string)[2]: true / null / false
+(18) true (string)[3]: true / null / true
+(19) _level0 (string): true / null / true
+(19) _level0 (string)[2]: true / null / false
+(19) _level0 (string)[3]: true / null / true
+(20) äöü (string): true / null / true
+(20) äöü (string)[2]: true / null / false
+(20) äöü (string)[3]: true / null / true
+(21) _level0 (movieclip): true / null / true
+(21) _level0 (movieclip)[2]: true / null / false
+(21) _level0 (movieclip)[3]: true / null / true
+(22) [object Object] (object): true / null / true
+(22) [object Object] (object)[2]: true / null / false
+(22) [object Object] (object)[3]: true / null / true
+(23) Mon Oct 28 21:24:04 GMT+0000 2002 (object): true / null / true
+(23) Mon Oct 28 21:24:04 GMT+0000 2002 (object)[2]: true / null / true
+(23) Mon Oct 28 21:24:04 GMT+0000 2002 (object)[3]: true / null / true
+(24)  (object): true / null / true
+(24)  (object)[2]: true / null / false
+(24)  (object)[3]: true / null / true
+(25) [type Function] (function): true / null / true
+(25) [type Function] (function)[2]: true / null / false
+(25) [type Function] (function)[3]: true / null / true
+(26) [type Object] (object): true / null / true
+valueOf called
+(26) [type Object] (object)[2]: true / null / false
+valueOf called
+(26) [type Object] (object)[3]: true / null / true
+(27) [type Object] (object): true / null / true
+(27) [type Object] (object)[2]: true / null / false
+(27) [type Object] (object)[3]: true / null / true
+(28) [object Object] (object): true / null / true
+valueOf called with 
+(28) [object Object] (object)[2]: true / null / false
+valueOf called with 
+(28) [object Object] (object)[3]: true / null / true
+(29) undefined (object): true / null / true
+(29) undefined (object)[2]: true / null / false
+(29) undefined (object)[3]: true / null / true
+(30) undefined (object): true / null / true
+0: valueOf!
+(30) undefined (object)[2]: true / null / false
+0: valueOf!
+(30) undefined (object)[3]: true / null / true
+(31) null (object): true / null / true
+1: valueOf!
+(31) null (object)[2]: true / null / false
+1: valueOf!
+(31) null (object)[3]: true / null / true
+(32) true (object): true / null / true
+2: valueOf!
+(32) true (object)[2]: true / null / true
+2: valueOf!
+(32) true (object)[3]: true / null / true
+(33) false (object): true / null / true
+3: valueOf!
+(33) false (object)[2]: true / null / false
+3: valueOf!
+(33) false (object)[3]: true / null / false
+(34) 0 (object): true / null / false
+4: valueOf!
+(34) 0 (object)[2]: true / null / false
+4: valueOf!
+(34) 0 (object)[3]: true / null / false
+(35) 1 (object): true / null / false
+5: valueOf!
+(35) 1 (object)[2]: true / null / true
+5: valueOf!
+(35) 1 (object)[3]: true / null / true
+(36) 0.5 (object): true / null / true
+6: valueOf!
+(36) 0.5 (object)[2]: true / null / true
+6: valueOf!
+(36) 0.5 (object)[3]: true / null / true
+(37) -1 (object): true / null / true
+7: valueOf!
+(37) -1 (object)[2]: true / null / true
+7: valueOf!
+(37) -1 (object)[3]: true / null / true
+(38) -0.5 (object): true / null / true
+8: valueOf!
+(38) -0.5 (object)[2]: true / null / true
+8: valueOf!
+(38) -0.5 (object)[3]: true / null / true
+(39) Infinity (object): true / null / true
+9: valueOf!
+(39) Infinity (object)[2]: true / null / true
+9: valueOf!
+(39) Infinity (object)[3]: true / null / true
+(40) -Infinity (object): true / null / true
+10: valueOf!
+(40) -Infinity (object)[2]: true / null / true
+10: valueOf!
+(40) -Infinity (object)[3]: true / null / true
+(41) NaN (object): true / null / true
+11: valueOf!
+(41) NaN (object)[2]: true / null / false
+11: valueOf!
+(41) NaN (object)[3]: true / null / true
+(42)  (object): true / null / true
+12: valueOf!
+(42)  (object)[2]: true / null / false
+12: valueOf!
+(42)  (object)[3]: true / null / true
+(43) 0 (object): true / null / true
+13: valueOf!
+(43) 0 (object)[2]: true / null / false
+13: valueOf!
+(43) 0 (object)[3]: true / null / false
+(44) -0 (object): true / null / false
+14: valueOf!
+(44) -0 (object)[2]: true / null / false
+14: valueOf!
+(44) -0 (object)[3]: true / null / false
+(45) 0.0 (object): true / null / false
+15: valueOf!
+(45) 0.0 (object)[2]: true / null / false
+15: valueOf!
+(45) 0.0 (object)[3]: true / null / false
+(46) 1 (object): true / null / false
+16: valueOf!
+(46) 1 (object)[2]: true / null / true
+16: valueOf!
+(46) 1 (object)[3]: true / null / true
+(47) Hello World! (object): true / null / true
+17: valueOf!
+(47) Hello World! (object)[2]: true / null / false
+17: valueOf!
+(47) Hello World! (object)[3]: true / null / true
+(48) true (object): true / null / true
+18: valueOf!
+(48) true (object)[2]: true / null / false
+18: valueOf!
+(48) true (object)[3]: true / null / true
+(49) _level0 (object): true / null / true
+19: valueOf!
+(49) _level0 (object)[2]: true / null / false
+19: valueOf!
+(49) _level0 (object)[3]: true / null / true
+(50) äöü (object): true / null / true
+20: valueOf!
+(50) äöü (object)[2]: true / null / false
+20: valueOf!
+(50) äöü (object)[3]: true / null / true
+(51) _level0 (object): true / null / true
+21: valueOf!
+(51) _level0 (object)[2]: true / null / false
+21: valueOf!
+(51) _level0 (object)[3]: true / null / true
+(52) [type Object] (object): true / null / true
+22: valueOf!
+(52) [type Object] (object)[2]: true / null / false
+22: valueOf!
+(52) [type Object] (object)[3]: true / null / true
+(53) [type Object] (object): true / null / true
+23: valueOf!
+(53) [type Object] (object)[2]: true / null / false
+23: valueOf!
+(53) [type Object] (object)[3]: true / null / true
+(54) [type Object] (object): true / null / true
+24: valueOf!
+(54) [type Object] (object)[2]: true / null / false
+24: valueOf!
+(54) [type Object] (object)[3]: true / null / true
+(55) [type Object] (object): true / null / true
+25: valueOf!
+(55) [type Object] (object)[2]: true / null / false
+25: valueOf!
+(55) [type Object] (object)[3]: true / null / true
+(56) [type Object] (object): true / null / true
+26: valueOf!
+(56) [type Object] (object)[2]: true / null / false
+26: valueOf!
+(56) [type Object] (object)[3]: true / null / true
+(57) [type Object] (object): true / null / true
+27: valueOf!
+(57) [type Object] (object)[2]: true / null / false
+27: valueOf!
+(57) [type Object] (object)[3]: true / null / true
+(58) [type Object] (object): true / null / true
+28: valueOf!
+(58) [type Object] (object)[2]: true / null / false
+28: valueOf!
+(58) [type Object] (object)[3]: true / null / true
+(59) [type Object] (object): true / null / true
+29: valueOf!
+(59) [type Object] (object)[2]: true / null / false
+29: valueOf!
+(59) [type Object] (object)[3]: true / null / true
diff --git a/test/trace/focusrect-values-8.swf b/test/trace/focusrect-values-8.swf
new file mode 100644
index 0000000..46a3d3a
Binary files /dev/null and b/test/trace/focusrect-values-8.swf differ
diff --git a/test/trace/focusrect-values-8.swf.trace b/test/trace/focusrect-values-8.swf.trace
new file mode 100644
index 0000000..7f33a12
--- /dev/null
+++ b/test/trace/focusrect-values-8.swf.trace
@@ -0,0 +1,287 @@
+valueOf called
+toString called
+toString called with 
+valueOf called with 
+0: valueOf!
+1: valueOf!
+2: valueOf!
+3: valueOf!
+4: valueOf!
+5: valueOf!
+6: valueOf!
+7: valueOf!
+8: valueOf!
+9: valueOf!
+10: valueOf!
+11: valueOf!
+12: valueOf!
+13: valueOf!
+14: valueOf!
+15: valueOf!
+16: valueOf!
+17: valueOf!
+18: valueOf!
+19: valueOf!
+20: valueOf!
+21: valueOf!
+22: valueOf!
+22: toString!
+23: valueOf!
+23: toString!
+24: valueOf!
+24: toString!
+25: valueOf!
+25: toString!
+26: valueOf!
+26: toString!
+27: valueOf!
+27: toString!
+28: valueOf!
+28: toString!
+29: valueOf!
+29: toString!
+initial: null / null / true
+(0) undefined (undefined): null / null / true
+(0) undefined (undefined)[2]: null / null / false
+(0) undefined (undefined)[3]: null / null / true
+(1) null (null): null / null / true
+(1) null (null)[2]: null / null / false
+(1) null (null)[3]: null / null / true
+(2) true (boolean): true / null / true
+(2) true (boolean)[2]: true / null / true
+(2) true (boolean)[3]: true / null / true
+(3) false (boolean): false / null / true
+(3) false (boolean)[2]: false / null / false
+(3) false (boolean)[3]: false / null / false
+(4) 0 (number): false / null / false
+(4) 0 (number)[2]: false / null / false
+(4) 0 (number)[3]: false / null / false
+(5) 1 (number): true / null / false
+(5) 1 (number)[2]: true / null / true
+(5) 1 (number)[3]: true / null / true
+(6) 0.5 (number): true / null / true
+(6) 0.5 (number)[2]: true / null / true
+(6) 0.5 (number)[3]: true / null / true
+(7) -1 (number): true / null / true
+(7) -1 (number)[2]: true / null / true
+(7) -1 (number)[3]: true / null / true
+(8) -0.5 (number): true / null / true
+(8) -0.5 (number)[2]: true / null / true
+(8) -0.5 (number)[3]: true / null / true
+(9) Infinity (number): true / null / true
+(9) Infinity (number)[2]: true / null / true
+(9) Infinity (number)[3]: true / null / true
+(10) -Infinity (number): true / null / true
+(10) -Infinity (number)[2]: true / null / true
+(10) -Infinity (number)[3]: true / null / true
+(11) NaN (number): false / null / true
+(11) NaN (number)[2]: false / null / false
+(11) NaN (number)[3]: false / null / true
+(12)  (string): false / null / true
+(12)  (string)[2]: false / null / false
+(12)  (string)[3]: false / null / true
+(13) 0 (string): true / null / true
+(13) 0 (string)[2]: true / null / false
+(13) 0 (string)[3]: true / null / false
+(14) -0 (string): true / null / false
+(14) -0 (string)[2]: true / null / false
+(14) -0 (string)[3]: true / null / false
+(15) 0.0 (string): true / null / false
+(15) 0.0 (string)[2]: true / null / false
+(15) 0.0 (string)[3]: true / null / false
+(16) 1 (string): true / null / false
+(16) 1 (string)[2]: true / null / true
+(16) 1 (string)[3]: true / null / true
+(17) Hello World! (string): true / null / true
+(17) Hello World! (string)[2]: true / null / false
+(17) Hello World! (string)[3]: true / null / true
+(18) true (string): true / null / true
+(18) true (string)[2]: true / null / false
+(18) true (string)[3]: true / null / true
+(19) _level0 (string): true / null / true
+(19) _level0 (string)[2]: true / null / false
+(19) _level0 (string)[3]: true / null / true
+(20) äöü (string): true / null / true
+(20) äöü (string)[2]: true / null / false
+(20) äöü (string)[3]: true / null / true
+(21) _level0 (movieclip): true / null / true
+(21) _level0 (movieclip)[2]: true / null / false
+(21) _level0 (movieclip)[3]: true / null / true
+(22) [object Object] (object): true / null / true
+(22) [object Object] (object)[2]: true / null / false
+(22) [object Object] (object)[3]: true / null / true
+(23) Mon Oct 28 21:24:04 GMT+0000 2002 (object): true / null / true
+(23) Mon Oct 28 21:24:04 GMT+0000 2002 (object)[2]: true / null / true
+(23) Mon Oct 28 21:24:04 GMT+0000 2002 (object)[3]: true / null / true
+(24)  (object): true / null / true
+(24)  (object)[2]: true / null / false
+(24)  (object)[3]: true / null / true
+(25) [type Function] (function): true / null / true
+(25) [type Function] (function)[2]: true / null / false
+(25) [type Function] (function)[3]: true / null / true
+(26) [type Object] (object): true / null / true
+valueOf called
+(26) [type Object] (object)[2]: true / null / false
+valueOf called
+(26) [type Object] (object)[3]: true / null / true
+(27) [type Object] (object): true / null / true
+(27) [type Object] (object)[2]: true / null / false
+(27) [type Object] (object)[3]: true / null / true
+(28) [object Object] (object): true / null / true
+valueOf called with 
+(28) [object Object] (object)[2]: true / null / false
+valueOf called with 
+(28) [object Object] (object)[3]: true / null / true
+(29) undefined (object): true / null / true
+(29) undefined (object)[2]: true / null / false
+(29) undefined (object)[3]: true / null / true
+(30) undefined (object): true / null / true
+0: valueOf!
+(30) undefined (object)[2]: true / null / false
+0: valueOf!
+(30) undefined (object)[3]: true / null / true
+(31) null (object): true / null / true
+1: valueOf!
+(31) null (object)[2]: true / null / false
+1: valueOf!
+(31) null (object)[3]: true / null / true
+(32) true (object): true / null / true
+2: valueOf!
+(32) true (object)[2]: true / null / true
+2: valueOf!
+(32) true (object)[3]: true / null / true
+(33) false (object): true / null / true
+3: valueOf!
+(33) false (object)[2]: true / null / false
+3: valueOf!
+(33) false (object)[3]: true / null / false
+(34) 0 (object): true / null / false
+4: valueOf!
+(34) 0 (object)[2]: true / null / false
+4: valueOf!
+(34) 0 (object)[3]: true / null / false
+(35) 1 (object): true / null / false
+5: valueOf!
+(35) 1 (object)[2]: true / null / true
+5: valueOf!
+(35) 1 (object)[3]: true / null / true
+(36) 0.5 (object): true / null / true
+6: valueOf!
+(36) 0.5 (object)[2]: true / null / true
+6: valueOf!
+(36) 0.5 (object)[3]: true / null / true
+(37) -1 (object): true / null / true
+7: valueOf!
+(37) -1 (object)[2]: true / null / true
+7: valueOf!
+(37) -1 (object)[3]: true / null / true
+(38) -0.5 (object): true / null / true
+8: valueOf!
+(38) -0.5 (object)[2]: true / null / true
+8: valueOf!
+(38) -0.5 (object)[3]: true / null / true
+(39) Infinity (object): true / null / true
+9: valueOf!
+(39) Infinity (object)[2]: true / null / true
+9: valueOf!
+(39) Infinity (object)[3]: true / null / true
+(40) -Infinity (object): true / null / true
+10: valueOf!
+(40) -Infinity (object)[2]: true / null / true
+10: valueOf!
+(40) -Infinity (object)[3]: true / null / true
+(41) NaN (object): true / null / true
+11: valueOf!
+(41) NaN (object)[2]: true / null / false
+11: valueOf!
+(41) NaN (object)[3]: true / null / true
+(42)  (object): true / null / true
+12: valueOf!
+(42)  (object)[2]: true / null / false
+12: valueOf!
+(42)  (object)[3]: true / null / true
+(43) 0 (object): true / null / true
+13: valueOf!
+(43) 0 (object)[2]: true / null / false
+13: valueOf!
+(43) 0 (object)[3]: true / null / false
+(44) -0 (object): true / null / false
+14: valueOf!
+(44) -0 (object)[2]: true / null / false
+14: valueOf!
+(44) -0 (object)[3]: true / null / false
+(45) 0.0 (object): true / null / false
+15: valueOf!
+(45) 0.0 (object)[2]: true / null / false
+15: valueOf!
+(45) 0.0 (object)[3]: true / null / false
+(46) 1 (object): true / null / false
+16: valueOf!
+(46) 1 (object)[2]: true / null / true
+16: valueOf!
+(46) 1 (object)[3]: true / null / true
+(47) Hello World! (object): true / null / true
+17: valueOf!
+(47) Hello World! (object)[2]: true / null / false
+17: valueOf!
+(47) Hello World! (object)[3]: true / null / true
+(48) true (object): true / null / true
+18: valueOf!
+(48) true (object)[2]: true / null / false
+18: valueOf!
+(48) true (object)[3]: true / null / true
+(49) _level0 (object): true / null / true
+19: valueOf!
+(49) _level0 (object)[2]: true / null / false
+19: valueOf!
+(49) _level0 (object)[3]: true / null / true
+(50) äöü (object): true / null / true
+20: valueOf!
+(50) äöü (object)[2]: true / null / false
+20: valueOf!
+(50) äöü (object)[3]: true / null / true
+(51) _level0 (object): true / null / true
+21: valueOf!
+(51) _level0 (object)[2]: true / null / false
+21: valueOf!
+(51) _level0 (object)[3]: true / null / true
+(52) [type Object] (object): true / null / true
+22: valueOf!
+(52) [type Object] (object)[2]: true / null / false
+22: valueOf!
+(52) [type Object] (object)[3]: true / null / true
+(53) [type Object] (object): true / null / true
+23: valueOf!
+(53) [type Object] (object)[2]: true / null / false
+23: valueOf!
+(53) [type Object] (object)[3]: true / null / true
+(54) [type Object] (object): true / null / true
+24: valueOf!
+(54) [type Object] (object)[2]: true / null / false
+24: valueOf!
+(54) [type Object] (object)[3]: true / null / true
+(55) [type Object] (object): true / null / true
+25: valueOf!
+(55) [type Object] (object)[2]: true / null / false
+25: valueOf!
+(55) [type Object] (object)[3]: true / null / true
+(56) [type Object] (object): true / null / true
+26: valueOf!
+(56) [type Object] (object)[2]: true / null / false
+26: valueOf!
+(56) [type Object] (object)[3]: true / null / true
+(57) [type Object] (object): true / null / true
+27: valueOf!
+(57) [type Object] (object)[2]: true / null / false
+27: valueOf!
+(57) [type Object] (object)[3]: true / null / true
+(58) [type Object] (object): true / null / true
+28: valueOf!
+(58) [type Object] (object)[2]: true / null / false
+28: valueOf!
+(58) [type Object] (object)[3]: true / null / true
+(59) [type Object] (object): true / null / true
+29: valueOf!
+(59) [type Object] (object)[2]: true / null / false
+29: valueOf!
+(59) [type Object] (object)[3]: true / null / true
diff --git a/test/trace/focusrect-values.as b/test/trace/focusrect-values.as
new file mode 100644
index 0000000..bb0a3dc
--- /dev/null
+++ b/test/trace/focusrect-values.as
@@ -0,0 +1,19 @@
+// makeswf -v 7 -s 200x150 -r 1 -o focusrect-values.swf focusrect-values.as
+
+#include "values.as"
+
+createEmptyMovieClip ("a", 0);
+createEmptyMovieClip ("b", 1);
+trace ("initial: " + a._focusrect + " / " + b._focusrect + " / " + _focusrect);
+for (i = 0; i < values.length; i++) {
+  a._focusrect = values[i];
+  trace (names[i] + ": " + a._focusrect + " / " + b._focusrect + " / " + _focusrect);
+  _focusrect = false;
+  _focusrect = values[i];
+  trace (names[i] + "[2]: " + a._focusrect + " / " + b._focusrect + " / " + _focusrect);
+  _focusrect = true;
+  _focusrect = values[i];
+  trace (names[i] + "[3]: " + a._focusrect + " / " + b._focusrect + " / " + _focusrect);
+}
+
+getURL ("fscommand:quit", "");
commit 709446de2b4c5716d0b7ebfbeea3d1d5412a3d61
Author: Benjamin Otte <otte at gnome.org>
Date:   Mon Mar 31 23:12:14 2008 +0200

    fix _focusrect to work in Flash 5, too

diff --git a/swfdec/swfdec_movie_asprops.c b/swfdec/swfdec_movie_asprops.c
index 3d9f0a4..55b8462 100644
--- a/swfdec/swfdec_movie_asprops.c
+++ b/swfdec/swfdec_movie_asprops.c
@@ -401,6 +401,7 @@ mc_url_get (SwfdecMovie *movie, SwfdecAsValue *rval)
 static void
 mc_focusrect_get (SwfdecMovie *movie, SwfdecAsValue *rval)
 {
+  SwfdecAsContext *cx;
   SwfdecActor *actor;
   
   if (!SWFDEC_IS_ACTOR (movie)) {
@@ -408,15 +409,20 @@ mc_focusrect_get (SwfdecMovie *movie, SwfdecAsValue *rval)
     return;
   }
   actor = SWFDEC_ACTOR (movie);
+  cx = SWFDEC_AS_OBJECT (actor)->context;
 
   switch (actor->focusrect) {
     case SWFDEC_FLASH_YES:
-      SWFDEC_AS_VALUE_SET_BOOLEAN (rval, TRUE);
-      //SWFDEC_AS_VALUE_SET_INTEGER (rval, 1);
+      if (cx->version > 5)
+	SWFDEC_AS_VALUE_SET_BOOLEAN (rval, TRUE);
+      else
+	SWFDEC_AS_VALUE_SET_INT (rval, 1);
       break;
     case SWFDEC_FLASH_NO:
-      SWFDEC_AS_VALUE_SET_BOOLEAN (rval, FALSE);
-      //SWFDEC_AS_VALUE_SET_INTEGER (rval, 0);
+      if (cx->version > 5)
+	SWFDEC_AS_VALUE_SET_BOOLEAN (rval, FALSE);
+      else
+	SWFDEC_AS_VALUE_SET_INT (rval, 0);
       break;
     case SWFDEC_FLASH_MAYBE:
       SWFDEC_AS_VALUE_SET_NULL (rval);
@@ -446,10 +452,14 @@ mc_focusrect_set (SwfdecMovie *movie, const SwfdecAsValue *val)
       return;
     b = SWFDEC_FLASH_MAYBE;
   } else {
-    if (movie->parent == NULL)
-      b = swfdec_as_value_to_number (cx, val) ? SWFDEC_FLASH_YES : SWFDEC_FLASH_NO;
-    else
+    if (movie->parent == NULL) {
+      double d = swfdec_as_value_to_number (cx, val);
+      if (isnan (d))
+	return;
+      b = d ? SWFDEC_FLASH_YES : SWFDEC_FLASH_NO;
+    } else {
       b = swfdec_as_value_to_boolean (cx, val) ? SWFDEC_FLASH_YES : SWFDEC_FLASH_NO;
+    }
   }
 
   if (b != actor->focusrect) {
commit db3da08da3aefaa2d1d6d1e04de261cd0b37f412
Author: Benjamin Otte <otte at gnome.org>
Date:   Mon Mar 31 21:56:50 2008 +0200

    implement _focusrect

diff --git a/swfdec/swfdec_actor.h b/swfdec/swfdec_actor.h
index 79e19b3..d315f6e 100644
--- a/swfdec/swfdec_actor.h
+++ b/swfdec/swfdec_actor.h
@@ -41,6 +41,8 @@ struct _SwfdecActor
 
   /* static properties (set by PlaceObject tags) */
   SwfdecEventList *	events;			/* events queued on this movie */
+
+  SwfdecFlashBool	focusrect;		/* if we should draw a focus rectangle or not */
 };
 
 struct _SwfdecActorClass
diff --git a/swfdec/swfdec_movie.h b/swfdec/swfdec_movie.h
index a5d3bbb..f0f12d4 100644
--- a/swfdec/swfdec_movie.h
+++ b/swfdec/swfdec_movie.h
@@ -47,6 +47,12 @@ typedef enum {
   SWFDEC_MOVIE_STATE_DESTROYED		/* swfdec_movie_destroy has been called */
 } SwfdecMovieState;
 
+typedef enum {
+  SWFDEC_FLASH_MAYBE = 0,
+  SWFDEC_FLASH_YES,
+  SWFDEC_FLASH_NO
+} SwfdecFlashBool;
+
 #define SWFDEC_BLEND_MODE_NORMAL	1
 #define SWFDEC_BLEND_MODE_LAYER		2
 #define SWFDEC_BLEND_MODE_MULTIPLY	3
diff --git a/swfdec/swfdec_movie_asprops.c b/swfdec/swfdec_movie_asprops.c
index 377b9df..3d9f0a4 100644
--- a/swfdec/swfdec_movie_asprops.c
+++ b/swfdec/swfdec_movie_asprops.c
@@ -398,6 +398,66 @@ mc_url_get (SwfdecMovie *movie, SwfdecAsValue *rval)
 	swfdec_url_get_url (swfdec_loader_get_url (movie->resource->loader))));
 }
 
+static void
+mc_focusrect_get (SwfdecMovie *movie, SwfdecAsValue *rval)
+{
+  SwfdecActor *actor;
+  
+  if (!SWFDEC_IS_ACTOR (movie)) {
+    SWFDEC_FIXME ("should not be possible to get _focusrect on non-actors");
+    return;
+  }
+  actor = SWFDEC_ACTOR (movie);
+
+  switch (actor->focusrect) {
+    case SWFDEC_FLASH_YES:
+      SWFDEC_AS_VALUE_SET_BOOLEAN (rval, TRUE);
+      //SWFDEC_AS_VALUE_SET_INTEGER (rval, 1);
+      break;
+    case SWFDEC_FLASH_NO:
+      SWFDEC_AS_VALUE_SET_BOOLEAN (rval, FALSE);
+      //SWFDEC_AS_VALUE_SET_INTEGER (rval, 0);
+      break;
+    case SWFDEC_FLASH_MAYBE:
+      SWFDEC_AS_VALUE_SET_NULL (rval);
+      break;
+    default:
+      g_assert_not_reached();
+  }
+}
+
+static void
+mc_focusrect_set (SwfdecMovie *movie, const SwfdecAsValue *val)
+{
+  SwfdecAsContext *cx;
+  SwfdecActor *actor;
+  SwfdecFlashBool b;
+
+  if (!SWFDEC_IS_ACTOR (movie)) {
+    SWFDEC_FIXME ("should not be possible to get _focusrect on non-actors");
+    return;
+  }
+  cx = SWFDEC_AS_OBJECT (movie)->context;
+  actor = SWFDEC_ACTOR (movie);
+
+  if (SWFDEC_AS_VALUE_IS_UNDEFINED (val) ||
+      SWFDEC_AS_VALUE_IS_NULL (val)) {
+    if (movie->parent == NULL)
+      return;
+    b = SWFDEC_FLASH_MAYBE;
+  } else {
+    if (movie->parent == NULL)
+      b = swfdec_as_value_to_number (cx, val) ? SWFDEC_FLASH_YES : SWFDEC_FLASH_NO;
+    else
+      b = swfdec_as_value_to_boolean (cx, val) ? SWFDEC_FLASH_YES : SWFDEC_FLASH_NO;
+  }
+
+  if (b != actor->focusrect) {
+    actor->focusrect = b;
+    swfdec_movie_invalidate_last (SWFDEC_MOVIE (actor));
+  }
+}
+
 struct {
   gboolean needs_movie;
   const char *name;
@@ -406,28 +466,28 @@ struct {
 } swfdec_movieclip_props[] = {
   { 0, SWFDEC_AS_STR__x,		mc_x_get,	    mc_x_set },
   { 0, SWFDEC_AS_STR__y,		mc_y_get,	    mc_y_set },
-  { 0, SWFDEC_AS_STR__xscale,	mc_xscale_get,	    mc_xscale_set },
-  { 0, SWFDEC_AS_STR__yscale,	mc_yscale_get,	    mc_yscale_set },
-  { 1, SWFDEC_AS_STR__currentframe,mc_currentframe,    NULL },
+  { 0, SWFDEC_AS_STR__xscale,		mc_xscale_get,	    mc_xscale_set },
+  { 0, SWFDEC_AS_STR__yscale,		mc_yscale_get,	    mc_yscale_set },
+  { 1, SWFDEC_AS_STR__currentframe,	mc_currentframe,    NULL },
   { 1, SWFDEC_AS_STR__totalframes,	mc_totalframes,	    NULL },
-  { 0, SWFDEC_AS_STR__alpha,	mc_alpha_get,	    mc_alpha_set },
-  { 0, SWFDEC_AS_STR__visible,	mc_visible_get,	    mc_visible_set },
-  { 0, SWFDEC_AS_STR__width,	mc_width_get,	    mc_width_set },
-  { 0, SWFDEC_AS_STR__height,	mc_height_get,	    mc_height_set },
-  { 0, SWFDEC_AS_STR__rotation,	mc_rotation_get,    mc_rotation_set },
-  { 1, SWFDEC_AS_STR__target,	mc_target_get,  NULL }, //"_target"
-  { 1, SWFDEC_AS_STR__framesloaded,mc_framesloaded,    NULL},
-  { 0, SWFDEC_AS_STR__name,	mc_name_get,	    mc_name_set },
-  { 1, SWFDEC_AS_STR__droptarget,	NULL,  NULL }, //"_droptarget"
-  { 0, SWFDEC_AS_STR__url,	mc_url_get,  NULL },
-  { 0, SWFDEC_AS_STR__highquality,	NULL,  NULL }, //"_highquality"
-  { 0, SWFDEC_AS_STR__focusrect,	NULL,  NULL }, //"_focusrect"
-  { 0, SWFDEC_AS_STR__soundbuftime,NULL,  NULL }, //"_soundbuftime"
-  { 0, SWFDEC_AS_STR__quality,	NULL,  NULL }, //"_quality"
-  { 0, SWFDEC_AS_STR__xmouse,	mc_xmouse_get,	    NULL },
-  { 0, SWFDEC_AS_STR__ymouse,	mc_ymouse_get,	    NULL },
-  { 0, SWFDEC_AS_STR__parent,	mc_parent,	    NULL },
-  { 0, SWFDEC_AS_STR__root,	mc_root,	    NULL },
+  { 0, SWFDEC_AS_STR__alpha,		mc_alpha_get,	    mc_alpha_set },
+  { 0, SWFDEC_AS_STR__visible,		mc_visible_get,	    mc_visible_set },
+  { 0, SWFDEC_AS_STR__width,		mc_width_get,	    mc_width_set },
+  { 0, SWFDEC_AS_STR__height,		mc_height_get,	    mc_height_set },
+  { 0, SWFDEC_AS_STR__rotation,		mc_rotation_get,    mc_rotation_set },
+  { 1, SWFDEC_AS_STR__target,		mc_target_get,	    NULL },
+  { 1, SWFDEC_AS_STR__framesloaded,	mc_framesloaded,    NULL},
+  { 0, SWFDEC_AS_STR__name,		mc_name_get,	    mc_name_set },
+  { 1, SWFDEC_AS_STR__droptarget,	NULL,		    NULL }, //"_droptarget"
+  { 0, SWFDEC_AS_STR__url,		mc_url_get,	    NULL },
+  { 0, SWFDEC_AS_STR__highquality,	NULL,		    NULL }, //"_highquality"
+  { 0, SWFDEC_AS_STR__focusrect,	mc_focusrect_get,   mc_focusrect_set }, //"_focusrect"
+  { 0, SWFDEC_AS_STR__soundbuftime,	NULL,		    NULL }, //"_soundbuftime"
+  { 0, SWFDEC_AS_STR__quality,		NULL,		    NULL }, //"_quality"
+  { 0, SWFDEC_AS_STR__xmouse,		mc_xmouse_get,	    NULL },
+  { 0, SWFDEC_AS_STR__ymouse,		mc_ymouse_get,	    NULL },
+  { 0, SWFDEC_AS_STR__parent,		mc_parent,	    NULL },
+  { 0, SWFDEC_AS_STR__root,		mc_root,	    NULL },
 };
 
 static int
diff --git a/swfdec/swfdec_player.c b/swfdec/swfdec_player.c
index f208987..520580c 100644
--- a/swfdec/swfdec_player.c
+++ b/swfdec/swfdec_player.c
@@ -3298,6 +3298,7 @@ swfdec_player_set_url (SwfdecPlayer *player, const SwfdecURL *url)
       SWFDEC_LOADER_REQUEST_DEFAULT, NULL);
   priv->resource = swfdec_resource_new (player, loader, priv->variables);
   movie = swfdec_movie_new (player, -16384, NULL, priv->resource, NULL, SWFDEC_AS_STR__level0);
+  SWFDEC_ACTOR (movie)->focusrect = SWFDEC_FLASH_YES;
   movie->name = SWFDEC_AS_STR_EMPTY;
   g_object_unref (loader);
   g_object_notify (G_OBJECT (player), "url");
diff --git a/swfdec/swfdec_resource.c b/swfdec/swfdec_resource.c
index 90710cb..6ee756b 100644
--- a/swfdec/swfdec_resource.c
+++ b/swfdec/swfdec_resource.c
@@ -224,6 +224,7 @@ swfdec_resource_create_movie (SwfdecResource *resource)
     /* FIXME: is this correct? */
     movie = swfdec_resource_replace_movie (movie, resource);
   }
+  SWFDEC_ACTOR (movie)->focusrect = SWFDEC_FLASH_YES;
   swfdec_player_unroot (player, resource);
   return TRUE;
 }


More information about the Swfdec-commits mailing list