diff options
Diffstat (limited to 'indra/newview/lloutputmonitorctrl.cpp')
| -rw-r--r-- | indra/newview/lloutputmonitorctrl.cpp | 19 | 
1 files changed, 15 insertions, 4 deletions
| diff --git a/indra/newview/lloutputmonitorctrl.cpp b/indra/newview/lloutputmonitorctrl.cpp index f816dc589d..d6d48a4ead 100644 --- a/indra/newview/lloutputmonitorctrl.cpp +++ b/indra/newview/lloutputmonitorctrl.cpp @@ -247,12 +247,23 @@ void LLOutputMonitorCtrl::draw()  		gl_rect_2d(0, monh, monw, 0, sColorBound, FALSE);  } -void LLOutputMonitorCtrl::setSpeakerId(const LLUUID& speaker_id) +void LLOutputMonitorCtrl::setSpeakerId(const LLUUID& speaker_id, const LLUUID& session_id/* = LLUUID::null*/)  { +	if (speaker_id.isNull() && mSpeakerId.notNull()) +	{ +		LLSpeakingIndicatorManager::unregisterSpeakingIndicator(mSpeakerId, this); +	} +  	if (speaker_id.isNull() || speaker_id == mSpeakerId) return; +	if (mSpeakerId.notNull()) +	{ +		// Unregister previous registration to avoid crash. EXT-4782. +		LLSpeakingIndicatorManager::unregisterSpeakingIndicator(mSpeakerId, this); +	} +  	mSpeakerId = speaker_id; -	LLSpeakingIndicatorManager::registerSpeakingIndicator(mSpeakerId, this); +	LLSpeakingIndicatorManager::registerSpeakingIndicator(mSpeakerId, this, session_id);  	//mute management  	if (mAutoUpdate) @@ -292,7 +303,7 @@ void LLOutputMonitorCtrl::switchIndicator(bool switch_on)  	}  	// otherwise remember necessary state and mark itself as dirty. -	// State will be applied i next draw when parents chain became visible. +	// State will be applied in next draw when parents chain becomes visible.  	else  	{  		LL_DEBUGS("SpeakingIndicator") << "Indicator is not in visible chain, parent won't be notified: " << mSpeakerId << LL_ENDL; @@ -306,7 +317,7 @@ void LLOutputMonitorCtrl::switchIndicator(bool switch_on)  //////////////////////////////////////////////////////////////////////////  void LLOutputMonitorCtrl::notifyParentVisibilityChanged()  { -	LL_DEBUGS("SpeakingIndicator") << "Notify parent that visibility was changed: " << mSpeakerId << " ,new_visibility: " << getVisible() << LL_ENDL; +	LL_DEBUGS("SpeakingIndicator") << "Notify parent that visibility was changed: " << mSpeakerId << ", new_visibility: " << getVisible() << LL_ENDL;  	LLSD params = LLSD().with("visibility_changed", getVisible()); | 
