From ccb91c6da4078ce5d977203f297b0197983a543e Mon Sep 17 00:00:00 2001
From: Mnikolenko ProductEngine <mnikolenko@productengine.com>
Date: Mon, 12 May 2014 11:52:39 +0300
Subject: [PATCH] MAINT-3963 FIXED The behavior of speak button in the
 conversations HUB and toolbar button is consistent now. Use
 setUserPTTState(false) to switch off the mic.

---
 indra/newview/llfloaterimcontainer.cpp | 15 ++++++++++++---
 indra/newview/llfloaterimcontainer.h   |  3 ++-
 indra/newview/llvoicechannel.cpp       |  6 +++---
 3 files changed, 17 insertions(+), 7 deletions(-)

diff --git a/indra/newview/llfloaterimcontainer.cpp b/indra/newview/llfloaterimcontainer.cpp
index a0df37b309c..a4b91e47bb5 100755
--- a/indra/newview/llfloaterimcontainer.cpp
+++ b/indra/newview/llfloaterimcontainer.cpp
@@ -229,7 +229,9 @@ BOOL LLFloaterIMContainer::postBuild()
 	mStubCollapseBtn = getChild<LLButton>("stub_collapse_btn");
 	mStubCollapseBtn->setClickedCallback(boost::bind(&LLFloaterIMContainer::onStubCollapseButtonClicked, this));
     mSpeakBtn = getChild<LLButton>("speak_btn");
-	mSpeakBtn->setClickedCallback(boost::bind(&LLFloaterIMContainer::onSpeakButtonClicked, this));
+
+	mSpeakBtn->setMouseDownCallback(boost::bind(&LLFloaterIMContainer::onSpeakButtonPressed, this));
+	mSpeakBtn->setMouseUpCallback(boost::bind(&LLFloaterIMContainer::onSpeakButtonReleased, this));
 
 	childSetAction("add_btn", boost::bind(&LLFloaterIMContainer::onAddButtonClicked, this));
 
@@ -352,11 +354,18 @@ void LLFloaterIMContainer::onStubCollapseButtonClicked()
 	collapseMessagesPane(true);
 }
 
-void LLFloaterIMContainer::onSpeakButtonClicked()
+void LLFloaterIMContainer::onSpeakButtonPressed()
+{
+	LLVoiceClient::getInstance()->inputUserControlState(true);
+	updateSpeakBtnState();
+}
+
+void LLFloaterIMContainer::onSpeakButtonReleased()
 {
-	LLAgent::toggleMicrophone("speak");
+	LLVoiceClient::getInstance()->inputUserControlState(false);
 	updateSpeakBtnState();
 }
+
 void LLFloaterIMContainer::onExpandCollapseButtonClicked()
 {
 	if (mConversationsPane->isCollapsed() && mMessagesPane->isCollapsed()
diff --git a/indra/newview/llfloaterimcontainer.h b/indra/newview/llfloaterimcontainer.h
index f6d973b9b3b..a3e10dc236a 100755
--- a/indra/newview/llfloaterimcontainer.h
+++ b/indra/newview/llfloaterimcontainer.h
@@ -135,7 +135,8 @@ class LLFloaterIMContainer
 	void onExpandCollapseButtonClicked();
 	void onStubCollapseButtonClicked();
 	void processParticipantsStyleUpdate();
-	void onSpeakButtonClicked();
+	void onSpeakButtonPressed();
+	void onSpeakButtonReleased();
 	/*virtual*/ void onClickCloseBtn(bool app_quitting = false);
 	/*virtual*/ void closeHostedFloater();
 
diff --git a/indra/newview/llvoicechannel.cpp b/indra/newview/llvoicechannel.cpp
index 312842a70ff..48d056b3582 100755
--- a/indra/newview/llvoicechannel.cpp
+++ b/indra/newview/llvoicechannel.cpp
@@ -273,14 +273,14 @@ void LLVoiceChannel::deactivate()
 	if (callStarted())
 	{
 		setState(STATE_HUNG_UP);
-		
+
 		//Default mic is OFF when leaving voice calls
-		if (gSavedSettings.getBOOL("AutoDisengageMic") && 
+		if (gSavedSettings.getBOOL("AutoDisengageMic") &&
 			sCurrentVoiceChannel == this &&
 			LLVoiceClient::getInstance()->getUserPTTState())
 		{
 			gSavedSettings.setBOOL("PTTCurrentlyEnabled", true);
-			LLVoiceClient::getInstance()->inputUserControlState(true);
+			LLVoiceClient::getInstance()->setUserPTTState(false);
 		}
 	}
 	LLVoiceClient::getInstance()->removeObserver(this);
-- 
GitLab