gnash-commit
[Top][All Lists]
Advanced

[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;
 };




reply via email to

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