gnash-commit
[Top][All Lists]
Advanced

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

[Gnash-commit] gnash ChangeLog server/movie_root.cpp server/mo...


From: Sandro Santilli
Subject: [Gnash-commit] gnash ChangeLog server/movie_root.cpp server/mo...
Date: Thu, 02 Aug 2007 22:07:26 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Sandro Santilli <strk>  07/08/02 22:07:26

Modified files:
        .              : ChangeLog 
        server         : movie_root.cpp movie_root.h 

Log message:
                * server/movie_root.{cpp,h}: use a member (and a getter) for 
the global
                  key object, and properly mark it as alive.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.3924&r2=1.3925
http://cvs.savannah.gnu.org/viewcvs/gnash/server/movie_root.cpp?cvsroot=gnash&r1=1.80&r2=1.81
http://cvs.savannah.gnu.org/viewcvs/gnash/server/movie_root.h?cvsroot=gnash&r1=1.69&r2=1.70

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.3924
retrieving revision 1.3925
diff -u -b -r1.3924 -r1.3925
--- ChangeLog   2 Aug 2007 21:23:42 -0000       1.3924
+++ ChangeLog   2 Aug 2007 22:07:25 -0000       1.3925
@@ -1,5 +1,10 @@
 2007-08-02 Sandro Santilli <address@hidden>
 
+       * server/movie_root.{cpp,h}: use a member (and a getter) for the global
+         key object, and properly mark it as alive.
+
+2007-08-02 Sandro Santilli <address@hidden>
+
        * server/edit_text_character.cpp: register statics.
        * server/sprite_instance.cpp: register statics.
        * server/video_stream_instance.cpp: register statics.

Index: server/movie_root.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/movie_root.cpp,v
retrieving revision 1.80
retrieving revision 1.81
diff -u -b -r1.80 -r1.81
--- server/movie_root.cpp       2 Aug 2007 04:57:19 -0000       1.80
+++ server/movie_root.cpp       2 Aug 2007 22:07:25 -0000       1.81
@@ -247,23 +247,19 @@
 
 }
 
-
-
-key_as_object *
-movie_root::notify_global_key(key::code k, bool down)
+boost::intrusive_ptr<key_as_object>
+movie_root::getKeyObject()
 {
        VM& vm = VM::get();
-       if ( vm.getSWFVersion() < 5 )
-       {
-               // Key was added in SWF5
-               return NULL; 
-       }
 
-       static boost::intrusive_ptr<key_as_object> keyobject = NULL;
-       if ( ! keyobject )
+       // TODO: test what happens with the global "Key" object
+       //       is removed or overridden by the user
+
+       if ( ! _keyobject )
        {
-               // This isn't very performant... do we allow user override
-               // of _global.Key, btw ?
+               // This isn't very performant... 
+               // it will keep trying to find it even if impossible
+               // to find.
 
                as_value kval;
                as_object* global = VM::get().getGlobal();
@@ -278,21 +274,36 @@
                        //log_msg("Found member 'Key' in _global: %s", 
kval.to_string());
                        boost::intrusive_ptr<as_object> obj = kval.to_object();
                        //log_msg("_global.Key to_object() : %s @ %p", 
typeid(*obj).name(), obj);
-                       keyobject = boost::dynamic_pointer_cast<key_as_object>( 
obj );
+                       _keyobject = 
boost::dynamic_pointer_cast<key_as_object>( obj );
+               }
                }
+
+       return _keyobject;
+}
+
+
+key_as_object *
+movie_root::notify_global_key(key::code k, bool down)
+{
+       VM& vm = VM::get();
+       if ( vm.getSWFVersion() < 5 )
+       {
+               // Key was added in SWF5
+               return NULL; 
        }
 
+       boost::intrusive_ptr<key_as_object> keyobject = getKeyObject();
        if ( keyobject )
        {
-               if (down) keyobject->set_key_down(k);
-               else keyobject->set_key_up(k);
+               if (down) _keyobject->set_key_down(k);
+               else _keyobject->set_key_up(k);
        }
        else
        {
                log_error("gnash::notify_key_event(): _global.Key doesn't 
exist, or isn't the expected built-in\n");
        }
 
-       return keyobject.get();
+       return _keyobject.get();
 }
 
 bool
@@ -1118,8 +1129,7 @@
 void
 movie_root::markReachableResources() const
 {
-       // Mark root movie as reachable
-       // TODO: mark all levels !!
+       // Mark movie levels as reachable
        for (Levels::const_reverse_iterator i=_movies.rbegin(), 
e=_movies.rend(); i!=e; ++i)
        {
                i->second->setReachable();
@@ -1157,6 +1167,9 @@
                (*i)->setReachable();
        }
 #endif
+
+       // Mark global key object
+       if ( _keyobject ) _keyobject->setReachable();
 }
 #endif // GNASH_USE_GC
 

Index: server/movie_root.h
===================================================================
RCS file: /sources/gnash/gnash/server/movie_root.h,v
retrieving revision 1.69
retrieving revision 1.70
diff -u -b -r1.69 -r1.70
--- server/movie_root.h 18 Jul 2007 23:31:59 -0000      1.69
+++ server/movie_root.h 2 Aug 2007 22:07:26 -0000       1.70
@@ -15,7 +15,7 @@
 // along with this program; if not, write to the Free Software
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
-/* $Id: movie_root.h,v 1.69 2007/07/18 23:31:59 strk Exp $ */
+/* $Id: movie_root.h,v 1.70 2007/08/02 22:07:26 strk Exp $ */
 
 /// \page events_handling Handling of user events
 ///
@@ -539,6 +539,7 @@
     /// - Timer targets (_intervalTimers)
     /// - Resources reachable by ActionQueue code (_actionQueue)
     /// - Key listeners (_keyListeners || m_key_listeners)
+    /// - global Key object (_keyobject)
     ///
     void markReachableResources() const;
 #endif // GNASH_USE_GC
@@ -612,6 +613,9 @@
 #else
     ListenerSet m_key_listeners;
 #endif
+
+    boost::intrusive_ptr<key_as_object> _keyobject;
+
     /// Objects listening for mouse events (down,up,move)
     ListenerSet m_mouse_listeners;
 
@@ -680,6 +684,13 @@
     /// _level<num>
     ///
     void setLevel(unsigned int num, boost::intrusive_ptr<movie_instance> 
movie);
+
+    /// Return the global Key object 
+    //
+    /// @@ might be worth making public
+    ///
+    boost::intrusive_ptr<key_as_object> getKeyObject();
+
 };
 
 




reply via email to

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