Commit Graph

31 Commits

Author SHA1 Message Date
Darragh Coy 0ee1095e37 Fix crashes in event dispatch other related safety checks/fixes
1: Add a fix to prevent events from being sent to scene nodes which are destroyed. Previously when a node was being destroyed it would try to unregister any event listeners it would have. This process would fail however in the case where event dispatching was already underway because we can't modify the listeners list while we are iterating through it. This is a pretty common occurrence since we often tear down & switch scenes in response to button clicks etc. Fix the problem by nulling out the slot for the listener we are removing in this case, so that it's node no longer receives any events after it is destroyed. The event dispatching code will cleanup this unused/nulled slot once the event processing loop has terminated.

2: When removing an event listener in cocos2d::EventDispatcher, ensure immediately it gets removed from the node priority map and dirty nodes set in order to ensure we don't inadvertently access any dangling pointers to nodes.

3: Add debug checks to ensure nodes have no associated event listeners after they are destroyed. This check will catch the problem fixed by (1) if it is still present.

4: Add some extra debug sanity checks in the event dispatcher to ensure nodes are not added to the lists twice and that they are being properly removed from the lists under certain conditions.

5: In cocos2d::Node's destructor NULL out members after releasing them in case they somehow happen to be accessed during the destructor. Move the release of the event dispatcher to the very end, since we need to check against it in debug.
2014-03-26 13:12:44 -07:00
James Chen f3949e078b [EventDispatcher] Adds 'pauseEventListenersForTarget', 'resumeEventListenersForTarget' and 'removeEventListenersForTarget'. 2014-03-02 17:41:18 +08:00
James Chen d33017f27a issue #4129: Adds default argument(nullptr) for dispatchCustomEvent. 2014-02-28 15:40:45 +08:00
James Chen 7774bb4c6c closed #4129: Event listeners in engine shouldn't be removed by method removeAllEventListeners(). 2014-02-28 15:09:53 +08:00
James Chen 8a04fbabf1 issue #4129: EventDispatcher::_listeners -> _listenerMap. 2014-02-28 12:01:47 +08:00
James Chen 4cf4e15ba6 issue #4058: Adds CCStdC.h. 2014-02-20 15:12:35 +08:00
James Chen 5e6130c92c issue #4058: Get rid of Object ,rename it to Ref. 2014-02-20 10:53:49 +08:00
Ricardo Quesada 94ea94a113 global Z order uses floats 2014-01-21 16:36:19 -08:00
James Chen 0f9c3fa59c closed #3789: EventDispatcher supports sorting listeners by global Z and local Z order. And adds relevant test case. 2014-01-21 10:23:05 +08:00
James Chen 0468a1234b A typo fix in EventDispatcher, DirtyFlag::FIXED_PRITORY —> DirtyFlag::FIXED_PRIORITY. 2014-01-20 14:22:30 +08:00
walzer 64af0de648 update copyrights for 2014, in cocos/2d/ folder 2014-01-07 11:25:07 +08:00
James Chen 0082cf3e4d closed #3579: TestLua->BugsTest->bug914 crashes if clicking 'reset' button all the time. 2014-01-04 10:28:09 +08:00
Ricardo Quesada 49903ea779 Director emits events after visit, after draw and after update. And when the projection changes
Adds helper functions on EventDispatcher
Adds test in NewEventDispatcherTest
2013-12-21 10:55:16 -08:00
Ricardo Quesada eea2e70d1e Adds events in director 2013-12-21 00:56:28 -08:00
James Chen 5852c66e5a closed #3463: ListenerID is std::string now. To avoid hash collision when using lots of EventCustoms. 2013-12-20 19:47:11 +08:00
minggo 040c42ebfd use ssize_t for index 2013-12-12 14:48:26 +08:00
minggo b67d567a79 replace long with int or ssize_t 2013-12-05 17:22:22 +08:00
James Chen 424431690a Fixing warning generated by VS2012. 2013-11-20 10:39:30 +08:00
James Chen 296978a9be issue #3069: Separate 'EventDispatcher::removeEventListeners' to 'removeEventListeners' and 'removeCustomEventListeners'. 2013-10-29 14:57:16 +08:00
James Chen 8b7d1934c8 issue #3069: Using enum class for define Event type and EventListener type. 2013-10-28 16:00:01 +08:00
James Chen 48ce5e39fe EventDispatcher is managed by Director now, like Scheduler and ActionManager. 2013-10-26 15:04:01 +08:00
James Chen 6c6757a04e issue #3069: Moving s_eventPriorityIndex to member variable of EventDispatcher. 2013-10-25 17:03:50 +08:00
James Chen 9bf44a6c83 issue #3069: Renaming 'removeListeners' to 'removeEventListeners'. 2013-10-25 16:34:26 +08:00
James Chen 312e1bd27c [Dispatcher] Updating comments. 2013-10-25 15:40:21 +08:00
James Chen 27b71ba73c Use integer as event type and listener type. 2013-10-25 10:53:47 +08:00
James Chen c4f9acbee7 disable DUMP_LISTENER_ITEM_PRIORITY_INFO. use std::unordered_map instead of std::map. 2013-10-25 10:53:47 +08:00
James Chen dc6e201eb6 bug fix for eventdispatcher. 2013-10-25 10:53:46 +08:00
James Chen 1f3863e787 Event Dispatcher refactor commit. TestCpp could run. 2013-10-25 10:53:45 +08:00
James Chen f7e2c63230 Refactor event dispatcher. Remove non-node relative member variables. 2013-10-25 10:53:45 +08:00
minggo 95acb1b9e3 issue #2905: helloworld build ok on android 2013-10-14 14:01:00 +08:00
minggo 49d7bbd600 issue #2905: remove sub folders except platform 2013-10-12 15:41:45 +08:00