Commit Graph

70 Commits

Author SHA1 Message Date
James Chen a258df38a9 closed #4744: EventDispatcher::setDirtyForNode doesn't consider node's children 2014-04-10 15:31:22 +08:00
Darragh Coy 117f22d895 Tweak formatting and change spaces to tabs so indentation appears consistent on github. 2014-04-08 08:47:26 -07:00
Darragh Coy 0082900d10 Small dangling pointer tweak/fix to CCEventDispatcher
If cleaning a target node that has a listener in the 'to be added' listeners list then ensure that listener does not have a stale reference to the node. This is a minor tweak in addition to pull request 6160 (https://github.com/cocos2d/cocos2d-x/pull/6160).
2014-04-08 08:46:09 -07:00
James Chen 49bba30409 closed #4710: [win32] Crash in EventDispatcher if game starts up with mouse moving frequently 2014-04-08 15:08:34 +08:00
James Chen 546db2de4a Unregistered listener when it's removed from _toAddedListeners. 2014-04-08 11:17:38 +08:00
Darragh Coy 79b5dff795 CCEventDispatcher crash fix
Fix possible crashes which could be caused by the EventDispatcher having listeners associated with nodes are destroyed. Catch the case where a node registers a listener while we are dispatching events and gets destroyed while that event is still being dispatched. Check the list of nodes to be added into the event dispatcher fully when we are cleaning listeners for a target node.

This issue was found using the extra debug verification in this pull request:
https://github.com/cocos2d/cocos2d-x/pull/6011
2014-04-07 16:19:26 -07:00
dbaack 6262c9c910 Fixed a bug where an event listener removed from the event dispatcher while it is still in the _toAddedListeners vector would never have _isRegistered set to false on removal. This causes it to fail an assert if it is attempted to be added to the event dispatcher again later. 2014-04-06 21:59:40 -07:00
James Chen f6859a3ca9 closed #4557: Adds `EventListener::setEnabled/isEnabled`. 2014-04-03 15:32:16 +08:00
Darragh Coy 0f729126f0 Find another instance where we should null out the node pointer for the current listener after it has been disassociated with the node. 2014-03-27 20:11:37 -07:00
Darragh Coy 83495e6e9b Macro wrap some of the other debug checks related to event listeners. 2014-03-27 15:39:52 -07:00
Darragh Coy c6cd927ea5 When an event listener is removed from the scene and has a node associated with it, NULL out the node pointer so as not to leave any dangling pointers. 2014-03-27 15:37:16 -07:00
Darragh Coy a778d07ecc Undo most of the rest of the event dispatcher related changes in this fix. Will update with a much more elegant solution that does not disturb the existing code so much and which ensures no dangling pointers. 2014-03-27 15:22:11 -07:00
Darragh Coy 824efceb3f Revert "Review feedback: fix memory leak discovered."
This reverts commit 07646f1c82.
2014-03-27 15:14:37 -07:00
Darragh Coy 8ee90389b4 Review feedback: Wrap the debug verification in additional macros which are disabled by default.
Require the user to enable 'CC_NODE_DEBUG_VERIFY_EVENT_LISTENERS' in ccConfig.h in order to enable the debug checks in debug builds.
2014-03-27 12:29:28 -07:00
Darragh Coy 6e19da12c3 Review feedback: Remove unnecessary check of EventListener::getSceneGraphPriority() for fixed event listeners.
Fixed priority event listeners never have an associated node.
2014-03-27 11:59:07 -07:00
Darragh Coy 07646f1c82 Review feedback: fix memory leak discovered.
Always safe release the listener we retain - shift where release happens to the end of the block. Reproduced the leak using the Xcode Leaks instrument in the RemoveListenerAfterAddingTest and verified fixed after apply this change.
2014-03-27 11:28:27 -07:00
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
andyque f5795c25b6 remove warnings under win32 2014-03-24 10:12:40 +08:00
James Chen 183622c718 'EventDispatcherTest/Issue 4129' crashes on Windows. 2014-03-06 10:45:29 +08:00
James Chen 98e1099370 Fixes crash of PerformanceTest/EventDispatcherTest. 2014-03-04 16:43:04 +08:00
James Chen f3949e078b [EventDispatcher] Adds 'pauseEventListenersForTarget', 'resumeEventListenersForTarget' and 'removeEventListenersForTarget'. 2014-03-02 17:41:18 +08:00
James Chen 30d7130eb0 closed #4160: Out of range exception in EventDispatcher 2014-03-02 16:16:03 +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 658cf72d31 issue #4129: Uses 'const reference' when getting touches by EventTouch::getTouches. 2014-02-28 13:43:28 +08:00
James Chen 8a04fbabf1 issue #4129: EventDispatcher::_listeners -> _listenerMap. 2014-02-28 12:01:47 +08:00
James Chen 9a02568eca Some case sensitivity fixes in EventDispatcher. e.g. xxxlisteners -> xxxListeners. 2014-02-10 11:15:56 +08:00
James Chen 8141397bbd closed #3871: event->stopPropagation can't work for EventListenerAllAtOnce. And add relevant test case. 2014-01-27 16:30:20 +08:00
Ricardo Quesada 94ea94a113 global Z order uses floats 2014-01-21 16:36:19 -08:00
Ricardo Quesada 7a8707cb08 Merge branch 'develop' into local_z_Order_fixes
Conflicts:
	cocos/2d/CCNode.cpp
	cocos/2d/CCNode.h
2014-01-21 10:10:50 -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 9f793f8a9b Warning fixes: 1) getZOrder —> getLocalZOrder. 2) long —> int 2014-01-20 15:03:30 +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
James Chen 05b1be3aeb Fixes two memory leaks in EventDispatcher::removeEventListener(removeEventListeners). 2014-01-02 19:59:10 +08:00
James Chen febc19ea8d Some warning fixes on linux. 2013-12-26 23:06:16 -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 3d76281617 Removes an unused assert. 2013-12-20 19:49:25 +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 fa7c97171b fix some warnings 2013-12-06 16:32:06 +08:00
minggo b67d567a79 replace long with int or ssize_t 2013-12-05 17:22:22 +08:00
James Chen 499a0404d4 issue #2790: Renames some functions in Vector<T>. Makes it more like stl vector. 2013-12-05 10:35:10 +08:00
James Chen 9928e8bef1 issue #2790: Uses Vector<T>::getObjectAtIndex instead of Vector<T>[] operator to avoid some mistakes. 2013-12-04 16:01:55 +08:00
James Chen 8aef092005 issue #2790: TestCpp with new Vector<>. 2013-12-04 16:01:54 +08:00
James Chen d4d864216b issue #2790: Deletes Vector::init, adds Vector::setCapacity. 2013-12-04 16:00:18 +08:00
James Chen 90062b656d issue #2790: Node::_children is Vector<Node*> now. 2013-12-04 16:00:17 +08:00
James Chen 424431690a Fixing warning generated by VS2012. 2013-11-20 10:39:30 +08:00
James Chen fd21e3ea38 closed #3106: fixed: EventListeners can't be removed sometimes. 2013-11-02 22:08:08 +08:00
James Chen a4b28353a7 Merge commit 'refs/pull/4069/head' of git://github.com/cocos2d/cocos2d-x into eventdispatcher-fix 2013-11-02 21:47:24 +08:00