gnash-commit
[Top][All Lists]
Advanced

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

[Gnash-commit] gnash ChangeLog server/vm/action.cpp server/aso...


From: Zou Lunkai
Subject: [Gnash-commit] gnash ChangeLog server/vm/action.cpp server/aso...
Date: Thu, 26 Apr 2007 10:56:51 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Zou Lunkai <zoulunkai>  07/04/26 10:56:50

Modified files:
        .              : ChangeLog 
        server/vm      : action.cpp 
        server/asobj   : Key.h Key.cpp 
        server         : button_character_instance.cpp 
                         edit_text_character.cpp character.h 
                         character.cpp sprite_instance.h 
                         sprite_instance.cpp 

Log message:
        attempt to fix the key events, actions order is not considered

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.3000&r2=1.3001
http://cvs.savannah.gnu.org/viewcvs/gnash/server/vm/action.cpp?cvsroot=gnash&r1=1.16&r2=1.17
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/Key.h?cvsroot=gnash&r1=1.13&r2=1.14
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/Key.cpp?cvsroot=gnash&r1=1.21&r2=1.22
http://cvs.savannah.gnu.org/viewcvs/gnash/server/button_character_instance.cpp?cvsroot=gnash&r1=1.44&r2=1.45
http://cvs.savannah.gnu.org/viewcvs/gnash/server/edit_text_character.cpp?cvsroot=gnash&r1=1.61&r2=1.62
http://cvs.savannah.gnu.org/viewcvs/gnash/server/character.h?cvsroot=gnash&r1=1.72&r2=1.73
http://cvs.savannah.gnu.org/viewcvs/gnash/server/character.cpp?cvsroot=gnash&r1=1.38&r2=1.39
http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_instance.h?cvsroot=gnash&r1=1.102&r2=1.103
http://cvs.savannah.gnu.org/viewcvs/gnash/server/sprite_instance.cpp?cvsroot=gnash&r1=1.257&r2=1.258

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.3000
retrieving revision 1.3001
diff -u -b -r1.3000 -r1.3001
--- ChangeLog   26 Apr 2007 10:17:56 -0000      1.3000
+++ ChangeLog   26 Apr 2007 10:56:50 -0000      1.3001
@@ -1,3 +1,20 @@
+2007-04-26 Zou Lunkai <address@hidden>
+       *       server/vm/action.cpp:
+               add is_key_event() method
+       *       server/asobj/Key.{h, cpp}:
+               change notify_listeners() to public; set_key_down() and 
set_key_up()
+               don't trigger event handler now.
+       *       server/button_character_instance.cpp:
+       *       server/edit_text_character.cpp:
+               replace *_keypress_listener() to *_key_listener()
+       *       server/character.{h, cpp},server/movie_root.{h, cpp}
+               trigger onClipKeyUp and onClipKeyDown event handlers
+       *       server/sprite_instance.{h, cpp}
+               bypass user defined key events in on_event(), let the global 
key object 
+               take over user defined key events.      
+       *       testsuite/misc-ming.all/key_event_testrunner.cpp
+               enable all checks
+
 2007-04-26 Sandro Santilli <address@hidden>
 
        * server/as_value.{cpp,h}: to_primitive() made private, and had

Index: server/vm/action.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/vm/action.cpp,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -b -r1.16 -r1.17
--- server/vm/action.cpp        19 Apr 2007 07:09:51 -0000      1.16
+++ server/vm/action.cpp        26 Apr 2007 10:56:50 -0000      1.17
@@ -528,7 +528,6 @@
 {
        switch (m_id)
        {
-               case event_id::KEY_PRESS :
                case event_id::PRESS:
                case event_id::RELEASE:
                case event_id::RELEASE_OUTSIDE:
@@ -544,6 +543,20 @@
        }
 }
 
+bool
+event_id::is_key_event() const
+{
+       switch (m_id)
+       {
+               case event_id::KEY_DOWN:
+               case event_id::KEY_PRESS :
+               case event_id::KEY_UP:
+                       return true;
+               default:
+                       return false;
+       }
+}
+
 // Standard member lookup.
 // TODO: move to character.h ?
 // TODO: case-insensitive search ?

Index: server/asobj/Key.h
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/Key.h,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -b -r1.13 -r1.14
--- server/asobj/Key.h  20 Mar 2007 15:01:20 -0000      1.13
+++ server/asobj/Key.h  26 Apr 2007 10:56:50 -0000      1.14
@@ -16,7 +16,7 @@
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 // 
 
-/* $Id: Key.h,v 1.13 2007/03/20 15:01:20 strk Exp $ */
+/* $Id: Key.h,v 1.14 2007/04/26 10:56:50 zoulunkai Exp $ */
 
 #ifndef __KEY_H__
 #define __KEY_H__
@@ -28,6 +28,7 @@
 #include "tu_config.h"
 #include "as_object.h" // for inheritance
 #include "fn_call.h"
+#include "Event_id.h"
 #include "gnash.h" // for gnash::key namespace
 
 #ifdef WIN32
@@ -99,8 +100,6 @@
        std::vector<boost::intrusive_ptr<as_object> >   m_listeners;
        int     m_last_key_pressed;
 
-       void notify_listeners(const std::string& funcname);
-
 public:
 
        key_as_object();
@@ -111,6 +110,8 @@
 
        void set_key_up(int code);
 
+       void notify_listeners(const event_id key_event_type);
+
        void add_listener(boost::intrusive_ptr<as_object> listener);
 
        void remove_listener(boost::intrusive_ptr<as_object> listener);

Index: server/asobj/Key.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/Key.cpp,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -b -r1.21 -r1.22
--- server/asobj/Key.cpp        18 Apr 2007 11:00:29 -0000      1.21
+++ server/asobj/Key.cpp        26 Apr 2007 10:56:50 -0000      1.22
@@ -132,17 +132,8 @@
            assert(byte_index >= 0 && byte_index < 
int(sizeof(m_keymap)/sizeof(m_keymap[0])));
 
            m_keymap[byte_index] |= mask;
-
-       std::string funcname = event_id(event_id::KEY_DOWN).get_function_name();
-       VM& vm = VM::get();
-       if ( vm.getSWFVersion() < 7 )
-       {
-               boost::to_lower(funcname, vm.getLocale());
-       }
-       notify_listeners(funcname);
 }
 
-
 void
 key_as_object::set_key_up(int code)
 {
@@ -155,20 +146,19 @@
            assert(byte_index >= 0 && byte_index < 
int(sizeof(m_keymap)/sizeof(m_keymap[0])));
 
            m_keymap[byte_index] &= ~mask;
+}
+
+void 
+key_as_object::notify_listeners(const event_id key_event_type)
+{
 
-       std::string funcname = event_id(event_id::KEY_UP).get_function_name();
+       std::string funcname = key_event_type.get_function_name();
        VM& vm = VM::get();
        if ( vm.getSWFVersion() < 7 )
        {
                boost::to_lower(funcname, vm.getLocale());
        }
-       notify_listeners(funcname);
-}
 
-// TODO: take a std::string
-void
-key_as_object::notify_listeners(const std::string& funcname)
-{
     // Notify listeners.
     for (std::vector<boost::intrusive_ptr<as_object> >::iterator iter = 
m_listeners.begin();
          iter != m_listeners.end(); ++iter) {

Index: server/button_character_instance.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/button_character_instance.cpp,v
retrieving revision 1.44
retrieving revision 1.45
diff -u -b -r1.44 -r1.45
--- server/button_character_instance.cpp        19 Apr 2007 17:41:35 -0000      
1.44
+++ server/button_character_instance.cpp        26 Apr 2007 10:56:50 -0000      
1.45
@@ -263,12 +263,12 @@
 
        attachButtonInterface(*this);
 
-       // check up presence KeyPress events
+       // check up presence Key events
        for (unsigned int i = 0; i < m_def->m_button_actions.size(); i++)
        {
                if (m_def->m_button_actions[i].m_conditions & 0xFE00)   // 
check up on CondKeyPress: UB[7]
                {
-                       _vm.getRoot().add_keypress_listener(this);
+                       _vm.getRoot().add_key_listener(this);
                        break;
                }
        }
@@ -277,7 +277,7 @@
 
 button_character_instance::~button_character_instance()
 {
-       _vm.getRoot().remove_keypress_listener(this);
+       _vm.getRoot().remove_key_listener(this);
 }
 
 
@@ -317,7 +317,7 @@
 
 
 
-// called from keypress listener only
+// called from Key listener only
 // (the above line is wrong, it's also called with onConstruct, for instance)
 bool
 button_character_instance::on_event(const event_id& id)

Index: server/edit_text_character.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/edit_text_character.cpp,v
retrieving revision 1.61
retrieving revision 1.62
diff -u -b -r1.61 -r1.62
--- server/edit_text_character.cpp      26 Apr 2007 07:00:29 -0000      1.61
+++ server/edit_text_character.cpp      26 Apr 2007 10:56:50 -0000      1.62
@@ -17,7 +17,7 @@
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 //
 
-/* $Id: edit_text_character.cpp,v 1.61 2007/04/26 07:00:29 strk Exp $ */
+/* $Id: edit_text_character.cpp,v 1.62 2007/04/26 10:56:50 zoulunkai Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -498,7 +498,7 @@
                {
                        if (m_has_focus == false)
                        {
-                               _vm.getRoot().add_keypress_listener(this);
+                               _vm.getRoot().add_key_listener(this);
                                m_has_focus = true;
                                m_cursor = _text.size();
                                format_text();
@@ -512,7 +512,7 @@
                        {
                                movie_root& root = _vm.getRoot();
                                root.set_active_entity(NULL);
-                               root.remove_keypress_listener(this);
+                               root.remove_key_listener(this);
                                m_has_focus = false;
                                format_text();
                        }

Index: server/character.h
===================================================================
RCS file: /sources/gnash/gnash/server/character.h,v
retrieving revision 1.72
retrieving revision 1.73
diff -u -b -r1.72 -r1.73
--- server/character.h  26 Apr 2007 07:00:29 -0000      1.72
+++ server/character.h  26 Apr 2007 10:56:50 -0000      1.73
@@ -18,7 +18,7 @@
 //
 //
 
-/* $Id: character.h,v 1.72 2007/04/26 07:00:29 strk Exp $ */
+/* $Id: character.h,v 1.73 2007/04/26 10:56:50 zoulunkai Exp $ */
 
 #ifndef GNASH_CHARACTER_H
 #define GNASH_CHARACTER_H
@@ -405,7 +405,7 @@
 
        /// Set a built-in function handler for the given event
        //
-       /// Mark the character as having mouse or keypress event
+       /// Mark the character as having mouse or Key event
        /// handlers if this is the case.
        ///
        /// NOTE: this function is only for registering statically-defined
@@ -426,14 +426,14 @@
 
        /// \brief
        /// Call this when a character get equipped
-       /// with a keypress event handler
+       /// with a Key event handler
        //
        /// TODO: provide a function to *unset*
        ///       the flag. This should happen
-       ///       when keypress event handler is
+       ///       when Key event handler is
        ///       set to undefined or equivalent..
        ///
-       virtual void has_keypress_event() {}
+       virtual void has_key_event() {}
 
        /// \brief
        /// Call this when a character get equipped

Index: server/character.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/character.cpp,v
retrieving revision 1.38
retrieving revision 1.39
diff -u -b -r1.38 -r1.39
--- server/character.cpp        26 Apr 2007 07:00:29 -0000      1.38
+++ server/character.cpp        26 Apr 2007 10:56:50 -0000      1.39
@@ -17,7 +17,7 @@
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 // 
 
-/* $Id: character.cpp,v 1.38 2007/04/26 07:00:29 strk Exp $ */
+/* $Id: character.cpp,v 1.39 2007/04/26 10:56:50 zoulunkai Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -619,8 +619,10 @@
        // kind of event is a KEY or MOUSE one 
        switch (id.m_id)
        {
+               case event_id::KEY_DOWN:  
                case event_id::KEY_PRESS:
-                       has_keypress_event();
+               case event_id::KEY_UP:    
+                       has_key_event();
                        break;
                case event_id::MOUSE_UP:
                case event_id::MOUSE_DOWN:
@@ -634,7 +636,7 @@
 
        // todo: drop the character as a listener
        //       if it gets no valid handlers for
-       //       mouse or keypress events.
+       //       mouse or Key events.
 }
 
 std::auto_ptr<ExecutableCode>

Index: server/sprite_instance.h
===================================================================
RCS file: /sources/gnash/gnash/server/sprite_instance.h,v
retrieving revision 1.102
retrieving revision 1.103
diff -u -b -r1.102 -r1.103
--- server/sprite_instance.h    23 Apr 2007 20:05:20 -0000      1.102
+++ server/sprite_instance.h    26 Apr 2007 10:56:50 -0000      1.103
@@ -17,7 +17,7 @@
 // 
 //
 
-/* $Id: sprite_instance.h,v 1.102 2007/04/23 20:05:20 strk Exp $ */
+/* $Id: sprite_instance.h,v 1.103 2007/04/26 10:56:50 zoulunkai Exp $ */
 
 // Stateful live Sprite instance
 
@@ -113,8 +113,8 @@
                TAG_DLIST  = 1<<1
        };
 
-       virtual void has_keypress_event() {
-               m_has_keypress_event = true;
+       virtual void has_key_event() {
+               m_has_key_event = true;
        }
 
        virtual void has_mouse_event();
@@ -755,7 +755,7 @@
        sprite_instance& operator=(const sprite_instance&) { assert(0); return 
*this; }
 
        /// \brief
-       /// Call has_keypress_event() or has_mouse_event()
+       /// Call has_key_event() or has_mouse_event()
        /// if the given string correspond to an event handler
        /// for which registering as a listener of Mouse or Key is needed
        //
@@ -763,7 +763,7 @@
        /// @param name
        ///     Member name. 
        ///
-       void checkForKeyPressOrMouseEvent(const std::string& name);
+       void checkForKeyOrMouseEvent(const std::string& name);
 
        /// Duplicate the object with the specified name
        /// and add it with a new name  at a new depth.
@@ -852,7 +852,8 @@
        /// Increment m_current_frame, and take care of looping.
        void increment_frame_and_check_for_loop();
 
-       bool m_has_keypress_event;
+       /// key events are: KEY_DOWN, KEY_PRESS, KEY_UP
+       bool m_has_key_event;
 
        bool m_has_mouse_event;
 

Index: server/sprite_instance.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/sprite_instance.cpp,v
retrieving revision 1.257
retrieving revision 1.258
diff -u -b -r1.257 -r1.258
--- server/sprite_instance.cpp  24 Apr 2007 22:22:48 -0000      1.257
+++ server/sprite_instance.cpp  26 Apr 2007 10:56:50 -0000      1.258
@@ -1692,7 +1692,7 @@
        m_has_looped(false),
        m_init_actions_executed(),
        m_as_environment(),
-       m_has_keypress_event(false),
+       m_has_key_event(false),
        m_has_mouse_event(false),
        _text_variables(),
        m_sound_stream_id(-1),
@@ -1718,9 +1718,9 @@
 sprite_instance::~sprite_instance()
 {
 
-       if (m_has_keypress_event)
+       if (m_has_key_event)
        {
-               _vm.getRoot().remove_keypress_listener(this);
+               _vm.getRoot().remove_key_listener(this);
        }
 
        if (m_has_mouse_event)
@@ -2109,6 +2109,7 @@
        // Fall through and call the function also, if it's defined!
 
        // Check for member function.
+       if( ! id.is_key_event ())
        {
                boost::intrusive_ptr<as_function> method = 
                        getUserDefinedEventHandler(id.get_function_name());
@@ -2148,7 +2149,7 @@
 
        if ( val.is_function() )
        {
-               checkForKeyPressOrMouseEvent(name);
+               checkForKeyOrMouseEvent(name);
        }
 
        // Try textfield variables
@@ -2352,9 +2353,9 @@
 #endif
                on_event(event_id::LOAD);       // clip onload
 
-               if (m_has_keypress_event)
+               if (m_has_key_event)
                {
-                       _vm.getRoot().add_keypress_listener(this);
+                       _vm.getRoot().add_key_listener(this);
                }
                // Mouse events listening is done in has_mouse_event directly.
                // This shows to work better for attachMovieTest.swf,
@@ -3565,7 +3566,7 @@
 }
 
 void
-sprite_instance::checkForKeyPressOrMouseEvent(const std::string& name)
+sprite_instance::checkForKeyOrMouseEvent(const std::string& name)
 {
        // short-cut
        if ( name.size() < 9 ) return;
@@ -3578,9 +3579,11 @@
 
        const char* ptr = name.c_str();
 
-       if ( ! cmp(ptr, "onkeypress") )
+       if ( ! cmp(ptr, "onKeyDown") 
+               || ! cmp(ptr, "onKeypress") 
+               || ! cmp(ptr, "onKeyUp"))
        {
-               has_keypress_event();
+               has_key_event();
        }
        else if ( ! cmp(ptr, "onMouseDown")
                || ! cmp(ptr, "onMouseUp") 




reply via email to

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