CVSROOT: /sources/gnash Module name: gnash Changes by: Sandro Santilli <strk> 07/08/02 22:07:26
Modified files: . : ChangeLog server : movie_root.cpp movie_root.h Log message: * server/movie_root.{cpp,h}: use a member (and a getter) for the global key object, and properly mark it as alive. CVSWeb URLs: http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.3924&r2=1.3925 http://cvs.savannah.gnu.org/viewcvs/gnash/server/movie_root.cpp?cvsroot=gnash&r1=1.80&r2=1.81 http://cvs.savannah.gnu.org/viewcvs/gnash/server/movie_root.h?cvsroot=gnash&r1=1.69&r2=1.70 Patches: Index: ChangeLog =================================================================== RCS file: /sources/gnash/gnash/ChangeLog,v retrieving revision 1.3924 retrieving revision 1.3925 diff -u -b -r1.3924 -r1.3925 --- ChangeLog 2 Aug 2007 21:23:42 -0000 1.3924 +++ ChangeLog 2 Aug 2007 22:07:25 -0000 1.3925 @@ -1,5 +1,10 @@ 2007-08-02 Sandro Santilli <[EMAIL PROTECTED]> + * server/movie_root.{cpp,h}: use a member (and a getter) for the global + key object, and properly mark it as alive. + +2007-08-02 Sandro Santilli <[EMAIL PROTECTED]> + * server/edit_text_character.cpp: register statics. * server/sprite_instance.cpp: register statics. * server/video_stream_instance.cpp: register statics. Index: server/movie_root.cpp =================================================================== RCS file: /sources/gnash/gnash/server/movie_root.cpp,v retrieving revision 1.80 retrieving revision 1.81 diff -u -b -r1.80 -r1.81 --- server/movie_root.cpp 2 Aug 2007 04:57:19 -0000 1.80 +++ server/movie_root.cpp 2 Aug 2007 22:07:25 -0000 1.81 @@ -247,23 +247,19 @@ } - - -key_as_object * -movie_root::notify_global_key(key::code k, bool down) +boost::intrusive_ptr<key_as_object> +movie_root::getKeyObject() { VM& vm = VM::get(); - if ( vm.getSWFVersion() < 5 ) - { - // Key was added in SWF5 - return NULL; - } - static boost::intrusive_ptr<key_as_object> keyobject = NULL; - if ( ! keyobject ) + // TODO: test what happens with the global "Key" object + // is removed or overridden by the user + + if ( ! _keyobject ) { - // This isn't very performant... do we allow user override - // of _global.Key, btw ? + // This isn't very performant... + // it will keep trying to find it even if impossible + // to find. as_value kval; as_object* global = VM::get().getGlobal(); @@ -278,21 +274,36 @@ //log_msg("Found member 'Key' in _global: %s", kval.to_string()); boost::intrusive_ptr<as_object> obj = kval.to_object(); //log_msg("_global.Key to_object() : %s @ %p", typeid(*obj).name(), obj); - keyobject = boost::dynamic_pointer_cast<key_as_object>( obj ); + _keyobject = boost::dynamic_pointer_cast<key_as_object>( obj ); + } } + + return _keyobject; +} + + +key_as_object * +movie_root::notify_global_key(key::code k, bool down) +{ + VM& vm = VM::get(); + if ( vm.getSWFVersion() < 5 ) + { + // Key was added in SWF5 + return NULL; } + boost::intrusive_ptr<key_as_object> keyobject = getKeyObject(); if ( keyobject ) { - if (down) keyobject->set_key_down(k); - else keyobject->set_key_up(k); + if (down) _keyobject->set_key_down(k); + else _keyobject->set_key_up(k); } else { log_error("gnash::notify_key_event(): _global.Key doesn't exist, or isn't the expected built-in\n"); } - return keyobject.get(); + return _keyobject.get(); } bool @@ -1118,8 +1129,7 @@ void movie_root::markReachableResources() const { - // Mark root movie as reachable - // TODO: mark all levels !! + // Mark movie levels as reachable for (Levels::const_reverse_iterator i=_movies.rbegin(), e=_movies.rend(); i!=e; ++i) { i->second->setReachable(); @@ -1157,6 +1167,9 @@ (*i)->setReachable(); } #endif + + // Mark global key object + if ( _keyobject ) _keyobject->setReachable(); } #endif // GNASH_USE_GC Index: server/movie_root.h =================================================================== RCS file: /sources/gnash/gnash/server/movie_root.h,v retrieving revision 1.69 retrieving revision 1.70 diff -u -b -r1.69 -r1.70 --- server/movie_root.h 18 Jul 2007 23:31:59 -0000 1.69 +++ server/movie_root.h 2 Aug 2007 22:07:26 -0000 1.70 @@ -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.69 2007/07/18 23:31:59 strk Exp $ */ +/* $Id: movie_root.h,v 1.70 2007/08/02 22:07:26 strk Exp $ */ /// \page events_handling Handling of user events /// @@ -539,6 +539,7 @@ /// - Timer targets (_intervalTimers) /// - Resources reachable by ActionQueue code (_actionQueue) /// - Key listeners (_keyListeners || m_key_listeners) + /// - global Key object (_keyobject) /// void markReachableResources() const; #endif // GNASH_USE_GC @@ -612,6 +613,9 @@ #else ListenerSet m_key_listeners; #endif + + boost::intrusive_ptr<key_as_object> _keyobject; + /// Objects listening for mouse events (down,up,move) ListenerSet m_mouse_listeners; @@ -680,6 +684,13 @@ /// _level<num> /// void setLevel(unsigned int num, boost::intrusive_ptr<movie_instance> movie); + + /// Return the global Key object + // + /// @@ might be worth making public + /// + boost::intrusive_ptr<key_as_object> getKeyObject(); + }; _______________________________________________ Gnash-commit mailing list Gnash-commit@gnu.org http://lists.gnu.org/mailman/listinfo/gnash-commit