From 1361d950561d03b9aa5f968cb38bff4e24fcd27f Mon Sep 17 00:00:00 2001
From: Mike Antipov <mantipov@productengine.com>
Date: Thu, 15 Apr 2010 16:31:47 +0300
Subject: Updated fix for major bug EXT-6786 ('Stand' button is corrupted if
 movement control floater is opened)

Added force hiding of Stand button to avoid seeing Stand & Move buttons at once for a short moment.

Reviewed by Vadim Savchuk at https://codereview.productengine.com/secondlife/r/233/

--HG--
branch : product-engine
---
 indra/newview/llmoveview.cpp | 1 +
 1 file changed, 1 insertion(+)

diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp
index 4ccf5e1c7b..0ddc4efc81 100644
--- a/indra/newview/llmoveview.cpp
+++ b/indra/newview/llmoveview.cpp
@@ -697,6 +697,7 @@ void LLPanelStandStopFlying::onStandButtonClick()
 	gAgent.setControlFlags(AGENT_CONTROL_STAND_UP);
 
 	setFocus(FALSE); // EXT-482
+	mStandButton->setVisible(FALSE); // force visibility changing to avoid seeing Stand & Move buttons at once.
 }
 
 void LLPanelStandStopFlying::onStopFlyingButtonClick()
-- 
cgit v1.2.3


From 2347cf356e24eddba6dc8fb61dc37a3e1bcb8ac4 Mon Sep 17 00:00:00 2001
From: Eugene Mutavchi <emutavchi@productengine.com>
Date: Thu, 15 Apr 2010 17:06:04 +0300
Subject: Fixed critical EXT-6793 (/me does not work on Debug Channel) - added
 handling of "/me " and "/me'" messages by LLFloaterScriptDebug. Reviewed by
 Mike Antipov at https://codereview.productengine.com/secondlife/r/237/

--HG--
branch : product-engine
---
 indra/newview/llfloaterscriptdebug.cpp | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/indra/newview/llfloaterscriptdebug.cpp b/indra/newview/llfloaterscriptdebug.cpp
index eeea71cc4c..d6732a9d5c 100644
--- a/indra/newview/llfloaterscriptdebug.cpp
+++ b/indra/newview/llfloaterscriptdebug.cpp
@@ -104,6 +104,10 @@ void LLFloaterScriptDebug::addScriptLine(const std::string &utf8mesg, const std:
 	LLViewerObject* objectp = gObjectList.findObject(source_id);
 	std::string floater_label;
 
+	// Handle /me messages.
+	std::string prefix = utf8mesg.substr(0, 4);
+	std::string message = (prefix == "/me " || prefix == "/me'") ? user_name + utf8mesg.substr(3) : utf8mesg;
+
 	if (objectp)
 	{
 		objectp->setIcon(LLViewerTextureManager::getFetchedTextureFromFile("script_error.j2c", TRUE, LLViewerTexture::BOOST_UI));
@@ -121,14 +125,14 @@ void LLFloaterScriptDebug::addScriptLine(const std::string &utf8mesg, const std:
 	LLFloaterScriptDebugOutput* floaterp = 	LLFloaterReg::getTypedInstance<LLFloaterScriptDebugOutput>("script_debug_output", LLUUID::null);
 	if (floaterp)
 	{
-		floaterp->addLine(utf8mesg, user_name, color);
+		floaterp->addLine(message, user_name, color);
 	}
 	
 	// add to specific script instance floater
 	floaterp = LLFloaterReg::getTypedInstance<LLFloaterScriptDebugOutput>("script_debug_output", source_id);
 	if (floaterp)
 	{
-		floaterp->addLine(utf8mesg, floater_label, color);
+		floaterp->addLine(message, floater_label, color);
 	}
 }
 
-- 
cgit v1.2.3


From 7c170abf52813aa45e9bee656e3b5c12d7fbf47e Mon Sep 17 00:00:00 2001
From: Loren Shih <seraph@lindenlab.com>
Date: Thu, 15 Apr 2010 14:38:24 -0400
Subject: EXT-6847 : Deafult configuration has Away timeout set to "Never"

Imported from 2.1 into 2.0.1.  This fix is a safe change and gives Residents useful information about why an avatar is a cloud (e.g. because the avatar minimized his window and hence is "away").
---
 indra/newview/app_settings/settings.xml | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 55e28fc59b..bebf6678d4 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -4,13 +4,14 @@
     <key>AFKTimeout</key>
     <map>
       <key>Comment</key>
-      <string>Time before automatically setting AFK (away from keyboard) mode (seconds, 0=never)</string>
+      <string>Time before automatically setting AFK (away from keyboard) mode (seconds, 0=never).
+	  Valid values are: 0, 120, 300, 600, 1800</string>	  
       <key>Persist</key>
       <integer>1</integer>
       <key>Type</key>
       <string>S32</string>
       <key>Value</key>
-      <real>0</real>
+      <real>300</real>
     </map>
     <key>AdvanceSnapshot</key>
     <map>
-- 
cgit v1.2.3


From 384c954fb7f6fef583998f87968c01a831911a49 Mon Sep 17 00:00:00 2001
From: Loren Shih <seraph@lindenlab.com>
Date: Thu, 15 Apr 2010 15:00:13 -0400
Subject: EXT-6877 : Show avatar-as-cloud as "Loading..." in nametag

If you or others are a cloud, then your nametag will include a "(Loading...)" string.
Note: this required a small bit of code refactor so that you can query if an avatar (yourself or others) is a cloud; this was basically a rename from updateIsFullyLoaded into getIsCloud.
---
 indra/newview/llvoavatar.cpp     | 54 +++++++++++++++++++++-------------------
 indra/newview/llvoavatar.h       |  4 ++-
 indra/newview/llvoavatarself.cpp | 22 ++++++++--------
 indra/newview/llvoavatarself.h   |  2 +-
 4 files changed, 43 insertions(+), 39 deletions(-)

diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index f5e83ed025..981dd14093 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -655,6 +655,7 @@ LLVOAvatar::LLVOAvatar(const LLUUID& id,
 	mNameMute(FALSE),
 	mRenderGroupTitles(sRenderGroupTitles),
 	mNameAppearance(FALSE),
+	mNameCloud(FALSE),
 	mFirstTEMessageReceived( FALSE ),
 	mFirstAppearanceMessageReceived( FALSE ),
 	mCulled( FALSE ),
@@ -2769,25 +2770,20 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last)
 
 		if (mNameText.notNull() && firstname && lastname)
 		{
-			BOOL is_away = mSignaledAnimations.find(ANIM_AGENT_AWAY)  != mSignaledAnimations.end();
-			BOOL is_busy = mSignaledAnimations.find(ANIM_AGENT_BUSY) != mSignaledAnimations.end();
-			BOOL is_appearance = mSignaledAnimations.find(ANIM_AGENT_CUSTOMIZE) != mSignaledAnimations.end();
-			BOOL is_muted;
-			if (isSelf())
-			{
-				is_muted = FALSE;
-			}
-			else
-			{
-				is_muted = LLMuteList::getInstance()->isMuted(getID());
-			}
+			const BOOL is_away = mSignaledAnimations.find(ANIM_AGENT_AWAY)  != mSignaledAnimations.end();
+			const BOOL is_busy = mSignaledAnimations.find(ANIM_AGENT_BUSY) != mSignaledAnimations.end();
+			const BOOL is_appearance = mSignaledAnimations.find(ANIM_AGENT_CUSTOMIZE) != mSignaledAnimations.end();
+			const BOOL is_muted = isSelf() ? FALSE : LLMuteList::getInstance()->isMuted(getID());
+			const BOOL is_cloud = getIsCloud();
 
 			if (mNameString.empty() ||
 				new_name ||
 				(!title && !mTitle.empty()) ||
 				(title && mTitle != title->getString()) ||
 				(is_away != mNameAway || is_busy != mNameBusy || is_muted != mNameMute)
-				|| is_appearance != mNameAppearance)
+				|| is_appearance != mNameAppearance 
+				|| is_cloud != mNameCloud
+				)
 			{
 				std::string line;
 				if (!sRenderGroupTitles)
@@ -2841,7 +2837,12 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last)
 					}
 					line += ")";
 				}
-				if (is_appearance)
+				if (is_cloud)
+				{
+					line += "\n";
+					line += "(" + LLTrans::getString("LoadingData") + ")";
+				}
+				else if (is_appearance)
 				{
 					line += "\n";
 					line += LLTrans::getString("AvatarEditingAppearance");
@@ -2850,6 +2851,7 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last)
 				mNameBusy = is_busy;
 				mNameMute = is_muted;
 				mNameAppearance = is_appearance;
+				mNameCloud = is_cloud;
 				mTitle = title ? title->getString() : "";
 				LLStringFn::replace_ascii_controlchars(mTitle,LL_UNKNOWN_CHAR);
 				mNameString = utf8str_to_wstring(line);
@@ -5823,27 +5825,29 @@ BOOL LLVOAvatar::isVisible() const
 		&& (mDrawable->isVisible() || mIsDummy);
 }
 
-// call periodically to keep isFullyLoaded up to date.
-// returns true if the value has changed.
-BOOL LLVOAvatar::updateIsFullyLoaded()
+// Determine if we have enough avatar data to render
+BOOL LLVOAvatar::getIsCloud()
 {
-    // a "heuristic" to determine if we have enough avatar data to render
-    // (to avoid rendering a "Ruth" - DEV-3168)
-	BOOL loading = FALSE;
-
-	// do we have a shape?
+	// Do we have a shape?
 	if (visualParamWeightsAreDefault())
 	{
-		loading = TRUE;
+		return TRUE;
 	}
 
 	if (!isTextureDefined(TEX_LOWER_BAKED) || 
 		!isTextureDefined(TEX_UPPER_BAKED) || 
 		!isTextureDefined(TEX_HEAD_BAKED))
 	{
-		loading = TRUE;
+		return TRUE;
 	}
-	
+	return FALSE;
+}
+
+// call periodically to keep isFullyLoaded up to date.
+// returns true if the value has changed.
+BOOL LLVOAvatar::updateIsFullyLoaded()
+{
+	const BOOL loading = getIsCloud();
 	updateRuthTimer(loading);
 	return processFullyLoadedChange(loading);
 }
diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h
index d5485413f4..55753233b0 100644
--- a/indra/newview/llvoavatar.h
+++ b/indra/newview/llvoavatar.h
@@ -247,7 +247,8 @@ public:
 public:
 	BOOL			isFullyLoaded() const;
 protected:
-	virtual BOOL	updateIsFullyLoaded();
+	virtual BOOL	getIsCloud();
+	BOOL			updateIsFullyLoaded();
 	BOOL			processFullyLoadedChange(bool loading);
 	void			updateRuthTimer(bool loading);
 	F32 			calcMorphAmount();
@@ -828,6 +829,7 @@ private:
 	BOOL	  		mNameBusy;
 	BOOL	  		mNameMute;
 	BOOL      		mNameAppearance;
+	BOOL      		mNameCloud;
 	BOOL      		mRenderGroupTitles;
 
 	//--------------------------------------------------------------------
diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp
index 5cf115890b..5e9c139bc4 100644
--- a/indra/newview/llvoavatarself.cpp
+++ b/indra/newview/llvoavatarself.cpp
@@ -1669,22 +1669,20 @@ void LLVOAvatarSelf::dumpTotalLocalTextureByteCount()
 	llinfos << "Total Avatar LocTex GL:" << (gl_bytes/1024) << "KB" << llendl;
 }
 
-BOOL LLVOAvatarSelf::updateIsFullyLoaded()
+BOOL LLVOAvatarSelf::getIsCloud()
 {
-	BOOL loading = FALSE;
-
 	// do we have our body parts?
 	if (gAgentWearables.getWearableCount(WT_SHAPE) == 0 ||
 		gAgentWearables.getWearableCount(WT_HAIR) == 0 ||
 		gAgentWearables.getWearableCount(WT_EYES) == 0 ||
 		gAgentWearables.getWearableCount(WT_SKIN) == 0)	
 	{
-		loading = TRUE;
+		return TRUE;
 	}
 
 	if (!isTextureDefined(TEX_HAIR, 0))
 	{
-		loading = TRUE;
+		return TRUE;
 	}
 
 	if (!mPreviousFullyLoaded)
@@ -1692,13 +1690,13 @@ BOOL LLVOAvatarSelf::updateIsFullyLoaded()
 		if (!isLocalTextureDataAvailable(mBakedTextureDatas[BAKED_LOWER].mTexLayerSet) &&
 			(!isTextureDefined(TEX_LOWER_BAKED, 0)))
 		{
-			loading = TRUE;
+			return TRUE;
 		}
 
 		if (!isLocalTextureDataAvailable(mBakedTextureDatas[BAKED_UPPER].mTexLayerSet) &&
 			(!isTextureDefined(TEX_UPPER_BAKED, 0)))
 		{
-			loading = TRUE;
+			return TRUE;
 		}
 
 		for (U32 i = 0; i < mBakedTextureDatas.size(); i++)
@@ -1706,23 +1704,23 @@ BOOL LLVOAvatarSelf::updateIsFullyLoaded()
 			if (i == BAKED_SKIRT && !isWearingWearableType(WT_SKIRT))
 				continue;
 
-			BakedTextureData& texture_data = mBakedTextureDatas[i];
+			const BakedTextureData& texture_data = mBakedTextureDatas[i];
 			if (!isTextureDefined(texture_data.mTextureIndex, 0))
 				continue;
 
 			// Check for the case that texture is defined but not sufficiently loaded to display anything.
-			LLViewerTexture* baked_img = getImage( texture_data.mTextureIndex, 0 );
+			const LLViewerTexture* baked_img = getImage( texture_data.mTextureIndex, 0 );
 			if (!baked_img || !baked_img->hasGLTexture())
 			{
-				loading = TRUE;
+				return TRUE;
 			}
-
 		}
 
 	}
-	return processFullyLoadedChange(loading);
+	return FALSE;
 }
 
+
 const LLUUID& LLVOAvatarSelf::grabLocalTexture(ETextureIndex type, U32 index) const
 {
 	if (canGrabLocalTexture(type, index))
diff --git a/indra/newview/llvoavatarself.h b/indra/newview/llvoavatarself.h
index 9514abc5bc..24a2896eb0 100644
--- a/indra/newview/llvoavatarself.h
+++ b/indra/newview/llvoavatarself.h
@@ -120,7 +120,7 @@ public:
 	// Loading state
 	//--------------------------------------------------------------------
 public:
-	/*virtual*/ BOOL    updateIsFullyLoaded();
+	/*virtual*/ BOOL    getIsCloud();
 private:
 	BOOL                mIsBaked; // are the stored baked textures up to date?
 
-- 
cgit v1.2.3


From bba063c0c19d121cbecaecee92c0894c5b83eb2b Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Thu, 15 Apr 2010 20:15:40 +0100
Subject: EXT-4388 Crash in octree line segment intersection code (getMask) Add
 yet more paranoia-and-return-or-assert, this time for +-INF in input vector.
 To be reviewed by Bao.

---
 indra/llmath/v2math.h        |  9 +++++++++
 indra/llrender/llimagegl.cpp | 14 ++++++++++++--
 2 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/indra/llmath/v2math.h b/indra/llmath/v2math.h
index 9fef8851cc..65f3714313 100644
--- a/indra/llmath/v2math.h
+++ b/indra/llmath/v2math.h
@@ -70,6 +70,8 @@ class LLVector2
 		void	setVec(const LLVector2 &vec);	// deprecated
 		void	setVec(const F32 *vec);			// deprecated
 
+		inline bool isFinite() const; // checks to see if all values of LLVector2 are finite
+
 		F32		length() const;				// Returns magnitude of LLVector2
 		F32		lengthSquared() const;		// Returns magnitude squared of LLVector2
 		F32		normalize();					// Normalizes and returns the magnitude of LLVector2
@@ -215,6 +217,7 @@ inline void	LLVector2::setVec(const F32 *vec)
 	mV[VY] = vec[VY];
 }
 
+
 // LLVector2 Magnitude and Normalization Functions
 
 inline F32 LLVector2::length(void) const
@@ -247,6 +250,12 @@ inline F32		LLVector2::normalize(void)
 	return (mag);
 }
 
+// checker
+inline bool LLVector2::isFinite() const
+{
+	return (llfinite(mV[VX]) && llfinite(mV[VY]));
+}
+
 // deprecated
 inline F32		LLVector2::magVec(void) const
 {
diff --git a/indra/llrender/llimagegl.cpp b/indra/llrender/llimagegl.cpp
index 8addee606b..ff47c57c70 100644
--- a/indra/llrender/llimagegl.cpp
+++ b/indra/llrender/llimagegl.cpp
@@ -1738,8 +1738,18 @@ BOOL LLImageGL::getMask(const LLVector2 &tc)
 
 	if (mPickMask)
 	{
-		F32 u = tc.mV[0] - floorf(tc.mV[0]);
-		F32 v = tc.mV[1] - floorf(tc.mV[1]);
+		F32 u,v;
+		if (LL_LIKELY(tc.isFinite()))
+		{
+			u = tc.mV[0] - floorf(tc.mV[0]);
+			v = tc.mV[1] - floorf(tc.mV[1]);
+		}
+		else
+		{
+			LL_WARNS_ONCE("render") << "Ugh, non-finite u/v in mask pick" << LL_ENDL;
+			u = v = 0.f;
+			llassert(false);
+		}
 
 		if (LL_UNLIKELY(u < 0.f || u > 1.f ||
 				v < 0.f || v > 1.f))
-- 
cgit v1.2.3


From bb20c096b58c89ede495ffa6b3b6eb5d74df9f90 Mon Sep 17 00:00:00 2001
From: Monroe Linden <monroe@lindenlab.com>
Date: Thu, 15 Apr 2010 15:41:37 -0700
Subject: Fix for EXT-6638 (cannot sign into linkedin.com)

Updated mac llqtwebkit build from the following sources:

revision aacdf69cbf5aa12d77c179296e31ef643ed1ef4a in http://qt.gitorious.org/+lindenqt/qt/lindenqt (currently head of the 'lindenqt' branch)
revision f35a5eab8c2f in http://bitbucket.org/lindenlab/llqtwebkit/ (currently head of the 'cookie-api' branch)
---
 install.xml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/install.xml b/install.xml
index fefa4d729e..aba4c554cb 100644
--- a/install.xml
+++ b/install.xml
@@ -948,9 +948,9 @@ anguage Infrstructure (CLI) international standard</string>
           <key>darwin</key>
           <map>
             <key>md5sum</key>
-            <string>7d75751cbd8786ea4d710b50b5931b9b</string>
+            <string>1956228a93537f250b92f2929fa4ea40</string>
             <key>url</key>
-            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-4.6+cookies-darwin-20100402.tar.bz2</uri>
+            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-4.6+cookies-darwin-20100415.tar.bz2</uri>
           </map>
           <key>linux</key>
           <map>
-- 
cgit v1.2.3


From 4d1b17842f3b97935ae2baaf96506b00796ecb6a Mon Sep 17 00:00:00 2001
From: Monroe Linden <monroe@lindenlab.com>
Date: Thu, 15 Apr 2010 16:45:29 -0700
Subject: Comment in my last commit was incorrect, it should be: Fix for
 EXT-3652 (Mac media plugin crashes after loading acrobat.com).

---
 install.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/install.xml b/install.xml
index aba4c554cb..1ccb3f35d8 100644
--- a/install.xml
+++ b/install.xml
@@ -950,7 +950,7 @@ anguage Infrstructure (CLI) international standard</string>
             <key>md5sum</key>
             <string>1956228a93537f250b92f2929fa4ea40</string>
             <key>url</key>
-            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-4.6+cookies-darwin-20100415.tar.bz2</uri>
+             <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-4.6+cookies-darwin-20100415.tar.bz2</uri>
           </map>
           <key>linux</key>
           <map>
-- 
cgit v1.2.3


From 04cfcd1edca32090548960135e7de13b001aa908 Mon Sep 17 00:00:00 2001
From: brad kittenbrink <brad@lindenlab.com>
Date: Thu, 15 Apr 2010 18:50:02 -0700
Subject: Fix for EXT-6813 libcurl on windows had gzip/deflate
 transfer-encoding disabled. New build of libcurl fixed it.

---
 install.xml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/install.xml b/install.xml
index c1894ddc38..f223521689 100644
--- a/install.xml
+++ b/install.xml
@@ -254,9 +254,9 @@
           <key>windows</key>
           <map>
             <key>md5sum</key>
-            <string>53e5ab7affff7121a5af2f82b4d58b54</string>
+            <string>78ccac8aaf8ea5bec482dfbcdbeb1651</string>
             <key>url</key>
-            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/curl-7.19.6-windows-20091016.tar.bz2</uri>
+            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/curl-7.19.6-windows-20100414.tar.bz2</uri>
           </map>
         </map>
       </map>
-- 
cgit v1.2.3


From c0ad2a55bac2f974876432f7e8ec11cc9d1b05a6 Mon Sep 17 00:00:00 2001
From: Dmitry Zaporozhan <dzaporozhan@productengine.com>
Date: Fri, 16 Apr 2010 09:14:45 +0300
Subject: Fixed EXT-6862(normal) - Offer Teleport button is offset to far to
 the right Reverted Eli's fix 11355 : a55a8ed85023 (VWR-17833 en_xui_change to
 cover PT (logest translation)) Fixed buttons width in Friends tab in Polish
 localization. Also fixed group tab buttons.

Reviewed by Vadim Savchuk - https://codereview.productengine.com/secondlife/r/247/

--HG--
branch : product-engine
---
 indra/newview/skins/default/xui/en/panel_people.xml |  2 +-
 indra/newview/skins/default/xui/pl/panel_people.xml | 16 ++++++++--------
 2 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml
index 233137a76b..8131b75b70 100644
--- a/indra/newview/skins/default/xui/en/panel_people.xml
+++ b/indra/newview/skins/default/xui/en/panel_people.xml
@@ -477,7 +477,7 @@ If you're looking for people to hang out with, [secondlife:///app/worldmap try t
          label="Share"
          layout="topleft"
          name="share_btn"
-         width="85" />
+         width="62" />
         <button
          follows="bottom|left"
          left_pad="3"
diff --git a/indra/newview/skins/default/xui/pl/panel_people.xml b/indra/newview/skins/default/xui/pl/panel_people.xml
index 5ea5356c60..09958c84d6 100644
--- a/indra/newview/skins/default/xui/pl/panel_people.xml
+++ b/indra/newview/skins/default/xui/pl/panel_people.xml
@@ -47,13 +47,13 @@ Jeżeli szukasz ludzi, z którymi można się spotkać, kliknij tutaj [secondlif
 		</panel>
 	</tab_container>
 	<panel name="button_bar">
-		<button label="Profil" name="view_profile_btn" tool_tip="Pokaż zdjęcie, grupy i inne informacje o Rezydencie"/>
-		<button label="IM" name="im_btn" tool_tip="Rozpocznij rozmowę prywatną (IM)"/>
-		<button label="Zadzwoń" name="call_btn" tool_tip="Zadzwoń do tego Rezydenta"/>
-		<button label="Podziel się" name="share_btn"/>
-		<button label="Teleportuj" name="teleport_btn" tool_tip="Zaproponuj teleportację"/>
-		<button label="Profil grupy" name="group_info_btn" tool_tip="Pokaż informacje o grupie"/>
-		<button label="Konferencja Grupowa" name="chat_btn" tool_tip="Rozpocznij konferencę"/>
-		<button label="Rozmowa Głosowa" name="group_call_btn" tool_tip="Rozmowa Głosowa w tej Grupie"/>
+		<button width="55" label="Profil" name="view_profile_btn" tool_tip="Pokaż zdjęcie, grupy i inne informacje o Rezydencie"/>
+		<button width="35" label="IM" name="im_btn" tool_tip="Rozpocznij rozmowę prywatną (IM)"/>
+		<button width="62" label="Zadzwoń" name="call_btn" tool_tip="Zadzwoń do tego Rezydenta"/>
+		<button width="72" label="Podziel się" name="share_btn"/>
+		<button width="70" label="Teleportuj" name="teleport_btn" tool_tip="Zaproponuj teleportację"/>
+		<button width="69" label="Profil grupy" name="group_info_btn" tool_tip="Pokaż informacje o grupie"/>
+		<button width="124" label="Konferencja Grupowa" name="chat_btn" tool_tip="Rozpocznij konferencę"/>
+		<button width="108" label="Rozmowa Głosowa" name="group_call_btn" tool_tip="Rozmowa Głosowa w tej Grupie"/>
 	</panel>
 </panel>
-- 
cgit v1.2.3


From 492efd6678f2f9db8d66b0bde5136bc1e5740cbb Mon Sep 17 00:00:00 2001
From: Dmitry Zaporozhan <dzaporozhan@productengine.com>
Date: Fri, 16 Apr 2010 09:25:40 +0300
Subject: Fixed EXT-6423(normal) - Windows viewer spends a minute clearing
 cache when there is no cache Problem description: The code that purges cache
 does not expect any folders there, error occurs when it tries to delete a
 file, which is actually a folder. To handle an error the code sleeps for 1
 second and tries to delete the file 4 more times(sleeping for 1 second after
 each try). Fix info: Using LLFile::isDir to skip directories and only delete
 files.

Reviewed by Vadim Savchuk - https://codereview.productengine.com/secondlife/r/239/

--HG--
branch : product-engine
---
 indra/llvfs/lldir.cpp | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/indra/llvfs/lldir.cpp b/indra/llvfs/lldir.cpp
index da4abde451..29b6f490c8 100644
--- a/indra/llvfs/lldir.cpp
+++ b/indra/llvfs/lldir.cpp
@@ -91,15 +91,16 @@ S32 LLDir::deleteFilesInDir(const std::string &dirname, const std::string &mask)
 	S32 result;
 	while (getNextFileInDir(dirname, mask, filename, FALSE))
 	{
-		if ((filename == ".") || (filename == ".."))
+		fullpath = dirname;
+		fullpath += getDirDelimiter();
+		fullpath += filename;
+
+		if(LLFile::isdir(fullpath))
 		{
 			// skipping directory traversal filenames
 			count++;
 			continue;
 		}
-		fullpath = dirname;
-		fullpath += getDirDelimiter();
-		fullpath += filename;
 
 		S32 retry_count = 0;
 		while (retry_count < 5)
-- 
cgit v1.2.3


From f7e4e40f9d68fdd9e1bdfa4f0bfb4ee1f053c3a2 Mon Sep 17 00:00:00 2001
From: Mike Antipov <mantipov@productengine.com>
Date: Fri, 16 Apr 2010 12:04:41 +0300
Subject: Fixed major bug EXT-6851 (Moderator is unable to mute group voice
 chat participant after his reconnect)

Reason: not proper condition to check is LLSpeaker is in voice channel (implemented for EXT-3944)

Fix: Updated condition to check is speaker in voice channel state.

Reviewed by Vadim Savchuk at https://codereview.productengine.com/secondlife/r/242/

--HG--
branch : product-engine
---
 indra/newview/llspeakers.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/indra/newview/llspeakers.cpp b/indra/newview/llspeakers.cpp
index 4573520647..ba6a44dff4 100644
--- a/indra/newview/llspeakers.cpp
+++ b/indra/newview/llspeakers.cpp
@@ -84,7 +84,7 @@ void LLSpeaker::onAvatarNameLookup(const LLUUID& id, const std::string& first, c
 
 bool LLSpeaker::isInVoiceChannel()
 {
-	return mStatus == LLSpeaker::STATUS_VOICE_ACTIVE || mStatus == LLSpeaker::STATUS_MUTED;
+	return mStatus <= LLSpeaker::STATUS_VOICE_ACTIVE || mStatus == LLSpeaker::STATUS_MUTED;
 }
 
 LLSpeakerUpdateModeratorEvent::LLSpeakerUpdateModeratorEvent(LLSpeaker* source)
-- 
cgit v1.2.3


From 960eb2c65fe5618bf977b80a3485a4346d5d85c6 Mon Sep 17 00:00:00 2001
From: Eugene Mutavchi <emutavchi@productengine.com>
Date: Fri, 16 Apr 2010 12:52:26 +0300
Subject: Fixed low bug EXT-6825 (The border for context menu for Groups tab is
 invisible and is merged with the background) - allowed to drop shadow.
 Reviewed by Vadim Savchuk at
 https://codereview.productengine.com/secondlife/r/248/

--HG--
branch : product-engine
---
 indra/newview/skins/default/xui/en/menu_people_groups.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/indra/newview/skins/default/xui/en/menu_people_groups.xml b/indra/newview/skins/default/xui/en/menu_people_groups.xml
index afa680139d..8f89d37dbb 100644
--- a/indra/newview/skins/default/xui/en/menu_people_groups.xml
+++ b/indra/newview/skins/default/xui/en/menu_people_groups.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <menu name="menu_group_plus"
  left="0" bottom="0" visible="false"
- mouse_opaque="false" opaque="true" color="MenuDefaultBgColor" drop_shadow="false">
+ mouse_opaque="false" opaque="true" color="MenuDefaultBgColor">
   <menu_item_call
    label="View Info"
    name="View Info">
-- 
cgit v1.2.3


From 35168862f5ecc06166fbd1a9bcd601ae2abbf75b Mon Sep 17 00:00:00 2001
From: Loren Shih <seraph@lindenlab.com>
Date: Fri, 16 Apr 2010 12:28:54 -0400
Subject: EXT-6892 : Add debug setting to show avatar rez times

This pops up a notification whenever another avatar rezzes.  Controlled by a #define, currently set to ON.
---
 indra/newview/llvoavatar.cpp                         | 16 +++++++++++++++-
 indra/newview/llvoavatar.h                           |  1 +
 indra/newview/skins/default/xui/en/notifications.xml |  6 ++++++
 3 files changed, 22 insertions(+), 1 deletion(-)

diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index ba0da9a4c6..8c5928224f 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -66,6 +66,7 @@
 #include "llkeyframewalkmotion.h"
 #include "llmutelist.h"
 #include "llmoveview.h"
+#include "llnotificationsutil.h"
 #include "llquantize.h"
 #include "llregionhandle.h"
 #include "llresmgr.h"
@@ -101,6 +102,8 @@
 
 #include <boost/lexical_cast.hpp>
 
+#define DISPLAY_AVATAR_LOAD_TIMES
+
 using namespace LLVOAvatarDefines;
 
 //-----------------------------------------------------------------------------
@@ -5851,6 +5854,7 @@ void LLVOAvatar::updateRuthTimer(bool loading)
 	if (mPreviousFullyLoaded)
 	{
 		mRuthTimer.reset();
+		mRuthDebugTimer.reset();
 	}
 	
 	const F32 LOADING_TIMEOUT = 120.f;
@@ -5879,7 +5883,17 @@ BOOL LLVOAvatar::processFullyLoadedChange(bool loading)
 	
 	mFullyLoaded = (mFullyLoadedTimer.getElapsedTimeF32() > PAUSE);
 
-	
+#ifdef DISPLAY_AVATAR_LOAD_TIMES
+	if (!mPreviousFullyLoaded && !loading && mFullyLoaded)
+	{
+		llinfos << "Avatar '" << getFullname() << "' resolved in " << mRuthDebugTimer.getElapsedTimeF32() << " seconds." << llendl;
+		LLSD args;
+		args["TIME"] = llformat("%d",(U32)mRuthDebugTimer.getElapsedTimeF32());
+		args["NAME"] = getFullname();
+		LLNotificationsUtil::add("AvatarRezNotification",args);
+	}
+#endif
+
 	// did our loading state "change" from last call?
 	const S32 UPDATE_RATE = 30;
 	BOOL changed =
diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h
index 55753233b0..8da4c226ed 100644
--- a/indra/newview/llvoavatar.h
+++ b/indra/newview/llvoavatar.h
@@ -259,6 +259,7 @@ private:
 	S32				mFullyLoadedFrameCounter;
 	LLFrameTimer	mFullyLoadedTimer;
 	LLFrameTimer	mRuthTimer;
+	LLFrameTimer	mRuthDebugTimer; // For tracking how long it takes for av to rez
 	
 /**                    State
  **                                                                            **
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 6c9564c8cf..ca922bf724 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -5968,6 +5968,12 @@ The button will be shown when there is enough space for it.
 Drag items from inventory onto a person in the resident picker
   </notification>
 
+  <notification
+   icon="notifytip.tga"
+   name="AvatarRezNotification"
+   type="notifytip">
+Avatar '[NAME]' rezzed in [TIME] seconds.
+  </notification>
 
   <global name="UnsupportedCPU">
 - Your CPU speed does not meet the minimum requirements.
-- 
cgit v1.2.3