From 20e9e6b57e52973ccb12b45da05e69bcaa88d736 Mon Sep 17 00:00:00 2001
From: Dmitry Zaporozhan <dzaporozhan@productengine.com>
Date: Fri, 5 Feb 2010 11:46:34 +0200
Subject: [PATCH] Fixed normal bug EXT-4907 - Two voice indicators are
 displayed in chiclets bar after making second voice call

--HG--
branch : product-engine
---
 indra/newview/llchiclet.cpp           | 6 +++++-
 indra/newview/lloutputmonitorctrl.cpp | 6 ++++++
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp
index f646bcccb58..18bd7b725f3 100644
--- a/indra/newview/llchiclet.cpp
+++ b/indra/newview/llchiclet.cpp
@@ -545,6 +545,7 @@ void LLIMChiclet::toggleSpeakerControl()
 	}
 
 	setRequiredWidth();
+	mSpeakerCtrl->setSpeakerId(LLUUID::null);
 	mSpeakerCtrl->setVisible(getShowSpeaker());
 }
 
@@ -954,7 +955,10 @@ LLIMGroupChiclet::~LLIMGroupChiclet()
 
 void LLIMGroupChiclet::draw()
 {
-	switchToCurrentSpeaker();
+	if(getShowSpeaker())
+	{
+		switchToCurrentSpeaker();
+	}
 	LLIMChiclet::draw();
 }
 
diff --git a/indra/newview/lloutputmonitorctrl.cpp b/indra/newview/lloutputmonitorctrl.cpp
index 388fdeea7af..9857e37bc37 100644
--- a/indra/newview/lloutputmonitorctrl.cpp
+++ b/indra/newview/lloutputmonitorctrl.cpp
@@ -249,6 +249,11 @@ void LLOutputMonitorCtrl::draw()
 
 void LLOutputMonitorCtrl::setSpeakerId(const LLUUID& speaker_id)
 {
+	if (speaker_id.isNull() && mSpeakerId.notNull())
+	{
+		LLSpeakingIndicatorManager::unregisterSpeakingIndicator(mSpeakerId, this);
+	}
+
 	if (speaker_id.isNull() || speaker_id == mSpeakerId) return;
 
 	if (mSpeakerId.notNull())
@@ -256,6 +261,7 @@ void LLOutputMonitorCtrl::setSpeakerId(const LLUUID& speaker_id)
 		// Unregister previous registration to avoid crash. EXT-4782.
 		LLSpeakingIndicatorManager::unregisterSpeakingIndicator(mSpeakerId, this);
 	}
+
 	mSpeakerId = speaker_id;
 	LLSpeakingIndicatorManager::registerSpeakingIndicator(mSpeakerId, this);
 
-- 
GitLab