diff options
author | Steven Bennetts <steve@lindenlab.com> | 2009-10-09 00:57:36 +0000 |
---|---|---|
committer | Steven Bennetts <steve@lindenlab.com> | 2009-10-09 00:57:36 +0000 |
commit | f74e3d40fdf2ca82c73490dc5d0cb1dd7b4ec028 (patch) | |
tree | b6c48c771760b77ecb07e305e328769b2e92aef0 /indra/newview | |
parent | 81e0fb43caa27491fa18b17d6a05cafb0e20dfa6 (diff) |
Added safety checks wherever getSpeakerManager() is called.
Removed a meaningless (and misleading) const qualifier to a LLPointer return value.
Added a getter for LLSpeakerMgr::mVoiceChannel to replace some very incorrect code casting LLIMSpeakerMgr to LLVoiceChannelP2P
Reviewed by Leyla
Diffstat (limited to 'indra/newview')
-rw-r--r-- | indra/newview/llimpanel.cpp | 20 | ||||
-rw-r--r-- | indra/newview/llimview.cpp | 11 |
2 files changed, 22 insertions, 9 deletions
diff --git a/indra/newview/llimpanel.cpp b/indra/newview/llimpanel.cpp index 4435bba0ed..99f331d087 100644 --- a/indra/newview/llimpanel.cpp +++ b/indra/newview/llimpanel.cpp @@ -1162,8 +1162,12 @@ void LLFloaterIMPanel::draw() childSetEnabled("start_call_btn", enable_connect); childSetEnabled("send_btn", !childGetValue("chat_editor").asString().empty()); + LLPointer<LLSpeaker> self_speaker; LLIMSpeakerMgr* speaker_mgr = LLIMModel::getInstance()->getSpeakerManager(mSessionUUID); - LLPointer<LLSpeaker> self_speaker = speaker_mgr->findSpeaker(gAgent.getID()); + if (speaker_mgr) + { + self_speaker = speaker_mgr->findSpeaker(gAgent.getID()); + } if(!mTextIMPossible) { mInputEditor->setEnabled(FALSE); @@ -1751,8 +1755,9 @@ void LLFloaterIMPanel::setTyping(BOOL typing) // Will send typing state after a short delay. mSentTypingState = FALSE; } - - speaker_mgr->setSpeakerTyping(gAgent.getID(), TRUE); + + if (speaker_mgr) + speaker_mgr->setSpeakerTyping(gAgent.getID(), TRUE); } else { @@ -1762,7 +1767,8 @@ void LLFloaterIMPanel::setTyping(BOOL typing) sendTypingState(FALSE); mSentTypingState = TRUE; } - speaker_mgr->setSpeakerTyping(gAgent.getID(), FALSE); + if (speaker_mgr) + speaker_mgr->setSpeakerTyping(gAgent.getID(), FALSE); } mTyping = typing; @@ -1822,7 +1828,11 @@ void LLFloaterIMPanel::removeTypingIndicator(const LLIMInfo* im_info) mHistoryEditor->removeTextFromEnd(chars_to_remove); if (im_info) { - LLIMModel::getInstance()->getSpeakerManager(mSessionUUID)->setSpeakerTyping(im_info->mFromID, FALSE); + LLIMSpeakerMgr* speaker_mgr = LLIMModel::getInstance()->getSpeakerManager(mSessionUUID); + if (speaker_mgr) + { + speaker_mgr->setSpeakerTyping(im_info->mFromID, FALSE); + } } } } diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index 7a7b062b5d..6b947b2503 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -1432,12 +1432,15 @@ LLUUID LLIMMgr::addP2PSession(const std::string& name, { LLUUID session_id = addSession(name, IM_NOTHING_SPECIAL, other_participant_id); - LLVoiceChannelP2P* voice_channel = dynamic_cast<LLVoiceChannelP2P*>(LLIMModel::getInstance()->getSpeakerManager(session_id)); - if (voice_channel) + LLIMSpeakerMgr* speaker_mgr = LLIMModel::getInstance()->getSpeakerManager(session_id); + if (speaker_mgr) { - voice_channel->setSessionHandle(voice_session_handle, caller_uri); + LLVoiceChannelP2P* voice_channel = dynamic_cast<LLVoiceChannelP2P*>(speaker_mgr->getVoiceChannel()); + if (voice_channel) + { + voice_channel->setSessionHandle(voice_session_handle, caller_uri); + } } - return session_id; } |