From 7669c07572e78b00eb93644a13d221f0eea5f2eb Mon Sep 17 00:00:00 2001
From: Igor Borovkov <iborovkov@productengine.com>
Date: Tue, 5 Jan 2010 15:47:12 +0200
Subject: [PATCH] EXT-3667  Usability : Returning back from mousehook does not
 set the user back to See as Avatar

--HG--
branch : product-engine
---
 indra/newview/llagent.cpp         |  6 +-----
 indra/newview/llfloatercamera.cpp | 25 ++++++++++---------------
 indra/newview/llfloatercamera.h   |  4 +---
 3 files changed, 12 insertions(+), 23 deletions(-)

diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index d2a56f65dd7..5e2e374df65 100644
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -2812,7 +2812,7 @@ void LLAgent::endAnimationUpdateUI()
 
 		LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset);
 
-		LLFloaterCamera::toPrevModeIfInAvatarViewMode();
+		LLFloaterCamera::onLeavingMouseLook();
 
 		// Only pop if we have pushed...
 		if (TRUE == mViewsPushed)
@@ -2915,10 +2915,6 @@ void LLAgent::endAnimationUpdateUI()
 		// JC - Added for always chat in third person option
 		gFocusMgr.setKeyboardFocus(NULL);
 
-		//Making sure Camera Controls floater is in the right state 
-		//when entering Mouse Look using wheel scrolling
-		LLFloaterCamera::updateIfNotInAvatarViewMode();
-
 		LLToolMgr::getInstance()->setCurrentToolset(gMouselookToolset);
 
 		mViewsPushed = TRUE;
diff --git a/indra/newview/llfloatercamera.cpp b/indra/newview/llfloatercamera.cpp
index 764aff68c91..9496e947803 100644
--- a/indra/newview/llfloatercamera.cpp
+++ b/indra/newview/llfloatercamera.cpp
@@ -144,6 +144,11 @@ void  LLPanelCameraZoom::onSliderValueChanged()
 	mSavedSliderVal = val;
 }
 
+void activate_camera_tool()
+{
+	LLToolMgr::getInstance()->setTransientTool(LLToolCamera::getInstance());
+};
+
 //
 // Member functions
 //
@@ -151,7 +156,7 @@ void  LLPanelCameraZoom::onSliderValueChanged()
 /*static*/ bool LLFloaterCamera::inFreeCameraMode()
 {
 	LLFloaterCamera* floater_camera = LLFloaterCamera::findInstance();
-	if (floater_camera && floater_camera->mCurrMode == CAMERA_CTRL_MODE_FREE_CAMERA)
+	if (floater_camera && floater_camera->mCurrMode == CAMERA_CTRL_MODE_FREE_CAMERA && gAgent.getCameraMode() != CAMERA_MODE_MOUSELOOK)
 	{
 		return true;
 	}
@@ -177,27 +182,17 @@ void LLFloaterCamera::update()
 }
 
 
-/*static*/ void LLFloaterCamera::updateIfNotInAvatarViewMode()
-{
-	LLFloaterCamera* floater_camera = LLFloaterCamera::findInstance();
-	if (floater_camera && !floater_camera->inAvatarViewMode()) 
-	{
-		floater_camera->update();
-	}
-}
-
-
 void LLFloaterCamera::toPrevMode()
 {
 	switchMode(mPrevMode);
 }
 
-/*static*/ void LLFloaterCamera::toPrevModeIfInAvatarViewMode()
+/*static*/ void LLFloaterCamera::onLeavingMouseLook()
 {
 	LLFloaterCamera* floater_camera = LLFloaterCamera::findInstance();
-	if (floater_camera && floater_camera->inAvatarViewMode())
+	if (floater_camera && floater_camera->inFreeCameraMode())
 	{
-		floater_camera->toPrevMode();
+		activate_camera_tool();
 	}
 }
 
@@ -325,7 +320,7 @@ void LLFloaterCamera::switchMode(ECameraControlMode mode)
 		break;
 
 	case CAMERA_CTRL_MODE_FREE_CAMERA:
-		LLToolMgr::getInstance()->setTransientTool(LLToolCamera::getInstance());
+		activate_camera_tool();
 		break;
 
 	case CAMERA_CTRL_MODE_AVATAR_VIEW:
diff --git a/indra/newview/llfloatercamera.h b/indra/newview/llfloatercamera.h
index 5d44b4944d0..45d5e9a845a 100644
--- a/indra/newview/llfloatercamera.h
+++ b/indra/newview/llfloatercamera.h
@@ -61,7 +61,7 @@ class LLFloaterCamera
 	/* callback for camera presets changing */
 	static void onClickCameraPresets(const LLSD& param);
 
-	static void toPrevModeIfInAvatarViewMode();
+	static void onLeavingMouseLook();
 
 	/** resets current camera mode to orbit mode */
 	static void resetCameraMode();
@@ -69,8 +69,6 @@ class LLFloaterCamera
 	/* determines actual mode and updates ui */
 	void update();
 	
-	static void updateIfNotInAvatarViewMode();
-
 	virtual void onOpen(const LLSD& key);
 	virtual void onClose(bool app_quitting);
 
-- 
GitLab