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: Tue, 10 Jul 2007 04:59:24 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Sandro Santilli <strk>  07/07/10 04:59:24

Modified files:
        .              : ChangeLog 
        server         : movie_root.cpp movie_root.h 
        server/asobj   : Key.cpp Key.h 

Log message:
                * server/movie_root.{cpp,h}: mark key listeners as reachable.
                * server/asobj/Key.{cpp,h}: mark key listeners as reachable.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.3694&r2=1.3695
http://cvs.savannah.gnu.org/viewcvs/gnash/server/movie_root.cpp?cvsroot=gnash&r1=1.72&r2=1.73
http://cvs.savannah.gnu.org/viewcvs/gnash/server/movie_root.h?cvsroot=gnash&r1=1.63&r2=1.64
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/Key.cpp?cvsroot=gnash&r1=1.26&r2=1.27
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/Key.h?cvsroot=gnash&r1=1.21&r2=1.22

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.3694
retrieving revision 1.3695
diff -u -b -r1.3694 -r1.3695
--- ChangeLog   10 Jul 2007 02:52:42 -0000      1.3694
+++ ChangeLog   10 Jul 2007 04:59:23 -0000      1.3695
@@ -1,3 +1,8 @@
+2007-07-10 Sandro Santilli <address@hidden>
+
+       * server/movie_root.{cpp,h}: mark key listeners as reachable.
+       * server/asobj/Key.{cpp,h}: mark key listeners as reachable.
+
 2007-07-10 Zou Lunkai <address@hidden>
 
        * testsuite/misc-ming.all/key_event_test5.c: new testcase for key 
listeners,

Index: server/movie_root.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/movie_root.cpp,v
retrieving revision 1.72
retrieving revision 1.73
diff -u -b -r1.72 -r1.73
--- server/movie_root.cpp       2 Jul 2007 03:20:34 -0000       1.72
+++ server/movie_root.cpp       10 Jul 2007 04:59:24 -0000      1.73
@@ -673,27 +673,28 @@
 }
 
 #ifdef NEW_KEY_LISTENER_LIST_DESIGN
+
 void movie_root::cleanup_key_listeners()
 {
 #ifdef KEY_LISTENERS_DEBUG
-       size_t prevsize = m_key_listeners.size();
-       log_msg("Cleaning up %u key listeners", m_key_listeners.size());
+       size_t prevsize = _keyListeners.size();
+       log_msg("Cleaning up %u key listeners", _keyListeners.size());
 #endif
 
-       for (std::vector<KeyListener>::iterator iter = _keyListners.begin();
-                iter != _keyListners.end(); )
+       for (std::vector<KeyListener>::iterator iter = _keyListeners.begin();
+                iter != _keyListeners.end(); )
        {
                
                character* ch = dynamic_cast<character*>(iter->get());
                // remove character listener
                if ( ch && ch->isUnloaded() ) 
                {
-                       iter = _keyListners.erase(iter);
+                       iter = _keyListeners.erase(iter);
                }
                // remove non-character listener
                else if(!ch && !iter->isRegistered())
                {
-                       iter = _keyListners.erase(iter);
+                       iter = _keyListeners.erase(iter);
                }
                else
                        ++iter;
@@ -701,17 +702,17 @@
 
 
 #ifdef KEY_LISTENERS_DEBUG
-       size_t currsize = m_key_listeners.size();
+       size_t currsize = _keyListeners.size();
        log_msg("Cleaned up %u listeners (from %u to %u)", prevsize-currsize, 
prevsize, currsize);
 #endif
 }
 
 void movie_root::notify_key_listeners(key::code k, bool down)
 {
-       //log_msg("Notifying " SIZET_FMT " keypress listeners", 
_keyListners.size());
+       //log_msg("Notifying " SIZET_FMT " keypress listeners", 
_keyListeners.size());
 
-       for (std::vector<KeyListener>::iterator iter = _keyListners.begin();
-               iter != _keyListners.end(); ++iter)
+       for (std::vector<KeyListener>::iterator iter = _keyListeners.begin();
+               iter != _keyListeners.end(); ++iter)
        {
                character* ch = dynamic_cast<character*>(iter->get());
                // notify character listeners
@@ -771,8 +772,8 @@
 
 void movie_root::add_key_listener(const KeyListener & listener)
 {
-       std::vector<KeyListener>::iterator end = _keyListners.end();
-    for (std::vector<KeyListener>::iterator iter = _keyListners.begin();
+       std::vector<KeyListener>::iterator end = _keyListeners.end();
+    for (std::vector<KeyListener>::iterator iter = _keyListeners.begin();
          iter != end; ++iter) 
        {
       if ((*iter) == listener) {
@@ -782,15 +783,15 @@
       }
     }
 
-    _keyListners.push_back(listener);
+    _keyListeners.push_back(listener);
 
        assert(testInvariant());
 }
 
 void movie_root::remove_key_listener(const KeyListener& listener)
 {
-       std::vector<KeyListener>::iterator end = _keyListners.end();
-    for (std::vector<KeyListener>::iterator iter = _keyListners.begin();
+       std::vector<KeyListener>::iterator end = _keyListeners.end();
+    for (std::vector<KeyListener>::iterator iter = _keyListeners.begin();
          iter != end; ++iter) 
        {
       if ((*iter) == listener) {
@@ -802,17 +803,16 @@
        assert(testInvariant());
 }
 
-#else
+#else // ndef NEW_KEY_LISTENER_LIST_DESIGN
 
 void movie_root::cleanup_key_listeners()
 {
 #ifdef KEY_LISTENERS_DEBUG
-       size_t prevsize = m_key_listeners.size();
-       log_msg("Cleaning up %u key listeners", m_key_listeners.size());
+       size_t prevsize = _keyListeners.size();
+       log_msg("Cleaning up %u key listeners", _keyListeners.size());
 #endif
 
-       for (ListenerSet::iterator iter = m_key_listeners.begin();
-                        iter != m_key_listeners.end(); )
+       for (ListenerSet::iterator iter = m_key_listeners.begin(); iter != 
m_key_listeners.end(); )
        {
                // TODO: handle non-character objects too !
                character* ch = dynamic_cast<character*>(iter->get());
@@ -830,7 +830,7 @@
        }
 
 #ifdef KEY_LISTENERS_DEBUG
-       size_t currsize = m_key_listeners.size();
+       size_t currsize = _keyListeners.size();
        log_msg("Cleaned up %u listeners (from %u to %u)", prevsize-currsize, 
prevsize, currsize);
 #endif
 }
@@ -882,7 +882,7 @@
        //log_msg("After removing key listener %p, %u listeners are left", 
(void*)listener, m_key_listeners.size());
        assert(testInvariant());
 }
-#endif
+#endif // ndef NEW_KEY_LISTENER_LIST_DESIGN
 
 void movie_root::add_mouse_listener(as_object* listener)
 {
@@ -1071,6 +1071,22 @@
        {
                (*i)->markReachableResources();
        }
+
+#ifdef NEW_KEY_LISTENER_LIST_DESIGN
+       // Mark key listeners
+       for (KeyListeners::const_iterator i=_keyListeners.begin(), 
e=_keyListeners.end();
+                       i != e; ++i)
+       {
+               i->setReachable();
+       }
+#else
+       // Mark key listeners
+       for (ListenerSet::const_iterator i=m_key_listeners.begin(), 
e=m_key_listeners.end();
+                       i != e; ++i)
+       {
+               (*i)->setReachable();
+       }
+#endif
 }
 #endif // GNASH_USE_GC
 

Index: server/movie_root.h
===================================================================
RCS file: /sources/gnash/gnash/server/movie_root.h,v
retrieving revision 1.63
retrieving revision 1.64
diff -u -b -r1.63 -r1.64
--- server/movie_root.h 2 Jul 2007 03:20:34 -0000       1.63
+++ server/movie_root.h 10 Jul 2007 04:59:24 -0000      1.64
@@ -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.63 2007/07/02 03:20:34 strk Exp $ */
+/* $Id: movie_root.h,v 1.64 2007/07/10 04:59:24 strk Exp $ */
 
 /// \page events_handling Handling of user events
 ///
@@ -116,9 +116,19 @@
                /// register the key listener
                void registerUserHandler() { _user_defined_handler_added = 
true; }
 
+#ifdef GNASH_USE_GC
+               /// Mark the wrapped object as reachable
+               void setReachable() const
+               {
+                       if ( _listener ) _listener->setReachable();
+               }
+#endif
+
        private:
+
                /// the listener object, could be a character or a general 
as_object
                boost::intrusive_ptr<as_object> _listener;
+
                /// mark if the object has been registered by Key.addListener()
                bool _user_defined_handler_added;
        };
@@ -468,6 +478,7 @@
        ///     - Mouse entities (m_mouse_button_state)
        ///     - Timer targets (_intervalTimers)
        ///     - Resources reachable by ActionQueue code (_actionQueue)
+       ///     - Key listeners (_keyListeners || m_key_listeners)
        ///
        void markReachableResources() const;
 #endif // GNASH_USE_GC
@@ -537,7 +548,8 @@
 
        /// Objects listening for key events
 #ifdef NEW_KEY_LISTENER_LIST_DESIGN
-       std::vector<KeyListener> _keyListners;
+       typedef std::vector<KeyListener> KeyListeners;
+       KeyListeners _keyListeners;
 #else
        ListenerSet m_key_listeners;
 #endif

Index: server/asobj/Key.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/Key.cpp,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -b -r1.26 -r1.27
--- server/asobj/Key.cpp        1 Jul 2007 10:54:27 -0000       1.26
+++ server/asobj/Key.cpp        10 Jul 2007 04:59:24 -0000      1.27
@@ -148,6 +148,7 @@
     m_unreleased_keys[byte_index] &= ~mask;
 }
 
+#ifndef NEW_KEY_LISTENER_LIST_DESIGN
 void 
 key_as_object::notify_listeners(const event_id key_event_type)
 {
@@ -176,6 +177,7 @@
         call_method(method, NULL /* or root? */, listener.get(), 0, 0);
     }
 }
+#endif // ndef NEW_KEY_LISTENER_LIST_DESIGN
 
 #ifdef NEW_KEY_LISTENER_LIST_DESIGN
 void
@@ -412,5 +414,19 @@
     global.init_member("Key", key_obj);
 }
 
+#ifdef GNASH_USE_GC
+#ifndef NEW_KEY_LISTENER_LIST_DESIGN
+void
+key_as_object::markReachableResources() const
+{
+       for (Listeners::const_iterator i=m_listeners.begin(), 
e=m_listeners.end();
+                       i != e; ++i)
+       {
+               (*i)->setReachable();
+       }
+}
+#endif // ndef NEW_KEY_LISTENER_LIST_DESIGN
+#endif // def GNASH_USE_GC
+
 } // end of gnash namespace
 

Index: server/asobj/Key.h
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/Key.h,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -b -r1.21 -r1.22
--- server/asobj/Key.h  1 Jul 2007 10:54:27 -0000       1.21
+++ server/asobj/Key.h  10 Jul 2007 04:59:24 -0000      1.22
@@ -16,7 +16,7 @@
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 // 
 
-/* $Id: Key.h,v 1.21 2007/07/01 10:54:27 bjacques Exp $ */
+/* $Id: Key.h,v 1.22 2007/07/10 04:59:24 strk Exp $ */
 
 #ifndef __KEY_H__
 #define __KEY_H__
@@ -38,9 +38,12 @@
 #endif
 
 namespace gnash {
+
 #ifdef NEW_KEY_LISTENER_LIST_DESIGN
 class KeyListener; //forward declaration
 #endif
+
+// TODO: drop this, probably unused
 class DSOEXPORT Key {
 public:
     Key();
@@ -100,9 +103,25 @@
 private:
        /// bit-array for recording the unreleased keys
        uint8_t m_unreleased_keys[key::KEYCOUNT / 8 + 1];       
-       std::vector<boost::intrusive_ptr<as_object> >   m_listeners;
+
+#ifndef NEW_KEY_LISTENER_LIST_DESIGN
+       typedef std::vector<boost::intrusive_ptr<as_object> > Listeners;
+       Listeners m_listeners;
+#endif
+
        int     m_last_key_pressed;
 
+protected:
+
+#ifdef GNASH_USE_GC
+#ifndef NEW_KEY_LISTENER_LIST_DESIGN
+       // Mark all key listeners as reachable
+       // (this class has no direct pointer to listeners when
+       //  NEW_KEY_LISTENER_LIST_DESIGN is defined)
+       void markReachableResources() const;
+#endif // ndef NEW_KEY_LISTENER_LIST_DESIGN
+#endif // def GNASH_USE_GC
+
 public:
 
        key_as_object();
@@ -113,9 +132,11 @@
 
        void set_key_up(int code);
        
+#ifndef NEW_KEY_LISTENER_LIST_DESIGN
        /// responsible for user defined key events handlers only;
        /// take over both characters and non-characters object.
        void notify_listeners(const event_id key_event_type);
+#endif // ndef NEW_KEY_LISTENER_LIST_DESIGN
 
 #ifdef NEW_KEY_LISTENER_LIST_DESIGN
        void add_listener(const KeyListener& listener);




reply via email to

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