gnash-commit
[Top][All Lists]
Advanced

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

[Gnash-commit] gnash ChangeLog server/character.h server/movie...


From: Sandro Santilli
Subject: [Gnash-commit] gnash ChangeLog server/character.h server/movie...
Date: Mon, 02 Apr 2007 09:12:48 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Sandro Santilli <strk>  07/04/02 09:12:48

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

Log message:
                * server/: character.h, sprite_instance.{cpp,h}:
                  Moved the isUnloaded()/_unloaded logic from sprite_instance
                  up to character.
                * server/movie_root.{cpp,h}: remove unloaded characters
                  from the keypress_listeners set (run at ::advance time).

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.2742&r2=1.2743
http://cvs.savannah.gnu.org/viewcvs/gnash/server/character.h?cvsroot=gnash&r1=1.59&r2=1.60
http://cvs.savannah.gnu.org/viewcvs/gnash/server/movie_root.cpp?cvsroot=gnash&r1=1.47&r2=1.48
http://cvs.savannah.gnu.org/viewcvs/gnash/server/movie_root.h?cvsroot=gnash&r1=1.42&r2=1.43
http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_instance.cpp?cvsroot=gnash&r1=1.215&r2=1.216
http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_instance.h?cvsroot=gnash&r1=1.84&r2=1.85

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.2742
retrieving revision 1.2743
diff -u -b -r1.2742 -r1.2743
--- ChangeLog   2 Apr 2007 08:06:57 -0000       1.2742
+++ ChangeLog   2 Apr 2007 09:12:48 -0000       1.2743
@@ -1,5 +1,13 @@
 2007-04-02 Sandro Santilli <address@hidden>
 
+       * server/: character.h, sprite_instance.{cpp,h}:
+         Moved the isUnloaded()/_unloaded logic from sprite_instance
+         up to character.
+       * server/movie_root.{cpp,h}: remove unloaded characters
+         from the keypress_listeners set (run at ::advance time).
+
+2007-04-02 Sandro Santilli <address@hidden>
+
        * server/sprite_instance.cpp (goto_frame): remember to call
          set_invalidated() before running display list tags!
          (UdoG: is this correct?)

Index: server/character.h
===================================================================
RCS file: /sources/gnash/gnash/server/character.h,v
retrieving revision 1.59
retrieving revision 1.60
diff -u -b -r1.59 -r1.60
--- server/character.h  22 Mar 2007 16:56:36 -0000      1.59
+++ server/character.h  2 Apr 2007 09:12:48 -0000       1.60
@@ -18,7 +18,7 @@
 //
 //
 
-/* $Id: character.h,v 1.59 2007/03/22 16:56:36 bjacques Exp $ */
+/* $Id: character.h,v 1.60 2007/04/02 09:12:48 strk Exp $ */
 
 #ifndef GNASH_CHARACTER_H
 #define GNASH_CHARACTER_H
@@ -80,6 +80,10 @@
        /// Used to assign a name to unnamed instances
        static unsigned int _lastUnnamedInstanceNum;
 
+       /// Set to yes when this instance has been unloaded
+       bool _unloaded;
+
+
 protected:
 
        /// Used to assign a name to unnamed instances
@@ -197,6 +201,7 @@
        m_clip_depth(0),
        m_display_callback(NULL),
        m_display_callback_user_ptr(NULL),
+       _unloaded(false),
        m_visible(true),
        m_parent(parent),
        m_invalidated(true),
@@ -647,10 +652,11 @@
        ///
        virtual void unload()
        {
+               _unloaded = true;
                on_event(event_id::UNLOAD);
        }
 
-       
+       bool isUnloaded() { return _unloaded; }
 };
 
 

Index: server/movie_root.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/movie_root.cpp,v
retrieving revision 1.47
retrieving revision 1.48
diff -u -b -r1.47 -r1.48
--- server/movie_root.cpp       30 Mar 2007 09:04:38 -0000      1.47
+++ server/movie_root.cpp       2 Apr 2007 09:12:48 -0000       1.48
@@ -481,6 +481,9 @@
                }
        }
 
+       // Cleanup keypress listeners (remove unloaded characters)
+       cleanup_keypress_listeners();
+
        // random should go continuously that:
        // 1. after restart of the player the situation has not repeated
        // 2. by different machines the random gave different numbers
@@ -578,8 +581,30 @@
        return _movie->call_method_args(method_name, method_arg_fmt, args);
 }
 
+void movie_root::cleanup_keypress_listeners()
+{
+       for (ListenerSet::iterator iter = m_keypress_listeners.begin();
+                        iter != m_keypress_listeners.end(); )
+       {
+               // TODO: handle non-character objects too !
+               character* ch = dynamic_cast<character*>(iter->get());
+               if ( ch && ch->isUnloaded() )
+               {
+                       ListenerSet::iterator toremove = iter;
+                       ++iter;
+                       //log_msg("cleanup_keypress_listeners: Removing 
unloaded keypress listener %p", iter->get());
+                       m_keypress_listeners.erase(toremove);
+               }
+               else
+               {
+                       ++iter;
+               }
+       }
+}
+
 void movie_root::notify_keypress_listeners(key::code k)
 {
+       //log_msg("Notifying %u keypress listeners", 
m_keypress_listeners.size());
        for (ListenerSet::iterator iter = m_keypress_listeners.begin();
                         iter != m_keypress_listeners.end(); ++iter)
        {
@@ -597,13 +622,22 @@
 
 void movie_root::add_keypress_listener(as_object* listener)
 {
-       m_keypress_listeners.insert(listener);
+       if ( m_keypress_listeners.insert(listener).second )
+       {
+               //log_msg("Added keypress listener %p", (void*)listener);
+       }
+       else
+       {
+               //log_msg("Keypress listener %p was already in the known set", 
(void*)listener);
+       }
        assert(testInvariant());
 }
 
 void movie_root::remove_keypress_listener(as_object* listener)
 {
+       //log_msg("Removing keypress listener %p - %u listeners currently ", 
(void*)listener, m_keypress_listeners.size());
        m_keypress_listeners.erase(listener);
+       //log_msg("After removing keypress listener %p, %u listeners are left", 
(void*)listener, m_keypress_listeners.size());
        assert(testInvariant());
 }
 

Index: server/movie_root.h
===================================================================
RCS file: /sources/gnash/gnash/server/movie_root.h,v
retrieving revision 1.42
retrieving revision 1.43
diff -u -b -r1.42 -r1.43
--- server/movie_root.h 29 Mar 2007 12:37:31 -0000      1.42
+++ server/movie_root.h 2 Apr 2007 09:12:48 -0000       1.43
@@ -14,7 +14,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.42 2007/03/29 12:37:31 strk Exp $ */
+/* $Id: movie_root.h,v 1.43 2007/04/02 09:12:48 strk Exp $ */
 
 /// \page events_handling Handling of user events
 ///
@@ -413,6 +413,10 @@
 
 private:
 
+       /// Remove all listeners with a ref-count of 1
+       /// (only referenced as key listeners)
+       void cleanup_keypress_listeners();
+
        /// Return the current Stage object
        //
        /// Can return NULL if it's been deleted or not

Index: server/sprite_instance.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/sprite_instance.cpp,v
retrieving revision 1.215
retrieving revision 1.216
diff -u -b -r1.215 -r1.216
--- server/sprite_instance.cpp  2 Apr 2007 08:06:57 -0000       1.215
+++ server/sprite_instance.cpp  2 Apr 2007 09:12:48 -0000       1.216
@@ -1561,7 +1561,6 @@
                character* parent, int id)
        :
        character(parent, id),
-       _unloaded(false),
        m_mouse_state(UP),
        m_root(r),
        m_display_list(),
@@ -3803,8 +3802,7 @@
 
        UnloaderVisitor visitor;
        m_display_list.visitForward(visitor);
-       on_event(event_id::UNLOAD); // if call_unload
-       _unloaded=true;
+       character::unload();
 
 }
 

Index: server/sprite_instance.h
===================================================================
RCS file: /sources/gnash/gnash/server/sprite_instance.h,v
retrieving revision 1.84
retrieving revision 1.85
diff -u -b -r1.84 -r1.85
--- server/sprite_instance.h    2 Apr 2007 06:18:41 -0000       1.84
+++ server/sprite_instance.h    2 Apr 2007 09:12:48 -0000       1.85
@@ -17,7 +17,7 @@
 // 
 //
 
-/* $Id: sprite_instance.h,v 1.84 2007/04/02 06:18:41 zoulunkai Exp $ */
+/* $Id: sprite_instance.h,v 1.85 2007/04/02 09:12:48 strk Exp $ */
 
 // Stateful live Sprite instance
 
@@ -693,8 +693,6 @@
        /// @} Drawing API
        
 
-       bool isUnloaded() { return _unloaded; }
-
        typedef std::map<std::string, std::string> VariableMap;
 
        /// Set all variables in the given map with their corresponding values
@@ -712,9 +710,6 @@
        ///
        void queueActions(ActionList& action_list);
 
-       /// Set to yes when this instance has been unloaded
-       bool _unloaded;
-
        /// Execute a single action buffer (DOACTION block)
        void execute_action(action_buffer& ab);
 




reply via email to

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