bool LLFloaterIMPanel::onConfirmForceCloseError(const LLSD& notification, const LLSD& response) { //only 1 option really LLUUID session_id = notification["payload"]["session_id"]; if (gIMMgr) { LLFloaterIMPanel* floaterp = gIMMgr->findFloaterBySession(session_id); if (floaterp) floaterp->close(FALSE); } return false; }
void LLIMMgr::disconnectAllSessions() { LLFloaterIMPanel* floater = NULL; std::set<LLHandle<LLFloater> >::iterator handle_it; for(handle_it = mFloaters.begin(); handle_it != mFloaters.end(); ) { floater = (LLFloaterIMPanel*)handle_it->get(); // MUST do this BEFORE calling floater->onClose() because that may remove the item from the set, causing the subsequent increment to crash. ++handle_it; if (floater) { floater->setEnabled(FALSE); floater->close(TRUE); } } }