[Top][All Lists]
[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);