void CCLayer::setModal(bool flag, bool recursive /*= true*/) { CCTouchDispatcher* td = CCTouchDispatcher::sharedDispatcher(); td->Channel()->send(EVT::CC_TOUCH_MODAL, new CCTouchModalEvent(this, flag)); if (flag) td->AddModal(this); else td->RemoveModal(this); if (!recursive) return; if (m_pChildren) { CCObject* child; CCARRAY_FOREACH(m_pChildren, child) { if (dynamic_cast<CCLayer*>(child)) { static_cast<CCLayer*>(child)->setModal(flag, recursive); } else { CCTouchDelegate* delegate = dynamic_cast<CCTouchDelegate*>(child); if (delegate) { if (flag) td->AddModal(delegate); else td->RemoveModal(delegate); } } } } }