[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gnash-commit] gnash ChangeLog server/as_object.cpp server/as_...
From: |
Zou Lunkai |
Subject: |
[Gnash-commit] gnash ChangeLog server/as_object.cpp server/as_... |
Date: |
Fri, 08 Jun 2007 12:11:50 +0000 |
CVSROOT: /sources/gnash
Module name: gnash
Changes by: Zou Lunkai <zoulunkai> 07/06/08 12:11:50
Modified files:
. : ChangeLog
server : as_object.cpp as_object.h
button_character_instance.cpp character.h
edit_text_character.cpp movie_root.cpp
movie_root.h sprite_instance.cpp
server/asobj : Key.cpp Key.h
Log message:
merged two key listener lists into one, for better management of key
events
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.3496&r2=1.3497
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_object.cpp?cvsroot=gnash&r1=1.51&r2=1.52
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_object.h?cvsroot=gnash&r1=1.57&r2=1.58
http://cvs.savannah.gnu.org/viewcvs/gnash/server/button_character_instance.cpp?cvsroot=gnash&r1=1.48&r2=1.49
http://cvs.savannah.gnu.org/viewcvs/gnash/server/character.h?cvsroot=gnash&r1=1.80&r2=1.81
http://cvs.savannah.gnu.org/viewcvs/gnash/server/edit_text_character.cpp?cvsroot=gnash&r1=1.64&r2=1.65
http://cvs.savannah.gnu.org/viewcvs/gnash/server/movie_root.cpp?cvsroot=gnash&r1=1.62&r2=1.63
http://cvs.savannah.gnu.org/viewcvs/gnash/server/movie_root.h?cvsroot=gnash&r1=1.55&r2=1.56
http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_instance.cpp?cvsroot=gnash&r1=1.284&r2=1.285
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/Key.cpp?cvsroot=gnash&r1=1.24&r2=1.25
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/Key.h?cvsroot=gnash&r1=1.18&r2=1.19
Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.3496
retrieving revision 1.3497
diff -u -b -r1.3496 -r1.3497
--- ChangeLog 8 Jun 2007 11:38:16 -0000 1.3496
+++ ChangeLog 8 Jun 2007 12:11:49 -0000 1.3497
@@ -1,3 +1,12 @@
+2007-06-08 Zou Lunkai <address@hidden>
+
+ * server/as_object.{h,cpp}: add a virtual on_event() for event handler.
+ * movie_root.{h,cpp}: add a new KeyListener class.
+ * server/asobj/Key.{h ,cpp}, sprite_instance.cpp,
edit_text_character.cpp,
+ button_character_instance.cpp: adopt new KeyListener interface.
+ * server/character.h: change getUserDefinedEventHandler() from private
to public.
+ all in all, merged two listener lists into one.
+
2007-06-08 Tomas Groth Christensen <address@hidden>
* backend/sound_handler_sdl.cpp: Fixed an assertion fault
Index: server/as_object.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/as_object.cpp,v
retrieving revision 1.51
retrieving revision 1.52
diff -u -b -r1.51 -r1.52
--- server/as_object.cpp 2 Jun 2007 08:56:22 -0000 1.51
+++ server/as_object.cpp 8 Jun 2007 12:11:49 -0000 1.52
@@ -30,7 +30,9 @@
#include "GnashException.h"
#include "fn_call.h" // for generic methods
#include "Object.h" // for getObjectInterface
-
+#ifdef NEW_KEY_LISTENER_LIST_DESIGN
+ #include "action.h" // for call_method
+#endif
#include <set>
#include <string>
#include <boost/algorithm/string/case_conv.hpp>
@@ -616,4 +618,27 @@
return getObjectInterface();
}
+#ifdef NEW_KEY_LISTENER_LIST_DESIGN
+bool
+as_object::on_event(const event_id& id )
+{
+ as_value event_handler;
+
+ std::string handler_name = id.get_function_name();
+
+ if ( _vm.getSWFVersion() < 7 )
+ {
+ boost::to_lower(handler_name, _vm.getLocale());
+ }
+
+ if (get_member(handler_name, &event_handler) )
+ {
+ call_method(event_handler, NULL, this, 0, 0);
+ return true;
+ }
+
+ return false;
+}
+#endif
+
} // end of gnash namespace
Index: server/as_object.h
===================================================================
RCS file: /sources/gnash/gnash/server/as_object.h,v
retrieving revision 1.57
retrieving revision 1.58
diff -u -b -r1.57 -r1.58
--- server/as_object.h 5 Jun 2007 06:07:29 -0000 1.57
+++ server/as_object.h 8 Jun 2007 12:11:49 -0000 1.58
@@ -31,6 +31,10 @@
#include "smart_ptr.h"
#include "as_prop_flags.h" // for enum
#include "GnashException.h"
+#define NEW_KEY_LISTENER_LIST_DESIGN
+#ifdef NEW_KEY_LISTENER_LIST_DESIGN
+ #include "event_id.h" // for event_id
+#endif
#include <sstream>
#if defined(__GNUC__) && __GNUC__ > 2
@@ -166,7 +170,9 @@
{
return set_member_default(name, val);
}
-
+#ifdef NEW_KEY_LISTENER_LIST_DESIGN
+ virtual bool on_event(const event_id& id );
+#endif
/// Initialize a member value
//
/// This method has to be used by built-in classes initialization
Index: server/button_character_instance.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/button_character_instance.cpp,v
retrieving revision 1.48
retrieving revision 1.49
diff -u -b -r1.48 -r1.49
--- server/button_character_instance.cpp 24 May 2007 11:41:00 -0000
1.48
+++ server/button_character_instance.cpp 8 Jun 2007 12:11:49 -0000
1.49
@@ -268,7 +268,11 @@
{
if (m_def->m_button_actions[i].m_conditions & 0xFE00) //
check up on CondKeyPress: UB[7]
{
+#ifdef NEW_KEY_LISTENER_LIST_DESIGN
+ _vm.getRoot().add_key_listener(KeyListener(this));
+#else
_vm.getRoot().add_key_listener(this);
+#endif
break;
}
}
@@ -277,7 +281,11 @@
button_character_instance::~button_character_instance()
{
+#ifdef NEW_KEY_LISTENER_LIST_DESIGN
+ _vm.getRoot().remove_key_listener(KeyListener(this));
+#else
_vm.getRoot().remove_key_listener(this);
+#endif
}
Index: server/character.h
===================================================================
RCS file: /sources/gnash/gnash/server/character.h,v
retrieving revision 1.80
retrieving revision 1.81
diff -u -b -r1.80 -r1.81
--- server/character.h 28 May 2007 15:41:05 -0000 1.80
+++ server/character.h 8 Jun 2007 12:11:50 -0000 1.81
@@ -19,7 +19,7 @@
//
//
-/* $Id: character.h,v 1.80 2007/05/28 15:41:05 ann Exp $ */
+/* $Id: character.h,v 1.81 2007/06/08 12:11:50 zoulunkai Exp $ */
#ifndef GNASH_CHARACTER_H
#define GNASH_CHARACTER_H
@@ -158,7 +158,7 @@
{
return _event_handlers;
}
-
+#ifndef NEW_KEY_LISTENER_LIST_DESIGN
/// Return a user defined event handler, if any
//
/// @param name
@@ -171,7 +171,7 @@
/// casts to an as_function. A NULL pointer otherwise.
///
boost::intrusive_ptr<as_function> getUserDefinedEventHandler(const
std::string& name) const;
-
+#endif
void set_event_handlers(const Events& copyfrom);
/// Used to assign a name to unnamed instances
@@ -1000,6 +1000,9 @@
// override from as_object
virtual std::string get_text_value() const;
+#ifdef NEW_KEY_LISTENER_LIST_DESIGN
+ boost::intrusive_ptr<as_function> getUserDefinedEventHandler(const
std::string& name) const;
+#endif
};
Index: server/edit_text_character.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/edit_text_character.cpp,v
retrieving revision 1.64
retrieving revision 1.65
diff -u -b -r1.64 -r1.65
--- server/edit_text_character.cpp 7 Jun 2007 11:59:56 -0000 1.64
+++ server/edit_text_character.cpp 8 Jun 2007 12:11:50 -0000 1.65
@@ -17,7 +17,7 @@
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
//
-/* $Id: edit_text_character.cpp,v 1.64 2007/06/07 11:59:56 udog Exp $ */
+/* $Id: edit_text_character.cpp,v 1.65 2007/06/08 12:11:50 zoulunkai Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -505,7 +505,11 @@
{
if (m_has_focus == false)
{
+#ifdef NEW_KEY_LISTENER_LIST_DESIGN
+
_vm.getRoot().add_key_listener(KeyListener(this));
+#else
_vm.getRoot().add_key_listener(this);
+#endif
m_has_focus = true;
m_cursor = _text.size();
format_text();
@@ -519,7 +523,11 @@
{
movie_root& root = _vm.getRoot();
root.set_active_entity(NULL);
+#ifdef NEW_KEY_LISTENER_LIST_DESIGN
+ root.remove_key_listener(KeyListener(this));
+#else
root.remove_key_listener(this);
+#endif
m_has_focus = false;
format_text();
}
Index: server/movie_root.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/movie_root.cpp,v
retrieving revision 1.62
retrieving revision 1.63
diff -u -b -r1.62 -r1.63
--- server/movie_root.cpp 29 May 2007 05:19:05 -0000 1.62
+++ server/movie_root.cpp 8 Jun 2007 12:11:50 -0000 1.63
@@ -30,7 +30,9 @@
#include "tu_random.h"
#include "ExecutableCode.h"
#include "Stage.h"
-
+#ifdef NEW_KEY_LISTENER_LIST_DESIGN
+ #include "Action.h"
+#endif
#include <iostream>
#include <string>
#include <typeinfo>
@@ -218,6 +220,7 @@
// Notify character key listeners.
notify_key_listeners(k, down);
+#ifndef NEW_KEY_LISTENER_LIST_DESIGN
// Notify both character and non-character Key listeners
// for user defined handerlers.
// FIXME: this may violates the event order
@@ -231,7 +234,7 @@
else
global_key->notify_listeners(event_id::KEY_UP);
}
-
+#endif
processActionQueue();
return false; // should return true if needs update ...
@@ -569,12 +572,12 @@
timer();
}
}
-
+#ifndef NEW_KEY_LISTENER_LIST_DESIGN
// Cleanup key listeners (remove unloaded characters)
// FIXME: not all key listeners could be cleaned here!
// (eg. characters unloaded by loop-back won't be cleared until next
advancement)
cleanup_key_listeners();
-
+#endif
// 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
@@ -595,7 +598,9 @@
boost::intrusive_ptr<sprite_instance> keepMovieAlive(_movie.get());
_movie->advance(delta_time);
-
+#ifdef NEW_KEY_LISTENER_LIST_DESIGN
+ cleanup_key_listeners();
+#endif
processActionQueue();
#ifdef GNASH_DEBUG
@@ -672,6 +677,138 @@
return _movie->call_method_args(method_name, method_arg_fmt, args);
}
+#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());
+#endif
+
+ for (std::vector<KeyListener>::iterator iter = _keyListners.begin();
+ iter != _keyListners.end(); )
+ {
+
+ character* ch = dynamic_cast<character*>(iter->get());
+ // remove character listener
+ if ( ch && ch->isUnloaded() )
+ {
+ iter = _keyListners.erase(iter);
+ }
+ // remove non-character listener
+ else if(!ch && !iter->isRegistered())
+ {
+ iter = _keyListners.erase(iter);
+ }
+ else
+ ++iter;
+ }
+
+
+#ifdef KEY_LISTENERS_DEBUG
+ size_t currsize = m_key_listeners.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());
+
+ for (std::vector<KeyListener>::iterator iter = _keyListners.begin();
+ iter != _keyListners.end(); ++iter)
+ {
+ character* ch = dynamic_cast<character*>(iter->get());
+ // notify character listeners
+ if ( ch && ! ch->isUnloaded() )
+ {
+ if(down)
+ {
+ // invoke onClipKeyDown handler
+ ch->on_event(event_id(event_id::KEY_DOWN,
key::INVALID));
+
+ if(iter->isRegistered())
+ // invoke onKeyDown handler
+ {
+ boost::intrusive_ptr<as_function>
+ method =
ch->getUserDefinedEventHandler("onKeyDown");
+ if ( method )
+ {
+
call_method0(as_value(method.get()), &(_movie->get_environment()),
_movie.get());
+ }
+ }
+ // invoke onClipKeyPress handler
+ ch->on_event(event_id(event_id::KEY_PRESS, k));
+ }
+ else
+ {
+ //invoke onClipKeyUp handler
+ ch->on_event(event_id(event_id::KEY_UP,
key::INVALID));
+
+ if(iter->isRegistered())
+ // invoke onKeyUp handler
+ {
+ boost::intrusive_ptr<as_function>
+ method =
ch->getUserDefinedEventHandler("onKeyUp");
+ if ( method )
+ {
+
call_method0(as_value(method.get()), &(_movie->get_environment()),
_movie.get());
+ }
+ }
+ }
+ }
+ // notify non-character listeners
+ else
+ {
+ if(down)
+ {
+
iter->get()->on_event(event_id(event_id::KEY_DOWN, key::INVALID));
+ }
+ else
+ {
+
iter->get()->on_event(event_id(event_id::KEY_UP, key::INVALID));
+ }
+ }
+ }
+
+ assert(testInvariant());
+}
+
+void movie_root::add_key_listener(const KeyListener & listener)
+{
+ std::vector<KeyListener>::iterator end = _keyListners.end();
+ for (std::vector<KeyListener>::iterator iter = _keyListners.begin();
+ iter != end; ++iter)
+ {
+ if ((*iter) == listener) {
+ // Already in the list.
+ iter->registerUserHandler();
+ return;
+ }
+ }
+
+ _keyListners.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();
+ iter != end; ++iter)
+ {
+ if ((*iter) == listener) {
+ // Found it
+ iter->unregisterUserHandler();
+ return;
+ }
+ }
+ assert(testInvariant());
+}
+
+#else
+
void movie_root::cleanup_key_listeners()
{
#ifdef KEY_LISTENERS_DEBUG
@@ -750,6 +887,7 @@
//log_msg("After removing key listener %p, %u listeners are left",
(void*)listener, m_key_listeners.size());
assert(testInvariant());
}
+#endif
void movie_root::add_mouse_listener(as_object* listener)
{
Index: server/movie_root.h
===================================================================
RCS file: /sources/gnash/gnash/server/movie_root.h,v
retrieving revision 1.55
retrieving revision 1.56
diff -u -b -r1.55 -r1.56
--- server/movie_root.h 28 May 2007 15:41:06 -0000 1.55
+++ server/movie_root.h 8 Jun 2007 12:11:50 -0000 1.56
@@ -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.55 2007/05/28 15:41:06 ann Exp $ */
+/* $Id: movie_root.h,v 1.56 2007/06/08 12:11:50 zoulunkai Exp $ */
/// \page events_handling Handling of user events
///
@@ -91,6 +91,28 @@
namespace gnash
{
+ #ifdef NEW_KEY_LISTENER_LIST_DESIGN
+class KeyListener{
+ public:
+ KeyListener(boost::intrusive_ptr<as_object> obj, bool
flag=false)
+ : _listener(obj), _user_defined_handler_added(flag)
+ {}
+
+ as_object * get() const { return _listener.get(); }
+
+ bool operator == (const KeyListener & rhs ) const { return
_listener.get() == rhs.get(); }
+ bool operator != (const KeyListener & rhs ) const { return
_listener.get() != rhs.get(); }
+
+ bool isRegistered() const { return _user_defined_handler_added;
}
+ void unregisterUserHandler() { _user_defined_handler_added =
false; }
+ void registerUserHandler() { _user_defined_handler_added =
true; }
+
+ private:
+ boost::intrusive_ptr<as_object> _listener;
+ bool _user_defined_handler_added;
+ };
+#endif
+
/// The absolute top level movie
//
/// This is a wrapper around the top-level movie_instance that is being played.
@@ -372,8 +394,13 @@
void set_userdata(void * ud ) { m_userdata = ud; }
DSOEXPORT void notify_key_listeners(key::code k, bool down);
+#ifdef NEW_KEY_LISTENER_LIST_DESIGN
+ void add_key_listener(const KeyListener& listener);
+ void remove_key_listener(const KeyListener& listener);
+#else
void add_key_listener(as_object* listener);
void remove_key_listener(as_object* listener);
+#endif
DSOEXPORT void notify_mouse_listeners(const event_id& event);
void add_mouse_listener(as_object* listener);
@@ -473,8 +500,11 @@
typedef std::set< boost::intrusive_ptr<as_object> > ListenerSet;
/// Objects listening for key events
+#ifdef NEW_KEY_LISTENER_LIST_DESIGN
+ std::vector<KeyListener> _keyListners;
+#else
ListenerSet m_key_listeners;
-
+#endif
/// Objects listening for mouse events (down,up,move)
ListenerSet m_mouse_listeners;
Index: server/sprite_instance.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/sprite_instance.cpp,v
retrieving revision 1.284
retrieving revision 1.285
diff -u -b -r1.284 -r1.285
--- server/sprite_instance.cpp 7 Jun 2007 07:28:23 -0000 1.284
+++ server/sprite_instance.cpp 8 Jun 2007 12:11:50 -0000 1.285
@@ -1785,7 +1785,11 @@
if (m_has_key_event)
{
+#ifdef NEW_KEY_LISTENER_LIST_DESIGN
+ _vm.getRoot().remove_key_listener(KeyListener(this));
+#else
_vm.getRoot().remove_key_listener(this);
+#endif
}
if (m_has_mouse_event)
@@ -2443,7 +2447,11 @@
if (m_has_key_event)
{
+#ifdef NEW_KEY_LISTENER_LIST_DESIGN
+ _vm.getRoot().add_key_listener(KeyListener(this));
+#else
_vm.getRoot().add_key_listener(this);
+#endif
}
// Mouse events listening is done in has_mouse_event directly.
// This shows to work better for attachMovieTest.swf,
Index: server/asobj/Key.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/Key.cpp,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -b -r1.24 -r1.25
--- server/asobj/Key.cpp 28 May 2007 15:41:07 -0000 1.24
+++ server/asobj/Key.cpp 8 Jun 2007 12:11:50 -0000 1.25
@@ -177,6 +177,19 @@
}
}
+#ifdef NEW_KEY_LISTENER_LIST_DESIGN
+void
+key_as_object::add_listener(const KeyListener& listener)
+{
+ _vm.getRoot().add_key_listener(listener);
+}
+
+void
+key_as_object::remove_listener(const KeyListener& listener)
+{
+ _vm.getRoot().remove_key_listener(listener);
+}
+#else
void
key_as_object::add_listener(boost::intrusive_ptr<as_object> listener)
{
@@ -209,14 +222,36 @@
iter++;
}
}
-
+#endif
int
key_as_object::get_last_key_pressed() const
{
return m_last_key_pressed;
}
+#ifdef NEW_KEY_LISTENER_LIST_DESIGN
+as_value
+key_add_listener(const fn_call& fn)
+{
+ if (fn.nargs < 1)
+ {
+ log_error(_("key_add_listener needs one argument (the listener
object)"));
+ return as_value();
+ }
+
+ boost::intrusive_ptr<as_object> toadd = fn.arg(0).to_object();
+ if (toadd == NULL)
+ {
+ log_error(_("key_add_listener passed a NULL object; ignored"));
+ return as_value();
+ }
+ boost::intrusive_ptr<key_as_object> ko =
ensureType<key_as_object>(fn.this_ptr);
+
+ ko->add_listener(KeyListener(toadd, true));
+ return as_value();
+}
+#else
as_value
key_add_listener(const fn_call& fn)
{
@@ -238,7 +273,7 @@
ko->add_listener(listener);
return as_value();
}
-
+#endif
as_value key_get_ascii(const fn_call& fn)
// Return the ascii value of the last key pressed.
/// FIXME: return the ascii number(not string) of the last pressed key!
@@ -289,7 +324,30 @@
// @@ TODO
return as_value(false);
}
+#ifdef NEW_KEY_LISTENER_LIST_DESIGN
+as_value
+key_remove_listener(const fn_call& fn)
+// Remove a previously-added listener.
+{
+ if (fn.nargs < 1)
+ {
+ log_error(_("key_remove_listener needs one argument (the listener
object)"));
+ return as_value();
+ }
+ boost::intrusive_ptr<as_object> toremove = fn.arg(0).to_object();
+ if (toremove == NULL)
+ {
+ log_error(_("key_remove_listener passed a NULL object; ignored"));
+ return as_value();
+ }
+
+ boost::intrusive_ptr<key_as_object> ko =
ensureType<key_as_object>(fn.this_ptr);
+
+ ko->remove_listener(KeyListener(toremove));
+ return as_value();
+}
+#else
as_value key_remove_listener(const fn_call& fn)
// Remove a previously-added listener.
{
@@ -311,7 +369,7 @@
ko->remove_listener(listener);
return as_value();
}
-
+#endif
void key_class_init(as_object& global)
{
Index: server/asobj/Key.h
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/Key.h,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -b -r1.18 -r1.19
--- server/asobj/Key.h 28 May 2007 15:41:07 -0000 1.18
+++ server/asobj/Key.h 8 Jun 2007 12:11:50 -0000 1.19
@@ -16,7 +16,7 @@
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
//
-/* $Id: Key.h,v 1.18 2007/05/28 15:41:07 ann Exp $ */
+/* $Id: Key.h,v 1.19 2007/06/08 12:11:50 zoulunkai Exp $ */
#ifndef __KEY_H__
#define __KEY_H__
@@ -38,7 +38,9 @@
#endif
namespace gnash {
-
+#ifdef NEW_KEY_LISTENER_LIST_DESIGN
+class KeyListener; //forward declaration
+#endif
class DSOEXPORT Key {
public:
Key();
@@ -115,9 +117,15 @@
/// take over both characters and non-characters object.
void notify_listeners(const event_id key_event_type);
+#ifdef NEW_KEY_LISTENER_LIST_DESIGN
+ void add_listener(const KeyListener& listener);
+
+ void remove_listener(const KeyListener& listener);
+#else
void add_listener(boost::intrusive_ptr<as_object> listener);
void remove_listener(boost::intrusive_ptr<as_object> listener);
+#endif
int get_last_key_pressed() const;
};
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Gnash-commit] gnash ChangeLog server/as_object.cpp server/as_...,
Zou Lunkai <=