From a6c0e4e71de033c8e6798c867c8526261fc96e66 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Tue, 12 Jan 2010 16:32:32 -0800
Subject: Change login screen to single "SLID" input field. Use last name
 "Resident" if none provided. Reviewed with Huseby

---
 indra/newview/llpanellogin.cpp                     | 47 ++++++++++++++++------
 indra/newview/skins/default/xui/en/panel_login.xml | 18 +++++----
 2 files changed, 46 insertions(+), 19 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp
index 87d101b00f..46420ce503 100644
--- a/indra/newview/llpanellogin.cpp
+++ b/indra/newview/llpanellogin.cpp
@@ -213,7 +213,7 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
 	}
 
 #if !USE_VIEWER_AUTH
-	childSetPrevalidate("first_name_edit", LLLineEditor::prevalidateASCIIPrintableNoSpace);
+	//childSetPrevalidate("login_id_edit", LLLineEditor::prevalidateASCIIPrintableNoSpace);
 	childSetPrevalidate("last_name_edit", LLLineEditor::prevalidateASCIIPrintableNoSpace);
 
 	childSetCommitCallback("password_edit", mungePassword, this);
@@ -498,7 +498,7 @@ void LLPanelLogin::giveFocus()
 	if( sInstance )
 	{
 		// Grab focus and move cursor to first blank input field
-		std::string first = sInstance->childGetText("first_name_edit");
+		std::string first = sInstance->childGetText("login_id_edit");
 		std::string pass = sInstance->childGetText("password_edit");
 
 		BOOL have_first = !first.empty();
@@ -514,7 +514,7 @@ void LLPanelLogin::giveFocus()
 		else
 		{
 			// User doesn't have a name, so start there.
-			edit = sInstance->getChild<LLLineEditor>("first_name_edit");
+			edit = sInstance->getChild<LLLineEditor>("login_id_edit");
 		}
 
 		if (edit)
@@ -536,8 +536,8 @@ void LLPanelLogin::showLoginWidgets()
 	// *TODO: Append all the usual login parameters, like first_login=Y etc.
 	std::string splash_screen_url = sInstance->getString("real_url");
 	web_browser->navigateTo( splash_screen_url, "text/html" );
-	LLUICtrl* first_name_edit = sInstance->getChild<LLUICtrl>("first_name_edit");
-	first_name_edit->setFocus(TRUE);
+	LLUICtrl* login_id_edit = sInstance->getChild<LLUICtrl>("login_id_edit");
+	login_id_edit->setFocus(TRUE);
 }
 
 // static
@@ -569,8 +569,15 @@ void LLPanelLogin::setFields(const std::string& firstname,
 		return;
 	}
 
-	sInstance->childSetText("first_name_edit", firstname);
-	sInstance->childSetText("last_name_edit", lastname);
+	std::string login_id = firstname;
+	if (!lastname.empty())
+	{
+		// support traditional First Last name slurls
+		login_id += " ";
+		login_id += lastname;
+	}
+	sInstance->childSetText("login_id_edit", login_id);
+	sInstance->childSetText("last_name_edit", std::string());
 
 	// Max "actual" password length is 16 characters.
 	// Hex digests are always 32 characters.
@@ -623,10 +630,24 @@ void LLPanelLogin::getFields(std::string *firstname,
 		return;
 	}
 
-	*firstname = sInstance->childGetText("first_name_edit");
-	LLStringUtil::trim(*firstname);
+	std::string login_id = sInstance->childGetText("login_id_edit");
+	LLStringUtil::trim(login_id);
 
-	*lastname = sInstance->childGetText("last_name_edit");
+	U32 pos = login_id.find(' ');
+	if (pos != std::string::npos)
+	{
+		// old-style Firstname Lastname
+		*firstname = login_id.substr(0, pos);
+		*lastname = login_id.substr(pos+1);
+	}
+	else
+	{
+		// new-style single SLID string
+		*firstname = login_id;
+		*lastname = "Resident";
+	}
+
+	LLStringUtil::trim(*firstname);
 	LLStringUtil::trim(*lastname);
 
 	*password = sInstance->mMungedPassword;
@@ -896,8 +917,10 @@ void LLPanelLogin::onClickConnect(void *)
 		// JC - Make sure the fields all get committed.
 		sInstance->setFocus(FALSE);
 
-		std::string first = sInstance->childGetText("first_name_edit");
-		std::string last  = sInstance->childGetText("last_name_edit");
+		// Do SLID "Resident" name mangling
+		std::string first, last, unused_password;
+		getFields(&first, &last, &unused_password);
+
 		LLComboBox* combo = sInstance->getChild<LLComboBox>("start_location_combo");
 		std::string combo_text = combo->getSimple();
 		
diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml
index df942b1a26..30506dcde4 100644
--- a/indra/newview/skins/default/xui/en/panel_login.xml
+++ b/indra/newview/skins/default/xui/en/panel_login.xml
@@ -60,7 +60,7 @@ name="first_name_text"
 top="20"
 left="20"
 width="150">
-First name:
+  Second Life ID:
 </text>
 <line_editor
 follows="left|bottom"
@@ -69,20 +69,23 @@ height="22"
 label="First"
 left_delta="0"
 max_length="31"
-name="first_name_edit"
+name="login_id_edit"
+prevalidate_callback="ascii" 
 select_on_focus="true"
-tool_tip="[SECOND_LIFE] First Name"
+tool_tip="[SECOND_LIFE] ID"
 top_pad="0"
-   width="135" />
+   width="200" />
   <text
    follows="left|bottom"
    font="SansSerifSmall"
    height="16"
-   left_pad="8"
+   left="230"
    name="last_name_text"
    top="20"
+   visible="false" 
    width="150">
-    Last name:   </text>
+    Last name:
+  </text>
 <line_editor
 follows="left|bottom"
 handle_edit_keys_directly="true"
@@ -93,12 +96,13 @@ name="last_name_edit"
 select_on_focus="true"
 tool_tip="[SECOND_LIFE] Last Name"
   top_pad="0"
+  visible="false" 
   width="135" />
 <text
 follows="left|bottom"
 font="SansSerifSmall"
 height="15"
-left_pad="8"
+left="230"
 name="password_text"
 top="20"
     width="150">
-- 
cgit v1.2.3


From 1d6d3fc5a9698dfd64d5fa778823d38d514ec3b1 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Tue, 12 Jan 2010 16:33:08 -0800
Subject: Suppress rendering of last name "Resident" to display only SLIDs.
 Reviewed with Huseby

---
 indra/newview/llvoavatar.cpp | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 4235f97eab..7df24c9ade 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -2792,8 +2792,12 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last)
 					line += firstname->getString();
 				}
 
-				line += " ";
-				line += lastname->getString();
+				// Suppress last name "Resident" as this is used for new SLID names
+				if (strcmp(lastname->getString(), "Resident"))
+				{
+					line += " ";
+					line += lastname->getString();
+				}
 				BOOL need_comma = FALSE;
 
 				if (is_away || is_muted || is_busy)
-- 
cgit v1.2.3


From 48111a2ab847bb3bacf658b3771d0324157fc751 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Fri, 22 Jan 2010 16:53:18 -0800
Subject: Converted friend request names to SLID-compatible

---
 indra/newview/llavataractions.cpp | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp
index 40c9bb6afa..8c4dfaea50 100644
--- a/indra/newview/llavataractions.cpp
+++ b/indra/newview/llavataractions.cpp
@@ -62,6 +62,7 @@
 #include "llimfloater.h"
 #include "lltrans.h"
 #include "llcallingcard.h"
+#include "llslurl.h"			// IDEVO
 
 // static
 void LLAvatarActions::requestFriendshipDialog(const LLUUID& id, const std::string& name)
@@ -73,7 +74,7 @@ void LLAvatarActions::requestFriendshipDialog(const LLUUID& id, const std::strin
 	}
 
 	LLSD args;
-	args["NAME"] = name;
+	args["NAME"] = LLSLURL::buildCommand("agent", id, "inspect");
 	LLSD payload;
 	payload["id"] = id;
 	payload["name"] = name;
@@ -102,7 +103,7 @@ void LLAvatarActions::requestFriendshipDialog(const LLUUID& id)
 	}
 
 	std::string full_name;
-	gCacheName->getFullName(id, full_name);
+	// IDEVO gCacheName->getFullName(id, full_name);
 	requestFriendshipDialog(id, full_name);
 }
 
-- 
cgit v1.2.3


From 830c938ad218f2e5dbe161fa50222a5702ca73cd Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Fri, 22 Jan 2010 16:53:29 -0800
Subject: Converted landmark info names to SLID-compatible

---
 indra/newview/llpanellandmarkinfo.cpp | 39 +++++++++++++++++++++--------------
 1 file changed, 23 insertions(+), 16 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llpanellandmarkinfo.cpp b/indra/newview/llpanellandmarkinfo.cpp
index 9654e17659..ae445764cf 100644
--- a/indra/newview/llpanellandmarkinfo.cpp
+++ b/indra/newview/llpanellandmarkinfo.cpp
@@ -44,6 +44,7 @@
 #include "llagent.h"
 #include "llagentui.h"
 #include "lllandmarkactions.h"
+#include "llslurl.h"
 #include "llviewerinventory.h"
 #include "llviewerparcelmgr.h"
 #include "llviewerregion.h"
@@ -230,13 +231,15 @@ void LLPanelLandmarkInfo::displayItemInfo(const LLInventoryItem* pItem)
 	//////////////////
 	if (pItem->getCreatorUUID().notNull())
 	{
-		std::string name;
+		// IDEVO
 		LLUUID creator_id = pItem->getCreatorUUID();
-		if (!gCacheName->getFullName(creator_id, name))
-		{
-			gCacheName->get(creator_id, FALSE,
-							boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mCreator, _2, _3));
-		}
+		std::string name =
+			LLSLURL::buildCommand("agent", creator_id, "inspect");
+		//if (!gCacheName->getFullName(creator_id, name))
+		//{
+		//	gCacheName->get(creator_id, FALSE,
+		//					boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mCreator, _2, _3));
+		//}
 		mCreator->setText(name);
 	}
 	else
@@ -253,20 +256,24 @@ void LLPanelLandmarkInfo::displayItemInfo(const LLInventoryItem* pItem)
 		if (perm.isGroupOwned())
 		{
 			LLUUID group_id = perm.getGroup();
-			if (!gCacheName->getGroupName(group_id, name))
-			{
-				gCacheName->get(group_id, TRUE,
-								boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mOwner, _2, _3));
-			}
+			// IDEVO
+			//if (!gCacheName->getGroupName(group_id, name))
+			//{
+			//	gCacheName->get(group_id, TRUE,
+			//					boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mOwner, _2, _3));
+			//}
+			name = LLSLURL::buildCommand("group", group_id, "inspect");
 		}
 		else
 		{
 			LLUUID owner_id = perm.getOwner();
-			if (!gCacheName->getFullName(owner_id, name))
-			{
-				gCacheName->get(owner_id, FALSE,
-								boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mOwner, _2, _3));
-			}
+			// IDEVO
+			//if (!gCacheName->getFullName(owner_id, name))
+			//{
+			//	gCacheName->get(owner_id, FALSE,
+			//					boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mOwner, _2, _3));
+			//}
+			name = LLSLURL::buildCommand("agent", owner_id, "inspect");
 		}
 		mOwner->setText(name);
 	}
-- 
cgit v1.2.3


From 1ddd2f2677471cc00465b2a619b138bb054db770 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Fri, 22 Jan 2010 16:53:45 -0800
Subject: Converted place info names to SLID-compatible, probably unused

---
 indra/newview/llpanelplaceprofile.cpp | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llpanelplaceprofile.cpp b/indra/newview/llpanelplaceprofile.cpp
index d892e2885b..a80b6f2e0e 100644
--- a/indra/newview/llpanelplaceprofile.cpp
+++ b/indra/newview/llpanelplaceprofile.cpp
@@ -49,6 +49,7 @@
 #include "llappviewer.h"
 #include "llcallbacklist.h"
 #include "llfloaterbuycurrency.h"
+#include "llslurl.h"		// IDEVO
 #include "llstatusbar.h"
 #include "llviewercontrol.h"
 #include "llviewerparcelmgr.h"
@@ -441,8 +442,12 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,
 		else
 		{
 			// Figure out the owner's name
-			gCacheName->get(parcel->getOwnerID(), FALSE,
-							boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mParcelOwner, _2, _3));
+			// IDEVO
+			//gCacheName->get(parcel->getOwnerID(), FALSE,
+			//				boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mParcelOwner, _2, _3));
+			std::string parcel_owner =
+				LLSLURL::buildCommand("agent", parcel->getOwnerID(), "inspect");
+			mParcelOwner->setText(parcel_owner);
 			gCacheName->get(region->getOwner(), FALSE,
 							boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mRegionOwnerText, _2, _3));
 		}
-- 
cgit v1.2.3


From 40907986d4044e2be75f862fac1153f9a14f13ad Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Fri, 22 Jan 2010 18:29:29 -0800
Subject: Pull llurlentryagent into newview so I can compile/link faster

---
 indra/newview/CMakeLists.txt      |   2 +
 indra/newview/llstartup.cpp       |   5 ++
 indra/newview/llurlentryagent.cpp | 154 ++++++++++++++++++++++++++++++++++++++
 indra/newview/llurlentryagent.h   |  53 +++++++++++++
 4 files changed, 214 insertions(+)
 create mode 100644 indra/newview/llurlentryagent.cpp
 create mode 100644 indra/newview/llurlentryagent.h

(limited to 'indra/newview')

diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 5373556c20..f4bbe7133f 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -445,6 +445,7 @@ set(viewer_SOURCE_FILES
     llurl.cpp
     llurldispatcher.cpp
     llurldispatcherlistener.cpp
+    llurlentryagent.cpp
     llurlhistory.cpp
     llurllineeditorctrl.cpp
     llurlsimstring.cpp
@@ -952,6 +953,7 @@ set(viewer_HEADER_FILES
     llurl.h
     llurldispatcher.h
     llurldispatcherlistener.h
+    llurlentryagent.h
     llurlhistory.h
     llurllineeditorctrl.h
     llurlsimstring.h
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 6b816f8786..a372ab44f2 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -144,7 +144,9 @@
 #include "llui.h"
 #include "llurldispatcher.h"
 #include "llurlsimstring.h"
+#include "llurlentryagent.h"	// IDEVO
 #include "llurlhistory.h"
+#include "llurlregistry.h"		// IDEVO
 #include "llurlwhitelist.h"
 #include "llvieweraudio.h"
 #include "llviewerassetstorage.h"
@@ -1282,6 +1284,9 @@ bool idle_startup()
 			gCacheName->LocalizeCacheName("none", LLTrans::getString("GroupNameNone"));
 			// Load stored cache if possible
             LLAppViewer::instance()->loadNameCache();
+
+			// Handle secondlife:///app/agent name lookups IDEVO
+			LLUrlRegistry::getInstance()->registerUrl(new LLUrlEntryAgent(), true);
 		}
 
 		// *Note: this is where gWorldMap used to be initialized.
diff --git a/indra/newview/llurlentryagent.cpp b/indra/newview/llurlentryagent.cpp
new file mode 100644
index 0000000000..d104fdf20d
--- /dev/null
+++ b/indra/newview/llurlentryagent.cpp
@@ -0,0 +1,154 @@
+/** 
+ * @file llurlentry.cpp
+ * @author Martin Reddy
+ * @brief Describes the Url types that can be registered in LLUrlRegistry
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ * 
+ * Copyright (c) 2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llurlentryagent.h"
+
+#include "llcachename.h"
+#include "lltrans.h"
+#include "lluicolortable.h"
+
+//
+// LLUrlEntryAgent Describes a Second Life agent Url, e.g.,
+// secondlife:///app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/about
+//
+LLUrlEntryAgent::LLUrlEntryAgent()
+{
+	mPattern = boost::regex("secondlife:///app/agent/[\\da-f-]+/\\w+",
+							boost::regex::perl|boost::regex::icase);
+	mMenuName = "menu_url_agent.xml";
+	mIcon = "Generic_Person";
+	mColor = LLUIColorTable::instance().getColor("AgentLinkColor");
+}
+
+// IDEVO demo code
+static std::string clean_name(const std::string& first, const std::string& last)
+{
+	std::string displayname;
+	if (first == "miyazaki23") // IDEVO demo code
+	{
+		// miyazaki
+		displayname += (char)(0xE5);
+		displayname += (char)(0xAE);
+		displayname += (char)(0xAE);
+		displayname += (char)(0xE5);
+		displayname += (char)(0xB4);
+		displayname += (char)(0x8E);
+		// hayao
+		displayname += (char)(0xE9);
+		displayname += (char)(0xA7);
+		displayname += (char)(0xBF);
+		// san
+		displayname += (char)(0xE3);
+		displayname += (char)(0x81);
+		displayname += (char)(0x95);
+		displayname += (char)(0xE3);
+		displayname += (char)(0x82);
+		displayname += (char)(0x93);
+	}
+	else if (first == "Jim")
+	{
+		displayname = "Jos";
+		displayname += (char)(0xC3);
+		displayname += (char)(0xA9);
+		displayname += " Sanchez";
+	}
+	else if (first == "James")
+	{
+		displayname = "James Cook";
+	}
+
+	std::string fullname = first;
+	if (!last.empty())
+	{
+		fullname += ' ';
+		fullname += last;
+	}
+
+	std::string final;
+	if (!displayname.empty())
+	{
+		final = displayname + " (" + fullname + ")";
+	}
+	else
+	{
+		final = fullname;
+	}
+	return final;
+}
+
+void LLUrlEntryAgent::onAgentNameReceived(const LLUUID& id,
+										  const std::string& first,
+										  const std::string& last,
+										  BOOL is_group)
+{
+	std::string final = clean_name(first, last);
+	// received the agent name from the server - tell our observers
+	callObservers(id.asString(), final);
+}
+
+std::string LLUrlEntryAgent::getLabel(const std::string &url, const LLUrlLabelCallback &cb)
+{
+	if (!gCacheName)
+	{
+		// probably at the login screen, use short string for layout
+		return LLTrans::getString("LoadingData");
+	}
+
+	std::string agent_id_string = getIDStringFromUrl(url);
+	if (agent_id_string.empty())
+	{
+		// something went wrong, just give raw url
+		return unescapeUrl(url);
+	}
+
+	LLUUID agent_id(agent_id_string);
+	std::string first, last;
+	if (agent_id.isNull())
+	{
+		return LLTrans::getString("AvatarNameNobody");
+	}
+	else if (gCacheName->getName(agent_id, first, last))
+	{
+		return clean_name(first, last);
+	}
+	else
+	{
+		gCacheName->get(agent_id, FALSE,
+			boost::bind(&LLUrlEntryAgent::onAgentNameReceived,
+				this, _1, _2, _3, _4));
+		addObserver(agent_id_string, url, cb);
+		return LLTrans::getString("LoadingData");
+	}
+}
diff --git a/indra/newview/llurlentryagent.h b/indra/newview/llurlentryagent.h
new file mode 100644
index 0000000000..8e5e321a31
--- /dev/null
+++ b/indra/newview/llurlentryagent.h
@@ -0,0 +1,53 @@
+/** 
+ * @file llurlentryagent.h
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ * 
+ * Copyright (c) 2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLURLENTRYAGENT_H
+#define LL_LLURLENTRYAGENT_H
+
+#include "llurlentry.h"
+
+///
+/// LLUrlEntryAgent Describes a Second Life agent Url, e.g.,
+/// secondlife:///app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/about
+///
+/// IDEVO Pulled this temporarily into newview for faster compile/link
+/// times while iterating on UI.
+class LLUrlEntryAgent : public LLUrlEntryBase
+{
+public:
+	LLUrlEntryAgent();
+	/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb);
+private:
+	void onAgentNameReceived(const LLUUID& id, const std::string& first,
+							 const std::string& last, BOOL is_group);
+};
+
+#endif
-- 
cgit v1.2.3


From e88e1022f804bd23edff73f95e5ac3cec5effcfb Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Mon, 1 Feb 2010 11:00:14 -0800
Subject: Show SLIDs in avatar picker

---
 indra/newview/llfloateravatarpicker.cpp | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloateravatarpicker.cpp b/indra/newview/llfloateravatarpicker.cpp
index a0b2de85f0..50aa70478b 100644
--- a/indra/newview/llfloateravatarpicker.cpp
+++ b/indra/newview/llfloateravatarpicker.cpp
@@ -370,6 +370,19 @@ void LLFloaterAvatarPicker::setAllowMultiple(BOOL allow_multiple)
 	getChild<LLScrollListCtrl>("Friends")->setAllowMultipleSelection(allow_multiple);
 }
 
+// IDEVO
+static std::string clean_name_from_avatar_picker(const std::string& first, const std::string& last)
+{
+	if (last.empty() || last == "Resident")
+	{
+		return first;
+	}
+	else
+	{
+		return first + " " + last;
+	}
+}
+
 // static 
 void LLFloaterAvatarPicker::processAvatarPickerReply(LLMessageSystem* msg, void**)
 {
@@ -420,7 +433,7 @@ void LLFloaterAvatarPicker::processAvatarPickerReply(LLMessageSystem* msg, void*
 		}
 		else
 		{
-			avatar_name = first_name + " " + last_name;
+			avatar_name = clean_name_from_avatar_picker(first_name, last_name);
 			search_results->setEnabled(TRUE);
 			found_one = TRUE;
 		}
-- 
cgit v1.2.3


From 660f1a9ecb8204d2f12fa30262955ea45f67a68d Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Mon, 1 Feb 2010 11:00:42 -0800
Subject: Fixed typo in SLURL name conversion for "Resident"

---
 indra/newview/llurlentryagent.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llurlentryagent.cpp b/indra/newview/llurlentryagent.cpp
index d104fdf20d..6af7c9001d 100644
--- a/indra/newview/llurlentryagent.cpp
+++ b/indra/newview/llurlentryagent.cpp
@@ -90,7 +90,8 @@ static std::string clean_name(const std::string& first, const std::string& last)
 	}
 
 	std::string fullname = first;
-	if (!last.empty())
+	if (!last.empty()
+		&& last != "Resident")
 	{
 		fullname += ' ';
 		fullname += last;
-- 
cgit v1.2.3


From 130214c766763855b733c9b5d4e177afe0c39865 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Mon, 1 Feb 2010 11:01:00 -0800
Subject: Fix "Resident" names in IM and chat

---
 indra/newview/llviewermessage.cpp | 70 ++++++++++++++++++++++++++++++++++++++-
 1 file changed, 69 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 0358efc0af..b7d3e407c6 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -1647,6 +1647,60 @@ bool inspect_remote_object_callback(const LLSD& notification, const LLSD& respon
 }
 static LLNotificationFunctorRegistration inspect_remote_object_callback_reg("ServerObjectMessage", inspect_remote_object_callback);
 
+// Strip out "Resident" for display, but only if the message came from a user
+// (rather than a script)
+static std::string clean_name_from_im(const std::string& name, EInstantMessage type)
+{
+	U32 pos = 0;
+	switch(type)
+	{
+	case IM_NOTHING_SPECIAL:
+	case IM_MESSAGEBOX:
+	case IM_GROUP_INVITATION:
+	case IM_INVENTORY_OFFERED:
+	case IM_INVENTORY_ACCEPTED:
+	case IM_INVENTORY_DECLINED:
+	case IM_GROUP_VOTE:
+	case IM_GROUP_MESSAGE_DEPRECATED:
+	//IM_TASK_INVENTORY_OFFERED
+	//IM_TASK_INVENTORY_ACCEPTED
+	//IM_TASK_INVENTORY_DECLINED
+	case IM_NEW_USER_DEFAULT:
+	case IM_SESSION_INVITE:
+	case IM_SESSION_P2P_INVITE:
+	case IM_SESSION_GROUP_START:
+	case IM_SESSION_CONFERENCE_START:
+	case IM_SESSION_SEND:
+	case IM_SESSION_LEAVE:
+	//IM_FROM_TASK
+	case IM_BUSY_AUTO_RESPONSE:
+	case IM_CONSOLE_AND_CHAT_HISTORY:
+	case IM_LURE_USER:
+	case IM_LURE_ACCEPTED:
+	case IM_LURE_DECLINED:
+	case IM_GODLIKE_LURE_USER:
+	case IM_YET_TO_BE_USED:
+	case IM_GROUP_ELECTION_DEPRECATED:
+	//IM_GOTO_URL
+	//IM_FROM_TASK_AS_ALERT
+	case IM_GROUP_NOTICE:
+	case IM_GROUP_NOTICE_INVENTORY_ACCEPTED:
+	case IM_GROUP_NOTICE_INVENTORY_DECLINED:
+	case IM_GROUP_INVITATION_ACCEPT:
+	case IM_GROUP_INVITATION_DECLINE:
+	case IM_GROUP_NOTICE_REQUESTED:
+	case IM_FRIENDSHIP_OFFERED:
+	case IM_FRIENDSHIP_ACCEPTED:
+	case IM_FRIENDSHIP_DECLINED_DEPRECATED:
+	//IM_TYPING_START
+	//IM_TYPING_STOP
+		pos = name.find(" Resident");
+		return name.substr(0, pos);
+	default:
+		return name;
+	}
+}
+
 void process_improved_im(LLMessageSystem *msg, void **user_data)
 {
 	if (gNoRender)
@@ -1694,6 +1748,8 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
 	{
         name = LLTrans::getString("Unnamed");
 	}
+	// IDEVO convert new-style "Resident" names for display
+	name = clean_name_from_im(name, dialog);
 
 	BOOL is_busy = gAgent.getBusy();
 	BOOL is_muted = LLMuteList::getInstance()->isMuted(from_id, name, LLMute::flagTextChat);
@@ -2494,6 +2550,15 @@ void process_decline_callingcard(LLMessageSystem* msg, void**)
 	LLNotificationsUtil::add("CallingCardDeclined");
 }
 
+static std::string clean_name_from_chat(const std::string& full_name, EChatSourceType type)
+{
+	if (type == CHAT_SOURCE_AGENT)
+	{
+		U32 pos = full_name.find(" Resident");
+		return full_name.substr(0, pos);
+	}
+	return full_name;
+}
 
 void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
 {
@@ -2510,7 +2575,7 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
 	LLViewerObject*	chatter;
 
 	msg->getString("ChatData", "FromName", from_name);
-	chat.mFromName = from_name;
+	//chat.mFromName = from_name;
 	
 	msg->getUUID("ChatData", "SourceID", from_id);
 	chat.mFromID = from_id;
@@ -2529,6 +2594,9 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
 	
 	chat.mTime = LLFrameTimer::getElapsedSeconds();
 	
+	// IDEVO Correct for new-style "Resident" names
+	chat.mFromName = clean_name_from_chat(from_name, chat.mSourceType);
+
 	BOOL is_busy = gAgent.getBusy();
 
 	BOOL is_muted = FALSE;
-- 
cgit v1.2.3


From 146e9d5e4d9a9a4f33d9ccd47a901980972b7ab9 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Mon, 1 Feb 2010 17:06:18 -0800
Subject: Support returning full_name (and SLID) for LLCacheName::get() calls
 Changed callback signature to full_name instead of first_name,last_name
 Eliminated all calls to legacy (non-signal/non-boost-bind) lookup mechanism
 Change Pay dialog names to SLURL links Tweaked layout of Pay Resident and Pay
 via Object floaters to make SLURLs fit Consolidate name first + " " + last
 concatenation in LLCacheName::buildFullName() Reviewed with Kelly

---
 indra/newview/llavatariconctrl.cpp                 | 15 ++++----
 indra/newview/llavatariconctrl.h                   | 11 +++---
 indra/newview/llavatarlistitem.cpp                 |  7 ++--
 indra/newview/llavatarlistitem.h                   |  2 +-
 indra/newview/llchathistory.cpp                    | 19 ++++------
 indra/newview/llfloaterbump.cpp                    |  5 ++-
 indra/newview/llfloaterbuyland.cpp                 | 16 ++++-----
 indra/newview/llfloaterpay.cpp                     | 36 ++++++++-----------
 indra/newview/llfloaterscriptlimits.cpp            | 14 ++++----
 indra/newview/llfloaterscriptlimits.h              |  4 +--
 indra/newview/llimview.cpp                         |  7 ++--
 indra/newview/llimview.h                           |  2 +-
 indra/newview/llinspectavatar.cpp                  | 19 +++++-----
 indra/newview/llinspectgroup.cpp                   | 17 ++++-----
 indra/newview/llinspectremoteobject.cpp            | 17 ++++-----
 indra/newview/llinventorymodel.cpp                 |  3 +-
 indra/newview/llmutelist.cpp                       | 28 ++++++---------
 indra/newview/llmutelist.h                         |  2 +-
 indra/newview/llnamebox.cpp                        | 19 +++-------
 indra/newview/llnamebox.h                          |  5 ++-
 indra/newview/llnameeditor.cpp                     | 19 +++-------
 indra/newview/llnameeditor.h                       |  5 ++-
 indra/newview/llnamelistctrl.cpp                   | 20 +++--------
 indra/newview/llnamelistctrl.h                     |  5 ++-
 indra/newview/llpanelavatartag.cpp                 |  2 +-
 indra/newview/llpanelimcontrolpanel.cpp            | 12 +++----
 indra/newview/llpanelimcontrolpanel.h              |  2 +-
 indra/newview/llpanelmediasettingspermissions.cpp  |  2 +-
 indra/newview/llpanelpermissions.cpp               |  2 +-
 indra/newview/llpanelplaceinfo.cpp                 |  6 ++--
 indra/newview/llpanelplaceinfo.h                   |  4 +--
 indra/newview/llpanelplaceprofile.cpp              | 16 ++++-----
 indra/newview/llpanelprofileview.cpp               |  8 ++---
 indra/newview/llpanelprofileview.h                 |  7 ++--
 indra/newview/llsidepaneltaskinfo.cpp              |  2 +-
 indra/newview/llspeakers.cpp                       |  7 ++--
 indra/newview/llspeakers.h                         |  2 +-
 indra/newview/llstartup.cpp                        |  8 ++---
 indra/newview/llurlentryagent.cpp                  | 41 +++++++++-------------
 indra/newview/llurlentryagent.h                    |  3 +-
 indra/newview/llviewerinventory.cpp                |  4 +--
 indra/newview/llviewerinventory.h                  |  2 +-
 indra/newview/llviewermessage.cpp                  | 32 ++++++++---------
 indra/newview/llvoiceclient.cpp                    | 14 ++------
 indra/newview/llvoiceclient.h                      |  1 -
 .../newview/skins/default/xui/en/floater_bumps.xml | 10 +++---
 indra/newview/skins/default/xui/en/floater_pay.xml | 17 +++------
 .../skins/default/xui/en/floater_pay_object.xml    | 26 ++++----------
 .../newview/skins/default/xui/en/notifications.xml |  6 ++--
 49 files changed, 201 insertions(+), 332 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llavatariconctrl.cpp b/indra/newview/llavatariconctrl.cpp
index 87b8d807c4..11cc456695 100644
--- a/indra/newview/llavatariconctrl.cpp
+++ b/indra/newview/llavatariconctrl.cpp
@@ -244,7 +244,8 @@ void LLAvatarIconCtrl::setValue(const LLSD& value)
 		LLIconCtrl::setValue(value);
 	}
 
-	gCacheName->get(mAvatarId, FALSE, boost::bind(&LLAvatarIconCtrl::nameUpdatedCallback, this, _1, _2, _3, _4));
+	gCacheName->get(mAvatarId, false,
+		boost::bind(&LLAvatarIconCtrl::nameUpdatedCallback, this, _1, _2, _3));
 }
 
 bool LLAvatarIconCtrl::updateFromCache()
@@ -289,22 +290,20 @@ void LLAvatarIconCtrl::processProperties(void* data, EAvatarProcessorType type)
 
 void LLAvatarIconCtrl::nameUpdatedCallback(
 	const LLUUID& id,
-	const std::string& first,
-	const std::string& last,
-	BOOL is_group)
+	const std::string& name,
+	bool is_group)
 {
 	if (id == mAvatarId)
 	{
-		mFirstName = first;
-		mLastName = last;
+		mFullName = name;
 
 		if (mDrawTooltip)
 		{
-			setToolTip(mFirstName + " " + mLastName);
+			setToolTip(name);
 		}
 		else
 		{
-			setToolTip(std::string(""));
+			setToolTip(std::string());
 		}
 	}
 }
diff --git a/indra/newview/llavatariconctrl.h b/indra/newview/llavatariconctrl.h
index 38616b7852..a5452ee1d3 100644
--- a/indra/newview/llavatariconctrl.h
+++ b/indra/newview/llavatariconctrl.h
@@ -92,20 +92,17 @@ public:
 
 	void nameUpdatedCallback(
 		const LLUUID& id,
-		const std::string& first,
-		const std::string& last,
-		BOOL is_group);
+		const std::string& name,
+		bool is_group);
 
 	const LLUUID&		getAvatarId() const	{ return mAvatarId; }
-	const std::string&	getFirstName() const { return mFirstName; }
-	const std::string&	getLastName() const { return mLastName; }
+	const std::string&	getFullName() const { return mFullName; }
 
 	void setDrawTooltip(bool value) { mDrawTooltip = value;}
 
 protected:
 	LLUUID				mAvatarId;
-	std::string			mFirstName;
-	std::string			mLastName;
+	std::string			mFullName;
 	bool				mDrawTooltip;
 	std::string			mDefaultIconName;
 
diff --git a/indra/newview/llavatarlistitem.cpp b/indra/newview/llavatarlistitem.cpp
index 66ab32f3e8..6024dd8a21 100644
--- a/indra/newview/llavatarlistitem.cpp
+++ b/indra/newview/llavatarlistitem.cpp
@@ -193,7 +193,7 @@ void LLAvatarListItem::setAvatarId(const LLUUID& id, bool ignore_status_changes)
 		LLAvatarTracker::instance().addParticularFriendObserver(mAvatarId, this);
 
 	// Set avatar name.
-	gCacheName->get(id, FALSE, boost::bind(&LLAvatarListItem::onNameCache, this, _2, _3));
+	gCacheName->get(id, false, boost::bind(&LLAvatarListItem::onNameCache, this, _2));
 }
 
 void LLAvatarListItem::showLastInteractionTime(bool show)
@@ -298,10 +298,9 @@ void LLAvatarListItem::setNameInternal(const std::string& name, const std::strin
 	mAvatarName->setToolTip(name);
 }
 
-void LLAvatarListItem::onNameCache(const std::string& first_name, const std::string& last_name)
+void LLAvatarListItem::onNameCache(const std::string& fullname)
 {
-	std::string name = first_name + " " + last_name;
-	setName(name);
+	setName(fullname);
 }
 
 // Convert given number of seconds to a string like "23 minutes", "15 hours" or "3 years",
diff --git a/indra/newview/llavatarlistitem.h b/indra/newview/llavatarlistitem.h
index 479a4833cb..f3c1f0ec01 100644
--- a/indra/newview/llavatarlistitem.h
+++ b/indra/newview/llavatarlistitem.h
@@ -139,7 +139,7 @@ private:
 	} EAvatarListItemChildIndex;
 
 	void setNameInternal(const std::string& name, const std::string& highlight);
-	void onNameCache(const std::string& first_name, const std::string& last_name);
+	void onNameCache(const std::string& fullname);
 
 	std::string formatSeconds(U32 secs);
 
diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index a46cd84b60..12c8d58976 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -103,11 +103,7 @@ public:
 		}
 		else if (level == "add")
 		{
-			std::string name;
-			name.assign(getFirstName());
-			name.append(" ");
-			name.append(getLastName());
-
+			std::string name = getFullName();
 			LLAvatarActions::requestFriendshipDialog(getAvatarId(), name);
 		}
 		else if (level == "remove")
@@ -177,14 +173,13 @@ public:
 	}
 
 	const LLUUID&		getAvatarId () const { return mAvatarID;}
-	const std::string&	getFirstName() const { return mFirstName; }
-	const std::string&	getLastName	() const { return mLastName; }
+	const std::string&	getFullName() const { return mFullName; }
 
 	void setup(const LLChat& chat,const LLStyle::Params& style_params) 
 	{
 		mAvatarID = chat.mFromID;
 		mSourceType = chat.mSourceType;
-		gCacheName->get(mAvatarID, FALSE, boost::bind(&LLChatHistoryHeader::nameUpdatedCallback, this, _1, _2, _3, _4));
+		gCacheName->get(mAvatarID, false, boost::bind(&LLChatHistoryHeader::nameUpdatedCallback, this, _1, _2, _3));
 		if(chat.mFromID.isNull())
 		{
 			mSourceType = CHAT_SOURCE_SYSTEM;
@@ -256,12 +251,11 @@ public:
 		LLPanel::draw();
 	}
 
-	void nameUpdatedCallback(const LLUUID& id,const std::string& first,const std::string& last,BOOL is_group)
+	void nameUpdatedCallback(const LLUUID& id,const std::string& full_name, bool is_group)
 	{
 		if (id != mAvatarID)
 			return;
-		mFirstName = first;
-		mLastName = last;
+		mFullName = full_name;
 	}
 protected:
 	static const S32 PADDING = 20;
@@ -341,8 +335,7 @@ protected:
 
 	LLUUID			    mAvatarID;
 	EChatSourceType		mSourceType;
-	std::string			mFirstName;
-	std::string			mLastName;
+	std::string			mFullName;
 	std::string			mFrom;
 
 	S32					mMinUserNameWidth;
diff --git a/indra/newview/llfloaterbump.cpp b/indra/newview/llfloaterbump.cpp
index e925796526..9ccae43a92 100644
--- a/indra/newview/llfloaterbump.cpp
+++ b/indra/newview/llfloaterbump.cpp
@@ -89,7 +89,7 @@ void LLFloaterBump::onOpen(const LLSD& key)
 
 void LLFloaterBump::add(LLScrollListCtrl* list, LLMeanCollisionData* mcd)
 {
-	if (mcd->mFirstName.empty() || list->getItemCount() >= 20)
+	if (mcd->mFullName.empty() || list->getItemCount() >= 20)
 	{
 		return;
 	}
@@ -127,8 +127,7 @@ void LLFloaterBump::add(LLScrollListCtrl* list, LLMeanCollisionData* mcd)
 	// All above action strings are in XML file
 	LLUIString text = getString(action);
 	text.setArg("[TIME]", timeStr);
-	text.setArg("[FIRST]", mcd->mFirstName);
-	text.setArg("[LAST]", mcd->mLastName);
+	text.setArg("[NAME]", mcd->mFullName);
 
 	LLSD row;
 	row["id"] = mcd->mPerp;
diff --git a/indra/newview/llfloaterbuyland.cpp b/indra/newview/llfloaterbuyland.cpp
index 9b88923e7e..47678d1e82 100644
--- a/indra/newview/llfloaterbuyland.cpp
+++ b/indra/newview/llfloaterbuyland.cpp
@@ -182,9 +182,8 @@ public:
 	void updateNames();
 	// Name cache callback
 	void updateGroupName(const LLUUID& id,
-						 const std::string& first_name,
-						 const std::string& last_name,
-						 BOOL is_group);
+						 const std::string& name,
+						 bool is_group);
 	
 	void refreshUI();
 	
@@ -801,9 +800,9 @@ void LLFloaterBuyLandUI::updateNames()
 	}
 	else if (parcelp->getIsGroupOwned())
 	{
-		gCacheName->get(parcelp->getGroupID(), TRUE,
+		gCacheName->get(parcelp->getGroupID(), true,
 			boost::bind(&LLFloaterBuyLandUI::updateGroupName, this,
-				_1, _2, _3, _4));
+				_1, _2, _3));
 	}
 	else
 	{
@@ -813,16 +812,15 @@ void LLFloaterBuyLandUI::updateNames()
 }
 
 void LLFloaterBuyLandUI::updateGroupName(const LLUUID& id,
-						 const std::string& first_name,
-						 const std::string& last_name,
-						 BOOL is_group)
+						 const std::string& name,
+						 bool is_group)
 {
 	LLParcel* parcelp = mParcel->getParcel();
 	if (parcelp
 		&& parcelp->getGroupID() == id)
 	{
 		// request is current
-		mParcelSellerName = first_name;
+		mParcelSellerName = name;
 	}
 }
 
diff --git a/indra/newview/llfloaterpay.cpp b/indra/newview/llfloaterpay.cpp
index c2389e73a0..b37be3c1bf 100644
--- a/indra/newview/llfloaterpay.cpp
+++ b/indra/newview/llfloaterpay.cpp
@@ -47,6 +47,7 @@
 #include "lllineeditor.h"
 #include "llmutelist.h"
 #include "llfloaterreporter.h"
+#include "llslurl.h"
 #include "llviewerobject.h"
 #include "llviewerobjectlist.h"
 #include "llviewerregion.h"
@@ -102,10 +103,6 @@ private:
 	static void onGive(void* data);
 	void give(S32 amount);
 	static void processPayPriceReply(LLMessageSystem* msg, void **userdata);
-	void onCacheOwnerName(const LLUUID& owner_id,
-						  const std::string& firstname,
-						  const std::string& lastname,
-						  BOOL is_group);
 	void finishPayUI(const LLUUID& target_id, BOOL is_group);
 
 protected:
@@ -426,33 +423,28 @@ void LLFloaterPay::payDirectly(money_callback callback,
 	
 void LLFloaterPay::finishPayUI(const LLUUID& target_id, BOOL is_group)
 {
-	gCacheName->get(target_id, is_group, boost::bind(&LLFloaterPay::onCacheOwnerName, this, _1, _2, _3, _4));
-
-	// Make sure the amount field has focus
-
-	childSetFocus("amount", TRUE);
-	
-	LLLineEditor* amount = getChild<LLLineEditor>("amount");
-	amount->selectAll();
-	mTargetIsGroup = is_group;
-}
-
-void LLFloaterPay::onCacheOwnerName(const LLUUID& owner_id,
-									const std::string& firstname,
-									const std::string& lastname,
-									BOOL is_group)
-{
+	// IDEVO
+	//gCacheName->get(target_id, is_group, boost::bind(&LLFloaterPay::onCacheOwnerName, this, _1, _2, _3, _4));
+	std::string slurl;
 	if (is_group)
 	{
 		setTitle(getString("payee_group"));
+		slurl = LLSLURL::buildCommand("group", target_id, "inspect");
 	}
 	else
 	{
 		setTitle(getString("payee_resident"));
+		slurl = LLSLURL::buildCommand("agent", target_id, "inspect");
 	}
+	childSetText("payee_name", slurl);
+
+	// Make sure the amount field has focus
+
+	childSetFocus("amount", TRUE);
 	
-	childSetTextArg("payee_name", "[FIRST]", firstname);
-	childSetTextArg("payee_name", "[LAST]", lastname);
+	LLLineEditor* amount = getChild<LLLineEditor>("amount");
+	amount->selectAll();
+	mTargetIsGroup = is_group;
 }
 
 // static
diff --git a/indra/newview/llfloaterscriptlimits.cpp b/indra/newview/llfloaterscriptlimits.cpp
index 0964ad7f91..4a194217b5 100644
--- a/indra/newview/llfloaterscriptlimits.cpp
+++ b/indra/newview/llfloaterscriptlimits.cpp
@@ -335,11 +335,8 @@ void LLPanelScriptLimitsRegionMemory::setErrorStatus(U32 status, const std::stri
 // callback from the name cache with an owner name to add to the list
 void LLPanelScriptLimitsRegionMemory::onNameCache(
 						 const LLUUID& id,
-						 const std::string& first_name,
-						 const std::string& last_name)
+						 const std::string& name)
 {
-	std::string name = first_name + " " + last_name;
-
 	LLScrollListCtrl *list = getChild<LLScrollListCtrl>("scripts_list");	
 	std::vector<LLSD>::iterator id_itor;
 	for (id_itor = mObjectListItems.begin(); id_itor != mObjectListItems.end(); ++id_itor)
@@ -421,9 +418,12 @@ void LLPanelScriptLimitsRegionMemory::setRegionDetails(LLSD content)
 				if(std::find(names_requested.begin(), names_requested.end(), owner_id) == names_requested.end())
 				{
 					names_requested.push_back(owner_id);
-					gCacheName->get(owner_id, TRUE,
-					boost::bind(&LLPanelScriptLimitsRegionMemory::onNameCache,
-						this, _1, _2, _3));
+					// Is this a bug?  It's trying to look up a GROUP name, not
+					// an AVATAR name?  JC
+					const bool is_group = true;
+					gCacheName->get(owner_id, is_group,
+						boost::bind(&LLPanelScriptLimitsRegionMemory::onNameCache,
+							this, _1, _2));
 				}
 			}
 
diff --git a/indra/newview/llfloaterscriptlimits.h b/indra/newview/llfloaterscriptlimits.h
index 7e2b536eb6..77ff496893 100644
--- a/indra/newview/llfloaterscriptlimits.h
+++ b/indra/newview/llfloaterscriptlimits.h
@@ -166,10 +166,8 @@ public:
 	void returnObjects();
 
 private:
-
 	void onNameCache(	 const LLUUID& id,
-						 const std::string& first_name,
-						 const std::string& last_name);
+						 const std::string& name);
 
 	LLUUID mParcelId;
 	BOOL mGotParcelMemoryUsed;
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index c2a7969c0d..9cc4aefe35 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -2556,7 +2556,8 @@ void LLIMMgr::inviteToSession(
 	{
 		if (caller_name.empty())
 		{
-			gCacheName->get(caller_id, FALSE, boost::bind(&LLIMMgr::onInviteNameLookup, payload, _1, _2, _3, _4));
+			gCacheName->get(caller_id, false,
+				boost::bind(&LLIMMgr::onInviteNameLookup, payload, _1, _2, _3));
 		}
 		else
 		{
@@ -2566,9 +2567,9 @@ void LLIMMgr::inviteToSession(
 	}
 }
 
-void LLIMMgr::onInviteNameLookup(LLSD payload, const LLUUID& id, const std::string& first, const std::string& last, BOOL is_group)
+void LLIMMgr::onInviteNameLookup(LLSD payload, const LLUUID& id, const std::string& name, bool is_group)
 {
-	payload["caller_name"] = first + " " + last;
+	payload["caller_name"] = name;
 	payload["session_name"] = payload["caller_name"].asString();
 
 	std::string notify_box_type = payload["notify_box_type"].asString();
diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h
index a3b4f78af0..4de3d8b9b9 100644
--- a/indra/newview/llimview.h
+++ b/indra/newview/llimview.h
@@ -456,7 +456,7 @@ private:
 
 	void processIMTypingCore(const LLIMInfo* im_info, BOOL typing);
 
-	static void onInviteNameLookup(LLSD payload, const LLUUID& id, const std::string& first, const std::string& last, BOOL is_group);
+	static void onInviteNameLookup(LLSD payload, const LLUUID& id, const std::string& name, bool is_group);
 
 	void notifyObserverSessionAdded(const LLUUID& session_id, const std::string& name, const LLUUID& other_participant_id);
 	void notifyObserverSessionRemoved(const LLUUID& session_id);
diff --git a/indra/newview/llinspectavatar.cpp b/indra/newview/llinspectavatar.cpp
index 4b0539337b..c5cf40d7b7 100644
--- a/indra/newview/llinspectavatar.cpp
+++ b/indra/newview/llinspectavatar.cpp
@@ -138,11 +138,9 @@ private:
 	bool isNotFriend();
 	
 	// Callback for gCacheName to look up avatar name
-	void nameUpdatedCallback(
-							 const LLUUID& id,
-							 const std::string& first,
-							 const std::string& last,
-							 BOOL is_group);
+	void nameUpdatedCallback(const LLUUID& id,
+							 const std::string& name,
+							 bool is_group);
 	
 private:
 	LLUUID				mAvatarID;
@@ -359,9 +357,9 @@ void LLInspectAvatar::requestUpdate()
 
 	childSetValue("avatar_icon", LLSD(mAvatarID) );
 
-	gCacheName->get(mAvatarID, FALSE,
+	gCacheName->get(mAvatarID, false,
 		boost::bind(&LLInspectAvatar::nameUpdatedCallback,
-			this, _1, _2, _3, _4));
+			this, _1, _2, _3));
 }
 
 void LLInspectAvatar::processAvatarData(LLAvatarData* data)
@@ -597,13 +595,12 @@ void LLInspectAvatar::onVolumeChange(const LLSD& data)
 
 void LLInspectAvatar::nameUpdatedCallback(
 	const LLUUID& id,
-	const std::string& first,
-	const std::string& last,
-	BOOL is_group)
+	const std::string& name,
+	bool is_group)
 {
 	if (id == mAvatarID)
 	{
-		mAvatarName = first + " " + last;
+		mAvatarName = name;
 		childSetValue("user_name", LLSD(mAvatarName) );
 	}
 }
diff --git a/indra/newview/llinspectgroup.cpp b/indra/newview/llinspectgroup.cpp
index 7fd7b69021..364da3f64c 100644
--- a/indra/newview/llinspectgroup.cpp
+++ b/indra/newview/llinspectgroup.cpp
@@ -84,9 +84,8 @@ public:
 	// Callback for gCacheName to look up group name
 	// Faster than waiting for group properties to return
 	void nameUpdatedCallback(const LLUUID& id,
-							 const std::string& first,
-							 const std::string& last,
-							 BOOL is_group);
+							 const std::string& name,
+							 bool is_group);
 
 	// Button/menu callbacks
 	void onClickViewProfile();
@@ -225,21 +224,19 @@ void LLInspectGroup::requestUpdate()
 	mPropertiesRequest = new LLFetchGroupData(mGroupID, this);
 
 	// Name lookup will be faster out of cache, use that
-	gCacheName->get(mGroupID, TRUE,
+	gCacheName->get(mGroupID, true,
 		boost::bind(&LLInspectGroup::nameUpdatedCallback,
-			this, _1, _2, _3, _4));
+			this, _1, _2, _3));
 }
 
 void LLInspectGroup::nameUpdatedCallback(
 	const LLUUID& id,
-	const std::string& first,
-	const std::string& last,
-	BOOL is_group)
+	const std::string& name,
+	bool is_group)
 {
 	if (id == mGroupID)
 	{
-		// group names are returned as a first name
-		childSetValue("group_name", LLSD(first) );
+		childSetValue("group_name", LLSD(name) );
 	}
 	
 	// Otherwise possibly a request for an older inspector, ignore it
diff --git a/indra/newview/llinspectremoteobject.cpp b/indra/newview/llinspectremoteobject.cpp
index e4d2eec242..31f69d21d9 100644
--- a/indra/newview/llinspectremoteobject.cpp
+++ b/indra/newview/llinspectremoteobject.cpp
@@ -67,7 +67,7 @@ public:
 	
 private:
 	void update();
-	static void nameCallback(const LLUUID& id, const std::string& first, const std::string& last, BOOL is_group, void* data);
+	void onNameCache(const LLUUID& id, const std::string& name, bool is_group);
 	
 private:
 	LLUUID		 mObjectID;
@@ -122,7 +122,8 @@ void LLInspectRemoteObject::onOpen(const LLSD& data)
 	mOwner = "";
 	if (gCacheName)
 	{
-		gCacheName->get(mOwnerID, mGroupOwned, nameCallback, this);
+		gCacheName->get(mOwnerID, mGroupOwned,
+			boost::bind(&LLInspectRemoteObject::onNameCache, this, _1, _2, _3));
 	}
 
 	// update the inspector with the current object state
@@ -153,16 +154,10 @@ void LLInspectRemoteObject::onClickClose()
 	closeFloater();
 }
 
-//static 
-void LLInspectRemoteObject::nameCallback(const LLUUID& id, const std::string& first, const std::string& last, BOOL is_group, void* data)
+void LLInspectRemoteObject::onNameCache(const LLUUID& id, const std::string& name, bool is_group)
 {
-	LLInspectRemoteObject *self = (LLInspectRemoteObject*)data;
-	self->mOwner = first;
-	if (!last.empty())
-	{
-		self->mOwner += " " + last;
-	}
-	self->update();
+	mOwner = name;
+	update();
 }
 
 void LLInspectRemoteObject::update()
diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp
index 961f7adc0a..eadcfe9f09 100644
--- a/indra/newview/llinventorymodel.cpp
+++ b/indra/newview/llinventorymodel.cpp
@@ -752,7 +752,8 @@ U32 LLInventoryModel::updateItem(const LLViewerInventoryItem* item)
 			new_item->setCreator(id);
 			std::string avatar_name;
 			// Fetch the currect name
-			gCacheName->get(id, FALSE, boost::bind(&LLViewerInventoryItem::onCallingCardNameLookup, new_item.get(), _1, _2, _3));
+			gCacheName->get(id, false,
+				boost::bind(&LLViewerInventoryItem::onCallingCardNameLookup, new_item.get(), _1, _2, _3));
 		}
 	}
 	else if (new_item->getType() == LLAssetType::AT_GESTURE)
diff --git a/indra/newview/llmutelist.cpp b/indra/newview/llmutelist.cpp
index 7ee4c64f8f..0b4c07c9ed 100644
--- a/indra/newview/llmutelist.cpp
+++ b/indra/newview/llmutelist.cpp
@@ -496,7 +496,7 @@ void LLMuteList::updateRemove(const LLMute& mute)
 	gAgent.sendReliableMessage();
 }
 
-void notify_automute_callback(const LLUUID& agent_id, const std::string& first_name, const std::string& last_name, BOOL is_group, LLMuteList::EAutoReason reason)
+void notify_automute_callback(const LLUUID& agent_id, const std::string& full_name, bool is_group, LLMuteList::EAutoReason reason)
 {
 	std::string notif_name;
 	switch (reason)
@@ -514,8 +514,7 @@ void notify_automute_callback(const LLUUID& agent_id, const std::string& first_n
 	}
 
 	LLSD args;
-	args["FIRST"] = first_name;
-	args["LAST"] = last_name;
+	args["NAME"] = full_name;
     
 	LLNotificationPtr notif_ptr = LLNotifications::instance().add(notif_name, args, LLSD());
 	if (notif_ptr)
@@ -536,7 +535,7 @@ void notify_automute_callback(const LLUUID& agent_id, const std::string& first_n
 }
 
 
-BOOL LLMuteList::autoRemove(const LLUUID& agent_id, const EAutoReason reason, const std::string& first_name, const std::string& last_name)
+BOOL LLMuteList::autoRemove(const LLUUID& agent_id, const EAutoReason reason)
 {
 	BOOL removed = FALSE;
 
@@ -546,24 +545,17 @@ BOOL LLMuteList::autoRemove(const LLUUID& agent_id, const EAutoReason reason, co
 		removed = TRUE;
 		remove(automute);
 
-		if (first_name.empty() && last_name.empty())
+		std::string full_name;
+		if (gCacheName->getFullName(agent_id, full_name))
 		{
-			std::string cache_first, cache_last;
-			if (gCacheName->getName(agent_id, cache_first, cache_last))
-			{
-				// name in cache, call callback directly
-				notify_automute_callback(agent_id, cache_first, cache_last, FALSE, reason);
-			}
-			else
-			{
-				// not in cache, lookup name from cache
-				gCacheName->get(agent_id, FALSE, boost::bind(&notify_automute_callback, _1, _2, _3, _4, reason));
-			}
+			// name in cache, call callback directly
+			notify_automute_callback(agent_id, full_name, false, reason);
 		}
 		else
 		{
-			// call callback directly
-			notify_automute_callback(agent_id, first_name, last_name, FALSE, reason);
+			// not in cache, lookup name from cache
+			gCacheName->get(agent_id, false,
+				boost::bind(&notify_automute_callback, _1, _2, _3, reason));
 		}
 	}
 
diff --git a/indra/newview/llmutelist.h b/indra/newview/llmutelist.h
index 409b637bf2..11a20e015e 100644
--- a/indra/newview/llmutelist.h
+++ b/indra/newview/llmutelist.h
@@ -107,7 +107,7 @@ public:
 
 	// Remove both normal and legacy mutes, for any or all properties.
 	BOOL remove(const LLMute& mute, U32 flags = 0);
-	BOOL autoRemove(const LLUUID& agent_id, const EAutoReason reason, const std::string& first_name = LLStringUtil::null, const std::string& last_name = LLStringUtil::null);
+	BOOL autoRemove(const LLUUID& agent_id, const EAutoReason reason);
 	
 	// Name is required to test against legacy text-only mutes.
 	BOOL isMuted(const LLUUID& id, const std::string& name = LLStringUtil::null, U32 flags = 0) const;
diff --git a/indra/newview/llnamebox.cpp b/indra/newview/llnamebox.cpp
index cd810b9793..da3e95e947 100644
--- a/indra/newview/llnamebox.cpp
+++ b/indra/newview/llnamebox.cpp
@@ -87,26 +87,15 @@ void LLNameBox::setNameID(const LLUUID& name_id, BOOL is_group)
 		setText(mInitialValue);
 }
 
-void LLNameBox::refresh(const LLUUID& id, const std::string& firstname,
-						const std::string& lastname, BOOL is_group)
+void LLNameBox::refresh(const LLUUID& id, const std::string& full_name, bool is_group)
 {
 	if (id == mNameID)
 	{
-		std::string name;
-		if (!is_group)
-		{
-			name = firstname + " " + lastname;
-		}
-		else
-		{
-			name = firstname;
-		}
-		setName(name, is_group);
+		setName(full_name, is_group);
 	}
 }
 
-void LLNameBox::refreshAll(const LLUUID& id, const std::string& firstname,
-						   const std::string& lastname, BOOL is_group)
+void LLNameBox::refreshAll(const LLUUID& id, const std::string& full_name, bool is_group)
 {
 	std::set<LLNameBox*>::iterator it;
 	for (it = LLNameBox::sInstances.begin();
@@ -114,7 +103,7 @@ void LLNameBox::refreshAll(const LLUUID& id, const std::string& firstname,
 		 ++it)
 	{
 		LLNameBox* box = *it;
-		box->refresh(id, firstname, lastname, is_group);
+		box->refresh(id, full_name, is_group);
 	}
 }
 
diff --git a/indra/newview/llnamebox.h b/indra/newview/llnamebox.h
index 48b54faec8..2fe8990653 100644
--- a/indra/newview/llnamebox.h
+++ b/indra/newview/llnamebox.h
@@ -59,10 +59,9 @@ public:
 
 	void setNameID(const LLUUID& name_id, BOOL is_group);
 
-	void refresh(const LLUUID& id, const std::string& first, const std::string& last, BOOL is_group);
+	void refresh(const LLUUID& id, const std::string& full_name, bool is_group);
 
-	static void refreshAll(const LLUUID& id, const std::string& firstname,
-						   const std::string& lastname, BOOL is_group);
+	static void refreshAll(const LLUUID& id, const std::string& full_name, bool is_group);
 
 protected:
 	LLNameBox (const Params&);
diff --git a/indra/newview/llnameeditor.cpp b/indra/newview/llnameeditor.cpp
index 65601da7da..0c704a1f56 100644
--- a/indra/newview/llnameeditor.cpp
+++ b/indra/newview/llnameeditor.cpp
@@ -81,26 +81,15 @@ void LLNameEditor::setNameID(const LLUUID& name_id, BOOL is_group)
 	setText(name);
 }
 
-void LLNameEditor::refresh(const LLUUID& id, const std::string& firstname,
-						   const std::string& lastname, BOOL is_group)
+void LLNameEditor::refresh(const LLUUID& id, const std::string& full_name, bool is_group)
 {
 	if (id == mNameID)
 	{
-		std::string name;
-		if (!is_group)
-		{
-			name = firstname + " " + lastname;
-		}
-		else
-		{
-			name = firstname;
-		}
-		setText(name);
+		setText(full_name);
 	}
 }
 
-void LLNameEditor::refreshAll(const LLUUID& id, const std::string& firstname,
-							  const std::string& lastname, BOOL is_group)
+void LLNameEditor::refreshAll(const LLUUID& id, const std::string& full_name, bool is_group)
 {
 	std::set<LLNameEditor*>::iterator it;
 	for (it = LLNameEditor::sInstances.begin();
@@ -108,7 +97,7 @@ void LLNameEditor::refreshAll(const LLUUID& id, const std::string& firstname,
 		 ++it)
 	{
 		LLNameEditor* box = *it;
-		box->refresh(id, firstname, lastname, is_group);
+		box->refresh(id, full_name, is_group);
 	}
 }
 
diff --git a/indra/newview/llnameeditor.h b/indra/newview/llnameeditor.h
index 99e03a1166..a75c492aca 100644
--- a/indra/newview/llnameeditor.h
+++ b/indra/newview/llnameeditor.h
@@ -65,10 +65,9 @@ public:
 
 	void setNameID(const LLUUID& name_id, BOOL is_group);
 
-	void refresh(const LLUUID& id, const std::string& first, const std::string& last, BOOL is_group);
+	void refresh(const LLUUID& id, const std::string& full_name, bool is_group);
 
-	static void refreshAll(const LLUUID& id, const std::string& firstname,
-						   const std::string& lastname, BOOL is_group);
+	static void refreshAll(const LLUUID& id, const std::string& full_name, bool is_group);
 
 
 	// Take/return agent UUIDs
diff --git a/indra/newview/llnamelistctrl.cpp b/indra/newview/llnamelistctrl.cpp
index 6375362ae2..c9fbf35033 100644
--- a/indra/newview/llnamelistctrl.cpp
+++ b/indra/newview/llnamelistctrl.cpp
@@ -314,22 +314,11 @@ void LLNameListCtrl::removeNameItem(const LLUUID& agent_id)
 }
 
 // public
-void LLNameListCtrl::refresh(const LLUUID& id, const std::string& first, 
-							 const std::string& last, BOOL is_group)
+void LLNameListCtrl::refresh(const LLUUID& id, const std::string& full_name, bool is_group)
 {
 	//llinfos << "LLNameListCtrl::refresh " << id << " '" << first << " "
 	//	<< last << "'" << llendl;
 
-	std::string fullname;
-	if (!is_group)
-	{
-		fullname = first + " " + last;
-	}
-	else
-	{
-		fullname = first;
-	}
-
 	// TODO: scan items for that ID, fix if necessary
 	item_list::iterator iter;
 	for (iter = getItemList().begin(); iter != getItemList().end(); iter++)
@@ -341,7 +330,7 @@ void LLNameListCtrl::refresh(const LLUUID& id, const std::string& first,
 			cell = item->getColumn(mNameColumnIndex);
 			if (cell)
 			{
-				cell->setValue(fullname);
+				cell->setValue(full_name);
 			}
 		}
 	}
@@ -351,14 +340,13 @@ void LLNameListCtrl::refresh(const LLUUID& id, const std::string& first,
 
 
 // static
-void LLNameListCtrl::refreshAll(const LLUUID& id, const std::string& first,
-								const std::string& last, BOOL is_group)
+void LLNameListCtrl::refreshAll(const LLUUID& id, const std::string& full_name, bool is_group)
 {
 	LLInstanceTracker<LLNameListCtrl>::instance_iter it;
 	for (it = beginInstances(); it != endInstances(); ++it)
 	{
 		LLNameListCtrl& ctrl = *it;
-		ctrl.refresh(id, first, last, is_group);
+		ctrl.refresh(id, full_name, is_group);
 	}
 }
 
diff --git a/indra/newview/llnamelistctrl.h b/indra/newview/llnamelistctrl.h
index 192a3a5afa..0e8eb39fd6 100644
--- a/indra/newview/llnamelistctrl.h
+++ b/indra/newview/llnamelistctrl.h
@@ -105,10 +105,9 @@ public:
 
 	void removeNameItem(const LLUUID& agent_id);
 
-	void refresh(const LLUUID& id, const std::string& first, const std::string& last, BOOL is_group);
+	void refresh(const LLUUID& id, const std::string& full_name, bool is_group);
 
-	static void refreshAll(const LLUUID& id, const std::string& firstname,
-						   const std::string& lastname, BOOL is_group);
+	static void refreshAll(const LLUUID& id, const std::string& full_name, bool is_group);
 
 	// LLView interface
 	/*virtual*/ BOOL	handleDragAndDrop(S32 x, S32 y, MASK mask,
diff --git a/indra/newview/llpanelavatartag.cpp b/indra/newview/llpanelavatartag.cpp
index 7563cc7f61..173fb851ce 100644
--- a/indra/newview/llpanelavatartag.cpp
+++ b/indra/newview/llpanelavatartag.cpp
@@ -86,7 +86,7 @@ void LLPanelAvatarTag::setAvatarId(const LLUUID& avatar_id)
 	{
 		mIcon->setValue(avatar_id);
 	}
-	setName(std::string(mIcon->getFirstName()+ " "+ mIcon->getLastName()));
+	setName(std::string(mIcon->getFullName()));
 }
 
 boost::signals2::connection LLPanelAvatarTag::setLeftButtonClickCallback(
diff --git a/indra/newview/llpanelimcontrolpanel.cpp b/indra/newview/llpanelimcontrolpanel.cpp
index a334eb9d68..a39fe64767 100644
--- a/indra/newview/llpanelimcontrolpanel.cpp
+++ b/indra/newview/llpanelimcontrolpanel.cpp
@@ -164,7 +164,7 @@ void LLPanelIMControlPanel::onViewProfileButtonClicked()
 void LLPanelIMControlPanel::onAddFriendButtonClicked()
 {
 	LLAvatarIconCtrl* avatar_icon = getChild<LLAvatarIconCtrl>("avatar_icon");
-	std::string full_name = avatar_icon->getFirstName() + " " + avatar_icon->getLastName();
+	std::string full_name = avatar_icon->getFullName();
 	LLAvatarActions::requestFriendshipDialog(mAvatarID, full_name);
 }
 
@@ -213,7 +213,8 @@ void LLPanelIMControlPanel::setSessionId(const LLUUID& session_id)
 	else
 	{
 		// If the participant is an avatar, fetch the currect name
-		gCacheName->get(mAvatarID, FALSE, boost::bind(&LLPanelIMControlPanel::nameUpdatedCallback, this, _1, _2, _3, _4));
+		gCacheName->get(mAvatarID, false,
+			boost::bind(&LLPanelIMControlPanel::onNameCache, this, _1, _2, _3));
 	}
 }
 
@@ -229,14 +230,11 @@ void LLPanelIMControlPanel::changed(U32 mask)
 	}
 }
 
-void LLPanelIMControlPanel::nameUpdatedCallback(const LLUUID& id, const std::string& first, const std::string& last, BOOL is_group)
+void LLPanelIMControlPanel::onNameCache(const LLUUID& id, const std::string& full_name, bool is_group)
 {
 	if ( id == mAvatarID )
 	{
-		std::string avatar_name;
-		avatar_name.assign(first);
-		avatar_name.append(" ");
-		avatar_name.append(last);
+		std::string avatar_name = full_name;
 		getChild<LLTextBox>("avatar_name")->setValue(avatar_name);
 		getChild<LLTextBox>("avatar_name")->setToolTip(avatar_name);
 	}
diff --git a/indra/newview/llpanelimcontrolpanel.h b/indra/newview/llpanelimcontrolpanel.h
index 25fdf944c9..0d750acc82 100644
--- a/indra/newview/llpanelimcontrolpanel.h
+++ b/indra/newview/llpanelimcontrolpanel.h
@@ -82,7 +82,7 @@ public:
 	virtual void changed(U32 mask);
 
 protected:
-	void nameUpdatedCallback(const LLUUID& id, const std::string& first, const std::string& last, BOOL is_group);
+	void onNameCache(const LLUUID& id, const std::string& full_name, bool is_group);
 
 private:
 	void onViewProfileButtonClicked();
diff --git a/indra/newview/llpanelmediasettingspermissions.cpp b/indra/newview/llpanelmediasettingspermissions.cpp
index a23aed2e98..dcc052f15e 100644
--- a/indra/newview/llpanelmediasettingspermissions.cpp
+++ b/indra/newview/llpanelmediasettingspermissions.cpp
@@ -115,7 +115,7 @@ void LLPanelMediaSettingsPermissions::draw()
 		if(mPermsGroupName)
 		{
 			mPermsGroupName->setNameID(LLUUID::null, TRUE);
-			mPermsGroupName->refresh(LLUUID::null, LLStringUtil::null, LLStringUtil::null, true);
+			mPermsGroupName->refresh(LLUUID::null, std::string(), true);
 			mPermsGroupName->setEnabled(false);
 		};
 	};
diff --git a/indra/newview/llpanelpermissions.cpp b/indra/newview/llpanelpermissions.cpp
index 8b8b1bed37..b820adeaf3 100644
--- a/indra/newview/llpanelpermissions.cpp
+++ b/indra/newview/llpanelpermissions.cpp
@@ -385,7 +385,7 @@ void LLPanelPermissions::refresh()
 		if (mLabelGroupName)
 		{
 			mLabelGroupName->setNameID(LLUUID::null, TRUE);
-			mLabelGroupName->refresh(LLUUID::null,LLStringUtil::null, LLStringUtil::null, TRUE);
+			mLabelGroupName->refresh(LLUUID::null, std::string(), true);
 			mLabelGroupName->setEnabled(FALSE);
 		}
 	}
diff --git a/indra/newview/llpanelplaceinfo.cpp b/indra/newview/llpanelplaceinfo.cpp
index 0c10f11bfc..ccb364a001 100644
--- a/indra/newview/llpanelplaceinfo.cpp
+++ b/indra/newview/llpanelplaceinfo.cpp
@@ -274,9 +274,7 @@ void LLPanelPlaceInfo::createPick(const LLVector3d& pos_global, LLPanelPickEdit*
 }
 
 // static
-void LLPanelPlaceInfo::nameUpdatedCallback(LLTextBox* text,
-										   const std::string& first,
-										   const std::string& last)
+void LLPanelPlaceInfo::onNameCache(LLTextBox* text, const std::string& full_name)
 {
-	text->setText(first + " " + last);
+	text->setText(full_name);
 }
diff --git a/indra/newview/llpanelplaceinfo.h b/indra/newview/llpanelplaceinfo.h
index 3091f7ed24..248b967842 100644
--- a/indra/newview/llpanelplaceinfo.h
+++ b/indra/newview/llpanelplaceinfo.h
@@ -100,9 +100,7 @@ public:
 	void createPick(const LLVector3d& pos_global, LLPanelPickEdit* pick_panel);
 
 protected:
-	static void nameUpdatedCallback(LLTextBox* text,
-									const std::string& first,
-									const std::string& last);
+	static void onNameCache(LLTextBox* text, const std::string& full_name);
 
 	/**
 	 * mParcelID is valid only for remote places, in other cases it's null. See resetLocation() 
diff --git a/indra/newview/llpanelplaceprofile.cpp b/indra/newview/llpanelplaceprofile.cpp
index a80b6f2e0e..a24f873145 100644
--- a/indra/newview/llpanelplaceprofile.cpp
+++ b/indra/newview/llpanelplaceprofile.cpp
@@ -426,11 +426,11 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,
 			if(!parcel->getGroupID().isNull())
 			{
 				// FIXME: Using parcel group as region group.
-				gCacheName->get(parcel->getGroupID(), TRUE,
-								boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mRegionGroupText, _2, _3));
+				gCacheName->get(parcel->getGroupID(), true,
+								boost::bind(&LLPanelPlaceInfo::onNameCache, mRegionGroupText, _2));
 
-				gCacheName->get(parcel->getGroupID(), TRUE,
-								boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mParcelOwner, _2, _3));
+				gCacheName->get(parcel->getGroupID(), true,
+								boost::bind(&LLPanelPlaceInfo::onNameCache, mParcelOwner, _2));
 			}
 			else
 			{
@@ -448,8 +448,8 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,
 			std::string parcel_owner =
 				LLSLURL::buildCommand("agent", parcel->getOwnerID(), "inspect");
 			mParcelOwner->setText(parcel_owner);
-			gCacheName->get(region->getOwner(), FALSE,
-							boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mRegionOwnerText, _2, _3));
+			gCacheName->get(region->getOwner(), false,
+							boost::bind(&LLPanelPlaceInfo::onNameCache, mRegionOwnerText, _2));
 		}
 
 		if(LLParcel::OS_LEASE_PENDING == parcel->getOwnershipStatus())
@@ -475,8 +475,8 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,
 		const LLUUID& auth_buyer_id = parcel->getAuthorizedBuyerID();
 		if(auth_buyer_id.notNull())
 		{
-			gCacheName->get(auth_buyer_id, TRUE,
-							boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mSaleToText, _2, _3));
+			gCacheName->get(auth_buyer_id, true,
+							boost::bind(&LLPanelPlaceInfo::onNameCache, mSaleToText, _2));
 
 			// Show sales info to a specific person or a group he belongs to.
 			if (auth_buyer_id != gAgent.getID() && !gAgent.isInGroup(auth_buyer_id))
diff --git a/indra/newview/llpanelprofileview.cpp b/indra/newview/llpanelprofileview.cpp
index 7832f63e6a..1e7a259b41 100644
--- a/indra/newview/llpanelprofileview.cpp
+++ b/indra/newview/llpanelprofileview.cpp
@@ -109,8 +109,8 @@ void LLPanelProfileView::onOpen(const LLSD& key)
 	}
 
 	// Update the avatar name.
-	gCacheName->get(getAvatarId(), FALSE,
-		boost::bind(&LLPanelProfileView::onAvatarNameCached, this, _1, _2, _3, _4));
+	gCacheName->get(getAvatarId(), false,
+		boost::bind(&LLPanelProfileView::onNameCache, this, _1, _2, _3));
 /*
 // disable this part of code according to EXT-2022. See processOnlineStatus
 	// status should only show if viewer has permission to view online/offline. EXT-453 
@@ -187,10 +187,10 @@ void LLPanelProfileView::processOnlineStatus(bool online)
 	mStatusText->setVisible(online);
 }
 
-void LLPanelProfileView::onAvatarNameCached(const LLUUID& id, const std::string& first_name, const std::string& last_name, BOOL is_group)
+void LLPanelProfileView::onNameCache(const LLUUID& id, const std::string& full_name, bool is_group)
 {
 	llassert(getAvatarId() == id);
-	getChild<LLUICtrl>("user_name", FALSE)->setValue(first_name + " " + last_name);
+	getChild<LLUICtrl>("user_name", FALSE)->setValue(full_name);
 }
 
 void LLPanelProfileView::togglePanel(LLPanel* panel, const LLSD& key)
diff --git a/indra/newview/llpanelprofileview.h b/indra/newview/llpanelprofileview.h
index 5dc617d4a0..02bb004a1e 100644
--- a/indra/newview/llpanelprofileview.h
+++ b/indra/newview/llpanelprofileview.h
@@ -88,11 +88,10 @@ protected:
 private:
 	// LLCacheName will call this function when avatar name is loaded from server.
 	// This is required to display names that have not been cached yet.
-	void onAvatarNameCached(
+	void onNameCache(
 		const LLUUID& id, 
-		const std::string& first_name,
-		const std::string& last_name,
-		BOOL is_group);
+		const std::string& full_name,
+		bool is_group);
 
 	LLTextBox* mStatusText;
 	AvatarStatusObserver* mAvatarStatusObserver;
diff --git a/indra/newview/llsidepaneltaskinfo.cpp b/indra/newview/llsidepaneltaskinfo.cpp
index 0b8f66c5f3..1da6fc516d 100644
--- a/indra/newview/llsidepaneltaskinfo.cpp
+++ b/indra/newview/llsidepaneltaskinfo.cpp
@@ -348,7 +348,7 @@ void LLSidepanelTaskInfo::refresh()
 		if (mLabelGroupName)
 		{
 			mLabelGroupName->setNameID(LLUUID::null, TRUE);
-			mLabelGroupName->refresh(LLUUID::null,LLStringUtil::null, LLStringUtil::null, TRUE);
+			mLabelGroupName->refresh(LLUUID::null, std::string(), true);
 			mLabelGroupName->setEnabled(FALSE);
 		}
 	}
diff --git a/indra/newview/llspeakers.cpp b/indra/newview/llspeakers.cpp
index 9608cd1263..fea78852c1 100644
--- a/indra/newview/llspeakers.cpp
+++ b/indra/newview/llspeakers.cpp
@@ -77,12 +77,13 @@ LLSpeaker::LLSpeaker(const LLUUID& id, const std::string& name, const ESpeakerTy
 
 void LLSpeaker::lookupName()
 {
-	gCacheName->get(mID, FALSE, boost::bind(&LLSpeaker::onAvatarNameLookup, this, _1, _2, _3, _4));
+	gCacheName->get(mID, false,
+		boost::bind(&LLSpeaker::onNameCache, this, _1, _2, _3));
 }
 
-void LLSpeaker::onAvatarNameLookup(const LLUUID& id, const std::string& first, const std::string& last, BOOL is_group)
+void LLSpeaker::onNameCache(const LLUUID& id, const std::string& full_name, bool is_group)
 {
-	mDisplayName = first + " " + last;
+	mDisplayName = full_name;
 }
 
 bool LLSpeaker::isInVoiceChannel()
diff --git a/indra/newview/llspeakers.h b/indra/newview/llspeakers.h
index 63237204c8..cf236f4fe8 100644
--- a/indra/newview/llspeakers.h
+++ b/indra/newview/llspeakers.h
@@ -65,7 +65,7 @@ public:
 	~LLSpeaker() {};
 	void lookupName();
 
-	void onAvatarNameLookup(const LLUUID& id, const std::string& first, const std::string& last, BOOL is_group);
+	void onNameCache(const LLUUID& id, const std::string& full_name, bool is_group);
 
 	bool isInVoiceChannel();
 
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index a372ab44f2..0ba5fa9866 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -268,11 +268,11 @@ void apply_udp_blacklist(const std::string& csv);
 bool process_login_success_response();
 void transition_back_to_login_panel(const std::string& emsg);
 
-void callback_cache_name(const LLUUID& id, const std::string& firstname, const std::string& lastname, BOOL is_group)
+void callback_cache_name(const LLUUID& id, const std::string& full_name, bool is_group)
 {
-	LLNameListCtrl::refreshAll(id, firstname, lastname, is_group);
-	LLNameBox::refreshAll(id, firstname, lastname, is_group);
-	LLNameEditor::refreshAll(id, firstname, lastname, is_group);
+	LLNameListCtrl::refreshAll(id, full_name, is_group);
+	LLNameBox::refreshAll(id, full_name, is_group);
+	LLNameEditor::refreshAll(id, full_name, is_group);
 	
 	// TODO: Actually be intelligent about the refresh.
 	// For now, just brute force refresh the dialogs.
diff --git a/indra/newview/llurlentryagent.cpp b/indra/newview/llurlentryagent.cpp
index 6af7c9001d..bce64d7140 100644
--- a/indra/newview/llurlentryagent.cpp
+++ b/indra/newview/llurlentryagent.cpp
@@ -53,10 +53,10 @@ LLUrlEntryAgent::LLUrlEntryAgent()
 }
 
 // IDEVO demo code
-static std::string clean_name(const std::string& first, const std::string& last)
+static std::string clean_name(const std::string& full_name)
 {
 	std::string displayname;
-	if (first == "miyazaki23") // IDEVO demo code
+	if (full_name == "miyazaki23") // IDEVO demo code
 	{
 		// miyazaki
 		displayname += (char)(0xE5);
@@ -77,44 +77,35 @@ static std::string clean_name(const std::string& first, const std::string& last)
 		displayname += (char)(0x82);
 		displayname += (char)(0x93);
 	}
-	else if (first == "Jim")
+	else if (full_name == "Jim Linden")
 	{
 		displayname = "Jos";
 		displayname += (char)(0xC3);
 		displayname += (char)(0xA9);
 		displayname += " Sanchez";
 	}
-	else if (first == "James")
+	else if (full_name == "James Linden")
 	{
 		displayname = "James Cook";
 	}
 
-	std::string fullname = first;
-	if (!last.empty()
-		&& last != "Resident")
-	{
-		fullname += ' ';
-		fullname += last;
-	}
-
 	std::string final;
 	if (!displayname.empty())
 	{
-		final = displayname + " (" + fullname + ")";
+		final = displayname + " (" + full_name + ")";
 	}
 	else
 	{
-		final = fullname;
+		final = full_name;
 	}
 	return final;
 }
 
-void LLUrlEntryAgent::onAgentNameReceived(const LLUUID& id,
-										  const std::string& first,
-										  const std::string& last,
-										  BOOL is_group)
+void LLUrlEntryAgent::onNameCache(const LLUUID& id,
+								  const std::string& full_name,
+								  bool is_group)
 {
-	std::string final = clean_name(first, last);
+	std::string final = clean_name(full_name);
 	// received the agent name from the server - tell our observers
 	callObservers(id.asString(), final);
 }
@@ -135,20 +126,20 @@ std::string LLUrlEntryAgent::getLabel(const std::string &url, const LLUrlLabelCa
 	}
 
 	LLUUID agent_id(agent_id_string);
-	std::string first, last;
+	std::string full_name;
 	if (agent_id.isNull())
 	{
 		return LLTrans::getString("AvatarNameNobody");
 	}
-	else if (gCacheName->getName(agent_id, first, last))
+	else if (gCacheName->getFullName(agent_id, full_name))
 	{
-		return clean_name(first, last);
+		return clean_name(full_name);
 	}
 	else
 	{
-		gCacheName->get(agent_id, FALSE,
-			boost::bind(&LLUrlEntryAgent::onAgentNameReceived,
-				this, _1, _2, _3, _4));
+		gCacheName->get(agent_id, false,
+			boost::bind(&LLUrlEntryAgent::onNameCache,
+				this, _1, _2, _3));
 		addObserver(agent_id_string, url, cb);
 		return LLTrans::getString("LoadingData");
 	}
diff --git a/indra/newview/llurlentryagent.h b/indra/newview/llurlentryagent.h
index 8e5e321a31..76a54dfeb1 100644
--- a/indra/newview/llurlentryagent.h
+++ b/indra/newview/llurlentryagent.h
@@ -46,8 +46,7 @@ public:
 	LLUrlEntryAgent();
 	/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb);
 private:
-	void onAgentNameReceived(const LLUUID& id, const std::string& first,
-							 const std::string& last, BOOL is_group);
+	void onNameCache(const LLUUID& id, const std::string& full_name, bool is_group);
 };
 
 #endif
diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp
index b330c1ba83..189a174d11 100644
--- a/indra/newview/llviewerinventory.cpp
+++ b/indra/newview/llviewerinventory.cpp
@@ -1432,9 +1432,9 @@ bool LLViewerInventoryItem::checkPermissionsSet(PermissionMask mask) const
 
 //----------
 
-void LLViewerInventoryItem::onCallingCardNameLookup(const LLUUID& id, const std::string& first_name, const std::string& last_name)
+void LLViewerInventoryItem::onCallingCardNameLookup(const LLUUID& id, const std::string& name, bool is_group)
 {
-	rename(first_name + " " + last_name);
+	rename(name);
 	gInventory.addChangedMask(LLInventoryObserver::LABEL, getUUID());
 	gInventory.notifyObservers();
 }
diff --git a/indra/newview/llviewerinventory.h b/indra/newview/llviewerinventory.h
index 917b8747ea..eb6e0fdc9c 100644
--- a/indra/newview/llviewerinventory.h
+++ b/indra/newview/llviewerinventory.h
@@ -164,7 +164,7 @@ public:
 	bool checkPermissionsSet(PermissionMask mask) const;
 
 	// callback
-	void onCallingCardNameLookup(const LLUUID& id, const std::string& first_name, const std::string& last_name);
+	void onCallingCardNameLookup(const LLUUID& id, const std::string& name, bool is_group);
 
 	// If this is a broken link, try to fix it and any other identical link.
 	BOOL regenerateLink();
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index b7d3e407c6..79e21b3ee7 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -983,27 +983,24 @@ void open_inventory_offer(const std::vector<LLUUID>& items, const std::string& f
 }
 
 void inventory_offer_mute_callback(const LLUUID& blocked_id,
-								   const std::string& first_name,
-								   const std::string& last_name,
-								   BOOL is_group, LLOfferInfo* offer = NULL)
+								   const std::string& full_name,
+								   bool is_group,
+								   LLOfferInfo* offer = NULL)
 {
-	std::string from_name;
+	std::string from_name = full_name;
 	LLMute::EType type;
 	if (is_group)
 	{
 		type = LLMute::GROUP;
-		from_name = first_name;
 	}
 	else if(offer && offer->mFromObject)
 	{
 		//we have to block object by name because blocked_id is an id of owner
 		type = LLMute::BY_NAME;
-		from_name = offer->mFromName;
 	}
 	else
 	{
 		type = LLMute::AGENT;
-		from_name = first_name + " " + last_name;
 	}
 
 	// id should be null for BY_NAME mute, see  LLMuteList::add for details  
@@ -1129,7 +1126,7 @@ bool LLOfferInfo::inventory_offer_callback(const LLSD& notification, const LLSD&
 	// * we can't build two messages at once.
 	if (2 == button) // Block
 	{
-		gCacheName->get(mFromID, mFromGroup, boost::bind(&inventory_offer_mute_callback,_1,_2,_3,_4,this));
+		gCacheName->get(mFromID, mFromGroup, boost::bind(&inventory_offer_mute_callback,_1,_2,_3,this));
 	}
 
 	std::string from_string; // Used in the pop-up.
@@ -1270,7 +1267,7 @@ bool LLOfferInfo::inventory_task_offer_callback(const LLSD& notification, const
 	// * we can't build two messages at once.
 	if (2 == button)
 	{
-		gCacheName->get(mFromID, mFromGroup, boost::bind(&inventory_offer_mute_callback,_1,_2,_3,_4,this));
+		gCacheName->get(mFromID, mFromGroup, boost::bind(&inventory_offer_mute_callback,_1,_2,_3,this));
 	}
 	
 	LLMessageSystem* msg = gMessageSystem;
@@ -4761,7 +4758,7 @@ void handle_show_mean_events(void *)
 	//LLFloaterBump::showInstance();
 }
 
-void mean_name_callback(const LLUUID &id, const std::string& first, const std::string& last, BOOL always_false)
+void mean_name_callback(const LLUUID &id, const std::string& full_name, bool is_group)
 {
 	if (gNoRender)
 	{
@@ -4783,8 +4780,7 @@ void mean_name_callback(const LLUUID &id, const std::string& first, const std::s
 		LLMeanCollisionData *mcd = *iter;
 		if (mcd->mPerp == id)
 		{
-			mcd->mFirstName = first;
-			mcd->mLastName = last;
+			mcd->mFullName = full_name;
 		}
 	}
 }
@@ -4838,8 +4834,7 @@ void process_mean_collision_alert_message(LLMessageSystem *msgsystem, void **use
 		{
 			LLMeanCollisionData *mcd = new LLMeanCollisionData(gAgentID, perp, time, type, mag);
 			gMeanCollisionList.push_front(mcd);
-			const BOOL is_group = FALSE;
-			gCacheName->get(perp, is_group, &mean_name_callback);
+			gCacheName->get(perp, false, boost::bind(&mean_name_callback, _1, _2, _3));
 		}
 	}
 }
@@ -5738,7 +5733,7 @@ static LLNotificationFunctorRegistration callback_load_url_reg("LoadWebPage", ca
 
 // We've got the name of the person who owns the object hurling the url.
 // Display confirmation dialog.
-void callback_load_url_name(const LLUUID& id, const std::string& first, const std::string& last, BOOL is_group)
+void callback_load_url_name(const LLUUID& id, const std::string& full_name, bool is_group)
 {
 	std::vector<LLSD>::iterator it;
 	for (it = gLoadUrlList.begin(); it != gLoadUrlList.end(); )
@@ -5751,11 +5746,11 @@ void callback_load_url_name(const LLUUID& id, const std::string& first, const st
 			std::string owner_name;
 			if (is_group)
 			{
-				owner_name = first + LLTrans::getString("Group");
+				owner_name = full_name + LLTrans::getString("Group");
 			}
 			else
 			{
-				owner_name = first + " " + last;
+				owner_name = full_name;
 			}
 
 			// For legacy name-only mutes.
@@ -5815,7 +5810,8 @@ void process_load_url(LLMessageSystem* msg, void**)
 	// Add to list of pending name lookups
 	gLoadUrlList.push_back(payload);
 
-	gCacheName->get(owner_id, owner_is_group, &callback_load_url_name);
+	gCacheName->get(owner_id, owner_is_group,
+		boost::bind(&callback_load_url_name, _1, _2, _3));
 }
 
 
diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp
index c84afa5af1..1d9297cf2d 100644
--- a/indra/newview/llvoiceclient.cpp
+++ b/indra/newview/llvoiceclient.cpp
@@ -6941,18 +6941,8 @@ void LLVoiceClient::notifyFriendObservers()
 
 void LLVoiceClient::lookupName(const LLUUID &id)
 {
-	BOOL is_group = FALSE;
-	gCacheName->get(id, is_group, &LLVoiceClient::onAvatarNameLookup);
-}
-
-//static
-void LLVoiceClient::onAvatarNameLookup(const LLUUID& id, const std::string& first, const std::string& last, BOOL is_group)
-{
-	if(gVoiceClient)
-	{
-		std::string name = llformat("%s %s", first.c_str(), last.c_str());
-		gVoiceClient->avatarNameResolved(id, name);
-	}
+	gCacheName->get(id, false,
+		boost::bind(&LLVoiceClient::avatarNameResolved, this, _1, _2));
 }
 
 void LLVoiceClient::avatarNameResolved(const LLUUID &id, const std::string &name)
diff --git a/indra/newview/llvoiceclient.h b/indra/newview/llvoiceclient.h
index 6231c6ba29..c6f6b2368b 100644
--- a/indra/newview/llvoiceclient.h
+++ b/indra/newview/llvoiceclient.h
@@ -474,7 +474,6 @@ static	void updatePosition(void);
 		void removeObserver(LLFriendObserver* observer);
 		
 		void lookupName(const LLUUID &id);
-		static void onAvatarNameLookup(const LLUUID& id, const std::string& first, const std::string& last, BOOL is_group);
 		void avatarNameResolved(const LLUUID &id, const std::string &name);
 		
 		typedef std::vector<std::string> deviceList;
diff --git a/indra/newview/skins/default/xui/en/floater_bumps.xml b/indra/newview/skins/default/xui/en/floater_bumps.xml
index 303c28d7c8..1f2fe62b3c 100644
--- a/indra/newview/skins/default/xui/en/floater_bumps.xml
+++ b/indra/newview/skins/default/xui/en/floater_bumps.xml
@@ -14,23 +14,23 @@
     </floater.string>
     <floater.string
      name="bump">
-        [TIME]  [FIRST] [LAST] bumped you
+        [TIME]  [NAME] bumped you
     </floater.string>
     <floater.string
      name="llpushobject">
-        [TIME]  [FIRST] [LAST] pushed you with a script
+        [TIME]  [NAME] pushed you with a script
     </floater.string>
     <floater.string
      name="selected_object_collide">
-        [TIME]  [FIRST] [LAST] hit you with an object
+        [TIME]  [NAME] hit you with an object
     </floater.string>
     <floater.string
      name="scripted_object_collide">
-        [TIME]  [FIRST] [LAST] hit you with a scripted object
+        [TIME]  [NAME] hit you with a scripted object
     </floater.string>
     <floater.string
      name="physical_object_collide">
-        [TIME]  [FIRST] [LAST] hit you with a physical object
+        [TIME]  [NAME] hit you with a physical object
     </floater.string>
     <floater.string
      name="timeStr">
diff --git a/indra/newview/skins/default/xui/en/floater_pay.xml b/indra/newview/skins/default/xui/en/floater_pay.xml
index 509cffe490..8f60dd6f28 100644
--- a/indra/newview/skins/default/xui/en/floater_pay.xml
+++ b/indra/newview/skins/default/xui/en/floater_pay.xml
@@ -28,16 +28,6 @@
      width="75">
         Pay:
     </text>
-   <icon
-     height="16"
-     width="16"
-     image_name="Generic_Person"
-     mouse_opaque="true"
-     name="icon_person"
-     tool_tip="Person"
-     top_pad="0"
-     left="10"
-     />
     <text
      type="string"
      length="1"
@@ -45,10 +35,11 @@
      font="SansSerifSmall"
      height="16"
      layout="topleft"
-     left_pad="7"
+     left="10"
      name="payee_name"
-     width="210">
-        [FIRST] [LAST]
+     top_pad="0" 
+     width="230">
+        Test Name
     </text>
     <button
      height="23"
diff --git a/indra/newview/skins/default/xui/en/floater_pay_object.xml b/indra/newview/skins/default/xui/en/floater_pay_object.xml
index 455018f467..c65dd6e49f 100644
--- a/indra/newview/skins/default/xui/en/floater_pay_object.xml
+++ b/indra/newview/skins/default/xui/en/floater_pay_object.xml
@@ -2,7 +2,7 @@
 <floater
  legacy_header_height="18"
  can_minimize="false"
- height="220"
+ height="225"
  layout="topleft"
  name="Give Money"
  help_topic="give_money"
@@ -16,26 +16,14 @@
      name="payee_resident">
         Pay Resident
     </string>
-   <icon
-     height="16"
-     width="16"
-     image_name="Generic_Person"
-     mouse_opaque="true"
-     name="icon_person"
-     tool_tip="Person"
-     top_pad="24"
-     left="10"
-     />
     <text
-     type="string"
-     length="1"
      follows="left|top"
      height="16"
      layout="topleft"
-     left_pad="7"
-     top_delta="3"
+     left="10"
+     top_pad="24"
      name="payee_name"
-     width="184">
+     width="200">
       Ericacita Moostopolison
     </text>
     <text
@@ -45,9 +33,9 @@
      halign="left"
      height="14"
      layout="topleft"
-     left="34"
+     left="10"
      name="object_name_label"
-     top_pad="0"
+     top_pad="5"
      width="180">
         Via object:
     </text>
@@ -58,7 +46,7 @@
      mouse_opaque="true"
      name="icon_object"
      tool_tip="Objects"
-     top_pad="0"
+     top_pad="5"
      left="10"
      />
     <text
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 960da7a274..349833050b 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -5579,21 +5579,21 @@ Click Accept to join the call or Decline to decline the invitation. Click Block
    icon="notify.tga"
    name="AutoUnmuteByIM"
    type="notify">
-[FIRST] [LAST] was sent an instant message and has been automatically unblocked.
+[NAME] was sent an instant message and has been automatically unblocked.
   </notification>
 
   <notification
    icon="notify.tga"
    name="AutoUnmuteByMoney"
    type="notify">
-[FIRST] [LAST] was given money and has been automatically unblocked.
+[NAME] was given money and has been automatically unblocked.
   </notification>
 
   <notification
    icon="notify.tga"
    name="AutoUnmuteByInventory"
    type="notify">
-[FIRST] [LAST] was offered inventory and has been automatically unblocked.
+[NAME] was offered inventory and has been automatically unblocked.
   </notification>
 
   <notification
-- 
cgit v1.2.3


From d489216b6ef41f0d22f3a9062ba6daacc67bc038 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Wed, 3 Feb 2010 12:48:40 -0800
Subject: Moved LLUrlEntryAgent back into llui library in prep for merge

---
 indra/newview/CMakeLists.txt      |   2 -
 indra/newview/llstartup.cpp       |   5 --
 indra/newview/llurlentryagent.cpp | 146 --------------------------------------
 indra/newview/llurlentryagent.h   |  52 --------------
 4 files changed, 205 deletions(-)
 delete mode 100644 indra/newview/llurlentryagent.cpp
 delete mode 100644 indra/newview/llurlentryagent.h

(limited to 'indra/newview')

diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index f4bbe7133f..5373556c20 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -445,7 +445,6 @@ set(viewer_SOURCE_FILES
     llurl.cpp
     llurldispatcher.cpp
     llurldispatcherlistener.cpp
-    llurlentryagent.cpp
     llurlhistory.cpp
     llurllineeditorctrl.cpp
     llurlsimstring.cpp
@@ -953,7 +952,6 @@ set(viewer_HEADER_FILES
     llurl.h
     llurldispatcher.h
     llurldispatcherlistener.h
-    llurlentryagent.h
     llurlhistory.h
     llurllineeditorctrl.h
     llurlsimstring.h
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 0ba5fa9866..0f509422ef 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -144,9 +144,7 @@
 #include "llui.h"
 #include "llurldispatcher.h"
 #include "llurlsimstring.h"
-#include "llurlentryagent.h"	// IDEVO
 #include "llurlhistory.h"
-#include "llurlregistry.h"		// IDEVO
 #include "llurlwhitelist.h"
 #include "llvieweraudio.h"
 #include "llviewerassetstorage.h"
@@ -1284,9 +1282,6 @@ bool idle_startup()
 			gCacheName->LocalizeCacheName("none", LLTrans::getString("GroupNameNone"));
 			// Load stored cache if possible
             LLAppViewer::instance()->loadNameCache();
-
-			// Handle secondlife:///app/agent name lookups IDEVO
-			LLUrlRegistry::getInstance()->registerUrl(new LLUrlEntryAgent(), true);
 		}
 
 		// *Note: this is where gWorldMap used to be initialized.
diff --git a/indra/newview/llurlentryagent.cpp b/indra/newview/llurlentryagent.cpp
deleted file mode 100644
index bce64d7140..0000000000
--- a/indra/newview/llurlentryagent.cpp
+++ /dev/null
@@ -1,146 +0,0 @@
-/** 
- * @file llurlentry.cpp
- * @author Martin Reddy
- * @brief Describes the Url types that can be registered in LLUrlRegistry
- *
- * $LicenseInfo:firstyear=2009&license=viewergpl$
- * 
- * Copyright (c) 2009, Linden Research, Inc.
- * 
- * Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab.  Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
- * 
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/programs/open_source/licensing/flossexception
- * 
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- * 
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- * $/LicenseInfo$
- */
-
-#include "llviewerprecompiledheaders.h"
-
-#include "llurlentryagent.h"
-
-#include "llcachename.h"
-#include "lltrans.h"
-#include "lluicolortable.h"
-
-//
-// LLUrlEntryAgent Describes a Second Life agent Url, e.g.,
-// secondlife:///app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/about
-//
-LLUrlEntryAgent::LLUrlEntryAgent()
-{
-	mPattern = boost::regex("secondlife:///app/agent/[\\da-f-]+/\\w+",
-							boost::regex::perl|boost::regex::icase);
-	mMenuName = "menu_url_agent.xml";
-	mIcon = "Generic_Person";
-	mColor = LLUIColorTable::instance().getColor("AgentLinkColor");
-}
-
-// IDEVO demo code
-static std::string clean_name(const std::string& full_name)
-{
-	std::string displayname;
-	if (full_name == "miyazaki23") // IDEVO demo code
-	{
-		// miyazaki
-		displayname += (char)(0xE5);
-		displayname += (char)(0xAE);
-		displayname += (char)(0xAE);
-		displayname += (char)(0xE5);
-		displayname += (char)(0xB4);
-		displayname += (char)(0x8E);
-		// hayao
-		displayname += (char)(0xE9);
-		displayname += (char)(0xA7);
-		displayname += (char)(0xBF);
-		// san
-		displayname += (char)(0xE3);
-		displayname += (char)(0x81);
-		displayname += (char)(0x95);
-		displayname += (char)(0xE3);
-		displayname += (char)(0x82);
-		displayname += (char)(0x93);
-	}
-	else if (full_name == "Jim Linden")
-	{
-		displayname = "Jos";
-		displayname += (char)(0xC3);
-		displayname += (char)(0xA9);
-		displayname += " Sanchez";
-	}
-	else if (full_name == "James Linden")
-	{
-		displayname = "James Cook";
-	}
-
-	std::string final;
-	if (!displayname.empty())
-	{
-		final = displayname + " (" + full_name + ")";
-	}
-	else
-	{
-		final = full_name;
-	}
-	return final;
-}
-
-void LLUrlEntryAgent::onNameCache(const LLUUID& id,
-								  const std::string& full_name,
-								  bool is_group)
-{
-	std::string final = clean_name(full_name);
-	// received the agent name from the server - tell our observers
-	callObservers(id.asString(), final);
-}
-
-std::string LLUrlEntryAgent::getLabel(const std::string &url, const LLUrlLabelCallback &cb)
-{
-	if (!gCacheName)
-	{
-		// probably at the login screen, use short string for layout
-		return LLTrans::getString("LoadingData");
-	}
-
-	std::string agent_id_string = getIDStringFromUrl(url);
-	if (agent_id_string.empty())
-	{
-		// something went wrong, just give raw url
-		return unescapeUrl(url);
-	}
-
-	LLUUID agent_id(agent_id_string);
-	std::string full_name;
-	if (agent_id.isNull())
-	{
-		return LLTrans::getString("AvatarNameNobody");
-	}
-	else if (gCacheName->getFullName(agent_id, full_name))
-	{
-		return clean_name(full_name);
-	}
-	else
-	{
-		gCacheName->get(agent_id, false,
-			boost::bind(&LLUrlEntryAgent::onNameCache,
-				this, _1, _2, _3));
-		addObserver(agent_id_string, url, cb);
-		return LLTrans::getString("LoadingData");
-	}
-}
diff --git a/indra/newview/llurlentryagent.h b/indra/newview/llurlentryagent.h
deleted file mode 100644
index 76a54dfeb1..0000000000
--- a/indra/newview/llurlentryagent.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/** 
- * @file llurlentryagent.h
- *
- * $LicenseInfo:firstyear=2009&license=viewergpl$
- * 
- * Copyright (c) 2009, Linden Research, Inc.
- * 
- * Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab.  Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
- * 
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/programs/open_source/licensing/flossexception
- * 
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- * 
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- * $/LicenseInfo$
- */
-
-#ifndef LL_LLURLENTRYAGENT_H
-#define LL_LLURLENTRYAGENT_H
-
-#include "llurlentry.h"
-
-///
-/// LLUrlEntryAgent Describes a Second Life agent Url, e.g.,
-/// secondlife:///app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/about
-///
-/// IDEVO Pulled this temporarily into newview for faster compile/link
-/// times while iterating on UI.
-class LLUrlEntryAgent : public LLUrlEntryBase
-{
-public:
-	LLUrlEntryAgent();
-	/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb);
-private:
-	void onNameCache(const LLUUID& id, const std::string& full_name, bool is_group);
-};
-
-#endif
-- 
cgit v1.2.3


From c0b7c93c18783d6a426cf43265f34c86bdeceb4a Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Thu, 4 Feb 2010 20:38:40 -0800
Subject: Converted all gCacheName->getName to getFullName for SLID
 compatibility Also eliminated notification "ObjectGiveItemUnknownUser"
 because the SLURL-based name lookup will always retrieve the user name. Fixed
 a bug with ObjectGiveItem where the SLURL would be incorrect for a group.

---
 indra/newview/llavataractions.cpp                  | 13 +++---
 indra/newview/llcallingcard.cpp                    | 32 +++++--------
 indra/newview/llcallingcard.h                      |  9 ++--
 indra/newview/llfloateravatarpicker.cpp            | 16 +------
 indra/newview/llfloaterland.cpp                    |  7 ++-
 indra/newview/llimview.cpp                         |  7 ++-
 indra/newview/llnotificationhandlerutil.cpp        |  7 ++-
 indra/newview/llpanelavatar.cpp                    |  7 ++-
 indra/newview/llpanellogin.cpp                     |  2 +-
 indra/newview/llpanelme.cpp                        | 14 +++---
 indra/newview/llpanelpicks.cpp                     |  6 +--
 indra/newview/llviewermenu.cpp                     | 53 ----------------------
 indra/newview/llviewermessage.cpp                  | 47 ++++++-------------
 indra/newview/llviewerparcelmgr.cpp                |  7 ++-
 .../newview/skins/default/xui/en/notifications.xml | 45 ++++--------------
 indra/newview/skins/default/xui/en/strings.xml     |  2 +-
 16 files changed, 72 insertions(+), 202 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp
index bfd3d12efb..7935c32d82 100644
--- a/indra/newview/llavataractions.cpp
+++ b/indra/newview/llavataractions.cpp
@@ -129,11 +129,10 @@ void LLAvatarActions::removeFriendsDialog(const std::vector<LLUUID>& ids)
 	if(ids.size() == 1)
 	{
 		LLUUID agent_id = ids[0];
-		std::string first, last;
-		if(gCacheName->getName(agent_id, first, last))
+		std::string full_name;
+		if(gCacheName->getFullName(agent_id, full_name))
 		{
-			args["FIRST_NAME"] = first;
-			args["LAST_NAME"] = last;	
+			args["NAME"] = full_name;
 		}
 
 		msgType = "RemoveFromFriends";
@@ -617,9 +616,9 @@ bool LLAvatarActions::isBlocked(const LLUUID& id)
 // static
 bool LLAvatarActions::canBlock(const LLUUID& id)
 {
-	std::string firstname, lastname;
-	gCacheName->getName(id, firstname, lastname);
-	bool is_linden = !LLStringUtil::compareStrings(lastname, "Linden");
+	std::string full_name;
+	gCacheName->getFullName(id, full_name);
+	bool is_linden = (full_name.find("Linden") != std::string::npos);
 	bool is_self = id == gAgentID;
 	return !is_self && !is_linden;
 }
diff --git a/indra/newview/llcallingcard.cpp b/indra/newview/llcallingcard.cpp
index d988770f90..c4b7cee0d5 100644
--- a/indra/newview/llcallingcard.cpp
+++ b/indra/newview/llcallingcard.cpp
@@ -248,7 +248,7 @@ S32 LLAvatarTracker::addBuddyList(const LLAvatarTracker::buddy_map_t& buds)
 	using namespace std;
 
 	U32 new_buddy_count = 0;
-	std::string first,last;
+	std::string full_name;
 	LLUUID agent_id;
 	for(buddy_map_t::const_iterator itr = buds.begin(); itr != buds.end(); ++itr)
 	{
@@ -258,7 +258,8 @@ S32 LLAvatarTracker::addBuddyList(const LLAvatarTracker::buddy_map_t& buds)
 		{
 			++new_buddy_count;
 			mBuddyInfo[agent_id] = (*itr).second;
-			gCacheName->getName(agent_id, first, last);
+			// IDEVO JAMESDEBUG is this necessary?  name is unused?
+			gCacheName->getFullName(agent_id, full_name);
 			addChangedMask(LLFriendObserver::ADD, agent_id);
 			lldebugs << "Added buddy " << agent_id
 					<< ", " << (mBuddyInfo[agent_id]->isOnline() ? "Online" : "Offline")
@@ -689,12 +690,11 @@ void LLAvatarTracker::processNotify(LLMessageSystem* msg, bool online)
 				setBuddyOnline(agent_id,online);
 				if(chat_notify)
 				{
-					std::string first, last;
-					if(gCacheName->getName(agent_id, first, last))
+					std::string full_name;
+					if(gCacheName->getFullName(agent_id, full_name))
 					{
 						notify = TRUE;
-						args["FIRST"] = first;
-						args["LAST"] = last;
+						args["NAME"] = full_name;
 					}
 				}
 			}
@@ -849,10 +849,8 @@ bool LLCollectProxyBuddies::operator()(const LLUUID& buddy_id, LLRelationship* b
 
 bool LLCollectMappableBuddies::operator()(const LLUUID& buddy_id, LLRelationship* buddy)
 {
-	gCacheName->getName(buddy_id, mFirst, mLast);
-	std::ostringstream fullname;
-	fullname << mFirst << " " << mLast;
-	buddy_map_t::value_type value(fullname.str(), buddy_id);
+	gCacheName->getFullName(buddy_id, mFullName);
+	buddy_map_t::value_type value(mFullName, buddy_id);
 	if(buddy->isOnline() && buddy->isRightGrantedFrom(LLRelationship::GRANT_MAP_LOCATION))
 	{
 		mMappable.insert(value);
@@ -862,10 +860,8 @@ bool LLCollectMappableBuddies::operator()(const LLUUID& buddy_id, LLRelationship
 
 bool LLCollectOnlineBuddies::operator()(const LLUUID& buddy_id, LLRelationship* buddy)
 {
-	gCacheName->getName(buddy_id, mFirst, mLast);
-	std::ostringstream fullname;
-	fullname << mFirst << " " << mLast;
-	buddy_map_t::value_type value(fullname.str(), buddy_id);
+	gCacheName->getFullName(buddy_id, mFullName);
+	buddy_map_t::value_type value(mFullName, buddy_id);
 	if(buddy->isOnline())
 	{
 		mOnline.insert(value);
@@ -875,10 +871,8 @@ bool LLCollectOnlineBuddies::operator()(const LLUUID& buddy_id, LLRelationship*
 
 bool LLCollectAllBuddies::operator()(const LLUUID& buddy_id, LLRelationship* buddy)
 {
-	gCacheName->getName(buddy_id, mFirst, mLast);
-	std::ostringstream fullname;
-	fullname << mFirst << " " << mLast;
-	buddy_map_t::value_type value(fullname.str(), buddy_id);
+	gCacheName->getFullName(buddy_id, mFullName);
+	buddy_map_t::value_type value(mFullName, buddy_id);
 	if(buddy->isOnline())
 	{
 		mOnline.insert(value);
@@ -889,5 +883,3 @@ bool LLCollectAllBuddies::operator()(const LLUUID& buddy_id, LLRelationship* bud
 	}
 	return true;
 }
-
-
diff --git a/indra/newview/llcallingcard.h b/indra/newview/llcallingcard.h
index 47b0dcb903..5bd1f05687 100644
--- a/indra/newview/llcallingcard.h
+++ b/indra/newview/llcallingcard.h
@@ -241,8 +241,7 @@ public:
 	virtual bool operator()(const LLUUID& buddy_id, LLRelationship* buddy);
 	typedef std::map<std::string, LLUUID, LLDictionaryLess> buddy_map_t;
 	buddy_map_t mMappable;
-	std::string mFirst;
-	std::string mLast;
+	std::string mFullName;
 };
 
 // collect dictionary sorted map of name -> agent_id for every online buddy
@@ -254,8 +253,7 @@ public:
 	virtual bool operator()(const LLUUID& buddy_id, LLRelationship* buddy);
 	typedef std::map<std::string, LLUUID, LLDictionaryLess> buddy_map_t;
 	buddy_map_t mOnline;
-	std::string mFirst;
-	std::string mLast;
+	std::string mFullName;
 };
 
 // collect dictionary sorted map of name -> agent_id for every buddy,
@@ -269,8 +267,7 @@ public:
 	typedef std::map<std::string, LLUUID, LLDictionaryLess> buddy_map_t;
 	buddy_map_t mOnline;
 	buddy_map_t mOffline;
-	std::string mFirst;
-	std::string mLast;
+	std::string mFullName;
 };
 
 #endif // LL_LLCALLINGCARD_H
diff --git a/indra/newview/llfloateravatarpicker.cpp b/indra/newview/llfloateravatarpicker.cpp
index 50aa70478b..7a5c7c835f 100644
--- a/indra/newview/llfloateravatarpicker.cpp
+++ b/indra/newview/llfloateravatarpicker.cpp
@@ -43,6 +43,7 @@
 
 // Linden libraries
 #include "llbutton.h"
+#include "llcachename.h"
 #include "lllineeditor.h"
 #include "llscrolllistctrl.h"
 #include "llscrolllistitem.h"
@@ -370,19 +371,6 @@ void LLFloaterAvatarPicker::setAllowMultiple(BOOL allow_multiple)
 	getChild<LLScrollListCtrl>("Friends")->setAllowMultipleSelection(allow_multiple);
 }
 
-// IDEVO
-static std::string clean_name_from_avatar_picker(const std::string& first, const std::string& last)
-{
-	if (last.empty() || last == "Resident")
-	{
-		return first;
-	}
-	else
-	{
-		return first + " " + last;
-	}
-}
-
 // static 
 void LLFloaterAvatarPicker::processAvatarPickerReply(LLMessageSystem* msg, void**)
 {
@@ -433,7 +421,7 @@ void LLFloaterAvatarPicker::processAvatarPickerReply(LLMessageSystem* msg, void*
 		}
 		else
 		{
-			avatar_name = clean_name_from_avatar_picker(first_name, last_name);
+			avatar_name = LLCacheName::buildFullname(first_name, last_name);
 			search_results->setEnabled(TRUE);
 			found_one = TRUE;
 		}
diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp
index 8cd63deebe..4f73146085 100644
--- a/indra/newview/llfloaterland.cpp
+++ b/indra/newview/llfloaterland.cpp
@@ -1363,10 +1363,9 @@ bool LLPanelLandObjects::callbackReturnOwnerObjects(const LLSD& notification, co
 			}
 			else
 			{
-				std::string first, last;
-				gCacheName->getName(owner_id, first, last);
-				args["FIRST"] = first;
-				args["LAST"] = last;
+				std::string full_name;
+				gCacheName->getFullName(owner_id, full_name);
+				args["NAME"] = full_name;
 				LLNotificationsUtil::add("OtherObjectsReturned", args);
 			}
 			send_return_objects_message(parcel->getLocalID(), RT_OWNER);
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index f3de5a2543..6338fbd091 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -2653,13 +2653,12 @@ void LLIMMgr::noteOfflineUsers(
 		for(S32 i = 0; i < count; ++i)
 		{
 			info = at.getBuddyInfo(ids.get(i));
-			std::string first, last;
+			std::string full_name;
 			if(info && !info->isOnline()
-			   && gCacheName->getName(ids.get(i), first, last))
+			   && gCacheName->getFullName(ids.get(i), full_name))
 			{
 				LLUIString offline = LLTrans::getString("offline_message");
-				offline.setArg("[FIRST]", first);
-				offline.setArg("[LAST]", last);
+				offline.setArg("[NAME]", full_name);
 				im_model.proccessOnlineOfflineNotification(session_id, offline);
 			}
 		}
diff --git a/indra/newview/llnotificationhandlerutil.cpp b/indra/newview/llnotificationhandlerutil.cpp
index b8e0892b02..4d1a8fcb04 100644
--- a/indra/newview/llnotificationhandlerutil.cpp
+++ b/indra/newview/llnotificationhandlerutil.cpp
@@ -45,8 +45,8 @@ using namespace LLNotificationsUI;
 
 const static std::string GRANTED_MODIFY_RIGHTS("GrantedModifyRights"),
 		REVOKED_MODIFY_RIGHTS("RevokedModifyRights"), OBJECT_GIVE_ITEM(
-				"ObjectGiveItem"), OBJECT_GIVE_ITEM_UNKNOWN_USER(
-				"ObjectGiveItemUnknownUser"), PAYMENT_RECIVED("PaymentRecived"),
+				"ObjectGiveItem"),
+						PAYMENT_RECIVED("PaymentRecived"),
 						ADD_FRIEND_WITH_MESSAGE("AddFriendWithMessage"),
 						USER_GIVE_ITEM("UserGiveItem"),
 						INVENTORY_ACCEPTED("InventoryAccepted"),
@@ -157,8 +157,7 @@ void LLHandlerUtil::logToIMP2P(const LLNotificationPtr& notification, bool to_fi
 			"SESSION_NAME") ? notification->getPayload()["SESSION_NAME"].asString() : name;
 
 	// don't create IM p2p session with objects, it's necessary condition to log
-	if (notification->getName() != OBJECT_GIVE_ITEM && notification->getName()
-			!= OBJECT_GIVE_ITEM_UNKNOWN_USER)
+	if (notification->getName() != OBJECT_GIVE_ITEM)
 	{
 		LLUUID from_id = notification->getPayload()["from_id"];
 
diff --git a/indra/newview/llpanelavatar.cpp b/indra/newview/llpanelavatar.cpp
index 4a7cdfc856..500142aa67 100644
--- a/indra/newview/llpanelavatar.cpp
+++ b/indra/newview/llpanelavatar.cpp
@@ -226,12 +226,11 @@ void LLPanelAvatarNotes::rightsConfirmationCallback(const LLSD& notification,
 
 void LLPanelAvatarNotes::confirmModifyRights(bool grant, S32 rights)
 {
-	std::string first, last;
+	std::string full_name;
 	LLSD args;
-	if (gCacheName->getName(getAvatarId(), first, last))
+	if (gCacheName->getFullName(getAvatarId(), full_name))
 	{
-		args["FIRST_NAME"] = first;
-		args["LAST_NAME"] = last;
+		args["NAME"] = full_name;
 	}
 
 	if (grant)
diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp
index 23e157e617..55b6249fd9 100644
--- a/indra/newview/llpanellogin.cpp
+++ b/indra/newview/llpanellogin.cpp
@@ -570,7 +570,7 @@ void LLPanelLogin::setFields(const std::string& firstname,
 	}
 
 	std::string login_id = firstname;
-	if (!lastname.empty())
+	if (!lastname.empty() && lastname != "Resident")
 	{
 		// support traditional First Last name slurls
 		login_id += " ";
diff --git a/indra/newview/llpanelme.cpp b/indra/newview/llpanelme.cpp
index ea66ef7d2c..75b93ad2c2 100644
--- a/indra/newview/llpanelme.cpp
+++ b/indra/newview/llpanelme.cpp
@@ -208,13 +208,13 @@ void LLPanelMyProfileEdit::processProfileProperties(const LLAvatarData* avatar_d
 
 	childSetValue("show_in_search_checkbox", (BOOL)(avatar_data->flags & AVATAR_ALLOW_PUBLISH));
 
-	std::string first, last;
-	BOOL found = gCacheName->getName(avatar_data->avatar_id, first, last);
-	if (found)
-	{
-		childSetTextArg("name_text", "[FIRST]", first);
-		childSetTextArg("name_text", "[LAST]", last);
-	}
+	// IDEVO - These fields do not seem to exist any more.
+	//std::string full_name;
+	//BOOL found = gCacheName->getFullName(avatar_data->avatar_id, full_name);
+	//if (found)
+	//{
+	//	childSetTextArg("name_text", "[NAME]", full_name);
+	//}
 }
 
 BOOL LLPanelMyProfileEdit::postBuild()
diff --git a/indra/newview/llpanelpicks.cpp b/indra/newview/llpanelpicks.cpp
index ada65c98a4..87ac5f20ff 100644
--- a/indra/newview/llpanelpicks.cpp
+++ b/indra/newview/llpanelpicks.cpp
@@ -265,9 +265,9 @@ void LLPanelPicks::processProperties(void* data, EAvatarProcessorType type)
 		LLAvatarPicks* avatar_picks = static_cast<LLAvatarPicks*>(data);
 		if(avatar_picks && getAvatarId() == avatar_picks->target_id)
 		{
-			std::string name, second_name;
-			gCacheName->getName(getAvatarId(),name,second_name);
-			childSetTextArg("pick_title", "[NAME]",name);
+			std::string full_name;
+			gCacheName->getFullName(getAvatarId(), full_name);
+			childSetTextArg("pick_title", "[NAME]", full_name);
 			
 			// Save selection, to be able to edit same item after saving changes. See EXT-3023.
 			LLUUID selected_id = mPicksList->getSelectedValue()[PICK_ID];
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index f7f30a5136..6eb607fc6c 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -3106,58 +3106,6 @@ bool enable_freeze_eject(const LLSD& avatar_id)
 	return new_value;
 }
 
-class LLAvatarGiveCard : public view_listener_t
-{
-	bool handleEvent(const LLSD& userdata)
-	{
-		llinfos << "handle_give_card()" << llendl;
-		LLViewerObject* dest = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject();
-		if(dest && dest->isAvatar())
-		{
-			bool found_name = false;
-			LLSD args;
-			LLSD old_args;
-			LLNameValue* nvfirst = dest->getNVPair("FirstName");
-			LLNameValue* nvlast = dest->getNVPair("LastName");
-			if(nvfirst && nvlast)
-			{
-				args["FIRST"] = nvfirst->getString();
-				args["LAST"] = nvlast->getString();
-				old_args["FIRST"] = nvfirst->getString();
-				old_args["LAST"] = nvlast->getString();
-				found_name = true;
-			}
-			LLViewerRegion* region = dest->getRegion();
-			LLHost dest_host;
-			if(region)
-			{
-				dest_host = region->getHost();
-			}
-			if(found_name && dest_host.isOk())
-			{
-				LLMessageSystem* msg = gMessageSystem;
-				msg->newMessage("OfferCallingCard");
-				msg->nextBlockFast(_PREHASH_AgentData);
-				msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-				msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-				msg->nextBlockFast(_PREHASH_AgentBlock);
-				msg->addUUIDFast(_PREHASH_DestID, dest->getID());
-				LLUUID transaction_id;
-				transaction_id.generate();
-				msg->addUUIDFast(_PREHASH_TransactionID, transaction_id);
-				msg->sendReliable(dest_host);
-				LLNotificationsUtil::add("OfferedCard", args);
-			}
-			else
-			{
-				LLNotificationsUtil::add("CantOfferCallingCard", old_args);
-			}
-		}
-		return true;
-	}
-};
-
-
 
 void login_done(S32 which, void *user)
 {
@@ -7951,7 +7899,6 @@ void initialize_menus()
 	view_listener_t::addMenu(new LLAvatarDebug(), "Avatar.Debug");
 	view_listener_t::addMenu(new LLAvatarVisibleDebug(), "Avatar.VisibleDebug");
 	view_listener_t::addMenu(new LLAvatarInviteToGroup(), "Avatar.InviteToGroup");
-	view_listener_t::addMenu(new LLAvatarGiveCard(), "Avatar.GiveCard");
 	commit.add("Avatar.Eject", boost::bind(&handle_avatar_eject, LLSD()));
 	view_listener_t::addMenu(new LLAvatarSendIM(), "Avatar.SendIM");
 	view_listener_t::addMenu(new LLAvatarCall(), "Avatar.Call");
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index d8d149bb94..266cad67f4 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -1030,7 +1030,6 @@ void inventory_offer_mute_callback(const LLUUID& blocked_id,
 		bool matches(const LLNotificationPtr notification) const
 		{
 			if(notification->getName() == "ObjectGiveItem" 
-				|| notification->getName() == "ObjectGiveItemUnknownUser"
 				|| notification->getName() == "UserGiveItem")
 			{
 				return (notification->getPayload()["from_id"].asUUID() == blocked_id);
@@ -1334,12 +1333,12 @@ bool LLOfferInfo::inventory_task_offer_callback(const LLSD& notification, const
 		}
 		else
 		{
-			std::string first_name, last_name;
-			if (gCacheName->getName(mFromID, first_name, last_name))
+			std::string full_name;
+			if (gCacheName->getFullName(mFromID, full_name))
 			{
 				from_string = LLTrans::getString("InvOfferAnObjectNamed") + " "+ LLTrans::getString("'") + mFromName 
-				+ LLTrans::getString("'")+" " + LLTrans::getString("InvOfferOwnedBy") + first_name + " " + last_name;
-				chatHistory_string = mFromName + " " + LLTrans::getString("InvOfferOwnedBy") + " " + first_name + " " + last_name;
+					+ LLTrans::getString("'")+" " + LLTrans::getString("InvOfferOwnedBy") + full_name;
+				chatHistory_string = mFromName + " " + LLTrans::getString("InvOfferOwnedBy") + " " + full_name;
 			}
 			else
 			{
@@ -1507,30 +1506,6 @@ void inventory_offer_handler(LLOfferInfo* info)
 		return;
 	}
 
-	// Name cache callbacks don't store userdata, so can't save
-	// off the LLOfferInfo.  Argh.
-	BOOL name_found = FALSE;
-	if (info->mFromGroup)
-	{
-		std::string group_name;
-		if (gCacheName->getGroupName(info->mFromID, group_name))
-		{
-			args["FIRST"] = group_name;
-			args["LAST"] = "";
-			name_found = TRUE;
-		}
-	}
-	else
-	{
-		std::string first_name, last_name;
-		if (gCacheName->getName(info->mFromID, first_name, last_name))
-		{
-			args["FIRST"] = first_name;
-			args["LAST"] = last_name;
-			name_found = TRUE;
-		}
-	}
-
 	// If mObjectID is null then generate the object_id based on msg to prevent
 	// multiple creation of chiclets for same object.
 	LLUUID object_id = info->mObjectID;
@@ -1545,7 +1520,14 @@ void inventory_offer_handler(LLOfferInfo* info)
 	payload["give_inventory_notification"] = FALSE;
 	args["OBJECTFROMNAME"] = info->mFromName;
 	args["NAME"] = info->mFromName;
-	args["NAME_SLURL"] = LLSLURL::buildCommand("agent", info->mFromID, "about");
+	if (info->mFromGroup)
+	{
+		args["NAME_SLURL"] = LLSLURL::buildCommand("group", info->mFromID, "about");
+	}
+	else
+	{
+		args["NAME_SLURL"] = LLSLURL::buildCommand("agent", info->mFromID, "about");
+	}
 	std::string verb = "select?name=" + LLURI::escape(msg);
 	args["ITEM_SLURL"] = LLSLURL::buildCommand("inventory", info->mObjectID, verb.c_str());
 
@@ -1558,7 +1540,7 @@ void inventory_offer_handler(LLOfferInfo* info)
 		args["ITEM_SLURL"] = msg;
 		// Note: sets inventory_task_offer_callback as the callback
 		p.substitutions(args).payload(payload).functor.function(boost::bind(&LLOfferInfo::inventory_task_offer_callback, info, _1, _2));
-		p.name = name_found ? "ObjectGiveItem" : "ObjectGiveItemUnknownUser";
+		p.name = "ObjectGiveItem";
 		// Pop up inv offer chiclet and let the user accept (keep), or reject (and silently delete) the inventory.
 		LLNotifications::instance().add(p);
 	}
@@ -5726,8 +5708,7 @@ void process_script_dialog(LLMessageSystem* msg, void**)
 	LLNotificationPtr notification;
 	if (!first_name.empty())
 	{
-		args["FIRST"] = first_name;
-		args["LAST"] = last_name;
+		args["NAME"] = LLCacheName::buildFullname(first_name, last_name);
 		notification = LLNotifications::instance().add(
 			LLNotification::Params("ScriptDialog").substitutions(args).payload(payload).form_elements(form.asLLSD()));
 	}
diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp
index a075a706e1..3f27453370 100644
--- a/indra/newview/llviewerparcelmgr.cpp
+++ b/indra/newview/llviewerparcelmgr.cpp
@@ -2068,10 +2068,9 @@ void LLViewerParcelMgr::deedLandToGroup()
 	args["GROUP_NAME"] = group_name;
 	if(mCurrentParcel->getContributeWithDeed())
 	{
-		std::string first_name, last_name;
-		gCacheName->getName(mCurrentParcel->getOwnerID(), first_name, last_name);
-		args["FIRST_NAME"] = first_name;
-		args["LAST_NAME"] = last_name;
+		std::string full_name;
+		gCacheName->getFullName(mCurrentParcel->getOwnerID(), full_name);
+		args["NAME"] = full_name;
 		LLNotificationsUtil::add("DeedLandToGroupWithContribution",args, LLSD(), deedAlertCB);
 	}
 	else
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index b6fc8def86..e726b6e333 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -257,7 +257,7 @@ Save all changes to clothing/body parts?
    name="GrantModifyRights"
    type="alertmodal">
 Granting modify rights to another Resident allows them to change, delete or take ANY objects you may have in-world. Be VERY careful when handing out this permission.
-Do you want to grant modify rights for [FIRST_NAME] [LAST_NAME]?
+Do you want to grant modify rights for [NAME]?
     <usetemplate
      name="okcancelbuttons"
      notext="No"
@@ -280,7 +280,7 @@ Do you want to grant modify rights for the selected Residents?
    icon="alertmodal.tga"
    name="RevokeModifyRights"
    type="alertmodal">
-Do you want to revoke modify rights for [FIRST_NAME] [LAST_NAME]?
+Do you want to revoke modify rights for [NAME]?
     <usetemplate
      name="okcancelbuttons"
      notext="No"
@@ -2039,7 +2039,7 @@ Would you be my friend?
    icon="alertmodal.tga"
    name="RemoveFromFriends"
    type="alertmodal">
-Do you want to remove [FIRST_NAME] [LAST_NAME] from your Friends List?
+Do you want to remove [NAME] from your Friends List?
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -2279,7 +2279,7 @@ Deed this [AREA] m² of land to the group &apos;[GROUP_NAME]&apos;?
    name="DeedLandToGroupWithContribution"
    type="alertmodal">
 By deeding this parcel, the group will be required to have and maintain sufficient land use credits.
-The deed will include a simultaneous land contribution to the group from &apos;[FIRST_NAME] [LAST_NAME]&apos;.
+The deed will include a simultaneous land contribution to the group from &apos;[NAME]&apos;.
 The purchase price of the land is not refunded to the owner. If a deeded parcel is sold, the sale price will be divided evenly among group members.
 
 Deed this [AREA] m² of land to the group &apos;[GROUP_NAME]&apos;?
@@ -4318,14 +4318,14 @@ Topic: [SUBJECT], Message: [MESSAGE]
    icon="notifytip.tga"
    name="FriendOnline"
    type="notifytip">
-[FIRST] [LAST] is Online
+[NAME] is Online
   </notification>
 
   <notification
    icon="notifytip.tga"
    name="FriendOffline"
    type="notifytip">
-[FIRST] [LAST] is Offline
+[NAME] is Offline
   </notification>
 
   <notification
@@ -4478,13 +4478,6 @@ You cannot modify protected categories.
 You cannot remove protected categories.
   </notification>
 
-  <notification
-   icon="notifytip.tga"
-   name="OfferedCard"
-   type="notifytip">
-You have offered a calling card to [FIRST] [LAST]
-  </notification>
-
   <notification
    icon="notifytip.tga"
    name="UnableToBuyWhileDownloading"
@@ -4728,7 +4721,7 @@ The objects you own on the selected parcel of land have been returned back to yo
    icon="notify.tga"
    name="OtherObjectsReturned"
    type="notify">
-The objects on the selected parcel of land that is owned by [FIRST] [LAST] have been returned to his or her inventory.
+The objects on the selected parcel of land that is owned by [NAME] have been returned to his or her inventory.
   </notification>
 
   <notification
@@ -5034,28 +5027,6 @@ An object named [OBJECTFROMNAME] owned by [NAME_SLURL] has given you this [OBJEC
     </form>
   </notification>
 
-  <notification
-   icon="notify.tga"
-   name="ObjectGiveItemUnknownUser"
-   type="offer">
-An object named [OBJECTFROMNAME] owned by (an unknown Resident) has given you this [OBJECTTYPE]:
-[ITEM_SLURL]
-    <form name="form">
-      <button
-       index="0"
-       name="Keep"
-       text="Keep"/>
-      <button
-       index="1"
-       name="Discard"
-       text="Discard"/>
-      <button
-       index="2"
-       name="Mute"
-       text="Block"/>
-    </form>
-  </notification>
-
   <notification
    icon="notify.tga"
    name="UserGiveItem"
@@ -5350,7 +5321,7 @@ Grant this request?
    icon="notify.tga"
    name="ScriptDialog"
    type="notify">
-[FIRST] [LAST]&apos;s &apos;[TITLE]&apos;
+[NAME]&apos;s &apos;[TITLE]&apos;
 [MESSAGE]
     <form name="form">
       <button
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index b4a12cfb32..a3da55e2a6 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -2932,7 +2932,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
     You are the only user in this session.
   </string>
   <string name="offline_message">
-    [FIRST] [LAST] is offline.
+    [NAME] is offline.
   </string>
   <string name="invite_message">
     Click the [BUTTON NAME] button to accept/connect to this voice chat.
-- 
cgit v1.2.3


From 33e613531f929b5bce04c11a355085fe5ea92997 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Thu, 4 Feb 2010 22:19:15 -0800
Subject: Fix placement of icon next to linked agent/group names. Suppresses
 rendering of text in LLNormalTextSegment that represent an icon, properly
 computes vertical spacing based on font height, and adds padding to the right
 of the icon.

---
 indra/newview/skins/default/xui/en/floater_test_inspectors.xml | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/floater_test_inspectors.xml b/indra/newview/skins/default/xui/en/floater_test_inspectors.xml
index 0f5c5f2be0..209285da2e 100644
--- a/indra/newview/skins/default/xui/en/floater_test_inspectors.xml
+++ b/indra/newview/skins/default/xui/en/floater_test_inspectors.xml
@@ -116,10 +116,10 @@
   follows="left|top"
   font="SansSerif"
   height="20"
-  left="0"
+  left="10"
   max_length="65536"
   name="slurl"
-  top_pad="4"
+  top_pad="20"
   width="150">
     secondlife:///app/agent/00000000-0000-0000-0000-000000000000/inspect
   </text>
@@ -127,12 +127,11 @@
   follows="left|top"
   font="SansSerif"
   height="20"
-  left="0"
+  left="10"
   max_length="65536"
   name="slurl_group"
-  top_pad="4"
+  top_pad="20"
   width="150">
     secondlife:///app/group/00000000-0000-0000-0000-000000000000/inspect
   </text>
-
 </floater>
-- 
cgit v1.2.3


From 42176145c9e81dd99b65f88152df50a7b3ccf834 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Mon, 8 Feb 2010 14:55:30 -0800
Subject: Converted names build from avatar object LLNameValue pairs to SLID
 Added temporary getDisplayName() to LLCacheName Moved temporary placeholder
 display names into LLCacheName Eliminated rarely used LLAgentUI::buildName in
 favor of buildFullName Standardized buildFullName capitalization

---
 indra/newview/llagentui.cpp             | 25 -----------------
 indra/newview/llagentui.h               |  1 -
 indra/newview/llavataractions.cpp       |  2 +-
 indra/newview/llfloateravatarpicker.cpp |  2 +-
 indra/newview/llfloaterreporter.cpp     |  6 ++---
 indra/newview/llmutelist.cpp            |  5 ++--
 indra/newview/llpanelgroupinvite.cpp    |  7 +++--
 indra/newview/lltoolpie.cpp             | 31 +++++++++++++++------
 indra/newview/llviewermenu.cpp          | 19 +++++--------
 indra/newview/llviewermessage.cpp       |  9 +++----
 indra/newview/llviewerwindow.cpp        |  6 +----
 indra/newview/llvoavatar.cpp            | 48 ++++++++++++++++++++-------------
 12 files changed, 74 insertions(+), 87 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llagentui.cpp b/indra/newview/llagentui.cpp
index 7404fe5bc4..1bc9aa0f2b 100644
--- a/indra/newview/llagentui.cpp
+++ b/indra/newview/llagentui.cpp
@@ -45,31 +45,6 @@
 #include "llvoavatarself.h"
 #include "llslurl.h"
 
-//static
-void LLAgentUI::buildName(std::string& name)
-{
-	name.clear();
-
-	LLVOAvatarSelf* avatar_object = gAgent.getAvatarObject();
-	if (avatar_object)
-	{
-		LLNameValue *first_nv = avatar_object->getNVPair("FirstName");
-		LLNameValue *last_nv = avatar_object->getNVPair("LastName");
-		if (first_nv && last_nv)
-		{
-			name = first_nv->printData() + " " + last_nv->printData();
-		}
-		else
-		{
-			llwarns << "Agent is missing FirstName and/or LastName nv pair." << llendl;
-		}
-	}
-	else
-	{
-		name = gSavedSettings.getString("FirstName") + " " + gSavedSettings.getString("LastName");
-	}
-}
-
 //static
 void LLAgentUI::buildFullname(std::string& name)
 {
diff --git a/indra/newview/llagentui.h b/indra/newview/llagentui.h
index 3478793e38..c682d3c951 100644
--- a/indra/newview/llagentui.h
+++ b/indra/newview/llagentui.h
@@ -45,7 +45,6 @@ public:
 		LOCATION_FORMAT_FULL,			// Parcel, Region (x, y, z) - Maturity
 	};
 
-	static void buildName(std::string& name);
 	static void buildFullname(std::string &name);
 
 	static std::string buildSLURL(const bool escaped = true);
diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp
index 7935c32d82..7f20eb02ea 100644
--- a/indra/newview/llavataractions.cpp
+++ b/indra/newview/llavataractions.cpp
@@ -103,7 +103,7 @@ void LLAvatarActions::requestFriendshipDialog(const LLUUID& id)
 	}
 
 	std::string full_name;
-	// IDEVO gCacheName->getFullName(id, full_name);
+	gCacheName->getFullName(id, full_name);
 	requestFriendshipDialog(id, full_name);
 }
 
diff --git a/indra/newview/llfloateravatarpicker.cpp b/indra/newview/llfloateravatarpicker.cpp
index 7a5c7c835f..cb549e65c8 100644
--- a/indra/newview/llfloateravatarpicker.cpp
+++ b/indra/newview/llfloateravatarpicker.cpp
@@ -421,7 +421,7 @@ void LLFloaterAvatarPicker::processAvatarPickerReply(LLMessageSystem* msg, void*
 		}
 		else
 		{
-			avatar_name = LLCacheName::buildFullname(first_name, last_name);
+			avatar_name = LLCacheName::buildFullName(first_name, last_name);
 			search_results->setEnabled(TRUE);
 			found_one = TRUE;
 		}
diff --git a/indra/newview/llfloaterreporter.cpp b/indra/newview/llfloaterreporter.cpp
index 0f3c176cea..a97c21ff6c 100644
--- a/indra/newview/llfloaterreporter.cpp
+++ b/indra/newview/llfloaterreporter.cpp
@@ -39,6 +39,7 @@
 
 // linden library includes
 #include "llassetstorage.h"
+#include "llcachename.h"
 #include "llfontgl.h"
 #include "llimagej2c.h"
 #include "llinventory.h"
@@ -270,9 +271,8 @@ void LLFloaterReporter::getObjectInfo(const LLUUID& object_id)
 				LLNameValue* lastname =  objectp->getNVPair("LastName");
 				if (firstname && lastname)
 				{
-					object_owner.append(firstname->getString());
-					object_owner.append(1, ' ');
-					object_owner.append(lastname->getString());
+					object_owner = LLCacheName::buildFullName(
+						firstname->getString(), lastname->getString());
 				}
 				else
 				{
diff --git a/indra/newview/llmutelist.cpp b/indra/newview/llmutelist.cpp
index 62085a47b4..38a518c5fd 100644
--- a/indra/newview/llmutelist.cpp
+++ b/indra/newview/llmutelist.cpp
@@ -118,9 +118,8 @@ LLMute::LLMute(const LLUUID& id, const std::string& name, EType type, U32 flags)
 		LLNameValue* lastname = mute_object->getNVPair("LastName");
 		if (firstname && lastname)
 		{
-			mName.assign( firstname->getString() );
-			mName.append(" ");
-			mName.append( lastname->getString() );
+			mName = LLCacheName::buildFullName(
+				firstname->getString(), lastname->getString());
 		}
 		mType = mute_object->isAvatar() ? AGENT : OBJECT;
 	}
diff --git a/indra/newview/llpanelgroupinvite.cpp b/indra/newview/llpanelgroupinvite.cpp
index 06a682c905..0e677ee2bf 100644
--- a/indra/newview/llpanelgroupinvite.cpp
+++ b/indra/newview/llpanelgroupinvite.cpp
@@ -408,14 +408,13 @@ void LLPanelGroupInvite::addUsers(std::vector<LLUUID>& agent_ids)
 		if(dest && dest->isAvatar())
 		{
 			std::string fullname;
-			LLSD args;
 			LLNameValue* nvfirst = dest->getNVPair("FirstName");
 			LLNameValue* nvlast = dest->getNVPair("LastName");
 			if(nvfirst && nvlast)
 			{
-				args["FIRST"] = std::string(nvfirst->getString());
-				args["LAST"] = std::string(nvlast->getString());
-				fullname = std::string(nvfirst->getString()) + " " + std::string(nvlast->getString());
+				fullname = LLCacheName::buildFullName(
+					nvfirst->getString(), nvlast->getString());
+
 			}
 			if (!fullname.empty())
 			{
diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp
index bf1e307d71..fa1c99ece7 100644
--- a/indra/newview/lltoolpie.cpp
+++ b/indra/newview/lltoolpie.cpp
@@ -854,23 +854,38 @@ BOOL LLToolPie::handleTooltipObject( LLViewerObject* hover_object, std::string l
 			|| !existing_inspector->getVisible()
 			|| existing_inspector->getKey()["avatar_id"].asUUID() != hover_object->getID())
 		{
-			std::string avatar_name;
-			LLNameValue* firstname = hover_object->getNVPair("FirstName");
-			LLNameValue* lastname =  hover_object->getNVPair("LastName");
-			if (firstname && lastname)
+			// IDEVO JAMESDEBUG try to get display name + SLID
+			std::string final_name;
+			std::string full_name;
+			if (!gCacheName->getFullName(hover_object->getID(), full_name))
 			{
-				avatar_name = llformat("%s %s", firstname->getString(), lastname->getString());
+				LLNameValue* firstname = hover_object->getNVPair("FirstName");
+				LLNameValue* lastname =  hover_object->getNVPair("LastName");
+				if (firstname && lastname)
+				{
+					full_name = LLCacheName::buildFullName(
+						firstname->getString(), lastname->getString());
+				}
+				else
+				{
+					full_name = LLTrans::getString("TooltipPerson");
+				}
+			}
+			std::string display_name;
+			if (gCacheName->getDisplayName(hover_object->getID(), display_name))
+			{
+				final_name = display_name + " (" + full_name + ")";
 			}
 			else
 			{
-				avatar_name = LLTrans::getString("TooltipPerson");
+				final_name = full_name;
 			}
-			
+
 			// *HACK: We may select this object, so pretend it was clicked
 			mPick = mHoverPick;
 			LLInspector::Params p;
 			p.fillFrom(LLUICtrlFactory::instance().getDefaultParams<LLInspector>());
-			p.message(avatar_name);
+			p.message(final_name);
 			p.image.name("Inspector_I");
 			p.click_callback(boost::bind(showAvatarInspector, hover_object->getID()));
 			p.visible_time_near(6.f);
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 6eb607fc6c..6f6932367f 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -2758,9 +2758,8 @@ class LLObjectMute : public view_listener_t
 			LLNameValue *lastname = avatar->getNVPair("LastName");
 			if (firstname && lastname)
 			{
-				name = firstname->getString();
-				name += " ";
-				name += lastname->getString();
+				name = LLCacheName::buildFullName(
+					firstname->getString(), lastname->getString());
 			}
 			
 			type = LLMute::AGENT;
@@ -3517,21 +3516,17 @@ void request_friendship(const LLUUID& dest_id)
 	LLViewerObject* dest = gObjectList.findObject(dest_id);
 	if(dest && dest->isAvatar())
 	{
-		std::string fullname;
-		LLSD args;
+		std::string full_name;
 		LLNameValue* nvfirst = dest->getNVPair("FirstName");
 		LLNameValue* nvlast = dest->getNVPair("LastName");
 		if(nvfirst && nvlast)
 		{
-			args["FIRST"] = nvfirst->getString();
-			args["LAST"] = nvlast->getString();
-			fullname = nvfirst->getString();
-			fullname += " ";
-			fullname += nvlast->getString();
+			full_name = LLCacheName::buildFullName(
+				nvfirst->getString(), nvlast->getString());
 		}
-		if (!fullname.empty())
+		if (!full_name.empty())
 		{
-			LLAvatarActions::requestFriendshipDialog(dest_id, fullname);
+			LLAvatarActions::requestFriendshipDialog(dest_id, full_name);
 		}
 		else
 		{
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 266cad67f4..3cc6b9b591 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -2517,9 +2517,8 @@ void process_offer_callingcard(LLMessageSystem* msg, void**)
 		LLNameValue* nvlast  = source->getNVPair("LastName");
 		if (nvfirst && nvlast)
 		{
-			args["FIRST"] = nvfirst->getString();
-			args["LAST"] = nvlast->getString();
-			source_name = std::string(nvfirst->getString()) + " " + nvlast->getString();
+			source_name = LLCacheName::buildFullName(
+				nvfirst->getString(), nvlast->getString());
 		}
 	}
 
@@ -5065,7 +5064,7 @@ void process_script_question(LLMessageSystem *msg, void **user_data)
 	// so we'll reuse the same namespace for both throttle types.
 	std::string throttle_name = owner_name;
 	std::string self_name;
-	LLAgentUI::buildName( self_name );
+	LLAgentUI::buildFullname( self_name );
 	if( owner_name == self_name )
 	{
 		throttle_name = taskid.getString();
@@ -5708,7 +5707,7 @@ void process_script_dialog(LLMessageSystem* msg, void**)
 	LLNotificationPtr notification;
 	if (!first_name.empty())
 	{
-		args["NAME"] = LLCacheName::buildFullname(first_name, last_name);
+		args["NAME"] = LLCacheName::buildFullName(first_name, last_name);
 		notification = LLNotifications::instance().add(
 			LLNotification::Params("ScriptDialog").substitutions(args).payload(payload).form_elements(form.asLLSD()));
 	}
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index fdc6675db1..3f815314f0 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -1180,12 +1180,8 @@ BOOL LLViewerWindow::handlePaint(LLWindow *window,  S32 x,  S32 y, S32 width,  S
 		//SetBKColor(hdc, RGB(255, 255, 255));
 		FillRect(hdc, &wnd_rect, CreateSolidBrush(RGB(255, 255, 255)));
 
-		std::string name_str;
-		LLAgentUI::buildName(name_str);
-
 		std::string temp_str;
-		temp_str = llformat( "%s FPS %3.1f Phy FPS %2.1f Time Dil %1.3f",		/* Flawfinder: ignore */
-				name_str.c_str(),
+		temp_str = llformat( "FPS %3.1f Phy FPS %2.1f Time Dil %1.3f",		/* Flawfinder: ignore */
 				LLViewerStats::getInstance()->mFPSStat.getMeanPerSec(),
 				LLViewerStats::getInstance()->mSimPhysicsFPS.getPrev(0),
 				LLViewerStats::getInstance()->mSimTimeDilation.getPrev(0));
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 7df24c9ade..4f7b93b19d 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -44,6 +44,7 @@
 #include <ctype.h>
 
 #include "llaudioengine.h"
+#include "llcachename.h"
 #include "noise.h"
 #include "sound_ids.h"
 
@@ -2773,31 +2774,42 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last)
 				|| is_appearance != mNameAppearance)
 			{
 				std::string line;
-				if (!sRenderGroupTitles)
-				{
-					// If all group titles are turned off, stack first name
-					// on a line above last name
-					line += firstname->getString();
-					line += "\n";
-				}
-				else if (title && title->getString() && title->getString()[0] != '\0')
+				// IDEVO JAMESDEBUG
+				//if (!sRenderGroupTitles)
+				//{
+				//	// If all group titles are turned off, stack first name
+				//	// on a line above last name
+				//	line += firstname->getString();
+				//	line += "\n";
+				//}
+				//else if (title && title->getString() && title->getString()[0] != '\0')
+				//{
+				//	line += title->getString();
+				//	LLStringFn::replace_ascii_controlchars(line,LL_UNKNOWN_CHAR);
+				//	line += "\n";
+				//	line += firstname->getString();
+				//}
+				//else
+				//{
+				//	line += firstname->getString();
+				//}
+				if (title && title->getString() && title->getString()[0] != '\0')
 				{
 					line += title->getString();
 					LLStringFn::replace_ascii_controlchars(line,LL_UNKNOWN_CHAR);
 					line += "\n";
-					line += firstname->getString();
 				}
-				else
+
+				std::string display_name;
+				if (gCacheName->getDisplayName(getID(), display_name))
 				{
-					line += firstname->getString();
+					line += display_name;
 				}
-
-				// Suppress last name "Resident" as this is used for new SLID names
-				if (strcmp(lastname->getString(), "Resident"))
+				else
 				{
-					line += " ";
-					line += lastname->getString();
+					line += LLCacheName::buildFullName( firstname->getString(), lastname->getString() );
 				}
+
 				BOOL need_comma = FALSE;
 
 				if (is_away || is_muted || is_busy)
@@ -7520,9 +7532,7 @@ std::string LLVOAvatar::getFullname() const
 	LLNameValue* last  = getNVPair("LastName"); 
 	if (first && last)
 	{
-		name += first->getString();
-		name += " ";
-		name += last->getString();
+		name = LLCacheName::buildFullName( first->getString(), last->getString() );
 	}
 
 	return name;
-- 
cgit v1.2.3


From 644c5cadbf8a0ab3ea7c2137e8819220a010c93f Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Wed, 10 Feb 2010 12:04:03 -0800
Subject: Name tags of friends appear in green. Refactored LLVOAvatar
 idleUpdateNameTag into smaller functions Eliminated unused
 LLHUDText::setUsePixelSize

---
 indra/newview/llhudtext.cpp            |   6 -
 indra/newview/llhudtext.h              |   2 -
 indra/newview/llvoavatar.cpp           | 575 +++++++++++++++++----------------
 indra/newview/llvoavatar.h             |  12 +-
 indra/newview/skins/default/colors.xml |   3 +
 5 files changed, 316 insertions(+), 282 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llhudtext.cpp b/indra/newview/llhudtext.cpp
index 8ad94b957d..53fc176268 100644
--- a/indra/newview/llhudtext.cpp
+++ b/indra/newview/llhudtext.cpp
@@ -87,7 +87,6 @@ bool lltextobject_further_away::operator()(const LLPointer<LLHUDText>& lhs, cons
 LLHUDText::LLHUDText(const U8 type) :
 			LLHUDObject(type),
 			mUseBubble(FALSE),
-			mUsePixelSize(TRUE),
 			mVisibleOffScreen(FALSE),
 			mWidth(0.f),
 			mHeight(0.f),
@@ -679,11 +678,6 @@ void LLHUDText::setColor(const LLColor4 &color)
 }
 
 
-void LLHUDText::setUsePixelSize(const BOOL use_pixel_size)
-{
-	mUsePixelSize = use_pixel_size;
-}
-
 void LLHUDText::setDoFade(const BOOL do_fade)
 {
 	mDoFade = do_fade;
diff --git a/indra/newview/llhudtext.h b/indra/newview/llhudtext.h
index dc14a8c764..5d88b5d6ab 100644
--- a/indra/newview/llhudtext.h
+++ b/indra/newview/llhudtext.h
@@ -99,7 +99,6 @@ public:
 	void setDropShadow(const BOOL do_shadow);
 	void setFont(const LLFontGL* font);
 	void setColor(const LLColor4 &color);
-	void setUsePixelSize(const BOOL use_pixel_size);
 	void setZCompare(const BOOL zcompare);
 	void setDoFade(const BOOL do_fade);
 	void setVisibleOffScreen(BOOL visible) { mVisibleOffScreen = visible; }
@@ -150,7 +149,6 @@ private:
 	F32				mFadeRange;
 	F32				mFadeDistance;
 	F32				mLastDistance;
-	BOOL			mUsePixelSize;
 	BOOL			mZCompare;
 	BOOL			mVisibleOffScreen;
 	BOOL			mOffscreen;
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 4f7b93b19d..124851144a 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -53,6 +53,7 @@
 #include "llanimationstates.h"
 #include "llavatarpropertiesprocessor.h"
 #include "llviewercontrol.h"
+#include "llcallingcard.h"		// IDEVO for LLAvatarTracker
 #include "lldrawpoolavatar.h"
 #include "lldriverparam.h"
 #include "lleditingmotion.h"
@@ -651,11 +652,13 @@ LLVOAvatar::LLVOAvatar(const LLUUID& id,
 	mAppearanceAnimating(FALSE),
 	mNameString(),
 	mTitle(),
-	mNameAway(FALSE),
-	mNameBusy(FALSE),
-	mNameMute(FALSE),
+	mNameAway(false),
+	mNameBusy(false),
+	mNameMute(false),
+	mNameAppearance(false),
+	mNameFriend(false),
+	mNameAlpha(0.f),
 	mRenderGroupTitles(sRenderGroupTitles),
-	mNameAppearance(FALSE),
 	mFirstTEMessageReceived( FALSE ),
 	mFirstAppearanceMessageReceived( FALSE ),
 	mCulled( FALSE ),
@@ -2660,303 +2663,335 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last)
 								 && gSavedSettings.getS32("AvatarNameTagMode") ));
 	}
 
-	if ( render_name )
+	if ( !render_name )
 	{
-		BOOL new_name = FALSE;
-		if (visible_chat != mVisibleChat)
+		if (mNameText)
 		{
-			mVisibleChat = visible_chat;
-			new_name = TRUE;
+			// ...clean up old name tag
+			mNameText->markDead();
+			mNameText = NULL;
+			sNumVisibleChatBubbles--;
 		}
-		
-		if (sRenderGroupTitles != mRenderGroupTitles)
+		return;
+	}
+
+	BOOL new_name = FALSE;
+	if (visible_chat != mVisibleChat)
+	{
+		mVisibleChat = visible_chat;
+		new_name = TRUE;
+	}
+	
+	if (sRenderGroupTitles != mRenderGroupTitles)
+	{
+		mRenderGroupTitles = sRenderGroupTitles;
+		new_name = TRUE;
+	}
+
+	// First Calculate Alpha
+	// If alpha > 0, create mNameText if necessary, otherwise delete it
+	F32 alpha = 0.f;
+	if (mAppAngle > 5.f)
+	{
+		const F32 START_FADE_TIME = NAME_SHOW_TIME - FADE_DURATION;
+		if (!visible_chat && sRenderName == RENDER_NAME_FADE && time_visible > START_FADE_TIME)
 		{
-			mRenderGroupTitles = sRenderGroupTitles;
-			new_name = TRUE;
+			alpha = 1.f - (time_visible - START_FADE_TIME) / FADE_DURATION;
 		}
+		else
+		{
+			// ...not fading, full alpha
+			alpha = 1.f;
+		}
+	}
+	else if (mAppAngle > 2.f)
+	{
+		// far away is faded out also
+		alpha = (mAppAngle-2.f)/3.f;
+	}
 
-		// First Calculate Alpha
-		// If alpha > 0, create mNameText if necessary, otherwise delete it
+	if (alpha <= 0.f)
+	{
+		if (mNameText)
 		{
-			F32 alpha = 0.f;
-			if (mAppAngle > 5.f)
+			mNameText->markDead();
+			mNameText = NULL;
+			sNumVisibleChatBubbles--;
+		}
+		return;
+	}
+
+	if (!mNameText)
+	{
+		mNameText = (LLHUDText *)LLHUDObject::addHUDObject(LLHUDObject::LL_HUD_TEXT);
+		mNameText->setMass(10.f);
+		mNameText->setSourceObject(this);
+		mNameText->setVertAlignment(LLHUDText::ALIGN_VERT_TOP);
+		mNameText->setVisibleOffScreen(TRUE);
+		mNameText->setMaxLines(11);
+		mNameText->setFadeDistance(CHAT_NORMAL_RADIUS, 5.f);
+		mNameText->setUseBubble(TRUE);
+		sNumVisibleChatBubbles++;
+		new_name = TRUE;
+	}
+
+	idleUpdateNameTagColor(new_name, alpha);
+	
+	LLVector3 name_position = idleUpdateNameTagPosition(root_pos_last);
+	mNameText->setPositionAgent(name_position);
+	
+	LLNameValue *title = getNVPair("Title");
+	LLNameValue* firstname = getNVPair("FirstName");
+	LLNameValue* lastname = getNVPair("LastName");
+
+	// Avatars must have a first and last name
+	if (!firstname || !lastname) return;
+
+	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());
+	}
+
+	// Rebuild name tag if state change detected
+	if (mNameString.empty()
+		|| new_name
+		|| (!title && !mTitle.empty())
+		|| (title && mTitle != title->getString())
+		|| is_away != mNameAway 
+		|| is_busy != mNameBusy 
+		|| is_muted != mNameMute
+		|| is_appearance != mNameAppearance)
+	{
+		std::string line;
+		// IDEVO JAMESDEBUG
+		//if (!sRenderGroupTitles)
+		//{
+		//	// If all group titles are turned off, stack first name
+		//	// on a line above last name
+		//	line += firstname->getString();
+		//	line += "\n";
+		//}
+		//else if (title && title->getString() && title->getString()[0] != '\0')
+		//{
+		//	line += title->getString();
+		//	LLStringFn::replace_ascii_controlchars(line,LL_UNKNOWN_CHAR);
+		//	line += "\n";
+		//	line += firstname->getString();
+		//}
+		//else
+		//{
+		//	line += firstname->getString();
+		//}
+		if (sRenderGroupTitles
+			&& title && title->getString() && title->getString()[0] != '\0')
+		{
+			line += title->getString();
+			LLStringFn::replace_ascii_controlchars(line,LL_UNKNOWN_CHAR);
+			line += "\n";
+		}
+
+		std::string display_name;
+		if (gCacheName->getDisplayName(getID(), display_name))
+		{
+			line += display_name;
+		}
+		else
+		{
+			line += LLCacheName::buildFullName( firstname->getString(), lastname->getString() );
+		}
+
+		BOOL need_comma = FALSE;
+
+		if (is_away || is_muted || is_busy)
+		{
+			line += " (";
+			if (is_away)
+			{
+				line += LLTrans::getString("AvatarAway");
+				need_comma = TRUE;
+			}
+			if (is_busy)
 			{
-				const F32 START_FADE_TIME = NAME_SHOW_TIME - FADE_DURATION;
-				if (!visible_chat && sRenderName == RENDER_NAME_FADE && time_visible > START_FADE_TIME)
+				if (need_comma)
 				{
-					alpha = 1.f - (time_visible - START_FADE_TIME) / FADE_DURATION;
+					line += ", ";
 				}
-				else
+				line += LLTrans::getString("AvatarBusy");
+				need_comma = TRUE;
+			}
+			if (is_muted)
+			{
+				if (need_comma)
 				{
-					// ...not fading, full alpha
-					alpha = 1.f;
+					line += ", ";
 				}
+				line += LLTrans::getString("AvatarMuted");
+				need_comma = TRUE;
 			}
-			else if (mAppAngle > 2.f)
+			line += ")";
+		}
+		if (is_appearance)
+		{
+			line += "\n";
+			line += LLTrans::getString("AvatarEditingAppearance");
+		}
+		mNameAway = is_away;
+		mNameBusy = is_busy;
+		mNameMute = is_muted;
+		mNameAppearance = is_appearance;
+		mTitle = title ? title->getString() : "";
+		LLStringFn::replace_ascii_controlchars(mTitle,LL_UNKNOWN_CHAR);
+		mNameString = utf8str_to_wstring(line);
+		new_name = TRUE;
+	}
+
+	if (visible_chat)
+	{
+		mNameText->setDropShadow(TRUE);
+		mNameText->setFont(LLFontGL::getFontSansSerif());
+		mNameText->setTextAlignment(LLHUDText::ALIGN_TEXT_LEFT);
+		mNameText->setFadeDistance(CHAT_NORMAL_RADIUS * 2.f, 5.f);
+		if (new_name)
+		{
+			mNameText->setLabel(mNameString);
+		}
+	
+		char line[MAX_STRING];		/* Flawfinder: ignore */
+		line[0] = '\0';
+		std::deque<LLChat>::iterator chat_iter = mChats.begin();
+		mNameText->clearString();
+
+		LLColor4 new_chat = LLUIColorTable::instance().getColor( "AvatarNameColor" );
+		LLColor4 normal_chat = lerp(new_chat, LLColor4(0.8f, 0.8f, 0.8f, 1.f), 0.7f);
+		LLColor4 old_chat = lerp(normal_chat, LLColor4(0.6f, 0.6f, 0.6f, 1.f), 0.7f);
+		if (mTyping && mChats.size() >= MAX_BUBBLE_CHAT_UTTERANCES) 
+		{
+			++chat_iter;
+		}
+
+		for(; chat_iter != mChats.end(); ++chat_iter)
+		{
+			F32 chat_fade_amt = llclamp((F32)((LLFrameTimer::getElapsedSeconds() - chat_iter->mTime) / CHAT_FADE_TIME), 0.f, 4.f);
+			LLFontGL::StyleFlags style;
+			switch(chat_iter->mChatType)
 			{
-				// far away is faded out also
-				alpha = (mAppAngle-2.f)/3.f;
+				case CHAT_TYPE_WHISPER:
+					style = LLFontGL::ITALIC;
+					break;
+				case CHAT_TYPE_SHOUT:
+					style = LLFontGL::BOLD;
+					break;
+				default:
+					style = LLFontGL::NORMAL;
+					break;
 			}
-
-			if (alpha > 0.f)
+			if (chat_fade_amt < 1.f)
 			{
-				if (!mNameText)
-				{
-					mNameText = (LLHUDText *)LLHUDObject::addHUDObject(LLHUDObject::LL_HUD_TEXT);
-					mNameText->setMass(10.f);
-					mNameText->setSourceObject(this);
-					mNameText->setVertAlignment(LLHUDText::ALIGN_VERT_TOP);
-					mNameText->setVisibleOffScreen(TRUE);
-					mNameText->setMaxLines(11);
-					mNameText->setFadeDistance(CHAT_NORMAL_RADIUS, 5.f);
-					mNameText->setUseBubble(TRUE);
-					sNumVisibleChatBubbles++;
-					new_name = TRUE;
-				}
-				
-				LLColor4 avatar_name_color = LLUIColorTable::instance().getColor( "AvatarNameColor" );
-				avatar_name_color.setAlpha(alpha);
-				mNameText->setColor(avatar_name_color);
-				
-				LLQuaternion root_rot = mRoot.getWorldRotation();
-				mNameText->setUsePixelSize(TRUE);
-				LLVector3 pixel_right_vec;
-				LLVector3 pixel_up_vec;
-				LLViewerCamera::getInstance()->getPixelVectors(root_pos_last, pixel_up_vec, pixel_right_vec);
-				LLVector3 camera_to_av = root_pos_last - LLViewerCamera::getInstance()->getOrigin();
-				camera_to_av.normalize();
-				LLVector3 local_camera_at = camera_to_av * ~root_rot;
-				LLVector3 local_camera_up = camera_to_av % LLViewerCamera::getInstance()->getLeftAxis();
-				local_camera_up.normalize();
-				local_camera_up = local_camera_up * ~root_rot;
-			
-				local_camera_up.scaleVec(mBodySize * 0.5f);
-				local_camera_at.scaleVec(mBodySize * 0.5f);
-
-				LLVector3 name_position = mRoot.getWorldPosition() + 
-					(local_camera_up * root_rot) -
-					(projected_vec(local_camera_at * root_rot, camera_to_av));
-				name_position += pixel_up_vec * 15.f;
-				mNameText->setPositionAgent(name_position);
+				F32 u = clamp_rescale(chat_fade_amt, 0.9f, 1.f, 0.f, 1.f);
+				mNameText->addLine(utf8str_to_wstring(chat_iter->mText), lerp(new_chat, normal_chat, u), style);
 			}
-			else if (mNameText)
+			else if (chat_fade_amt < 2.f)
 			{
-				mNameText->markDead();
-				mNameText = NULL;
-				sNumVisibleChatBubbles--;
+				F32 u = clamp_rescale(chat_fade_amt, 1.9f, 2.f, 0.f, 1.f);
+				mNameText->addLine(utf8str_to_wstring(chat_iter->mText), lerp(normal_chat, old_chat, u), style);
+			}
+			else if (chat_fade_amt < 3.f)
+			{
+				// *NOTE: only remove lines down to minimum number
+				mNameText->addLine(utf8str_to_wstring(chat_iter->mText), old_chat, style);
 			}
 		}
-		
-		LLNameValue *title = getNVPair("Title");
-		LLNameValue* firstname = getNVPair("FirstName");
-		LLNameValue* lastname = getNVPair("LastName");
+		mNameText->setVisibleOffScreen(TRUE);
 
-		if (mNameText.notNull() && firstname && lastname)
+		if (mTyping)
 		{
-			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())
+			S32 dot_count = (llfloor(mTypingTimer.getElapsedTimeF32() * 3.f) + 2) % 3 + 1;
+			switch(dot_count)
 			{
-				is_muted = FALSE;
+				case 1:
+					mNameText->addLine(".", new_chat);
+					break;
+				case 2:
+					mNameText->addLine("..", new_chat);
+					break;
+				case 3:
+					mNameText->addLine("...", new_chat);
+					break;
 			}
-			else
-			{
-				is_muted = LLMuteList::getInstance()->isMuted(getID());
-			}
-
-			if (mNameString.empty() ||
-				new_name ||
-				(!title && !mTitle.empty()) ||
-				(title && mTitle != title->getString()) ||
-				(is_away != mNameAway || is_busy != mNameBusy || is_muted != mNameMute)
-				|| is_appearance != mNameAppearance)
-			{
-				std::string line;
-				// IDEVO JAMESDEBUG
-				//if (!sRenderGroupTitles)
-				//{
-				//	// If all group titles are turned off, stack first name
-				//	// on a line above last name
-				//	line += firstname->getString();
-				//	line += "\n";
-				//}
-				//else if (title && title->getString() && title->getString()[0] != '\0')
-				//{
-				//	line += title->getString();
-				//	LLStringFn::replace_ascii_controlchars(line,LL_UNKNOWN_CHAR);
-				//	line += "\n";
-				//	line += firstname->getString();
-				//}
-				//else
-				//{
-				//	line += firstname->getString();
-				//}
-				if (title && title->getString() && title->getString()[0] != '\0')
-				{
-					line += title->getString();
-					LLStringFn::replace_ascii_controlchars(line,LL_UNKNOWN_CHAR);
-					line += "\n";
-				}
 
-				std::string display_name;
-				if (gCacheName->getDisplayName(getID(), display_name))
-				{
-					line += display_name;
-				}
-				else
-				{
-					line += LLCacheName::buildFullName( firstname->getString(), lastname->getString() );
-				}
+		}
+	}
+	else
+	{
+		static LLUICachedControl<bool> small_avatar_names("SmallAvatarNames");
+		if (small_avatar_names)
+		{
+			mNameText->setFont(LLFontGL::getFontSansSerif());
+		}
+		else
+		{
+			mNameText->setFont(LLFontGL::getFontSansSerifBig());
+		}
+		mNameText->setTextAlignment(LLHUDText::ALIGN_TEXT_CENTER);
+		mNameText->setFadeDistance(CHAT_NORMAL_RADIUS, 5.f);
+		mNameText->setVisibleOffScreen(FALSE);
+		if (new_name)
+		{
+			mNameText->setLabel("");
+			mNameText->setString(mNameString);
+		}
+	}
+}
 
-				BOOL need_comma = FALSE;
+// Compute name tag position during idle update
+LLVector3 LLVOAvatar::idleUpdateNameTagPosition(const LLVector3& root_pos_last)
+{
+	LLQuaternion root_rot = mRoot.getWorldRotation();
+	LLVector3 pixel_right_vec;
+	LLVector3 pixel_up_vec;
+	LLViewerCamera::getInstance()->getPixelVectors(root_pos_last, pixel_up_vec, pixel_right_vec);
+	LLVector3 camera_to_av = root_pos_last - LLViewerCamera::getInstance()->getOrigin();
+	camera_to_av.normalize();
+	LLVector3 local_camera_at = camera_to_av * ~root_rot;
+	LLVector3 local_camera_up = camera_to_av % LLViewerCamera::getInstance()->getLeftAxis();
+	local_camera_up.normalize();
+	local_camera_up = local_camera_up * ~root_rot;
 
-				if (is_away || is_muted || is_busy)
-				{
-					line += " (";
-					if (is_away)
-					{
-						line += LLTrans::getString("AvatarAway");
-						need_comma = TRUE;
-					}
-					if (is_busy)
-					{
-						if (need_comma)
-						{
-							line += ", ";
-						}
-						line += LLTrans::getString("AvatarBusy");
-						need_comma = TRUE;
-					}
-					if (is_muted)
-					{
-						if (need_comma)
-						{
-							line += ", ";
-						}
-						line += LLTrans::getString("AvatarMuted");
-						need_comma = TRUE;
-					}
-					line += ")";
-				}
-				if (is_appearance)
-				{
-					line += "\n";
-					line += LLTrans::getString("AvatarEditingAppearance");
-				}
-				mNameAway = is_away;
-				mNameBusy = is_busy;
-				mNameMute = is_muted;
-				mNameAppearance = is_appearance;
-				mTitle = title ? title->getString() : "";
-				LLStringFn::replace_ascii_controlchars(mTitle,LL_UNKNOWN_CHAR);
-				mNameString = utf8str_to_wstring(line);
-				new_name = TRUE;
-			}
-
-			if (visible_chat)
-			{
-				mNameText->setDropShadow(TRUE);
-				mNameText->setFont(LLFontGL::getFontSansSerif());
-				mNameText->setTextAlignment(LLHUDText::ALIGN_TEXT_LEFT);
-				mNameText->setFadeDistance(CHAT_NORMAL_RADIUS * 2.f, 5.f);
-				if (new_name)
-				{
-					mNameText->setLabel(mNameString);
-				}
-			
-				char line[MAX_STRING];		/* Flawfinder: ignore */
-				line[0] = '\0';
-				std::deque<LLChat>::iterator chat_iter = mChats.begin();
-				mNameText->clearString();
-
-				LLColor4 new_chat = LLUIColorTable::instance().getColor( "AvatarNameColor" );
-				LLColor4 normal_chat = lerp(new_chat, LLColor4(0.8f, 0.8f, 0.8f, 1.f), 0.7f);
-				LLColor4 old_chat = lerp(normal_chat, LLColor4(0.6f, 0.6f, 0.6f, 1.f), 0.7f);
-				if (mTyping && mChats.size() >= MAX_BUBBLE_CHAT_UTTERANCES) 
-				{
-					++chat_iter;
-				}
+	local_camera_up.scaleVec(mBodySize * 0.5f);
+	local_camera_at.scaleVec(mBodySize * 0.5f);
 
-				for(; chat_iter != mChats.end(); ++chat_iter)
-				{
-					F32 chat_fade_amt = llclamp((F32)((LLFrameTimer::getElapsedSeconds() - chat_iter->mTime) / CHAT_FADE_TIME), 0.f, 4.f);
-					LLFontGL::StyleFlags style;
-					switch(chat_iter->mChatType)
-					{
-						case CHAT_TYPE_WHISPER:
-							style = LLFontGL::ITALIC;
-							break;
-						case CHAT_TYPE_SHOUT:
-							style = LLFontGL::BOLD;
-							break;
-						default:
-							style = LLFontGL::NORMAL;
-							break;
-					}
-					if (chat_fade_amt < 1.f)
-					{
-						F32 u = clamp_rescale(chat_fade_amt, 0.9f, 1.f, 0.f, 1.f);
-						mNameText->addLine(utf8str_to_wstring(chat_iter->mText), lerp(new_chat, normal_chat, u), style);
-					}
-					else if (chat_fade_amt < 2.f)
-					{
-						F32 u = clamp_rescale(chat_fade_amt, 1.9f, 2.f, 0.f, 1.f);
-						mNameText->addLine(utf8str_to_wstring(chat_iter->mText), lerp(normal_chat, old_chat, u), style);
-					}
-					else if (chat_fade_amt < 3.f)
-					{
-						// *NOTE: only remove lines down to minimum number
-						mNameText->addLine(utf8str_to_wstring(chat_iter->mText), old_chat, style);
-					}
-				}
-				mNameText->setVisibleOffScreen(TRUE);
+	LLVector3 name_position = mRoot.getWorldPosition() + 
+		(local_camera_up * root_rot) -
+		(projected_vec(local_camera_at * root_rot, camera_to_av));
+	name_position += pixel_up_vec * 15.f;
+	return name_position;
+}
 
-				if (mTyping)
-				{
-					S32 dot_count = (llfloor(mTypingTimer.getElapsedTimeF32() * 3.f) + 2) % 3 + 1;
-					switch(dot_count)
-					{
-						case 1:
-							mNameText->addLine(".", new_chat);
-							break;
-						case 2:
-							mNameText->addLine("..", new_chat);
-							break;
-						case 3:
-							mNameText->addLine("...", new_chat);
-							break;
-					}
+void LLVOAvatar::idleUpdateNameTagColor(BOOL new_name, F32 alpha)
+{
+	llassert(mNameText);
 
-				}
-			}
-			else
-			{
-				if (gSavedSettings.getBOOL("SmallAvatarNames"))
-				{
-					mNameText->setFont(LLFontGL::getFontSansSerif());
-				}
-				else
-				{
-					mNameText->setFont(LLFontGL::getFontSansSerifBig());
-				}
-				mNameText->setTextAlignment(LLHUDText::ALIGN_TEXT_CENTER);
-				mNameText->setFadeDistance(CHAT_NORMAL_RADIUS, 5.f);
-				mNameText->setVisibleOffScreen(FALSE);
-				if (new_name)
-				{
-					mNameText->setLabel("");
-					mNameText->setString(mNameString);
-				}
-			}
-		}
-	}
-	else if (mNameText)
+	bool is_friend = LLAvatarTracker::instance().isBuddy(getID());
+	if (new_name
+		|| alpha != mNameAlpha
+		|| is_friend != mNameFriend)
 	{
-		mNameText->markDead();
-		mNameText = NULL;
-		sNumVisibleChatBubbles--;
+		const char* color_name = (is_friend ? "AvatarNameFriendColor" : "AvatarNameColor");
+		LLColor4 avatar_name_color =
+			LLUIColorTable::getInstance()->getColor( color_name );
+		avatar_name_color.setAlpha(alpha);
+		mNameText->setColor(avatar_name_color);
+
+		mNameFriend = is_friend;
+		mNameAlpha = alpha;
 	}
 }
 
diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h
index a5815df20a..5cc4aaa52e 100644
--- a/indra/newview/llvoavatar.h
+++ b/indra/newview/llvoavatar.h
@@ -210,6 +210,8 @@ public:
 	void 			idleUpdateLoadingEffect();
 	void 			idleUpdateWindEffect();
 	void 			idleUpdateNameTag(const LLVector3& root_pos_last);
+	LLVector3		idleUpdateNameTagPosition(const LLVector3& root_pos_last);
+	void			idleUpdateNameTagColor(BOOL new_name, F32 alpha);
 	void 			idleUpdateRenderCost();
 	void 			idleUpdateTractorBeam();
 	void 			idleUpdateBelowWater();
@@ -822,10 +824,12 @@ protected:
 private:
 	LLWString 		mNameString;
 	std::string  	mTitle;
-	BOOL	  		mNameAway;
-	BOOL	  		mNameBusy;
-	BOOL	  		mNameMute;
-	BOOL      		mNameAppearance;
+	bool	  		mNameAway;
+	bool	  		mNameBusy;
+	bool	  		mNameMute;
+	bool      		mNameAppearance;
+	bool			mNameFriend;
+	F32				mNameAlpha;
 	BOOL      		mRenderGroupTitles;
 
 	//--------------------------------------------------------------------
diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml
index ec196245a1..cbc69f5c04 100644
--- a/indra/newview/skins/default/colors.xml
+++ b/indra/newview/skins/default/colors.xml
@@ -117,6 +117,9 @@
     <color
      name="AvatarNameColor"
      reference="White" />
+    <color
+     name="AvatarNameFriendColor"
+     reference="Green" />
     <color
      name="AvatarListItemIconDefaultColor"
      reference="White" />
-- 
cgit v1.2.3


From 301f250c1cd77711c0234d8ed4089453712f834e Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Wed, 10 Feb 2010 12:04:26 -0800
Subject: Mini-inspectors show both display name and SLID

---
 indra/newview/llinspectavatar.cpp                     | 19 +++++++++++++++----
 indra/newview/skins/default/xui/en/inspect_avatar.xml | 15 +++++++++++++--
 indra/newview/skins/default/xui/en/panel_login.xml    |  2 +-
 3 files changed, 29 insertions(+), 7 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llinspectavatar.cpp b/indra/newview/llinspectavatar.cpp
index ddd9008b3c..41dbeab5a7 100644
--- a/indra/newview/llinspectavatar.cpp
+++ b/indra/newview/llinspectavatar.cpp
@@ -138,7 +138,7 @@ private:
 	bool isNotFriend();
 	
 	// Callback for gCacheName to look up avatar name
-	void nameUpdatedCallback(const LLUUID& id,
+	void onNameCache(const LLUUID& id,
 							 const std::string& name,
 							 bool is_group);
 	
@@ -359,7 +359,7 @@ void LLInspectAvatar::requestUpdate()
 	childSetValue("avatar_icon", LLSD(mAvatarID) );
 
 	gCacheName->get(mAvatarID, false,
-		boost::bind(&LLInspectAvatar::nameUpdatedCallback,
+		boost::bind(&LLInspectAvatar::onNameCache,
 			this, _1, _2, _3));
 }
 
@@ -601,7 +601,7 @@ void LLInspectAvatar::onVolumeChange(const LLSD& data)
 	gVoiceClient->setUserVolume(mAvatarID, volume);
 }
 
-void LLInspectAvatar::nameUpdatedCallback(
+void LLInspectAvatar::onNameCache(
 	const LLUUID& id,
 	const std::string& name,
 	bool is_group)
@@ -609,7 +609,18 @@ void LLInspectAvatar::nameUpdatedCallback(
 	if (id == mAvatarID)
 	{
 		mAvatarName = name;
-		childSetValue("user_name", LLSD(mAvatarName) );
+
+		// IDEVO JAMESDEBUG - need to always display a display name
+		std::string display_name;
+		if (gCacheName->getDisplayName(mAvatarID, display_name))
+		{
+			getChild<LLUICtrl>("user_name")->setValue(display_name);
+		}
+		else
+		{
+			getChild<LLUICtrl>("user_name")->setValue(name);
+		}
+		getChild<LLUICtrl>("user_slid")->setValue(name);
 	}
 }
 
diff --git a/indra/newview/skins/default/xui/en/inspect_avatar.xml b/indra/newview/skins/default/xui/en/inspect_avatar.xml
index 9796f7b5b6..b7717859fc 100644
--- a/indra/newview/skins/default/xui/en/inspect_avatar.xml
+++ b/indra/newview/skins/default/xui/en/inspect_avatar.xml
@@ -9,7 +9,7 @@
  bg_opaque_image="Inspector_Background"
  can_close="false"
  can_minimize="false"
- height="148"
+ height="164"
  layout="topleft"
  name="inspect_avatar"
  single_instance="true"
@@ -43,6 +43,16 @@
      use_ellipses="true"
      value="Grumpity ProductEngine"
      width="175" />
+    <text
+     follows="top|left"
+     height="16"
+     left="8"
+     name="user_slid"
+     font="SansSerifSmall"
+     text_color="White"
+     value="James.pinden"
+     width="175"
+     use_ellipses="true" />
     <text
      follows="top|left"
      height="16"
@@ -50,6 +60,7 @@
      name="user_subtitle"
      font="SansSerifSmall"
      text_color="White"
+     top_pad="0" 
      value="11 Months, 3 days old"
      width="175"
      use_ellipses="true" />
@@ -108,7 +119,7 @@
      height="20"
      label="Add Friend"
      left="8"
-     top="119"
+     top="135"
      name="add_friend_btn"
      width="90" />
     <button
diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml
index cf119c9ab6..2777b641c9 100644
--- a/indra/newview/skins/default/xui/en/panel_login.xml
+++ b/indra/newview/skins/default/xui/en/panel_login.xml
@@ -60,7 +60,7 @@ name="first_name_text"
 top="20"
 left="20"
 width="150">
-  Second Life ID:
+  Second Life Name or ID:
 </text>
 <line_editor
 follows="left|bottom"
-- 
cgit v1.2.3


From c2373fb5a6b08b2c32e5f93fa67b25f669e8b47f Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Thu, 11 Feb 2010 16:39:15 -0800
Subject: Created stub LLAvatarNameCache for display name lookup, as well as
 LLAvatarName base data object. Reviewed with Kelly.

---
 indra/newview/llinspectavatar.cpp | 16 +++++++++-------
 indra/newview/lltoolpie.cpp       |  7 ++++---
 indra/newview/llvoavatar.cpp      |  7 ++++---
 3 files changed, 17 insertions(+), 13 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llinspectavatar.cpp b/indra/newview/llinspectavatar.cpp
index 41dbeab5a7..6dddc133c2 100644
--- a/indra/newview/llinspectavatar.cpp
+++ b/indra/newview/llinspectavatar.cpp
@@ -37,6 +37,7 @@
 #include "llagent.h"
 #include "llagentdata.h"
 #include "llavataractions.h"
+#include "llavatarnamecache.h"
 #include "llavatarpropertiesprocessor.h"
 #include "llcallingcard.h"
 #include "lldateutil.h"
@@ -603,24 +604,25 @@ void LLInspectAvatar::onVolumeChange(const LLSD& data)
 
 void LLInspectAvatar::onNameCache(
 	const LLUUID& id,
-	const std::string& name,
+	const std::string& full_name,
 	bool is_group)
 {
 	if (id == mAvatarID)
 	{
-		mAvatarName = name;
+		mAvatarName = full_name;
 
 		// IDEVO JAMESDEBUG - need to always display a display name
-		std::string display_name;
-		if (gCacheName->getDisplayName(mAvatarID, display_name))
+		LLAvatarName av_name;
+		if (LLAvatarNameCache::get(mAvatarID, &av_name))
 		{
-			getChild<LLUICtrl>("user_name")->setValue(display_name);
+			getChild<LLUICtrl>("user_name")->setValue(av_name.mDisplayName);
+			getChild<LLUICtrl>("user_slid")->setValue(av_name.mSLID);
 		}
 		else
 		{
-			getChild<LLUICtrl>("user_name")->setValue(name);
+			getChild<LLUICtrl>("user_name")->setValue(full_name);
+			getChild<LLUICtrl>("user_slid")->setValue(full_name);
 		}
-		getChild<LLUICtrl>("user_slid")->setValue(name);
 	}
 }
 
diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp
index 4a61bed475..9480ca0fdf 100644
--- a/indra/newview/lltoolpie.cpp
+++ b/indra/newview/lltoolpie.cpp
@@ -39,6 +39,7 @@
 #include "llparcel.h"
 
 #include "llagent.h"
+#include "llavatarnamecache.h"
 #include "llviewercontrol.h"
 #include "llfocusmgr.h"
 //#include "llfirstuse.h"
@@ -871,10 +872,10 @@ BOOL LLToolPie::handleTooltipObject( LLViewerObject* hover_object, std::string l
 					full_name = LLTrans::getString("TooltipPerson");
 				}
 			}
-			std::string display_name;
-			if (gCacheName->getDisplayName(hover_object->getID(), display_name))
+			LLAvatarName av_name;
+			if (LLAvatarNameCache::get(hover_object->getID(), &av_name))
 			{
-				final_name = display_name + " (" + full_name + ")";
+				final_name = av_name.mDisplayName + " (" + av_name.mSLID + ")";
 			}
 			else
 			{
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 265adb3e7f..e4de75d173 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -51,6 +51,7 @@
 #include "llagent.h" //  Get state values from here
 #include "llagentwearables.h"
 #include "llanimationstates.h"
+#include "llavatarnamecache.h"
 #include "llavatarpropertiesprocessor.h"
 #include "llviewercontrol.h"
 #include "llcallingcard.h"		// IDEVO for LLAvatarTracker
@@ -2804,10 +2805,10 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last)
 			line += "\n";
 		}
 
-		std::string display_name;
-		if (gCacheName->getDisplayName(getID(), display_name))
+		LLAvatarName av_name;
+		if (LLAvatarNameCache::get(getID(), &av_name))
 		{
-			line += display_name;
+			line += av_name.mDisplayName;
 		}
 		else
 		{
-- 
cgit v1.2.3


From c16591c046fa76fc5d13387efa3bcaec3422e593 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Fri, 12 Feb 2010 16:12:12 -0800
Subject: Per-avatar customizable icons next to name links in text Changed
 LLUrlEntryAgent callbacks to handle both link label and icon Eliminated
 legacy LLNameCache file loading Reviewed with Kelly

---
 indra/newview/llappviewer.cpp                      |  12 +------
 indra/newview/llstartup.cpp                        |  36 +++++++++++++++------
 indra/newview/llstartup.h                          |   4 +++
 .../skins/default/textures/icons/Person_Check.png  | Bin 0 -> 3824 bytes
 .../skins/default/textures/icons/Person_Star.png   | Bin 0 -> 3762 bytes
 indra/newview/skins/default/textures/textures.xml  |   2 ++
 6 files changed, 33 insertions(+), 21 deletions(-)
 create mode 100644 indra/newview/skins/default/textures/icons/Person_Check.png
 create mode 100644 indra/newview/skins/default/textures/icons/Person_Star.png

(limited to 'indra/newview')

diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 00a9e4d745..ba2e13da9d 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -1298,8 +1298,7 @@ bool LLAppViewer::cleanup()
 
 	LLPolyMesh::freeAllMeshes();
 
-	delete gCacheName;
-	gCacheName = NULL;
+	LLStartUp::cleanupNameCache();
 
 	// Note: this is where gLocalSpeakerMgr and gActiveSpeakerMgr used to be deleted.
 
@@ -3337,15 +3336,6 @@ void LLAppViewer::loadNameCache()
 	{
 		if(gCacheName->importFile(cache_file)) return;
 	}
-
-	// Try to load from the legacy format. This should go away after a
-	// while. Phoenix 2008-01-30
-	LLFILE* name_cache_fp = LLFile::fopen(name_cache, "r");		// Flawfinder: ignore
-	if (name_cache_fp)
-	{
-		gCacheName->importFile(name_cache_fp);
-		fclose(name_cache_fp);
-	}
 }
 
 void LLAppViewer::saveNameCache()
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index cfad29df89..97e47fb05e 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -52,6 +52,7 @@
 #endif
 
 #include "llares.h"
+#include "llavatarnamecache.h"
 #include "lllandmark.h"
 #include "llcachename.h"
 #include "lldir.h"
@@ -1280,16 +1281,7 @@ bool idle_startup()
 
 		gXferManager->registerCallbacks(gMessageSystem);
 
-		if ( gCacheName == NULL )
-		{
-			gCacheName = new LLCacheName(gMessageSystem);
-			gCacheName->addObserver(&callback_cache_name);
-			gCacheName->LocalizeCacheName("waiting", LLTrans::getString("AvatarNameWaiting"));
-			gCacheName->LocalizeCacheName("nobody", LLTrans::getString("AvatarNameNobody"));
-			gCacheName->LocalizeCacheName("none", LLTrans::getString("GroupNameNone"));
-			// Load stored cache if possible
-            LLAppViewer::instance()->loadNameCache();
-		}
+		LLStartUp::initNameCache();
 
 		//gCacheName is required for nearby chat history loading
 		//so I just moved nearby history loading a few states further
@@ -2781,6 +2773,30 @@ void LLStartUp::fontInit()
 	LLFontGL::loadDefaultFonts();
 }
 
+void LLStartUp::initNameCache()
+{
+	// Can be called multiple times
+	if ( gCacheName ) return;
+
+	gCacheName = new LLCacheName(gMessageSystem);
+	gCacheName->addObserver(&callback_cache_name);
+	gCacheName->localizeCacheName("waiting", LLTrans::getString("AvatarNameWaiting"));
+	gCacheName->localizeCacheName("nobody", LLTrans::getString("AvatarNameNobody"));
+	gCacheName->localizeCacheName("none", LLTrans::getString("GroupNameNone"));
+	// Load stored cache if possible
+	LLAppViewer::instance()->loadNameCache();
+
+	LLAvatarNameCache::initClass();
+}
+
+void LLStartUp::cleanupNameCache()
+{
+	LLAvatarNameCache::cleanupClass();
+
+	delete gCacheName;
+	gCacheName = NULL;
+}
+
 bool LLStartUp::dispatchURL()
 {
 	// ok, if we've gotten this far and have a startup URL
diff --git a/indra/newview/llstartup.h b/indra/newview/llstartup.h
index 92fe9521d3..14a7c71544 100644
--- a/indra/newview/llstartup.h
+++ b/indra/newview/llstartup.h
@@ -95,6 +95,10 @@ public:
 	// Load default fonts not already loaded at start screen
 	static void fontInit();
 
+	static void initNameCache();
+
+	static void cleanupNameCache();
+
 	// outfit_folder_name can be a folder anywhere in your inventory, 
 	// but the name must be a case-sensitive exact match.
 	// gender_name is either "male" or "female"
diff --git a/indra/newview/skins/default/textures/icons/Person_Check.png b/indra/newview/skins/default/textures/icons/Person_Check.png
new file mode 100644
index 0000000000..f8638540d4
Binary files /dev/null and b/indra/newview/skins/default/textures/icons/Person_Check.png differ
diff --git a/indra/newview/skins/default/textures/icons/Person_Star.png b/indra/newview/skins/default/textures/icons/Person_Star.png
new file mode 100644
index 0000000000..ad10580ac4
Binary files /dev/null and b/indra/newview/skins/default/textures/icons/Person_Star.png differ
diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index 18d1779702..753f62dc8d 100644
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -410,6 +410,8 @@ with the same filename but different name
   <texture name="Pause_Off" file_name="icons/Pause_Off.png" preload="false" />
   <texture name="Pause_Over" file_name="icons/Pause_Over.png" preload="false" />
   <texture name="Pause_Press" file_name="icons/Pause_Press.png" preload="false" />
+  <texture name="Person_Check" file_name="icons/Person_Check.png" preload="false" />
+  <texture name="Person_Star" file_name="icons/Person_Star.png" preload="false" />
   <texture name="Play_Off" file_name="icons/Play_Off.png" preload="false" />
   <texture name="Play_Over" file_name="icons/Play_Over.png" preload="false" />
   <texture name="Play_Press" file_name="icons/Play_Press.png" preload="false" />
-- 
cgit v1.2.3


From e14a641619afc9948b590c2caf8df8df02bdbfe3 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Tue, 16 Feb 2010 17:18:36 -0800
Subject: DEV-46234 Group Invite contains SLID with Resident, and DEV-46231 Pay
 resident notification contains SLID with Resident last name, and DEV-46232
 Payment confirmation of buy and sell parcel of land contains SLID with
 Resident in both notifications Clean up server-side name strings with regex
 matching. Reviewed with Simon.

---
 indra/newview/llnotificationhandlerutil.cpp        |  8 +-
 indra/newview/llviewermessage.cpp                  | 99 ++++++++++++++++------
 .../newview/skins/default/xui/en/notifications.xml | 20 ++++-
 3 files changed, 95 insertions(+), 32 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llnotificationhandlerutil.cpp b/indra/newview/llnotificationhandlerutil.cpp
index 4d1a8fcb04..9c60483416 100644
--- a/indra/newview/llnotificationhandlerutil.cpp
+++ b/indra/newview/llnotificationhandlerutil.cpp
@@ -46,7 +46,9 @@ using namespace LLNotificationsUI;
 const static std::string GRANTED_MODIFY_RIGHTS("GrantedModifyRights"),
 		REVOKED_MODIFY_RIGHTS("RevokedModifyRights"), OBJECT_GIVE_ITEM(
 				"ObjectGiveItem"),
-						PAYMENT_RECIVED("PaymentRecived"),
+						PAYMENT_RECEIVED("PaymentReceived"),
+						PAYMENT_RECEIVED_FOR("PaymentReceivedFor"),
+						PAYMENT_SENT("PaymentSent"),
 						ADD_FRIEND_WITH_MESSAGE("AddFriendWithMessage"),
 						USER_GIVE_ITEM("UserGiveItem"),
 						INVENTORY_ACCEPTED("InventoryAccepted"),
@@ -63,7 +65,9 @@ bool LLHandlerUtil::canLogToIM(const LLNotificationPtr& notification)
 {
 	return GRANTED_MODIFY_RIGHTS == notification->getName()
 			|| REVOKED_MODIFY_RIGHTS == notification->getName()
-			|| PAYMENT_RECIVED == notification->getName()
+			|| PAYMENT_RECEIVED == notification->getName()
+			|| PAYMENT_RECEIVED_FOR == notification->getName()
+			|| PAYMENT_SENT == notification->getName()
 			|| OFFER_FRIENDSHIP == notification->getName()
 			|| FRIENDSHIP_OFFERED == notification->getName()
 			|| SERVER_OBJECT_MESSAGE == notification->getName()
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 10d5d002cd..f8da6eab3d 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -105,6 +105,7 @@
 #include "llpanelplaceprofile.h"
 
 #include <boost/algorithm/string/split.hpp> //
+#include <boost/regex.hpp>
 
 #if LL_WINDOWS // For Windows specific error handler
 #include "llwindebug.h"	// For the invalid message handler
@@ -2038,6 +2039,15 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
 				invite_bucket = (struct invite_bucket_t*) &binary_bucket[0];
 				S32 membership_fee = ntohl(invite_bucket->membership_fee);
 
+				// IDEVO Clean up legacy name "Resident" in message constructed in
+				// lldatagroups.cpp
+				U32 pos = message.find(" has invited you to join a group.\n");
+				if (pos != std::string::npos)
+				{
+					// use cleaned-up name from above
+					message = name + message.substr(pos);
+				}
+
 				LLSD payload;
 				payload["transaction_id"] = session_id;
 				payload["group_id"] = from_id;
@@ -4439,6 +4449,67 @@ void process_time_dilation(LLMessageSystem *msg, void **user_data)
 */
 
 
+static void show_money_balance_notification(const std::string& desc)
+{
+	// Intercept some messages constructed in lltransactionflags.cpp
+	// to fix avatar names and allow localization.
+	LLSD args;
+	LLSD payload;
+	std::string name;
+	boost::smatch match;
+	const char* notification_name = NULL;
+
+	// <name> paid you L$<amount> for <reason>.
+	static const boost::regex paid_you_for("(.+) paid you L\\$(\\d+) for (.*)\\.");
+	// <name> paid you L$<amount>.
+	static const boost::regex paid_you("(.+) paid you L\\$(\\d+)\\.");
+	// You paid <name> L$<amount> [for <reason>].
+	static const boost::regex you_paid("You paid (.*) L\\$(\\d+)(.+)\\.");
+
+	if (boost::regex_match(desc, match, paid_you_for))
+	{
+		name = match[1].str();
+		// IDEVO strip legacy "Resident" name
+		name = name.substr(0, name.find(" Resident"));
+		args["NAME"] = name;
+		args["AMOUNT"] = match[2].str();
+		args["REASON"] = match[3].str();
+		notification_name = "PaymentReceivedFor";
+	}
+	else if (boost::regex_match(desc, match, paid_you))
+	{
+		name = match[1].str();
+		// IDEVO strip legacy "Resident" name
+		name = name.substr(0, name.find(" Resident"));
+		args["NAME"] = name;
+		args["AMOUNT"] = match[2].str();
+		notification_name = "PaymentReceived";
+	}
+	else if (boost::regex_match(desc, match, you_paid))
+	{
+		name = match[1].str();
+		// IDEVO strip legacy "Resident" name
+		name = name.substr(0, name.find(" Resident"));
+		args["NAME"] = name;
+		args["AMOUNT"] = match[2].str();
+		args["REASON"] = match[3].str();
+		notification_name = "PaymentSent";
+	}
+
+	// if name extracted and name cache contains avatar id send loggable notification
+	LLUUID from_id;
+	if (notification_name != NULL
+		&& gCacheName->getUUID(name, from_id))
+	{
+		payload["from_id"] = from_id;
+		LLNotificationsUtil::add(notification_name, args, payload);
+	}
+	else
+	{
+		args["MESSAGE"] = desc;
+		LLNotificationsUtil::add("SystemMessage", args);
+	}
+}
 
 void process_money_balance_reply( LLMessageSystem* msg, void** )
 {
@@ -4483,33 +4554,7 @@ void process_money_balance_reply( LLMessageSystem* msg, void** )
 	if(!desc.empty() && gSavedSettings.getBOOL("NotifyMoneyChange")
 	   && (std::find(recent.rbegin(), recent.rend(), tid) == recent.rend()))
 	{
-		// Make the user confirm the transaction, since they might
-		// have missed something during an event.
-		// *TODO: Translate
-		LLSD args;
-		args["MESSAGE"] = desc;
-
-		// this is a marker to retrieve avatar name from server message:
-		// "<avatar name> paid you L$"
-		const std::string marker = "paid you L$";
-
-		// extract avatar name from system message
-		std::string name = desc.substr(0, desc.find(marker, 0));
-		LLStringUtil::trim(name);
-
-		// if name extracted and name cache contains avatar id send loggable notification
-		LLUUID from_id;
-		if(name.size() > 0 && gCacheName->getUUID(name, from_id))
-		{
-			args["NAME"] = name;
-			LLSD payload;
-			payload["from_id"] = from_id;
-			LLNotificationsUtil::add("PaymentRecived", args, payload);
-		}
-		else
-		{
-			LLNotificationsUtil::add("SystemMessage", args);
-		}
+		show_money_balance_notification(desc);
 
 		// Once the 'recent' container gets large enough, chop some
 		// off the beginning.
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 665a49b6d8..a69d9c78a7 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -4621,11 +4621,25 @@ Please select at least one type of content to search (General, Moderate, or Adul
 
   <notification
    icon="notify.tga"
-   name="PaymentRecived"
+   name="PaymentReceived"
    type="notify">
-[MESSAGE]
+[NAME] paid you L$[AMOUNT].
   </notification>
-  
+
+  <notification
+   icon="notify.tga"
+   name="PaymentReceivedFor"
+   type="notify">
+[NAME] paid you L$[AMOUNT] for [REASON].
+  </notification>
+
+  <notification
+   icon="notify.tga"
+   name="PaymentSent"
+   type="notify">
+You paid [NAME] L$[AMOUNT][REASON].
+  </notification>
+
   <notification
    icon="notify.tga"
    name="EventNotification"
-- 
cgit v1.2.3


From 5774acb84e486c1eabad88093e80e3985d36dfcb Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Wed, 17 Feb 2010 09:19:06 -0800
Subject: Added function LLCacheName::cleanFullName() to strip " Resident" from
 strings

---
 indra/newview/llviewermessage.cpp | 30 ++++++++++++------------------
 1 file changed, 12 insertions(+), 18 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index f8da6eab3d..6ead920946 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -1631,7 +1631,6 @@ static LLNotificationFunctorRegistration inspect_remote_object_callback_reg("Ser
 // (rather than a script)
 static std::string clean_name_from_im(const std::string& name, EInstantMessage type)
 {
-	U32 pos = 0;
 	switch(type)
 	{
 	case IM_NOTHING_SPECIAL:
@@ -1674,8 +1673,7 @@ static std::string clean_name_from_im(const std::string& name, EInstantMessage t
 	case IM_FRIENDSHIP_DECLINED_DEPRECATED:
 	//IM_TYPING_START
 	//IM_TYPING_STOP
-		pos = name.find(" Resident");
-		return name.substr(0, pos);
+		return LLCacheName::cleanFullName(name);
 	default:
 		return name;
 	}
@@ -2557,16 +2555,6 @@ void process_decline_callingcard(LLMessageSystem* msg, void**)
 	LLNotificationsUtil::add("CallingCardDeclined");
 }
 
-static std::string clean_name_from_chat(const std::string& full_name, EChatSourceType type)
-{
-	if (type == CHAT_SOURCE_AGENT)
-	{
-		U32 pos = full_name.find(" Resident");
-		return full_name.substr(0, pos);
-	}
-	return full_name;
-}
-
 void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
 {
 	LLChat	chat;
@@ -2582,7 +2570,6 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
 	LLViewerObject*	chatter;
 
 	msg->getString("ChatData", "FromName", from_name);
-	//chat.mFromName = from_name;
 	
 	msg->getUUID("ChatData", "SourceID", from_id);
 	chat.mFromID = from_id;
@@ -2602,7 +2589,14 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
 	chat.mTime = LLFrameTimer::getElapsedSeconds();
 	
 	// IDEVO Correct for new-style "Resident" names
-	chat.mFromName = clean_name_from_chat(from_name, chat.mSourceType);
+	if (chat.mChatType == CHAT_SOURCE_AGENT)
+	{
+		chat.mFromName = LLCacheName::cleanFullName(from_name);
+	}
+	else
+	{
+		chat.mFromName = from_name;
+	}
 
 	BOOL is_busy = gAgent.getBusy();
 
@@ -4470,7 +4464,7 @@ static void show_money_balance_notification(const std::string& desc)
 	{
 		name = match[1].str();
 		// IDEVO strip legacy "Resident" name
-		name = name.substr(0, name.find(" Resident"));
+		name = LLCacheName::cleanFullName(name);
 		args["NAME"] = name;
 		args["AMOUNT"] = match[2].str();
 		args["REASON"] = match[3].str();
@@ -4480,7 +4474,7 @@ static void show_money_balance_notification(const std::string& desc)
 	{
 		name = match[1].str();
 		// IDEVO strip legacy "Resident" name
-		name = name.substr(0, name.find(" Resident"));
+		name = LLCacheName::cleanFullName(name);
 		args["NAME"] = name;
 		args["AMOUNT"] = match[2].str();
 		notification_name = "PaymentReceived";
@@ -4489,7 +4483,7 @@ static void show_money_balance_notification(const std::string& desc)
 	{
 		name = match[1].str();
 		// IDEVO strip legacy "Resident" name
-		name = name.substr(0, name.find(" Resident"));
+		name = LLCacheName::cleanFullName(name);
 		args["NAME"] = name;
 		args["AMOUNT"] = match[2].str();
 		args["REASON"] = match[3].str();
-- 
cgit v1.2.3


From 298d012f3b9790c1d3f16251eff6e5219bfaaf88 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Wed, 17 Feb 2010 09:48:02 -0800
Subject: Documented that last name "Resident" is not stored

---
 indra/newview/llmutelist.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llmutelist.h b/indra/newview/llmutelist.h
index 4e5812c5ff..777b4843c8 100644
--- a/indra/newview/llmutelist.h
+++ b/indra/newview/llmutelist.h
@@ -74,7 +74,7 @@ public:
 	
 public:
 	LLUUID		mID;	// agent or object id
-	std::string	mName;	// agent or object name
+	std::string	mName;	// agent or object name, does not store last name "Resident"
 	EType		mType;	// needed for UI display of existing mutes
 	U32			mFlags;	// flags pertaining to this mute entry
 };
-- 
cgit v1.2.3


From ffb741f862c9bc3c072bb2c63fb93707940d1d97 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Wed, 17 Feb 2010 09:48:43 -0800
Subject: DEV-46233 From field in group notices table contains SLID with
 Resident Raw name being sent from server

---
 indra/newview/llpanelgroupnotices.cpp | 4 ++++
 1 file changed, 4 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/llpanelgroupnotices.cpp b/indra/newview/llpanelgroupnotices.cpp
index 6210973dae..849afce34d 100644
--- a/indra/newview/llpanelgroupnotices.cpp
+++ b/indra/newview/llpanelgroupnotices.cpp
@@ -36,6 +36,7 @@
 
 #include "llview.h"
 
+#include "llcachename.h"
 #include "llinventory.h"
 #include "llviewerinventory.h"
 #include "llinventoryfunctions.h"
@@ -533,6 +534,9 @@ void LLPanelGroupNotices::processNotices(LLMessageSystem* msg)
 		msg->getU8("Data","AssetType",asset_type,i);
 		msg->getU32("Data","Timestamp",timestamp,i);
 
+		// IDEVO clean up legacy "Resident" names
+		name = LLCacheName::cleanFullName(name);
+
 		LLSD row;
 		row["id"] = id;
 		
-- 
cgit v1.2.3


From 53ff6652f08f70fe924398f65b0e289e009d1e8c Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Wed, 17 Feb 2010 11:01:53 -0800
Subject: Fix typo, should unbreak Linux/Mac builds

---
 indra/newview/llviewermessage.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 6ead920946..5b16347db3 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -2589,7 +2589,7 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
 	chat.mTime = LLFrameTimer::getElapsedSeconds();
 	
 	// IDEVO Correct for new-style "Resident" names
-	if (chat.mChatType == CHAT_SOURCE_AGENT)
+	if (chat.mSourceType == CHAT_SOURCE_AGENT)
 	{
 		chat.mFromName = LLCacheName::cleanFullName(from_name);
 	}
-- 
cgit v1.2.3


From 55bfb4435e1a2ffc34578bf30877eb24a5edaa29 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Wed, 17 Feb 2010 16:55:58 -0800
Subject: Look up display names via a web service Also removed unused
 LLComboBox globals to reduce llappviewer.cpp include file burden. Review
 pending

---
 indra/newview/llappviewer.cpp | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index ba2e13da9d..62b8b972b6 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -85,6 +85,7 @@
 #include "llsecondlifeurls.h"
 
 // Linden library includes
+#include "llavatarnamecache.h"
 #include "llimagej2c.h"
 #include "llmemory.h"
 #include "llprimitive.h"
@@ -157,7 +158,6 @@
 // Included so that constants/settings might be initialized
 // in save_settings_to_globals()
 #include "llbutton.h"
-#include "llcombobox.h"
 #include "llstatusbar.h"
 #include "llsurface.h"
 #include "llvosky.h"
@@ -399,9 +399,6 @@ static void settings_to_globals()
 	MENU_BAR_HEIGHT		= gSavedSettings.getS32("MenuBarHeight");
 	MENU_BAR_WIDTH		= gSavedSettings.getS32("MenuBarWidth");
 
-	LLCOMBOBOX_HEIGHT	= BTN_HEIGHT - 2;
-	LLCOMBOBOX_WIDTH	= 128;
-
 	LLSurface::setTextureSize(gSavedSettings.getU32("RegionTextureSize"));
 	
 	LLImageGL::sGlobalUseAnisotropic	= gSavedSettings.getBOOL("RenderAnisotropic");
@@ -3897,6 +3894,8 @@ void LLAppViewer::idleNetwork()
 		
 		// deal with any queued name requests and replies.
 		gCacheName->processPending();
+		LLAvatarNameCache::idle();
+
 		llpushcallstacks ;
 		LLTimer check_message_timer;
 		//  Read all available packets from network 
-- 
cgit v1.2.3


From ee81adb01b8619302898471fdbba5c93f716d10b Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Thu, 18 Feb 2010 18:46:41 -0800
Subject: Preference to set what fields name tags display, and first attempt at
 "use display names" menu item which doesn't work yet

---
 indra/newview/app_settings/settings.xml            | 35 ++++++++-
 indra/newview/llinspectavatar.cpp                  |  3 +-
 indra/newview/lltoolpie.cpp                        |  3 +-
 indra/newview/llviewerdisplay.cpp                  |  2 +-
 indra/newview/llviewermenu.cpp                     |  6 ++
 indra/newview/llvoavatar.cpp                       | 60 +++++++++------
 indra/newview/skins/default/xui/en/menu_viewer.xml |  9 +++
 .../default/xui/en/panel_preferences_general.xml   | 85 ++++++++++++++++------
 8 files changed, 151 insertions(+), 52 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index d0c2f3cb34..0df53559df 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -7089,7 +7089,7 @@
       <key>Value</key>
       <integer>0</integer>
     </map>
-    <key>RenderShowGroupTitleAll</key>
+    <key>NameTagShowGroupTitles</key>
     <map>
       <key>Comment</key>
       <string>Show group titles in name labels</string>
@@ -7098,6 +7098,39 @@
       <key>Type</key>
       <string>Boolean</string>
       <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>NameTagShowDisplayNames</key>
+    <map>
+      <key>Comment</key>
+      <string>Show display names in name labels</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+    <key>NameTagShowSLIDs</key>
+    <map>
+      <key>Comment</key>
+      <string>Show Second Life IDs in name labels</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>NameTagShowStatus</key>
+    <map>
+      <key>Comment</key>
+      <string>Show status (AFK, Busy) in name labels</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
       <integer>1</integer>
     </map>
     <key>RenderInitError</key>
diff --git a/indra/newview/llinspectavatar.cpp b/indra/newview/llinspectavatar.cpp
index 6dddc133c2..c4fd5a07c1 100644
--- a/indra/newview/llinspectavatar.cpp
+++ b/indra/newview/llinspectavatar.cpp
@@ -613,7 +613,8 @@ void LLInspectAvatar::onNameCache(
 
 		// IDEVO JAMESDEBUG - need to always display a display name
 		LLAvatarName av_name;
-		if (LLAvatarNameCache::get(mAvatarID, &av_name))
+		if (LLAvatarNameCache::useDisplayNames()
+			&& LLAvatarNameCache::get(mAvatarID, &av_name))
 		{
 			getChild<LLUICtrl>("user_name")->setValue(av_name.mDisplayName);
 			getChild<LLUICtrl>("user_slid")->setValue(av_name.mSLID);
diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp
index 9480ca0fdf..1ddf6db0e2 100644
--- a/indra/newview/lltoolpie.cpp
+++ b/indra/newview/lltoolpie.cpp
@@ -873,7 +873,8 @@ BOOL LLToolPie::handleTooltipObject( LLViewerObject* hover_object, std::string l
 				}
 			}
 			LLAvatarName av_name;
-			if (LLAvatarNameCache::get(hover_object->getID(), &av_name))
+			if (LLAvatarNameCache::useDisplayNames()
+				&& LLAvatarNameCache::get(hover_object->getID(), &av_name))
 			{
 				final_name = av_name.mDisplayName + " (" + av_name.mSLID + ")";
 			}
diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp
index ba256d70e8..b0a143438b 100644
--- a/indra/newview/llviewerdisplay.cpp
+++ b/indra/newview/llviewerdisplay.cpp
@@ -324,7 +324,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 	LLImageGL::updateStats(gFrameTimeSeconds);
 	
 	LLVOAvatar::sRenderName = gSavedSettings.getS32("AvatarNameTagMode");
-	LLVOAvatar::sRenderGroupTitles = (gSavedSettings.getBOOL("RenderShowGroupTitleAll") && gSavedSettings.getS32("AvatarNameTagMode"));
+	LLVOAvatar::sRenderGroupTitles = (gSavedSettings.getBOOL("NameTagShowGroupTitles") && gSavedSettings.getS32("AvatarNameTagMode"));
 	
 	gPipeline.mBackfaceCull = TRUE;
 	gFrameCount++;
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 7fc7f2101a..974413141f 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -34,6 +34,7 @@
 #include "llviewermenu.h" 
 
 // linden library includes
+#include "llavatarnamecache.h"	// IDEVO
 #include "llfloaterreg.h"
 #include "llcombobox.h"
 #include "llinventorypanel.h"
@@ -7716,6 +7717,11 @@ void initialize_menus()
 	view_listener_t::addMenu(new LLAdvancedToggleConsole(), "Advanced.ToggleConsole");
 	view_listener_t::addMenu(new LLAdvancedCheckConsole(), "Advanced.CheckConsole");
 	view_listener_t::addMenu(new LLAdvancedDumpInfoToConsole(), "Advanced.DumpInfoToConsole");
+	
+	// IDEVO
+	commit.add("IDEVO.ToggleDisplayNames", boost::bind(&LLAvatarNameCache::toggleDisplayNames));
+	enable.add("IDEVO.CheckDisplayNames", boost::bind(&LLAvatarNameCache::useDisplayNames));
+	
 	// Advanced > HUD Info
 	view_listener_t::addMenu(new LLAdvancedToggleHUDInfo(), "Advanced.ToggleHUDInfo");
 	view_listener_t::addMenu(new LLAdvancedCheckHUDInfo(), "Advanced.CheckHUDInfo");
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index e4de75d173..04809caa6f 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -2805,50 +2805,62 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last)
 			line += "\n";
 		}
 
+		static LLUICachedControl<bool> show_display_names("NameTagShowDisplayNames");
+		static LLUICachedControl<bool> show_slids("NameTagShowSLIDs");
+
 		LLAvatarName av_name;
-		if (LLAvatarNameCache::get(getID(), &av_name))
+		if (LLAvatarNameCache::useDisplayNames()
+			&& LLAvatarNameCache::get(getID(), &av_name))
 		{
-			line += av_name.mDisplayName;
+			if (show_display_names)
+			{
+				line += av_name.mDisplayName;
+				line += "\n";
+			}
+			if (show_slids)
+			{
+				line += "(";
+				line += av_name.mSLID;
+				line += ")\n";
+			}
 		}
 		else
 		{
-			line += LLCacheName::buildFullName( firstname->getString(), lastname->getString() );
+			if (show_display_names || show_slids)
+			{
+				line += LLCacheName::buildFullName( firstname->getString(), lastname->getString() );
+				line += "\n";
+			}
 		}
 
-		BOOL need_comma = FALSE;
-
-		if (is_away || is_muted || is_busy)
+		static LLUICachedControl<bool> show_status("NameTagShowStatus");
+		if (show_status
+			&& (is_away || is_muted || is_busy || is_appearance) )
 		{
-			line += " (";
+			//line += "(";
 			if (is_away)
 			{
 				line += LLTrans::getString("AvatarAway");
-				need_comma = TRUE;
+				line += ", ";
 			}
 			if (is_busy)
 			{
-				if (need_comma)
-				{
-					line += ", ";
-				}
 				line += LLTrans::getString("AvatarBusy");
-				need_comma = TRUE;
+				line += ", ";
 			}
 			if (is_muted)
 			{
-				if (need_comma)
-				{
-					line += ", ";
-				}
 				line += LLTrans::getString("AvatarMuted");
-				need_comma = TRUE;
+				line += ", ";
 			}
-			line += ")";
-		}
-		if (is_appearance)
-		{
-			line += "\n";
-			line += LLTrans::getString("AvatarEditingAppearance");
+			if (is_appearance)
+			{
+				line += LLTrans::getString("AvatarEditingAppearance");
+				line += ", ";
+			}
+			// trim last ", "
+			line.resize( line.length() - 2 );
+			//line += ")";
 		}
 		mNameAway = is_away;
 		mNameBusy = is_busy;
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index 95ce6d6ff4..21c2ba51e3 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -9,6 +9,15 @@
      layout="topleft"
      name="Me"
      tear_off="true">
+        <menu_item_check
+         label="IDEVO Display Name Prototype"
+         name="display_name_prototype">
+            <menu_item_check.on_check
+             function="IDEVO.CheckDisplayNames" />
+            <menu_item_check.on_click
+             function="IDEVO.ToggleDisplayNames" />
+		</menu_item_check>
+		<menu_item_separator />
         <menu_item_call
          label="Preferences"
          layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_general.xml b/indra/newview/skins/default/xui/en/panel_preferences_general.xml
index 099c789e4b..acc9321abd 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_general.xml
@@ -195,40 +195,30 @@
    </text>
    <radio_group
      control_name="AvatarNameTagMode"
-     height="20"
+     height="45"
      layout="topleft"
      left="50"
      name="Name_Tag_Preference">
         <radio_item
          label="Off"
-         layout="topleft"
          name="radio"
          value="0"
          width="75" />
         <radio_item
          label="On"
-         layout="topleft"
-         left_pad="12"
+         left_delta="0"
          name="radio2"
+		 top_pad="5"
          value="1"
          width="75" />
         <radio_item
          label="Show briefly"
-         layout="topleft"
-         left_pad="12"
+         left_delta="0"
          name="radio3"
+		 top_pad="5"
          value="2"
          width="160" />
     </radio_group>
-    <check_box
-	 enabled_control="AvatarNameTagMode"
-     control_name="RenderNameShowSelf"
-     height="16"
-     label="Show my name"
-     layout="topleft"
-     left="50"
-     name="show_my_name_checkbox1"
-     width="300" />
     <check_box
 	 enabled_control="AvatarNameTagMode"
      control_name="SmallAvatarNames"
@@ -236,19 +226,66 @@
      initial_value="true"
      label="Small name tags"
      layout="topleft"
-     left_delta="175"
+     left="70"
      name="small_avatar_names_checkbox"
+	 top_pad="4"
      width="200" />
-   <check_box
+    <check_box
 	 enabled_control="AvatarNameTagMode"
-     control_name="RenderShowGroupTitleAll"
+     control_name="RenderNameShowSelf"
      height="16"
-     label="Show group titles"
+     label="Show my name"
      layout="topleft"
-     left_delta="-175"
-     name="show_all_title_checkbox1"
-     top_pad="5"
+     left="70"
+     name="show_my_name_checkbox1"
+	 top_pad="4"
      width="300" />
+   <text
+    follows="left|top"
+    height="15"
+	layout="topleft"
+    left="250"
+    name="name_tags_textbox"
+    top="175"
+    width="200">
+       Tags show:
+   </text>
+   <check_box
+     control_name="NameTagShowGroupTitles"
+	 enabled_control="AvatarNameTagMode"
+     height="16"
+     label="Group titles"
+     left="265"
+     name="show_all_title_checkbox1"
+	 tool_tip="Show group titles, like Officer or Member"
+     top_pad="5" />
+   <check_box
+     control_name="NameTagShowDisplayNames"
+	 enabled_control="AvatarNameTagMode"
+     height="16"
+     label="Display names"
+     left_delta="0"
+     name="show_display_names"
+	 tool_tip="Show display names, like José Sanchez"
+     top_pad="5" />
+   <check_box
+     control_name="NameTagShowSLIDs"
+	 enabled_control="AvatarNameTagMode"
+     height="16"
+     label="Second Life IDs"
+     left_delta="0"
+     name="show_slids"
+	 tool_tip="Show SL ID, like bobsmith123"
+     top_pad="5" />
+   <check_box
+     control_name="NameTagShowStatus"
+	 enabled_control="AvatarNameTagMode"
+     height="16"
+     label="Status"
+     left_delta="0"
+     name="show_status"
+	 tool_tip="Show status, like AFK or Busy"
+     top_pad="5" />
     <text
      type="string"
      length="1"
@@ -257,7 +294,7 @@
      layout="topleft"
      left="30"
      name="effects_color_textbox"
-     top_pad="15"
+     top="290"
      width="200">
         My effects:
     </text>
@@ -339,7 +376,7 @@
       hover="false"
      commit_on_focus_lost = "true"
      follows="left|top"
-     height="60"
+     height="45"
      layout="topleft"
      left="50"
      name="busy_response"
-- 
cgit v1.2.3


From b77cd684fb5a46bb613df1a73af1856cf39aef84 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Fri, 19 Feb 2010 10:52:30 -0800
Subject: Added Display Names option to login menu as well

---
 indra/newview/skins/default/xui/en/menu_login.xml | 9 +++++++++
 1 file changed, 9 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/menu_login.xml b/indra/newview/skins/default/xui/en/menu_login.xml
index ba74104594..3570237e92 100644
--- a/indra/newview/skins/default/xui/en/menu_login.xml
+++ b/indra/newview/skins/default/xui/en/menu_login.xml
@@ -12,6 +12,15 @@
      label="Me"
      tear_off="true"
      name="File">
+        <menu_item_check
+         label="IDEVO Display Name Prototype"
+         name="display_name_prototype">
+            <menu_item_check.on_check
+             function="IDEVO.CheckDisplayNames" />
+            <menu_item_check.on_click
+             function="IDEVO.ToggleDisplayNames" />
+        </menu_item_check>
+        <menu_item_separator />
         <menu_item_call
          label="Preferences"
          name="Preferences..."
-- 
cgit v1.2.3


From af8f8b4770eb45b4238d98ddd574ba726470f797 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Fri, 19 Feb 2010 11:11:45 -0800
Subject: Improved support for toggling display names on/off Stop pre-populated
 name cache because we have a web service now for lookup Added mIsLegacy to
 LLAvatarName so we can colorize those name tags differently

---
 indra/newview/llvoavatar.cpp | 8 ++++++++
 indra/newview/llvoavatar.h   | 1 +
 2 files changed, 9 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 04809caa6f..73f292cbca 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -660,6 +660,7 @@ LLVOAvatar::LLVOAvatar(const LLUUID& id,
 	mNameFriend(false),
 	mNameAlpha(0.f),
 	mRenderGroupTitles(sRenderGroupTitles),
+	mUseDisplayNames( LLAvatarNameCache::useDisplayNames() ),
 	mFirstTEMessageReceived( FALSE ),
 	mFirstAppearanceMessageReceived( FALSE ),
 	mCulled( FALSE ),
@@ -2695,6 +2696,13 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last)
 		new_name = TRUE;
 	}
 
+	// IDEVO HACK to force refresh
+	if (LLAvatarNameCache::useDisplayNames() != mUseDisplayNames)
+	{
+		mUseDisplayNames = LLAvatarNameCache::useDisplayNames();
+		new_name = TRUE;
+	}
+
 	// First Calculate Alpha
 	// If alpha > 0, create mNameText if necessary, otherwise delete it
 	F32 alpha = 0.f;
diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h
index cf3f40979b..f70c68bcba 100644
--- a/indra/newview/llvoavatar.h
+++ b/indra/newview/llvoavatar.h
@@ -831,6 +831,7 @@ private:
 	bool			mNameFriend;
 	F32				mNameAlpha;
 	BOOL      		mRenderGroupTitles;
+	bool			mUseDisplayNames; // IDEVO HACK to force refresh
 
 	//--------------------------------------------------------------------
 	// Display the name (then optionally fade it out)
-- 
cgit v1.2.3


From c1ea91fb44653749a382c89aeed6054ac547b064 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Fri, 19 Feb 2010 14:41:03 -0800
Subject: Show SLID in side panel full avatar profile

---
 indra/newview/llpanelprofileview.cpp                  | 19 ++++++++++++++++---
 .../skins/default/xui/en/panel_profile_view.xml       | 11 +++++++++++
 2 files changed, 27 insertions(+), 3 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llpanelprofileview.cpp b/indra/newview/llpanelprofileview.cpp
index 7c9b7aed36..5688c6960b 100644
--- a/indra/newview/llpanelprofileview.cpp
+++ b/indra/newview/llpanelprofileview.cpp
@@ -32,11 +32,12 @@
 
 #include "llviewerprecompiledheaders.h"
 
+#include "llpanelprofileview.h"
+
 #include "llavatarconstants.h"
+#include "llavatarnamecache.h"	// IDEVO
 #include "lluserrelations.h"
 
-#include "llpanelprofileview.h"
-
 #include "llavatarpropertiesprocessor.h"
 #include "llcallingcard.h"
 #include "llpanelavatar.h"
@@ -201,7 +202,19 @@ void LLPanelProfileView::processOnlineStatus(bool online)
 void LLPanelProfileView::onNameCache(const LLUUID& id, const std::string& full_name, bool is_group)
 {
 	llassert(getAvatarId() == id);
-	getChild<LLUICtrl>("user_name", FALSE)->setValue(full_name);
+	// IDEVO
+	LLAvatarName av_name;
+	if (LLAvatarNameCache::useDisplayNames()
+		&& LLAvatarNameCache::get(id, &av_name))
+	{
+		getChild<LLUICtrl>("user_name")->setValue( av_name.mDisplayName );
+		getChild<LLUICtrl>("user_slid")->setValue( av_name.mSLID );
+	}
+	else
+	{
+		getChild<LLUICtrl>("user_name")->setValue(full_name);
+		getChild<LLUICtrl>("user_slid")->setValue("");
+	}
 }
 
 // EOF
diff --git a/indra/newview/skins/default/xui/en/panel_profile_view.xml b/indra/newview/skins/default/xui/en/panel_profile_view.xml
index 607de65c5c..96c7ba39ed 100644
--- a/indra/newview/skins/default/xui/en/panel_profile_view.xml
+++ b/indra/newview/skins/default/xui/en/panel_profile_view.xml
@@ -45,8 +45,19 @@
      height="13"
      layout="topleft"
      left="45"
+     name="user_slid"
+     text_color="LtGray"
+     value=""
+     width="150" />
+    <text
+     follows="top|left"
+     halign="right" 
+     height="13"
+     layout="topleft"
+     left="150"
      name="status"
      text_color="LtGray_50"
+     top_delta="0" 
      value="Online"
      width="150" />
     <tab_container
-- 
cgit v1.2.3


From 12539222f7da03129820755715254c2f7a70d450 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Fri, 19 Feb 2010 15:13:53 -0800
Subject: Tweak the legacy avatar name tag color

---
 indra/newview/skins/default/colors.xml | 3 +++
 1 file changed, 3 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml
index 93dafcf2c1..f48ef0d24d 100644
--- a/indra/newview/skins/default/colors.xml
+++ b/indra/newview/skins/default/colors.xml
@@ -120,6 +120,9 @@
     <color
      name="AvatarNameFriendColor"
      reference="Green" />
+    <color
+     name="AvatarNameLegacyColor"
+     reference="Yellow" />
     <color
      name="AvatarListItemIconDefaultColor"
      reference="White" />
-- 
cgit v1.2.3


From a5099524e2a89d0162053c7165468b72bcaa2571 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Fri, 19 Feb 2010 15:14:14 -0800
Subject: Avatars with legacy names have special color name tags

---
 indra/newview/llvoavatar.cpp | 21 ++++++++++++++++++---
 1 file changed, 18 insertions(+), 3 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 73f292cbca..69a4abcdae 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -3000,10 +3000,10 @@ LLVector3 LLVOAvatar::idleUpdateNameTagPosition(const LLVector3& root_pos_last)
 		(projected_vec(local_camera_at * root_rot, camera_to_av));
 	name_position += pixel_up_vec * 15.f;
 	return name_position;
-	}
+}
 
 void LLVOAvatar::idleUpdateNameTagColor(BOOL new_name, F32 alpha)
-	{
+{
 	llassert(mNameText);
 
 	bool is_friend = LLAvatarTracker::instance().isBuddy(getID());
@@ -3011,7 +3011,22 @@ void LLVOAvatar::idleUpdateNameTagColor(BOOL new_name, F32 alpha)
 		|| alpha != mNameAlpha
 		|| is_friend != mNameFriend)
 	{
-		const char* color_name = (is_friend ? "AvatarNameFriendColor" : "AvatarNameColor");
+		const char* color_name = "AvatarNameColor";
+		if (is_friend)
+		{
+			color_name = "AvatarNameFriendColor";
+		}
+		else
+		{
+			// IDEVO can we avoid doing this lookup repeatedly?
+			LLAvatarName av_name;
+			if (LLAvatarNameCache::useDisplayNames()
+				&& LLAvatarNameCache::get(getID(), &av_name)
+				&& av_name.mIsLegacy)
+			{
+				color_name = "AvatarNameLegacyColor";
+			}
+		}
 		LLColor4 avatar_name_color =
 			LLUIColorTable::getInstance()->getColor( color_name );
 		avatar_name_color.setAlpha(alpha);
-- 
cgit v1.2.3


From d3582dc3ffb1ecb8a8888d17c4196c1c446a9a9a Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Fri, 19 Feb 2010 15:14:44 -0800
Subject: IM window titles are Display Name (SLID)

---
 indra/newview/llavataractions.cpp   | 17 ++++++++++++++++-
 indra/newview/llimview.cpp          |  8 ++++++++
 indra/newview/llinventorybridge.cpp | 10 ++++++++++
 3 files changed, 34 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp
index 9e136b7cfb..298e221460 100644
--- a/indra/newview/llavataractions.cpp
+++ b/indra/newview/llavataractions.cpp
@@ -35,11 +35,11 @@
 
 #include "llavataractions.h"
 
+#include "llavatarnamecache.h"	// IDEVO
 #include "llsd.h"
 #include "lldarray.h"
 #include "llnotifications.h"
 #include "llnotificationsutil.h"
-
 #include "roles_constants.h"    // for GP_MEMBER_INVITE
 
 #include "llagent.h"
@@ -187,6 +187,14 @@ void LLAvatarActions::startIM(const LLUUID& id)
 		return;
 	}
 
+	// IDEVO
+	LLAvatarName av_name;
+	if (LLAvatarNameCache::useDisplayNames()
+		&& LLAvatarNameCache::get(id, &av_name))
+	{
+		name = av_name.mDisplayName + " (" + av_name.mSLID + ")";
+	}
+
 	LLUUID session_id = gIMMgr->addSession(name, IM_NOTHING_SPECIAL, id);
 	if (session_id != LLUUID::null)
 	{
@@ -218,6 +226,13 @@ void LLAvatarActions::startCall(const LLUUID& id)
 
 	std::string name;
 	gCacheName->getFullName(id, name);
+	// IDEVO
+	LLAvatarName av_name;
+	if (LLAvatarNameCache::useDisplayNames()
+		&& LLAvatarNameCache::get(id, &av_name))
+	{
+		name = av_name.mDisplayName + " (" + av_name.mSLID + ")";
+	}
 	LLUUID session_id = gIMMgr->addSession(name, IM_NOTHING_SPECIAL, id, true);
 	if (session_id != LLUUID::null)
 	{
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index 8999aab50a..9ebac16e7f 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -34,6 +34,7 @@
 
 #include "llimview.h"
 
+#include "llavatarnamecache.h"	// IDEVO
 #include "llfloaterreg.h"
 #include "llfontgl.h"
 #include "llrect.h"
@@ -1940,6 +1941,13 @@ void LLIncomingCallDialog::processCallResponse(S32 response)
 					{
 						if (gCacheName->getFullName(caller_id, correct_session_name))
 						{
+							// IDEVO really should be using callbacks here
+							LLAvatarName av_name;
+							if (LLAvatarNameCache::useDisplayNames()
+								&& LLAvatarNameCache::get(caller_id, &av_name))
+							{
+								correct_session_name = av_name.mDisplayName + " (" + av_name.mSLID + ")";
+							}
 							correct_session_name.append(ADHOC_NAME_SUFFIX); 
 						}
 					}
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index da95eaefca..6bff3dad64 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -31,8 +31,11 @@
  */
 
 #include "llviewerprecompiledheaders.h"
+
 #include "llinventorybridge.h"
 
+#include "llavatarnamecache.h"	// IDEVO
+
 #include "llagent.h"
 #include "llagentwearables.h"
 #include "llappearancemgr.h"
@@ -3555,6 +3558,13 @@ void LLCallingCardBridge::performAction(LLFolderView* folder, LLInventoryModel*
 		{
 			std::string callingcard_name;
 			gCacheName->getFullName(item->getCreatorUUID(), callingcard_name);
+			// IDEVO
+			LLAvatarName av_name;
+			if (LLAvatarNameCache::useDisplayNames()
+				&& LLAvatarNameCache::get(item->getCreatorUUID(), &av_name))
+			{
+				callingcard_name = av_name.mDisplayName + " (" + av_name.mSLID + ")";
+			}
 			LLUUID session_id = gIMMgr->addSession(callingcard_name, IM_NOTHING_SPECIAL, item->getCreatorUUID());
 			if (session_id != LLUUID::null)
 			{
-- 
cgit v1.2.3


From 3791745054546dbebb3373371aaf7a0ddad608a3 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Mon, 22 Feb 2010 16:41:56 -0800
Subject: Simple button to change your display name Talks to web service so
 other people can see the change, but for now they need to relog or toggle
 display names on/off to clear their cache.

---
 indra/newview/llpanelme.cpp                        | 60 ++++++++++++++++++++++
 indra/newview/llpanelme.h                          |  1 +
 .../newview/skins/default/xui/en/notifications.xml | 21 ++++++++
 .../skins/default/xui/en/panel_edit_profile.xml    | 38 ++++++++++++--
 4 files changed, 116 insertions(+), 4 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llpanelme.cpp b/indra/newview/llpanelme.cpp
index 77a2ac3a8c..211187a769 100644
--- a/indra/newview/llpanelme.cpp
+++ b/indra/newview/llpanelme.cpp
@@ -33,11 +33,14 @@
 #include "llviewerprecompiledheaders.h"
 
 #include "llpanelprofile.h"
+
 #include "llavatarconstants.h"
+#include "llavatarnamecache.h"	// IDEVO
 #include "llpanelme.h"
 #include "llagent.h"
 #include "llagentwearables.h"
 #include "lliconctrl.h"
+#include "llnotificationsutil.h"	// IDEVO
 #include "llsidetray.h"
 #include "lltabcontainer.h"
 #include "lltexturectrl.h"
@@ -228,6 +231,21 @@ void LLPanelMyProfileEdit::processProfileProperties(const LLAvatarData* avatar_d
 	//{
 	//	childSetTextArg("name_text", "[NAME]", full_name);
 	//}
+	std::string full_name;
+	LLAvatarName av_name;
+	if (LLAvatarNameCache::useDisplayNames()
+		&& LLAvatarNameCache::get(avatar_data->avatar_id, &av_name))
+	{
+		getChild<LLUICtrl>("user_name")->setValue( av_name.mDisplayName );
+		getChild<LLUICtrl>("user_slid")->setValue( av_name.mSLID );
+	}
+	else if (gCacheName->getFullName(avatar_data->avatar_id, full_name))
+	{
+		getChild<LLUICtrl>("user_name")->setValue(full_name);
+		getChild<LLUICtrl>("user_slid")->setValue("");
+	}
+
+	getChild<LLUICtrl>("set_name")->setVisible( LLAvatarNameCache::useDisplayNames() );
 }
 
 BOOL LLPanelMyProfileEdit::postBuild()
@@ -237,6 +255,9 @@ BOOL LLPanelMyProfileEdit::postBuild()
 	childSetTextArg("partner_edit_link", "[URL]", getString("partner_edit_link_url"));
 	childSetTextArg("my_account_link", "[URL]", getString("my_account_link_url"));
 
+	getChild<LLUICtrl>("set_name")->setCommitCallback(
+		boost::bind(&LLPanelMyProfileEdit::onClickSetName, this));
+
 	return LLPanelAvatarProfile::postBuild();
 }
 /**
@@ -277,6 +298,45 @@ void LLPanelMyProfileEdit::onTexturePickerMouseLeave(LLUICtrl* ctrl)
 	mTextureEditIconMap[ctrl->getName()]->setVisible(FALSE);
 }
 
+static void set_name_callback(const LLSD& notification, const LLSD& response)
+{
+	S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+	if (option == 0)
+	{
+		LLUUID agent_id = notification["payload"]["agent_id"];
+		if (agent_id.isNull()) return;
+
+		std::string display_name = response["display_name"].asString();
+		LLAvatarNameCache::setDisplayName(agent_id, display_name);
+	}
+}
+
+void LLPanelMyProfileEdit::onClickSetName()
+{
+	// IDEVO
+	LLUUID agent_id = getAvatarId();
+	std::string display_name;
+	LLAvatarName av_name;
+	if (LLAvatarNameCache::useDisplayNames()
+		&& LLAvatarNameCache::get(agent_id, &av_name))
+	{
+		display_name = av_name.mDisplayName;
+	}
+	else
+	{
+		gCacheName->getFullName(agent_id, display_name);
+	}
+
+	if (!display_name.empty())
+	{
+		LLSD args;
+		args["DISPLAY_NAME"] = display_name;
+		LLSD payload;
+		payload["agent_id"] = agent_id;
+		LLNotificationsUtil::add("SetDisplayName", args, payload, set_name_callback);
+	}
+}
+
 void LLPanelMyProfileEdit::enableEditing(bool enable)
 {
 	childSetEnabled("2nd_life_pic", enable);
diff --git a/indra/newview/llpanelme.h b/indra/newview/llpanelme.h
index 1325192bbf..368fdb307a 100644
--- a/indra/newview/llpanelme.h
+++ b/indra/newview/llpanelme.h
@@ -95,6 +95,7 @@ private:
 	void initTexturePickerMouseEvents();
 	void onTexturePickerMouseEnter(LLUICtrl* ctrl);
 	void onTexturePickerMouseLeave(LLUICtrl* ctrl);
+	void onClickSetName();
 
 	/**
 	 * Enabled/disables controls to prevent overwriting edited data upon receiving
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index a69d9c78a7..b21afe5d96 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -3030,6 +3030,27 @@ You are no longer frozen.
     </form>
   </notification>
 
+  <notification
+   icon="alertmodal.tga"
+   name="SetDisplayName"
+   type="alertmodal">
+Change your display name?
+    <form name="form">
+      <input name="display_name" type="text">
+[DISPLAY_NAME]
+      </input>
+      <button
+       default="true"
+       index="0"
+       name="Change"
+       text="Change"/>
+      <button
+       index="1"
+       name="Cancel"
+       text="Cancel"/>
+    </form>
+  </notification>
+
   <notification
    icon="alertmodal.tga"
    name="OfferTeleport"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_profile.xml b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
index 2a2199fc87..f400acc1d4 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
@@ -87,12 +87,42 @@
      min_height="300"
          left="0"
          width="290">
-     <panel
+      <text
+       follows="top|left"
+       font="SansSerifHuge"
+       height="13"
+       layout="topleft"
+       left="10"
+       name="user_name"
+       text_color="LtGray"
+       top="0"
+       value="James Linden"
+       width="150" />
+      <button
+       follows="top|left"
+       height="23"
+       label="Set Name..."
+       left="170"
+       name="set_name"
+       top="0"
+       visible="false" 
+       width="110" />
+      <text
+       follows="top|left"
+       height="13"
+       layout="topleft"
+       left="10"
+       name="user_slid"
+       text_color="LtGray"
+       top_pad="4"
+       value="(james.linden)"
+       width="150" />
+      <panel
        name="lifes_images_panel"
          follows="left|top|right"
          height="244"
          layout="topleft"
-         top="0"
+         top="37"
          left="0"
          width="290">
 	 <panel
@@ -145,7 +175,7 @@
        height="102"
        layout="topleft"
        left="123"
-       top="25"
+       top="62"
        max_length="512"
        name="sl_description_edit"
        width="157"
@@ -201,7 +231,7 @@
        layout="topleft"
        left="123"
        max_length="512"
-       top="157"
+       top="195"
        name="fl_description_edit"
        width="157"
        word_wrap="true">
-- 
cgit v1.2.3


From 305ec89a70bf88fce8f5edda15047182bc56682b Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Tue, 23 Feb 2010 16:33:43 -0800
Subject: Added ageFromDateISO() for YYYY-MM-DD dates

---
 indra/newview/lldateutil.cpp            | 31 ++++++++++++++++++++++++++-----
 indra/newview/lldateutil.h              |  6 ++++++
 indra/newview/tests/lldateutil_test.cpp | 10 ++++++++++
 3 files changed, 42 insertions(+), 5 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/lldateutil.cpp b/indra/newview/lldateutil.cpp
index abb2fdeb9a..150edb5bf8 100644
--- a/indra/newview/lldateutil.cpp
+++ b/indra/newview/lldateutil.cpp
@@ -59,12 +59,9 @@ static S32 days_from_month(S32 year, S32 month)
 	}
 }
 
-std::string LLDateUtil::ageFromDate(const std::string& date_string,
-									const LLDate& now)
+static std::string age_from_date(S32 born_year, S32 born_month, S32 born_day,
+								 const LLDate& now)
 {
-	S32 born_month, born_day, born_year;
-	S32 matched = sscanf(date_string.c_str(), "%d/%d/%d", &born_month, &born_day, &born_year);
-	if (matched != 3) return "???";
 	LLDate born_date;
 	born_date.fromYMDHMS(born_year, born_month, born_day);
 	F64 born_date_secs_since_epoch = born_date.secondsSinceEpoch();
@@ -155,7 +152,31 @@ std::string LLDateUtil::ageFromDate(const std::string& date_string,
 	return LLTrans::getString("TodayOld");
 }
 
+std::string LLDateUtil::ageFromDate(const std::string& date_string,
+									const LLDate& now)
+{
+	S32 born_month, born_day, born_year;
+	S32 matched = sscanf(date_string.c_str(), "%d/%d/%d", &born_month, &born_day, &born_year);
+	if (matched != 3) return "???";
+	return age_from_date(born_year, born_month, born_day, now);
+}
+
 std::string LLDateUtil::ageFromDate(const std::string& date_string)
 {
 	return ageFromDate(date_string, LLDate::now());
 }
+
+std::string LLDateUtil::ageFromDateISO(const std::string& date_string,
+									   const LLDate& now)
+{
+	S32 born_month, born_day, born_year;
+	S32 matched = sscanf(date_string.c_str(), "%d-%d-%d",
+			&born_year, &born_month, &born_day);
+	if (matched != 3) return "???";
+	return age_from_date(born_year, born_month, born_day, now);
+}
+
+std::string LLDateUtil::ageFromDateISO(const std::string& date_string)
+{
+	return ageFromDateISO(date_string, LLDate::now());
+}
diff --git a/indra/newview/lldateutil.h b/indra/newview/lldateutil.h
index 041be07f12..d077f4eefb 100644
--- a/indra/newview/lldateutil.h
+++ b/indra/newview/lldateutil.h
@@ -44,6 +44,12 @@ namespace LLDateUtil
 
 	// Calls the above with LLDate::now()
 	std::string ageFromDate(const std::string& date_string);
+
+	// As above, for YYYY-MM-DD dates
+	std::string ageFromDateISO(const std::string& date_string, const LLDate& now);
+
+	// Calls the above with LLDate::now()
+	std::string ageFromDateISO(const std::string& date_string);
 }
 
 #endif
diff --git a/indra/newview/tests/lldateutil_test.cpp b/indra/newview/tests/lldateutil_test.cpp
index 7ba82fbd2c..e19983db8f 100644
--- a/indra/newview/tests/lldateutil_test.cpp
+++ b/indra/newview/tests/lldateutil_test.cpp
@@ -189,4 +189,14 @@ namespace tut
 			LLDateUtil::ageFromDate("12/13/2009", now),
 			"3 weeks old" );
 	}
+
+	template<> template<>
+	void dateutil_object_t::test<6>()
+	{
+		set_test_name("ISO dates");
+		LLDate now(std::string("2010-01-04T12:00:00Z"));
+		ensure_equals("days",
+			LLDateUtil::ageFromDateISO("2009-12-13", now),
+			"3 weeks old" );
+	}
 }
-- 
cgit v1.2.3


From 67f3ed1844aabdb25abe1d52e651c076fec1eb9b Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Tue, 23 Feb 2010 16:34:02 -0800
Subject: Prototype search by SLID and display name

---
 indra/newview/llfloateravatarpicker.cpp            | 109 ++++++++++++++++++---
 indra/newview/llfloateravatarpicker.h              |   1 +
 .../skins/default/xui/en/floater_avatar_picker.xml |  46 ++++++---
 3 files changed, 130 insertions(+), 26 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloateravatarpicker.cpp b/indra/newview/llfloateravatarpicker.cpp
index cb549e65c8..63bced27d9 100644
--- a/indra/newview/llfloateravatarpicker.cpp
+++ b/indra/newview/llfloateravatarpicker.cpp
@@ -36,14 +36,17 @@
 // Viewer includes
 #include "llagent.h"
 #include "llcallingcard.h"
+#include "lldateutil.h"			// IDEVO
 #include "llfocusmgr.h"
 #include "llfloaterreg.h"
 #include "llviewercontrol.h"
 #include "llworld.h"
 
 // Linden libraries
+#include "llavatarnamecache.h"	// IDEVO
 #include "llbutton.h"
 #include "llcachename.h"
+#include "llhttpclient.h"		// IDEVO
 #include "lllineeditor.h"
 #include "llscrolllistctrl.h"
 #include "llscrolllistitem.h"
@@ -339,23 +342,55 @@ BOOL LLFloaterAvatarPicker::visibleItemsSelected() const
 	return FALSE;
 }
 
-void LLFloaterAvatarPicker::find()
+class LLAvatarPickerResponder : public LLHTTPClient::Responder
 {
-	std::string text = childGetValue("Edit").asString();
+public:
+	LLUUID mQueryID;
 
-	mQueryID.generate();
+	LLAvatarPickerResponder(const LLUUID& id) : mQueryID(id) { }
 
-	LLMessageSystem* msg = gMessageSystem;
+	/*virtual*/ void result(const LLSD& content)
+	{
+		LLFloaterAvatarPicker* floater =
+			LLFloaterReg::findTypedInstance<LLFloaterAvatarPicker>("avatar_picker");
+		if (floater)
+		{
+			floater->processResponse(mQueryID, content);
+		}
+	}
 
-	msg->newMessage("AvatarPickerRequest");
-	msg->nextBlock("AgentData");
-	msg->addUUID("AgentID", gAgent.getID());
-	msg->addUUID("SessionID", gAgent.getSessionID());
-	msg->addUUID("QueryID", mQueryID);	// not used right now
-	msg->nextBlock("Data");
-	msg->addString("Name", text);
+	/*virtual*/ void error(U32 status, const std::string& reason)
+	{
+		llinfos << "JAMESDEBUG avatar picker failed " << status
+			<< " reason " << reason << llendl;
+	}
+};
 
-	gAgent.sendReliableMessage();
+void LLFloaterAvatarPicker::find()
+{
+	std::string text = childGetValue("Edit").asString();
+
+	mQueryID.generate();
+	// IDEVO
+	if (LLAvatarNameCache::useDisplayNames())
+	{
+		std::string url = "http://pdp15.lindenlab.com:8050/my-service/agent/search/";
+		url += LLURI::escape(text);
+		url += "/";
+		LLHTTPClient::get(url, new LLAvatarPickerResponder(mQueryID));
+	}
+	else
+	{
+		LLMessageSystem* msg = gMessageSystem;
+		msg->newMessage("AvatarPickerRequest");
+		msg->nextBlock("AgentData");
+		msg->addUUID("AgentID", gAgent.getID());
+		msg->addUUID("SessionID", gAgent.getSessionID());
+		msg->addUUID("QueryID", mQueryID);	// not used right now
+		msg->nextBlock("Data");
+		msg->addString("Name", text);
+		gAgent.sendReliableMessage();
+	}
 
 	getChild<LLScrollListCtrl>("SearchResults")->deleteAllItems();
 	getChild<LLScrollListCtrl>("SearchResults")->setCommentText(getString("searching"));
@@ -427,6 +462,7 @@ void LLFloaterAvatarPicker::processAvatarPickerReply(LLMessageSystem* msg, void*
 		}
 		LLSD element;
 		element["id"] = avatar_id; // value
+		element["columns"][0]["column"] = "name";
 		element["columns"][0]["value"] = avatar_name;
 		search_results->addElement(element);
 	}
@@ -440,6 +476,55 @@ void LLFloaterAvatarPicker::processAvatarPickerReply(LLMessageSystem* msg, void*
 	}
 }
 
+void LLFloaterAvatarPicker::processResponse(const LLUUID& query_id, const LLSD& content)
+{
+	// Check for out-of-date query
+	if (query_id != mQueryID) return;
+
+	LLScrollListCtrl* search_results = getChild<LLScrollListCtrl>("SearchResults");
+
+	if (content.size() == 0)
+	{
+		LLStringUtil::format_map_t map;
+		map["[TEXT]"] = childGetText("Edit");
+		LLSD item;
+		item["id"] = LLUUID::null;
+		item["columns"][0]["column"] = "name";
+		item["columns"][0]["value"] = getString("not_found", map);
+		search_results->addElement(item);
+		search_results->setEnabled(FALSE);
+		childDisable("ok_btn");
+		return;
+	}
+
+	// clear "Searching" label on first results
+	search_results->deleteAllItems();
+
+	LLSD item;
+	LLSD::array_const_iterator it = content.beginArray();
+	for ( ; it != content.endArray(); ++it)
+	{
+		const LLSD& row = *it;
+		item["id"] = row["agent_id"];
+		LLSD& columns = item["columns"];
+		columns[0]["column"] = "name";
+		columns[0]["value"] = row["display_name"];
+		columns[1]["column"] = "slid";
+		columns[1]["value"] = row["slid"];
+		std::string born_on = row["born_on"].asString();
+		columns[2]["column"] = "age";
+		columns[2]["value"] = LLDateUtil::ageFromDateISO(born_on);
+		columns[3]["column"] = "profile";
+		columns[3]["value"] = row["profile"];
+		search_results->addElement(item);
+	}
+
+	childEnable("ok_btn");
+	search_results->selectFirstItem();
+	onList();
+	search_results->setFocus(TRUE);
+}
+
 //static
 void LLFloaterAvatarPicker::editKeystroke(LLLineEditor* caller, void* user_data)
 {
diff --git a/indra/newview/llfloateravatarpicker.h b/indra/newview/llfloateravatarpicker.h
index e35466cec8..bae43d3211 100644
--- a/indra/newview/llfloateravatarpicker.h
+++ b/indra/newview/llfloateravatarpicker.h
@@ -58,6 +58,7 @@ public:
 	void setOkBtnEnableCb(validate_callback_t cb);
 
 	static void processAvatarPickerReply(class LLMessageSystem* msg, void**);
+	void processResponse(const LLUUID& query_id, const LLSD& content);
 
 private:
 	void editKeystroke(class LLLineEditor* caller, void* user_data);
diff --git a/indra/newview/skins/default/xui/en/floater_avatar_picker.xml b/indra/newview/skins/default/xui/en/floater_avatar_picker.xml
index f59badfcb4..59923bec96 100644
--- a/indra/newview/skins/default/xui/en/floater_avatar_picker.xml
+++ b/indra/newview/skins/default/xui/en/floater_avatar_picker.xml
@@ -5,11 +5,11 @@
  height="350"
  layout="topleft"
  min_height="200"
- min_width="265"
+ min_width="400"
  name="avatarpicker"
  help_topic="avatarpicker"
  title="CHOOSE RESIDENT"
- width="265">
+ width="500">
     <floater.string
      name="not_found">
         &apos;[TEXT]&apos; not found
@@ -40,7 +40,7 @@
      name="ResidentChooserTabs"
      tab_position="top"
      top="20"
-     width="265">
+     width="500">
         <panel
          border="none"
          height="150"
@@ -83,14 +83,32 @@
              left_pad="5"
              name="Find"
              width="45" />
-            <scroll_list
-             follows="all"
-             height="98"
-             layout="topleft"
-             left="0"
-             name="SearchResults"
-             top="52"
-             width="132" />
+          <scroll_list
+            draw_heading="true" 
+           follows="all"
+           height="98"
+           layout="topleft"
+           left="0"
+           name="SearchResults"
+           top="52"
+           width="132">
+            <columns
+              label="Name"
+              name="name"
+              width="100" />
+            <columns
+              label="SL ID"
+              name="slid"
+              width="100" />
+            <columns
+              label="Age"
+              name="age"
+              width="100" />
+            <columns
+              label="Profile"
+              name="profile"
+              width="100" />
+          </scroll_list>
         </panel>
         <panel
          border="none"
@@ -207,16 +225,16 @@
         </panel>
     </tab_container>
     <button
-     follows="right|bottom"
+     follows="left|bottom"
      height="23"
      label="OK"
      label_selected="OK"
      name="ok_btn"
      top_pad="3"
-     left="46"
+     left="10"
      width="100" />
     <button
-     follows="right|bottom"
+     follows="left|bottom"
      height="23"
      label="Cancel"
      label_selected="Cancel"
-- 
cgit v1.2.3


From b187f7bc150bdd70734f3ec5b6ca576272749516 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Tue, 23 Feb 2010 17:01:34 -0800
Subject: DEV-46407 Region Debug Tab Top Scripts table contains SLID with
 Resident Fixed for Top Colliders too

---
 indra/newview/llfloatertopobjects.cpp | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloatertopobjects.cpp b/indra/newview/llfloatertopobjects.cpp
index c930e99bad..88ccf0c67a 100644
--- a/indra/newview/llfloatertopobjects.cpp
+++ b/indra/newview/llfloatertopobjects.cpp
@@ -196,8 +196,9 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data)
 		LLSD element;
 
 		element["id"] = task_id;
-		element["object_name"] = name_buf;
-		element["owner_name"] = owner_buf;
+		// These cause parse warnings. JC
+		//element["object_name"] = name_buf;
+		//element["owner_name"] = owner_buf;
 		element["columns"][0]["column"] = "score";
 		element["columns"][0]["value"] = llformat("%0.3f", score);
 		element["columns"][0]["font"] = "SANSSERIF";
@@ -206,7 +207,7 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data)
 		element["columns"][1]["value"] = name_buf;
 		element["columns"][1]["font"] = "SANSSERIF";
 		element["columns"][2]["column"] = "owner";
-		element["columns"][2]["value"] = owner_buf;
+		element["columns"][2]["value"] = LLCacheName::cleanFullName(owner_buf);
 		element["columns"][2]["font"] = "SANSSERIF";
 		element["columns"][3]["column"] = "location";
 		element["columns"][3]["value"] = llformat("<%0.1f,%0.1f,%0.1f>", location_x, location_y, location_z);
-- 
cgit v1.2.3


From 70f4e8ede81e1a1259345891c946dc447d686718 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Wed, 24 Feb 2010 11:03:52 -0800
Subject: Use async display name lookup for name tags, makes them refresh
 properly when toggling display name feature

---
 indra/newview/llvoavatar.cpp | 21 +++++++++++++++++----
 indra/newview/llvoavatar.h   |  1 +
 2 files changed, 18 insertions(+), 4 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 69a4abcdae..2cd1d48aa0 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -2755,6 +2755,11 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last)
 	LLVector3 name_position = idleUpdateNameTagPosition(root_pos_last);
 	mNameText->setPositionAgent(name_position);
 	
+	idleUpdateNameTagText(new_name);
+}
+
+void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
+{
 	LLNameValue *title = getNVPair("Title");
 	LLNameValue* firstname = getNVPair("FirstName");
 	LLNameValue* lastname = getNVPair("LastName");
@@ -2816,10 +2821,18 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last)
 		static LLUICachedControl<bool> show_display_names("NameTagShowDisplayNames");
 		static LLUICachedControl<bool> show_slids("NameTagShowSLIDs");
 
-		LLAvatarName av_name;
-		if (LLAvatarNameCache::useDisplayNames()
-			&& LLAvatarNameCache::get(getID(), &av_name))
+		if (LLAvatarNameCache::useDisplayNames())
 		{
+			LLAvatarName av_name;
+			if (!LLAvatarNameCache::get(getID(), &av_name))
+			{
+				// ...call this function back when the name arrives
+				// and force a rebuild
+				LLAvatarNameCache::get(getID(),
+					boost::bind(&LLVOAvatar::idleUpdateNameTagText, this, TRUE));
+			}
+
+			// Might be blank if name not available yet, that's OK
 			if (show_display_names)
 			{
 				line += av_name.mDisplayName;
@@ -2880,7 +2893,7 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last)
 		new_name = TRUE;
 	}
 
-	if (visible_chat)
+	if (mVisibleChat)
 	{
 		mNameText->setDropShadow(TRUE);
 		mNameText->setFont(LLFontGL::getFontSansSerif());
diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h
index f70c68bcba..b370bcb26d 100644
--- a/indra/newview/llvoavatar.h
+++ b/indra/newview/llvoavatar.h
@@ -210,6 +210,7 @@ public:
 	void 			idleUpdateLoadingEffect();
 	void 			idleUpdateWindEffect();
 	void 			idleUpdateNameTag(const LLVector3& root_pos_last);
+	void			idleUpdateNameTagText(BOOL new_name);
 	LLVector3		idleUpdateNameTagPosition(const LLVector3& root_pos_last);
 	void			idleUpdateNameTagColor(BOOL new_name, F32 alpha);
 	void 			idleUpdateRenderCost();
-- 
cgit v1.2.3


From f3e0e9a5264a80d146a1d4d77fd9c4f5d3070278 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Wed, 24 Feb 2010 14:31:46 -0800
Subject: Hack to refresh name tags when I change my display name. Also fixes a
 crash when turning on display names.

---
 indra/newview/llpanelme.cpp       | 27 ++++++++++++++++++++-------
 indra/newview/llpanelme.h         |  3 ++-
 indra/newview/llpanelprofile.h    |  1 -
 indra/newview/llviewermessage.cpp | 17 +++++++++++++++++
 indra/newview/llvoavatar.cpp      |  9 ++++++++-
 indra/newview/llvoavatar.h        |  1 +
 6 files changed, 48 insertions(+), 10 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llpanelme.cpp b/indra/newview/llpanelme.cpp
index 211187a769..19eddb8c51 100644
--- a/indra/newview/llpanelme.cpp
+++ b/indra/newview/llpanelme.cpp
@@ -32,19 +32,23 @@
 
 #include "llviewerprecompiledheaders.h"
 
-#include "llpanelprofile.h"
+#include "llpanelme.h"
 
+// Viewer includes
+#include "llpanelprofile.h"
 #include "llavatarconstants.h"
-#include "llavatarnamecache.h"	// IDEVO
-#include "llpanelme.h"
 #include "llagent.h"
 #include "llagentwearables.h"
+#include "llsidetray.h"
+#include "llviewercontrol.h"
+
+// Linden libraries
+#include "llavatarnamecache.h"		// IDEVO
+#include "llchat.h"					// IDEVO HACK
 #include "lliconctrl.h"
 #include "llnotificationsutil.h"	// IDEVO
-#include "llsidetray.h"
 #include "lltabcontainer.h"
 #include "lltexturectrl.h"
-#include "llviewercontrol.h"
 
 #define PICKER_SECOND_LIFE "2nd_life_pic"
 #define PICKER_FIRST_LIFE "real_world_pic"
@@ -298,7 +302,10 @@ void LLPanelMyProfileEdit::onTexturePickerMouseLeave(LLUICtrl* ctrl)
 	mTextureEditIconMap[ctrl->getName()]->setVisible(FALSE);
 }
 
-static void set_name_callback(const LLSD& notification, const LLSD& response)
+// IDEVO HACK
+extern void send_chat_from_viewer(const std::string& utf8_out_text, EChatType type, S32 channel);
+
+void LLPanelMyProfileEdit::callbackSetName(const LLSD& notification, const LLSD& response)
 {
 	S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
 	if (option == 0)
@@ -308,6 +315,11 @@ static void set_name_callback(const LLSD& notification, const LLSD& response)
 
 		std::string display_name = response["display_name"].asString();
 		LLAvatarNameCache::setDisplayName(agent_id, display_name);
+
+		// HACK: Use chat to invalidate names
+		send_chat_from_viewer("refreshname", CHAT_TYPE_NORMAL, 0);
+
+		getChild<LLUICtrl>("user_name")->setValue( display_name );
 	}
 }
 
@@ -333,7 +345,8 @@ void LLPanelMyProfileEdit::onClickSetName()
 		args["DISPLAY_NAME"] = display_name;
 		LLSD payload;
 		payload["agent_id"] = agent_id;
-		LLNotificationsUtil::add("SetDisplayName", args, payload, set_name_callback);
+		LLNotificationsUtil::add("SetDisplayName", args, payload, 
+			boost::bind(&LLPanelMyProfileEdit::callbackSetName, this, _1, _2));
 	}
 }
 
diff --git a/indra/newview/llpanelme.h b/indra/newview/llpanelme.h
index 368fdb307a..ed630133ca 100644
--- a/indra/newview/llpanelme.h
+++ b/indra/newview/llpanelme.h
@@ -34,7 +34,7 @@
 #define LL_LLPANELMEPROFILE_H
 
 #include "llpanel.h"
-#include "llpanelavatar.h"
+#include "llpanelprofile.h"
 
 class LLPanelMyProfileEdit;
 class LLPanelProfile;
@@ -96,6 +96,7 @@ private:
 	void onTexturePickerMouseEnter(LLUICtrl* ctrl);
 	void onTexturePickerMouseLeave(LLUICtrl* ctrl);
 	void onClickSetName();
+	void callbackSetName(const LLSD& notification, const LLSD& response);
 
 	/**
 	 * Enabled/disables controls to prevent overwriting edited data upon receiving
diff --git a/indra/newview/llpanelprofile.h b/indra/newview/llpanelprofile.h
index f1aa3f10f8..be5b440050 100644
--- a/indra/newview/llpanelprofile.h
+++ b/indra/newview/llpanelprofile.h
@@ -33,7 +33,6 @@
 #ifndef LL_LLPANELPROFILE_H
 #define LL_LLPANELPROFILE_H
 
-#include "llviewerprecompiledheaders.h"
 #include "llpanel.h"
 #include "llpanelavatar.h"
 
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 5b16347db3..1a4d34b217 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -33,9 +33,11 @@
 #include "llviewerprecompiledheaders.h"
 #include "llviewermessage.h"
 
+// Linden libraries
 #include "llanimationstates.h"
 #include "llaudioengine.h" 
 #include "llavataractions.h"
+#include "llavatarnamecache.h"		// IDEVO HACK
 #include "lscript_byteformat.h"
 #include "lleconomy.h"
 #include "lleventtimer.h"
@@ -82,6 +84,7 @@
 #include "llspeakers.h"
 #include "lltrans.h"
 #include "llviewerfoldertype.h"
+#include "llvoavatar.h"				// IDEVO HACK
 #include "lluri.h"
 #include "llviewergenericmessage.h"
 #include "llviewermenu.h"
@@ -2661,6 +2664,20 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
 		}
 		chat.mText = mesg;
 
+		// IDEVO HACK Use chat to invalidate names
+		if (chat.mSourceType == CHAT_SOURCE_AGENT
+			&& chat.mText == "refreshname")
+		{
+			LLAvatarNameCache::erase(chat.mFromID);
+
+			// force name tag to update
+			LLVOAvatar* avatar = dynamic_cast<LLVOAvatar*>(chatter);
+			if (avatar)
+			{
+				avatar->invalidateName();
+			}
+		}
+
 		// Look for the start of typing so we can put "..." in the bubbles.
 		if (CHAT_TYPE_START == chat.mChatType)
 		{
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 2cd1d48aa0..ac91ded18b 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -2829,7 +2829,7 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
 				// ...call this function back when the name arrives
 				// and force a rebuild
 				LLAvatarNameCache::get(getID(),
-					boost::bind(&LLVOAvatar::idleUpdateNameTagText, this, TRUE));
+					boost::bind(&LLVOAvatar::invalidateName, this));
 			}
 
 			// Might be blank if name not available yet, that's OK
@@ -7629,6 +7629,13 @@ std::string LLVOAvatar::getFullname() const
 	return name;
 }
 
+// IDEVO
+void LLVOAvatar::invalidateName()
+{
+	// force update by clearing name string
+	mNameString.clear();
+}
+
 LLHost LLVOAvatar::getObjectHost() const
 {
 	LLViewerRegion* region = getRegion();
diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h
index b370bcb26d..b1bdf453f3 100644
--- a/indra/newview/llvoavatar.h
+++ b/indra/newview/llvoavatar.h
@@ -819,6 +819,7 @@ private:
 
 public:
 	std::string		getFullname() const; // Returns "FirstName LastName"
+	void			invalidateName();	// force name to update
 protected:
 	static void		getAnimLabels(LLDynamicArray<std::string>* labels);
 	static void		getAnimNames(LLDynamicArray<std::string>* names);	
-- 
cgit v1.2.3


From 91d9bf2330769aee840514570cce8b4463ce6ab5 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Wed, 24 Feb 2010 15:44:05 -0800
Subject: DEV-46506 User name and last name appears on the notification message
 from script

---
 indra/newview/llviewermessage.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 1a4d34b217..309bed7fc3 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -5152,7 +5152,7 @@ void process_script_question(LLMessageSystem *msg, void **user_data)
 		S32 count = 0;
 		LLSD args;
 		args["OBJECTNAME"] = object_name;
-		args["NAME"] = owner_name;
+		args["NAME"] = LLCacheName::cleanFullName(owner_name);
 
 		// check the received permission flags against each permission
 		for (S32 i = 0; i < SCRIPT_PERMISSION_EOF; i++)
-- 
cgit v1.2.3


From d7318467fecddcc285e67bdd294a434351163dc3 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Wed, 24 Feb 2010 16:24:30 -0800
Subject: DEV-46415 Group Call Invite contains SLID with Resident

---
 indra/newview/llimview.cpp | 5 +++++
 1 file changed, 5 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index 9ebac16e7f..da25e36338 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -1813,6 +1813,11 @@ BOOL LLIncomingCallDialog::postBuild()
 	{
 		caller_name = LLTextUtil::formatPhoneNumber(caller_name);
 	}
+	else
+	{
+		// IDEVO
+		caller_name = LLCacheName::cleanFullName(caller_name);
+	}
 
 	setTitle(caller_name + " " + call_type);
 
-- 
cgit v1.2.3


From 3eec41f6716940ffcfd4bf239e1e493c2d0a0658 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Wed, 24 Feb 2010 17:21:12 -0800
Subject: Re-color name tags after display name changes

---
 indra/newview/llvoavatar.cpp | 2 ++
 1 file changed, 2 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index ac91ded18b..7f57289fc3 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -7634,6 +7634,8 @@ void LLVOAvatar::invalidateName()
 {
 	// force update by clearing name string
 	mNameString.clear();
+	// and force color update by tweaking alpha
+	mNameAlpha = F32_MAX;
 }
 
 LLHost LLVOAvatar::getObjectHost() const
-- 
cgit v1.2.3


From 36c35bca2663447216027015c10aa921ab75abfb Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Thu, 25 Feb 2010 17:06:17 -0800
Subject: Support multiple fonts, colors and styles in name tags Simplified
 LLHUDText string API to be UTF8 only Added per-text segment font support
 Changed LLVOAvatar invalidateNameTag to clearNameTag

---
 indra/newview/llglsandbox.cpp     |   2 +-
 indra/newview/llhudtext.cpp       |  79 +++++++++--------
 indra/newview/llhudtext.h         |  29 ++++---
 indra/newview/lltracker.cpp       |  10 +--
 indra/newview/llviewermessage.cpp |   2 +-
 indra/newview/llviewerobject.cpp  |   6 +-
 indra/newview/llvoavatar.cpp      | 172 +++++++++++++++++++-------------------
 indra/newview/llvoavatar.h        |   8 +-
 8 files changed, 165 insertions(+), 143 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llglsandbox.cpp b/indra/newview/llglsandbox.cpp
index 750a9d478f..134e63fa35 100644
--- a/indra/newview/llglsandbox.cpp
+++ b/indra/newview/llglsandbox.cpp
@@ -983,7 +983,7 @@ void LLViewerObjectList::renderObjectBeacons()
 			color = debug_beacon.mTextColor;
 			color.mV[3] *= 1.f;
 
-			hud_textp->setString(utf8str_to_wstring(debug_beacon.mString));
+			hud_textp->setString(debug_beacon.mString);
 			hud_textp->setColor(color);
 			hud_textp->setPositionAgent(debug_beacon.mPositionAgent);
 			debug_beacon.mHUDObject = hud_textp;
diff --git a/indra/newview/llhudtext.cpp b/indra/newview/llhudtext.cpp
index 53fc176268..347b87f808 100644
--- a/indra/newview/llhudtext.cpp
+++ b/indra/newview/llhudtext.cpp
@@ -490,6 +490,7 @@ void LLHUDText::renderText(BOOL for_select)
 		for(std::vector<LLHUDTextSegment>::iterator segment_iter = mLabelSegments.begin();
 			segment_iter != mLabelSegments.end(); ++segment_iter )
 		{
+			// Label segments use default font
 			const LLFontGL* fontp = (segment_iter->mStyle == LLFontGL::BOLD) ? mBoldFontp : mFontp;
 			y_offset -= fontp->getLineHeight();
 
@@ -527,7 +528,7 @@ void LLHUDText::renderText(BOOL for_select)
 		for (std::vector<LLHUDTextSegment>::iterator segment_iter = mTextSegments.begin() + start_segment;
 			 segment_iter != mTextSegments.end(); ++segment_iter )
 		{
-			const LLFontGL* fontp = (segment_iter->mStyle == LLFontGL::BOLD) ? mBoldFontp : mFontp;
+			const LLFontGL* fontp = segment_iter->mFont;
 			y_offset -= fontp->getLineHeight();
 
 			U8 style = segment_iter->mStyle;
@@ -561,15 +562,10 @@ void LLHUDText::renderText(BOOL for_select)
 	}
 }
 
-void LLHUDText::setStringUTF8(const std::string &wtext)
-{
-	setString(utf8str_to_wstring(wtext));
-}
-
-void LLHUDText::setString(const LLWString &wtext)
+void LLHUDText::setString(const std::string &text_utf8)
 {
 	mTextSegments.clear();
-	addLine(wtext, mColor);
+	addLine(text_utf8, mColor);
 }
 
 void LLHUDText::clearString()
@@ -578,21 +574,19 @@ void LLHUDText::clearString()
 }
 
 
-void LLHUDText::addLine(const std::string &str, const LLColor4& color, const LLFontGL::StyleFlags style)
-{
-	addLine(utf8str_to_wstring(str), color, style);
-}
-
-
-void LLHUDText::addLine(const LLWString &wstr, const LLColor4& color, const LLFontGL::StyleFlags style)
+void LLHUDText::addLine(const std::string &text_utf8,
+						const LLColor4& color,
+						const LLFontGL::StyleFlags style,
+						const LLFontGL* font)
 {
-	if (gNoRender)
+	LLWString wline = utf8str_to_wstring(text_utf8);
+	if (!wline.empty())
 	{
-		return;
-	}
-	if (!wstr.empty())
-	{
-		LLWString wline(wstr);
+		// use default font for segment if custom font not specified
+		if (!font)
+		{
+			font = mFontp;
+		}
 		typedef boost::tokenizer<boost::char_separator<llwchar>, LLWString::const_iterator, LLWString > tokenizer;
 		LLWString seps(utf8str_to_wstring("\r\n"));
 		boost::char_separator<llwchar> sep(seps.c_str());
@@ -605,8 +599,10 @@ void LLHUDText::addLine(const LLWString &wstr, const LLColor4& color, const LLFo
 			U32 line_length = 0;
 			do	
 			{
-				S32 segment_length = mFontp->maxDrawableChars(iter->substr(line_length).c_str(), mUseBubble ? HUD_TEXT_MAX_WIDTH : HUD_TEXT_MAX_WIDTH_NO_BUBBLE, wline.length(), LLFontGL::WORD_BOUNDARY_IF_POSSIBLE);
-				mTextSegments.push_back(LLHUDTextSegment(iter->substr(line_length, segment_length), style, color));
+				F32 max_pixels = (mUseBubble ? HUD_TEXT_MAX_WIDTH : HUD_TEXT_MAX_WIDTH_NO_BUBBLE);
+				S32 segment_length = font->maxDrawableChars(iter->substr(line_length).c_str(), max_pixels, wline.length(), LLFontGL::WORD_BOUNDARY_IF_POSSIBLE);
+				LLHUDTextSegment segment(iter->substr(line_length, segment_length), style, color, font);
+				mTextSegments.push_back(segment);
 				line_length += segment_length;
 			}
 			while (line_length != iter->size());
@@ -615,18 +611,17 @@ void LLHUDText::addLine(const LLWString &wstr, const LLColor4& color, const LLFo
 	}
 }
 
-void LLHUDText::setLabel(const std::string &label)
+void LLHUDText::setLabel(const std::string &label_utf8)
 {
-	setLabel(utf8str_to_wstring(label));
+	mLabelSegments.clear();
+	addLabel(label_utf8);
 }
 
-void LLHUDText::setLabel(const LLWString &wlabel)
+void LLHUDText::addLabel(const std::string& label_utf8)
 {
-	mLabelSegments.clear();
-
-	if (!wlabel.empty())
+	LLWString wstr = utf8string_to_wstring(label_utf8);
+	if (!wstr.empty())
 	{
-		LLWString wstr(wlabel);
 		LLWString seps(utf8str_to_wstring("\r\n"));
 		LLWString empty;
 
@@ -642,7 +637,8 @@ void LLHUDText::setLabel(const LLWString &wlabel)
 			do	
 			{
 				S32 segment_length = mFontp->maxDrawableChars(iter->substr(line_length).c_str(), mUseBubble ? HUD_TEXT_MAX_WIDTH : HUD_TEXT_MAX_WIDTH_NO_BUBBLE, wstr.length(), LLFontGL::WORD_BOUNDARY_IF_POSSIBLE);
-				mLabelSegments.push_back(LLHUDTextSegment(iter->substr(line_length, segment_length), LLFontGL::NORMAL, mColor));
+				LLHUDTextSegment segment(iter->substr(line_length, segment_length), LLFontGL::NORMAL, mColor, mFontp);
+				mLabelSegments.push_back(segment);
 				line_length += segment_length;
 			}
 			while (line_length != iter->size());
@@ -677,6 +673,16 @@ void LLHUDText::setColor(const LLColor4 &color)
 	}
 }
 
+void LLHUDText::setAlpha(F32 alpha)
+{
+	mColor.mV[VALPHA] = alpha;
+	for (std::vector<LLHUDTextSegment>::iterator segment_iter = mTextSegments.begin();
+		 segment_iter != mTextSegments.end(); ++segment_iter )
+	{
+		segment_iter->mColor.mV[VALPHA] = alpha;
+	}
+}
+
 
 void LLHUDText::setDoFade(const BOOL do_fade)
 {
@@ -821,12 +827,12 @@ LLVector2 LLHUDText::updateScreenPos(LLVector2 &offset)
 
 void LLHUDText::updateSize()
 {
+	F32 height = 0.f;
 	F32 width = 0.f;
 
 	S32 max_lines = getMaxLines();
-	S32 lines = (max_lines < 0) ? (S32)mTextSegments.size() : llmin((S32)mTextSegments.size(), max_lines);
-
-	F32 height = (F32)mFontp->getLineHeight() * (lines + mLabelSegments.size());
+	//S32 lines = (max_lines < 0) ? (S32)mTextSegments.size() : llmin((S32)mTextSegments.size(), max_lines);
+	//F32 height = (F32)mFontp->getLineHeight() * (lines + mLabelSegments.size());
 
 	S32 start_segment;
 	if (max_lines < 0) start_segment = 0;
@@ -835,13 +841,16 @@ void LLHUDText::updateSize()
 	std::vector<LLHUDTextSegment>::iterator iter = mTextSegments.begin() + start_segment;
 	while (iter != mTextSegments.end())
 	{
-		width = llmax(width, llmin(iter->getWidth(mFontp), HUD_TEXT_MAX_WIDTH));
+		const LLFontGL* fontp = iter->mFont;
+		height += fontp->getLineHeight();
+		width = llmax(width, llmin(iter->getWidth(fontp), HUD_TEXT_MAX_WIDTH));
 		++iter;
 	}
 
 	iter = mLabelSegments.begin();
 	while (iter != mLabelSegments.end())
 	{
+		height += mFontp->getLineHeight();
 		width = llmax(width, llmin(iter->getWidth(mFontp), HUD_TEXT_MAX_WIDTH));
 		++iter;
 	}
diff --git a/indra/newview/llhudtext.h b/indra/newview/llhudtext.h
index 5d88b5d6ab..f7248ceffc 100644
--- a/indra/newview/llhudtext.h
+++ b/indra/newview/llhudtext.h
@@ -34,7 +34,7 @@
 #define LL_LLHUDTEXT_H
 
 #include "llpointer.h"
-#include "lldarrayptr.h"
+//#include "lldarrayptr.h"
 
 #include "llhudobject.h"
 #include "v4color.h"
@@ -45,7 +45,7 @@
 #include "llfontgl.h"
 #include <set>
 #include <vector>
-#include "lldarray.h"
+//#include "lldarray.h"
 
 // Renders a 2D text billboard floating at the location specified.
 class LLDrawable;
@@ -62,14 +62,19 @@ protected:
 	class LLHUDTextSegment
 	{
 	public:
-		LLHUDTextSegment(const LLWString& text, const LLFontGL::StyleFlags style, const LLColor4& color)
-			: mColor(color), mStyle(style), mText(text) {}
+		LLHUDTextSegment(const LLWString& text, const LLFontGL::StyleFlags style, const LLColor4& color, const LLFontGL* font)
+		:	mColor(color),
+			mStyle(style),
+			mText(text),
+			mFont(font)
+		{}
 		F32 getWidth(const LLFontGL* font);
-		const LLWString& getText() const { return mText; };
+		const LLWString& getText() const { return mText; }
 		void clearFontWidthMap() { mFontWidthMap.clear(); }
 		
 		LLColor4				mColor;
 		LLFontGL::StyleFlags	mStyle;
+		const LLFontGL*			mFont;
 	private:
 		LLWString				mText;
 		std::map<const LLFontGL*, F32> mFontWidthMap;
@@ -89,16 +94,18 @@ public:
 	} EVertAlignment;
 
 public:
-	void setStringUTF8(const std::string &utf8string);
-	void setString(const LLWString &wstring);
+	void setString(const std::string& text_utf8);
+//	void setString(const LLWString &wstring);
 	void clearString();
-	void addLine(const std::string &text, const LLColor4& color, const LLFontGL::StyleFlags style = LLFontGL::NORMAL);
-	void addLine(const LLWString &wtext, const LLColor4& color, const LLFontGL::StyleFlags style = LLFontGL::NORMAL);
-	void setLabel(const std::string &label);
-	void setLabel(const LLWString &label);
+	void addLine(const std::string &text_utf8, const LLColor4& color, const LLFontGL::StyleFlags style = LLFontGL::NORMAL, const LLFontGL* font = NULL);
+//	void addLine(const LLWString &wtext, const LLColor4& color, const LLFontGL::StyleFlags style = LLFontGL::NORMAL, const LLFontGL* font = NULL);
+	void setLabel(const std::string& label_utf8);
+//	void setLabel(const LLWString &label);
+	void addLabel(const std::string& label_utf8);
 	void setDropShadow(const BOOL do_shadow);
 	void setFont(const LLFontGL* font);
 	void setColor(const LLColor4 &color);
+	void setAlpha(F32 alpha);
 	void setZCompare(const BOOL zcompare);
 	void setDoFade(const BOOL do_fade);
 	void setVisibleOffScreen(BOOL visible) { mVisibleOffScreen = visible; }
diff --git a/indra/newview/lltracker.cpp b/indra/newview/lltracker.cpp
index 407cc23d0d..280763be57 100644
--- a/indra/newview/lltracker.cpp
+++ b/indra/newview/lltracker.cpp
@@ -568,16 +568,16 @@ void LLTracker::renderBeacon(LLVector3d pos_global,
 	std::string text;
 	text = llformat( "%.0f m", to_vec.magVec());
 
-	LLWString wstr;
-	wstr += utf8str_to_wstring(label);
-	wstr += '\n';
-	wstr += utf8str_to_wstring(text);
+	std::string str;
+	str += label;
+	str += '\n';
+	str += text;
 
 	hud_textp->setFont(LLFontGL::getFontSansSerif());
 	hud_textp->setZCompare(FALSE);
 	hud_textp->setColor(LLColor4(1.f, 1.f, 1.f, llmax(0.2f, llmin(1.f,(dist-FADE_DIST)/FADE_DIST))));
 
-	hud_textp->setString(wstr);
+	hud_textp->setString(str);
 	hud_textp->setVertAlignment(LLHUDText::ALIGN_VERT_CENTER);
 	hud_textp->setPositionAgent(pos_agent);
 }
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 309bed7fc3..83d52fbbfc 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -2674,7 +2674,7 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
 			LLVOAvatar* avatar = dynamic_cast<LLVOAvatar*>(chatter);
 			if (avatar)
 			{
-				avatar->invalidateName();
+				avatar->clearNameTag();
 			}
 		}
 
diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp
index d0afa9d9de..6e4d375d28 100644
--- a/indra/newview/llviewerobject.cpp
+++ b/indra/newview/llviewerobject.cpp
@@ -1071,7 +1071,7 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
 					// alpha was flipped so that it zero encoded better
 					coloru.mV[3] = 255 - coloru.mV[3];
 					mText->setColor(LLColor4(coloru));
-					mText->setStringUTF8(temp_string);
+					mText->setString(temp_string);
 					
 					if (mDrawable.notNull())
 					{
@@ -1463,7 +1463,7 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
 					dp->unpackBinaryDataFixed(coloru.mV, 4, "Color");
 					coloru.mV[3] = 255 - coloru.mV[3];
 					mText->setColor(LLColor4(coloru));
-					mText->setStringUTF8(temp_string);
+					mText->setString(temp_string);
 
 					setChanged(TEXTURE);
 				}
@@ -4119,7 +4119,7 @@ void LLViewerObject::setDebugText(const std::string &utf8text)
 		mText->setOnHUDAttachment(isHUDAttachment());
 	}
 	mText->setColor(LLColor4::white);
-	mText->setStringUTF8(utf8text);
+	mText->setString(utf8text);
 	mText->setZCompare(FALSE);
 	mText->setDoFade(FALSE);
 	updateText();
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 7f57289fc3..8e017b2a51 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -2749,13 +2749,13 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last)
 		sNumVisibleChatBubbles++;
 		new_name = TRUE;
 	}
-				
-	idleUpdateNameTagColor(new_name, alpha);
-
+	
 	LLVector3 name_position = idleUpdateNameTagPosition(root_pos_last);
 	mNameText->setPositionAgent(name_position);
 	
 	idleUpdateNameTagText(new_name);
+
+	idleUpdateNameTagAlpha(new_name, alpha);
 }
 
 void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
@@ -2779,6 +2779,7 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
 	{
 		is_muted = LLMuteList::getInstance()->isMuted(getID());
 	}
+	bool is_friend = LLAvatarTracker::instance().isBuddy(getID());
 
 	// Rebuild name tag if state change detected
 	if (mNameString.empty()
@@ -2788,34 +2789,20 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
 		|| is_away != mNameAway 
 		|| is_busy != mNameBusy 
 		|| is_muted != mNameMute
-		|| is_appearance != mNameAppearance)
+		|| is_appearance != mNameAppearance
+		|| is_friend != mNameFriend)
 	{
-		std::string line;
-		// IDEVO JAMESDEBUG
-		//if (!sRenderGroupTitles)
-		//{
-		//	// If all group titles are turned off, stack first name
-		//	// on a line above last name
-		//	line += firstname->getString();
-		//	line += "\n";
-		//}
-		//else if (title && title->getString() && title->getString()[0] != '\0')
-		//{
-		//	line += title->getString();
-		//	LLStringFn::replace_ascii_controlchars(line,LL_UNKNOWN_CHAR);
-		//	line += "\n";
-		//	line += firstname->getString();
-		//}
-		//else
-		//{
-		//	line += firstname->getString();
-		//}
+		LLColor4 name_tag_color = getNameTagColor(is_friend);
+
+		clearNameTag();
+
 		if (sRenderGroupTitles
 			&& title && title->getString() && title->getString()[0] != '\0')
 		{
-			line += title->getString();
-			LLStringFn::replace_ascii_controlchars(line,LL_UNKNOWN_CHAR);
-			line += "\n";
+			std::string title_str = title->getString();
+			LLStringFn::replace_ascii_controlchars(title_str,LL_UNKNOWN_CHAR);
+			addNameTagLine(title_str, name_tag_color, LLFontGL::ITALIC,
+				LLFontGL::getFontSansSerifSmall());
 		}
 
 		static LLUICachedControl<bool> show_display_names("NameTagShowDisplayNames");
@@ -2829,28 +2816,28 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
 				// ...call this function back when the name arrives
 				// and force a rebuild
 				LLAvatarNameCache::get(getID(),
-					boost::bind(&LLVOAvatar::invalidateName, this));
+					boost::bind(&LLVOAvatar::clearNameTag, this));
 			}
 
 			// Might be blank if name not available yet, that's OK
 			if (show_display_names)
 			{
-				line += av_name.mDisplayName;
-				line += "\n";
+				addNameTagLine(av_name.mDisplayName, name_tag_color, LLFontGL::NORMAL,
+					LLFontGL::getFontSansSerifBig());
 			}
 			if (show_slids)
 			{
-				line += "(";
-				line += av_name.mSLID;
-				line += ")\n";
+				addNameTagLine(av_name.mSLID, LLColor4::red, LLFontGL::NORMAL,
+					LLFontGL::getFontSansSerif());
 			}
 		}
 		else
 		{
 			if (show_display_names || show_slids)
 			{
-				line += LLCacheName::buildFullName( firstname->getString(), lastname->getString() );
-				line += "\n";
+				std::string full_name =
+					LLCacheName::buildFullName( firstname->getString(), lastname->getString() );
+				addNameTagLine(full_name, name_tag_color, LLFontGL::NORMAL, NULL);
 			}
 		}
 
@@ -2858,7 +2845,7 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
 		if (show_status
 			&& (is_away || is_muted || is_busy || is_appearance) )
 		{
-			//line += "(";
+			std::string line;
 			if (is_away)
 			{
 				line += LLTrans::getString("AvatarAway");
@@ -2881,15 +2868,17 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
 			}
 			// trim last ", "
 			line.resize( line.length() - 2 );
-			//line += ")";
+			addNameTagLine(line, LLColor4::blue, LLFontGL::NORMAL,
+				LLFontGL::getFontSansSerifSmall());
 		}
 		mNameAway = is_away;
 		mNameBusy = is_busy;
 		mNameMute = is_muted;
 		mNameAppearance = is_appearance;
+		mNameFriend = is_friend;
 		mTitle = title ? title->getString() : "";
 		LLStringFn::replace_ascii_controlchars(mTitle,LL_UNKNOWN_CHAR);
-		mNameString = utf8str_to_wstring(line);
+//		mNameString = utf8str_to_wstring(line);
 		new_name = TRUE;
 	}
 
@@ -2899,10 +2888,10 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
 		mNameText->setFont(LLFontGL::getFontSansSerif());
 		mNameText->setTextAlignment(LLHUDText::ALIGN_TEXT_LEFT);
 		mNameText->setFadeDistance(CHAT_NORMAL_RADIUS * 2.f, 5.f);
-		if (new_name)
-		{
-			mNameText->setLabel(mNameString);
-		}
+//		if (new_name)
+//		{
+//			mNameText->setLabel(mNameString);
+//		}
 	
 		char line[MAX_STRING];		/* Flawfinder: ignore */
 		line[0] = '\0';
@@ -2936,17 +2925,17 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
 			if (chat_fade_amt < 1.f)
 			{
 				F32 u = clamp_rescale(chat_fade_amt, 0.9f, 1.f, 0.f, 1.f);
-				mNameText->addLine(utf8str_to_wstring(chat_iter->mText), lerp(new_chat, normal_chat, u), style);
+				mNameText->addLine(chat_iter->mText, lerp(new_chat, normal_chat, u), style);
 			}
 			else if (chat_fade_amt < 2.f)
 			{
 				F32 u = clamp_rescale(chat_fade_amt, 1.9f, 2.f, 0.f, 1.f);
-				mNameText->addLine(utf8str_to_wstring(chat_iter->mText), lerp(normal_chat, old_chat, u), style);
+				mNameText->addLine(chat_iter->mText, lerp(normal_chat, old_chat, u), style);
 			}
 			else if (chat_fade_amt < 3.f)
 			{
 				// *NOTE: only remove lines down to minimum number
-				mNameText->addLine(utf8str_to_wstring(chat_iter->mText), old_chat, style);
+				mNameText->addLine(chat_iter->mText, old_chat, style);
 			}
 		}
 		mNameText->setVisibleOffScreen(TRUE);
@@ -2971,6 +2960,7 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
 	}
 	else
 	{
+		// ...not using chat bubbles, just names
 		static LLUICachedControl<bool> small_avatar_names("SmallAvatarNames");
 		if (small_avatar_names)
 		{
@@ -2983,11 +2973,36 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
 		mNameText->setTextAlignment(LLHUDText::ALIGN_TEXT_CENTER);
 		mNameText->setFadeDistance(CHAT_NORMAL_RADIUS, 5.f);
 		mNameText->setVisibleOffScreen(FALSE);
-		if (new_name)
-		{
-			mNameText->setLabel("");
-			mNameText->setString(mNameString);
-		}
+//		if (new_name)
+//		{
+//			mNameText->setLabel("");
+//			mNameText->setString(mNameString);
+//		}
+	}
+}
+
+void LLVOAvatar::addNameTagLine(const std::string& line, const LLColor4& color, S32 style, const LLFontGL* font)
+{
+	llassert(mNameText);
+	if (mVisibleChat)
+	{
+		mNameText->addLabel(line);
+	}
+	else
+	{
+		mNameText->addLine(line, color, (LLFontGL::StyleFlags)style, font);
+	}
+	mNameString += line;
+	mNameString += '\n';
+}
+
+void LLVOAvatar::clearNameTag()
+{
+	mNameString.clear();
+	if (mNameText)
+	{
+		mNameText->setLabel( "" );
+		mNameText->setString( "" );
 	}
 }
 
@@ -3015,39 +3030,37 @@ LLVector3 LLVOAvatar::idleUpdateNameTagPosition(const LLVector3& root_pos_last)
 	return name_position;
 }
 
-void LLVOAvatar::idleUpdateNameTagColor(BOOL new_name, F32 alpha)
+void LLVOAvatar::idleUpdateNameTagAlpha(BOOL new_name, F32 alpha)
 {
 	llassert(mNameText);
 
-	bool is_friend = LLAvatarTracker::instance().isBuddy(getID());
 	if (new_name
-		|| alpha != mNameAlpha
-		|| is_friend != mNameFriend)
+		|| alpha != mNameAlpha)
 	{
-		const char* color_name = "AvatarNameColor";
-		if (is_friend)
-		{
-			color_name = "AvatarNameFriendColor";
-		}
-		else
+		mNameText->setAlpha(alpha);
+		mNameAlpha = alpha;
+	}
+}
+
+LLColor4 LLVOAvatar::getNameTagColor(bool is_friend)
+{
+	const char* color_name = "AvatarNameColor";
+	if (is_friend)
+	{
+		color_name = "AvatarNameFriendColor";
+	}
+	else
+	{
+		// IDEVO can we avoid doing this lookup repeatedly?
+		LLAvatarName av_name;
+		if (LLAvatarNameCache::useDisplayNames()
+			&& LLAvatarNameCache::get(getID(), &av_name)
+			&& av_name.mIsLegacy)
 		{
-			// IDEVO can we avoid doing this lookup repeatedly?
-			LLAvatarName av_name;
-			if (LLAvatarNameCache::useDisplayNames()
-				&& LLAvatarNameCache::get(getID(), &av_name)
-				&& av_name.mIsLegacy)
-			{
-				color_name = "AvatarNameLegacyColor";
-			}
+			color_name = "AvatarNameLegacyColor";
 		}
-		LLColor4 avatar_name_color =
-			LLUIColorTable::getInstance()->getColor( color_name );
-		avatar_name_color.setAlpha(alpha);
-		mNameText->setColor(avatar_name_color);
-
-		mNameFriend = is_friend;
-		mNameAlpha = alpha;
 	}
+	return LLUIColorTable::getInstance()->getColor( color_name );
 }
 
 //--------------------------------------------------------------------
@@ -7629,15 +7642,6 @@ std::string LLVOAvatar::getFullname() const
 	return name;
 }
 
-// IDEVO
-void LLVOAvatar::invalidateName()
-{
-	// force update by clearing name string
-	mNameString.clear();
-	// and force color update by tweaking alpha
-	mNameAlpha = F32_MAX;
-}
-
 LLHost LLVOAvatar::getObjectHost() const
 {
 	LLViewerRegion* region = getRegion();
diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h
index b1bdf453f3..b63e3b2ebd 100644
--- a/indra/newview/llvoavatar.h
+++ b/indra/newview/llvoavatar.h
@@ -212,7 +212,10 @@ public:
 	void 			idleUpdateNameTag(const LLVector3& root_pos_last);
 	void			idleUpdateNameTagText(BOOL new_name);
 	LLVector3		idleUpdateNameTagPosition(const LLVector3& root_pos_last);
-	void			idleUpdateNameTagColor(BOOL new_name, F32 alpha);
+	void			idleUpdateNameTagAlpha(BOOL new_name, F32 alpha);
+	LLColor4		getNameTagColor(bool is_friend);
+	void			clearNameTag();
+	void			addNameTagLine(const std::string& line, const LLColor4& color, S32 style, const LLFontGL* font);
 	void 			idleUpdateRenderCost();
 	void 			idleUpdateTractorBeam();
 	void 			idleUpdateBelowWater();
@@ -819,12 +822,11 @@ private:
 
 public:
 	std::string		getFullname() const; // Returns "FirstName LastName"
-	void			invalidateName();	// force name to update
 protected:
 	static void		getAnimLabels(LLDynamicArray<std::string>* labels);
 	static void		getAnimNames(LLDynamicArray<std::string>* names);	
 private:
-	LLWString 		mNameString;
+	std::string		mNameString;		// UTF-8 title + name + status
 	std::string  	mTitle;
 	bool	  		mNameAway;
 	bool	  		mNameBusy;
-- 
cgit v1.2.3


From 86d8b98f51e9878ff2c97d5b2531e1b6594383f4 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Fri, 26 Feb 2010 11:53:45 -0800
Subject: DEV-46659 Identity Evolution - SLID - Banned Residents name does not
 appear on the Estate tab under Region/Estate Fixed button enablement for
 add/remove ban.  The buttons are supposed to be disabled on the mainland,
 even for gods.

---
 indra/newview/llfloaterregioninfo.cpp | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp
index d54736e942..0139d0e301 100644
--- a/indra/newview/llfloaterregioninfo.cpp
+++ b/indra/newview/llfloaterregioninfo.cpp
@@ -1972,8 +1972,15 @@ void LLPanelEstateInfo::updateControls(LLViewerRegion* region)
 	childSetEnabled("remove_allowed_avatar_btn",	god || owner || manager);
 	childSetEnabled("add_allowed_group_btn",		god || owner || manager);
 	childSetEnabled("remove_allowed_group_btn",		god || owner || manager);
-	childSetEnabled("add_banned_avatar_btn",		god || owner || manager);
-	childSetEnabled("remove_banned_avatar_btn",		god || owner || manager);
+
+	// Can't ban people from mainland, orientation islands, etc. because this
+	// creates much network traffic and server load.
+	// Disable their accounts in CSR tool instead.
+	bool linden_estate = (getEstateID() <= ESTATE_LAST_LINDEN);
+	bool enable_ban = (god || owner || manager) && !linden_estate;
+	childSetEnabled("add_banned_avatar_btn",		enable_ban);
+	childSetEnabled("remove_banned_avatar_btn",		enable_ban);
+
 	childSetEnabled("message_estate_btn",			god || owner || manager);
 	childSetEnabled("kick_user_from_estate_btn",	god || owner || manager);
 
-- 
cgit v1.2.3


From d2680b86170255e701d44e51ab9f5883a9fd61d8 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Fri, 26 Feb 2010 13:41:47 -0800
Subject: Less ugly name tag fonts and colors

---
 indra/newview/llvoavatar.cpp | 21 ++++++++-------------
 1 file changed, 8 insertions(+), 13 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 8e017b2a51..93662a030f 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -2801,7 +2801,7 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
 		{
 			std::string title_str = title->getString();
 			LLStringFn::replace_ascii_controlchars(title_str,LL_UNKNOWN_CHAR);
-			addNameTagLine(title_str, name_tag_color, LLFontGL::ITALIC,
+			addNameTagLine(title_str, name_tag_color, LLFontGL::NORMAL,
 				LLFontGL::getFontSansSerifSmall());
 		}
 
@@ -2827,7 +2827,7 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
 			}
 			if (show_slids)
 			{
-				addNameTagLine(av_name.mSLID, LLColor4::red, LLFontGL::NORMAL,
+				addNameTagLine(av_name.mSLID, name_tag_color, LLFontGL::NORMAL,
 					LLFontGL::getFontSansSerif());
 			}
 		}
@@ -2835,9 +2835,13 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
 		{
 			if (show_display_names || show_slids)
 			{
+				
+				static LLUICachedControl<bool> small_avatar_names("SmallAvatarNames");
+				const LLFontGL* font =
+					(small_avatar_names ? LLFontGL::getFontSansSerif() : LLFontGL::getFontSansSerifBig() );
 				std::string full_name =
 					LLCacheName::buildFullName( firstname->getString(), lastname->getString() );
-				addNameTagLine(full_name, name_tag_color, LLFontGL::NORMAL, NULL);
+				addNameTagLine(full_name, name_tag_color, LLFontGL::NORMAL, font);
 			}
 		}
 
@@ -2868,7 +2872,7 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
 			}
 			// trim last ", "
 			line.resize( line.length() - 2 );
-			addNameTagLine(line, LLColor4::blue, LLFontGL::NORMAL,
+			addNameTagLine(line, name_tag_color, LLFontGL::NORMAL,
 				LLFontGL::getFontSansSerifSmall());
 		}
 		mNameAway = is_away;
@@ -2961,15 +2965,6 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
 	else
 	{
 		// ...not using chat bubbles, just names
-		static LLUICachedControl<bool> small_avatar_names("SmallAvatarNames");
-		if (small_avatar_names)
-		{
-			mNameText->setFont(LLFontGL::getFontSansSerif());
-		}
-		else
-		{
-			mNameText->setFont(LLFontGL::getFontSansSerifBig());
-		}
 		mNameText->setTextAlignment(LLHUDText::ALIGN_TEXT_CENTER);
 		mNameText->setFadeDistance(CHAT_NORMAL_RADIUS, 5.f);
 		mNameText->setVisibleOffScreen(FALSE);
-- 
cgit v1.2.3


From 60d4870f59abbe081e36a50ffedbdea068aec75b Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Fri, 26 Feb 2010 14:12:23 -0800
Subject: Cleaned up Edit Profile > Set Name layout and feel

---
 indra/newview/llpanelme.cpp                        |  6 ++--
 .../skins/default/xui/en/panel_edit_profile.xml    | 32 +++++++++++-----------
 2 files changed, 20 insertions(+), 18 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llpanelme.cpp b/indra/newview/llpanelme.cpp
index 19eddb8c51..84ed7356f1 100644
--- a/indra/newview/llpanelme.cpp
+++ b/indra/newview/llpanelme.cpp
@@ -289,8 +289,10 @@ void LLPanelMyProfileEdit::resetData()
 {
 	LLPanelMyProfile::resetData();
 
-	childSetTextArg("name_text", "[FIRST]", LLStringUtil::null);
-	childSetTextArg("name_text", "[LAST]", LLStringUtil::null);
+	//childSetTextArg("name_text", "[FIRST]", LLStringUtil::null);
+	//childSetTextArg("name_text", "[LAST]", LLStringUtil::null);
+	getChild<LLUICtrl>("user_name")->setValue( LLSD() );
+	getChild<LLUICtrl>("user_slid")->setValue( LLSD() );
 }
 
 void LLPanelMyProfileEdit::onTexturePickerMouseEnter(LLUICtrl* ctrl)
diff --git a/indra/newview/skins/default/xui/en/panel_edit_profile.xml b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
index f400acc1d4..c6403c66dd 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
@@ -89,34 +89,34 @@
          width="290">
       <text
        follows="top|left"
-       font="SansSerifHuge"
-       height="13"
+       font="SansSerifBigBold"
+       height="20"
        layout="topleft"
        left="10"
        name="user_name"
+       text_color="white"
+       top="4"
+       value="Hamilton Hitchings"
+       width="280" />
+      <text
+       follows="top|left"
+       height="13"
+       layout="topleft"
+       left="10"
+       name="user_slid"
        text_color="LtGray"
-       top="0"
-       value="James Linden"
+       top_pad="5"
+       value="(hamilton.linden)"
        width="150" />
       <button
        follows="top|left"
-       height="23"
+       height="20"
        label="Set Name..."
        left="170"
        name="set_name"
-       top="0"
+       top_delta="-4"
        visible="false" 
        width="110" />
-      <text
-       follows="top|left"
-       height="13"
-       layout="topleft"
-       left="10"
-       name="user_slid"
-       text_color="LtGray"
-       top_pad="4"
-       value="(james.linden)"
-       width="150" />
       <panel
        name="lifes_images_panel"
          follows="left|top|right"
-- 
cgit v1.2.3


From a235f3d5ea734db03a1a64901c893016f0320f18 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Fri, 26 Feb 2010 16:58:29 -0800
Subject: Clean out some dead code

---
 indra/newview/llhudtext.h    |  2 --
 indra/newview/llvoavatar.cpp | 10 ----------
 2 files changed, 12 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llhudtext.h b/indra/newview/llhudtext.h
index f7248ceffc..8219358cc1 100644
--- a/indra/newview/llhudtext.h
+++ b/indra/newview/llhudtext.h
@@ -34,7 +34,6 @@
 #define LL_LLHUDTEXT_H
 
 #include "llpointer.h"
-//#include "lldarrayptr.h"
 
 #include "llhudobject.h"
 #include "v4color.h"
@@ -45,7 +44,6 @@
 #include "llfontgl.h"
 #include <set>
 #include <vector>
-//#include "lldarray.h"
 
 // Renders a 2D text billboard floating at the location specified.
 class LLDrawable;
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 93662a030f..9a9fbc22e2 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -2882,7 +2882,6 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
 		mNameFriend = is_friend;
 		mTitle = title ? title->getString() : "";
 		LLStringFn::replace_ascii_controlchars(mTitle,LL_UNKNOWN_CHAR);
-//		mNameString = utf8str_to_wstring(line);
 		new_name = TRUE;
 	}
 
@@ -2892,10 +2891,6 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
 		mNameText->setFont(LLFontGL::getFontSansSerif());
 		mNameText->setTextAlignment(LLHUDText::ALIGN_TEXT_LEFT);
 		mNameText->setFadeDistance(CHAT_NORMAL_RADIUS * 2.f, 5.f);
-//		if (new_name)
-//		{
-//			mNameText->setLabel(mNameString);
-//		}
 	
 		char line[MAX_STRING];		/* Flawfinder: ignore */
 		line[0] = '\0';
@@ -2968,11 +2963,6 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
 		mNameText->setTextAlignment(LLHUDText::ALIGN_TEXT_CENTER);
 		mNameText->setFadeDistance(CHAT_NORMAL_RADIUS, 5.f);
 		mNameText->setVisibleOffScreen(FALSE);
-//		if (new_name)
-//		{
-//			mNameText->setLabel("");
-//			mNameText->setString(mNameString);
-//		}
 	}
 }
 
-- 
cgit v1.2.3


From 541291b366c4813217be5cb9118cd74778d0daeb Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Fri, 26 Feb 2010 17:31:55 -0800
Subject: Removed unnecessary include llhudtext.h from llviewerobject.h

---
 indra/newview/llglsandbox.cpp             | 1 +
 indra/newview/llviewerjointattachment.cpp | 1 +
 indra/newview/llviewerobject.cpp          | 1 +
 indra/newview/llviewerobject.h            | 2 +-
 indra/newview/llvoavatar.cpp              | 1 +
 indra/newview/pipeline.cpp                | 1 +
 6 files changed, 6 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llglsandbox.cpp b/indra/newview/llglsandbox.cpp
index 134e63fa35..a47f628da0 100644
--- a/indra/newview/llglsandbox.cpp
+++ b/indra/newview/llglsandbox.cpp
@@ -54,6 +54,7 @@
 #include "lltoolmgr.h"
 #include "llselectmgr.h"
 #include "llhudmanager.h"
+#include "llhudtext.h"
 #include "llrendersphere.h"
 #include "llviewerobjectlist.h"
 #include "lltoolselectrect.h"
diff --git a/indra/newview/llviewerjointattachment.cpp b/indra/newview/llviewerjointattachment.cpp
index 2b4b78d82d..b230203561 100644
--- a/indra/newview/llviewerjointattachment.cpp
+++ b/indra/newview/llviewerjointattachment.cpp
@@ -39,6 +39,7 @@
 #include "llviewercontrol.h"
 #include "lldrawable.h"
 #include "llgl.h"
+#include "llhudtext.h"
 #include "llrender.h"
 #include "llvoavatar.h"
 #include "llvolume.h"
diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp
index 6e4d375d28..eed07a4770 100644
--- a/indra/newview/llviewerobject.cpp
+++ b/indra/newview/llviewerobject.cpp
@@ -67,6 +67,7 @@
 #include "llface.h"
 #include "llfloaterproperties.h"
 #include "llfollowcam.h"
+#include "llhudtext.h"
 #include "llselectmgr.h"
 #include "llrendersphere.h"
 #include "lltooldraganddrop.h"
diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h
index 266c40d493..9f2eb10065 100644
--- a/indra/newview/llviewerobject.h
+++ b/indra/newview/llviewerobject.h
@@ -37,7 +37,6 @@
 
 #include "llassetstorage.h"
 #include "lldarrayptr.h"
-#include "llhudtext.h"
 #include "llhudicon.h"
 #include "llinventory.h"
 #include "llrefcount.h"
@@ -60,6 +59,7 @@ class LLColor4;
 class LLFrameTimer;
 class LLDrawable;
 class LLHost;
+class LLHUDText;
 class LLWorld;
 class LLNameValue;
 class LLNetMap;
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 9a9fbc22e2..317bc0da29 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -63,6 +63,7 @@
 #include "llheadrotmotion.h"
 #include "llhudeffecttrail.h"
 #include "llhudmanager.h"
+#include "llhudtext.h"
 #include "llkeyframefallmotion.h"
 #include "llkeyframestandmotion.h"
 #include "llkeyframewalkmotion.h"
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index dd9634a234..60990447c0 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -69,6 +69,7 @@
 #include "llfloaterreg.h"
 #include "llgldbg.h"
 #include "llhudmanager.h"
+#include "llhudtext.h"
 #include "lllightconstants.h"
 #include "llresmgr.h"
 #include "llselectmgr.h"
-- 
cgit v1.2.3


From 04d27007fdd46688c86be85013272da3373f77fc Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Tue, 2 Mar 2010 11:14:59 -0800
Subject: DEV-46936 SLID last name appears when resident returns an object to
 its owner Fixed with some regular expression cleanup magic

---
 indra/newview/llviewermessage.cpp | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 83d52fbbfc..0815ce486d 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -1682,6 +1682,23 @@ static std::string clean_name_from_im(const std::string& name, EInstantMessage t
 	}
 }
 
+static std::string clean_name_from_task_im(const std::string& msg)
+{
+	boost::smatch match;
+	static const boost::regex returned_exp(
+		"(.*been returned to your inventory lost and found folder by )(.+)( (from|near).*)");
+	if (boost::regex_match(msg, match, returned_exp))
+	{
+		// match objects are 1-based for groups
+		std::string final = match[1].str();
+		std::string name = match[2].str();
+		final += LLCacheName::cleanFullName(name);
+		final += match[3].str();
+		return final;
+	}
+	return msg;
+}
+
 void process_improved_im(LLMessageSystem *msg, void **user_data)
 {
 	if (gNoRender)
@@ -2234,6 +2251,9 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
 				chat.mFromID = from_id = LLUUID::null;
 			}
 
+			// IDEVO Some messages have embedded resident names
+			message = clean_name_from_task_im(message);
+
 			LLSD query_string;
 			query_string["owner"] = from_id;
 			query_string["slurl"] = location;
-- 
cgit v1.2.3


From b7d3d80dddba80268c72e406877701cbaa4856a3 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Tue, 2 Mar 2010 15:13:56 -0800
Subject: DEV-46231 "You paid" shows last name Resident if amount is L$1 Bad
 regex

---
 indra/newview/llviewermessage.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 0815ce486d..6a131082da 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -4495,7 +4495,7 @@ static void show_money_balance_notification(const std::string& desc)
 	// <name> paid you L$<amount>.
 	static const boost::regex paid_you("(.+) paid you L\\$(\\d+)\\.");
 	// You paid <name> L$<amount> [for <reason>].
-	static const boost::regex you_paid("You paid (.*) L\\$(\\d+)(.+)\\.");
+	static const boost::regex you_paid("You paid (.*) L\\$(\\d+)(.*)\\.");
 
 	if (boost::regex_match(desc, match, paid_you_for))
 	{
-- 
cgit v1.2.3


From 521b5fb5831469d0927687a392e8c6a6653a9170 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Tue, 2 Mar 2010 15:14:13 -0800
Subject: Fixed merge conflict

---
 indra/newview/llpanelgroupinvite.cpp | 11 +++++------
 indra/newview/llpanelgroupinvite.h   |  2 +-
 2 files changed, 6 insertions(+), 7 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llpanelgroupinvite.cpp b/indra/newview/llpanelgroupinvite.cpp
index e1ebf7550f..3f0eca0780 100644
--- a/indra/newview/llpanelgroupinvite.cpp
+++ b/indra/newview/llpanelgroupinvite.cpp
@@ -404,11 +404,11 @@ void LLPanelGroupInvite::addUsers(std::vector<LLUUID>& agent_ids)
 	std::vector<std::string> names;
 	for (S32 i = 0; i < (S32)agent_ids.size(); i++)
 	{
+		std::string fullname;
 		LLUUID agent_id = agent_ids[i];
 		LLViewerObject* dest = gObjectList.findObject(agent_id);
 		if(dest && dest->isAvatar())
 		{
-			std::string fullname;
 			LLNameValue* nvfirst = dest->getNVPair("FirstName");
 			LLNameValue* nvlast = dest->getNVPair("LastName");
 			if(nvfirst && nvlast)
@@ -438,8 +438,7 @@ void LLPanelGroupInvite::addUsers(std::vector<LLUUID>& agent_ids)
 				{
 					// actually it should happen, just in case
 					gCacheName->get(LLUUID(agent_id), false, boost::bind(
-							&LLPanelGroupInvite::addUserCallback, this, _1, _2,
-							_3));
+							&LLPanelGroupInvite::addUserCallback, this, _1, _2));
 					// for this special case!
 					//when there is no cached name we should remove resident from agent_ids list to avoid breaking of sequence
 					// removed id will be added in callback
@@ -455,16 +454,16 @@ void LLPanelGroupInvite::addUsers(std::vector<LLUUID>& agent_ids)
 	mImplementation->addUsers(names, agent_ids);
 }
 
-void LLPanelGroupInvite::addUserCallback(const LLUUID& id, const std::string& first_name, const std::string& last_name)
+void LLPanelGroupInvite::addUserCallback(const LLUUID& id, const std::string& full_name)
 {
 	std::vector<std::string> names;
 	std::vector<LLUUID> agent_ids;
-	std::string full_name = first_name + " " + last_name;
 	agent_ids.push_back(id);
-	names.push_back(first_name + " " + last_name);
+	names.push_back(full_name);
 
 	mImplementation->addUsers(names, agent_ids);
 }
+
 void LLPanelGroupInvite::draw()
 {
 	LLPanel::draw();
diff --git a/indra/newview/llpanelgroupinvite.h b/indra/newview/llpanelgroupinvite.h
index b095dd2395..df865c9a63 100644
--- a/indra/newview/llpanelgroupinvite.h
+++ b/indra/newview/llpanelgroupinvite.h
@@ -46,7 +46,7 @@ public:
 	/**
 	 * this callback is being used to add a user whose fullname isn't been loaded before invoking of addUsers().
 	 */  
-	void addUserCallback(const LLUUID& id, const std::string& first_name, const std::string& last_name);
+	void addUserCallback(const LLUUID& id, const std::string& full_name);
 	void clear();
 	void update();
 
-- 
cgit v1.2.3


From 95479a75bb65e355fce8bc5bcc719cfd242b8c16 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Tue, 2 Mar 2010 15:14:27 -0800
Subject: Nicer inspector when using SLIDs only

---
 indra/newview/llinspectavatar.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llinspectavatar.cpp b/indra/newview/llinspectavatar.cpp
index c4fd5a07c1..a9258f7663 100644
--- a/indra/newview/llinspectavatar.cpp
+++ b/indra/newview/llinspectavatar.cpp
@@ -622,7 +622,7 @@ void LLInspectAvatar::onNameCache(
 		else
 		{
 			getChild<LLUICtrl>("user_name")->setValue(full_name);
-			getChild<LLUICtrl>("user_slid")->setValue(full_name);
+			getChild<LLUICtrl>("user_slid")->setValue("");
 		}
 	}
 }
-- 
cgit v1.2.3


From 0957fa04395453e5b336ee77af3a21215f9369ca Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Tue, 2 Mar 2010 15:14:49 -0800
Subject: Fix for not being able to pick resident in avatar picker with display
 names on

---
 indra/newview/llfloateravatarpicker.cpp | 1 +
 1 file changed, 1 insertion(+)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloateravatarpicker.cpp b/indra/newview/llfloateravatarpicker.cpp
index 63bced27d9..ed458a4b02 100644
--- a/indra/newview/llfloateravatarpicker.cpp
+++ b/indra/newview/llfloateravatarpicker.cpp
@@ -520,6 +520,7 @@ void LLFloaterAvatarPicker::processResponse(const LLUUID& query_id, const LLSD&
 	}
 
 	childEnable("ok_btn");
+	search_results->setEnabled(true);
 	search_results->selectFirstItem();
 	onList();
 	search_results->setFocus(TRUE);
-- 
cgit v1.2.3


From 207c40de9435d2a51c41bc0b72250cd5ff7e87ac Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Wed, 3 Mar 2010 16:04:37 -0800
Subject: Fix script info for group-owned objects and stop requesting group
 name lookups for IDs that are actually avatars

---
 indra/newview/llfloaterscriptlimits.cpp | 20 ++++++++++++++------
 1 file changed, 14 insertions(+), 6 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloaterscriptlimits.cpp b/indra/newview/llfloaterscriptlimits.cpp
index 2fce50007e..5474a68512 100644
--- a/indra/newview/llfloaterscriptlimits.cpp
+++ b/indra/newview/llfloaterscriptlimits.cpp
@@ -636,6 +636,9 @@ void LLPanelScriptLimitsRegionMemory::setRegionDetails(LLSD content)
 			std::string name_buf = content["parcels"][i]["objects"][j]["name"].asString();
 			LLUUID task_id = content["parcels"][i]["objects"][j]["id"].asUUID();
 			LLUUID owner_id = content["parcels"][i]["objects"][j]["owner_id"].asUUID();
+			// This field may not be sent by all server versions, but it's OK if
+			// it uses the LLSD default of false
+			bool is_group_owned = content["parcels"][i]["objects"][j]["is_group_owned"].asBoolean();
 
 			F32 location_x = 0.0f;
 			F32 location_y = 0.0f;
@@ -661,17 +664,22 @@ void LLPanelScriptLimitsRegionMemory::setRegionDetails(LLSD content)
 			// ...and if not use the slightly more painful method of disovery:
 			else
 			{
-				BOOL name_is_cached = gCacheName->getFullName(owner_id, owner_buf);
+				BOOL name_is_cached;
+				if (is_group_owned)
+				{
+					name_is_cached = gCacheName->getGroupName(owner_id, owner_buf);
+				}
+				else
+				{
+					name_is_cached = gCacheName->getFullName(owner_id, owner_buf);
+				}
 				if(!name_is_cached)
 				{
 					if(std::find(names_requested.begin(), names_requested.end(), owner_id) == names_requested.end())
 					{
 						names_requested.push_back(owner_id);
-					    // Is this a bug?  It's trying to look up a GROUP name, not
-					    // an AVATAR name?  JC
-					    const bool is_group = true;
-						gCacheName->get(owner_id, is_group,
-						boost::bind(&LLPanelScriptLimitsRegionMemory::onNameCache,
+						gCacheName->get(owner_id, is_group_owned,
+							boost::bind(&LLPanelScriptLimitsRegionMemory::onNameCache,
 							    this, _1, _2));
 					}
 				}
-- 
cgit v1.2.3


From 42606dbbb5f452211e4fc30ee0ed41334fc14e8d Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Fri, 5 Mar 2010 17:06:22 -0800
Subject: Change login screen to use "Username"

---
 indra/newview/skins/default/xui/en/panel_login.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml
index 20f91d85ab..bf839f13e5 100644
--- a/indra/newview/skins/default/xui/en/panel_login.xml
+++ b/indra/newview/skins/default/xui/en/panel_login.xml
@@ -60,7 +60,7 @@ name="first_name_text"
 top="20"
 left="20"
 width="150">
-  Second Life Name or ID:
+  Username or First Last:
 </text>
 <line_editor
 follows="left|bottom"
-- 
cgit v1.2.3


From 397fe6691018f428fb21760ffa7114948904fdd5 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Mon, 8 Mar 2010 11:21:06 -0800
Subject: Fixed merge conflict with online/offline notifications

---
 indra/newview/llcallingcard.cpp                      | 7 +++----
 indra/newview/skins/default/xui/en/notifications.xml | 4 ++--
 2 files changed, 5 insertions(+), 6 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llcallingcard.cpp b/indra/newview/llcallingcard.cpp
index 2b124118ca..b4c4ddcbf4 100644
--- a/indra/newview/llcallingcard.cpp
+++ b/indra/newview/llcallingcard.cpp
@@ -694,12 +694,11 @@ void LLAvatarTracker::processNotify(LLMessageSystem* msg, bool online)
 				setBuddyOnline(agent_id,online);
 				if(chat_notify)
 				{
-					std::string first, last;
-					if(gCacheName->getName(agent_id, first, last))
+					std::string full_name;
+					if(gCacheName->getFullName(agent_id, full_name))
 					{
 						notify = TRUE;
-						args["FIRST"] = first;
-						args["LAST"] = last;
+						args["NAME"] = full_name;
 					}
 				}
 			}
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 7f0a3ff360..8c07198111 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -4330,14 +4330,14 @@ Topic: [SUBJECT], Message: [MESSAGE]
    icon="notifytip.tga"
    name="FriendOnline"
    type="notifytip">
-[FIRST] [LAST] is Online
+[NAME] is Online
   </notification>
 
   <notification
    icon="notifytip.tga"
    name="FriendOffline"
    type="notifytip">
-[FIRST] [LAST] is Offline
+[NAME] is Offline
   </notification>
 
   <notification
-- 
cgit v1.2.3


From 5f9dd335e6449c85d19b44166ad57b3793922b80 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Mon, 8 Mar 2010 13:38:58 -0800
Subject: Login screen says "Second Life ID", not username, per discussion with
 Erica

---
 indra/newview/skins/default/xui/en/panel_login.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml
index bf839f13e5..617fea6539 100644
--- a/indra/newview/skins/default/xui/en/panel_login.xml
+++ b/indra/newview/skins/default/xui/en/panel_login.xml
@@ -60,7 +60,7 @@ name="first_name_text"
 top="20"
 left="20"
 width="150">
-  Username or First Last:
+  Second Life ID or Name:
 </text>
 <line_editor
 follows="left|bottom"
-- 
cgit v1.2.3


From 3d074fa20167a7c06f00c394481060e3d7101b11 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Mon, 8 Mar 2010 13:39:22 -0800
Subject: Simplify name tag prefs and put SLID on top of display name

---
 indra/newview/app_settings/settings.xml            | 11 ---
 indra/newview/llvoavatar.cpp                       | 85 ++++++++++------------
 .../default/xui/en/panel_preferences_general.xml   | 11 +--
 3 files changed, 42 insertions(+), 65 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index cf8e238855..882430d5e3 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -7168,17 +7168,6 @@
       <key>Value</key>
       <integer>0</integer>
     </map>
-    <key>NameTagShowStatus</key>
-    <map>
-      <key>Comment</key>
-      <string>Show status (AFK, Busy) in name labels</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
     <key>RenderInitError</key>
     <map>
       <key>Comment</key>
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index f7df0dc2cf..b56e4d3d2e 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -2808,6 +2808,35 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
 
 		clearNameTag();
 
+		if (is_away || is_muted || is_busy || is_appearance)
+		{
+			std::string line;
+			if (is_away)
+			{
+				line += LLTrans::getString("AvatarAway");
+				line += ", ";
+			}
+			if (is_busy)
+			{
+				line += LLTrans::getString("AvatarBusy");
+				line += ", ";
+			}
+			if (is_muted)
+			{
+				line += LLTrans::getString("AvatarMuted");
+				line += ", ";
+			}
+			if (is_appearance)
+			{
+				line += LLTrans::getString("AvatarEditingAppearance");
+				line += ", ";
+			}
+			// trim last ", "
+			line.resize( line.length() - 2 );
+			addNameTagLine(line, name_tag_color, LLFontGL::NORMAL,
+				LLFontGL::getFontSansSerifSmall());
+		}
+
 		if (sRenderGroupTitles
 			&& title && title->getString() && title->getString()[0] != '\0')
 		{
@@ -2832,61 +2861,27 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
 			}
 
 			// Might be blank if name not available yet, that's OK
-			if (show_display_names)
-			{
-				addNameTagLine(av_name.mDisplayName, name_tag_color, LLFontGL::NORMAL,
-					LLFontGL::getFontSansSerifBig());
-			}
 			if (show_slids)
 			{
 				addNameTagLine(av_name.mSLID, name_tag_color, LLFontGL::NORMAL,
 					LLFontGL::getFontSansSerif());
 			}
-		}
-		else
-		{
-			if (show_display_names || show_slids)
+			if (show_display_names)
 			{
-				
-				static LLUICachedControl<bool> small_avatar_names("SmallAvatarNames");
-				const LLFontGL* font =
-					(small_avatar_names ? LLFontGL::getFontSansSerif() : LLFontGL::getFontSansSerifBig() );
-				std::string full_name =
-					LLCacheName::buildFullName( firstname->getString(), lastname->getString() );
-				addNameTagLine(full_name, name_tag_color, LLFontGL::NORMAL, font);
+				addNameTagLine(av_name.mDisplayName, name_tag_color, LLFontGL::NORMAL,
+					LLFontGL::getFontSansSerifBig());
 			}
 		}
-
-		static LLUICachedControl<bool> show_status("NameTagShowStatus");
-		if (show_status
-			&& (is_away || is_muted || is_busy || is_appearance) )
+		else
 		{
-			std::string line;
-			if (is_away)
-			{
-				line += LLTrans::getString("AvatarAway");
-				line += ", ";
-			}
-			if (is_busy)
-			{
-				line += LLTrans::getString("AvatarBusy");
-				line += ", ";
-			}
-			if (is_muted)
-			{
-				line += LLTrans::getString("AvatarMuted");
-				line += ", ";
-			}
-			if (is_appearance)
-			{
-				line += LLTrans::getString("AvatarEditingAppearance");
-				line += ", ";
-			}
-			// trim last ", "
-			line.resize( line.length() - 2 );
-			addNameTagLine(line, name_tag_color, LLFontGL::NORMAL,
-				LLFontGL::getFontSansSerifSmall());
+			static LLUICachedControl<bool> small_avatar_names("SmallAvatarNames");
+			const LLFontGL* font =
+				(small_avatar_names ? LLFontGL::getFontSansSerif() : LLFontGL::getFontSansSerifBig() );
+			std::string full_name =
+				LLCacheName::buildFullName( firstname->getString(), lastname->getString() );
+			addNameTagLine(full_name, name_tag_color, LLFontGL::NORMAL, font);
 		}
+
 		mNameAway = is_away;
 		mNameBusy = is_busy;
 		mNameMute = is_muted;
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_general.xml b/indra/newview/skins/default/xui/en/panel_preferences_general.xml
index 39a597a372..08f8a24ac3 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_general.xml
@@ -286,6 +286,7 @@
      name="show_all_title_checkbox1"
 	 tool_tip="Show group titles, like Officer or Member"
      top_pad="5" />
+  <!--
    <check_box
      control_name="NameTagShowDisplayNames"
 	 enabled_control="AvatarNameTagMode"
@@ -295,6 +296,7 @@
      name="show_display_names"
 	 tool_tip="Show display names, like José Sanchez"
      top_pad="5" />
+     -->
    <check_box
      control_name="NameTagShowSLIDs"
 	 enabled_control="AvatarNameTagMode"
@@ -304,15 +306,6 @@
      name="show_slids"
 	 tool_tip="Show SL ID, like bobsmith123"
      top_pad="5" />
-   <check_box
-     control_name="NameTagShowStatus"
-	 enabled_control="AvatarNameTagMode"
-     height="16"
-     label="Status"
-     left_delta="0"
-     name="show_status"
-	 tool_tip="Show status, like AFK or Busy"
-     top_pad="5" />
     <text
      type="string"
      length="1"
-- 
cgit v1.2.3


From f3651ae32c96296d93d4920ed33103d568a9c1fd Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Mon, 8 Mar 2010 16:41:20 -0800
Subject: Trivial header file cleanup

---
 indra/newview/lldrawable.h  | 1 +
 indra/newview/llhudicon.h   | 1 +
 indra/newview/llhudobject.h | 2 +-
 3 files changed, 3 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/lldrawable.h b/indra/newview/lldrawable.h
index 651dabff9e..b8b09b89f1 100644
--- a/indra/newview/lldrawable.h
+++ b/indra/newview/lldrawable.h
@@ -53,6 +53,7 @@ class LLCamera;
 class LLDrawPool;
 class LLDrawable;
 class LLFace;
+class LLFacePool;
 class LLSpatialGroup;
 class LLSpatialBridge;
 class LLSpatialPartition;
diff --git a/indra/newview/llhudicon.h b/indra/newview/llhudicon.h
index 770e3bbcd0..91b3a64250 100644
--- a/indra/newview/llhudicon.h
+++ b/indra/newview/llhudicon.h
@@ -50,6 +50,7 @@
 // Renders a 2D icon billboard floating at the location specified.
 class LLDrawable;
 class LLViewerObject;
+class LLViewerTexture;
 
 class LLHUDIcon : public LLHUDObject
 {
diff --git a/indra/newview/llhudobject.h b/indra/newview/llhudobject.h
index d304ac41af..6b70d1922c 100644
--- a/indra/newview/llhudobject.h
+++ b/indra/newview/llhudobject.h
@@ -42,7 +42,7 @@
 #include "v4color.h"
 #include "v3math.h"
 #include "v3dmath.h"
-#include "lldrawpool.h"
+#include "lldrawpool.h"		// TODO: eliminate, unused below
 #include <list>
 
 class LLViewerCamera;
-- 
cgit v1.2.3


From 717a4800f1ae0ae6ea0bbe9ed0af21c7851f5d0a Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Tue, 9 Mar 2010 14:28:48 -0800
Subject: Break name tag code out into LLHUDNameTag Start by duplicating the
 LLHUDText code, then stripping out functionality that only needs to exist in
 one place (like force-based juggling of name tag positions)

---
 indra/newview/CMakeLists.txt         |    2 +
 indra/newview/llhudnametag.cpp       | 1070 ++++++++++++++++++++++++++++++++++
 indra/newview/llhudnametag.h         |  195 +++++++
 indra/newview/llhudobject.cpp        |   18 +-
 indra/newview/llhudobject.h          |    7 +-
 indra/newview/llhudtext.cpp          |  442 +-------------
 indra/newview/llhudtext.h            |   21 +-
 indra/newview/llviewerobjectlist.cpp |    4 +-
 indra/newview/llviewerwindow.cpp     |    7 +-
 indra/newview/llvoavatar.cpp         |   13 +-
 indra/newview/llvoavatar.h           |    4 +-
 indra/newview/pipeline.cpp           |    5 +-
 12 files changed, 1322 insertions(+), 466 deletions(-)
 create mode 100644 indra/newview/llhudnametag.cpp
 create mode 100644 indra/newview/llhudnametag.h

(limited to 'indra/newview')

diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 8ad3b2085d..7b306d03ab 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -233,6 +233,7 @@ set(viewer_SOURCE_FILES
     llhudeffecttrail.cpp
     llhudicon.cpp
     llhudmanager.cpp
+    llhudnametag.cpp
     llhudobject.cpp
     llhudrender.cpp
     llhudtext.cpp
@@ -734,6 +735,7 @@ set(viewer_HEADER_FILES
     llhudeffecttrail.h
     llhudicon.h
     llhudmanager.h
+    llhudnametag.h
     llhudobject.h
     llhudrender.h
     llhudtext.h
diff --git a/indra/newview/llhudnametag.cpp b/indra/newview/llhudnametag.cpp
new file mode 100644
index 0000000000..5d4c4571d5
--- /dev/null
+++ b/indra/newview/llhudnametag.cpp
@@ -0,0 +1,1070 @@
+/** 
+ * @file llhudnametag.cpp
+ * @brief Name tags for avatars
+ * @author James Cook
+ *
+ * $LicenseInfo:firstyear=2010&license=viewergpl$
+ * 
+ * Copyright (c) 2002-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llhudnametag.h"
+
+#include "llrender.h"
+
+#include "llagent.h"
+#include "llviewercontrol.h"
+#include "llcriticaldamp.h"
+#include "lldrawable.h"
+#include "llfontgl.h"
+#include "llglheaders.h"
+#include "llhudrender.h"
+#include "llui.h"
+#include "llviewercamera.h"
+#include "llviewertexturelist.h"
+#include "llviewerobject.h"
+#include "llvovolume.h"
+#include "llviewerwindow.h"
+#include "llstatusbar.h"
+#include "llmenugl.h"
+#include "pipeline.h"
+#include <boost/tokenizer.hpp>
+
+
+const F32 SPRING_STRENGTH = 0.7f;
+const F32 RESTORATION_SPRING_TIME_CONSTANT = 0.1f;
+const F32 HORIZONTAL_PADDING = 15.f;
+const F32 VERTICAL_PADDING = 12.f;
+const F32 BUFFER_SIZE = 2.f;
+const F32 MIN_EDGE_OVERLAP = 3.f;
+const F32 HUD_TEXT_MAX_WIDTH = 190.f;
+const F32 HUD_TEXT_MAX_WIDTH_NO_BUBBLE = 1000.f;
+const F32 RESIZE_TIME = 0.f;
+const S32 NUM_OVERLAP_ITERATIONS = 10;
+const F32 NEIGHBOR_FORCE_FRACTION = 1.f;
+const F32 POSITION_DAMPING_TC = 0.2f;
+const F32 MAX_STABLE_CAMERA_VELOCITY = 0.1f;
+const F32 LOD_0_SCREEN_COVERAGE = 0.15f;
+const F32 LOD_1_SCREEN_COVERAGE = 0.30f;
+const F32 LOD_2_SCREEN_COVERAGE = 0.40f;
+
+std::set<LLPointer<LLHUDNameTag> > LLHUDNameTag::sTextObjects;
+std::vector<LLPointer<LLHUDNameTag> > LLHUDNameTag::sVisibleTextObjects;
+BOOL LLHUDNameTag::sDisplayText = TRUE ;
+
+bool llhudnametag_further_away::operator()(const LLPointer<LLHUDNameTag>& lhs, const LLPointer<LLHUDNameTag>& rhs) const
+{
+	return lhs->getDistance() > rhs->getDistance();
+}
+
+
+LLHUDNameTag::LLHUDNameTag(const U8 type)
+:	LLHUDObject(type),
+//	mUseBubble(FALSE),
+	mVisibleOffScreen(FALSE),
+	mWidth(0.f),
+	mHeight(0.f),
+	mFontp(LLFontGL::getFontSansSerifSmall()),
+	mBoldFontp(LLFontGL::getFontSansSerifBold()),
+	mMass(1.f),
+	mMaxLines(10),
+	mOffsetY(0),
+	mTextAlignment(ALIGN_TEXT_CENTER),
+	mVertAlignment(ALIGN_VERT_CENTER),
+	mLOD(0),
+	mHidden(FALSE)
+{
+	mColor = LLColor4(1.f, 1.f, 1.f, 1.f);
+	mDoFade = TRUE;
+	mFadeDistance = 8.f;
+	mFadeRange = 4.f;
+	mZCompare = TRUE;
+	mDropShadow = TRUE;
+	mOffscreen = FALSE;
+	mRadius = 0.1f;
+	LLPointer<LLHUDNameTag> ptr(this);
+	sTextObjects.insert(ptr);
+}
+
+LLHUDNameTag::~LLHUDNameTag()
+{
+}
+
+
+BOOL LLHUDNameTag::lineSegmentIntersect(const LLVector3& start, const LLVector3& end, LLVector3& intersection, BOOL debug_render)
+{
+	if (!mVisible || mHidden)
+	{
+		return FALSE;
+	}
+
+	// don't pick text that isn't bound to a viewerobject
+	if (!mSourceObject || mSourceObject->mDrawable.isNull())
+	{
+		return FALSE;
+	}
+	
+	F32 alpha_factor = 1.f;
+	LLColor4 text_color = mColor;
+	if (mDoFade)
+	{
+		if (mLastDistance > mFadeDistance)
+		{
+			alpha_factor = llmax(0.f, 1.f - (mLastDistance - mFadeDistance)/mFadeRange);
+			text_color.mV[3] = text_color.mV[3]*alpha_factor;
+		}
+	}
+	if (text_color.mV[3] < 0.01f)
+	{
+		return FALSE;
+	}
+
+	mOffsetY = lltrunc(mHeight * ((mVertAlignment == ALIGN_VERT_CENTER) ? 0.5f : 1.f));
+
+	// scale screen size of borders down
+	//RN: for now, text on hud objects is never occluded
+
+	LLVector3 x_pixel_vec;
+	LLVector3 y_pixel_vec;
+	
+	LLViewerCamera::getInstance()->getPixelVectors(mPositionAgent, y_pixel_vec, x_pixel_vec);
+
+	LLVector3 width_vec = mWidth * x_pixel_vec;
+	LLVector3 height_vec = mHeight * y_pixel_vec;
+	
+	LLCoordGL screen_pos;
+	LLViewerCamera::getInstance()->projectPosAgentToScreen(mPositionAgent, screen_pos, FALSE);
+
+	LLVector2 screen_offset;
+	screen_offset = updateScreenPos(mPositionOffset);
+	
+	LLVector3 render_position = mPositionAgent  
+			+ (x_pixel_vec * screen_offset.mV[VX])
+			+ (y_pixel_vec * screen_offset.mV[VY]);
+
+
+	//if (mUseBubble)
+	{
+		LLVector3 bg_pos = render_position
+			+ (F32)mOffsetY * y_pixel_vec
+			- (width_vec / 2.f)
+			- (height_vec);
+		//LLUI::translate(bg_pos.mV[VX], bg_pos.mV[VY], bg_pos.mV[VZ]);
+
+		LLVector3 v[] = 
+		{
+			bg_pos,
+			bg_pos + width_vec,
+			bg_pos + width_vec + height_vec,
+			bg_pos + height_vec,
+		};
+
+		if (debug_render)
+		{
+			gGL.begin(LLRender::LINE_STRIP);
+			gGL.vertex3fv(v[0].mV);
+			gGL.vertex3fv(v[1].mV);
+			gGL.vertex3fv(v[2].mV);
+			gGL.vertex3fv(v[3].mV);
+			gGL.vertex3fv(v[0].mV);
+			gGL.vertex3fv(v[2].mV);
+			gGL.end();
+		}
+
+		LLVector3 dir = end-start;
+		F32 t = 0.f;
+
+		if (LLTriangleRayIntersect(v[0], v[1], v[2], start, dir, NULL, NULL, &t, FALSE) ||
+			LLTriangleRayIntersect(v[2], v[3], v[0], start, dir, NULL, NULL, &t, FALSE) )
+		{
+			if (t <= 1.f)
+			{
+				intersection = start + dir*t;
+				return TRUE;
+			}
+		}
+	}
+
+	return FALSE;
+}
+
+void LLHUDNameTag::render()
+{
+	if (sDisplayText)
+	{
+		LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE);
+		renderText(FALSE);
+	}
+}
+
+void LLHUDNameTag::renderForSelect()
+{
+	LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE);
+	renderText(TRUE);
+}
+
+void LLHUDNameTag::renderText(BOOL for_select)
+{
+	if (!mVisible || mHidden)
+	{
+		return;
+	}
+
+	// don't pick text that isn't bound to a viewerobject
+	if (for_select && 
+		(!mSourceObject || mSourceObject->mDrawable.isNull()))
+	{
+		return;
+	}
+	
+	if (for_select)
+	{
+		gGL.getTexUnit(0)->disable();
+	}
+	else
+	{
+		gGL.getTexUnit(0)->enable(LLTexUnit::TT_TEXTURE);
+	}
+
+	LLGLState gls_blend(GL_BLEND, for_select ? FALSE : TRUE);
+	LLGLState gls_alpha(GL_ALPHA_TEST, for_select ? FALSE : TRUE);
+	
+	LLColor4 shadow_color(0.f, 0.f, 0.f, 1.f);
+	F32 alpha_factor = 1.f;
+	LLColor4 text_color = mColor;
+	if (mDoFade)
+	{
+		if (mLastDistance > mFadeDistance)
+		{
+			alpha_factor = llmax(0.f, 1.f - (mLastDistance - mFadeDistance)/mFadeRange);
+			text_color.mV[3] = text_color.mV[3]*alpha_factor;
+		}
+	}
+	if (text_color.mV[3] < 0.01f)
+	{
+		return;
+	}
+	shadow_color.mV[3] = text_color.mV[3];
+
+	mOffsetY = lltrunc(mHeight * ((mVertAlignment == ALIGN_VERT_CENTER) ? 0.5f : 1.f));
+
+	// *TODO: cache this image
+	LLUIImagePtr imagep = LLUI::getUIImage("Rounded_Square");
+
+	// *TODO: make this a per-text setting
+	LLColor4 bg_color = LLUIColorTable::instance().getColor("BackgroundChatColor");
+	bg_color.setAlpha(gSavedSettings.getF32("ChatBubbleOpacity") * alpha_factor);
+
+	const S32 border_height = 16;
+	const S32 border_width = 16;
+
+	// *TODO move this into helper function
+	F32 border_scale = 1.f;
+
+	if (border_height * 2 > mHeight)
+	{
+		border_scale = (F32)mHeight / ((F32)border_height * 2.f);
+	}
+	if (border_width * 2 > mWidth)
+	{
+		border_scale = llmin(border_scale, (F32)mWidth / ((F32)border_width * 2.f));
+	}
+
+	// scale screen size of borders down
+	//RN: for now, text on hud objects is never occluded
+
+	LLVector3 x_pixel_vec;
+	LLVector3 y_pixel_vec;
+	
+	LLViewerCamera::getInstance()->getPixelVectors(mPositionAgent, y_pixel_vec, x_pixel_vec);
+
+	LLVector2 border_scale_vec((F32)border_width / (F32)imagep->getTextureWidth(), (F32)border_height / (F32)imagep->getTextureHeight());
+	LLVector3 width_vec = mWidth * x_pixel_vec;
+	LLVector3 height_vec = mHeight * y_pixel_vec;
+	LLVector3 scaled_border_width = (F32)llfloor(border_scale * (F32)border_width) * x_pixel_vec;
+	LLVector3 scaled_border_height = (F32)llfloor(border_scale * (F32)border_height) * y_pixel_vec;
+
+	mRadius = (width_vec + height_vec).magVec() * 0.5f;
+
+	LLCoordGL screen_pos;
+	LLViewerCamera::getInstance()->projectPosAgentToScreen(mPositionAgent, screen_pos, FALSE);
+
+	LLVector2 screen_offset;
+//	if (!mUseBubble)
+//	{
+//		screen_offset = mPositionOffset;
+//	}
+//	else
+//	{
+		screen_offset = updateScreenPos(mPositionOffset);
+//	}
+
+	LLVector3 render_position = mPositionAgent  
+			+ (x_pixel_vec * screen_offset.mV[VX])
+			+ (y_pixel_vec * screen_offset.mV[VY]);
+
+//	if (mUseBubble)
+	{
+		LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE);
+		LLUI::pushMatrix();
+		{
+			LLVector3 bg_pos = render_position
+				+ (F32)mOffsetY * y_pixel_vec
+				- (width_vec / 2.f)
+				- (height_vec);
+			LLUI::translate(bg_pos.mV[VX], bg_pos.mV[VY], bg_pos.mV[VZ]);
+
+			if (for_select)
+			{
+				gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
+				S32 name = mSourceObject->mGLName;
+				LLColor4U coloru((U8)(name >> 16), (U8)(name >> 8), (U8)name);
+				gGL.color4ubv(coloru.mV);
+				gl_segmented_rect_3d_tex(border_scale_vec, scaled_border_width, scaled_border_height, width_vec, height_vec);
+				LLUI::popMatrix();
+				return;
+			}
+			else
+			{
+				gGL.getTexUnit(0)->bind(imagep->getImage());
+				
+				gGL.color4fv(bg_color.mV);
+				gl_segmented_rect_3d_tex(border_scale_vec, scaled_border_width, scaled_border_height, width_vec, height_vec);
+		
+				if ( mLabelSegments.size())
+				{
+					LLUI::pushMatrix();
+					{
+						gGL.color4f(text_color.mV[VX], text_color.mV[VY], text_color.mV[VZ], gSavedSettings.getF32("ChatBubbleOpacity") * alpha_factor);
+						LLVector3 label_height = (mFontp->getLineHeight() * mLabelSegments.size() + (VERTICAL_PADDING / 3.f)) * y_pixel_vec;
+						LLVector3 label_offset = height_vec - label_height;
+						LLUI::translate(label_offset.mV[VX], label_offset.mV[VY], label_offset.mV[VZ]);
+						gl_segmented_rect_3d_tex_top(border_scale_vec, scaled_border_width, scaled_border_height, width_vec, label_height);
+					}
+					LLUI::popMatrix();
+				}
+			}
+
+			BOOL outside_width = llabs(mPositionOffset.mV[VX]) > mWidth * 0.5f;
+			BOOL outside_height = llabs(mPositionOffset.mV[VY] + (mVertAlignment == ALIGN_VERT_TOP ? mHeight * 0.5f : 0.f)) > mHeight * (mVertAlignment == ALIGN_VERT_TOP ? mHeight * 0.75f : 0.5f);
+
+			// draw line segments pointing to parent object
+			if (!mOffscreen && (outside_width || outside_height))
+			{
+				LLUI::pushMatrix();
+				{
+					gGL.color4fv(bg_color.mV);
+					LLVector3 target_pos = -1.f * (mPositionOffset.mV[VX] * x_pixel_vec + mPositionOffset.mV[VY] * y_pixel_vec);
+					target_pos += (width_vec / 2.f);
+					target_pos += mVertAlignment == ALIGN_VERT_CENTER ? (height_vec * 0.5f) : LLVector3::zero;
+					target_pos -= 3.f * x_pixel_vec;
+					target_pos -= 6.f * y_pixel_vec;
+					LLUI::translate(target_pos.mV[VX], target_pos.mV[VY], target_pos.mV[VZ]);
+					gl_segmented_rect_3d_tex(border_scale_vec, 3.f * x_pixel_vec, 3.f * y_pixel_vec, 6.f * x_pixel_vec, 6.f * y_pixel_vec);	
+				}
+				LLUI::popMatrix();
+
+				gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
+				LLGLDepthTest gls_depth(mZCompare ? GL_TRUE : GL_FALSE, GL_FALSE);
+				
+				LLVector3 box_center_offset;
+				box_center_offset = (width_vec * 0.5f) + (height_vec * 0.5f);
+				LLUI::translate(box_center_offset.mV[VX], box_center_offset.mV[VY], box_center_offset.mV[VZ]);
+				gGL.color4fv(bg_color.mV);
+				LLUI::setLineWidth(2.0);
+				gGL.begin(LLRender::LINES);
+				{
+					if (outside_width)
+					{
+						LLVector3 vert;
+						// draw line in x then y
+						if (mPositionOffset.mV[VX] < 0.f)
+						{
+							// start at right edge
+							vert = width_vec * 0.5f;
+							gGL.vertex3fv(vert.mV);
+						}
+						else
+						{
+							// start at left edge
+							vert = width_vec * -0.5f;
+							gGL.vertex3fv(vert.mV);
+						}
+						vert = -mPositionOffset.mV[VX] * x_pixel_vec;
+						gGL.vertex3fv(vert.mV);
+						gGL.vertex3fv(vert.mV);
+						vert -= mPositionOffset.mV[VY] * y_pixel_vec;
+						vert -= ((mVertAlignment == ALIGN_VERT_TOP) ? (height_vec * 0.5f) : LLVector3::zero);
+						gGL.vertex3fv(vert.mV);
+					}
+					else
+					{
+						LLVector3 vert;
+						// draw line in y then x
+						if (mPositionOffset.mV[VY] < 0.f)
+						{
+							// start at top edge
+							vert = (height_vec * 0.5f) - (mPositionOffset.mV[VX] * x_pixel_vec);
+							gGL.vertex3fv(vert.mV);
+						}
+						else
+						{
+							// start at bottom edge
+							vert = (height_vec * -0.5f)  - (mPositionOffset.mV[VX] * x_pixel_vec);
+							gGL.vertex3fv(vert.mV);
+						}
+						vert = -mPositionOffset.mV[VY] * y_pixel_vec - mPositionOffset.mV[VX] * x_pixel_vec;
+						vert -= ((mVertAlignment == ALIGN_VERT_TOP) ? (height_vec * 0.5f) : LLVector3::zero);
+						gGL.vertex3fv(vert.mV);
+					}
+				}
+				gGL.end();
+				LLUI::setLineWidth(1.0);
+
+			}
+		}
+		LLUI::popMatrix();
+	}
+
+	F32 y_offset = (F32)mOffsetY;
+		
+	// Render label
+	{
+		gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
+
+		for(std::vector<LLHUDTextSegment>::iterator segment_iter = mLabelSegments.begin();
+			segment_iter != mLabelSegments.end(); ++segment_iter )
+		{
+			// Label segments use default font
+			const LLFontGL* fontp = (segment_iter->mStyle == LLFontGL::BOLD) ? mBoldFontp : mFontp;
+			y_offset -= fontp->getLineHeight();
+
+			F32 x_offset;
+			if (mTextAlignment == ALIGN_TEXT_CENTER)
+			{
+				x_offset = -0.5f*segment_iter->getWidth(fontp);
+			}
+			else // ALIGN_LEFT
+			{
+				x_offset = -0.5f * mWidth + (HORIZONTAL_PADDING / 2.f);
+			}
+
+			LLColor4 label_color(0.f, 0.f, 0.f, 1.f);
+			label_color.mV[VALPHA] = alpha_factor;
+			hud_render_text(segment_iter->getText(), render_position, *fontp, segment_iter->mStyle, LLFontGL::NO_SHADOW, x_offset, y_offset, label_color, FALSE);
+		}
+	}
+
+	// Render text
+	{
+		// -1 mMaxLines means unlimited lines.
+		S32 start_segment;
+		S32 max_lines = getMaxLines();
+
+		if (max_lines < 0) 
+		{
+			start_segment = 0;
+		}
+		else 
+		{
+			start_segment = llmax((S32)0, (S32)mTextSegments.size() - max_lines);
+		}
+
+		for (std::vector<LLHUDTextSegment>::iterator segment_iter = mTextSegments.begin() + start_segment;
+			 segment_iter != mTextSegments.end(); ++segment_iter )
+		{
+			const LLFontGL* fontp = segment_iter->mFont;
+			y_offset -= fontp->getLineHeight();
+
+			U8 style = segment_iter->mStyle;
+			LLFontGL::ShadowType shadow = LLFontGL::NO_SHADOW;
+			if (mDropShadow)
+			{
+				shadow = LLFontGL::DROP_SHADOW;
+			}
+	
+			F32 x_offset;
+			if (mTextAlignment== ALIGN_TEXT_CENTER)
+			{
+				x_offset = -0.5f*segment_iter->getWidth(fontp);
+			}
+			else // ALIGN_LEFT
+			{
+				x_offset = -0.5f * mWidth + (HORIZONTAL_PADDING / 2.f);
+			}
+
+			text_color = segment_iter->mColor;
+			text_color.mV[VALPHA] *= alpha_factor;
+
+			hud_render_text(segment_iter->getText(), render_position, *fontp, style, shadow, x_offset, y_offset, text_color, FALSE);
+		}
+	}
+	/// Reset the default color to white.  The renderer expects this to be the default. 
+	gGL.color4f(1.0f, 1.0f, 1.0f, 1.0f);
+	if (for_select)
+	{
+		gGL.getTexUnit(0)->enable(LLTexUnit::TT_TEXTURE);
+	}
+}
+
+void LLHUDNameTag::setString(const std::string &text_utf8)
+{
+	mTextSegments.clear();
+	addLine(text_utf8, mColor);
+}
+
+void LLHUDNameTag::clearString()
+{
+	mTextSegments.clear();
+}
+
+
+void LLHUDNameTag::addLine(const std::string &text_utf8,
+						const LLColor4& color,
+						const LLFontGL::StyleFlags style,
+						const LLFontGL* font)
+{
+	LLWString wline = utf8str_to_wstring(text_utf8);
+	if (!wline.empty())
+	{
+		// use default font for segment if custom font not specified
+		if (!font)
+		{
+			font = mFontp;
+		}
+		typedef boost::tokenizer<boost::char_separator<llwchar>, LLWString::const_iterator, LLWString > tokenizer;
+		LLWString seps(utf8str_to_wstring("\r\n"));
+		boost::char_separator<llwchar> sep(seps.c_str());
+
+		tokenizer tokens(wline, sep);
+		tokenizer::iterator iter = tokens.begin();
+
+		while (iter != tokens.end())
+		{
+			U32 line_length = 0;
+			do	
+			{
+				F32 max_pixels = HUD_TEXT_MAX_WIDTH;
+				S32 segment_length = font->maxDrawableChars(iter->substr(line_length).c_str(), max_pixels, wline.length(), LLFontGL::WORD_BOUNDARY_IF_POSSIBLE);
+				LLHUDTextSegment segment(iter->substr(line_length, segment_length), style, color, font);
+				mTextSegments.push_back(segment);
+				line_length += segment_length;
+			}
+			while (line_length != iter->size());
+			++iter;
+		}
+	}
+}
+
+void LLHUDNameTag::setLabel(const std::string &label_utf8)
+{
+	mLabelSegments.clear();
+	addLabel(label_utf8);
+}
+
+void LLHUDNameTag::addLabel(const std::string& label_utf8)
+{
+	LLWString wstr = utf8string_to_wstring(label_utf8);
+	if (!wstr.empty())
+	{
+		LLWString seps(utf8str_to_wstring("\r\n"));
+		LLWString empty;
+
+		typedef boost::tokenizer<boost::char_separator<llwchar>, LLWString::const_iterator, LLWString > tokenizer;
+		boost::char_separator<llwchar> sep(seps.c_str(), empty.c_str(), boost::keep_empty_tokens);
+
+		tokenizer tokens(wstr, sep);
+		tokenizer::iterator iter = tokens.begin();
+
+		while (iter != tokens.end())
+		{
+			U32 line_length = 0;
+			do	
+			{
+				S32 segment_length = mFontp->maxDrawableChars(iter->substr(line_length).c_str(), 
+					HUD_TEXT_MAX_WIDTH, wstr.length(), LLFontGL::WORD_BOUNDARY_IF_POSSIBLE);
+				LLHUDTextSegment segment(iter->substr(line_length, segment_length), LLFontGL::NORMAL, mColor, mFontp);
+				mLabelSegments.push_back(segment);
+				line_length += segment_length;
+			}
+			while (line_length != iter->size());
+			++iter;
+		}
+	}
+}
+
+void LLHUDNameTag::setDropShadow(const BOOL do_shadow)
+{
+	mDropShadow = do_shadow;
+}
+
+void LLHUDNameTag::setZCompare(const BOOL zcompare)
+{
+	mZCompare = zcompare;
+}
+
+void LLHUDNameTag::setFont(const LLFontGL* font)
+{
+	mFontp = font;
+}
+
+
+void LLHUDNameTag::setColor(const LLColor4 &color)
+{
+	mColor = color;
+	for (std::vector<LLHUDTextSegment>::iterator segment_iter = mTextSegments.begin();
+		 segment_iter != mTextSegments.end(); ++segment_iter )
+	{
+		segment_iter->mColor = color;
+	}
+}
+
+void LLHUDNameTag::setAlpha(F32 alpha)
+{
+	mColor.mV[VALPHA] = alpha;
+	for (std::vector<LLHUDTextSegment>::iterator segment_iter = mTextSegments.begin();
+		 segment_iter != mTextSegments.end(); ++segment_iter )
+	{
+		segment_iter->mColor.mV[VALPHA] = alpha;
+	}
+}
+
+
+void LLHUDNameTag::setDoFade(const BOOL do_fade)
+{
+	mDoFade = do_fade;
+}
+
+void LLHUDNameTag::updateVisibility()
+{
+	if (mSourceObject)
+	{
+		mSourceObject->updateText();
+	}
+	
+	mPositionAgent = gAgent.getPosAgentFromGlobal(mPositionGlobal);
+
+	if (!mSourceObject)
+	{
+		//llwarns << "LLHUDNameTag::updateScreenPos -- mSourceObject is NULL!" << llendl;
+		mVisible = TRUE;
+		sVisibleTextObjects.push_back(LLPointer<LLHUDNameTag> (this));
+		return;
+	}
+
+	// Not visible if parent object is dead
+	if (mSourceObject->isDead())
+	{
+		mVisible = FALSE;
+		return;
+	}
+
+	// push text towards camera by radius of object, but not past camera
+	LLVector3 vec_from_camera = mPositionAgent - LLViewerCamera::getInstance()->getOrigin();
+	LLVector3 dir_from_camera = vec_from_camera;
+	dir_from_camera.normVec();
+
+	if (dir_from_camera * LLViewerCamera::getInstance()->getAtAxis() <= 0.f)
+	{ //text is behind camera, don't render
+		mVisible = FALSE;
+		return;
+	}
+		
+	if (vec_from_camera * LLViewerCamera::getInstance()->getAtAxis() <= LLViewerCamera::getInstance()->getNear() + 0.1f + mSourceObject->getVObjRadius())
+	{
+		mPositionAgent = LLViewerCamera::getInstance()->getOrigin() + vec_from_camera * ((LLViewerCamera::getInstance()->getNear() + 0.1f) / (vec_from_camera * LLViewerCamera::getInstance()->getAtAxis()));
+	}
+	else
+	{
+		mPositionAgent -= dir_from_camera * mSourceObject->getVObjRadius();
+	}
+
+	mLastDistance = (mPositionAgent - LLViewerCamera::getInstance()->getOrigin()).magVec();
+
+	if (mLOD >= 3 || !mTextSegments.size() || (mDoFade && (mLastDistance > mFadeDistance + mFadeRange)))
+	{
+		mVisible = FALSE;
+		return;
+	}
+
+	LLVector3 x_pixel_vec;
+	LLVector3 y_pixel_vec;
+
+	LLViewerCamera::getInstance()->getPixelVectors(mPositionAgent, y_pixel_vec, x_pixel_vec);
+
+	LLVector3 render_position = mPositionAgent + 			
+			(x_pixel_vec * mPositionOffset.mV[VX]) +
+			(y_pixel_vec * mPositionOffset.mV[VY]);
+
+	mOffscreen = FALSE;
+	if (!LLViewerCamera::getInstance()->sphereInFrustum(render_position, mRadius))
+	{
+		if (!mVisibleOffScreen)
+		{
+			mVisible = FALSE;
+			return;
+		}
+		else
+		{
+			mOffscreen = TRUE;
+		}
+	}
+
+	mVisible = TRUE;
+	sVisibleTextObjects.push_back(LLPointer<LLHUDNameTag> (this));
+}
+
+LLVector2 LLHUDNameTag::updateScreenPos(LLVector2 &offset)
+{
+	LLCoordGL screen_pos;
+	LLVector2 screen_pos_vec;
+	LLVector3 x_pixel_vec;
+	LLVector3 y_pixel_vec;
+	LLViewerCamera::getInstance()->getPixelVectors(mPositionAgent, y_pixel_vec, x_pixel_vec);
+	LLVector3 world_pos = mPositionAgent + (offset.mV[VX] * x_pixel_vec) + (offset.mV[VY] * y_pixel_vec);
+	if (!LLViewerCamera::getInstance()->projectPosAgentToScreen(world_pos, screen_pos, FALSE) && mVisibleOffScreen)
+	{
+		// bubble off-screen, so find a spot for it along screen edge
+		LLViewerCamera::getInstance()->projectPosAgentToScreenEdge(world_pos, screen_pos);
+	}
+
+	screen_pos_vec.setVec((F32)screen_pos.mX, (F32)screen_pos.mY);
+
+	LLRect world_rect = gViewerWindow->getWorldViewRectScaled();
+	S32 bottom = world_rect.mBottom + STATUS_BAR_HEIGHT;
+
+	LLVector2 screen_center;
+	screen_center.mV[VX] = llclamp((F32)screen_pos_vec.mV[VX], (F32)world_rect.mLeft + mWidth * 0.5f, (F32)world_rect.mRight - mWidth * 0.5f);
+
+	if(mVertAlignment == ALIGN_VERT_TOP)
+	{
+		screen_center.mV[VY] = llclamp((F32)screen_pos_vec.mV[VY], 
+			(F32)bottom, 
+			(F32)world_rect.mTop - mHeight - (F32)MENU_BAR_HEIGHT);
+		mSoftScreenRect.setLeftTopAndSize(screen_center.mV[VX] - (mWidth + BUFFER_SIZE) * 0.5f, 
+			screen_center.mV[VY] + (mHeight + BUFFER_SIZE), mWidth + BUFFER_SIZE, mHeight + BUFFER_SIZE);
+	}
+	else
+	{
+		screen_center.mV[VY] = llclamp((F32)screen_pos_vec.mV[VY], 
+			(F32)bottom + mHeight * 0.5f, 
+			(F32)world_rect.mTop - mHeight * 0.5f - (F32)MENU_BAR_HEIGHT);
+		mSoftScreenRect.setCenterAndSize(screen_center.mV[VX], screen_center.mV[VY], mWidth + BUFFER_SIZE, mHeight + BUFFER_SIZE);
+	}
+
+	return offset + (screen_center - LLVector2((F32)screen_pos.mX, (F32)screen_pos.mY));
+}
+
+void LLHUDNameTag::updateSize()
+{
+	F32 height = 0.f;
+	F32 width = 0.f;
+
+	S32 max_lines = getMaxLines();
+	//S32 lines = (max_lines < 0) ? (S32)mTextSegments.size() : llmin((S32)mTextSegments.size(), max_lines);
+	//F32 height = (F32)mFontp->getLineHeight() * (lines + mLabelSegments.size());
+
+	S32 start_segment;
+	if (max_lines < 0) start_segment = 0;
+	else start_segment = llmax((S32)0, (S32)mTextSegments.size() - max_lines);
+
+	std::vector<LLHUDTextSegment>::iterator iter = mTextSegments.begin() + start_segment;
+	while (iter != mTextSegments.end())
+	{
+		const LLFontGL* fontp = iter->mFont;
+		height += fontp->getLineHeight();
+		width = llmax(width, llmin(iter->getWidth(fontp), HUD_TEXT_MAX_WIDTH));
+		++iter;
+	}
+
+	iter = mLabelSegments.begin();
+	while (iter != mLabelSegments.end())
+	{
+		height += mFontp->getLineHeight();
+		width = llmax(width, llmin(iter->getWidth(mFontp), HUD_TEXT_MAX_WIDTH));
+		++iter;
+	}
+	
+	if (width == 0.f)
+	{
+		return;
+	}
+
+	width += HORIZONTAL_PADDING;
+	height += VERTICAL_PADDING;
+
+	if (!mResizeTimer.getStarted() && (width != mWidth || height != mHeight))
+	{
+		mResizeTimer.start();
+	}
+
+	// *NOTE: removed logic which did a divide by zero.
+	F32 u = 1.f;//llclamp(mResizeTimer.getElapsedTimeF32() / RESIZE_TIME, 0.f, 1.f);
+	if (u == 1.f)
+	{
+		mResizeTimer.stop();
+	}
+
+	mWidth = llmax(width, lerp(mWidth, (F32)width, u));
+	mHeight = llmax(height, lerp(mHeight, (F32)height, u));
+}
+
+void LLHUDNameTag::updateAll()
+{
+	// iterate over all text objects, calculate their restoration forces,
+	// and add them to the visible set if they are on screen and close enough
+	sVisibleTextObjects.clear();
+	
+	TextObjectIterator text_it;
+	for (text_it = sTextObjects.begin(); text_it != sTextObjects.end(); ++text_it)
+	{
+		LLHUDNameTag* textp = (*text_it);
+		textp->mTargetPositionOffset.clearVec();
+		textp->updateSize();
+		textp->updateVisibility();
+	}
+	
+	// sort back to front for rendering purposes
+	std::sort(sVisibleTextObjects.begin(), sVisibleTextObjects.end(), llhudnametag_further_away());
+
+	// iterate from front to back, and set LOD based on current screen coverage
+	F32 screen_area = (F32)(gViewerWindow->getWindowWidthScaled() * gViewerWindow->getWindowHeightScaled());
+	F32 current_screen_area = 0.f;
+	std::vector<LLPointer<LLHUDNameTag> >::reverse_iterator r_it;
+	for (r_it = sVisibleTextObjects.rbegin(); r_it != sVisibleTextObjects.rend(); ++r_it)
+	{
+		LLHUDNameTag* textp = (*r_it);
+//		if (textp->mUseBubble)
+//		{
+			if (current_screen_area / screen_area > LOD_2_SCREEN_COVERAGE)
+			{
+				textp->setLOD(3);
+			}
+			else if (current_screen_area / screen_area > LOD_1_SCREEN_COVERAGE)
+			{
+				textp->setLOD(2);
+			}
+			else if (current_screen_area / screen_area > LOD_0_SCREEN_COVERAGE)
+			{
+				textp->setLOD(1);
+			}
+			else
+			{
+				textp->setLOD(0);
+			}
+			textp->updateSize();
+			// find on-screen position and initialize collision rectangle
+			textp->mTargetPositionOffset = textp->updateScreenPos(LLVector2::zero);
+			current_screen_area += (F32)(textp->mSoftScreenRect.getWidth() * textp->mSoftScreenRect.getHeight());
+//		}
+	}
+
+	LLStat* camera_vel_stat = LLViewerCamera::getInstance()->getVelocityStat();
+	F32 camera_vel = camera_vel_stat->getCurrent();
+	if (camera_vel > MAX_STABLE_CAMERA_VELOCITY)
+	{
+		return;
+	}
+
+	VisibleTextObjectIterator src_it;
+
+	for (S32 i = 0; i < NUM_OVERLAP_ITERATIONS; i++)
+	{
+		for (src_it = sVisibleTextObjects.begin(); src_it != sVisibleTextObjects.end(); ++src_it)
+		{
+			LLHUDNameTag* src_textp = (*src_it);
+
+//			if (!src_textp->mUseBubble)
+//			{
+//				continue;
+//			}
+			VisibleTextObjectIterator dst_it = src_it;
+			++dst_it;
+			for (; dst_it != sVisibleTextObjects.end(); ++dst_it)
+			{
+				LLHUDNameTag* dst_textp = (*dst_it);
+
+//				if (!dst_textp->mUseBubble)
+//				{
+//					continue;
+//				}
+				if (src_textp->mSoftScreenRect.overlaps(dst_textp->mSoftScreenRect))
+				{
+					LLRectf intersect_rect = src_textp->mSoftScreenRect;
+					intersect_rect.intersectWith(dst_textp->mSoftScreenRect);
+					intersect_rect.stretch(-BUFFER_SIZE * 0.5f);
+					
+					F32 src_center_x = src_textp->mSoftScreenRect.getCenterX();
+					F32 src_center_y = src_textp->mSoftScreenRect.getCenterY();
+					F32 dst_center_x = dst_textp->mSoftScreenRect.getCenterX();
+					F32 dst_center_y = dst_textp->mSoftScreenRect.getCenterY();
+					F32 intersect_center_x = intersect_rect.getCenterX();
+					F32 intersect_center_y = intersect_rect.getCenterY();
+					LLVector2 force = lerp(LLVector2(dst_center_x - intersect_center_x, dst_center_y - intersect_center_y), 
+										LLVector2(intersect_center_x - src_center_x, intersect_center_y - src_center_y),
+										0.5f);
+					force.setVec(dst_center_x - src_center_x, dst_center_y - src_center_y);
+					force.normVec();
+
+					LLVector2 src_force = -1.f * force;
+					LLVector2 dst_force = force;
+
+					LLVector2 force_strength;
+					F32 src_mult = dst_textp->mMass / (dst_textp->mMass + src_textp->mMass); 
+					F32 dst_mult = 1.f - src_mult;
+					F32 src_aspect_ratio = src_textp->mSoftScreenRect.getWidth() / src_textp->mSoftScreenRect.getHeight();
+					F32 dst_aspect_ratio = dst_textp->mSoftScreenRect.getWidth() / dst_textp->mSoftScreenRect.getHeight();
+					src_force.mV[VY] *= src_aspect_ratio;
+					src_force.normVec();
+					dst_force.mV[VY] *= dst_aspect_ratio;
+					dst_force.normVec();
+
+					src_force.mV[VX] *= llmin(intersect_rect.getWidth() * src_mult, intersect_rect.getHeight() * SPRING_STRENGTH);
+					src_force.mV[VY] *= llmin(intersect_rect.getHeight() * src_mult, intersect_rect.getWidth() * SPRING_STRENGTH);
+					dst_force.mV[VX] *=  llmin(intersect_rect.getWidth() * dst_mult, intersect_rect.getHeight() * SPRING_STRENGTH);
+					dst_force.mV[VY] *=  llmin(intersect_rect.getHeight() * dst_mult, intersect_rect.getWidth() * SPRING_STRENGTH);
+					
+					src_textp->mTargetPositionOffset += src_force;
+					dst_textp->mTargetPositionOffset += dst_force;
+					src_textp->mTargetPositionOffset = src_textp->updateScreenPos(src_textp->mTargetPositionOffset);
+					dst_textp->mTargetPositionOffset = dst_textp->updateScreenPos(dst_textp->mTargetPositionOffset);
+				}
+			}
+		}
+	}
+
+	VisibleTextObjectIterator this_object_it;
+	for (this_object_it = sVisibleTextObjects.begin(); this_object_it != sVisibleTextObjects.end(); ++this_object_it)
+	{
+//		if (!(*this_object_it)->mUseBubble)
+//		{
+//			continue;
+//		}
+		(*this_object_it)->mPositionOffset = lerp((*this_object_it)->mPositionOffset, (*this_object_it)->mTargetPositionOffset, LLCriticalDamp::getInterpolant(POSITION_DAMPING_TC));
+	}
+}
+
+void LLHUDNameTag::setLOD(S32 lod)
+{
+	mLOD = lod;
+	//RN: uncomment this to visualize LOD levels
+	//std::string label = llformat("%d", lod);
+	//setLabel(label);
+}
+
+S32 LLHUDNameTag::getMaxLines()
+{
+	switch(mLOD)
+	{
+	case 0:
+		return mMaxLines;
+	case 1:
+		return mMaxLines > 0 ? mMaxLines / 2 : 5;
+	case 2:
+		return mMaxLines > 0 ? mMaxLines / 3 : 2;
+	default:
+		// label only
+		return 0;
+	}
+}
+
+void LLHUDNameTag::markDead()
+{
+	sTextObjects.erase(LLPointer<LLHUDNameTag>(this));
+	LLHUDObject::markDead();
+}
+
+void LLHUDNameTag::shiftAll(const LLVector3& offset)
+{
+	TextObjectIterator text_it;
+	for (text_it = sTextObjects.begin(); text_it != sTextObjects.end(); ++text_it)
+	{
+		LLHUDNameTag *textp = text_it->get();
+		textp->shift(offset);
+	}
+}
+
+void LLHUDNameTag::shift(const LLVector3& offset)
+{
+	mPositionAgent += offset;
+}
+
+//static 
+void LLHUDNameTag::addPickable(std::set<LLViewerObject*> &pick_list)
+{
+	//this might put an object on the pick list a second time, overriding it's mGLName, which is ok
+	// *FIX: we should probably cull against pick frustum
+	VisibleTextObjectIterator text_it;
+	for (text_it = sVisibleTextObjects.begin(); text_it != sVisibleTextObjects.end(); ++text_it)
+	{
+//		if (!(*text_it)->mUseBubble)
+//		{
+//			continue;
+//		}
+		pick_list.insert((*text_it)->mSourceObject);
+	}
+}
+
+//static
+// called when UI scale changes, to flush font width caches
+void LLHUDNameTag::reshape()
+{
+	TextObjectIterator text_it;
+	for (text_it = sTextObjects.begin(); text_it != sTextObjects.end(); ++text_it)
+	{
+		LLHUDNameTag* textp = (*text_it);
+		std::vector<LLHUDTextSegment>::iterator segment_iter; 
+		for (segment_iter = textp->mTextSegments.begin();
+			 segment_iter != textp->mTextSegments.end(); ++segment_iter )
+		{
+			segment_iter->clearFontWidthMap();
+		}
+		for(segment_iter = textp->mLabelSegments.begin();
+			segment_iter != textp->mLabelSegments.end(); ++segment_iter )
+		{
+			segment_iter->clearFontWidthMap();
+		}		
+	}
+}
+
+//============================================================================
+
+F32 LLHUDNameTag::LLHUDTextSegment::getWidth(const LLFontGL* font)
+{
+	std::map<const LLFontGL*, F32>::iterator iter = mFontWidthMap.find(font);
+	if (iter != mFontWidthMap.end())
+	{
+		return iter->second;
+	}
+	else
+	{
+		F32 width = font->getWidthF32(mText.c_str());
+		mFontWidthMap[font] = width;
+		return width;
+	}
+}
diff --git a/indra/newview/llhudnametag.h b/indra/newview/llhudnametag.h
new file mode 100644
index 0000000000..56b17bef6b
--- /dev/null
+++ b/indra/newview/llhudnametag.h
@@ -0,0 +1,195 @@
+/** 
+ * @file llhudnametag.h
+ * @brief Name tags for avatars
+ * @author James Cook
+ *
+ * $LicenseInfo:firstyear=2010&license=viewergpl$
+ * 
+ * Copyright (c) 2002-2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LLHUDNAMETAG_H
+#define LLHUDNAMETAG_H
+
+#include "llpointer.h"
+
+#include "llhudobject.h"
+#include "v4color.h"
+#include "v4coloru.h"
+#include "v2math.h"
+#include "llrect.h"
+#include "llframetimer.h"
+#include "llfontgl.h"
+#include <set>
+#include <vector>
+
+class LLDrawable;
+class LLHUDNameTag;
+
+struct llhudnametag_further_away
+{
+	bool operator()(const LLPointer<LLHUDNameTag>& lhs, const LLPointer<LLHUDNameTag>& rhs) const;
+};
+
+class LLHUDNameTag : public LLHUDObject
+{
+protected:
+	class LLHUDTextSegment
+	{
+	public:
+		LLHUDTextSegment(const LLWString& text, const LLFontGL::StyleFlags style, const LLColor4& color, const LLFontGL* font)
+		:	mColor(color),
+			mStyle(style),
+			mText(text),
+			mFont(font)
+		{}
+		F32 getWidth(const LLFontGL* font);
+		const LLWString& getText() const { return mText; }
+		void clearFontWidthMap() { mFontWidthMap.clear(); }
+		
+		LLColor4				mColor;
+		LLFontGL::StyleFlags	mStyle;
+		const LLFontGL*			mFont;
+	private:
+		LLWString				mText;
+		std::map<const LLFontGL*, F32> mFontWidthMap;
+	};
+
+public:
+	typedef enum e_text_alignment
+	{
+		ALIGN_TEXT_LEFT,
+		ALIGN_TEXT_CENTER
+	} ETextAlignment;
+
+	typedef enum e_vert_alignment
+	{
+		ALIGN_VERT_TOP,
+		ALIGN_VERT_CENTER
+	} EVertAlignment;
+
+public:
+	// Set entire string, eliminating existing lines
+	void setString(const std::string& text_utf8);
+
+	void clearString();
+
+	// Add text a line at a time, allowing custom formatting
+	void addLine(const std::string &text_utf8, const LLColor4& color, const LLFontGL::StyleFlags style = LLFontGL::NORMAL, const LLFontGL* font = NULL);
+
+	// For bubble chat, set the part above the chat text
+	void setLabel(const std::string& label_utf8);
+	void addLabel(const std::string& label_utf8);
+
+	void setDropShadow(const BOOL do_shadow);
+
+	// Sets the default font for lines with no font specified
+	void setFont(const LLFontGL* font);
+	void setColor(const LLColor4 &color);
+	void setAlpha(F32 alpha);
+	void setZCompare(const BOOL zcompare);
+	void setDoFade(const BOOL do_fade);
+	void setVisibleOffScreen(BOOL visible) { mVisibleOffScreen = visible; }
+	
+	// mMaxLines of -1 means unlimited lines.
+	void setMaxLines(S32 max_lines) { mMaxLines = max_lines; }
+	void setFadeDistance(F32 fade_distance, F32 fade_range) { mFadeDistance = fade_distance; mFadeRange = fade_range; }
+	void updateVisibility();
+	LLVector2 updateScreenPos(LLVector2 &offset_target);
+	void updateSize();
+	void setMass(F32 mass) { mMass = llmax(0.1f, mass); }
+	void setTextAlignment(ETextAlignment alignment) { mTextAlignment = alignment; }
+	void setVertAlignment(EVertAlignment alignment) { mVertAlignment = alignment; }
+	/*virtual*/ void markDead();
+	friend class LLHUDObject;
+	/*virtual*/ F32 getDistance() const { return mLastDistance; }
+	//void setUseBubble(BOOL use_bubble) { mUseBubble = use_bubble; }
+	S32  getLOD() { return mLOD; }
+	BOOL getVisible() { return mVisible; }
+	BOOL getHidden() const { return mHidden; }
+	void setHidden( BOOL hide ) { mHidden = hide; }
+	void shift(const LLVector3& offset);
+
+	BOOL lineSegmentIntersect(const LLVector3& start, const LLVector3& end, LLVector3& intersection, BOOL debug_render = FALSE);
+
+	static void shiftAll(const LLVector3& offset);
+	static void addPickable(std::set<LLViewerObject*> &pick_list);
+	static void reshape();
+	static void setDisplayText(BOOL flag) { sDisplayText = flag ; }
+
+protected:
+	LLHUDNameTag(const U8 type);
+
+	/*virtual*/ void render();
+	/*virtual*/ void renderForSelect();
+	void renderText(BOOL for_select);
+	static void updateAll();
+	void setLOD(S32 lod);
+	S32 getMaxLines();
+
+private:
+	~LLHUDNameTag();
+	//BOOL			mUseBubble;		always true
+	BOOL			mDropShadow;
+	BOOL			mDoFade;
+	F32				mFadeRange;
+	F32				mFadeDistance;
+	F32				mLastDistance;
+	BOOL			mZCompare;
+	BOOL			mVisibleOffScreen;
+	BOOL			mOffscreen;
+	LLColor4		mColor;
+	LLVector3		mScale;
+	F32				mWidth;
+	F32				mHeight;
+	LLColor4U		mPickColor;
+	const LLFontGL*	mFontp;
+	const LLFontGL*	mBoldFontp;
+	LLRectf			mSoftScreenRect;
+	LLVector3		mPositionAgent;
+	LLVector2		mPositionOffset;
+	LLVector2		mTargetPositionOffset;
+	F32				mMass;
+	S32				mMaxLines;
+	S32				mOffsetY;
+	F32				mRadius;
+	std::vector<LLHUDTextSegment> mTextSegments;
+	std::vector<LLHUDTextSegment> mLabelSegments;
+	LLFrameTimer	mResizeTimer;
+	ETextAlignment	mTextAlignment;
+	EVertAlignment	mVertAlignment;
+	S32				mLOD;
+	BOOL			mHidden;
+
+	static BOOL    sDisplayText ;
+	static std::set<LLPointer<LLHUDNameTag> > sTextObjects;
+	static std::vector<LLPointer<LLHUDNameTag> > sVisibleTextObjects;
+	static std::vector<LLPointer<LLHUDNameTag> > sVisibleHUDTextObjects;
+	typedef std::set<LLPointer<LLHUDNameTag> >::iterator TextObjectIterator;
+	typedef std::vector<LLPointer<LLHUDNameTag> >::iterator VisibleTextObjectIterator;
+};
+
+#endif
diff --git a/indra/newview/llhudobject.cpp b/indra/newview/llhudobject.cpp
index dc55aba0db..73fa987f3b 100644
--- a/indra/newview/llhudobject.cpp
+++ b/indra/newview/llhudobject.cpp
@@ -30,9 +30,6 @@
  * $/LicenseInfo$
  */
 
-// llhudobject.cpp
-// Copyright 2002, Linden Research, Inc.
-
 #include "llviewerprecompiledheaders.h"
 
 #include "llhudobject.h"
@@ -43,7 +40,7 @@
 #include "llhudeffectbeam.h"
 #include "llhudeffecttrail.h"
 #include "llhudeffectlookat.h"
-
+#include "llhudnametag.h"
 #include "llvoicevisualizer.h"
 
 #include "llagent.h"
@@ -71,7 +68,6 @@ LLHUDObject::LLHUDObject(const U8 type) :
 	mVisible = TRUE;
 	mType = type;
 	mDead = FALSE;
-	mOnHUDAttachment = FALSE;
 }
 
 LLHUDObject::~LLHUDObject()
@@ -150,6 +146,9 @@ LLHUDObject *LLHUDObject::addHUDObject(const U8 type)
 	case LL_HUD_ICON:
 		hud_objectp = new LLHUDIcon(type);
 		break;
+	case LL_HUD_NAME_TAG:
+		hud_objectp = new LLHUDNameTag(type);
+		break;
 	default:
 		llwarns << "Unknown type of hud object:" << (U32) type << llendl;
 	}
@@ -262,6 +261,7 @@ void LLHUDObject::updateAll()
 	LLFastTimer ftm(FTM_HUD_UPDATE);
 	LLHUDText::updateAll();
 	LLHUDIcon::updateAll();
+	LLHUDNameTag::updateAll();
 	sortObjects();
 }
 
@@ -309,6 +309,14 @@ void LLHUDObject::renderAllForSelect()
 	}
 }
 
+// static
+void LLHUDObject::reshapeAll()
+{
+	// only hud objects that use fonts care about window size/scale changes
+	LLHUDText::reshape();
+	LLHUDNameTag::reshape();
+}
+
 // static
 void LLHUDObject::sortObjects()
 {
diff --git a/indra/newview/llhudobject.h b/indra/newview/llhudobject.h
index 6b70d1922c..a370b31a20 100644
--- a/indra/newview/llhudobject.h
+++ b/indra/newview/llhudobject.h
@@ -76,6 +76,9 @@ public:
 	static void renderAll();
 	static void renderAllForSelect();
 
+	// Some objects may need to update when window shape changes
+	static void reshapeAll();
+
 	static void cleanupHUDObjects();
 
 	enum
@@ -96,7 +99,8 @@ public:
 		LL_HUD_EFFECT_EDIT,
 		LL_HUD_EFFECT_LOOKAT,
 		LL_HUD_EFFECT_POINTAT,
-		LL_HUD_EFFECT_VOICE_VISUALIZER	// Ventrella
+		LL_HUD_EFFECT_VOICE_VISUALIZER,	// Ventrella
+		LL_HUD_NAME_TAG
 	};
 protected:
 	static void sortObjects();
@@ -112,7 +116,6 @@ protected:
 	BOOL			mDead;
 	BOOL			mVisible;
 	LLVector3d		mPositionGlobal;
-	BOOL			mOnHUDAttachment;
 	LLPointer<LLViewerObject> mSourceObject;
 	LLPointer<LLViewerObject> mTargetObject;
 
diff --git a/indra/newview/llhudtext.cpp b/indra/newview/llhudtext.cpp
index b14753ff2a..406ad8c51e 100644
--- a/indra/newview/llhudtext.cpp
+++ b/indra/newview/llhudtext.cpp
@@ -62,7 +62,7 @@ const F32 HORIZONTAL_PADDING = 15.f;
 const F32 VERTICAL_PADDING = 12.f;
 const F32 BUFFER_SIZE = 2.f;
 const F32 MIN_EDGE_OVERLAP = 3.f;
-F32 HUD_TEXT_MAX_WIDTH = 190.f;
+const F32 HUD_TEXT_MAX_WIDTH = 190.f;
 const F32 HUD_TEXT_MAX_WIDTH_NO_BUBBLE = 1000.f;
 const F32 RESIZE_TIME = 0.f;
 const S32 NUM_OVERLAP_ITERATIONS = 10;
@@ -80,13 +80,13 @@ BOOL LLHUDText::sDisplayText = TRUE ;
 
 bool lltextobject_further_away::operator()(const LLPointer<LLHUDText>& lhs, const LLPointer<LLHUDText>& rhs) const
 {
-	return (lhs->getDistance() > rhs->getDistance()) ? true : false;
+	return lhs->getDistance() > rhs->getDistance();
 }
 
 
 LLHUDText::LLHUDText(const U8 type) :
 			LLHUDObject(type),
-			mUseBubble(FALSE),
+			mOnHUDAttachment(FALSE),
 			mVisibleOffScreen(FALSE),
 			mWidth(0.f),
 			mHeight(0.f),
@@ -116,112 +116,6 @@ LLHUDText::~LLHUDText()
 {
 }
 
-
-BOOL LLHUDText::lineSegmentIntersect(const LLVector3& start, const LLVector3& end, LLVector3& intersection, BOOL debug_render)
-{
-	if (!mVisible || mHidden)
-	{
-		return FALSE;
-	}
-
-	// don't pick text that isn't bound to a viewerobject or isn't in a bubble
-	if (!mSourceObject || mSourceObject->mDrawable.isNull() || !mUseBubble)
-	{
-		return FALSE;
-	}
-	
-	F32 alpha_factor = 1.f;
-	LLColor4 text_color = mColor;
-	if (mDoFade)
-	{
-		if (mLastDistance > mFadeDistance)
-		{
-			alpha_factor = llmax(0.f, 1.f - (mLastDistance - mFadeDistance)/mFadeRange);
-			text_color.mV[3] = text_color.mV[3]*alpha_factor;
-		}
-	}
-	if (text_color.mV[3] < 0.01f)
-	{
-		return FALSE;
-	}
-
-	mOffsetY = lltrunc(mHeight * ((mVertAlignment == ALIGN_VERT_CENTER) ? 0.5f : 1.f));
-
-	// scale screen size of borders down
-	//RN: for now, text on hud objects is never occluded
-
-	LLVector3 x_pixel_vec;
-	LLVector3 y_pixel_vec;
-	
-	if (mOnHUDAttachment)
-	{
-		x_pixel_vec = LLVector3::y_axis / (F32)gViewerWindow->getWindowWidthScaled();
-		y_pixel_vec = LLVector3::z_axis / (F32)gViewerWindow->getWindowHeightScaled();
-	}
-	else
-	{
-		LLViewerCamera::getInstance()->getPixelVectors(mPositionAgent, y_pixel_vec, x_pixel_vec);
-	}
-
-	LLVector3 width_vec = mWidth * x_pixel_vec;
-	LLVector3 height_vec = mHeight * y_pixel_vec;
-	
-	LLCoordGL screen_pos;
-	LLViewerCamera::getInstance()->projectPosAgentToScreen(mPositionAgent, screen_pos, FALSE);
-
-	LLVector2 screen_offset;
-	screen_offset = updateScreenPos(mPositionOffset);
-	
-	LLVector3 render_position = mPositionAgent  
-			+ (x_pixel_vec * screen_offset.mV[VX])
-			+ (y_pixel_vec * screen_offset.mV[VY]);
-
-
-	if (mUseBubble)
-	{
-		LLVector3 bg_pos = render_position
-			+ (F32)mOffsetY * y_pixel_vec
-			- (width_vec / 2.f)
-			- (height_vec);
-		//LLUI::translate(bg_pos.mV[VX], bg_pos.mV[VY], bg_pos.mV[VZ]);
-
-		LLVector3 v[] = 
-		{
-			bg_pos,
-			bg_pos + width_vec,
-			bg_pos + width_vec + height_vec,
-			bg_pos + height_vec,
-		};
-
-		if (debug_render)
-		{
-			gGL.begin(LLRender::LINE_STRIP);
-			gGL.vertex3fv(v[0].mV);
-			gGL.vertex3fv(v[1].mV);
-			gGL.vertex3fv(v[2].mV);
-			gGL.vertex3fv(v[3].mV);
-			gGL.vertex3fv(v[0].mV);
-			gGL.vertex3fv(v[2].mV);
-			gGL.end();
-		}
-
-		LLVector3 dir = end-start;
-		F32 t = 0.f;
-
-		if (LLTriangleRayIntersect(v[0], v[1], v[2], start, dir, NULL, NULL, &t, FALSE) ||
-			LLTriangleRayIntersect(v[2], v[3], v[0], start, dir, NULL, NULL, &t, FALSE) )
-		{
-			if (t <= 1.f)
-			{
-				intersection = start + dir*t;
-				return TRUE;
-			}
-		}
-	}
-
-	return FALSE;
-}
-
 void LLHUDText::render()
 {
 	if (!mOnHUDAttachment && sDisplayText)
@@ -247,21 +141,13 @@ void LLHUDText::renderText(BOOL for_select)
 		return;
 	}
 
-	// don't pick text that isn't bound to a viewerobject or isn't in a bubble
-	if (for_select && 
-		(!mSourceObject || mSourceObject->mDrawable.isNull() || !mUseBubble))
+	// don't pick text
+	if (for_select)
 	{
 		return;
 	}
 	
-	if (for_select)
-	{
-		gGL.getTexUnit(0)->disable();
-	}
-	else
-	{
-		gGL.getTexUnit(0)->enable(LLTexUnit::TT_TEXTURE);
-	}
+	gGL.getTexUnit(0)->enable(LLTexUnit::TT_TEXTURE);
 
 	LLGLState gls_blend(GL_BLEND, for_select ? FALSE : TRUE);
 	LLGLState gls_alpha(GL_ALPHA_TEST, for_select ? FALSE : TRUE);
@@ -335,152 +221,12 @@ void LLHUDText::renderText(BOOL for_select)
 	LLViewerCamera::getInstance()->projectPosAgentToScreen(mPositionAgent, screen_pos, FALSE);
 
 	LLVector2 screen_offset;
-	if (!mUseBubble)
-	{
-		screen_offset = mPositionOffset;
-	}
-	else
-	{
-		screen_offset = updateScreenPos(mPositionOffset);
-	}
+	screen_offset = mPositionOffset;
 
 	LLVector3 render_position = mPositionAgent  
 			+ (x_pixel_vec * screen_offset.mV[VX])
 			+ (y_pixel_vec * screen_offset.mV[VY]);
 
-	//if (mOnHUD)
-	//{
-	//	render_position.mV[VY] -= fmodf(render_position.mV[VY], 1.f / (F32)gViewerWindow->getWindowWidthScaled());
-	//	render_position.mV[VZ] -= fmodf(render_position.mV[VZ], 1.f / (F32)gViewerWindow->getWindowHeightScaled());
-	//}
-	//else
-	//{
-	//	render_position = LLViewerCamera::getInstance()->roundToPixel(render_position);
-	//}
-
-	if (mUseBubble)
-	{
-		LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE);
-		LLUI::pushMatrix();
-		{
-			LLVector3 bg_pos = render_position
-				+ (F32)mOffsetY * y_pixel_vec
-				- (width_vec / 2.f)
-				- (height_vec);
-			LLUI::translate(bg_pos.mV[VX], bg_pos.mV[VY], bg_pos.mV[VZ]);
-
-			if (for_select)
-			{
-				gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
-				S32 name = mSourceObject->mGLName;
-				LLColor4U coloru((U8)(name >> 16), (U8)(name >> 8), (U8)name);
-				gGL.color4ubv(coloru.mV);
-				gl_segmented_rect_3d_tex(border_scale_vec, scaled_border_width, scaled_border_height, width_vec, height_vec);
-				LLUI::popMatrix();
-				return;
-			}
-			else
-			{
-				gGL.getTexUnit(0)->bind(imagep->getImage());
-				
-				gGL.color4fv(bg_color.mV);
-				gl_segmented_rect_3d_tex(border_scale_vec, scaled_border_width, scaled_border_height, width_vec, height_vec);
-		
-				if ( mLabelSegments.size())
-				{
-					LLUI::pushMatrix();
-					{
-						gGL.color4f(text_color.mV[VX], text_color.mV[VY], text_color.mV[VZ], gSavedSettings.getF32("ChatBubbleOpacity") * alpha_factor);
-						LLVector3 label_height = (mFontp->getLineHeight() * mLabelSegments.size() + (VERTICAL_PADDING / 3.f)) * y_pixel_vec;
-						LLVector3 label_offset = height_vec - label_height;
-						LLUI::translate(label_offset.mV[VX], label_offset.mV[VY], label_offset.mV[VZ]);
-						gl_segmented_rect_3d_tex_top(border_scale_vec, scaled_border_width, scaled_border_height, width_vec, label_height);
-					}
-					LLUI::popMatrix();
-				}
-			}
-
-			BOOL outside_width = llabs(mPositionOffset.mV[VX]) > mWidth * 0.5f;
-			BOOL outside_height = llabs(mPositionOffset.mV[VY] + (mVertAlignment == ALIGN_VERT_TOP ? mHeight * 0.5f : 0.f)) > mHeight * (mVertAlignment == ALIGN_VERT_TOP ? mHeight * 0.75f : 0.5f);
-
-			// draw line segments pointing to parent object
-			if (!mOffscreen && (outside_width || outside_height))
-			{
-				LLUI::pushMatrix();
-				{
-					gGL.color4fv(bg_color.mV);
-					LLVector3 target_pos = -1.f * (mPositionOffset.mV[VX] * x_pixel_vec + mPositionOffset.mV[VY] * y_pixel_vec);
-					target_pos += (width_vec / 2.f);
-					target_pos += mVertAlignment == ALIGN_VERT_CENTER ? (height_vec * 0.5f) : LLVector3::zero;
-					target_pos -= 3.f * x_pixel_vec;
-					target_pos -= 6.f * y_pixel_vec;
-					LLUI::translate(target_pos.mV[VX], target_pos.mV[VY], target_pos.mV[VZ]);
-					gl_segmented_rect_3d_tex(border_scale_vec, 3.f * x_pixel_vec, 3.f * y_pixel_vec, 6.f * x_pixel_vec, 6.f * y_pixel_vec);	
-				}
-				LLUI::popMatrix();
-
-				gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
-				LLGLDepthTest gls_depth(mZCompare ? GL_TRUE : GL_FALSE, GL_FALSE);
-				
-				LLVector3 box_center_offset;
-				box_center_offset = (width_vec * 0.5f) + (height_vec * 0.5f);
-				LLUI::translate(box_center_offset.mV[VX], box_center_offset.mV[VY], box_center_offset.mV[VZ]);
-				gGL.color4fv(bg_color.mV);
-				LLUI::setLineWidth(2.0);
-				gGL.begin(LLRender::LINES);
-				{
-					if (outside_width)
-					{
-						LLVector3 vert;
-						// draw line in x then y
-						if (mPositionOffset.mV[VX] < 0.f)
-						{
-							// start at right edge
-							vert = width_vec * 0.5f;
-							gGL.vertex3fv(vert.mV);
-						}
-						else
-						{
-							// start at left edge
-							vert = width_vec * -0.5f;
-							gGL.vertex3fv(vert.mV);
-						}
-						vert = -mPositionOffset.mV[VX] * x_pixel_vec;
-						gGL.vertex3fv(vert.mV);
-						gGL.vertex3fv(vert.mV);
-						vert -= mPositionOffset.mV[VY] * y_pixel_vec;
-						vert -= ((mVertAlignment == ALIGN_VERT_TOP) ? (height_vec * 0.5f) : LLVector3::zero);
-						gGL.vertex3fv(vert.mV);
-					}
-					else
-					{
-						LLVector3 vert;
-						// draw line in y then x
-						if (mPositionOffset.mV[VY] < 0.f)
-						{
-							// start at top edge
-							vert = (height_vec * 0.5f) - (mPositionOffset.mV[VX] * x_pixel_vec);
-							gGL.vertex3fv(vert.mV);
-						}
-						else
-						{
-							// start at bottom edge
-							vert = (height_vec * -0.5f)  - (mPositionOffset.mV[VX] * x_pixel_vec);
-							gGL.vertex3fv(vert.mV);
-						}
-						vert = -mPositionOffset.mV[VY] * y_pixel_vec - mPositionOffset.mV[VX] * x_pixel_vec;
-						vert -= ((mVertAlignment == ALIGN_VERT_TOP) ? (height_vec * 0.5f) : LLVector3::zero);
-						gGL.vertex3fv(vert.mV);
-					}
-				}
-				gGL.end();
-				LLUI::setLineWidth(1.0);
-
-			}
-		}
-		LLUI::popMatrix();
-	}
-
 	F32 y_offset = (F32)mOffsetY;
 		
 	// Render label
@@ -556,10 +302,6 @@ void LLHUDText::renderText(BOOL for_select)
 	}
 	/// Reset the default color to white.  The renderer expects this to be the default. 
 	gGL.color4f(1.0f, 1.0f, 1.0f, 1.0f);
-	if (for_select)
-	{
-		gGL.getTexUnit(0)->enable(LLTexUnit::TT_TEXTURE);
-	}
 }
 
 void LLHUDText::setString(const std::string &text_utf8)
@@ -599,7 +341,7 @@ void LLHUDText::addLine(const std::string &text_utf8,
 			U32 line_length = 0;
 			do	
 			{
-				F32 max_pixels = (mUseBubble ? HUD_TEXT_MAX_WIDTH : HUD_TEXT_MAX_WIDTH_NO_BUBBLE);
+				F32 max_pixels = HUD_TEXT_MAX_WIDTH_NO_BUBBLE;
 				S32 segment_length = font->maxDrawableChars(iter->substr(line_length).c_str(), max_pixels, wline.length(), LLFontGL::WORD_BOUNDARY_IF_POSSIBLE);
 				LLHUDTextSegment segment(iter->substr(line_length, segment_length), style, color, font);
 				mTextSegments.push_back(segment);
@@ -611,42 +353,6 @@ void LLHUDText::addLine(const std::string &text_utf8,
 	}
 }
 
-void LLHUDText::setLabel(const std::string &label_utf8)
-{
-	mLabelSegments.clear();
-	addLabel(label_utf8);
-}
-
-void LLHUDText::addLabel(const std::string& label_utf8)
-{
-	LLWString wstr = utf8string_to_wstring(label_utf8);
-	if (!wstr.empty())
-	{
-		LLWString seps(utf8str_to_wstring("\r\n"));
-		LLWString empty;
-
-		typedef boost::tokenizer<boost::char_separator<llwchar>, LLWString::const_iterator, LLWString > tokenizer;
-		boost::char_separator<llwchar> sep(seps.c_str(), empty.c_str(), boost::keep_empty_tokens);
-
-		tokenizer tokens(wstr, sep);
-		tokenizer::iterator iter = tokens.begin();
-
-		while (iter != tokens.end())
-		{
-			U32 line_length = 0;
-			do	
-			{
-				S32 segment_length = mFontp->maxDrawableChars(iter->substr(line_length).c_str(), mUseBubble ? HUD_TEXT_MAX_WIDTH : HUD_TEXT_MAX_WIDTH_NO_BUBBLE, wstr.length(), LLFontGL::WORD_BOUNDARY_IF_POSSIBLE);
-				LLHUDTextSegment segment(iter->substr(line_length, segment_length), LLFontGL::NORMAL, mColor, mFontp);
-				mLabelSegments.push_back(segment);
-				line_length += segment_length;
-			}
-			while (line_length != iter->size());
-			++iter;
-		}
-	}
-}
-
 void LLHUDText::setDropShadow(const BOOL do_shadow)
 {
 	mDropShadow = do_shadow;
@@ -898,122 +604,6 @@ void LLHUDText::updateAll()
 	// sort back to front for rendering purposes
 	std::sort(sVisibleTextObjects.begin(), sVisibleTextObjects.end(), lltextobject_further_away());
 	std::sort(sVisibleHUDTextObjects.begin(), sVisibleHUDTextObjects.end(), lltextobject_further_away());
-
-	// iterate from front to back, and set LOD based on current screen coverage
-	F32 screen_area = (F32)(gViewerWindow->getWindowWidthScaled() * gViewerWindow->getWindowHeightScaled());
-	F32 current_screen_area = 0.f;
-	std::vector<LLPointer<LLHUDText> >::reverse_iterator r_it;
-	for (r_it = sVisibleTextObjects.rbegin(); r_it != sVisibleTextObjects.rend(); ++r_it)
-	{
-		LLHUDText* textp = (*r_it);
-		if (textp->mUseBubble)
-		{
-			if (current_screen_area / screen_area > LOD_2_SCREEN_COVERAGE)
-			{
-				textp->setLOD(3);
-			}
-			else if (current_screen_area / screen_area > LOD_1_SCREEN_COVERAGE)
-			{
-				textp->setLOD(2);
-			}
-			else if (current_screen_area / screen_area > LOD_0_SCREEN_COVERAGE)
-			{
-				textp->setLOD(1);
-			}
-			else
-			{
-				textp->setLOD(0);
-			}
-			textp->updateSize();
-			// find on-screen position and initialize collision rectangle
-			textp->mTargetPositionOffset = textp->updateScreenPos(LLVector2::zero);
-			current_screen_area += (F32)(textp->mSoftScreenRect.getWidth() * textp->mSoftScreenRect.getHeight());
-		}
-	}
-
-	LLStat* camera_vel_stat = LLViewerCamera::getInstance()->getVelocityStat();
-	F32 camera_vel = camera_vel_stat->getCurrent();
-	if (camera_vel > MAX_STABLE_CAMERA_VELOCITY)
-	{
-		return;
-	}
-
-	VisibleTextObjectIterator src_it;
-
-	for (S32 i = 0; i < NUM_OVERLAP_ITERATIONS; i++)
-	{
-		for (src_it = sVisibleTextObjects.begin(); src_it != sVisibleTextObjects.end(); ++src_it)
-		{
-			LLHUDText* src_textp = (*src_it);
-
-			if (!src_textp->mUseBubble)
-			{
-				continue;
-			}
-			VisibleTextObjectIterator dst_it = src_it;
-			++dst_it;
-			for (; dst_it != sVisibleTextObjects.end(); ++dst_it)
-			{
-				LLHUDText* dst_textp = (*dst_it);
-
-				if (!dst_textp->mUseBubble)
-				{
-					continue;
-				}
-				if (src_textp->mSoftScreenRect.overlaps(dst_textp->mSoftScreenRect))
-				{
-					LLRectf intersect_rect = src_textp->mSoftScreenRect;
-					intersect_rect.intersectWith(dst_textp->mSoftScreenRect);
-					intersect_rect.stretch(-BUFFER_SIZE * 0.5f);
-					
-					F32 src_center_x = src_textp->mSoftScreenRect.getCenterX();
-					F32 src_center_y = src_textp->mSoftScreenRect.getCenterY();
-					F32 dst_center_x = dst_textp->mSoftScreenRect.getCenterX();
-					F32 dst_center_y = dst_textp->mSoftScreenRect.getCenterY();
-					F32 intersect_center_x = intersect_rect.getCenterX();
-					F32 intersect_center_y = intersect_rect.getCenterY();
-					LLVector2 force = lerp(LLVector2(dst_center_x - intersect_center_x, dst_center_y - intersect_center_y), 
-										LLVector2(intersect_center_x - src_center_x, intersect_center_y - src_center_y),
-										0.5f);
-					force.setVec(dst_center_x - src_center_x, dst_center_y - src_center_y);
-					force.normVec();
-
-					LLVector2 src_force = -1.f * force;
-					LLVector2 dst_force = force;
-
-					LLVector2 force_strength;
-					F32 src_mult = dst_textp->mMass / (dst_textp->mMass + src_textp->mMass); 
-					F32 dst_mult = 1.f - src_mult;
-					F32 src_aspect_ratio = src_textp->mSoftScreenRect.getWidth() / src_textp->mSoftScreenRect.getHeight();
-					F32 dst_aspect_ratio = dst_textp->mSoftScreenRect.getWidth() / dst_textp->mSoftScreenRect.getHeight();
-					src_force.mV[VY] *= src_aspect_ratio;
-					src_force.normVec();
-					dst_force.mV[VY] *= dst_aspect_ratio;
-					dst_force.normVec();
-
-					src_force.mV[VX] *= llmin(intersect_rect.getWidth() * src_mult, intersect_rect.getHeight() * SPRING_STRENGTH);
-					src_force.mV[VY] *= llmin(intersect_rect.getHeight() * src_mult, intersect_rect.getWidth() * SPRING_STRENGTH);
-					dst_force.mV[VX] *=  llmin(intersect_rect.getWidth() * dst_mult, intersect_rect.getHeight() * SPRING_STRENGTH);
-					dst_force.mV[VY] *=  llmin(intersect_rect.getHeight() * dst_mult, intersect_rect.getWidth() * SPRING_STRENGTH);
-					
-					src_textp->mTargetPositionOffset += src_force;
-					dst_textp->mTargetPositionOffset += dst_force;
-					src_textp->mTargetPositionOffset = src_textp->updateScreenPos(src_textp->mTargetPositionOffset);
-					dst_textp->mTargetPositionOffset = dst_textp->updateScreenPos(dst_textp->mTargetPositionOffset);
-				}
-			}
-		}
-	}
-
-	VisibleTextObjectIterator this_object_it;
-	for (this_object_it = sVisibleTextObjects.begin(); this_object_it != sVisibleTextObjects.end(); ++this_object_it)
-	{
-		if (!(*this_object_it)->mUseBubble)
-		{
-			continue;
-		}
-		(*this_object_it)->mPositionOffset = lerp((*this_object_it)->mPositionOffset, (*this_object_it)->mTargetPositionOffset, LLCriticalDamp::getInterpolant(POSITION_DAMPING_TC));
-	}
 }
 
 void LLHUDText::setLOD(S32 lod)
@@ -1088,22 +678,6 @@ void LLHUDText::shift(const LLVector3& offset)
 	mPositionAgent += offset;
 }
 
-//static 
-void LLHUDText::addPickable(std::set<LLViewerObject*> &pick_list)
-{
-	//this might put an object on the pick list a second time, overriding it's mGLName, which is ok
-	// *FIX: we should probably cull against pick frustum
-	VisibleTextObjectIterator text_it;
-	for (text_it = sVisibleTextObjects.begin(); text_it != sVisibleTextObjects.end(); ++text_it)
-	{
-		if (!(*text_it)->mUseBubble)
-		{
-			continue;
-		}
-		pick_list.insert((*text_it)->mSourceObject);
-	}
-}
-
 //static
 // called when UI scale changes, to flush font width caches
 void LLHUDText::reshape()
diff --git a/indra/newview/llhudtext.h b/indra/newview/llhudtext.h
index 8219358cc1..3acd2934e1 100644
--- a/indra/newview/llhudtext.h
+++ b/indra/newview/llhudtext.h
@@ -92,15 +92,17 @@ public:
 	} EVertAlignment;
 
 public:
+	// Set entire string, eliminating existing lines
 	void setString(const std::string& text_utf8);
-//	void setString(const LLWString &wstring);
+
 	void clearString();
+
+	// Add text a line at a time, allowing custom formatting
 	void addLine(const std::string &text_utf8, const LLColor4& color, const LLFontGL::StyleFlags style = LLFontGL::NORMAL, const LLFontGL* font = NULL);
-//	void addLine(const LLWString &wtext, const LLColor4& color, const LLFontGL::StyleFlags style = LLFontGL::NORMAL, const LLFontGL* font = NULL);
-	void setLabel(const std::string& label_utf8);
-//	void setLabel(const LLWString &label);
-	void addLabel(const std::string& label_utf8);
+
 	void setDropShadow(const BOOL do_shadow);
+
+	// Sets the default font for lines with no font specified
 	void setFont(const LLFontGL* font);
 	void setColor(const LLColor4 &color);
 	void setAlpha(F32 alpha);
@@ -120,7 +122,6 @@ public:
 	/*virtual*/ void markDead();
 	friend class LLHUDObject;
 	/*virtual*/ F32 getDistance() const { return mLastDistance; }
-	void setUseBubble(BOOL use_bubble) { mUseBubble = use_bubble; }
 	S32  getLOD() { return mLOD; }
 	BOOL getVisible() { return mVisible; }
 	BOOL getHidden() const { return mHidden; }
@@ -128,13 +129,11 @@ public:
 	void setOnHUDAttachment(BOOL on_hud) { mOnHUDAttachment = on_hud; }
 	void shift(const LLVector3& offset);
 
-	BOOL lineSegmentIntersect(const LLVector3& start, const LLVector3& end, LLVector3& intersection, BOOL debug_render = FALSE);
-
 	static void shiftAll(const LLVector3& offset);
 	static void renderAllHUD();
-	static void addPickable(std::set<LLViewerObject*> &pick_list);
 	static void reshape();
 	static void setDisplayText(BOOL flag) { sDisplayText = flag ; }
+
 protected:
 	LLHUDText(const U8 type);
 
@@ -147,8 +146,8 @@ protected:
 
 private:
 	~LLHUDText();
-	BOOL			mOnHUD;
-	BOOL			mUseBubble;
+	BOOL			mOnHUDAttachment;
+//	BOOL			mUseBubble;
 	BOOL			mDropShadow;
 	BOOL			mDoFade;
 	F32				mFadeRange;
diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp
index 6347090f71..d920e96ded 100644
--- a/indra/newview/llviewerobjectlist.cpp
+++ b/indra/newview/llviewerobjectlist.cpp
@@ -52,7 +52,7 @@
 #include "lltooltip.h"
 #include "llworld.h"
 #include "llstring.h"
-#include "llhudtext.h"
+#include "llhudnametag.h"
 #include "lldrawable.h"
 #include "xform.h"
 #include "llsky.h"
@@ -1193,7 +1193,7 @@ void LLViewerObjectList::generatePickList(LLCamera &camera)
 			}
 		}
 
-		LLHUDText::addPickable(mSelectPickList);
+		LLHUDNameTag::addPickable(mSelectPickList);
 
 		for (std::vector<LLCharacter*>::iterator iter = LLCharacter::sInstances.begin();
 			iter != LLCharacter::sInstances.end(); ++iter)
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index ea1afafe85..16b8711561 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -120,6 +120,7 @@
 #include "llglheaders.h"
 #include "lltooltip.h"
 #include "llhudmanager.h"
+#include "llhudobject.h"
 #include "llhudview.h"
 #include "llimagebmp.h"
 #include "llimagej2c.h"
@@ -1902,7 +1903,7 @@ void LLViewerWindow::reshape(S32 width, S32 height)
 		// clear font width caches
 		if (display_scale_changed)
 		{
-			LLHUDText::reshape();
+			LLHUDObject::reshapeAll();
 		}
 
 		sendShapeToSim();
@@ -4132,7 +4133,7 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei
 		send_agent_pause();
 		//rescale fonts
 		initFonts(scale_factor);
-		LLHUDText::reshape();
+		LLHUDObject::reshapeAll();
 	}
 
 	S32 output_buffer_offset_y = 0;
@@ -4261,7 +4262,7 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei
 	if (high_res)
 	{
 		initFonts(1.f);
-		LLHUDText::reshape();
+		LLHUDObject::reshapeAll();
 	}
 
 	// Pre-pad image to number of pixels such that the line length is a multiple of 4 bytes (for BMP encoding)
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index b56e4d3d2e..e039544779 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -63,7 +63,8 @@
 #include "llheadrotmotion.h"
 #include "llhudeffecttrail.h"
 #include "llhudmanager.h"
-#include "llhudtext.h"
+#include "llhudnametag.h"
+#include "llhudtext.h"				// for mText/mDebugText
 #include "llkeyframefallmotion.h"
 #include "llkeyframestandmotion.h"
 #include "llkeyframewalkmotion.h"
@@ -2750,14 +2751,14 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last)
 
 	if (!mNameText)
 	{
-		mNameText = (LLHUDText *)LLHUDObject::addHUDObject(LLHUDObject::LL_HUD_TEXT);
+		mNameText = static_cast<LLHUDNameTag*>( LLHUDObject::addHUDObject(
+			LLHUDObject::LL_HUD_NAME_TAG) );
 		mNameText->setMass(10.f);
 		mNameText->setSourceObject(this);
-		mNameText->setVertAlignment(LLHUDText::ALIGN_VERT_TOP);
+		mNameText->setVertAlignment(LLHUDNameTag::ALIGN_VERT_TOP);
 		mNameText->setVisibleOffScreen(TRUE);
 		mNameText->setMaxLines(11);
 		mNameText->setFadeDistance(CHAT_NORMAL_RADIUS, 5.f);
-		mNameText->setUseBubble(TRUE);
 		sNumVisibleChatBubbles++;
 		new_name = TRUE;
 	}
@@ -2896,7 +2897,7 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
 	{
 		mNameText->setDropShadow(TRUE);
 		mNameText->setFont(LLFontGL::getFontSansSerif());
-		mNameText->setTextAlignment(LLHUDText::ALIGN_TEXT_LEFT);
+		mNameText->setTextAlignment(LLHUDNameTag::ALIGN_TEXT_LEFT);
 		mNameText->setFadeDistance(CHAT_NORMAL_RADIUS * 2.f, 5.f);
 	
 		char line[MAX_STRING];		/* Flawfinder: ignore */
@@ -2967,7 +2968,7 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
 	else
 	{
 		// ...not using chat bubbles, just names
-		mNameText->setTextAlignment(LLHUDText::ALIGN_TEXT_CENTER);
+		mNameText->setTextAlignment(LLHUDNameTag::ALIGN_TEXT_CENTER);
 		mNameText->setFadeDistance(CHAT_NORMAL_RADIUS, 5.f);
 		mNameText->setVisibleOffScreen(FALSE);
 	}
diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h
index b63e3b2ebd..c31369358c 100644
--- a/indra/newview/llvoavatar.h
+++ b/indra/newview/llvoavatar.h
@@ -65,7 +65,7 @@ extern const LLUUID ANIM_AGENT_WALK_ADJUST;
 
 class LLTexLayerSet;
 class LLVoiceVisualizer;
-class LLHUDText;
+class LLHUDNameTag;
 class LLHUDEffectSpiral;
 class LLTexGlobalColor;
 class LLVOAvatarBoneInfo;
@@ -842,7 +842,7 @@ private:
 	//--------------------------------------------------------------------
 public:
 	LLFrameTimer	mChatTimer;
-	LLPointer<LLHUDText> mNameText;
+	LLPointer<LLHUDNameTag> mNameText;
 private:
 	LLFrameTimer	mTimeVisible;
 	std::deque<LLChat> mChats;
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index 4de1560f16..31c245dc57 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -69,6 +69,7 @@
 #include "llfloaterreg.h"
 #include "llgldbg.h"
 #include "llhudmanager.h"
+#include "llhudnametag.h"
 #include "llhudtext.h"
 #include "lllightconstants.h"
 #include "llresmgr.h"
@@ -2080,6 +2081,7 @@ void LLPipeline::shiftObjects(const LLVector3 &offset)
 	}
 
 	LLHUDText::shiftAll(offset);
+	LLHUDNameTag::shiftAll(offset);
 	display_update_camera();
 }
 
@@ -5269,7 +5271,8 @@ LLViewerObject* LLPipeline::lineSegmentIntersectInWorld(const LLVector3& start,
 		++iter)
 	{
 		LLVOAvatar* av = (LLVOAvatar*) *iter;
-		if (av->mNameText.notNull() && av->mNameText->lineSegmentIntersect(start, local_end, position))
+		if (av->mNameText.notNull()
+			&& av->mNameText->lineSegmentIntersect(start, local_end, position))
 		{
 			drawable = av->mDrawable;
 			local_end = position;
-- 
cgit v1.2.3


From 7337b4b05bf2218796742a0ee1ddb0fdf27236c4 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Tue, 9 Mar 2010 15:23:16 -0800
Subject: More harmonization of LLHUDNameTag vs. LLHUDText Eliminating
 now-unused code from LLHUDText

---
 indra/newview/llhudnametag.cpp |  12 +----
 indra/newview/llhudnametag.h   |   4 --
 indra/newview/llhudtext.cpp    | 113 +++++++++++------------------------------
 indra/newview/llhudtext.h      |  10 ----
 indra/newview/llvoavatar.cpp   |   1 -
 5 files changed, 30 insertions(+), 110 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llhudnametag.cpp b/indra/newview/llhudnametag.cpp
index 5d4c4571d5..7d194cc330 100644
--- a/indra/newview/llhudnametag.cpp
+++ b/indra/newview/llhudnametag.cpp
@@ -104,7 +104,6 @@ LLHUDNameTag::LLHUDNameTag(const U8 type)
 	mFadeDistance = 8.f;
 	mFadeRange = 4.f;
 	mZCompare = TRUE;
-	mDropShadow = TRUE;
 	mOffscreen = FALSE;
 	mRadius = 0.1f;
 	LLPointer<LLHUDNameTag> ptr(this);
@@ -502,11 +501,7 @@ void LLHUDNameTag::renderText(BOOL for_select)
 			y_offset -= fontp->getLineHeight();
 
 			U8 style = segment_iter->mStyle;
-			LLFontGL::ShadowType shadow = LLFontGL::NO_SHADOW;
-			if (mDropShadow)
-			{
-				shadow = LLFontGL::DROP_SHADOW;
-			}
+			LLFontGL::ShadowType shadow = LLFontGL::DROP_SHADOW;
 	
 			F32 x_offset;
 			if (mTextAlignment== ALIGN_TEXT_CENTER)
@@ -618,11 +613,6 @@ void LLHUDNameTag::addLabel(const std::string& label_utf8)
 	}
 }
 
-void LLHUDNameTag::setDropShadow(const BOOL do_shadow)
-{
-	mDropShadow = do_shadow;
-}
-
 void LLHUDNameTag::setZCompare(const BOOL zcompare)
 {
 	mZCompare = zcompare;
diff --git a/indra/newview/llhudnametag.h b/indra/newview/llhudnametag.h
index 56b17bef6b..0b741057e5 100644
--- a/indra/newview/llhudnametag.h
+++ b/indra/newview/llhudnametag.h
@@ -104,8 +104,6 @@ public:
 	void setLabel(const std::string& label_utf8);
 	void addLabel(const std::string& label_utf8);
 
-	void setDropShadow(const BOOL do_shadow);
-
 	// Sets the default font for lines with no font specified
 	void setFont(const LLFontGL* font);
 	void setColor(const LLColor4 &color);
@@ -152,8 +150,6 @@ protected:
 
 private:
 	~LLHUDNameTag();
-	//BOOL			mUseBubble;		always true
-	BOOL			mDropShadow;
 	BOOL			mDoFade;
 	F32				mFadeRange;
 	F32				mFadeDistance;
diff --git a/indra/newview/llhudtext.cpp b/indra/newview/llhudtext.cpp
index 406ad8c51e..c362128cb8 100644
--- a/indra/newview/llhudtext.cpp
+++ b/indra/newview/llhudtext.cpp
@@ -1,7 +1,6 @@
-
 /** 
  * @file llhudtext.cpp
- * @brief LLHUDText class implementation
+ * @brief Floating text above objects, set via script with llSetText()
  *
  * $LicenseInfo:firstyear=2002&license=viewergpl$
  * 
@@ -69,9 +68,9 @@ const S32 NUM_OVERLAP_ITERATIONS = 10;
 const F32 NEIGHBOR_FORCE_FRACTION = 1.f;
 const F32 POSITION_DAMPING_TC = 0.2f;
 const F32 MAX_STABLE_CAMERA_VELOCITY = 0.1f;
-const F32 LOD_0_SCREEN_COVERAGE = 0.15f;
-const F32 LOD_1_SCREEN_COVERAGE = 0.30f;
-const F32 LOD_2_SCREEN_COVERAGE = 0.40f;
+//const F32 LOD_0_SCREEN_COVERAGE = 0.15f;
+//const F32 LOD_1_SCREEN_COVERAGE = 0.30f;
+//const F32 LOD_2_SCREEN_COVERAGE = 0.40f;
 
 std::set<LLPointer<LLHUDText> > LLHUDText::sTextObjects;
 std::vector<LLPointer<LLHUDText> > LLHUDText::sVisibleTextObjects;
@@ -97,7 +96,7 @@ LLHUDText::LLHUDText(const U8 type) :
 			mOffsetY(0),
 			mTextAlignment(ALIGN_TEXT_CENTER),
 			mVertAlignment(ALIGN_VERT_CENTER),
-			mLOD(0),
+//			mLOD(0),
 			mHidden(FALSE)
 {
 	mColor = LLColor4(1.f, 1.f, 1.f, 1.f);
@@ -105,7 +104,6 @@ LLHUDText::LLHUDText(const U8 type) :
 	mFadeDistance = 8.f;
 	mFadeRange = 4.f;
 	mZCompare = TRUE;
-	mDropShadow = TRUE;
 	mOffscreen = FALSE;
 	mRadius = 0.1f;
 	LLPointer<LLHUDText> ptr(this);
@@ -232,28 +230,6 @@ void LLHUDText::renderText(BOOL for_select)
 	// Render label
 	{
 		gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
-
-		for(std::vector<LLHUDTextSegment>::iterator segment_iter = mLabelSegments.begin();
-			segment_iter != mLabelSegments.end(); ++segment_iter )
-		{
-			// Label segments use default font
-			const LLFontGL* fontp = (segment_iter->mStyle == LLFontGL::BOLD) ? mBoldFontp : mFontp;
-			y_offset -= fontp->getLineHeight();
-
-			F32 x_offset;
-			if (mTextAlignment == ALIGN_TEXT_CENTER)
-			{
-				x_offset = -0.5f*segment_iter->getWidth(fontp);
-			}
-			else // ALIGN_LEFT
-			{
-				x_offset = -0.5f * mWidth + (HORIZONTAL_PADDING / 2.f);
-			}
-
-			LLColor4 label_color(0.f, 0.f, 0.f, 1.f);
-			label_color.mV[VALPHA] = alpha_factor;
-			hud_render_text(segment_iter->getText(), render_position, *fontp, segment_iter->mStyle, LLFontGL::NO_SHADOW, x_offset, y_offset, label_color, mOnHUDAttachment);
-		}
 	}
 
 	// Render text
@@ -278,11 +254,7 @@ void LLHUDText::renderText(BOOL for_select)
 			y_offset -= fontp->getLineHeight();
 
 			U8 style = segment_iter->mStyle;
-			LLFontGL::ShadowType shadow = LLFontGL::NO_SHADOW;
-			if (mDropShadow)
-			{
-				shadow = LLFontGL::DROP_SHADOW;
-			}
+			LLFontGL::ShadowType shadow = LLFontGL::DROP_SHADOW;
 	
 			F32 x_offset;
 			if (mTextAlignment== ALIGN_TEXT_CENTER)
@@ -353,11 +325,6 @@ void LLHUDText::addLine(const std::string &text_utf8,
 	}
 }
 
-void LLHUDText::setDropShadow(const BOOL do_shadow)
-{
-	mDropShadow = do_shadow;
-}
-
 void LLHUDText::setZCompare(const BOOL zcompare)
 {
 	mZCompare = zcompare;
@@ -457,7 +424,7 @@ void LLHUDText::updateVisibility()
 
 	mLastDistance = (mPositionAgent - LLViewerCamera::getInstance()->getOrigin()).magVec();
 
-	if (mLOD >= 3 || !mTextSegments.size() || (mDoFade && (mLastDistance > mFadeDistance + mFadeRange)))
+	if (!mTextSegments.size() || (mDoFade && (mLastDistance > mFadeDistance + mFadeRange)))
 	{
 		mVisible = FALSE;
 		return;
@@ -553,14 +520,6 @@ void LLHUDText::updateSize()
 		++iter;
 	}
 
-	iter = mLabelSegments.begin();
-	while (iter != mLabelSegments.end())
-	{
-		height += mFontp->getLineHeight();
-		width = llmax(width, llmin(iter->getWidth(mFontp), HUD_TEXT_MAX_WIDTH));
-		++iter;
-	}
-	
 	if (width == 0.f)
 	{
 		return;
@@ -569,18 +528,8 @@ void LLHUDText::updateSize()
 	width += HORIZONTAL_PADDING;
 	height += VERTICAL_PADDING;
 
-	if (!mResizeTimer.getStarted() && (width != mWidth || height != mHeight))
-	{
-		mResizeTimer.start();
-	}
-
-	// *NOTE: removed logic which did a divide by zero.
-	F32 u = 1.f;//llclamp(mResizeTimer.getElapsedTimeF32() / RESIZE_TIME, 0.f, 1.f);
-	if (u == 1.f)
-	{
-		mResizeTimer.stop();
-	}
-
+	// *TODO: Could do some sort of timer-based resize logic here
+	F32 u = 1.f;
 	mWidth = llmax(width, lerp(mWidth, (F32)width, u));
 	mHeight = llmax(height, lerp(mHeight, (F32)height, u));
 }
@@ -606,28 +555,29 @@ void LLHUDText::updateAll()
 	std::sort(sVisibleHUDTextObjects.begin(), sVisibleHUDTextObjects.end(), lltextobject_further_away());
 }
 
-void LLHUDText::setLOD(S32 lod)
-{
-	mLOD = lod;
-	//RN: uncomment this to visualize LOD levels
-	//std::string label = llformat("%d", lod);
-	//setLabel(label);
-}
+//void LLHUDText::setLOD(S32 lod)
+//{
+//	mLOD = lod;
+//	//RN: uncomment this to visualize LOD levels
+//	//std::string label = llformat("%d", lod);
+//	//setLabel(label);
+//}
 
 S32 LLHUDText::getMaxLines()
 {
-	switch(mLOD)
-	{
-	case 0:
-		return mMaxLines;
-	case 1:
-		return mMaxLines > 0 ? mMaxLines / 2 : 5;
-	case 2:
-		return mMaxLines > 0 ? mMaxLines / 3 : 2;
-	default:
-		// label only
-		return 0;
-	}
+	return mMaxLines;
+	//switch(mLOD)
+	//{
+	//case 0:
+	//	return mMaxLines;
+	//case 1:
+	//	return mMaxLines > 0 ? mMaxLines / 2 : 5;
+	//case 2:
+	//	return mMaxLines > 0 ? mMaxLines / 3 : 2;
+	//default:
+	//	// label only
+	//	return 0;
+	//}
 }
 
 void LLHUDText::markDead()
@@ -692,11 +642,6 @@ void LLHUDText::reshape()
 		{
 			segment_iter->clearFontWidthMap();
 		}
-		for(segment_iter = textp->mLabelSegments.begin();
-			segment_iter != textp->mLabelSegments.end(); ++segment_iter )
-		{
-			segment_iter->clearFontWidthMap();
-		}		
 	}
 }
 
diff --git a/indra/newview/llhudtext.h b/indra/newview/llhudtext.h
index 3acd2934e1..023c7d8ff3 100644
--- a/indra/newview/llhudtext.h
+++ b/indra/newview/llhudtext.h
@@ -40,7 +40,6 @@
 #include "v4coloru.h"
 #include "v2math.h"
 #include "llrect.h"
-#include "llframetimer.h"
 #include "llfontgl.h"
 #include <set>
 #include <vector>
@@ -100,8 +99,6 @@ public:
 	// Add text a line at a time, allowing custom formatting
 	void addLine(const std::string &text_utf8, const LLColor4& color, const LLFontGL::StyleFlags style = LLFontGL::NORMAL, const LLFontGL* font = NULL);
 
-	void setDropShadow(const BOOL do_shadow);
-
 	// Sets the default font for lines with no font specified
 	void setFont(const LLFontGL* font);
 	void setColor(const LLColor4 &color);
@@ -122,7 +119,6 @@ public:
 	/*virtual*/ void markDead();
 	friend class LLHUDObject;
 	/*virtual*/ F32 getDistance() const { return mLastDistance; }
-	S32  getLOD() { return mLOD; }
 	BOOL getVisible() { return mVisible; }
 	BOOL getHidden() const { return mHidden; }
 	void setHidden( BOOL hide ) { mHidden = hide; }
@@ -141,14 +137,11 @@ protected:
 	/*virtual*/ void renderForSelect();
 	void renderText(BOOL for_select);
 	static void updateAll();
-	void setLOD(S32 lod);
 	S32 getMaxLines();
 
 private:
 	~LLHUDText();
 	BOOL			mOnHUDAttachment;
-//	BOOL			mUseBubble;
-	BOOL			mDropShadow;
 	BOOL			mDoFade;
 	F32				mFadeRange;
 	F32				mFadeDistance;
@@ -172,11 +165,8 @@ private:
 	S32				mOffsetY;
 	F32				mRadius;
 	std::vector<LLHUDTextSegment> mTextSegments;
-	std::vector<LLHUDTextSegment> mLabelSegments;
-	LLFrameTimer	mResizeTimer;
 	ETextAlignment	mTextAlignment;
 	EVertAlignment	mVertAlignment;
-	S32				mLOD;
 	BOOL			mHidden;
 
 	static BOOL    sDisplayText ;
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index e039544779..5e1e2bb511 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -2895,7 +2895,6 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
 
 	if (mVisibleChat)
 	{
-		mNameText->setDropShadow(TRUE);
 		mNameText->setFont(LLFontGL::getFontSansSerif());
 		mNameText->setTextAlignment(LLHUDNameTag::ALIGN_TEXT_LEFT);
 		mNameText->setFadeDistance(CHAT_NORMAL_RADIUS * 2.f, 5.f);
-- 
cgit v1.2.3


From 8527463c157021bdbda8c1eff18c659f3cd37037 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Tue, 9 Mar 2010 16:44:34 -0800
Subject: More name-tag vs. hud-text cleanup

---
 indra/newview/llhudnametag.cpp | 43 ++++++++++++++++++++----------------------
 indra/newview/llhudnametag.h   | 14 +++++++-------
 indra/newview/llhudtext.cpp    | 26 ++++++++++++-------------
 indra/newview/llhudtext.h      |  4 ++--
 indra/newview/llvoavatar.cpp   |  2 +-
 5 files changed, 43 insertions(+), 46 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llhudnametag.cpp b/indra/newview/llhudnametag.cpp
index 7d194cc330..ebc6472a81 100644
--- a/indra/newview/llhudnametag.cpp
+++ b/indra/newview/llhudnametag.cpp
@@ -85,27 +85,33 @@ bool llhudnametag_further_away::operator()(const LLPointer<LLHUDNameTag>& lhs, c
 
 LLHUDNameTag::LLHUDNameTag(const U8 type)
 :	LLHUDObject(type),
-//	mUseBubble(FALSE),
+	mDoFade(TRUE),
+	mFadeDistance(8.f),
+	mFadeRange(4.f),
+	mLastDistance(0.f),
+	mZCompare(TRUE),
 	mVisibleOffScreen(FALSE),
+	mOffscreen(FALSE),
+	mColor(1.f, 1.f, 1.f, 1.f),
+//	mScale(),
 	mWidth(0.f),
 	mHeight(0.f),
 	mFontp(LLFontGL::getFontSansSerifSmall()),
 	mBoldFontp(LLFontGL::getFontSansSerifBold()),
-	mMass(1.f),
+	mSoftScreenRect(),
+	mPositionAgent(),
+	mPositionOffset(),
+	mMass(10.f),
 	mMaxLines(10),
 	mOffsetY(0),
+	mRadius(0.1f),
+	mTextSegments(),
+	mLabelSegments(),
 	mTextAlignment(ALIGN_TEXT_CENTER),
 	mVertAlignment(ALIGN_VERT_CENTER),
 	mLOD(0),
 	mHidden(FALSE)
 {
-	mColor = LLColor4(1.f, 1.f, 1.f, 1.f);
-	mDoFade = TRUE;
-	mFadeDistance = 8.f;
-	mFadeRange = 4.f;
-	mZCompare = TRUE;
-	mOffscreen = FALSE;
-	mRadius = 0.1f;
 	LLPointer<LLHUDNameTag> ptr(this);
 	sTextObjects.insert(ptr);
 }
@@ -808,20 +814,11 @@ void LLHUDNameTag::updateSize()
 	width += HORIZONTAL_PADDING;
 	height += VERTICAL_PADDING;
 
-	if (!mResizeTimer.getStarted() && (width != mWidth || height != mHeight))
-	{
-		mResizeTimer.start();
-	}
-
-	// *NOTE: removed logic which did a divide by zero.
-	F32 u = 1.f;//llclamp(mResizeTimer.getElapsedTimeF32() / RESIZE_TIME, 0.f, 1.f);
-	if (u == 1.f)
-	{
-		mResizeTimer.stop();
-	}
-
-	mWidth = llmax(width, lerp(mWidth, (F32)width, u));
-	mHeight = llmax(height, lerp(mHeight, (F32)height, u));
+	// *TODO: Could do a timer-based resize here
+	//mWidth = llmax(width, lerp(mWidth, (F32)width, u));
+	//mHeight = llmax(height, lerp(mHeight, (F32)height, u));
+	mWidth = width;
+	mHeight = height;
 }
 
 void LLHUDNameTag::updateAll()
diff --git a/indra/newview/llhudnametag.h b/indra/newview/llhudnametag.h
index 0b741057e5..9a92307009 100644
--- a/indra/newview/llhudnametag.h
+++ b/indra/newview/llhudnametag.h
@@ -38,10 +38,10 @@
 
 #include "llhudobject.h"
 #include "v4color.h"
-#include "v4coloru.h"
+//#include "v4coloru.h"
 #include "v2math.h"
 #include "llrect.h"
-#include "llframetimer.h"
+//#include "llframetimer.h"
 #include "llfontgl.h"
 #include <set>
 #include <vector>
@@ -118,7 +118,7 @@ public:
 	void updateVisibility();
 	LLVector2 updateScreenPos(LLVector2 &offset_target);
 	void updateSize();
-	void setMass(F32 mass) { mMass = llmax(0.1f, mass); }
+//	void setMass(F32 mass) { mMass = llmax(0.1f, mass); }
 	void setTextAlignment(ETextAlignment alignment) { mTextAlignment = alignment; }
 	void setVertAlignment(EVertAlignment alignment) { mVertAlignment = alignment; }
 	/*virtual*/ void markDead();
@@ -158,10 +158,10 @@ private:
 	BOOL			mVisibleOffScreen;
 	BOOL			mOffscreen;
 	LLColor4		mColor;
-	LLVector3		mScale;
+//	LLVector3		mScale;
 	F32				mWidth;
 	F32				mHeight;
-	LLColor4U		mPickColor;
+//	LLColor4U		mPickColor;
 	const LLFontGL*	mFontp;
 	const LLFontGL*	mBoldFontp;
 	LLRectf			mSoftScreenRect;
@@ -174,7 +174,7 @@ private:
 	F32				mRadius;
 	std::vector<LLHUDTextSegment> mTextSegments;
 	std::vector<LLHUDTextSegment> mLabelSegments;
-	LLFrameTimer	mResizeTimer;
+//	LLFrameTimer	mResizeTimer;
 	ETextAlignment	mTextAlignment;
 	EVertAlignment	mVertAlignment;
 	S32				mLOD;
@@ -183,7 +183,7 @@ private:
 	static BOOL    sDisplayText ;
 	static std::set<LLPointer<LLHUDNameTag> > sTextObjects;
 	static std::vector<LLPointer<LLHUDNameTag> > sVisibleTextObjects;
-	static std::vector<LLPointer<LLHUDNameTag> > sVisibleHUDTextObjects;
+//	static std::vector<LLPointer<LLHUDNameTag> > sVisibleHUDTextObjects;
 	typedef std::set<LLPointer<LLHUDNameTag> >::iterator TextObjectIterator;
 	typedef std::vector<LLPointer<LLHUDNameTag> >::iterator VisibleTextObjectIterator;
 };
diff --git a/indra/newview/llhudtext.cpp b/indra/newview/llhudtext.cpp
index c362128cb8..91d5fcf665 100644
--- a/indra/newview/llhudtext.cpp
+++ b/indra/newview/llhudtext.cpp
@@ -86,7 +86,7 @@ bool lltextobject_further_away::operator()(const LLPointer<LLHUDText>& lhs, cons
 LLHUDText::LLHUDText(const U8 type) :
 			LLHUDObject(type),
 			mOnHUDAttachment(FALSE),
-			mVisibleOffScreen(FALSE),
+//			mVisibleOffScreen(FALSE),
 			mWidth(0.f),
 			mHeight(0.f),
 			mFontp(LLFontGL::getFontSansSerifSmall()),
@@ -442,15 +442,15 @@ void LLHUDText::updateVisibility()
 	mOffscreen = FALSE;
 	if (!LLViewerCamera::getInstance()->sphereInFrustum(render_position, mRadius))
 	{
-		if (!mVisibleOffScreen)
-		{
+//		if (!mVisibleOffScreen)
+//		{
 			mVisible = FALSE;
 			return;
-		}
-		else
-		{
-			mOffscreen = TRUE;
-		}
+//		}
+//		else
+//		{
+//			mOffscreen = TRUE;
+//		}
 	}
 
 	mVisible = TRUE;
@@ -465,11 +465,11 @@ LLVector2 LLHUDText::updateScreenPos(LLVector2 &offset)
 	LLVector3 y_pixel_vec;
 	LLViewerCamera::getInstance()->getPixelVectors(mPositionAgent, y_pixel_vec, x_pixel_vec);
 	LLVector3 world_pos = mPositionAgent + (offset.mV[VX] * x_pixel_vec) + (offset.mV[VY] * y_pixel_vec);
-	if (!LLViewerCamera::getInstance()->projectPosAgentToScreen(world_pos, screen_pos, FALSE) && mVisibleOffScreen)
-	{
-		// bubble off-screen, so find a spot for it along screen edge
-		LLViewerCamera::getInstance()->projectPosAgentToScreenEdge(world_pos, screen_pos);
-	}
+//	if (!LLViewerCamera::getInstance()->projectPosAgentToScreen(world_pos, screen_pos, FALSE) && mVisibleOffScreen)
+//	{
+//		// bubble off-screen, so find a spot for it along screen edge
+//		LLViewerCamera::getInstance()->projectPosAgentToScreenEdge(world_pos, screen_pos);
+//	}
 
 	screen_pos_vec.setVec((F32)screen_pos.mX, (F32)screen_pos.mY);
 
diff --git a/indra/newview/llhudtext.h b/indra/newview/llhudtext.h
index 023c7d8ff3..27b8f07cca 100644
--- a/indra/newview/llhudtext.h
+++ b/indra/newview/llhudtext.h
@@ -105,7 +105,7 @@ public:
 	void setAlpha(F32 alpha);
 	void setZCompare(const BOOL zcompare);
 	void setDoFade(const BOOL do_fade);
-	void setVisibleOffScreen(BOOL visible) { mVisibleOffScreen = visible; }
+//	void setVisibleOffScreen(BOOL visible) { mVisibleOffScreen = visible; }
 	
 	// mMaxLines of -1 means unlimited lines.
 	void setMaxLines(S32 max_lines) { mMaxLines = max_lines; }
@@ -147,7 +147,7 @@ private:
 	F32				mFadeDistance;
 	F32				mLastDistance;
 	BOOL			mZCompare;
-	BOOL			mVisibleOffScreen;
+//	BOOL			mVisibleOffScreen;
 	BOOL			mOffscreen;
 	LLColor4		mColor;
 	LLVector3		mScale;
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 5e1e2bb511..582fc811a0 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -2753,7 +2753,7 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last)
 	{
 		mNameText = static_cast<LLHUDNameTag*>( LLHUDObject::addHUDObject(
 			LLHUDObject::LL_HUD_NAME_TAG) );
-		mNameText->setMass(10.f);
+		//mNameText->setMass(10.f);
 		mNameText->setSourceObject(this);
 		mNameText->setVertAlignment(LLHUDNameTag::ALIGN_VERT_TOP);
 		mNameText->setVisibleOffScreen(TRUE);
-- 
cgit v1.2.3


From 0ee6a6025cba2f63c5c33c20870f67afd62f6372 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Wed, 10 Mar 2010 15:41:30 -0800
Subject: Name tag color and position hackery for demo

---
 indra/newview/llhudnametag.cpp                     |  21 ++++++++---
 indra/newview/llhudtext.cpp                        |   2 +-
 indra/newview/llvoavatar.cpp                       |  24 +++++++-----
 indra/newview/skins/default/colors.xml             |  41 ++++++++++++++++-----
 .../skins/default/textures/Rounded_Rect.png        | Bin 0 -> 338 bytes
 indra/newview/skins/default/textures/textures.xml  |   1 +
 6 files changed, 64 insertions(+), 25 deletions(-)
 create mode 100644 indra/newview/skins/default/textures/Rounded_Rect.png

(limited to 'indra/newview')

diff --git a/indra/newview/llhudnametag.cpp b/indra/newview/llhudnametag.cpp
index ebc6472a81..e444fc88eb 100644
--- a/indra/newview/llhudnametag.cpp
+++ b/indra/newview/llhudnametag.cpp
@@ -58,8 +58,9 @@
 
 const F32 SPRING_STRENGTH = 0.7f;
 const F32 RESTORATION_SPRING_TIME_CONSTANT = 0.1f;
-const F32 HORIZONTAL_PADDING = 15.f;
+const F32 HORIZONTAL_PADDING = 16.f;
 const F32 VERTICAL_PADDING = 12.f;
+const F32 LINE_PADDING = 1;			// aka "leading"
 const F32 BUFFER_SIZE = 2.f;
 const F32 MIN_EDGE_OVERLAP = 3.f;
 const F32 HUD_TEXT_MAX_WIDTH = 190.f;
@@ -279,14 +280,17 @@ void LLHUDNameTag::renderText(BOOL for_select)
 	mOffsetY = lltrunc(mHeight * ((mVertAlignment == ALIGN_VERT_CENTER) ? 0.5f : 1.f));
 
 	// *TODO: cache this image
-	LLUIImagePtr imagep = LLUI::getUIImage("Rounded_Square");
+	LLUIImagePtr imagep = LLUI::getUIImage("Rounded_Rect");
 
 	// *TODO: make this a per-text setting
-	LLColor4 bg_color = LLUIColorTable::instance().getColor("BackgroundChatColor");
+	LLColor4 bg_color = LLUIColorTable::instance().getColor("NameTagBackground");
 	bg_color.setAlpha(gSavedSettings.getF32("ChatBubbleOpacity") * alpha_factor);
 
-	const S32 border_height = 16;
-	const S32 border_width = 16;
+	// JAMESDEBUG - maybe a no-op
+	//const S32 border_height = 16;
+	//const S32 border_width = 16;
+	const S32 border_height = 8;
+	const S32 border_width = 8;
 
 	// *TODO move this into helper function
 	F32 border_scale = 1.f;
@@ -456,7 +460,7 @@ void LLHUDNameTag::renderText(BOOL for_select)
 		LLUI::popMatrix();
 	}
 
-	F32 y_offset = (F32)mOffsetY;
+	F32 y_offset = (F32)mOffsetY - 2;  // JAMESDEBUG
 		
 	// Render label
 	{
@@ -505,6 +509,7 @@ void LLHUDNameTag::renderText(BOOL for_select)
 		{
 			const LLFontGL* fontp = segment_iter->mFont;
 			y_offset -= fontp->getLineHeight();
+			y_offset -= LINE_PADDING;
 
 			U8 style = segment_iter->mStyle;
 			LLFontGL::ShadowType shadow = LLFontGL::DROP_SHADOW;
@@ -517,6 +522,9 @@ void LLHUDNameTag::renderText(BOOL for_select)
 			else // ALIGN_LEFT
 			{
 				x_offset = -0.5f * mWidth + (HORIZONTAL_PADDING / 2.f);
+
+				// JAMESDEBUG HACK
+				x_offset += 1;
 			}
 
 			text_color = segment_iter->mColor;
@@ -794,6 +802,7 @@ void LLHUDNameTag::updateSize()
 	{
 		const LLFontGL* fontp = iter->mFont;
 		height += fontp->getLineHeight();
+		height += LINE_PADDING;
 		width = llmax(width, llmin(iter->getWidth(fontp), HUD_TEXT_MAX_WIDTH));
 		++iter;
 	}
diff --git a/indra/newview/llhudtext.cpp b/indra/newview/llhudtext.cpp
index 91d5fcf665..31522f6efb 100644
--- a/indra/newview/llhudtext.cpp
+++ b/indra/newview/llhudtext.cpp
@@ -173,7 +173,7 @@ void LLHUDText::renderText(BOOL for_select)
 	LLUIImagePtr imagep = LLUI::getUIImage("Rounded_Square");
 
 	// *TODO: make this a per-text setting
-	LLColor4 bg_color = LLUIColorTable::instance().getColor("BackgroundChatColor");
+	LLColor4 bg_color = LLUIColorTable::instance().getColor("ObjectBubbleColor");
 	bg_color.setAlpha(gSavedSettings.getF32("ChatBubbleOpacity") * alpha_factor);
 
 	const S32 border_height = 16;
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 582fc811a0..4c8bb0ac13 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -2834,16 +2834,20 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
 			}
 			// trim last ", "
 			line.resize( line.length() - 2 );
-			addNameTagLine(line, name_tag_color, LLFontGL::NORMAL,
+			LLColor4 status_color =
+				LLUIColorTable::getInstance()->getColor("NameTagStatus");
+			addNameTagLine(line, status_color, LLFontGL::NORMAL,
 				LLFontGL::getFontSansSerifSmall());
 		}
 
 		if (sRenderGroupTitles
 			&& title && title->getString() && title->getString()[0] != '\0')
 		{
+			LLColor4 group_color =
+				LLUIColorTable::getInstance()->getColor("NameTagGroup");
 			std::string title_str = title->getString();
 			LLStringFn::replace_ascii_controlchars(title_str,LL_UNKNOWN_CHAR);
-			addNameTagLine(title_str, name_tag_color, LLFontGL::NORMAL,
+			addNameTagLine(title_str, group_color, LLFontGL::NORMAL,
 				LLFontGL::getFontSansSerifSmall());
 		}
 
@@ -2864,13 +2868,15 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
 			// Might be blank if name not available yet, that's OK
 			if (show_slids)
 			{
-				addNameTagLine(av_name.mSLID, name_tag_color, LLFontGL::NORMAL,
-					LLFontGL::getFontSansSerif());
+				// JAMESDEBUG HACK
+				LLColor4 slid_color = name_tag_color * 0.8f;
+				addNameTagLine(av_name.mSLID, slid_color, LLFontGL::NORMAL,
+					LLFontGL::getFontSansSerifSmall());
 			}
 			if (show_display_names)
 			{
 				addNameTagLine(av_name.mDisplayName, name_tag_color, LLFontGL::NORMAL,
-					LLFontGL::getFontSansSerifBig());
+					LLFontGL::getFontSansSerif());
 			}
 		}
 		else
@@ -2904,7 +2910,7 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
 		std::deque<LLChat>::iterator chat_iter = mChats.begin();
 		mNameText->clearString();
 
-		LLColor4 new_chat = LLUIColorTable::instance().getColor( "AvatarNameColor" );
+		LLColor4 new_chat = LLUIColorTable::instance().getColor( "NameTagChat" );
 		LLColor4 normal_chat = lerp(new_chat, LLColor4(0.8f, 0.8f, 0.8f, 1.f), 0.7f);
 		LLColor4 old_chat = lerp(normal_chat, LLColor4(0.6f, 0.6f, 0.6f, 1.f), 0.7f);
 		if (mTyping && mChats.size() >= MAX_BUBBLE_CHAT_UTTERANCES) 
@@ -3036,10 +3042,10 @@ void LLVOAvatar::idleUpdateNameTagAlpha(BOOL new_name, F32 alpha)
 
 LLColor4 LLVOAvatar::getNameTagColor(bool is_friend)
 {
-	const char* color_name = "AvatarNameColor";
+	const char* color_name = "NameTagText";
 	if (is_friend)
 	{
-		color_name = "AvatarNameFriendColor";
+		color_name = "NameTagFriend";
 	}
 	else
 	{
@@ -3049,7 +3055,7 @@ LLColor4 LLVOAvatar::getNameTagColor(bool is_friend)
 			&& LLAvatarNameCache::get(getID(), &av_name)
 			&& av_name.mIsLegacy)
 		{
-			color_name = "AvatarNameLegacyColor";
+			color_name = "NameTagLegacy";
 		}
 	}
 	return LLUIColorTable::getInstance()->getColor( color_name );
diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml
index 4580efe688..c259e0391d 100644
--- a/indra/newview/skins/default/colors.xml
+++ b/indra/newview/skins/default/colors.xml
@@ -114,15 +114,6 @@
     <color
      name="AlertTextColor"
      value="0.58 0.66 0.84 1" />
-    <color
-     name="AvatarNameColor"
-     reference="White" />
-    <color
-     name="AvatarNameFriendColor"
-     reference="Green" />
-    <color
-     name="AvatarNameLegacyColor"
-     reference="Yellow" />
     <color
      name="AvatarListItemIconDefaultColor"
      reference="White" />
@@ -528,6 +519,35 @@
     <color
      name="MultiSliderTriangleColor"
      reference="Unused?" />
+  <!--
+    <color
+      name="NameTagBackground"
+      value="0.85 0.85 0.85 0.80" />
+      -->
+    <color
+      name="NameTagBackground"
+      value="0 0 0 1" />
+    <color
+     name="NameTagChat"
+     reference="White" />
+    <color
+     name="NameTagText"
+     reference="White" />
+    <color
+     name="NameTagFriend"
+     reference="EmphasisColor" />
+    <color
+     name="NameTagGroup"
+     value="1 1 1 1" />
+    <color
+     name="NameTagLegacy"
+     value="0.984 0.758 0 1" />
+    <color
+     name="NameTagSLID"
+     value="1 1 1 1" />
+    <color
+     name="NameTagStatus"
+     value="1 1 1 1" />
     <color
      name="NetMapBackgroundColor"
      value="0 0 0 0.3" />
@@ -561,6 +581,9 @@
     <color
      name="NotifyTextColor"
      reference="White" />
+    <color
+     name="ObjectBubbleColor"
+     reference="DkGray_66" />
     <color
      name="ObjectChatColor"
      reference="EmphasisColor" />
diff --git a/indra/newview/skins/default/textures/Rounded_Rect.png b/indra/newview/skins/default/textures/Rounded_Rect.png
new file mode 100644
index 0000000000..c270c28039
Binary files /dev/null and b/indra/newview/skins/default/textures/Rounded_Rect.png differ
diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index 3b08408661..82bce8c069 100644
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -458,6 +458,7 @@ with the same filename but different name
 
   <texture name="Resize_Corner" file_name="windows/Resize_Corner.png" preload="true" />
 
+  <texture name="Rounded_Rect"	file_name="Rounded_Rect.png" preload="true" scale.left="6" scale.top="24" scale.right="58" scale.bottom="6" />
   <texture name="Rounded_Square"	file_name="rounded_square.j2c" preload="true" scale.left="16" scale.top="16" scale.right="112" scale.bottom="16" />
   <texture name="Row_Selection" file_name="navbar/Row_Selection.png" preload="false" />
 
-- 
cgit v1.2.3


From dbc22bea7bba0c903a5090b24814f97b61a604b6 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Wed, 10 Mar 2010 17:12:09 -0800
Subject: Example logins in ghost text

---
 indra/newview/skins/default/xui/en/panel_login.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml
index 617fea6539..46f3049c4e 100644
--- a/indra/newview/skins/default/xui/en/panel_login.xml
+++ b/indra/newview/skins/default/xui/en/panel_login.xml
@@ -66,7 +66,7 @@ width="150">
 follows="left|bottom"
 handle_edit_keys_directly="true"
 height="22"
-label="First"
+label="e.g. bobsmith12 or Stellar Sunshine"
 left_delta="0"
 max_length="31"
 name="login_id_edit"
-- 
cgit v1.2.3


From 10fc6ee4a012fa7232868261d6e11a76652c3cca Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Sat, 13 Mar 2010 22:00:40 -0800
Subject: Hack to use display names for text chat

---
 indra/newview/llviewermessage.cpp | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 6a8832b64d..a1ff0f3747 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -2627,7 +2627,18 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
 	// IDEVO Correct for new-style "Resident" names
 	if (chat.mSourceType == CHAT_SOURCE_AGENT)
 	{
-		chat.mFromName = LLCacheName::cleanFullName(from_name);
+		// JAMESDEBUG - I don't know if it's OK to change this here, if 
+		// anything downstream does lookups by name, for instance
+		LLAvatarName av_name;
+		if (LLAvatarNameCache::useDisplayNames()
+			&& LLAvatarNameCache::get(from_id, &av_name))
+		{
+			chat.mFromName = av_name.mDisplayName;
+		}
+		else
+		{
+			chat.mFromName = LLCacheName::cleanFullName(from_name);
+		}
 	}
 	else
 	{
-- 
cgit v1.2.3


From 639b234762133e4d09d6d7b1bac9d25c5a681926 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Thu, 18 Mar 2010 17:19:57 -0700
Subject: Partial support for Set Name returning error msg from service

---
 indra/newview/llpanelme.cpp                        | 57 +++++++++++++---------
 indra/newview/llpanelme.h                          |  5 +-
 .../newview/skins/default/xui/en/notifications.xml | 21 ++++++++
 .../skins/default/xui/en/panel_edit_profile.xml    |  1 -
 4 files changed, 60 insertions(+), 24 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llpanelme.cpp b/indra/newview/llpanelme.cpp
index 84ed7356f1..d6c7d7ea8d 100644
--- a/indra/newview/llpanelme.cpp
+++ b/indra/newview/llpanelme.cpp
@@ -235,21 +235,14 @@ void LLPanelMyProfileEdit::processProfileProperties(const LLAvatarData* avatar_d
 	//{
 	//	childSetTextArg("name_text", "[NAME]", full_name);
 	//}
-	std::string full_name;
-	LLAvatarName av_name;
-	if (LLAvatarNameCache::useDisplayNames()
-		&& LLAvatarNameCache::get(avatar_data->avatar_id, &av_name))
-	{
-		getChild<LLUICtrl>("user_name")->setValue( av_name.mDisplayName );
-		getChild<LLUICtrl>("user_slid")->setValue( av_name.mSLID );
-	}
-	else if (gCacheName->getFullName(avatar_data->avatar_id, full_name))
-	{
-		getChild<LLUICtrl>("user_name")->setValue(full_name);
-		getChild<LLUICtrl>("user_slid")->setValue("");
-	}
+	LLAvatarNameCache::get(avatar_data->avatar_id,
+		boost::bind(&LLPanelMyProfileEdit::onNameCache, this, _1, _2));
+}
 
-	getChild<LLUICtrl>("set_name")->setVisible( LLAvatarNameCache::useDisplayNames() );
+void LLPanelMyProfileEdit::onNameCache(const LLUUID& agent_id, const LLAvatarName& av_name)
+{
+	getChild<LLUICtrl>("user_name")->setValue( av_name.mDisplayName );
+	getChild<LLUICtrl>("user_slid")->setValue( av_name.mSLID );
 }
 
 BOOL LLPanelMyProfileEdit::postBuild()
@@ -307,7 +300,30 @@ void LLPanelMyProfileEdit::onTexturePickerMouseLeave(LLUICtrl* ctrl)
 // IDEVO HACK
 extern void send_chat_from_viewer(const std::string& utf8_out_text, EChatType type, S32 channel);
 
-void LLPanelMyProfileEdit::callbackSetName(const LLSD& notification, const LLSD& response)
+void LLPanelMyProfileEdit::onCacheSetName(bool success,
+										  const std::string& reason,
+										  const LLSD& content)
+{
+	if (success)
+	{
+		// HACK: Use chat to invalidate names
+		send_chat_from_viewer("refreshname", CHAT_TYPE_NORMAL, 0);
+
+		// Re-fetch my name, as it may have been sanitized by the service
+		LLAvatarNameCache::get(getAvatarId(),
+			boost::bind(&LLPanelMyProfileEdit::onNameCache, this, _1, _2));
+	}
+	else
+	{
+		// JAMESDEBUG TODO: localize strings for reasons we couldn't
+		// change the name
+		LLNotificationsUtil::add("SetDisplayNameFailedGeneric");
+		// TODO: SetDisplayNameFailedThrottle with [FREQUENCY]
+		// TODO: SetDisplayNameFailedUnavailable
+	}
+}
+
+void LLPanelMyProfileEdit::onDialogSetName(const LLSD& notification, const LLSD& response)
 {
 	S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
 	if (option == 0)
@@ -316,12 +332,9 @@ void LLPanelMyProfileEdit::callbackSetName(const LLSD& notification, const LLSD&
 		if (agent_id.isNull()) return;
 
 		std::string display_name = response["display_name"].asString();
-		LLAvatarNameCache::setDisplayName(agent_id, display_name);
-
-		// HACK: Use chat to invalidate names
-		send_chat_from_viewer("refreshname", CHAT_TYPE_NORMAL, 0);
-
-		getChild<LLUICtrl>("user_name")->setValue( display_name );
+		LLAvatarNameCache::setDisplayName(agent_id, display_name,
+			boost::bind(&LLPanelMyProfileEdit::onCacheSetName, this,
+				_1, _2, _3));
 	}
 }
 
@@ -348,7 +361,7 @@ void LLPanelMyProfileEdit::onClickSetName()
 		LLSD payload;
 		payload["agent_id"] = agent_id;
 		LLNotificationsUtil::add("SetDisplayName", args, payload, 
-			boost::bind(&LLPanelMyProfileEdit::callbackSetName, this, _1, _2));
+			boost::bind(&LLPanelMyProfileEdit::onDialogSetName, this, _1, _2));
 	}
 }
 
diff --git a/indra/newview/llpanelme.h b/indra/newview/llpanelme.h
index ed630133ca..9304bc1d82 100644
--- a/indra/newview/llpanelme.h
+++ b/indra/newview/llpanelme.h
@@ -36,6 +36,7 @@
 #include "llpanel.h"
 #include "llpanelprofile.h"
 
+class LLAvatarName;
 class LLPanelMyProfileEdit;
 class LLPanelProfile;
 class LLIconCtrl;
@@ -90,13 +91,15 @@ protected:
 	/*virtual*/void resetData();
 
 	void processProfileProperties(const LLAvatarData* avatar_data);
+	void onNameCache(const LLUUID& agent_id, const LLAvatarName& av_name);
 
 private:
 	void initTexturePickerMouseEvents();
 	void onTexturePickerMouseEnter(LLUICtrl* ctrl);
 	void onTexturePickerMouseLeave(LLUICtrl* ctrl);
 	void onClickSetName();
-	void callbackSetName(const LLSD& notification, const LLSD& response);
+	void onDialogSetName(const LLSD& notification, const LLSD& response);
+	void onCacheSetName(bool success, const std::string& reason, const LLSD& content);
 
 	/**
 	 * Enabled/disables controls to prevent overwriting edited data upon receiving
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 8c07198111..e7d64fd82f 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -3053,6 +3053,27 @@ Change your display name?
     </form>
   </notification>
 
+  <notification
+   icon="alertmodal.tga"
+   name="SetDisplayNameFailedGeneric"
+   type="alertmodal">
+    Sorry, we could not set your display name.  Please try again later.
+  </notification>
+
+  <notification
+   icon="alertmodal.tga"
+   name="SetDisplayNameFailedThrottle"
+   type="alertmodal">
+    Sorry, you can only change your display name once every [FREQUENCY] hour(s). 
+  </notification>
+
+  <notification
+   icon="alertmodal.tga"
+   name="SetDisplayNameFailedUnavailable"
+   type="alertmodal">
+    Sorry, we could not set that display name.  Please try a different name.
+  </notification>
+
   <notification
    icon="alertmodal.tga"
    name="OfferTeleport"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_profile.xml b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
index 1b624da68a..bce988da9d 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
@@ -115,7 +115,6 @@
        left="170"
        name="set_name"
        top_delta="-4"
-       visible="false" 
        width="110" />
      <panel
        name="lifes_images_panel"
-- 
cgit v1.2.3


From d2f9e34598621f1dabad15025417efd6b81dddf0 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Tue, 23 Mar 2010 11:41:33 -0700
Subject: Part DEV-47695 route display name changes via sim for rebroadcast to
 nearby avatars for name tag updates and to update cached display name for LSL
 nonblocking functions

---
 indra/newview/CMakeLists.txt          |   2 +
 indra/newview/llpanelme.cpp           |   3 +-
 indra/newview/llviewerdisplayname.cpp | 140 ++++++++++++++++++++++++++++++++++
 indra/newview/llviewerdisplayname.h   |  53 +++++++++++++
 indra/newview/llviewerregion.cpp      |   1 +
 indra/newview/llvoavatar.cpp          |  12 +++
 indra/newview/llvoavatar.h            |   1 +
 7 files changed, 211 insertions(+), 1 deletion(-)
 create mode 100644 indra/newview/llviewerdisplayname.cpp
 create mode 100644 indra/newview/llviewerdisplayname.h

(limited to 'indra/newview')

diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 7b306d03ab..3f2e12abef 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -456,6 +456,7 @@ set(viewer_SOURCE_FILES
     llviewercontrol.cpp
     llviewercontrollistener.cpp
     llviewerdisplay.cpp
+    llviewerdisplayname.cpp
     llviewerfloaterreg.cpp
     llviewerfoldertype.cpp
     llviewergenericmessage.cpp
@@ -957,6 +958,7 @@ set(viewer_HEADER_FILES
     llviewercontrol.h
     llviewercontrollistener.h
     llviewerdisplay.h
+    llviewerdisplayname.h
     llviewerfloaterreg.h
     llviewerfoldertype.h
     llviewergenericmessage.h
diff --git a/indra/newview/llpanelme.cpp b/indra/newview/llpanelme.cpp
index d6c7d7ea8d..aa19952317 100644
--- a/indra/newview/llpanelme.cpp
+++ b/indra/newview/llpanelme.cpp
@@ -41,6 +41,7 @@
 #include "llagentwearables.h"
 #include "llsidetray.h"
 #include "llviewercontrol.h"
+#include "llviewerdisplayname.h"
 
 // Linden libraries
 #include "llavatarnamecache.h"		// IDEVO
@@ -332,7 +333,7 @@ void LLPanelMyProfileEdit::onDialogSetName(const LLSD& notification, const LLSD&
 		if (agent_id.isNull()) return;
 
 		std::string display_name = response["display_name"].asString();
-		LLAvatarNameCache::setDisplayName(agent_id, display_name,
+		LLViewerDisplayName::set(display_name,
 			boost::bind(&LLPanelMyProfileEdit::onCacheSetName, this,
 				_1, _2, _3));
 	}
diff --git a/indra/newview/llviewerdisplayname.cpp b/indra/newview/llviewerdisplayname.cpp
new file mode 100644
index 0000000000..587d745e51
--- /dev/null
+++ b/indra/newview/llviewerdisplayname.cpp
@@ -0,0 +1,140 @@
+/** 
+ * @file llviewerdisplayname.cpp
+ * @brief Wrapper for display name functionality
+ *
+ * $LicenseInfo:firstyear=2010&license=viewergpl$
+ * 
+ * Copyright (c) 2010, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+#include "llviewerprecompiledheaders.h"
+
+#include "llviewerdisplayname.h"
+
+// viewer includes
+#include "llagent.h"
+#include "llviewerregion.h"
+#include "llvoavatar.h"
+
+// library includes
+#include "llavatarnamecache.h"
+#include "llhttpclient.h"
+#include "llhttpnode.h"
+
+namespace LLViewerDisplayName
+{
+	// Fired when viewer receives server response to display name change
+	set_name_signal_t sSetDisplayNameSignal;
+}
+
+class LLSetDisplayNameResponder : public LLHTTPClient::Responder
+{
+public:
+	// only care about errors
+	/*virtual*/ void error(U32 status, const std::string& reason)
+	{
+		LLViewerDisplayName::sSetDisplayNameSignal(false, "", LLSD());
+		LLViewerDisplayName::sSetDisplayNameSignal.disconnect_all_slots();
+	}
+};
+
+void LLViewerDisplayName::set(const std::string& display_name, const set_name_slot_t& slot)
+{
+	// TODO: simple validation here
+
+	LLViewerRegion* region = gAgent.getRegion();
+	llassert(region);
+	std::string cap_url = region->getCapability("SetDisplayName");
+	if (cap_url.empty())
+	{
+		// this server does not support display names, report error
+		slot(false, "unsupported", LLSD());
+		return;
+	}
+
+	llinfos << "JAMESDEBUG POST to " << cap_url << llendl;
+
+	// Record our caller for when the server sends back a reply
+	sSetDisplayNameSignal.connect(slot);
+
+	// POST the requested change.  The sim will not send a response back to
+	// this request directly, rather it will send a separate message after it
+	// communicates with the back-end.
+	LLSD body;
+	body["display_name"] = display_name;
+	LLHTTPClient::post(cap_url, body, new LLSetDisplayNameResponder);
+}
+
+class LLSetDisplayNameReply : public LLHTTPNode
+{
+	/*virtual*/ void post(
+		LLHTTPNode::ResponsePtr response,
+		const LLSD& context,
+		const LLSD& input) const
+	{
+		LLSD body = input["body"];
+
+		S32 status = body["status"].asInteger();
+		bool success = (status == 200);
+		std::string reason = body["reason"].asString();
+		LLSD content = body["content"];
+
+		llinfos << "JAMESDEBUG LLSetDisplayNameReply status " << status
+			<< " reason " << reason << llendl;
+
+		// inform caller of result
+		LLViewerDisplayName::sSetDisplayNameSignal(success, reason, content);
+		LLViewerDisplayName::sSetDisplayNameSignal.disconnect_all_slots();
+	}
+};
+
+class LLDisplayNameUpdate : public LLHTTPNode
+{
+	/*virtual*/ void post(
+		LLHTTPNode::ResponsePtr response,
+		const LLSD& context,
+		const LLSD& input) const
+	{
+		LLSD body = input["body"];
+		LLUUID agent_id = body["agent_id"];
+
+		llinfos << "JAMESDEBUG LLDisplayNameUpdate agent_id "
+			<< agent_id << llendl;
+
+		// force re-request of this agent's name data
+		LLAvatarNameCache::erase(agent_id);
+
+		// force name tag to update
+		LLVOAvatar::invalidateNameTag(agent_id);
+	}
+};
+
+LLHTTPRegistration<LLSetDisplayNameReply>
+    gHTTPRegistrationMessageSetDisplayNameReply(
+		"/message/SetDisplayNameReply");
+
+LLHTTPRegistration<LLDisplayNameUpdate>
+    gHTTPRegistrationMessageDisplayNameUpdate(
+		"/message/DisplayNameUpdate");
diff --git a/indra/newview/llviewerdisplayname.h b/indra/newview/llviewerdisplayname.h
new file mode 100644
index 0000000000..c77388531b
--- /dev/null
+++ b/indra/newview/llviewerdisplayname.h
@@ -0,0 +1,53 @@
+/** 
+ * @file llviewerdisplayname.h
+ * @brief Wrapper for display name functionality
+ *
+ * $LicenseInfo:firstyear=2010&license=viewergpl$
+ * 
+ * Copyright (c) 2010, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+#ifndef LLVIEWERDISPLAYNAME_H
+#define LLVIEWERDISPLAYNAME_H
+
+#include <boost/signals2.hpp>
+
+class LLSD;
+class LLUUID;
+
+namespace LLViewerDisplayName
+{
+	typedef boost::signals2::signal<
+		void (bool success, const std::string& reason, const LLSD& content)>
+			set_name_signal_t;
+	typedef set_name_signal_t::slot_type set_name_slot_t;
+
+	// Sends an update to the server to change a display name
+	// and call back when done.  May not succeed due to service
+	// unavailable or name not available.
+	void set(const std::string& display_name, const set_name_slot_t& slot);
+}
+
+#endif // LLVIEWERDISPLAYNAME_H
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index ce627494c8..8f43b6bcf7 100644
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -1495,6 +1495,7 @@ void LLViewerRegion::setSeedCapability(const std::string& url)
 	capabilityNames.append("SendUserReport");
 	capabilityNames.append("SendUserReportWithScreenshot");
 	capabilityNames.append("ServerReleaseNotes");
+	capabilityNames.append("SetDisplayName");
 	capabilityNames.append("StartGroupProposal");
 	capabilityNames.append("TextureStats");
 	capabilityNames.append("UntrustedSimulatorMessage");
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 4c8bb0ac13..f3850d58a1 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -3004,6 +3004,18 @@ void LLVOAvatar::clearNameTag()
 	}
 }
 
+//static
+void LLVOAvatar::invalidateNameTag(const LLUUID& agent_id)
+{
+	LLViewerObject* obj = gObjectList.findObject(agent_id);
+	if (!obj) return;
+
+	LLVOAvatar* avatar = dynamic_cast<LLVOAvatar*>(obj);
+	if (!avatar) return;
+
+	avatar->clearNameTag();
+}
+
 // Compute name tag position during idle update
 LLVector3 LLVOAvatar::idleUpdateNameTagPosition(const LLVector3& root_pos_last)
 {
diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h
index c31369358c..65343c9058 100644
--- a/indra/newview/llvoavatar.h
+++ b/indra/newview/llvoavatar.h
@@ -215,6 +215,7 @@ public:
 	void			idleUpdateNameTagAlpha(BOOL new_name, F32 alpha);
 	LLColor4		getNameTagColor(bool is_friend);
 	void			clearNameTag();
+	static void		invalidateNameTag(const LLUUID& agent_id);
 	void			addNameTagLine(const std::string& line, const LLColor4& color, S32 style, const LLFontGL* font);
 	void 			idleUpdateRenderCost();
 	void 			idleUpdateTractorBeam();
-- 
cgit v1.2.3


From 0b14880d14c412e9841284c357789a973e1f0f40 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Mon, 29 Mar 2010 17:33:40 -0700
Subject: Fix conflicting localizations of "You paid..." notification

---
 indra/newview/llviewermessage.cpp | 133 +++++++++++++++++++-------------------
 1 file changed, 68 insertions(+), 65 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 1491febd78..ffe638dfbf 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -4530,68 +4530,71 @@ void process_time_dilation(LLMessageSystem *msg, void **user_data)
 }
 */
 
-
-static void show_money_balance_notification(const std::string& desc)
-{
-	// Intercept some messages constructed in lltransactionflags.cpp
-	// to fix avatar names and allow localization.
-	LLSD args;
-	LLSD payload;
-	std::string name;
-	boost::smatch match;
-	const char* notification_name = NULL;
-
-	// <name> paid you L$<amount> for <reason>.
-	static const boost::regex paid_you_for("(.+) paid you L\\$(\\d+) for (.*)\\.");
-	// <name> paid you L$<amount>.
-	static const boost::regex paid_you("(.+) paid you L\\$(\\d+)\\.");
-	// You paid <name> L$<amount> [for <reason>].
-	static const boost::regex you_paid("You paid (.*) L\\$(\\d+)(.*)\\.");
-
-	if (boost::regex_match(desc, match, paid_you_for))
-	{
-		name = match[1].str();
-		// IDEVO strip legacy "Resident" name
-		name = LLCacheName::cleanFullName(name);
-		args["NAME"] = name;
-		args["AMOUNT"] = match[2].str();
-		args["REASON"] = match[3].str();
-		notification_name = "PaymentReceivedFor";
-	}
-	else if (boost::regex_match(desc, match, paid_you))
-	{
-		name = match[1].str();
-		// IDEVO strip legacy "Resident" name
-		name = LLCacheName::cleanFullName(name);
-		args["NAME"] = name;
-		args["AMOUNT"] = match[2].str();
-		notification_name = "PaymentReceived";
-	}
-	else if (boost::regex_match(desc, match, you_paid))
-	{
-		name = match[1].str();
-		// IDEVO strip legacy "Resident" name
-		name = LLCacheName::cleanFullName(name);
-		args["NAME"] = name;
-		args["AMOUNT"] = match[2].str();
-		args["REASON"] = match[3].str();
-		notification_name = "PaymentSent";
-	}
-
-	// if name extracted and name cache contains avatar id send loggable notification
-	LLUUID from_id;
-	if (notification_name != NULL
-		&& gCacheName->getUUID(name, from_id))
-	{
-		payload["from_id"] = from_id;
-		LLNotificationsUtil::add(notification_name, args, payload);
-	}
-	else
-	{
-		args["MESSAGE"] = desc;
-		LLNotificationsUtil::add("SystemMessage", args);
-	}
-}
+// Both Product Engine and I wrote solutions to non-localized payment messages.
+// Their code probably has more localized strings against it.
+// James Cook, 2010-03-27
+//
+//static void show_money_balance_notification(const std::string& desc)
+//{
+//	// Intercept some messages constructed in lltransactionflags.cpp
+//	// to fix avatar names and allow localization.
+//	LLSD args;
+//	LLSD payload;
+//	std::string name;
+//	boost::smatch match;
+//	const char* notification_name = NULL;
+//
+//	// <name> paid you L$<amount> for <reason>.
+//	static const boost::regex paid_you_for("(.+) paid you L\\$(\\d+) for (.*)\\.");
+//	// <name> paid you L$<amount>.
+//	static const boost::regex paid_you("(.+) paid you L\\$(\\d+)\\.");
+//	// You paid <name> L$<amount> [for <reason>].
+//	static const boost::regex you_paid("You paid (.*) L\\$(\\d+)(.*)\\.");
+//
+//	if (boost::regex_match(desc, match, paid_you_for))
+//	{
+//		name = match[1].str();
+//		// IDEVO strip legacy "Resident" name
+//		name = LLCacheName::cleanFullName(name);
+//		args["NAME"] = name;
+//		args["AMOUNT"] = match[2].str();
+//		args["REASON"] = match[3].str();
+//		notification_name = "PaymentReceivedFor";
+//	}
+//	else if (boost::regex_match(desc, match, paid_you))
+//	{
+//		name = match[1].str();
+//		// IDEVO strip legacy "Resident" name
+//		name = LLCacheName::cleanFullName(name);
+//		args["NAME"] = name;
+//		args["AMOUNT"] = match[2].str();
+//		notification_name = "PaymentReceived";
+//	}
+//	else if (boost::regex_match(desc, match, you_paid))
+//	{
+//		name = match[1].str();
+//		// IDEVO strip legacy "Resident" name
+//		name = LLCacheName::cleanFullName(name);
+//		args["NAME"] = name;
+//		args["AMOUNT"] = match[2].str();
+//		args["REASON"] = match[3].str();
+//		notification_name = "PaymentSent";
+//	}
+//
+//	// if name extracted and name cache contains avatar id send loggable notification
+//	LLUUID from_id;
+//	if (notification_name != NULL
+//		&& gCacheName->getUUID(name, from_id))
+//	{
+//		payload["from_id"] = from_id;
+//		LLNotificationsUtil::add(notification_name, args, payload);
+//	}
+//	else
+//	{
+//		args["MESSAGE"] = desc;
+//		LLNotificationsUtil::add("SystemMessage", args);
+//	}
+//}
 
 void process_money_balance_reply( LLMessageSystem* msg, void** )
 {
@@ -4667,13 +4670,13 @@ void process_money_balance_reply( LLMessageSystem* msg, void** )
 	
 			//reform description
 			LLStringUtil::format_map_t str_args;
-			str_args["NAME"] = base_name;
+			str_args["NAME"] = LLCacheName::cleanFullName(name);
 			str_args["AMOUNT"] = ammount;
 			std::string new_description = LLTrans::getString("paid_you_ldollars", str_args);
 
 
 			args["MESSAGE"] = new_description;
-			args["NAME"] = name;
+			args["NAME"] = LLCacheName::cleanFullName(name);
 			LLSD payload;
 			payload["from_id"] = from_id;
 			LLNotificationsUtil::add("PaymentReceived", args, payload);
@@ -4712,7 +4715,7 @@ void process_money_balance_reply( LLMessageSystem* msg, void** )
 					std::string name = std::string(matches[1]);
 					if(!name.empty())
 					{
-						str_args["[NAME]"] = name;
+						str_args["[NAME]"] = LLCacheName::cleanFullName(name);
 						line = "you_paid_ldollars";
 					}
 
-- 
cgit v1.2.3


From 02f518c534ed89317d959ed6a1404da251efa3ef Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Mon, 29 Mar 2010 17:34:00 -0700
Subject: Fix edit profile layout for Set Name... button, bad merge

---
 indra/newview/skins/default/xui/en/panel_edit_profile.xml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_edit_profile.xml b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
index 97faa16ab1..bce988da9d 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
@@ -174,7 +174,7 @@
        height="102"
        layout="topleft"
        left="123"
-       top="25"
+       top="62"
        max_length="512"
        name="sl_description_edit"
        width="157"
@@ -230,7 +230,7 @@
        layout="topleft"
        left="123"
        max_length="512"
-       top="157"
+       top="195"
        name="fl_description_edit"
        width="157"
        word_wrap="true">
-- 
cgit v1.2.3


From f96376cba49517d0aadd10ac95244065c454d4d5 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Mon, 29 Mar 2010 17:46:06 -0700
Subject: Buy arrow, home tab, SL Logo binary art lost in merge

---
 indra/newview/skins/default/textures/icons/SL_Logo.png | Bin 973 -> 3999 bytes
 .../skins/default/textures/navbar/BuyArrow_Over.png    | Bin 508 -> 294 bytes
 .../skins/default/textures/navbar/BuyArrow_Press.png   | Bin 2949 -> 294 bytes
 .../default/textures/taskpanel/TabIcon_Home_Off.png    | Bin 228 -> 749 bytes
 .../textures/taskpanel/TabIcon_Home_Selected.png       | Bin 291 -> 790 bytes
 5 files changed, 0 insertions(+), 0 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/textures/icons/SL_Logo.png b/indra/newview/skins/default/textures/icons/SL_Logo.png
index c9fbde987a..8342d7cfee 100644
Binary files a/indra/newview/skins/default/textures/icons/SL_Logo.png and b/indra/newview/skins/default/textures/icons/SL_Logo.png differ
diff --git a/indra/newview/skins/default/textures/navbar/BuyArrow_Over.png b/indra/newview/skins/default/textures/navbar/BuyArrow_Over.png
index 95913dd55b..0b3f252ccf 100644
Binary files a/indra/newview/skins/default/textures/navbar/BuyArrow_Over.png and b/indra/newview/skins/default/textures/navbar/BuyArrow_Over.png differ
diff --git a/indra/newview/skins/default/textures/navbar/BuyArrow_Press.png b/indra/newview/skins/default/textures/navbar/BuyArrow_Press.png
index a02675502a..5c4c150bed 100644
Binary files a/indra/newview/skins/default/textures/navbar/BuyArrow_Press.png and b/indra/newview/skins/default/textures/navbar/BuyArrow_Press.png differ
diff --git a/indra/newview/skins/default/textures/taskpanel/TabIcon_Home_Off.png b/indra/newview/skins/default/textures/taskpanel/TabIcon_Home_Off.png
index 1e7d7beafa..421f5e1705 100644
Binary files a/indra/newview/skins/default/textures/taskpanel/TabIcon_Home_Off.png and b/indra/newview/skins/default/textures/taskpanel/TabIcon_Home_Off.png differ
diff --git a/indra/newview/skins/default/textures/taskpanel/TabIcon_Home_Selected.png b/indra/newview/skins/default/textures/taskpanel/TabIcon_Home_Selected.png
index a70d3abbbf..293aeef5e6 100644
Binary files a/indra/newview/skins/default/textures/taskpanel/TabIcon_Home_Selected.png and b/indra/newview/skins/default/textures/taskpanel/TabIcon_Home_Selected.png differ
-- 
cgit v1.2.3


From 0c89242b4ca4cd99baee41f4b1ca8f1817f6012e Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Tue, 30 Mar 2010 09:36:43 -0700
Subject: Demo code - name changes work on agni again

---
 indra/newview/llviewerdisplayname.cpp | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewerdisplayname.cpp b/indra/newview/llviewerdisplayname.cpp
index 587d745e51..62fbf85985 100644
--- a/indra/newview/llviewerdisplayname.cpp
+++ b/indra/newview/llviewerdisplayname.cpp
@@ -69,12 +69,16 @@ void LLViewerDisplayName::set(const std::string& display_name, const set_name_sl
 	std::string cap_url = region->getCapability("SetDisplayName");
 	if (cap_url.empty())
 	{
-		// this server does not support display names, report error
-		slot(false, "unsupported", LLSD());
+		// JAMESDEBUG HACK for demos, fall back to prototype name service
+		LLAvatarNameCache::setDisplayName(gAgent.getID(), display_name, slot);
 		return;
+
+		// this server does not support display names, report error
+		//slot(false, "unsupported", LLSD());
+		//return;
 	}
 
-	llinfos << "JAMESDEBUG POST to " << cap_url << llendl;
+	llinfos << "Set name POST to " << cap_url << llendl;
 
 	// Record our caller for when the server sends back a reply
 	sSetDisplayNameSignal.connect(slot);
-- 
cgit v1.2.3


From be58f87ebb20bc2ef0057cb787b52fb279a702c3 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Tue, 30 Mar 2010 11:53:40 -0700
Subject: Remove some notifications eliminated in merge

---
 indra/newview/llnotificationhandlerutil.cpp          | 8 ++++----
 indra/newview/skins/default/xui/en/notifications.xml | 4 +++-
 2 files changed, 7 insertions(+), 5 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llnotificationhandlerutil.cpp b/indra/newview/llnotificationhandlerutil.cpp
index ef9bc2afc5..b5e0d998fe 100644
--- a/indra/newview/llnotificationhandlerutil.cpp
+++ b/indra/newview/llnotificationhandlerutil.cpp
@@ -116,8 +116,8 @@ const static std::string GRANTED_MODIFY_RIGHTS("GrantedModifyRights"),
 		REVOKED_MODIFY_RIGHTS("RevokedModifyRights"), OBJECT_GIVE_ITEM(
 				"ObjectGiveItem"),
 						PAYMENT_RECEIVED("PaymentReceived"),
-						PAYMENT_RECEIVED_FOR("PaymentReceivedFor"),
-						PAYMENT_SENT("PaymentSent"),
+//						PAYMENT_RECEIVED_FOR("PaymentReceivedFor"),
+//						PAYMENT_SENT("PaymentSent"),
 						ADD_FRIEND_WITH_MESSAGE("AddFriendWithMessage"),
 						USER_GIVE_ITEM("UserGiveItem"),
 						INVENTORY_ACCEPTED("InventoryAccepted"),
@@ -139,8 +139,8 @@ bool LLHandlerUtil::canLogToIM(const LLNotificationPtr& notification)
 	return GRANTED_MODIFY_RIGHTS == notification->getName()
 			|| REVOKED_MODIFY_RIGHTS == notification->getName()
 			|| PAYMENT_RECEIVED == notification->getName()
-			|| PAYMENT_RECEIVED_FOR == notification->getName()
-			|| PAYMENT_SENT == notification->getName()
+//			|| PAYMENT_RECEIVED_FOR == notification->getName()
+//			|| PAYMENT_SENT == notification->getName()
 			|| OFFER_FRIENDSHIP == notification->getName()
 			|| FRIENDSHIP_OFFERED == notification->getName()
 			|| FRIENDSHIP_ACCEPTED == notification->getName()
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index c1f1afe93d..0e14b06407 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -4667,9 +4667,10 @@ Please select at least one type of content to search (General, Moderate, or Adul
    icon="notify.tga"
    name="PaymentReceived"
    type="notify">
-[NAME] paid you L$[AMOUNT].
+[MESSAGE]
   </notification>
 
+  <!--
   <notification
    icon="notify.tga"
    name="PaymentReceivedFor"
@@ -4683,6 +4684,7 @@ Please select at least one type of content to search (General, Moderate, or Adul
    type="notify">
 You paid [NAME] L$[AMOUNT][REASON].
   </notification>
+  -->
 
   <notification
    icon="notify.tga"
-- 
cgit v1.2.3


From 8a702f9493d764d133ff2c62168c1c3503dde56c Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Tue, 30 Mar 2010 16:42:00 -0700
Subject: Work-in-progress localization/name fixup for object returns

---
 indra/newview/llviewermessage.cpp | 89 +++++++++++++++++++++++++++++----------
 1 file changed, 66 insertions(+), 23 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index ffe638dfbf..07288dc96f 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -1717,21 +1717,54 @@ static std::string clean_name_from_im(const std::string& name, EInstantMessage t
 	}
 }
 
-static std::string clean_name_from_task_im(const std::string& msg)
+//static std::string clean_name_from_task_im(const std::string& msg)
+//{
+//	boost::smatch match;
+//	static const boost::regex returned_exp(
+//		"(.*been returned to your inventory lost and found folder by )(.+)( (from|near).*)");
+//	if (boost::regex_match(msg, match, returned_exp))
+//	{
+//		// match objects are 1-based for groups
+//		std::string final = match[1].str();
+//		std::string name = match[2].str();
+//		final += LLCacheName::cleanFullName(name);
+//		final += match[3].str();
+//		return final;
+//	}
+//	return msg;
+//}
+
+static void parse_bucket_im_from_task(const std::string& bucket,
+									  const LLUUID& from_id,
+									  BOOL from_group,
+									  const LLUUID& to_id,
+									  const LLVector3& position,
+									  const std::string& message,
+									  std::string *object_slurl,
+									  std::string *final_message)
 {
-	boost::smatch match;
-	static const boost::regex returned_exp(
-		"(.*been returned to your inventory lost and found folder by )(.+)( (from|near).*)");
-	if (boost::regex_match(msg, match, returned_exp))
-	{
-		// match objects are 1-based for groups
-		std::string final = match[1].str();
-		std::string name = match[2].str();
-		final += LLCacheName::cleanFullName(name);
-		final += match[3].str();
-		return final;
-	}
-	return msg;
+	static const std::string DEREZ_TO_OWNER = "|derezToOwner";
+	if (bucket.compare(0, DEREZ_TO_OWNER.length(), DEREZ_TO_OWNER))
+	{
+		// ...starts with special tag
+		// See simulator LLRoundRobin::derezObjectsBackToOwner() for details
+		typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
+		boost::char_separator<char> sep("|");
+		tokenizer tokens(bucket, sep);
+		tokenizer::iterator token_it = tokens.begin();
+		//S32 destination_type;
+		//S32 object_count;
+
+		// JAMESDEBUG TODO: HERE
+		*object_slurl = "JAMESDEBUG";
+		*final_message = "JAMESDEBUG";
+	}
+	else
+	{
+		// ...normal IM from task
+		*object_slurl = bucket;
+		*final_message = message;
+	}
 }
 
 void process_improved_im(LLMessageSystem *msg, void **user_data)
@@ -2263,9 +2296,6 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
 				return;
 			}
 
-			// Build a link to open the object IM info window.
-			std::string location = ll_safe_string((char*)binary_bucket, binary_bucket_size-1);
-
 			if (session_id.notNull())
 			{
 				chat.mFromID = session_id;
@@ -2280,18 +2310,31 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
 				chat.mFromID = from_id ^ gAgent.getSessionID();
 			}
 
+			// Build a link to open the object IM info window.
+			// Also handle localization for certain system messages
+			// sent as IM_FROM_TASK.
+			std::string object_slurl;
+			std::string final_message;
+			std::string bucket_im_from_task =
+				ll_safe_string((char*)binary_bucket, binary_bucket_size-1);
+			parse_bucket_im_from_task(
+				bucket_im_from_task,
+				from_id, from_group, to_id, position, message,
+				&object_slurl, &final_message);
+
 			if(SYSTEM_FROM == name)
 			{
 				// System's UUID is NULL (fixes EXT-4766)
-				chat.mFromID = from_id = LLUUID::null;
+				chat.mFromID = LLUUID::null;
+				from_id = LLUUID::null;
 			}
 
 			// IDEVO Some messages have embedded resident names
-			message = clean_name_from_task_im(message);
+			//message = clean_name_from_task_im(message);
 
 			LLSD query_string;
 			query_string["owner"] = from_id;
-			query_string["slurl"] = location;
+			query_string["slurl"] = object_slurl;
 			query_string["name"] = name;
 			if (from_group)
 			{
@@ -2312,7 +2355,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
 			{
 				LLSD args;
 				args["owner_id"] = from_id;
-				args["slurl"] = location;
+				args["slurl"] = object_slurl;
 				args["type"] = LLNotificationsUI::NT_NEARBYCHAT;
 				LLNotificationsUI::LLNotificationManager::instance().onChat(chat, args);
 			}
@@ -2323,13 +2366,13 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
 			
 			LLSD substitutions;
 			substitutions["NAME"] = name;
-			substitutions["MSG"] = message;
+			substitutions["MSG"] = final_message;
 
 			LLSD payload;
 			payload["object_id"] = session_id;
 			payload["owner_id"] = from_id;
 			payload["from_id"] = from_id;
-			payload["slurl"] = location;
+			payload["slurl"] = object_slurl;
 			payload["name"] = name;
 			std::string session_name;
 			gCacheName->getFullName(from_id, session_name);
-- 
cgit v1.2.3


From 6b5464109271612b066dcc2030ad8219fd12ac7a Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Wed, 31 Mar 2010 10:02:58 -0700
Subject: Backed out changeset: 18811ebc0e95

Won't fix localization of object returns - just fix names
---
 indra/newview/llviewermessage.cpp | 89 ++++++++++-----------------------------
 1 file changed, 23 insertions(+), 66 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 07288dc96f..ffe638dfbf 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -1717,54 +1717,21 @@ static std::string clean_name_from_im(const std::string& name, EInstantMessage t
 	}
 }
 
-//static std::string clean_name_from_task_im(const std::string& msg)
-//{
-//	boost::smatch match;
-//	static const boost::regex returned_exp(
-//		"(.*been returned to your inventory lost and found folder by )(.+)( (from|near).*)");
-//	if (boost::regex_match(msg, match, returned_exp))
-//	{
-//		// match objects are 1-based for groups
-//		std::string final = match[1].str();
-//		std::string name = match[2].str();
-//		final += LLCacheName::cleanFullName(name);
-//		final += match[3].str();
-//		return final;
-//	}
-//	return msg;
-//}
-
-static void parse_bucket_im_from_task(const std::string& bucket,
-									  const LLUUID& from_id,
-									  BOOL from_group,
-									  const LLUUID& to_id,
-									  const LLVector3& position,
-									  const std::string& message,
-									  std::string *object_slurl,
-									  std::string *final_message)
+static std::string clean_name_from_task_im(const std::string& msg)
 {
-	static const std::string DEREZ_TO_OWNER = "|derezToOwner";
-	if (bucket.compare(0, DEREZ_TO_OWNER.length(), DEREZ_TO_OWNER))
-	{
-		// ...starts with special tag
-		// See simulator LLRoundRobin::derezObjectsBackToOwner() for details
-		typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
-		boost::char_separator<char> sep("|");
-		tokenizer tokens(bucket, sep);
-		tokenizer::iterator token_it = tokens.begin();
-		//S32 destination_type;
-		//S32 object_count;
-
-		// JAMESDEBUG TODO: HERE
-		*object_slurl = "JAMESDEBUG";
-		*final_message = "JAMESDEBUG";
-	}
-	else
-	{
-		// ...normal IM from task
-		*object_slurl = bucket;
-		*final_message = message;
-	}
+	boost::smatch match;
+	static const boost::regex returned_exp(
+		"(.*been returned to your inventory lost and found folder by )(.+)( (from|near).*)");
+	if (boost::regex_match(msg, match, returned_exp))
+	{
+		// match objects are 1-based for groups
+		std::string final = match[1].str();
+		std::string name = match[2].str();
+		final += LLCacheName::cleanFullName(name);
+		final += match[3].str();
+		return final;
+	}
+	return msg;
 }
 
 void process_improved_im(LLMessageSystem *msg, void **user_data)
@@ -2296,6 +2263,9 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
 				return;
 			}
 
+			// Build a link to open the object IM info window.
+			std::string location = ll_safe_string((char*)binary_bucket, binary_bucket_size-1);
+
 			if (session_id.notNull())
 			{
 				chat.mFromID = session_id;
@@ -2310,31 +2280,18 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
 				chat.mFromID = from_id ^ gAgent.getSessionID();
 			}
 
-			// Build a link to open the object IM info window.
-			// Also handle localization for certain system messages
-			// sent as IM_FROM_TASK.
-			std::string object_slurl;
-			std::string final_message;
-			std::string bucket_im_from_task =
-				ll_safe_string((char*)binary_bucket, binary_bucket_size-1);
-			parse_bucket_im_from_task(
-				bucket_im_from_task,
-				from_id, from_group, to_id, position, message,
-				&object_slurl, &final_message);
-
 			if(SYSTEM_FROM == name)
 			{
 				// System's UUID is NULL (fixes EXT-4766)
-				chat.mFromID = LLUUID::null;
-				from_id = LLUUID::null;
+				chat.mFromID = from_id = LLUUID::null;
 			}
 
 			// IDEVO Some messages have embedded resident names
-			//message = clean_name_from_task_im(message);
+			message = clean_name_from_task_im(message);
 
 			LLSD query_string;
 			query_string["owner"] = from_id;
-			query_string["slurl"] = object_slurl;
+			query_string["slurl"] = location;
 			query_string["name"] = name;
 			if (from_group)
 			{
@@ -2355,7 +2312,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
 			{
 				LLSD args;
 				args["owner_id"] = from_id;
-				args["slurl"] = object_slurl;
+				args["slurl"] = location;
 				args["type"] = LLNotificationsUI::NT_NEARBYCHAT;
 				LLNotificationsUI::LLNotificationManager::instance().onChat(chat, args);
 			}
@@ -2366,13 +2323,13 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
 			
 			LLSD substitutions;
 			substitutions["NAME"] = name;
-			substitutions["MSG"] = final_message;
+			substitutions["MSG"] = message;
 
 			LLSD payload;
 			payload["object_id"] = session_id;
 			payload["owner_id"] = from_id;
 			payload["from_id"] = from_id;
-			payload["slurl"] = object_slurl;
+			payload["slurl"] = location;
 			payload["name"] = name;
 			std::string session_name;
 			gCacheName->getFullName(from_id, session_name);
-- 
cgit v1.2.3


From 7381679cd0f77a2b91b2fce5f0060afc2d359f5a Mon Sep 17 00:00:00 2001
From: James Cook <james@cookmd.com>
Date: Thu, 1 Apr 2010 10:15:37 -0700
Subject: Add TransactionInfo to MoneyBalanceReply, unpack test data

---
 indra/newview/llviewermessage.cpp | 20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index ffe638dfbf..2502cd4303 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -4610,6 +4610,24 @@ void process_money_balance_reply( LLMessageSystem* msg, void** )
 	LL_INFOS("Messaging") << "L$, credit, committed: " << balance << " " << credit << " "
 			<< committed << LL_ENDL;
 
+    // Added in server 1.40 and viewer 2.1, support for localization
+    // and agent ids for name lookup.
+    S32 transaction_type = 0;
+    U32 transaction_flags = 0;
+    LLUUID source_id;
+    LLUUID dest_id;
+    S32 amount = 0;
+    std::string item_description;
+    if (msg->has("TransactionInfo"))
+    {
+        msg->getS32("TransactionInfo", "TransactionType", transaction_type);
+        msg->getU32("TransactionInfo", "TransactionFlags", transaction_flags);
+        msg->getUUID("TransactionInfo", "SourceID", source_id);
+        msg->getUUID("TransactionInfo", "DestID", dest_id);
+        msg->getS32("TransactionInfo", "Amount", amount);
+        msg->getString("TransactionInfo", "ItemDescription", item_description);
+    }
+    
 	if (gStatusBar)
 	{
 	//	S32 old_balance = gStatusBar->getBalance();
@@ -4649,7 +4667,7 @@ void process_money_balance_reply( LLMessageSystem* msg, void** )
 		// "<avatar name> paid you L$"
 		const std::string marker = "paid you L$";
 
-		args["MESSAGE"] = desc;
+		args["MESSAGE"] = desc + item_description; // JAMESDEBUG
 
 		// extract avatar name from system message
 		S32 marker_pos = desc.find(marker, 0);
-- 
cgit v1.2.3


From 28236d001bfbfa2a17c6372c615721b347b9cc38 Mon Sep 17 00:00:00 2001
From: James Cook <james@cookmd.com>
Date: Thu, 1 Apr 2010 14:11:29 -0700
Subject: Debug spam

---
 indra/newview/llviewermessage.cpp | 1 +
 1 file changed, 1 insertion(+)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 2502cd4303..8b762eadac 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -4626,6 +4626,7 @@ void process_money_balance_reply( LLMessageSystem* msg, void** )
         msg->getUUID("TransactionInfo", "DestID", dest_id);
         msg->getS32("TransactionInfo", "Amount", amount);
         msg->getString("TransactionInfo", "ItemDescription", item_description);
+        llinfos << "JAMESDEBUG ItemDescription " << item_description << llendl;
     }
     
 	if (gStatusBar)
-- 
cgit v1.2.3


From 71dfe17fd16500cbb124a53611472174972df37a Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Fri, 2 Apr 2010 09:45:17 -0700
Subject: Updated to latest MoneyBalanceReply message format

---
 indra/newview/llviewermessage.cpp | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 8b762eadac..8f68c34736 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -4613,20 +4613,23 @@ void process_money_balance_reply( LLMessageSystem* msg, void** )
     // Added in server 1.40 and viewer 2.1, support for localization
     // and agent ids for name lookup.
     S32 transaction_type = 0;
-    U32 transaction_flags = 0;
     LLUUID source_id;
+	BOOL is_source_group = FALSE;
     LLUUID dest_id;
+	BOOL is_dest_group = FALSE;
     S32 amount = 0;
     std::string item_description;
     if (msg->has("TransactionInfo"))
     {
         msg->getS32("TransactionInfo", "TransactionType", transaction_type);
-        msg->getU32("TransactionInfo", "TransactionFlags", transaction_flags);
         msg->getUUID("TransactionInfo", "SourceID", source_id);
+		msg->getBOOL("TransactionInfo", "IsSourceGroup", is_source_group);
         msg->getUUID("TransactionInfo", "DestID", dest_id);
+		msg->getBOOL("TransactionInfo", "IsDestGroup", is_dest_group);
         msg->getS32("TransactionInfo", "Amount", amount);
         msg->getString("TransactionInfo", "ItemDescription", item_description);
-        llinfos << "JAMESDEBUG ItemDescription " << item_description << llendl;
+        llinfos << "JAMESDEBUG money_balance_reply source " << source_id 
+			<< " item " << item_description << llendl;
     }
     
 	if (gStatusBar)
-- 
cgit v1.2.3


From adbe038385393785ae5cf56ecdd6a87fc28a28ee Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Wed, 7 Apr 2010 10:21:47 -0700
Subject: Fix bad indentation

---
 indra/newview/llvoavatar.cpp | 194 +++++++++++++++++++++----------------------
 1 file changed, 97 insertions(+), 97 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 67ae5b1eb0..5bf9f69ae3 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -2696,18 +2696,18 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last)
 		return;
 	}
 
-		BOOL new_name = FALSE;
-		if (visible_chat != mVisibleChat)
-		{
-			mVisibleChat = visible_chat;
-			new_name = TRUE;
-		}
-		
-		if (sRenderGroupTitles != mRenderGroupTitles)
-		{
-			mRenderGroupTitles = sRenderGroupTitles;
-			new_name = TRUE;
-		}
+	BOOL new_name = FALSE;
+	if (visible_chat != mVisibleChat)
+	{
+		mVisibleChat = visible_chat;
+		new_name = TRUE;
+	}
+	
+	if (sRenderGroupTitles != mRenderGroupTitles)
+	{
+		mRenderGroupTitles = sRenderGroupTitles;
+		new_name = TRUE;
+	}
 
 	// IDEVO HACK to force refresh
 	if (LLAvatarNameCache::useDisplayNames() != mUseDisplayNames)
@@ -2716,30 +2716,30 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last)
 		new_name = TRUE;
 	}
 
-		// First Calculate Alpha
-		// If alpha > 0, create mNameText if necessary, otherwise delete it
-			F32 alpha = 0.f;
-			if (mAppAngle > 5.f)
-			{
-				const F32 START_FADE_TIME = NAME_SHOW_TIME - FADE_DURATION;
-				if (!visible_chat && sRenderName == RENDER_NAME_FADE && time_visible > START_FADE_TIME)
-				{
-					alpha = 1.f - (time_visible - START_FADE_TIME) / FADE_DURATION;
-				}
-				else
-				{
-					// ...not fading, full alpha
-					alpha = 1.f;
-				}
-			}
-			else if (mAppAngle > 2.f)
-			{
-				// far away is faded out also
-				alpha = (mAppAngle-2.f)/3.f;
-			}
+	// First Calculate Alpha
+	// If alpha > 0, create mNameText if necessary, otherwise delete it
+	F32 alpha = 0.f;
+	if (mAppAngle > 5.f)
+	{
+		const F32 START_FADE_TIME = NAME_SHOW_TIME - FADE_DURATION;
+		if (!visible_chat && sRenderName == RENDER_NAME_FADE && time_visible > START_FADE_TIME)
+		{
+			alpha = 1.f - (time_visible - START_FADE_TIME) / FADE_DURATION;
+		}
+		else
+		{
+			// ...not fading, full alpha
+			alpha = 1.f;
+		}
+	}
+	else if (mAppAngle > 2.f)
+	{
+		// far away is faded out also
+		alpha = (mAppAngle-2.f)/3.f;
+	}
 
 	if (alpha <= 0.f)
-			{
+	{
 		if (mNameText)
 		{
 			mNameText->markDead();
@@ -2749,19 +2749,19 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last)
 		return;
 	}
 
-				if (!mNameText)
-				{
+	if (!mNameText)
+	{
 		mNameText = static_cast<LLHUDNameTag*>( LLHUDObject::addHUDObject(
 			LLHUDObject::LL_HUD_NAME_TAG) );
 		//mNameText->setMass(10.f);
-					mNameText->setSourceObject(this);
+		mNameText->setSourceObject(this);
 		mNameText->setVertAlignment(LLHUDNameTag::ALIGN_VERT_TOP);
-					mNameText->setVisibleOffScreen(TRUE);
-					mNameText->setMaxLines(11);
-					mNameText->setFadeDistance(CHAT_NORMAL_RADIUS, 5.f);
-					sNumVisibleChatBubbles++;
-					new_name = TRUE;
-				}
+		mNameText->setVisibleOffScreen(TRUE);
+		mNameText->setMaxLines(11);
+		mNameText->setFadeDistance(CHAT_NORMAL_RADIUS, 5.f);
+		sNumVisibleChatBubbles++;
+		new_name = TRUE;
+	}
 				
 	LLVector3 name_position = idleUpdateNameTagPosition(root_pos_last);
 	mNameText->setPositionAgent(name_position);
@@ -2772,10 +2772,10 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last)
 }
 
 void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
-			{
-		LLNameValue *title = getNVPair("Title");
-		LLNameValue* firstname = getNVPair("FirstName");
-		LLNameValue* lastname = getNVPair("LastName");
+{
+	LLNameValue *title = getNVPair("Title");
+	LLNameValue* firstname = getNVPair("FirstName");
+	LLNameValue* lastname = getNVPair("LastName");
 
 	// Avatars must have a first and last name
 	if (!firstname || !lastname) return;
@@ -2784,14 +2784,14 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
 	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())
-			{
+	if (isSelf())
+	{
 		is_muted = false;
-			}
-			else
-			{
-				is_muted = LLMuteList::getInstance()->isMuted(getID());
-			}
+	}
+	else
+	{
+		is_muted = LLMuteList::getInstance()->isMuted(getID());
+	}
 	bool is_friend = LLAvatarTracker::instance().isBuddy(getID());
 
 	// Rebuild name tag if state change detected
@@ -2804,21 +2804,21 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
 		|| is_muted != mNameMute
 		|| is_appearance != mNameAppearance
 		|| is_friend != mNameFriend)
-				{
+	{
 		LLColor4 name_tag_color = getNameTagColor(is_friend);
 
 		clearNameTag();
 
 		if (is_away || is_muted || is_busy || is_appearance)
-				{
+		{
 			std::string line;
-					if (is_away)
-					{
-						line += LLTrans::getString("AvatarAway");
+			if (is_away)
+			{
+				line += LLTrans::getString("AvatarAway");
 				line += ", ";
-					}
-					if (is_busy)
-					{
+			}
+			if (is_busy)
+			{
 				line += LLTrans::getString("AvatarBusy");
 				line += ", ";
 			}
@@ -2828,10 +2828,10 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
 				line += ", ";
 			}
 			if (is_appearance)
-						{
+			{
 				line += LLTrans::getString("AvatarEditingAppearance");
-							line += ", ";
-						}
+				line += ", ";
+			}
 			// trim last ", "
 			line.resize( line.length() - 2 );
 			LLColor4 status_color =
@@ -2849,7 +2849,7 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
 			LLStringFn::replace_ascii_controlchars(title_str,LL_UNKNOWN_CHAR);
 			addNameTagLine(title_str, group_color, LLFontGL::NORMAL,
 				LLFontGL::getFontSansSerifSmall());
-					}
+		}
 
 		static LLUICachedControl<bool> show_display_names("NameTagShowDisplayNames");
 		static LLUICachedControl<bool> show_slids("NameTagShowSLIDs");
@@ -2858,7 +2858,7 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
 		{
 			LLAvatarName av_name;
 			if (!LLAvatarNameCache::get(getID(), &av_name))
-					{
+			{
 				// ...call this function back when the name arrives
 				// and force a rebuild
 				LLAvatarNameCache::get(getID(),
@@ -2867,48 +2867,48 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
 
 			// Might be blank if name not available yet, that's OK
 			if (show_slids)
-						{
+			{
 				// JAMESDEBUG HACK
 				LLColor4 slid_color = name_tag_color * 0.8f;
 				addNameTagLine(av_name.mSLID, slid_color, LLFontGL::NORMAL,
 					LLFontGL::getFontSansSerifSmall());
-						}
+			}
 			if (show_display_names)
 			{
 				addNameTagLine(av_name.mDisplayName, name_tag_color, LLFontGL::NORMAL,
 					LLFontGL::getFontSansSerif());
-					}
-				}
+			}
+		}
 		else
-				{
+		{
 			static LLUICachedControl<bool> small_avatar_names("SmallAvatarNames");
 			const LLFontGL* font =
 				(small_avatar_names ? LLFontGL::getFontSansSerif() : LLFontGL::getFontSansSerifBig() );
 			std::string full_name =
 				LLCacheName::buildFullName( firstname->getString(), lastname->getString() );
 			addNameTagLine(full_name, name_tag_color, LLFontGL::NORMAL, font);
-				}
+		}
 
-				mNameAway = is_away;
-				mNameBusy = is_busy;
-				mNameMute = is_muted;
-				mNameAppearance = is_appearance;
+		mNameAway = is_away;
+		mNameBusy = is_busy;
+		mNameMute = is_muted;
+		mNameAppearance = is_appearance;
 		mNameFriend = is_friend;
-				mTitle = title ? title->getString() : "";
-				LLStringFn::replace_ascii_controlchars(mTitle,LL_UNKNOWN_CHAR);
-				new_name = TRUE;
-			}
+		mTitle = title ? title->getString() : "";
+		LLStringFn::replace_ascii_controlchars(mTitle,LL_UNKNOWN_CHAR);
+		new_name = TRUE;
+	}
 
 	if (mVisibleChat)
-			{
-				mNameText->setFont(LLFontGL::getFontSansSerif());
+	{
+		mNameText->setFont(LLFontGL::getFontSansSerif());
 		mNameText->setTextAlignment(LLHUDNameTag::ALIGN_TEXT_LEFT);
-				mNameText->setFadeDistance(CHAT_NORMAL_RADIUS * 2.f, 5.f);
+		mNameText->setFadeDistance(CHAT_NORMAL_RADIUS * 2.f, 5.f);
 			
-				char line[MAX_STRING];		/* Flawfinder: ignore */
-				line[0] = '\0';
-				std::deque<LLChat>::iterator chat_iter = mChats.begin();
-				mNameText->clearString();
+			char line[MAX_STRING];		/* Flawfinder: ignore */
+			line[0] = '\0';
+			std::deque<LLChat>::iterator chat_iter = mChats.begin();
+			mNameText->clearString();
 
 		LLColor4 new_chat = LLUIColorTable::instance().getColor( "NameTagChat" );
 				LLColor4 normal_chat = lerp(new_chat, LLColor4(0.8f, 0.8f, 0.8f, 1.f), 0.7f);
@@ -2980,16 +2980,16 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
 }
 
 void LLVOAvatar::addNameTagLine(const std::string& line, const LLColor4& color, S32 style, const LLFontGL* font)
-				{
+{
 	llassert(mNameText);
 	if (mVisibleChat)
 	{
 		mNameText->addLabel(line);
-				}
-				else
-				{
+	}
+	else
+	{
 		mNameText->addLine(line, color, (LLFontGL::StyleFlags)style, font);
-				}
+	}
 	mNameString += line;
 	mNameString += '\n';
 }
@@ -2998,8 +2998,8 @@ void LLVOAvatar::clearNameTag()
 {
 	mNameString.clear();
 	if (mNameText)
-				{
-					mNameText->setLabel("");
+	{
+		mNameText->setLabel("");
 		mNameText->setString( "" );
 	}
 }
@@ -3049,8 +3049,8 @@ void LLVOAvatar::idleUpdateNameTagAlpha(BOOL new_name, F32 alpha)
 	{
 		mNameText->setAlpha(alpha);
 		mNameAlpha = alpha;
-			}
-		}
+	}
+}
 
 LLColor4 LLVOAvatar::getNameTagColor(bool is_friend)
 {
-- 
cgit v1.2.3


From abd2b7d1b2c5d601d9468534018cff39228ae975 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Wed, 7 Apr 2010 10:21:56 -0700
Subject: Default show SLID on for now

---
 indra/newview/app_settings/settings.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 6fa35cbc9b..40bb40db8e 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -7188,7 +7188,7 @@
       <key>Type</key>
       <string>Boolean</string>
       <key>Value</key>
-      <integer>0</integer>
+      <integer>1</integer>
     </map>
     <key>RenderInitError</key>
     <map>
-- 
cgit v1.2.3


From 99f5307543e03e296edf2d9d9c0b26d38d56d034 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Wed, 7 Apr 2010 10:26:03 -0700
Subject: SLID goes under display name

---
 indra/newview/llvoavatar.cpp | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 5bf9f69ae3..6aac53dd73 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -2866,6 +2866,11 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
 			}
 
 			// Might be blank if name not available yet, that's OK
+			if (show_display_names)
+			{
+				addNameTagLine(av_name.mDisplayName, name_tag_color, LLFontGL::NORMAL,
+					LLFontGL::getFontSansSerif());
+			}
 			if (show_slids)
 			{
 				// JAMESDEBUG HACK
@@ -2873,11 +2878,6 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
 				addNameTagLine(av_name.mSLID, slid_color, LLFontGL::NORMAL,
 					LLFontGL::getFontSansSerifSmall());
 			}
-			if (show_display_names)
-			{
-				addNameTagLine(av_name.mDisplayName, name_tag_color, LLFontGL::NORMAL,
-					LLFontGL::getFontSansSerif());
-			}
 		}
 		else
 		{
-- 
cgit v1.2.3


From adcee4486b1ff7e3d60e3cd608172b15525242bc Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Wed, 7 Apr 2010 16:18:28 -0700
Subject: Added debug info to "you paid" messages for testing MoneyBalanceReply

---
 indra/newview/llassetuploadresponders.cpp | 2 +-
 indra/newview/llviewermessage.cpp         | 6 +++---
 2 files changed, 4 insertions(+), 4 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llassetuploadresponders.cpp b/indra/newview/llassetuploadresponders.cpp
index 8441796219..8e8be842ef 100644
--- a/indra/newview/llassetuploadresponders.cpp
+++ b/indra/newview/llassetuploadresponders.cpp
@@ -234,7 +234,7 @@ void LLNewAgentInventoryResponder::uploadComplete(const LLSD& content)
 		LLStatusBar::sendMoneyBalanceRequest();
 
 		LLSD args;
-		args["AMOUNT"] = llformat("%d", expected_upload_cost);
+		args["AMOUNT"] = llformat("%d", expected_upload_cost) + std::string(" JAMESDEBUG 1101"); // JAMESDEBUG
 		LLNotificationsUtil::add("UploadPayment", args);
 	}
 
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 8f68c34736..9cecf1fcca 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -4671,7 +4671,7 @@ void process_money_balance_reply( LLMessageSystem* msg, void** )
 		// "<avatar name> paid you L$"
 		const std::string marker = "paid you L$";
 
-		args["MESSAGE"] = desc + item_description; // JAMESDEBUG
+		args["MESSAGE"] = desc + llformat(" JAMESDEBUG %d", transaction_type); // JAMESDEBUG;
 
 		// extract avatar name from system message
 		S32 marker_pos = desc.find(marker, 0);
@@ -4697,7 +4697,7 @@ void process_money_balance_reply( LLMessageSystem* msg, void** )
 			std::string new_description = LLTrans::getString("paid_you_ldollars", str_args);
 
 
-			args["MESSAGE"] = new_description;
+			args["MESSAGE"] = new_description + llformat(" JAMESDEBUG %d", transaction_type); // JAMESDEBUG
 			args["NAME"] = LLCacheName::cleanFullName(name);
 			LLSD payload;
 			payload["from_id"] = from_id;
@@ -4757,7 +4757,7 @@ void process_money_balance_reply( LLMessageSystem* msg, void** )
 					// forming final message string by retrieving localized version from xml
 					// and applying previously found arguments
 					line = LLTrans::getString(line, str_args);
-					args["MESSAGE"] = line;
+					args["MESSAGE"] = line + llformat(" JAMESDEBUG %d", transaction_type); // JAMESDEBUG;
 				}
 			}
 
-- 
cgit v1.2.3


From 0b36c4181203e37d6fc3e59817d5b5abd2d7611e Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Thu, 8 Apr 2010 15:43:00 -0700
Subject: DEV-47529 Add expiration to display name cache for viewer

Also synchronize LLAvatarNameCache with server version
TODO: Get expiration time from web service
---
 indra/newview/llstartup.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 18792950eb..d82e62e285 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -2772,7 +2772,8 @@ void LLStartUp::initNameCache()
 	// Load stored cache if possible
 	LLAppViewer::instance()->loadNameCache();
 
-	LLAvatarNameCache::initClass();
+	// JAMESDEBUG TODO: won't need service url here, will use capability
+	LLAvatarNameCache::initClass("http://pdp15.lindenlab.com:8050/my-service/");
 }
 
 void LLStartUp::cleanupNameCache()
-- 
cgit v1.2.3


From 65e565e0e1d7b964048a32a92f59a5dd8f74bb0c Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Mon, 12 Apr 2010 16:36:12 -0700
Subject: DEV-47529 Convert viewer to use final People API lookup URL format
 Reviewed with Simon

---
 indra/newview/llstartup.cpp  | 2 +-
 indra/newview/llvoavatar.cpp | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index d82e62e285..8f5ad63cc3 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -2773,7 +2773,7 @@ void LLStartUp::initNameCache()
 	LLAppViewer::instance()->loadNameCache();
 
 	// JAMESDEBUG TODO: won't need service url here, will use capability
-	LLAvatarNameCache::initClass("http://pdp15.lindenlab.com:8050/my-service/");
+	LLAvatarNameCache::initClass("http://pdp60.lindenlab.com:8000/");
 }
 
 void LLStartUp::cleanupNameCache()
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 6aac53dd73..74ff9b74b6 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -3065,7 +3065,7 @@ LLColor4 LLVOAvatar::getNameTagColor(bool is_friend)
 		LLAvatarName av_name;
 		if (LLAvatarNameCache::useDisplayNames()
 			&& LLAvatarNameCache::get(getID(), &av_name)
-			&& av_name.mIsLegacy)
+			&& av_name.mIsDisplayNameDefault)
 	{
 			color_name = "NameTagLegacy";
 		}
-- 
cgit v1.2.3


From 1a7740f0143b7368cd24f44360fea37dcd23bad2 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Mon, 12 Apr 2010 16:40:50 -0700
Subject: Added a touch of logging

---
 indra/newview/llviewerdisplayname.cpp | 1 +
 1 file changed, 1 insertion(+)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewerdisplayname.cpp b/indra/newview/llviewerdisplayname.cpp
index 62fbf85985..84697f93b6 100644
--- a/indra/newview/llviewerdisplayname.cpp
+++ b/indra/newview/llviewerdisplayname.cpp
@@ -70,6 +70,7 @@ void LLViewerDisplayName::set(const std::string& display_name, const set_name_sl
 	if (cap_url.empty())
 	{
 		// JAMESDEBUG HACK for demos, fall back to prototype name service
+		llinfos << "Set name via legacy service" << llendl;
 		LLAvatarNameCache::setDisplayName(gAgent.getID(), display_name, slot);
 		return;
 
-- 
cgit v1.2.3


From 60396971ca3e627fc4980a726f7d375bc570a2d2 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Tue, 13 Apr 2010 10:47:58 -0700
Subject: DEV-47529 Chat "foo changed name to bar" on name change, viewer piece

Reviewed with Kelly
---
 indra/newview/llviewerdisplayname.cpp                | 13 ++++++++++---
 indra/newview/skins/default/xui/en/notifications.xml |  7 +++++++
 2 files changed, 17 insertions(+), 3 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewerdisplayname.cpp b/indra/newview/llviewerdisplayname.cpp
index 84697f93b6..9739c7fbc1 100644
--- a/indra/newview/llviewerdisplayname.cpp
+++ b/indra/newview/llviewerdisplayname.cpp
@@ -42,6 +42,7 @@
 #include "llavatarnamecache.h"
 #include "llhttpclient.h"
 #include "llhttpnode.h"
+#include "llnotificationsutil.h"
 
 namespace LLViewerDisplayName
 {
@@ -124,15 +125,21 @@ class LLDisplayNameUpdate : public LLHTTPNode
 	{
 		LLSD body = input["body"];
 		LLUUID agent_id = body["agent_id"];
-
-		llinfos << "JAMESDEBUG LLDisplayNameUpdate agent_id "
-			<< agent_id << llendl;
+		std::string slid = body["sl_id"];
+		std::string old_display_name = body["old_display_name"];
+		std::string new_display_name = body["new_display_name"];
 
 		// force re-request of this agent's name data
 		LLAvatarNameCache::erase(agent_id);
 
 		// force name tag to update
 		LLVOAvatar::invalidateNameTag(agent_id);
+
+		LLSD args;
+		args["OLD_NAME"] = old_display_name;
+		args["SLID"] = slid;
+		args["NEW_NAME"] = new_display_name;
+		LLNotificationsUtil::add("DisplayNameUpdate", args);
 	}
 };
 
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 0e14b06407..e57b21b05c 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -3074,6 +3074,13 @@ Change your display name?
     Sorry, we could not set that display name.  Please try a different name.
   </notification>
 
+  <notification
+   icon="notifytip.tga"
+   name="DisplayNameUpdate"
+   type="notifytip">
+    [OLD_NAME] ([SLID]) is now known as [NEW_NAME].
+  </notification>
+
   <notification
    icon="alertmodal.tga"
    name="OfferTeleport"
-- 
cgit v1.2.3


From a159751e61526f7d389c2b951be057b5155f1c69 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Tue, 13 Apr 2010 12:03:49 -0700
Subject: Hide SLID if it matches display name, leave SLIDs on by default
 otherwise I don't like this, but Crimp and Hamilton want it to address M's
 concerns about impersonation.

---
 indra/newview/llvoavatar.cpp | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 74ff9b74b6..881012467e 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -2871,10 +2871,11 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
 				addNameTagLine(av_name.mDisplayName, name_tag_color, LLFontGL::NORMAL,
 					LLFontGL::getFontSansSerif());
 			}
-			if (show_slids)
+			// Suppress SLID display if display name matches exactly (ugh)
+			if (show_slids && !av_name.mIsDisplayNameDefault)
 			{
 				// JAMESDEBUG HACK
-				LLColor4 slid_color = name_tag_color * 0.8f;
+				LLColor4 slid_color = name_tag_color * 0.83f;
 				addNameTagLine(av_name.mSLID, slid_color, LLFontGL::NORMAL,
 					LLFontGL::getFontSansSerifSmall());
 			}
-- 
cgit v1.2.3


From c70c2631f0dc1db46fa5e6088605e21f5e3743ba Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Thu, 15 Apr 2010 16:19:39 -0700
Subject: Remove old hack to chat "refreshname" to trigger name tag updates

---
 indra/newview/llpanelme.cpp       |  3 ---
 indra/newview/llviewermessage.cpp | 14 --------------
 2 files changed, 17 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llpanelme.cpp b/indra/newview/llpanelme.cpp
index aa19952317..d81d84767b 100644
--- a/indra/newview/llpanelme.cpp
+++ b/indra/newview/llpanelme.cpp
@@ -307,9 +307,6 @@ void LLPanelMyProfileEdit::onCacheSetName(bool success,
 {
 	if (success)
 	{
-		// HACK: Use chat to invalidate names
-		send_chat_from_viewer("refreshname", CHAT_TYPE_NORMAL, 0);
-
 		// Re-fetch my name, as it may have been sanitized by the service
 		LLAvatarNameCache::get(getAvatarId(),
 			boost::bind(&LLPanelMyProfileEdit::onNameCache, this, _1, _2));
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 9cecf1fcca..13f52d8db7 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -2731,20 +2731,6 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
 		}
 		chat.mText = mesg;
 
-		// IDEVO HACK Use chat to invalidate names
-		if (chat.mSourceType == CHAT_SOURCE_AGENT
-			&& chat.mText == "refreshname")
-		{
-			LLAvatarNameCache::erase(chat.mFromID);
-
-			// force name tag to update
-			LLVOAvatar* avatar = dynamic_cast<LLVOAvatar*>(chatter);
-			if (avatar)
-			{
-				avatar->clearNameTag();
-			}
-		}
-
 		// Look for the start of typing so we can put "..." in the bubbles.
 		if (CHAT_TYPE_START == chat.mChatType)
 		{
-- 
cgit v1.2.3


From fedfbbb8d8696044cace410365e348b20a1e2420 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Thu, 15 Apr 2010 16:20:29 -0700
Subject: Remove hack to set display name by talking directly to name service

This means display names will only work on grids with name code deployed
---
 indra/newview/llviewerdisplayname.cpp | 9 ++-------
 1 file changed, 2 insertions(+), 7 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewerdisplayname.cpp b/indra/newview/llviewerdisplayname.cpp
index 9739c7fbc1..1cfada48ad 100644
--- a/indra/newview/llviewerdisplayname.cpp
+++ b/indra/newview/llviewerdisplayname.cpp
@@ -70,14 +70,9 @@ void LLViewerDisplayName::set(const std::string& display_name, const set_name_sl
 	std::string cap_url = region->getCapability("SetDisplayName");
 	if (cap_url.empty())
 	{
-		// JAMESDEBUG HACK for demos, fall back to prototype name service
-		llinfos << "Set name via legacy service" << llendl;
-		LLAvatarNameCache::setDisplayName(gAgent.getID(), display_name, slot);
-		return;
-
 		// this server does not support display names, report error
-		//slot(false, "unsupported", LLSD());
-		//return;
+		slot(false, "unsupported", LLSD());
+		return;
 	}
 
 	llinfos << "Set name POST to " << cap_url << llendl;
-- 
cgit v1.2.3


From 4218819951a5caa1499e79d8bd4f1bf08fe3b3cc Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Thu, 15 Apr 2010 16:22:15 -0700
Subject: DEV-47529 Viewer looks up display names via a sim cap

Squire asked me to route display name lookups via a simulator capability
using HTTP GET.  This buys us authentication until the data services team
can implement a public-facing authenticating web service for People API.
---
 indra/newview/llstartup.cpp      |  3 +--
 indra/newview/llviewerregion.cpp | 16 ++++++++++++++++
 2 files changed, 17 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 8f5ad63cc3..18792950eb 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -2772,8 +2772,7 @@ void LLStartUp::initNameCache()
 	// Load stored cache if possible
 	LLAppViewer::instance()->loadNameCache();
 
-	// JAMESDEBUG TODO: won't need service url here, will use capability
-	LLAvatarNameCache::initClass("http://pdp60.lindenlab.com:8000/");
+	LLAvatarNameCache::initClass();
 }
 
 void LLStartUp::cleanupNameCache()
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index 8f43b6bcf7..2b907ee24a 100644
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -34,7 +34,9 @@
 
 #include "llviewerregion.h"
 
+// linden libraries
 #include "indra_constants.h"
+#include "llavatarnamecache.h"		// name lookup cap url
 #include "llfloaterreg.h"
 #include "llmath.h"
 #include "llhttpclient.h"
@@ -173,6 +175,19 @@ public:
 				mRegion->showReleaseNotes();
 			}
 		}
+
+		// Avatar name lookup library needs to know who to ask
+		std::string name_lookup_url = mRegion->getCapability("GetDisplayNames");
+		// capabilities require URLs with slashes before query params, like:
+		// https://<host>:<port>/cap/<uuid>/?ids=<blah>
+		// but the caps are granted like:
+		// https://<host>:<port>/cap/<uuid>
+		U32 url_size = name_lookup_url.size();
+		if (url_size > 0 && name_lookup_url[url_size-1] != '/')
+		{
+			name_lookup_url += '/';
+		}
+		LLAvatarNameCache::setNameLookupURL(name_lookup_url);
 		
 		if (STATE_SEED_GRANTED_WAIT == LLStartUp::getStartupState())
 		{
@@ -1474,6 +1489,7 @@ void LLViewerRegion::setSeedCapability(const std::string& url)
 	capabilityNames.append("ObjectMediaNavigate");
 	capabilityNames.append("FetchLib");
 	capabilityNames.append("FetchLibDescendents");
+	capabilityNames.append("GetDisplayNames");
 	capabilityNames.append("GetTexture");
 	capabilityNames.append("GroupProposalBallot");
 	capabilityNames.append("HomeLocation");
-- 
cgit v1.2.3


From 69de1f4eb7cdd063bbdd7b4019a6a9799fc5dc5f Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Fri, 16 Apr 2010 19:06:17 -0700
Subject: Accept expires timestamp as UTC datetime in LLSD

---
 indra/newview/llviewermessage.cpp | 1 +
 indra/newview/llviewerregion.cpp  | 5 +++++
 2 files changed, 6 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 13f52d8db7..000eb45121 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -4615,6 +4615,7 @@ void process_money_balance_reply( LLMessageSystem* msg, void** )
         msg->getS32("TransactionInfo", "Amount", amount);
         msg->getString("TransactionInfo", "ItemDescription", item_description);
         llinfos << "JAMESDEBUG money_balance_reply source " << source_id 
+			<< " dest " << dest_id
 			<< " item " << item_description << llendl;
     }
     
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index 2b907ee24a..feade68edc 100644
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -176,6 +176,9 @@ public:
 			}
 		}
 
+		// JAMESDEBUG *TODO* THIS IS WRONG!!!!!!!!!!!!!!!!!!!!!
+		// this isn't necessarily the region the viewer is in
+
 		// Avatar name lookup library needs to know who to ask
 		std::string name_lookup_url = mRegion->getCapability("GetDisplayNames");
 		// capabilities require URLs with slashes before query params, like:
@@ -188,6 +191,8 @@ public:
 			name_lookup_url += '/';
 		}
 		LLAvatarNameCache::setNameLookupURL(name_lookup_url);
+
+		llinfos << "JAMESDEBUG cap " << name_lookup_url << llendl;
 		
 		if (STATE_SEED_GRANTED_WAIT == LLStartUp::getStartupState())
 		{
-- 
cgit v1.2.3


From d38727e47ba5d7dd449c6ba62ac6c988ac66236f Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Mon, 19 Apr 2010 11:26:30 -0700
Subject: DEV-47529 Viewer refresh name lookup cap URL on region cross/teleport

Reviewed with Kelly
---
 indra/newview/llappviewer.cpp    | 42 +++++++++++++++++++++++++++++++++++-----
 indra/newview/llappviewer.h      |  2 ++
 indra/newview/llviewerregion.cpp | 18 -----------------
 3 files changed, 39 insertions(+), 23 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 02902bc8a5..409146c4a3 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -3541,9 +3541,10 @@ void LLAppViewer::idle()
 	    // NOTE: Starting at this point, we may still have pointers to "dead" objects
 	    // floating throughout the various object lists.
 	    //
+		idleNameCache();
     
 		idleNetwork();
-	    	        
+
 
 		// Check for away from keyboard, kick idle agents.
 		idle_afk_check();
@@ -3878,6 +3879,41 @@ void LLAppViewer::sendLogoutRequest()
 	}
 }
 
+void LLAppViewer::idleNameCache()
+{
+	// Neither old nor new name cache can function before agent has a region
+	LLViewerRegion* region = gAgent.getRegion();
+	if (!region) return;
+
+	// deal with any queued name requests and replies.
+	gCacheName->processPending();
+
+	// Agent may have moved to a different region, so need to update cap URL
+	// for name lookups.  Can't do this in the cap grant code, as caps are
+	// granted to neighbor regions before the main agent gets there.  Can't
+	// do it in the move-into-region code because cap not guaranteed to be
+	// granted yet, for example on teleport.
+	std::string name_lookup_url;
+	name_lookup_url.reserve(128); // avoid a memory allocation below
+	name_lookup_url = region->getCapability("GetDisplayNames");
+
+	// Ensure capability has been granted
+	U32 url_size = name_lookup_url.size();
+	if (url_size > 0)
+	{
+		// capabilities require URLs with slashes before query params:
+		// https://<host>:<port>/cap/<uuid>/?ids=<blah>
+		// but the caps are granted like:
+		// https://<host>:<port>/cap/<uuid>
+		if (name_lookup_url[url_size-1] != '/')
+		{
+			name_lookup_url += '/';
+		}
+		LLAvatarNameCache::setNameLookupURL(name_lookup_url);
+	}
+	LLAvatarNameCache::idle();
+}
+
 //
 // Handle messages, and all message related stuff
 //
@@ -3905,10 +3941,6 @@ void LLAppViewer::idleNetwork()
 	{
 		LLFastTimer t(FTM_IDLE_NETWORK); // decode
 		
-		// deal with any queued name requests and replies.
-		gCacheName->processPending();
-		LLAvatarNameCache::idle();
-
 		llpushcallstacks ;
 		LLTimer check_message_timer;
 		//  Read all available packets from network 
diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h
index a915b7fa50..ff3816922e 100644
--- a/indra/newview/llappviewer.h
+++ b/indra/newview/llappviewer.h
@@ -210,6 +210,8 @@ private:
     
     void idle(); 
     void idleShutdown();
+	// update avatar SLID and display name caches
+	void idleNameCache();
     void idleNetwork();
 
     void sendLogoutRequest();
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index feade68edc..83c5760b58 100644
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -175,24 +175,6 @@ public:
 				mRegion->showReleaseNotes();
 			}
 		}
-
-		// JAMESDEBUG *TODO* THIS IS WRONG!!!!!!!!!!!!!!!!!!!!!
-		// this isn't necessarily the region the viewer is in
-
-		// Avatar name lookup library needs to know who to ask
-		std::string name_lookup_url = mRegion->getCapability("GetDisplayNames");
-		// capabilities require URLs with slashes before query params, like:
-		// https://<host>:<port>/cap/<uuid>/?ids=<blah>
-		// but the caps are granted like:
-		// https://<host>:<port>/cap/<uuid>
-		U32 url_size = name_lookup_url.size();
-		if (url_size > 0 && name_lookup_url[url_size-1] != '/')
-		{
-			name_lookup_url += '/';
-		}
-		LLAvatarNameCache::setNameLookupURL(name_lookup_url);
-
-		llinfos << "JAMESDEBUG cap " << name_lookup_url << llendl;
 		
 		if (STATE_SEED_GRANTED_WAIT == LLStartUp::getStartupState())
 		{
-- 
cgit v1.2.3


From 16aa2a2a0f29fa927455e616817eef2bedbbf7a7 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Mon, 19 Apr 2010 13:54:50 -0700
Subject: DEV-49149 Localizable server error message for Display Names

Try to look up a specific translation for the error in the viewer,
but failing that, try to use a message sent by the server.
Reviewed with Simon.
---
 indra/newview/llpanelme.cpp                        | 36 ++++++++++++++++------
 .../newview/skins/default/xui/en/notifications.xml |  9 ++++++
 2 files changed, 35 insertions(+), 10 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llpanelme.cpp b/indra/newview/llpanelme.cpp
index d81d84767b..c4fe613161 100644
--- a/indra/newview/llpanelme.cpp
+++ b/indra/newview/llpanelme.cpp
@@ -45,8 +45,8 @@
 
 // Linden libraries
 #include "llavatarnamecache.h"		// IDEVO
-#include "llchat.h"					// IDEVO HACK
 #include "lliconctrl.h"
+#include "llnotifications.h"
 #include "llnotificationsutil.h"	// IDEVO
 #include "lltabcontainer.h"
 #include "lltexturectrl.h"
@@ -298,9 +298,6 @@ void LLPanelMyProfileEdit::onTexturePickerMouseLeave(LLUICtrl* ctrl)
 	mTextureEditIconMap[ctrl->getName()]->setVisible(FALSE);
 }
 
-// IDEVO HACK
-extern void send_chat_from_viewer(const std::string& utf8_out_text, EChatType type, S32 channel);
-
 void LLPanelMyProfileEdit::onCacheSetName(bool success,
 										  const std::string& reason,
 										  const LLSD& content)
@@ -310,15 +307,34 @@ void LLPanelMyProfileEdit::onCacheSetName(bool success,
 		// Re-fetch my name, as it may have been sanitized by the service
 		LLAvatarNameCache::get(getAvatarId(),
 			boost::bind(&LLPanelMyProfileEdit::onNameCache, this, _1, _2));
+		return;
 	}
-	else
+
+	// Request failed, notify the user
+	std::string error_tag = content["error_tag"].asString();
+	llinfos << "set name failure error_tag " << error_tag << llendl;
+
+	// We might have a localized string for this message
+	if (!error_tag.empty()
+		&& LLNotifications::getInstance()->templateExists(error_tag))
 	{
-		// JAMESDEBUG TODO: localize strings for reasons we couldn't
-		// change the name
-		LLNotificationsUtil::add("SetDisplayNameFailedGeneric");
-		// TODO: SetDisplayNameFailedThrottle with [FREQUENCY]
-		// TODO: SetDisplayNameFailedUnavailable
+		LLNotificationsUtil::add(error_tag);
+		return;
 	}
+
+	// The server error might have a localized message for us
+	std::string lang_code = LLUI::getLanguage();
+	LLSD error_desc = content["error_description"];
+	if (error_desc.has( lang_code ))
+	{
+		LLSD args;
+		args["MESSAGE"] = error_desc[lang_code].asString();
+		LLNotificationsUtil::add("GenericAlert", args);
+		return;
+	}
+
+	// No specific error, throw a generic one
+	LLNotificationsUtil::add("SetDisplayNameFailedGeneric");
 }
 
 void LLPanelMyProfileEdit::onDialogSetName(const LLSD& notification, const LLSD& response)
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index e57b21b05c..1e93c3cc98 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -3060,6 +3060,15 @@ Change your display name?
     Sorry, we could not set your display name.  Please try again later.
   </notification>
 
+  <notification
+   icon="alertmodal.tga"
+   name="AgentDisplayNameSetLindenFailed"
+   type="alertmodal">
+Sorry, your display name cannot contain the word 'Linden'.
+
+Please try a different name.
+  </notification>
+
   <notification
    icon="alertmodal.tga"
    name="SetDisplayNameFailedThrottle"
-- 
cgit v1.2.3


From d373dc8782e7085e313b3637c168c87c2b5a71ed Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Mon, 19 Apr 2010 17:09:37 -0700
Subject: Viewer asks login.cgi if the grid supports display names

If not, turns off display names.  Cleaned up name cache reset code.
Alphabetized login auth param requests for easier merges going forward.
---
 indra/newview/lllogininstance.cpp | 40 +++++++++++++++++++++------------------
 indra/newview/llstartup.cpp       | 16 ++++++++++++++++
 indra/newview/llviewermenu.cpp    |  9 ++++++++-
 3 files changed, 46 insertions(+), 19 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/lllogininstance.cpp b/indra/newview/lllogininstance.cpp
index 24c72c65ce..475a3f5384 100644
--- a/indra/newview/lllogininstance.cpp
+++ b/indra/newview/lllogininstance.cpp
@@ -120,15 +120,33 @@ LLSD LLLoginInstance::getResponse()
 
 void LLLoginInstance::constructAuthParams(const LLSD& credentials)
 {
+	// *Note: this is where gUserAuth used to be created.
+
 	// Set up auth request options.
-//#define LL_MINIMIAL_REQUESTED_OPTIONS
 	LLSD requested_options;
-	// *Note: this is where gUserAuth used to be created.
+	requested_options.append("global-textures");
 	requested_options.append("inventory-root");
 	requested_options.append("inventory-skeleton");
 	//requested_options.append("inventory-meat");
 	//requested_options.append("inventory-skel-targets");
+	requested_options.append("login-flags");
+
+//#define LL_MINIMIAL_REQUESTED_OPTIONS
 #if (!defined LL_MINIMIAL_REQUESTED_OPTIONS)
+	// *NOTE: Keep alphabetized for easier merges
+	requested_options.append("adult_compliant"); 
+	requested_options.append("buddy-list");
+	requested_options.append("classified_categories");
+	requested_options.append("display_names");
+	requested_options.append("event_categories");
+	requested_options.append("event_notifications");
+	requested_options.append("gestures");
+	if(gSavedSettings.getBOOL("ConnectAsGod"))
+	{
+		gSavedSettings.setBOOL("UseDebugMenus", TRUE);
+		requested_options.append("god-connect");
+	}
+	requested_options.append("initial-outfit");
 	if(FALSE == gSavedSettings.getBOOL("NoInventoryLibrary"))
 	{
 		requested_options.append("inventory-lib-root");
@@ -136,25 +154,11 @@ void LLLoginInstance::constructAuthParams(const LLSD& credentials)
 		requested_options.append("inventory-skel-lib");
 	//	requested_options.append("inventory-meat-lib");
 	}
-
-	requested_options.append("initial-outfit");
-	requested_options.append("gestures");
-	requested_options.append("event_categories");
-	requested_options.append("event_notifications");
-	requested_options.append("classified_categories");
-	requested_options.append("adult_compliant"); 
 	//requested_options.append("inventory-targets");
-	requested_options.append("buddy-list");
+	requested_options.append("tutorial_setting");
 	requested_options.append("ui-config");
+	// *NOTE: Keep alphabetized for easier merges
 #endif
-	requested_options.append("tutorial_setting");
-	requested_options.append("login-flags");
-	requested_options.append("global-textures");
-	if(gSavedSettings.getBOOL("ConnectAsGod"))
-	{
-		gSavedSettings.setBOOL("UseDebugMenus", TRUE);
-		requested_options.append("god-connect");
-	}
 
 	char hashed_mac_string[MD5HEX_STR_SIZE];		/* Flawfinder: ignore */
 	LLMD5 hashed_mac;
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 18792950eb..5fe091109f 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -1614,6 +1614,22 @@ bool idle_startup()
 			LLClassifiedInfo::loadCategories(classified_categories);
 		}
 
+		bool use_display_names = false;
+		LLSD display_names = response["display_names"];
+		if (display_names.isDefined())
+		{
+			for(LLSD::array_const_iterator it = display_names.beginArray(),
+				end = display_names.endArray(); it != end; ++it)
+			{
+				LLSD display_name_version = (*it)["version"];
+				if (display_name_version.isDefined()
+					&& display_name_version.asInteger() > 0)
+				{
+					use_display_names = true;
+				}
+			}
+		}
+		LLAvatarNameCache::setUseDisplayNames(use_display_names);
 
 		// This method MUST be called before gInventory.findCategoryUUIDForType because of 
 		// gInventory.mIsAgentInvUsable is set to true in the gInventory.buildParentChildMap.
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index a9e705b6ef..adf71878f5 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -7592,6 +7592,13 @@ class LLWorldToggleCameraControls : public view_listener_t
 	}
 };
 
+// IDEVO JAMESDEBUG temp code for testing
+void toggle_display_names()
+{
+	bool use = LLAvatarNameCache::useDisplayNames();
+	LLAvatarNameCache::setUseDisplayNames(!use);
+}
+
 void show_navbar_context_menu(LLView* ctrl, S32 x, S32 y)
 {
 	static LLMenuGL*	show_navbar_context_menu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_hide_navbar.xml",
@@ -7757,7 +7764,7 @@ void initialize_menus()
 	view_listener_t::addMenu(new LLAdvancedDumpInfoToConsole(), "Advanced.DumpInfoToConsole");
 	
 	// IDEVO
-	commit.add("IDEVO.ToggleDisplayNames", boost::bind(&LLAvatarNameCache::toggleDisplayNames));
+	commit.add("IDEVO.ToggleDisplayNames", boost::bind(&toggle_display_names));
 	enable.add("IDEVO.CheckDisplayNames", boost::bind(&LLAvatarNameCache::useDisplayNames));
 	
 	// Advanced > HUD Info
-- 
cgit v1.2.3


From 6d1e44b0338dd2815f605a5ba6e6528932cf3ebc Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Tue, 20 Apr 2010 14:52:09 -0700
Subject: Avatar picker requests are routed via sim capability

---
 indra/newview/lldateutil.cpp                       |  5 +++
 indra/newview/lldateutil.h                         |  2 +
 indra/newview/llfloateravatarpicker.cpp            | 44 +++++++++++++++-------
 indra/newview/llviewerregion.cpp                   |  1 +
 .../skins/default/xui/en/floater_avatar_picker.xml |  4 --
 5 files changed, 39 insertions(+), 17 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/lldateutil.cpp b/indra/newview/lldateutil.cpp
index 150edb5bf8..1a13cd05fd 100644
--- a/indra/newview/lldateutil.cpp
+++ b/indra/newview/lldateutil.cpp
@@ -180,3 +180,8 @@ std::string LLDateUtil::ageFromDateISO(const std::string& date_string)
 {
 	return ageFromDateISO(date_string, LLDate::now());
 }
+
+std::string LLDateUtil::ageFromDate(S32 year, S32 month, S32 day)
+{
+	return age_from_date(year, month, day, LLDate::now());
+}
diff --git a/indra/newview/lldateutil.h b/indra/newview/lldateutil.h
index d077f4eefb..9c62241fe6 100644
--- a/indra/newview/lldateutil.h
+++ b/indra/newview/lldateutil.h
@@ -50,6 +50,8 @@ namespace LLDateUtil
 
 	// Calls the above with LLDate::now()
 	std::string ageFromDateISO(const std::string& date_string);
+
+	std::string ageFromDate(S32 year, S32 month, S32 day);
 }
 
 #endif
diff --git a/indra/newview/llfloateravatarpicker.cpp b/indra/newview/llfloateravatarpicker.cpp
index ed458a4b02..06070f876d 100644
--- a/indra/newview/llfloateravatarpicker.cpp
+++ b/indra/newview/llfloateravatarpicker.cpp
@@ -36,10 +36,12 @@
 // Viewer includes
 #include "llagent.h"
 #include "llcallingcard.h"
-#include "lldateutil.h"			// IDEVO
+#include "lldate.h"				// split()
+#include "lldateutil.h"			// ageFromDate()
 #include "llfocusmgr.h"
 #include "llfloaterreg.h"
 #include "llviewercontrol.h"
+#include "llviewerregion.h"		// getCapability()
 #include "llworld.h"
 
 // Linden libraries
@@ -371,12 +373,26 @@ void LLFloaterAvatarPicker::find()
 	std::string text = childGetValue("Edit").asString();
 
 	mQueryID.generate();
-	// IDEVO
-	if (LLAvatarNameCache::useDisplayNames())
+
+	std::string url;
+	url.reserve(128); // avoid a memory allocation or two
+
+	LLViewerRegion* region = gAgent.getRegion();
+	url = region->getCapability("AvatarPickerSearch");
+	// Prefer use of capabilities to search on both SLID and display name
+	// but allow display name search to be manually turned off for test
+	if (!url.empty()
+		&& LLAvatarNameCache::useDisplayNames())
 	{
-		std::string url = "http://pdp15.lindenlab.com:8050/my-service/agent/search/";
+		// capability urls don't end in '/', but we need one to parse
+		// query parameters correctly
+		if (url.size() > 0 && url[url.size()-1] != '/')
+		{
+			url += "/";
+		}
+		url += "?name=";
 		url += LLURI::escape(text);
-		url += "/";
+		llinfos << "JAMESDEBUG picker " << url << llendl;
 		LLHTTPClient::get(url, new LLAvatarPickerResponder(mQueryID));
 	}
 	else
@@ -483,7 +499,8 @@ void LLFloaterAvatarPicker::processResponse(const LLUUID& query_id, const LLSD&
 
 	LLScrollListCtrl* search_results = getChild<LLScrollListCtrl>("SearchResults");
 
-	if (content.size() == 0)
+	LLSD agents = content["agents"];
+	if (agents.size() == 0)
 	{
 		LLStringUtil::format_map_t map;
 		map["[TEXT]"] = childGetText("Edit");
@@ -501,8 +518,8 @@ void LLFloaterAvatarPicker::processResponse(const LLUUID& query_id, const LLSD&
 	search_results->deleteAllItems();
 
 	LLSD item;
-	LLSD::array_const_iterator it = content.beginArray();
-	for ( ; it != content.endArray(); ++it)
+	LLSD::array_const_iterator it = agents.beginArray();
+	for ( ; it != agents.endArray(); ++it)
 	{
 		const LLSD& row = *it;
 		item["id"] = row["agent_id"];
@@ -510,12 +527,13 @@ void LLFloaterAvatarPicker::processResponse(const LLUUID& query_id, const LLSD&
 		columns[0]["column"] = "name";
 		columns[0]["value"] = row["display_name"];
 		columns[1]["column"] = "slid";
-		columns[1]["value"] = row["slid"];
-		std::string born_on = row["born_on"].asString();
+		columns[1]["value"] = row["sl_id"];
+		LLDate account_created = row["account_created"].asDate();
+		S32 year, month, day;
+		account_created.split(&year, &month, &day);
+		std::string age = LLDateUtil::ageFromDate(year, month, day);
 		columns[2]["column"] = "age";
-		columns[2]["value"] = LLDateUtil::ageFromDateISO(born_on);
-		columns[3]["column"] = "profile";
-		columns[3]["value"] = row["profile"];
+		columns[2]["value"] = age;
 		search_results->addElement(item);
 	}
 
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index 83c5760b58..502fc87e41 100644
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -1466,6 +1466,7 @@ void LLViewerRegion::setSeedCapability(const std::string& url)
 	LLSD capabilityNames = LLSD::emptyArray();
 	
 	capabilityNames.append("AttachmentResources");
+	capabilityNames.append("AvatarPickerSearch");
 	capabilityNames.append("ChatSessionRequest");
 	capabilityNames.append("CopyInventoryFromNotecard");
 	capabilityNames.append("DispatchRegionInfo");
diff --git a/indra/newview/skins/default/xui/en/floater_avatar_picker.xml b/indra/newview/skins/default/xui/en/floater_avatar_picker.xml
index 59923bec96..489b7c0536 100644
--- a/indra/newview/skins/default/xui/en/floater_avatar_picker.xml
+++ b/indra/newview/skins/default/xui/en/floater_avatar_picker.xml
@@ -104,10 +104,6 @@
               label="Age"
               name="age"
               width="100" />
-            <columns
-              label="Profile"
-              name="profile"
-              width="100" />
           </scroll_list>
         </panel>
         <panel
-- 
cgit v1.2.3


From 257c3ed2a3747256500f704f6e06e7631af3c08e Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Tue, 20 Apr 2010 16:06:25 -0700
Subject: LLDateUtil::ageFromDate() now takes more sensible parameters

This and last reviewed with Kelly
---
 indra/newview/lldateutil.cpp            | 15 ++++++---------
 indra/newview/lldateutil.h              |  2 +-
 indra/newview/llfloateravatarpicker.cpp |  3 ++-
 3 files changed, 9 insertions(+), 11 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/lldateutil.cpp b/indra/newview/lldateutil.cpp
index 1a13cd05fd..32b8b9662a 100644
--- a/indra/newview/lldateutil.cpp
+++ b/indra/newview/lldateutil.cpp
@@ -59,8 +59,10 @@ static S32 days_from_month(S32 year, S32 month)
 	}
 }
 
-static std::string age_from_date(S32 born_year, S32 born_month, S32 born_day,
-								 const LLDate& now)
+std::string LLDateUtil::ageFromDate(S32 born_year,
+									S32 born_month,
+									S32 born_day,
+									const LLDate& now)
 {
 	LLDate born_date;
 	born_date.fromYMDHMS(born_year, born_month, born_day);
@@ -158,7 +160,7 @@ std::string LLDateUtil::ageFromDate(const std::string& date_string,
 	S32 born_month, born_day, born_year;
 	S32 matched = sscanf(date_string.c_str(), "%d/%d/%d", &born_month, &born_day, &born_year);
 	if (matched != 3) return "???";
-	return age_from_date(born_year, born_month, born_day, now);
+	return ageFromDate(born_year, born_month, born_day, now);
 }
 
 std::string LLDateUtil::ageFromDate(const std::string& date_string)
@@ -173,15 +175,10 @@ std::string LLDateUtil::ageFromDateISO(const std::string& date_string,
 	S32 matched = sscanf(date_string.c_str(), "%d-%d-%d",
 			&born_year, &born_month, &born_day);
 	if (matched != 3) return "???";
-	return age_from_date(born_year, born_month, born_day, now);
+	return ageFromDate(born_year, born_month, born_day, now);
 }
 
 std::string LLDateUtil::ageFromDateISO(const std::string& date_string)
 {
 	return ageFromDateISO(date_string, LLDate::now());
 }
-
-std::string LLDateUtil::ageFromDate(S32 year, S32 month, S32 day)
-{
-	return age_from_date(year, month, day, LLDate::now());
-}
diff --git a/indra/newview/lldateutil.h b/indra/newview/lldateutil.h
index 9c62241fe6..d72d8d1ed4 100644
--- a/indra/newview/lldateutil.h
+++ b/indra/newview/lldateutil.h
@@ -51,7 +51,7 @@ namespace LLDateUtil
 	// Calls the above with LLDate::now()
 	std::string ageFromDateISO(const std::string& date_string);
 
-	std::string ageFromDate(S32 year, S32 month, S32 day);
+	std::string ageFromDate(S32 born_year, S32 born_month, S32 born_day, const LLDate& now);
 }
 
 #endif
diff --git a/indra/newview/llfloateravatarpicker.cpp b/indra/newview/llfloateravatarpicker.cpp
index 06070f876d..76567229d9 100644
--- a/indra/newview/llfloateravatarpicker.cpp
+++ b/indra/newview/llfloateravatarpicker.cpp
@@ -531,7 +531,8 @@ void LLFloaterAvatarPicker::processResponse(const LLUUID& query_id, const LLSD&
 		LLDate account_created = row["account_created"].asDate();
 		S32 year, month, day;
 		account_created.split(&year, &month, &day);
-		std::string age = LLDateUtil::ageFromDate(year, month, day);
+		std::string age =
+			LLDateUtil::ageFromDate(year, month, day, LLDate::now());
 		columns[2]["column"] = "age";
 		columns[2]["value"] = age;
 		search_results->addElement(item);
-- 
cgit v1.2.3


From 022a598694cd37bebff3322054324c7d27afd5ff Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Tue, 20 Apr 2010 17:05:49 -0700
Subject: Viewer caches avatar display names between sessions

Reviewed with Simon
---
 indra/newview/llappviewer.cpp | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 409146c4a3..ac9672858d 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -3333,6 +3333,15 @@ void LLAppViewer::saveFinalSnapshot()
 
 void LLAppViewer::loadNameCache()
 {
+	// display names cache
+	std::string filename =
+		gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "avatar_name_cache.xml");
+	llifstream name_cache_stream(filename);
+	if(name_cache_stream.is_open())
+	{
+		LLAvatarNameCache::importFile(name_cache_stream);
+	}
+
 	if (!gCacheName) return;
 
 	std::string name_cache;
@@ -3346,6 +3355,15 @@ void LLAppViewer::loadNameCache()
 
 void LLAppViewer::saveNameCache()
 {
+	// display names cache
+	std::string filename =
+		gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "avatar_name_cache.xml");
+	llofstream name_cache_stream(filename);
+	if(name_cache_stream.is_open())
+	{
+		LLAvatarNameCache::exportFile(name_cache_stream);
+	}
+
 	if (!gCacheName) return;
 
 	std::string name_cache;
-- 
cgit v1.2.3


From 71ce49239adc1abec26d73ddd97cfd0c17677c2b Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Tue, 20 Apr 2010 17:05:54 -0700
Subject: Cleaned up debug spam

---
 indra/newview/llfloateravatarpicker.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloateravatarpicker.cpp b/indra/newview/llfloateravatarpicker.cpp
index 76567229d9..db559ce13c 100644
--- a/indra/newview/llfloateravatarpicker.cpp
+++ b/indra/newview/llfloateravatarpicker.cpp
@@ -363,7 +363,7 @@ public:
 
 	/*virtual*/ void error(U32 status, const std::string& reason)
 	{
-		llinfos << "JAMESDEBUG avatar picker failed " << status
+		llinfos << "avatar picker failed " << status
 			<< " reason " << reason << llendl;
 	}
 };
@@ -392,7 +392,7 @@ void LLFloaterAvatarPicker::find()
 		}
 		url += "?name=";
 		url += LLURI::escape(text);
-		llinfos << "JAMESDEBUG picker " << url << llendl;
+		llinfos << "avatar picker " << url << llendl;
 		LLHTTPClient::get(url, new LLAvatarPickerResponder(mQueryID));
 	}
 	else
-- 
cgit v1.2.3


From 98f5fc5ff006a82cacde47de0cbb564b6e703597 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Thu, 22 Apr 2010 14:13:45 -0700
Subject: DEV-47529 Turn off display names if no capability from simulator, and
 Display name update broadcasts entire new name record to nearby viewers
 Display name update directly inserts new name into sim cache indra.xml has
 display_names_enabled setting to control cap Synchronized viewer and server
 versions of avatar name cache Reviewed with Ambroff

---
 indra/newview/llappviewer.cpp         | 36 ++++++++++++++++++++++-------------
 indra/newview/llviewerdisplayname.cpp | 14 ++++++++------
 indra/newview/llviewerregion.cpp      | 17 +++++++++++++++--
 indra/newview/llviewerregion.h        |  6 ++++++
 4 files changed, 52 insertions(+), 21 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index ac9672858d..e160951b91 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -3906,6 +3906,11 @@ void LLAppViewer::idleNameCache()
 	// deal with any queued name requests and replies.
 	gCacheName->processPending();
 
+	// Can't run the new cache until we have the list of capabilities
+	// for the agent region, and can therefore decide whether to use
+	// display names or fall back to the old name system.
+	if (!region->capabilitiesReceived()) return;
+
 	// Agent may have moved to a different region, so need to update cap URL
 	// for name lookups.  Can't do this in the cap grant code, as caps are
 	// granted to neighbor regions before the main agent gets there.  Can't
@@ -3914,21 +3919,26 @@ void LLAppViewer::idleNameCache()
 	std::string name_lookup_url;
 	name_lookup_url.reserve(128); // avoid a memory allocation below
 	name_lookup_url = region->getCapability("GetDisplayNames");
-
-	// Ensure capability has been granted
-	U32 url_size = name_lookup_url.size();
-	if (url_size > 0)
-	{
-		// capabilities require URLs with slashes before query params:
-		// https://<host>:<port>/cap/<uuid>/?ids=<blah>
-		// but the caps are granted like:
-		// https://<host>:<port>/cap/<uuid>
-		if (name_lookup_url[url_size-1] != '/')
-		{
-			name_lookup_url += '/';
-		}
+	if (!name_lookup_url.empty())
+	{
+		// we have support for display names, use it
+	    U32 url_size = name_lookup_url.size();
+	    // capabilities require URLs with slashes before query params:
+	    // https://<host>:<port>/cap/<uuid>/?ids=<blah>
+	    // but the caps are granted like:
+	    // https://<host>:<port>/cap/<uuid>
+	    if (url_size > 0 && name_lookup_url[url_size-1] != '/')
+	    {
+		    name_lookup_url += '/';
+	    }
 		LLAvatarNameCache::setNameLookupURL(name_lookup_url);
 	}
+	else
+	{
+		// Display names not available on this region
+		LLAvatarNameCache::setNameLookupURL( std::string() );
+	}
+
 	LLAvatarNameCache::idle();
 }
 
diff --git a/indra/newview/llviewerdisplayname.cpp b/indra/newview/llviewerdisplayname.cpp
index 1cfada48ad..8bed501c6e 100644
--- a/indra/newview/llviewerdisplayname.cpp
+++ b/indra/newview/llviewerdisplayname.cpp
@@ -120,20 +120,22 @@ class LLDisplayNameUpdate : public LLHTTPNode
 	{
 		LLSD body = input["body"];
 		LLUUID agent_id = body["agent_id"];
-		std::string slid = body["sl_id"];
 		std::string old_display_name = body["old_display_name"];
-		std::string new_display_name = body["new_display_name"];
+		// By convention this record is called "agent" in the People API
+		std::string name_data = body["agent"];
 
-		// force re-request of this agent's name data
-		LLAvatarNameCache::erase(agent_id);
+		// Inject the new name data into cache
+		LLAvatarName av_name;
+		av_name.fromLLSD( name_data );
+		LLAvatarNameCache::insert(agent_id, av_name);
 
 		// force name tag to update
 		LLVOAvatar::invalidateNameTag(agent_id);
 
 		LLSD args;
 		args["OLD_NAME"] = old_display_name;
-		args["SLID"] = slid;
-		args["NEW_NAME"] = new_display_name;
+		args["SLID"] = av_name.mSLID;
+		args["NEW_NAME"] = av_name.mDisplayName;
 		LLNotificationsUtil::add("DisplayNameUpdate", args);
 	}
 };
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index 502fc87e41..9e877bc1af 100644
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -175,7 +175,9 @@ public:
 				mRegion->showReleaseNotes();
 			}
 		}
-		
+
+		mRegion->setCapabilitiesReceived(true);
+
 		if (STATE_SEED_GRANTED_WAIT == LLStartUp::getStartupState())
 		{
 			LLStartUp::setStartupState( STATE_SEED_CAP_GRANTED );
@@ -232,7 +234,8 @@ LLViewerRegion::LLViewerRegion(const U64 &handle,
     // LLCapabilityListener binds all the globals it expects to need at
     // construction time.
     mCapabilityListener(host.getString(), gMessageSystem, *this,
-                        gAgent.getID(), gAgent.getSessionID())
+                        gAgent.getID(), gAgent.getSessionID()),
+	mCapabilitiesReceived(false)
 {
 	mWidth = region_width_meters;
 	mOriginGlobal = from_region_handle(handle); 
@@ -1557,6 +1560,16 @@ std::string LLViewerRegion::getCapability(const std::string& name) const
 	return iter->second;
 }
 
+bool LLViewerRegion::capabilitiesReceived() const
+{
+	return mCapabilitiesReceived;
+}
+
+void LLViewerRegion::setCapabilitiesReceived(bool received)
+{
+	mCapabilitiesReceived = received;
+}
+
 void LLViewerRegion::logActiveCapabilities() const
 {
 	int count = 0;
diff --git a/indra/newview/llviewerregion.h b/indra/newview/llviewerregion.h
index 49d0900f2a..5f6c754187 100644
--- a/indra/newview/llviewerregion.h
+++ b/indra/newview/llviewerregion.h
@@ -232,6 +232,11 @@ public:
 	void setCapability(const std::string& name, const std::string& url);
 	// implements LLCapabilityProvider
     virtual std::string getCapability(const std::string& name) const;
+
+	// has region received its final (not seed) capability list?
+	bool capabilitiesReceived() const;
+	void setCapabilitiesReceived(bool received);
+
 	static bool isSpecialCapabilityName(const std::string &name);
 	void logActiveCapabilities() const;
 
@@ -412,6 +417,7 @@ private:
 
 private:
 	bool	mAlive;					// can become false if circuit disconnects
+	bool	mCapabilitiesReceived;
 
 	//spatial partitions for objects in this region
 	std::vector<LLSpatialPartition*> mObjectPartition;
-- 
cgit v1.2.3


From 4b93f3d7b913afc32f3c65da6c29365560a40431 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Thu, 22 Apr 2010 15:52:14 -0700
Subject: Fix typo in name change update code, now updates work

---
 indra/newview/llviewerdisplayname.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewerdisplayname.cpp b/indra/newview/llviewerdisplayname.cpp
index 8bed501c6e..2c0219cfbc 100644
--- a/indra/newview/llviewerdisplayname.cpp
+++ b/indra/newview/llviewerdisplayname.cpp
@@ -122,7 +122,7 @@ class LLDisplayNameUpdate : public LLHTTPNode
 		LLUUID agent_id = body["agent_id"];
 		std::string old_display_name = body["old_display_name"];
 		// By convention this record is called "agent" in the People API
-		std::string name_data = body["agent"];
+		LLSD name_data = body["agent"];
 
 		// Inject the new name data into cache
 		LLAvatarName av_name;
-- 
cgit v1.2.3


From dd8f16b15b07d39a1aa1fb53bf6bae1dfdfb56c3 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Thu, 22 Apr 2010 15:52:29 -0700
Subject: Remove login.cgi method of turning off display names (we now use
 caps)

---
 indra/newview/llstartup.cpp | 17 -----------------
 1 file changed, 17 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 5fe091109f..7531853008 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -1614,23 +1614,6 @@ bool idle_startup()
 			LLClassifiedInfo::loadCategories(classified_categories);
 		}
 
-		bool use_display_names = false;
-		LLSD display_names = response["display_names"];
-		if (display_names.isDefined())
-		{
-			for(LLSD::array_const_iterator it = display_names.beginArray(),
-				end = display_names.endArray(); it != end; ++it)
-			{
-				LLSD display_name_version = (*it)["version"];
-				if (display_name_version.isDefined()
-					&& display_name_version.asInteger() > 0)
-				{
-					use_display_names = true;
-				}
-			}
-		}
-		LLAvatarNameCache::setUseDisplayNames(use_display_names);
-
 		// This method MUST be called before gInventory.findCategoryUUIDForType because of 
 		// gInventory.mIsAgentInvUsable is set to true in the gInventory.buildParentChildMap.
 		gInventory.buildParentChildMap();
-- 
cgit v1.2.3


From d89de271437f35f9d26e28409e6cc1d593a2fc7a Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Mon, 26 Apr 2010 10:51:42 -0700
Subject: DEV-47529 Viewer turns display names on/off based on region
 capability

Also refreshes name tags so you can see the state.
Reviewed with Kelly.
---
 indra/newview/llappviewer.cpp | 18 +++++++++++++++++-
 indra/newview/llvoavatar.cpp  | 14 ++++++++++++++
 indra/newview/llvoavatar.h    |  2 ++
 3 files changed, 33 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index e160951b91..3b236676f1 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -3919,7 +3919,8 @@ void LLAppViewer::idleNameCache()
 	std::string name_lookup_url;
 	name_lookup_url.reserve(128); // avoid a memory allocation below
 	name_lookup_url = region->getCapability("GetDisplayNames");
-	if (!name_lookup_url.empty())
+	bool have_capability = !name_lookup_url.empty();
+	if (have_capability)
 	{
 		// we have support for display names, use it
 	    U32 url_size = name_lookup_url.size();
@@ -3939,6 +3940,21 @@ void LLAppViewer::idleNameCache()
 		LLAvatarNameCache::setNameLookupURL( std::string() );
 	}
 
+	// Error recovery - did we change state?
+	if (LLAvatarNameCache::useDisplayNames() && !have_capability)
+	{
+		// ...we just lost the capability, turn names off
+		LLAvatarNameCache::setUseDisplayNames(false);
+		// name tags are persistant on screen, so make sure they refresh
+		LLVOAvatar::invalidateNameTags();
+	}
+	else if (!LLAvatarNameCache::useDisplayNames() && have_capability)
+	{
+		// ...we just gained the capability, turn names on
+		LLAvatarNameCache::setUseDisplayNames(true);
+		LLVOAvatar::invalidateNameTags();
+	}
+
 	LLAvatarNameCache::idle();
 }
 
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 881012467e..9e56357b30 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -3017,6 +3017,20 @@ void LLVOAvatar::invalidateNameTag(const LLUUID& agent_id)
 	avatar->clearNameTag();
 }
 
+//static
+void LLVOAvatar::invalidateNameTags()
+{
+	std::vector<LLCharacter*>::iterator it = LLCharacter::sInstances.begin();
+	for ( ; it != LLCharacter::sInstances.end(); ++it)
+	{
+		LLVOAvatar* avatar = dynamic_cast<LLVOAvatar*>(*it);
+		if (!avatar) continue;
+		if (avatar->isDead()) continue;
+
+		avatar->clearNameTag();
+	}
+}
+
 // Compute name tag position during idle update
 LLVector3 LLVOAvatar::idleUpdateNameTagPosition(const LLVector3& root_pos_last)
 {
diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h
index 4e0275deb5..ad0e2b096e 100644
--- a/indra/newview/llvoavatar.h
+++ b/indra/newview/llvoavatar.h
@@ -216,6 +216,8 @@ public:
 	LLColor4		getNameTagColor(bool is_friend);
 	void			clearNameTag();
 	static void		invalidateNameTag(const LLUUID& agent_id);
+	// force all name tags to rebuild, useful when display names turned on/off
+	static void		invalidateNameTags();
 	void			addNameTagLine(const std::string& line, const LLColor4& color, S32 style, const LLFontGL* font);
 	void 			idleUpdateRenderCost();
 	void 			idleUpdateTractorBeam();
-- 
cgit v1.2.3


From 7c913b91163cb2cb9e1829b523d1678a74230e93 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Mon, 26 Apr 2010 11:26:02 -0700
Subject: Fix inspector display name updating to help test server Display Names

---
 indra/newview/llinspectavatar.cpp | 34 ++++++++++++++++++++++++++--------
 1 file changed, 26 insertions(+), 8 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llinspectavatar.cpp b/indra/newview/llinspectavatar.cpp
index 1bb9c42cbf..47b287b3ef 100644
--- a/indra/newview/llinspectavatar.cpp
+++ b/indra/newview/llinspectavatar.cpp
@@ -146,6 +146,8 @@ private:
 	void onNameCache(const LLUUID& id,
 							 const std::string& name,
 							 bool is_group);
+	void onAvatarNameCache(const LLUUID& agent_id,
+						   const LLAvatarName& av_name);
 	
 private:
 	LLUUID				mAvatarID;
@@ -332,6 +334,7 @@ void LLInspectAvatar::requestUpdate()
 
 	// Clear out old data so it doesn't flash between old and new
 	getChild<LLUICtrl>("user_name")->setValue("");
+	getChild<LLUICtrl>("user_slid")->setValue("");
 	getChild<LLUICtrl>("user_subtitle")->setValue("");
 	getChild<LLUICtrl>("user_details")->setValue("");
 	
@@ -369,9 +372,19 @@ void LLInspectAvatar::requestUpdate()
 
 	childSetValue("avatar_icon", LLSD(mAvatarID) );
 
+	// JAMESDEBUG HACK: Request via both legacy name system and new
+	// name system to set mAvatarName for not-yet-converted friendship
+	// request system.
 	gCacheName->get(mAvatarID, false,
 		boost::bind(&LLInspectAvatar::onNameCache,
 			this, _1, _2, _3));
+
+	if (LLAvatarNameCache::useDisplayNames())
+	{
+		LLAvatarNameCache::get(mAvatarID,
+			boost::bind(&LLInspectAvatar::onAvatarNameCache,
+				this, _1, _2));
+	}
 }
 
 void LLInspectAvatar::processAvatarData(LLAvatarData* data)
@@ -614,14 +627,7 @@ void LLInspectAvatar::onNameCache(
 		mAvatarName = full_name;
 
 		// IDEVO JAMESDEBUG - need to always display a display name
-		LLAvatarName av_name;
-		if (LLAvatarNameCache::useDisplayNames()
-			&& LLAvatarNameCache::get(mAvatarID, &av_name))
-		{
-			getChild<LLUICtrl>("user_name")->setValue(av_name.mDisplayName);
-			getChild<LLUICtrl>("user_slid")->setValue(av_name.mSLID);
-		}
-		else
+		if (!LLAvatarNameCache::useDisplayNames())
 		{
 			getChild<LLUICtrl>("user_name")->setValue(full_name);
 			getChild<LLUICtrl>("user_slid")->setValue("");
@@ -629,6 +635,18 @@ void LLInspectAvatar::onNameCache(
 	}
 }
 
+void LLInspectAvatar::onAvatarNameCache(
+		const LLUUID& agent_id,
+		const LLAvatarName& av_name)
+{
+	if (agent_id == mAvatarID)
+	{
+		// JAMESDEBUG what to do about mAvatarName ?
+		getChild<LLUICtrl>("user_name")->setValue(av_name.mDisplayName);
+		getChild<LLUICtrl>("user_slid")->setValue(av_name.mSLID);
+	}
+}
+
 void LLInspectAvatar::onClickAddFriend()
 {
 	LLAvatarActions::requestFriendshipDialog(mAvatarID, mAvatarName);
-- 
cgit v1.2.3


From af5dd4fbfa6fdee3d38167ec1153d01fd4265b35 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Mon, 26 Apr 2010 14:20:07 -0700
Subject: Strip some debug spam

---
 indra/newview/llassetuploadresponders.cpp |  2 +-
 indra/newview/llviewerdisplayname.cpp     |  5 +++--
 indra/newview/llviewermessage.cpp         | 11 +++++------
 3 files changed, 9 insertions(+), 9 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llassetuploadresponders.cpp b/indra/newview/llassetuploadresponders.cpp
index 8e8be842ef..8441796219 100644
--- a/indra/newview/llassetuploadresponders.cpp
+++ b/indra/newview/llassetuploadresponders.cpp
@@ -234,7 +234,7 @@ void LLNewAgentInventoryResponder::uploadComplete(const LLSD& content)
 		LLStatusBar::sendMoneyBalanceRequest();
 
 		LLSD args;
-		args["AMOUNT"] = llformat("%d", expected_upload_cost) + std::string(" JAMESDEBUG 1101"); // JAMESDEBUG
+		args["AMOUNT"] = llformat("%d", expected_upload_cost);
 		LLNotificationsUtil::add("UploadPayment", args);
 	}
 
diff --git a/indra/newview/llviewerdisplayname.cpp b/indra/newview/llviewerdisplayname.cpp
index 2c0219cfbc..9250117581 100644
--- a/indra/newview/llviewerdisplayname.cpp
+++ b/indra/newview/llviewerdisplayname.cpp
@@ -90,6 +90,8 @@ void LLViewerDisplayName::set(const std::string& display_name, const set_name_sl
 
 class LLSetDisplayNameReply : public LLHTTPNode
 {
+	LOG_CLASS(LLSetDisplayNameReply);
+public:
 	/*virtual*/ void post(
 		LLHTTPNode::ResponsePtr response,
 		const LLSD& context,
@@ -102,8 +104,7 @@ class LLSetDisplayNameReply : public LLHTTPNode
 		std::string reason = body["reason"].asString();
 		LLSD content = body["content"];
 
-		llinfos << "JAMESDEBUG LLSetDisplayNameReply status " << status
-			<< " reason " << reason << llendl;
+		llinfos << "status " << status << " reason " << reason << llendl;
 
 		// inform caller of result
 		LLViewerDisplayName::sSetDisplayNameSignal(success, reason, content);
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 000eb45121..0d4bf6e40f 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -4614,9 +4614,9 @@ void process_money_balance_reply( LLMessageSystem* msg, void** )
 		msg->getBOOL("TransactionInfo", "IsDestGroup", is_dest_group);
         msg->getS32("TransactionInfo", "Amount", amount);
         msg->getString("TransactionInfo", "ItemDescription", item_description);
-        llinfos << "JAMESDEBUG money_balance_reply source " << source_id 
+        LL_DEBUGS("Money") << "MoneyBalanceReply source " << source_id 
 			<< " dest " << dest_id
-			<< " item " << item_description << llendl;
+			<< " item " << item_description << LL_ENDL;
     }
     
 	if (gStatusBar)
@@ -4658,7 +4658,7 @@ void process_money_balance_reply( LLMessageSystem* msg, void** )
 		// "<avatar name> paid you L$"
 		const std::string marker = "paid you L$";
 
-		args["MESSAGE"] = desc + llformat(" JAMESDEBUG %d", transaction_type); // JAMESDEBUG;
+		args["MESSAGE"] = desc;
 
 		// extract avatar name from system message
 		S32 marker_pos = desc.find(marker, 0);
@@ -4683,8 +4683,7 @@ void process_money_balance_reply( LLMessageSystem* msg, void** )
 			str_args["AMOUNT"] = ammount;
 			std::string new_description = LLTrans::getString("paid_you_ldollars", str_args);
 
-
-			args["MESSAGE"] = new_description + llformat(" JAMESDEBUG %d", transaction_type); // JAMESDEBUG
+			args["MESSAGE"] = new_description;
 			args["NAME"] = LLCacheName::cleanFullName(name);
 			LLSD payload;
 			payload["from_id"] = from_id;
@@ -4744,7 +4743,7 @@ void process_money_balance_reply( LLMessageSystem* msg, void** )
 					// forming final message string by retrieving localized version from xml
 					// and applying previously found arguments
 					line = LLTrans::getString(line, str_args);
-					args["MESSAGE"] = line + llformat(" JAMESDEBUG %d", transaction_type); // JAMESDEBUG;
+					args["MESSAGE"] = line;
 				}
 			}
 
-- 
cgit v1.2.3


From 6d239f7cfae65e6c8354d9f94061e81e82112a44 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Tue, 27 Apr 2010 11:56:13 -0700
Subject: Convert profile panel to new avatar name cache

---
 indra/newview/llpanelprofileview.cpp | 25 ++++++++-----------------
 indra/newview/llpanelprofileview.h   | 10 ++++++----
 2 files changed, 14 insertions(+), 21 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llpanelprofileview.cpp b/indra/newview/llpanelprofileview.cpp
index 5688c6960b..526db2a192 100644
--- a/indra/newview/llpanelprofileview.cpp
+++ b/indra/newview/llpanelprofileview.cpp
@@ -108,8 +108,10 @@ void LLPanelProfileView::onOpen(const LLSD& key)
 	}
 
 	// Update the avatar name.
-	gCacheName->get(getAvatarId(), false,
-		boost::bind(&LLPanelProfileView::onNameCache, this, _1, _2, _3));
+//	gCacheName->get(getAvatarId(), false,
+//		boost::bind(&LLPanelProfileView::onNameCache, this, _1, _2, _3));
+	LLAvatarNameCache::get(getAvatarId(),
+		boost::bind(&LLPanelProfileView::onAvatarNameCache, this, _1, _2));
 
 	updateOnlineStatus();
 
@@ -199,22 +201,11 @@ void LLPanelProfileView::processOnlineStatus(bool online)
 	mStatusText->setValue(status);
 }
 
-void LLPanelProfileView::onNameCache(const LLUUID& id, const std::string& full_name, bool is_group)
+void LLPanelProfileView::onAvatarNameCache(const LLUUID& agent_id,
+										   const LLAvatarName& av_name)
 {
-	llassert(getAvatarId() == id);
-	// IDEVO
-	LLAvatarName av_name;
-	if (LLAvatarNameCache::useDisplayNames()
-		&& LLAvatarNameCache::get(id, &av_name))
-	{
-		getChild<LLUICtrl>("user_name")->setValue( av_name.mDisplayName );
-		getChild<LLUICtrl>("user_slid")->setValue( av_name.mSLID );
-	}
-	else
-	{
-		getChild<LLUICtrl>("user_name")->setValue(full_name);
-		getChild<LLUICtrl>("user_slid")->setValue("");
-	}
+	getChild<LLUICtrl>("user_name")->setValue( av_name.mDisplayName );
+	getChild<LLUICtrl>("user_slid")->setValue( av_name.mSLID );
 }
 
 // EOF
diff --git a/indra/newview/llpanelprofileview.h b/indra/newview/llpanelprofileview.h
index 2b67be12e5..dedb617c27 100644
--- a/indra/newview/llpanelprofileview.h
+++ b/indra/newview/llpanelprofileview.h
@@ -39,6 +39,7 @@
 #include "llagent.h"
 #include "lltooldraganddrop.h"
 
+class LLAvatarName;
 class LLPanelProfile;
 class LLPanelProfileTab;
 class LLTextBox;
@@ -99,10 +100,11 @@ protected:
 private:
 	// LLCacheName will call this function when avatar name is loaded from server.
 	// This is required to display names that have not been cached yet.
-	void onNameCache(
-		const LLUUID& id, 
-		const std::string& full_name,
-		bool is_group);
+//	void onNameCache(
+//		const LLUUID& id, 
+//		const std::string& full_name,
+//		bool is_group);
+	void onAvatarNameCache(const LLUUID& agent_id, const LLAvatarName& av_name);
 
 	LLTextBox* mStatusText;
 	AvatarStatusObserver* mAvatarStatusObserver;
-- 
cgit v1.2.3


From 56f5a6909d8a665531e3f6ede380cad57e313728 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Tue, 27 Apr 2010 13:54:40 -0700
Subject: Menu item to disable display names for testing works again

Start up cache in not-running state on viewer.  Set cache running when
idle() is called.  Explicitly refresh name tags when toggled.
Reviewed with Simon
---
 indra/newview/llappviewer.cpp  | 11 ++---------
 indra/newview/llstartup.cpp    |  4 +++-
 indra/newview/llviewermenu.cpp |  2 ++
 3 files changed, 7 insertions(+), 10 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 3b236676f1..5df6776fa7 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -3916,6 +3916,7 @@ void LLAppViewer::idleNameCache()
 	// granted to neighbor regions before the main agent gets there.  Can't
 	// do it in the move-into-region code because cap not guaranteed to be
 	// granted yet, for example on teleport.
+	bool had_capability = LLAvatarNameCache::hasNameLookupURL();
 	std::string name_lookup_url;
 	name_lookup_url.reserve(128); // avoid a memory allocation below
 	name_lookup_url = region->getCapability("GetDisplayNames");
@@ -3941,19 +3942,11 @@ void LLAppViewer::idleNameCache()
 	}
 
 	// Error recovery - did we change state?
-	if (LLAvatarNameCache::useDisplayNames() && !have_capability)
+	if (had_capability != have_capability)
 	{
-		// ...we just lost the capability, turn names off
-		LLAvatarNameCache::setUseDisplayNames(false);
 		// name tags are persistant on screen, so make sure they refresh
 		LLVOAvatar::invalidateNameTags();
 	}
-	else if (!LLAvatarNameCache::useDisplayNames() && have_capability)
-	{
-		// ...we just gained the capability, turn names on
-		LLAvatarNameCache::setUseDisplayNames(true);
-		LLVOAvatar::invalidateNameTags();
-	}
 
 	LLAvatarNameCache::idle();
 }
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 7531853008..2baaf0f58f 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -2771,7 +2771,9 @@ void LLStartUp::initNameCache()
 	// Load stored cache if possible
 	LLAppViewer::instance()->loadNameCache();
 
-	LLAvatarNameCache::initClass();
+	// Start cache in not-running state until we figure out if we have
+	// capabilities for display name lookup
+	LLAvatarNameCache::initClass(false);
 }
 
 void LLStartUp::cleanupNameCache()
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index adf71878f5..9fe16b5253 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -7597,6 +7597,8 @@ void toggle_display_names()
 {
 	bool use = LLAvatarNameCache::useDisplayNames();
 	LLAvatarNameCache::setUseDisplayNames(!use);
+
+	LLVOAvatar::invalidateNameTags();
 }
 
 void show_navbar_context_menu(LLView* ctrl, S32 x, S32 y)
-- 
cgit v1.2.3


From 357dc21c1149228d10f446f774a0549ab698b5e8 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Wed, 28 Apr 2010 10:46:53 -0700
Subject: Profile clears old data out of name field when shown

---
 indra/newview/llpanelprofileview.cpp | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llpanelprofileview.cpp b/indra/newview/llpanelprofileview.cpp
index 526db2a192..1afe2b9d44 100644
--- a/indra/newview/llpanelprofileview.cpp
+++ b/indra/newview/llpanelprofileview.cpp
@@ -105,11 +105,13 @@ void LLPanelProfileView::onOpen(const LLSD& key)
 	if(id.notNull() && getAvatarId() != id)
 	{
 		setAvatarId(id);
+
+		// clear name fields, which might have old data
+		getChild<LLUICtrl>("user_name")->setValue( LLSD() );
+		getChild<LLUICtrl>("user_slid")->setValue( LLSD() );
 	}
 
 	// Update the avatar name.
-//	gCacheName->get(getAvatarId(), false,
-//		boost::bind(&LLPanelProfileView::onNameCache, this, _1, _2, _3));
 	LLAvatarNameCache::get(getAvatarId(),
 		boost::bind(&LLPanelProfileView::onAvatarNameCache, this, _1, _2));
 
-- 
cgit v1.2.3


From 149dd3c11b07cfca6b5b7576d6568aef865cefda Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Wed, 28 Apr 2010 14:40:02 -0700
Subject: Allow avatar picker searches for < 3 characters

Basically, allow any non-zero-length search.
Relates to DEV-49464
---
 indra/newview/llfloateravatarpicker.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloateravatarpicker.cpp b/indra/newview/llfloateravatarpicker.cpp
index db559ce13c..f3b14b9b3d 100644
--- a/indra/newview/llfloateravatarpicker.cpp
+++ b/indra/newview/llfloateravatarpicker.cpp
@@ -548,7 +548,7 @@ void LLFloaterAvatarPicker::processResponse(const LLUUID& query_id, const LLSD&
 //static
 void LLFloaterAvatarPicker::editKeystroke(LLLineEditor* caller, void* user_data)
 {
-	childSetEnabled("Find", caller->getText().size() >= 3);
+	childSetEnabled("Find", caller->getText().size() > 0);
 }
 
 // virtual
-- 
cgit v1.2.3


From 0a249b25b993f004ce05d48f7bce7988d398eb03 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Wed, 28 Apr 2010 17:02:16 -0700
Subject: Login input field allows legacy first+last name > 31 chars

Previously if you had a super-long first name, you couldn't log in!
---
 indra/newview/skins/default/xui/en/panel_login.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml
index 9690561d5d..f435644ec9 100644
--- a/indra/newview/skins/default/xui/en/panel_login.xml
+++ b/indra/newview/skins/default/xui/en/panel_login.xml
@@ -68,7 +68,7 @@ handle_edit_keys_directly="true"
 height="22"
 label="e.g. bobsmith12 or Stellar Sunshine"
 left_delta="0"
-max_length="31"
+max_length="63"
 name="login_id_edit"
 prevalidate_callback="ascii" 
 select_on_focus="true"
-- 
cgit v1.2.3


From 1d8efc3701e0a22821f1bc9f7a98dff994297a7b Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Wed, 28 Apr 2010 23:11:39 -0700
Subject: DEV-49513 Viewer speaks final People API set display name format

---
 indra/newview/llviewerdisplayname.cpp | 19 +++++++++++++++++--
 1 file changed, 17 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewerdisplayname.cpp b/indra/newview/llviewerdisplayname.cpp
index 9250117581..4d243ce5ae 100644
--- a/indra/newview/llviewerdisplayname.cpp
+++ b/indra/newview/llviewerdisplayname.cpp
@@ -75,16 +75,31 @@ void LLViewerDisplayName::set(const std::string& display_name, const set_name_sl
 		return;
 	}
 
+	// People API requires both the old and new value to change a variable.
+	// Our display name will be in cache before the viewer's UI is available
+	// to request a change, so we can use direct lookup without callback.
+	LLAvatarName av_name;
+	if (!LLAvatarNameCache::get( gAgent.getID(), &av_name))
+	{
+		slot(false, "name unavailable", LLSD());
+		return;
+	}
+
+	// People API expects array of [ "old value", "new value" ]
+	LLSD change_array = LLSD::emptyArray();
+	change_array.append(av_name.mDisplayName);
+	change_array.append(display_name);
+	
 	llinfos << "Set name POST to " << cap_url << llendl;
 
 	// Record our caller for when the server sends back a reply
 	sSetDisplayNameSignal.connect(slot);
-
+	
 	// POST the requested change.  The sim will not send a response back to
 	// this request directly, rather it will send a separate message after it
 	// communicates with the back-end.
 	LLSD body;
-	body["display_name"] = display_name;
+	body["display_name"] = change_array;
 	LLHTTPClient::post(cap_url, body, new LLSetDisplayNameResponder);
 }
 
-- 
cgit v1.2.3


From 3ba08e7149e215f4e169ff844e14bf22040735bf Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Thu, 29 Apr 2010 11:29:35 -0700
Subject: DEV-49489 Viewer supports People API set 409 Conflict error

---
 indra/newview/llviewerdisplayname.cpp | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewerdisplayname.cpp b/indra/newview/llviewerdisplayname.cpp
index 4d243ce5ae..beb1dc9c82 100644
--- a/indra/newview/llviewerdisplayname.cpp
+++ b/indra/newview/llviewerdisplayname.cpp
@@ -121,6 +121,21 @@ public:
 
 		llinfos << "status " << status << " reason " << reason << llendl;
 
+		// If viewer's concept of display name is out-of-date, the set request
+		// will fail with 409 Conflict.  If that happens, fetch up-to-date
+		// name information.
+		if (status == 409)
+		{
+			LLUUID agent_id = gAgent.getID();
+			// Flush stale data
+			LLAvatarNameCache::erase( agent_id );
+			// Queue request for new data
+			LLAvatarName ignored;
+			LLAvatarNameCache::get( agent_id, &ignored );
+			// Kill name tag, as it is wrong
+			LLVOAvatar::invalidateNameTag( agent_id );
+		}
+
 		// inform caller of result
 		LLViewerDisplayName::sSetDisplayNameSignal(success, reason, content);
 		LLViewerDisplayName::sSetDisplayNameSignal.disconnect_all_slots();
-- 
cgit v1.2.3


From da723c27ca4cdd402af81a0b6f2545334119b98c Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Thu, 29 Apr 2010 17:13:56 -0700
Subject: Send Accept-Language header to localize set-display-name error msgs

---
 indra/newview/llviewerdisplayname.cpp | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewerdisplayname.cpp b/indra/newview/llviewerdisplayname.cpp
index beb1dc9c82..a6ac2587db 100644
--- a/indra/newview/llviewerdisplayname.cpp
+++ b/indra/newview/llviewerdisplayname.cpp
@@ -43,6 +43,7 @@
 #include "llhttpclient.h"
 #include "llhttpnode.h"
 #include "llnotificationsutil.h"
+#include "llui.h"					// getLanguage()
 
 namespace LLViewerDisplayName
 {
@@ -75,6 +76,11 @@ void LLViewerDisplayName::set(const std::string& display_name, const set_name_sl
 		return;
 	}
 
+	// People API can return localized error messages.  Indicate our
+	// language preference via header.
+	LLSD headers;
+	headers["Accept-Language"] = LLUI::getLanguage();
+
 	// People API requires both the old and new value to change a variable.
 	// Our display name will be in cache before the viewer's UI is available
 	// to request a change, so we can use direct lookup without callback.
@@ -100,7 +106,7 @@ void LLViewerDisplayName::set(const std::string& display_name, const set_name_sl
 	// communicates with the back-end.
 	LLSD body;
 	body["display_name"] = change_array;
-	LLHTTPClient::post(cap_url, body, new LLSetDisplayNameResponder);
+	LLHTTPClient::post(cap_url, body, new LLSetDisplayNameResponder, headers);
 }
 
 class LLSetDisplayNameReply : public LLHTTPNode
-- 
cgit v1.2.3


From ea7d6eab6f58b994825cf051741a874ec1681515 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Fri, 30 Apr 2010 13:28:15 -0700
Subject: Hide "Set Name..." button if region/grid doesn't use display names

---
 indra/newview/llpanelme.cpp | 7 +++++++
 1 file changed, 7 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/llpanelme.cpp b/indra/newview/llpanelme.cpp
index c4fe613161..d4a54852cd 100644
--- a/indra/newview/llpanelme.cpp
+++ b/indra/newview/llpanelme.cpp
@@ -196,6 +196,13 @@ void LLPanelMyProfileEdit::onOpen(const LLSD& key)
 	// Disable editing until data is loaded, or edited fields will be overwritten when data
 	// is loaded.
 	enableEditing(false);
+
+	// Only allow changing name if this region/grid supports it
+	bool use_display_names = LLAvatarNameCache::useDisplayNames();
+	LLUICtrl* set_name = getChild<LLUICtrl>("set_name");
+	set_name->setVisible(use_display_names);
+	set_name->setEnabled(use_display_names);
+
 	LLPanelMyProfile::onOpen(getAvatarId());
 }
 
-- 
cgit v1.2.3


From 831dd9ca40f199f2a9e89eee56d12e217ced0cc4 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Fri, 30 Apr 2010 17:32:27 -0700
Subject: Partial display name support in money transaction notifications

---
 indra/newview/llnotificationhandlerutil.cpp        |   6 +-
 indra/newview/llviewermessage.cpp                  | 319 ++++++++++++---------
 .../newview/skins/default/xui/en/notifications.xml |  11 +-
 indra/newview/skins/default/xui/en/strings.xml     |   1 +
 4 files changed, 184 insertions(+), 153 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llnotificationhandlerutil.cpp b/indra/newview/llnotificationhandlerutil.cpp
index b5e0d998fe..cd859c9cb8 100644
--- a/indra/newview/llnotificationhandlerutil.cpp
+++ b/indra/newview/llnotificationhandlerutil.cpp
@@ -116,8 +116,7 @@ const static std::string GRANTED_MODIFY_RIGHTS("GrantedModifyRights"),
 		REVOKED_MODIFY_RIGHTS("RevokedModifyRights"), OBJECT_GIVE_ITEM(
 				"ObjectGiveItem"),
 						PAYMENT_RECEIVED("PaymentReceived"),
-//						PAYMENT_RECEIVED_FOR("PaymentReceivedFor"),
-//						PAYMENT_SENT("PaymentSent"),
+						PAYMENT_SENT("PaymentSent"),
 						ADD_FRIEND_WITH_MESSAGE("AddFriendWithMessage"),
 						USER_GIVE_ITEM("UserGiveItem"),
 						INVENTORY_ACCEPTED("InventoryAccepted"),
@@ -139,8 +138,7 @@ bool LLHandlerUtil::canLogToIM(const LLNotificationPtr& notification)
 	return GRANTED_MODIFY_RIGHTS == notification->getName()
 			|| REVOKED_MODIFY_RIGHTS == notification->getName()
 			|| PAYMENT_RECEIVED == notification->getName()
-//			|| PAYMENT_RECEIVED_FOR == notification->getName()
-//			|| PAYMENT_SENT == notification->getName()
+			|| PAYMENT_SENT == notification->getName()
 			|| OFFER_FRIENDSHIP == notification->getName()
 			|| FRIENDSHIP_OFFERED == notification->getName()
 			|| FRIENDSHIP_ACCEPTED == notification->getName()
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 0d4bf6e40f..ea41c6da11 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -132,6 +132,8 @@ extern BOOL gDebugClicks;
 
 // function prototypes
 bool check_offer_throttle(const std::string& from_name, bool check_only);
+static void process_money_balance_reply_extended(LLMessageSystem* msg);
+static void process_money_balance_reply_legacy(const std::string& desc);
 
 //inventory offer throttle globals
 LLFrameTimer gThrottleTimer;
@@ -4588,14 +4590,66 @@ void process_money_balance_reply( LLMessageSystem* msg, void** )
 	S32 credit = 0;
 	S32 committed = 0;
 	std::string desc;
+	LLUUID tid;
 
+	msg->getUUID("MoneyData", "TransactionID", tid);
 	msg->getS32("MoneyData", "MoneyBalance", balance);
 	msg->getS32("MoneyData", "SquareMetersCredit", credit);
 	msg->getS32("MoneyData", "SquareMetersCommitted", committed);
 	msg->getStringFast(_PREHASH_MoneyData, _PREHASH_Description, desc);
 	LL_INFOS("Messaging") << "L$, credit, committed: " << balance << " " << credit << " "
 			<< committed << LL_ENDL;
+    
+	if (gStatusBar)
+	{
+		gStatusBar->setBalance(balance);
+		gStatusBar->setLandCredit(credit);
+		gStatusBar->setLandCommitted(committed);
+	}
+
+	if (desc.empty()
+		|| !gSavedSettings.getBOOL("NotifyMoneyChange"))
+	{
+		// ...nothing to display
+		return;
+	}
 
+	// Suppress duplicate messages about the same transaction
+	static std::deque<LLUUID> recent;
+	if (std::find(recent.rbegin(), recent.rend(), tid) != recent.rend())
+	{
+		return;
+	}
+
+	// Once the 'recent' container gets large enough, chop some
+	// off the beginning.
+	const U32 MAX_LOOKBACK = 30;
+	const S32 POP_FRONT_SIZE = 12;
+	if(recent.size() > MAX_LOOKBACK)
+	{
+		LL_DEBUGS("Messaging") << "Removing oldest transaction records" << LL_ENDL;
+		recent.erase(recent.begin(), recent.begin() + POP_FRONT_SIZE);
+	}
+	//LL_DEBUGS("Messaging") << "Pushing back transaction " << tid << LL_ENDL;
+	recent.push_back(tid);
+
+	if (msg->has("TransactionInfo"))
+	{
+		// JAMESDEBUG TODO - for test, do both!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+		process_money_balance_reply_legacy(desc);
+
+		// ...message has extended info for localization
+		process_money_balance_reply_extended(msg);
+	}
+	else
+	{
+		// *NOTE: Can remove this after server 1.40 is widely deployed.
+		process_money_balance_reply_legacy(desc);
+	}
+}
+
+static void process_money_balance_reply_extended(LLMessageSystem* msg)
+{
     // Added in server 1.40 and viewer 2.1, support for localization
     // and agent ids for name lookup.
     S32 transaction_type = 0;
@@ -4605,163 +4659,150 @@ void process_money_balance_reply( LLMessageSystem* msg, void** )
 	BOOL is_dest_group = FALSE;
     S32 amount = 0;
     std::string item_description;
-    if (msg->has("TransactionInfo"))
-    {
-        msg->getS32("TransactionInfo", "TransactionType", transaction_type);
-        msg->getUUID("TransactionInfo", "SourceID", source_id);
-		msg->getBOOL("TransactionInfo", "IsSourceGroup", is_source_group);
-        msg->getUUID("TransactionInfo", "DestID", dest_id);
-		msg->getBOOL("TransactionInfo", "IsDestGroup", is_dest_group);
-        msg->getS32("TransactionInfo", "Amount", amount);
-        msg->getString("TransactionInfo", "ItemDescription", item_description);
-        LL_DEBUGS("Money") << "MoneyBalanceReply source " << source_id 
-			<< " dest " << dest_id
-			<< " item " << item_description << LL_ENDL;
-    }
-    
-	if (gStatusBar)
-	{
-	//	S32 old_balance = gStatusBar->getBalance();
 
-		// This is an update, not the first transmission of balance
-	/*	if (old_balance != 0)
-		{
-			// this is actually an update
-			if (balance > old_balance)
-			{
-				LLFirstUse::useBalanceIncrease(balance - old_balance);
-			}
-			else if (balance < old_balance)
-			{
-				LLFirstUse::useBalanceDecrease(balance - old_balance);
-			}
-		}
-	 */
-		gStatusBar->setBalance(balance);
-		gStatusBar->setLandCredit(credit);
-		gStatusBar->setLandCommitted(committed);
-	}
+    msg->getS32("TransactionInfo", "TransactionType", transaction_type);
+    msg->getUUID("TransactionInfo", "SourceID", source_id);
+	msg->getBOOL("TransactionInfo", "IsSourceGroup", is_source_group);
+    msg->getUUID("TransactionInfo", "DestID", dest_id);
+	msg->getBOOL("TransactionInfo", "IsDestGroup", is_dest_group);
+    msg->getS32("TransactionInfo", "Amount", amount);
+    msg->getString("TransactionInfo", "ItemDescription", item_description);
+    LL_INFOS("Money") << "MoneyBalanceReply source " << source_id 
+		<< " dest " << dest_id
+		<< " type " << transaction_type
+		<< " item " << item_description << LL_ENDL;
+
+	const char* source_type = (is_source_group ? "group" : "agent");
+	std::string source_slurl =
+		LLSLURL::buildCommand( source_type, source_id, "about");
+	
+	const char* dest_type = (is_dest_group ? "group" : "agent");
+	std::string dest_slurl =
+		LLSLURL::buildCommand( dest_type, dest_id, "about");
 
-	LLUUID tid;
-	msg->getUUID("MoneyData", "TransactionID", tid);
-	static std::deque<LLUUID> recent;
-	if(!desc.empty() && gSavedSettings.getBOOL("NotifyMoneyChange")
-	   && (std::find(recent.rbegin(), recent.rend(), tid) == recent.rend()))
-	{
-		// Make the user confirm the transaction, since they might
-		// have missed something during an event.
-		// *TODO: Translate
-		LLSD args;
-		
+	//
+	//
+	// JAMESDEBUG TODO HERE!!!
+	//
+	//
 
-		// this is a marker to retrieve avatar name from server message:
-		// "<avatar name> paid you L$"
-		const std::string marker = "paid you L$";
+	switch (transaction_type)
+	{
+	case TRANS_OBJECT_SALE:
+	case TRANS_LAND_SALE:
+	case TRANS_LAND_PASS_SALE:
+	case TRANS_GROUP_LAND_DEED:
+	case TRANS_GROUP_CREATE:
+	case TRANS_GROUP_JOIN:
+	case TRANS_UPLOAD_CHARGE:
+	default:
+		llinfos << "HERE!" << llendl;
+		break;
+	}
+}
 
-		args["MESSAGE"] = desc;
+// *NOTE: This can be removed after server 1.40 is widely deployed, as it will
+// send an extra TransactionInfo block to allow proper localization.
+static void process_money_balance_reply_legacy(const std::string& desc)
+{
+	LLSD args;
 
-		// extract avatar name from system message
-		S32 marker_pos = desc.find(marker, 0);
+	// this is a marker to retrieve avatar name from server message:
+	// "<avatar name> paid you L$"
+	const std::string marker = "paid you L$";
 
-		std::string base_name = desc.substr(0, marker_pos);
-		
-		std::string name = base_name;
-		LLStringUtil::trim(name);
+	args["MESSAGE"] = desc;
 
-		// if name extracted and name cache contains avatar id send loggable notification
-		LLUUID from_id;
-		if(name.size() > 0 && gCacheName->getUUID(name, from_id))
-		{
-			//description always comes not localized. lets fix this
+	// extract avatar name from system message
+	S32 marker_pos = desc.find(marker, 0);
 
-			//ammount paid
-			std::string ammount = desc.substr(marker_pos + marker.length(),desc.length() - marker.length() - marker_pos);
+	std::string base_name = desc.substr(0, marker_pos);
 	
-			//reform description
-			LLStringUtil::format_map_t str_args;
-			str_args["NAME"] = LLCacheName::cleanFullName(name);
-			str_args["AMOUNT"] = ammount;
-			std::string new_description = LLTrans::getString("paid_you_ldollars", str_args);
-
-			args["MESSAGE"] = new_description;
-			args["NAME"] = LLCacheName::cleanFullName(name);
-			LLSD payload;
-			payload["from_id"] = from_id;
-			LLNotificationsUtil::add("PaymentReceived", args, payload);
-		}
-		//AD *HACK: Parsing incoming string to localize messages that come from server! EXT-5986
-		// It's only a temporarily and ineffective measure. It doesn't affect performance much
-		// because we get here only for specific type of messages, but anyway it is not right to do it!
-		// *TODO: Server-side changes should be made and this code removed.
-		else
+	std::string name = base_name;
+	LLStringUtil::trim(name);
+
+	// if name extracted and name cache contains avatar id send loggable notification
+	LLUUID from_id;
+	if(name.size() > 0 && gCacheName->getUUID(name, from_id))
+	{
+		//description always comes not localized. lets fix this
+
+		//ammount paid
+		std::string ammount = desc.substr(marker_pos + marker.length(),desc.length() - marker.length() - marker_pos);
+
+		//reform description
+		LLStringUtil::format_map_t str_args;
+		str_args["NAME"] = LLCacheName::cleanFullName(name);
+		str_args["AMOUNT"] = ammount;
+		std::string new_description = LLTrans::getString("paid_you_ldollars", str_args);
+
+		args["MESSAGE"] = new_description;
+		args["NAME"] = LLCacheName::cleanFullName(name);
+		LLSD payload;
+		payload["from_id"] = from_id;
+		LLNotificationsUtil::add("PaymentReceived", args, payload);
+	}
+	//AD *HACK: Parsing incoming string to localize messages that come from server! EXT-5986
+	// It's only a temporarily and ineffective measure. It doesn't affect performance much
+	// because we get here only for specific type of messages, but anyway it is not right to do it!
+	// *TODO: Server-side changes should be made and this code removed.
+	else
+	{
+		if(desc.find("You paid")==0)
 		{
-			if(desc.find("You paid")==0)
+			// Regular expression for message parsing- change it in case of server-side changes.
+			// Each set of parenthesis will later be used to find arguments of message we generate
+			// in the end of this if- (.*) gives us name of money receiver, (\\d+)-amount of money we pay
+			// and ([^$]*)- reason of payment
+			boost::regex expr("You paid (?:.{0}|(.*) )L\\$(\\d+)\\s?([^$]*)\\.");
+			boost::match_results <std::string::const_iterator> matches;
+			if(boost::regex_match(desc, matches, expr))
 			{
-				// Regular expression for message parsing- change it in case of server-side changes.
-				// Each set of parenthesis will later be used to find arguments of message we generate
-				// in the end of this if- (.*) gives us name of money receiver, (\\d+)-amount of money we pay
-				// and ([^$]*)- reason of payment
-				boost::regex expr("You paid (?:.{0}|(.*) )L\\$(\\d+)\\s?([^$]*)\\.");
-				boost::match_results <std::string::const_iterator> matches;
-				if(boost::regex_match(desc, matches, expr))
+				// Name of full localizable notification string
+				// there are three types of this string- with name of receiver and reason of payment,
+				// without name and without reason (but not simultaneously)
+				// example of string without name - You paid L$100 to create a group.
+				// example of string without reason - You paid Smdby Linden L$100.
+				// example of string with reason and name - You paid Smbdy Linden L$100 for a land access pass.
+				std::string line = "you_paid_ldollars_no_name";
+
+				// arguments of string which will be in notification
+				LLStringUtil::format_map_t str_args;
+
+				// extracting amount of money paid (without L$ symbols). It is always present.
+				str_args["[AMOUNT]"] = std::string(matches[2]);
+
+				// extracting name of person/group you are paying (it may be absent)
+				std::string name = std::string(matches[1]);
+				if(!name.empty())
 				{
-					// Name of full localizable notification string
-					// there are three types of this string- with name of receiver and reason of payment,
-					// without name and without reason (but not simultaneously)
-					// example of string without name - You paid L$100 to create a group.
-					// example of string without reason - You paid Smdby Linden L$100.
-					// example of string with reason and name - You paid Smbdy Linden L$100 for a land access pass.
-					std::string line = "you_paid_ldollars_no_name";
-
-					// arguments of string which will be in notification
-					LLStringUtil::format_map_t str_args;
-
-					// extracting amount of money paid (without L$ symbols). It is always present.
-					str_args["[AMOUNT]"] = std::string(matches[2]);
-
-					// extracting name of person/group you are paying (it may be absent)
-					std::string name = std::string(matches[1]);
-					if(!name.empty())
-					{
-						str_args["[NAME]"] = LLCacheName::cleanFullName(name);
-						line = "you_paid_ldollars";
-					}
-
-					// extracting reason of payment (it may be absent)
-					std::string reason = std::string(matches[3]);
-					if (reason.empty())
-					{
-						line = "you_paid_ldollars_no_reason";
-					}
-					else
-					{
-						std::string localized_reason;
-						// if we haven't found localized string for reason of payment leave it as it was
-						str_args["[REASON]"] =  LLTrans::findString(localized_reason, reason) ? localized_reason : reason;
-					}
+					str_args["[NAME]"] = LLCacheName::cleanFullName(name);
+					line = "you_paid_ldollars";
+				}
 
-					// forming final message string by retrieving localized version from xml
-					// and applying previously found arguments
-					line = LLTrans::getString(line, str_args);
-					args["MESSAGE"] = line;
+				// extracting reason of payment (it may be absent)
+				std::string reason = std::string(matches[3]);
+				if (reason.empty())
+				{
+					line = "you_paid_ldollars_no_reason";
+				}
+				else
+				{
+					std::string localized_reason;
+					// if we haven't found localized string for reason of payment leave it as it was
+					str_args["[REASON]"] =  LLTrans::findString(localized_reason, reason) ? localized_reason : reason;
 				}
-			}
 
-			LLNotificationsUtil::add("SystemMessage", args);
+				// forming final message string by retrieving localized version from xml
+				// and applying previously found arguments
+				line = LLTrans::getString(line, str_args);
+				args["MESSAGE"] = line;
+			}
 		}
 
-		// Once the 'recent' container gets large enough, chop some
-		// off the beginning.
-		const U32 MAX_LOOKBACK = 30;
-		const S32 POP_FRONT_SIZE = 12;
-		if(recent.size() > MAX_LOOKBACK)
-		{
-			LL_DEBUGS("Messaging") << "Removing oldest transaction records" << LL_ENDL;
-			recent.erase(recent.begin(), recent.begin() + POP_FRONT_SIZE);
-		}
-		//LL_DEBUGS("Messaging") << "Pushing back transaction " << tid << LL_ENDL;
-		recent.push_back(tid);
+		LLNotificationsUtil::add("SystemMessage", args);
 	}
+
 }
 
 bool handle_special_notification_callback(const LLSD& notification, const LLSD& response)
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 1e93c3cc98..47c2e496bd 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -4686,21 +4686,12 @@ Please select at least one type of content to search (General, Moderate, or Adul
 [MESSAGE]
   </notification>
 
-  <!--
-  <notification
-   icon="notify.tga"
-   name="PaymentReceivedFor"
-   type="notify">
-[NAME] paid you L$[AMOUNT] for [REASON].
-  </notification>
-
   <notification
    icon="notify.tga"
    name="PaymentSent"
    type="notify">
-You paid [NAME] L$[AMOUNT][REASON].
+[MESSAGE]
   </notification>
-  -->
 
   <notification
    icon="notify.tga"
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index 69a2b4f7eb..f6e91452c3 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -3054,6 +3054,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
   <string name="you_paid_ldollars">You paid [NAME] L$[AMOUNT] [REASON].</string>
   <string name="you_paid_ldollars_no_reason">You paid [NAME] L$[AMOUNT].</string>
   <string name="you_paid_ldollars_no_name">You paid L$[AMOUNT] [REASON].</string>
+  <string name="for item">for [ITEM]</string>
   <string name="for a parcel of land">for a parcel of land</string>
   <string name="for a land access pass">for a land access pass</string>
   <string name="for deeding land">for deeding land</string>
-- 
cgit v1.2.3


From 4fca2fe33013186d269f4f4f7b43d2a36089e539 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Wed, 5 May 2010 17:16:26 -0700
Subject: WIP Final name tag colors, fonts, show logic

---
 indra/newview/llvoavatar.cpp           | 23 ++++++++++++++++-------
 indra/newview/skins/default/colors.xml |  9 ++++++---
 2 files changed, 22 insertions(+), 10 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 9e56357b30..c71cb1feaa 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -3069,21 +3069,30 @@ void LLVOAvatar::idleUpdateNameTagAlpha(BOOL new_name, F32 alpha)
 
 LLColor4 LLVOAvatar::getNameTagColor(bool is_friend)
 {
-	const char* color_name = "NameTagText";
+	const char* color_name;
 	if (is_friend)
 	{
 		color_name = "NameTagFriend";
 	}
-	else
+	else if (LLAvatarNameCache::useDisplayNames())
 	{
-		// IDEVO can we avoid doing this lookup repeatedly?
+		// ...color based on whether SLID "matches" a computed display
+		// name
 		LLAvatarName av_name;
-		if (LLAvatarNameCache::useDisplayNames()
-			&& LLAvatarNameCache::get(getID(), &av_name)
+		if (LLAvatarNameCache::get(getID(), &av_name)
 			&& av_name.mIsDisplayNameDefault)
-	{
-			color_name = "NameTagLegacy";
+		{
+			color_name = "NameTagMatch";
 		}
+		else
+		{
+			color_name = "NameTagMismatch";
+		}
+	}
+	else
+	{
+		// ...not using display names
+		color_name = "NameTagLegacy";
 	}
 	return LLUIColorTable::getInstance()->getColor( color_name );
 }
diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml
index 1d6c667f24..c1ee420d78 100644
--- a/indra/newview/skins/default/colors.xml
+++ b/indra/newview/skins/default/colors.xml
@@ -530,9 +530,6 @@
     <color
      name="NameTagChat"
      reference="White" />
-    <color
-     name="NameTagText"
-     reference="White" />
     <color
      name="NameTagFriend"
      reference="EmphasisColor" />
@@ -541,6 +538,12 @@
      value="1 1 1 1" />
     <color
      name="NameTagLegacy"
+     reference="White" />
+    <color
+     name="NameTagMatch"
+     reference="White" />
+    <color
+     name="NameTagMismatch"
      value="0.984 0.758 0 1" />
     <color
      name="NameTagSLID"
-- 
cgit v1.2.3


From 17e2739a363447f5e12c9d84ab319f51e99e942a Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Thu, 6 May 2010 16:31:39 -0700
Subject: WIP Add default name expiration on set response, need headers later

---
 indra/newview/llviewerdisplayname.cpp | 11 +++++++++++
 1 file changed, 11 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewerdisplayname.cpp b/indra/newview/llviewerdisplayname.cpp
index a6ac2587db..4122a112e5 100644
--- a/indra/newview/llviewerdisplayname.cpp
+++ b/indra/newview/llviewerdisplayname.cpp
@@ -148,6 +148,8 @@ public:
 	}
 };
 
+#include "llsdserialize.h"
+
 class LLDisplayNameUpdate : public LLHTTPNode
 {
 	/*virtual*/ void post(
@@ -164,6 +166,15 @@ class LLDisplayNameUpdate : public LLHTTPNode
 		// Inject the new name data into cache
 		LLAvatarName av_name;
 		av_name.fromLLSD( name_data );
+
+		// Name expiration time may be provided in headers, or we may use a
+		// default value
+		// JAMESDEBUG TODO: get actual headers out of ResponsePtr
+		//LLSD headers = response->mHeaders;
+		LLSD headers;
+		av_name.mExpires = 
+			LLAvatarNameCache::nameExpirationFromHeaders(headers);
+
 		LLAvatarNameCache::insert(agent_id, av_name);
 
 		// force name tag to update
-- 
cgit v1.2.3


From 3bfd0c2c15899e02377294415dc6d7697762d562 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Fri, 7 May 2010 14:58:02 -0700
Subject: Rename menu item toggle to "Display Name Demo"

---
 indra/newview/skins/default/xui/en/menu_viewer.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index 96ddbf42c0..0f319ba6dc 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -10,7 +10,7 @@
      name="Me"
      tear_off="true">
         <menu_item_check
-         label="IDEVO Display Name Prototype"
+         label="Display Name Demo"
          name="display_name_prototype">
             <menu_item_check.on_check
              function="IDEVO.CheckDisplayNames" />
-- 
cgit v1.2.3


From e0164b9669e6f267532cdfa34479962b8267c408 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Fri, 7 May 2010 15:00:17 -0700
Subject: DEV-49780 Remove Display Name from login menu, auto-enables on login

Reviewed with Callum
---
 indra/newview/skins/default/xui/en/menu_login.xml | 9 ---------
 1 file changed, 9 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/menu_login.xml b/indra/newview/skins/default/xui/en/menu_login.xml
index 3570237e92..ba74104594 100644
--- a/indra/newview/skins/default/xui/en/menu_login.xml
+++ b/indra/newview/skins/default/xui/en/menu_login.xml
@@ -12,15 +12,6 @@
      label="Me"
      tear_off="true"
      name="File">
-        <menu_item_check
-         label="IDEVO Display Name Prototype"
-         name="display_name_prototype">
-            <menu_item_check.on_check
-             function="IDEVO.CheckDisplayNames" />
-            <menu_item_check.on_click
-             function="IDEVO.ToggleDisplayNames" />
-        </menu_item_check>
-        <menu_item_separator />
         <menu_item_call
          label="Preferences"
          name="Preferences..."
-- 
cgit v1.2.3


From 2a2c51f278a5ee4dbfc21dfb25fe3eaee94082d7 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Fri, 7 May 2010 15:00:36 -0700
Subject: DEV-49780 Chat/IM history shows SLID in tooltip

Reviewed with Callum
---
 indra/newview/llchathistory.cpp | 22 ++++++++++++++++++++--
 1 file changed, 20 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index 2934dc1010..6fe23f872c 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -32,10 +32,12 @@
 
 #include "llviewerprecompiledheaders.h"
 
+#include "llchathistory.h"
+
+#include "llavatarnamecache.h"
 #include "llinstantmessage.h"
 
 #include "llimview.h"
-#include "llchathistory.h"
 #include "llcommandhandler.h"
 #include "llpanel.h"
 #include "lluictrlfactory.h"
@@ -240,7 +242,12 @@ public:
 		mAvatarID = chat.mFromID;
 		mSessionID = chat.mSessionID;
 		mSourceType = chat.mSourceType;
-		gCacheName->get(mAvatarID, false, boost::bind(&LLChatHistoryHeader::nameUpdatedCallback, this, _1, _2, _3));
+		//gCacheName->get(mAvatarID, false, boost::bind(&LLChatHistoryHeader::nameUpdatedCallback, this, _1, _2, _3));
+		if (mAvatarID.notNull())
+		{
+			LLAvatarNameCache::get(mAvatarID,
+				boost::bind(&LLChatHistoryHeader::onAvatarNameCache, this, _1, _2));
+		}
 
 		//*TODO overly defensive thing, source type should be maintained out there
 		if((chat.mFromID.isNull() && chat.mFromName.empty()) || chat.mFromName == SYSTEM_FROM)
@@ -323,6 +330,17 @@ public:
 			return;
 		mFrom = full_name;
 	}
+
+	void onAvatarNameCache(const LLUUID& agent_id, const LLAvatarName& av_name)
+	{
+		if (agent_id != mAvatarID) return;
+
+		// HACK: just update tooltip
+		setToolTip( av_name.mSLID );
+		LLTextBox* user_name = getChild<LLTextBox>("user_name");
+		user_name->setToolTip( av_name.mSLID );
+	}
+
 protected:
 	static const S32 PADDING = 20;
 
-- 
cgit v1.2.3


From 0e9faa3f0492f3ea1988377ee55c8b772d69ebed Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Fri, 7 May 2010 15:01:01 -0700
Subject: DEV-49780 Avatar picker uses new People API interface

Reviewed with Callum
---
 indra/newview/llfloateravatarpicker.cpp | 32 ++++++++++++++++++++------------
 1 file changed, 20 insertions(+), 12 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloateravatarpicker.cpp b/indra/newview/llfloateravatarpicker.cpp
index f3b14b9b3d..f7f01116b1 100644
--- a/indra/newview/llfloateravatarpicker.cpp
+++ b/indra/newview/llfloateravatarpicker.cpp
@@ -57,6 +57,8 @@
 #include "lluictrlfactory.h"
 #include "message.h"
 
+//#include "llsdserialize.h"
+
 LLFloaterAvatarPicker* LLFloaterAvatarPicker::show(select_callback_t callback,
 												   BOOL allow_multiple,
 												   BOOL closeOnSelect)
@@ -351,20 +353,26 @@ public:
 
 	LLAvatarPickerResponder(const LLUUID& id) : mQueryID(id) { }
 
-	/*virtual*/ void result(const LLSD& content)
+	/*virtual*/ void completed(U32 status, const std::string& reason, const LLSD& content)
 	{
-		LLFloaterAvatarPicker* floater =
-			LLFloaterReg::findTypedInstance<LLFloaterAvatarPicker>("avatar_picker");
-		if (floater)
+		//std::ostringstream ss;
+		//LLSDSerialize::toPrettyXML(content, ss);
+		//llinfos << ss.str() << llendl;
+
+		if (isGoodStatus(status))
 		{
-			floater->processResponse(mQueryID, content);
+			LLFloaterAvatarPicker* floater =
+				LLFloaterReg::findTypedInstance<LLFloaterAvatarPicker>("avatar_picker");
+			if (floater)
+			{
+				floater->processResponse(mQueryID, content);
+			}
+		}
+		else
+		{
+			llinfos << "avatar picker failed " << status
+				<< " reason " << reason << llendl;
 		}
-	}
-
-	/*virtual*/ void error(U32 status, const std::string& reason)
-	{
-		llinfos << "avatar picker failed " << status
-			<< " reason " << reason << llendl;
 	}
 };
 
@@ -390,7 +398,7 @@ void LLFloaterAvatarPicker::find()
 		{
 			url += "/";
 		}
-		url += "?name=";
+		url += "?names=";
 		url += LLURI::escape(text);
 		llinfos << "avatar picker " << url << llendl;
 		LLHTTPClient::get(url, new LLAvatarPickerResponder(mQueryID));
-- 
cgit v1.2.3


From 5ad8364a68d64d2d921f4cf65dbab0eb7b03fc1d Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Fri, 7 May 2010 15:01:27 -0700
Subject: DEV-49780 Better confirmation/failure messages for setting name

Reviewed with Callum
---
 indra/newview/llpanelme.cpp                        |  8 +++++++
 indra/newview/llviewerdisplayname.cpp              | 15 ++++++++-----
 .../newview/skins/default/xui/en/notifications.xml | 26 +++++++++++++---------
 3 files changed, 33 insertions(+), 16 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llpanelme.cpp b/indra/newview/llpanelme.cpp
index d4a54852cd..3e5fc7a482 100644
--- a/indra/newview/llpanelme.cpp
+++ b/indra/newview/llpanelme.cpp
@@ -311,6 +311,14 @@ void LLPanelMyProfileEdit::onCacheSetName(bool success,
 {
 	if (success)
 	{
+		// Inform the user that the change took place, but will take a while
+		// to percolate.
+		LLSD args;
+		// *TODO: get estimated percolation time from service
+		S32 timeout_hours = 72;
+		args["HOURS"] = llformat("%d", timeout_hours);
+		LLNotificationsUtil::add("SetDisplayNameSuccess", args);
+
 		// Re-fetch my name, as it may have been sanitized by the service
 		LLAvatarNameCache::get(getAvatarId(),
 			boost::bind(&LLPanelMyProfileEdit::onNameCache, this, _1, _2));
diff --git a/indra/newview/llviewerdisplayname.cpp b/indra/newview/llviewerdisplayname.cpp
index 4122a112e5..bec2687cca 100644
--- a/indra/newview/llviewerdisplayname.cpp
+++ b/indra/newview/llviewerdisplayname.cpp
@@ -180,11 +180,16 @@ class LLDisplayNameUpdate : public LLHTTPNode
 		// force name tag to update
 		LLVOAvatar::invalidateNameTag(agent_id);
 
-		LLSD args;
-		args["OLD_NAME"] = old_display_name;
-		args["SLID"] = av_name.mSLID;
-		args["NEW_NAME"] = av_name.mDisplayName;
-		LLNotificationsUtil::add("DisplayNameUpdate", args);
+		// Don't show a notification for my name, because we'll show a nicer
+		// dialog
+		if (agent_id != gAgent.getID())
+		{
+			LLSD args;
+			args["OLD_NAME"] = old_display_name;
+			args["SLID"] = av_name.mSLID;
+			args["NEW_NAME"] = av_name.mDisplayName;
+			LLNotificationsUtil::add("DisplayNameUpdate", args);
+		}
 	}
 };
 
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 47c2e496bd..6d90ec901a 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -3055,32 +3055,36 @@ Change your display name?
 
   <notification
    icon="alertmodal.tga"
-   name="SetDisplayNameFailedGeneric"
+   name="SetDisplayNameSuccess"
    type="alertmodal">
-    Sorry, we could not set your display name.  Please try again later.
-  </notification>
+Thanks for updating your name!
 
+Just like in real life, it takes a while for everyone to learn about a new name.  Please allow [HOURS] hours for your name to update in object ownership, scripts, search, etc.
+  </notification>
+  
   <notification
    icon="alertmodal.tga"
-   name="AgentDisplayNameSetLindenFailed"
+   name="SetDisplayNameFailedGeneric"
    type="alertmodal">
-Sorry, your display name cannot contain the word 'Linden'.
-
-Please try a different name.
+    Sorry, we could not set your display name.  Please try again later.
   </notification>
 
   <notification
    icon="alertmodal.tga"
-   name="SetDisplayNameFailedThrottle"
+   name="AgentDisplayNameUpdateThresholdExceeded"
    type="alertmodal">
-    Sorry, you can only change your display name once every [FREQUENCY] hour(s). 
+Sorry, you can only change your display name once every 24 hours.
+
+Please try again later.
   </notification>
 
   <notification
    icon="alertmodal.tga"
-   name="SetDisplayNameFailedUnavailable"
+   name="AgentDisplayNameSetBlocked"
    type="alertmodal">
-    Sorry, we could not set that display name.  Please try a different name.
+ Sorry, we could not set your requested name because it contains a banned word.
+ 
+ Please try a different name.
   </notification>
 
   <notification
-- 
cgit v1.2.3


From 317a27816dc68ba3e87143728bf22098e9419a0e Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Fri, 7 May 2010 15:21:27 -0700
Subject: DEV-49780 Update name tags when "Show SLIDs" pref disabled

---
 indra/newview/llfloaterpreference.cpp | 2 ++
 1 file changed, 2 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index 3487f52f35..57eafb91a4 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -225,6 +225,7 @@ void handleNameTagOptionChanged(const LLSD& newvalue)
 	{
 		gSavedSettings.setBOOL("SmallAvatarNames", TRUE);
 	}
+	LLVOAvatar::invalidateNameTags();
 }
 
 /*bool callback_skip_dialogs(const LLSD& notification, const LLSD& response, LLFloaterPreference* floater)
@@ -321,6 +322,7 @@ LLFloaterPreference::LLFloaterPreference(const LLSD& key)
 	sSkin = gSavedSettings.getString("SkinCurrent");
 	
 	gSavedSettings.getControl("AvatarNameTagMode")->getCommitSignal()->connect(boost::bind(&handleNameTagOptionChanged,  _2));
+	gSavedSettings.getControl("NameTagShowSLIDs")->getCommitSignal()->connect(boost::bind(&handleNameTagOptionChanged,  _2));
 }
 
 BOOL LLFloaterPreference::postBuild()
-- 
cgit v1.2.3


From 784656577693edd8495ee880c6cbedb58a98cfe7 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Fri, 7 May 2010 15:47:53 -0700
Subject: DEV-49780 Final name tag colors from Epic, looks nice

---
 indra/newview/skins/default/colors.xml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml
index c1ee420d78..dc1c0cc6e5 100644
--- a/indra/newview/skins/default/colors.xml
+++ b/indra/newview/skins/default/colors.xml
@@ -532,7 +532,7 @@
      reference="White" />
     <color
      name="NameTagFriend"
-     reference="EmphasisColor" />
+     value="0.447 0.784 0.663 1" />
     <color
      name="NameTagGroup"
      value="1 1 1 1" />
@@ -544,7 +544,7 @@
      reference="White" />
     <color
      name="NameTagMismatch"
-     value="0.984 0.758 0 1" />
+     value="1 0.776 0.212 1" />
     <color
      name="NameTagSLID"
      value="1 1 1 1" />
-- 
cgit v1.2.3


From 20a08ea205dfb46329058ea37659e1b3014aab14 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Fri, 7 May 2010 16:12:14 -0700
Subject: DEV-49780 Clean up Pay dialog layout

---
 indra/newview/skins/default/xui/en/floater_pay.xml | 15 ++-------------
 1 file changed, 2 insertions(+), 13 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/floater_pay.xml b/indra/newview/skins/default/xui/en/floater_pay.xml
index 8f60dd6f28..3730890e59 100644
--- a/indra/newview/skins/default/xui/en/floater_pay.xml
+++ b/indra/newview/skins/default/xui/en/floater_pay.xml
@@ -16,18 +16,7 @@
     name="payee_resident">
         Pay Resident
    </string>
-   <text
-     type="string"
-     length="1"
-     follows="left|top"
-     height="18"
-     layout="topleft"
-     left="12"
-     name="payee_label"
-     top="22"
-     width="75">
-        Pay:
-    </text>
+
     <text
      type="string"
      length="1"
@@ -37,7 +26,7 @@
      layout="topleft"
      left="10"
      name="payee_name"
-     top_pad="0" 
+     top="25" 
      width="230">
         Test Name
     </text>
-- 
cgit v1.2.3


From 1c98cce8f0aa9606db9f1ab9d455b13c4cc22866 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Fri, 7 May 2010 16:12:31 -0700
Subject: DEV-49780 Make object owner/creator wider in Object Profile

---
 indra/newview/skins/default/xui/en/sidepanel_task_info.xml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/sidepanel_task_info.xml b/indra/newview/skins/default/xui/en/sidepanel_task_info.xml
index d46783e058..0f7dc47401 100644
--- a/indra/newview/skins/default/xui/en/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_task_info.xml
@@ -167,7 +167,7 @@
      left_pad="0"
              name="Creator Name"
 		     top_delta="0"
-		     width="140">
+		     width="225">
 	        Erica Linden
 	     </text>
 	    <text
@@ -191,7 +191,7 @@
 			    left_pad="0"
 			    name="Owner Name"
 			    top_delta="0"
-			    width="140">
+			    width="225">
 			    Erica Linden
 	     </text>
 	    	    <text
-- 
cgit v1.2.3


From 629591302b0da72afdc6e5186bd65c952e90d732 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Fri, 7 May 2010 16:12:49 -0700
Subject: DEV-49780 Tweak to name lockout timing message

---
 indra/newview/skins/default/xui/en/notifications.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 6d90ec901a..3021f535c8 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -3073,7 +3073,7 @@ Just like in real life, it takes a while for everyone to learn about a new name.
    icon="alertmodal.tga"
    name="AgentDisplayNameUpdateThresholdExceeded"
    type="alertmodal">
-Sorry, you can only change your display name once every 24 hours.
+Sorry, you can only change your name once every 24 hours.
 
 Please try again later.
   </notification>
-- 
cgit v1.2.3


From bae06b4b62587bd567495e3940a323e4c635a63e Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Fri, 7 May 2010 16:47:39 -0700
Subject: DEV-49780 Moved Display Names debug toggle to Advanced Prefs

---
 indra/newview/llfloaterpreference.cpp                            | 9 +++++++++
 indra/newview/llviewermenu.cpp                                   | 4 ----
 indra/newview/skins/default/xui/en/menu_viewer.xml               | 9 ---------
 .../newview/skins/default/xui/en/panel_preferences_advanced.xml  | 8 ++++++++
 4 files changed, 17 insertions(+), 13 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index 57eafb91a4..813f9a06b7 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -81,6 +81,7 @@
 #include "llvosky.h"
 
 // linden library includes
+#include "llavatarnamecache.h"
 #include "llerror.h"
 #include "llfontgl.h"
 #include "llrect.h"
@@ -461,6 +462,10 @@ void LLFloaterPreference::apply()
 		}
 	}
 
+	LLUICtrl* display_names_check = getChild<LLUICtrl>("display_names_check");
+	bool use_display_names = display_names_check->getValue().asBoolean();
+	LLAvatarNameCache::setUseDisplayNames(use_display_names);
+
 	applyResolution();
 }
 
@@ -541,6 +546,10 @@ void LLFloaterPreference::onOpen(const LLSD& key)
 	LLPanelLogin::setAlwaysRefresh(true);
 	refresh();
 	
+	bool use_display_names = LLAvatarNameCache::useDisplayNames();
+	LLUICtrl* display_names_check = getChild<LLUICtrl>("display_names_check");
+	display_names_check->setValue( LLSD(use_display_names) );
+
 	// Make sure the current state of prefs are saved away when
 	// when the floater is opened.  That will make cancel do its
 	// job
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 9fe16b5253..0934e5df58 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -7765,10 +7765,6 @@ void initialize_menus()
 	view_listener_t::addMenu(new LLAdvancedCheckConsole(), "Advanced.CheckConsole");
 	view_listener_t::addMenu(new LLAdvancedDumpInfoToConsole(), "Advanced.DumpInfoToConsole");
 	
-	// IDEVO
-	commit.add("IDEVO.ToggleDisplayNames", boost::bind(&toggle_display_names));
-	enable.add("IDEVO.CheckDisplayNames", boost::bind(&LLAvatarNameCache::useDisplayNames));
-	
 	// Advanced > HUD Info
 	view_listener_t::addMenu(new LLAdvancedToggleHUDInfo(), "Advanced.ToggleHUDInfo");
 	view_listener_t::addMenu(new LLAdvancedCheckHUDInfo(), "Advanced.CheckHUDInfo");
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index 0f319ba6dc..a08bc16066 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -9,15 +9,6 @@
      layout="topleft"
      name="Me"
      tear_off="true">
-        <menu_item_check
-         label="Display Name Demo"
-         name="display_name_prototype">
-            <menu_item_check.on_check
-             function="IDEVO.CheckDisplayNames" />
-            <menu_item_check.on_click
-             function="IDEVO.ToggleDisplayNames" />
-		</menu_item_check>
-		<menu_item_separator />
         <menu_item_call
          label="Preferences"
          layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
index e604e401f6..8d49d3dfcd 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
@@ -271,4 +271,12 @@ Automatic position for:
           <button.commit_callback
           function="Pref.VoiceSetMiddleMouse" />
     </button>
+  <check_box
+  follows="top|left"
+  height="15"
+  label="Use Display Names (PLACEHOLDER)"
+  left="30"
+  name="display_names_check"
+  width="237"
+  tool_tip="Check to use display names in chat, IM, name tags, etc."/>
 </panel>
-- 
cgit v1.2.3


From 5aa8b5d37eb6824865d09af248aa9d9d518daeb9 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Tue, 11 May 2010 17:27:14 -0700
Subject: Clean up merge, dueling LLDateUtil refactoring

---
 indra/newview/lldateutil.cpp            | 72 +++++++++++++++++++--------------
 indra/newview/lldateutil.h              |  6 +--
 indra/newview/llfloateravatarpicker.cpp |  2 +-
 indra/newview/tests/lldateutil_test.cpp | 18 ++++-----
 4 files changed, 54 insertions(+), 44 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/lldateutil.cpp b/indra/newview/lldateutil.cpp
index 32b8b9662a..ae955b6cad 100644
--- a/indra/newview/lldateutil.cpp
+++ b/indra/newview/lldateutil.cpp
@@ -59,18 +59,22 @@ static S32 days_from_month(S32 year, S32 month)
 	}
 }
 
-std::string LLDateUtil::ageFromDate(S32 born_year,
-									S32 born_month,
-									S32 born_day,
-									const LLDate& now)
+bool LLDateUtil::dateFromPDTString(LLDate& date, const std::string& str)
 {
-	LLDate born_date;
-	born_date.fromYMDHMS(born_year, born_month, born_day);
-	F64 born_date_secs_since_epoch = born_date.secondsSinceEpoch();
-	// Correct for the fact that account creation dates are in Pacific time,
-	// == UTC - 8
-	born_date_secs_since_epoch += 8.0 * 60.0 * 60.0;
-	born_date.secondsSinceEpoch(born_date_secs_since_epoch);
+	S32 month, day, year;
+	S32 matched = sscanf(str.c_str(), "%d/%d/%d", &month, &day, &year);
+	if (matched != 3) return false;
+	date.fromYMDHMS(year, month, day);
+	F64 secs_since_epoch = date.secondsSinceEpoch();
+	// Correct for the fact that specified date is in Pacific time, == UTC - 8
+	secs_since_epoch += 8.0 * 60.0 * 60.0;
+	date.secondsSinceEpoch(secs_since_epoch);
+	return true;
+}
+
+std::string LLDateUtil::ageFromDate(const LLDate& born_date, const LLDate& now)
+{
+	S32 born_month, born_day, born_year;
 	// explode out to month/day/year again
 	born_date.split(&born_year, &born_month, &born_day);
 
@@ -154,13 +158,14 @@ std::string LLDateUtil::ageFromDate(S32 born_year,
 	return LLTrans::getString("TodayOld");
 }
 
-std::string LLDateUtil::ageFromDate(const std::string& date_string,
-									const LLDate& now)
+std::string LLDateUtil::ageFromDate(const std::string& date_string, const LLDate& now)
 {
-	S32 born_month, born_day, born_year;
-	S32 matched = sscanf(date_string.c_str(), "%d/%d/%d", &born_month, &born_day, &born_year);
-	if (matched != 3) return "???";
-	return ageFromDate(born_year, born_month, born_day, now);
+	LLDate born_date;
+
+	if (!dateFromPDTString(born_date, date_string))
+		return "???";
+
+	return ageFromDate(born_date, now);
 }
 
 std::string LLDateUtil::ageFromDate(const std::string& date_string)
@@ -168,17 +173,22 @@ std::string LLDateUtil::ageFromDate(const std::string& date_string)
 	return ageFromDate(date_string, LLDate::now());
 }
 
-std::string LLDateUtil::ageFromDateISO(const std::string& date_string,
-									   const LLDate& now)
-{
-	S32 born_month, born_day, born_year;
-	S32 matched = sscanf(date_string.c_str(), "%d-%d-%d",
-			&born_year, &born_month, &born_day);
-	if (matched != 3) return "???";
-	return ageFromDate(born_year, born_month, born_day, now);
-}
-
-std::string LLDateUtil::ageFromDateISO(const std::string& date_string)
-{
-	return ageFromDateISO(date_string, LLDate::now());
-}
+//std::string LLDateUtil::ageFromDateISO(const std::string& date_string,
+//									   const LLDate& now)
+//{
+//	S32 born_month, born_day, born_year;
+//	S32 matched = sscanf(date_string.c_str(), "%d-%d-%d",
+//			&born_year, &born_month, &born_day);
+//	if (matched != 3) return "???";
+//	date.fromYMDHMS(year, month, day);
+//	F64 secs_since_epoch = date.secondsSinceEpoch();
+//	// Correct for the fact that specified date is in Pacific time, == UTC - 8
+//	secs_since_epoch += 8.0 * 60.0 * 60.0;
+//	date.secondsSinceEpoch(secs_since_epoch);
+//	return ageFromDate(born_year, born_month, born_day, now);
+//}
+//
+//std::string LLDateUtil::ageFromDateISO(const std::string& date_string)
+//{
+//	return ageFromDateISO(date_string, LLDate::now());
+//}
diff --git a/indra/newview/lldateutil.h b/indra/newview/lldateutil.h
index a2bfa11ce7..8d41eea511 100644
--- a/indra/newview/lldateutil.h
+++ b/indra/newview/lldateutil.h
@@ -69,12 +69,12 @@ namespace LLDateUtil
 	std::string ageFromDate(const std::string& date_string);
 
 	// As above, for YYYY-MM-DD dates
-	std::string ageFromDateISO(const std::string& date_string, const LLDate& now);
+	//std::string ageFromDateISO(const std::string& date_string, const LLDate& now);
 
 	// Calls the above with LLDate::now()
-	std::string ageFromDateISO(const std::string& date_string);
+	//std::string ageFromDateISO(const std::string& date_string);
 
-	std::string ageFromDate(S32 born_year, S32 born_month, S32 born_day, const LLDate& now);
+	//std::string ageFromDate(S32 born_year, S32 born_month, S32 born_day, const LLDate& now);
 }
 
 #endif
diff --git a/indra/newview/llfloateravatarpicker.cpp b/indra/newview/llfloateravatarpicker.cpp
index bca9282cec..e0346222c0 100644
--- a/indra/newview/llfloateravatarpicker.cpp
+++ b/indra/newview/llfloateravatarpicker.cpp
@@ -604,7 +604,7 @@ void LLFloaterAvatarPicker::processResponse(const LLUUID& query_id, const LLSD&
 		S32 year, month, day;
 		account_created.split(&year, &month, &day);
 		std::string age =
-			LLDateUtil::ageFromDate(year, month, day, LLDate::now());
+			LLDateUtil::ageFromDate(account_created, LLDate::now());
 		columns[2]["column"] = "age";
 		columns[2]["value"] = age;
 		search_results->addElement(item);
diff --git a/indra/newview/tests/lldateutil_test.cpp b/indra/newview/tests/lldateutil_test.cpp
index e19983db8f..9ec24eb515 100644
--- a/indra/newview/tests/lldateutil_test.cpp
+++ b/indra/newview/tests/lldateutil_test.cpp
@@ -190,13 +190,13 @@ namespace tut
 			"3 weeks old" );
 	}
 
-	template<> template<>
-	void dateutil_object_t::test<6>()
-	{
-		set_test_name("ISO dates");
-		LLDate now(std::string("2010-01-04T12:00:00Z"));
-		ensure_equals("days",
-			LLDateUtil::ageFromDateISO("2009-12-13", now),
-			"3 weeks old" );
-	}
+	//template<> template<>
+	//void dateutil_object_t::test<6>()
+	//{
+	//	set_test_name("ISO dates");
+	//	LLDate now(std::string("2010-01-04T12:00:00Z"));
+	//	ensure_equals("days",
+	//		LLDateUtil::ageFromDateISO("2009-12-13", now),
+	//		"3 weeks old" );
+	//}
 }
-- 
cgit v1.2.3


From 49d6cf471df112eff54eba050f1aa57647c130c3 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Tue, 11 May 2010 17:27:27 -0700
Subject: Clean up merge, advanced preferences layout

---
 indra/newview/skins/default/xui/en/panel_preferences_advanced.xml | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
index 063d51e08d..2452067383 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
@@ -301,6 +301,7 @@ Automatic position for:
      halign="center"
      height="23"
      image_overlay="Refresh_Off"
+   layout="topleft" 
      tool_tip="Reset to Middle Mouse Button"
      mouse_opaque="true"
      name="set_voice_middlemouse_button"
@@ -314,7 +315,7 @@ Automatic position for:
  label="Other Devices"
  left="30"
  name="joystick_setup_button"
- top_pad="12"
+ top_pad="5"
  width="155">
     <button.commit_callback
      function="Floater.Show"
@@ -324,8 +325,10 @@ Automatic position for:
   follows="top|left"
   height="15"
   label="Use Display Names (PLACEHOLDER)"
+  layout="topleft" 
   left="30"
   name="display_names_check"
   width="237"
-  tool_tip="Check to use display names in chat, IM, name tags, etc."/>
+  tool_tip="Check to use display names in chat, IM, name tags, etc."
+  top_pad="5"/>
 </panel>
-- 
cgit v1.2.3


From fd2d23aa2c1f726dc522bbc268a92de5ee649f79 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Wed, 12 May 2010 11:58:27 -0700
Subject: Delete textures/xui files incorrectly added back during last merge

---
 .../skins/default/textures/icons/Generic_Group_Large.png | Bin 2282 -> 0 bytes
 indra/newview/skins/default/textures/locked_image.j2c    | Bin 6140 -> 0 bytes
 indra/newview/skins/default/textures/map_infohub.tga     | Bin 1068 -> 0 bytes
 3 files changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 indra/newview/skins/default/textures/icons/Generic_Group_Large.png
 delete mode 100644 indra/newview/skins/default/textures/locked_image.j2c
 delete mode 100644 indra/newview/skins/default/textures/map_infohub.tga

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/textures/icons/Generic_Group_Large.png b/indra/newview/skins/default/textures/icons/Generic_Group_Large.png
deleted file mode 100644
index 4d4f1e1bee..0000000000
Binary files a/indra/newview/skins/default/textures/icons/Generic_Group_Large.png and /dev/null differ
diff --git a/indra/newview/skins/default/textures/locked_image.j2c b/indra/newview/skins/default/textures/locked_image.j2c
deleted file mode 100644
index 9e8998d675..0000000000
Binary files a/indra/newview/skins/default/textures/locked_image.j2c and /dev/null differ
diff --git a/indra/newview/skins/default/textures/map_infohub.tga b/indra/newview/skins/default/textures/map_infohub.tga
deleted file mode 100644
index 545b8e532c..0000000000
Binary files a/indra/newview/skins/default/textures/map_infohub.tga and /dev/null differ
-- 
cgit v1.2.3


From 3bc7e63f92b29f4be44a589b661d7ff911b443cf Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Wed, 12 May 2010 13:54:49 -0700
Subject: Fix merge problem, crash on close prefs due to SmallAvatarNames

Was deleted in trunk in code I refactored extensively.
---
 indra/newview/llvoavatar.cpp                                  |  4 +---
 .../skins/default/xui/en/panel_preferences_general.xml        | 11 -----------
 2 files changed, 1 insertion(+), 14 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 8fa845e54a..9ee2c913c6 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -2886,9 +2886,7 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
 		}
 		else
 		{
-			static LLUICachedControl<bool> small_avatar_names("SmallAvatarNames");
-			const LLFontGL* font =
-				(small_avatar_names ? LLFontGL::getFontSansSerif() : LLFontGL::getFontSansSerifBig() );
+			const LLFontGL* font = LLFontGL::getFontSansSerif();
 			std::string full_name =
 				LLCacheName::buildFullName( firstname->getString(), lastname->getString() );
 			addNameTagLine(full_name, name_tag_color, LLFontGL::NORMAL, font);
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_general.xml b/indra/newview/skins/default/xui/en/panel_preferences_general.xml
index 15db679f2a..131d9312af 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_general.xml
@@ -246,17 +246,6 @@
          value="2"
          width="160" />
     </radio_group>
-    <check_box
-	 enabled_control="AvatarNameTagMode"
-     control_name="SmallAvatarNames"
-     height="16"
-     initial_value="true"
-     label="Small name tags"
-     layout="topleft"
-     left="70"
-     name="small_avatar_names_checkbox"
-	 top_pad="4"
-     width="200" />
     <check_box
 	 enabled_control="AvatarNameTagMode"
      control_name="RenderNameShowSelf"
-- 
cgit v1.2.3


From df20016e9eab26334b06d43dc39d5e688cb0487e Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Wed, 12 May 2010 13:55:16 -0700
Subject: Add link to help docs to "Thanks for updating your name" dialog

---
 indra/newview/skins/default/xui/en/notifications.xml | 2 ++
 1 file changed, 2 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index b01a071c2a..ffc58746e3 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -3095,6 +3095,8 @@ Change your display name?
 Thanks for updating your name!
 
 Just like in real life, it takes a while for everyone to learn about a new name.  Please allow [HOURS] hours for your name to update in object ownership, scripts, search, etc.
+
+See http://wiki.secondlife.com/wiki/Display_Names for details.
   </notification>
   
   <notification
-- 
cgit v1.2.3


From d36cffcb7b6b7eaed4e110dd1c92d0e397e7cfe6 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Wed, 12 May 2010 14:01:22 -0700
Subject: DEV-50013 IM inline text uses display names

Reviewed with Leyla
---
 indra/newview/llchathistory.cpp | 33 +++++++++++++--------------------
 1 file changed, 13 insertions(+), 20 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index 0fc5e92324..b3f9bb1dc1 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -242,12 +242,6 @@ public:
 		mAvatarID = chat.mFromID;
 		mSessionID = chat.mSessionID;
 		mSourceType = chat.mSourceType;
-		//gCacheName->get(mAvatarID, false, boost::bind(&LLChatHistoryHeader::nameUpdatedCallback, this, _1, _2, _3));
-		if (mAvatarID.notNull())
-		{
-			LLAvatarNameCache::get(mAvatarID,
-				boost::bind(&LLChatHistoryHeader::onAvatarNameCache, this, _1, _2));
-		}
 
 		//*TODO overly defensive thing, source type should be maintained out there
 		if((chat.mFromID.isNull() && chat.mFromName.empty()) || chat.mFromName == SYSTEM_FROM)
@@ -260,14 +254,19 @@ public:
 		userName->setReadOnlyColor(style_params.readonly_color());
 		userName->setColor(style_params.color());
 		
-		userName->setValue(chat.mFromName);
-		mFrom = chat.mFromName;
-		if (chat.mFromName.empty() || CHAT_SOURCE_SYSTEM == mSourceType)
+		if (chat.mFromName.empty()
+			|| mSourceType == CHAT_SOURCE_SYSTEM
+			|| mAvatarID.isNull())
 		{
 			mFrom = LLTrans::getString("SECOND_LIFE");
 			userName->setValue(mFrom);
 		}
-
+		else
+		{
+			// ...from a normal user, lookup the name and fill in later
+			LLAvatarNameCache::get(mAvatarID,
+				boost::bind(&LLChatHistoryHeader::onAvatarNameCache, this, _1, _2));
+		}
 
 		mMinUserNameWidth = style_params.font()->getWidth(userName->getWText().c_str()) + PADDING;
 
@@ -324,21 +323,15 @@ public:
 		LLPanel::draw();
 	}
 
-	void nameUpdatedCallback(const LLUUID& id,const std::string& full_name, bool is_group)
-	{
-		if (id != mAvatarID)
-			return;
-		mFrom = full_name;
-	}
-
 	void onAvatarNameCache(const LLUUID& agent_id, const LLAvatarName& av_name)
 	{
-		if (agent_id != mAvatarID) return;
+		mFrom = av_name.mDisplayName;
 
-		// HACK: just update tooltip
-		setToolTip( av_name.mSLID );
 		LLTextBox* user_name = getChild<LLTextBox>("user_name");
+		user_name->setValue( LLSD(av_name.mDisplayName ) );
+
 		user_name->setToolTip( av_name.mSLID );
+		setToolTip( av_name.mSLID );
 	}
 
 protected:
-- 
cgit v1.2.3


From ab79144d7937b12677d0a19145e3fc958e4c659c Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Wed, 12 May 2010 16:31:16 -0700
Subject: Remove unnecessary include (was for debugging)

---
 indra/newview/llviewerdisplayname.cpp | 1 -
 1 file changed, 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewerdisplayname.cpp b/indra/newview/llviewerdisplayname.cpp
index bec2687cca..ec80129f8a 100644
--- a/indra/newview/llviewerdisplayname.cpp
+++ b/indra/newview/llviewerdisplayname.cpp
@@ -148,7 +148,6 @@ public:
 	}
 };
 
-#include "llsdserialize.h"
 
 class LLDisplayNameUpdate : public LLHTTPNode
 {
-- 
cgit v1.2.3


From bee1a091469f8d1f2277e8d5b4cc9981e8060bde Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Wed, 12 May 2010 16:32:25 -0700
Subject: DEV-50013 IM window titles use correct name lookup method

---
 indra/newview/llavataractions.cpp | 65 +++++++++++++++++----------------------
 1 file changed, 28 insertions(+), 37 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp
index 85a087d6f6..fe6ca60d7c 100644
--- a/indra/newview/llavataractions.cpp
+++ b/indra/newview/llavataractions.cpp
@@ -187,28 +187,11 @@ void LLAvatarActions::offerTeleport(const uuid_vec_t& ids)
 	handle_lure(ids);
 }
 
-// static
-void LLAvatarActions::startIM(const LLUUID& id)
+static void on_avatar_name_cache_start_im(const LLUUID& agent_id,
+										  const LLAvatarName& av_name)
 {
-	if (id.isNull())
-		return;
-
-	std::string name;
-	if (!gCacheName->getFullName(id, name))
-	{
-		gCacheName->get(id, FALSE, boost::bind(&LLAvatarActions::startIM, id));
-		return;
-	}
-
-	// IDEVO
-	LLAvatarName av_name;
-	if (LLAvatarNameCache::useDisplayNames()
-		&& LLAvatarNameCache::get(id, &av_name))
-	{
-		name = av_name.mDisplayName + " (" + av_name.mSLID + ")";
-	}
-
-	LLUUID session_id = gIMMgr->addSession(name, IM_NOTHING_SPECIAL, id);
+	std::string name = av_name.getNameAndSLID();
+	LLUUID session_id = gIMMgr->addSession(name, IM_NOTHING_SPECIAL, agent_id);
 	if (session_id != LLUUID::null)
 	{
 		LLIMFloater::show(session_id);
@@ -216,6 +199,16 @@ void LLAvatarActions::startIM(const LLUUID& id)
 	make_ui_sound("UISndStartIM");
 }
 
+// static
+void LLAvatarActions::startIM(const LLUUID& id)
+{
+	if (id.isNull())
+		return;
+
+	LLAvatarNameCache::get(id,
+		boost::bind(&on_avatar_name_cache_start_im, _1, _2));
+}
+
 // static
 void LLAvatarActions::endIM(const LLUUID& id)
 {
@@ -229,6 +222,18 @@ void LLAvatarActions::endIM(const LLUUID& id)
 	}
 }
 
+static void on_avatar_name_cache_start_call(const LLUUID& agent_id,
+											const LLAvatarName& av_name)
+{
+	std::string name = av_name.getNameAndSLID();
+	LLUUID session_id = gIMMgr->addSession(name, IM_NOTHING_SPECIAL, agent_id, true);
+	if (session_id != LLUUID::null)
+	{
+		gIMMgr->startCall(session_id);
+	}
+	make_ui_sound("UISndStartIM");
+}
+
 // static
 void LLAvatarActions::startCall(const LLUUID& id)
 {
@@ -236,22 +241,8 @@ void LLAvatarActions::startCall(const LLUUID& id)
 	{
 		return;
 	}
-
-	std::string name;
-	gCacheName->getFullName(id, name);
-	// IDEVO
-	LLAvatarName av_name;
-	if (LLAvatarNameCache::useDisplayNames()
-		&& LLAvatarNameCache::get(id, &av_name))
-	{
-		name = av_name.mDisplayName + " (" + av_name.mSLID + ")";
-	}
-	LLUUID session_id = gIMMgr->addSession(name, IM_NOTHING_SPECIAL, id, true);
-	if (session_id != LLUUID::null)
-	{
-		gIMMgr->startCall(session_id);
-	}
-	make_ui_sound("UISndStartIM");
+	LLAvatarNameCache::get(id,
+		boost::bind(&on_avatar_name_cache_start_call, _1, _2));
 }
 
 // static
-- 
cgit v1.2.3


From 6871747f11f300fcf90edba2224c91a3645617cc Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Wed, 12 May 2010 16:32:54 -0700
Subject: DEV-50013 Display names limited to 31 chars (not bytes) in viewer UI

Reviewed with Leyla
---
 indra/newview/llpanelme.cpp                          | 15 +++++++++++++--
 indra/newview/skins/default/xui/en/notifications.xml | 11 ++++++++++-
 2 files changed, 23 insertions(+), 3 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llpanelme.cpp b/indra/newview/llpanelme.cpp
index 483741e643..f38c8859ef 100644
--- a/indra/newview/llpanelme.cpp
+++ b/indra/newview/llpanelme.cpp
@@ -352,8 +352,19 @@ void LLPanelMyProfileEdit::onDialogSetName(const LLSD& notification, const LLSD&
 		LLUUID agent_id = notification["payload"]["agent_id"];
 		if (agent_id.isNull()) return;
 
-		std::string display_name = response["display_name"].asString();
-		LLViewerDisplayName::set(display_name,
+		std::string display_name_utf8 = response["display_name"].asString();
+
+		const U32 DISPLAY_NAME_MAX_LENGTH = 31; // characters, not bytes
+		LLWString display_name_wstr = utf8string_to_wstring(display_name_utf8);
+		if (display_name_wstr.size() > DISPLAY_NAME_MAX_LENGTH)
+		{
+			LLSD args;
+			args["LENGTH"] = llformat("%d", DISPLAY_NAME_MAX_LENGTH);
+			LLNotificationsUtil::add("SetDisplayNameFailedLength", args);
+			return;
+		}
+
+		LLViewerDisplayName::set(display_name_utf8,
 			boost::bind(&LLPanelMyProfileEdit::onCacheSetName, this,
 				_1, _2, _3));
 	}
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index ffc58746e3..c4ddae1a12 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -3098,7 +3098,16 @@ Just like in real life, it takes a while for everyone to learn about a new name.
 
 See http://wiki.secondlife.com/wiki/Display_Names for details.
   </notification>
-  
+
+  <notification
+   icon="alertmodal.tga"
+   name="SetDisplayNameFailedLength"
+   type="alertmodal">
+Sorry, that name is too long.  Display names can have a maximum of [LENGTH] characters.
+
+Please try a shorter name.
+  </notification>
+
   <notification
    icon="alertmodal.tga"
    name="SetDisplayNameFailedGeneric"
-- 
cgit v1.2.3


From bece97b1e11552a3feda74ffc24a5aac15728227 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Wed, 12 May 2010 16:33:21 -0700
Subject: DEV-50031 Moved buttons in IM ctrl panel to top, looks cleaner

Reviewed with Leyla
---
 .../default/xui/en/panel_im_control_panel.xml      | 24 +++++++++++-----------
 1 file changed, 12 insertions(+), 12 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
index 33a5e01e4c..a36f078f4f 100644
--- a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
+++ b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
@@ -23,26 +23,16 @@
      orientation="vertical"
      top_pad="5"
      width="114">
-        <layout_panel
-         mouse_opaque="false"
-         auto_resize="true"
-         follows="top|left"
-         height="0"
-         layout="topleft"
-         left="2"
-         min_height="0"
-         width="109"
-         top="0"
-         name="spacer"
-         user_resize="false" />
         <layout_panel
          auto_resize="false"
          follows="top|left|right"
          height="20"
          layout="topleft"
+         left="2" 
          min_height="20"
          width="109"
          name="view_profile_btn_panel"
+         top="0" 
          user_resize="false">
             <button
              follows="left|top|right"
@@ -171,5 +161,15 @@
              name="voice_ctrls_btn"
              width="109" />
         </layout_panel>
+      <layout_panel
+       mouse_opaque="false"
+       auto_resize="true"
+       follows="top|left"
+       height="0"
+       layout="topleft"
+       min_height="0"
+       width="109"
+       name="spacer"
+       user_resize="false" />
     </layout_stack>
 </panel>
-- 
cgit v1.2.3


From c3ccbecfdae1df3738775d1165cb3361b4f06d90 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Wed, 12 May 2010 16:46:26 -0700
Subject: DEV-50013 Add "Turning off Display Names" preference reviewed by
 James

---
 indra/newview/app_settings/settings.xml                | 13 ++++++++++++-
 indra/newview/llfloaterpreference.cpp                  | 18 +++++++++---------
 indra/newview/llstartup.cpp                            |  1 +
 .../default/xui/en/panel_preferences_advanced.xml      |  6 ++++--
 4 files changed, 26 insertions(+), 12 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index aeba46a92d..c76772f18d 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -24,7 +24,7 @@
       <key>Value</key>
       <integer>0</integer>
     </map>
-    <key>AgentPause</key>
+     <key>AgentPause</key>
     <map>
       <key>Comment</key>
       <string>Ask the simulator to stop updating the agent while enabled</string>
@@ -10218,6 +10218,17 @@
       <key>Value</key>
       <integer>0</integer>
     </map>
+  <key>UseDisplayNames</key>
+  <map>
+    <key>Comment</key>
+    <string>Use new, changeable, unicode names</string>
+    <key>Persist</key>
+    <integer>1</integer>
+    <key>Type</key>
+    <string>Boolean</string>
+    <key>Value</key>
+    <integer>1</integer>
+  </map>
     <key>UseEnergy</key>
     <map>
       <key>Comment</key>
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index 45ff38421f..3281e15e2c 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -186,6 +186,7 @@ void LLVoiceSetKeyDialog::onCancel(void* user_data)
 // a static member and update all our static callbacks
 
 void handleNameTagOptionChanged(const LLSD& newvalue);	
+void handleDisplayNamesOptionChanged(const LLSD& newvalue);	
 bool callback_clear_browser_cache(const LLSD& notification, const LLSD& response);
 
 //bool callback_skip_dialogs(const LLSD& notification, const LLSD& response, LLFloaterPreference* floater);
@@ -226,6 +227,12 @@ void handleNameTagOptionChanged(const LLSD& newvalue)
 	LLVOAvatar::invalidateNameTags();
 }
 
+void handleDisplayNamesOptionChanged(const LLSD& newvalue)
+{
+	LLAvatarNameCache::setUseDisplayNames(newvalue.asBoolean());
+}
+
+
 /*bool callback_skip_dialogs(const LLSD& notification, const LLSD& response, LLFloaterPreference* floater)
 {
 	S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
@@ -319,7 +326,8 @@ LLFloaterPreference::LLFloaterPreference(const LLSD& key)
 
 	sSkin = gSavedSettings.getString("SkinCurrent");
 	
-	gSavedSettings.getControl("NameTagShowSLIDs")->getCommitSignal()->connect(boost::bind(&handleNameTagOptionChanged,  _2));
+	gSavedSettings.getControl("NameTagShowSLIDs")->getCommitSignal()->connect(boost::bind(&handleNameTagOptionChanged,  _2));	
+	gSavedSettings.getControl("UseDisplayNames")->getCommitSignal()->connect(boost::bind(&handleDisplayNamesOptionChanged,  _2));
 }
 
 BOOL LLFloaterPreference::postBuild()
@@ -456,10 +464,6 @@ void LLFloaterPreference::apply()
 		}
 	}
 
-	LLUICtrl* display_names_check = getChild<LLUICtrl>("display_names_check");
-	bool use_display_names = display_names_check->getValue().asBoolean();
-	LLAvatarNameCache::setUseDisplayNames(use_display_names);
-
 	applyResolution();
 }
 
@@ -542,10 +546,6 @@ void LLFloaterPreference::onOpen(const LLSD& key)
 	LLPanelLogin::setAlwaysRefresh(true);
 	refresh();
 	
-	bool use_display_names = LLAvatarNameCache::useDisplayNames();
-	LLUICtrl* display_names_check = getChild<LLUICtrl>("display_names_check");
-	display_names_check->setValue( LLSD(use_display_names) );
-
 	// Make sure the current state of prefs are saved away when
 	// when the floater is opened.  That will make cancel do its
 	// job
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 9867372001..8f53463269 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -2783,6 +2783,7 @@ void LLStartUp::initNameCache()
 	// Start cache in not-running state until we figure out if we have
 	// capabilities for display name lookup
 	LLAvatarNameCache::initClass(false);
+	LLAvatarNameCache::setUseDisplayNames(gSavedSettings.getBOOL("UseDisplayNames"));
 }
 
 void LLStartUp::cleanupNameCache()
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
index 2452067383..e3ee14771c 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
@@ -125,7 +125,8 @@ Automatic position for:
      left_pad="30"
      name="first_person_avatar_visible"
      width="256" />
-    <check_box
+   
+<check_box
      control_name="ArrowKeysAlwaysMove"
      follows="left|top"
      height="20"
@@ -322,6 +323,7 @@ Automatic position for:
      parameter="pref_joystick" />
   </button>
   <check_box
+  control_name="UseDisplayNames" 
   follows="top|left"
   height="15"
   label="Use Display Names (PLACEHOLDER)"
@@ -330,5 +332,5 @@ Automatic position for:
   name="display_names_check"
   width="237"
   tool_tip="Check to use display names in chat, IM, name tags, etc."
-  top_pad="5"/>
+  top_pad="5"/> 
 </panel>
-- 
cgit v1.2.3


From 14f423a23c38bf554e9633752074fbcabd92599c Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Thu, 13 May 2010 12:18:10 -0700
Subject: DEV-50013 General "name list" support for display name +/- SLID

Added lookups via new name cache system.  Added optional short_name
parameter to show only display names in the list (don't need this yet).
Removed top-level global refresh of all name list controls when legacy
name cache receives names -- it was inefficient and we don't need it
anymore.  Reviewed with Leyla.
---
 indra/newview/llnamelistctrl.cpp                   | 51 ++++++++++++----------
 indra/newview/llnamelistctrl.h                     |  8 ++--
 indra/newview/llstartup.cpp                        |  1 -
 .../skins/default/xui/en/panel_group_general.xml   |  1 +
 .../skins/default/xui/en/panel_group_roles.xml     |  1 +
 5 files changed, 33 insertions(+), 29 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llnamelistctrl.cpp b/indra/newview/llnamelistctrl.cpp
index c5706e8345..2a7e84256e 100644
--- a/indra/newview/llnamelistctrl.cpp
+++ b/indra/newview/llnamelistctrl.cpp
@@ -36,6 +36,7 @@
 
 #include <boost/tokenizer.hpp>
 
+#include "llavatarnamecache.h"
 #include "llcachename.h"
 #include "llfloaterreg.h"
 #include "llinventory.h"
@@ -58,7 +59,8 @@ void LLNameListCtrl::NameTypeNames::declareValues()
 
 LLNameListCtrl::Params::Params()
 :	name_column(""),
-	allow_calling_card_drop("allow_calling_card_drop", false)
+	allow_calling_card_drop("allow_calling_card_drop", false),
+	short_names("short_names", false)
 {
 	name = "name_list";
 }
@@ -67,7 +69,8 @@ LLNameListCtrl::LLNameListCtrl(const LLNameListCtrl::Params& p)
 :	LLScrollListCtrl(p),
 	mNameColumnIndex(p.name_column.column_index),
 	mNameColumn(p.name_column.column_name),
-	mAllowCallingCardDrop(p.allow_calling_card_drop)
+	mAllowCallingCardDrop(p.allow_calling_card_drop),
+	mShortNames(p.short_names)
 {}
 
 // public
@@ -297,10 +300,20 @@ LLScrollListItem* LLNameListCtrl::addNameItemRow(
 		break;
 	case INDIVIDUAL:
 		{
-			std::string name;
-			if (gCacheName->getFullName(id, name))
+			LLAvatarName av_name;
+			if (LLAvatarNameCache::get(id, &av_name))
 			{
-				fullname = name;
+				if (mShortNames)
+					fullname = av_name.mDisplayName;
+				else
+					fullname = av_name.getNameAndSLID();
+			}
+			else
+			{
+				// ...schedule a callback
+				LLAvatarNameCache::get(id,
+					boost::bind(&LLNameListCtrl::onAvatarNameCache,
+						this, _1, _2));
 			}
 			break;
 		}
@@ -355,23 +368,25 @@ void LLNameListCtrl::removeNameItem(const LLUUID& agent_id)
 	}
 }
 
-// public
-void LLNameListCtrl::refresh(const LLUUID& id, const std::string& full_name, bool is_group)
+void LLNameListCtrl::onAvatarNameCache(const LLUUID& agent_id,
+									   const LLAvatarName& av_name)
 {
-	//llinfos << "LLNameListCtrl::refresh " << id << " '" << first << " "
-	//	<< last << "'" << llendl;
+	std::string name;
+	if (mShortNames)
+		name = av_name.mDisplayName;
+	else
+		name = av_name.getNameAndSLID();
 
-	// TODO: scan items for that ID, fix if necessary
 	item_list::iterator iter;
 	for (iter = getItemList().begin(); iter != getItemList().end(); iter++)
 	{
 		LLScrollListItem* item = *iter;
-		if (item->getUUID() == id)
+		if (item->getUUID() == agent_id)
 		{
 			LLScrollListCell* cell = item->getColumn(mNameColumnIndex);
 			if (cell)
 			{
-				cell->setValue(full_name);
+				cell->setValue(name);
 			}
 		}
 	}
@@ -380,18 +395,6 @@ void LLNameListCtrl::refresh(const LLUUID& id, const std::string& full_name, boo
 }
 
 
-// static
-void LLNameListCtrl::refreshAll(const LLUUID& id, const std::string& full_name, bool is_group)
-{
-	LLInstanceTrackerScopedGuard guard;
-	LLInstanceTracker<LLNameListCtrl>::instance_iter it;
-	for (it = guard.beginInstances(); it != guard.endInstances(); ++it)
-	{
-		LLNameListCtrl& ctrl = *it;
-		ctrl.refresh(id, full_name, is_group);
-	}
-}
-
 void LLNameListCtrl::updateColumns()
 {
 	LLScrollListCtrl::updateColumns();
diff --git a/indra/newview/llnamelistctrl.h b/indra/newview/llnamelistctrl.h
index 6d61214712..54237f4305 100644
--- a/indra/newview/llnamelistctrl.h
+++ b/indra/newview/llnamelistctrl.h
@@ -37,6 +37,7 @@
 
 #include "llscrolllistctrl.h"
 
+class LLAvatarName;
 
 class LLNameListCtrl
 :	public LLScrollListCtrl, protected LLInstanceTracker<LLNameListCtrl>
@@ -80,6 +81,7 @@ public:
 	{
 		Optional<NameColumn>	name_column;
 		Optional<bool>	allow_calling_card_drop;
+		Optional<bool>			short_names;
 		Params();
 	};
 
@@ -105,10 +107,6 @@ public:
 
 	void removeNameItem(const LLUUID& agent_id);
 
-	void refresh(const LLUUID& id, const std::string& full_name, bool is_group);
-
-	static void refreshAll(const LLUUID& id, const std::string& full_name, bool is_group);
-
 	// LLView interface
 	/*virtual*/ BOOL	handleDragAndDrop(S32 x, S32 y, MASK mask,
 									  BOOL drop, EDragAndDropType cargo_type, void *cargo_data,
@@ -123,11 +121,13 @@ public:
 	/*virtual*/ void	mouseOverHighlightNthItem( S32 index );
 private:
 	void showInspector(const LLUUID& avatar_id, bool is_group);
+	void onAvatarNameCache(const LLUUID& agent_id, const LLAvatarName& av_name);
 
 private:
 	S32    			mNameColumnIndex;
 	std::string		mNameColumn;
 	BOOL			mAllowCallingCardDrop;
+	bool			mShortNames;  // display name only, no SLID
 };
 
 /**
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 8f53463269..689275421d 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -269,7 +269,6 @@ void transition_back_to_login_panel(const std::string& emsg);
 
 void callback_cache_name(const LLUUID& id, const std::string& full_name, bool is_group)
 {
-	LLNameListCtrl::refreshAll(id, full_name, is_group);
 	LLNameBox::refreshAll(id, full_name, is_group);
 	LLNameEditor::refreshAll(id, full_name, is_group);
 	
diff --git a/indra/newview/skins/default/xui/en/panel_group_general.xml b/indra/newview/skins/default/xui/en/panel_group_general.xml
index 9341d433e8..d7a4094d50 100644
--- a/indra/newview/skins/default/xui/en/panel_group_general.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_general.xml
@@ -112,6 +112,7 @@ Hover your mouse over the options for more help.
      layout="topleft"
      left="0"
      name="visible_members"
+     short_names="false" 
      top_pad="2">
         <name_list.columns
          label="Member"
diff --git a/indra/newview/skins/default/xui/en/panel_group_roles.xml b/indra/newview/skins/default/xui/en/panel_group_roles.xml
index 0eb5c47f85..0255cf80a1 100644
--- a/indra/newview/skins/default/xui/en/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_roles.xml
@@ -81,6 +81,7 @@ clicking on their names.
              right="-1"
              multi_select="true"
              name="member_list"
+             short_names="false" 
              top_pad="5">
                 <name_list.columns
                  label="Member"
-- 
cgit v1.2.3


From 894261e4e4aea8a15bef33fdf34807812a1c73bb Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Thu, 13 May 2010 16:30:15 -0700
Subject: Fix build errors introduced in last merge

---
 indra/newview/llavataractions.cpp     |  2 +-
 indra/newview/llfloaterland.cpp       |  7 +++----
 indra/newview/llfloaterpay.cpp        |  4 ++--
 indra/newview/llpanellandmarkinfo.cpp |  6 +++---
 indra/newview/llpanellogin.cpp        | 18 +++++++++++++++---
 indra/newview/llpanelplaceprofile.cpp |  2 +-
 indra/newview/llviewermessage.cpp     |  4 ++--
 indra/newview/llvoicevivox.cpp        |  6 ++----
 indra/newview/llvoicevivox.h          |  2 +-
 9 files changed, 30 insertions(+), 21 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp
index e1e9e03889..708ef1895e 100644
--- a/indra/newview/llavataractions.cpp
+++ b/indra/newview/llavataractions.cpp
@@ -79,7 +79,7 @@ void LLAvatarActions::requestFriendshipDialog(const LLUUID& id, const std::strin
 	}
 
 	LLSD args;
-	args["NAME"] = LLSLURL::buildCommand("agent", id, "inspect");
+	args["NAME"] = LLSLURL("agent", id, "inspect").getSLURLString();
 	LLSD payload;
 	payload["id"] = id;
 	payload["name"] = name;
diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp
index b80280d74d..b008189b0d 100644
--- a/indra/newview/llfloaterland.cpp
+++ b/indra/newview/llfloaterland.cpp
@@ -825,9 +825,9 @@ void LLPanelLandGeneral::refreshNames()
 		const LLUUID& auth_buyer_id = parcel->getAuthorizedBuyerID();
 		if(auth_buyer_id.notNull())
 		{
-		  std::string name;
-		  name = LLSLURL("agent", auth_buyer_id, "inspect").getSLURLString();
-		  mSaleInfoForSale2->setTextArg("[BUYER]", name);
+			std::string name;
+			name = LLSLURL("agent", auth_buyer_id, "inspect").getSLURLString();
+			mSaleInfoForSale2->setTextArg("[BUYER]", name);
 		}
 		else
 		{
@@ -835,7 +835,6 @@ void LLPanelLandGeneral::refreshNames()
 		}
 	}
 }
-}
 
 
 // virtual
diff --git a/indra/newview/llfloaterpay.cpp b/indra/newview/llfloaterpay.cpp
index 7dbcc9555c..7b596e9ba3 100644
--- a/indra/newview/llfloaterpay.cpp
+++ b/indra/newview/llfloaterpay.cpp
@@ -430,12 +430,12 @@ void LLFloaterPay::finishPayUI(const LLUUID& target_id, BOOL is_group)
 	if (is_group)
 	{
 		setTitle(getString("payee_group"));
-		slurl = LLSLURL::buildCommand("group", target_id, "inspect");
+		slurl = LLSLURL("group", target_id, "inspect").getSLURLString();
 	}
 	else
 	{
 		setTitle(getString("payee_resident"));
-		slurl = LLSLURL::buildCommand("agent", target_id, "inspect");
+		slurl = LLSLURL("agent", target_id, "inspect").getSLURLString();
 	}
 	childSetText("payee_name", slurl);
 	
diff --git a/indra/newview/llpanellandmarkinfo.cpp b/indra/newview/llpanellandmarkinfo.cpp
index c03bc82904..4c2ff471e8 100644
--- a/indra/newview/llpanellandmarkinfo.cpp
+++ b/indra/newview/llpanellandmarkinfo.cpp
@@ -235,7 +235,7 @@ void LLPanelLandmarkInfo::displayItemInfo(const LLInventoryItem* pItem)
 		// IDEVO
 		LLUUID creator_id = pItem->getCreatorUUID();
 		std::string name =
-			LLSLURL::buildCommand("agent", creator_id, "inspect");
+			LLSLURL("agent", creator_id, "inspect").getSLURLString();
 		//if (!gCacheName->getFullName(creator_id, name))
 		//{
 		//	gCacheName->get(creator_id, FALSE,
@@ -263,7 +263,7 @@ void LLPanelLandmarkInfo::displayItemInfo(const LLInventoryItem* pItem)
 			//	gCacheName->get(group_id, TRUE,
 			//					boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mOwner, _2, _3));
 			//}
-			name = LLSLURL::buildCommand("group", group_id, "inspect");
+			name = LLSLURL("group", group_id, "inspect").getSLURLString();
 		}
 		else
 		{
@@ -274,7 +274,7 @@ void LLPanelLandmarkInfo::displayItemInfo(const LLInventoryItem* pItem)
 			//	gCacheName->get(owner_id, FALSE,
 			//					boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mOwner, _2, _3));
 			//}
-			name = LLSLURL::buildCommand("agent", owner_id, "inspect");
+			name = LLSLURL("agent", owner_id, "inspect").getSLURLString();
 		}
 		mOwner->setText(name);
 	}
diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp
index 23d05183b4..d313a95546 100644
--- a/indra/newview/llpanellogin.cpp
+++ b/indra/newview/llpanellogin.cpp
@@ -600,7 +600,8 @@ void LLPanelLogin::getFields(LLPointer<LLCredential>& credential,
 	LL_INFOS2("Credentials", "Authentication") << "retrieving username:" << username << LL_ENDL;
 	// determine if the username is a first/last form or not.
 	size_t separator_index = username.find_first_of(' ');
-	if (separator_index == username.npos)
+	if (separator_index == username.npos
+		&& !LLGridManager::getInstance()->isSystemGrid())
 	{
 		LL_INFOS2("Credentials", "Authentication") << "account: " << username << LL_ENDL;
 		// single username, so this is a 'clear' identifier
@@ -618,8 +619,19 @@ void LLPanelLogin::getFields(LLPointer<LLCredential>& credential,
 	else
 	{
 		std::string first = username.substr(0, separator_index);
-		std::string last = username.substr(separator_index, username.npos);
-		LLStringUtil::trim(last);
+		std::string last;
+		if (separator_index != username.npos)
+		{
+			last = username.substr(separator_index, username.npos);
+			LLStringUtil::trim(last);
+		}
+		else
+		{
+			// ...on Linden grids, single username users as considered to have
+			// last name "Resident"
+			// *TODO: Make login.cgi support "account_name" like above
+			last = "Resident";
+		}
 		
 		if (last.find_first_of(' ') == last.npos)
 		{
diff --git a/indra/newview/llpanelplaceprofile.cpp b/indra/newview/llpanelplaceprofile.cpp
index 41ca237b1e..52a46a45b6 100644
--- a/indra/newview/llpanelplaceprofile.cpp
+++ b/indra/newview/llpanelplaceprofile.cpp
@@ -448,7 +448,7 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,
 			//gCacheName->get(parcel->getOwnerID(), FALSE,
 			//				boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mParcelOwner, _2, _3));
 			std::string parcel_owner =
-				LLSLURL::buildCommand("agent", parcel->getOwnerID(), "inspect");
+				LLSLURL("agent", parcel->getOwnerID(), "inspect").getSLURLString();
 			mParcelOwner->setText(parcel_owner);
 			gCacheName->get(region->getOwner(), false,
 							boost::bind(&LLPanelPlaceInfo::onNameCache, mRegionOwnerText, _2));
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index e5fdda62d5..11ab6e7de4 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -5008,11 +5008,11 @@ static void process_money_balance_reply_extended(LLMessageSystem* msg)
 
 	const char* source_type = (is_source_group ? "group" : "agent");
 	std::string source_slurl =
-		LLSLURL::buildCommand( source_type, source_id, "about");
+		LLSLURL( source_type, source_id, "about").getSLURLString();
 	
 	const char* dest_type = (is_dest_group ? "group" : "agent");
 	std::string dest_slurl =
-		LLSLURL::buildCommand( dest_type, dest_id, "about");
+		LLSLURL( dest_type, dest_id, "about").getSLURLString();
 
 	//
 	//
diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp
index bcb1a70efb..a457bd1fe6 100644
--- a/indra/newview/llvoicevivox.cpp
+++ b/indra/newview/llvoicevivox.cpp
@@ -6181,11 +6181,9 @@ void LLVivoxVoiceClient::lookupName(const LLUUID &id)
 }
 
 //static
-void LLVivoxVoiceClient::onAvatarNameLookup(const LLUUID& id, const std::string& first, const std::string& last, BOOL is_group)
+void LLVivoxVoiceClient::onAvatarNameLookup(const LLUUID& id, const std::string& name, BOOL is_group)
 {
-		std::string name = llformat("%s %s", first.c_str(), last.c_str());
-		LLVivoxVoiceClient::getInstance()->avatarNameResolved(id, name);
-	
+		LLVivoxVoiceClient::getInstance()->avatarNameResolved(id, name);	
 }
 
 void LLVivoxVoiceClient::avatarNameResolved(const LLUUID &id, const std::string &name)
diff --git a/indra/newview/llvoicevivox.h b/indra/newview/llvoicevivox.h
index 59fec8b954..e6dd0e9823 100644
--- a/indra/newview/llvoicevivox.h
+++ b/indra/newview/llvoicevivox.h
@@ -619,7 +619,7 @@ protected:
 	void leaveAudioSession();
 	
 	void lookupName(const LLUUID &id);
-	static void onAvatarNameLookup(const LLUUID& id, const std::string& first, const std::string& last, BOOL is_group);
+	static void onAvatarNameLookup(const LLUUID& id, const std::string& name, BOOL is_group);
 	void avatarNameResolved(const LLUUID &id, const std::string &name);
 		
 private:
-- 
cgit v1.2.3


From 669953f6950000821c33e77d4c29ef0c905667f9 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Thu, 13 May 2010 17:07:21 -0700
Subject: DEV-50013 Call floater uses your display name

---
 indra/newview/llcallfloater.cpp | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llcallfloater.cpp b/indra/newview/llcallfloater.cpp
index dd99c6564c..44fb4e9e72 100644
--- a/indra/newview/llcallfloater.cpp
+++ b/indra/newview/llcallfloater.cpp
@@ -33,13 +33,14 @@
 
 #include "llviewerprecompiledheaders.h"
 
+#include "llcallfloater.h"
+
 #include "llnotificationsutil.h"
 #include "lltrans.h"
 
-#include "llcallfloater.h"
-
 #include "llagent.h"
 #include "llagentdata.h" // for gAgentID
+#include "llavatarnamecache.h"
 #include "llavatariconctrl.h"
 #include "llavatarlist.h"
 #include "llbottomtray.h"
@@ -422,9 +423,10 @@ void LLCallFloater::initAgentData()
 	{
 		mAgentPanel->childSetValue("user_icon", gAgentID);
 
-		std::string name;
-		gCacheName->getFullName(gAgentID, name);
-		mAgentPanel->childSetValue("user_text", name);
+		// Just use display name, because it's you
+		LLAvatarName av_name;
+		LLAvatarNameCache::get( gAgentID, &av_name );
+		mAgentPanel->childSetValue("user_text", av_name.mDisplayName);
 
 		mSpeakingIndicator = mAgentPanel->getChild<LLOutputMonitorCtrl>("speaking_indicator");
 		mSpeakingIndicator->setSpeakerId(gAgentID);
@@ -445,7 +447,10 @@ void LLCallFloater::setModeratorMutedVoice(bool moderator_muted)
 void LLCallFloater::updateAgentModeratorState()
 {
 	std::string name;
-	gCacheName->getFullName(gAgentID, name);
+	// Just use display name, because it's you
+	LLAvatarName av_name;
+	LLAvatarNameCache::get(gAgentID, &av_name);
+	name = av_name.mDisplayName;
 
 	if(gAgent.isInGroup(mSpeakerManager->getSessionID()))
 	{
-- 
cgit v1.2.3


From 2af4875309450fa3d3e266426ada12330489a8c9 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Thu, 13 May 2010 17:26:06 -0700
Subject: DEV-50013 Friends in sidebar now correctly displaying names reviewed
 by James

---
 indra/newview/llavatarlist.cpp     | 14 ++++++++++----
 indra/newview/llavatarlistitem.cpp |  8 +++++---
 indra/newview/llavatarlistitem.h   |  3 ++-
 3 files changed, 17 insertions(+), 8 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llavatarlist.cpp b/indra/newview/llavatarlist.cpp
index dfb213716c..8801903df7 100644
--- a/indra/newview/llavatarlist.cpp
+++ b/indra/newview/llavatarlist.cpp
@@ -41,6 +41,7 @@
 
 // newview
 #include "llavatariconctrl.h"
+#include "llavatarnamecache.h"
 #include "llcallingcard.h" // for LLAvatarTracker
 #include "llcachename.h"
 #include "llrecentpeople.h"
@@ -239,12 +240,15 @@ void LLAvatarList::refresh()
 
 	// Handle added items.
 	unsigned nadded = 0;
+	const std::string waiting_str = LLTrans::getString("AvatarNameWaiting");
+
 	for (uuid_vec_t::const_iterator it=added.begin(); it != added.end(); it++)
 	{
-		std::string name;
 		const LLUUID& buddy_id = *it;
-		have_names &= (bool)gCacheName->getFullName(buddy_id, name);
-		if (!have_filter || findInsensitive(name, mNameFilter))
+		LLAvatarName av_name;
+		have_names &= LLAvatarNameCache::get(buddy_id, &av_name);
+
+		if (!have_filter || findInsensitive(av_name.mDisplayName, mNameFilter))
 		{
 			if (nadded >= ADD_LIMIT)
 			{
@@ -253,7 +257,9 @@ void LLAvatarList::refresh()
 			}
 			else
 			{
-				addNewItem(buddy_id, name, LLAvatarTracker::instance().isBuddyOnline(buddy_id));
+				addNewItem(buddy_id, 
+					       av_name.mDisplayName.empty() ? waiting_str : av_name.mDisplayName, 
+						   LLAvatarTracker::instance().isBuddyOnline(buddy_id));
 				modified = true;
 				nadded++;
 			}
diff --git a/indra/newview/llavatarlistitem.cpp b/indra/newview/llavatarlistitem.cpp
index fc5453c2dd..fcfc05af02 100644
--- a/indra/newview/llavatarlistitem.cpp
+++ b/indra/newview/llavatarlistitem.cpp
@@ -38,6 +38,7 @@
 
 #include "llfloaterreg.h"
 #include "llagent.h"
+#include "llavatarnamecache.h"
 #include "lloutputmonitorctrl.h"
 #include "llavatariconctrl.h"
 #include "lltextutil.h"
@@ -229,7 +230,8 @@ void LLAvatarListItem::setAvatarId(const LLUUID& id, const LLUUID& session_id, b
 		mAvatarIcon->setValue(id);
 
 		// Set avatar name.
-		gCacheName->get(id, FALSE, boost::bind(&LLAvatarListItem::onNameCache, this, _2));
+		LLAvatarNameCache::get(id,
+			boost::bind(&LLAvatarListItem::onAvatarNameCache, this, _2));
 	}
 }
 
@@ -335,9 +337,9 @@ void LLAvatarListItem::setNameInternal(const std::string& name, const std::strin
 	mAvatarName->setToolTip(name);
 }
 
-void LLAvatarListItem::onNameCache(const std::string& fullname)
+void LLAvatarListItem::onAvatarNameCache(const LLAvatarName& av_name)
 {
-	setName(fullname);
+	setName(av_name.mDisplayName);
 
 	//requesting the list to resort
 	notifyParent(LLSD().with("sort", LLSD()));
diff --git a/indra/newview/llavatarlistitem.h b/indra/newview/llavatarlistitem.h
index 1e3b67b094..bad8aa9d5c 100644
--- a/indra/newview/llavatarlistitem.h
+++ b/indra/newview/llavatarlistitem.h
@@ -42,6 +42,7 @@
 #include "llcallingcard.h" // for LLFriendObserver
 
 class LLAvatarIconCtrl;
+class LLAvatarName;
 
 class LLAvatarListItem : public LLPanel, public LLFriendObserver
 {
@@ -151,7 +152,7 @@ private:
 	} EAvatarListItemChildIndex;
 
 	void setNameInternal(const std::string& name, const std::string& highlight);
-	void onNameCache(const std::string& fullname);
+	void onAvatarNameCache(const LLAvatarName& av_name);
 
 	std::string formatSeconds(U32 secs);
 
-- 
cgit v1.2.3


From 73a53aa64328f1b48fa09286120609b7297985e3 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Mon, 17 May 2010 09:13:46 -0700
Subject: DEV-50013 Rename "SLID" to "Username" at Product's request

---
 indra/newview/app_settings/settings.xml                          | 2 +-
 indra/newview/skins/default/xui/en/panel_login.xml               | 2 +-
 indra/newview/skins/default/xui/en/panel_preferences_general.xml | 4 ++--
 3 files changed, 4 insertions(+), 4 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index f8ad1c2dac..6a68f72bb5 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -7340,7 +7340,7 @@
     <key>NameTagShowSLIDs</key>
     <map>
       <key>Comment</key>
-      <string>Show Second Life IDs in name labels</string>
+      <string>Show usernames in avatar name tags</string>
       <key>Persist</key>
       <integer>1</integer>
       <key>Type</key>
diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml
index 21846f6e87..88c264c649 100644
--- a/indra/newview/skins/default/xui/en/panel_login.xml
+++ b/indra/newview/skins/default/xui/en/panel_login.xml
@@ -60,7 +60,7 @@ name="username_text"
 top="20"
 left="20"
 width="150">
-Second Life ID or Name:
+Username:
 </text>
 <line_editor
 follows="left|bottom"
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_general.xml b/indra/newview/skins/default/xui/en/panel_preferences_general.xml
index 131d9312af..b09ac4d0fa 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_general.xml
@@ -290,10 +290,10 @@
      control_name="NameTagShowSLIDs"
 	 enabled_control="AvatarNameTagMode"
      height="16"
-     label="Second Life IDs"
+     label="Usernames"
      left_delta="0"
      name="show_slids"
-	 tool_tip="Show SL ID, like bobsmith123"
+     tool_tip="Show username, like bobsmith123"
      top_pad="5" />
     <text
      type="string"
-- 
cgit v1.2.3


From 4d16b01bd72561c92bf848aa1ae53af8dcc33616 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Mon, 17 May 2010 15:01:52 -0700
Subject: DEV-50013 Display name for inbound voice calls

---
 indra/newview/llimview.cpp     | 15 +++++++++++++--
 indra/newview/llvoicechannel.h |  3 +++
 2 files changed, 16 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index 356f194c81..23ad308a82 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -1746,8 +1746,19 @@ void LLOutgoingCallDialog::show(const LLSD& key)
 	setTitle(callee_name);
 
 	LLSD callee_id = mPayload["other_user_id"];
-	childSetTextArg("calling", "[CALLEE_NAME]", callee_name);
-	childSetTextArg("connecting", "[CALLEE_NAME]", callee_name);
+	// Beautification:  Since SLID is in the title bar, and you probably
+	// recognize this person's voice, just show display name
+	std::string final_callee_name = callee_name;
+	if (is_avatar)
+	{
+		LLAvatarName av_name;
+		if (LLAvatarNameCache::get(callee_id, &av_name))
+		{
+			final_callee_name = av_name.mDisplayName;
+		}
+	}
+	childSetTextArg("calling", "[CALLEE_NAME]", final_callee_name);
+	childSetTextArg("connecting", "[CALLEE_NAME]", final_callee_name);
 
 	// for outgoing group calls callee_id == group id == session id
 	setIcon(callee_id, callee_id);
diff --git a/indra/newview/llvoicechannel.h b/indra/newview/llvoicechannel.h
index 573fab1f4f..1784ceaa12 100644
--- a/indra/newview/llvoicechannel.h
+++ b/indra/newview/llvoicechannel.h
@@ -82,6 +82,9 @@ public:
 	virtual void getChannelInfo();
 	virtual BOOL isActive();
 	virtual BOOL callStarted();
+
+	// Session name is a UI label used for feedback about which person,
+	// group, or phone number you are talking to
 	const std::string& getSessionName() const { return mSessionName; }
 
 	boost::signals2::connection setStateChangedCallback(const state_changed_signal_t::slot_type& callback)
-- 
cgit v1.2.3


From 22f4de740dfcb2fdf92e46b91a426ca14fc42081 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Mon, 17 May 2010 15:28:37 -0700
Subject: inspector and friends list tooltip updates reviewed by James

---
 indra/newview/llavatarlistitem.cpp |  3 ++-
 indra/newview/llinspectavatar.cpp  | 38 +++++++++++++++-----------------------
 2 files changed, 17 insertions(+), 24 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llavatarlistitem.cpp b/indra/newview/llavatarlistitem.cpp
index fcfc05af02..c458930a62 100644
--- a/indra/newview/llavatarlistitem.cpp
+++ b/indra/newview/llavatarlistitem.cpp
@@ -170,6 +170,7 @@ void LLAvatarListItem::setOnline(bool online)
 void LLAvatarListItem::setName(const std::string& name)
 {
 	setNameInternal(name, mHighlihtSubstring);
+	mAvatarName->setToolTip(name);
 }
 
 void LLAvatarListItem::setHighlight(const std::string& highlight)
@@ -334,12 +335,12 @@ const std::string LLAvatarListItem::getAvatarName() const
 void LLAvatarListItem::setNameInternal(const std::string& name, const std::string& highlight)
 {
 	LLTextUtil::textboxSetHighlightedVal(mAvatarName, mAvatarNameStyle, name, highlight);
-	mAvatarName->setToolTip(name);
 }
 
 void LLAvatarListItem::onAvatarNameCache(const LLAvatarName& av_name)
 {
 	setName(av_name.mDisplayName);
+	mAvatarName->setToolTip(av_name.mSLID);
 
 	//requesting the list to resort
 	notifyParent(LLSD().with("sort", LLSD()));
diff --git a/indra/newview/llinspectavatar.cpp b/indra/newview/llinspectavatar.cpp
index 0024651863..3cbde2bb9c 100644
--- a/indra/newview/llinspectavatar.cpp
+++ b/indra/newview/llinspectavatar.cpp
@@ -154,7 +154,7 @@ private:
 private:
 	LLUUID				mAvatarID;
 	// Need avatar name information to spawn friend add request
-	std::string			mAvatarName;
+	std::string			mLegacyName;
 	// an in-flight request for avatar properties from LLAvatarPropertiesProcessor
 	// is represented by this object
 	LLFetchAvatarData*	mPropertiesRequest;
@@ -209,7 +209,7 @@ public:
 LLInspectAvatar::LLInspectAvatar(const LLSD& sd)
 :	LLInspect( LLSD() ),	// single_instance, doesn't really need key
 	mAvatarID(),			// set in onOpen()  *Note: we used to show partner's name but we dont anymore --angela 3rd Dec* 
-	mAvatarName(),
+	mLegacyName(),
 	mPropertiesRequest(NULL)
 {
 	mCommitCallbackRegistrar.add("InspectAvatar.ViewProfile",	boost::bind(&LLInspectAvatar::onClickViewProfile, this));	
@@ -376,8 +376,7 @@ void LLInspectAvatar::requestUpdate()
 	childSetValue("avatar_icon", LLSD(mAvatarID) );
 
 	// JAMESDEBUG HACK: Request via both legacy name system and new
-	// name system to set mAvatarName for not-yet-converted friendship
-	// request system.
+	// name system to set mLegacyName for use with mute system
 	gCacheName->get(mAvatarID, false,
 		boost::bind(&LLInspectAvatar::onNameCache,
 			this, _1, _2, _3));
@@ -574,7 +573,7 @@ void LLInspectAvatar::updateVolumeSlider()
 
 		LLUICtrl* mute_btn = getChild<LLUICtrl>("mute_btn");
 
-		bool is_linden = LLStringUtil::endsWith(mAvatarName, " Linden");
+		bool is_linden = LLStringUtil::endsWith(mLegacyName, " Linden");
 
 		mute_btn->setEnabled( !is_linden);
 		mute_btn->setValue( is_muted );
@@ -605,7 +604,7 @@ void LLInspectAvatar::onClickMuteVolume()
 	LLMuteList* mute_list = LLMuteList::getInstance();
 	bool is_muted = mute_list->isMuted(mAvatarID, LLMute::flagVoiceChat);
 
-	LLMute mute(mAvatarID, mAvatarName, LLMute::AGENT);
+	LLMute mute(mAvatarID, mLegacyName, LLMute::AGENT);
 	if (!is_muted)
 	{
 		mute_list->add(mute, LLMute::flagVoiceChat);
@@ -631,14 +630,8 @@ void LLInspectAvatar::onNameCache(
 {
 	if (id == mAvatarID)
 	{
-		mAvatarName = full_name;
-
-		// IDEVO JAMESDEBUG - need to always display a display name
-		if (!LLAvatarNameCache::useDisplayNames())
-		{
-			getChild<LLUICtrl>("user_name")->setValue(full_name);
-			getChild<LLUICtrl>("user_slid")->setValue("");
-		}
+		// we need the legacy name for the mute list :-(
+		mLegacyName = full_name;
 	}
 }
 
@@ -648,7 +641,6 @@ void LLInspectAvatar::onAvatarNameCache(
 {
 	if (agent_id == mAvatarID)
 	{
-		// JAMESDEBUG what to do about mAvatarName ?
 		getChild<LLUICtrl>("user_name")->setValue(av_name.mDisplayName);
 		getChild<LLUICtrl>("user_slid")->setValue(av_name.mSLID);
 	}
@@ -656,7 +648,7 @@ void LLInspectAvatar::onAvatarNameCache(
 
 void LLInspectAvatar::onClickAddFriend()
 {
-	LLAvatarActions::requestFriendshipDialog(mAvatarID, mAvatarName);
+	LLAvatarActions::requestFriendshipDialog(mAvatarID, mLegacyName);
 	closeFloater();
 }
 
@@ -724,7 +716,7 @@ void LLInspectAvatar::onClickShare()
 
 void LLInspectAvatar::onToggleMute()
 {
-	LLMute mute(mAvatarID, mAvatarName, LLMute::AGENT);
+	LLMute mute(mAvatarID, mLegacyName, LLMute::AGENT);
 
 	if (LLMuteList::getInstance()->isMuted(mute.mID, mute.mName))
 	{
@@ -741,7 +733,7 @@ void LLInspectAvatar::onToggleMute()
 
 void LLInspectAvatar::onClickReport()
 {
-	LLFloaterReporter::showFromAvatar(mAvatarID, mAvatarName);
+	LLFloaterReporter::showFromAvatar(mAvatarID, mLegacyName);
 	closeFloater();
 }
 
@@ -765,17 +757,17 @@ void LLInspectAvatar::onClickZoomIn()
 
 void LLInspectAvatar::onClickFindOnMap()
 {
-	gFloaterWorldMap->trackAvatar(mAvatarID, mAvatarName);
+	gFloaterWorldMap->trackAvatar(mAvatarID, mLegacyName);
 	LLFloaterReg::showInstance("world_map");
 }
 
 
 bool LLInspectAvatar::enableMute()
 {
-		bool is_linden = LLStringUtil::endsWith(mAvatarName, " Linden");
+		bool is_linden = LLStringUtil::endsWith(mLegacyName, " Linden");
 		bool is_self = mAvatarID == gAgent.getID();
 
-		if (!is_linden && !is_self && !LLMuteList::getInstance()->isMuted(mAvatarID, mAvatarName))
+		if (!is_linden && !is_self && !LLMuteList::getInstance()->isMuted(mAvatarID, mLegacyName))
 		{
 			return true;
 		}
@@ -787,10 +779,10 @@ bool LLInspectAvatar::enableMute()
 
 bool LLInspectAvatar::enableUnmute()
 {
-		bool is_linden = LLStringUtil::endsWith(mAvatarName, " Linden");
+		bool is_linden = LLStringUtil::endsWith(mLegacyName, " Linden");
 		bool is_self = mAvatarID == gAgent.getID();
 
-		if (!is_linden && !is_self && LLMuteList::getInstance()->isMuted(mAvatarID, mAvatarName))
+		if (!is_linden && !is_self && LLMuteList::getInstance()->isMuted(mAvatarID, mLegacyName))
 		{
 			return true;
 		}
-- 
cgit v1.2.3


From 40adb9599cd7eac1fd8062e4629a0e8b8c031638 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Mon, 17 May 2010 15:44:29 -0700
Subject: DEV-50013 New documentation URL for display names changes

---
 indra/newview/skins/default/xui/en/notifications.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index b0f5daef14..7839d61299 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -3170,7 +3170,7 @@ Thanks for updating your name!
 
 Just like in real life, it takes a while for everyone to learn about a new name.  Please allow [HOURS] hours for your name to update in object ownership, scripts, search, etc.
 
-See http://wiki.secondlife.com/wiki/Display_Names for details.
+See http://wiki.secondlife.com/wiki/Setting_your_display_name for details.
   </notification>
 
   <notification
-- 
cgit v1.2.3


From 118ab8900a7ddc86564a84d836f507d4a1aa86b7 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Mon, 17 May 2010 16:33:16 -0700
Subject: DEV-50013 Display name for inbound voice calls

(Last commit was actually for outbound).  Reviewed with Leyla
---
 indra/newview/llimview.cpp                         | 29 +++++++++++++++++-----
 indra/newview/llimview.h                           |  9 ++++++-
 indra/newview/llvoicevivox.cpp                     |  9 +++++++
 .../skins/default/xui/en/floater_incoming_call.xml |  2 +-
 4 files changed, 41 insertions(+), 8 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index 23ad308a82..b17dca68f6 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -1915,21 +1915,21 @@ BOOL LLIncomingCallDialog::postBuild()
 	if (caller_name == "anonymous")
 	{
 		caller_name = getString("anonymous");
+		setCallerName(caller_name, caller_name, call_type);
 	}
 	else if (!is_avatar)
 	{
 		caller_name = LLTextUtil::formatPhoneNumber(caller_name);
+		setCallerName(caller_name, caller_name, call_type);
 	}
 	else
 	{
-		// IDEVO
-		caller_name = LLCacheName::cleanFullName(caller_name);
+		// Get the full name information
+		LLAvatarNameCache::get(caller_id,
+			boost::bind(&LLIncomingCallDialog::onAvatarNameCache,
+				this, _1, _2, call_type));
 	}
 
-	setTitle(caller_name + " " + call_type);
-
-	LLUICtrl* caller_name_widget = getChild<LLUICtrl>("caller name");
-	caller_name_widget->setValue(caller_name + " " + call_type);
 	setIcon(session_id, caller_id);
 
 	childSetAction("Accept", onAccept, this);
@@ -1953,6 +1953,23 @@ BOOL LLIncomingCallDialog::postBuild()
 	return TRUE;
 }
 
+void LLIncomingCallDialog::setCallerName(const std::string& ui_title,
+										 const std::string& ui_label,
+										 const std::string& call_type)
+{
+	setTitle(ui_title + " " + call_type);
+
+	LLUICtrl* caller_name_widget = getChild<LLUICtrl>("caller name");
+	caller_name_widget->setValue(ui_label + " " + call_type);
+}
+
+void LLIncomingCallDialog::onAvatarNameCache(const LLUUID& agent_id,
+											 const LLAvatarName& av_name,
+											 const std::string& call_type)
+{
+	std::string title = av_name.getNameAndSLID();
+	setCallerName(title, av_name.mDisplayName, call_type);
+}
 
 void LLIncomingCallDialog::onOpen(const LLSD& key)
 {
diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h
index 758ea667ef..c132ac328f 100644
--- a/indra/newview/llimview.h
+++ b/indra/newview/llimview.h
@@ -41,7 +41,7 @@
 #include "llvoicechannel.h"
 
 
-
+class LLAvatarName;
 class LLFriendObserver;
 class LLCallDialogManager;	
 class LLIMSpeakerMgr;
@@ -540,6 +540,13 @@ public:
 	static void onStartIM(void* user_data);
 
 private:
+	void setCallerName(const std::string& ui_title,
+		const std::string& ui_label,
+		const std::string& call_type);
+	void onAvatarNameCache(const LLUUID& agent_id,
+		const LLAvatarName& av_name,
+		const std::string& call_type);
+
 	/*virtual*/ void onLifetimeExpired();
 	void processCallResponse(S32 response);
 };
diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp
index a457bd1fe6..4a0b0f12a4 100644
--- a/indra/newview/llvoicevivox.cpp
+++ b/indra/newview/llvoicevivox.cpp
@@ -37,6 +37,8 @@
 
 #include "llsdutil.h"
 
+// Linden library includes
+#include "llavatarnamecache.h"
 #include "llvoavatarself.h"
 #include "llbufferstream.h"
 #include "llfile.h"
@@ -52,6 +54,8 @@
 #include "llviewercontrol.h"
 #include "llkeyboard.h"
 #include "llappviewer.h"	// for gDisconnected, gDisableVoice
+
+// Viewer includes
 #include "llmutelist.h"  // to check for muted avatars
 #include "llagent.h"
 #include "llcachename.h"
@@ -6178,6 +6182,11 @@ void LLVivoxVoiceClient::lookupName(const LLUUID &id)
 {
 	BOOL is_group = FALSE;
 	gCacheName->get(id, is_group, &LLVivoxVoiceClient::onAvatarNameLookup);
+
+	// Peformance boost:  We're going to need the display name later when
+	// we show the call request floater, so get the request going now
+	LLAvatarName unused;
+	LLAvatarNameCache::get(id, &unused);
 }
 
 //static
diff --git a/indra/newview/skins/default/xui/en/floater_incoming_call.xml b/indra/newview/skins/default/xui/en/floater_incoming_call.xml
index 1d67123726..420ba172e8 100644
--- a/indra/newview/skins/default/xui/en/floater_incoming_call.xml
+++ b/indra/newview/skins/default/xui/en/floater_incoming_call.xml
@@ -8,7 +8,7 @@
  layout="topleft"
  name="incoming call"
  help_topic="incoming_call"
- title="UNKNOWN PERSON IS CALLING"
+ title="Incoming call"
  width="410">
     <floater.string
      name="lifetime">
-- 
cgit v1.2.3


From efa00298b3e806a92ced61803b2bbe8ca40d1681 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Mon, 17 May 2010 17:11:27 -0700
Subject: updated preferences placement for display names option reviewed by
 James

---
 .../default/xui/en/panel_preferences_advanced.xml  | 15 ++----------
 .../default/xui/en/panel_preferences_setup.xml     | 27 ++++++++++++++++++++--
 2 files changed, 27 insertions(+), 15 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
index e3ee14771c..88b60ea3c8 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
@@ -205,7 +205,7 @@ Automatic position for:
    layout="topleft"
    left="30"
    name="UI Size:"
-   top_pad="5"
+   top_pad="15"
    width="300">
     UI size
   </text>
@@ -316,21 +316,10 @@ Automatic position for:
  label="Other Devices"
  left="30"
  name="joystick_setup_button"
- top_pad="5"
+ top_pad="10"
  width="155">
     <button.commit_callback
      function="Floater.Show"
      parameter="pref_joystick" />
   </button>
-  <check_box
-  control_name="UseDisplayNames" 
-  follows="top|left"
-  height="15"
-  label="Use Display Names (PLACEHOLDER)"
-  layout="topleft" 
-  left="30"
-  name="display_names_check"
-  width="237"
-  tool_tip="Check to use display names in chat, IM, name tags, etc."
-  top_pad="5"/> 
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_setup.xml b/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
index 2c6ceeef2e..7148aba00a 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
@@ -115,7 +115,7 @@
    layout="topleft"
    left="77"
    name="connection_port_enabled"
-   top_pad="20"
+   top_pad="15"
    width="256">
     <check_box.commit_callback
      function="Notification.Show"
@@ -147,7 +147,7 @@
    left="80"
    mouse_opaque="false"
    name="cache_size_label_l"
-   top_pad="20"
+   top_pad="10"
    width="200">
     Cache size
   </text>
@@ -375,4 +375,27 @@
    name="web_proxy_port"
    top_delta="0"
    width="145" />
+  <text
+       type="string"
+       length="1"
+       follows="left|top"
+       height="10"
+       layout="topleft"
+       left="30"
+       name="Communications:"
+       top_pad="5"
+       width="300">
+    Communications:
+  </text>
+  <check_box
+control_name="UseDisplayNames"
+follows="top|left"
+height="15"
+label="Use Display Names"
+layout="topleft"
+left_delta="50"
+name="display_names_check"
+width="237"
+tool_tip="Check to use display names in chat, IM, name tags, etc."
+top_pad="10"/>
 </panel>
-- 
cgit v1.2.3


From f4148502e484d516b42c4a88603eee6889d45697 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Tue, 18 May 2010 16:00:45 -0700
Subject: Rename mSLID to mUsername to match the name of the field in the UI

Product made a late-breaking request to change the name of this
field.  The wire protocol for People API has not yet changed.
---
 indra/newview/llavatarlistitem.cpp    | 2 +-
 indra/newview/llchathistory.cpp       | 4 ++--
 indra/newview/llimview.cpp            | 2 +-
 indra/newview/llinspectavatar.cpp     | 2 +-
 indra/newview/llinventorybridge.cpp   | 2 +-
 indra/newview/llpanelme.cpp           | 2 +-
 indra/newview/llpanelprofileview.cpp  | 2 +-
 indra/newview/lltoolpie.cpp           | 2 +-
 indra/newview/llviewerdisplayname.cpp | 2 +-
 indra/newview/llvoavatar.cpp          | 2 +-
 10 files changed, 11 insertions(+), 11 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llavatarlistitem.cpp b/indra/newview/llavatarlistitem.cpp
index c458930a62..a59ad306d7 100644
--- a/indra/newview/llavatarlistitem.cpp
+++ b/indra/newview/llavatarlistitem.cpp
@@ -340,7 +340,7 @@ void LLAvatarListItem::setNameInternal(const std::string& name, const std::strin
 void LLAvatarListItem::onAvatarNameCache(const LLAvatarName& av_name)
 {
 	setName(av_name.mDisplayName);
-	mAvatarName->setToolTip(av_name.mSLID);
+	mAvatarName->setToolTip(av_name.mUsername);
 
 	//requesting the list to resort
 	notifyParent(LLSD().with("sort", LLSD()));
diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index 5bf3d7b913..6d98afbc58 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -330,8 +330,8 @@ public:
 		LLTextBox* user_name = getChild<LLTextBox>("user_name");
 		user_name->setValue( LLSD(av_name.mDisplayName ) );
 
-		user_name->setToolTip( av_name.mSLID );
-		setToolTip( av_name.mSLID );
+		user_name->setToolTip( av_name.mUsername );
+		setToolTip( av_name.mUsername );
 	}
 
 protected:
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index b17dca68f6..0c88b9f3a1 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -2075,7 +2075,7 @@ void LLIncomingCallDialog::processCallResponse(S32 response)
 							if (LLAvatarNameCache::useDisplayNames()
 								&& LLAvatarNameCache::get(caller_id, &av_name))
 							{
-								correct_session_name = av_name.mDisplayName + " (" + av_name.mSLID + ")";
+								correct_session_name = av_name.mDisplayName + " (" + av_name.mUsername + ")";
 							}
 							correct_session_name.append(ADHOC_NAME_SUFFIX); 
 						}
diff --git a/indra/newview/llinspectavatar.cpp b/indra/newview/llinspectavatar.cpp
index 3cbde2bb9c..74bf6e378d 100644
--- a/indra/newview/llinspectavatar.cpp
+++ b/indra/newview/llinspectavatar.cpp
@@ -642,7 +642,7 @@ void LLInspectAvatar::onAvatarNameCache(
 	if (agent_id == mAvatarID)
 	{
 		getChild<LLUICtrl>("user_name")->setValue(av_name.mDisplayName);
-		getChild<LLUICtrl>("user_slid")->setValue(av_name.mSLID);
+		getChild<LLUICtrl>("user_slid")->setValue(av_name.mUsername);
 	}
 }
 
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index 14e5c8b93c..9e3f80e464 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -3634,7 +3634,7 @@ void LLCallingCardBridge::performAction(LLInventoryModel* model, std::string act
 			if (LLAvatarNameCache::useDisplayNames()
 				&& LLAvatarNameCache::get(item->getCreatorUUID(), &av_name))
 			{
-				callingcard_name = av_name.mDisplayName + " (" + av_name.mSLID + ")";
+				callingcard_name = av_name.mDisplayName + " (" + av_name.mUsername + ")";
 			}
 			LLUUID session_id = gIMMgr->addSession(callingcard_name, IM_NOTHING_SPECIAL, item->getCreatorUUID());
 			if (session_id != LLUUID::null)
diff --git a/indra/newview/llpanelme.cpp b/indra/newview/llpanelme.cpp
index f38c8859ef..c1d02fae39 100644
--- a/indra/newview/llpanelme.cpp
+++ b/indra/newview/llpanelme.cpp
@@ -242,7 +242,7 @@ void LLPanelMyProfileEdit::processProfileProperties(const LLAvatarData* avatar_d
 void LLPanelMyProfileEdit::onNameCache(const LLUUID& agent_id, const LLAvatarName& av_name)
 {
 	getChild<LLUICtrl>("user_name")->setValue( av_name.mDisplayName );
-	getChild<LLUICtrl>("user_slid")->setValue( av_name.mSLID );
+	getChild<LLUICtrl>("user_slid")->setValue( av_name.mUsername );
 }
 
 BOOL LLPanelMyProfileEdit::postBuild()
diff --git a/indra/newview/llpanelprofileview.cpp b/indra/newview/llpanelprofileview.cpp
index 1afe2b9d44..d22d8d2718 100644
--- a/indra/newview/llpanelprofileview.cpp
+++ b/indra/newview/llpanelprofileview.cpp
@@ -207,7 +207,7 @@ void LLPanelProfileView::onAvatarNameCache(const LLUUID& agent_id,
 										   const LLAvatarName& av_name)
 {
 	getChild<LLUICtrl>("user_name")->setValue( av_name.mDisplayName );
-	getChild<LLUICtrl>("user_slid")->setValue( av_name.mSLID );
+	getChild<LLUICtrl>("user_slid")->setValue( av_name.mUsername );
 }
 
 // EOF
diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp
index 67db778bdb..ebef28fd64 100644
--- a/indra/newview/lltoolpie.cpp
+++ b/indra/newview/lltoolpie.cpp
@@ -881,7 +881,7 @@ BOOL LLToolPie::handleTooltipObject( LLViewerObject* hover_object, std::string l
 			if (LLAvatarNameCache::useDisplayNames()
 				&& LLAvatarNameCache::get(hover_object->getID(), &av_name))
 			{
-				final_name = av_name.mDisplayName + " (" + av_name.mSLID + ")";
+				final_name = av_name.mDisplayName + " (" + av_name.mUsername + ")";
 			}
 			else
 			{
diff --git a/indra/newview/llviewerdisplayname.cpp b/indra/newview/llviewerdisplayname.cpp
index ec80129f8a..a783cb03d8 100644
--- a/indra/newview/llviewerdisplayname.cpp
+++ b/indra/newview/llviewerdisplayname.cpp
@@ -185,7 +185,7 @@ class LLDisplayNameUpdate : public LLHTTPNode
 		{
 			LLSD args;
 			args["OLD_NAME"] = old_display_name;
-			args["SLID"] = av_name.mSLID;
+			args["SLID"] = av_name.mUsername;
 			args["NEW_NAME"] = av_name.mDisplayName;
 			LLNotificationsUtil::add("DisplayNameUpdate", args);
 		}
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 5e6f294071..e7721d6068 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -2880,7 +2880,7 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
 			{
 				// JAMESDEBUG HACK
 				LLColor4 slid_color = name_tag_color * 0.83f;
-				addNameTagLine(av_name.mSLID, slid_color, LLFontGL::NORMAL,
+				addNameTagLine(av_name.mUsername, slid_color, LLFontGL::NORMAL,
 					LLFontGL::getFontSansSerifSmall());
 			}
 		}
-- 
cgit v1.2.3


From 09f0758f2fce699659a6ebc63962d4f9493f0098 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Tue, 18 May 2010 17:30:54 -0700
Subject: DEV-50177 IM Session window title bar shows SLID for receiving party

Reviewed with Leyla
---
 indra/newview/llimfloater.cpp | 36 ++++++++++++++++++++++++++++++------
 indra/newview/llimfloater.h   |  7 +++++++
 2 files changed, 37 insertions(+), 6 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp
index d25aa37e16..804cc75f75 100644
--- a/indra/newview/llimfloater.cpp
+++ b/indra/newview/llimfloater.cpp
@@ -38,6 +38,7 @@
 
 #include "llagent.h"
 #include "llappviewer.h"
+#include "llavatarnamecache.h"
 #include "llbutton.h"
 #include "llbottomtray.h"
 #include "llchannelmanager.h"
@@ -275,12 +276,6 @@ BOOL LLIMFloater::postBuild()
 	mInputEditor->setReplaceNewlinesWithSpaces( FALSE );
 	mInputEditor->setPassDelete( TRUE );
 
-	std::string session_name(LLIMModel::instance().getName(mSessionID));
-
-	mInputEditor->setLabel(LLTrans::getString("IM_to_label") + " " + session_name);
-
-	setTitle(session_name);
-
 	childSetCommitCallback("chat_editor", onSendMsg, this);
 	
 	mChatHistory = getChild<LLChatHistory>("chat_history");
@@ -298,6 +293,19 @@ BOOL LLIMFloater::postBuild()
 		mInputEditor->setLabel(LLTrans::getString("IM_unavailable_text_label"));
 	}
 
+	if ( im_session && im_session->isP2PSessionType())
+	{
+		// look up display name for window title
+		LLAvatarNameCache::get(im_session->mOtherParticipantID,
+							   boost::bind(&LLIMFloater::onAvatarNameCache,
+										   this, _1, _2));
+	}
+	else
+	{
+		std::string session_name(LLIMModel::instance().getName(mSessionID));
+		updateSessionName(session_name, session_name);
+	}
+	
 	//*TODO if session is not initialized yet, add some sort of a warning message like "starting session...blablabla"
 	//see LLFloaterIMPanel for how it is done (IB)
 
@@ -311,6 +319,22 @@ BOOL LLIMFloater::postBuild()
 	}
 }
 
+void LLIMFloater::updateSessionName(const std::string& ui_title,
+									const std::string& ui_label)
+{
+	mInputEditor->setLabel(LLTrans::getString("IM_to_label") + " " + ui_label);
+	setTitle(ui_title);	
+}
+
+void LLIMFloater::onAvatarNameCache(const LLUUID& agent_id,
+									const LLAvatarName& av_name)
+{
+	// Use display name only for labels, as the extended name will be in the
+	// floater title
+	std::string ui_title = av_name.getNameAndSLID();
+	updateSessionName(ui_title, av_name.mDisplayName);
+}
+
 // virtual
 void LLIMFloater::draw()
 {
diff --git a/indra/newview/llimfloater.h b/indra/newview/llimfloater.h
index d63246a5cd..75ff0372ee 100644
--- a/indra/newview/llimfloater.h
+++ b/indra/newview/llimfloater.h
@@ -38,6 +38,7 @@
 #include "lltooldraganddrop.h"
 #include "lltransientdockablefloater.h"
 
+class LLAvatarName;
 class LLLineEditor;
 class LLPanelChatControlPanel;
 class LLChatHistory;
@@ -130,6 +131,12 @@ private:
 	/* virtual */ void onFocusLost();
 	/* virtual */ void onFocusReceived();
 
+	// Update the window title, input field help text, etc.
+	void updateSessionName(const std::string& ui_title, const std::string& ui_label);
+	
+	// For display name lookups for IM window titles
+	void onAvatarNameCache(const LLUUID& agent_id, const LLAvatarName& av_name);
+	
 	BOOL dropCallingCard(LLInventoryItem* item, BOOL drop);
 	BOOL dropCategory(LLInventoryCategory* category, BOOL drop);
 
-- 
cgit v1.2.3


From cbc9fcabf945558ef22d35e2957ae9f1c879ef7b Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Wed, 19 May 2010 09:38:49 -0700
Subject: DEV-50013 More SLID to Username renames

---
 indra/newview/app_settings/settings.xml                        |  2 +-
 indra/newview/llfloaterpreference.cpp                          |  2 +-
 indra/newview/llvoavatar.cpp                                   | 10 +++++-----
 .../newview/skins/default/xui/en/panel_preferences_general.xml |  2 +-
 4 files changed, 8 insertions(+), 8 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 6a68f72bb5..6e7d851072 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -7337,7 +7337,7 @@
       <key>Value</key>
       <integer>1</integer>
     </map>
-    <key>NameTagShowSLIDs</key>
+    <key>NameTagShowUsernames</key>
     <map>
       <key>Comment</key>
       <string>Show usernames in avatar name tags</string>
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index f248fde64a..a7e5eedf5f 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -326,7 +326,7 @@ LLFloaterPreference::LLFloaterPreference(const LLSD& key)
 
 	sSkin = gSavedSettings.getString("SkinCurrent");
 	
-	gSavedSettings.getControl("NameTagShowSLIDs")->getCommitSignal()->connect(boost::bind(&handleNameTagOptionChanged,  _2));	
+	gSavedSettings.getControl("NameTagShowUsernames")->getCommitSignal()->connect(boost::bind(&handleNameTagOptionChanged,  _2));	
 	gSavedSettings.getControl("UseDisplayNames")->getCommitSignal()->connect(boost::bind(&handleDisplayNamesOptionChanged,  _2));
 }
 
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index e7721d6068..40e1f31697 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -2856,7 +2856,7 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
 		}
 
 		static LLUICachedControl<bool> show_display_names("NameTagShowDisplayNames");
-		static LLUICachedControl<bool> show_slids("NameTagShowSLIDs");
+		static LLUICachedControl<bool> show_usernames("NameTagShowUsernames");
 
 		if (LLAvatarNameCache::useDisplayNames())
 		{
@@ -2876,11 +2876,11 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
 					LLFontGL::getFontSansSerif());
 			}
 			// Suppress SLID display if display name matches exactly (ugh)
-			if (show_slids && !av_name.mIsDisplayNameDefault)
+			if (show_usernames && !av_name.mIsDisplayNameDefault)
 			{
-				// JAMESDEBUG HACK
-				LLColor4 slid_color = name_tag_color * 0.83f;
-				addNameTagLine(av_name.mUsername, slid_color, LLFontGL::NORMAL,
+				// *HACK: Desaturate the color
+				LLColor4 username_color = name_tag_color * 0.83f;
+				addNameTagLine(av_name.mUsername, username_color, LLFontGL::NORMAL,
 					LLFontGL::getFontSansSerifSmall());
 			}
 		}
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_general.xml b/indra/newview/skins/default/xui/en/panel_preferences_general.xml
index b09ac4d0fa..5f50b962ee 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_general.xml
@@ -287,7 +287,7 @@
      top_pad="5" />
      -->
    <check_box
-     control_name="NameTagShowSLIDs"
+     control_name="NameTagShowUsernames"
 	 enabled_control="AvatarNameTagMode"
      height="16"
      label="Usernames"
-- 
cgit v1.2.3


From d822206a48633e03f7456663d7d7d82b73ba209f Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Wed, 19 May 2010 10:25:52 -0700
Subject: Remove colors for match/mismatch/friends from name tags

Product team request.  Reviewed with Leyla
---
 indra/newview/app_settings/settings.xml                       | 11 +++++++++++
 indra/newview/llvoavatar.cpp                                  |  5 +++--
 indra/newview/skins/default/colors.xml                        |  2 +-
 .../skins/default/xui/en/panel_preferences_general.xml        | 11 ++++++++++-
 4 files changed, 25 insertions(+), 4 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 6e7d851072..acd3c10ec6 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -7337,6 +7337,17 @@
       <key>Value</key>
       <integer>1</integer>
     </map>
+    <key>NameTagShowFriends</key>
+    <map>
+      <key>Comment</key>
+      <string>Highlight the name tags of your friends</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>NameTagShowUsernames</key>
     <map>
       <key>Comment</key>
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 40e1f31697..a9250991f6 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -3072,14 +3072,15 @@ void LLVOAvatar::idleUpdateNameTagAlpha(BOOL new_name, F32 alpha)
 
 LLColor4 LLVOAvatar::getNameTagColor(bool is_friend)
 {
+	static LLUICachedControl<bool> show_friends("NameTagShowFriends");
 	const char* color_name;
-	if (is_friend)
+	if (show_friends && is_friend)
 	{
 		color_name = "NameTagFriend";
 	}
 	else if (LLAvatarNameCache::useDisplayNames())
 	{
-		// ...color based on whether SLID "matches" a computed display
+		// ...color based on whether username "matches" a computed display
 		// name
 		LLAvatarName av_name;
 		if (LLAvatarNameCache::get(getID(), &av_name)
diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml
index bb43de6ada..bfa57892a7 100644
--- a/indra/newview/skins/default/colors.xml
+++ b/indra/newview/skins/default/colors.xml
@@ -550,7 +550,7 @@
      reference="White" />
     <color
      name="NameTagMismatch"
-     value="1 0.776 0.212 1" />
+     reference="White" />
     <color
      name="NameTagSLID"
      value="1 1 1 1" />
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_general.xml b/indra/newview/skins/default/xui/en/panel_preferences_general.xml
index 5f50b962ee..eabbdc2186 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_general.xml
@@ -256,7 +256,16 @@
      name="show_my_name_checkbox1"
 	 top_pad="4"
      width="300" />
-   <text
+  <check_box
+    control_name="NameTagShowFriends"
+    enabled_control="AvatarNameTagMode"
+    height="16"
+    label="Highlight friends"
+    left_delta="0"
+    name="show_friends"
+    tool_tip="Highlight the name tags of your friends"
+    top_pad="2" />
+  <text
     follows="left|top"
     height="15"
 	layout="topleft"
-- 
cgit v1.2.3


From da1a39c935d8ef660c35d01bf9d7c53af3adf7ae Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Wed, 19 May 2010 11:38:29 -0700
Subject: Land display name updates reviewed by James

---
 indra/newview/llfloaterland.cpp     | 23 +++++++++--------------
 indra/newview/llfloatersellland.cpp | 16 +++++++++++++---
 2 files changed, 22 insertions(+), 17 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp
index b008189b0d..78dea87bfd 100644
--- a/indra/newview/llfloaterland.cpp
+++ b/indra/newview/llfloaterland.cpp
@@ -37,7 +37,7 @@
 
 #include "llfloaterland.h"
 
-#include "llcachename.h"
+#include "llavatarnamecache.h"
 #include "llfocusmgr.h"
 #include "llnotificationsutil.h"
 #include "llparcel.h"
@@ -586,6 +586,8 @@ void LLPanelLandGeneral::refresh()
 										parcel, GP_LAND_SET_SALE_INFO);
 		BOOL can_be_sold = owner_sellable || estate_manager_sellable;
 
+		can_be_sold = true;
+
 		const LLUUID &owner_id = parcel->getOwnerID();
 		BOOL is_public = parcel->isPublic();
 
@@ -1387,9 +1389,7 @@ bool LLPanelLandObjects::callbackReturnOwnerObjects(const LLSD& notification, co
 			}
 			else
 			{
-				std::string full_name;
-				gCacheName->getFullName(owner_id, full_name);
-				args["NAME"] = full_name;
+				args["NAME"] = LLSLURL("agent", owner_id, "inspect").getSLURLString();
 				LLNotificationsUtil::add("OtherObjectsReturned", args);
 			}
 			send_return_objects_message(parcel->getLocalID(), RT_OWNER);
@@ -1607,9 +1607,9 @@ void LLPanelLandObjects::processParcelObjectOwnersReply(LLMessageSystem *msg, vo
 		}
 
 		// Placeholder for name.
-		std::string name;
-		gCacheName->getFullName(owner_id, name);		
-		item_params.columns.add().value(name).font(FONT).column("name");
+		LLAvatarName av_name;
+		LLAvatarNameCache::get(owner_id, &av_name);
+		item_params.columns.add().value(av_name.getNameAndSLID()).font(FONT).column("name");
 
 		object_count_str = llformat("%d", object_count);
 		item_params.columns.add().value(object_count_str).font(FONT).column("count");
@@ -1718,9 +1718,7 @@ void LLPanelLandObjects::onClickReturnOwnerObjects(void* userdata)
 	}
 	else
 	{
-		std::string name;
-		gCacheName->getFullName(owner_id, name);
-		args["NAME"] = name;
+		args["NAME"] = LLSLURL("agent", owner_id, "inspect").getSLURLString();
 		LLNotificationsUtil::add("ReturnObjectsOwnedByUser", args, LLSD(), boost::bind(&LLPanelLandObjects::callbackReturnOwnerObjects, panelp, _1, _2));
 	}
 }
@@ -1779,10 +1777,7 @@ void LLPanelLandObjects::onClickReturnOtherObjects(void* userdata)
 		}
 		else
 		{
-			std::string name;
-			gCacheName->getFullName(owner_id, name);
-			args["NAME"] = name;
-
+			args["NAME"] = LLSLURL("agent", owner_id, "inspect").getSLURLString();
 			LLNotificationsUtil::add("ReturnObjectsNotOwnedByUser", args, LLSD(), boost::bind(&LLPanelLandObjects::callbackReturnOtherObjects, panelp, _1, _2));
 		}
 	}
diff --git a/indra/newview/llfloatersellland.cpp b/indra/newview/llfloatersellland.cpp
index 9dddbd998a..ad35581641 100644
--- a/indra/newview/llfloatersellland.cpp
+++ b/indra/newview/llfloatersellland.cpp
@@ -33,6 +33,7 @@
 
 #include "llfloatersellland.h"
 
+#include "llavatarnamecache.h"
 #include "llfloateravatarpicker.h"
 #include "llfloaterreg.h"
 #include "llfloaterland.h"
@@ -47,6 +48,8 @@
 #include "lluictrlfactory.h"
 #include "llviewerwindow.h"
 
+class LLAvatarName;
+
 // defined in llfloaterland.cpp
 void send_parcel_select_objects(S32 parcel_local_id, U32 return_type,
 								uuid_list_t* return_ids = NULL);
@@ -97,6 +100,8 @@ private:
 
 	void callbackAvatarPick(const std::vector<std::string>& names, const uuid_vec_t& ids);
 
+	void onBuyerNameCache(const LLAvatarName& av_name);
+
 public:
 	virtual BOOL postBuild();
 	
@@ -230,12 +235,17 @@ void LLFloaterSellLandUI::updateParcelInfo()
 
 	if(mSellToBuyer)
 	{
-		std::string name;
-		gCacheName->getFullName(mAuthorizedBuyer, name);
-		childSetText("sell_to_agent", name);
+		LLAvatarNameCache::get(mAuthorizedBuyer, 
+			boost::bind(&LLFloaterSellLandUI::onBuyerNameCache, this, _2));
 	}
 }
 
+void LLFloaterSellLandUI::onBuyerNameCache(const LLAvatarName& av_name)
+{
+	childSetText("sell_to_agent", av_name.getNameAndSLID());
+	childSetToolTip("sell_to_agent", av_name.mSLID);
+}
+
 void LLFloaterSellLandUI::setBadge(const char* id, Badge badge)
 {
 	static std::string badgeOK("badge_ok.j2c");
-- 
cgit v1.2.3


From ccc4fbdb1db0ca79b18e9e7f9ba1c2a8d812e5c8 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Wed, 19 May 2010 12:31:57 -0700
Subject: DEV-50263 "Username" hovertip still mentions "Second Life ID"

Now refers to Username.  Also checked with Char to make sure
it's OK to refer to Steller Sunshine (she's fine with it) and
fixed the spelling of "Steller"
---
 indra/newview/skins/default/xui/en/panel_login.xml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml
index 88c264c649..5a671ac78a 100644
--- a/indra/newview/skins/default/xui/en/panel_login.xml
+++ b/indra/newview/skins/default/xui/en/panel_login.xml
@@ -65,13 +65,13 @@ Username:
 <line_editor
 follows="left|bottom"
 height="22"
-label="bobsmith12 or Stellar Sunshine"
+label="bobsmith12 or Steller Sunshine"
 left_delta="0"
 max_length="63"
 name="username_edit"
 prevalidate_callback="ascii" 
 select_on_focus="true"
-tool_tip="[SECOND_LIFE] ID, like bobsmith12 or Stellar Sunshine"
+tool_tip="The username you chose when you registered, like bobsmith12 or Steller Sunshine"
 top_pad="0"
 width="150" />
 <text
-- 
cgit v1.2.3


From 061d38d331f25ceab5d48f5bfb2dbc595134f6ab Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Wed, 19 May 2010 12:34:13 -0700
Subject: DEV-50204 "Ericag Vader" shows when starting IM and local chat

Start with blank header to hide sample text from XUI XML.  Also fixed
problem with computation of minimum chat header name width when the
name wasn't in cache.
---
 indra/newview/llchathistory.cpp | 44 ++++++++++++++++++++++++++++++++---------
 1 file changed, 35 insertions(+), 9 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index 6d98afbc58..a196b4c750 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -106,6 +106,18 @@ LLObjectIMHandler gObjectIMHandler;
 class LLChatHistoryHeader: public LLPanel
 {
 public:
+	LLChatHistoryHeader()
+	:	LLPanel(),
+		mPopupMenuHandleAvatar(),
+		mPopupMenuHandleObject(),
+		mAvatarID(),
+		mSourceType(CHAT_SOURCE_UNKNOWN),
+		mFrom(),
+		mSessionID(),
+		mMinUserNameWidth(0),
+		mUserNameFont(NULL)
+	{}
+
 	static LLChatHistoryHeader* createInstance(const std::string& file_name)
 	{
 		LLChatHistoryHeader* pInstance = new LLChatHistoryHeader;
@@ -249,27 +261,29 @@ public:
 			mSourceType = CHAT_SOURCE_SYSTEM;
 		}
 
-		LLTextBox* userName = getChild<LLTextBox>("user_name");
-
-		userName->setReadOnlyColor(style_params.readonly_color());
-		userName->setColor(style_params.color());
+		mUserNameFont = style_params.font();
+		LLTextBox* user_name = getChild<LLTextBox>("user_name");
+		user_name->setReadOnlyColor(style_params.readonly_color());
+		user_name->setColor(style_params.color());
 		
 		if (chat.mFromName.empty()
 			|| mSourceType == CHAT_SOURCE_SYSTEM
 			|| mAvatarID.isNull())
 		{
 			mFrom = LLTrans::getString("SECOND_LIFE");
-			userName->setValue(mFrom);
+			user_name->setValue(mFrom);
+			updateMinUserNameWidth();
 		}
 		else
 		{
-			// ...from a normal user, lookup the name and fill in later
+			// ...from a normal user, lookup the name and fill in later,
+			// but start with blank so sample data from XUI XML doesn't
+			// flash on the screen
+			user_name->setValue( LLSD() );
 			LLAvatarNameCache::get(mAvatarID,
 				boost::bind(&LLChatHistoryHeader::onAvatarNameCache, this, _1, _2));
 		}
 
-		mMinUserNameWidth = style_params.font()->getWidth(userName->getWText().c_str()) + PADDING;
-
 		setTimeField(chat);
 		
 		LLAvatarIconCtrl* icon = getChild<LLAvatarIconCtrl>("avatar_icon");
@@ -323,15 +337,26 @@ public:
 		LLPanel::draw();
 	}
 
+	void updateMinUserNameWidth()
+	{
+		if (mUserNameFont)
+		{
+			LLTextBox* user_name = getChild<LLTextBox>("user_name");
+			const LLWString& text = user_name->getWText();
+			mMinUserNameWidth = mUserNameFont->getWidth(text.c_str()) + PADDING;
+		}
+	}
+
 	void onAvatarNameCache(const LLUUID& agent_id, const LLAvatarName& av_name)
 	{
 		mFrom = av_name.mDisplayName;
 
 		LLTextBox* user_name = getChild<LLTextBox>("user_name");
 		user_name->setValue( LLSD(av_name.mDisplayName ) );
-
 		user_name->setToolTip( av_name.mUsername );
 		setToolTip( av_name.mUsername );
+		// name might have changed, update width
+		updateMinUserNameWidth();
 	}
 
 protected:
@@ -450,6 +475,7 @@ protected:
 	LLUUID				mSessionID;
 
 	S32					mMinUserNameWidth;
+	const LLFontGL*		mUserNameFont;
 };
 
 LLUICtrl* LLChatHistoryHeader::sInfoCtrl = NULL;
-- 
cgit v1.2.3


From b62d1472be7e64c176ea663562d8747f46ace316 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Wed, 19 May 2010 12:35:22 -0700
Subject: DEV-50265 Login screen should say "Forgot your username or password?"

---
 indra/newview/skins/default/xui/en/panel_login.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml
index 5a671ac78a..14759ad731 100644
--- a/indra/newview/skins/default/xui/en/panel_login.xml
+++ b/indra/newview/skins/default/xui/en/panel_login.xml
@@ -186,7 +186,7 @@ name="forgot_password_text"
 top_pad="12"
 right="-10"
   width="180">
-       Forgot your name or password?
+       Forgot your username or password?
 </text>
 <text
 follows="right|bottom"
-- 
cgit v1.2.3


From 56839abe91ce11a5137b18aace9a1148e31e2642 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Wed, 19 May 2010 14:39:36 -0700
Subject: Updated avatar inspectors to use new legacy name field in
 avatarnamecache

---
 indra/newview/llinspectavatar.cpp | 28 ++--------------------------
 1 file changed, 2 insertions(+), 26 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llinspectavatar.cpp b/indra/newview/llinspectavatar.cpp
index 74bf6e378d..c4144c9844 100644
--- a/indra/newview/llinspectavatar.cpp
+++ b/indra/newview/llinspectavatar.cpp
@@ -144,10 +144,6 @@ private:
 	// Is used to determine if "Add friend" option should be enabled in gear menu
 	bool isNotFriend();
 	
-	// Callback for gCacheName to look up avatar name
-	void onNameCache(const LLUUID& id,
-							 const std::string& name,
-							 bool is_group);
 	void onAvatarNameCache(const LLUUID& agent_id,
 						   const LLAvatarName& av_name);
 	
@@ -375,18 +371,9 @@ void LLInspectAvatar::requestUpdate()
 
 	childSetValue("avatar_icon", LLSD(mAvatarID) );
 
-	// JAMESDEBUG HACK: Request via both legacy name system and new
-	// name system to set mLegacyName for use with mute system
-	gCacheName->get(mAvatarID, false,
-		boost::bind(&LLInspectAvatar::onNameCache,
-			this, _1, _2, _3));
-
-	if (LLAvatarNameCache::useDisplayNames())
-	{
-		LLAvatarNameCache::get(mAvatarID,
+	LLAvatarNameCache::get(mAvatarID,
 			boost::bind(&LLInspectAvatar::onAvatarNameCache,
 				this, _1, _2));
-	}
 }
 
 void LLInspectAvatar::processAvatarData(LLAvatarData* data)
@@ -623,18 +610,6 @@ void LLInspectAvatar::onVolumeChange(const LLSD& data)
 	LLVoiceClient::getInstance()->setUserVolume(mAvatarID, volume);
 }
 
-void LLInspectAvatar::onNameCache(
-	const LLUUID& id,
-	const std::string& full_name,
-	bool is_group)
-{
-	if (id == mAvatarID)
-	{
-		// we need the legacy name for the mute list :-(
-		mLegacyName = full_name;
-	}
-}
-
 void LLInspectAvatar::onAvatarNameCache(
 		const LLUUID& agent_id,
 		const LLAvatarName& av_name)
@@ -643,6 +618,7 @@ void LLInspectAvatar::onAvatarNameCache(
 	{
 		getChild<LLUICtrl>("user_name")->setValue(av_name.mDisplayName);
 		getChild<LLUICtrl>("user_slid")->setValue(av_name.mUsername);
+		mLegacyName = av_name.getLegacyName();
 	}
 }
 
-- 
cgit v1.2.3


From 415cc68810a17bbe29759d6914746b0b9eb5d8a5 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Wed, 19 May 2010 15:06:47 -0700
Subject: Fix name tag update when prefs applied

Reviewed with Leyla
---
 indra/newview/llfloaterpreference.cpp | 1 +
 1 file changed, 1 insertion(+)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index a7e5eedf5f..806572e04d 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -327,6 +327,7 @@ LLFloaterPreference::LLFloaterPreference(const LLSD& key)
 	sSkin = gSavedSettings.getString("SkinCurrent");
 	
 	gSavedSettings.getControl("NameTagShowUsernames")->getCommitSignal()->connect(boost::bind(&handleNameTagOptionChanged,  _2));	
+	gSavedSettings.getControl("NameTagShowFriends")->getCommitSignal()->connect(boost::bind(&handleNameTagOptionChanged,  _2));	
 	gSavedSettings.getControl("UseDisplayNames")->getCommitSignal()->connect(boost::bind(&handleDisplayNamesOptionChanged,  _2));
 }
 
-- 
cgit v1.2.3


From 32f9bd0bcedfa2ba858448c7211a681d81b85b97 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Wed, 19 May 2010 15:07:25 -0700
Subject: DEV-50013 Add 2px line padding to name tags

Should match final requests from Rhett.  Reviewed with Leyla
---
 indra/newview/llhudnametag.cpp | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llhudnametag.cpp b/indra/newview/llhudnametag.cpp
index e444fc88eb..2cb333a717 100644
--- a/indra/newview/llhudnametag.cpp
+++ b/indra/newview/llhudnametag.cpp
@@ -60,7 +60,7 @@ const F32 SPRING_STRENGTH = 0.7f;
 const F32 RESTORATION_SPRING_TIME_CONSTANT = 0.1f;
 const F32 HORIZONTAL_PADDING = 16.f;
 const F32 VERTICAL_PADDING = 12.f;
-const F32 LINE_PADDING = 1;			// aka "leading"
+const F32 LINE_PADDING = 3.f;			// aka "leading"
 const F32 BUFFER_SIZE = 2.f;
 const F32 MIN_EDGE_OVERLAP = 3.f;
 const F32 HUD_TEXT_MAX_WIDTH = 190.f;
@@ -460,7 +460,7 @@ void LLHUDNameTag::renderText(BOOL for_select)
 		LLUI::popMatrix();
 	}
 
-	F32 y_offset = (F32)mOffsetY - 2;  // JAMESDEBUG
+	F32 y_offset = (F32)mOffsetY;
 		
 	// Render label
 	{
@@ -807,6 +807,12 @@ void LLHUDNameTag::updateSize()
 		++iter;
 	}
 
+	// Don't want line spacing under the last line
+	if (height > 0.f)
+	{
+		height -= LINE_PADDING;
+	}
+
 	iter = mLabelSegments.begin();
 	while (iter != mLabelSegments.end())
 	{
-- 
cgit v1.2.3


From 2c87657659eb6cdd0a0f135b78d290ed180cc21d Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Wed, 19 May 2010 16:38:50 -0700
Subject: DEV-50265 Fix clipping of "Forgot your username or password?"

---
 indra/newview/skins/default/xui/en/panel_login.xml | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml
index 14759ad731..0f97301856 100644
--- a/indra/newview/skins/default/xui/en/panel_login.xml
+++ b/indra/newview/skins/default/xui/en/panel_login.xml
@@ -160,8 +160,8 @@ width="135"
 <layout_panel
 follows="right|bottom"
 name="links"
-width="200"
-min_width="200"
+width="205"
+min_width="205"
 user_resize="false"
 height="80">
    <text
@@ -173,7 +173,7 @@ height="16"
 top="12"
 right="-10"
 name="create_new_account_text"
-  width="180">
+  width="200">
        Sign up
  </text>
 <text
@@ -185,7 +185,7 @@ height="16"
 name="forgot_password_text"
 top_pad="12"
 right="-10"
-  width="180">
+  width="200">
        Forgot your username or password?
 </text>
 <text
@@ -197,7 +197,7 @@ height="16"
 name="login_help"
 top_pad="2"
 right="-10"
-    width="180">
+    width="200">
        Need help logging in?   </text>
 <!--  <text
     follows="right|bottom"
-- 
cgit v1.2.3


From 0df5c0e879ef05116565a79cdf344de5c45ee19b Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Thu, 20 May 2010 14:15:27 -0700
Subject: DEV-50013 Tooltip for SLAPP agent inspect links

Reviewed with Erica (language) / Leyla (code)
---
 indra/newview/skins/default/xui/en/strings.xml | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index 2bcae9d39f..83e3fee546 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -89,8 +89,9 @@ or.</string>
 	<!-- tooltips for Urls -->
 	<string name="TooltipHttpUrl">Click to view this web page</string>
 	<string name="TooltipSLURL">Click to view this location's information</string>
-	<string name="TooltipAgentUrl">Click to view this Resident's profile</string>
-	<string name="TooltipAgentMute">Click to mute this Resident</string>
+  <string name="TooltipAgentUrl">Click to view this Resident's profile</string>
+  <string name="TooltipAgentInspect">Learn more about this Resident</string>
+  <string name="TooltipAgentMute">Click to mute this Resident</string>
 	<string name="TooltipAgentUnmute">Click to unmute this Resident</string>
 	<string name="TooltipAgentIM">Click to IM this Resident</string>
 	<string name="TooltipAgentPay">Click to Pay this Resident</string>
-- 
cgit v1.2.3


From e47249777b79d9c7576f5df010de92f9bbb4f999 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Thu, 20 May 2010 14:16:02 -0700
Subject: DEV-50013 Display names for online/offline notifications

Reviewed with Leyla
---
 indra/newview/llcallingcard.cpp | 77 ++++++++++++++++++++++-------------------
 1 file changed, 41 insertions(+), 36 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llcallingcard.cpp b/indra/newview/llcallingcard.cpp
index 36de46a367..645ff1f3e9 100644
--- a/indra/newview/llcallingcard.cpp
+++ b/indra/newview/llcallingcard.cpp
@@ -43,6 +43,7 @@
 //#include <iterator>
 
 #include "indra_constants.h"
+#include "llavatarnamecache.h"
 #include "llcachename.h"
 #include "llstl.h"
 #include "lltimer.h"
@@ -96,8 +97,10 @@ const F32 OFFLINE_SECONDS = FIND_FREQUENCY + 8.0f;
 // static
 LLAvatarTracker LLAvatarTracker::sInstance;
 
-
-
+static void on_avatar_name_cache_notify(const LLUUID& agent_id,
+										const LLAvatarName& av_name,
+										bool online,
+										LLSD payload);
 
 ///----------------------------------------------------------------------------
 /// Class LLAvatarTracker
@@ -681,8 +684,6 @@ void LLAvatarTracker::processNotify(LLMessageSystem* msg, bool online)
 		{
 			tracking_id = mTrackingData->mAvatarID;
 		}
-		BOOL notify = FALSE;
-		LLSD args;
 		LLSD payload;
 		for(S32 i = 0; i < count; ++i)
 		{
@@ -692,16 +693,6 @@ void LLAvatarTracker::processNotify(LLMessageSystem* msg, bool online)
 			if(info)
 			{
 				setBuddyOnline(agent_id,online);
-				if(chat_notify)
-				{
-					std::string full_name;
-					if(gCacheName->getFullName(agent_id, full_name))
-					{
-						notify = TRUE;
-						args["NAME"] = full_name;
-					}
-
-				}
 			}
 			else
 			{
@@ -717,29 +708,12 @@ void LLAvatarTracker::processNotify(LLMessageSystem* msg, bool online)
 			// *TODO: get actual inventory id
 			gInventory.addChangedMask(LLInventoryObserver::CALLING_CARD, LLUUID::null);
 		}
-		if(notify)
+		if(chat_notify)
 		{
-			// Popup a notify box with online status of this agent
-			LLNotificationPtr notification;
-
-			if (online)
-			{
-				notification =
-					LLNotificationsUtil::add("FriendOnline",
-											 args,
-											 payload.with("respond_on_mousedown", TRUE),
-											 boost::bind(&LLAvatarActions::startIM, agent_id));
-			}
-			else
-			{
-				notification =
-					LLNotificationsUtil::add("FriendOffline", args, payload);
-			}
-
-			// If there's an open IM session with this agent, send a notification there too.
-			LLUUID session_id = LLIMMgr::computeSessionID(IM_NOTHING_SPECIAL, agent_id);
-			std::string notify_msg = notification->getMessage();
-			LLIMModel::instance().proccessOnlineOfflineNotification(session_id, notify_msg);
+			// Look up the name of this agent for the notification
+			LLAvatarNameCache::get(agent_id,
+				boost::bind(&on_avatar_name_cache_notify,
+					_1, _2, online, payload));
 		}
 
 		mModifyMask |= LLFriendObserver::ONLINE;
@@ -748,6 +722,37 @@ void LLAvatarTracker::processNotify(LLMessageSystem* msg, bool online)
 	}
 }
 
+static void on_avatar_name_cache_notify(const LLUUID& agent_id,
+										const LLAvatarName& av_name,
+										bool online,
+										LLSD payload)
+{
+	// Popup a notify box with online status of this agent
+	// Use display name only because this user is your friend
+	LLSD args;
+	args["NAME"] = av_name.mDisplayName;
+
+	LLNotificationPtr notification;
+	if (online)
+	{
+		notification =
+			LLNotificationsUtil::add("FriendOnline",
+									 args,
+									 payload.with("respond_on_mousedown", TRUE),
+									 boost::bind(&LLAvatarActions::startIM, agent_id));
+	}
+	else
+	{
+		notification =
+			LLNotificationsUtil::add("FriendOffline", args, payload);
+	}
+
+	// If there's an open IM session with this agent, send a notification there too.
+	LLUUID session_id = LLIMMgr::computeSessionID(IM_NOTHING_SPECIAL, agent_id);
+	std::string notify_msg = notification->getMessage();
+	LLIMModel::instance().proccessOnlineOfflineNotification(session_id, notify_msg);
+}
+
 void LLAvatarTracker::formFriendship(const LLUUID& id)
 {
 	if(id.notNull())
-- 
cgit v1.2.3


From c994a93ed11642fc0fe12c1b743215bf63d852ab Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Thu, 20 May 2010 15:30:59 -0700
Subject: DEV-50013 Convert call dialogs to use Display Names

Reviewed with Leyla
---
 indra/newview/llimview.cpp     | 17 +++++++----------
 indra/newview/llvoicevivox.cpp | 19 +++++++++----------
 indra/newview/llvoicevivox.h   |  4 ++--
 3 files changed, 18 insertions(+), 22 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index fa8390f5ab..f615402f9c 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -1749,7 +1749,7 @@ void LLOutgoingCallDialog::show(const LLSD& key)
 	// Beautification:  Since SLID is in the title bar, and you probably
 	// recognize this person's voice, just show display name
 	std::string final_callee_name = callee_name;
-	if (is_avatar)
+	if (mPayload["session_type"].asInteger() == LLIMModel::LLIMSession::P2P_SESSION)
 	{
 		LLAvatarName av_name;
 		if (LLAvatarNameCache::get(callee_id, &av_name))
@@ -1957,8 +1957,9 @@ void LLIncomingCallDialog::setCallerName(const std::string& ui_title,
 										 const std::string& ui_label,
 										 const std::string& call_type)
 {
-	setTitle(ui_title + " " + call_type);
+	setTitle(ui_title);
 
+	// call_type may be a string like " is calling."
 	LLUICtrl* caller_name_widget = getChild<LLUICtrl>("caller name");
 	caller_name_widget->setValue(ui_label + " " + call_type);
 }
@@ -2068,15 +2069,11 @@ void LLIncomingCallDialog::processCallResponse(S32 response)
 					}
 					else
 					{
-						if (gCacheName->getFullName(caller_id, correct_session_name))
+						// *NOTE: really should be using callbacks here
+						LLAvatarName av_name;
+						if (LLAvatarNameCache::get(caller_id, &av_name))
 						{
-							// IDEVO really should be using callbacks here
-							LLAvatarName av_name;
-							if (LLAvatarNameCache::useDisplayNames()
-								&& LLAvatarNameCache::get(caller_id, &av_name))
-							{
-								correct_session_name = av_name.mDisplayName + " (" + av_name.mUsername + ")";
-							}
+							correct_session_name = av_name.mDisplayName + " (" + av_name.mUsername + ")";
 							correct_session_name.append(ADHOC_NAME_SUFFIX); 
 						}
 					}
diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp
index 4a0b0f12a4..409e507c16 100644
--- a/indra/newview/llvoicevivox.cpp
+++ b/indra/newview/llvoicevivox.cpp
@@ -6180,19 +6180,18 @@ void LLVivoxVoiceClient::notifyFriendObservers()
 
 void LLVivoxVoiceClient::lookupName(const LLUUID &id)
 {
-	BOOL is_group = FALSE;
-	gCacheName->get(id, is_group, &LLVivoxVoiceClient::onAvatarNameLookup);
-
-	// Peformance boost:  We're going to need the display name later when
-	// we show the call request floater, so get the request going now
-	LLAvatarName unused;
-	LLAvatarNameCache::get(id, &unused);
+	LLAvatarNameCache::get(id,
+		boost::bind(&LLVivoxVoiceClient::onAvatarNameCache,
+			this, _1, _2));
 }
 
-//static
-void LLVivoxVoiceClient::onAvatarNameLookup(const LLUUID& id, const std::string& name, BOOL is_group)
+void LLVivoxVoiceClient::onAvatarNameCache(const LLUUID& agent_id,
+										   const LLAvatarName& av_name)
 {
-		LLVivoxVoiceClient::getInstance()->avatarNameResolved(id, name);	
+	// For Vivox, we use the legacy name because I'm uncertain whether or
+	// not their service can tolerate switching to Username or Display Name
+	std::string legacy_name = av_name.getLegacyName();
+	avatarNameResolved(agent_id, legacy_name);	
 }
 
 void LLVivoxVoiceClient::avatarNameResolved(const LLUUID &id, const std::string &name)
diff --git a/indra/newview/llvoicevivox.h b/indra/newview/llvoicevivox.h
index e6dd0e9823..341f22bd73 100644
--- a/indra/newview/llvoicevivox.h
+++ b/indra/newview/llvoicevivox.h
@@ -51,7 +51,7 @@ class LLVivoxProtocolParser;
 #endif
 #include "llvoiceclient.h"
 
-
+class LLAvatarName;
 class LLVivoxVoiceAccountProvisionResponder;
 class LLVivoxVoiceClientMuteListObserver;
 class LLVivoxVoiceClientFriendsObserver;	
@@ -619,7 +619,7 @@ protected:
 	void leaveAudioSession();
 	
 	void lookupName(const LLUUID &id);
-	static void onAvatarNameLookup(const LLUUID& id, const std::string& name, BOOL is_group);
+	void onAvatarNameCache(const LLUUID& id, const LLAvatarName& av_name);
 	void avatarNameResolved(const LLUUID &id, const std::string &name);
 		
 private:
-- 
cgit v1.2.3


From be3fb2b578bfc20dda7175cca595a1be53fe23d2 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Thu, 20 May 2010 15:31:58 -0700
Subject: DEV-50266 Allow login with firstname.lastname

Discussed with Gino
---
 indra/newview/llpanellogin.cpp | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp
index d313a95546..632c66a68c 100644
--- a/indra/newview/llpanellogin.cpp
+++ b/indra/newview/llpanellogin.cpp
@@ -618,11 +618,14 @@ void LLPanelLogin::getFields(LLPointer<LLCredential>& credential,
 	}
 	else
 	{
+		// Be lenient in terms of what separators we allow for two-word names
+		// and allow legacy users to login with firstname.lastname
+		separator_index = username.find_first_of(" ._");
 		std::string first = username.substr(0, separator_index);
 		std::string last;
 		if (separator_index != username.npos)
 		{
-			last = username.substr(separator_index, username.npos);
+			last = username.substr(separator_index+1, username.npos);
 			LLStringUtil::trim(last);
 		}
 		else
-- 
cgit v1.2.3


From b637a183c41b091ea1c2e0a2f85987b7b5988afd Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Thu, 20 May 2010 16:15:22 -0700
Subject: DEV-50304 Busy mode response off bottom of preferences

---
 indra/newview/llpanellogin.cpp                                   | 2 +-
 indra/newview/skins/default/xui/en/panel_preferences_general.xml | 5 +++--
 2 files changed, 4 insertions(+), 3 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp
index 632c66a68c..feb36cf7dd 100644
--- a/indra/newview/llpanellogin.cpp
+++ b/indra/newview/llpanellogin.cpp
@@ -532,7 +532,7 @@ void LLPanelLogin::setFields(LLPointer<LLCredential> credential,
 	    std::string login_id = firstname;
 	    if (!lastname.empty() && lastname != "Resident")
 	    {
-		    // support traditional First Last name slurls
+		    // support traditional First Last name SLURLs
 		    login_id += " ";
 		    login_id += lastname;
 	    }
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_general.xml b/indra/newview/skins/default/xui/en/panel_preferences_general.xml
index eabbdc2186..c43784a6f8 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_general.xml
@@ -303,7 +303,7 @@
      left_delta="0"
      name="show_slids"
      tool_tip="Show username, like bobsmith123"
-     top_pad="5" />
+     top_pad="2" />
     <text
      type="string"
      length="1"
@@ -324,6 +324,7 @@
       layout="topleft"
       left_pad="5"
       name="title_afk_text"
+      top_delta="0" 
       width="190">
     Away timeout:
     </text>
@@ -394,7 +395,7 @@
       hover="false"
      commit_on_focus_lost = "true"
      follows="left|top"
-     height="60"
+     height="42"
      layout="topleft"
      left="50"
      name="busy_response"
-- 
cgit v1.2.3


From e7b1a16f071ff0ab253136a284e20d737352a5ca Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Thu, 20 May 2010 16:39:26 -0700
Subject: Strip out debug code related to toggling display names on/off

---
 indra/newview/llfloaterpreference.cpp | 1 +
 indra/newview/llviewermenu.cpp        | 9 ---------
 indra/newview/llvoavatar.cpp          | 8 --------
 indra/newview/llvoavatar.h            | 1 -
 4 files changed, 1 insertion(+), 18 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index 806572e04d..920d09bd7f 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -230,6 +230,7 @@ void handleNameTagOptionChanged(const LLSD& newvalue)
 void handleDisplayNamesOptionChanged(const LLSD& newvalue)
 {
 	LLAvatarNameCache::setUseDisplayNames(newvalue.asBoolean());
+	LLVOAvatar::invalidateNameTags();
 }
 
 
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index b661e1bcd1..f31f1e80e1 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -7588,15 +7588,6 @@ class LLWorldToggleCameraControls : public view_listener_t
 	}
 };
 
-// IDEVO JAMESDEBUG temp code for testing
-void toggle_display_names()
-{
-	bool use = LLAvatarNameCache::useDisplayNames();
-	LLAvatarNameCache::setUseDisplayNames(!use);
-
-	LLVOAvatar::invalidateNameTags();
-}
-
 void show_navbar_context_menu(LLView* ctrl, S32 x, S32 y)
 {
 	static LLMenuGL*	show_navbar_context_menu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_hide_navbar.xml",
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 7e061d69c9..cc38616cb8 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -665,7 +665,6 @@ LLVOAvatar::LLVOAvatar(const LLUUID& id,
 	mNameAlpha(0.f),
 	mRenderGroupTitles(sRenderGroupTitles),
 	mNameCloud(false),
-	mUseDisplayNames( LLAvatarNameCache::useDisplayNames() ),
 	mFirstTEMessageReceived( FALSE ),
 	mFirstAppearanceMessageReceived( FALSE ),
 	mCulled( FALSE ),
@@ -2748,13 +2747,6 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last)
 		new_name = TRUE;
 	}
 
-	// IDEVO HACK to force refresh
-	if (LLAvatarNameCache::useDisplayNames() != mUseDisplayNames)
-	{
-		mUseDisplayNames = LLAvatarNameCache::useDisplayNames();
-		new_name = TRUE;
-	}
-
 	// First Calculate Alpha
 	// If alpha > 0, create mNameText if necessary, otherwise delete it
 	F32 alpha = 0.f;
diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h
index 703066b7a6..c99902a540 100644
--- a/indra/newview/llvoavatar.h
+++ b/indra/newview/llvoavatar.h
@@ -843,7 +843,6 @@ private:
 	bool			mNameCloud;
 	F32				mNameAlpha;
 	BOOL      		mRenderGroupTitles;
-	bool			mUseDisplayNames; // IDEVO HACK to force refresh
 
 	//--------------------------------------------------------------------
 	// Display the name (then optionally fade it out)
-- 
cgit v1.2.3


From 22cef83f9a1008b341c905b0e9840fa37c4930fa Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Fri, 21 May 2010 15:26:18 -0700
Subject: DEV-49489 Money transaction msgs use display names

Server 1.40 will be deployed before Viewer 2.1, and it sends more
extensive money transaction messages, so I removed all the old
crufty localization code.  If Viewer 2.1 connects to an older
server (like a dev grid) money transaction messages will be
English only.  This simplifies the code tremendously.
Reviewed with Leyla
---
 indra/newview/llviewermessage.cpp              | 323 ++++++++++---------------
 indra/newview/skins/default/xui/en/strings.xml |   3 +-
 2 files changed, 136 insertions(+), 190 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index cff1db3230..4188a214a8 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -141,7 +141,6 @@ extern BOOL gDebugClicks;
 // function prototypes
 bool check_offer_throttle(const std::string& from_name, bool check_only);
 static void process_money_balance_reply_extended(LLMessageSystem* msg);
-static void process_money_balance_reply_legacy(const std::string& desc);
 
 //inventory offer throttle globals
 LLFrameTimer gThrottleTimer;
@@ -4852,71 +4851,6 @@ void process_time_dilation(LLMessageSystem *msg, void **user_data)
 }
 */
 
-// Both Product Engine and I wrote solutions to non-localized payment messages.
-// Their code probably has more localized strings against it.
-// James Cook, 2010-03-27
-//
-//static void show_money_balance_notification(const std::string& desc)
-//{
-//	// Intercept some messages constructed in lltransactionflags.cpp
-//	// to fix avatar names and allow localization.
-//	LLSD args;
-//	LLSD payload;
-//	std::string name;
-//	boost::smatch match;
-//	const char* notification_name = NULL;
-//
-//	// <name> paid you L$<amount> for <reason>.
-//	static const boost::regex paid_you_for("(.+) paid you L\\$(\\d+) for (.*)\\.");
-//	// <name> paid you L$<amount>.
-//	static const boost::regex paid_you("(.+) paid you L\\$(\\d+)\\.");
-//	// You paid <name> L$<amount> [for <reason>].
-//	static const boost::regex you_paid("You paid (.*) L\\$(\\d+)(.*)\\.");
-//
-//	if (boost::regex_match(desc, match, paid_you_for))
-//	{
-//		name = match[1].str();
-//		// IDEVO strip legacy "Resident" name
-//		name = LLCacheName::cleanFullName(name);
-//		args["NAME"] = name;
-//		args["AMOUNT"] = match[2].str();
-//		args["REASON"] = match[3].str();
-//		notification_name = "PaymentReceivedFor";
-//	}
-//	else if (boost::regex_match(desc, match, paid_you))
-//	{
-//		name = match[1].str();
-//		// IDEVO strip legacy "Resident" name
-//		name = LLCacheName::cleanFullName(name);
-//		args["NAME"] = name;
-//		args["AMOUNT"] = match[2].str();
-//		notification_name = "PaymentReceived";
-//	}
-//	else if (boost::regex_match(desc, match, you_paid))
-//	{
-//		name = match[1].str();
-//		// IDEVO strip legacy "Resident" name
-//		name = LLCacheName::cleanFullName(name);
-//		args["NAME"] = name;
-//		args["AMOUNT"] = match[2].str();
-//		args["REASON"] = match[3].str();
-//		notification_name = "PaymentSent";
-//	}
-//
-//	// if name extracted and name cache contains avatar id send loggable notification
-//	LLUUID from_id;
-//	if (notification_name != NULL
-//		&& gCacheName->getUUID(name, from_id))
-//	{
-//		payload["from_id"] = from_id;
-//		LLNotificationsUtil::add(notification_name, args, payload);
-//	}
-//	else
-//	{
-//		args["MESSAGE"] = desc;
-//		LLNotificationsUtil::add("SystemMessage", args);
-//	}
-//}
 
 void process_money_balance_reply( LLMessageSystem* msg, void** )
 {
@@ -4969,19 +4903,84 @@ void process_money_balance_reply( LLMessageSystem* msg, void** )
 
 	if (msg->has("TransactionInfo"))
 	{
-		// JAMESDEBUG TODO - for test, do both!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-		process_money_balance_reply_legacy(desc);
-
 		// ...message has extended info for localization
 		process_money_balance_reply_extended(msg);
 	}
 	else
 	{
-		// *NOTE: Can remove this after server 1.40 is widely deployed.
-		process_money_balance_reply_legacy(desc);
+		// Only old dev grids will not supply the TransactionInfo block,
+		// so we can just use the hard-coded English string.
+		LLSD args;
+		args["MESSAGE"] = desc;
+		LLNotificationsUtil::add("SystemMessage", args);
+	}
+}
+
+static std::string reason_from_transaction_type(S32 transaction_type,
+												const std::string& item_desc)
+{
+	// *NOTE: The keys for the reason strings are unusual because
+	// an earlier version of the code used English language strings
+	// extracted from hard-coded server English descriptions.
+	// Keeping them so we don't have to re-localize them.
+	switch (transaction_type)
+	{
+		case TRANS_OBJECT_SALE:
+		{
+			LLStringUtil::format_map_t arg;
+			arg["ITEM"] = item_desc;
+			return LLTrans::getString("for item", arg);
+		}
+		case TRANS_LAND_SALE:
+			return LLTrans::getString("for a parcel of land");
+			
+		case TRANS_LAND_PASS_SALE:
+			return LLTrans::getString("for a land access pass");
+			
+		case TRANS_GROUP_LAND_DEED:
+			return LLTrans::getString("for deeding land");
+			
+		case TRANS_GROUP_CREATE:
+			return LLTrans::getString("to create a group");
+			
+		case TRANS_GROUP_JOIN:
+			return LLTrans::getString("to join a group");
+			
+		case TRANS_UPLOAD_CHARGE:
+			return LLTrans::getString("to upload");
+			
+		default:
+			llwarns << "Unknown transaction type " 
+				<< transaction_type << llendl;
+			return std::string();
 	}
 }
 
+static void money_balance_group_notify(const LLUUID& group_id,
+									   const std::string& name,
+									   bool is_group,
+									   std::string notification,
+									   LLSD args,
+									   LLSD payload)
+{
+	// Message uses name SLURLs, don't actually have to substitute in
+	// the name.  We're just making sure it's available.
+	// Notification is either PaymentReceived or PaymentSent
+	LLNotificationsUtil::add(notification, args, payload);
+}
+
+static void money_balance_avatar_notify(const LLUUID& agent_id,
+										const LLAvatarName& av_name,
+									   	std::string notification,
+									   	LLSD args,
+									   	LLSD payload)
+{
+	// Message uses name SLURLs, don't actually have to substitute in
+	// the name.  We're just making sure it's available.
+	// Notification is either PaymentReceived or PaymentSent
+	LLNotificationsUtil::add(notification, args, payload);
+}
+
 static void process_money_balance_reply_extended(LLMessageSystem* msg)
 {
     // Added in server 1.40 and viewer 2.1, support for localization
@@ -5008,138 +5007,84 @@ static void process_money_balance_reply_extended(LLMessageSystem* msg)
 
 	const char* source_type = (is_source_group ? "group" : "agent");
 	std::string source_slurl =
-		LLSLURL( source_type, source_id, "about").getSLURLString();
+		LLSLURL( source_type, source_id, "inspect").getSLURLString();
 	
 	const char* dest_type = (is_dest_group ? "group" : "agent");
 	std::string dest_slurl =
-		LLSLURL( dest_type, dest_id, "about").getSLURLString();
+		LLSLURL( dest_type, dest_id, "inspect").getSLURLString();
 
-	//
-	//
-	// JAMESDEBUG TODO HERE!!!
-	//
-	//
-
-	switch (transaction_type)
-	{
-	case TRANS_OBJECT_SALE:
-	case TRANS_LAND_SALE:
-	case TRANS_LAND_PASS_SALE:
-	case TRANS_GROUP_LAND_DEED:
-	case TRANS_GROUP_CREATE:
-	case TRANS_GROUP_JOIN:
-	case TRANS_UPLOAD_CHARGE:
-	default:
-		llinfos << "HERE!" << llendl;
-		break;
-	}
-}
-
-// *NOTE: This can be removed after server 1.40 is widely deployed, as it will
-// send an extra TransactionInfo block to allow proper localization.
-static void process_money_balance_reply_legacy(const std::string& desc)
-{
-	LLSD args;
-
-	// this is a marker to retrieve avatar name from server message:
-	// "<avatar name> paid you L$"
-	const std::string marker = "paid you L$";
-
-	args["MESSAGE"] = desc;
-
-	// extract avatar name from system message
-	S32 marker_pos = desc.find(marker, 0);
-
-	std::string base_name = desc.substr(0, marker_pos);
+	std::string reason =
+		reason_from_transaction_type(transaction_type, item_description);
 	
-	std::string name = base_name;
-	LLStringUtil::trim(name);
-
-	// if name extracted and name cache contains avatar id send loggable notification
-	LLUUID from_id;
-	if(name.size() > 0 && gCacheName->getUUID(name, from_id))
+	LLStringUtil::format_map_t args;
+	args["REASON"] = reason; // could be empty
+	args["AMOUNT"] = llformat("%d", amount);
+	
+	// Need to delay until name looked up, so need to know whether or not
+	// is group
+	bool is_name_group = false;
+	LLUUID name_id;
+	std::string message;
+	std::string notification;
+	LLSD final_args;
+	LLSD payload;
+	
+	bool you_paid_someone = (source_id == gAgentID);
+	if (you_paid_someone)
 	{
-		//description always comes not localized. lets fix this
-
-		//ammount paid
-		std::string ammount = desc.substr(marker_pos + marker.length(),desc.length() - marker.length() - marker_pos);
-
-		//reform description
-		LLStringUtil::format_map_t str_args;
-		str_args["NAME"] = LLCacheName::cleanFullName(name);
-		str_args["AMOUNT"] = ammount;
-		std::string new_description = LLTrans::getString("paid_you_ldollars", str_args);
-
-		args["MESSAGE"] = new_description;
-		args["NAME"] = LLCacheName::cleanFullName(name);
-		LLSD payload;
-		payload["from_id"] = from_id;
-		LLNotificationsUtil::add("PaymentReceived", args, payload);
+		args["NAME"] = dest_slurl;
+		is_name_group = is_dest_group;
+		name_id = dest_id;
+		if (!reason.empty())
+		{
+			message = LLTrans::getString("you_paid_ldollars", args);
+		}
+		else
+		{
+			message = LLTrans::getString("you_paid_ldollars_no_reason", args);
+		}
+		final_args["MESSAGE"] = message;
+		notification = "PaymentSent";
 	}
-	//AD *HACK: Parsing incoming string to localize messages that come from server! EXT-5986
-	// It's only a temporarily and ineffective measure. It doesn't affect performance much
-	// because we get here only for specific type of messages, but anyway it is not right to do it!
-	// *TODO: Server-side changes should be made and this code removed.
-	else
-	{
-		if(desc.find("You paid")==0)
+	else {
+		// ...someone paid you
+		args["NAME"] = source_slurl;
+		is_name_group = is_source_group;
+		name_id = source_id;
+		if (!reason.empty())
 		{
-				// Regular expression for message parsing- change it in case of server-side changes.
-				// Each set of parenthesis will later be used to find arguments of message we generate
-				// in the end of this if- (.*) gives us name of money receiver, (\\d+)-amount of money we pay
-				// and ([^$]*)- reason of payment
-				boost::regex expr("You paid (?:.{0}|(.*) )L\\$(\\d+)\\s?([^$]*)\\.");
-				boost::match_results <std::string::const_iterator> matches;
-				if(boost::regex_match(desc, matches, expr))
-				{
-					// Name of full localizable notification string
-					// there are four types of this string- with name of receiver and reason of payment,
-					// without name and without reason (both may also be absent simultaneously).
-					// example of string without name - You paid L$100 to create a group.
-					// example of string without reason - You paid Smdby Linden L$100.
-					// example of string with reason and name - You paid Smbdy Linden L$100 for a land access pass.
-					// example of string with no info - You paid L$50.
-					std::string line = "you_paid_ldollars_no_name";
-
-					// arguments of string which will be in notification
-					LLStringUtil::format_map_t str_args;
-
-					// extracting amount of money paid (without L$ symbols). It is always present.
-					str_args["[AMOUNT]"] = std::string(matches[2]);
-
-					// extracting name of person/group you are paying (it may be absent)
-					std::string name = std::string(matches[1]);
-					if(!name.empty())
-					{
-						str_args["[NAME]"] = LLCacheName::cleanFullName(name);
-						line = "you_paid_ldollars";
-					}
-
-					// extracting reason of payment (it may be absent)
-					std::string reason = std::string(matches[3]);
-					if (reason.empty())
-					{
-						line = name.empty() ? "you_paid_ldollars_no_info" : "you_paid_ldollars_no_reason";
-					}
-					else
-					{
-						std::string localized_reason;
-						// if we haven't found localized string for reason of payment leave it as it was
-						str_args["[REASON]"] =  LLTrans::findString(localized_reason, reason) ? localized_reason : reason;
-					}
-
-					// forming final message string by retrieving localized version from xml
-					// and applying previously found arguments
-					line = LLTrans::getString(line, str_args);
-					args["MESSAGE"] = line;
-				}
+			message = LLTrans::getString("paid_you_ldollars", args);
 		}
+		else {
+			message = LLTrans::getString("paid_you_ldollars_no_reason", args);
+		}
+		final_args["MESSAGE"] = message;
 
-		LLNotificationsUtil::add("SystemMessage", args);
+		// make notification loggable
+		payload["from_id"] = source_id;
+		notification = "PaymentReceived";
 	}
 
+	// Despite using SLURLs, wait until the name is available before
+	// showing the notification, otherwise the UI layout is strange and
+	// the user sees a "Loading..." message
+	if (is_name_group)
+	{
+		gCacheName->get(name_id, true,
+						boost::bind(&money_balance_group_notify,
+									_1, _2, _3,
+									notification, final_args, payload));
+	}
+	else {
+		LLAvatarNameCache::get(name_id,
+							   boost::bind(&money_balance_avatar_notify,
+										   _1, _2,
+										   notification, final_args, payload));										   
+	}
 }
 
+
+
 bool handle_special_notification_callback(const LLSD& notification, const LLSD& response)
 {
 	S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index 83e3fee546..423e3a89c5 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -3092,7 +3092,8 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
 	</string>
   
   <!-- Financial operations strings -->
-  <string name="paid_you_ldollars">[NAME] paid you L$[AMOUNT]</string>
+  <string name="paid_you_ldollars">[NAME] paid you L$[AMOUNT] [REASON].</string>
+  <string name="paid_you_ldollars_no_reason">[NAME] paid you L$[AMOUNT].</string>
   <string name="you_paid_ldollars">You paid [NAME] L$[AMOUNT] [REASON].</string>
   <string name="you_paid_ldollars_no_info">You paid L$[AMOUNT].</string>
   <string name="you_paid_ldollars_no_reason">You paid [NAME] L$[AMOUNT].</string>
-- 
cgit v1.2.3


From 8992232e64155588c64b4ab29bad6766bc6c7ff6 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Fri, 21 May 2010 16:45:35 -0700
Subject: DEV-50013 Display names in mini-map tooltips

Reviewed with Leyla
---
 indra/newview/llnetmap.cpp | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llnetmap.cpp b/indra/newview/llnetmap.cpp
index a8dee8a24a..33d03bd890 100644
--- a/indra/newview/llnetmap.cpp
+++ b/indra/newview/llnetmap.cpp
@@ -37,6 +37,7 @@
 
 // Library includes (should move below)
 #include "indra_constants.h"
+#include "llavatarnamecache.h"
 #include "llmath.h"
 #include "llfloaterreg.h"
 #include "llfocusmgr.h"
@@ -555,11 +556,14 @@ BOOL LLNetMap::handleToolTip( S32 x, S32 y, MASK mask )
 	
 	// mToolTipMsg = "[AGENT][REGION](Double-click to open Map)"
 	
+	bool have_agent = false;
 	LLStringUtil::format_map_t args;
-	std::string fullname;
-	if(mClosestAgentToCursor.notNull() && gCacheName->getFullName(mClosestAgentToCursor, fullname))
+	LLAvatarName av_name;
+	if(mClosestAgentToCursor.notNull()
+	   && LLAvatarNameCache::get(mClosestAgentToCursor, &av_name))
 	{
-		args["[AGENT]"] = fullname + "\n";
+		args["[AGENT]"] = av_name.getNameAndSLID() + "\n";
+		have_agent = true;
 	}
 	else
 	{
@@ -567,7 +571,7 @@ BOOL LLNetMap::handleToolTip( S32 x, S32 y, MASK mask )
 	}
 	
 	LLViewerRegion*	region = LLWorld::getInstance()->getRegionFromPosGlobal( viewPosToGlobal( x, y ) );
-	if( region )
+	if( region && !have_agent)
 	{
 		args["[REGION]"] = region->getName() + "\n";
 	}
-- 
cgit v1.2.3


From d674d11f895b8f3d578cded931cdc1c430379c95 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Fri, 21 May 2010 17:11:31 -0700
Subject: Rename LLAvatarName::getNameAndSLID() to getCompleteName()

Discussed with Leyla/Richard
---
 indra/newview/llavataractions.cpp   | 4 ++--
 indra/newview/llfloaterland.cpp     | 2 +-
 indra/newview/llfloatersellland.cpp | 2 +-
 indra/newview/llimfloater.cpp       | 2 +-
 indra/newview/llimview.cpp          | 2 +-
 indra/newview/llnamelistctrl.cpp    | 4 ++--
 indra/newview/llnetmap.cpp          | 2 +-
 7 files changed, 9 insertions(+), 9 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp
index 708ef1895e..1d1a127dae 100644
--- a/indra/newview/llavataractions.cpp
+++ b/indra/newview/llavataractions.cpp
@@ -190,7 +190,7 @@ void LLAvatarActions::offerTeleport(const uuid_vec_t& ids)
 static void on_avatar_name_cache_start_im(const LLUUID& agent_id,
 										  const LLAvatarName& av_name)
 {
-	std::string name = av_name.getNameAndSLID();
+	std::string name = av_name.getCompleteName();
 	LLUUID session_id = gIMMgr->addSession(name, IM_NOTHING_SPECIAL, agent_id);
 	if (session_id != LLUUID::null)
 	{
@@ -225,7 +225,7 @@ void LLAvatarActions::endIM(const LLUUID& id)
 static void on_avatar_name_cache_start_call(const LLUUID& agent_id,
 											const LLAvatarName& av_name)
 {
-	std::string name = av_name.getNameAndSLID();
+	std::string name = av_name.getCompleteName();
 	LLUUID session_id = gIMMgr->addSession(name, IM_NOTHING_SPECIAL, agent_id, true);
 	if (session_id != LLUUID::null)
 	{
diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp
index 78dea87bfd..d0a15450a0 100644
--- a/indra/newview/llfloaterland.cpp
+++ b/indra/newview/llfloaterland.cpp
@@ -1609,7 +1609,7 @@ void LLPanelLandObjects::processParcelObjectOwnersReply(LLMessageSystem *msg, vo
 		// Placeholder for name.
 		LLAvatarName av_name;
 		LLAvatarNameCache::get(owner_id, &av_name);
-		item_params.columns.add().value(av_name.getNameAndSLID()).font(FONT).column("name");
+		item_params.columns.add().value(av_name.getCompleteName()).font(FONT).column("name");
 
 		object_count_str = llformat("%d", object_count);
 		item_params.columns.add().value(object_count_str).font(FONT).column("count");
diff --git a/indra/newview/llfloatersellland.cpp b/indra/newview/llfloatersellland.cpp
index ebb73baffb..e214b58a9a 100644
--- a/indra/newview/llfloatersellland.cpp
+++ b/indra/newview/llfloatersellland.cpp
@@ -242,7 +242,7 @@ void LLFloaterSellLandUI::updateParcelInfo()
 
 void LLFloaterSellLandUI::onBuyerNameCache(const LLAvatarName& av_name)
 {
-	childSetText("sell_to_agent", av_name.getNameAndSLID());
+	childSetText("sell_to_agent", av_name.getCompleteName());
 	childSetToolTip("sell_to_agent", av_name.mUsername);
 }
 
diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp
index b5b923dcad..1c1d9343aa 100644
--- a/indra/newview/llimfloater.cpp
+++ b/indra/newview/llimfloater.cpp
@@ -331,7 +331,7 @@ void LLIMFloater::onAvatarNameCache(const LLUUID& agent_id,
 {
 	// Use display name only for labels, as the extended name will be in the
 	// floater title
-	std::string ui_title = av_name.getNameAndSLID();
+	std::string ui_title = av_name.getCompleteName();
 	updateSessionName(ui_title, av_name.mDisplayName);
 }
 
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index f615402f9c..e915d3ad70 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -1968,7 +1968,7 @@ void LLIncomingCallDialog::onAvatarNameCache(const LLUUID& agent_id,
 											 const LLAvatarName& av_name,
 											 const std::string& call_type)
 {
-	std::string title = av_name.getNameAndSLID();
+	std::string title = av_name.getCompleteName();
 	setCallerName(title, av_name.mDisplayName, call_type);
 }
 
diff --git a/indra/newview/llnamelistctrl.cpp b/indra/newview/llnamelistctrl.cpp
index 2a7e84256e..a2450fcdd2 100644
--- a/indra/newview/llnamelistctrl.cpp
+++ b/indra/newview/llnamelistctrl.cpp
@@ -306,7 +306,7 @@ LLScrollListItem* LLNameListCtrl::addNameItemRow(
 				if (mShortNames)
 					fullname = av_name.mDisplayName;
 				else
-					fullname = av_name.getNameAndSLID();
+					fullname = av_name.getCompleteName();
 			}
 			else
 			{
@@ -375,7 +375,7 @@ void LLNameListCtrl::onAvatarNameCache(const LLUUID& agent_id,
 	if (mShortNames)
 		name = av_name.mDisplayName;
 	else
-		name = av_name.getNameAndSLID();
+		name = av_name.getCompleteName();
 
 	item_list::iterator iter;
 	for (iter = getItemList().begin(); iter != getItemList().end(); iter++)
diff --git a/indra/newview/llnetmap.cpp b/indra/newview/llnetmap.cpp
index 33d03bd890..67b238ad58 100644
--- a/indra/newview/llnetmap.cpp
+++ b/indra/newview/llnetmap.cpp
@@ -562,7 +562,7 @@ BOOL LLNetMap::handleToolTip( S32 x, S32 y, MASK mask )
 	if(mClosestAgentToCursor.notNull()
 	   && LLAvatarNameCache::get(mClosestAgentToCursor, &av_name))
 	{
-		args["[AGENT]"] = av_name.getNameAndSLID() + "\n";
+		args["[AGENT]"] = av_name.getCompleteName() + "\n";
 		have_agent = true;
 	}
 	else
-- 
cgit v1.2.3


From 01fa1379931ea41813e33a4228dcb8a156f609e7 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Mon, 24 May 2010 15:36:30 -0700
Subject: DEV-50013 Use new cache to get legacy name for Vivox

---
 indra/newview/llvoicevivox.cpp | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp
index 409e507c16..a9e14e4e89 100644
--- a/indra/newview/llvoicevivox.cpp
+++ b/indra/newview/llvoicevivox.cpp
@@ -2658,12 +2658,16 @@ void LLVivoxVoiceClient::buildLocalAudioUpdates(std::ostringstream &stream)
 
 void LLVivoxVoiceClient::checkFriend(const LLUUID& id)
 {
-	std::string name;
 	buddyListEntry *buddy = findBuddy(id);
 
 	// Make sure we don't add a name before it's been looked up.
-	if(gCacheName->getFullName(id, name))
+	LLAvatarName av_name;
+	if(LLAvatarNameCache::get(id, &av_name))
 	{
+		// *NOTE: For now, we feed legacy names to Vivox because I don't know
+		// if their service can support a mix of new and old clients with
+		// different sorts of names.
+		std::string name = av_name.getLegacyName();
 
 		const LLRelationship* relationInfo = LLAvatarTracker::instance().getBuddyInfo(id);
 		bool canSeeMeOnline = false;
-- 
cgit v1.2.3


From 3b0bb8159605685befd79784ddcf6feadee36b67 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Mon, 24 May 2010 16:58:49 -0700
Subject: DEV-50013 Add "Reset" button to Set Name dialog

Reviewed with Richard
---
 indra/newview/llpanelme.cpp                          | 14 ++++++++++++--
 indra/newview/skins/default/xui/en/notifications.xml |  8 +++++++-
 2 files changed, 19 insertions(+), 3 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llpanelme.cpp b/indra/newview/llpanelme.cpp
index c1d02fae39..544ca47da4 100644
--- a/indra/newview/llpanelme.cpp
+++ b/indra/newview/llpanelme.cpp
@@ -347,12 +347,22 @@ void LLPanelMyProfileEdit::onCacheSetName(bool success,
 void LLPanelMyProfileEdit::onDialogSetName(const LLSD& notification, const LLSD& response)
 {
 	S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
-	if (option == 0)
+	if (option == 0 || option == 1)
 	{
 		LLUUID agent_id = notification["payload"]["agent_id"];
 		if (agent_id.isNull()) return;
 
-		std::string display_name_utf8 = response["display_name"].asString();
+		std::string display_name_utf8;
+		if (option == 0)
+		{
+			// user gave us a name
+			display_name_utf8 = response["display_name"].asString();
+		}
+		else
+		{
+			// reset back to People API default
+			display_name_utf8 = "";
+		}
 
 		const U32 DISPLAY_NAME_MAX_LENGTH = 31; // characters, not bytes
 		LLWString display_name_wstr = utf8string_to_wstring(display_name_utf8);
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index cc32941633..51b88cf59a 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -3145,7 +3145,9 @@ You are no longer frozen.
    icon="alertmodal.tga"
    name="SetDisplayName"
    type="alertmodal">
-Change your display name?
+Change your display name (used for name tags, chat, etc.)?
+
+You can also reset it back to your original username.
     <form name="form">
       <input name="display_name" type="text">
 [DISPLAY_NAME]
@@ -3157,6 +3159,10 @@ Change your display name?
        text="Change"/>
       <button
        index="1"
+       name="Reset"
+       text="Reset"/>
+      <button
+       index="2"
        name="Cancel"
        text="Cancel"/>
     </form>
-- 
cgit v1.2.3


From 4ea7d2de9fcab4dd4694fcbbd2fece1c57f41d2c Mon Sep 17 00:00:00 2001
From: Richard Nelson <none@none>
Date: Mon, 24 May 2010 17:25:35 -0700
Subject: DEV-50271 FIX SLURL support for non-clickable display names reviewed
 by James

---
 indra/newview/llpanelplaceprofile.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llpanelplaceprofile.cpp b/indra/newview/llpanelplaceprofile.cpp
index 4a5be96a5e..23171d5ff2 100644
--- a/indra/newview/llpanelplaceprofile.cpp
+++ b/indra/newview/llpanelplaceprofile.cpp
@@ -50,7 +50,7 @@
 #include "llagentui.h"
 #include "llappviewer.h"
 #include "llcallbacklist.h"
-#include "llfloaterbuycurrency.h"
+#include "llbuycurrencyhtml.h"
 #include "llslurl.h"
 #include "llstatusbar.h"
 #include "llviewercontrol.h"
-- 
cgit v1.2.3


From 77e6fcd4230f7540c9f4d6f3d503737c6eaf408c Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Tue, 25 May 2010 11:39:06 -0700
Subject: DEV-50013 WIP gCacheName->getGroup() to distinguish from av lookups

Helps with global finds looking for remaining calls to patch.
Reviewed with Leyla.
---
 indra/newview/llinspectgroup.cpp  | 2 +-
 indra/newview/llviewermessage.cpp | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llinspectgroup.cpp b/indra/newview/llinspectgroup.cpp
index 364da3f64c..fa1640c4c7 100644
--- a/indra/newview/llinspectgroup.cpp
+++ b/indra/newview/llinspectgroup.cpp
@@ -224,7 +224,7 @@ void LLInspectGroup::requestUpdate()
 	mPropertiesRequest = new LLFetchGroupData(mGroupID, this);
 
 	// Name lookup will be faster out of cache, use that
-	gCacheName->get(mGroupID, true,
+	gCacheName->getGroup(mGroupID,
 		boost::bind(&LLInspectGroup::nameUpdatedCallback,
 			this, _1, _2, _3));
 }
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 4188a214a8..3d486d3889 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -5070,7 +5070,7 @@ static void process_money_balance_reply_extended(LLMessageSystem* msg)
 	// the user sees a "Loading..." message
 	if (is_name_group)
 	{
-		gCacheName->get(name_id, true,
+		gCacheName->getGroup(name_id,
 						boost::bind(&money_balance_group_notify,
 									_1, _2, _3,
 									notification, final_args, payload));
-- 
cgit v1.2.3


From fb51f985c35f5dae85057ad932928b8fcd44cc73 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Tue, 25 May 2010 11:39:25 -0700
Subject: DEV-50013 Avatar icons use username for tooltip

Reviewed with Leyla.
---
 indra/newview/llavatariconctrl.cpp | 27 ++++++++++++++++-----------
 indra/newview/llavatariconctrl.h   |  7 +++----
 2 files changed, 19 insertions(+), 15 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llavatariconctrl.cpp b/indra/newview/llavatariconctrl.cpp
index 11cc456695..f4d5d45726 100644
--- a/indra/newview/llavatariconctrl.cpp
+++ b/indra/newview/llavatariconctrl.cpp
@@ -34,17 +34,19 @@
 
 #include "llavatariconctrl.h"
 
+// viewer includes
 #include "llagent.h"
 #include "llavatarconstants.h"
 #include "llcallingcard.h" // for LLAvatarTracker
 #include "llavataractions.h"
 #include "llmenugl.h"
 #include "lluictrlfactory.h"
-
-#include "llcachename.h"
 #include "llagentdata.h"
 #include "llimfloater.h"
 
+// library includes
+#include "llavatarnamecache.h"
+
 #define MENU_ITEM_VIEW_PROFILE 0
 #define MENU_ITEM_SEND_IM 1
 
@@ -233,6 +235,9 @@ void LLAvatarIconCtrl::setValue(const LLSD& value)
 			// Check if cache already contains image_id for that avatar
 			if (!updateFromCache())
 			{
+				// *TODO: Consider getting avatar icon/badge directly from 
+				// People API, rather than sending AvatarPropertyRequest
+				// messages.  People API already hits the user table.
 				LLIconCtrl::setValue(mDefaultIconName);
 				app->addObserver(mAvatarId, this);
 				app->sendAvatarPropertiesRequest(mAvatarId);
@@ -244,8 +249,9 @@ void LLAvatarIconCtrl::setValue(const LLSD& value)
 		LLIconCtrl::setValue(value);
 	}
 
-	gCacheName->get(mAvatarId, false,
-		boost::bind(&LLAvatarIconCtrl::nameUpdatedCallback, this, _1, _2, _3));
+	LLAvatarNameCache::get(mAvatarId,
+		boost::bind(&LLAvatarIconCtrl::onAvatarNameCache, 
+			this, _1, _2));
 }
 
 bool LLAvatarIconCtrl::updateFromCache()
@@ -288,18 +294,17 @@ void LLAvatarIconCtrl::processProperties(void* data, EAvatarProcessorType type)
 	}
 }
 
-void LLAvatarIconCtrl::nameUpdatedCallback(
-	const LLUUID& id,
-	const std::string& name,
-	bool is_group)
+void LLAvatarIconCtrl::onAvatarNameCache(const LLUUID& agent_id, const LLAvatarName& av_name)
 {
-	if (id == mAvatarId)
+	if (agent_id == mAvatarId)
 	{
-		mFullName = name;
+		// Most avatar icon controls are next to a UI element that shows
+		// a display name, so only show username.
+		mFullName = av_name.mUsername;
 
 		if (mDrawTooltip)
 		{
-			setToolTip(name);
+			setToolTip(mFullName);
 		}
 		else
 		{
diff --git a/indra/newview/llavatariconctrl.h b/indra/newview/llavatariconctrl.h
index a5452ee1d3..5befc73d92 100644
--- a/indra/newview/llavatariconctrl.h
+++ b/indra/newview/llavatariconctrl.h
@@ -37,6 +37,8 @@
 #include "llavatarpropertiesprocessor.h"
 #include "llviewermenu.h"
 
+class LLAvatarName;
+
 class LLAvatarIconIDCache: public LLSingleton<LLAvatarIconIDCache>
 {
 public:
@@ -90,10 +92,7 @@ public:
 	// LLAvatarPropertiesProcessor observer trigger
 	virtual void processProperties(void* data, EAvatarProcessorType type);
 
-	void nameUpdatedCallback(
-		const LLUUID& id,
-		const std::string& name,
-		bool is_group);
+	void onAvatarNameCache(const LLUUID& agent_id, const LLAvatarName& av_name);
 
 	const LLUUID&		getAvatarId() const	{ return mAvatarId; }
 	const std::string&	getFullName() const { return mFullName; }
-- 
cgit v1.2.3


From d6ea42984553b7adb6f26cf2ed094d32e36814d2 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Tue, 25 May 2010 11:40:29 -0700
Subject: DEV-50013 Display names load at startup in local chat/IM history

Had to change the chat log file format to include agent_id.
Code will load viewer 2.0 logs, but viewer 2.0 will just discard
data from 2.1 logs, which seems OK.  Reviewed with Leyla.
---
 indra/newview/llimview.cpp     | 24 +++++++++++++++---------
 indra/newview/lllogchat.cpp    | 27 +++++++++++++++++++++++++--
 indra/newview/lllogchat.h      |  2 +-
 indra/newview/llnearbychat.cpp |  8 ++++++--
 4 files changed, 47 insertions(+), 14 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index e915d3ad70..e6db942bad 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -270,7 +270,7 @@ void LLIMModel::LLIMSession::onVoiceChannelStateChanged(const LLVoiceChannel::ES
 		// no text notifications
 		break;
 	case P2P_SESSION:
-		gCacheName->getFullName(mOtherParticipantID, other_avatar_name);
+		gCacheName->getFullName(mOtherParticipantID, other_avatar_name); // voice
 
 		if(direction == LLVoiceChannel::INCOMING_CALL)
 		{
@@ -405,13 +405,17 @@ void LLIMModel::LLIMSession::addMessagesFromHistory(const std::list<LLSD>& histo
 		const LLSD& msg = *it;
 
 		std::string from = msg[IM_FROM];
-		LLUUID from_id = LLUUID::null;
-		if (msg[IM_FROM_ID].isUndefined())
+		LLUUID from_id;
+		if (msg[IM_FROM_ID].isDefined())
 		{
+			from_id = msg[IM_FROM_ID].asUUID();
+		}
+		else
+		{
+			// Legacy chat logs only wrote the legacy name, not the agent_id
 			gCacheName->getUUID(from, from_id);
 		}
 
-
 		std::string timestamp = msg[IM_TIME];
 		std::string text = msg[IM_TEXT];
 
@@ -2582,7 +2586,7 @@ void LLIMMgr::inviteToSession(
 	{
 		if (caller_name.empty())
 		{
-			gCacheName->get(caller_id, false,
+			gCacheName->get(caller_id, false,  // voice
 				boost::bind(&LLIMMgr::onInviteNameLookup, payload, _1, _2, _3));
 		}
 		else
@@ -2816,12 +2820,14 @@ void LLIMMgr::noteOfflineUsers(
 		for(S32 i = 0; i < count; ++i)
 		{
 			info = at.getBuddyInfo(ids.get(i));
-			std::string full_name;
-			if(info && !info->isOnline()
-			   && gCacheName->getFullName(ids.get(i), full_name))
+			LLAvatarName av_name;
+			if (info
+				&& !info->isOnline()
+				&& LLAvatarNameCache::get(ids.get(i), &av_name))
 			{
 				LLUIString offline = LLTrans::getString("offline_message");
-				offline.setArg("[NAME]", full_name);
+				// Use display name only because this user is your friend
+				offline.setArg("[NAME]", av_name.mDisplayName);
 				im_model.proccessOnlineOfflineNotification(session_id, offline);
 			}
 		}
diff --git a/indra/newview/lllogchat.cpp b/indra/newview/lllogchat.cpp
index be8b2363ad..1d348834fe 100644
--- a/indra/newview/lllogchat.cpp
+++ b/indra/newview/lllogchat.cpp
@@ -426,6 +426,12 @@ void LLChatLogFormatter::format(const LLSD& im, std::ostream& ostr) const
 		return;
 	}
 
+	if (im[IM_FROM_ID].isDefined())
+	{
+		LLUUID from_id = im[IM_FROM_ID].asUUID();
+		ostr << '{' << from_id.asString() << '}';
+	}
+
 	if (im[IM_TIME].isDefined())
 	{
 		std::string timestamp = im[IM_TIME].asString();
@@ -456,15 +462,32 @@ void LLChatLogFormatter::format(const LLSD& im, std::ostream& ostr) const
 	}
 }
 
-bool LLChatLogParser::parse(std::string& raw, LLSD& im)
+bool LLChatLogParser::parse(const std::string& raw, LLSD& im)
 {
 	if (!raw.length()) return false;
 	
 	im = LLSD::emptyMap();
 
+	// In Viewer 2.1 we added UUID to chat/IM logging so we can look up
+	// display names
+	std::string line = raw;
+	if (raw[0] == '{')
+	{
+		const S32 UUID_LEN = 36;
+		size_t pos = line.find_first_of('}');
+		// If it matches, pos will be 37
+		if (pos != line.npos && pos > UUID_LEN)
+		{
+			std::string uuid_string = line.substr(1, UUID_LEN);
+			LLUUID from_id(uuid_string);
+			im[IM_FROM_ID] = from_id;
+			line = line.substr(pos + 1);
+		}
+	}
+
 	//matching a timestamp
 	boost::match_results<std::string::const_iterator> matches;
-	if (!boost::regex_match(raw, matches, TIMESTAMP_AND_STUFF)) return false;
+	if (!boost::regex_match(line, matches, TIMESTAMP_AND_STUFF)) return false;
 	
 	bool has_timestamp = matches[IDX_TIMESTAMP].matched;
 	if (has_timestamp)
diff --git a/indra/newview/lllogchat.h b/indra/newview/lllogchat.h
index 4290e4bbc0..a67b58e55b 100644
--- a/indra/newview/lllogchat.h
+++ b/indra/newview/lllogchat.h
@@ -106,7 +106,7 @@ public:
 	 *
 	 * @return false if failed to parse mandatory data - message text
 	 */
-	static bool parse(std::string& raw, LLSD& im);
+	static bool parse(const std::string& raw, LLSD& im);
 
 protected:
 	LLChatLogParser();
diff --git a/indra/newview/llnearbychat.cpp b/indra/newview/llnearbychat.cpp
index f1c13de8bb..74ede67c97 100644
--- a/indra/newview/llnearbychat.cpp
+++ b/indra/newview/llnearbychat.cpp
@@ -301,8 +301,12 @@ void LLNearbyChat::loadHistory()
 		const LLSD& msg = *it;
 
 		std::string from = msg[IM_FROM];
-		LLUUID from_id = LLUUID::null;
-		if (msg[IM_FROM_ID].isUndefined())
+		LLUUID from_id;
+		if (msg[IM_FROM_ID].isDefined())
+		{
+			from_id = msg[IM_FROM_ID].asUUID();
+		}
+		else
 		{
 			gCacheName->getUUID(from, from_id);
 		}
-- 
cgit v1.2.3


From 5769670cd1dc2cca68f1f890df644d25dd82b3b9 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Tue, 25 May 2010 14:12:46 -0700
Subject: DEV-50291 Text on Buy Land floater cut off when Display Name user
 name combination is long

---
 indra/newview/skins/default/xui/en/floater_buy_land.xml | 17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/floater_buy_land.xml b/indra/newview/skins/default/xui/en/floater_buy_land.xml
index df44b61632..d8a929eee2 100644
--- a/indra/newview/skins/default/xui/en/floater_buy_land.xml
+++ b/indra/newview/skins/default/xui/en/floater_buy_land.xml
@@ -564,7 +564,7 @@ sold with objects
          name="US$6.00/month,billedannually" />
     </combo_box>
     <locate
-     height="10"
+     height="5"
      layout="topleft" />
     <icon
      follows="top|left"
@@ -584,7 +584,7 @@ sold with objects
      left="72"
      name="land_use_action"
      right="438"
-     top="284"
+     top="279"
      width="218">
         Increase your monthly land use fees to US$ 40/month.
     </text>
@@ -603,7 +603,7 @@ sold with objects
 This parcel is 512 m² of land.
     </text>
     <locate
-     height="10"
+     height="5"
      layout="topleft" />
     <icon
      follows="top|left"
@@ -616,14 +616,15 @@ This parcel is 512 m² of land.
     <text
      type="string"
      length="1"
-     bottom_delta="-38"
+     top_delta="10"
      follows="top|left"
      font="SansSerifBig"
-     height="16"
+     height="32"
      layout="topleft"
      left="72"
      name="purchase_action"
-     right="438">
+     right="438"
+     wrap="true">
         Pay Joe Resident L$ 4000 for the land
     </text>
     <text
@@ -646,7 +647,7 @@ This parcel is 512 m² of land.
      left_delta="0"
      name="currency_action"
      top_pad="9"
-     width="90">
+     width="95">
         Buy additional L$
     </text>
     <locate
@@ -661,7 +662,7 @@ This parcel is 512 m² of land.
      layout="topleft"
      left="170"
      name="currency_amt"
-     top="408"
+     top_pad="-25"
      width="80">
         1000
     </line_editor>
-- 
cgit v1.2.3


From 94945f996a689f24d1b553d400e681246459de63 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Tue, 25 May 2010 14:13:26 -0700
Subject: Report abuse floater updated for display names compatibility reviewed
 by James

---
 indra/newview/llfloaterreporter.cpp                | 56 +++++++++-------------
 indra/newview/llfloaterreporter.h                  |  6 ++-
 indra/newview/llinspectavatar.cpp                  | 26 +++++-----
 .../skins/default/xui/en/floater_report_abuse.xml  |  1 -
 4 files changed, 40 insertions(+), 49 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloaterreporter.cpp b/indra/newview/llfloaterreporter.cpp
index bdaf036d0e..021c18fe04 100644
--- a/indra/newview/llfloaterreporter.cpp
+++ b/indra/newview/llfloaterreporter.cpp
@@ -39,6 +39,7 @@
 
 // linden library includes
 #include "llassetstorage.h"
+#include "llavatarnamecache.h"
 #include "llcachename.h"
 #include "llfontgl.h"
 #include "llimagej2c.h"
@@ -183,9 +184,8 @@ BOOL LLFloaterReporter::postBuild()
 	childSetAction("cancel_btn", onClickCancel, this);
 	
 	// grab the user's name
-	std::string fullname;
-	LLAgentUI::buildFullname(fullname);
-	childSetText("reporter_field", fullname);
+	std::string reporter = LLSLURL("agent", gAgent.getID(), "inspect").getSLURLString();
+	childSetText("reporter_field", reporter);
 	
 	center();
 
@@ -268,21 +268,7 @@ void LLFloaterReporter::getObjectInfo(const LLUUID& object_id)
 	
 			if (objectp->isAvatar())
 			{
-				// we have the information we need
-				std::string object_owner;
-
-				LLNameValue* firstname = objectp->getNVPair("FirstName");
-				LLNameValue* lastname =  objectp->getNVPair("LastName");
-				if (firstname && lastname)
-				{
-					object_owner = LLCacheName::buildFullName(
-						firstname->getString(), lastname->getString());
-				}
-				else
-				{
-					object_owner.append("Unknown");
-				}
-				setFromAvatar(mObjectID, object_owner);
+				setFromAvatarID(mObjectID);
 			}
 			else
 			{
@@ -309,11 +295,11 @@ void LLFloaterReporter::onClickSelectAbuser()
 	gFloaterView->getParentFloater(this)->addDependentFloater(LLFloaterAvatarPicker::show(boost::bind(&LLFloaterReporter::callbackAvatarID, this, _1, _2), FALSE, TRUE ));
 }
 
-void LLFloaterReporter::callbackAvatarID(const std::vector<std::string>& names, const uuid_vec_t& ids)
+void LLFloaterReporter::callbackAvatarID(const uuid_vec_t& ids, const std::vector<LLAvatarName> names)
 {
 	if (ids.empty() || names.empty()) return;
 
-	childSetText("abuser_name_edit", names[0] );
+	childSetText("abuser_name_edit", names[0].getNameAndSLID());
 
 	mAbuserID = ids[0];
 
@@ -321,18 +307,27 @@ void LLFloaterReporter::callbackAvatarID(const std::vector<std::string>& names,
 
 }
 
-void LLFloaterReporter::setFromAvatar(const LLUUID& avatar_id, const std::string& avatar_name)
+void LLFloaterReporter::setFromAvatarID(const LLUUID& avatar_id)
 {
 	mAbuserID = mObjectID = avatar_id;
-	mOwnerName = avatar_name;
-
-	std::string avatar_link =
-	  LLSLURL("agent", mObjectID, "inspect").getSLURLString();
+	std::string avatar_link = LLSLURL("agent", mObjectID, "inspect").getSLURLString();
 	childSetText("owner_name", avatar_link);
-	childSetText("object_name", avatar_name);
-	childSetText("abuser_name_edit", avatar_name);
+
+	LLAvatarNameCache::get(avatar_id, boost::bind(&LLFloaterReporter::onAvatarNameCache, this, _1, _2));
 }
 
+void LLFloaterReporter::onAvatarNameCache(const LLUUID& avatar_id, const LLAvatarName& av_name)
+{
+	if (mObjectID == avatar_id)
+	{
+		mOwnerName = av_name.getNameAndSLID();
+		childSetText("object_name", av_name.getNameAndSLID());
+		childSetToolTip("object_name", av_name.getNameAndSLID());
+		childSetText("abuser_name_edit", av_name.getNameAndSLID());
+	}
+}
+
+
 // static
 void LLFloaterReporter::onClickSend(void *userdata)
 {
@@ -472,16 +467,11 @@ void LLFloaterReporter::show(const LLUUID& object_id, const std::string& avatar_
 {
 	LLFloaterReporter* f = LLFloaterReg::showTypedInstance<LLFloaterReporter>("reporter");
 
-	// grab the user's name
-	std::string fullname;
-	LLAgentUI::buildFullname(fullname);
-	f->childSetText("reporter_field", fullname);
-
 	if (avatar_name.empty())
 		// Request info for this object
 		f->getObjectInfo(object_id);
 	else
-		f->setFromAvatar(object_id, avatar_name);
+		f->setFromAvatarID(object_id);
 
 	// Need to deselect on close
 	f->mDeselectOnClose = TRUE;
diff --git a/indra/newview/llfloaterreporter.h b/indra/newview/llfloaterreporter.h
index 23784b7650..1f8526b1de 100644
--- a/indra/newview/llfloaterreporter.h
+++ b/indra/newview/llfloaterreporter.h
@@ -38,6 +38,7 @@
 #include "lluuid.h"
 #include "v3math.h"
 
+class LLAvatarName;
 class LLMessageSystem;
 class LLViewerTexture;
 class LLInventoryItem;
@@ -123,8 +124,9 @@ private:
 	void setPosBox(const LLVector3d &pos);
 	void enableControls(BOOL own_avatar);
 	void getObjectInfo(const LLUUID& object_id);
-	void callbackAvatarID(const std::vector<std::string>& names, const uuid_vec_t& ids);
-	void setFromAvatar(const LLUUID& avatar_id, const std::string& avatar_name = LLStringUtil::null);
+	void callbackAvatarID(const uuid_vec_t& ids, const std::vector<LLAvatarName> names);
+	void setFromAvatarID(const LLUUID& avatar_id);
+	void onAvatarNameCache(const LLUUID& avatar_id, const LLAvatarName& av_name);
 
 private:
 	EReportType		mReportType;
diff --git a/indra/newview/llinspectavatar.cpp b/indra/newview/llinspectavatar.cpp
index c4144c9844..3126676871 100644
--- a/indra/newview/llinspectavatar.cpp
+++ b/indra/newview/llinspectavatar.cpp
@@ -150,7 +150,7 @@ private:
 private:
 	LLUUID				mAvatarID;
 	// Need avatar name information to spawn friend add request
-	std::string			mLegacyName;
+	LLAvatarName		mAvatarName;
 	// an in-flight request for avatar properties from LLAvatarPropertiesProcessor
 	// is represented by this object
 	LLFetchAvatarData*	mPropertiesRequest;
@@ -205,7 +205,7 @@ public:
 LLInspectAvatar::LLInspectAvatar(const LLSD& sd)
 :	LLInspect( LLSD() ),	// single_instance, doesn't really need key
 	mAvatarID(),			// set in onOpen()  *Note: we used to show partner's name but we dont anymore --angela 3rd Dec* 
-	mLegacyName(),
+	mAvatarName(),
 	mPropertiesRequest(NULL)
 {
 	mCommitCallbackRegistrar.add("InspectAvatar.ViewProfile",	boost::bind(&LLInspectAvatar::onClickViewProfile, this));	
@@ -560,7 +560,7 @@ void LLInspectAvatar::updateVolumeSlider()
 
 		LLUICtrl* mute_btn = getChild<LLUICtrl>("mute_btn");
 
-		bool is_linden = LLStringUtil::endsWith(mLegacyName, " Linden");
+		bool is_linden = LLStringUtil::endsWith(mAvatarName.getLegacyName(), " Linden");
 
 		mute_btn->setEnabled( !is_linden);
 		mute_btn->setValue( is_muted );
@@ -591,7 +591,7 @@ void LLInspectAvatar::onClickMuteVolume()
 	LLMuteList* mute_list = LLMuteList::getInstance();
 	bool is_muted = mute_list->isMuted(mAvatarID, LLMute::flagVoiceChat);
 
-	LLMute mute(mAvatarID, mLegacyName, LLMute::AGENT);
+	LLMute mute(mAvatarID, mAvatarName.getLegacyName(), LLMute::AGENT);
 	if (!is_muted)
 	{
 		mute_list->add(mute, LLMute::flagVoiceChat);
@@ -618,13 +618,13 @@ void LLInspectAvatar::onAvatarNameCache(
 	{
 		getChild<LLUICtrl>("user_name")->setValue(av_name.mDisplayName);
 		getChild<LLUICtrl>("user_slid")->setValue(av_name.mUsername);
-		mLegacyName = av_name.getLegacyName();
+		mAvatarName = av_name;
 	}
 }
 
 void LLInspectAvatar::onClickAddFriend()
 {
-	LLAvatarActions::requestFriendshipDialog(mAvatarID, mLegacyName);
+	LLAvatarActions::requestFriendshipDialog(mAvatarID, mAvatarName.getLegacyName());
 	closeFloater();
 }
 
@@ -692,7 +692,7 @@ void LLInspectAvatar::onClickShare()
 
 void LLInspectAvatar::onToggleMute()
 {
-	LLMute mute(mAvatarID, mLegacyName, LLMute::AGENT);
+	LLMute mute(mAvatarID, mAvatarName.getLegacyName(), LLMute::AGENT);
 
 	if (LLMuteList::getInstance()->isMuted(mute.mID, mute.mName))
 	{
@@ -709,7 +709,7 @@ void LLInspectAvatar::onToggleMute()
 
 void LLInspectAvatar::onClickReport()
 {
-	LLFloaterReporter::showFromAvatar(mAvatarID, mLegacyName);
+	LLFloaterReporter::showFromAvatar(mAvatarID, mAvatarName.getNameAndSLID());
 	closeFloater();
 }
 
@@ -733,17 +733,17 @@ void LLInspectAvatar::onClickZoomIn()
 
 void LLInspectAvatar::onClickFindOnMap()
 {
-	gFloaterWorldMap->trackAvatar(mAvatarID, mLegacyName);
+	gFloaterWorldMap->trackAvatar(mAvatarID, mAvatarName.getLegacyName());
 	LLFloaterReg::showInstance("world_map");
 }
 
 
 bool LLInspectAvatar::enableMute()
 {
-		bool is_linden = LLStringUtil::endsWith(mLegacyName, " Linden");
+		bool is_linden = LLStringUtil::endsWith(mAvatarName.getLegacyName(), " Linden");
 		bool is_self = mAvatarID == gAgent.getID();
 
-		if (!is_linden && !is_self && !LLMuteList::getInstance()->isMuted(mAvatarID, mLegacyName))
+		if (!is_linden && !is_self && !LLMuteList::getInstance()->isMuted(mAvatarID, mAvatarName.getLegacyName()))
 		{
 			return true;
 		}
@@ -755,10 +755,10 @@ bool LLInspectAvatar::enableMute()
 
 bool LLInspectAvatar::enableUnmute()
 {
-		bool is_linden = LLStringUtil::endsWith(mLegacyName, " Linden");
+		bool is_linden = LLStringUtil::endsWith(mAvatarName.getLegacyName(), " Linden");
 		bool is_self = mAvatarID == gAgent.getID();
 
-		if (!is_linden && !is_self && LLMuteList::getInstance()->isMuted(mAvatarID, mLegacyName))
+		if (!is_linden && !is_self && LLMuteList::getInstance()->isMuted(mAvatarID, mAvatarName.getLegacyName()))
 		{
 			return true;
 		}
diff --git a/indra/newview/skins/default/xui/en/floater_report_abuse.xml b/indra/newview/skins/default/xui/en/floater_report_abuse.xml
index 21c0bfef48..47383c8010 100644
--- a/indra/newview/skins/default/xui/en/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/en/floater_report_abuse.xml
@@ -373,7 +373,6 @@
      height="23"
      layout="topleft"
      left_delta="0"
-     max_length="32"
      name="abuser_name_edit"
      top_pad="0"
      width="195" />
-- 
cgit v1.2.3


From 216c7d3e9a200975a4bf80df33c0a36a1f82072f Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Tue, 25 May 2010 14:14:08 -0700
Subject: Mappable Buddies now using new LLAvatarNames reviewed by James

---
 indra/newview/llcallingcard.cpp | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llcallingcard.cpp b/indra/newview/llcallingcard.cpp
index 645ff1f3e9..9d22ac0652 100644
--- a/indra/newview/llcallingcard.cpp
+++ b/indra/newview/llcallingcard.cpp
@@ -51,6 +51,7 @@
 #include "message.h"
 
 #include "llagent.h"
+#include "llavatarnamecache.h"
 #include "llbutton.h"
 #include "llinventoryobserver.h"
 #include "llinventorymodel.h"
@@ -873,8 +874,9 @@ bool LLCollectProxyBuddies::operator()(const LLUUID& buddy_id, LLRelationship* b
 
 bool LLCollectMappableBuddies::operator()(const LLUUID& buddy_id, LLRelationship* buddy)
 {
-	gCacheName->getFullName(buddy_id, mFullName);
-	buddy_map_t::value_type value(mFullName, buddy_id);
+	LLAvatarName av_name;
+	LLAvatarNameCache::get( buddy_id, &av_name);
+	buddy_map_t::value_type value(av_name.mDisplayName, buddy_id);
 	if(buddy->isOnline() && buddy->isRightGrantedFrom(LLRelationship::GRANT_MAP_LOCATION))
 	{
 		mMappable.insert(value);
-- 
cgit v1.2.3


From 7fb941042251975919656b792fd4bfd9ebbc42d9 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Tue, 25 May 2010 14:15:26 -0700
Subject: LLFloaterAvatarPicker now uses LLAvatarNames reviewed by James

---
 indra/newview/llfloateravatarpicker.cpp            | 48 +++++++++++++---------
 indra/newview/llfloateravatarpicker.h              |  3 +-
 indra/newview/llfloatergodtools.cpp                |  5 ++-
 indra/newview/llfloatergodtools.h                  |  3 +-
 indra/newview/llfloaterland.cpp                    | 12 +++---
 indra/newview/llfloaterland.h                      |  4 +-
 indra/newview/llfloaterregioninfo.cpp              | 30 ++++++--------
 indra/newview/llfloaterregioninfo.h                |  9 ++--
 indra/newview/llfloatersellland.cpp                |  6 +--
 indra/newview/llpanelblockedlist.cpp               |  5 ++-
 indra/newview/llpanelblockedlist.h                 |  5 ++-
 indra/newview/llpanelgroupinvite.cpp               | 41 ++++++++++++++----
 indra/newview/llpanelpeople.cpp                    |  7 ++--
 indra/newview/llpanelpeople.h                      |  9 ++--
 .../skins/default/xui/en/floater_avatar_picker.xml |  8 +---
 15 files changed, 113 insertions(+), 82 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloateravatarpicker.cpp b/indra/newview/llfloateravatarpicker.cpp
index e0346222c0..836c832529 100644
--- a/indra/newview/llfloateravatarpicker.cpp
+++ b/indra/newview/llfloateravatarpicker.cpp
@@ -36,8 +36,6 @@
 // Viewer includes
 #include "llagent.h"
 #include "llcallingcard.h"
-#include "lldate.h"				// split()
-#include "lldateutil.h"			// ageFromDate()
 #include "llfocusmgr.h"
 #include "llfloaterreg.h"
 #include "llimview.h"			// for gIMMgr
@@ -61,6 +59,9 @@
 
 //#include "llsdserialize.h"
 
+//put it back as a member once the legacy path is out?
+static std::map<LLUUID, LLAvatarName> sAvatarNameMap;
+
 LLFloaterAvatarPicker* LLFloaterAvatarPicker::show(select_callback_t callback,
 												   BOOL allow_multiple,
 												   BOOL closeOnSelect)
@@ -167,7 +168,7 @@ void LLFloaterAvatarPicker::onBtnFind()
 	find();
 }
 
-static void getSelectedAvatarData(const LLScrollListCtrl* from, std::vector<std::string>& avatar_names, uuid_vec_t& avatar_ids)
+static void getSelectedAvatarData(const LLScrollListCtrl* from, uuid_vec_t& avatar_ids, std::vector<LLAvatarName>& avatar_names)
 {
 	std::vector<LLScrollListItem*> items = from->getAllSelected();
 	for (std::vector<LLScrollListItem*>::iterator iter = items.begin(); iter != items.end(); ++iter)
@@ -175,8 +176,8 @@ static void getSelectedAvatarData(const LLScrollListCtrl* from, std::vector<std:
 		LLScrollListItem* item = *iter;
 		if (item->getUUID().notNull())
 		{
-			avatar_names.push_back(item->getColumn(0)->getValue().asString());
 			avatar_ids.push_back(item->getUUID());
+			avatar_names.push_back(sAvatarNameMap[item->getUUID()]);
 		}
 	}
 }
@@ -212,10 +213,10 @@ void LLFloaterAvatarPicker::onBtnSelect()
 
 		if(list)
 		{
-			std::vector<std::string>	avatar_names;
 			uuid_vec_t			avatar_ids;
-			getSelectedAvatarData(list, avatar_names, avatar_ids);
-			mSelectionCallback(avatar_names, avatar_ids);
+			std::vector<LLAvatarName>	avatar_names;
+			getSelectedAvatarData(list, avatar_ids, avatar_names);
+			mSelectionCallback(avatar_ids, avatar_names);
 		}
 	}
 	getChild<LLScrollListCtrl>("SearchResults")->deselectAllItems(TRUE);
@@ -380,6 +381,9 @@ public:
 
 void LLFloaterAvatarPicker::find()
 {
+	//clear our stored LLAvatarNames
+	sAvatarNameMap.clear();
+
 	std::string text = childGetValue("Edit").asString();
 
 	mQueryID.generate();
@@ -547,6 +551,14 @@ void LLFloaterAvatarPicker::processAvatarPickerReply(LLMessageSystem* msg, void*
 			avatar_name = LLCacheName::buildFullName(first_name, last_name);
 			search_results->setEnabled(TRUE);
 			found_one = TRUE;
+
+			LLAvatarName av_name;
+			av_name.mLegacyFirstName = first_name;
+			av_name.mLegacyLastName = last_name;
+			av_name.mDisplayName = avatar_name;
+			const LLUUID& agent_id = avatar_id;
+			sAvatarNameMap[agent_id] = av_name;
+
 		}
 		LLSD element;
 		element["id"] = avatar_id; // value
@@ -594,20 +606,18 @@ void LLFloaterAvatarPicker::processResponse(const LLUUID& query_id, const LLSD&
 	for ( ; it != agents.endArray(); ++it)
 	{
 		const LLSD& row = *it;
-		item["id"] = row["agent_id"];
+		item["id"] = row["id"];
 		LLSD& columns = item["columns"];
 		columns[0]["column"] = "name";
 		columns[0]["value"] = row["display_name"];
-		columns[1]["column"] = "slid";
-		columns[1]["value"] = row["sl_id"];
-		LLDate account_created = row["account_created"].asDate();
-		S32 year, month, day;
-		account_created.split(&year, &month, &day);
-		std::string age =
-			LLDateUtil::ageFromDate(account_created, LLDate::now());
-		columns[2]["column"] = "age";
-		columns[2]["value"] = age;
+		columns[1]["column"] = "username";
+		columns[1]["value"] = row["username"];
 		search_results->addElement(item);
+
+		// add the avatar name to our list
+		LLAvatarName avatar_name;
+		avatar_name.fromLLSD(row);
+		sAvatarNameMap[row["id"].asUUID()] = avatar_name;
 	}
 
 	childEnable("ok_btn");
@@ -678,8 +688,8 @@ bool LLFloaterAvatarPicker::isSelectBtnEnabled()
 		if(list)
 		{
 			uuid_vec_t avatar_ids;
-			std::vector<std::string> avatar_names;
-			getSelectedAvatarData(list, avatar_names, avatar_ids);
+			std::vector<LLAvatarName> avatar_names;
+			getSelectedAvatarData(list, avatar_ids, avatar_names);
 			return mOkButtonValidateSignal(avatar_ids);
 		}
 	}
diff --git a/indra/newview/llfloateravatarpicker.h b/indra/newview/llfloateravatarpicker.h
index e355b38457..c6f96bee24 100644
--- a/indra/newview/llfloateravatarpicker.h
+++ b/indra/newview/llfloateravatarpicker.h
@@ -37,6 +37,7 @@
 
 #include <vector>
 
+class LLAvatarName;
 class LLScrollListCtrl;
 
 class LLFloaterAvatarPicker : public LLFloater
@@ -46,7 +47,7 @@ public:
 	typedef validate_signal_t::slot_type validate_callback_t;
 
 	// The callback function will be called with an avatar name and UUID.
-	typedef boost::function<void (const std::vector<std::string>&, const uuid_vec_t&)> select_callback_t;
+	typedef boost::function<void (const uuid_vec_t&, const std::vector<LLAvatarName>&)> select_callback_t;
 	// Call this to select an avatar.	
 	static LLFloaterAvatarPicker* show(select_callback_t callback, 
 									   BOOL allow_multiple = FALSE,
diff --git a/indra/newview/llfloatergodtools.cpp b/indra/newview/llfloatergodtools.cpp
index bd07cfdfbf..2959094eea 100644
--- a/indra/newview/llfloatergodtools.cpp
+++ b/indra/newview/llfloatergodtools.cpp
@@ -34,6 +34,7 @@
 
 #include "llfloatergodtools.h"
 
+#include "llavatarnamecache.h"
 #include "llcoord.h"
 #include "llfontgl.h"
 #include "llframetimer.h"
@@ -1151,11 +1152,11 @@ void LLPanelObjectTools::onClickSetBySelection(void* data)
 	panelp->childSetValue("target_avatar_name", name);
 }
 
-void LLPanelObjectTools::callbackAvatarID(const std::vector<std::string>& names, const uuid_vec_t& ids)
+void LLPanelObjectTools::callbackAvatarID(const uuid_vec_t& ids, const std::vector<LLAvatarName> names)
 {
 	if (ids.empty() || names.empty()) return;
 	mTargetAvatar = ids[0];
-	childSetValue("target_avatar_name", names[0]);
+	childSetValue("target_avatar_name", names[0].getNameAndSLID());
 	refresh();
 }
 
diff --git a/indra/newview/llfloatergodtools.h b/indra/newview/llfloatergodtools.h
index aee9db78a3..438f1024ce 100644
--- a/indra/newview/llfloatergodtools.h
+++ b/indra/newview/llfloatergodtools.h
@@ -41,6 +41,7 @@
 #include "llpanel.h"
 #include <vector>
 
+class LLAvatarName;
 class LLButton;
 class LLCheckBoxCtrl;
 class LLComboBox;
@@ -231,7 +232,7 @@ public:
 	void onChangeAnything();
 	void onApplyChanges();
 	void onClickSet();
-	void callbackAvatarID(const std::vector<std::string>& names, const uuid_vec_t& ids);
+	void callbackAvatarID(const uuid_vec_t& ids, const std::vector<LLAvatarName> names);
 	void onClickDeletePublicOwnedBy();
 	void onClickDeleteAllScriptedOwnedBy();
 	void onClickDeleteAllOwnedBy();
diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp
index 78dea87bfd..c4e1f75a27 100644
--- a/indra/newview/llfloaterland.cpp
+++ b/indra/newview/llfloaterland.cpp
@@ -2769,12 +2769,12 @@ void LLPanelLandAccess::onCommitAny(LLUICtrl *ctrl, void *userdata)
 
 void LLPanelLandAccess::onClickAddAccess()
 {
-	gFloaterView->getParentFloater(this)->addDependentFloater(LLFloaterAvatarPicker::show(boost::bind(&LLPanelLandAccess::callbackAvatarCBAccess, this, _1,_2)) );
+	gFloaterView->getParentFloater(this)->addDependentFloater(LLFloaterAvatarPicker::show(boost::bind(&LLPanelLandAccess::callbackAvatarCBAccess, this, _1)) );
 }
 
-void LLPanelLandAccess::callbackAvatarCBAccess(const std::vector<std::string>& names, const uuid_vec_t& ids)
+void LLPanelLandAccess::callbackAvatarCBAccess(const uuid_vec_t& ids)
 {
-	if (!names.empty() && !ids.empty())
+	if (!ids.empty())
 	{
 		LLUUID id = ids[0];
 		LLParcel* parcel = mParcel->getParcel();
@@ -2813,13 +2813,13 @@ void LLPanelLandAccess::onClickRemoveAccess(void* data)
 // static
 void LLPanelLandAccess::onClickAddBanned()
 {
-	gFloaterView->getParentFloater(this)->addDependentFloater(LLFloaterAvatarPicker::show(boost::bind(&LLPanelLandAccess::callbackAvatarCBBanned, this, _1,_2)));
+	gFloaterView->getParentFloater(this)->addDependentFloater(LLFloaterAvatarPicker::show(boost::bind(&LLPanelLandAccess::callbackAvatarCBBanned, this, _1)));
 }
 
 // static
-void LLPanelLandAccess::callbackAvatarCBBanned(const std::vector<std::string>& names, const uuid_vec_t& ids)
+void LLPanelLandAccess::callbackAvatarCBBanned(const uuid_vec_t& ids)
 {
-	if (!names.empty() && !ids.empty())
+	if (!ids.empty())
 	{
 		LLUUID id = ids[0];
 		LLParcel* parcel = mParcel->getParcel();
diff --git a/indra/newview/llfloaterland.h b/indra/newview/llfloaterland.h
index 0a743e5215..e742d04aa0 100644
--- a/indra/newview/llfloaterland.h
+++ b/indra/newview/llfloaterland.h
@@ -379,8 +379,8 @@ public:
 	
 	void onClickAddAccess();
 	void onClickAddBanned();
-	void callbackAvatarCBBanned(const std::vector<std::string>& names, const uuid_vec_t& ids);
-	void callbackAvatarCBAccess(const std::vector<std::string>& names, const uuid_vec_t& ids);
+	void callbackAvatarCBBanned(const uuid_vec_t& ids);
+	void callbackAvatarCBAccess(const uuid_vec_t& ids);
 
 protected:
 	LLNameListCtrl*		mListAccess;
diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp
index fa146342ad..8e98344949 100644
--- a/indra/newview/llfloaterregioninfo.cpp
+++ b/indra/newview/llfloaterregioninfo.cpp
@@ -49,6 +49,7 @@
 
 #include "llagent.h"
 #include "llappviewer.h"
+#include "llavatarname.h"
 #include "llfloateravatarpicker.h"
 #include "llbutton.h" 
 #include "llcheckboxctrl.h"
@@ -606,13 +607,13 @@ void LLPanelRegionGeneralInfo::onClickKick()
 	// this depends on the grandparent view being a floater
 	// in order to set up floater dependency
 	LLFloater* parent_floater = gFloaterView->getParentFloater(this);
-	LLFloater* child_floater = LLFloaterAvatarPicker::show(boost::bind(&LLPanelRegionGeneralInfo::onKickCommit, this, _1,_2), FALSE, TRUE);
+	LLFloater* child_floater = LLFloaterAvatarPicker::show(boost::bind(&LLPanelRegionGeneralInfo::onKickCommit, this, _1), FALSE, TRUE);
 	parent_floater->addDependentFloater(child_floater);
 }
 
-void LLPanelRegionGeneralInfo::onKickCommit(const std::vector<std::string>& names, const uuid_vec_t& ids)
+void LLPanelRegionGeneralInfo::onKickCommit(const uuid_vec_t& ids)
 {
-	if (names.empty() || ids.empty()) return;
+	if (ids.empty()) return;
 	if(ids[0].notNull())
 	{
 		strings_t strings;
@@ -848,11 +849,11 @@ void LLPanelRegionDebugInfo::onClickChooseAvatar()
 }
 
 
-void LLPanelRegionDebugInfo::callbackAvatarID(const std::vector<std::string>& names, const uuid_vec_t& ids)
+void LLPanelRegionDebugInfo::callbackAvatarID(const uuid_vec_t& ids, const std::vector<LLAvatarName> names)
 {
 	if (ids.empty() || names.empty()) return;
 	mTargetAvatar = ids[0];
-	childSetValue("target_avatar_name", LLSD(names[0]));
+	childSetValue("target_avatar_name", names[0].getNameAndSLID());
 	refreshFromRegion( gAgent.getRegion() );
 }
 
@@ -1527,24 +1528,17 @@ void LLPanelEstateInfo::onClickKickUser()
 	// this depends on the grandparent view being a floater
 	// in order to set up floater dependency
 	LLFloater* parent_floater = gFloaterView->getParentFloater(this);
-	LLFloater* child_floater = LLFloaterAvatarPicker::show(boost::bind(&LLPanelEstateInfo::onKickUserCommit, this, _1, _2), FALSE, TRUE);
+	LLFloater* child_floater = LLFloaterAvatarPicker::show(boost::bind(&LLPanelEstateInfo::onKickUserCommit, this, _1), FALSE, TRUE);
 	parent_floater->addDependentFloater(child_floater);
 }
 
-void LLPanelEstateInfo::onKickUserCommit(const std::vector<std::string>& names, const uuid_vec_t& ids)
+void LLPanelEstateInfo::onKickUserCommit(const uuid_vec_t& ids)
 {
-	if (names.empty() || ids.empty()) return;
+	if (ids.empty()) return;
 	
-	//check to make sure there is one valid user and id
-	if( (ids[0].isNull()) ||
-		(names[0].length() == 0) )
-	{
-		return;
-	}
-
 	//Bring up a confirmation dialog
 	LLSD args;
-	args["EVIL_USER"] = names[0];
+	args["EVIL_USER"] = LLSLURL("agent", ids[0], "inspect").getSLURLString();
 	LLSD payload;
 	payload["agent_id"] = ids[0];
 	LLNotificationsUtil::add("EstateKickUser", args, payload, boost::bind(&LLPanelEstateInfo::kickUserConfirm, this, _1, _2));
@@ -1710,12 +1704,12 @@ bool LLPanelEstateInfo::accessAddCore2(const LLSD& notification, const LLSD& res
 
 	LLEstateAccessChangeInfo* change_info = new LLEstateAccessChangeInfo(notification["payload"]);
 	// avatar picker yes multi-select, yes close-on-select
-	LLFloaterAvatarPicker::show(boost::bind(&LLPanelEstateInfo::accessAddCore3, _1, _2, (void*)change_info), TRUE, TRUE);
+	LLFloaterAvatarPicker::show(boost::bind(&LLPanelEstateInfo::accessAddCore3, _1, (void*)change_info), TRUE, TRUE);
 	return false;
 }
 
 // static
-void LLPanelEstateInfo::accessAddCore3(const std::vector<std::string>& names, const uuid_vec_t& ids, void* data)
+void LLPanelEstateInfo::accessAddCore3(const uuid_vec_t& ids, void* data)
 {
 	LLEstateAccessChangeInfo* change_info = (LLEstateAccessChangeInfo*)data;
 	if (!change_info) return;
diff --git a/indra/newview/llfloaterregioninfo.h b/indra/newview/llfloaterregioninfo.h
index 482ebb3303..13c2e46639 100644
--- a/indra/newview/llfloaterregioninfo.h
+++ b/indra/newview/llfloaterregioninfo.h
@@ -40,6 +40,7 @@
 #include "llhost.h"
 #include "llpanel.h"
 
+class LLAvatarName;
 class LLDispatcher;
 class LLLineEditor;
 class LLMessageSystem;
@@ -168,7 +169,7 @@ public:
 protected:
 	virtual BOOL sendUpdate();
 	void onClickKick();
-	void onKickCommit(const std::vector<std::string>& names, const uuid_vec_t& ids);
+	void onKickCommit(const uuid_vec_t& ids);
 	static void onClickKickAll(void* userdata);
 	bool onKickAllCommit(const LLSD& notification, const LLSD& response);
 	static void onClickMessage(void* userdata);
@@ -193,7 +194,7 @@ protected:
 	virtual BOOL sendUpdate();
 
 	void onClickChooseAvatar();
-	void callbackAvatarID(const std::vector<std::string>& names, const uuid_vec_t& ids);
+	void callbackAvatarID(const uuid_vec_t& ids, const std::vector<LLAvatarName> names);
 	static void onClickReturn(void *);
 	bool callbackReturn(const LLSD& notification, const LLSD& response);
 	static void onClickTopColliders(void*);
@@ -284,7 +285,7 @@ public:
 	// Core methods for all above add/remove button clicks
 	static void accessAddCore(U32 operation_flag, const std::string& dialog_name);
 	static bool accessAddCore2(const LLSD& notification, const LLSD& response);
-	static void accessAddCore3(const std::vector<std::string>& names, const uuid_vec_t& ids, void* data);
+	static void accessAddCore3(const uuid_vec_t& ids, void* data);
 
 	static void accessRemoveCore(U32 operation_flag, const std::string& dialog_name, const std::string& list_ctrl_name);
 	static bool accessRemoveCore2(const LLSD& notification, const LLSD& response);
@@ -296,7 +297,7 @@ public:
 	// Send the actual EstateOwnerRequest "estateaccessdelta" message
 	static void sendEstateAccessDelta(U32 flags, const LLUUID& agent_id);
 
-	void onKickUserCommit(const std::vector<std::string>& names, const uuid_vec_t& ids);
+	void onKickUserCommit(const uuid_vec_t& ids);
 	static void onClickMessageEstate(void* data);
 	bool onMessageCommit(const LLSD& notification, const LLSD& response);
 	
diff --git a/indra/newview/llfloatersellland.cpp b/indra/newview/llfloatersellland.cpp
index ebb73baffb..94fcb644b4 100644
--- a/indra/newview/llfloatersellland.cpp
+++ b/indra/newview/llfloatersellland.cpp
@@ -98,7 +98,7 @@ private:
 	bool onConfirmSale(const LLSD& notification, const LLSD& response);
 	static void doShowObjects(void *userdata);
 
-	void callbackAvatarPick(const std::vector<std::string>& names, const uuid_vec_t& ids);
+	void callbackAvatarPick(const uuid_vec_t& ids, const std::vector<LLAvatarName> names);
 
 	void onBuyerNameCache(const LLAvatarName& av_name);
 
@@ -401,7 +401,7 @@ void LLFloaterSellLandUI::doSelectAgent()
 	addDependentFloater(LLFloaterAvatarPicker::show(boost::bind(&LLFloaterSellLandUI::callbackAvatarPick, this, _1, _2), FALSE, TRUE));
 }
 
-void LLFloaterSellLandUI::callbackAvatarPick(const std::vector<std::string>& names, const uuid_vec_t& ids)
+void LLFloaterSellLandUI::callbackAvatarPick(const uuid_vec_t& ids, const std::vector<LLAvatarName> names)
 {	
 	LLParcel* parcel = mParcelSelection->getParcel();
 
@@ -412,7 +412,7 @@ void LLFloaterSellLandUI::callbackAvatarPick(const std::vector<std::string>& nam
 
 	mAuthorizedBuyer = ids[0];
 
-	childSetText("sell_to_agent", names[0]);
+	childSetText("sell_to_agent", names[0].getNameAndSLID());
 
 	refreshUI();
 }
diff --git a/indra/newview/llpanelblockedlist.cpp b/indra/newview/llpanelblockedlist.cpp
index c72f0f8012..c3c0af6d9e 100644
--- a/indra/newview/llpanelblockedlist.cpp
+++ b/indra/newview/llpanelblockedlist.cpp
@@ -35,6 +35,7 @@
 #include "llpanelblockedlist.h"
 
 // library include
+#include "llavatarname.h"
 #include "llfloater.h"
 #include "llfloaterreg.h"
 #include "llnotificationsutil.h"
@@ -186,10 +187,10 @@ void LLPanelBlockedList::onBlockByNameClick()
 	LLFloaterGetBlockedObjectName::show(&LLPanelBlockedList::callbackBlockByName);
 }
 
-void LLPanelBlockedList::callbackBlockPicked(const std::vector<std::string>& names, const uuid_vec_t& ids)
+void LLPanelBlockedList::callbackBlockPicked(const uuid_vec_t& ids, const std::vector<LLAvatarName> names)
 {
 	if (names.empty() || ids.empty()) return;
-	LLMute mute(ids[0], names[0], LLMute::AGENT);
+	LLMute mute(ids[0], names[0].getLegacyName(), LLMute::AGENT);
 	LLMuteList::getInstance()->add(mute);
 	showPanelAndSelect(mute.mID);
 }
diff --git a/indra/newview/llpanelblockedlist.h b/indra/newview/llpanelblockedlist.h
index a100577e43..88c1edb1f8 100644
--- a/indra/newview/llpanelblockedlist.h
+++ b/indra/newview/llpanelblockedlist.h
@@ -42,7 +42,8 @@
 // class LLLineEditor;
 // class LLMessageSystem;
 // class LLUUID;
- class LLScrollListCtrl;
+class LLAvatarName;
+class LLScrollListCtrl;
 
 class LLPanelBlockedList
 	:	public LLPanel, public LLMuteListObserver
@@ -78,7 +79,7 @@ private:
 	void onPickBtnClick();
 	void onBlockByNameClick();
 
-	void callbackBlockPicked(const std::vector<std::string>& names, const uuid_vec_t& ids);
+	void callbackBlockPicked(const uuid_vec_t& ids, const std::vector<LLAvatarName> names);
 	static void callbackBlockByName(const std::string& text);
 
 private:
diff --git a/indra/newview/llpanelgroupinvite.cpp b/indra/newview/llpanelgroupinvite.cpp
index 38922e1b99..ed01e8e68a 100644
--- a/indra/newview/llpanelgroupinvite.cpp
+++ b/indra/newview/llpanelgroupinvite.cpp
@@ -34,6 +34,7 @@
 #include "llpanelgroupinvite.h"
 
 #include "llagent.h"
+#include "llavatarnamecache.h"
 #include "llfloateravatarpicker.h"
 #include "llbutton.h"
 #include "llcallingcard.h"
@@ -68,9 +69,13 @@ public:
 	static void callbackClickAdd(void* userdata);
 	static void callbackClickRemove(void* userdata);
 	static void callbackSelect(LLUICtrl* ctrl, void* userdata);
-	static void callbackAddUsers(const std::vector<std::string>& names,
-								 const uuid_vec_t& agent_ids,
+	static void callbackAddUsers(const uuid_vec_t& agent_ids,
 								 void* user_data);
+	
+	static void onAvatarNameCache(const LLUUID& agent_id,
+											 const LLAvatarName& av_name,
+											 void* user_data);
+
 	bool inviteOwnerCallback(const LLSD& notification, const LLSD& response);
 
 public:
@@ -293,7 +298,7 @@ void LLPanelGroupInvite::impl::callbackClickAdd(void* userdata)
 		LLFloater* parentp;
 
 		parentp = gFloaterView->getParentFloater(panelp);
-		parentp->addDependentFloater(LLFloaterAvatarPicker::show(boost::bind(impl::callbackAddUsers, _1, _2,
+		parentp->addDependentFloater(LLFloaterAvatarPicker::show(boost::bind(impl::callbackAddUsers, _1,
 																panelp->mImplementation),
 																 TRUE));
 	}
@@ -359,16 +364,38 @@ void LLPanelGroupInvite::impl::callbackClickOK(void* userdata)
 	if ( selfp ) selfp->submitInvitations();
 }
 
+
+
 //static
-void LLPanelGroupInvite::impl::callbackAddUsers(const std::vector<std::string>& names,
-												const uuid_vec_t& ids,
-												void* user_data)
+void LLPanelGroupInvite::impl::callbackAddUsers(const uuid_vec_t& agent_ids, void* user_data)
+{	
+	std::vector<std::string> names;
+	for (S32 i = 0; i < (S32)agent_ids.size(); i++)
+	{
+		LLAvatarNameCache::get(agent_ids[i],
+			boost::bind(&LLPanelGroupInvite::impl::onAvatarNameCache, _1, _2, user_data));
+	}	
+	
+}
+
+void LLPanelGroupInvite::impl::onAvatarNameCache(const LLUUID& agent_id,
+											 const LLAvatarName& av_name,
+											 void* user_data)
 {
 	impl* selfp = (impl*) user_data;
 
-	if ( selfp) selfp->addUsers(names, ids);
+	if (selfp)
+	{
+		std::vector<std::string> names;
+		uuid_vec_t agent_ids;
+		agent_ids.push_back(agent_id);
+		names.push_back(av_name.getNameAndSLID());
+		
+		selfp->addUsers(names, agent_ids);
+	}
 }
 
+
 LLPanelGroupInvite::LLPanelGroupInvite(const LLUUID& group_id)
 	: LLPanel(),
 	  mImplementation(new impl(group_id)),
diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp
index 0a4af00f78..3da2352209 100644
--- a/indra/newview/llpanelpeople.cpp
+++ b/indra/newview/llpanelpeople.cpp
@@ -33,6 +33,7 @@
 #include "llviewerprecompiledheaders.h"
 
 // libs
+#include "llavatarname.h"
 #include "llfloaterreg.h"
 #include "llmenugl.h"
 #include "llnotificationsutil.h"
@@ -1161,12 +1162,10 @@ void LLPanelPeople::onActivateButtonClicked()
 }
 
 // static
-void LLPanelPeople::onAvatarPicked(
-		const std::vector<std::string>& names,
-		const uuid_vec_t& ids)
+void LLPanelPeople::onAvatarPicked(const uuid_vec_t& ids, const std::vector<LLAvatarName> names)
 {
 	if (!names.empty() && !ids.empty())
-		LLAvatarActions::requestFriendshipDialog(ids[0], names[0]);
+		LLAvatarActions::requestFriendshipDialog(ids[0], names[0].getNameAndSLID());
 }
 
 void LLPanelPeople::onGroupPlusButtonClicked()
diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h
index 17c45a034b..54b53fc12c 100644
--- a/indra/newview/llpanelpeople.h
+++ b/indra/newview/llpanelpeople.h
@@ -38,10 +38,11 @@
 #include "llcallingcard.h" // for avatar tracker
 #include "llvoiceclient.h"
 
-class LLFilterEditor;
-class LLTabContainer;
 class LLAvatarList;
+class LLAvatarName;
+class LLFilterEditor;
 class LLGroupList;
+class LLTabContainer;
 
 class LLPanelPeople 
 	: public LLPanel
@@ -133,9 +134,7 @@ private:
 	bool					onNearbyViewSortMenuItemCheck(const LLSD& userdata);
 
 	// misc callbacks
-	static void				onAvatarPicked(
-								const std::vector<std::string>& names,
-								const uuid_vec_t& ids);
+	static void				onAvatarPicked(const uuid_vec_t& ids, const std::vector<LLAvatarName> names);
 
 	void					onFriendsAccordionExpandedCollapsed(LLUICtrl* ctrl, const LLSD& param, LLAvatarList* avatar_list);
 
diff --git a/indra/newview/skins/default/xui/en/floater_avatar_picker.xml b/indra/newview/skins/default/xui/en/floater_avatar_picker.xml
index 489b7c0536..7ffafe26a2 100644
--- a/indra/newview/skins/default/xui/en/floater_avatar_picker.xml
+++ b/indra/newview/skins/default/xui/en/floater_avatar_picker.xml
@@ -97,12 +97,8 @@
               name="name"
               width="100" />
             <columns
-              label="SL ID"
-              name="slid"
-              width="100" />
-            <columns
-              label="Age"
-              name="age"
+              label="Username"
+              name="username"
               width="100" />
           </scroll_list>
         </panel>
-- 
cgit v1.2.3


From 1bd6061ff57a46293d962adf8ffa5326f87a3566 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Tue, 25 May 2010 14:21:10 -0700
Subject: reverting debug state for sell land button

---
 indra/newview/llfloaterland.cpp | 2 --
 1 file changed, 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp
index c4e1f75a27..d1a926164e 100644
--- a/indra/newview/llfloaterland.cpp
+++ b/indra/newview/llfloaterland.cpp
@@ -586,8 +586,6 @@ void LLPanelLandGeneral::refresh()
 										parcel, GP_LAND_SET_SALE_INFO);
 		BOOL can_be_sold = owner_sellable || estate_manager_sellable;
 
-		can_be_sold = true;
-
 		const LLUUID &owner_id = parcel->getOwnerID();
 		BOOL is_public = parcel->isPublic();
 
-- 
cgit v1.2.3


From b2274765dade87417f5b526c8b72f353ba6f4898 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Tue, 25 May 2010 14:48:55 -0700
Subject: DEV-50013 Group chat moderator tooltip shows username

---
 indra/newview/llavatarlist.cpp      |  8 +++++---
 indra/newview/llavatarlist.h        |  1 -
 indra/newview/llavatarlistitem.cpp  | 19 ++++++++++++++-----
 indra/newview/llavatarlistitem.h    |  6 ++++--
 indra/newview/llcallfloater.cpp     |  3 ++-
 indra/newview/llparticipantlist.cpp | 19 +++++++++++++++++--
 6 files changed, 42 insertions(+), 14 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llavatarlist.cpp b/indra/newview/llavatarlist.cpp
index 0c4a51d7fe..9258ad0256 100644
--- a/indra/newview/llavatarlist.cpp
+++ b/indra/newview/llavatarlist.cpp
@@ -379,7 +379,7 @@ S32 LLAvatarList::notifyParent(const LLSD& info)
 void LLAvatarList::addNewItem(const LLUUID& id, const std::string& name, BOOL is_online, EAddPosition pos)
 {
 	LLAvatarListItem* item = new LLAvatarListItem();
-	item->setName(name);
+	// This sets the name as a side effect
 	item->setAvatarId(id, mSessionID, mIgnoreOnlineStatus);
 	item->setOnline(mIgnoreOnlineStatus ? true : is_online);
 	item->showLastInteractionTime(mShowLastInteractionTime);
@@ -545,11 +545,13 @@ void LLAvalineListItem::setName(const std::string& name)
 		std::string hidden_name = LLTrans::getString("AvalineCaller", args);
 
 		LL_DEBUGS("Avaline") << "Avaline caller: " << uuid << ", name: " << hidden_name << LL_ENDL;
-		LLAvatarListItem::setName(hidden_name);
+		LLAvatarListItem::setAvatarName(hidden_name);
+		LLAvatarListItem::setAvatarToolTip(hidden_name);
 	}
 	else
 	{
 		const std::string& formatted_phone = LLTextUtil::formatPhoneNumber(name);
-		LLAvatarListItem::setName(formatted_phone);
+		LLAvatarListItem::setAvatarName(formatted_phone);
+		LLAvatarListItem::setAvatarToolTip(formatted_phone);
 	}
 }
diff --git a/indra/newview/llavatarlist.h b/indra/newview/llavatarlist.h
index a9320055ca..81b5b2b212 100644
--- a/indra/newview/llavatarlist.h
+++ b/indra/newview/llavatarlist.h
@@ -34,7 +34,6 @@
 #define LL_LLAVATARLIST_H
 
 #include "llflatlistview.h"
-
 #include "llavatarlistitem.h"
 
 class LLTimer;
diff --git a/indra/newview/llavatarlistitem.cpp b/indra/newview/llavatarlistitem.cpp
index 4e018c5784..0fc8460c12 100644
--- a/indra/newview/llavatarlistitem.cpp
+++ b/indra/newview/llavatarlistitem.cpp
@@ -168,10 +168,14 @@ void LLAvatarListItem::setOnline(bool online)
 	setState(online ? IS_ONLINE : IS_OFFLINE);
 }
 
-void LLAvatarListItem::setName(const std::string& name)
+void LLAvatarListItem::setAvatarName(const std::string& name)
 {
 	setNameInternal(name, mHighlihtSubstring);
-	mAvatarName->setToolTip(name);
+}
+
+void LLAvatarListItem::setAvatarToolTip(const std::string& tooltip)
+{
+	mAvatarName->setToolTip(tooltip);
 }
 
 void LLAvatarListItem::setHighlight(const std::string& highlight)
@@ -326,11 +330,16 @@ const LLUUID& LLAvatarListItem::getAvatarId() const
 	return mAvatarId;
 }
 
-const std::string LLAvatarListItem::getAvatarName() const
+std::string LLAvatarListItem::getAvatarName() const
 {
 	return mAvatarName->getValue();
 }
 
+std::string LLAvatarListItem::getAvatarToolTip() const
+{
+	return mAvatarName->getToolTip();
+}
+
 //== PRIVATE SECITON ==========================================================
 
 void LLAvatarListItem::setNameInternal(const std::string& name, const std::string& highlight)
@@ -340,8 +349,8 @@ void LLAvatarListItem::setNameInternal(const std::string& name, const std::strin
 
 void LLAvatarListItem::onAvatarNameCache(const LLAvatarName& av_name)
 {
-	setName(av_name.mDisplayName);
-	mAvatarName->setToolTip(av_name.mUsername);
+	setAvatarName(av_name.mDisplayName);
+	setAvatarToolTip(av_name.mUsername);
 
 	//requesting the list to resort
 	notifyParent(LLSD().with("sort", LLSD()));
diff --git a/indra/newview/llavatarlistitem.h b/indra/newview/llavatarlistitem.h
index a385cffdc2..f8f298d678 100644
--- a/indra/newview/llavatarlistitem.h
+++ b/indra/newview/llavatarlistitem.h
@@ -99,7 +99,8 @@ public:
 	virtual void changed(U32 mask); // from LLFriendObserver
 
 	void setOnline(bool online);
-	void setName(const std::string& name);
+	void setAvatarName(const std::string& name);
+	void setAvatarToolTip(const std::string& tooltip);
 	void setHighlight(const std::string& highlight);
 	void setState(EItemState item_style);
 	void setAvatarId(const LLUUID& id, const LLUUID& session_id, bool ignore_status_changes = false, bool is_resident = true);
@@ -112,7 +113,8 @@ public:
 	void setAvatarIconVisible(bool visible);
 	
 	const LLUUID& getAvatarId() const;
-	const std::string getAvatarName() const;
+	std::string getAvatarName() const;
+	std::string getAvatarToolTip() const;
 
 	void onInfoBtnClick();
 	void onProfileBtnClick();
diff --git a/indra/newview/llcallfloater.cpp b/indra/newview/llcallfloater.cpp
index 44fb4e9e72..69a931fd5b 100644
--- a/indra/newview/llcallfloater.cpp
+++ b/indra/newview/llcallfloater.cpp
@@ -84,7 +84,8 @@ public:
 	void setName(const std::string& name)
 	{
 		const std::string& formatted_phone = LLTextUtil::formatPhoneNumber(name);
-		LLAvatarListItem::setName(formatted_phone);
+		LLAvatarListItem::setAvatarName(formatted_phone);
+		LLAvatarListItem::setAvatarToolTip(formatted_phone);
 	}
 
 	void setSpeakerId(const LLUUID& id) { mSpeakingIndicator->setSpeakerId(id); }
diff --git a/indra/newview/llparticipantlist.cpp b/indra/newview/llparticipantlist.cpp
index 1117ae05d7..6904af75cc 100644
--- a/indra/newview/llparticipantlist.cpp
+++ b/indra/newview/llparticipantlist.cpp
@@ -325,11 +325,18 @@ void LLParticipantList::onAvatarListRefreshed(LLUICtrl* ctrl, const LLSD& param)
 			if ( item )
 			{
 				std::string name = item->getAvatarName();
+				std::string tooltip = item->getAvatarToolTip();
 				size_t found = name.find(moderator_indicator);
 				if (found != std::string::npos)
 				{
 					name.erase(found, moderator_indicator_len);
-					item->setName(name);
+					item->setAvatarName(name);
+				}
+				found = tooltip.find(moderator_indicator);
+				if (found != tooltip.npos)
+				{
+					tooltip.erase(found, moderator_indicator_len);
+					item->setAvatarToolTip(tooltip);
 				}
 			}
 		}
@@ -345,12 +352,20 @@ void LLParticipantList::onAvatarListRefreshed(LLUICtrl* ctrl, const LLSD& param)
 			if ( item )
 			{
 				std::string name = item->getAvatarName();
+				std::string tooltip = item->getAvatarToolTip();
 				size_t found = name.find(moderator_indicator);
 				if (found == std::string::npos)
 				{
 					name += " ";
 					name += moderator_indicator;
-					item->setName(name);
+					item->setAvatarName(name);
+				}
+				found = tooltip.find(moderator_indicator);
+				if (found == std::string::npos)
+				{
+					tooltip += " ";
+					tooltip += moderator_indicator;
+					item->setAvatarToolTip(tooltip);
 				}
 			}
 		}
-- 
cgit v1.2.3


From b26d3f37bef4e10be2b5f7f4f6408485ed3ccae7 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Tue, 25 May 2010 15:07:23 -0700
Subject: fixed merge problem

---
 indra/newview/llavataractions.cpp | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp
index 6cef0b5119..6534f7921c 100644
--- a/indra/newview/llavataractions.cpp
+++ b/indra/newview/llavataractions.cpp
@@ -490,26 +490,24 @@ namespace action_give_inventory
 	 * @param avatar_names - avatar names request to be sent.
 	 * @param avatar_uuids - avatar names request to be sent.
 	 */
-	static void give_inventory(const std::vector<std::string>& avatar_names, const uuid_vec_t& avatar_uuids)
+	static void give_inventory(const uuid_vec_t& avatar_uuids, const std::vector<LLAvatarName> avatar_names)
 	{
-		llassert(avatar_names.size() == avatar_uuids.size());
-
 		LLInventoryPanel* active_panel = LLInventoryPanel::getActiveInventoryPanel(FALSE);
 		if (NULL == active_panel) return;
 
 		const uuid_set_t inventory_selected_uuids = active_panel->getRootFolder()->getSelectionList();
 		if (inventory_selected_uuids.empty()) return;
 
-		S32 count = llmin(avatar_names.size(), avatar_uuids.size());
+		S32 count = avatar_uuids.size();
 
 		// iterate through avatars
 		for(S32 i = 0; i < count; ++i)
 		{
-			const std::string& avatar_name = avatar_names[i];
+			LLAvatarName av_name = avatar_names[i];
 			const LLUUID& avatar_uuid = avatar_uuids[i];
 
 			// Start up IM before give the item
-			const LLUUID session_id = gIMMgr->addSession(avatar_name, IM_NOTHING_SPECIAL, avatar_uuid);
+			const LLUUID session_id = gIMMgr->addSession(av_name.getCompleteName(), IM_NOTHING_SPECIAL, avatar_uuid);
 
 			uuid_set_t::const_iterator it = inventory_selected_uuids.begin();
 			const uuid_set_t::const_iterator it_end = inventory_selected_uuids.end();
-- 
cgit v1.2.3


From 659163c15cb0bb52ca960ddf417b9c6b874c357a Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Tue, 25 May 2010 15:10:42 -0700
Subject: Fix build

---
 indra/newview/llvoavatarself.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llvoavatarself.h b/indra/newview/llvoavatarself.h
index ce37ba2766..606ecad037 100644
--- a/indra/newview/llvoavatarself.h
+++ b/indra/newview/llvoavatarself.h
@@ -213,7 +213,7 @@ public:
 	void				setCachedBakedTexture(LLVOAvatarDefines::ETextureIndex i, const LLUUID& uuid);
 	void				forceBakeAllTextures(bool slam_for_debug = false);
 	static void			processRebakeAvatarTextures(LLMessageSystem* msg, void**);
-	BOOL
+
 protected:
 	/*virtual*/ void	removeMissingBakedTextures();
 private:
-- 
cgit v1.2.3


From cbf5396ea7c303413b37c543fa028dcdfaa12612 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Wed, 26 May 2010 10:48:42 -0700
Subject: DEV-50013 Inventory item properties in sidetray uses completename

---
 indra/newview/llsidepaneliteminfo.cpp | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llsidepaneliteminfo.cpp b/indra/newview/llsidepaneliteminfo.cpp
index 0ec351965a..fabb80ab02 100644
--- a/indra/newview/llsidepaneliteminfo.cpp
+++ b/indra/newview/llsidepaneliteminfo.cpp
@@ -283,8 +283,9 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item)
 
 	if (item->getCreatorUUID().notNull())
 	{
-		std::string name;
-		gCacheName->getFullName(item->getCreatorUUID(), name);
+		LLUUID creator_id = item->getCreatorUUID();
+		std::string name =
+			LLSLURL("agent", creator_id, "completename").getSLURLString();
 		childSetEnabled("BtnCreator",TRUE);
 		childSetEnabled("LabelCreatorTitle",TRUE);
 		childSetEnabled("LabelCreatorName",TRUE);
@@ -310,7 +311,8 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item)
 		}
 		else
 		{
-			gCacheName->getFullName(perm.getOwner(), name);
+			LLUUID owner_id = perm.getOwner();
+			name = LLSLURL("agent", owner_id, "completename").getSLURLString();
 		}
 		childSetEnabled("BtnOwner",TRUE);
 		childSetEnabled("LabelOwnerTitle",TRUE);
-- 
cgit v1.2.3


From fd26a33ff250c3df6eecf1519a4166c0dc2e716f Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Wed, 26 May 2010 10:48:56 -0700
Subject: Added Debug > XUI > Flush Names Caches for testing

---
 indra/newview/llviewermenu.cpp                     | 11 +++++++++++
 indra/newview/skins/default/xui/en/menu_viewer.xml |  6 ++++++
 2 files changed, 17 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index bcd3a79a8a..224bfec9eb 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -7601,6 +7601,16 @@ class LLWorldToggleCameraControls : public view_listener_t
 	}
 };
 
+void handle_flush_name_caches()
+{
+	// Toggle display names on and off to flush
+	bool use_display_names = LLAvatarNameCache::useDisplayNames();
+	LLAvatarNameCache::setUseDisplayNames(!use_display_names);
+	LLAvatarNameCache::setUseDisplayNames(use_display_names);
+
+	if (gCacheName) gCacheName->clear();
+}
+
 void show_navbar_context_menu(LLView* ctrl, S32 x, S32 y)
 {
 	static LLMenuGL*	show_navbar_context_menu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_hide_navbar.xml",
@@ -7849,6 +7859,7 @@ void initialize_menus()
 	view_listener_t::addMenu(new LLAdvancedToggleXUINames(), "Advanced.ToggleXUINames");
 	view_listener_t::addMenu(new LLAdvancedCheckXUINames(), "Advanced.CheckXUINames");
 	view_listener_t::addMenu(new LLAdvancedSendTestIms(), "Advanced.SendTestIMs");
+	commit.add("Advanced.FlushNameCaches", boost::bind(&handle_flush_name_caches));
 
 	// Advanced > Character > Grab Baked Texture
 	view_listener_t::addMenu(new LLAdvancedGrabBakedTexture(), "Advanced.GrabBakedTexture");
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index 16c2581d63..38c3e0229a 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -2576,6 +2576,12 @@
             <menu_item_call.on_click
              function="Advanced.SendTestIMs" />
           </menu_item_call>
+          <menu_item_call
+           label="Flush Names Caches"
+           name="Flush Names Caches">
+            <menu_item_call.on_click
+             function="Advanced.FlushNameCaches" />
+          </menu_item_call>
         </menu>
         <menu
          create_jump_keys="true"
-- 
cgit v1.2.3


From b6a0211a7ef5da8abdc939e5335ba096831f5032 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Wed, 26 May 2010 11:51:48 -0700
Subject: DEV-50013 Inventory item creator/owner not clickable, layout fix

---
 indra/newview/llsidepaneliteminfo.cpp                      | 4 ++--
 indra/newview/skins/default/xui/en/sidepanel_item_info.xml | 4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llsidepaneliteminfo.cpp b/indra/newview/llsidepaneliteminfo.cpp
index fabb80ab02..9373ff0d18 100644
--- a/indra/newview/llsidepaneliteminfo.cpp
+++ b/indra/newview/llsidepaneliteminfo.cpp
@@ -288,7 +288,7 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item)
 			LLSLURL("agent", creator_id, "completename").getSLURLString();
 		childSetEnabled("BtnCreator",TRUE);
 		childSetEnabled("LabelCreatorTitle",TRUE);
-		childSetEnabled("LabelCreatorName",TRUE);
+		childSetEnabled("LabelCreatorName",FALSE);
 		childSetText("LabelCreatorName",name);
 	}
 	else
@@ -316,7 +316,7 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item)
 		}
 		childSetEnabled("BtnOwner",TRUE);
 		childSetEnabled("LabelOwnerTitle",TRUE);
-		childSetEnabled("LabelOwnerName",TRUE);
+		childSetEnabled("LabelOwnerName",FALSE);
 		childSetText("LabelOwnerName",name);
 	}
 	else
diff --git a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
index b840fdd31b..713aaa21a9 100644
--- a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
@@ -156,7 +156,7 @@
      left_pad="5"
 		     name="LabelCreatorName"
 		     top_delta="6"
-		     width="140">
+		     width="180">
 	        Nicole Linden
 	     </text>
 	     <button
@@ -199,7 +199,7 @@
 			   left_pad="5"
 			 name="LabelOwnerName"
 			 top_delta="6"
-			 width="140">
+			 width="180">
 			    Thrax Linden
 	     </text>
 	     <button
-- 
cgit v1.2.3


From b921d251b8708be7922456e69120559e0f4c69fa Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Wed, 26 May 2010 12:02:29 -0700
Subject: DEV-50466 Fix spurious warnings when someone pays you

---
 indra/newview/llviewermessage.cpp | 7 +++++++
 1 file changed, 7 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 21ba38ecfc..ccd2f6ea0e 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -4948,6 +4948,13 @@ static std::string reason_from_transaction_type(S32 transaction_type,
 		case TRANS_UPLOAD_CHARGE:
 			return LLTrans::getString("to upload");
 			
+		// These have no reason to display, but are expected and should not
+		// generate warnings
+		case TRANS_GIFT:
+		case TRANS_PAY_OBJECT:
+		case TRANS_OBJECT_PAYS:
+			return std::string();
+
 		default:
 			llwarns << "Unknown transaction type " 
 				<< transaction_type << llendl;
-- 
cgit v1.2.3


From bd8c1c3b7e121a72c572aa7d12343d9c9dc671af Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Wed, 26 May 2010 15:23:05 -0700
Subject: DEV-50013 Build tools owner/creator show both names, more space

---
 .../newview/skins/default/xui/en/floater_tools.xml | 52 ++++++++++++++--------
 1 file changed, 34 insertions(+), 18 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml
index f06f3e431d..2296d7e681 100644
--- a/indra/newview/skins/default/xui/en/floater_tools.xml
+++ b/indra/newview/skins/default/xui/en/floater_tools.xml
@@ -824,7 +824,7 @@
              height="10"
              left="10"
              name="Name:"
-             top="0"
+             top="4"
              width="90">
                 Name:
             </text>
@@ -863,19 +863,23 @@
              height="19"
              layout="topleft"
              name="Creator:"
+             top_pad="7"
              width="90">
                 Creator:
             </text>
+            <!-- *NOTE: Intentionally wide for long names -->
             <text
              type="string"
              length="1"
              follows="left|top"
              left_pad="0"
-             height="19"
+             height="30"
              layout="topleft"
              name="Creator Name"
-             width="175">
-                Esbee Linden
+             top_delta="0"
+             width="190"
+             word_wrap="true">
+                Mrs. Esbee Linden (esbee.linden)
             </text>
             <text
              type="string"
@@ -885,19 +889,23 @@
              height="19"
              layout="topleft"
              name="Owner:"
+             top_pad="3"
              width="90">
                 Owner:
             </text>
+            <!-- *NOTE: Intentionally wide for long names -->
             <text
              type="string"
              length="1"
              follows="left|top"
-             height="19"
+             height="30"
              layout="topleft"
              name="Owner Name"
              left_pad="0"
-             width="175">
-                Erica Linden
+             top_delta="0"
+             width="190"
+             word_wrap="true">
+                Mrs. Erica "Moose" Linden (erica.linden)
             </text>
            <text
              type="string"
@@ -907,7 +915,7 @@
              left="10"
              height="18"
              name="Group:"
-             top_pad="4"
+             top_pad="7"
              width="75">
                 Group:
             </text>
@@ -960,7 +968,7 @@
              follows="left|top"
              height="16"
              layout="topleft"
-             top_pad="15"
+             top_pad="20"
              left="10"
              name="label click action"
              width="98">
@@ -1066,8 +1074,8 @@ even though the user gets a free copy.
          bg_alpha_color="DkGray"
          name="perms_build"
          left="0"
-         top="241"
-         height="130"
+         top_pad="4"
+         height="105"
          width="290">
             <text
              type="string"
@@ -1138,14 +1146,16 @@ even though the user gets a free copy.
              top_delta="0"
              tool_tip="Next owner can give away or resell this object"
              width="100" />
+<!-- *NOTE: These "B/O/G/E/N/F fields may overlap "perm_modify" above, 
+     but that's OK, this is used only for debugging. -->
             <text
              type="string"
              text_color="EmphasisColor"
              length="1"
-             top_pad="5"
+             top="9"
              follows="left|top"
              layout="topleft"
-             left="10"
+             left="230"
              name="B:"
              height="10"
              width="80">
@@ -1157,7 +1167,8 @@ even though the user gets a free copy.
              length="1"
              follows="left|top"
              layout="topleft"
-             left_pad="0"
+             left_delta="0"
+             top_pad="2"
              name="O:"
              height="10"
              width="80">
@@ -1169,7 +1180,8 @@ even though the user gets a free copy.
              length="1"
              follows="left|top"
              layout="topleft"
-             left_pad="0"
+             left_delta="0"
+             top_pad="2"
              name="G:"
              height="10"
              width="80">
@@ -1180,7 +1192,7 @@ even though the user gets a free copy.
              text_color="White"
              length="1"
              follows="left|top"
-             left="10"
+             left_delta="0"
              top_pad="2"
              layout="topleft"
              name="E:"
@@ -1194,7 +1206,8 @@ even though the user gets a free copy.
              length="1"
              follows="left|top"
              layout="topleft"
-             left_pad="0"
+             left_delta="0"
+             top_pad="2"
              name="N:"
              height="10"
              width="80">
@@ -1206,7 +1219,8 @@ even though the user gets a free copy.
              length="1"
              follows="left|top"
              layout="topleft"
-             left_pad="0"
+             left_delta="0"
+             top_pad="2"
              name="F:"
              height="10"
              width="80">
@@ -1214,6 +1228,7 @@ even though the user gets a free copy.
             </text>
         </panel>
       </panel>
+      <!-- Object tab -->
       <panel
          border="false"
          follows="all"
@@ -2934,4 +2949,5 @@ even though the user gets a free copy.
          top_pad="4"
          width="125" />
  </panel>
+<!-- end of tabs -->
 </floater>
-- 
cgit v1.2.3


From f39d10dc3333ed781b8795fa7dfe3f19b53f875a Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Wed, 26 May 2010 16:23:56 -0700
Subject: LLNameBox -> LLTextBox

---
 indra/newview/llpanelavatar.cpp                    | 12 +++++-------
 indra/newview/llpanelgroupgeneral.cpp              |  5 ++---
 indra/newview/llpanelgroupgeneral.h                |  3 +--
 .../skins/default/xui/en/floater_avatar_picker.xml | 22 ++++++++++++++++------
 .../skins/default/xui/en/panel_edit_profile.xml    |  2 +-
 .../skins/default/xui/en/panel_group_general.xml   |  8 +++-----
 .../skins/default/xui/en/panel_my_profile.xml      |  2 +-
 .../newview/skins/default/xui/en/panel_profile.xml |  2 +-
 8 files changed, 30 insertions(+), 26 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llpanelavatar.cpp b/indra/newview/llpanelavatar.cpp
index e60189d301..56118298fa 100644
--- a/indra/newview/llpanelavatar.cpp
+++ b/indra/newview/llpanelavatar.cpp
@@ -50,7 +50,7 @@
 #include "llfloaterreg.h"
 #include "llnotificationsutil.h"
 #include "llvoiceclient.h"
-#include "llnamebox.h"
+#include "lltextbox.h"
 #include "lltrans.h"
 
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -573,8 +573,7 @@ void LLPanelAvatarProfile::resetData()
 	childSetValue("homepage_edit",LLStringUtil::null);
 	childSetValue("register_date",LLStringUtil::null);
 	childSetValue("acc_status_text",LLStringUtil::null);
-	childSetTextArg("partner_text", "[FIRST]", LLStringUtil::null);
-	childSetTextArg("partner_text", "[LAST]", LLStringUtil::null);
+	childSetValue("partner_text", LLStringUtil::null);
 }
 
 void LLPanelAvatarProfile::processProperties(void* data, EAvatarProcessorType type)
@@ -665,15 +664,14 @@ void LLPanelAvatarProfile::fillCommonData(const LLAvatarData* avatar_data)
 
 void LLPanelAvatarProfile::fillPartnerData(const LLAvatarData* avatar_data)
 {
-	LLNameBox* name_box = getChild<LLNameBox>("partner_text");
+	LLTextBox* partner_text = getChild<LLTextBox>("partner_text");
 	if (avatar_data->partner_id.notNull())
 	{
-		name_box->setNameID(avatar_data->partner_id, FALSE);
+		partner_text->setText(LLSLURL("agent", avatar_data->partner_id, "inspect").getSLURLString());
 	}
 	else
 	{
-		name_box->setNameID(LLUUID::null, FALSE);
-		name_box->setText(getString("no_partner_text"));
+		partner_text->setText(getString("no_partner_text"));
 	}
 }
 
diff --git a/indra/newview/llpanelgroupgeneral.cpp b/indra/newview/llpanelgroupgeneral.cpp
index 555248e31a..d0dd4785ed 100644
--- a/indra/newview/llpanelgroupgeneral.cpp
+++ b/indra/newview/llpanelgroupgeneral.cpp
@@ -46,7 +46,6 @@
 #include "llavataractions.h"
 #include "llgroupactions.h"
 #include "lllineeditor.h"
-#include "llnamebox.h"
 #include "llnamelistctrl.h"
 #include "llnotificationsutil.h"
 #include "llscrolllistitem.h"
@@ -213,7 +212,7 @@ void LLPanelGroupGeneral::setupCtrls(LLPanel* panel_group)
 	{
 		mInsignia->setCommitCallback(onCommitAny, this);
 	}
-	mFounderName = getChild<LLNameBox>("founder_name");
+	mFounderName = getChild<LLTextBox>("founder_name");
 
 
 	mGroupNameEditor = panel_group->getChild<LLLineEditor>("group_name_editor");
@@ -646,7 +645,7 @@ void LLPanelGroupGeneral::update(LLGroupChange gc)
 	if (mEditCharter) mEditCharter->setEnabled(mAllowEdit && can_change_ident);
 	
 	if (mGroupNameEditor) mGroupNameEditor->setVisible(FALSE);
-	if (mFounderName) mFounderName->setNameID(gdatap->mFounderID,FALSE);
+	if (mFounderName) mFounderName->setText(LLSLURL("agent", gdatap->mFounderID, "inspect").getSLURLString());
 	if (mInsignia)
 	{
 		if (gdatap->mInsigniaID.notNull())
diff --git a/indra/newview/llpanelgroupgeneral.h b/indra/newview/llpanelgroupgeneral.h
index 6f4fa994da..066c002634 100644
--- a/indra/newview/llpanelgroupgeneral.h
+++ b/indra/newview/llpanelgroupgeneral.h
@@ -43,7 +43,6 @@ class LLButton;
 class LLNameListCtrl;
 class LLCheckBoxCtrl;
 class LLComboBox;
-class LLNameBox;
 class LLSpinCtrl;
 
 class LLPanelGroupGeneral : public LLPanelGroupTab
@@ -98,7 +97,7 @@ private:
 
 	// Group information (include any updates in updateChanged)
 	LLLineEditor		*mGroupNameEditor;
-	LLNameBox			*mFounderName;
+	LLTextBox			*mFounderName;
 	LLTextureCtrl		*mInsignia;
 	LLTextEditor		*mEditCharter;
 
diff --git a/indra/newview/skins/default/xui/en/floater_avatar_picker.xml b/indra/newview/skins/default/xui/en/floater_avatar_picker.xml
index 7ffafe26a2..a11946d352 100644
--- a/indra/newview/skins/default/xui/en/floater_avatar_picker.xml
+++ b/indra/newview/skins/default/xui/en/floater_avatar_picker.xml
@@ -95,11 +95,11 @@
             <columns
               label="Name"
               name="name"
-              width="100" />
+              width="150" />
             <columns
               label="Username"
               name="username"
-              width="100" />
+              width="150" />
           </scroll_list>
         </panel>
         <panel
@@ -138,7 +138,7 @@
             </button>
             <scroll_list
              follows="all"
-             height="100"
+             height="120"
              border="false"
              layout="topleft"
              left="0"
@@ -204,7 +204,8 @@
              width="28"
              name="Refresh"
              image_overlay="Refresh_Off" />
-            <scroll_list
+          <scroll_list
+             draw_heading="true"
              follows="all"
              height="100"
              border="false"
@@ -212,8 +213,17 @@
              left="0"
              name="NearMe"
              sort_column="0"
-             top="50"
-             width="132" />
+             top="52"
+             width="132">
+            <columns
+              label="Name"
+              name="name"
+              width="150" />
+            <columns
+              label="Username"
+              name="username"
+              width="150" />
+          </scroll_list>
         </panel>
     </tab_container>
     <button
diff --git a/indra/newview/skins/default/xui/en/panel_edit_profile.xml b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
index bce988da9d..8afdec690b 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
@@ -328,7 +328,7 @@
          left="10"
          name="partner_data_panel"
          width="200">
-            <name_box
+            <text
              follows="left|top|right"
              height="30"
              initial_value="(retrieving)"
diff --git a/indra/newview/skins/default/xui/en/panel_group_general.xml b/indra/newview/skins/default/xui/en/panel_group_general.xml
index 9d50db6f79..f90db86975 100644
--- a/indra/newview/skins/default/xui/en/panel_group_general.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_general.xml
@@ -54,17 +54,15 @@ Hover your mouse over the options for more help.
      top_delta="0">
       Founder:
     </text>
-    <name_box
-     follows="left|top"
+     <text
+      follows="left|top"
      height="16"
-     initial_value="(retrieving)"
      layout="topleft"
      left_delta="0"
-     link="true"
      name="founder_name"
      top_pad="2"
      use_ellipses="true"
-     width="190" />
+     width="185" />
     <text
     font="SansSerifMedium"
     text_color="EmphasisColor"
diff --git a/indra/newview/skins/default/xui/en/panel_my_profile.xml b/indra/newview/skins/default/xui/en/panel_my_profile.xml
index 841a4f5713..86713de81b 100644
--- a/indra/newview/skins/default/xui/en/panel_my_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_my_profile.xml
@@ -284,7 +284,7 @@
              name="partner_data_panel"
              top_pad="0"
              width="300">
-              <name_box
+              <text
                follows="left|top"
                height="10"
                initial_value="(retrieving)"
diff --git a/indra/newview/skins/default/xui/en/panel_profile.xml b/indra/newview/skins/default/xui/en/panel_profile.xml
index d7a601d7a3..6a6b74638d 100644
--- a/indra/newview/skins/default/xui/en/panel_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_profile.xml
@@ -263,7 +263,7 @@
              name="partner_data_panel"
              top_pad="0"
              width="300">
-              <name_box
+              <text
                follows="left|top"
                height="10"
                initial_value="(retrieving)"
-- 
cgit v1.2.3


From abcdff128c85c5a1188da8e36510f249e5918899 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Wed, 26 May 2010 16:24:08 -0700
Subject: Resident Chooser fixes

---
 indra/newview/llcallingcard.cpp         |  4 +++-
 indra/newview/llfloateravatarpicker.cpp | 11 ++++++++---
 2 files changed, 11 insertions(+), 4 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llcallingcard.cpp b/indra/newview/llcallingcard.cpp
index 9d22ac0652..7a1524b15e 100644
--- a/indra/newview/llcallingcard.cpp
+++ b/indra/newview/llcallingcard.cpp
@@ -897,7 +897,9 @@ bool LLCollectOnlineBuddies::operator()(const LLUUID& buddy_id, LLRelationship*
 
 bool LLCollectAllBuddies::operator()(const LLUUID& buddy_id, LLRelationship* buddy)
 {
-	gCacheName->getFullName(buddy_id, mFullName);
+	LLAvatarName av_name;
+	LLAvatarNameCache::get(buddy_id, &av_name);
+	mFullName = av_name.mDisplayName;
 	buddy_map_t::value_type value(mFullName, buddy_id);
 	if(buddy->isOnline())
 	{
diff --git a/indra/newview/llfloateravatarpicker.cpp b/indra/newview/llfloateravatarpicker.cpp
index a838746a56..d9c580320a 100644
--- a/indra/newview/llfloateravatarpicker.cpp
+++ b/indra/newview/llfloateravatarpicker.cpp
@@ -266,15 +266,20 @@ void LLFloaterAvatarPicker::populateNearMe()
 		if(av == gAgent.getID()) continue;
 		LLSD element;
 		element["id"] = av; // value
-		std::string fullname;
-		if(!gCacheName->getFullName(av, fullname))
+		LLAvatarName av_name;
+
+		if (!LLAvatarNameCache::get(av, &av_name))
 		{
+			element["columns"][0]["column"] = "name";
 			element["columns"][0]["value"] = LLCacheName::getDefaultName();
 			all_loaded = FALSE;
 		}			
 		else
 		{
-			element["columns"][0]["value"] = fullname;
+			element["columns"][0]["column"] = "name";
+			element["columns"][0]["value"] = av_name.mDisplayName;
+			element["columns"][1]["column"] = "username";
+			element["columns"][1]["value"] = av_name.mUsername;
 		}
 		near_me_scroller->addElement(element);
 		empty = FALSE;
-- 
cgit v1.2.3


From 39bf9a6eec24bc480a7f4de19a3e09b98b9ae5ef Mon Sep 17 00:00:00 2001
From: Richard Nelson <none@none>
Date: Wed, 26 May 2010 17:38:04 -0700
Subject: changed you paid... message to use non-linked name url

---
 indra/newview/llviewermessage.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index ccd2f6ea0e..6ead2e2457 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -5017,7 +5017,7 @@ static void process_money_balance_reply_extended(LLMessageSystem* msg)
 	
 	const char* dest_type = (is_dest_group ? "group" : "agent");
 	std::string dest_slurl =
-		LLSLURL( dest_type, dest_id, "inspect").getSLURLString();
+		LLSLURL( dest_type, dest_id, "completename").getSLURLString();
 
 	std::string reason =
 		reason_from_transaction_type(transaction_type, item_description);
-- 
cgit v1.2.3


From c7a6a2e08f34b2cd21816a905c21e8017646001c Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Thu, 27 May 2010 14:56:29 -0700
Subject: DEV-50013 Friendlier info if you can't change name due to time
 lockout

Reviewed with Leyla
---
 indra/newview/llpanelme.cpp                        | 48 ++++++++++++++--------
 .../newview/skins/default/xui/en/notifications.xml | 25 ++++++++---
 2 files changed, 51 insertions(+), 22 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llpanelme.cpp b/indra/newview/llpanelme.cpp
index 544ca47da4..eb2d57af52 100644
--- a/indra/newview/llpanelme.cpp
+++ b/indra/newview/llpanelme.cpp
@@ -305,11 +305,7 @@ void LLPanelMyProfileEdit::onCacheSetName(bool success,
 	{
 		// Inform the user that the change took place, but will take a while
 		// to percolate.
-		LLSD args;
-		// *TODO: get estimated percolation time from service
-		S32 timeout_hours = 72;
-		args["HOURS"] = llformat("%d", timeout_hours);
-		LLNotificationsUtil::add("SetDisplayNameSuccess", args);
+		LLNotificationsUtil::add("SetDisplayNameSuccess");
 
 		// Re-fetch my name, as it may have been sanitized by the service
 		LLAvatarNameCache::get(getAvatarId(),
@@ -322,6 +318,7 @@ void LLPanelMyProfileEdit::onCacheSetName(bool success,
 	llinfos << "set name failure error_tag " << error_tag << llendl;
 
 	// We might have a localized string for this message
+	// error_args will usually be empty from the server.
 	if (!error_tag.empty()
 		&& LLNotifications::getInstance()->templateExists(error_tag))
 	{
@@ -382,29 +379,46 @@ void LLPanelMyProfileEdit::onDialogSetName(const LLSD& notification, const LLSD&
 
 void LLPanelMyProfileEdit::onClickSetName()
 {
-	// IDEVO
 	LLUUID agent_id = getAvatarId();
 	std::string display_name;
 	LLAvatarName av_name;
-	if (LLAvatarNameCache::useDisplayNames()
-		&& LLAvatarNameCache::get(agent_id, &av_name))
+	if (!LLAvatarNameCache::get(agent_id, &av_name))
 	{
-		display_name = av_name.mDisplayName;
+		// something is wrong, tell user to try again later
+		LLNotificationsUtil::add("SetDisplayNameFailedGeneric");
+		return;
 	}
-	else
+		
+	display_name = av_name.mDisplayName;
+	if (display_name.empty())
 	{
-		gCacheName->getFullName(agent_id, display_name);
+		// something is wrong, tell user to try again later
+		LLNotificationsUtil::add("SetDisplayNameFailedGeneric");
+		return;		
 	}
 
-	if (!display_name.empty())
+	F64 now_secs = LLDate::now().secondsSinceEpoch();
+	if (now_secs < av_name.mNextUpdate)
 	{
+		// ...can't update until some time in the future
+		F64 next_update_local_secs =
+			av_name.mNextUpdate - LLStringOps::getLocalTimeOffset();
+		LLDate next_update_local(next_update_local_secs);
+		// display as "July 18 12:17 PM"
+		std::string next_update_string =
+		next_update_local.toHTTPDateString("%B %d %I:%M %p");
 		LLSD args;
-		args["DISPLAY_NAME"] = display_name;
-		LLSD payload;
-		payload["agent_id"] = agent_id;
-		LLNotificationsUtil::add("SetDisplayName", args, payload, 
-			boost::bind(&LLPanelMyProfileEdit::onDialogSetName, this, _1, _2));
+		args["TIME"] = next_update_string;
+		LLNotificationsUtil::add("SetDisplayNameFailedLockout", args);
+		return;
 	}
+	
+	LLSD args;
+	args["DISPLAY_NAME"] = display_name;
+	LLSD payload;
+	payload["agent_id"] = agent_id;
+	LLNotificationsUtil::add("SetDisplayName", args, payload, 
+		boost::bind(&LLPanelMyProfileEdit::onDialogSetName, this, _1, _2));
 }
 
 void LLPanelMyProfileEdit::enableEditing(bool enable)
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 51b88cf59a..904084cfa7 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -3145,9 +3145,11 @@ You are no longer frozen.
    icon="alertmodal.tga"
    name="SetDisplayName"
    type="alertmodal">
-Change your display name (used for name tags, chat, etc.)?
+Your new display name will be used for name tags, chat, friends lists, etc. You can also reset it back to your original username. There will be a delay before you can change your display name again, so choose wisely.
 
-You can also reset it back to your original username.
+See http://wiki.secondlife.com/wiki/Setting_your_display_name
+
+Change your display name?
     <form name="form">
       <input name="display_name" type="text">
 [DISPLAY_NAME]
@@ -3174,9 +3176,19 @@ You can also reset it back to your original username.
    type="alertmodal">
 Thanks for updating your name!
 
-Just like in real life, it takes a while for everyone to learn about a new name.  Please allow [HOURS] hours for your name to update in object ownership, scripts, search, etc.
+Just like in real life, it takes a while for everyone to learn about a new name.  Please allow several days for your name to update in object ownership, scripts, search, etc.
 
-See http://wiki.secondlife.com/wiki/Setting_your_display_name for details.
+See http://wiki.secondlife.com/wiki/Setting_your_display_name
+  </notification>
+
+  <notification
+   icon="alertmodal.tga"
+   name="SetDisplayNameFailedLockout"
+   type="alertmodal">
+Sorry, you cannot change your display name until:
+[TIME]
+
+See http://wiki.secondlife.com/wiki/Setting_your_display_name
   </notification>
 
   <notification
@@ -3195,11 +3207,14 @@ Please try a shorter name.
     Sorry, we could not set your display name.  Please try again later.
   </notification>
 
+<!-- *NOTE: This should never happen, users should see SetDisplayNameFailedLockout above -->
   <notification
    icon="alertmodal.tga"
    name="AgentDisplayNameUpdateThresholdExceeded"
    type="alertmodal">
-Sorry, you can only change your name once every 24 hours.
+Sorry, you have to wait longer before you can change your display name.
+
+See http://wiki.secondlife.com/wiki/Setting_your_display_name for details.
 
 Please try again later.
   </notification>
-- 
cgit v1.2.3


From 6cb420b20bd509e7bf62c8450f12d433c5a81be2 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Thu, 27 May 2010 15:12:03 -0700
Subject: added function for building a username from a legacy name and fixed
 group notice panel reviewed by James

---
 indra/newview/llpanelgroupnotices.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llpanelgroupnotices.cpp b/indra/newview/llpanelgroupnotices.cpp
index 2a955004e9..b71ece2be3 100644
--- a/indra/newview/llpanelgroupnotices.cpp
+++ b/indra/newview/llpanelgroupnotices.cpp
@@ -548,8 +548,8 @@ void LLPanelGroupNotices::processNotices(LLMessageSystem* msg)
 		msg->getU8("Data","AssetType",asset_type,i);
 		msg->getU32("Data","Timestamp",timestamp,i);
 
-		// IDEVO clean up legacy "Resident" names
-		name = LLCacheName::cleanFullName(name);
+		// we only have the legacy name here, convert it to a username
+		name = LLCacheName::buildUsername(name);
 
 		LLSD row;
 		row["id"] = id;
-- 
cgit v1.2.3


From 9bb097000cdd38f3af5152ba81731ff093865ffe Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Thu, 27 May 2010 15:49:22 -0700
Subject: update group notice panel and group notice to optionally use username
 if using display names

---
 indra/newview/llpanelgroupnotices.cpp     | 7 +++++--
 indra/newview/lltoastgroupnotifypanel.cpp | 7 ++++++-
 2 files changed, 11 insertions(+), 3 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llpanelgroupnotices.cpp b/indra/newview/llpanelgroupnotices.cpp
index b71ece2be3..4e8f0b5448 100644
--- a/indra/newview/llpanelgroupnotices.cpp
+++ b/indra/newview/llpanelgroupnotices.cpp
@@ -36,7 +36,7 @@
 
 #include "llview.h"
 
-#include "llcachename.h"
+#include "llavatarnamecache.h"
 #include "llinventory.h"
 #include "llviewerinventory.h"
 #include "llinventorydefines.h"
@@ -549,7 +549,10 @@ void LLPanelGroupNotices::processNotices(LLMessageSystem* msg)
 		msg->getU32("Data","Timestamp",timestamp,i);
 
 		// we only have the legacy name here, convert it to a username
-		name = LLCacheName::buildUsername(name);
+		if (LLAvatarNameCache::useDisplayNames())
+		{
+			name = LLCacheName::buildUsername(name);
+		}
 
 		LLSD row;
 		row["id"] = id;
diff --git a/indra/newview/lltoastgroupnotifypanel.cpp b/indra/newview/lltoastgroupnotifypanel.cpp
index 7eac3867d5..ab4071110e 100644
--- a/indra/newview/lltoastgroupnotifypanel.cpp
+++ b/indra/newview/lltoastgroupnotifypanel.cpp
@@ -42,6 +42,7 @@
 #include "llnotifications.h"
 #include "llviewertexteditor.h"
 
+#include "llavatarnamecache.h"
 #include "lluiconstants.h"
 #include "llui.h"
 #include "llviewercontrol.h"
@@ -73,7 +74,11 @@ LLToastGroupNotifyPanel::LLToastGroupNotifyPanel(LLNotificationPtr& notification
 	pGroupIcon->setValue(groupData.mInsigniaID);
 
 	//header title
-	const std::string& from_name = payload["sender_name"].asString();
+	std::string from_name = payload["sender_name"].asString();
+	if (LLAvatarNameCache::useDisplayNames())
+	{
+		from_name = LLCacheName::buildUsername(from_name);
+	}
 	std::stringstream from;
 	from << from_name << "/" << groupData.mName;
 	LLTextBox* pTitleText = getChild<LLTextBox>("title");
-- 
cgit v1.2.3


From 00e8b3548c931991d784f6f14c80ca29528a206d Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Thu, 27 May 2010 18:08:49 -0700
Subject: DEV-50013 Region debug top scripts/colliders display names

---
 indra/newview/llfloatertopobjects.cpp | 67 ++++++++++++++++++++++-------------
 1 file changed, 42 insertions(+), 25 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloatertopobjects.cpp b/indra/newview/llfloatertopobjects.cpp
index 04eb5f5d86..c7c3c2f7da 100644
--- a/indra/newview/llfloatertopobjects.cpp
+++ b/indra/newview/llfloatertopobjects.cpp
@@ -34,7 +34,9 @@
 
 #include "llfloatertopobjects.h"
 
+// library includes
 #include "message.h"
+#include "llavatarnamecache.h"
 #include "llfontgl.h"
 
 #include "llagent.h"
@@ -196,38 +198,53 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data)
 		LLSD element;
 
 		element["id"] = task_id;
-		// These cause parse warnings. JC
-		//element["object_name"] = name_buf;
-		//element["owner_name"] = owner_buf;
-		element["columns"][0]["column"] = "score";
-		element["columns"][0]["value"] = llformat("%0.3f", score);
-		element["columns"][0]["font"] = "SANSSERIF";
+
+		LLSD columns;
+		columns[0]["column"] = "score";
+		columns[0]["value"] = llformat("%0.3f", score);
+		columns[0]["font"] = "SANSSERIF";
+		
+		columns[1]["column"] = "name";
+		columns[1]["value"] = name_buf;
+		columns[1]["font"] = "SANSSERIF";
+		
+		// Owner names can have trailing spaces sent from server
+		LLStringUtil::trim(owner_buf);
 		
-		element["columns"][1]["column"] = "name";
-		element["columns"][1]["value"] = name_buf;
-		element["columns"][1]["font"] = "SANSSERIF";
-		element["columns"][2]["column"] = "owner";
-		element["columns"][2]["value"] = LLCacheName::cleanFullName(owner_buf);
-		element["columns"][2]["font"] = "SANSSERIF";
-		element["columns"][3]["column"] = "location";
-		element["columns"][3]["value"] = llformat("<%0.1f,%0.1f,%0.1f>", location_x, location_y, location_z);
-		element["columns"][3]["font"] = "SANSSERIF";
-		element["columns"][4]["column"] = "time";
-		element["columns"][4]["value"] = formatted_time((time_t)time_stamp);
-		element["columns"][4]["font"] = "SANSSERIF";
+		if (LLAvatarNameCache::useDisplayNames())
+		{
+			// ...convert hard-coded name from server to a username
+			// *TODO: Send owner_id from server and look up display name
+			owner_buf = LLCacheName::buildUsername(owner_buf);
+		}
+		else
+		{
+			// ...just strip out legacy "Resident" name
+			owner_buf = LLCacheName::cleanFullName(owner_buf);
+		}
+		columns[2]["column"] = "owner";
+		columns[2]["value"] = owner_buf;
+		columns[2]["font"] = "SANSSERIF";
+
+		columns[3]["column"] = "location";
+		columns[3]["value"] = llformat("<%0.1f,%0.1f,%0.1f>", location_x, location_y, location_z);
+		columns[3]["font"] = "SANSSERIF";
+		columns[4]["column"] = "time";
+		columns[4]["value"] = formatted_time((time_t)time_stamp);
+		columns[4]["font"] = "SANSSERIF";
 
 		if (mCurrentMode == STAT_REPORT_TOP_SCRIPTS
 			&& have_extended_data)
 		{
-			element["columns"][5]["column"] = "mono_time";
-			element["columns"][5]["value"] = llformat("%0.3f", mono_score);
-			element["columns"][5]["font"] = "SANSSERIF";
+			columns[5]["column"] = "mono_time";
+			columns[5]["value"] = llformat("%0.3f", mono_score);
+			columns[5]["font"] = "SANSSERIF";
 
-			element["columns"][6]["column"] = "URLs";
-			element["columns"][6]["value"] = llformat("%d", public_urls);
-			element["columns"][6]["font"] = "SANSSERIF";
+			columns[6]["column"] = "URLs";
+			columns[6]["value"] = llformat("%d", public_urls);
+			columns[6]["font"] = "SANSSERIF";
 		}
-		
+		element["columns"] = columns;
 		list->addElement(element);
 		
 		mObjectListData.append(element);
-- 
cgit v1.2.3


From 0a5ec5da9c52eeb0475414e67e4ac906c82d05cc Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Thu, 27 May 2010 18:29:21 -0700
Subject: DEV-50013 Object returned to lost and found uses display names

---
 indra/newview/llviewermessage.cpp | 20 +++++++++++++++++---
 1 file changed, 17 insertions(+), 3 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 6ead2e2457..704f4b4902 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -2024,7 +2024,8 @@ static std::string clean_name_from_im(const std::string& name, EInstantMessage t
 	}
 }
 
-static std::string clean_name_from_task_im(const std::string& msg)
+static std::string clean_name_from_task_im(const std::string& msg,
+										   BOOL from_group)
 {
 	boost::smatch match;
 	static const boost::regex returned_exp(
@@ -2034,7 +2035,20 @@ static std::string clean_name_from_task_im(const std::string& msg)
 		// match objects are 1-based for groups
 		std::string final = match[1].str();
 		std::string name = match[2].str();
-		final += LLCacheName::cleanFullName(name);
+		// Don't try to clean up group names
+		if (!from_group)
+		{
+			if (LLAvatarNameCache::useDisplayNames())
+			{
+				// ...just convert to username
+				final += LLCacheName::buildUsername(name);
+			}
+			else
+			{
+				// ...strip out legacy "Resident" name
+				final += LLCacheName::cleanFullName(name);
+			}
+		}
 		final += match[3].str();
 		return final;
 	}
@@ -2593,7 +2607,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
 			}
 
 			// IDEVO Some messages have embedded resident names
-			message = clean_name_from_task_im(message);
+			message = clean_name_from_task_im(message, from_group);
 
 			LLSD query_string;
 			query_string["owner"] = from_id;
-- 
cgit v1.2.3


From 3e4a9614dc6ece19a87f47ec3519dbef01b08d07 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Fri, 28 May 2010 05:56:56 -0700
Subject: DEV-50451 FIX ??? shown in local chat for chat from objects

Simple - was always doing name lookup even if ID was for an object
---
 indra/newview/llchathistory.cpp | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index d3686ab99c..5323ecce72 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -274,7 +274,7 @@ public:
 			user_name->setValue(mFrom);
 			updateMinUserNameWidth();
 		}
-		else
+		else if (mSourceType == CHAT_SOURCE_AGENT)
 		{
 			// ...from a normal user, lookup the name and fill in later,
 			// but start with blank so sample data from XUI XML doesn't
@@ -283,6 +283,13 @@ public:
 			LLAvatarNameCache::get(mAvatarID,
 				boost::bind(&LLChatHistoryHeader::onAvatarNameCache, this, _1, _2));
 		}
+		else {
+			// ...from an object, just use name as given
+			mFrom = chat.mFromName;
+			user_name->setValue(mFrom);
+			updateMinUserNameWidth();
+		}
+
 
 		setTimeField(chat);
 		
-- 
cgit v1.2.3


From 7037e8ee9fb73093eecca3d4477be3a85bd62664 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Fri, 28 May 2010 06:59:00 -0700
Subject: DEV-50013 More space for name in Buy Object dialog

---
 indra/newview/skins/default/xui/en/floater_buy_object.xml | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/floater_buy_object.xml b/indra/newview/skins/default/xui/en/floater_buy_object.xml
index 3d8f5d678b..db595458c0 100644
--- a/indra/newview/skins/default/xui/en/floater_buy_object.xml
+++ b/indra/newview/skins/default/xui/en/floater_buy_object.xml
@@ -2,7 +2,7 @@
 <floater
  legacy_header_height="18"
  can_resize="true"
- height="290"
+ height="310"
  layout="topleft"
  min_height="150"
  min_width="225"
@@ -84,15 +84,18 @@
      length="1"
      follows="left|right|bottom"
      font="SansSerif"
-     height="16"
+     height="35"
      layout="topleft"
      left_delta="0"
+	 line_spacing.pixels="7"
      name="buy_text"
      text_color="white"
      top_pad="5"
      use_ellipses="true"
-     width="260">
-        Buy for L$[AMOUNT] from [NAME]?
+     width="260"
+	 word_wrap="true">
+Buy for L$[AMOUNT] from:
+[NAME]?
     </text>
     <button
      follows="right|bottom"
-- 
cgit v1.2.3


From 3bbb622731b2a6a29fc6576dcf4885527d813699 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Fri, 28 May 2010 08:21:33 -0700
Subject: WIP Fix miscellaneous display names in UI

---
 indra/newview/llavatarlist.cpp            | 14 ++++++++------
 indra/newview/llfloateravatartextures.cpp |  9 ++++++---
 indra/newview/llfloaterbuyland.cpp        |  2 +-
 indra/newview/llfloaterinspect.cpp        | 10 +++++++---
 indra/newview/llfloaterpay.cpp            |  2 --
 indra/newview/llfriendcard.cpp            | 10 ++++++----
 indra/newview/llpanellandmarkinfo.cpp     | 17 -----------------
 indra/newview/llpanelme.cpp               |  7 -------
 indra/newview/llpanelplaceinfo.cpp        |  9 +++++++++
 indra/newview/llpanelplaceinfo.h          |  4 ++++
 indra/newview/llpanelplaceprofile.cpp     | 20 ++++++++++----------
 11 files changed, 51 insertions(+), 53 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llavatarlist.cpp b/indra/newview/llavatarlist.cpp
index 57624dec8b..c35e71cc71 100644
--- a/indra/newview/llavatarlist.cpp
+++ b/indra/newview/llavatarlist.cpp
@@ -260,6 +260,8 @@ void LLAvatarList::refresh()
 			}
 			else
 			{
+				// *NOTE: If you change the UI to show a different string,
+				// be sure to change the filter code below.
 				addNewItem(buddy_id, 
 					       av_name.mDisplayName.empty() ? waiting_str : av_name.mDisplayName, 
 						   LLAvatarTracker::instance().isBuddyOnline(buddy_id));
@@ -284,10 +286,10 @@ void LLAvatarList::refresh()
 
 		for (std::vector<LLSD>::const_iterator it=cur_values.begin(); it != cur_values.end(); it++)
 		{
-			std::string name;
 			const LLUUID& buddy_id = it->asUUID();
-			have_names &= (bool)gCacheName->getFullName(buddy_id, name);
-			if (!findInsensitive(name, mNameFilter))
+			LLAvatarName av_name;
+			have_names &= LLAvatarNameCache::get(buddy_id, &av_name);
+			if (!findInsensitive(av_name.mDisplayName, mNameFilter))
 			{
 				removeItemByUUID(buddy_id);
 				modified = true;
@@ -339,14 +341,14 @@ bool LLAvatarList::filterHasMatches()
 
 	for (uuid_vec_t::const_iterator it=values.begin(); it != values.end(); it++)
 	{
-		std::string name;
 		const LLUUID& buddy_id = *it;
-		BOOL have_name = gCacheName->getFullName(buddy_id, name);
+		LLAvatarName av_name;
+		bool have_name = LLAvatarNameCache::get(buddy_id, &av_name);
 
 		// If name has not been loaded yet we consider it as a match.
 		// When the name will be loaded the filter will be applied again(in refresh()).
 
-		if (have_name && !findInsensitive(name, mNameFilter))
+		if (have_name && !findInsensitive(av_name.mDisplayName, mNameFilter))
 		{
 			continue;
 		}
diff --git a/indra/newview/llfloateravatartextures.cpp b/indra/newview/llfloateravatartextures.cpp
index fd392d949a..290a343075 100644
--- a/indra/newview/llfloateravatartextures.cpp
+++ b/indra/newview/llfloateravatartextures.cpp
@@ -33,6 +33,9 @@
 #include "llviewerprecompiledheaders.h"
 #include "llfloateravatartextures.h"
 
+// library headers
+#include "llavatarnamecache.h"
+
 #include "llagent.h"
 #include "llagentwearables.h"
 #include "lltexturectrl.h"
@@ -138,10 +141,10 @@ void LLFloaterAvatarTextures::refresh()
 		LLVOAvatar *avatarp = find_avatar(mID);
 		if (avatarp)
 		{
-			std::string fullname;
-			if (gCacheName->getFullName(avatarp->getID(), fullname))
+			LLAvatarName av_name;
+			if (LLAvatarNameCache::get(avatarp->getID(), &av_name))
 			{
-				setTitle(mTitle + ": " + fullname);
+				setTitle(mTitle + ": " + av_name.getCompleteName());
 			}
 			for (U32 i=0; i < TEX_NUM_INDICES; i++)
 			{
diff --git a/indra/newview/llfloaterbuyland.cpp b/indra/newview/llfloaterbuyland.cpp
index 419253d938..292c88441a 100644
--- a/indra/newview/llfloaterbuyland.cpp
+++ b/indra/newview/llfloaterbuyland.cpp
@@ -823,7 +823,7 @@ void LLFloaterBuyLandUI::updateNames()
 	}
 	else if (parcelp->getIsGroupOwned())
 	{
-		gCacheName->get(parcelp->getGroupID(), true,
+		gCacheName->getGroup(parcelp->getGroupID(),
 			boost::bind(&LLFloaterBuyLandUI::updateGroupName, this,
 				_1, _2, _3));
 	}
diff --git a/indra/newview/llfloaterinspect.cpp b/indra/newview/llfloaterinspect.cpp
index 13ca7638c5..f22ab70678 100644
--- a/indra/newview/llfloaterinspect.cpp
+++ b/indra/newview/llfloaterinspect.cpp
@@ -37,7 +37,7 @@
 #include "llfloaterreg.h"
 #include "llfloatertools.h"
 #include "llavataractions.h"
-#include "llcachename.h"
+#include "llavatarnamecache.h"
 #include "llscrolllistctrl.h"
 #include "llscrolllistitem.h"
 #include "llselectmgr.h"
@@ -212,8 +212,12 @@ void LLFloaterInspect::refresh()
 		substitution["datetime"] = (S32) timestamp;
 		LLStringUtil::format (timeStr, substitution);
 
-		gCacheName->getFullName(obj->mPermissions->getOwner(), owner_name);
-		gCacheName->getFullName(obj->mPermissions->getCreator(), creator_name);
+		LLAvatarName av_name;
+		LLAvatarNameCache::get(obj->mPermissions->getOwner(), &av_name);
+		owner_name = av_name.getCompleteName();
+		LLAvatarNameCache::get(obj->mPermissions->getCreator(), &av_name);
+		creator_name = av_name.getCompleteName();
+		
 		row["id"] = obj->getObject()->getID();
 		row["columns"][0]["column"] = "object_name";
 		row["columns"][0]["type"] = "text";
diff --git a/indra/newview/llfloaterpay.cpp b/indra/newview/llfloaterpay.cpp
index 7b596e9ba3..6b811b5886 100644
--- a/indra/newview/llfloaterpay.cpp
+++ b/indra/newview/llfloaterpay.cpp
@@ -424,8 +424,6 @@ void LLFloaterPay::payDirectly(money_callback callback,
 	
 void LLFloaterPay::finishPayUI(const LLUUID& target_id, BOOL is_group)
 {
-	// IDEVO
-	//gCacheName->get(target_id, is_group, boost::bind(&LLFloaterPay::onCacheOwnerName, this, _1, _2, _3, _4));
 	std::string slurl;
 	if (is_group)
 	{
diff --git a/indra/newview/llfriendcard.cpp b/indra/newview/llfriendcard.cpp
index 7f28e09933..0a1b0b5df0 100644
--- a/indra/newview/llfriendcard.cpp
+++ b/indra/newview/llfriendcard.cpp
@@ -32,13 +32,14 @@
 
 #include "llviewerprecompiledheaders.h"
 
+#include "llfriendcard.h"
+
+#include "llavatarnamecache.h"
 #include "llinventory.h"
 #include "llinventoryfunctions.h"
 #include "llinventoryobserver.h"
 #include "lltrans.h"
 
-#include "llfriendcard.h"
-
 #include "llcallingcard.h" // for LLAvatarTracker
 #include "llviewerinventory.h"
 #include "llinventorymodel.h"
@@ -536,8 +537,9 @@ void LLFriendCardsManager::addFriendCardToInventory(const LLUUID& avatarID)
 {
 
 	bool shouldBeAdded = true;
-	std::string name;
-	gCacheName->getFullName(avatarID, name);
+	LLAvatarName av_name;
+	LLAvatarNameCache::get(avatarID, &av_name);
+	const std::string& name = av_name.mUsername;
 
 	lldebugs << "Processing buddy name: " << name 
 		<< ", id: " << avatarID
diff --git a/indra/newview/llpanellandmarkinfo.cpp b/indra/newview/llpanellandmarkinfo.cpp
index 4c2ff471e8..f6c70c82da 100644
--- a/indra/newview/llpanellandmarkinfo.cpp
+++ b/indra/newview/llpanellandmarkinfo.cpp
@@ -236,11 +236,6 @@ void LLPanelLandmarkInfo::displayItemInfo(const LLInventoryItem* pItem)
 		LLUUID creator_id = pItem->getCreatorUUID();
 		std::string name =
 			LLSLURL("agent", creator_id, "inspect").getSLURLString();
-		//if (!gCacheName->getFullName(creator_id, name))
-		//{
-		//	gCacheName->get(creator_id, FALSE,
-		//					boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mCreator, _2, _3));
-		//}
 		mCreator->setText(name);
 	}
 	else
@@ -257,23 +252,11 @@ void LLPanelLandmarkInfo::displayItemInfo(const LLInventoryItem* pItem)
 		if (perm.isGroupOwned())
 		{
 			LLUUID group_id = perm.getGroup();
-			// IDEVO
-			//if (!gCacheName->getGroupName(group_id, name))
-			//{
-			//	gCacheName->get(group_id, TRUE,
-			//					boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mOwner, _2, _3));
-			//}
 			name = LLSLURL("group", group_id, "inspect").getSLURLString();
 		}
 		else
 		{
 			LLUUID owner_id = perm.getOwner();
-			// IDEVO
-			//if (!gCacheName->getFullName(owner_id, name))
-			//{
-			//	gCacheName->get(owner_id, FALSE,
-			//					boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mOwner, _2, _3));
-			//}
 			name = LLSLURL("agent", owner_id, "inspect").getSLURLString();
 		}
 		mOwner->setText(name);
diff --git a/indra/newview/llpanelme.cpp b/indra/newview/llpanelme.cpp
index eb2d57af52..d1ce59d436 100644
--- a/indra/newview/llpanelme.cpp
+++ b/indra/newview/llpanelme.cpp
@@ -228,13 +228,6 @@ void LLPanelMyProfileEdit::processProfileProperties(const LLAvatarData* avatar_d
 
 	childSetValue("show_in_search_checkbox", (BOOL)(avatar_data->flags & AVATAR_ALLOW_PUBLISH));
 
-	// IDEVO - These fields do not seem to exist any more.
-	//std::string full_name;
-	//BOOL found = gCacheName->getFullName(avatar_data->avatar_id, full_name);
-	//if (found)
-	//{
-	//	childSetTextArg("name_text", "[NAME]", full_name);
-	//}
 	LLAvatarNameCache::get(avatar_data->avatar_id,
 		boost::bind(&LLPanelMyProfileEdit::onNameCache, this, _1, _2));
 }
diff --git a/indra/newview/llpanelplaceinfo.cpp b/indra/newview/llpanelplaceinfo.cpp
index 4c3d6e2758..3b0dcad679 100644
--- a/indra/newview/llpanelplaceinfo.cpp
+++ b/indra/newview/llpanelplaceinfo.cpp
@@ -34,6 +34,7 @@
 
 #include "llpanelplaceinfo.h"
 
+#include "llavatarname.h"
 #include "llsdutil.h"
 
 #include "llsdutil_math.h"
@@ -285,3 +286,11 @@ void LLPanelPlaceInfo::onNameCache(LLTextBox* text, const std::string& full_name
 {
 	text->setText(full_name);
 }
+
+// static
+void LLPanelPlaceInfo::onAvatarNameCache(const LLUUID& agent_id,
+										 const LLAvatarName& av_name,
+										 LLTextBox* text)
+{
+	text->setText( av_name.getCompleteName() );
+}
diff --git a/indra/newview/llpanelplaceinfo.h b/indra/newview/llpanelplaceinfo.h
index 0d7a09b5de..0c08c5059b 100644
--- a/indra/newview/llpanelplaceinfo.h
+++ b/indra/newview/llpanelplaceinfo.h
@@ -40,6 +40,7 @@
 
 #include "llremoteparcelrequest.h"
 
+class LLAvatarName;
 class LLExpandableTextBox;
 class LLIconCtrl;
 class LLInventoryItem;
@@ -103,6 +104,9 @@ public:
 
 protected:
 	static void onNameCache(LLTextBox* text, const std::string& full_name);
+	static void onAvatarNameCache(const LLUUID& agent_id,
+								  const LLAvatarName& av_name,
+								  LLTextBox* text);
 
 	/**
 	 * mParcelID is valid only for remote places, in other cases it's null. See resetLocation() 
diff --git a/indra/newview/llpanelplaceprofile.cpp b/indra/newview/llpanelplaceprofile.cpp
index 23171d5ff2..2a8249f4b6 100644
--- a/indra/newview/llpanelplaceprofile.cpp
+++ b/indra/newview/llpanelplaceprofile.cpp
@@ -34,6 +34,7 @@
 
 #include "llpanelplaceprofile.h"
 
+#include "llavatarnamecache.h"
 #include "llparcel.h"
 #include "message.h"
 
@@ -428,10 +429,10 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,
 			if(!parcel->getGroupID().isNull())
 			{
 				// FIXME: Using parcel group as region group.
-				gCacheName->get(parcel->getGroupID(), true,
+				gCacheName->getGroup(parcel->getGroupID(),
 								boost::bind(&LLPanelPlaceInfo::onNameCache, mRegionGroupText, _2));
 
-				gCacheName->get(parcel->getGroupID(), true,
+				gCacheName->getGroup(parcel->getGroupID(),
 								boost::bind(&LLPanelPlaceInfo::onNameCache, mParcelOwner, _2));
 			}
 			else
@@ -444,14 +445,12 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,
 		else
 		{
 			// Figure out the owner's name
-			// IDEVO
-			//gCacheName->get(parcel->getOwnerID(), FALSE,
-			//				boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mParcelOwner, _2, _3));
 			std::string parcel_owner =
 				LLSLURL("agent", parcel->getOwnerID(), "inspect").getSLURLString();
 			mParcelOwner->setText(parcel_owner);
-			gCacheName->get(region->getOwner(), false,
-							boost::bind(&LLPanelPlaceInfo::onNameCache, mRegionOwnerText, _2));
+			LLAvatarNameCache::get(region->getOwner(),
+								   boost::bind(&LLPanelPlaceInfo::onAvatarNameCache,
+											   _1, _2, mRegionOwnerText));
 		}
 
 		if(LLParcel::OS_LEASE_PENDING == parcel->getOwnershipStatus())
@@ -473,9 +472,10 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,
 		const LLUUID& auth_buyer_id = parcel->getAuthorizedBuyerID();
 		if(auth_buyer_id.notNull())
 		{
-			gCacheName->get(auth_buyer_id, true,
-							boost::bind(&LLPanelPlaceInfo::onNameCache, mSaleToText, _2));
-
+			LLAvatarNameCache::get(auth_buyer_id,
+								   boost::bind(&LLPanelPlaceInfo::onAvatarNameCache,
+											   _1, _2, mSaleToText));
+			
 			// Show sales info to a specific person or a group he belongs to.
 			if (auth_buyer_id != gAgent.getID() && !gAgent.isInGroup(auth_buyer_id))
 			{
-- 
cgit v1.2.3


From b944a4792762bf61b7837a29c8580c9823c9670b Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Fri, 28 May 2010 09:59:47 -0700
Subject: DEV-50013 Script memory floater uses usernames

---
 indra/newview/llfloaterscriptlimits.cpp | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloaterscriptlimits.cpp b/indra/newview/llfloaterscriptlimits.cpp
index bd31181e5a..0149ead92e 100644
--- a/indra/newview/llfloaterscriptlimits.cpp
+++ b/indra/newview/llfloaterscriptlimits.cpp
@@ -34,6 +34,8 @@
 #include "llviewerprecompiledheaders.h"
 #include "llfloaterscriptlimits.h"
 
+// library includes
+#include "llavatarnamecache.h"
 #include "llsdutil.h"
 #include "llsdutil_math.h"
 #include "message.h"
@@ -599,7 +601,7 @@ void LLPanelScriptLimitsRegionMemory::setErrorStatus(U32 status, const std::stri
 // callback from the name cache with an owner name to add to the list
 void LLPanelScriptLimitsRegionMemory::onNameCache(
 						 const LLUUID& id,
-						 const std::string& name)
+						 const std::string& full_name)
 {
 	LLScrollListCtrl *list = getChild<LLScrollListCtrl>("scripts_list");	
 	if(!list)
@@ -607,6 +609,16 @@ void LLPanelScriptLimitsRegionMemory::onNameCache(
 		return;
 	}
 	
+	std::string name;
+	if (LLAvatarNameCache::useDisplayNames())
+	{
+		name = LLCacheName::buildUsername(full_name);
+	}
+	else
+	{
+		name = full_name;
+	}
+
 	std::vector<LLSD>::iterator id_itor;
 	for (id_itor = mObjectListItems.begin(); id_itor != mObjectListItems.end(); ++id_itor)
 	{
@@ -707,7 +719,11 @@ void LLPanelScriptLimitsRegionMemory::setRegionDetails(LLSD content)
 				}
 				else
 				{
-					name_is_cached = gCacheName->getFullName(owner_id, owner_buf);
+					name_is_cached = gCacheName->getFullName(owner_id, owner_buf);  // username
+					if (LLAvatarNameCache::useDisplayNames())
+					{
+						owner_buf = LLCacheName::buildUsername(owner_buf);
+					}
 				}
 				if(!name_is_cached)
 				{
-- 
cgit v1.2.3


From 9874e4d1818661580d72f41a507b41d3e07aecd5 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Fri, 28 May 2010 13:27:30 -0700
Subject: fixed nearby and friends avatar picker bug

---
 indra/newview/llfloateravatarpicker.cpp | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloateravatarpicker.cpp b/indra/newview/llfloateravatarpicker.cpp
index d9c580320a..b533e394ff 100644
--- a/indra/newview/llfloateravatarpicker.cpp
+++ b/indra/newview/llfloateravatarpicker.cpp
@@ -177,7 +177,20 @@ static void getSelectedAvatarData(const LLScrollListCtrl* from, uuid_vec_t& avat
 		if (item->getUUID().notNull())
 		{
 			avatar_ids.push_back(item->getUUID());
-			avatar_names.push_back(sAvatarNameMap[item->getUUID()]);
+
+			std::map<LLUUID, LLAvatarName>::iterator iter = sAvatarNameMap.find(item->getUUID());
+			if (iter != sAvatarNameMap.end())
+			{
+				avatar_names.push_back(iter->second);
+			}
+			else
+			{
+				// the only case where it isn't in the name map is friends
+				// but it should be in the name cache
+				LLAvatarName av_name;
+				LLAvatarNameCache::get(item->getUUID(), &av_name);
+				avatar_names.push_back(av_name);
+			}
 		}
 	}
 }
@@ -280,6 +293,8 @@ void LLFloaterAvatarPicker::populateNearMe()
 			element["columns"][0]["value"] = av_name.mDisplayName;
 			element["columns"][1]["column"] = "username";
 			element["columns"][1]["value"] = av_name.mUsername;
+
+			sAvatarNameMap[av] = av_name;
 		}
 		near_me_scroller->addElement(element);
 		empty = FALSE;
@@ -314,7 +329,6 @@ void LLFloaterAvatarPicker::populateFriend()
 	LLAvatarTracker::instance().applyFunctor(collector);
 	LLCollectAllBuddies::buddy_map_t::iterator it;
 	
-	
 	for(it = collector.mOnline.begin(); it!=collector.mOnline.end(); it++)
 	{
 		friends_scroller->addStringUUIDItem(it->first, it->second);
-- 
cgit v1.2.3


From def61c6999f83cc3c85cdccb6ac9f744c032c694 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Fri, 28 May 2010 13:28:05 -0700
Subject: removing deprecated add friend callback path for server 1.24

---
 indra/newview/llavataractions.cpp                  | 34 +++-------------------
 indra/newview/llavataractions.h                    |  1 -
 .../newview/skins/default/xui/en/notifications.xml | 14 ---------
 3 files changed, 4 insertions(+), 45 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp
index 6534f7921c..89711de6f0 100644
--- a/indra/newview/llavataractions.cpp
+++ b/indra/newview/llavataractions.cpp
@@ -81,22 +81,13 @@ void LLAvatarActions::requestFriendshipDialog(const LLUUID& id, const std::strin
 	}
 
 	LLSD args;
-	args["NAME"] = LLSLURL("agent", id, "inspect").getSLURLString();
+	args["NAME"] = LLSLURL("agent", id, "completename").getSLURLString();
 	LLSD payload;
 	payload["id"] = id;
 	payload["name"] = name;
-    // Look for server versions like: Second Life Server 1.24.4.95600
-	if (gLastVersionChannel.find(" 1.24.") != std::string::npos)
-	{
-		// Old and busted server version, doesn't support friend
-		// requests with messages.
-    	LLNotificationsUtil::add("AddFriend", args, payload, &callbackAddFriend);
-	}
-	else
-	{
-    	LLNotificationsUtil::add("AddFriendWithMessage", args, payload, &callbackAddFriendWithMessage);
-	}
-
+    
+	LLNotificationsUtil::add("AddFriendWithMessage", args, payload, &callbackAddFriendWithMessage);
+	
 	// add friend to recent people list
 	LLRecentPeople::instance().add(id);
 }
@@ -716,23 +707,6 @@ bool LLAvatarActions::handleUnfreeze(const LLSD& notification, const LLSD& respo
 	}
 	return false;
 }
-// static
-bool LLAvatarActions::callbackAddFriend(const LLSD& notification, const LLSD& response)
-{
-	S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
-	if (option == 0)
-	{
-		// Servers older than 1.25 require the text of the message to be the
-		// calling card folder ID for the offering user. JC
-		LLUUID calling_card_folder_id = 
-			gInventory.findCategoryUUIDForType(LLFolderType::FT_CALLINGCARD);
-		std::string message = calling_card_folder_id.asString();
-		requestFriendship(notification["payload"]["id"].asUUID(), 
-		    notification["payload"]["name"].asString(),
-		    message);
-	}
-    return false;
-}
 
 // static
 void LLAvatarActions::requestFriendship(const LLUUID& target_id, const std::string& target_name, const std::string& message)
diff --git a/indra/newview/llavataractions.h b/indra/newview/llavataractions.h
index d106a83eea..2d69c01ffe 100644
--- a/indra/newview/llavataractions.h
+++ b/indra/newview/llavataractions.h
@@ -184,7 +184,6 @@ public:
 
 	
 private:
-	static bool callbackAddFriend(const LLSD& notification, const LLSD& response);
 	static bool callbackAddFriendWithMessage(const LLSD& notification, const LLSD& response);
 	static bool handleRemove(const LLSD& notification, const LLSD& response);
 	static bool handlePay(const LLSD& notification, const LLSD& response, LLUUID avatar_id);
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 904084cfa7..5bae6271be 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -2006,20 +2006,6 @@ Unable to buy land for the group:
 You do not have permission to buy land for your active group.
   </notification>
 
-  <notification
-   icon="alertmodal.tga"
-   label="Add Friend"
-   name="AddFriend"
-   type="alertmodal">
-Friends can give permissions to track each other on the map and receive online status updates.
-
-Offer friendship to [NAME]?
-    <usetemplate
-     name="okcancelbuttons"
-     notext="Cancel"
-     yestext="OK"/>
-  </notification>
-
   <notification
    icon="alertmodal.tga"
    label="Add Friend"
-- 
cgit v1.2.3


From e395d78eb1a3127d122be6d113e7bbe3a26a0825 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Fri, 28 May 2010 13:28:50 -0700
Subject: changing notifications from "inspect" slurls to "completename" slurls

---
 indra/newview/llfloaterbuyland.cpp    | 3 +--
 indra/newview/llfloaterland.cpp       | 6 +++---
 indra/newview/llfloaterregioninfo.cpp | 2 +-
 3 files changed, 5 insertions(+), 6 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloaterbuyland.cpp b/indra/newview/llfloaterbuyland.cpp
index 419253d938..5d7557a665 100644
--- a/indra/newview/llfloaterbuyland.cpp
+++ b/indra/newview/llfloaterbuyland.cpp
@@ -829,8 +829,7 @@ void LLFloaterBuyLandUI::updateNames()
 	}
 	else
 	{
-		mParcelSellerName =
-			LLSLURL("agent", parcelp->getOwnerID(), "inspect").getSLURLString();
+		mParcelSellerName = LLSLURL("agent", parcelp->getOwnerID(), "completename").getSLURLString();
 	}
 }
 
diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp
index 167d4b09f7..2b24189813 100644
--- a/indra/newview/llfloaterland.cpp
+++ b/indra/newview/llfloaterland.cpp
@@ -1390,7 +1390,7 @@ bool LLPanelLandObjects::callbackReturnOwnerObjects(const LLSD& notification, co
 			}
 			else
 			{
-				args["NAME"] = LLSLURL("agent", owner_id, "inspect").getSLURLString();
+				args["NAME"] = LLSLURL("agent", owner_id, "completename").getSLURLString();
 				LLNotificationsUtil::add("OtherObjectsReturned", args);
 			}
 			send_return_objects_message(parcel->getLocalID(), RT_OWNER);
@@ -1719,7 +1719,7 @@ void LLPanelLandObjects::onClickReturnOwnerObjects(void* userdata)
 	}
 	else
 	{
-		args["NAME"] = LLSLURL("agent", owner_id, "inspect").getSLURLString();
+		args["NAME"] = LLSLURL("agent", owner_id, "completename").getSLURLString();
 		LLNotificationsUtil::add("ReturnObjectsOwnedByUser", args, LLSD(), boost::bind(&LLPanelLandObjects::callbackReturnOwnerObjects, panelp, _1, _2));
 	}
 }
@@ -1778,7 +1778,7 @@ void LLPanelLandObjects::onClickReturnOtherObjects(void* userdata)
 		}
 		else
 		{
-			args["NAME"] = LLSLURL("agent", owner_id, "inspect").getSLURLString();
+			args["NAME"] = LLSLURL("agent", owner_id, "completename").getSLURLString();
 			LLNotificationsUtil::add("ReturnObjectsNotOwnedByUser", args, LLSD(), boost::bind(&LLPanelLandObjects::callbackReturnOtherObjects, panelp, _1, _2));
 		}
 	}
diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp
index df400b65d6..590e14a362 100644
--- a/indra/newview/llfloaterregioninfo.cpp
+++ b/indra/newview/llfloaterregioninfo.cpp
@@ -1538,7 +1538,7 @@ void LLPanelEstateInfo::onKickUserCommit(const uuid_vec_t& ids)
 	
 	//Bring up a confirmation dialog
 	LLSD args;
-	args["EVIL_USER"] = LLSLURL("agent", ids[0], "inspect").getSLURLString();
+	args["EVIL_USER"] = LLSLURL("agent", ids[0], "completename").getSLURLString();
 	LLSD payload;
 	payload["agent_id"] = ids[0];
 	LLNotificationsUtil::add("EstateKickUser", args, payload, boost::bind(&LLPanelEstateInfo::kickUserConfirm, this, _1, _2));
-- 
cgit v1.2.3


From 5be933062b0e8dfe6955480b333450a32a444a33 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Fri, 28 May 2010 13:30:25 -0700
Subject: adding name lookup callback for friendship requested notification

---
 indra/newview/llviewermessage.cpp | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 6ead2e2457..cdcbe20a94 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -2041,6 +2041,16 @@ static std::string clean_name_from_task_im(const std::string& msg)
 	return msg;
 }
 
+void notification_display_name_callback(const LLUUID& id,
+					  const LLAvatarName& av_name,
+					  const std::string& name, 
+					  LLSD& substitutions, 
+					  const LLSD& payload)
+{
+	substitutions["NAME"] = av_name.mDisplayName;
+	LLNotificationsUtil::add(name, substitutions, payload);
+}
+
 void process_improved_im(LLMessageSystem *msg, void **user_data)
 {
 	if (gNoRender)
@@ -2803,7 +2813,12 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
 			args["NAME"] = name;
 			LLSD payload;
 			payload["from_id"] = from_id;
-			LLNotificationsUtil::add("FriendshipAccepted", args, payload);
+			LLAvatarNameCache::get(from_id, boost::bind(&notification_display_name_callback,
+														 _1,
+														 _2,
+														 "FriendshipAccepted",
+														 args,
+														 payload));
 		}
 		break;
 
-- 
cgit v1.2.3


From 3e7f5e571ec223a67cb30ed8ce5cd09c130c3e72 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Fri, 28 May 2010 15:14:29 -0700
Subject: Code comments/variable names to make clear when legacy names used

Reviewed with Leyla
---
 indra/newview/llfloaterscriptlimits.cpp |  4 ++--
 indra/newview/llinspectremoteobject.cpp | 14 +++++++-------
 2 files changed, 9 insertions(+), 9 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloaterscriptlimits.cpp b/indra/newview/llfloaterscriptlimits.cpp
index 0149ead92e..f8a5e57389 100644
--- a/indra/newview/llfloaterscriptlimits.cpp
+++ b/indra/newview/llfloaterscriptlimits.cpp
@@ -730,8 +730,8 @@ void LLPanelScriptLimitsRegionMemory::setRegionDetails(LLSD content)
 					if(std::find(names_requested.begin(), names_requested.end(), owner_id) == names_requested.end())
 					{
 						names_requested.push_back(owner_id);
-						gCacheName->get(owner_id, is_group_owned,
-						boost::bind(&LLPanelScriptLimitsRegionMemory::onNameCache,
+						gCacheName->get(owner_id, is_group_owned,  // username
+							boost::bind(&LLPanelScriptLimitsRegionMemory::onNameCache,
 							    this, _1, _2));
 					}
 				}
diff --git a/indra/newview/llinspectremoteobject.cpp b/indra/newview/llinspectremoteobject.cpp
index 08446760f8..b651306d96 100644
--- a/indra/newview/llinspectremoteobject.cpp
+++ b/indra/newview/llinspectremoteobject.cpp
@@ -71,7 +71,7 @@ private:
 private:
 	LLUUID		 mObjectID;
 	LLUUID		 mOwnerID;
-	std::string  mOwner;
+	std::string  mOwnerLegacyName;
 	std::string  mSLurl;
 	std::string  mName;
 	bool         mGroupOwned;
@@ -81,7 +81,7 @@ LLInspectRemoteObject::LLInspectRemoteObject(const LLSD& sd) :
 	LLInspect(LLSD()),
 	mObjectID(NULL),
 	mOwnerID(NULL),
-	mOwner(""),
+	mOwnerLegacyName(),
 	mSLurl(""),
 	mName(""),
 	mGroupOwned(false)
@@ -118,10 +118,10 @@ void LLInspectRemoteObject::onOpen(const LLSD& data)
 	mSLurl      = data["slurl"].asString();
 
 	// work out the owner's name
-	mOwner = "";
+	mOwnerLegacyName = "";
 	if (gCacheName)
 	{
-		gCacheName->get(mOwnerID, mGroupOwned,
+		gCacheName->get(mOwnerID, mGroupOwned,  // muting
 			boost::bind(&LLInspectRemoteObject::onNameCache, this, _1, _2, _3));
 	}
 
@@ -142,7 +142,7 @@ void LLInspectRemoteObject::onClickMap()
 void LLInspectRemoteObject::onClickBlock()
 {
 	LLMute::EType mute_type = mGroupOwned ? LLMute::GROUP : LLMute::AGENT;
-	LLMute mute(mOwnerID, mOwner, mute_type);
+	LLMute mute(mOwnerID, mOwnerLegacyName, mute_type);
 	LLMuteList::getInstance()->add(mute);
 	LLPanelBlockedList::showPanelAndSelect(mute.mID);
 	closeFloater();
@@ -155,7 +155,7 @@ void LLInspectRemoteObject::onClickClose()
 
 void LLInspectRemoteObject::onNameCache(const LLUUID& id, const std::string& name, bool is_group)
 {
-	mOwner = name;
+	mOwnerLegacyName = name;
 	update();
 }
 
@@ -166,7 +166,7 @@ void LLInspectRemoteObject::update()
 	getChild<LLUICtrl>("object_name")->setValue("<nolink>" + mName + "</nolink>");
 
 	// show the object's owner - click it to show profile
-	std::string owner = mOwner;
+	std::string owner;
 	if (! mOwnerID.isNull())
 	{
 		if (mGroupOwned)
-- 
cgit v1.2.3


From ae91c0e7c6685932ee7789925662df139586cf3e Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Fri, 28 May 2010 15:15:33 -0700
Subject: DEV-50202 IM toast notification shows SLID and flashing info icon

Fixed to use Display Name (Username), fixed icon placement,
also fixed notifications system well names.  Reviewed with Leyla.
---
 indra/newview/llimview.cpp                         | 25 ++++++++++++++-------
 indra/newview/llsyswellwindow.cpp                  | 26 ++++++++++++++++++----
 indra/newview/llsyswellwindow.h                    |  2 ++
 indra/newview/lltoastimpanel.cpp                   |  3 ++-
 .../skins/default/xui/en/panel_activeim_row.xml    |  2 +-
 .../skins/default/xui/en/panel_instant_message.xml |  2 +-
 6 files changed, 45 insertions(+), 15 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index e6db942bad..136ccbca49 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -109,6 +109,20 @@ BOOL LLSessionTimeoutTimer::tick()
 	return TRUE;
 }
 
+static void on_avatar_name_cache_toast(const LLUUID& agent_id,
+									   const LLAvatarName& av_name,
+									   LLSD msg)
+{
+	LLSD args;
+	args["MESSAGE"] = msg["message"];
+	args["TIME"] = msg["time"];
+	// *TODO: Can this ever be an object name or group name?
+	args["FROM"] = av_name.getCompleteName();
+	args["FROM_ID"] = msg["from_id"];
+	args["SESSION_ID"] = msg["session_id"];
+	LLNotificationsUtil::add("IMToast", args, LLSD(), boost::bind(&LLIMFloater::show, msg["session_id"].asUUID()));
+}
+
 void toast_callback(const LLSD& msg){
 	// do not show toast in busy mode or it goes from agent
 	if (gAgent.getBusy() || gAgent.getID() == msg["from_id"])
@@ -136,14 +150,9 @@ void toast_callback(const LLSD& msg){
 		return;
 	}
 
-	LLSD args;
-	args["MESSAGE"] = msg["message"];
-	args["TIME"] = msg["time"];
-	args["FROM"] = msg["from"];
-	args["FROM_ID"] = msg["from_id"];
-	args["SESSION_ID"] = msg["session_id"];
-
-	LLNotificationsUtil::add("IMToast", args, LLSD(), boost::bind(&LLIMFloater::show, msg["session_id"].asUUID()));
+	LLAvatarNameCache::get(msg["from_id"].asUUID(),
+		boost::bind(&on_avatar_name_cache_toast,
+			_1, _2, msg));
 }
 
 void LLIMModel::setActiveSessionID(const LLUUID& session_id)
diff --git a/indra/newview/llsyswellwindow.cpp b/indra/newview/llsyswellwindow.cpp
index cb65756764..87481535ff 100644
--- a/indra/newview/llsyswellwindow.cpp
+++ b/indra/newview/llsyswellwindow.cpp
@@ -32,14 +32,15 @@
 
 #include "llviewerprecompiledheaders.h" // must be first include
 
+#include "llsyswellwindow.h"
+
 #include "llagent.h"
+#include "llavatarnamecache.h"
 
 #include "llflatlistview.h"
 #include "llfloaterreg.h"
 #include "llnotifications.h"
 
-#include "llsyswellwindow.h"
-
 #include "llbottomtray.h"
 #include "llscriptfloater.h"
 #include "llviewercontrol.h"
@@ -284,13 +285,30 @@ LLIMWellWindow::RowPanel::RowPanel(const LLSysWellWindow* parent, const LLUUID&
 	mChiclet->setOtherParticipantId(otherParticipantId);
 	mChiclet->setVisible(true);
 
-	LLTextBox* contactName = getChild<LLTextBox>("contact_name");
-	contactName->setValue(name);
+	if (im_chiclet_type == LLIMChiclet::TYPE_IM)
+	{
+		LLAvatarNameCache::get(otherParticipantId,
+			boost::bind(&LLIMWellWindow::RowPanel::onAvatarNameCache,
+				this, _1, _2));
+	}
+	else
+	{
+		LLTextBox* contactName = getChild<LLTextBox>("contact_name");
+		contactName->setValue(name);
+	}
 
 	mCloseBtn = getChild<LLButton>("hide_btn");
 	mCloseBtn->setCommitCallback(boost::bind(&LLIMWellWindow::RowPanel::onClosePanel, this));
 }
 
+//---------------------------------------------------------------------------------
+void LLIMWellWindow::RowPanel::onAvatarNameCache(const LLUUID& agent_id,
+												 const LLAvatarName& av_name)
+{
+	LLTextBox* contactName = getChild<LLTextBox>("contact_name");
+	contactName->setValue( av_name.getCompleteName() );
+}
+
 //---------------------------------------------------------------------------------
 void LLIMWellWindow::RowPanel::onChicletSizeChanged(LLChiclet* ctrl, const LLSD& param)
 {
diff --git a/indra/newview/llsyswellwindow.h b/indra/newview/llsyswellwindow.h
index c8215c71ee..9d8fe536e2 100644
--- a/indra/newview/llsyswellwindow.h
+++ b/indra/newview/llsyswellwindow.h
@@ -43,6 +43,7 @@
 
 #include "boost/shared_ptr.hpp"
 
+class LLAvatarName;
 class LLFlatListView;
 class LLChiclet;
 class LLIMChiclet;
@@ -208,6 +209,7 @@ private:
 
 	private:
 		static const S32 CHICLET_HPAD = 10;
+		void onAvatarNameCache(const LLUUID& agent_id, const LLAvatarName& av_name);
 		void onChicletSizeChanged(LLChiclet* ctrl, const LLSD& param);
 		void onClosePanel();
 	public:
diff --git a/indra/newview/lltoastimpanel.cpp b/indra/newview/lltoastimpanel.cpp
index 26d3bd5192..2c5438c47d 100644
--- a/indra/newview/lltoastimpanel.cpp
+++ b/indra/newview/lltoastimpanel.cpp
@@ -147,7 +147,8 @@ void LLToastIMPanel::spawnNameToolTip()
 {
 	// Spawn at right side of the name textbox.
 	LLRect sticky_rect = mAvatarName->calcScreenRect();
-	S32 icon_x = llmin(sticky_rect.mLeft + mAvatarName->getTextPixelWidth() + 3, sticky_rect.mRight - 16);
+	S32 icon_x =
+		llmin(sticky_rect.mLeft + mAvatarName->getTextPixelWidth() + 3, sticky_rect.mRight);
 	LLCoordGL pos(icon_x, sticky_rect.mTop);
 
 	LLToolTip::Params params;
diff --git a/indra/newview/skins/default/xui/en/panel_activeim_row.xml b/indra/newview/skins/default/xui/en/panel_activeim_row.xml
index 3416b2369d..72f41c62f4 100644
--- a/indra/newview/skins/default/xui/en/panel_activeim_row.xml
+++ b/indra/newview/skins/default/xui/en/panel_activeim_row.xml
@@ -71,7 +71,7 @@
 		top="10"
 		left_pad="10"
 		height="14"
-		width="255"
+		width="250"
 		length="1"
 		follows="right|left"
 		use_ellipses="true"
diff --git a/indra/newview/skins/default/xui/en/panel_instant_message.xml b/indra/newview/skins/default/xui/en/panel_instant_message.xml
index 34fd3352a3..021cf00d03 100644
--- a/indra/newview/skins/default/xui/en/panel_instant_message.xml
+++ b/indra/newview/skins/default/xui/en/panel_instant_message.xml
@@ -67,7 +67,7 @@
          top="8"
          use_ellipses="true"
          value="Erica Vader"
-         width="212" />
+         width="205" />
 	 <!-- TIME STAMP -->
         <text
         font="SansSerifSmall"
-- 
cgit v1.2.3


From 892ac2bb1eec257bbf29d57738e819b7ff368bb9 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Fri, 28 May 2010 15:43:15 -0700
Subject: Added debugging code for names changes for when People API breaks

---
 indra/newview/llpanelme.cpp           | 2 ++
 indra/newview/llviewerdisplayname.cpp | 6 +++++-
 2 files changed, 7 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llpanelme.cpp b/indra/newview/llpanelme.cpp
index d1ce59d436..cd0cbe8128 100644
--- a/indra/newview/llpanelme.cpp
+++ b/indra/newview/llpanelme.cpp
@@ -390,6 +390,8 @@ void LLPanelMyProfileEdit::onClickSetName()
 		return;		
 	}
 
+	llinfos << "name-change now " << LLDate::now() << " next_update "
+		<< LLDate(av_name.mNextUpdate) << llendl;
 	F64 now_secs = LLDate::now().secondsSinceEpoch();
 	if (now_secs < av_name.mNextUpdate)
 	{
diff --git a/indra/newview/llviewerdisplayname.cpp b/indra/newview/llviewerdisplayname.cpp
index a783cb03d8..bda0fe9737 100644
--- a/indra/newview/llviewerdisplayname.cpp
+++ b/indra/newview/llviewerdisplayname.cpp
@@ -166,9 +166,13 @@ class LLDisplayNameUpdate : public LLHTTPNode
 		LLAvatarName av_name;
 		av_name.fromLLSD( name_data );
 
+		llinfos << "name-update now " << LLDate::now()
+			<< " next_update " << LLDate(av_name.mNextUpdate)
+			<< llendl;
+
 		// Name expiration time may be provided in headers, or we may use a
 		// default value
-		// JAMESDEBUG TODO: get actual headers out of ResponsePtr
+		// *TODO: get actual headers out of ResponsePtr
 		//LLSD headers = response->mHeaders;
 		LLSD headers;
 		av_name.mExpires = 
-- 
cgit v1.2.3


From 7d5e49ac619c9b3e5a00fbb4458f8c149658e194 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Fri, 28 May 2010 15:44:49 -0700
Subject: One more text tweak in error message

---
 indra/newview/skins/default/xui/en/notifications.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 904084cfa7..e1a6052efe 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -3214,7 +3214,7 @@ Please try a shorter name.
    type="alertmodal">
 Sorry, you have to wait longer before you can change your display name.
 
-See http://wiki.secondlife.com/wiki/Setting_your_display_name for details.
+See http://wiki.secondlife.com/wiki/Setting_your_display_name
 
 Please try again later.
   </notification>
-- 
cgit v1.2.3


From 26b601b99e43eac623c81a60e93094577b06d209 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Fri, 28 May 2010 15:45:23 -0700
Subject: Getting rid of some more old gCacheName calls

---
 indra/newview/llavataractions.cpp | 37 ++++++++++++++++---------------------
 indra/newview/llinspectavatar.cpp |  2 +-
 2 files changed, 17 insertions(+), 22 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp
index 89711de6f0..6699449625 100644
--- a/indra/newview/llavataractions.cpp
+++ b/indra/newview/llavataractions.cpp
@@ -92,6 +92,11 @@ void LLAvatarActions::requestFriendshipDialog(const LLUUID& id, const std::strin
 	LLRecentPeople::instance().add(id);
 }
 
+void on_avatar_name_friendship(const LLUUID& id, const LLAvatarName av_name)
+{
+	LLAvatarActions::requestFriendshipDialog(id, av_name.getCompleteName());
+}
+
 // static
 void LLAvatarActions::requestFriendshipDialog(const LLUUID& id)
 {
@@ -100,9 +105,7 @@ void LLAvatarActions::requestFriendshipDialog(const LLUUID& id)
 		return;
 	}
 
-	std::string full_name;
-	gCacheName->getFullName(id, full_name);
-	requestFriendshipDialog(id, full_name);
+	LLAvatarNameCache::get(id, boost::bind(&on_avatar_name_friendship, _1, _2));
 }
 
 // static
@@ -127,10 +130,10 @@ void LLAvatarActions::removeFriendsDialog(const uuid_vec_t& ids)
 	if(ids.size() == 1)
 	{
 		LLUUID agent_id = ids[0];
-		std::string full_name;
-		if(gCacheName->getFullName(agent_id, full_name))
+		LLAvatarName av_name;
+		if(LLAvatarNameCache::get(agent_id, &av_name))
 		{
-			args["NAME"] = full_name;
+			args["NAME"] = av_name.mDisplayName;
 		}
 
 		msgType = "RemoveFromFriends";
@@ -158,14 +161,6 @@ void LLAvatarActions::offerTeleport(const LLUUID& invitee)
 	if (invitee.isNull())
 		return;
 
-	//waiting until Name Cache gets updated with corresponding avatar name
-	std::string just_to_request_name;
-	if (!gCacheName->getFullName(invitee, just_to_request_name))
-	{
-		gCacheName->get(invitee, FALSE, boost::bind((void (*)(const LLUUID&)) &LLAvatarActions::offerTeleport, invitee));
-		return;
-	}
-
 	LLDynamicArray<LLUUID> ids;
 	ids.push_back(invitee);
 	offerTeleport(ids);
@@ -331,14 +326,14 @@ void LLAvatarActions::showProfile(const LLUUID& id)
 // static
 void LLAvatarActions::showOnMap(const LLUUID& id)
 {
-	std::string name;
-	if (!gCacheName->getFullName(id, name))
+	LLAvatarName av_name;
+	if (!LLAvatarNameCache::get(id, &av_name))
 	{
-		gCacheName->get(id, FALSE, boost::bind(&LLAvatarActions::showOnMap, id));
+		LLAvatarNameCache::get(id, boost::bind(&LLAvatarActions::showOnMap, id));
 		return;
 	}
 
-	gFloaterWorldMap->trackAvatar(id, name);
+	gFloaterWorldMap->trackAvatar(id, av_name.mDisplayName);
 	LLFloaterReg::showInstance("world_map");
 }
 
@@ -535,7 +530,7 @@ void LLAvatarActions::toggleBlock(const LLUUID& id)
 {
 	std::string name;
 
-	gCacheName->getFullName(id, name);
+	gCacheName->getFullName(id, name); // needed for mute
 	LLMute mute(id, name, LLMute::AGENT);
 
 	if (LLMuteList::getInstance()->isMuted(mute.mID, mute.mName))
@@ -739,7 +734,7 @@ bool LLAvatarActions::isFriend(const LLUUID& id)
 bool LLAvatarActions::isBlocked(const LLUUID& id)
 {
 	std::string name;
-	gCacheName->getFullName(id, name);
+	gCacheName->getFullName(id, name); // needed for mute
 	return LLMuteList::getInstance()->isMuted(id, name);
 }
 
@@ -747,7 +742,7 @@ bool LLAvatarActions::isBlocked(const LLUUID& id)
 bool LLAvatarActions::canBlock(const LLUUID& id)
 {
 	std::string full_name;
-	gCacheName->getFullName(id, full_name);
+	gCacheName->getFullName(id, full_name); // needed for mute
 	bool is_linden = (full_name.find("Linden") != std::string::npos);
 	bool is_self = id == gAgentID;
 	return !is_self && !is_linden;
diff --git a/indra/newview/llinspectavatar.cpp b/indra/newview/llinspectavatar.cpp
index a9b9557027..1cd1dcc7f0 100644
--- a/indra/newview/llinspectavatar.cpp
+++ b/indra/newview/llinspectavatar.cpp
@@ -733,7 +733,7 @@ void LLInspectAvatar::onClickZoomIn()
 
 void LLInspectAvatar::onClickFindOnMap()
 {
-	gFloaterWorldMap->trackAvatar(mAvatarID, mAvatarName.getLegacyName());
+	gFloaterWorldMap->trackAvatar(mAvatarID, mAvatarName.mDisplayName);
 	LLFloaterReg::showInstance("world_map");
 }
 
-- 
cgit v1.2.3


From 6863c9eb3d0b50dcf31ae8a8b4a2bab50e481296 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Tue, 1 Jun 2010 06:20:07 -0700
Subject: Avoid name lookups when loading chat history on startup

Also fixes DEV-50451, ??? for object names in chat history log
on login.
---
 indra/newview/llchathistory.cpp | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index 5323ecce72..c52e8daf43 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -274,10 +274,14 @@ public:
 			user_name->setValue(mFrom);
 			updateMinUserNameWidth();
 		}
-		else if (mSourceType == CHAT_SOURCE_AGENT)
+		else if (mSourceType == CHAT_SOURCE_AGENT
+				 && chat.mChatStyle != CHAT_STYLE_HISTORY)
 		{
-			// ...from a normal user, lookup the name and fill in later,
-			// but start with blank so sample data from XUI XML doesn't
+			// ...from a normal user, lookup the name and fill in later.
+			// *NOTE: Do not do this for chat history logs, otherwise the viewer
+			// will flood the People API with lookup requests on startup
+			
+			// Start with blank so sample data from XUI XML doesn't
 			// flash on the screen
 			user_name->setValue( LLSD() );
 			LLAvatarNameCache::get(mAvatarID,
-- 
cgit v1.2.3


From 7666922593084fc741931662ba846284e39f6e9c Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Tue, 1 Jun 2010 06:57:51 -0700
Subject: Clean up some comments

---
 indra/newview/llcallingcard.cpp           | 2 +-
 indra/newview/llfolderview.h              | 2 +-
 indra/newview/llfoldervieweventlistener.h | 2 +-
 indra/newview/llfolderviewitem.h          | 2 +-
 indra/newview/llhudnametag.cpp            | 4 ++--
 indra/newview/lltoolpie.cpp               | 2 +-
 indra/newview/llviewermessage.cpp         | 2 +-
 7 files changed, 8 insertions(+), 8 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llcallingcard.cpp b/indra/newview/llcallingcard.cpp
index 7a1524b15e..9937364bc6 100644
--- a/indra/newview/llcallingcard.cpp
+++ b/indra/newview/llcallingcard.cpp
@@ -264,7 +264,7 @@ S32 LLAvatarTracker::addBuddyList(const LLAvatarTracker::buddy_map_t& buds)
 		{
 			++new_buddy_count;
 			mBuddyInfo[agent_id] = (*itr).second;
-			// IDEVO JAMESDEBUG is this necessary?  name is unused?
+			// IDEVO: is this necessary?  name is unused?
 			gCacheName->getFullName(agent_id, full_name);
 			addChangedMask(LLFriendObserver::ADD, agent_id);
 			lldebugs << "Added buddy " << agent_id
diff --git a/indra/newview/llfolderview.h b/indra/newview/llfolderview.h
index 0dfdbd364b..8efd645521 100644
--- a/indra/newview/llfolderview.h
+++ b/indra/newview/llfolderview.h
@@ -120,7 +120,7 @@ public:
 	const std::string getFilterSubString(BOOL trim = FALSE);
 	U32 getFilterObjectTypes() const;
 	PermissionMask getFilterPermissions() const;
-	// JAMESDEBUG use getFilter()->getShowFolderState();
+	// *NOTE: use getFilter()->getShowFolderState();
 	//LLInventoryFilter::EFolderShow getShowFolderState();
 	U32 getSortOrder() const;
 	BOOL isFilterModified();
diff --git a/indra/newview/llfoldervieweventlistener.h b/indra/newview/llfoldervieweventlistener.h
index a2ef8c1d12..0e2185bde5 100644
--- a/indra/newview/llfoldervieweventlistener.h
+++ b/indra/newview/llfoldervieweventlistener.h
@@ -31,7 +31,7 @@
 #ifndef LLFOLDERVIEWEVENTLISTENER_H
 #define LLFOLDERVIEWEVENTLISTENER_H
 
-#include "lldarray.h"	// JAMESDEBUG convert to std::vector
+#include "lldarray.h"	// *TODO: convert to std::vector
 #include "llfoldertype.h"
 #include "llfontgl.h"	// just for StyleFlags enum
 #include "llinventorytype.h"
diff --git a/indra/newview/llfolderviewitem.h b/indra/newview/llfolderviewitem.h
index 57c722afa4..894b9df967 100644
--- a/indra/newview/llfolderviewitem.h
+++ b/indra/newview/llfolderviewitem.h
@@ -57,7 +57,7 @@ enum EInventorySortGroup
 	SG_ITEM 
 };
 
-// JAMESDEBUG *TODO: do we really need one sort object per folder?
+// *TODO: do we really need one sort object per folder?
 // can we just have one of these per LLFolderView ?
 class LLInventorySort
 {
diff --git a/indra/newview/llhudnametag.cpp b/indra/newview/llhudnametag.cpp
index 2cb333a717..303f048dfc 100644
--- a/indra/newview/llhudnametag.cpp
+++ b/indra/newview/llhudnametag.cpp
@@ -286,7 +286,7 @@ void LLHUDNameTag::renderText(BOOL for_select)
 	LLColor4 bg_color = LLUIColorTable::instance().getColor("NameTagBackground");
 	bg_color.setAlpha(gSavedSettings.getF32("ChatBubbleOpacity") * alpha_factor);
 
-	// JAMESDEBUG - maybe a no-op
+	// maybe a no-op?
 	//const S32 border_height = 16;
 	//const S32 border_width = 16;
 	const S32 border_height = 8;
@@ -523,7 +523,7 @@ void LLHUDNameTag::renderText(BOOL for_select)
 			{
 				x_offset = -0.5f * mWidth + (HORIZONTAL_PADDING / 2.f);
 
-				// JAMESDEBUG HACK
+				// *HACK
 				x_offset += 1;
 			}
 
diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp
index ebef28fd64..7dd68d392e 100644
--- a/indra/newview/lltoolpie.cpp
+++ b/indra/newview/lltoolpie.cpp
@@ -860,7 +860,7 @@ BOOL LLToolPie::handleTooltipObject( LLViewerObject* hover_object, std::string l
 			|| !existing_inspector->getVisible()
 			|| existing_inspector->getKey()["avatar_id"].asUUID() != hover_object->getID())
 		{
-			// IDEVO JAMESDEBUG try to get display name + SLID
+			// IDEVO: try to get display name + username
 			std::string final_name;
 			std::string full_name;
 			if (!gCacheName->getFullName(hover_object->getID(), full_name))
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index cca1415f9c..182b216cbb 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -3006,7 +3006,7 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
 	// IDEVO Correct for new-style "Resident" names
 	if (chat.mSourceType == CHAT_SOURCE_AGENT)
 	{
-		// JAMESDEBUG - I don't know if it's OK to change this here, if 
+		// I don't know if it's OK to change this here, if 
 		// anything downstream does lookups by name, for instance
 		LLAvatarName av_name;
 		if (LLAvatarNameCache::useDisplayNames()
-- 
cgit v1.2.3


From 3a37588a4f6f918c3cbec826ccd86c607fc0c797 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Tue, 1 Jun 2010 11:22:42 -0700
Subject: DEV-50439 Legacy name shown in Title of Voice Call dialog

Wasn't updating window title with correct name.  Also fixed
outgoing call dialog.  Reviewed with Simon.
---
 indra/newview/llcallfloater.cpp | 22 ++++++++++++++++++++++
 indra/newview/llcallfloater.h   |  5 +++++
 indra/newview/llimview.cpp      |  9 +++++----
 3 files changed, 32 insertions(+), 4 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llcallfloater.cpp b/indra/newview/llcallfloater.cpp
index 69a931fd5b..9120990813 100644
--- a/indra/newview/llcallfloater.cpp
+++ b/indra/newview/llcallfloater.cpp
@@ -377,9 +377,31 @@ void LLCallFloater::sOnCurrentChannelChanged(const LLUUID& /*session_id*/)
 	call_floater->connectToChannel(channel);
 }
 
+void LLCallFloater::onAvatarNameCache(const LLUUID& agent_id,
+									  const LLAvatarName& av_name)
+{
+	LLStringUtil::format_map_t args;
+	args["[NAME]"] = av_name.getCompleteName();
+	std::string title = getString("title_peer_2_peer", args);
+	setTitle(title);
+}
+
 void LLCallFloater::updateTitle()
 {
 	LLVoiceChannel* voice_channel = LLVoiceChannel::getCurrentVoiceChannel();
+	if (mVoiceType == VC_PEER_TO_PEER)
+	{
+		LLUUID session_id = voice_channel->getSessionID();
+		LLIMModel::LLIMSession* im_session =
+			LLIMModel::getInstance()->findIMSession(session_id);
+		if (im_session)
+		{
+			LLAvatarNameCache::get(im_session->mOtherParticipantID,
+				boost::bind(&LLCallFloater::onAvatarNameCache,
+					this, _1, _2));
+			return;
+		}
+	}
 	std::string title;
 	switch (mVoiceType)
 	{
diff --git a/indra/newview/llcallfloater.h b/indra/newview/llcallfloater.h
index 0a8ea7de39..4ec594a23a 100644
--- a/indra/newview/llcallfloater.h
+++ b/indra/newview/llcallfloater.h
@@ -40,6 +40,7 @@
 
 class LLAvatarList;
 class LLAvatarListItem;
+class LLAvatarName;
 class LLNonAvatarCaller;
 class LLOutputMonitorCtrl;
 class LLParticipantList;
@@ -122,6 +123,10 @@ private:
 	 */
 	void onAvatarListRefreshed();
 
+	/**
+	 * Updates window title with an avatar name
+	 */
+	void onAvatarNameCache(const LLUUID& agent_id, const LLAvatarName& av_name);
 	
 	void updateTitle();
 	void initAgentData();
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index 136ccbca49..38fced9bb2 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -1756,11 +1756,9 @@ void LLOutgoingCallDialog::show(const LLSD& key)
 		callee_name = LLTextUtil::formatPhoneNumber(callee_name);
 	}
 	
-	setTitle(callee_name);
-
 	LLSD callee_id = mPayload["other_user_id"];
-	// Beautification:  Since SLID is in the title bar, and you probably
-	// recognize this person's voice, just show display name
+	// Beautification:  Since you know who you called, just show display name
+	std::string title = callee_name;
 	std::string final_callee_name = callee_name;
 	if (mPayload["session_type"].asInteger() == LLIMModel::LLIMSession::P2P_SESSION)
 	{
@@ -1768,11 +1766,14 @@ void LLOutgoingCallDialog::show(const LLSD& key)
 		if (LLAvatarNameCache::get(callee_id, &av_name))
 		{
 			final_callee_name = av_name.mDisplayName;
+			title = av_name.getCompleteName();
 		}
 	}
 	childSetTextArg("calling", "[CALLEE_NAME]", final_callee_name);
 	childSetTextArg("connecting", "[CALLEE_NAME]", final_callee_name);
 
+	setTitle(title);
+
 	// for outgoing group calls callee_id == group id == session id
 	setIcon(callee_id, callee_id);
 
-- 
cgit v1.2.3


From 010dba68ad923cf66b1e05e6969a21f7288fe78a Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Tue, 1 Jun 2010 11:26:03 -0700
Subject: DEV-50741 Complete name extends off of Pay Resident dialog

---
 indra/newview/skins/default/xui/en/floater_pay.xml | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/floater_pay.xml b/indra/newview/skins/default/xui/en/floater_pay.xml
index 3730890e59..9cb251e167 100644
--- a/indra/newview/skins/default/xui/en/floater_pay.xml
+++ b/indra/newview/skins/default/xui/en/floater_pay.xml
@@ -7,7 +7,7 @@
  name="Give Money"
  help_topic="give_money"
  save_rect="true"
- width="225">
+ width="250">
    <string
     name="payee_group">
         Pay Group
@@ -28,14 +28,14 @@
      name="payee_name"
      top="25" 
      width="230">
-        Test Name
+        Test Name That Is Extremely Long To Check Clipping
     </text>
     <button
      height="23"
      label="L$1"
      label_selected="L$1"
      layout="topleft"
-     left="25"
+     left="35"
      name="fastpay 1"
      top_pad="8"
      width="80" />
@@ -52,7 +52,7 @@
      label="L$10"
      label_selected="L$10"
      layout="topleft"
-     left="25"
+     left="35"
      name="fastpay 10"
      top_pad="8"
      width="80" />
@@ -70,7 +70,7 @@
      follows="left|top"
      height="18"
      layout="topleft"
-     left="25"
+     left="35"
      name="amount text"
      top_pad="8"
      width="180">
@@ -82,7 +82,7 @@
      height="19"
      top_pad="0"
      layout="topleft"
-     left="120"
+     left="130"
      max_length="9"
      name="amount"
      width="80" />
@@ -92,16 +92,16 @@
      label="Pay"
      label_selected="Pay"
      layout="topleft"
-     left="10"
+     left="20"
      name="pay btn"
-     top_pad="5"
+     top_pad="15"
      width="100" />
     <button
      height="23"
      label="Cancel"
      label_selected="Cancel"
      layout="topleft"
-     left_pad="5"
+     left_pad="10"
      name="cancel btn"
      width="100" />
 </floater>
-- 
cgit v1.2.3


From 4835c615d5a00f146bcd5c7a50153418ce2a3613 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Tue, 1 Jun 2010 16:09:58 -0700
Subject: DEV-50778 Update text for display name change in viewer

Reviewed with Erica - got them as close as we can with the data
we have available.
---
 indra/newview/llpanelme.cpp                          |  4 +++-
 indra/newview/skins/default/xui/en/notifications.xml | 20 ++++++++------------
 2 files changed, 11 insertions(+), 13 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llpanelme.cpp b/indra/newview/llpanelme.cpp
index cd0cbe8128..0fc2a78bcd 100644
--- a/indra/newview/llpanelme.cpp
+++ b/indra/newview/llpanelme.cpp
@@ -298,7 +298,9 @@ void LLPanelMyProfileEdit::onCacheSetName(bool success,
 	{
 		// Inform the user that the change took place, but will take a while
 		// to percolate.
-		LLNotificationsUtil::add("SetDisplayNameSuccess");
+		LLSD args;
+		args["DISPLAY_NAME"] = content["display_name"];
+		LLNotificationsUtil::add("SetDisplayNameSuccess", args);
 
 		// Re-fetch my name, as it may have been sanitized by the service
 		LLAvatarNameCache::get(getAvatarId(),
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 50e839ad17..c7eb90dbff 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -3130,10 +3130,10 @@ You are no longer frozen.
   <notification
    icon="alertmodal.tga"
    name="SetDisplayName"
-   type="alertmodal">
-Your new display name will be used for name tags, chat, friends lists, etc. You can also reset it back to your original username. There will be a delay before you can change your display name again, so choose wisely.
+   type="alert">
+The name above your avatar's head is called a [http://wiki.secondlife.com/wiki/Setting_your_display_name display name]. You can change it periodically.
 
-See http://wiki.secondlife.com/wiki/Setting_your_display_name
+Press reset to make it the same as your username.
 
 Change your display name?
     <form name="form">
@@ -3159,22 +3159,18 @@ Change your display name?
   <notification
    icon="alertmodal.tga"
    name="SetDisplayNameSuccess"
-   type="alertmodal">
-Thanks for updating your name!
-
-Just like in real life, it takes a while for everyone to learn about a new name.  Please allow several days for your name to update in object ownership, scripts, search, etc.
+   type="alert">
+Hi [DISPLAY_NAME]!
 
-See http://wiki.secondlife.com/wiki/Setting_your_display_name
+Just like in real life, it takes a while for everyone to learn about a new name.  Please allow several days for [http://wiki.secondlife.com/wiki/Setting_your_display_name your name to update] in objects, scripts, search, etc.
   </notification>
 
   <notification
    icon="alertmodal.tga"
    name="SetDisplayNameFailedLockout"
-   type="alertmodal">
-Sorry, you cannot change your display name until:
+   type="alert">
+Sorry, you cannot [http://wiki.secondlife.com/wiki/Setting_your_display_name change your display name] until:
 [TIME]
-
-See http://wiki.secondlife.com/wiki/Setting_your_display_name
   </notification>
 
   <notification
-- 
cgit v1.2.3


From b742f0c2a4cf1355044fbcebdad4346a4871a89b Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Wed, 2 Jun 2010 11:08:13 -0700
Subject: DEV-50740 Complete name overlaps Cancel Land Sale button in about
 land floater

---
 indra/newview/skins/default/xui/en/floater_about_land.xml | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/floater_about_land.xml b/indra/newview/skins/default/xui/en/floater_about_land.xml
index 5f28fa6495..3bc78e8a12 100644
--- a/indra/newview/skins/default/xui/en/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/en/floater_about_land.xml
@@ -373,7 +373,8 @@ Leyla Linden               </text>
              left_delta="-199"
              name="For sale to"
              top_delta="20"
-             width="186">
+             use_ellipses="true" 
+             width="340">
                 For sale to: [BUYER]
             </text>
             <text
@@ -409,7 +410,7 @@ Leyla Linden               </text>
              right="-10"
              name="Cancel Land Sale"
              left_pad="5"
-             top_pad="-25"
+             top_pad="-15"
              width="180" />
             <text
              type="string"
@@ -540,7 +541,7 @@ Leyla Linden               </text>
              layout="topleft"
              left_delta="0"
              name="Reclaim Land..."
-             top_delta="-61"
+             top_delta="-50"
              width="180" />
             <button
              enabled="false"
-- 
cgit v1.2.3


From bc7837a697bb1b9dac3bef9019dac1fcce2ffa0a Mon Sep 17 00:00:00 2001
From: leyla <leyla@leyla.com>
Date: Wed, 2 Jun 2010 11:23:02 -0700
Subject: notification fixes

---
 indra/newview/llcallingcard.cpp     | 7 ++-----
 indra/newview/llpanelavatar.cpp     | 6 +-----
 indra/newview/llpanelgrouproles.cpp | 6 +-----
 indra/newview/llviewermessage.cpp   | 4 ++--
 indra/newview/llviewerparcelmgr.cpp | 4 +---
 5 files changed, 7 insertions(+), 20 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llcallingcard.cpp b/indra/newview/llcallingcard.cpp
index 9937364bc6..1685562013 100644
--- a/indra/newview/llcallingcard.cpp
+++ b/indra/newview/llcallingcard.cpp
@@ -638,12 +638,9 @@ void LLAvatarTracker::processChange(LLMessageSystem* msg)
 			{
 				if((mBuddyInfo[agent_id]->getRightsGrantedFrom() ^  new_rights) & LLRelationship::GRANT_MODIFY_OBJECTS)
 				{
-					std::string name;
 					LLSD args;
-					if(gCacheName->getFullName(agent_id, name))
-					{
-						args["NAME"] = name;
-					}
+					args["NAME"] = LLSLURL("agent", agent_id, "displayname").getSLURLString();
+					
 					LLSD payload;
 					payload["from_id"] = agent_id;
 					if(LLRelationship::GRANT_MODIFY_OBJECTS & new_rights)
diff --git a/indra/newview/llpanelavatar.cpp b/indra/newview/llpanelavatar.cpp
index 56118298fa..3b43d24ea0 100644
--- a/indra/newview/llpanelavatar.cpp
+++ b/indra/newview/llpanelavatar.cpp
@@ -224,12 +224,8 @@ void LLPanelAvatarNotes::rightsConfirmationCallback(const LLSD& notification,
 
 void LLPanelAvatarNotes::confirmModifyRights(bool grant, S32 rights)
 {
-	std::string full_name;
 	LLSD args;
-	if (gCacheName->getFullName(getAvatarId(), full_name))
-	{
-		args["NAME"] = full_name;
-	}
+	args["NAME"] = LLSLURL("agent", getAvatarId(), "displayname").getSLURLString();
 
 	if (grant)
 	{
diff --git a/indra/newview/llpanelgrouproles.cpp b/indra/newview/llpanelgrouproles.cpp
index 7dec2251e8..b06eedfcca 100644
--- a/indra/newview/llpanelgrouproles.cpp
+++ b/indra/newview/llpanelgrouproles.cpp
@@ -1113,11 +1113,7 @@ void LLPanelGroupMembersSubTab::sendEjectNotifications(const LLUUID& group_id, c
 		for (uuid_vec_t::const_iterator i = selected_members.begin(); i != selected_members.end(); ++i)
 		{
 			LLSD args;
-			std::string name;
-			
-			gCacheName->getFullName(*i, name);
-
-			args["AVATAR_NAME"] = name;
+			args["AVATAR_NAME"] = LLSLURL("agent", *i, "displayname").getSLURLString();
 			args["GROUP_NAME"] = group_data->mName;
 			
 			LLNotifications::instance().add(LLNotification::Params("EjectAvatarFromGroup").substitutions(args));
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 182b216cbb..e4b04b5d4f 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -6088,9 +6088,9 @@ bool handle_lure_callback(const LLSD& notification, const LLSD& response)
 			// Record the offer.
 			{
 				std::string target_name;
-				gCacheName->getFullName(target_id, target_name);
+				gCacheName->getFullName(target_id, target_name);  // for im log filenames
 				LLSD args;
-				args["TO_NAME"] = target_name;
+				args["TO_NAME"] = LLSLURL("agent", target_id, "displayname").getSLURLString();;
 	
 				LLSD payload;
 				
diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp
index c5d4ed1088..8e1ce03964 100644
--- a/indra/newview/llviewerparcelmgr.cpp
+++ b/indra/newview/llviewerparcelmgr.cpp
@@ -2075,9 +2075,7 @@ void LLViewerParcelMgr::deedLandToGroup()
 	args["GROUP_NAME"] = group_name;
 	if(mCurrentParcel->getContributeWithDeed())
 	{
-		std::string full_name;
-		gCacheName->getFullName(mCurrentParcel->getOwnerID(), full_name);
-		args["NAME"] = full_name;
+		args["NAME"] = LLSLURL("agent", mCurrentParcel->getOwnerID(), "completename").getSLURLString();
 		LLNotificationsUtil::add("DeedLandToGroupWithContribution",args, LLSD(), deedAlertCB);
 	}
 	else
-- 
cgit v1.2.3


From 507410b63d2e8f5193443a8d5451ccf614ac85e7 Mon Sep 17 00:00:00 2001
From: leyla <leyla@leyla.com>
Date: Wed, 2 Jun 2010 11:23:17 -0700
Subject: positioning xui fixes

---
 indra/newview/skins/default/xui/en/floater_sell_land.xml   | 2 +-
 indra/newview/skins/default/xui/en/panel_region_debug.xml  | 2 +-
 indra/newview/skins/default/xui/en/panel_region_estate.xml | 3 ++-
 3 files changed, 4 insertions(+), 3 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/floater_sell_land.xml b/indra/newview/skins/default/xui/en/floater_sell_land.xml
index 4cae42bcfe..619669d28a 100644
--- a/indra/newview/skins/default/xui/en/floater_sell_land.xml
+++ b/indra/newview/skins/default/xui/en/floater_sell_land.xml
@@ -164,7 +164,7 @@
      left_delta="0"
      name="sell_to_agent"
      top_pad="4"
-     width="130" />
+     width="170" />
     <button
      height="20"
      label="Select"
diff --git a/indra/newview/skins/default/xui/en/panel_region_debug.xml b/indra/newview/skins/default/xui/en/panel_region_debug.xml
index a6b4ddd01e..7d828b90b2 100644
--- a/indra/newview/skins/default/xui/en/panel_region_debug.xml
+++ b/indra/newview/skins/default/xui/en/panel_region_debug.xml
@@ -103,7 +103,7 @@
      mouse_opaque="false"
      name="target_avatar_name"
      top_delta="-2"
-     width="180">
+     width="24 0">
         (none)
     </line_editor>
     <button
diff --git a/indra/newview/skins/default/xui/en/panel_region_estate.xml b/indra/newview/skins/default/xui/en/panel_region_estate.xml
index 08e36d5e57..1307d807e2 100644
--- a/indra/newview/skins/default/xui/en/panel_region_estate.xml
+++ b/indra/newview/skins/default/xui/en/panel_region_estate.xml
@@ -72,7 +72,8 @@
      left_delta="0"
      name="estate_owner"
      top_delta="16"
-     width="150">
+     use_ellipses="true"
+     width="290">
         (unknown)
     </text>
     <view_border
-- 
cgit v1.2.3


From b34eee98d1cd542777a9fc28b1e1d2e3a0de24e5 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Wed, 2 Jun 2010 15:21:46 -0700
Subject: DEV-50451 Fix names in local chat history loading, again

Switch to new serialization format, change filename so old viewers
don't get confused if the user switches back.  Reviewed with Richard
---
 indra/newview/llimview.cpp     |   5 --
 indra/newview/lllogchat.cpp    | 179 ++++++++++-------------------------------
 indra/newview/lllogchat.h      |  47 ++++-------
 indra/newview/llnearbychat.cpp |  17 ++--
 4 files changed, 64 insertions(+), 184 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index 00e7537b8b..d0bb98fc8c 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -71,11 +71,6 @@
 #include "llviewerparcelmgr.h"
 
 
-const static std::string IM_TIME("time");
-const static std::string IM_TEXT("message");
-const static std::string IM_FROM("from");
-const static std::string IM_FROM_ID("from_id");
-
 const static std::string NO_SESSION("(IM Session Doesn't Exist)");
 const static std::string ADHOC_NAME_SUFFIX(" Conference");
 
diff --git a/indra/newview/lllogchat.cpp b/indra/newview/lllogchat.cpp
index 1d348834fe..d4ebdd768b 100644
--- a/indra/newview/lllogchat.cpp
+++ b/indra/newview/lllogchat.cpp
@@ -32,13 +32,18 @@
 
 #include "llviewerprecompiledheaders.h"
 
+#include "lllogchat.h"
+
+// viewer includes
 #include "llagent.h"
 #include "llagentui.h"
-#include "lllogchat.h"
 #include "lltrans.h"
 #include "llviewercontrol.h"
 
+// library includes
+#include "llchat.h"
 #include "llinstantmessage.h"
+#include "llsdserialize.h"
 #include "llsingleton.h" // for LLSingleton
 
 #include <boost/algorithm/string/trim.hpp>
@@ -62,12 +67,13 @@
 
 const S32 LOG_RECALL_SIZE = 2048;
 
-const static std::string IM_TIME("time");
-const static std::string IM_TEXT("message");
-const static std::string IM_FROM("from");
-const static std::string IM_FROM_ID("from_id");
-const static std::string IM_SEPARATOR(": ");
+const std::string IM_TIME("time");
+const std::string IM_TEXT("message");
+const std::string IM_FROM("from");
+const std::string IM_FROM_ID("from_id");
+const std::string IM_SOURCE_TYPE("source_type");
 
+const static std::string IM_SEPARATOR(": ");
 const static std::string NEW_LINE("\n");
 const static std::string NEW_LINE_SPACE_PREFIX("\n ");
 const static std::string TWO_SPACES("  ");
@@ -190,7 +196,8 @@ std::string LLLogChat::makeLogFileName(std::string filename)
 {
 	filename = cleanFileName(filename);
 	filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_ACCOUNT_CHAT_LOGS,filename);
-	filename += ".txt";
+	// new files are llsd notation format
+	filename += ".llsd";
 	return filename;
 }
 
@@ -239,6 +246,18 @@ void LLLogChat::saveHistory(const std::string& filename,
 			    const std::string& from,
 			    const LLUUID& from_id,
 			    const std::string& line)
+{
+	LLChat chat;
+	chat.mText = line;
+	chat.mFromName = from;
+	chat.mFromID = from_id;
+	// default to being from an agent
+	chat.mSourceType = CHAT_SOURCE_AGENT;
+	saveHistory(filename, chat);
+}
+
+//static
+void LLLogChat::saveHistory(const std::string& filename, const LLChat& chat)
 {
 	std::string tmp_filename = filename;
 	LLStringUtil::trim(tmp_filename);
@@ -260,89 +279,27 @@ void LLLogChat::saveHistory(const std::string& filename,
 	LLSD item;
 
 	if (gSavedPerAccountSettings.getBOOL("LogTimestamp"))
-		 item["time"] = LLLogChat::timestamp(gSavedPerAccountSettings.getBOOL("LogTimestampDate"));
+		 item[IM_TIME] = LLLogChat::timestamp(gSavedPerAccountSettings.getBOOL("LogTimestampDate"));
 
-	item["from_id"]	= from_id;
-	item["message"]	= line;
+	item[IM_FROM_ID] = chat.mFromID;
+	item[IM_TEXT] = chat.mText;
+	item[IM_SOURCE_TYPE] = chat.mSourceType;
 
 	//adding "Second Life:" for all system messages to make chat log history parsing more reliable
-	if (from.empty() && from_id.isNull())
+	if (chat.mFromName.empty() && chat.mFromID.isNull())
 	{
-		item["from"] = SYSTEM_FROM; 
+		item[IM_FROM] = SYSTEM_FROM; 
 	}
 	else
 	{
-		item["from"] = from;
+		item[IM_FROM] = chat.mFromName;
 	}
 
-	file << LLChatLogFormatter(item) << std::endl;
+	file << LLSDOStreamer<LLSDNotationFormatter>(item) << std::endl;
 
 	file.close();
 }
 
-void LLLogChat::loadHistory(const std::string& filename, void (*callback)(ELogLineType, const LLSD&, void*), void* userdata)
-{
-	if(!filename.size())
-	{
-		llwarns << "Filename is Empty!" << llendl;
-		return ;
-	}
-        
-	LLFILE* fptr = LLFile::fopen(makeLogFileName(filename), "r");		/*Flawfinder: ignore*/
-	if (!fptr)
-	{
-		callback(LOG_EMPTY, LLSD(), userdata);
-		return;			//No previous conversation with this name.
-	}
-	else
-	{
-		char buffer[LOG_RECALL_SIZE];		/*Flawfinder: ignore*/
-		char *bptr;
-		S32 len;
-		bool firstline=TRUE;
-
-		if ( fseek(fptr, (LOG_RECALL_SIZE - 1) * -1  , SEEK_END) )		
-		{	//File is smaller than recall size.  Get it all.
-			firstline = FALSE;
-			if ( fseek(fptr, 0, SEEK_SET) )
-			{
-				fclose(fptr);
-				return;
-			}
-		}
-
-		while ( fgets(buffer, LOG_RECALL_SIZE, fptr)  && !feof(fptr) ) 
-		{
-			len = strlen(buffer) - 1;		/*Flawfinder: ignore*/
-			for ( bptr = (buffer + len); (*bptr == '\n' || *bptr == '\r') && bptr>buffer; bptr--)	*bptr='\0';
-			
-			if (!firstline)
-			{
-				LLSD item;
-				std::string line(buffer);
-				std::istringstream iss(line);
-				
-				if (!LLChatLogParser::parse(line, item))
-				{
-					item["message"]	= line;
-					callback(LOG_LINE, item, userdata);
-				}
-				else
-				{
-					callback(LOG_LLSD, item, userdata);
-				}
-			}
-			else
-			{
-				firstline = FALSE;
-			}
-		}
-		callback(LOG_END, LLSD(), userdata);
-		
-		fclose(fptr);
-	}
-}
-
 void append_to_last_message(std::list<LLSD>& messages, const std::string& line)
 {
 	if (!messages.size()) return;
@@ -352,6 +309,7 @@ void append_to_last_message(std::list<LLSD>& messages, const std::string& line)
 	messages.back()[IM_TEXT] = im_text;
 }
 
+// static
 void LLLogChat::loadAllHistory(const std::string& file_name, std::list<LLSD>& messages)
 {
 	if (file_name.empty())
@@ -415,53 +373,7 @@ void LLLogChat::loadAllHistory(const std::string& file_name, std::list<LLSD>& me
 	fclose(fptr);
 }
 
-//*TODO mark object's names in a special way so that they will be distinguishable form avatar name 
-//which are more strict by its nature (only firstname and secondname)
-//Example, an object's name can be writen like "Object <actual_object's_name>"
-void LLChatLogFormatter::format(const LLSD& im, std::ostream& ostr) const
-{
-	if (!im.isMap())
-	{
-		llwarning("invalid LLSD type of an instant message", 0);
-		return;
-	}
-
-	if (im[IM_FROM_ID].isDefined())
-	{
-		LLUUID from_id = im[IM_FROM_ID].asUUID();
-		ostr << '{' << from_id.asString() << '}';
-	}
-
-	if (im[IM_TIME].isDefined())
-	{
-		std::string timestamp = im[IM_TIME].asString();
-		boost::trim(timestamp);
-		ostr << '[' << timestamp << ']' << TWO_SPACES;
-	}
-
-	//*TODO mark object's names in a special way so that they will be distinguishable form avatar name 
-	//which are more strict by its nature (only firstname and secondname)
-	//Example, an object's name can be writen like "Object <actual_object's_name>"
-	if (im[IM_FROM].isDefined())
-	{
-		std::string from = im[IM_FROM].asString();
-		boost::trim(from);
-		if (from.size())
-		{
-			ostr << from << IM_SEPARATOR;
-		}
-	}
-	
-	if (im[IM_TEXT].isDefined())
-	{
-		std::string im_text = im[IM_TEXT].asString();
-
-		//multilined text will be saved with prepended spaces
-		boost::replace_all(im_text, NEW_LINE, NEW_LINE_SPACE_PREFIX);
-		ostr << im_text;
-	}
-}
-
+// static
 bool LLChatLogParser::parse(const std::string& raw, LLSD& im)
 {
 	if (!raw.length()) return false;
@@ -470,24 +382,19 @@ bool LLChatLogParser::parse(const std::string& raw, LLSD& im)
 
 	// In Viewer 2.1 we added UUID to chat/IM logging so we can look up
 	// display names
-	std::string line = raw;
 	if (raw[0] == '{')
 	{
-		const S32 UUID_LEN = 36;
-		size_t pos = line.find_first_of('}');
-		// If it matches, pos will be 37
-		if (pos != line.npos && pos > UUID_LEN)
-		{
-			std::string uuid_string = line.substr(1, UUID_LEN);
-			LLUUID from_id(uuid_string);
-			im[IM_FROM_ID] = from_id;
-			line = line.substr(pos + 1);
-		}
+		// ...this is a viewer 2.1, new-style LLSD notation format log
+		std::istringstream raw_stream(raw);
+		LLPointer<LLSDParser> parser = new LLSDNotationParser();
+		S32 count = parser->parse(raw_stream, im, raw.length());
+		// expect several map items per parsed line
+		return (count != LLSDParser::PARSE_FAILURE);
 	}
 
 	//matching a timestamp
 	boost::match_results<std::string::const_iterator> matches;
-	if (!boost::regex_match(line, matches, TIMESTAMP_AND_STUFF)) return false;
+	if (!boost::regex_match(raw, matches, TIMESTAMP_AND_STUFF)) return false;
 	
 	bool has_timestamp = matches[IDX_TIMESTAMP].matched;
 	if (has_timestamp)
diff --git a/indra/newview/lllogchat.h b/indra/newview/lllogchat.h
index a67b58e55b..674f27407e 100644
--- a/indra/newview/lllogchat.h
+++ b/indra/newview/lllogchat.h
@@ -30,10 +30,11 @@
  * $/LicenseInfo$
  */
 
-
 #ifndef LL_LLLOGCHAT_H
 #define LL_LLLOGCHAT_H
 
+class LLChat;
+
 class LLLogChat
 {
 public:
@@ -46,48 +47,21 @@ public:
 	};
 	static std::string timestamp(bool withdate = false);
 	static std::string makeLogFileName(std::string(filename));
+
+	// Log a single line item to the appropriate chat file
+	static void saveHistory(const std::string& filename, const LLChat& chat);
+
+	// Prefer the above version - it saves more metadata about the item
 	static void saveHistory(const std::string& filename,
 				const std::string& from,
 				const LLUUID& from_id,
 				const std::string& line);
 
-	/** @deprecated @see loadAllHistory() */
-	static void loadHistory(const std::string& filename, 
-		                    void (*callback)(ELogLineType, const LLSD&, void*), 
-							void* userdata);
-
 	static void loadAllHistory(const std::string& file_name, std::list<LLSD>& messages);
 private:
 	static std::string cleanFileName(std::string filename);
 };
 
-/**
- * Formatter for the plain text chat log files
- */
-class LLChatLogFormatter
-{
-public:
-	LLChatLogFormatter(const LLSD& im) : mIM(im) {}
-	virtual ~LLChatLogFormatter() {};
-
-	friend std::ostream& operator<<(std::ostream& str, const LLChatLogFormatter& formatter)
-	{
-		formatter.format(formatter.mIM, str);
-		return str;
-	}
-
-protected:
-
-	/**
-	 * Format an instant message to a stream
-	 * Timestamps and sender names are required
-	 * New lines of multilined messages are prepended with a space
-	 */
-	void format(const LLSD& im, std::ostream& ostr) const;
-
-	LLSD mIM;
-};
-
 /**
  * Parser for the plain text chat log files
  */
@@ -113,4 +87,11 @@ protected:
 	virtual ~LLChatLogParser() {};
 };
 
+// LLSD map lookup constants
+extern const std::string IM_TIME; //("time");
+extern const std::string IM_TEXT; //("message");
+extern const std::string IM_FROM; //("from");
+extern const std::string IM_FROM_ID; //("from_id");
+extern const std::string IM_SOURCE_TYPE; //("source_type");
+
 #endif
diff --git a/indra/newview/llnearbychat.cpp b/indra/newview/llnearbychat.cpp
index 74ede67c97..631d1fcac7 100644
--- a/indra/newview/llnearbychat.cpp
+++ b/indra/newview/llnearbychat.cpp
@@ -62,12 +62,6 @@
 
 static const S32 RESIZE_BAR_THICKNESS = 3;
 
-const static std::string IM_TIME("time");
-const static std::string IM_TEXT("message");
-const static std::string IM_FROM("from");
-const static std::string IM_FROM_ID("from_id");
-
-
 LLNearbyChat::LLNearbyChat(const LLSD& key) 
 	: LLDockableFloater(NULL, false, false, key)
 	,mChatHistory(NULL)
@@ -211,7 +205,7 @@ void	LLNearbyChat::addMessage(const LLChat& chat,bool archive,const LLSD &args)
 
 	if (gSavedPerAccountSettings.getBOOL("LogNearbyChat"))
 	{
-		LLLogChat::saveHistory("chat", chat.mFromName, chat.mFromID, chat.mText);
+		LLLogChat::saveHistory("chat", chat);
 	}
 }
 
@@ -318,11 +312,14 @@ void LLNearbyChat::loadHistory()
 		chat.mTimeStr = msg[IM_TIME].asString();
 		chat.mChatStyle = CHAT_STYLE_HISTORY;
 
-		chat.mSourceType = CHAT_SOURCE_AGENT;
-		if (from_id.isNull() && SYSTEM_FROM == from)
+		if (msg.has(IM_SOURCE_TYPE))
+		{
+			S32 source_type = msg[IM_SOURCE_TYPE].asInteger();
+			chat.mSourceType = (EChatSourceType)source_type;
+		}
+		else if (from_id.isNull() && SYSTEM_FROM == from)
 		{	
 			chat.mSourceType = CHAT_SOURCE_SYSTEM;
-			
 		}
 		else if (from_id.isNull())
 		{
-- 
cgit v1.2.3


From 2d7302f9cb2269e7fe22cb927634d99aa5c7a1bb Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Wed, 2 Jun 2010 16:16:35 -0700
Subject: DEV-50467 You paid (nobody) message when creating group and
 classified

Also fixes DEV-50470, Attempting to create a group with insufficient funds
generates nobody paid you L$-1 notice.  Needed to be more clever about
which strings to show when partial information is available about the
transaction.  Reviewed with Leyla.
---
 indra/newview/llviewermessage.cpp              | 29 ++++++++++++++++++++++++--
 indra/newview/skins/default/xui/en/strings.xml |  3 ++-
 2 files changed, 29 insertions(+), 3 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index e4b04b5d4f..9fa9ac626f 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -4976,6 +4976,9 @@ static std::string reason_from_transaction_type(S32 transaction_type,
 			
 		case TRANS_UPLOAD_CHARGE:
 			return LLTrans::getString("to upload");
+
+		case TRANS_CLASSIFIED_CHARGE:
+			return LLTrans::getString("to publish a classified ad");
 			
 		// These have no reason to display, but are expected and should not
 		// generate warnings
@@ -5040,6 +5043,12 @@ static void process_money_balance_reply_extended(LLMessageSystem* msg)
 		<< " type " << transaction_type
 		<< " item " << item_description << LL_ENDL;
 
+	if (source_id.isNull() && dest_id.isNull())
+	{
+		// this is a pure balance update, no notification required
+		return;
+	}
+
 	const char* source_type = (is_source_group ? "group" : "agent");
 	std::string source_slurl =
 		LLSLURL( source_type, source_id, "inspect").getSLURLString();
@@ -5072,11 +5081,27 @@ static void process_money_balance_reply_extended(LLMessageSystem* msg)
 		name_id = dest_id;
 		if (!reason.empty())
 		{
-			message = LLTrans::getString("you_paid_ldollars", args);
+			if (dest_id.notNull())
+			{
+				message = LLTrans::getString("you_paid_ldollars", args);
+			}
+			else
+			{
+				// transaction fee to the system, eg, to create a group
+				message = LLTrans::getString("you_paid_ldollars_no_name", args);
+			}
 		}
 		else
 		{
-			message = LLTrans::getString("you_paid_ldollars_no_reason", args);
+			if (dest_id.notNull())
+			{
+				message = LLTrans::getString("you_paid_ldollars_no_reason", args);
+			}
+			else
+			{
+				// no target, no reason, you just paid money
+				message = LLTrans::getString("you_paid_ldollars_no_info", args);
+			}
 		}
 		final_args["MESSAGE"] = message;
 		notification = "PaymentSent";
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index 614b681853..695c6d0793 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -3103,7 +3103,8 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
   <string name="to create a group">to create a group</string>
   <string name="to join a group">to join a group</string>
   <string name="to upload">to upload</string>
-  
+  <string name="to publish a classified ad">to publish a classified ad</string>
+
   <string name="giving">Giving L$ [AMOUNT]</string>
   <string name="uploading_costs">Uploading costs L$ [AMOUNT]</string>
   <string name="this_costs">This costs L$ [AMOUNT]</string>
-- 
cgit v1.2.3


From 0789897d6127637f2b5f99d8e107fbd3df577173 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Wed, 2 Jun 2010 16:31:05 -0700
Subject: removed "SESSION_NAME" in favor of doing a gCacheName lookup reviewed
 by James

---
 indra/newview/llavataractions.cpp           |  1 -
 indra/newview/llnotificationhandlerutil.cpp | 25 +++++++++++++------------
 indra/newview/llviewermessage.cpp           |  3 ---
 3 files changed, 13 insertions(+), 16 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp
index 6699449625..d1ed4922f4 100644
--- a/indra/newview/llavataractions.cpp
+++ b/indra/newview/llavataractions.cpp
@@ -719,7 +719,6 @@ void LLAvatarActions::requestFriendship(const LLUUID& target_id, const std::stri
 
 	LLSD payload;
 	payload["from_id"] = target_id;
-	payload["SESSION_NAME"] = target_name;
 	payload["SUPPRESS_TOAST"] = true;
 	LLNotificationsUtil::add("FriendshipOffered", args, payload);
 }
diff --git a/indra/newview/llnotificationhandlerutil.cpp b/indra/newview/llnotificationhandlerutil.cpp
index 2ca2df152b..deb0cb6cfa 100644
--- a/indra/newview/llnotificationhandlerutil.cpp
+++ b/indra/newview/llnotificationhandlerutil.cpp
@@ -321,34 +321,35 @@ void LLHandlerUtil::logToIMP2P(const LLNotificationPtr& notification)
 	logToIMP2P(notification, false);
 }
 
+void log_name_callback(const std::string& full_name, const std::string& from_name, 
+					   const std::string& message, const LLUUID& from_id)
+
+{
+	LLHandlerUtil::logToIM(IM_NOTHING_SPECIAL, full_name, from_name, message,
+					from_id, LLUUID());
+}
+
 // static
 void LLHandlerUtil::logToIMP2P(const LLNotificationPtr& notification, bool to_file_only)
 {
-	const std::string name = LLHandlerUtil::getSubstitutionName(notification);
-
-	const std::string& session_name = notification->getPayload().has(
-			"SESSION_NAME") ? notification->getPayload()["SESSION_NAME"].asString() : name;
-
 	// don't create IM p2p session with objects, it's necessary condition to log
 	if (notification->getName() != OBJECT_GIVE_ITEM)
 	{
 		LLUUID from_id = notification->getPayload()["from_id"];
 
-		//there still appears a log history file with weird name " .txt"
-		if (" " == session_name || "{waiting}" == session_name || "{nobody}" == session_name)
+		if (from_id.isNull())
 		{
-			llwarning("Weird session name (" + session_name + ") for notification " + notification->getName(), 666)
+			llwarns << " from_id for notification " << notification->getName() << " is null " << llendl;
+			return;
 		}
 
 		if(to_file_only)
 		{
-			logToIM(IM_NOTHING_SPECIAL, session_name, "", notification->getMessage(),
-					LLUUID(), LLUUID());
+			gCacheName->get(from_id, false, boost::bind(&log_name_callback, _2, "", notification->getMessage(), LLUUID()));
 		}
 		else
 		{
-			logToIM(IM_NOTHING_SPECIAL, session_name, INTERACTIVE_SYSTEM_FROM, notification->getMessage(),
-					from_id, LLUUID());
+			gCacheName->get(from_id, false, boost::bind(&log_name_callback, _2, INTERACTIVE_SYSTEM_FROM, notification->getMessage(), from_id));
 		}
 	}
 }
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index e4b04b5d4f..86865343a8 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -1909,7 +1909,6 @@ protected:
 	void modifyNotificationParams()
 	{
 		LLSD payload = mParams.payload;
-		payload["SESSION_NAME"] = mName;
 		mParams.payload = payload;
 	}
 };
@@ -2142,7 +2141,6 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
 	case IM_CONSOLE_AND_CHAT_HISTORY:
 	  	// *TODO: Translate
 		args["MESSAGE"] = message;
-		payload["SESSION_NAME"] = name;
 		payload["from_id"] = from_id;
 		LLNotificationsUtil::add("IMSystemMessageTip",args, payload);
 		break;
@@ -6096,7 +6094,6 @@ bool handle_lure_callback(const LLSD& notification, const LLSD& response)
 				
 				//*TODO please rewrite all keys to the same case, lower or upper
 				payload["from_id"] = target_id;
-				payload["SESSION_NAME"] = target_name;
 				payload["SUPPRESS_TOAST"] = true;
 				LLNotificationsUtil::add("TeleportOfferSent", args, payload);
 			}
-- 
cgit v1.2.3


From 36ff13ddf01966260d304605d1d5cb3201389c84 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Thu, 3 Jun 2010 16:04:48 -0700
Subject: LLAvatarActions merge fix

---
 indra/newview/llavataractions.cpp | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp
index f6d104cf0a..02dbfd0af6 100644
--- a/indra/newview/llavataractions.cpp
+++ b/indra/newview/llavataractions.cpp
@@ -467,14 +467,15 @@ namespace action_give_inventory
 		return acceptable;
 	}
 
-	static void build_residents_string(const std::vector<std::string>& avatar_names, std::string& residents_string)
+	static void build_residents_string(const std::vector<LLAvatarName> avatar_names, std::string& residents_string)
 	{
 		llassert(avatar_names.size() > 0);
 
 		const std::string& separator = LLTrans::getString("words_separator");
-		for (std::vector<std::string>::const_iterator it = avatar_names.begin(); ; )
+		for (std::vector<LLAvatarName>::const_iterator it = avatar_names.begin(); ; )
 		{
-			residents_string.append(*it);
+			LLAvatarName av_name = *it;
+			residents_string.append(av_name.mDisplayName);
 			if	(++it == avatar_names.end())
 			{
 				break;
@@ -511,7 +512,7 @@ namespace action_give_inventory
 
 	struct LLShareInfo : public LLSingleton<LLShareInfo>
 	{
-		std::vector<std::string> mAvatarNames;
+		std::vector<LLAvatarName> mAvatarNames;
 		uuid_vec_t mAvatarUuids;
 	};
 
@@ -542,7 +543,7 @@ namespace action_give_inventory
 		// iterate through avatars
 		for(S32 i = 0; i < count; ++i)
 		{
-			const std::string& avatar_name = LLShareInfo::instance().mAvatarNames[i];
+			const std::string& avatar_name = LLShareInfo::instance().mAvatarNames[i].getLegacyName();
 			const LLUUID& avatar_uuid = LLShareInfo::instance().mAvatarUuids[i];
 
 			// Start up IM before give the item
@@ -608,16 +609,15 @@ namespace action_give_inventory
 	 * @param avatar_names - avatar names request to be sent.
 	 * @param avatar_uuids - avatar names request to be sent.
 	 */
-	static void give_inventory(const std::vector<std::string>& avatar_names, const uuid_vec_t& avatar_uuids)
+	static void give_inventory(const uuid_vec_t& avatar_uuids, const std::vector<LLAvatarName> avatar_names)
 	{
 		llassert(avatar_names.size() == avatar_uuids.size());
 
-
 		LLInventoryPanel* active_panel = LLInventoryPanel::getActiveInventoryPanel(FALSE);
 		if (NULL == active_panel)
 		{
 			return;
-			}
+		}
 
 		const uuid_set_t inventory_selected_uuids = active_panel->getRootFolder()->getSelectionList();
 		if (inventory_selected_uuids.empty())
-- 
cgit v1.2.3


From 02e319ff343e3e45633de81ba048c930ae0c23ab Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Fri, 4 Jun 2010 10:14:38 -0700
Subject: Default name tags to Display Names only

---
 indra/newview/app_settings/settings.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 4178b91fcf..c05c08168a 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -7445,7 +7445,7 @@
       <key>Type</key>
       <string>Boolean</string>
       <key>Value</key>
-      <integer>1</integer>
+      <integer>0</integer>
     </map>
     <key>RenderInitError</key>
     <map>
-- 
cgit v1.2.3


From 9696e94b2453e631f2c3bbb437e34196bc34652b Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Fri, 4 Jun 2010 12:19:11 -0700
Subject: Comment out code that won't compile, fix later

---
 indra/newview/llavataractions.cpp | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp
index f6d104cf0a..f7db30e023 100644
--- a/indra/newview/llavataractions.cpp
+++ b/indra/newview/llavataractions.cpp
@@ -643,11 +643,12 @@ namespace action_give_inventory
 //static
 void LLAvatarActions::shareWithAvatars()
 {
-	using namespace action_give_inventory;
-
-	LLFloaterAvatarPicker* picker =
-		LLFloaterAvatarPicker::show(boost::bind(give_inventory, _1, _2), TRUE, FALSE);
-	picker->setOkBtnEnableCb(boost::bind(is_give_inventory_acceptable));
+	llerrs << "Needs to be fixed to work with LLAvatarName" << llendl;
+//	using namespace action_give_inventory;
+//
+//	LLFloaterAvatarPicker* picker =
+//		LLFloaterAvatarPicker::show(boost::bind(give_inventory, _1, _2), TRUE, FALSE);
+//	picker->setOkBtnEnableCb(boost::bind(is_give_inventory_acceptable));
 }
 
 // static
-- 
cgit v1.2.3


From 6be9f280ff5b2e2eba3bb9c3f14d7166579d1a49 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Fri, 4 Jun 2010 13:17:07 -0700
Subject: Reverting commenting out of code since fix is in

---
 indra/newview/llavataractions.cpp | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp
index ebd8296fda..02dbfd0af6 100644
--- a/indra/newview/llavataractions.cpp
+++ b/indra/newview/llavataractions.cpp
@@ -643,12 +643,11 @@ namespace action_give_inventory
 //static
 void LLAvatarActions::shareWithAvatars()
 {
-	llerrs << "Needs to be fixed to work with LLAvatarName" << llendl;
-//	using namespace action_give_inventory;
-//
-//	LLFloaterAvatarPicker* picker =
-//		LLFloaterAvatarPicker::show(boost::bind(give_inventory, _1, _2), TRUE, FALSE);
-//	picker->setOkBtnEnableCb(boost::bind(is_give_inventory_acceptable));
+	using namespace action_give_inventory;
+
+	LLFloaterAvatarPicker* picker =
+		LLFloaterAvatarPicker::show(boost::bind(give_inventory, _1, _2), TRUE, FALSE);
+	picker->setOkBtnEnableCb(boost::bind(is_give_inventory_acceptable));
 }
 
 // static
-- 
cgit v1.2.3


From 22ae981afb86e31eed777d57e16151c1b7de30ae Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Thu, 15 Jul 2010 17:13:38 -0700
Subject: DEV-50739 Message recieved by Send Message to Region function is from
 Username only reviewed by Richard cc#221

---
 indra/newview/llviewermessage.cpp | 37 ++++++++++++++++++++++---------------
 1 file changed, 22 insertions(+), 15 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 6f2b684834..83dec4383c 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -2093,6 +2093,25 @@ protected:
 
 };
 
+// Callback for name resolution of a god/estate message
+void god_message_name_cb(const LLAvatarName& av_name, LLChat chat, std::string message)
+{	
+	LLSD args;
+	args["NAME"] = av_name.getCompleteName();
+	args["MESSAGE"] = message;
+	LLNotificationsUtil::add("GodMessage", args);
+
+	// Treat like a system message and put in chat history.
+	chat.mText = av_name.getCompleteName() + ": " + message;
+
+	LLNearbyChat* nearby_chat = LLFloaterReg::getTypedInstance<LLNearbyChat>("nearby_chat", LLSD());
+	if(nearby_chat)
+	{
+		nearby_chat->addMessage(chat);
+	}
+
+}
+
 void process_improved_im(LLMessageSystem *msg, void **user_data)
 {
 	if (gNoRender)
@@ -2240,21 +2259,9 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
 		}
 		else if (to_id.isNull())
 		{
-			// Message to everyone from GOD
-			args["NAME"] = name;
-			args["MESSAGE"] = message;
-			LLNotificationsUtil::add("GodMessage", args);
-
-			// Treat like a system message and put in chat history.
-			// Claim to be from a local agent so it doesn't go into
-			// console.
-			chat.mText = name + separator_string + message;
-
-			LLNearbyChat* nearby_chat = LLFloaterReg::getTypedInstance<LLNearbyChat>("nearby_chat", LLSD());
-			if(nearby_chat)
-			{
-				nearby_chat->addMessage(chat);
-			}
+			// Message to everyone from GOD, look up the fullname since
+			// server always slams name to legacy names
+			LLAvatarNameCache::get(from_id, boost::bind(god_message_name_cb, _2, chat, message));
 		}
 		else
 		{
-- 
cgit v1.2.3


From 4562228a8ef833182ff055b00b0e569803d8b329 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Thu, 15 Jul 2010 17:14:07 -0700
Subject: DEV-50738 Compete name cutoff in Object Return resident field on
 Region/estate debug panel

---
 indra/newview/skins/default/xui/en/panel_region_debug.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_region_debug.xml b/indra/newview/skins/default/xui/en/panel_region_debug.xml
index 7d828b90b2..15df095efa 100644
--- a/indra/newview/skins/default/xui/en/panel_region_debug.xml
+++ b/indra/newview/skins/default/xui/en/panel_region_debug.xml
@@ -103,7 +103,7 @@
      mouse_opaque="false"
      name="target_avatar_name"
      top_delta="-2"
-     width="24 0">
+     width="270">
         (none)
     </line_editor>
     <button
-- 
cgit v1.2.3


From 474457ea7ea1bd178682788426a4cf40c3fffdcd Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Thu, 15 Jul 2010 17:14:45 -0700
Subject: DEV-51021 Viewer returns misleading error message when a blocked user
 attempts to change his display name reviewed by Richard cc#220

---
 indra/newview/llpanelme.cpp                          | 10 ++++++++++
 indra/newview/skins/default/xui/en/notifications.xml |  7 +++++++
 2 files changed, 17 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/llpanelme.cpp b/indra/newview/llpanelme.cpp
index 0fc2a78bcd..5e8e07b962 100644
--- a/indra/newview/llpanelme.cpp
+++ b/indra/newview/llpanelme.cpp
@@ -395,8 +395,18 @@ void LLPanelMyProfileEdit::onClickSetName()
 	llinfos << "name-change now " << LLDate::now() << " next_update "
 		<< LLDate(av_name.mNextUpdate) << llendl;
 	F64 now_secs = LLDate::now().secondsSinceEpoch();
+
 	if (now_secs < av_name.mNextUpdate)
 	{
+		// if the update time is more than a year in the future, it means updates have been blocked
+		// show a more general message
+        const int YEAR = 60*60*24*365; 
+		if (now_secs + YEAR < av_name.mNextUpdate)
+		{
+			LLNotificationsUtil::add("SetDisplayNameBlocked");
+			return;
+		}
+	
 		// ...can't update until some time in the future
 		F64 next_update_local_secs =
 			av_name.mNextUpdate - LLStringOps::getLocalTimeOffset();
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 92e71e3b01..616904d7f6 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -3231,6 +3231,13 @@ Sorry, you cannot [http://wiki.secondlife.com/wiki/Setting_your_display_name cha
 [TIME]
   </notification>
 
+  <notification
+ icon="alertmodal.tga"
+ name="SetDisplayNameBlocked"
+ type="alert">
+Sorry, you cannot change your display name. If you feel this is in error, please contact support.
+  </notification>
+
   <notification
    icon="alertmodal.tga"
    name="SetDisplayNameFailedLength"
-- 
cgit v1.2.3


From 2278db1b41649f7ba2a60461585792d9d779ff53 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Tue, 20 Jul 2010 17:07:26 -0700
Subject: DEV-50726 Userame shown in notification to giver of an in inventory
 item

---
 indra/newview/llviewermessage.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 6c3b165bec..490b3c7f0a 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -2555,7 +2555,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
 
 	case IM_INVENTORY_ACCEPTED:
 	{
-		args["NAME"] = name;
+		args["NAME"] = LLSLURL("agent", from_id, "completename").getSLURLString();;
 		LLSD payload;
 		payload["from_id"] = from_id;
 		LLNotificationsUtil::add("InventoryAccepted", args, payload);
@@ -2563,7 +2563,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
 	}
 	case IM_INVENTORY_DECLINED:
 	{
-		args["NAME"] = name;
+		args["NAME"] = LLSLURL("agent", from_id, "completename").getSLURLString();;
 		LLSD payload;
 		payload["from_id"] = from_id;
 		LLNotificationsUtil::add("InventoryDeclined", args, payload);
-- 
cgit v1.2.3


From 9b5004a72d9726a0f7372faf16218f2edadc875d Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Wed, 21 Jul 2010 16:59:18 -0700
Subject: DEV-50468	??? (???) shown in create group window under members
 by default

---
 indra/newview/llnamelistctrl.cpp | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llnamelistctrl.cpp b/indra/newview/llnamelistctrl.cpp
index 3d15f8288f..fd0359368d 100644
--- a/indra/newview/llnamelistctrl.cpp
+++ b/indra/newview/llnamelistctrl.cpp
@@ -45,6 +45,7 @@
 #include "llscrolllistcolumn.h"
 #include "llsdparam.h"
 #include "lltooltip.h"
+#include "lltrans.h"
 
 static LLDefaultChildRegistry::Register<LLNameListCtrl> r("name_list");
 
@@ -301,7 +302,11 @@ LLScrollListItem* LLNameListCtrl::addNameItemRow(
 	case INDIVIDUAL:
 		{
 			LLAvatarName av_name;
-			if (LLAvatarNameCache::get(id, &av_name))
+			if (id.isNull())
+			{
+				fullname = LLTrans::getString("AvatarNameNobody");
+			}
+			else if (LLAvatarNameCache::get(id, &av_name))
 			{
 				if (mShortNames)
 					fullname = av_name.mDisplayName;
-- 
cgit v1.2.3


From 8038cbcf0e2ee23b3337a2ec0106ec4284d52c29 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Wed, 21 Jul 2010 16:59:59 -0700
Subject: DEV-50472 Transaction notifications wrap and amounts cannot be seen
 in notifications list

---
 indra/newview/llviewermessage.cpp | 30 +++++++++++++++++++++++-------
 1 file changed, 23 insertions(+), 7 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 490b3c7f0a..1488bc8350 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -5088,13 +5088,29 @@ static void process_money_balance_reply_extended(LLMessageSystem* msg)
 		return;
 	}
 
-	const char* source_type = (is_source_group ? "group" : "agent");
-	std::string source_slurl =
-		LLSLURL( source_type, source_id, "inspect").getSLURLString();
-	
-	const char* dest_type = (is_dest_group ? "group" : "agent");
-	std::string dest_slurl =
-		LLSLURL( dest_type, dest_id, "completename").getSLURLString();
+	std::string source_slurl;
+	if (is_source_group)
+	{
+		source_slurl =
+			LLSLURL( "group", source_id, "inspect").getSLURLString();
+	}
+	else
+	{
+		source_slurl =
+			LLSLURL( "agent", source_id, "completename").getSLURLString();
+	}
+
+	std::string dest_slurl;
+	if (is_dest_group)
+	{
+		dest_slurl =
+			LLSLURL( "group", dest_id, "inspect").getSLURLString();
+	}
+	else
+	{
+		dest_slurl =
+			LLSLURL( "agent", dest_id, "completename").getSLURLString();
+	}
 
 	std::string reason =
 		reason_from_transaction_type(transaction_type, item_description);
-- 
cgit v1.2.3


From 4c9760a073853ae81a78aa99119c059cdfaba664 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Wed, 21 Jul 2010 17:00:39 -0700
Subject: DEV-50727 Group founder complete name extending over scroll down bar
 in groups panel

---
 indra/newview/skins/default/xui/en/panel_group_general.xml | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_group_general.xml b/indra/newview/skins/default/xui/en/panel_group_general.xml
index f48440b34d..70b96ca5eb 100644
--- a/indra/newview/skins/default/xui/en/panel_group_general.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_general.xml
@@ -33,7 +33,7 @@ Hover your mouse over the options for more help.
      height="110"
      label=""
      layout="topleft"
-     left="10"
+     left="5"
      name="insignia"
      no_commit_on_selection="true"
      tool_tip="Click to choose a picture"
@@ -49,7 +49,7 @@ Hover your mouse over the options for more help.
      type="string"
      height="16"
      length="1"
-     left_pad="10"
+     left_pad="8"
      name="prepend_founded_by"
      top_delta="0">
       Founder:
@@ -58,11 +58,11 @@ Hover your mouse over the options for more help.
       follows="left|top"
      height="16"
      layout="topleft"
-     left_delta="0"
+     left_delta="-2"
      name="founder_name"
      top_pad="2"
      use_ellipses="true"
-     width="185" />
+     width="168" />
     <text
     font="SansSerifMedium"
     text_color="EmphasisColor"
@@ -90,13 +90,13 @@ Hover your mouse over the options for more help.
     <text_editor
      type="string"
      follows="left|top|right"
-     left="5"
+     left="3"
      height="80"
      layout="topleft"
      max_length="511"
      name="charter"
      top="105"
-     right="-1"
+     right="-4"
     bg_readonly_color="DkGray2"
     text_readonly_color="White"
      word_wrap="true">
-- 
cgit v1.2.3


From a5bc2fc0482a0d7239c3cfdb0fd3a53b40af1507 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Thu, 29 Jul 2010 16:32:37 -0700
Subject: DEV-50741	Complete name extends off of Pay Resident dialog

---
 indra/newview/skins/default/xui/en/floater_pay.xml | 1 +
 1 file changed, 1 insertion(+)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/floater_pay.xml b/indra/newview/skins/default/xui/en/floater_pay.xml
index 9cb251e167..7ab565313e 100644
--- a/indra/newview/skins/default/xui/en/floater_pay.xml
+++ b/indra/newview/skins/default/xui/en/floater_pay.xml
@@ -27,6 +27,7 @@
      left="10"
      name="payee_name"
      top="25" 
+     use_ellipses="true"
      width="230">
         Test Name That Is Extremely Long To Check Clipping
     </text>
-- 
cgit v1.2.3


From f70a559d4394a6552da5167c3f450d5f2befa8e2 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Thu, 29 Jul 2010 16:33:31 -0700
Subject: DEV-52353	Resident last name shown in user is typing notice in
 chat

---
 indra/newview/llimfloater.cpp | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp
index 38bb96fd6f..a8ec551e58 100644
--- a/indra/newview/llimfloater.cpp
+++ b/indra/newview/llimfloater.cpp
@@ -339,6 +339,7 @@ void LLIMFloater::onAvatarNameCache(const LLUUID& agent_id,
 	// floater title
 	std::string ui_title = av_name.getCompleteName();
 	updateSessionName(ui_title, av_name.mDisplayName);
+	mTypingStart.setArg("[NAME]", ui_title);
 }
 
 // virtual
@@ -1101,13 +1102,9 @@ void LLIMFloater::addTypingIndicator(const LLIMInfo* im_info)
 	{
 		mOtherTyping = true;
 
-		// Create typing is started title string
-		LLUIString typing_start(mTypingStart);
-		typing_start.setArg("[NAME]", im_info->mName);
-
 		// Save and set new title
 		mSavedTitle = getTitle();
-		setTitle (typing_start);
+		setTitle (mTypingStart);
 
 		// Update speaker
 		LLIMSpeakerMgr* speaker_mgr = LLIMModel::getInstance()->getSpeakerManager(mSessionID);
-- 
cgit v1.2.3


From 547bcc907389aeb1a3d974025b621e98d1178714 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Thu, 29 Jul 2010 17:02:07 -0700
Subject: DEV-52364 Account name not user name is referenced in error message
 when entering invalid user name or password on login

---
 indra/newview/skins/default/xui/en/notifications.xml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 616904d7f6..5a3e4ddfbf 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -717,7 +717,7 @@ You can not wear that item because it has not yet loaded. Please try again in a
    name="MustHaveAccountToLogIn"
    type="alertmodal">
 Oops! Something was left blank.
-You need to enter both the First and Last name of your avatar.
+You need to enter the Username name of your avatar.
 
 You need an account to enter [SECOND_LIFE]. Would you like to create one now?
     <url
@@ -737,7 +737,7 @@ You need an account to enter [SECOND_LIFE]. Would you like to create one now?
    icon="alertmodal.tga"
    name="InvalidCredentialFormat"
    type="alertmodal">
-You need to enter both the First and Last name of your avatar into the Username field, then login again.
+You need to enter either the Username or both the First and Last name of your avatar into the Username field, then login again.
   </notification>
   
 
-- 
cgit v1.2.3


From 816cf7db82f2e633631c334f44547714de6cbebc Mon Sep 17 00:00:00 2001
From: brad kittenbrink <brad@lindenlab.com>
Date: Thu, 29 Jul 2010 19:49:13 -0700
Subject: Adding a simple region debug console.

---
 indra/newview/CMakeLists.txt                       |  2 +
 indra/newview/llfloaterregiondebugconsole.cpp      | 93 ++++++++++++++++++++++
 indra/newview/llfloaterregiondebugconsole.h        | 55 +++++++++++++
 indra/newview/llviewerfloaterreg.cpp               |  2 +
 indra/newview/llviewermenu.cpp                     |  2 +-
 indra/newview/llviewerregion.cpp                   |  1 +
 .../xui/en/floater_region_debug_console.xml        | 37 +++++++++
 indra/newview/skins/default/xui/en/menu_viewer.xml | 12 +++
 8 files changed, 203 insertions(+), 1 deletion(-)
 create mode 100644 indra/newview/llfloaterregiondebugconsole.cpp
 create mode 100644 indra/newview/llfloaterregiondebugconsole.h
 create mode 100644 indra/newview/skins/default/xui/en/floater_region_debug_console.xml

(limited to 'indra/newview')

diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 92f701551b..53941af355 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -197,6 +197,7 @@ set(viewer_SOURCE_FILES
     llfloaterpostprocess.cpp
     llfloaterpreference.cpp
     llfloaterproperties.cpp
+    llfloaterregiondebugconsole.cpp
     llfloaterregioninfo.cpp
     llfloaterreporter.cpp
     llfloaterscriptdebug.cpp
@@ -723,6 +724,7 @@ set(viewer_HEADER_FILES
     llfloaterpostprocess.h
     llfloaterpreference.h
     llfloaterproperties.h
+    llfloaterregiondebugconsole.h
     llfloaterregioninfo.h
     llfloaterreporter.h
     llfloaterscriptdebug.h
diff --git a/indra/newview/llfloaterregiondebugconsole.cpp b/indra/newview/llfloaterregiondebugconsole.cpp
new file mode 100644
index 0000000000..058f894800
--- /dev/null
+++ b/indra/newview/llfloaterregiondebugconsole.cpp
@@ -0,0 +1,93 @@
+/** 
+ * @file llfloaterregiondebugconsole.h
+ * @author Brad Kittenbrink <brad@lindenlab.com>
+ * @brief Quick and dirty console for region debug settings
+ *
+ * $LicenseInfo:firstyear=2010&license=viewergpl$
+ * 
+ * Copyright (c) 2010-2010, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llfloaterregiondebugconsole.h"
+
+#include "llagent.h"
+#include "llhttpclient.h"
+#include "lllineeditor.h"
+#include "lltexteditor.h"
+#include "llviewerregion.h"
+
+class Responder : public LLHTTPClient::Responder {
+public:
+    Responder(LLTextEditor *output) : mOutput(output)
+    {
+    }
+
+    /*virtual*/
+    void error(U32 status, const std::string& reason)
+    {
+    }
+
+    /*virtual*/
+    void result(const LLSD& content)
+    {
+        std::string text = mOutput->getText();
+        text += '\n';
+        text += content.asString();
+        text += '\n';
+        mOutput->setText(text);
+    };
+
+    LLTextEditor * mOutput;
+};
+
+LLFloaterRegionDebugConsole::LLFloaterRegionDebugConsole(LLSD const & key)
+: LLFloater(key), mOutput(NULL)
+{
+}
+
+BOOL LLFloaterRegionDebugConsole::postBuild()
+{
+	getChild<LLLineEditor>("region_debug_console_input")->setCommitCallback(boost::bind(&LLFloaterRegionDebugConsole::onInput, this, _1, _2));
+	mOutput = getChild<LLTextEditor>("region_debug_console_output");
+	return TRUE;
+}
+
+void LLFloaterRegionDebugConsole::onInput(LLUICtrl* ctrl, const LLSD& param)
+{
+	LLLineEditor * input = static_cast<LLLineEditor*>(ctrl);
+	std::string text = mOutput->getText();
+    text += "\n\POST: ";
+	text += input->getText();
+	mOutput->setText(text);
+
+    std::string url = gAgent.getRegion()->getCapability("SimConsole");
+    LLHTTPClient::post(url, LLSD(input->getText()), new ::Responder(mOutput));
+
+	input->setText(std::string(""));
+}
+
diff --git a/indra/newview/llfloaterregiondebugconsole.h b/indra/newview/llfloaterregiondebugconsole.h
new file mode 100644
index 0000000000..69d7773fec
--- /dev/null
+++ b/indra/newview/llfloaterregiondebugconsole.h
@@ -0,0 +1,55 @@
+/** 
+ * @file llfloaterregiondebugconsole.h
+ * @author Brad Kittenbrink <brad@lindenlab.com>
+ * @brief Quick and dirty console for region debug settings
+ *
+ * $LicenseInfo:firstyear=2010&license=viewergpl$
+ * 
+ * Copyright (c) 2010-2010, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLFLOATERREGIONDEBUGCONSOLE_H
+#define LL_LLFLOATERREGIONDEBUGCONSOLE_H
+
+#include "llfloater.h"
+#include "llhttpclient.h"
+
+class LLTextEditor;
+
+class LLFloaterRegionDebugConsole : public LLFloater, public LLHTTPClient::Responder
+{
+public:
+	LLFloaterRegionDebugConsole(LLSD const & key);
+
+	// virtual
+	BOOL postBuild();
+	
+	void onInput(LLUICtrl* ctrl, const LLSD& param);
+
+	LLTextEditor * mOutput;
+};
+
+#endif // LL_LLFLOATERREGIONDEBUGCONSOLE_H
diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp
index efe59744bc..9e256864d2 100644
--- a/indra/newview/llviewerfloaterreg.cpp
+++ b/indra/newview/llviewerfloaterreg.cpp
@@ -87,6 +87,7 @@
 #include "llfloaterpostprocess.h"
 #include "llfloaterpreference.h"
 #include "llfloaterproperties.h"
+#include "llfloaterregiondebugconsole.h"
 #include "llfloaterregioninfo.h"
 #include "llfloaterreporter.h"
 #include "llfloaterscriptdebug.h"
@@ -236,6 +237,7 @@ void LLViewerFloaterReg::registerFloaters()
 	
 	LLFloaterReg::add("reporter", "floater_report_abuse.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterReporter>);
 	LLFloaterReg::add("reset_queue", "floater_script_queue.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterResetQueue>);
+	LLFloaterReg::add("region_debug_console", "floater_region_debug_console.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterRegionDebugConsole>);
 	LLFloaterReg::add("region_info", "floater_region_info.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterRegionInfo>);
 	
 	LLFloaterReg::add("script_debug", "floater_script_debug.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterScriptDebug>);
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 635cc361f3..0822295ba1 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -558,7 +558,7 @@ class LLAdvancedCheckConsole : public view_listener_t
 			new_value = get_visibility( (void*)gDebugView->mMemoryView );
 		}
 #endif
-
+		
 		return new_value;
 	}
 };
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index da240cedbb..93666ee5f2 100644
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -1517,6 +1517,7 @@ void LLViewerRegion::setSeedCapability(const std::string& url)
 	capabilityNames.append("SendUserReport");
 	capabilityNames.append("SendUserReportWithScreenshot");
 	capabilityNames.append("ServerReleaseNotes");
+	capabilityNames.append("SimConsole");
 	capabilityNames.append("StartGroupProposal");
 	capabilityNames.append("TextureStats");
 	capabilityNames.append("UntrustedSimulatorMessage");
diff --git a/indra/newview/skins/default/xui/en/floater_region_debug_console.xml b/indra/newview/skins/default/xui/en/floater_region_debug_console.xml
new file mode 100644
index 0000000000..591d77340a
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/floater_region_debug_console.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<floater
+  name="region_debug_console"
+  title="Region Debug"
+  layout="topleft"
+  min_height="300"
+  min_width="300"
+  height="400"
+  width="600">
+  <text_editor
+  left="10"
+   type="string"
+   length="1"
+   follows="left|top|right|bottom"
+   font="Monospace"
+   height="366"
+   width="576"
+   ignore_tab="false"
+   layout="topleft"
+   max_length="65536"
+   name="region_debug_console_output"
+   show_line_numbers="false" 
+   word_wrap="true">
+  </text_editor>
+  <line_editor
+   border_style="line"
+   border_thickness="1"
+   follows="left|top|right"
+   font="SansSerif"
+   height="19"
+   layout="topleft"
+   bottom_delta="20"
+   max_length="127"
+   name="region_debug_console_input"
+   top_delta="0"
+   width="394" />
+</floater>
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index 3557318705..8a3785d7c1 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -2542,6 +2542,18 @@
                  function="ToggleControl"
                  parameter="DoubleClickAutoPilot" />
             </menu_item_check>
+            <menu_item_check
+             label="Region Debug Console"
+             name="Region Debug Console"
+             shortcut="control|shift|`"
+             use_mac_ctrl="true">
+                <menu_item_check.on_check
+                 function="Floater.Visible"
+                 parameter="region_debug_console" />
+                <menu_item_check.on_click
+                 function="Floater.Toggle"
+                 parameter="region_debug_console" />
+            </menu_item_check>
 
             <menu_item_separator />
             <menu_item_check
-- 
cgit v1.2.3


From c06992d60dd2a4d954175dbb42af193b3c2eb113 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Mon, 2 Aug 2010 13:25:58 -0700
Subject: DEV-52366 Long display name gets cut off in Places page for owner
 listing

---
 indra/newview/skins/default/xui/en/panel_place_profile.xml | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_place_profile.xml b/indra/newview/skins/default/xui/en/panel_place_profile.xml
index 35e8075896..fb6f14ae93 100644
--- a/indra/newview/skins/default/xui/en/panel_place_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_place_profile.xml
@@ -316,7 +316,8 @@
              name="owner_value"
              top_delta="0"
              value="Alex Superduperlongenamenton"
-             width="205" />
+             use_ellipses="true" 
+             width="200" />
             <icon
              follows="top|left"
              height="16"
-- 
cgit v1.2.3


From 92e4fba632f03f460433b93b9ee0ab133eb5a9f8 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Mon, 2 Aug 2010 13:27:47 -0700
Subject: DEV-52389 Disable voice option in group chat layout issue

---
 indra/newview/skins/default/xui/en/inspect_avatar.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/inspect_avatar.xml b/indra/newview/skins/default/xui/en/inspect_avatar.xml
index a7ab021225..d018ea7ce1 100644
--- a/indra/newview/skins/default/xui/en/inspect_avatar.xml
+++ b/indra/newview/skins/default/xui/en/inspect_avatar.xml
@@ -163,7 +163,7 @@
      width="35" />
   <panel 
     follows="top|left" 
-    top="148" 
+    top="164" 
     left="0" 
     height="60" 
     width="228" 
-- 
cgit v1.2.3


From 9e2965e8c658ab1281db00e34e496ba69fcf0206 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Mon, 2 Aug 2010 15:41:07 -0700
Subject: DEV-52367 Long display name gets cut off in About Land floater for
 owner

---
 indra/newview/skins/default/xui/en/floater_about_land.xml | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/floater_about_land.xml b/indra/newview/skins/default/xui/en/floater_about_land.xml
index 64e8677419..671d8391e6 100644
--- a/indra/newview/skins/default/xui/en/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/en/floater_about_land.xml
@@ -220,7 +220,8 @@
              layout="topleft"
              left_pad="2"
              name="OwnerText"
-             width="240">
+             use_ellipses="true" 
+             width="360">
                 Leyla Linden
             </text>
              <button
-- 
cgit v1.2.3


From 2965b5b64e0c293dad50b656654a07b5eb3e00b8 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Mon, 2 Aug 2010 15:41:58 -0700
Subject: DEV-52362 Long display name gets cut off in Partners listing in
 profile page

---
 .../skins/default/xui/en/panel_edit_profile.xml    | 22 +++++++++++-----------
 .../skins/default/xui/en/panel_my_profile.xml      |  4 ++--
 .../newview/skins/default/xui/en/panel_profile.xml |  4 ++--
 3 files changed, 15 insertions(+), 15 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_edit_profile.xml b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
index e3cf25634b..6fcf1b0e92 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
@@ -330,17 +330,17 @@
          left="10"
          name="partner_data_panel"
          width="200">
-            <text
-             follows="left|top|right"
-             height="30"
-             initial_value="(retrieving)"
-             layout="topleft"
-             left="0"
-             link="true"
-             name="partner_text"
-             top="0"
-             width="200"
-             word_wrap="true" />
+          <text
+           follows="left|top|right"
+           height="12"
+           initial_value="(retrieving)"
+           layout="topleft"
+           left="0"
+           link="true"
+           name="partner_text"
+           top="0"
+           use_ellipses="true"
+           width="280"/>
          </panel>
         <text
          follows="left|top"
diff --git a/indra/newview/skins/default/xui/en/panel_my_profile.xml b/indra/newview/skins/default/xui/en/panel_my_profile.xml
index a493332338..49802aa3f2 100644
--- a/indra/newview/skins/default/xui/en/panel_my_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_my_profile.xml
@@ -295,8 +295,8 @@
                link="true"
                name="partner_text"
                top="0"
-           width="300"
-               word_wrap="true" />
+               use_ellipses="true" 
+           width="300" />
             </panel>
             <text
              follows="left|top"
diff --git a/indra/newview/skins/default/xui/en/panel_profile.xml b/indra/newview/skins/default/xui/en/panel_profile.xml
index a931c55dfe..3ce7ef6ce4 100644
--- a/indra/newview/skins/default/xui/en/panel_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_profile.xml
@@ -274,8 +274,8 @@
                link="true"
                name="partner_text"
                top="0"
-           width="300"
-               word_wrap="true" />
+               use_ellipses="true"
+           width="300" />
             </panel>
             <text
              follows="left|top"
-- 
cgit v1.2.3


From 574a5c682c16fb748755ebc222e37b1084fbb695 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Tue, 3 Aug 2010 10:34:21 -0700
Subject: DEV-52361 Edit link option in Edit My Profile page not active

---
 indra/newview/skins/default/xui/en/panel_edit_profile.xml | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_edit_profile.xml b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
index 6fcf1b0e92..1e69ecaed8 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
@@ -3,7 +3,7 @@
  background_visible="true"
  class="edit_profile_panel"
   follows="all"
- height="535"
+ height="548"
  label="Profile Edit"
  layout="topleft"
  left="0"
@@ -60,7 +60,7 @@
  <scroll_container
      color="DkGray2"
      follows="all"
-     height="494"
+     height="507"
      min_height="300"
      layout="topleft"
      left="8"
@@ -74,7 +74,7 @@
          follows="left|top|right"
          layout="topleft"
          top="0"
-     height="494"
+     height="507"
      min_height="300"
          left="0"
          width="292">
@@ -83,7 +83,7 @@
      follows="left|top|right"
          layout="topleft"
          top="0"
-     height="494"
+     height="507"
      min_height="300"
          left="0"
          width="292">
-- 
cgit v1.2.3


From a97bcb7c7fd705818b7f36af2c4a915e85ff5604 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Tue, 3 Aug 2010 10:43:21 -0700
Subject: DEV-52377 Long display name gets cut off in Inventory Items
 properties for owner and creator

---
 indra/newview/skins/default/xui/en/floater_pay_object.xml | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/floater_pay_object.xml b/indra/newview/skins/default/xui/en/floater_pay_object.xml
index c65dd6e49f..d8cfed7b09 100644
--- a/indra/newview/skins/default/xui/en/floater_pay_object.xml
+++ b/indra/newview/skins/default/xui/en/floater_pay_object.xml
@@ -7,7 +7,7 @@
  name="Give Money"
  help_topic="give_money"
  save_rect="true"
- width="225">
+ width="250">
     <string
      name="payee_group">
         Pay Group
@@ -23,7 +23,8 @@
      left="10"
      top_pad="24"
      name="payee_name"
-     width="200">
+     use_ellipses="true" 
+     width="225">
       Ericacita Moostopolison
     </text>
     <text
-- 
cgit v1.2.3


From 3057bb08be2b49553949a7aebb3dd3eb33c9de46 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Thu, 5 Aug 2010 09:53:10 -0700
Subject: DEV-52475 Avatar picker only shows 10 results for search

---
 indra/newview/llfloateravatarpicker.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloateravatarpicker.cpp b/indra/newview/llfloateravatarpicker.cpp
index 7ed6539387..8c39a8a2df 100644
--- a/indra/newview/llfloateravatarpicker.cpp
+++ b/indra/newview/llfloateravatarpicker.cpp
@@ -435,7 +435,7 @@ void LLFloaterAvatarPicker::find()
 		{
 			url += "/";
 		}
-		url += "?names=";
+		url += "?page_size=100&names=";
 		url += LLURI::escape(text);
 		llinfos << "avatar picker " << url << llendl;
 		LLHTTPClient::get(url, new LLAvatarPickerResponder(mQueryID));
-- 
cgit v1.2.3


From e5fc80b43f1de7431d088dbe1dbd8d4518b11176 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Thu, 5 Aug 2010 16:17:02 -0700
Subject: DEV-52366 Long display name gets cut off in Places page for owner
 listing

---
 indra/newview/skins/default/xui/en/panel_place_profile.xml | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_place_profile.xml b/indra/newview/skins/default/xui/en/panel_place_profile.xml
index fb6f14ae93..b92f7a04a5 100644
--- a/indra/newview/skins/default/xui/en/panel_place_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_place_profile.xml
@@ -651,7 +651,8 @@
                          left_pad="0"
                          name="region_owner"
                          top_delta="0"
-                         value="moose Van Moose"
+                         value="moose Van Moose extra long name moose"
+                         use_ellipses="true" 
                          width="187" />
                         <text
                          follows="left|top"
@@ -712,7 +713,7 @@
                          name="estate_name_label"
                          top_pad="5"
                          value="Estate:"
-                         width="90" />
+                         width="80" />
                         <text
                          follows="left|top|right"
                          height="15"
@@ -729,7 +730,7 @@
                          name="estate_rating_label"
                          top_pad="5"
                          value="Rating:"
-                         width="90" />
+                         width="80" />
                         <text
                          follows="left|top|right"
                          height="15"
@@ -746,15 +747,17 @@
                          name="estate_owner_label"
                          top_pad="5"
                          value="Owner:"
-                         width="90" />
+                         width="80" />
                         <text
                          follows="left|top|right"
                          height="15"
                          layout="topleft"
                          left_pad="0"
                          name="estate_owner"
+                         value="Testing owner name length with long name" 
                          top_delta="0"
-                         width="187" />
+                         use_ellipses="true" 
+                         width="190" />
                         <text
                          follows="left|top"
                          height="15"
-- 
cgit v1.2.3


From 10b664833afc246ea1f94a59e965e0de106f37cb Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Thu, 5 Aug 2010 16:30:32 -0700
Subject: adding DisplayNamesEnabled and DisplayNamesShowUsername to the top
 level of our viewer stats

---
 indra/newview/llviewerstats.cpp | 3 +++
 1 file changed, 3 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewerstats.cpp b/indra/newview/llviewerstats.cpp
index a706e77f19..aaf9aede92 100644
--- a/indra/newview/llviewerstats.cpp
+++ b/indra/newview/llviewerstats.cpp
@@ -853,6 +853,9 @@ void send_stats()
 
 	llinfos << "Misc Stats: int_1: " << misc["int_1"] << " int_2: " << misc["int_2"] << llendl;
 	llinfos << "Misc Stats: string_1: " << misc["string_1"] << " string_2: " << misc["string_2"] << llendl;
+
+	body["DisplayNamesEnabled"] = gSavedSettings.getBOOL("UseDisplayNames");
+	body["DisplayNamesShowUsername"] = gSavedSettings.getBOOL("NameTagShowUsernames");
 	
 	LLViewerStats::getInstance()->addToMessage(body);
 	LLHTTPClient::post(url, body, new ViewerStatsResponder());
-- 
cgit v1.2.3


From af169167ffcf58aab29df2a0a0fb603a4cfbb9cf Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Thu, 5 Aug 2010 16:53:39 -0700
Subject: Clarifying the "Use Display Names" preference by changing it to "View
 Display Names"

---
 indra/newview/skins/default/xui/en/panel_preferences_setup.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_preferences_setup.xml b/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
index 7148aba00a..8814bcab77 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
@@ -391,7 +391,7 @@
 control_name="UseDisplayNames"
 follows="top|left"
 height="15"
-label="Use Display Names"
+label="View Display Names"
 layout="topleft"
 left_delta="50"
 name="display_names_check"
-- 
cgit v1.2.3


From 7f4350655224f0c626a7445fef0369324512f324 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Fri, 6 Aug 2010 10:59:19 -0700
Subject: Set Name... to Set Display Name...

---
 indra/newview/skins/default/xui/en/panel_edit_profile.xml | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_edit_profile.xml b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
index 1e69ecaed8..399e91432f 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
@@ -111,11 +111,11 @@
       <button
        follows="top|left"
        height="20"
-       label="Set Name..."
-       left="170"
+       label="Set Display Name..."
+       left="165"
        name="set_name"
        top_delta="-4"
-       width="110" />
+       width="120" />
      <panel
        name="lifes_images_panel"
          follows="left|top|right"
-- 
cgit v1.2.3


From 9bb2c74dc59073db5ad91e1053f9bd04836b4ce8 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Fri, 6 Aug 2010 13:06:28 -0700
Subject: fix for local chat

---
 indra/newview/llviewermessage.cpp | 21 +++++++++++++--------
 1 file changed, 13 insertions(+), 8 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 0c61e52bc2..0ed7ab835b 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -3077,15 +3077,20 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
 	{
 		// I don't know if it's OK to change this here, if 
 		// anything downstream does lookups by name, for instance
-		LLAvatarName av_name;
-		if (LLAvatarNameCache::useDisplayNames()
-			&& LLAvatarNameCache::get(from_id, &av_name))
-		{
-			chat.mFromName = av_name.mDisplayName;
-		}
-		else
+		
+		if (LLAvatarNameCache::useDisplayNames())
 		{
-			chat.mFromName = LLCacheName::cleanFullName(from_name);
+			LLAvatarName av_name;
+			LLAvatarNameCache::get(from_id, &av_name);
+
+			if (!av_name.mDisplayName.empty())
+			{
+				chat.mFromName = av_name.mDisplayName;
+			}
+			else
+			{
+				chat.mFromName = LLCacheName::cleanFullName(from_name);
+			}
 		}
 	}
 	else
-- 
cgit v1.2.3


From bc60707968bd8b2cd2941357a6ff653f6ed2d40e Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Fri, 13 Aug 2010 17:33:04 -0700
Subject: DEV-52163 Long display name with wide characters not fully visible in
 viewer aside from nametag

---
 indra/newview/llinspectavatar.cpp                  | 17 +++++++++++
 indra/newview/llpanelprofileview.cpp               | 15 ++++++++++
 .../skins/default/xui/en/inspect_avatar.xml        | 35 +++++++++++++++-------
 .../skins/default/xui/en/panel_profile_view.xml    | 30 +++++++++++++------
 .../skins/default/xui/en/widgets/inspector.xml     |  1 +
 5 files changed, 78 insertions(+), 20 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llinspectavatar.cpp b/indra/newview/llinspectavatar.cpp
index 1cd1dcc7f0..77435ae214 100644
--- a/indra/newview/llinspectavatar.cpp
+++ b/indra/newview/llinspectavatar.cpp
@@ -58,6 +58,7 @@
 #include "llfloater.h"
 #include "llfloaterreg.h"
 #include "llmenubutton.h"
+#include "lltextbox.h"
 #include "lltooltip.h"	// positionViewNearMouse()
 #include "lltrans.h"
 #include "lluictrl.h"
@@ -333,6 +334,7 @@ void LLInspectAvatar::requestUpdate()
 
 	// Clear out old data so it doesn't flash between old and new
 	getChild<LLUICtrl>("user_name")->setValue("");
+	getChild<LLUICtrl>("user_name_small")->setValue("");
 	getChild<LLUICtrl>("user_slid")->setValue("");
 	getChild<LLUICtrl>("user_subtitle")->setValue("");
 	getChild<LLUICtrl>("user_details")->setValue("");
@@ -617,8 +619,23 @@ void LLInspectAvatar::onAvatarNameCache(
 	if (agent_id == mAvatarID)
 	{
 		getChild<LLUICtrl>("user_name")->setValue(av_name.mDisplayName);
+		getChild<LLUICtrl>("user_name_small")->setValue(av_name.mDisplayName);
 		getChild<LLUICtrl>("user_slid")->setValue(av_name.mUsername);
 		mAvatarName = av_name;
+		
+		// show smaller display name if too long to display in regular size
+		if (getChild<LLTextBox>("user_name")->getTextPixelWidth() > getChild<LLTextBox>("user_name")->getRect().getWidth())
+		{
+			getChild<LLUICtrl>("user_name_small")->setVisible( true );
+			getChild<LLUICtrl>("user_name")->setVisible( false );
+		}
+		else
+		{
+			getChild<LLUICtrl>("user_name_small")->setVisible( false );
+			getChild<LLUICtrl>("user_name")->setVisible( true );
+
+		}
+
 	}
 }
 
diff --git a/indra/newview/llpanelprofileview.cpp b/indra/newview/llpanelprofileview.cpp
index d22d8d2718..ab235f2b75 100644
--- a/indra/newview/llpanelprofileview.cpp
+++ b/indra/newview/llpanelprofileview.cpp
@@ -207,7 +207,22 @@ void LLPanelProfileView::onAvatarNameCache(const LLUUID& agent_id,
 										   const LLAvatarName& av_name)
 {
 	getChild<LLUICtrl>("user_name")->setValue( av_name.mDisplayName );
+	getChild<LLUICtrl>("user_name_small")->setValue( av_name.mDisplayName );
 	getChild<LLUICtrl>("user_slid")->setValue( av_name.mUsername );
+
+	// show smaller display name if too long to display in regular size
+	if (getChild<LLTextBox>("user_name")->getTextPixelWidth() > getChild<LLTextBox>("user_name")->getRect().getWidth())
+	{
+		getChild<LLUICtrl>("user_name_small")->setVisible( true );
+		getChild<LLUICtrl>("user_name")->setVisible( false );
+	}
+	else
+	{
+		getChild<LLUICtrl>("user_name_small")->setVisible( false );
+		getChild<LLUICtrl>("user_name")->setVisible( true );
+
+	}
+
 }
 
 // EOF
diff --git a/indra/newview/skins/default/xui/en/inspect_avatar.xml b/indra/newview/skins/default/xui/en/inspect_avatar.xml
index d018ea7ce1..b2efd13441 100644
--- a/indra/newview/skins/default/xui/en/inspect_avatar.xml
+++ b/indra/newview/skins/default/xui/en/inspect_avatar.xml
@@ -15,7 +15,7 @@
  single_instance="true"
  sound_flags="0"
  visible="true"
- width="228">
+ width="245">
   <!-- Allowed fields include:
 	[BORN_ON] ("12/3/2008")
 	[SL_PROFILE] (Second Life profile),
@@ -34,16 +34,29 @@
     </string>
   <text
      follows="top|left"
-     font="SansSerifLarge"
-     height="16"
+     font="SansSerif"
+     height="20"
      left="8"
-     name="user_name"
-     top="10"
+     name="user_name_small"
+     top="7"
      text_color="White"
      use_ellipses="true"
-     value="Grumpity ProductEngine"
-     width="175" />
-    <text
+     word_wrap="true"
+     value="Grumpity ProductEngine with a long name"
+     width="185" />
+   <text
+    follows="top|left"
+    font="SansSerifBigLarge"
+    height="21"
+    left="8"
+    name="user_name"
+    top="10"
+    text_color="White"
+    use_ellipses="true"
+    visible="false" 
+    value="Grumpity ProductEngine"
+    width="190" />
+   <text
      follows="top|left"
      height="16"
      left="8"
@@ -71,9 +84,9 @@
      name="user_details"
      right="-10"
      word_wrap="true"
-     top_pad="6"
+     top_pad="4"
      use_ellipses="true"
-     width="220">This is my second life description and I really think it is great.
+     width="220">This is my second life description and I really think it is great. But for some reason my description is super extra long because I like to talk a whole lot
     </text>
     <slider
      follows="top|left"
@@ -87,7 +100,7 @@
      tool_tip="Voice volume"
      top_pad="0"
      value="0.5"
-     width="195" />
+     width="200" />
     <button
      follows="top|left"
      height="16"
diff --git a/indra/newview/skins/default/xui/en/panel_profile_view.xml b/indra/newview/skins/default/xui/en/panel_profile_view.xml
index 9745f89e31..5778d3cb6f 100644
--- a/indra/newview/skins/default/xui/en/panel_profile_view.xml
+++ b/indra/newview/skins/default/xui/en/panel_profile_view.xml
@@ -28,17 +28,30 @@
      tab_stop="false"
      top="2"
      width="30" />
-    <text_editor
+     <text
     	h_pad="0"
     	v_pad="0"
-      allow_scroll="false"
-      bg_visible="false"
-      read_only = "true"
       follows="top|left|right"
-      font="SansSerifHugeBold"
-      height="26"
+      font="SansSerifBigBold"
+      height="29"
       layout="topleft"
       left_pad="5"
+      name="user_name_small"
+      text_color="LtGray"
+      top="0"
+      value="(Loading...)"
+      use_ellipses="true"
+      word_wrap="true" 
+      visible="false" 
+      width="275" />
+     <text
+      h_pad="0"
+      v_pad="0"
+      follows="top|left|right"
+      font="SansSerifHugeBold"
+      height="27"
+      layout="topleft"
+      left_delta="0"
       name="user_name"
       text_color="LtGray"
       top="2"
@@ -52,7 +65,6 @@
      left="45"
      name="user_slid"
      text_color="LtGray"
-     value=""
      width="150" />
     <text
      follows="top|left"
@@ -67,7 +79,7 @@
      width="150" />
     <tab_container
      follows="all"
-     height="538"
+     height="537"
      halign="center"
      layout="topleft"
      left="5"
@@ -77,7 +89,7 @@
      tab_height="30"
      tab_position="top"
      top_pad="5"
-     width="317">
+     width="317"> 
         <panel
          class="panel_profile"
          filename="panel_profile.xml"
diff --git a/indra/newview/skins/default/xui/en/widgets/inspector.xml b/indra/newview/skins/default/xui/en/widgets/inspector.xml
index 428b2ce03b..8c171c387f 100644
--- a/indra/newview/skins/default/xui/en/widgets/inspector.xml
+++ b/indra/newview/skins/default/xui/en/widgets/inspector.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <inspector name="inspector"
+           max_width="300"
            bg_opaque_color="DkGray_66"
            background_visible="true"
            bg_opaque_image="Inspector_Hover"
-- 
cgit v1.2.3


From 3a5ef5bd6fa962c2b73baaab7be6099b0caf5665 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Fri, 13 Aug 2010 17:33:25 -0700
Subject: fixed nametag reverting to legacy name ever 3 minutes

---
 indra/newview/lltoolpie.cpp | 21 ++++++++++++---------
 1 file changed, 12 insertions(+), 9 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp
index 535f41a3aa..809d39885d 100644
--- a/indra/newview/lltoolpie.cpp
+++ b/indra/newview/lltoolpie.cpp
@@ -879,17 +879,20 @@ BOOL LLToolPie::handleTooltipObject( LLViewerObject* hover_object, std::string l
 					full_name = LLTrans::getString("TooltipPerson");
 				}
 			}
-			LLAvatarName av_name;
-			if (LLAvatarNameCache::useDisplayNames()
-				&& LLAvatarNameCache::get(hover_object->getID(), &av_name))
+			if (LLAvatarNameCache::useDisplayNames())
 			{
-				final_name = av_name.mDisplayName + " (" + av_name.mUsername + ")";
-			}
-			else
-			{
-				final_name = full_name;
+				LLAvatarName av_name;
+				LLAvatarNameCache::get(hover_object->getID(), &av_name);
+				if (!av_name.mDisplayName.empty())
+				{
+					final_name = av_name.mDisplayName + " (" + av_name.mUsername + ")";
+				}
+				else
+				{
+					final_name = full_name;
+				}
 			}
-			
+
 			// *HACK: We may select this object, so pretend it was clicked
 			mPick = mHoverPick;
 			LLInspector::Params p;
-- 
cgit v1.2.3


From 650171af1788435e200c62965c3ffe314d2082db Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Thu, 19 Aug 2010 14:20:49 -0700
Subject: DEV-51021 Viewer returns misleading error message when a blocked user
 attempts to change his display name

---
 indra/newview/llpanelme.cpp | 24 +++++++++++-------------
 indra/newview/llpanelme.h   |  3 +++
 2 files changed, 14 insertions(+), 13 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llpanelme.cpp b/indra/newview/llpanelme.cpp
index 5e8e07b962..75abad8fc7 100644
--- a/indra/newview/llpanelme.cpp
+++ b/indra/newview/llpanelme.cpp
@@ -194,6 +194,8 @@ void LLPanelMyProfileEdit::onOpen(const LLSD& key)
 	LLUICtrl* set_name = getChild<LLUICtrl>("set_name");
 	set_name->setVisible(use_display_names);
 	set_name->setEnabled(use_display_names);
+	// force new avatar name fetch so we have latest update time
+	LLAvatarNameCache::fetch(gAgent.getID()); 
 
 	LLPanelMyProfile::onOpen(getAvatarId());
 }
@@ -373,19 +375,15 @@ void LLPanelMyProfileEdit::onDialogSetName(const LLSD& notification, const LLSD&
 }
 
 void LLPanelMyProfileEdit::onClickSetName()
+{	
+	LLAvatarNameCache::get(getAvatarId(), 
+			boost::bind(&LLPanelMyProfileEdit::onAvatarNameCache,
+				this, _1, _2));
+}
+
+void LLPanelMyProfileEdit::onAvatarNameCache(const LLUUID& agent_id, const LLAvatarName& av_name)
 {
-	LLUUID agent_id = getAvatarId();
-	std::string display_name;
-	LLAvatarName av_name;
-	if (!LLAvatarNameCache::get(agent_id, &av_name))
-	{
-		// something is wrong, tell user to try again later
-		LLNotificationsUtil::add("SetDisplayNameFailedGeneric");
-		return;
-	}
-		
-	display_name = av_name.mDisplayName;
-	if (display_name.empty())
+	if (av_name.mDisplayName.empty())
 	{
 		// something is wrong, tell user to try again later
 		LLNotificationsUtil::add("SetDisplayNameFailedGeneric");
@@ -421,7 +419,7 @@ void LLPanelMyProfileEdit::onClickSetName()
 	}
 	
 	LLSD args;
-	args["DISPLAY_NAME"] = display_name;
+	args["DISPLAY_NAME"] = av_name.mDisplayName;
 	LLSD payload;
 	payload["agent_id"] = agent_id;
 	LLNotificationsUtil::add("SetDisplayName", args, payload, 
diff --git a/indra/newview/llpanelme.h b/indra/newview/llpanelme.h
index f3caf026dc..be292002cf 100644
--- a/indra/newview/llpanelme.h
+++ b/indra/newview/llpanelme.h
@@ -99,6 +99,7 @@ private:
 	void onClickSetName();
 	void onDialogSetName(const LLSD& notification, const LLSD& response);
 	void onCacheSetName(bool success, const std::string& reason, const LLSD& content);
+	void onAvatarNameCache(const LLUUID& id, const LLAvatarName& av_name);
 
 	/**
 	 * Enabled/disables controls to prevent overwriting edited data upon receiving
@@ -106,6 +107,8 @@ private:
 	 */
 	void enableEditing(bool enable);
 
+
+
 private:
 	// map TexturePicker name => Edit Icon pointer should be visible while hovering Texture Picker
 	typedef std::map<std::string, LLIconCtrl*> texture_edit_icon_map_t;
-- 
cgit v1.2.3


From c39d74ac985e789eef8ee988cf8ba80fb2402683 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Thu, 19 Aug 2010 14:23:14 -0700
Subject: synchronous llavatarcachename::get calls now return true even if
 entry is expired

---
 indra/newview/lltoolpie.cpp       | 21 +++++++++------------
 indra/newview/llviewermessage.cpp | 21 ++++++++-------------
 2 files changed, 17 insertions(+), 25 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp
index 809d39885d..479993c4dd 100644
--- a/indra/newview/lltoolpie.cpp
+++ b/indra/newview/lltoolpie.cpp
@@ -879,18 +879,15 @@ BOOL LLToolPie::handleTooltipObject( LLViewerObject* hover_object, std::string l
 					full_name = LLTrans::getString("TooltipPerson");
 				}
 			}
-			if (LLAvatarNameCache::useDisplayNames())
-			{
-				LLAvatarName av_name;
-				LLAvatarNameCache::get(hover_object->getID(), &av_name);
-				if (!av_name.mDisplayName.empty())
-				{
-					final_name = av_name.mDisplayName + " (" + av_name.mUsername + ")";
-				}
-				else
-				{
-					final_name = full_name;
-				}
+
+			LLAvatarName av_name;
+			if (LLAvatarNameCache::get(hover_object->getID(), &av_name))
+			{
+				final_name = av_name.mDisplayName + " (" + av_name.mUsername + ")";
+			}
+			else
+			{
+				final_name = full_name;
 			}
 
 			// *HACK: We may select this object, so pretend it was clicked
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 0ed7ab835b..5c36792a0d 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -3078,19 +3078,14 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
 		// I don't know if it's OK to change this here, if 
 		// anything downstream does lookups by name, for instance
 		
-		if (LLAvatarNameCache::useDisplayNames())
-		{
-			LLAvatarName av_name;
-			LLAvatarNameCache::get(from_id, &av_name);
-
-			if (!av_name.mDisplayName.empty())
-			{
-				chat.mFromName = av_name.mDisplayName;
-			}
-			else
-			{
-				chat.mFromName = LLCacheName::cleanFullName(from_name);
-			}
+		LLAvatarName av_name;
+		if (LLAvatarNameCache::get(from_id, &av_name))
+		{
+			chat.mFromName = av_name.mDisplayName;
+		}
+		else
+		{
+			chat.mFromName = LLCacheName::cleanFullName(from_name);
 		}
 	}
 	else
-- 
cgit v1.2.3


From 83253d12f1ccfdeb53141b09700ae4849c804003 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Thu, 19 Aug 2010 14:24:38 -0700
Subject: DEV-52377 Long display name gets cut off in Inventory Items
 properties for owner and creator

---
 .../skins/default/xui/en/floater_inventory_item_properties.xml      | 4 +++-
 indra/newview/skins/default/xui/en/sidepanel_item_info.xml          | 6 ++++--
 2 files changed, 7 insertions(+), 3 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml
index 366098013b..2ef52bf539 100644
--- a/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml
+++ b/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml
@@ -106,6 +106,7 @@
      left_delta="78"
      name="LabelCreatorName"
      top_delta="0"
+     use_ellipses="true" 
      width="170">
         Nicole Linden
     </text>
@@ -139,8 +140,9 @@
      left_delta="78"
      name="LabelOwnerName"
      top_delta="0"
+     use_ellipses="true"
      width="170">
-        Thrax Linden
+      Thrax Linden
     </text>
     <button
      follows="top|right"
diff --git a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
index 504da8026f..8121fbdc48 100644
--- a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
@@ -164,8 +164,9 @@
      layout="topleft"
      left_pad="5"
 		     name="LabelCreatorName"
-		     top_delta="6"
-		     width="180">
+       top_delta="6"
+       use_ellipses="true"
+       width="180">
       </text>
       <button
       follows="top|right"
@@ -207,6 +208,7 @@
         left_pad="5"
       name="LabelOwnerName"
       top_delta="6"
+       use_ellipses="true"
 			 width="180">
       </text>
 	     <button
-- 
cgit v1.2.3


From eaf235978232d4ec69d95af562d7f5f52a2c09e7 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Thu, 19 Aug 2010 14:27:23 -0700
Subject: fixed line endings

---
 indra/newview/lltoolpie.cpp       | 16 ++++++++--------
 indra/newview/llviewermessage.cpp | 16 ++++++++--------
 2 files changed, 16 insertions(+), 16 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp
index 479993c4dd..8ae1861abc 100644
--- a/indra/newview/lltoolpie.cpp
+++ b/indra/newview/lltoolpie.cpp
@@ -880,14 +880,14 @@ BOOL LLToolPie::handleTooltipObject( LLViewerObject* hover_object, std::string l
 				}
 			}
 
-			LLAvatarName av_name;
-			if (LLAvatarNameCache::get(hover_object->getID(), &av_name))
-			{
-				final_name = av_name.mDisplayName + " (" + av_name.mUsername + ")";
-			}
-			else
-			{
-				final_name = full_name;
+			LLAvatarName av_name;
+			if (LLAvatarNameCache::get(hover_object->getID(), &av_name))
+			{
+				final_name = av_name.mDisplayName + " (" + av_name.mUsername + ")";
+			}
+			else
+			{
+				final_name = full_name;
 			}
 
 			// *HACK: We may select this object, so pretend it was clicked
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 5c36792a0d..116c9656ae 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -3078,14 +3078,14 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
 		// I don't know if it's OK to change this here, if 
 		// anything downstream does lookups by name, for instance
 		
-		LLAvatarName av_name;
-		if (LLAvatarNameCache::get(from_id, &av_name))
-		{
-			chat.mFromName = av_name.mDisplayName;
-		}
-		else
-		{
-			chat.mFromName = LLCacheName::cleanFullName(from_name);
+		LLAvatarName av_name;
+		if (LLAvatarNameCache::get(from_id, &av_name))
+		{
+			chat.mFromName = av_name.mDisplayName;
+		}
+		else
+		{
+			chat.mFromName = LLCacheName::cleanFullName(from_name);
 		}
 	}
 	else
-- 
cgit v1.2.3


From ab320a12e62152907bbec150972a9ac8a0e244fb Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Thu, 19 Aug 2010 15:48:51 -0700
Subject: DEV-52702	Avatar search in Viewer hangs with Searching... when
 searching for invalid characters in Viewer

---
 indra/newview/llfloateravatarpicker.cpp | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloateravatarpicker.cpp b/indra/newview/llfloateravatarpicker.cpp
index 8c39a8a2df..b44ebd043f 100644
--- a/indra/newview/llfloateravatarpicker.cpp
+++ b/indra/newview/llfloateravatarpicker.cpp
@@ -393,7 +393,9 @@ public:
 		//LLSDSerialize::toPrettyXML(content, ss);
 		//llinfos << ss.str() << llendl;
 
-		if (isGoodStatus(status))
+		// in case of invalid characters, the avatar picker returns a 400
+		// just set it to process so it displays 'not found'
+		if (isGoodStatus(status) || status == 400)
 		{
 			LLFloaterAvatarPicker* floater =
 				LLFloaterReg::findTypedInstance<LLFloaterAvatarPicker>("avatar_picker");
@@ -405,7 +407,8 @@ public:
 		else
 		{
 			llinfos << "avatar picker failed " << status
-				<< " reason " << reason << llendl;
+					<< " reason " << reason << llendl;
+			
 		}
 	}
 };
-- 
cgit v1.2.3


From e089937a0de6a82a6f39bb840c7dd99cfdde9869 Mon Sep 17 00:00:00 2001
From: Techwolf Lupindo <bitbucket.org@trap.wereanimal.net>
Date: Sun, 22 Aug 2010 16:05:41 -0400
Subject: VWR-20893: "class Linux_x86_64Manifest" missing from
 viewer_manifest.py Breaking linux 64-bit build. (transplanted from
 111a293c0e1c9062b1aa83dda7cf28aa22754930)

---
 indra/newview/viewer_manifest.py | 7 +++++++
 1 file changed, 7 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index 3f379fcf75..cb9dd32cbe 100755
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -917,6 +917,13 @@ class Linux_i686Manifest(LinuxManifest):
             print "* Going strip-crazy on the packaged binaries, since this is a RELEASE build"
             self.run_command("find %(d)r/bin %(d)r/lib -type f | xargs --no-run-if-empty strip -S" % {'d': self.get_dst_prefix()} ) # makes some small assumptions about our packaged dir structure
 
+class Linux_x86_64Manifest(LinuxManifest):
+    def construct(self):
+        super(Linux_x86_64Manifest, self).construct()
+
+        # support file for valgrind debug tool
+        self.path("secondlife-i686.supp")
+
 ################################################################
 
 if __name__ == "__main__":
-- 
cgit v1.2.3


From 5a6a792920bb0dee35bcd711bd786d907bda556a Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Tue, 24 Aug 2010 09:41:35 -0700
Subject: fix for sim console not staying scrolled to bottom

---
 indra/newview/llfloaterregiondebugconsole.cpp               | 13 +++++--------
 .../skins/default/xui/en/floater_region_debug_console.xml   |  2 ++
 2 files changed, 7 insertions(+), 8 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloaterregiondebugconsole.cpp b/indra/newview/llfloaterregiondebugconsole.cpp
index 058f894800..8885fa0cb1 100644
--- a/indra/newview/llfloaterregiondebugconsole.cpp
+++ b/indra/newview/llfloaterregiondebugconsole.cpp
@@ -55,11 +55,9 @@ public:
     /*virtual*/
     void result(const LLSD& content)
     {
-        std::string text = mOutput->getText();
+        std::string text = content.asString();
         text += '\n';
-        text += content.asString();
-        text += '\n';
-        mOutput->setText(text);
+        mOutput->appendText(text, true);
     };
 
     LLTextEditor * mOutput;
@@ -80,14 +78,13 @@ BOOL LLFloaterRegionDebugConsole::postBuild()
 void LLFloaterRegionDebugConsole::onInput(LLUICtrl* ctrl, const LLSD& param)
 {
 	LLLineEditor * input = static_cast<LLLineEditor*>(ctrl);
-	std::string text = mOutput->getText();
-    text += "\n\POST: ";
+	std::string text = "\\POST: ";
 	text += input->getText();
-	mOutput->setText(text);
+	mOutput->appendText(text, true);
 
     std::string url = gAgent.getRegion()->getCapability("SimConsole");
     LLHTTPClient::post(url, LLSD(input->getText()), new ::Responder(mOutput));
 
-	input->setText(std::string(""));
+	input->clear();
 }
 
diff --git a/indra/newview/skins/default/xui/en/floater_region_debug_console.xml b/indra/newview/skins/default/xui/en/floater_region_debug_console.xml
index 591d77340a..976fa35d3c 100644
--- a/indra/newview/skins/default/xui/en/floater_region_debug_console.xml
+++ b/indra/newview/skins/default/xui/en/floater_region_debug_console.xml
@@ -9,6 +9,7 @@
   width="600">
   <text_editor
   left="10"
+  read_only="true" 
    type="string"
    length="1"
    follows="left|top|right|bottom"
@@ -18,6 +19,7 @@
    ignore_tab="false"
    layout="topleft"
    max_length="65536"
+    track_end="true" 
    name="region_debug_console_output"
    show_line_numbers="false" 
    word_wrap="true">
-- 
cgit v1.2.3


From 54b9992eaefe2b68d16a6264c1901f12612e99dc Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Tue, 24 Aug 2010 15:12:56 -0700
Subject: remove parens from mini-inspector if not using display names

---
 indra/newview/lltoolpie.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp
index 5e2088884d..c806c71a52 100644
--- a/indra/newview/lltoolpie.cpp
+++ b/indra/newview/lltoolpie.cpp
@@ -881,7 +881,8 @@ BOOL LLToolPie::handleTooltipObject( LLViewerObject* hover_object, std::string l
 			}
 
 			LLAvatarName av_name;
-			if (LLAvatarNameCache::get(hover_object->getID(), &av_name))
+			if (LLAvatarNameCache::useDisplayNames() && 
+				LLAvatarNameCache::get(hover_object->getID(), &av_name))
 			{
 				final_name = av_name.mDisplayName + " (" + av_name.mUsername + ")";
 			}
-- 
cgit v1.2.3


From 4b9abaaab9448df7e0773cdbaf1a5202a1f9e6c7 Mon Sep 17 00:00:00 2001
From: "Matthew Breindel (Falcon)" <falcon@lindenlab.com>
Date: Thu, 26 Aug 2010 17:09:15 -0700
Subject: Cleaned up the debug console a bit. Gave it a command history and
 proper scrolling to the bottom of the returned data.

---
 indra/newview/llfloaterregiondebugconsole.cpp      | 48 ++++++++++++++++------
 .../xui/en/floater_region_debug_console.xml        | 10 +++--
 2 files changed, 42 insertions(+), 16 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloaterregiondebugconsole.cpp b/indra/newview/llfloaterregiondebugconsole.cpp
index 058f894800..159dee7631 100644
--- a/indra/newview/llfloaterregiondebugconsole.cpp
+++ b/indra/newview/llfloaterregiondebugconsole.cpp
@@ -55,11 +55,8 @@ public:
     /*virtual*/
     void result(const LLSD& content)
     {
-        std::string text = mOutput->getText();
-        text += '\n';
-        text += content.asString();
-        text += '\n';
-        mOutput->setText(text);
+		std::string text = content.asString() + "\n\n> ";
+		mOutput->appendText(text, false);
     };
 
     LLTextEditor * mOutput;
@@ -72,22 +69,47 @@ LLFloaterRegionDebugConsole::LLFloaterRegionDebugConsole(LLSD const & key)
 
 BOOL LLFloaterRegionDebugConsole::postBuild()
 {
-	getChild<LLLineEditor>("region_debug_console_input")->setCommitCallback(boost::bind(&LLFloaterRegionDebugConsole::onInput, this, _1, _2));
+	LLLineEditor* input = getChild<LLLineEditor>("region_debug_console_input");
+	input->setEnableLineHistory(true);
+	input->setCommitCallback(boost::bind(&LLFloaterRegionDebugConsole::onInput, this, _1, _2));
+	input->setFocus(true);
+	input->setCommitOnFocusLost(false);
+
 	mOutput = getChild<LLTextEditor>("region_debug_console_output");
+
+	std::string url = gAgent.getRegion()->getCapability("SimConsole");
+	if ( url.size() == 0 )
+	{
+		mOutput->appendText("This region does not support the simulator console.\n\n> ", false);
+	}
+	else
+	{
+		mOutput->appendText("> ", false);
+	}
+	
+
 	return TRUE;
 }
 
 void LLFloaterRegionDebugConsole::onInput(LLUICtrl* ctrl, const LLSD& param)
 {
-	LLLineEditor * input = static_cast<LLLineEditor*>(ctrl);
-	std::string text = mOutput->getText();
-    text += "\n\POST: ";
-	text += input->getText();
-	mOutput->setText(text);
+	LLLineEditor* input = static_cast<LLLineEditor*>(ctrl);
+	std::string text = input->getText() + "\n";
+
 
     std::string url = gAgent.getRegion()->getCapability("SimConsole");
-    LLHTTPClient::post(url, LLSD(input->getText()), new ::Responder(mOutput));
 
-	input->setText(std::string(""));
+	if ( url.size() > 0 )
+	{
+		LLHTTPClient::post(url, LLSD(input->getText()), new ::Responder(mOutput));
+	}
+	else
+	{
+		text += "\nError: No console available for this region/simulator.\n\n> ";
+	}
+
+	mOutput->appendText(text, false);
+
+	input->clear();
 }
 
diff --git a/indra/newview/skins/default/xui/en/floater_region_debug_console.xml b/indra/newview/skins/default/xui/en/floater_region_debug_console.xml
index 591d77340a..cf95257b0a 100644
--- a/indra/newview/skins/default/xui/en/floater_region_debug_console.xml
+++ b/indra/newview/skins/default/xui/en/floater_region_debug_console.xml
@@ -6,7 +6,8 @@
   min_height="300"
   min_width="300"
   height="400"
-  width="600">
+  width="600"
+  default_tab_group="1">
   <text_editor
   left="10"
    type="string"
@@ -20,11 +21,14 @@
    max_length="65536"
    name="region_debug_console_output"
    show_line_numbers="false" 
-   word_wrap="true">
+   word_wrap="true"
+   track_end="true"
+   read_only="true">
   </text_editor>
   <line_editor
    border_style="line"
    border_thickness="1"
+   tab_group="1" 
    follows="left|top|right"
    font="SansSerif"
    height="19"
@@ -33,5 +37,5 @@
    max_length="127"
    name="region_debug_console_input"
    top_delta="0"
-   width="394" />
+   width="576" />
 </floater>
-- 
cgit v1.2.3


From 301112ac7a89266d7378a413f15200ea1bb44d9e Mon Sep 17 00:00:00 2001
From: "Matthew Breindel (Falcon)" <falcon@lindenlab.com>
Date: Thu, 26 Aug 2010 17:14:22 -0700
Subject: Fixed bad merge.

---
 indra/newview/skins/default/xui/en/floater_region_debug_console.xml | 1 -
 1 file changed, 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/floater_region_debug_console.xml b/indra/newview/skins/default/xui/en/floater_region_debug_console.xml
index b3bf28e285..bdb890f882 100644
--- a/indra/newview/skins/default/xui/en/floater_region_debug_console.xml
+++ b/indra/newview/skins/default/xui/en/floater_region_debug_console.xml
@@ -10,7 +10,6 @@
   default_tab_group="1">
   <text_editor
   left="10"
-  read_only="true" 
    type="string"
    length="1"
    follows="left|top|right|bottom"
-- 
cgit v1.2.3


From a16680abe30ef7a363e2931e75561058b7f53772 Mon Sep 17 00:00:00 2001
From: "Matthew Breindel (Falcon)" <falcon@lindenlab.com>
Date: Thu, 26 Aug 2010 17:29:33 -0700
Subject: Removed duplicate item in floater_region_Debug_console.xml

---
 indra/newview/skins/default/xui/en/floater_region_debug_console.xml | 1 -
 1 file changed, 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/floater_region_debug_console.xml b/indra/newview/skins/default/xui/en/floater_region_debug_console.xml
index bdb890f882..cf95257b0a 100644
--- a/indra/newview/skins/default/xui/en/floater_region_debug_console.xml
+++ b/indra/newview/skins/default/xui/en/floater_region_debug_console.xml
@@ -19,7 +19,6 @@
    ignore_tab="false"
    layout="topleft"
    max_length="65536"
-    track_end="true" 
    name="region_debug_console_output"
    show_line_numbers="false" 
    word_wrap="true"
-- 
cgit v1.2.3


From b4fc6681ca787fdffcf43c7243bca7b20dbadff4 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Fri, 3 Sep 2010 13:50:57 -0700
Subject: DEV-53068 ADITI login page broken on Viewer 2

---
 indra/newview/llpanellogin.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp
index a55adbc444..b6f1b8401d 100644
--- a/indra/newview/llpanellogin.cpp
+++ b/indra/newview/llpanellogin.cpp
@@ -834,7 +834,7 @@ void LLPanelLogin::loadLoginPage()
 	curl_free(curl_version);
 
 	// Grid
-	char* curl_grid = curl_escape(LLGridManager::getInstance()->getGridLoginID().c_str(), 0);
+	char* curl_grid = curl_escape(LLGridManager::getInstance()->getGridLabel().c_str(), 0);
 	oStr << "&grid=" << curl_grid;
 	curl_free(curl_grid);
 	gViewerWindow->setMenuBackgroundColor(false, !LLGridManager::getInstance()->isInProductionGrid());
-- 
cgit v1.2.3


From ef6fd5c88710f5aa29ff9aba29920f4bc9df92d7 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Fri, 3 Sep 2010 13:55:50 -0700
Subject: Adding more information to name change notice and adding notification
 for setting display name with invalid unicode

---
 indra/newview/skins/default/xui/en/notifications.xml | 9 +++++++++
 1 file changed, 9 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index b9977c60ea..df71f3f6fb 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -3191,6 +3191,8 @@ You are no longer frozen.
    type="alert">
 The name above your avatar's head is called a [http://wiki.secondlife.com/wiki/Setting_your_display_name display name]. You can change it periodically.
 
+During the evaluation period of this Project Viewer release, you are able to update your Display Name as frequently as you wish. When this feature goes officially live, you will able to update your Display Name only once a week.
+
 Press reset to make it the same as your username.
 
 Change your display name?
@@ -3275,6 +3277,13 @@ Please try again later.
  Please try a different name.
   </notification>
 
+  <notification
+   icon="alertmodal.tga"
+ name="AgentDisplayNameSetInvalidUnicode"
+ type="alertmodal">
+    The display name you wish to set contains invalid characters.
+  </notification>
+
   <notification
    icon="notifytip.tga"
    name="DisplayNameUpdate"
-- 
cgit v1.2.3


From e45b3c6884bc7d9bc457b9633932c8aad5a28430 Mon Sep 17 00:00:00 2001
From: Aimee Linden <aimee@lindenlab.com>
Date: Sat, 4 Sep 2010 19:35:27 +0100
Subject: Correct license on newly exported files to LGPL.

---
 indra/newview/llhudnametag.cpp        | 36 ++++++++++++++--------------------
 indra/newview/llhudnametag.h          | 36 ++++++++++++++--------------------
 indra/newview/llviewerdisplayname.cpp | 37 +++++++++++++++--------------------
 indra/newview/llviewerdisplayname.h   | 37 +++++++++++++++--------------------
 4 files changed, 62 insertions(+), 84 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llhudnametag.cpp b/indra/newview/llhudnametag.cpp
index 303f048dfc..fc758569e4 100644
--- a/indra/newview/llhudnametag.cpp
+++ b/indra/newview/llhudnametag.cpp
@@ -3,31 +3,25 @@
  * @brief Name tags for avatars
  * @author James Cook
  *
- * $LicenseInfo:firstyear=2010&license=viewergpl$
- * 
- * Copyright (c) 2002-2009, Linden Research, Inc.
- * 
+ * $LicenseInfo:firstyear=2010&license=viewerlgpl$
  * Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab.  Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * Copyright (C) 2010, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
  * 
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
  * 
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  * 
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
  * $/LicenseInfo$
  */
 
diff --git a/indra/newview/llhudnametag.h b/indra/newview/llhudnametag.h
index 9a92307009..3325c22def 100644
--- a/indra/newview/llhudnametag.h
+++ b/indra/newview/llhudnametag.h
@@ -3,31 +3,25 @@
  * @brief Name tags for avatars
  * @author James Cook
  *
- * $LicenseInfo:firstyear=2010&license=viewergpl$
- * 
- * Copyright (c) 2002-2009, Linden Research, Inc.
- * 
+ * $LicenseInfo:firstyear=2010&license=viewerlgpl$
  * Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab.  Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * Copyright (C) 2010, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
  * 
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
  * 
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  * 
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
  * $/LicenseInfo$
  */
 
diff --git a/indra/newview/llviewerdisplayname.cpp b/indra/newview/llviewerdisplayname.cpp
index bda0fe9737..09667928ab 100644
--- a/indra/newview/llviewerdisplayname.cpp
+++ b/indra/newview/llviewerdisplayname.cpp
@@ -2,33 +2,28 @@
  * @file llviewerdisplayname.cpp
  * @brief Wrapper for display name functionality
  *
- * $LicenseInfo:firstyear=2010&license=viewergpl$
- * 
- * Copyright (c) 2010, Linden Research, Inc.
- * 
+ * $LicenseInfo:firstyear=2010&license=viewerlgpl$
  * Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab.  Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * Copyright (C) 2010, Linden Research, Inc.
  * 
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
  * 
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
  * 
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
  * $/LicenseInfo$
  */
+
 #include "llviewerprecompiledheaders.h"
 
 #include "llviewerdisplayname.h"
diff --git a/indra/newview/llviewerdisplayname.h b/indra/newview/llviewerdisplayname.h
index c77388531b..922263eb12 100644
--- a/indra/newview/llviewerdisplayname.h
+++ b/indra/newview/llviewerdisplayname.h
@@ -2,33 +2,28 @@
  * @file llviewerdisplayname.h
  * @brief Wrapper for display name functionality
  *
- * $LicenseInfo:firstyear=2010&license=viewergpl$
- * 
- * Copyright (c) 2010, Linden Research, Inc.
- * 
+ * $LicenseInfo:firstyear=2010&license=viewerlgpl$
  * Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab.  Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * Copyright (C) 2010, Linden Research, Inc.
  * 
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
  * 
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
  * 
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
  * $/LicenseInfo$
  */
+
 #ifndef LLVIEWERDISPLAYNAME_H
 #define LLVIEWERDISPLAYNAME_H
 
-- 
cgit v1.2.3


From 71fd7c89aa3a35131ce8133b0b9997038fbbfe32 Mon Sep 17 00:00:00 2001
From: Aimee Linden <aimee@lindenlab.com>
Date: Tue, 7 Sep 2010 21:51:41 +0100
Subject: VWR-17653 (SNOW-734) FIXED Show inspectors for avatars on the MiniMap

Reworked, as the original version clashed with the display names merge.
---
 indra/newview/llnetmap.cpp | 97 +++++++++++++++++++++++++++++++---------------
 indra/newview/llnetmap.h   |  3 +-
 2 files changed, 67 insertions(+), 33 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llnetmap.cpp b/indra/newview/llnetmap.cpp
index b0b2a3f6f9..f084002385 100644
--- a/indra/newview/llnetmap.cpp
+++ b/indra/newview/llnetmap.cpp
@@ -568,48 +568,37 @@ BOOL LLNetMap::handleToolTip( S32 x, S32 y, MASK mask )
 	{
 		return FALSE;
 	}
-	
-	// mToolTipMsg = "[AGENT][REGION](Double-click to open Map)"
-	
-	bool have_agent = false;
-	LLStringUtil::format_map_t args;
-	LLAvatarName av_name;
-	if(mClosestAgentToCursor.notNull()
-	   && LLAvatarNameCache::get(mClosestAgentToCursor, &av_name))
-	{
-		args["[AGENT]"] = av_name.getCompleteName() + "\n";
-		have_agent = true;
-	}
-	else
-	{
-		args["[AGENT]"] = "";
-	}
-	
-	LLViewerRegion*	region = LLWorld::getInstance()->getRegionFromPosGlobal( viewPosToGlobal( x, y ) );
-	if( region && !have_agent)
-	{
-		args["[REGION]"] = region->getName() + "\n";
-	}
-	else
+
+	// If the cursor is near an avatar on the minimap, a mini-inspector will be
+	// shown for the avatar, instead of the normal map tooltip.
+	if (handleToolTipAgent(mClosestAgentToCursor))
 	{
-		args["[REGION]"] = "";
+		return TRUE;
 	}
 
-	std::string msg = mToolTipMsg;
-	LLStringUtil::format(msg, args);
-
 	LLRect sticky_rect;
-	// set sticky_rect
-	if (region)
+	std::string region_name;
+	LLViewerRegion*	region = LLWorld::getInstance()->getRegionFromPosGlobal( viewPosToGlobal( x, y ) );
+	if(region)
 	{
+		// set sticky_rect
 		S32 SLOP = 4;
-		localPointToScreen( 
-			x - SLOP, y - SLOP, 
-			&(sticky_rect.mLeft), &(sticky_rect.mBottom) );
+		localPointToScreen(x - SLOP, y - SLOP, &(sticky_rect.mLeft), &(sticky_rect.mBottom));
 		sticky_rect.mRight = sticky_rect.mLeft + 2 * SLOP;
 		sticky_rect.mTop = sticky_rect.mBottom + 2 * SLOP;
+
+		region_name = region->getName();
+		if (!region_name.empty())
+		{
+			region_name += "\n";
+		}
 	}
 
+	LLStringUtil::format_map_t args;
+	args["[REGION]"] = region_name;
+	std::string msg = mToolTipMsg;
+	LLStringUtil::format(msg, args);
+
 	LLToolTipMgr::instance().show(LLToolTip::Params()
 		.message(msg)
 		.sticky_rect(sticky_rect));
@@ -617,6 +606,50 @@ BOOL LLNetMap::handleToolTip( S32 x, S32 y, MASK mask )
 	return TRUE;
 }
 
+BOOL LLNetMap::handleToolTipAgent(const LLUUID& avatar_id)
+{
+	LLAvatarName av_name;
+	if (avatar_id.isNull() || !LLAvatarNameCache::get(avatar_id, &av_name))
+	{
+		return FALSE;
+	}
+
+	// only show tooltip if same inspector not already open
+	LLFloater* existing_inspector = LLFloaterReg::findInstance("inspect_avatar");
+	if (!existing_inspector
+		|| !existing_inspector->getVisible()
+		|| existing_inspector->getKey()["avatar_id"].asUUID() != avatar_id)
+	{
+		LLInspector::Params p;
+		p.fillFrom(LLUICtrlFactory::instance().getDefaultParams<LLInspector>());
+		p.message(av_name.getCompleteName());
+		p.image.name("Inspector_I");
+		p.click_callback(boost::bind(showAvatarInspector, avatar_id));
+		p.visible_time_near(6.f);
+		p.visible_time_far(3.f);
+		p.delay_time(0.35f);
+		p.wrap(false);
+
+		LLToolTipMgr::instance().show(p);
+	}
+	return TRUE;
+}
+
+// static
+void LLNetMap::showAvatarInspector(const LLUUID& avatar_id)
+{
+	LLSD params;
+	params["avatar_id"] = avatar_id;
+
+	if (LLToolTipMgr::instance().toolTipVisible())
+	{
+		LLRect rect = LLToolTipMgr::instance().getToolTipRect();
+		params["pos"]["x"] = rect.mLeft;
+		params["pos"]["y"] = rect.mTop;
+	}
+
+	LLFloaterReg::showInstance("inspect_avatar", params);
+}
 
 void LLNetMap::renderScaledPointGlobal( const LLVector3d& pos, const LLColor4U &color, F32 radius_meters )
 {
diff --git a/indra/newview/llnetmap.h b/indra/newview/llnetmap.h
index e25ada4c95..650bce0da4 100644
--- a/indra/newview/llnetmap.h
+++ b/indra/newview/llnetmap.h
@@ -86,13 +86,14 @@ private:
 	void			drawTracking( const LLVector3d& pos_global, 
 								  const LLColor4& color,
 								  BOOL draw_arrow = TRUE);
+	BOOL			handleToolTipAgent(const LLUUID& avatar_id);
 	static void		showAvatarInspector(const LLUUID& avatar_id);
 
 	void			createObjectImage();
 
-private:
 	static bool		outsideSlop(S32 x, S32 y, S32 start_x, S32 start_y, S32 slop);
 
+private:
 	bool			mUpdateNow;
 
 	LLUIColor		mBackgroundColor;
-- 
cgit v1.2.3


From df97ed70de7bda85f2eda9d00daf18d6d1ea3397 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Wed, 8 Sep 2010 16:36:47 -0700
Subject: DEV-53159 Clicking the 'Set Display Name...' button multiple times
 stacks up the name change dialog boxes

---
 indra/newview/skins/default/xui/en/notifications.xml | 1 +
 1 file changed, 1 insertion(+)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index df71f3f6fb..281f367345 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -3214,6 +3214,7 @@ Change your display name?
        name="Cancel"
        text="Cancel"/>
     </form>
+    <unique/>
   </notification>
 
   <notification
-- 
cgit v1.2.3


From 40a6786af669cd8ed030d1e6f0de43d98492f98a Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Wed, 8 Sep 2010 16:39:25 -0700
Subject: Fixing chat logs to use username

---
 indra/newview/llimview.cpp | 11 +++++++++++
 indra/newview/llimview.h   |  2 ++
 2 files changed, 13 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index 070e384fa4..7109f9e21e 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -518,6 +518,11 @@ bool LLIMModel::LLIMSession::isOtherParticipantAvaline()
 	return !mOtherParticipantIsAvatar;
 }
 
+void LLIMModel::LLIMSession::onAvatarNameCache(const LLUUID& avatar_id, const LLAvatarName& av_name)
+{
+	mHistoryFileName = av_name.mUsername;
+}
+
 void LLIMModel::LLIMSession::buildHistoryFileName()
 {
 	mHistoryFileName = mName;
@@ -536,6 +541,12 @@ void LLIMModel::LLIMSession::buildHistoryFileName()
 		//in case of incoming ad-hoc sessions
 		mHistoryFileName = mName + " " + LLLogChat::timestamp(true) + " " + mSessionID.asString().substr(0, 4);
 	}
+
+	// look up username to use as the log name
+	if (isP2P())
+	{
+		LLAvatarNameCache::get(mOtherParticipantID, boost::bind(&LLIMModel::LLIMSession::onAvatarNameCache, this, _1, _2));
+	}
 }
 
 //static
diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h
index c95f98f552..d566a4d03f 100644
--- a/indra/newview/llimview.h
+++ b/indra/newview/llimview.h
@@ -97,6 +97,8 @@ public:
 		/** ad-hoc sessions involve sophisticated chat history file naming schemes */
 		void buildHistoryFileName();
 
+		void onAvatarNameCache(const LLUUID& avatar_id, const LLAvatarName& av_name);
+
 		//*TODO make private
 		static std::string generateHash(const std::set<LLUUID>& sorted_uuids);
 
-- 
cgit v1.2.3


From bc80e6c7f396d4182efbf7fc1d52765949bd3a77 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Wed, 8 Sep 2010 16:39:58 -0700
Subject: simplifying the inspector tooltip logic

---
 indra/newview/lltoolpie.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp
index 6c45b7cc60..f8bf647670 100644
--- a/indra/newview/lltoolpie.cpp
+++ b/indra/newview/lltoolpie.cpp
@@ -878,7 +878,7 @@ BOOL LLToolPie::handleTooltipObject( LLViewerObject* hover_object, std::string l
 			if (LLAvatarNameCache::useDisplayNames() && 
 				LLAvatarNameCache::get(hover_object->getID(), &av_name))
 			{
-				final_name = av_name.mDisplayName + " (" + av_name.mUsername + ")";
+				final_name = av_name.getCompleteName();
 			}
 			else
 			{
-- 
cgit v1.2.3


From ca5183c708616c7710ffa9386e0191cd23815a41 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Wed, 8 Sep 2010 16:41:11 -0700
Subject: Usernames on by default

---
 indra/newview/app_settings/settings.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 80f610bb2f..4c4e77a0bf 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -7941,7 +7941,7 @@
       <key>Type</key>
       <string>Boolean</string>
       <key>Value</key>
-      <integer>0</integer>
+      <integer>1</integer>
     </map>
     <key>RenderInitError</key>
     <map>
-- 
cgit v1.2.3


From 39e5d2ecf04deceda92d6a53413298ca1c3bc0c7 Mon Sep 17 00:00:00 2001
From: Merov Linden <merov@lindenlab.com>
Date: Wed, 8 Sep 2010 23:03:56 -0700
Subject: VWR-22761 : Rearchitecture of llmetricperformancetester and simple
 (non complete) implementation in llimagej2c

---
 indra/newview/CMakeLists.txt                |   2 -
 indra/newview/llappviewer.cpp               |   7 +-
 indra/newview/llfasttimerview.cpp           |  30 +++-
 indra/newview/llfasttimerview.h             |   1 +
 indra/newview/llmetricperformancetester.cpp | 252 ----------------------------
 indra/newview/llmetricperformancetester.h   | 153 -----------------
 indra/newview/llviewertexture.cpp           |  83 +++++----
 indra/newview/llviewertexture.h             |   6 +-
 8 files changed, 75 insertions(+), 459 deletions(-)
 delete mode 100644 indra/newview/llmetricperformancetester.cpp
 delete mode 100644 indra/newview/llmetricperformancetester.h

(limited to 'indra/newview')

diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 630902c48f..546f8268d0 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -284,7 +284,6 @@ set(viewer_SOURCE_FILES
     llmediadataclient.cpp
     llmemoryview.cpp
     llmenucommands.cpp
-    llmetricperformancetester.cpp
     llmimetypes.cpp
     llmorphview.cpp
     llmoveview.cpp
@@ -808,7 +807,6 @@ set(viewer_HEADER_FILES
     llmediadataclient.h
     llmemoryview.h
     llmenucommands.h
-    llmetricperformancetester.h
     llmimetypes.h
     llmorphview.h
     llmoveview.h
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index bfe3e52657..d383c9adbc 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -536,6 +536,7 @@ public:
 
 		os.close();
 	}
+
 };
 
 //virtual
@@ -1279,7 +1280,7 @@ bool LLAppViewer::cleanup()
 {
 	// workaround for DEV-35406 crash on shutdown
 	LLEventPumps::instance().reset();
-
+    
 	// remove any old breakpad minidump files from the log directory
 	if (! isError())
 	{
@@ -1630,7 +1631,7 @@ bool LLAppViewer::cleanup()
 				gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "metric_report.csv"));
 		}
 	}
-	LLMetricPerformanceTester::cleanClass() ;
+	LLMetricPerformanceTesterBasic::cleanClass() ;
 
 	llinfos << "Cleaning up Media and Textures" << llendflush;
 
@@ -2124,7 +2125,7 @@ bool LLAppViewer::initConfiguration()
 	{
 		LLFastTimerView::sAnalyzePerformance = TRUE;
 	}
-
+    
 	if (clp.hasOption("replaysession"))
 	{
 		LLAgentPilot::sReplaySession = TRUE;
diff --git a/indra/newview/llfasttimerview.cpp b/indra/newview/llfasttimerview.cpp
index b715647143..07ff3a91a1 100644
--- a/indra/newview/llfasttimerview.cpp
+++ b/indra/newview/llfasttimerview.cpp
@@ -1144,15 +1144,15 @@ LLSD LLFastTimerView::analyzeMetricPerformanceLog(std::istream& is)
 		{
 			std::string label = iter->first;
 
-			LLMetricPerformanceTester* tester = LLMetricPerformanceTester::getTester(iter->second["Name"].asString()) ;
+			LLMetricPerformanceTesterBasic* tester = LLMetricPerformanceTesterBasic::getTester(iter->second["Name"].asString()) ;
 			if(tester)
 			{
 				ret[label]["Name"] = iter->second["Name"] ;
 
-				S32 num_of_strings = tester->getNumOfMetricStrings() ;
-				for(S32 index = 0 ; index < num_of_strings ; index++)
+				S32 num_of_metrics = tester->getNumberOfMetrics() ;
+				for(S32 index = 0 ; index < num_of_metrics ; index++)
 				{
-					ret[label][ tester->getMetricString(index) ] = iter->second[ tester->getMetricString(index) ] ;
+					ret[label][ tester->getMetricName(index) ] = iter->second[ tester->getMetricName(index) ] ;
 				}
 			}
 		}
@@ -1161,10 +1161,24 @@ LLSD LLFastTimerView::analyzeMetricPerformanceLog(std::istream& is)
 	return ret;
 }
 
+//static
+void LLFastTimerView::outputAllMetrics()
+{
+	if (LLMetricPerformanceTesterBasic::hasMetricPerformanceTesters())
+	{
+        for (LLMetricPerformanceTesterBasic::name_tester_map_t::iterator iter = LLMetricPerformanceTesterBasic::sTesterMap.begin(); 
+            iter != LLMetricPerformanceTesterBasic::sTesterMap.end(); ++iter)
+        {
+            LLMetricPerformanceTesterBasic* tester = ((LLMetricPerformanceTesterBasic*)iter->second);	
+            tester->outputTestResults();
+        }
+	}
+}
+
 //static
 void LLFastTimerView::doAnalysisMetrics(std::string baseline, std::string target, std::string output)
 {
-	if(!LLMetricPerformanceTester::hasMetricPerformanceTesters())
+	if(!LLMetricPerformanceTesterBasic::hasMetricPerformanceTesters())
 	{
 		return ;
 	}
@@ -1183,10 +1197,10 @@ void LLFastTimerView::doAnalysisMetrics(std::string baseline, std::string target
 	std::ofstream os(output.c_str());
 	
 	os << "Label, Metric, Base(B), Target(T), Diff(T-B), Percentage(100*T/B)\n"; 
-	for(LLMetricPerformanceTester::name_tester_map_t::iterator iter = LLMetricPerformanceTester::sTesterMap.begin() ; 
-		iter != LLMetricPerformanceTester::sTesterMap.end() ; ++iter)
+	for(LLMetricPerformanceTesterBasic::name_tester_map_t::iterator iter = LLMetricPerformanceTesterBasic::sTesterMap.begin() ; 
+		iter != LLMetricPerformanceTesterBasic::sTesterMap.end() ; ++iter)
 	{
-		LLMetricPerformanceTester* tester = ((LLMetricPerformanceTester*)iter->second) ;	
+		LLMetricPerformanceTesterBasic* tester = ((LLMetricPerformanceTesterBasic*)iter->second) ;	
 		tester->analyzePerformance(&os, &base, &current) ;
 	}
 	
diff --git a/indra/newview/llfasttimerview.h b/indra/newview/llfasttimerview.h
index 961d03abf1..54025267ee 100644
--- a/indra/newview/llfasttimerview.h
+++ b/indra/newview/llfasttimerview.h
@@ -37,6 +37,7 @@ public:
 	
 	static BOOL sAnalyzePerformance;
 
+    static void outputAllMetrics();
 	static void doAnalysis(std::string baseline, std::string target, std::string output);
 
 private:
diff --git a/indra/newview/llmetricperformancetester.cpp b/indra/newview/llmetricperformancetester.cpp
deleted file mode 100644
index 903c97378e..0000000000
--- a/indra/newview/llmetricperformancetester.cpp
+++ /dev/null
@@ -1,252 +0,0 @@
-/** 
- * @file llmetricperformancetester.cpp
- * @brief LLMetricPerformanceTester class implementation
- *
- * $LicenseInfo:firstyear=2004&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- * 
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- * 
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
- * $/LicenseInfo$
- */
-
-#include "llviewerprecompiledheaders.h"
-
-#include "indra_constants.h"
-#include "llerror.h"
-#include "llmath.h"
-#include "llfontgl.h"
-#include "llsdserialize.h"
-#include "llstat.h"
-#include "lltreeiterators.h"
-#include "llmetricperformancetester.h"
-
-LLMetricPerformanceTester::name_tester_map_t LLMetricPerformanceTester::sTesterMap ;
-
-//static 
-void LLMetricPerformanceTester::initClass() 
-{
-}
-//static 
-void LLMetricPerformanceTester::cleanClass() 
-{
-	for(name_tester_map_t::iterator iter = sTesterMap.begin() ; iter != sTesterMap.end() ; ++iter)
-	{
-		delete iter->second ;
-	}
-	sTesterMap.clear() ;
-}
-
-//static 
-void LLMetricPerformanceTester::addTester(LLMetricPerformanceTester* tester) 
-{
-	if(!tester)
-	{
-		llerrs << "invalid tester!" << llendl ;
-		return ;
-	}
-	
-	std::string name = tester->getName() ;
-	if(getTester(name))
-	{
-		llerrs << "Tester name is used by some other tester: " << name << llendl ;
-		return ;
-	}
-
-	sTesterMap.insert(std::make_pair(name, tester));
-
-	return ;
-}
-	
-//static 
-LLMetricPerformanceTester* LLMetricPerformanceTester::getTester(std::string label) 
-{
-	name_tester_map_t::iterator found_it = sTesterMap.find(label) ;
-	if(found_it != sTesterMap.end())
-	{
-		return found_it->second ;
-	}
-
-	return NULL ;
-}
-	
-LLMetricPerformanceTester::LLMetricPerformanceTester(std::string name, BOOL use_default_performance_analysis)
-	: mName(name),
-	mBaseSessionp(NULL),
-	mCurrentSessionp(NULL),
-	mCount(0),
-	mUseDefaultPerformanceAnalysis(use_default_performance_analysis)
-{
-	if(mName == std::string())
-	{
-		llerrs << "invalid name." << llendl ;
-	}
-
-	LLMetricPerformanceTester::addTester(this) ;
-}
-
-/*virtual*/ 
-LLMetricPerformanceTester::~LLMetricPerformanceTester() 
-{
-	if(mBaseSessionp)
-	{
-		delete mBaseSessionp ;
-		mBaseSessionp = NULL ;
-	}
-	if(mCurrentSessionp)
-	{
-		delete mCurrentSessionp ;
-		mCurrentSessionp = NULL ;
-	}
-}
-
-void LLMetricPerformanceTester::incLabel()
-{
-	mCurLabel = llformat("%s-%d", mName.c_str(), mCount++) ;
-}
-void LLMetricPerformanceTester::preOutputTestResults(LLSD* sd) 
-{
-	incLabel() ;
-	(*sd)[mCurLabel]["Name"] = mName ;
-}
-void LLMetricPerformanceTester::postOutputTestResults(LLSD* sd)
-{
-	LLMutexLock lock(LLFastTimer::sLogLock);
-	LLFastTimer::sLogQueue.push((*sd));
-}
-
-void LLMetricPerformanceTester::outputTestResults() 
-{
-	LLSD sd ;
-	preOutputTestResults(&sd) ; 
-
-	outputTestRecord(&sd) ;
-
-	postOutputTestResults(&sd) ;
-}
-
-void LLMetricPerformanceTester::addMetricString(std::string str)
-{
-	mMetricStrings.push_back(str) ;
-}
-
-const std::string& LLMetricPerformanceTester::getMetricString(U32 index) const 
-{
-	return mMetricStrings[index] ;
-}
-
-void LLMetricPerformanceTester::prePerformanceAnalysis() 
-{
-	mCount = 0 ;
-	incLabel() ;
-}
-
-//
-//default analyzing the performance
-//
-/*virtual*/ 
-void LLMetricPerformanceTester::analyzePerformance(std::ofstream* os, LLSD* base, LLSD* current) 
-{
-	if(mUseDefaultPerformanceAnalysis)//use default performance analysis
-	{
-		prePerformanceAnalysis() ;
-
-		BOOL in_base = (*base).has(mCurLabel) ;
-		BOOL in_current = (*current).has(mCurLabel) ;
-
-		while(in_base || in_current)
-		{
-			LLSD::String label = mCurLabel ;		
-			
-			if(in_base && in_current)
-			{				
-				*os << llformat("%s\n", label.c_str()) ;
-
-				for(U32 index = 0 ; index < mMetricStrings.size() ; index++)
-				{
-					switch((*current)[label][ mMetricStrings[index] ].type())
-					{
-					case LLSD::TypeInteger:
-						compareTestResults(os, mMetricStrings[index], 
-							(S32)((*base)[label][ mMetricStrings[index] ].asInteger()), (S32)((*current)[label][ mMetricStrings[index] ].asInteger())) ;
-						break ;
-					case LLSD::TypeReal:
-						compareTestResults(os, mMetricStrings[index], 
-							(F32)((*base)[label][ mMetricStrings[index] ].asReal()), (F32)((*current)[label][ mMetricStrings[index] ].asReal())) ;
-						break;
-					default:
-						llerrs << "unsupported metric " << mMetricStrings[index] << " LLSD type: " << (S32)(*current)[label][ mMetricStrings[index] ].type() << llendl ;
-					}
-				}	
-			}
-
-			incLabel() ;
-			in_base = (*base).has(mCurLabel) ;
-			in_current = (*current).has(mCurLabel) ;
-		}
-	}//end of default
-	else
-	{
-		//load the base session
-		prePerformanceAnalysis() ;
-		mBaseSessionp = loadTestSession(base) ;
-
-		//load the current session
-		prePerformanceAnalysis() ;
-		mCurrentSessionp = loadTestSession(current) ;
-
-		if(!mBaseSessionp || !mCurrentSessionp)
-		{
-			llerrs << "memory error during loading test sessions." << llendl ;
-		}
-
-		//compare
-		compareTestSessions(os) ;
-
-		//release memory
-		if(mBaseSessionp)
-		{
-			delete mBaseSessionp ;
-			mBaseSessionp = NULL ;
-		}
-		if(mCurrentSessionp)
-		{
-			delete mCurrentSessionp ;
-			mCurrentSessionp = NULL ;
-		}
-	}
-}
-
-//virtual 
-void LLMetricPerformanceTester::compareTestResults(std::ofstream* os, std::string metric_string, S32 v_base, S32 v_current) 
-{
-	*os << llformat(" ,%s, %d, %d, %d, %.4f\n", metric_string.c_str(), v_base, v_current, 
-						v_current - v_base, (v_base != 0) ? 100.f * v_current / v_base : 0) ;
-}
-
-//virtual 
-void LLMetricPerformanceTester::compareTestResults(std::ofstream* os, std::string metric_string, F32 v_base, F32 v_current) 
-{
-	*os << llformat(" ,%s, %.4f, %.4f, %.4f, %.4f\n", metric_string.c_str(), v_base, v_current,						
-						v_current - v_base, (fabs(v_base) > 0.0001f) ? 100.f * v_current / v_base : 0.f ) ;
-}
-
-//virtual 
-LLMetricPerformanceTester::LLTestSession::~LLTestSession() 
-{
-}
-
diff --git a/indra/newview/llmetricperformancetester.h b/indra/newview/llmetricperformancetester.h
deleted file mode 100644
index 6f5dc03564..0000000000
--- a/indra/newview/llmetricperformancetester.h
+++ /dev/null
@@ -1,153 +0,0 @@
-/** 
- * @file LLMetricPerformanceTester.h 
- * @brief LLMetricPerformanceTester class definition
- *
- * $LicenseInfo:firstyear=2004&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- * 
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- * 
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
- * $/LicenseInfo$
- */
-
-#ifndef LL_METRICPERFORMANCETESTER_H 
-#define LL_METRICPERFORMANCETESTER_H 
-
-class LLMetricPerformanceTester 
-{
-public:
-	//
-    //name passed to the constructor is a unique string for each tester.
-    //an error is reported if the name is already used by some other tester.
-    //
-	LLMetricPerformanceTester(std::string name, BOOL use_default_performance_analysis) ;
-	virtual ~LLMetricPerformanceTester();
-
-	//
-    //return the name of the tester
-    //
-	std::string getName() const { return mName ;}
-	//
-    //return the number of the test metrics in this tester
-    //
-	S32 getNumOfMetricStrings() const { return mMetricStrings.size() ;}
-	//
-    //return the metric string at the index
-    //
-	const std::string& getMetricString(U32 index) const ;
-
-	//
-    //this function to compare the test results.
-    //by default, it compares the test results against the baseline one by one, item by item, 
-    //in the increasing order of the LLSD label counter, starting from the first one.
-	//you can define your own way to analyze performance by passing FALSE to "use_default_performance_analysis",
-    //and implement two abstract virtual functions below: loadTestSession(...) and compareTestSessions(...).
-    //
-	void analyzePerformance(std::ofstream* os, LLSD* base, LLSD* current) ;
-
-protected:
-	//
-    //insert metric strings used in the tester.
-    //
-	void addMetricString(std::string str) ;
-
-	//
-    //increase LLSD label by 1
-    //
-	void incLabel() ;
-	
-	//
-    //the function to write a set of test results to the log LLSD.
-    //
-	void outputTestResults() ;
-
-	//
-    //compare the test results.
-    //you can write your own to overwrite the default one.
-    //
-	virtual void compareTestResults(std::ofstream* os, std::string metric_string, S32 v_base, S32 v_current) ;
-	virtual void compareTestResults(std::ofstream* os, std::string metric_string, F32 v_base, F32 v_current) ;
-
-	//
-	//for performance analysis use 
-	//it defines an interface for the two abstract virtual functions loadTestSession(...) and compareTestSessions(...).
-    //please make your own test session class derived from it.
-	//
-	class LLTestSession
-	{
-	public:
-		virtual ~LLTestSession() ;
-	};
-
-	//
-    //load a test session for log LLSD
-    //you need to implement it only when you define your own way to analyze performance.
-    //otherwise leave it empty.
-    //
-	virtual LLMetricPerformanceTester::LLTestSession* loadTestSession(LLSD* log) = 0 ;
-	//
-    //compare the base session and the target session
-    //you need to implement it only when you define your own way to analyze performance.
-    //otherwise leave it empty.
-    //
-	virtual void compareTestSessions(std::ofstream* os) = 0 ;
-	//
-    //the function to write a set of test results to the log LLSD.
-    //you have to write you own version of this function.	
-	//
-	virtual void outputTestRecord(LLSD* sd) = 0 ;
-
-private:
-	void preOutputTestResults(LLSD* sd) ;
-	void postOutputTestResults(LLSD* sd) ;
-	void prePerformanceAnalysis() ;
-
-protected:
-	//
-    //the unique name string of the tester
-    //
-	std::string mName ;
-	//
-    //the current label counter for the log LLSD
-    //
-	std::string mCurLabel ;
-	S32 mCount ;
-	
-	BOOL mUseDefaultPerformanceAnalysis ;
-	LLTestSession* mBaseSessionp ;
-	LLTestSession* mCurrentSessionp ;
-
-	//metrics strings
-	std::vector< std::string > mMetricStrings ;
-
-//static members
-private:
-	static void addTester(LLMetricPerformanceTester* tester) ;
-
-public:	
-	typedef std::map< std::string, LLMetricPerformanceTester* > name_tester_map_t;	
-	static name_tester_map_t sTesterMap ;
-
-	static LLMetricPerformanceTester* getTester(std::string label) ;
-	static BOOL hasMetricPerformanceTesters() {return !sTesterMap.empty() ;}
-
-	static void initClass() ;
-	static void cleanClass() ;
-};
-
-#endif
-
diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp
index 0ad54f238e..99a9469ddb 100644
--- a/indra/newview/llviewertexture.cpp
+++ b/indra/newview/llviewertexture.cpp
@@ -344,6 +344,11 @@ void LLViewerTextureManager::init()
 	if(LLFastTimer::sMetricLog)
 	{
 		LLViewerTextureManager::sTesterp = new LLTexturePipelineTester() ;
+        if (!LLViewerTextureManager::sTesterp->isValid())
+        {
+            delete LLViewerTextureManager::sTesterp;
+            LLViewerTextureManager::sTesterp = NULL;
+        }
 	}
 }
 
@@ -3579,22 +3584,22 @@ F32 LLViewerMediaTexture::getMaxVirtualSize()
 //start of LLTexturePipelineTester
 //----------------------------------------------------------------------------------------------
 LLTexturePipelineTester::LLTexturePipelineTester() :
-	LLMetricPerformanceTester("TextureTester", FALSE) 
-{
-	addMetricString("TotalBytesLoaded") ;
-	addMetricString("TotalBytesLoadedFromCache") ;
-	addMetricString("TotalBytesLoadedForLargeImage") ;
-	addMetricString("TotalBytesLoadedForSculpties") ;
-	addMetricString("StartFetchingTime") ;
-	addMetricString("TotalGrayTime") ;
-	addMetricString("TotalStablizingTime") ;
-	addMetricString("StartTimeLoadingSculpties") ;
-	addMetricString("EndTimeLoadingSculpties") ;
-
-	addMetricString("Time") ;
-	addMetricString("TotalBytesBound") ;
-	addMetricString("TotalBytesBoundForLargeImage") ;
-	addMetricString("PercentageBytesBound") ;
+	LLMetricPerformanceTesterWithSession("TextureTester") 
+{
+	addMetric("TotalBytesLoaded") ;
+	addMetric("TotalBytesLoadedFromCache") ;
+	addMetric("TotalBytesLoadedForLargeImage") ;
+	addMetric("TotalBytesLoadedForSculpties") ;
+	addMetric("StartFetchingTime") ;
+	addMetric("TotalGrayTime") ;
+	addMetric("TotalStablizingTime") ;
+	addMetric("StartTimeLoadingSculpties") ;
+	addMetric("EndTimeLoadingSculpties") ;
+
+	addMetric("Time") ;
+	addMetric("TotalBytesBound") ;
+	addMetric("TotalBytesBoundForLargeImage") ;
+	addMetric("PercentageBytesBound") ;
 	
 	mTotalBytesLoaded = 0 ;
 	mTotalBytesLoadedFromCache = 0 ;	
@@ -3672,22 +3677,23 @@ void LLTexturePipelineTester::reset()
 //virtual 
 void LLTexturePipelineTester::outputTestRecord(LLSD *sd) 
 {	
-	(*sd)[mCurLabel]["TotalBytesLoaded"]              = (LLSD::Integer)mTotalBytesLoaded ;
-	(*sd)[mCurLabel]["TotalBytesLoadedFromCache"]     = (LLSD::Integer)mTotalBytesLoadedFromCache ;
-	(*sd)[mCurLabel]["TotalBytesLoadedForLargeImage"] = (LLSD::Integer)mTotalBytesLoadedForLargeImage ;
-	(*sd)[mCurLabel]["TotalBytesLoadedForSculpties"]  = (LLSD::Integer)mTotalBytesLoadedForSculpties ;
+    std::string currentLabel = getCurrentLabelName();
+	(*sd)[currentLabel]["TotalBytesLoaded"]              = (LLSD::Integer)mTotalBytesLoaded ;
+	(*sd)[currentLabel]["TotalBytesLoadedFromCache"]     = (LLSD::Integer)mTotalBytesLoadedFromCache ;
+	(*sd)[currentLabel]["TotalBytesLoadedForLargeImage"] = (LLSD::Integer)mTotalBytesLoadedForLargeImage ;
+	(*sd)[currentLabel]["TotalBytesLoadedForSculpties"]  = (LLSD::Integer)mTotalBytesLoadedForSculpties ;
 
-	(*sd)[mCurLabel]["StartFetchingTime"]             = (LLSD::Real)mStartFetchingTime ;
-	(*sd)[mCurLabel]["TotalGrayTime"]                 = (LLSD::Real)mTotalGrayTime ;
-	(*sd)[mCurLabel]["TotalStablizingTime"]           = (LLSD::Real)mTotalStablizingTime ;
+	(*sd)[currentLabel]["StartFetchingTime"]             = (LLSD::Real)mStartFetchingTime ;
+	(*sd)[currentLabel]["TotalGrayTime"]                 = (LLSD::Real)mTotalGrayTime ;
+	(*sd)[currentLabel]["TotalStablizingTime"]           = (LLSD::Real)mTotalStablizingTime ;
 
-	(*sd)[mCurLabel]["StartTimeLoadingSculpties"]     = (LLSD::Real)mStartTimeLoadingSculpties ;
-	(*sd)[mCurLabel]["EndTimeLoadingSculpties"]       = (LLSD::Real)mEndTimeLoadingSculpties ;
+	(*sd)[currentLabel]["StartTimeLoadingSculpties"]     = (LLSD::Real)mStartTimeLoadingSculpties ;
+	(*sd)[currentLabel]["EndTimeLoadingSculpties"]       = (LLSD::Real)mEndTimeLoadingSculpties ;
 
-	(*sd)[mCurLabel]["Time"]                          = LLImageGL::sLastFrameTime ;
-	(*sd)[mCurLabel]["TotalBytesBound"]               = (LLSD::Integer)mLastTotalBytesUsed ;
-	(*sd)[mCurLabel]["TotalBytesBoundForLargeImage"]  = (LLSD::Integer)mLastTotalBytesUsedForLargeImage ;
-	(*sd)[mCurLabel]["PercentageBytesBound"]          = (LLSD::Real)(100.f * mLastTotalBytesUsed / mTotalBytesLoaded) ;
+	(*sd)[currentLabel]["Time"]                          = LLImageGL::sLastFrameTime ;
+	(*sd)[currentLabel]["TotalBytesBound"]               = (LLSD::Integer)mLastTotalBytesUsed ;
+	(*sd)[currentLabel]["TotalBytesBoundForLargeImage"]  = (LLSD::Integer)mLastTotalBytesUsedForLargeImage ;
+	(*sd)[currentLabel]["PercentageBytesBound"]          = (LLSD::Real)(100.f * mLastTotalBytesUsed / mTotalBytesLoaded) ;
 }
 
 void LLTexturePipelineTester::updateTextureBindingStats(const LLViewerTexture* imagep) 
@@ -3776,7 +3782,7 @@ void LLTexturePipelineTester::compareTestSessions(std::ofstream* os)
 	}
 
 	//compare and output the comparison
-	*os << llformat("%s\n", mName.c_str()) ;
+	*os << llformat("%s\n", getTesterName().c_str()) ;
 	*os << llformat("AggregateResults\n") ;
 
 	compareTestResults(os, "TotalFetchingTime", base_sessionp->mTotalFetchingTime, current_sessionp->mTotalFetchingTime) ;
@@ -3831,7 +3837,7 @@ void LLTexturePipelineTester::compareTestSessions(std::ofstream* os)
 }
 
 //virtual 
-LLMetricPerformanceTester::LLTestSession* LLTexturePipelineTester::loadTestSession(LLSD* log)
+LLMetricPerformanceTesterWithSession::LLTestSession* LLTexturePipelineTester::loadTestSession(LLSD* log)
 {
 	LLTexturePipelineTester::LLTextureTestSession* sessionp = new LLTexturePipelineTester::LLTextureTestSession() ;
 	if(!sessionp)
@@ -3858,12 +3864,11 @@ LLMetricPerformanceTester::LLTestSession* LLTexturePipelineTester::loadTestSessi
 	sessionp->mInstantPerformanceList[sessionp->mInstantPerformanceListCounter].mTime = 0.f ;
 	
 	//load a session
-	BOOL in_log = (*log).has(mCurLabel) ;
-	while(in_log)
+    std::string currentLabel = getCurrentLabelName();
+	BOOL in_log = (*log).has(currentLabel) ;
+	while (in_log)
 	{
-		LLSD::String label = mCurLabel ;		
-		incLabel() ;
-		in_log = (*log).has(mCurLabel) ;
+		LLSD::String label = currentLabel ;		
 
 		if(sessionp->mInstantPerformanceListCounter >= (S32)sessionp->mInstantPerformanceList.size())
 		{
@@ -3929,7 +3934,11 @@ LLMetricPerformanceTester::LLTestSession* LLTexturePipelineTester::loadTestSessi
 			sessionp->mInstantPerformanceList[sessionp->mInstantPerformanceListCounter].mAverageBytesUsedForLargeImagePerSecond = 0 ;
 			sessionp->mInstantPerformanceList[sessionp->mInstantPerformanceListCounter].mAveragePercentageBytesUsedPerSecond = 0.f ;
 			sessionp->mInstantPerformanceList[sessionp->mInstantPerformanceListCounter].mTime = 0.f ;
-		}		
+		}
+        // Next label
+		incrementCurrentCount() ;
+        currentLabel = getCurrentLabelName();
+		in_log = (*log).has(currentLabel) ;
 	}
 
 	sessionp->mTotalFetchingTime += total_fetching_time ;
diff --git a/indra/newview/llviewertexture.h b/indra/newview/llviewertexture.h
index 7cb8bea4c8..6ea717c8b1 100644
--- a/indra/newview/llviewertexture.h
+++ b/indra/newview/llviewertexture.h
@@ -732,7 +732,7 @@ public:
 //it tracks the activities of the texture pipeline
 //records them, and outputs them to log files
 //
-class LLTexturePipelineTester : public LLMetricPerformanceTester
+class LLTexturePipelineTester : public LLMetricPerformanceTesterWithSession
 {
 	enum
 	{
@@ -748,8 +748,6 @@ public:
 	void updateGrayTextureBinding() ;
 	void setStablizingTime() ;
 
-	/*virtual*/ void analyzePerformance(std::ofstream* os, LLSD* base, LLSD* current) ;
-
 private:
 	void reset() ;
 	void updateStablizingTime() ;
@@ -820,7 +818,7 @@ private:
 		S32 mInstantPerformanceListCounter ;
 	};
 
-	/*virtual*/ LLMetricPerformanceTester::LLTestSession* loadTestSession(LLSD* log) ;
+	/*virtual*/ LLMetricPerformanceTesterWithSession::LLTestSession* loadTestSession(LLSD* log) ;
 	/*virtual*/ void compareTestSessions(std::ofstream* os) ;
 };
 
-- 
cgit v1.2.3


From 862a951880a8dfb2096b8bb88842f427d3c5f152 Mon Sep 17 00:00:00 2001
From: Merov Linden <merov@lindenlab.com>
Date: Wed, 6 Oct 2010 20:22:53 -0700
Subject: Backed out changeset 28f52b3d2e3d (optimizations in button
 rendering).

---
 indra/newview/llviewerwindow.cpp | 11 +++++++++++
 1 file changed, 11 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index b36af7d95b..00873a797c 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -2482,6 +2482,17 @@ void LLViewerWindow::updateUI()
 	// only update mouse hover set when UI is visible (since we shouldn't send hover events to invisible UI
 	if (gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI))
 	{
+		// include all ancestors of captor_view as automatically having mouse
+		if (captor_view)
+		{
+			LLView* captor_parent_view = captor_view->getParent();
+			while(captor_parent_view)
+			{
+				mouse_hover_set.insert(captor_parent_view->getHandle());
+				captor_parent_view = captor_parent_view->getParent();
+			}
+		}
+
 		// aggregate visible views that contain mouse cursor in display order
 		LLPopupView::popup_list_t popups = mPopupView->getCurrentPopups();
 
-- 
cgit v1.2.3


From 58d6057076028c13a2dcc6130734a86933dc5864 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Mon, 13 Sep 2010 12:38:12 +0100
Subject: VWR-20756 WIP - start to detect the magic llTextBox() case.

---
 indra/newview/lltoastnotifypanel.cpp | 40 +++++++++++++++++++++++++++++-------
 indra/newview/lltoastnotifypanel.h   |  2 ++
 2 files changed, 35 insertions(+), 7 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/lltoastnotifypanel.cpp b/indra/newview/lltoastnotifypanel.cpp
index ca6efa9d2f..9febcb3d8b 100644
--- a/indra/newview/lltoastnotifypanel.cpp
+++ b/indra/newview/lltoastnotifypanel.cpp
@@ -33,6 +33,7 @@
 
 // library includes
 #include "lldbstrings.h"
+#include "lllslconstants.h"
 #include "llnotifications.h"
 #include "lluiconstants.h"
 #include "llrect.h"
@@ -54,6 +55,7 @@ LLToastNotifyPanel::button_click_signal_t LLToastNotifyPanel::sButtonClickSignal
 LLToastNotifyPanel::LLToastNotifyPanel(LLNotificationPtr& notification, const LLRect& rect) : 
 LLToastPanel(notification),
 mTextBox(NULL),
+mUserInputBox(NULL),
 mInfoPanel(NULL),
 mControlPanel(NULL),
 mNumOptions(0),
@@ -66,15 +68,43 @@ mCloseNotificationOnDestroy(true)
 	{
 		this->setShape(rect);
 	}		 
+	// get a form for the notification
+	LLNotificationFormPtr form(notification->getForm());
+	// get number of elements
+	mNumOptions = form->getNumElements();
+
 	mInfoPanel = getChild<LLPanel>("info_panel");
 	mControlPanel = getChild<LLPanel>("control_panel");
 	BUTTON_WIDTH = gSavedSettings.getS32("ToastButtonWidth");
+
 	// customize panel's attributes
-	// is it intended for displaying a tip
+
+	// is it intended for displaying a tip?
 	mIsTip = notification->getType() == "notifytip";
-	// is it a script dialog
+	// is it a script dialog?
 	mIsScriptDialog = (notification->getName() == "ScriptDialog" || notification->getName() == "ScriptDialogGroup");
-	// is it a caution
+	// is it a script dialog with llTextBox()?
+	mIsScriptTextBox = false;
+	if (mIsScriptDialog)
+	{
+		// if ANY of the buttons have the magic lltextbox string as name, then
+		// treat the whole dialog as a simple text entry box (i.e. mixed button
+		// and textbox forms are not supported)
+		for (int i=0; i<mNumOptions; ++i)
+		{
+			LLSD form_element = form->getElement(i);
+			llwarns << form_element << llendl;
+			if (form_element["name"].asString() == TEXTBOX_MAGIC_TOKEN)
+			{
+				mIsScriptTextBox = true;
+				break;
+			}
+		}
+	}
+	llwarns << "FORM ELEMS " << int(form->getNumElements()) << llendl;
+	llwarns << "isScriptDialog? " << int(mIsScriptDialog) << llendl;
+	llwarns << "isScriptTextBox? " << int(mIsScriptTextBox) << llendl;
+	// is it a caution?
 	//
 	// caution flag can be set explicitly by specifying it in the notification payload, or it can be set implicitly if the
 	// notify xml template specifies that it is a caution
@@ -94,10 +124,6 @@ mCloseNotificationOnDestroy(true)
 	setIsChrome(TRUE);
 	// initialize
 	setFocusRoot(!mIsTip);
-	// get a form for the notification
-	LLNotificationFormPtr form(notification->getForm());
-	// get number of elements
-	mNumOptions = form->getNumElements();
 
 	// customize panel's outfit
 	// preliminary adjust panel's layout
diff --git a/indra/newview/lltoastnotifypanel.h b/indra/newview/lltoastnotifypanel.h
index 9e1eac90b3..f90fca3eaa 100644
--- a/indra/newview/lltoastnotifypanel.h
+++ b/indra/newview/lltoastnotifypanel.h
@@ -99,6 +99,7 @@ protected:
 
 	// panel elements
 	LLTextBase*		mTextBox;
+	LLTextEditor*           mUserInputBox;
 	LLPanel*		mInfoPanel;		// a panel, that contains an information
 	LLPanel*		mControlPanel;	// a panel, that contains buttons (if present)
 
@@ -121,6 +122,7 @@ protected:
 	void disableRespondedOptions(LLNotificationPtr& notification);
 
 	bool mIsTip;
+	bool mIsScriptTextBox;
 	bool mAddedDefaultBtn;
 	bool mIsScriptDialog;
 	bool mIsCaution; 
-- 
cgit v1.2.3


From 17d913fef4778234c97b48d26167d6e1f62d8add Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Mon, 13 Sep 2010 13:56:29 +0100
Subject: VWR-20756 WIP - very limping display of llTextBox

---
 indra/newview/lltoastnotifypanel.cpp               | 19 +++++++++++++++++--
 .../skins/default/xui/en/panel_notification.xml    | 22 ++++++++++++++++++++++
 2 files changed, 39 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/lltoastnotifypanel.cpp b/indra/newview/lltoastnotifypanel.cpp
index 9febcb3d8b..6413874863 100644
--- a/indra/newview/lltoastnotifypanel.cpp
+++ b/indra/newview/lltoastnotifypanel.cpp
@@ -148,6 +148,11 @@ mCloseNotificationOnDestroy(true)
 	mTextBox->setVisible(TRUE);
 	mTextBox->setValue(notification->getMessage());
 
+	mUserInputBox = getChild<LLTextEditor>("user_input_box"); 
+	mUserInputBox->setMaxTextLength(254);// FIXME
+	mUserInputBox->setVisible(FALSE);
+	mUserInputBox->setEnabled(FALSE);
+
 	// add buttons for a script notification
 	if (mIsTip)
 	{
@@ -164,6 +169,16 @@ mCloseNotificationOnDestroy(true)
 			LLSD form_element = form->getElement(i);
 			if (form_element["type"].asString() != "button")
 			{
+				// not a button.
+				continue;
+			}
+			if (form_element["name"].asString() == TEXTBOX_MAGIC_TOKEN)
+			{
+				// a textbox pretending to be a button.
+				// (re)enable the textbox for this panel, and continue.
+				mUserInputBox->setVisible(TRUE);
+				mUserInputBox->setEnabled(TRUE);
+				mUserInputBox->insertText("FOOOOOO!!!!");
 				continue;
 			}
 			LLButton* new_button = createButton(form_element, TRUE);
@@ -278,7 +293,7 @@ LLButton* LLToastNotifyPanel::createButton(const LLSD& form_element, BOOL is_opt
 		p.image_color(LLUIColorTable::instance().getColor("ButtonCautionImageColor"));
 		p.image_color_disabled(LLUIColorTable::instance().getColor("ButtonCautionImageColor"));
 	}
-	// for the scriptdialog buttons we use fixed button size. This  is a limit!
+	// for the scriptdialog buttons we use fixed button size. This is a limit!
 	if (!mIsScriptDialog && font->getWidth(form_element["text"].asString()) > BUTTON_WIDTH)
 	{
 		p.rect.width = 1;
@@ -286,7 +301,7 @@ LLButton* LLToastNotifyPanel::createButton(const LLSD& form_element, BOOL is_opt
 	}
 	else if (mIsScriptDialog && is_ignore_btn)
 	{
-		// this is ignore button,make it smaller
+		// this is ignore button, make it smaller
 		p.rect.height = BTN_HEIGHT_SMALL;
 		p.rect.width = 1;
 		p.auto_resize = true;
diff --git a/indra/newview/skins/default/xui/en/panel_notification.xml b/indra/newview/skins/default/xui/en/panel_notification.xml
index 59ead84127..a816eaccb6 100644
--- a/indra/newview/skins/default/xui/en/panel_notification.xml
+++ b/indra/newview/skins/default/xui/en/panel_notification.xml
@@ -55,6 +55,28 @@
       visible="false"
       width="285"
       wrap="true"/>
+    <text_editor
+    	h_pad="0"
+	v_pad="0"
+      border_visible="true"
+      embedded_items="false"
+      enabled="false"
+      follows="left|right|top|bottom"
+      font="SansSerif"
+      height="85" 
+      layout="topleft"
+      left="10"
+      mouse_opaque="false"
+      name="user_input_box"
+      read_only="false"
+      tab_stop="false"
+      text_color="red"
+      top="50"
+      visible="false"
+      width="285"
+      wrap="true"
+      parse_highlights="true"
+      parse_urls="true"/>
     <text_editor
     	h_pad="0"
 	v_pad="0"
-- 
cgit v1.2.3


From b5ea8b6046b2634cd0ef0ca2d7c3ac8079529e90 Mon Sep 17 00:00:00 2001
From: Xiaohong Bao <bao@lindenlab.com>
Date: Mon, 13 Sep 2010 12:39:14 -0600
Subject: for VWR-22936: design test code/plan for the object cache.

---
 indra/newview/app_settings/settings.xml | 11 +++++++++++
 indra/newview/lltextureview.cpp         |  7 ++++---
 indra/newview/llviewerstats.h           |  1 +
 indra/newview/llvocache.cpp             | 30 ++++++++++++++++++++++++------
 indra/newview/llvocache.h               |  3 ++-
 indra/newview/llworld.cpp               |  5 ++++-
 6 files changed, 46 insertions(+), 11 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index b3f6f0c9f8..c83a87f968 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -5849,6 +5849,17 @@
       <key>Value</key>
       <integer>0</integer>
     </map>
+    <key>ObjectCacheEnabled</key>
+    <map>
+      <key>Comment</key>
+      <string>Enable the object cache.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>OpenDebugStatAdvanced</key>
     <map>
       <key>Comment</key>
diff --git a/indra/newview/lltextureview.cpp b/indra/newview/lltextureview.cpp
index c87aff022f..b9a15fd1f4 100644
--- a/indra/newview/lltextureview.cpp
+++ b/indra/newview/lltextureview.cpp
@@ -514,7 +514,8 @@ void LLGLTexMemBar::draw()
 	F32 cache_max_usage = (F32)BYTES_TO_MEGA_BYTES(LLAppViewer::getTextureCache()->getMaxUsage()) ;
 	S32 line_height = (S32)(LLFontGL::getFontMonospace()->getLineHeight() + .5f);
 	S32 v_offset = (S32)((texture_bar_height + 2.2f) * mTextureView->mNumTextureBars + 2.0f);
-	S32 total_downloaded = BYTES_TO_MEGA_BYTES(gTotalTextureBytes);
+	F32 total_texture_downloaded = (F32)gTotalTextureBytes / (1024 * 1024);
+	F32 total_object_downloaded = (F32)gTotalObjectBytes / (1024 * 1024);
 	//----------------------------------------------------------------------------
 	LLGLSUIDefault gls_ui;
 	LLColor4 text_color(1.f, 1.f, 1.f, 0.75f);
@@ -525,13 +526,13 @@ void LLGLTexMemBar::draw()
 	LLFontGL::getFontMonospace()->renderUTF8(text, 0, 0, v_offset + line_height*6,
 											 text_color, LLFontGL::LEFT, LLFontGL::TOP);
 
-	text = llformat("GL Tot: %d/%d MB Bound: %d/%d MB Raw Tot: %d MB Bias: %.2f Cache: %.1f/%.1f MB Net Tot: %d MB",
+	text = llformat("GL Tot: %d/%d MB Bound: %d/%d MB Raw Tot: %d MB Bias: %.2f Cache: %.1f/%.1f MB Net Tot Tex: %.1f MB Tot Obj: %.1f MB",
 					total_mem,
 					max_total_mem,
 					bound_mem,
 					max_bound_mem,
 					LLImageRaw::sGlobalRawMemory >> 20,	discard_bias,
-					cache_usage, cache_max_usage, total_downloaded);
+					cache_usage, cache_max_usage, total_texture_downloaded, total_object_downloaded);
 	//, cache_entries, cache_max_entries
 
 	LLFontGL::getFontMonospace()->renderUTF8(text, 0, 0, v_offset + line_height*3,
diff --git a/indra/newview/llviewerstats.h b/indra/newview/llviewerstats.h
index ca977d4599..dd82ccddc3 100644
--- a/indra/newview/llviewerstats.h
+++ b/indra/newview/llviewerstats.h
@@ -264,4 +264,5 @@ void send_stats();
 extern std::map<S32,LLFrameTimer> gDebugTimers;
 extern std::map<S32,std::string> gDebugTimerLabel;
 extern U32	gTotalTextureBytes;
+extern U32  gTotalObjectBytes;
 #endif // LL_LLVIEWERSTATS_H
diff --git a/indra/newview/llvocache.cpp b/indra/newview/llvocache.cpp
index ee32bd562e..d40e3c153c 100644
--- a/indra/newview/llvocache.cpp
+++ b/indra/newview/llvocache.cpp
@@ -28,6 +28,7 @@
 #include "llvocache.h"
 #include "llerror.h"
 #include "llregionhandle.h"
+#include "llviewercontrol.h"
 
 BOOL check_read(LLAPRFile* apr_file, void* src, S32 n_bytes) 
 {
@@ -230,11 +231,11 @@ LLVOCache* LLVOCache::sInstance = NULL;
 
 //static 
 LLVOCache* LLVOCache::getInstance() 
-{
+{	
 	if(!sInstance)
 	{
 		sInstance = new LLVOCache() ;
-}
+	}
 	return sInstance ;
 }
 
@@ -259,13 +260,17 @@ LLVOCache::LLVOCache():
 	mReadOnly(TRUE),
 	mNumEntries(0)
 {
+	mEnabled = gSavedSettings.getBOOL("ObjectCacheEnabled");
 	mLocalAPRFilePoolp = new LLVolatileAPRPool() ;
 }
 
 LLVOCache::~LLVOCache()
 {
-	writeCacheHeader();
-	clearCacheInMemory();
+	if(mEnabled)
+	{
+		writeCacheHeader();
+		clearCacheInMemory();
+	}
 	delete mLocalAPRFilePoolp;
 }
 
@@ -279,7 +284,7 @@ void LLVOCache::setDirNames(ELLPath location)
 
 void LLVOCache::initCache(ELLPath location, U32 size, U32 cache_version)
 {
-	if(mInitialized)
+	if(mInitialized || !mEnabled)
 	{
 		return ;
 	}
@@ -406,6 +411,11 @@ BOOL LLVOCache::checkWrite(LLAPRFile* apr_file, void* src, S32 n_bytes)
 
 void LLVOCache::readCacheHeader()
 {
+	if(!mEnabled)
+	{
+		return ;
+	}
+
 	//clear stale info.
 	clearCacheInMemory();	
 
@@ -450,7 +460,7 @@ void LLVOCache::readCacheHeader()
 
 void LLVOCache::writeCacheHeader()
 {
-	if(mReadOnly)
+	if(mReadOnly || !mEnabled)
 	{
 		return ;
 	}	
@@ -501,6 +511,10 @@ BOOL LLVOCache::updateEntry(const HeaderEntryInfo* entry)
 
 void LLVOCache::readFromCache(U64 handle, const LLUUID& id, LLVOCacheEntry::vocache_entry_map_t& cache_entry_map) 
 {
+	if(!mEnabled)
+	{
+		return ;
+	}
 	llassert_always(mInitialized);
 
 	handle_entry_map_t::iterator iter = mHandleEntryMap.find(handle) ;
@@ -570,6 +584,10 @@ void LLVOCache::purgeEntries()
 
 void LLVOCache::writeToCache(U64 handle, const LLUUID& id, const LLVOCacheEntry::vocache_entry_map_t& cache_entry_map, BOOL dirty_cache) 
 {
+	if(!mEnabled)
+	{
+		return ;
+	}
 	llassert_always(mInitialized);
 
 	if(mReadOnly)
diff --git a/indra/newview/llvocache.h b/indra/newview/llvocache.h
index 56b48ef705..4d3c3d98c9 100644
--- a/indra/newview/llvocache.h
+++ b/indra/newview/llvocache.h
@@ -128,6 +128,7 @@ private:
 	BOOL checkWrite(LLAPRFile* apr_file, void* src, S32 n_bytes) ;
 	
 private:
+	BOOL                 mEnabled;
 	BOOL                 mInitialized ;
 	BOOL                 mReadOnly ;
 	HeaderMetaInfo       mMetaInfo;
@@ -142,7 +143,7 @@ private:
 	static LLVOCache* sInstance ;
 public:
 	static LLVOCache* getInstance() ;
-	static BOOL       hasInstance() ;
+	static BOOL       hasInstance() ;	
 	static void       destroyClass() ;
 };
 
diff --git a/indra/newview/llworld.cpp b/indra/newview/llworld.cpp
index 5760d04a08..c727c4f773 100644
--- a/indra/newview/llworld.cpp
+++ b/indra/newview/llworld.cpp
@@ -121,7 +121,10 @@ void LLWorld::destroyClass()
 		LLViewerRegion* region_to_delete = *region_it++;
 		removeRegion(region_to_delete->getHost());
 	}
-	LLVOCache::getInstance()->destroyClass() ;
+	if(LLVOCache::hasInstance())
+	{
+		LLVOCache::getInstance()->destroyClass() ;
+	}
 	LLViewerPartSim::getInstance()->destroyClass();
 }
 
-- 
cgit v1.2.3


From bf8639dd1830e313f78e65efb0b0bce6a8b82a62 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Mon, 13 Sep 2010 19:53:08 +0100
Subject: Annoying focus hacks to unblock development.

---
 indra/newview/lltoastnotifypanel.cpp                      | 1 +
 indra/newview/skins/default/xui/en/panel_notification.xml | 6 +++++-
 2 files changed, 6 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/lltoastnotifypanel.cpp b/indra/newview/lltoastnotifypanel.cpp
index 6413874863..8cae7d0963 100644
--- a/indra/newview/lltoastnotifypanel.cpp
+++ b/indra/newview/lltoastnotifypanel.cpp
@@ -178,6 +178,7 @@ mCloseNotificationOnDestroy(true)
 				// (re)enable the textbox for this panel, and continue.
 				mUserInputBox->setVisible(TRUE);
 				mUserInputBox->setEnabled(TRUE);
+				mUserInputBox->setFocus(TRUE);
 				mUserInputBox->insertText("FOOOOOO!!!!");
 				continue;
 			}
diff --git a/indra/newview/skins/default/xui/en/panel_notification.xml b/indra/newview/skins/default/xui/en/panel_notification.xml
index a816eaccb6..ef9e5323f9 100644
--- a/indra/newview/skins/default/xui/en/panel_notification.xml
+++ b/indra/newview/skins/default/xui/en/panel_notification.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <panel
+   tab_stop="false"
   background_opaque="false"
       border_visible="false"
   background_visible="true"
@@ -15,6 +16,7 @@
   width="305">
   <!-- THIS PANEL CONTROLS TOAST HEIGHT? -->
   <panel
+   tab_stop="false"
       border_visible="false"
  bevel_style="none"
     background_visible="true"
@@ -70,7 +72,8 @@
       name="user_input_box"
       read_only="false"
       tab_stop="false"
-      text_color="red"
+      text_color="green"
+      text_readonly_color="red"
       top="50"
       visible="false"
       width="285"
@@ -103,6 +106,7 @@
       parse_urls="true"/>
   </panel>
   <panel
+   tab_stop="false"
     background_visible="false"
     follows="left|right|bottom"
     height="30" 
-- 
cgit v1.2.3


From e171f63f3868ca03a31e64eead32028711b3211d Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Mon, 13 Sep 2010 20:04:05 +0100
Subject: trivial whitespace change...

---
 indra/newview/lltoastnotifypanel.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/lltoastnotifypanel.cpp b/indra/newview/lltoastnotifypanel.cpp
index 8cae7d0963..56f71dc43e 100644
--- a/indra/newview/lltoastnotifypanel.cpp
+++ b/indra/newview/lltoastnotifypanel.cpp
@@ -200,7 +200,7 @@ mCloseNotificationOnDestroy(true)
 			if(h_pad < 2*HPAD)
 			{
 				/*
-				 * Probably it is  a scriptdialog toast
+				 * Probably it is a scriptdialog toast
 				 * for a scriptdialog toast h_pad can be < 2*HPAD if we have a lot of buttons.
 				 * In last case set default h_pad to avoid heaping of buttons 
 				 */
-- 
cgit v1.2.3


From 89e1f3be753c7c5153261ebb94095f2dee95a991 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Mon, 13 Sep 2010 20:12:50 +0100
Subject: quick stab at a submit button.

---
 indra/newview/skins/default/xui/en/panel_notification.xml | 8 ++++++++
 1 file changed, 8 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_notification.xml b/indra/newview/skins/default/xui/en/panel_notification.xml
index ef9e5323f9..21c45aa5e3 100644
--- a/indra/newview/skins/default/xui/en/panel_notification.xml
+++ b/indra/newview/skins/default/xui/en/panel_notification.xml
@@ -104,6 +104,14 @@
       wrap="true"
       parse_highlights="true"
       parse_urls="true"/>
+      <button
+	 follows="left|top"
+	 height="25"
+	 layout="topleft"
+	 left_pad="10"
+	 label="Submit"
+	 name="submit"
+	 width="35" />
   </panel>
   <panel
    tab_stop="false"
-- 
cgit v1.2.3


From 2044179baf05742c09d1e06b93679f3545b62551 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Mon, 13 Sep 2010 20:25:06 +0100
Subject: trivial typo fix.

---
 indra/newview/lltoastgroupnotifypanel.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/lltoastgroupnotifypanel.cpp b/indra/newview/lltoastgroupnotifypanel.cpp
index 4c75b07ae8..bf79492b1e 100644
--- a/indra/newview/lltoastgroupnotifypanel.cpp
+++ b/indra/newview/lltoastgroupnotifypanel.cpp
@@ -59,7 +59,7 @@ LLToastGroupNotifyPanel::LLToastGroupNotifyPanel(LLNotificationPtr& notification
 	LLGroupData groupData;
 	if (!gAgent.getGroupData(payload["group_id"].asUUID(),groupData))
 	{
-		llwarns << "Group notice for unkown group: " << payload["group_id"].asUUID() << llendl;
+		llwarns << "Group notice for unknown group: " << payload["group_id"].asUUID() << llendl;
 	}
 
 	//group icon
-- 
cgit v1.2.3


From 35962b54e0afa14cd89eb028efb13787802c18a0 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Mon, 13 Sep 2010 20:39:15 +0100
Subject: Start to break the lltextbox toast into its own toast class instead
 of mega-overloading the generic notification panel.

---
 indra/newview/lltoastscripttextbox.cpp             | 214 +++++++++++++++++++++
 indra/newview/lltoastscripttextbox.h               |  79 ++++++++
 .../skins/default/xui/en/panel_notify_textbox.xml  | 101 ++++++++++
 3 files changed, 394 insertions(+)
 create mode 100644 indra/newview/lltoastscripttextbox.cpp
 create mode 100644 indra/newview/lltoastscripttextbox.h
 create mode 100644 indra/newview/skins/default/xui/en/panel_notify_textbox.xml

(limited to 'indra/newview')

diff --git a/indra/newview/lltoastscripttextbox.cpp b/indra/newview/lltoastscripttextbox.cpp
new file mode 100644
index 0000000000..bb06976d40
--- /dev/null
+++ b/indra/newview/lltoastscripttextbox.cpp
@@ -0,0 +1,214 @@
+/**
+ * @file lltoastscripttextbox.cpp
+ * @brief Panel for script llTextBox dialogs
+ *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "lltoastscripttextbox.h"
+
+#include "llfocusmgr.h"
+
+#include "llbutton.h"
+#include "lliconctrl.h"
+#include "llinventoryfunctions.h"
+#include "llnotifications.h"
+#include "llviewertexteditor.h"
+
+#include "lluiconstants.h"
+#include "llui.h"
+#include "llviewercontrol.h"
+#include "lltrans.h"
+#include "llstyle.h"
+
+#include "llglheaders.h"
+#include "llagent.h"
+#include "llavatariconctrl.h"
+#include "llfloaterinventory.h"
+#include "llinventorytype.h"
+
+const S32 LLToastGroupNotifyPanel::DEFAULT_MESSAGE_MAX_LINE_COUNT	= 7;
+
+LLToastGroupNotifyPanel::LLToastGroupNotifyPanel(LLNotificationPtr& notification)
+:	LLToastPanel(notification),
+	mInventoryOffer(NULL)
+{
+	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_notify_textbox.xml");
+	const LLSD& payload = notification->getPayload();
+	LLGroupData groupData;
+	if (!gAgent.getGroupData(payload["group_id"].asUUID(),groupData))
+	{
+		llwarns << "Group notice for unknown group: " << payload["group_id"].asUUID() << llendl;
+	}
+
+	//group icon
+	LLIconCtrl* pGroupIcon = getChild<LLIconCtrl>("group_icon", TRUE);
+	pGroupIcon->setValue(groupData.mInsigniaID);
+
+	//header title
+	const std::string& from_name = payload["sender_name"].asString();
+	std::stringstream from;
+	from << from_name << "/" << groupData.mName;
+	LLTextBox* pTitleText = getChild<LLTextBox>("title");
+	pTitleText->setValue(from.str());
+
+	//message subject
+	const std::string& subject = payload["subject"].asString();
+	//message body
+	const std::string& message = payload["message"].asString();
+
+	std::string timeStr = "["+LLTrans::getString("UTCTimeWeek")+"],["
+							+LLTrans::getString("UTCTimeDay")+"] ["
+							+LLTrans::getString("UTCTimeMth")+"] ["
+							+LLTrans::getString("UTCTimeYr")+"] ["
+							+LLTrans::getString("UTCTimeHr")+"]:["
+							+LLTrans::getString("UTCTimeMin")+"]:["
+							+LLTrans::getString("UTCTimeSec")+"] ["
+							+LLTrans::getString("UTCTimeTimezone")+"]";
+	const LLDate timeStamp = notification->getDate();
+	LLDate notice_date = timeStamp.notNull() ? timeStamp : LLDate::now();
+	LLSD substitution;
+	substitution["datetime"] = (S32) notice_date.secondsSinceEpoch();
+	LLStringUtil::format(timeStr, substitution);
+
+	LLViewerTextEditor* pMessageText = getChild<LLViewerTextEditor>("message");
+	pMessageText->clear();
+
+	LLStyle::Params style;
+	LLFontGL* subject_font = LLFontGL::getFontByName(getString("subject_font"));
+	if (subject_font) 
+		style.font = subject_font;
+	pMessageText->appendText(subject, FALSE, style);
+
+	LLFontGL* date_font = LLFontGL::getFontByName(getString("date_font"));
+	if (date_font)
+		style.font = date_font;
+	pMessageText->appendText(timeStr + "\n", TRUE, style);
+	
+	style.font = pMessageText->getDefaultFont();
+	pMessageText->appendText(message, TRUE, style);
+
+	//attachment
+	BOOL hasInventory = payload["inventory_offer"].isDefined();
+
+	//attachment text
+	LLTextBox * pAttachLink = getChild<LLTextBox>("attachment");
+	//attachment icon
+	LLIconCtrl* pAttachIcon = getChild<LLIconCtrl>("attachment_icon", TRUE);
+
+	//If attachment is empty let it be invisible and not take place at the panel
+	pAttachLink->setVisible(hasInventory);
+	pAttachIcon->setVisible(hasInventory);
+	if (hasInventory) {
+		pAttachLink->setValue(payload["inventory_name"]);
+
+		mInventoryOffer = new LLOfferInfo(payload["inventory_offer"]);
+		getChild<LLTextBox>("attachment")->setClickedCallback(boost::bind(
+				&LLToastGroupNotifyPanel::onClickAttachment, this));
+
+		LLUIImagePtr attachIconImg = LLInventoryIcon::getIcon(mInventoryOffer->mType,
+												LLInventoryType::IT_TEXTURE);
+		pAttachIcon->setValue(attachIconImg->getName());
+	}
+
+	//ok button
+	LLButton* pOkBtn = getChild<LLButton>("btn_ok");
+	pOkBtn->setClickedCallback((boost::bind(&LLToastGroupNotifyPanel::onClickOk, this)));
+	setDefaultBtn(pOkBtn);
+
+	S32 maxLinesCount;
+	std::istringstream ss( getString("message_max_lines_count") );
+	if (!(ss >> maxLinesCount))
+	{
+		maxLinesCount = DEFAULT_MESSAGE_MAX_LINE_COUNT;
+	}
+	snapToMessageHeight(pMessageText, maxLinesCount);
+}
+
+// virtual
+LLToastGroupNotifyPanel::~LLToastGroupNotifyPanel()
+{
+}
+
+void LLToastGroupNotifyPanel::close()
+{
+	// The group notice dialog may be an inventory offer.
+	// If it has an inventory save button and that button is still enabled
+	// Then we need to send the inventory declined message
+	if(mInventoryOffer != NULL)
+	{
+		mInventoryOffer->forceResponse(IOR_DECLINE);
+		mInventoryOffer = NULL;
+	}
+
+	die();
+}
+
+void LLToastGroupNotifyPanel::onClickOk()
+{
+	LLSD response = mNotification->getResponseTemplate();
+	mNotification->respond(response);
+	close();
+}
+
+void LLToastGroupNotifyPanel::onClickAttachment()
+{
+	if (mInventoryOffer != NULL) {
+		mInventoryOffer->forceResponse(IOR_ACCEPT);
+
+		LLTextBox * pAttachLink = getChild<LLTextBox> ("attachment");
+		static const LLUIColor textColor = LLUIColorTable::instance().getColor(
+				"GroupNotifyDimmedTextColor");
+		pAttachLink->setColor(textColor);
+
+		LLIconCtrl* pAttachIcon =
+				getChild<LLIconCtrl> ("attachment_icon", TRUE);
+		pAttachIcon->setEnabled(FALSE);
+
+		//if attachment isn't openable - notify about saving
+		if (!isAttachmentOpenable(mInventoryOffer->mType)) {
+			LLNotifications::instance().add("AttachmentSaved", LLSD(), LLSD());
+		}
+
+		mInventoryOffer = NULL;
+	}
+}
+
+//static
+bool LLToastGroupNotifyPanel::isAttachmentOpenable(LLAssetType::EType type)
+{
+	switch(type)
+	{
+	case LLAssetType::AT_LANDMARK:
+	case LLAssetType::AT_NOTECARD:
+	case LLAssetType::AT_IMAGE_JPEG:
+	case LLAssetType::AT_IMAGE_TGA:
+	case LLAssetType::AT_TEXTURE:
+	case LLAssetType::AT_TEXTURE_TGA:
+		return true;
+	default:
+		return false;
+	}
+}
+
diff --git a/indra/newview/lltoastscripttextbox.h b/indra/newview/lltoastscripttextbox.h
new file mode 100644
index 0000000000..4890ee1dea
--- /dev/null
+++ b/indra/newview/lltoastscripttextbox.h
@@ -0,0 +1,79 @@
+/**
+ * @file lltoastscripttextbox.h
+ * @brief Panel for script llTextBox dialogs
+ *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLTOASTSCRIPTTEXTBOX_H
+#define LL_LLTOASTSCRIPTTEXTBOX_H
+
+#include "llfontgl.h"
+#include "lltoastpanel.h"
+#include "lldarray.h"
+#include "lltimer.h"
+#include "llviewermessage.h"
+#include "llnotificationptr.h"
+
+class LLButton;
+
+/**
+ * Toast panel for group notification.
+ *
+ * Replaces class LLGroupNotifyBox.
+ */
+class LLToastGroupNotifyPanel
+:	public LLToastPanel
+{
+public:
+	void close();
+
+	static bool onNewNotification(const LLSD& notification);
+
+
+	// Non-transient messages.  You can specify non-default button
+	// layouts (like one for script dialogs) by passing various
+	// numbers in for "layout".
+	LLToastGroupNotifyPanel(LLNotificationPtr& notification);
+
+	/*virtual*/ ~LLToastGroupNotifyPanel();
+protected:
+	void onClickOk();
+	void onClickAttachment();
+private:
+	static bool isAttachmentOpenable(LLAssetType::EType);
+
+	static const S32 DEFAULT_MESSAGE_MAX_LINE_COUNT;
+
+	LLButton* mSaveInventoryBtn;
+
+	LLUUID mGroupID;
+	LLOfferInfo* mInventoryOffer;
+};
+
+// This view contains the stack of notification windows.
+//extern LLView* gGroupNotifyBoxView;
+
+const S32 GROUP_LAYOUT_DEFAULT = 0;
+const S32 GROUP_LAYOUT_SCRIPT_DIALOG = 1;
+
+#endif
diff --git a/indra/newview/skins/default/xui/en/panel_notify_textbox.xml b/indra/newview/skins/default/xui/en/panel_notify_textbox.xml
new file mode 100644
index 0000000000..6f271a757c
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_notify_textbox.xml
@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ background_visible="true"
+ height="90"
+ label="instant_message"
+ layout="topleft"
+ left="0"
+ name="panel_group_notify"
+ top="0"
+ width="305">
+    <string
+     name="message_max_lines_count"
+     value="7" />
+    <string
+     name="subject_font"
+     value="SANSSERIF_BIG" />
+    <string
+     name="date_font"
+     value="SANSSERIF" />
+    <panel
+     background_visible="true"
+     follows="top"
+     height="30"
+     label="header"
+     layout="topleft"
+     left="0"
+     name="header"
+     top="0"
+     width="305">
+        <icon
+         follows="all"
+         height="20"
+         layout="topleft"
+         left="5"
+         mouse_opaque="true"
+         name="group_icon"
+         top="5"
+         width="20" />
+        <text
+         follows="all"
+         font="SansSerifBig"
+         height="20"
+         layout="topleft"
+         left_pad="10"
+         name="title"
+         text_color="GroupNotifyTextColor"
+         top="5"
+         use_ellipses="true"
+         value="Sender Name / Group Name"
+         width="230" />
+    </panel>
+    <text_editor
+     parse_urls="true"
+     enabled="true"
+     follows="all"
+     height="0"
+     layout="topleft"
+     left="25"
+     max_length="2147483647"
+     name="message"
+     parse_highlights="true"
+     read_only="true"
+     text_color="GroupNotifyTextColor"
+     top="40"
+     type="string"
+     use_ellipses="true"
+     value="message"
+     width="270"
+	 word_wrap="true" >
+    </text_editor>
+    <icon
+     bottom="60"
+     follows="left|bottom|right"
+     height="15"
+     layout="topleft"
+     left="25"
+     mouse_opaque="true"
+     name="attachment_icon"
+     width="15" />
+    <text
+     bottom="60"
+     follows="left|bottom|right"
+     font="SansSerif"
+     height="15"
+     layout="topleft"
+     left="45"
+     name="attachment"
+     text_color="GroupNotifyTextColor"
+     value="Attachment"
+     use_ellipses="true"
+     width="250" />
+    <button
+     bottom="85"
+     follows="bottom"
+     height="20"
+     label="OK"
+     layout="topleft"
+     right="-10"
+     name="btn_ok"
+     width="70" />
+</panel>
-- 
cgit v1.2.3


From c2a87df2bccbf6e662f3a4c4edb210748ffa692d Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Mon, 13 Sep 2010 20:53:58 +0100
Subject: add new modules.

---
 indra/newview/CMakeLists.txt | 2 ++
 1 file changed, 2 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index d685e6ae36..78c9769d06 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -440,6 +440,7 @@ set(viewer_SOURCE_FILES
     lltoastimpanel.cpp
     lltoastnotifypanel.cpp
     lltoastpanel.cpp
+    lltoastscripttextbox.cpp
     lltool.cpp
     lltoolbrush.cpp
     lltoolcomp.cpp
@@ -966,6 +967,7 @@ set(viewer_HEADER_FILES
     lltoastimpanel.h
     lltoastnotifypanel.h
     lltoastpanel.h
+    lltoastscripttextbox.h
     lltool.h
     lltoolbrush.h
     lltoolcomp.h
-- 
cgit v1.2.3


From a923da7fc78b44cd5368d26652b0204322f064a4 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Mon, 13 Sep 2010 14:59:31 -0700
Subject: DEV-52931 Toggling "View Display Names" doesn't take effect right
 away in the Friends list

---
 indra/newview/llavatarlist.cpp     | 30 +++++++++++++++++++++++++++++-
 indra/newview/llavatarlist.h       |  6 +++++-
 indra/newview/llavatarlistitem.cpp |  6 ++++++
 indra/newview/llavatarlistitem.h   |  1 +
 indra/newview/llcallfloater.cpp    | 15 ++++++++++-----
 indra/newview/llcallfloater.h      |  1 +
 6 files changed, 52 insertions(+), 7 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llavatarlist.cpp b/indra/newview/llavatarlist.cpp
index 24596e5723..9b1e7c3f45 100644
--- a/indra/newview/llavatarlist.cpp
+++ b/indra/newview/llavatarlist.cpp
@@ -117,6 +117,7 @@ LLAvatarList::LLAvatarList(const Params& p)
 , mShowLastInteractionTime(p.show_last_interaction_time)
 , mContextMenu(NULL)
 , mDirty(true) // to force initial update
+, mNeedUpdateNames(false)
 , mLITUpdateTimer(NULL)
 , mShowIcons(true)
 , mShowInfoBtn(p.show_info_btn)
@@ -134,8 +135,17 @@ LLAvatarList::LLAvatarList(const Params& p)
 		mLITUpdateTimer->setTimerExpirySec(0); // zero to force initial update
 		mLITUpdateTimer->start();
 	}
+	
+	LLAvatarNameCache::addUseDisplayNamesCallback(boost::bind(&LLAvatarList::handleDisplayNamesOptionChanged, this));
+}
+
+
+void LLAvatarList::handleDisplayNamesOptionChanged()
+{
+	mNeedUpdateNames = true;
 }
 
+
 LLAvatarList::~LLAvatarList()
 {
 	delete mLITUpdateTimer;
@@ -155,6 +165,11 @@ void LLAvatarList::draw()
 
 	LLFlatListViewEx::draw();
 
+	if (mNeedUpdateNames)
+	{
+		updateAvatarNames();
+	}
+
 	if (mDirty)
 		refresh();
 
@@ -218,7 +233,6 @@ void LLAvatarList::addAvalineItem(const LLUUID& item_id, const LLUUID& session_i
 //////////////////////////////////////////////////////////////////////////
 // PROTECTED SECTION
 //////////////////////////////////////////////////////////////////////////
-
 void LLAvatarList::refresh()
 {
 	bool have_names			= TRUE;
@@ -329,6 +343,20 @@ void LLAvatarList::refresh()
 		onCommit();
 }
 
+void LLAvatarList::updateAvatarNames()
+{
+	std::vector<LLPanel*> items;
+	getItems(items);
+
+	for( std::vector<LLPanel*>::const_iterator it = items.begin(); it != items.end(); it++)
+	{
+		LLAvatarListItem* item = static_cast<LLAvatarListItem*>(*it);
+		item->updateAvatarName();
+	}
+	mNeedUpdateNames = false;
+}
+
+
 bool LLAvatarList::filterHasMatches()
 {
 	uuid_vec_t values = getIDs();
diff --git a/indra/newview/llavatarlist.h b/indra/newview/llavatarlist.h
index 48bc76828e..0d34dce6d8 100644
--- a/indra/newview/llavatarlist.h
+++ b/indra/newview/llavatarlist.h
@@ -93,6 +93,7 @@ public:
 	virtual S32 notifyParent(const LLSD& info);
 
 	void addAvalineItem(const LLUUID& item_id, const LLUUID& session_id, const std::string& item_name);
+	void handleDisplayNamesOptionChanged();
 
 protected:
 	void refresh();
@@ -102,14 +103,17 @@ protected:
 		const uuid_vec_t& vnew,
 		uuid_vec_t& vadded,
 		uuid_vec_t& vremoved);
-	void updateLastInteractionTimes();
+	void updateLastInteractionTimes();	
+	void rebuildNames();
 	void onItemDoubleClicked(LLUICtrl* ctrl, S32 x, S32 y, MASK mask);
+	void updateAvatarNames();
 
 private:
 
 	bool mIgnoreOnlineStatus;
 	bool mShowLastInteractionTime;
 	bool mDirty;
+	bool mNeedUpdateNames;
 	bool mShowIcons;
 	bool mShowInfoBtn;
 	bool mShowProfileBtn;
diff --git a/indra/newview/llavatarlistitem.cpp b/indra/newview/llavatarlistitem.cpp
index 51444569c1..d08943f825 100644
--- a/indra/newview/llavatarlistitem.cpp
+++ b/indra/newview/llavatarlistitem.cpp
@@ -334,6 +334,12 @@ std::string LLAvatarListItem::getAvatarToolTip() const
 	return mAvatarName->getToolTip();
 }
 
+void LLAvatarListItem::updateAvatarName()
+{
+	LLAvatarNameCache::get(getAvatarId(),
+			boost::bind(&LLAvatarListItem::onAvatarNameCache, this, _2));
+}
+
 //== PRIVATE SECITON ==========================================================
 
 void LLAvatarListItem::setNameInternal(const std::string& name, const std::string& highlight)
diff --git a/indra/newview/llavatarlistitem.h b/indra/newview/llavatarlistitem.h
index 7bba6fdbd0..812b7dbe7d 100644
--- a/indra/newview/llavatarlistitem.h
+++ b/indra/newview/llavatarlistitem.h
@@ -86,6 +86,7 @@ public:
 	virtual void changed(U32 mask); // from LLFriendObserver
 
 	void setOnline(bool online);
+	void updateAvatarName(); // re-query the name cache
 	void setAvatarName(const std::string& name);
 	void setAvatarToolTip(const std::string& tooltip);
 	void setHighlight(const std::string& highlight);
diff --git a/indra/newview/llcallfloater.cpp b/indra/newview/llcallfloater.cpp
index c0babc6851..bf976f6b66 100644
--- a/indra/newview/llcallfloater.cpp
+++ b/indra/newview/llcallfloater.cpp
@@ -114,6 +114,9 @@ LLCallFloater::LLCallFloater(const LLSD& key)
 
 	// force docked state since this floater doesn't save it between recreations
 	setDocked(true);
+
+	// update the agent's name if display name setting change
+	LLAvatarNameCache::addUseDisplayNamesCallback(boost::bind(&LLCallFloater::updateAgentModeratorState, this));
 }
 
 LLCallFloater::~LLCallFloater()
@@ -460,15 +463,12 @@ void LLCallFloater::setModeratorMutedVoice(bool moderator_muted)
 	mSpeakingIndicator->setIsMuted(moderator_muted);
 }
 
-void LLCallFloater::updateAgentModeratorState()
+void LLCallFloater::onModeratorNameCache(const LLAvatarName& av_name)
 {
 	std::string name;
-	// Just use display name, because it's you
-	LLAvatarName av_name;
-	LLAvatarNameCache::get(gAgentID, &av_name);
 	name = av_name.mDisplayName;
 
-	if(gAgent.isInGroup(mSpeakerManager->getSessionID()))
+	if(mSpeakerManager && gAgent.isInGroup(mSpeakerManager->getSessionID()))
 	{
 		// This method can be called when LLVoiceChannel.mState == STATE_NO_CHANNEL_INFO
 		// in this case there are not any speakers yet.
@@ -486,6 +486,11 @@ void LLCallFloater::updateAgentModeratorState()
 	mAgentPanel->getChild<LLUICtrl>("user_text")->setValue(name);
 }
 
+void LLCallFloater::updateAgentModeratorState()
+{
+	LLAvatarNameCache::get(gAgentID, boost::bind(&LLCallFloater::onModeratorNameCache, this, _2));
+}
+
 static void get_voice_participants_uuids(uuid_vec_t& speakers_uuids)
 {
 	// Get a list of participants from VoiceClient
diff --git a/indra/newview/llcallfloater.h b/indra/newview/llcallfloater.h
index cb4d175eb9..3bc7043353 100644
--- a/indra/newview/llcallfloater.h
+++ b/indra/newview/llcallfloater.h
@@ -126,6 +126,7 @@ private:
 	void initAgentData();
 	void setModeratorMutedVoice(bool moderator_muted);
 	void updateAgentModeratorState();
+	void onModeratorNameCache(const LLAvatarName& av_name);
 
 	/**
 	 * Sets initial participants voice states in avatar list (Invited, Joined, Has Left).
-- 
cgit v1.2.3


From e27ac0abf7bef6e61c2d81911cc0c693206ee401 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Mon, 13 Sep 2010 16:20:52 -0700
Subject: As a resident I should also see the local chat message about me
 changing my display name so that my own chatlogs include my own changes.

---
 indra/newview/llviewerdisplayname.cpp | 15 +++++----------
 1 file changed, 5 insertions(+), 10 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewerdisplayname.cpp b/indra/newview/llviewerdisplayname.cpp
index 09667928ab..f71a7c2d20 100644
--- a/indra/newview/llviewerdisplayname.cpp
+++ b/indra/newview/llviewerdisplayname.cpp
@@ -178,16 +178,11 @@ class LLDisplayNameUpdate : public LLHTTPNode
 		// force name tag to update
 		LLVOAvatar::invalidateNameTag(agent_id);
 
-		// Don't show a notification for my name, because we'll show a nicer
-		// dialog
-		if (agent_id != gAgent.getID())
-		{
-			LLSD args;
-			args["OLD_NAME"] = old_display_name;
-			args["SLID"] = av_name.mUsername;
-			args["NEW_NAME"] = av_name.mDisplayName;
-			LLNotificationsUtil::add("DisplayNameUpdate", args);
-		}
+		LLSD args;
+		args["OLD_NAME"] = old_display_name;
+		args["SLID"] = av_name.mUsername;
+		args["NEW_NAME"] = av_name.mDisplayName;
+		LLNotificationsUtil::add("DisplayNameUpdate", args);
 	}
 };
 
-- 
cgit v1.2.3


From ec57776a23f36a9df02ee614c4f0ef20fcea0c7c Mon Sep 17 00:00:00 2001
From: Roxie Linden <roxie@lindenlab.com>
Date: Wed, 15 Sep 2010 15:40:29 -0700
Subject: Add role action to allow hosting of events on group land

---
 indra/newview/skins/default/xui/en/role_actions.xml | 3 +++
 1 file changed, 3 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/role_actions.xml b/indra/newview/skins/default/xui/en/role_actions.xml
index a6036f8b78..89aef57cca 100644
--- a/indra/newview/skins/default/xui/en/role_actions.xml
+++ b/indra/newview/skins/default/xui/en/role_actions.xml
@@ -108,6 +108,9 @@
 		<action description="Allow &apos;Set Home to Here&apos; on group land"
 		     longdescription="Members in a Role with this Ability can use World menu &gt; Landmarks &gt; Set Home to Here on a parcel deeded to this group."
 		     name="land allow set home" value="28" />
+		<action description="Allow &apos;Event Hosting&apos; on group land"
+		     longdescription="Members in a Role with this Ability can select group owned parcels as venus when hosting an event."
+		     name="land allow host event" value="41" />			 
 	</action_set>
 	<action_set
 	     description="These Abilities include powers to allow or restrict access to group-owned parcels, including freezing and ejecting Residents."
-- 
cgit v1.2.3


From ae623c8068145f968f09ccf9bbdd90e993ca4283 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Thu, 16 Sep 2010 09:38:05 -0700
Subject: Set display name field now clamps to 31 unicode characters Added
 ability to set max length in line editors by characters in addition to bytes
 left other widgets (comboboxes/spinners) using the bytes, but it can easily
 be changed over reviewed by Richard

---
 indra/newview/llfolderview.cpp                       | 2 +-
 indra/newview/lllocationinputctrl.cpp                | 2 +-
 indra/newview/lltoastalertpanel.cpp                  | 3 +++
 indra/newview/skins/default/xui/en/notifications.xml | 2 +-
 4 files changed, 6 insertions(+), 3 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp
index 5d8e3f9ab9..21c6c98876 100644
--- a/indra/newview/llfolderview.cpp
+++ b/indra/newview/llfolderview.cpp
@@ -224,7 +224,7 @@ LLFolderView::LLFolderView(const Params& p)
 	params.name("ren");
 	params.rect(rect);
 	params.font(getLabelFontForStyle(LLFontGL::NORMAL));
-	params.max_length_bytes(DB_INV_ITEM_NAME_STR_LEN);
+	params.max_length.bytes(DB_INV_ITEM_NAME_STR_LEN);
 	params.commit_callback.function(boost::bind(&LLFolderView::commitRename, this, _2));
 	params.prevalidate_callback(&LLTextValidate::validateASCIIPrintableNoPipe);
 	params.commit_on_focus_lost(true);
diff --git a/indra/newview/lllocationinputctrl.cpp b/indra/newview/lllocationinputctrl.cpp
index d714cae872..1527f8f4c9 100644
--- a/indra/newview/lllocationinputctrl.cpp
+++ b/indra/newview/lllocationinputctrl.cpp
@@ -224,7 +224,7 @@ LLLocationInputCtrl::LLLocationInputCtrl(const LLLocationInputCtrl::Params& p)
 	LLLineEditor::Params params = p.combo_editor;
 	params.rect(text_entry_rect);
 	params.default_text(LLStringUtil::null);
-	params.max_length_bytes(p.max_chars);
+	params.max_length.bytes(p.max_chars);
 	params.keystroke_callback(boost::bind(&LLLocationInputCtrl::onTextEntry, this, _1));
 	params.commit_on_focus_lost(false);
 	params.follows.flags(FOLLOWS_ALL);
diff --git a/indra/newview/lltoastalertpanel.cpp b/indra/newview/lltoastalertpanel.cpp
index 2d0c360905..8b2f066d41 100644
--- a/indra/newview/lltoastalertpanel.cpp
+++ b/indra/newview/lltoastalertpanel.cpp
@@ -76,6 +76,7 @@ LLToastAlertPanel::LLToastAlertPanel( LLNotificationPtr notification, bool modal
 	LLNotificationFormPtr form = mNotification->getForm();
 	std::string edit_text_name;
 	std::string edit_text_contents;
+	S32 edit_text_max_chars = 0;
 	bool is_password = false;
 
 	LLToastPanel::setBackgroundVisible(FALSE);
@@ -115,6 +116,7 @@ LLToastAlertPanel::LLToastAlertPanel( LLNotificationPtr notification, bool modal
 		{
 			edit_text_contents = (*it)["value"].asString();
 			edit_text_name = (*it)["name"].asString();
+			edit_text_max_chars = (*it)["max_length_chars"].asInteger();
 		}
 		else if (type == "password")
 		{
@@ -253,6 +255,7 @@ LLToastAlertPanel::LLToastAlertPanel( LLNotificationPtr notification, bool modal
 			mLineEditor->setName(edit_text_name);
 			mLineEditor->reshape(leditor_rect.getWidth(), leditor_rect.getHeight());
 			mLineEditor->setRect(leditor_rect);
+			mLineEditor->setMaxTextChars(edit_text_max_chars);
 			mLineEditor->setText(edit_text_contents);
 
 			// decrease limit of line editor of teleport offer dialog to avoid truncation of
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 281f367345..5bd28e5b91 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -3197,7 +3197,7 @@ Press reset to make it the same as your username.
 
 Change your display name?
     <form name="form">
-      <input name="display_name" type="text">
+      <input name="display_name" max_length_chars="31" type="text">
 [DISPLAY_NAME]
       </input>
       <button
-- 
cgit v1.2.3


From fcdd09772f857b7a8ba4cd12d42b23e9dbb6dbf7 Mon Sep 17 00:00:00 2001
From: Xiaohong Bao <bao@lindenlab.com>
Date: Thu, 16 Sep 2010 13:13:06 -0600
Subject: debug code for SH-115: investigate texture related network traffic
 between viewer 2.x and 1.23.

---
 indra/newview/app_settings/settings.xml | 11 +++++++++++
 indra/newview/lltexturefetch.cpp        | 11 +++++++++++
 indra/newview/llviewerstats.cpp         |  2 +-
 indra/newview/llviewerstats.h           |  1 +
 indra/newview/llviewertexturelist.cpp   | 26 ++++++++++++++++++++++----
 indra/newview/llviewerwindow.cpp        | 19 +++++++++++++++++++
 6 files changed, 65 insertions(+), 5 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index c83a87f968..e76874e3cb 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -4548,6 +4548,17 @@
       <key>Value</key>
       <integer>0</integer>
     </map>
+    <key>LogTextureNetworkTraffic</key>
+    <map>
+      <key>Comment</key>
+      <string>Log network traffic for textures</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>LoginAsGod</key>
     <map>
       <key>Comment</key>
diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp
index 4e9ebce4d1..7d09ea5b4f 100644
--- a/indra/newview/lltexturefetch.cpp
+++ b/indra/newview/lltexturefetch.cpp
@@ -299,6 +299,7 @@ public:
 	{
 		static LLCachedControl<bool> log_to_viewer_log(gSavedSettings,"LogTextureDownloadsToViewerLog");
 		static LLCachedControl<bool> log_to_sim(gSavedSettings,"LogTextureDownloadsToSimulator");
+		static LLCachedControl<bool> log_texture_traffic(gSavedSettings,"LogTextureNetworkTraffic") ;
 
 		if (log_to_viewer_log || log_to_sim)
 		{
@@ -332,6 +333,16 @@ public:
 			}
 			
 			S32 data_size = worker->callbackHttpGet(channels, buffer, partial, success);
+			
+			if(log_texture_traffic && data_size > 0)
+			{
+				LLViewerTexture* tex = LLViewerTextureManager::findTexture(mID) ;
+				if(tex)
+				{
+					gTotalTextureBytesPerBoostLevel[tex->getBoostLevel()] += data_size ;
+				}
+			}
+
 			mFetcher->removeFromHTTPQueue(mID, data_size);
 		}
 		else
diff --git a/indra/newview/llviewerstats.cpp b/indra/newview/llviewerstats.cpp
index e55808597c..5da672e759 100644
--- a/indra/newview/llviewerstats.cpp
+++ b/indra/newview/llviewerstats.cpp
@@ -558,7 +558,7 @@ F32		gWorstLandCompression = 0.f, gWorstWaterCompression = 0.f;
 U32		gTotalWorldBytes = 0, gTotalObjectBytes = 0, gTotalTextureBytes = 0, gSimPingCount = 0;
 U32		gObjectBits = 0;
 F32		gAvgSimPing = 0.f;
-
+U32     gTotalTextureBytesPerBoostLevel[LLViewerTexture::MAX_GL_IMAGE_CATEGORY] = {0};
 
 extern U32  gVisCompared;
 extern U32  gVisTested;
diff --git a/indra/newview/llviewerstats.h b/indra/newview/llviewerstats.h
index dd82ccddc3..3f9cfb9d9b 100644
--- a/indra/newview/llviewerstats.h
+++ b/indra/newview/llviewerstats.h
@@ -265,4 +265,5 @@ extern std::map<S32,LLFrameTimer> gDebugTimers;
 extern std::map<S32,std::string> gDebugTimerLabel;
 extern U32	gTotalTextureBytes;
 extern U32  gTotalObjectBytes;
+extern U32  gTotalTextureBytesPerBoostLevel[] ;
 #endif // LL_LLVIEWERSTATS_H
diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp
index 456516ab6b..36865b798c 100644
--- a/indra/newview/llviewertexturelist.cpp
+++ b/indra/newview/llviewertexturelist.cpp
@@ -1161,6 +1161,8 @@ void LLViewerTextureList::updateMaxResidentTexMem(S32 mem)
 // static
 void LLViewerTextureList::receiveImageHeader(LLMessageSystem *msg, void **user_data)
 {
+	static LLCachedControl<bool> log_texture_traffic(gSavedSettings,"LogTextureNetworkTraffic") ;
+
 	LLFastTimer t(FTM_PROCESS_IMAGES);
 	
 	// Receive image header, copy into image object and decompresses 
@@ -1171,14 +1173,16 @@ void LLViewerTextureList::receiveImageHeader(LLMessageSystem *msg, void **user_d
 	char ip_string[256];
 	u32_to_ip_string(msg->getSenderIP(),ip_string);
 	
+	U32 received_size ;
 	if (msg->getReceiveCompressedSize())
 	{
-		gTextureList.sTextureBits += msg->getReceiveCompressedSize() * 8;
+		received_size = msg->getReceiveCompressedSize() ;		
 	}
 	else
 	{
-		gTextureList.sTextureBits += msg->getReceiveSize() * 8;
+		received_size = msg->getReceiveSize() ;		
 	}
+	gTextureList.sTextureBits += received_size * 8;
 	gTextureList.sTexturePackets++;
 	
 	U8 codec;
@@ -1213,6 +1217,11 @@ void LLViewerTextureList::receiveImageHeader(LLMessageSystem *msg, void **user_d
 		delete [] data;
 		return;
 	}
+	if(log_texture_traffic)
+	{
+		gTotalTextureBytesPerBoostLevel[image->getBoostLevel()] += received_size ;
+	}
+
 	//image->getLastPacketTimer()->reset();
 	bool res = LLAppViewer::getTextureFetch()->receiveImageHeader(msg->getSender(), id, codec, packets, totalbytes, data_size, data);
 	if (!res)
@@ -1224,6 +1233,8 @@ void LLViewerTextureList::receiveImageHeader(LLMessageSystem *msg, void **user_d
 // static
 void LLViewerTextureList::receiveImagePacket(LLMessageSystem *msg, void **user_data)
 {
+	static LLCachedControl<bool> log_texture_traffic(gSavedSettings,"LogTextureNetworkTraffic") ;
+
 	LLMemType mt1(LLMemType::MTYPE_APPFMTIMAGE);
 	LLFastTimer t(FTM_PROCESS_IMAGES);
 	
@@ -1236,14 +1247,16 @@ void LLViewerTextureList::receiveImagePacket(LLMessageSystem *msg, void **user_d
 	char ip_string[256];
 	u32_to_ip_string(msg->getSenderIP(),ip_string);
 	
+	U32 received_size ;
 	if (msg->getReceiveCompressedSize())
 	{
-		gTextureList.sTextureBits += msg->getReceiveCompressedSize() * 8;
+		received_size = msg->getReceiveCompressedSize() ;
 	}
 	else
 	{
-		gTextureList.sTextureBits += msg->getReceiveSize() * 8;
+		received_size = msg->getReceiveSize() ;		
 	}
+	gTextureList.sTextureBits += received_size * 8;
 	gTextureList.sTexturePackets++;
 	
 	//llprintline("Start decode, image header...");
@@ -1277,6 +1290,11 @@ void LLViewerTextureList::receiveImagePacket(LLMessageSystem *msg, void **user_d
 		delete [] data;
 		return;
 	}
+	if(log_texture_traffic)
+	{
+		gTotalTextureBytesPerBoostLevel[image->getBoostLevel()] += received_size ;
+	}
+
 	//image->getLastPacketTimer()->reset();
 	bool res = LLAppViewer::getTextureFetch()->receiveImagePacket(msg->getSender(), id, packet_num, data_size, data);
 	if (!res)
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 43d18c6d83..12aa40341a 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -304,6 +304,8 @@ public:
 
 	void update()
 	{
+		static LLCachedControl<bool> log_texture_traffic(gSavedSettings,"LogTextureNetworkTraffic") ;
+
 		std::string wind_vel_text;
 		std::string wind_vector_text;
 		std::string rwind_vel_text;
@@ -580,6 +582,23 @@ public:
 				ypos += y_inc;
 			}
 		}
+		if(log_texture_traffic)
+		{	
+			U32 old_y = ypos ;
+			for(S32 i = LLViewerTexture::BOOST_NONE; i < LLViewerTexture::MAX_GL_IMAGE_CATEGORY; i++)
+			{
+				if(gTotalTextureBytesPerBoostLevel[i] > 0)
+				{
+					addText(xpos, ypos, llformat("Boost_Level %d:  %.3f MB", i, (F32)gTotalTextureBytesPerBoostLevel[i] / (1024 * 1024)));
+					ypos += y_inc;
+				}
+			}
+			if(ypos != old_y)
+			{
+				addText(xpos, ypos, "Network traffic for textures:");
+				ypos += y_inc;
+			}
+		}
 	}
 
 	void draw()
-- 
cgit v1.2.3


From 20cea3b0f97c8c24ede5e8ec86dd426e7b1c9e34 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Thu, 16 Sep 2010 14:15:32 -0700
Subject: As a resident, when I elect to see friends names in green, it should
 also colour their group tags so that the name tags don't look like crap. 
 This also applies to status message - Away/Busy in nametag

---
 indra/newview/llvoavatar.cpp           | 8 ++------
 indra/newview/skins/default/colors.xml | 9 ---------
 2 files changed, 2 insertions(+), 15 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 9dc49169df..a4efacdca9 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -2952,20 +2952,16 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
 			}
 			// trim last ", "
 			line.resize( line.length() - 2 );
-			LLColor4 status_color =
-				LLUIColorTable::getInstance()->getColor("NameTagStatus");
-			addNameTagLine(line, status_color, LLFontGL::NORMAL,
+			addNameTagLine(line, name_tag_color, LLFontGL::NORMAL,
 				LLFontGL::getFontSansSerifSmall());
 		}
 
 		if (sRenderGroupTitles
 			&& title && title->getString() && title->getString()[0] != '\0')
 						{
-			LLColor4 group_color =
-				LLUIColorTable::getInstance()->getColor("NameTagGroup");
 			std::string title_str = title->getString();
 			LLStringFn::replace_ascii_controlchars(title_str,LL_UNKNOWN_CHAR);
-			addNameTagLine(title_str, group_color, LLFontGL::NORMAL,
+			addNameTagLine(title_str, name_tag_color, LLFontGL::NORMAL,
 				LLFontGL::getFontSansSerifSmall());
 						}
 
diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml
index 3bca881310..ddd2ff196b 100644
--- a/indra/newview/skins/default/colors.xml
+++ b/indra/newview/skins/default/colors.xml
@@ -545,9 +545,6 @@
     <color
      name="NameTagFriend"
      value="0.447 0.784 0.663 1" />
-    <color
-     name="NameTagGroup"
-     value="1 1 1 1" />
     <color
      name="NameTagLegacy"
      reference="White" />
@@ -557,12 +554,6 @@
     <color
      name="NameTagMismatch"
      reference="White" />
-    <color
-     name="NameTagSLID"
-     value="1 1 1 1" />
-    <color
-     name="NameTagStatus"
-     value="1 1 1 1" />
     <color
      name="NetMapBackgroundColor"
      value="0 0 0 1" />
-- 
cgit v1.2.3


From 556d3a1a4919e983ff02cb2704a7ad60255eb13c Mon Sep 17 00:00:00 2001
From: Xiaohong Bao <bao@lindenlab.com>
Date: Fri, 17 Sep 2010 17:23:30 -0600
Subject: fix for SH-115: investigate texture related network traffic between
 viewer 2.x and 1.23.

---
 indra/newview/llviewertexture.cpp | 128 ++++++++++++++++++++------------------
 indra/newview/llviewertexture.h   |   3 +
 2 files changed, 72 insertions(+), 59 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp
index 0ad54f238e..4e7ac195ee 100644
--- a/indra/newview/llviewertexture.cpp
+++ b/indra/newview/llviewertexture.cpp
@@ -1155,9 +1155,11 @@ void LLViewerFetchedTexture::init(bool firstinit)
 
 	mSavedRawImage = NULL ;
 	mForceToSaveRawImage  = FALSE ;
+	mSaveRawImage = FALSE ;
 	mSavedRawDiscardLevel = -1 ;
 	mDesiredSavedRawDiscardLevel = -1 ;
 	mLastReferencedSavedRawImageTime = 0.0f ;
+	mLastCallBackActiveTime = 0.f;
 }
 
 LLViewerFetchedTexture::~LLViewerFetchedTexture()
@@ -1483,56 +1485,57 @@ void LLViewerFetchedTexture::setKnownDrawSize(S32 width, S32 height)
 //virtual
 void LLViewerFetchedTexture::processTextureStats()
 {
+	static LLCachedControl<bool> textures_fullres(gSavedSettings,"TextureLoadFullRes");
+
 	if(mFullyLoaded)
-	{		
-		if(mDesiredDiscardLevel > mMinDesiredDiscardLevel)//need to load more
+	{
+		if(needsToSaveRawImage())//needs to reload
 		{
-			mDesiredDiscardLevel = llmin(mDesiredDiscardLevel, mMinDesiredDiscardLevel) ;
 			mFullyLoaded = FALSE ;
 		}
-	}
-	else
-	{
-		updateVirtualSize() ;
-		
-		static LLCachedControl<bool> textures_fullres(gSavedSettings,"TextureLoadFullRes");
-		
-		if (textures_fullres)
+		else
 		{
-			mDesiredDiscardLevel = 0;
+			return ;
 		}
-		else if(!mFullWidth || !mFullHeight)
+	}
+
+	//updateVirtualSize() ;	
+	
+	if (textures_fullres)
+	{
+		mDesiredDiscardLevel = 0;
+	}
+	else if(!mFullWidth || !mFullHeight)
+	{
+		mDesiredDiscardLevel = 	getMaxDiscardLevel() ;
+	}
+	else
+	{	
+		if(!mKnownDrawWidth || !mKnownDrawHeight || mFullWidth <= mKnownDrawWidth || mFullHeight <= mKnownDrawHeight)
 		{
-			mDesiredDiscardLevel = 	getMaxDiscardLevel() ;
-		}
-		else
-		{	
-			if(!mKnownDrawWidth || !mKnownDrawHeight || mFullWidth <= mKnownDrawWidth || mFullHeight <= mKnownDrawHeight)
+			if (mFullWidth > MAX_IMAGE_SIZE_DEFAULT || mFullHeight > MAX_IMAGE_SIZE_DEFAULT)
 			{
-				if (mFullWidth > MAX_IMAGE_SIZE_DEFAULT || mFullHeight > MAX_IMAGE_SIZE_DEFAULT)
-				{
-					mDesiredDiscardLevel = 1; // MAX_IMAGE_SIZE_DEFAULT = 1024 and max size ever is 2048
-				}
-				else
-				{
-					mDesiredDiscardLevel = 0;
-				}
+				mDesiredDiscardLevel = 1; // MAX_IMAGE_SIZE_DEFAULT = 1024 and max size ever is 2048
 			}
-			else if(mKnownDrawSizeChanged)//known draw size is set
-			{			
-				mDesiredDiscardLevel = (S8)llmin(log((F32)mFullWidth / mKnownDrawWidth) / log_2, 
-													 log((F32)mFullHeight / mKnownDrawHeight) / log_2) ;
-				mDesiredDiscardLevel = 	llclamp(mDesiredDiscardLevel, (S8)0, (S8)getMaxDiscardLevel()) ;
-				mDesiredDiscardLevel = llmin(mDesiredDiscardLevel, mMinDesiredDiscardLevel) ;
-			}
-			mKnownDrawSizeChanged = FALSE ;
-		
-			if(getDiscardLevel() >= 0 && (getDiscardLevel() <= mDesiredDiscardLevel))
+			else
 			{
-				mFullyLoaded = TRUE ;
+				mDesiredDiscardLevel = 0;
 			}
 		}
-	}
+		else if(mKnownDrawSizeChanged)//known draw size is set
+		{			
+			mDesiredDiscardLevel = (S8)llmin(log((F32)mFullWidth / mKnownDrawWidth) / log_2, 
+												 log((F32)mFullHeight / mKnownDrawHeight) / log_2) ;
+			mDesiredDiscardLevel = 	llclamp(mDesiredDiscardLevel, (S8)0, (S8)getMaxDiscardLevel()) ;
+			mDesiredDiscardLevel = llmin(mDesiredDiscardLevel, mMinDesiredDiscardLevel) ;
+		}
+		mKnownDrawSizeChanged = FALSE ;
+	
+		if(getDiscardLevel() >= 0 && (getDiscardLevel() <= mDesiredDiscardLevel))
+		{
+			mFullyLoaded = TRUE ;
+		}
+	}	
 
 	if(mForceToSaveRawImage && mDesiredSavedRawDiscardLevel >= 0) //force to refetch the texture.
 	{
@@ -2074,13 +2077,14 @@ void LLViewerFetchedTexture::setLoadedCallback( loaded_callback_func loaded_call
 	mNeedsAux |= needs_aux;
 	if(keep_imageraw)
 	{
-		forceToSaveRawImage(discard_level, true) ;
+		mSaveRawImage = TRUE ;
 	}
 	if (mNeedsAux && mAuxRawImage.isNull() && getDiscardLevel() >= 0)
 	{
 		// We need aux data, but we've already loaded the image, and it didn't have any
 		llwarns << "No aux data available for callback for image:" << getID() << llendl;
 	}
+	mLastCallBackActiveTime = sCurrentTime ;
 }
 
 void LLViewerFetchedTexture::clearCallbackEntryList()
@@ -2103,9 +2107,8 @@ void LLViewerFetchedTexture::clearCallbackEntryList()
 	}
 	gTextureList.mCallbackList.erase(this);
 		
-	mMinDesiredDiscardLevel = MAX_DISCARD_LEVEL + 1;
 	mLoadedCallbackDesiredDiscardLevel = S8_MAX ;
-	if(mForceToSaveRawImage)
+	if(needsToSaveRawImage())
 	{
 		destroySavedRawImage() ;
 	}
@@ -2151,14 +2154,13 @@ void LLViewerFetchedTexture::deleteCallbackEntry(const LLLoadedCallbackEntry::so
 	{
 		// If we have no callbacks, take us off of the image callback list.
 		gTextureList.mCallbackList.erase(this);
-		mMinDesiredDiscardLevel = MAX_DISCARD_LEVEL + 1;
-
-		if(mForceToSaveRawImage)
+		
+		if(needsToSaveRawImage())
 		{
 			destroySavedRawImage() ;
 		}
 	}
-	else if(mForceToSaveRawImage && mBoostLevel != LLViewerTexture::BOOST_PREVIEW)
+	else if(needsToSaveRawImage() && mBoostLevel != LLViewerTexture::BOOST_PREVIEW)
 	{
 		if(desired_raw_discard != INVALID_DISCARD_LEVEL)
 		{
@@ -2196,7 +2198,7 @@ void LLViewerFetchedTexture::unpauseLoadedCallbacks(const LLLoadedCallbackEntry:
 	mPauseLoadedCallBacks = FALSE ;
 	if(need_raw)
 	{
-		mForceToSaveRawImage = TRUE ;
+		mSaveRawImage = TRUE ;
 	}
 }
 
@@ -2227,16 +2229,23 @@ void LLViewerFetchedTexture::pauseLoadedCallbacks(const LLLoadedCallbackEntry::s
 	{
 		mPauseLoadedCallBacks = TRUE ;//when set, loaded callback is paused.
 		resetTextureStats();
-		mForceToSaveRawImage = FALSE ;
+		mSaveRawImage = FALSE ;
 	}
 }
 
 bool LLViewerFetchedTexture::doLoadedCallbacks()
 {
+	static const F32 MAX_INACTIVE_TIME = 120.f ; //seconds
+
 	if (mNeedsCreateTexture)
 	{
 		return false;
 	}
+	if(sCurrentTime - mLastCallBackActiveTime > MAX_INACTIVE_TIME)
+	{
+		clearCallbackEntryList() ; //remove all callbacks.
+		return false ;
+	}
 
 	bool res = false;
 	
@@ -2302,13 +2311,11 @@ bool LLViewerFetchedTexture::doLoadedCallbacks()
 	bool run_raw_callbacks = false;
 	bool need_readback = false;
 
-	mMinDesiredDiscardLevel = MAX_DISCARD_LEVEL + 1;
 	for(callback_list_t::iterator iter = mLoadedCallbackList.begin();
 		iter != mLoadedCallbackList.end(); )
 	{
 		LLLoadedCallbackEntry *entryp = *iter++;
-		mMinDesiredDiscardLevel = llmin(mMinDesiredDiscardLevel, (S8)entryp->mDesiredDiscard) ;
-
+	
 		if (entryp->mNeedsImageRaw)
 		{
 			if (mNeedsAux)
@@ -2382,7 +2389,8 @@ bool LLViewerFetchedTexture::doLoadedCallbacks()
 				// to satisfy the interested party, then this is the last time that
 				// we're going to call them.
 
-				llassert_always(mRawImage.notNull());
+				mLastCallBackActiveTime = sCurrentTime ;
+				//llassert_always(mRawImage.notNull());
 				if(mNeedsAux && mAuxRawImage.isNull())
 				{
 					llwarns << "Raw Image with no Aux Data for callback" << llendl;
@@ -2417,6 +2425,7 @@ bool LLViewerFetchedTexture::doLoadedCallbacks()
 			LLLoadedCallbackEntry *entryp = *curiter;
 			if (!entryp->mNeedsImageRaw && (entryp->mLastUsedDiscard > gl_discard))
 			{
+				mLastCallBackActiveTime = sCurrentTime ;
 				BOOL final = gl_discard <= entryp->mDesiredDiscard ? TRUE : FALSE;
 				entryp->mLastUsedDiscard = gl_discard;
 				entryp->mCallback(TRUE, this, NULL, NULL, gl_discard, final, entryp->mUserData);
@@ -2436,7 +2445,6 @@ bool LLViewerFetchedTexture::doLoadedCallbacks()
 	if (mLoadedCallbackList.empty())
 	{
 		gTextureList.mCallbackList.erase(this);
-		mMinDesiredDiscardLevel = MAX_DISCARD_LEVEL + 1;
 	}
 
 	// Done with any raw image data at this point (will be re-created if we still have callbacks)
@@ -2516,6 +2524,11 @@ LLImageRaw* LLViewerFetchedTexture::reloadRawImage(S8 discard_level)
 	return mRawImage;
 }
 
+bool LLViewerFetchedTexture::needsToSaveRawImage()
+{
+	return mForceToSaveRawImage || mSaveRawImage ;
+}
+
 void LLViewerFetchedTexture::destroyRawImage()
 {	
 	if (mAuxRawImage.notNull()) sAuxCount--;
@@ -2526,7 +2539,7 @@ void LLViewerFetchedTexture::destroyRawImage()
 
 		if(mIsRawImageValid)
 		{
-			if(mForceToSaveRawImage)
+			if(needsToSaveRawImage())
 			{
 				saveRawImage() ;
 			}		
@@ -2658,7 +2671,7 @@ void LLViewerFetchedTexture::saveRawImage()
 	mSavedRawDiscardLevel = mRawDiscardLevel ;
 	mSavedRawImage = new LLImageRaw(mRawImage->getData(), mRawImage->getWidth(), mRawImage->getHeight(), mRawImage->getComponents()) ;
 
-	if(mSavedRawDiscardLevel <= mDesiredSavedRawDiscardLevel)
+	if(mForceToSaveRawImage && mSavedRawDiscardLevel <= mDesiredSavedRawDiscardLevel)
 	{
 		mForceToSaveRawImage = FALSE ;
 	}
@@ -2691,13 +2704,10 @@ void LLViewerFetchedTexture::forceToSaveRawImage(S32 desired_discard, bool from_
 void LLViewerFetchedTexture::destroySavedRawImage()
 {
 	clearCallbackEntryList() ;
-	//if(mForceToSaveRawImage && mDesiredSavedRawDiscardLevel >= 0 && mDesiredSavedRawDiscardLevel < getDiscardLevel())
-	//{
-	//	return ; //can not destroy the saved raw image before it is fully fetched, otherwise causing callbacks hanging there.
-	//}
-
+	
 	mSavedRawImage = NULL ;
 	mForceToSaveRawImage  = FALSE ;
+	mSaveRawImage = FALSE ;
 	mSavedRawDiscardLevel = -1 ;
 	mDesiredSavedRawDiscardLevel = -1 ;
 	mLastReferencedSavedRawImageTime = 0.0f ;
diff --git a/indra/newview/llviewertexture.h b/indra/newview/llviewertexture.h
index 7cb8bea4c8..b779396293 100644
--- a/indra/newview/llviewertexture.h
+++ b/indra/newview/llviewertexture.h
@@ -441,6 +441,7 @@ public:
 
 	LLImageRaw* reloadRawImage(S8 discard_level) ;
 	void destroyRawImage();
+	bool needsToSaveRawImage();
 
 	const std::string& getUrl() const {return mUrl;}
 	//---------------
@@ -532,6 +533,7 @@ protected:
 	S8              mLoadedCallbackDesiredDiscardLevel;
 	BOOL            mPauseLoadedCallBacks;
 	callback_list_t mLoadedCallbackList;
+	F32             mLastCallBackActiveTime;
 
 	LLPointer<LLImageRaw> mRawImage;
 	S32 mRawDiscardLevel;
@@ -543,6 +545,7 @@ protected:
 	//keep a copy of mRawImage for some special purposes
 	//when mForceToSaveRawImage is set.
 	BOOL mForceToSaveRawImage ;
+	BOOL mSaveRawImage;
 	LLPointer<LLImageRaw> mSavedRawImage;
 	S32 mSavedRawDiscardLevel;
 	S32 mDesiredSavedRawDiscardLevel;
-- 
cgit v1.2.3


From 88e33d00cd189aec6ef9b5aa481d4d9a2777b1fb Mon Sep 17 00:00:00 2001
From: Merov Linden <merov@lindenlab.com>
Date: Fri, 17 Sep 2010 19:17:12 -0700
Subject: STORM-105 : Add compression data gathering, took partial
 decompression into account in stats

---
 indra/newview/lltexturefetch.cpp | 1 -
 1 file changed, 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp
index 4e9ebce4d1..0440bef793 100644
--- a/indra/newview/lltexturefetch.cpp
+++ b/indra/newview/lltexturefetch.cpp
@@ -1557,7 +1557,6 @@ bool LLTextureFetch::createRequest(const std::string& url, const LLUUID& id, con
 	if (!url.empty() && (!exten.empty() && LLImageBase::getCodecFromExtension(exten) != IMG_CODEC_J2C))
 	{
 		// Only do partial requests for J2C at the moment
-		//llinfos << "Merov : LLTextureFetch::createRequest(), blocking fetch on " << url << llendl;
 		desired_size = MAX_IMAGE_DATA_SIZE;
 		desired_discard = 0;
 	}
-- 
cgit v1.2.3


From 34a55f2f05036d465ae1ddad5031a3e3f892d549 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Mon, 20 Sep 2010 13:04:56 +0100
Subject: make this at least build, but no real flesh yet.

---
 indra/newview/lltoastscripttextbox.cpp | 18 +++++++++---------
 indra/newview/lltoastscripttextbox.h   |  6 +++---
 2 files changed, 12 insertions(+), 12 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/lltoastscripttextbox.cpp b/indra/newview/lltoastscripttextbox.cpp
index bb06976d40..a54594e474 100644
--- a/indra/newview/lltoastscripttextbox.cpp
+++ b/indra/newview/lltoastscripttextbox.cpp
@@ -48,9 +48,9 @@
 #include "llfloaterinventory.h"
 #include "llinventorytype.h"
 
-const S32 LLToastGroupNotifyPanel::DEFAULT_MESSAGE_MAX_LINE_COUNT	= 7;
+const S32 LLToastScriptTextbox::DEFAULT_MESSAGE_MAX_LINE_COUNT	= 7;
 
-LLToastGroupNotifyPanel::LLToastGroupNotifyPanel(LLNotificationPtr& notification)
+LLToastScriptTextbox::LLToastScriptTextbox(LLNotificationPtr& notification)
 :	LLToastPanel(notification),
 	mInventoryOffer(NULL)
 {
@@ -125,7 +125,7 @@ LLToastGroupNotifyPanel::LLToastGroupNotifyPanel(LLNotificationPtr& notification
 
 		mInventoryOffer = new LLOfferInfo(payload["inventory_offer"]);
 		getChild<LLTextBox>("attachment")->setClickedCallback(boost::bind(
-				&LLToastGroupNotifyPanel::onClickAttachment, this));
+				&LLToastScriptTextbox::onClickAttachment, this));
 
 		LLUIImagePtr attachIconImg = LLInventoryIcon::getIcon(mInventoryOffer->mType,
 												LLInventoryType::IT_TEXTURE);
@@ -134,7 +134,7 @@ LLToastGroupNotifyPanel::LLToastGroupNotifyPanel(LLNotificationPtr& notification
 
 	//ok button
 	LLButton* pOkBtn = getChild<LLButton>("btn_ok");
-	pOkBtn->setClickedCallback((boost::bind(&LLToastGroupNotifyPanel::onClickOk, this)));
+	pOkBtn->setClickedCallback((boost::bind(&LLToastScriptTextbox::onClickOk, this)));
 	setDefaultBtn(pOkBtn);
 
 	S32 maxLinesCount;
@@ -147,11 +147,11 @@ LLToastGroupNotifyPanel::LLToastGroupNotifyPanel(LLNotificationPtr& notification
 }
 
 // virtual
-LLToastGroupNotifyPanel::~LLToastGroupNotifyPanel()
+LLToastScriptTextbox::~LLToastScriptTextbox()
 {
 }
 
-void LLToastGroupNotifyPanel::close()
+void LLToastScriptTextbox::close()
 {
 	// The group notice dialog may be an inventory offer.
 	// If it has an inventory save button and that button is still enabled
@@ -165,14 +165,14 @@ void LLToastGroupNotifyPanel::close()
 	die();
 }
 
-void LLToastGroupNotifyPanel::onClickOk()
+void LLToastScriptTextbox::onClickOk()
 {
 	LLSD response = mNotification->getResponseTemplate();
 	mNotification->respond(response);
 	close();
 }
 
-void LLToastGroupNotifyPanel::onClickAttachment()
+void LLToastScriptTextbox::onClickAttachment()
 {
 	if (mInventoryOffer != NULL) {
 		mInventoryOffer->forceResponse(IOR_ACCEPT);
@@ -196,7 +196,7 @@ void LLToastGroupNotifyPanel::onClickAttachment()
 }
 
 //static
-bool LLToastGroupNotifyPanel::isAttachmentOpenable(LLAssetType::EType type)
+bool LLToastScriptTextbox::isAttachmentOpenable(LLAssetType::EType type)
 {
 	switch(type)
 	{
diff --git a/indra/newview/lltoastscripttextbox.h b/indra/newview/lltoastscripttextbox.h
index 4890ee1dea..2d942939bc 100644
--- a/indra/newview/lltoastscripttextbox.h
+++ b/indra/newview/lltoastscripttextbox.h
@@ -41,7 +41,7 @@ class LLButton;
  *
  * Replaces class LLGroupNotifyBox.
  */
-class LLToastGroupNotifyPanel
+class LLToastScriptTextbox
 :	public LLToastPanel
 {
 public:
@@ -53,9 +53,9 @@ public:
 	// Non-transient messages.  You can specify non-default button
 	// layouts (like one for script dialogs) by passing various
 	// numbers in for "layout".
-	LLToastGroupNotifyPanel(LLNotificationPtr& notification);
+	LLToastScriptTextbox(LLNotificationPtr& notification);
 
-	/*virtual*/ ~LLToastGroupNotifyPanel();
+	/*virtual*/ ~LLToastScriptTextbox();
 protected:
 	void onClickOk();
 	void onClickAttachment();
-- 
cgit v1.2.3


From faa96995d359047c539d1262df0e668e2f578f94 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Mon, 20 Sep 2010 13:07:32 +0100
Subject: tweak.

---
 indra/newview/skins/default/xui/en/panel_notify_textbox.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_notify_textbox.xml b/indra/newview/skins/default/xui/en/panel_notify_textbox.xml
index 6f271a757c..a0d103e2a3 100644
--- a/indra/newview/skins/default/xui/en/panel_notify_textbox.xml
+++ b/indra/newview/skins/default/xui/en/panel_notify_textbox.xml
@@ -5,7 +5,7 @@
  label="instant_message"
  layout="topleft"
  left="0"
- name="panel_group_notify"
+ name="panel_notify_textbox"
  top="0"
  width="305">
     <string
-- 
cgit v1.2.3


From b4e0c28103fe30480650bbf39b48af2a8428c74b Mon Sep 17 00:00:00 2001
From: Loren Shih <seraph@lindenlab.com>
Date: Mon, 20 Sep 2010 14:01:05 -0400
Subject: Automated merge from viewer-development-shining

---
 indra/newview/skins/default/xui/en/notifications.xml | 1 -
 1 file changed, 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 609a9b09be..c496b1d5a5 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -6268,7 +6268,6 @@ You sent out an update of your appearance after [TIME] seconds.
 [STATUS]
   </notification>
 
-
   <notification
    icon="notifytip.tga"
    name="AvatarRezCloudNotification"
-- 
cgit v1.2.3


From 81ef82840db65fd873b96ed428bbb2684a40ee2a Mon Sep 17 00:00:00 2001
From: Vadim Savchuk <vsavchuk@productengine.com>
Date: Tue, 21 Sep 2010 17:41:53 +0300
Subject: STORM-166 FIXED Memory leak in LLSelectNode constructor.

Submitting on behalf of Thickbrick Sleaford.

One of the LLSelectNode constructors has a leak where it does "new LLPermisions()" twice, thus leaking the address of the first object created.

This constructor is called every time you interact (click, hover, select, possibly other) with an object, once for each prim in the object. Since sizeof(LLPermissions) is 92 bytes, this can be a significant amount after a while.

I think this might explain VWR-18528 (leaking LLpemissions instances), at least partially.

This was fixed in snowglobe 1.x as part of SNOW-267.
---
 indra/newview/llselectmgr.cpp | 22 ++++++----------------
 1 file changed, 6 insertions(+), 16 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp
index fb60b1ece7..9260abb2ac 100644
--- a/indra/newview/llselectmgr.cpp
+++ b/indra/newview/llselectmgr.cpp
@@ -5058,23 +5058,13 @@ LLSelectNode::LLSelectNode(LLViewerObject* object, BOOL glow)
 	mSilhouetteExists(FALSE),
 	mDuplicated(FALSE),
 	mTESelectMask(0),
-	mLastTESelected(0)
+	mLastTESelected(0),
+	mName(LLStringUtil::null),
+	mDescription(LLStringUtil::null),
+	mTouchName(LLStringUtil::null),
+	mSitName(LLStringUtil::null),
+	mCreationDate(0)
 {
-	mObject = object;
-	selectAllTEs(FALSE);
-	mIndividualSelection	= FALSE;
-	mTransient		= FALSE;
-	mValid			= FALSE;
-	mPermissions	= new LLPermissions();
-	mInventorySerial = 0;
-	mName = LLStringUtil::null;
-	mDescription = LLStringUtil::null;
-	mTouchName = LLStringUtil::null;
-	mSitName = LLStringUtil::null;
-	mSilhouetteExists = FALSE;
-	mDuplicated = FALSE;
-	mCreationDate = 0;
-
 	saveColors();
 }
 
-- 
cgit v1.2.3


From 9b16a05c07372d2d86be0be1b914086984ea5285 Mon Sep 17 00:00:00 2001
From: Loren Shih <seraph@lindenlab.com>
Date: Tue, 21 Sep 2010 10:47:59 -0400
Subject: SH-178 FIXED As a non-god, I don't want to see admin options

Admin options are now enabled by a debug setting.
---
 indra/newview/app_settings/settings.xml            | 11 +++++++++++
 indra/newview/llviewermenu.cpp                     | 13 ++++++++++++-
 indra/newview/skins/default/xui/en/menu_viewer.xml | 20 +++++++++++---------
 3 files changed, 34 insertions(+), 10 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 916657b97d..b641a16847 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -24,6 +24,17 @@
       <key>Value</key>
       <real>300</real>
     </map>
+    <key>AdminMenu</key>
+    <map>
+      <key>Comment</key>
+      <string>Enable the debug admin menu from the main menu.  Note: This will just allow the menu to be shown; this does not grant admin privileges.</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>AdvanceSnapshot</key>
     <map>
       <key>Comment</key>
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index f62223a38d..b46febba63 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -1992,6 +1992,16 @@ class LLAdvancedShowDebugSettings : public view_listener_t
 // VIEW ADMIN OPTIONS //
 ////////////////////////
 
+class LLAdvancedEnableViewAdminOptions : public view_listener_t
+{
+	bool handleEvent(const LLSD& userdata)
+	{
+		// Don't enable in god mode since the admin menu is shown anyway.
+		// Only enable if the user has set the appropriate debug setting.
+		bool new_value = !gAgent.getAgentAccess().isGodlikeWithoutAdminMenuFakery() && gSavedSettings.getBOOL("AdminMenu");
+		return new_value;
+	}
+};
 
 class LLAdvancedToggleViewAdminOptions : public view_listener_t
 {
@@ -2006,7 +2016,7 @@ class LLAdvancedCheckViewAdminOptions : public view_listener_t
 {
 	bool handleEvent(const LLSD& userdata)
 	{
-		bool new_value = check_admin_override(NULL);
+		bool new_value = check_admin_override(NULL) || gAgent.isGodlike();
 		return new_value;
 	}
 };
@@ -8099,6 +8109,7 @@ void initialize_menus()
 	view_listener_t::addMenu(new LLAdvancedCheckShowObjectUpdates(), "Advanced.CheckShowObjectUpdates");
 	view_listener_t::addMenu(new LLAdvancedCompressImage(), "Advanced.CompressImage");
 	view_listener_t::addMenu(new LLAdvancedShowDebugSettings(), "Advanced.ShowDebugSettings");
+	view_listener_t::addMenu(new LLAdvancedEnableViewAdminOptions(), "Advanced.EnableViewAdminOptions");
 	view_listener_t::addMenu(new LLAdvancedToggleViewAdminOptions(), "Advanced.ToggleViewAdminOptions");
 	view_listener_t::addMenu(new LLAdvancedCheckViewAdminOptions(), "Advanced.CheckViewAdminOptions");
 	view_listener_t::addMenu(new LLAdvancedRequestAdminStatus(), "Advanced.RequestAdminStatus");
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index 19707c1bc9..72677de357 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -3038,15 +3038,6 @@
 
         <menu_item_separator/>
 
-        <menu_item_check
-         label="Show Admin Menu"
-         name="View Admin Options">
-            <menu_item_check.on_check
-             function="Advanced.CheckViewAdminOptions"
-             parameter="ViewAdminOptions" />
-            <menu_item_check.on_click
-             function="Advanced.ToggleViewAdminOptions" />
-        </menu_item_check>
         <menu_item_call
          label="Request Admin Status"
          name="Request Admin Options"
@@ -3061,6 +3052,17 @@
             <menu_item_call.on_click
              function="Advanced.LeaveAdminStatus" />
         </menu_item_call>
+        <menu_item_check
+         label="Show Admin Menu"
+         name="View Admin Options">
+            <menu_item_check.on_enable
+             function="Advanced.EnableViewAdminOptions" />
+            <menu_item_check.on_check
+             function="Advanced.CheckViewAdminOptions"
+             parameter="ViewAdminOptions" />
+            <menu_item_check.on_click
+             function="Advanced.ToggleViewAdminOptions" />
+        </menu_item_check>
     </menu>
     <menu
      create_jump_keys="true"
-- 
cgit v1.2.3


From 1d1852a08f599921f10803aa64324c4962612679 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Tue, 21 Sep 2010 16:52:20 +0100
Subject: more work towards making textbox-based script dialogs be their own
 toast type.

---
 indra/newview/CMakeLists.txt                       |   1 +
 indra/newview/llnotificationhandler.h              |  22 ++-
 .../newview/llnotificationscripttextboxhandler.cpp | 174 +++++++++++++++++++++
 3 files changed, 196 insertions(+), 1 deletion(-)
 create mode 100644 indra/newview/llnotificationscripttextboxhandler.cpp

(limited to 'indra/newview')

diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 42d996419c..3899c8658f 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -307,6 +307,7 @@ set(viewer_SOURCE_FILES
     llnotificationmanager.cpp
     llnotificationofferhandler.cpp
     llnotificationscripthandler.cpp
+    llnotificationscripttextboxhandler.cpp
     llnotificationstorage.cpp
     llnotificationtiphandler.cpp
     lloutfitslist.cpp
diff --git a/indra/newview/llnotificationhandler.h b/indra/newview/llnotificationhandler.h
index 060eccf5c7..0cca878a4f 100644
--- a/indra/newview/llnotificationhandler.h
+++ b/indra/newview/llnotificationhandler.h
@@ -197,9 +197,29 @@ protected:
 	virtual void initChannel();
 
 	// own handlers
-	void onRejectToast(LLUUID& id);
+	virtual void onRejectToast(LLUUID& id);
 };
 
+/**
+ * Handler for specific textbox-based script notices.
+ */
+
+class LLScriptTextboxHandler : public LLSysHandler
+{
+ public:
+	LLScriptTextboxHandler(e_notification_type type, const LLSD& id);
+	virtual ~LLScriptTextboxHandler();
+
+	// base interface functions
+	virtual bool processNotification(const LLSD& notify);
+
+protected:
+	virtual void onDeleteToast(LLToast* toast);
+	virtual void initChannel();
+
+	// own handlers
+	virtual void onRejectToast(LLUUID& id);
+};
 
 /**
  * Handler for group system notices.
diff --git a/indra/newview/llnotificationscripttextboxhandler.cpp b/indra/newview/llnotificationscripttextboxhandler.cpp
new file mode 100644
index 0000000000..27ece8422e
--- /dev/null
+++ b/indra/newview/llnotificationscripttextboxhandler.cpp
@@ -0,0 +1,174 @@
+/** 
+ * @file llnotificationscripthandler.cpp
+ * @brief Notification Handler Class for Simple Notifications and Notification Tips
+ *
+ * $LicenseInfo:firstyear=2000&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+
+#include "llviewerprecompiledheaders.h" // must be first include
+
+#include "llnotificationhandler.h"
+#include "lltoastnotifypanel.h"
+#include "llviewercontrol.h"
+#include "llviewerwindow.h"
+#include "llnotificationmanager.h"
+#include "llnotifications.h"
+#include "llscriptfloater.h"
+#include "lltoastscripttextbox.h"
+
+using namespace LLNotificationsUI;
+
+static const std::string SCRIPT_DIALOG				("ScriptDialog");
+static const std::string SCRIPT_DIALOG_GROUP		("ScriptDialogGroup");
+static const std::string SCRIPT_LOAD_URL			("LoadWebPage");
+
+//--------------------------------------------------------------------------
+LLScriptTextboxHandler::LLScriptTextboxHandler(e_notification_type type, const LLSD& id)
+{
+	mType = type;
+
+	// Getting a Channel for our notifications
+	mChannel = LLChannelManager::getInstance()->createNotificationChannel();
+	mChannel->setControlHovering(true);
+	
+	LLScreenChannel* channel = dynamic_cast<LLScreenChannel*>(mChannel);
+	if(channel)
+		channel->setOnRejectToastCallback(boost::bind(&LLScriptTextboxHandler::onRejectToast, this, _1));
+
+}
+
+//--------------------------------------------------------------------------
+LLScriptTextboxHandler::~LLScriptTextboxHandler()
+{
+}
+
+//--------------------------------------------------------------------------
+void LLScriptTextboxHandler::initChannel()
+{
+	S32 channel_right_bound = gViewerWindow->getWorldViewRectScaled().mRight - gSavedSettings.getS32("NotificationChannelRightMargin"); 
+	S32 channel_width = gSavedSettings.getS32("NotifyBoxWidth");
+	mChannel->init(channel_right_bound - channel_width, channel_right_bound);
+}
+
+//--------------------------------------------------------------------------
+bool LLScriptTextboxHandler::processNotification(const LLSD& notify)
+{
+	if(!mChannel)
+	{
+		return false;
+	}
+
+	LLNotificationPtr notification = LLNotifications::instance().find(notify["id"].asUUID());
+
+	if(!notification)
+		return false;
+
+	// arrange a channel on a screen
+	if(!mChannel->getVisible())
+	{
+		initChannel();
+	}
+	
+	if(notify["sigtype"].asString() == "add" || notify["sigtype"].asString() == "change")
+	{
+		if (LLHandlerUtil::canLogToIM(notification))
+		{
+			LLHandlerUtil::logToIMP2P(notification);
+		}
+
+		if(SCRIPT_DIALOG == notification->getName() || SCRIPT_DIALOG_GROUP == notification->getName() || SCRIPT_LOAD_URL == notification->getName())
+		{
+			LLScriptFloaterManager::getInstance()->onAddNotification(notification->getID());
+		}
+		else
+		{
+			LLToastScriptTextbox* notify_box = new LLToastScriptTextbox(notification);
+
+			LLToast::Params p;
+			p.notif_id = notification->getID();
+			p.notification = notification;
+			p.panel = notify_box;	
+			p.on_delete_toast = boost::bind(&LLScriptTextboxHandler::onDeleteToast, this, _1);
+
+			LLScreenChannel* channel = dynamic_cast<LLScreenChannel*>(mChannel);
+			if(channel)
+			{
+				channel->addToast(p);
+			}
+
+			// send a signal to the counter manager
+			mNewNotificationSignal();
+		}
+	}
+	else if (notify["sigtype"].asString() == "delete")
+	{
+		if(SCRIPT_DIALOG == notification->getName() || SCRIPT_DIALOG_GROUP == notification->getName() || SCRIPT_LOAD_URL == notification->getName())
+		{
+			LLScriptFloaterManager::getInstance()->onRemoveNotification(notification->getID());
+		}
+		else
+		{
+			mChannel->killToastByNotificationID(notification->getID());
+		}
+	}
+	return true;
+}
+
+//--------------------------------------------------------------------------
+
+void LLScriptTextboxHandler::onDeleteToast(LLToast* toast)
+{
+	// send a signal to the counter manager
+	mDelNotificationSignal();
+
+	// send a signal to a listener to let him perform some action
+	// in this case listener is a SysWellWindow and it will remove a corresponding item from its list
+	mNotificationIDSignal(toast->getNotificationID());
+
+	LLNotificationPtr notification = LLNotifications::getInstance()->find(toast->getNotificationID());
+	
+	if( notification && 
+		(SCRIPT_DIALOG == notification->getName() || SCRIPT_DIALOG_GROUP == notification->getName()) )
+	{
+		LLScriptFloaterManager::getInstance()->onRemoveNotification(notification->getID());
+	}
+}
+
+//--------------------------------------------------------------------------
+void LLScriptTextboxHandler::onRejectToast(LLUUID& id)
+{
+	LLNotificationPtr notification = LLNotifications::instance().find(id);
+
+	if (notification
+			&& LLNotificationManager::getInstance()->getHandlerForNotification(
+					notification->getType()) == this)
+	{
+		LLNotifications::instance().cancel(notification);
+	}
+}
+
+//--------------------------------------------------------------------------
+
+
+
+
-- 
cgit v1.2.3


From dfe12745523d2b3d5c1720bec211555c09437a87 Mon Sep 17 00:00:00 2001
From: Xiaohong Bao <bao@lindenlab.com>
Date: Wed, 22 Sep 2010 14:44:40 -0600
Subject: fix for SH-173/VWR-22868: Development Viewer freezes just after
 startup / greedy with file handles / 'WARNING: ll_apr_warn_status: APR: Too
 many open files'

---
 indra/newview/lltexturefetch.cpp | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp
index 7d09ea5b4f..d6d38de225 100644
--- a/indra/newview/lltexturefetch.cpp
+++ b/indra/newview/lltexturefetch.cpp
@@ -858,10 +858,16 @@ bool LLTextureFetchWorker::doWork(S32 param)
 		if(mCanUseHTTP)
 		{
 			//NOTE:
-			//it seems ok to let sim control the UDP traffic
-			//so there is no throttle for http here.
+			//control the number of the http requests issued for:
+			//1, not openning too many file descriptors at the same time;
+			//2, control the traffic of http so udp gets bandwidth.
 			//
-			
+			static const S32 MAX_NUM_OF_HTTP_REQUESTS_IN_QUEUE = 32 ;
+			if(mFetcher->getNumHTTPRequests() > MAX_NUM_OF_HTTP_REQUESTS_IN_QUEUE)
+			{
+				return false ; //wait.
+			}
+
 			mFetcher->removeFromNetworkQueue(this, false);
 			
 			S32 cur_size = 0;
-- 
cgit v1.2.3


From 1df1f822aa4f8633207023ef78f9aa4606649732 Mon Sep 17 00:00:00 2001
From: Seth ProductEngine <slitovchuk@productengine.com>
Date: Fri, 24 Sep 2010 00:53:21 +0300
Subject: STORM-189 FIXED Truncations in DE ans ES locales in Build Tools
 floater. - Some checkboxes moved in DE locale and EN xml file. - Removed
 floater width override for ES locale.

---
 indra/newview/skins/default/xui/de/floater_tools.xml | 4 ++--
 indra/newview/skins/default/xui/en/floater_tools.xml | 8 ++++----
 indra/newview/skins/default/xui/es/floater_tools.xml | 2 +-
 3 files changed, 7 insertions(+), 7 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/de/floater_tools.xml b/indra/newview/skins/default/xui/de/floater_tools.xml
index 12ae9898c3..3de3718f66 100644
--- a/indra/newview/skins/default/xui/de/floater_tools.xml
+++ b/indra/newview/skins/default/xui/de/floater_tools.xml
@@ -71,8 +71,8 @@
 	<text label="Beide Seiten dehnen" name="checkbox uniform label">
 		Beide Seiten dehnen
 	</text>
-	<check_box initial_value="true" label="Texturen dehnen" name="checkbox stretch textures"/>
-	<check_box initial_value="true" label="An Raster ausrichten" name="checkbox snap to grid" top_pad="10"/>
+	<check_box initial_value="true" label="Texturen dehnen" name="checkbox stretch textures" top_pad="-5"/>
+	<check_box initial_value="true" label="An Raster ausrichten" name="checkbox snap to grid" top_pad="15"/>
 	<combo_box name="combobox grid mode" tool_tip="Wählen Sie ein Rasterlineal zum Positionieren des Objekts aus.">
 		<combo_box.item label="Globales Raster" name="World"/>
 		<combo_box.item label="Lokales Raster" name="Local"/>
diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml
index af8ab3fd9e..cea2ba2c7f 100644
--- a/indra/newview/skins/default/xui/en/floater_tools.xml
+++ b/indra/newview/skins/default/xui/en/floater_tools.xml
@@ -255,7 +255,7 @@
      label="Edit linked"
      layout="topleft"     
      name="checkbox edit linked parts"
-     top_pad="0">
+     top_pad="2">
 		  <check_box.commit_callback
 			function="BuildTool.selectComponent"/>
 	</check_box>
@@ -267,7 +267,7 @@
    left="13"
    name="RenderingCost"
    tool_tip="Shows the rendering cost calculated for this object"
-   top_pad="2"
+   top_pad="0"
    type="string"
    width="100">
    þ: [COUNT]
@@ -732,7 +732,7 @@
      layout="topleft"
      right="-10"
      name="obj_count"
-     top_pad="5"
+     top_pad="7"
      width="143">
         Objects: [COUNT]
     </text>
@@ -758,7 +758,7 @@
      tab_min_width="40"
      tab_position="top"
      tab_height="25"
-     top="170"
+     top="173"
      width="295">
 	<panel
 	 border="false"
diff --git a/indra/newview/skins/default/xui/es/floater_tools.xml b/indra/newview/skins/default/xui/es/floater_tools.xml
index 9637544f4e..bc99cfe215 100644
--- a/indra/newview/skins/default/xui/es/floater_tools.xml
+++ b/indra/newview/skins/default/xui/es/floater_tools.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="toolbox floater" short_title="HERRAMIENTAS DE CONSTRUCCIÓN" title="" width="288">
+<floater name="toolbox floater" short_title="HERRAMIENTAS DE CONSTRUCCIÓN" title="">
 	<floater.string name="status_rotate">
 		Arrastra las bandas de color para girar el objeto.
 	</floater.string>
-- 
cgit v1.2.3


From 3cd522c5a6dd71a61769a65a7e6fa39a55fcf73b Mon Sep 17 00:00:00 2001
From: Xiaohong Bao <bao@lindenlab.com>
Date: Wed, 22 Sep 2010 14:44:40 -0600
Subject: fix for SH-173/VWR-22868: Development Viewer freezes just after
 startup / greedy with file handles / 'WARNING: ll_apr_warn_status: APR: Too
 many open files' (transplanted from a9aefa70c029eb9dddec3833d0ce22ef4b4421b5)

---
 indra/newview/lltexturefetch.cpp | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp
index 4e9ebce4d1..fafef84aa2 100644
--- a/indra/newview/lltexturefetch.cpp
+++ b/indra/newview/lltexturefetch.cpp
@@ -847,10 +847,16 @@ bool LLTextureFetchWorker::doWork(S32 param)
 		if(mCanUseHTTP)
 		{
 			//NOTE:
-			//it seems ok to let sim control the UDP traffic
-			//so there is no throttle for http here.
+			//control the number of the http requests issued for:
+			//1, not openning too many file descriptors at the same time;
+			//2, control the traffic of http so udp gets bandwidth.
 			//
-			
+			static const S32 MAX_NUM_OF_HTTP_REQUESTS_IN_QUEUE = 32 ;
+			if(mFetcher->getNumHTTPRequests() > MAX_NUM_OF_HTTP_REQUESTS_IN_QUEUE)
+			{
+				return false ; //wait.
+			}
+
 			mFetcher->removeFromNetworkQueue(this, false);
 			
 			S32 cur_size = 0;
-- 
cgit v1.2.3


From 9961df7c19ed11566b2153df18773f86032f185c Mon Sep 17 00:00:00 2001
From: "Nyx (Neal Orman)" <nyx@lindenlab.com>
Date: Wed, 22 Sep 2010 18:09:17 -0400
Subject: SH-188 FIX crash in llvoavatar.cpp

We were using a NULL pointer after checking it. Did some logic juggling to
ensure that we only use the pointer if it is non-null

Code reviewed by Seraph
---
 indra/newview/llvoavatar.cpp | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 46d8f65d23..c31714de5a 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -6089,9 +6089,9 @@ void LLVOAvatar::updateMeshTextures()
 			// use the last-known good baked texture until it finish the first
 			// render of the new layerset.
 
-			const BOOL layerset_invalid = !mBakedTextureDatas[i].mTexLayerSet 
-										  || !mBakedTextureDatas[i].mTexLayerSet->getComposite()->isInitialized()
-										  || !mBakedTextureDatas[i].mTexLayerSet->isLocalTextureDataAvailable();
+			const BOOL layerset_invalid = mBakedTextureDatas[i].mTexLayerSet 
+										  && ( !mBakedTextureDatas[i].mTexLayerSet->getComposite()->isInitialized()
+										  || !mBakedTextureDatas[i].mTexLayerSet->isLocalTextureDataAvailable() );
 
 			use_lkg_baked_layer[i] = (!is_layer_baked[i] 
 									  && (mBakedTextureDatas[i].mLastTextureIndex != IMG_DEFAULT_AVATAR) 
-- 
cgit v1.2.3


From 3db2af5d425051cb9b66c3e0bd734895b78aca4b Mon Sep 17 00:00:00 2001
From: Xiaohong Bao <bao@lindenlab.com>
Date: Thu, 23 Sep 2010 16:12:01 -0600
Subject: a try fix for SH-212: crash at
 LLViewerObjectList::removeFromLocalIDTable(LLViewerObject const &)
 [secondlife-bin llviewerobjectlist.cpp] line 173

---
 indra/newview/llviewerobjectlist.cpp | 5 +++++
 1 file changed, 5 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp
index 05695193a5..9bb9b71b19 100644
--- a/indra/newview/llviewerobjectlist.cpp
+++ b/indra/newview/llviewerobjectlist.cpp
@@ -165,6 +165,11 @@ BOOL LLViewerObjectList::removeFromLocalIDTable(const LLViewerObject &object)
 	{
 		U32 local_id = object.mLocalID;
 		LLHost region_host = object.getRegion()->getHost();
+		if(!region_host.isOk())
+		{
+			return FALSE ;
+		}
+
 		U32 ip = region_host.getAddress();
 		U32 port = region_host.getPort();
 		U64 ipport = (((U64)ip) << 32) | (U64)port;
-- 
cgit v1.2.3


From f17c562544ef911767432bca92f5e0f217c7323c Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Thu, 23 Sep 2010 17:55:53 -0700
Subject: Adding notification for all punctuation display name

---
 indra/newview/skins/default/xui/en/notifications.xml | 19 +++++++++++++++----
 1 file changed, 15 insertions(+), 4 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 5bd28e5b91..11cded4646 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -3189,17 +3189,20 @@ You are no longer frozen.
    icon="alertmodal.tga"
    name="SetDisplayName"
    type="alert">
-The name above your avatar's head is called a [http://wiki.secondlife.com/wiki/Setting_your_display_name display name]. You can change it periodically.
+    The name above your avatar's head is called a [secondlife:///app/help/script display_name]. You can change it periodically.
 
-During the evaluation period of this Project Viewer release, you are able to update your Display Name as frequently as you wish. When this feature goes officially live, you will able to update your Display Name only once a week.
+    During the evaluation period of this Project Viewer release, you are able to update your Display Name as frequently as you wish. When this feature goes officially live, you will able to update your Display Name only once a week.
 
-Press reset to make it the same as your username.
+    Press reset to make it the same as your username.
 
-Change your display name?
+    Change your display name?
     <form name="form">
       <input name="display_name" max_length_chars="31" type="text">
 [DISPLAY_NAME]
       </input>
+      <input name="display_name_repeat" max_length_chars="31" type="text">
+        [DISPLAY_NAME]
+      </input>
       <button
        default="true"
        index="0"
@@ -3285,6 +3288,14 @@ Please try again later.
     The display name you wish to set contains invalid characters.
   </notification>
 
+  <notification
+   icon="alertmodal.tga"
+ name="AgentDisplayNameSetOnlyPunctuation"
+ type="alertmodal">
+    Your display name can't contain only punctuation.
+  </notification>
+
+
   <notification
    icon="notifytip.tga"
    name="DisplayNameUpdate"
-- 
cgit v1.2.3


From 8c35a4ccd276a09646a984e803c1ac4dae231136 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Thu, 23 Sep 2010 17:56:14 -0700
Subject: adding display name and username labels

---
 .../skins/default/xui/en/panel_profile_view.xml    | 59 ++++++++++++++--------
 1 file changed, 39 insertions(+), 20 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_profile_view.xml b/indra/newview/skins/default/xui/en/panel_profile_view.xml
index 920853aae7..36b883e5f2 100644
--- a/indra/newview/skins/default/xui/en/panel_profile_view.xml
+++ b/indra/newview/skins/default/xui/en/panel_profile_view.xml
@@ -28,34 +28,52 @@
      tab_stop="false"
      top="2"
      width="30" />
+    <text
+     top="10" 
+     follows="top|left"
+     height="13"
+     layout="topleft"
+     left="45"
+     name="user_label"
+     text_color="LtGray"
+     value="Display Name:"
+     width="80" />
+  <text
+   follows="top|left"
+   halign="right"
+   height="13"
+   layout="topleft"
+   left="165"
+   name="status"
+   text_color="LtGray_50"
+   top_delta="0"
+   value="Online"
+   width="150" />
      <text
-    	h_pad="0"
-    	v_pad="0"
       follows="top|left|right"
       font="SansSerifBigBold"
       height="29"
       layout="topleft"
-      left_pad="5"
+      left="47"
       name="user_name_small"
       text_color="LtGray"
-      top="0"
-      value="(Loading...)"
+      top="22"
+      value="Jack oh look at me this is a super duper long name"
       use_ellipses="true"
       word_wrap="true" 
       visible="false" 
       width="275" />
      <text
-      h_pad="0"
-      v_pad="0"
       follows="top|left|right"
       font="SansSerifHugeBold"
       height="27"
       layout="topleft"
-      left_delta="0"
+      left="47"
       name="user_name"
       text_color="LtGray"
-      top="2"
-      value="(Loading...)"
+      top="25"
+      value="Jack Linden"
+      visible="true" 
       use_ellipses="true"
       width="275" />
     <text
@@ -63,20 +81,21 @@
      height="13"
      layout="topleft"
      left="45"
-     name="user_slid"
+     name="user_label"
      text_color="LtGray"
-     width="150" />
+     value="Username:"
+     width="70" />
     <text
      follows="top|left"
-     halign="right" 
-     height="13"
+     height="17"
      layout="topleft"
-     left="150"
-     name="status"
-     text_color="LtGray_50"
-     top_delta="0" 
-     value="Online"
-     width="150" />
+     left_pad="0"
+     name="user_slid"
+     text_color="EmphasisColor"
+     font="SansSerifBold"
+     top_delta="-2" 
+     value="Jack Linden"
+     width="120" />
     <tab_container
      follows="all"
      height="515"
-- 
cgit v1.2.3


From c54c369e5ef84c63ad3d634c3329b0a292a215d4 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Fri, 24 Sep 2010 11:49:40 +0100
Subject: remove panel_notify textbox hacks now that this is gonna be its own
 panel.

---
 .../skins/default/xui/en/panel_notification.xml    | 34 ----------------------
 1 file changed, 34 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_notification.xml b/indra/newview/skins/default/xui/en/panel_notification.xml
index 21c45aa5e3..59ead84127 100644
--- a/indra/newview/skins/default/xui/en/panel_notification.xml
+++ b/indra/newview/skins/default/xui/en/panel_notification.xml
@@ -1,6 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <panel
-   tab_stop="false"
   background_opaque="false"
       border_visible="false"
   background_visible="true"
@@ -16,7 +15,6 @@
   width="305">
   <!-- THIS PANEL CONTROLS TOAST HEIGHT? -->
   <panel
-   tab_stop="false"
       border_visible="false"
  bevel_style="none"
     background_visible="true"
@@ -57,29 +55,6 @@
       visible="false"
       width="285"
       wrap="true"/>
-    <text_editor
-    	h_pad="0"
-	v_pad="0"
-      border_visible="true"
-      embedded_items="false"
-      enabled="false"
-      follows="left|right|top|bottom"
-      font="SansSerif"
-      height="85" 
-      layout="topleft"
-      left="10"
-      mouse_opaque="false"
-      name="user_input_box"
-      read_only="false"
-      tab_stop="false"
-      text_color="green"
-      text_readonly_color="red"
-      top="50"
-      visible="false"
-      width="285"
-      wrap="true"
-      parse_highlights="true"
-      parse_urls="true"/>
     <text_editor
     	h_pad="0"
 	v_pad="0"
@@ -104,17 +79,8 @@
       wrap="true"
       parse_highlights="true"
       parse_urls="true"/>
-      <button
-	 follows="left|top"
-	 height="25"
-	 layout="topleft"
-	 left_pad="10"
-	 label="Submit"
-	 name="submit"
-	 width="35" />
   </panel>
   <panel
-   tab_stop="false"
     background_visible="false"
     follows="left|right|bottom"
     height="30" 
-- 
cgit v1.2.3


From 8961223a371fa9f02ad30b0e4625e7a7e3310977 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Fri, 24 Sep 2010 14:04:50 -0700
Subject: Adding profile username and display name labels and emphasis coloring

---
 .../skins/default/xui/en/panel_edit_profile.xml    |  60 ++++--
 .../skins/default/xui/en/panel_profile_view.xml    | 218 ++++++++++-----------
 2 files changed, 151 insertions(+), 127 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_edit_profile.xml b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
index bb67d68c8e..caf5cb8817 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
@@ -88,40 +88,64 @@
          left="0"
          width="292">
       <text
+     top="5"
+     follows="top|left"
+     height="13"
+     layout="topleft"
+     left="10"
+     name="user_label"
+     text_color="LtGray"
+     value="Display Name:"
+     width="80" />
+      <button
+         name="set_name"
+         layout="topleft"
+         follows="top|left"
+         image_overlay="Edit_Wrench"
+         top="21"
+         left="10"
+         height="23"
+         width="23"
+         tool_tip="Set Display Name"/>
+      <text
        follows="top|left"
        font="SansSerifBigBold"
        height="20"
        layout="topleft"
-       left="10"
+       left_pad="10"
        name="user_name"
        text_color="white"
-       top="4"
+       top_delta="3"
        value="Hamilton Hitchings"
-       width="280" />
+       use_ellipses="true" 
+       width="265" />
+      <text
+    follows="top|left"
+    height="13"
+    layout="topleft"
+    left="10"
+    name="user_label"
+    text_color="LtGray"
+    top_pad="4" 
+    value="Username:"
+    width="70" />
       <text
        follows="top|left"
        height="13"
        layout="topleft"
-       left="10"
+       left_pad="0"
        name="user_slid"
-       text_color="LtGray"
-       top_pad="5"
-       value="(hamilton.linden)"
+       text_color="EmphasisColor"
+        font="SansSerifBold"
+       top_delta="-2"
+       value="hamilton.linden"
        width="150" />
-      <button
-       follows="top|left"
-       height="20"
-       label="Set Display Name..."
-       left="165"
-       name="set_name"
-       top_delta="-4"
-       width="120" />
      <panel
        name="lifes_images_panel"
          follows="left|top|right"
          height="244"
          layout="topleft"
-         top="37"
+         top="65"
          left="0"
          width="292">
 	 <panel
@@ -175,7 +199,7 @@
        height="102"
        layout="topleft"
        left="123"
-       top="62"
+       top="90"
        max_length="512"
        name="sl_description_edit"
        width="157"
@@ -232,7 +256,7 @@
        layout="topleft"
        left="123"
        max_length="512"
-       top="195"
+       top="223"
        name="fl_description_edit"
        width="157"
        word_wrap="true">
diff --git a/indra/newview/skins/default/xui/en/panel_profile_view.xml b/indra/newview/skins/default/xui/en/panel_profile_view.xml
index 36b883e5f2..82e7eb4a47 100644
--- a/indra/newview/skins/default/xui/en/panel_profile_view.xml
+++ b/indra/newview/skins/default/xui/en/panel_profile_view.xml
@@ -8,36 +8,36 @@
  name="panel_target_profile"
  left="0"
  width="333">
-    <string
-     name="status_online">
-        Online
-    </string>
-    <string
-     name="status_offline">
-        Offline
-    </string>
-    <button
-     follows="top|left"
-     height="24"
-     image_hover_unselected="BackButton_Over"
-     image_pressed="BackButton_Press"
-     image_unselected="BackButton_Off"
-     layout="topleft"
-     name="back"
-     left="10"
-     tab_stop="false"
-     top="2"
-     width="30" />
-    <text
-     top="10" 
-     follows="top|left"
-     height="13"
-     layout="topleft"
-     left="45"
-     name="user_label"
-     text_color="LtGray"
-     value="Display Name:"
-     width="80" />
+  <string
+   name="status_online">
+    Online
+  </string>
+  <string
+   name="status_offline">
+    Offline
+  </string>
+  <button
+   follows="top|left"
+   height="24"
+   image_hover_unselected="BackButton_Over"
+   image_pressed="BackButton_Press"
+   image_unselected="BackButton_Off"
+   layout="topleft"
+   name="back"
+   left="10"
+   tab_stop="false"
+   top="2"
+   width="30" />
+  <text
+   top="10"
+   follows="top|left"
+   height="13"
+   layout="topleft"
+   left="45"
+   name="user_label"
+   text_color="LtGray"
+   value="Display Name:"
+   width="80" />
   <text
    follows="top|left"
    halign="right"
@@ -49,86 +49,86 @@
    top_delta="0"
    value="Online"
    width="150" />
-     <text
-      follows="top|left|right"
-      font="SansSerifBigBold"
-      height="29"
-      layout="topleft"
-      left="47"
-      name="user_name_small"
-      text_color="LtGray"
-      top="22"
-      value="Jack oh look at me this is a super duper long name"
-      use_ellipses="true"
-      word_wrap="true" 
-      visible="false" 
-      width="275" />
-     <text
-      follows="top|left|right"
-      font="SansSerifHugeBold"
-      height="27"
-      layout="topleft"
-      left="47"
-      name="user_name"
-      text_color="LtGray"
-      top="25"
-      value="Jack Linden"
-      visible="true" 
-      use_ellipses="true"
-      width="275" />
-    <text
-     follows="top|left"
-     height="13"
+  <text
+   follows="top|left|right"
+   font="SansSerifBigBold"
+   height="29"
+   layout="topleft"
+   left="45"
+   name="user_name_small"
+   text_color="LtGray"
+   top="22"
+   value="Jack oh look at me this is a super duper long name"
+   use_ellipses="true"
+   word_wrap="true"
+   visible="false"
+   width="275" />
+  <text
+   follows="top|left|right"
+   font="SansSerifHugeBold"
+   height="27"
+   layout="topleft"
+   left="45"
+   name="user_name"
+   text_color="LtGray"
+   top="25"
+   value="Jack Linden"
+   visible="true"
+   use_ellipses="true"
+   width="275" />
+  <text
+   follows="top|left"
+   height="13"
+   layout="topleft"
+   left="45"
+   name="user_label"
+   text_color="LtGray"
+   value="Username:"
+   width="70" />
+  <text
+   follows="top|left"
+   height="17"
+   layout="topleft"
+   left_pad="0"
+   name="user_slid"
+   text_color="EmphasisColor"
+   font="SansSerifBold"
+   top_delta="-2"
+   value="Jack Linden"
+   width="120" />
+  <tab_container
+   follows="all"
+   height="491"
+   halign="center"
+   layout="topleft"
+   left="5"
+   min_width="333"
+   name="tabs"
+   tab_min_width="80"
+   tab_height="30"
+   tab_position="top"
+   top_pad="5"
+   width="317">
+    <panel
+     class="panel_profile"
+     filename="panel_profile.xml"
+     label="PROFILE"
      layout="topleft"
-     left="45"
-     name="user_label"
-     text_color="LtGray"
-     value="Username:"
-     width="70" />
-    <text
-     follows="top|left"
-     height="17"
+     help_topic="profile_profile_tab"
+     name="panel_profile" />
+    <panel
+     class="panel_picks"
+     filename="panel_picks.xml"
+     label="PICKS"
      layout="topleft"
-     left_pad="0"
-     name="user_slid"
-     text_color="EmphasisColor"
-     font="SansSerifBold"
-     top_delta="-2" 
-     value="Jack Linden"
-     width="120" />
-    <tab_container
-     follows="all"
-     height="515"
-     halign="center"
+     help_topic="profile_picks_tab"
+     name="panel_picks" />
+    <panel
+     class="panel_notes"
+     filename="panel_notes.xml"
+     label="NOTES &amp; PRIVACY"
      layout="topleft"
-     left="5"
-     min_width="333"
-     name="tabs"
-     tab_min_width="80"
-     tab_height="30"
-     tab_position="top"
-     top_pad="5"
-     width="317"> 
-        <panel
-         class="panel_profile"
-         filename="panel_profile.xml"
-         label="PROFILE"
-         layout="topleft"
-         help_topic="profile_profile_tab"
-         name="panel_profile" />
-        <panel
-         class="panel_picks"
-         filename="panel_picks.xml"
-         label="PICKS"
-         layout="topleft"
-         help_topic="profile_picks_tab"
-         name="panel_picks" />
-        <panel
-         class="panel_notes"
-         filename="panel_notes.xml"
-         label="NOTES &amp; PRIVACY"
-         layout="topleft"
-         help_topic="profile_notes_tab"
-         name="panel_notes" />
-    </tab_container>
+     help_topic="profile_notes_tab"
+     name="panel_notes" />
+  </tab_container>
 </panel>
-- 
cgit v1.2.3


From 32b492f7d3d0888c45ddea07bc6d541413fcdbc3 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Fri, 24 Sep 2010 14:05:01 -0700
Subject: fixed set display name line editor

---
 indra/newview/skins/default/xui/en/notifications.xml | 3 ---
 1 file changed, 3 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 11cded4646..895c665290 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -3200,9 +3200,6 @@ You are no longer frozen.
       <input name="display_name" max_length_chars="31" type="text">
 [DISPLAY_NAME]
       </input>
-      <input name="display_name_repeat" max_length_chars="31" type="text">
-        [DISPLAY_NAME]
-      </input>
       <button
        default="true"
        index="0"
-- 
cgit v1.2.3


From 816d5201be3e6fc8deefbbd21b14cb3a8724e235 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Fri, 24 Sep 2010 15:18:02 -0700
Subject: Adding copy to clipboard button for display names in profile panel

---
 indra/newview/skins/default/textures/icons/Copy.png   | Bin 0 -> 481 bytes
 indra/newview/skins/default/textures/textures.xml     |   3 ++-
 .../skins/default/xui/en/panel_profile_view.xml       |  18 +++++++++++++++---
 3 files changed, 17 insertions(+), 4 deletions(-)
 create mode 100644 indra/newview/skins/default/textures/icons/Copy.png

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/textures/icons/Copy.png b/indra/newview/skins/default/textures/icons/Copy.png
new file mode 100644
index 0000000000..d45134e9dd
Binary files /dev/null and b/indra/newview/skins/default/textures/icons/Copy.png differ
diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index 35309cbaf8..d7375806a9 100644
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -110,7 +110,8 @@ with the same filename but different name
   <texture name="ComboButton_Off" file_name="widgets/ComboButton_Off.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
   <texture name="ComboButton_UpOff" file_name="widgets/ComboButton_UpOff.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
   <texture name="Container" file_name="containers/Container.png" preload="false" />
-
+  <texture name="Copy" file_name="icons/Copy.png" preload="false" />
+  
   <texture name="DisclosureArrow_Opened_Off" file_name="widgets/DisclosureArrow_Opened_Off.png" preload="true" />
 
   <texture name="DownArrow" file_name="bottomtray/DownArrow.png" preload="false" />
diff --git a/indra/newview/skins/default/xui/en/panel_profile_view.xml b/indra/newview/skins/default/xui/en/panel_profile_view.xml
index 82e7eb4a47..47a0c44dea 100644
--- a/indra/newview/skins/default/xui/en/panel_profile_view.xml
+++ b/indra/newview/skins/default/xui/en/panel_profile_view.xml
@@ -39,11 +39,11 @@
    value="Display Name:"
    width="80" />
   <text
-   follows="top|left"
+   follows="top|right"
    halign="right"
    height="13"
    layout="topleft"
-   left="165"
+   right="-15"
    name="status"
    text_color="LtGray_50"
    top_delta="0"
@@ -75,7 +75,18 @@
    value="Jack Linden"
    visible="true"
    use_ellipses="true"
-   width="275" />
+   width="275" /> 
+  <button
+         name="copy_to_clipboard"
+         layout="topleft"
+         follows="top|right"
+         image_overlay="Copy"
+         top_delta="0"
+         right="-15"
+         height="21"
+         width="21"
+         tab_stop="false" 
+         tool_tip="Copy to Clipboard"/>
   <text
    follows="top|left"
    height="13"
@@ -83,6 +94,7 @@
    left="45"
    name="user_label"
    text_color="LtGray"
+   top_pad="10" 
    value="Username:"
    width="70" />
   <text
-- 
cgit v1.2.3


From eb932c0e73795dc27c6d31b9962627fd65042666 Mon Sep 17 00:00:00 2001
From: Sergei Litovchuk <slitovchuk@productengine.com>
Date: Mon, 27 Sep 2010 16:03:31 +0300
Subject: STORM-190 FIXED text truncations in floater EDIT CONTENT PERMISSIONS.
 - Increased overall floater width. - Increased permissions columns width. -
 Increased 'Check All' and 'Clear' buttons width. - Applied text wrapping to
 permissions labels. - Removed 'NextOwnerLabel' dimensions overrides for
 German. - Removed 'Check All' and 'Clear' buttons dimensions overrides for
 Polish.

---
 .../skins/default/xui/de/floater_bulk_perms.xml    |  2 +-
 .../skins/default/xui/en/floater_bulk_perms.xml    | 37 ++++++++++++----------
 .../skins/default/xui/pl/floater_bulk_perms.xml    |  4 +--
 3 files changed, 23 insertions(+), 20 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/de/floater_bulk_perms.xml b/indra/newview/skins/default/xui/de/floater_bulk_perms.xml
index d3f0d6d78f..8f99fc933c 100644
--- a/indra/newview/skins/default/xui/de/floater_bulk_perms.xml
+++ b/indra/newview/skins/default/xui/de/floater_bulk_perms.xml
@@ -43,7 +43,7 @@
 		Jeder:
 	</text>
 	<check_box label="Kopieren" name="everyone_copy"/>
-	<text name="NextOwnerLabel" top="160" left="10" width="200">
+	<text name="NextOwnerLabel">
 		Nächster Eigentümer:
 	</text>
 	<check_box label="Bearbeiten" name="next_owner_modify"/>
diff --git a/indra/newview/skins/default/xui/en/floater_bulk_perms.xml b/indra/newview/skins/default/xui/en/floater_bulk_perms.xml
index d007ceff98..457142f11c 100644
--- a/indra/newview/skins/default/xui/en/floater_bulk_perms.xml
+++ b/indra/newview/skins/default/xui/en/floater_bulk_perms.xml
@@ -7,7 +7,7 @@
  name="floaterbulkperms"
  help_topic="floaterbulkperms"
  title="EDIT CONTENT PERMISSIONS"
- width="270">
+ width="300">
     <floater.string
      name="nothing_to_modify_text">
         Selection contains no editable contents.
@@ -164,7 +164,7 @@
      label="√ All"
      left="180"
      top="26"
-     width="70">
+     width="115">
       <button.commit_callback
        function="BulkPermission.CheckAll" />
     </button>
@@ -176,7 +176,7 @@
      layout="topleft"
      top_pad="8"
      name="check_none"
-     width="70" >
+     width="115" >
       <button.commit_callback
        function="BulkPermission.UncheckAll"/>
     </button>
@@ -199,10 +199,11 @@
        length="1"
       follows="left|top"
       layout="topleft"
-       height="16"
+       height="28"
      left="10"
       name="GroupLabel"
-       width="88">
+      width="92"
+      word_wrap="true">
        Group:
     </text>
     <check_box
@@ -212,17 +213,18 @@
      layout="topleft"
      top_pad="0"
      name="share_with_group"
-     width="88" />
+     width="92" />
         <text
      type="string"
      length="1"
      follows="left|top"
-     height="16"
+     height="28"
      layout="topleft"
      name="AnyoneLabel"
-     left="100"
+     left="104"
      top="110"
-     width="88">
+     width="92"
+     word_wrap="true">
         Anyone:
     </text>
     <check_box
@@ -232,17 +234,18 @@
      layout="topleft"
      top_pad="0"
      name="everyone_copy"
-     width="88" />
+     width="92" />
     <text
      type="string"
      length="1"
      follows="left|top"
-     height="16"
+     height="28"
      layout="topleft"
      name="NextOwnerLabel"
      top="110"
-     left="185"
-     width="88">
+     left="189"
+     width="92"
+     word_wrap="true">
         Next owner:
     </text>
     <check_box
@@ -252,7 +255,7 @@
      layout="topleft"
      name="next_owner_modify"
      top_pad="0"
-     width="83" />
+     width="92" />
     <check_box
      control_name="BulkChangeNextOwnerCopy"
      height="16"
@@ -260,7 +263,7 @@
      layout="topleft"
      top_pad="0"
      name="next_owner_copy"
-     width="88">
+     width="92">
       <check_box.commit_callback
        function="BulkPermission.CommitCopy"/>
      </check_box>
@@ -274,7 +277,7 @@
      layout="topleft"
      name="next_owner_transfer"
      tool_tip="Next owner can give away or resell this object"
-     width="106" />
+     width="92" />
     <scroll_list
      enabled="false"
      follows="all"
@@ -289,7 +292,7 @@
      height="23"
      label="OK"
      layout="topleft"
-     left="65"
+     left="95"
      name="apply"
      top_pad="10"
      width="90">
diff --git a/indra/newview/skins/default/xui/pl/floater_bulk_perms.xml b/indra/newview/skins/default/xui/pl/floater_bulk_perms.xml
index 0f49061002..1c24e0b35e 100644
--- a/indra/newview/skins/default/xui/pl/floater_bulk_perms.xml
+++ b/indra/newview/skins/default/xui/pl/floater_bulk_perms.xml
@@ -30,8 +30,8 @@
 	<icon name="icon_sound" tool_tip="Dźwięki"/>
 	<check_box label="Tekstury" name="check_texture"/>
 	<icon name="icon_texture" tool_tip="Tekstury"/>
-	<button font="SansSerifSmall" label="√ Wszystkie" label_selected="Wszystkie" name="check_all" width="115"/>
-	<button font="SansSerifSmall" label="Żadne" label_selected="Żadne" name="check_none" width="115"/>
+	<button font="SansSerifSmall" label="√ Wszystkie" label_selected="Wszystkie" name="check_all"/>
+	<button font="SansSerifSmall" label="Żadne" label_selected="Żadne" name="check_none"/>
 	<text name="newperms">
 		Nowe prawa zawartości
 	</text>
-- 
cgit v1.2.3


From 22228896ee2ce6f20d67ce2c4a415fcd40d6b6e0 Mon Sep 17 00:00:00 2001
From: Paul Guslisty <pguslisty@productengine.com>
Date: Mon, 27 Sep 2010 17:12:14 +0300
Subject: STORM-228 FIXED 'Loading / Done' text is cropped on the bottom of
 'Find' floater

-Increased space between bottom of the floater and bottom of the web browser (inside floater), so that 'Loading / Done' text
 between bottom of the web browser and bottom of the floater won't be cropped
---
 indra/newview/skins/default/xui/en/floater_help_browser.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/floater_help_browser.xml b/indra/newview/skins/default/xui/en/floater_help_browser.xml
index 214fb6ce54..470997d28b 100644
--- a/indra/newview/skins/default/xui/en/floater_help_browser.xml
+++ b/indra/newview/skins/default/xui/en/floater_help_browser.xml
@@ -35,7 +35,7 @@
          user_resize="false"
          width="620">
             <web_browser
-             bottom="-11"
+             bottom="-25"
              follows="left|right|top|bottom"
              layout="topleft"
              left="0"
-- 
cgit v1.2.3


From d129d6ee23995d0a5e89aa71e56d6ed6aa95761e Mon Sep 17 00:00:00 2001
From: Kelly Washington <kelly@lindenlab.com>
Date: Fri, 24 Sep 2010 15:57:17 -0700
Subject: VWR-21377 Script editor ctrl-f fix. let some LLViews handle shortcut
 keys if they want. reviewed with ambroff

---
 indra/newview/llpreviewscript.h  |  2 ++
 indra/newview/llviewerwindow.cpp | 11 ++++++++++-
 2 files changed, 12 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llpreviewscript.h b/indra/newview/llpreviewscript.h
index ef4f0d9c20..3207da4e00 100644
--- a/indra/newview/llpreviewscript.h
+++ b/indra/newview/llpreviewscript.h
@@ -87,6 +87,8 @@ public:
 	static void		onBtnInsertSample(void*);
 	static void		onBtnInsertFunction(LLUICtrl*, void*);
 
+	virtual bool	hasMenus() const { return true; }
+
 private:
 	void		onBtnHelp();
 	void		onBtnDynamicHelp();
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 0a3a8993ec..5a069547e4 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -2134,10 +2134,20 @@ BOOL LLViewerWindow::handleKey(KEY key, MASK mask)
 		return TRUE;
 	}
 
+	LLFocusableElement* keyboard_focus = gFocusMgr.getKeyboardFocus();
+
 	// give menus a chance to handle modified (Ctrl, Alt) shortcut keys before current focus 
 	// as long as focus isn't locked
 	if (mask & (MASK_CONTROL | MASK_ALT) && !gFocusMgr.focusLocked())
 	{
+		// Check the current floater's menu first, if it has one.
+		if (gFocusMgr.keyboardFocusHasMenus()
+			&& keyboard_focus 
+			&& keyboard_focus->handleKey(key,mask,FALSE))
+		{
+			return TRUE;
+		}
+
 		if ((gMenuBarView && gMenuBarView->handleAcceleratorKey(key, mask))
 			||(gLoginMenuBarView && gLoginMenuBarView->handleAcceleratorKey(key, mask)))
 		{
@@ -2173,7 +2183,6 @@ BOOL LLViewerWindow::handleKey(KEY key, MASK mask)
 	}
 
 	// Traverses up the hierarchy
-	LLFocusableElement* keyboard_focus = gFocusMgr.getKeyboardFocus();
 	if( keyboard_focus )
 	{
 		LLLineEditor* chat_editor = LLBottomTray::instanceExists() ? LLBottomTray::getInstance()->getNearbyChatBar()->getChatBox() : NULL;
-- 
cgit v1.2.3


From 92013d1212fdd2f082f1fdf07350e8e319b2fd75 Mon Sep 17 00:00:00 2001
From: Kelly Washington <kelly@lindenlab.com>
Date: Fri, 24 Sep 2010 16:31:43 -0700
Subject: VWR-21377 Script editor ctrl-f fix. change to better / more
 consistent naming

---
 indra/newview/llpreviewscript.h  | 2 +-
 indra/newview/llviewerwindow.cpp | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llpreviewscript.h b/indra/newview/llpreviewscript.h
index 3207da4e00..f4b31e5962 100644
--- a/indra/newview/llpreviewscript.h
+++ b/indra/newview/llpreviewscript.h
@@ -87,7 +87,7 @@ public:
 	static void		onBtnInsertSample(void*);
 	static void		onBtnInsertFunction(LLUICtrl*, void*);
 
-	virtual bool	hasMenus() const { return true; }
+	virtual bool	hasAccelerators() const { return true; }
 
 private:
 	void		onBtnHelp();
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 5a069547e4..14188e6d2e 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -2141,7 +2141,7 @@ BOOL LLViewerWindow::handleKey(KEY key, MASK mask)
 	if (mask & (MASK_CONTROL | MASK_ALT) && !gFocusMgr.focusLocked())
 	{
 		// Check the current floater's menu first, if it has one.
-		if (gFocusMgr.keyboardFocusHasMenus()
+		if (gFocusMgr.keyboardFocusHasAccelerators()
 			&& keyboard_focus 
 			&& keyboard_focus->handleKey(key,mask,FALSE))
 		{
-- 
cgit v1.2.3


From c40a1534d4ca061937e4ed80e64fbea6f4ffad10 Mon Sep 17 00:00:00 2001
From: Kelly Washington <kelly@lindenlab.com>
Date: Fri, 24 Sep 2010 16:54:28 -0700
Subject: VWR-21377 Script editor ctrl-f fix. make ctrl-f work from the script
 search box itself.

---
 indra/newview/llpreviewscript.cpp | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp
index d280cf1625..60c030e95f 100644
--- a/indra/newview/llpreviewscript.cpp
+++ b/indra/newview/llpreviewscript.cpp
@@ -138,6 +138,9 @@ public:
 	LLScriptEdCore* getEditorCore() { return mEditorCore; }
 	static LLFloaterScriptSearch* getInstance() { return sInstance; }
 
+	virtual bool hasAccelerators() const;
+	virtual BOOL handleKeyHere(KEY key, MASK mask);
+
 private:
 
 	LLScriptEdCore* mEditorCore;
@@ -242,7 +245,24 @@ void LLFloaterScriptSearch::handleBtnReplaceAll()
 	mEditorCore->mEditor->replaceTextAll(getChild<LLUICtrl>("search_text")->getValue().asString(), getChild<LLUICtrl>("replace_text")->getValue().asString(), caseChk->get());
 }
 
+bool LLFloaterScriptSearch::hasAccelerators() const
+{
+	if (mEditorCore)
+	{
+		return mEditorCore->hasAccelerators();
+	}
+	return FALSE;
+}
+
+BOOL LLFloaterScriptSearch::handleKeyHere(KEY key, MASK mask)
+{
+	if (mEditorCore)
+	{
+		return mEditorCore->handleKeyHere(key, mask);
+	}
 
+	return FALSE;
+}
 
 /// ---------------------------------------------------------------------------
 /// LLScriptEdCore
-- 
cgit v1.2.3


From 7cd8557ff7008580eedda5b5131a2632dbe6206b Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Mon, 27 Sep 2010 13:36:07 +0100
Subject: hacky hacky to figure out the call flow.

---
 indra/newview/llnotificationmanager.cpp              | 3 ++-
 indra/newview/llnotificationscripttextboxhandler.cpp | 2 +-
 2 files changed, 3 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llnotificationmanager.cpp b/indra/newview/llnotificationmanager.cpp
index 6988227128..cd0d323741 100644
--- a/indra/newview/llnotificationmanager.cpp
+++ b/indra/newview/llnotificationmanager.cpp
@@ -73,7 +73,8 @@ void LLNotificationManager::init()
 	LLNotifications::instance().getChannel("Hints")->connectChanged(boost::bind(&LLHintHandler::processNotification, LLHintHandler::getInstance(), _1));
 	LLNotifications::instance().getChannel("Browser")->connectChanged(boost::bind(&LLBrowserNotification::processNotification, LLBrowserNotification::getInstance(), _1));
 
-	mNotifyHandlers["notify"] = boost::shared_ptr<LLEventHandler>(new LLScriptHandler(NT_NOTIFY, LLSD()));
+	//mNotifyHandlers["notify"] = boost::shared_ptr<LLEventHandler>(new LLScriptHandler(NT_NOTIFY, LLSD()));
+	mNotifyHandlers["notify"] = boost::shared_ptr<LLEventHandler>(new LLScriptTextboxHandler(NT_NOTIFY, LLSD()));
 	mNotifyHandlers["notifytip"] =  boost::shared_ptr<LLEventHandler>(new LLTipHandler(NT_NOTIFY, LLSD()));
 	mNotifyHandlers["groupnotify"] = boost::shared_ptr<LLEventHandler>(new LLGroupHandler(NT_GROUPNOTIFY, LLSD()));
 	mNotifyHandlers["alert"] = boost::shared_ptr<LLEventHandler>(new LLAlertHandler(NT_ALERT, LLSD()));
diff --git a/indra/newview/llnotificationscripttextboxhandler.cpp b/indra/newview/llnotificationscripttextboxhandler.cpp
index 8ee32575e7..9556501c42 100644
--- a/indra/newview/llnotificationscripttextboxhandler.cpp
+++ b/indra/newview/llnotificationscripttextboxhandler.cpp
@@ -96,7 +96,7 @@ bool LLScriptTextboxHandler::processNotification(const LLSD& notify)
 			LLHandlerUtil::logToIMP2P(notification);
 		}
 
-		if(SCRIPT_DIALOG == notification->getName() || SCRIPT_DIALOG_GROUP == notification->getName() || SCRIPT_LOAD_URL == notification->getName())
+		if(0)//(SCRIPT_DIALOG == notification->getName() || SCRIPT_DIALOG_GROUP == notification->getName() || SCRIPT_LOAD_URL == notification->getName())
 		{
 			LLScriptFloaterManager::getInstance()->onAddNotification(notification->getID());
 		}
-- 
cgit v1.2.3


From 9a72f91c5ed4b78f4f131a4ae80338566b863f11 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Mon, 27 Sep 2010 15:40:02 -0700
Subject: hooked up copy to clipboard button

---
 indra/newview/llpanelprofileview.cpp | 10 +++++++++-
 indra/newview/llpanelprofileview.h   |  1 +
 2 files changed, 10 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llpanelprofileview.cpp b/indra/newview/llpanelprofileview.cpp
index dfbd355247..bff589c392 100644
--- a/indra/newview/llpanelprofileview.cpp
+++ b/indra/newview/llpanelprofileview.cpp
@@ -30,6 +30,7 @@
 
 #include "llavatarconstants.h"
 #include "llavatarnamecache.h"	// IDEVO
+#include "llclipboard.h"
 #include "lluserrelations.h"
 
 #include "llavatarpropertiesprocessor.h"
@@ -129,7 +130,8 @@ BOOL LLPanelProfileView::postBuild()
 	mStatusText->setVisible(false);
 
 	childSetCommitCallback("back",boost::bind(&LLPanelProfileView::onBackBtnClick,this),NULL);
-	
+	childSetCommitCallback("copy_to_clipboard",boost::bind(&LLPanelProfileView::onCopyToClipboard,this),NULL);
+		
 	return TRUE;
 }
 
@@ -149,6 +151,12 @@ void LLPanelProfileView::onBackBtnClick()
 	}
 }
 
+void LLPanelProfileView::onCopyToClipboard()
+{
+	std::string name = getChild<LLUICtrl>("user_name")->getValue().asString() + " (" + getChild<LLUICtrl>("user_slid")->getValue().asString() + ")";
+	gClipboard.copyFromString(utf8str_to_wstring(name));
+}
+
 bool LLPanelProfileView::isGrantedToSeeOnlineStatus()
 {
 	const LLRelationship* relationship = LLAvatarTracker::instance().getBuddyInfo(getAvatarId());
diff --git a/indra/newview/llpanelprofileview.h b/indra/newview/llpanelprofileview.h
index 153496bfd0..c6d921fdc4 100644
--- a/indra/newview/llpanelprofileview.h
+++ b/indra/newview/llpanelprofileview.h
@@ -74,6 +74,7 @@ public:
 protected:
 
 	void onBackBtnClick();
+	void onCopyToClipboard();
 	bool isGrantedToSeeOnlineStatus();
 
 	/**
-- 
cgit v1.2.3


From 7fc48fb1259d3dbceed5248d8ccda39048d6ba8d Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Mon, 27 Sep 2010 15:40:22 -0700
Subject: Fixed username clipping issues in profile

---
 indra/newview/skins/default/xui/en/panel_edit_profile.xml | 3 ++-
 indra/newview/skins/default/xui/en/panel_profile_view.xml | 9 +++++----
 2 files changed, 7 insertions(+), 5 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_edit_profile.xml b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
index caf5cb8817..acbc6ff7ad 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
@@ -138,8 +138,9 @@
        text_color="EmphasisColor"
         font="SansSerifBold"
        top_delta="-2"
+       use_ellipses="true" 
        value="hamilton.linden"
-       width="150" />
+       width="215" />
      <panel
        name="lifes_images_panel"
          follows="left|top|right"
diff --git a/indra/newview/skins/default/xui/en/panel_profile_view.xml b/indra/newview/skins/default/xui/en/panel_profile_view.xml
index 47a0c44dea..b0a175db0d 100644
--- a/indra/newview/skins/default/xui/en/panel_profile_view.xml
+++ b/indra/newview/skins/default/xui/en/panel_profile_view.xml
@@ -62,7 +62,7 @@
    use_ellipses="true"
    word_wrap="true"
    visible="false"
-   width="275" />
+   width="255" />
   <text
    follows="top|left|right"
    font="SansSerifHugeBold"
@@ -75,7 +75,7 @@
    value="Jack Linden"
    visible="true"
    use_ellipses="true"
-   width="275" /> 
+   width="258" /> 
   <button
          name="copy_to_clipboard"
          layout="topleft"
@@ -106,8 +106,9 @@
    text_color="EmphasisColor"
    font="SansSerifBold"
    top_delta="-2"
-   value="Jack Linden"
-   width="120" />
+   use_ellipses="true"
+   value="jack.linden"
+   width="215" />
   <tab_container
    follows="all"
    height="491"
-- 
cgit v1.2.3


From 5db02993ef806d2d73ae3e3fde89c3405132a348 Mon Sep 17 00:00:00 2001
From: Wolfpup Lowenhar <wolfpup67@earthlink.net>
Date: Mon, 27 Sep 2010 20:20:09 -0400
Subject: [STORM-255] As a user I would like to disable incoming Group/IM
 toasts from showing up. 	This will also take care of STORM-221 since
 the person that would be affected by 	the toast cha now disable them.

---
 indra/newview/app_settings/settings.xml            | 22 +++++++++++++
 indra/newview/llimview.cpp                         | 14 +++++++++
 .../default/xui/en/panel_preferences_chat.xml      | 36 ++++++++++++++++++++--
 3 files changed, 69 insertions(+), 3 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 33f5482e50..02e9a10fde 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -2567,6 +2567,28 @@
       <key>Value</key>
       <integer>1</integer>
     </map>
+    <key>DisableGroupToast</key>
+    <map>
+      <key>Comment</key>
+      <string>Disable Incoming Group Toasts</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>DisableIMToast</key>
+    <map>
+      <key>Comment</key>
+      <string>Disable Incoming IM Toasts</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>DisplayAvatarAgentTarget</key>
     <map>
       <key>Comment</key>
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index c865dcf9a3..286231523a 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -131,6 +131,20 @@ void toast_callback(const LLSD& msg){
 		return;
 	}
 
+	// *NOTE Skip toasting if the user disable it in preferences/debug settings ~Alexandrea
+	LLIMModel::LLIMSession* session = LLIMModel::instance().findIMSession(
+				msg["session_id"]);
+	if (gSavedSettings.getBOOL("DisableGroupToast")
+			&& session->isGroupSessionType())
+	{
+		return;
+	}
+	if (gSavedSettings.getBOOL("DisableIMToast")
+			&& !session->isGroupSessionType())
+	{
+		return;
+	}
+
 	// Skip toasting if we have open window of IM with this session id
 	LLIMFloater* open_im_floater = LLIMFloater::findInstance(msg["session_id"]);
 	if (open_im_floater && open_im_floater->getVisible())
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml
index 31e160ec33..3adc174aaf 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml
@@ -343,7 +343,7 @@
      left="30"
      height="20"
      width="170"
-     top_pad="14">
+     top_pad="7">
      Show IMs in:
     </text>
     <text
@@ -359,8 +359,8 @@
       (requires restart)
       </text>
     <radio_group
+     follows="left|top"
      height="30"
-     layout="topleft"
      left="40"
      control_name="ChatWindow"
      name="chat_window"
@@ -386,6 +386,36 @@
       top_pad="5"
       width="150" />
     </radio_group>
+    <text
+     name="disable_toast_label"
+     follows="left|top"
+     layout="topleft"
+     top_delta="-22" 
+     left="280" 
+     height="10"
+     width="180">
+      Disable incoming notifications:
+      </text>
+    <check_box
+     control_name="DisableGroupToast"
+     name="DisableGroupToast"
+     label="Group chats" 
+     layout="topleft"
+     top_delta="18" 
+     left="295" 
+     height="20"
+     tool_tip="Checking this will turn off Group Toasts poping up"
+     width="400" />
+    <check_box
+     control_name="DisableIMToast"
+     name="DisableIMToast"
+     label="Im chats" 
+     layout="topleft"
+     top_delta="22" 
+     left="295" 
+     height="20"
+     tool_tip="Checking this will turn off IM Chat Toasts poping up"
+     width="400" />
     <check_box
      control_name="TranslateChat"
      enabled="true"
@@ -488,4 +518,4 @@
          name="Korean"
          value="ko" />
     </combo_box>
-</panel>
+</panel>
\ No newline at end of file
-- 
cgit v1.2.3


From 393af9b02347f136818143db0e8b823755df0af9 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Tue, 28 Sep 2010 13:14:07 +0100
Subject: hack hack scratch scratch sketch sketch

---
 indra/newview/llnotificationmanager.cpp       |   4 +-
 indra/newview/llnotificationscripthandler.cpp |   2 +
 indra/newview/llscriptfloater.cpp             |  17 +-
 indra/newview/llscripttextboxfloater.cpp      | 576 ++++++++++++++++++++++++++
 indra/newview/llscripttextboxfloater.h        | 212 ++++++++++
 5 files changed, 805 insertions(+), 6 deletions(-)
 create mode 100644 indra/newview/llscripttextboxfloater.cpp
 create mode 100644 indra/newview/llscripttextboxfloater.h

(limited to 'indra/newview')

diff --git a/indra/newview/llnotificationmanager.cpp b/indra/newview/llnotificationmanager.cpp
index cd0d323741..3967117fc8 100644
--- a/indra/newview/llnotificationmanager.cpp
+++ b/indra/newview/llnotificationmanager.cpp
@@ -73,8 +73,8 @@ void LLNotificationManager::init()
 	LLNotifications::instance().getChannel("Hints")->connectChanged(boost::bind(&LLHintHandler::processNotification, LLHintHandler::getInstance(), _1));
 	LLNotifications::instance().getChannel("Browser")->connectChanged(boost::bind(&LLBrowserNotification::processNotification, LLBrowserNotification::getInstance(), _1));
 
-	//mNotifyHandlers["notify"] = boost::shared_ptr<LLEventHandler>(new LLScriptHandler(NT_NOTIFY, LLSD()));
-	mNotifyHandlers["notify"] = boost::shared_ptr<LLEventHandler>(new LLScriptTextboxHandler(NT_NOTIFY, LLSD()));
+	mNotifyHandlers["notify"] = boost::shared_ptr<LLEventHandler>(new LLScriptHandler(NT_NOTIFY, LLSD()));
+	//mNotifyHandlers["notify"] = boost::shared_ptr<LLEventHandler>(new LLScriptTextboxHandler(NT_NOTIFY, LLSD()));
 	mNotifyHandlers["notifytip"] =  boost::shared_ptr<LLEventHandler>(new LLTipHandler(NT_NOTIFY, LLSD()));
 	mNotifyHandlers["groupnotify"] = boost::shared_ptr<LLEventHandler>(new LLGroupHandler(NT_GROUPNOTIFY, LLSD()));
 	mNotifyHandlers["alert"] = boost::shared_ptr<LLEventHandler>(new LLAlertHandler(NT_ALERT, LLSD()));
diff --git a/indra/newview/llnotificationscripthandler.cpp b/indra/newview/llnotificationscripthandler.cpp
index 45590c3cdb..eed0bdc15d 100644
--- a/indra/newview/llnotificationscripthandler.cpp
+++ b/indra/newview/llnotificationscripthandler.cpp
@@ -97,10 +97,12 @@ bool LLScriptHandler::processNotification(const LLSD& notify)
 
 		if(SCRIPT_DIALOG == notification->getName() || SCRIPT_DIALOG_GROUP == notification->getName() || SCRIPT_LOAD_URL == notification->getName())
 		{
+			llwarns << "DUMB ROUTE" << llendl;
 			LLScriptFloaterManager::getInstance()->onAddNotification(notification->getID());
 		}
 		else
 		{
+			llwarns << "SMART ROUTE" << llendl;
 			LLToastNotifyPanel* notify_box = new LLToastNotifyPanel(notification);
 
 			LLToast::Params p;
diff --git a/indra/newview/llscriptfloater.cpp b/indra/newview/llscriptfloater.cpp
index 2334f0cde5..0f7223aaf0 100644
--- a/indra/newview/llscriptfloater.cpp
+++ b/indra/newview/llscriptfloater.cpp
@@ -37,6 +37,7 @@
 #include "llscreenchannel.h"
 #include "llsyswellwindow.h"
 #include "lltoastnotifypanel.h"
+#include "lltoastscripttextbox.h"
 #include "lltrans.h"
 #include "llviewerwindow.h"
 #include "llimfloater.h"
@@ -151,10 +152,18 @@ void LLScriptFloater::createForm(const LLUUID& notification_id)
 
 	// create new form
 	LLRect toast_rect = getRect();
-	// LLToastNotifyPanel will fit own content in vertical direction,
-	// but it needs an initial rect to properly calculate  its width
- 	// Use an initial rect of the script floater to make the floater window more configurable.
-	mScriptForm = new LLToastNotifyPanel(notification, toast_rect); 
+	if (isScriptTextBox())
+	{
+		mScriptForm = new LLToastScriptTextbox(notify, toast_rect);
+	}
+	else
+	{
+		// LLToastNotifyPanel will fit own content in vertical direction,
+		// but it needs an initial rect to properly calculate  its width
+		// Use an initial rect of the script floater to make the floater
+		// window more configurable.
+		mScriptForm = new LLToastNotifyPanel(notification, toast_rect); 
+	}
 	addChild(mScriptForm);
 
 	// position form on floater
diff --git a/indra/newview/llscripttextboxfloater.cpp b/indra/newview/llscripttextboxfloater.cpp
new file mode 100644
index 0000000000..0f7223aaf0
--- /dev/null
+++ b/indra/newview/llscripttextboxfloater.cpp
@@ -0,0 +1,576 @@
+/** 
+ * @file llscriptfloater.cpp
+ * @brief LLScriptFloater class definition
+ *
+ * $LicenseInfo:firstyear=2009&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+#include "llscriptfloater.h"
+#include "llagentcamera.h"
+
+#include "llbottomtray.h"
+#include "llchannelmanager.h"
+#include "llchiclet.h"
+#include "llfloaterreg.h"
+#include "llnotifications.h"
+#include "llnotificationsutil.h"
+#include "llscreenchannel.h"
+#include "llsyswellwindow.h"
+#include "lltoastnotifypanel.h"
+#include "lltoastscripttextbox.h"
+#include "lltrans.h"
+#include "llviewerwindow.h"
+#include "llimfloater.h"
+
+//////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+
+LLUUID notification_id_to_object_id(const LLUUID& notification_id)
+{
+	LLNotificationPtr notification = LLNotifications::getInstance()->find(notification_id);
+	if(notification)
+	{
+		return notification->getPayload()["object_id"].asUUID();
+	}
+	return LLUUID::null;
+}
+
+//////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+
+LLScriptFloater::LLScriptFloater(const LLSD& key)
+: LLDockableFloater(NULL, true, key)
+, mScriptForm(NULL)
+, mSaveFloaterPosition(false)
+{
+	setMouseDownCallback(boost::bind(&LLScriptFloater::onMouseDown, this));
+	setOverlapsScreenChannel(true);
+	mIsDockedStateForcedCallback = boost::bind(&LLAgentCamera::cameraMouselook, &gAgentCamera);
+}
+
+bool LLScriptFloater::toggle(const LLUUID& notification_id)
+{
+	LLScriptFloater* floater = LLFloaterReg::findTypedInstance<LLScriptFloater>("script_floater", notification_id);
+
+	// show existing floater
+	if(floater)
+	{
+		if(floater->getVisible())
+		{
+			floater->setVisible(false);
+			return false;
+		}
+		else
+		{
+			floater->setVisible(TRUE);
+			floater->setFocus(FALSE);
+		}
+	}
+	// create and show new floater
+	else
+	{
+		show(notification_id);
+	}
+
+	LLBottomTray::getInstance()->getChicletPanel()->setChicletToggleState(notification_id, true);
+	return true;
+}
+
+LLScriptFloater* LLScriptFloater::show(const LLUUID& notification_id)
+{
+	LLScriptFloater* floater = LLFloaterReg::getTypedInstance<LLScriptFloater>("script_floater", notification_id);
+	floater->setNotificationId(notification_id);
+	floater->createForm(notification_id);
+
+	//LLDialog(LLGiveInventory and LLLoadURL) should no longer steal focus (see EXT-5445)
+	floater->setAutoFocus(FALSE);
+
+	if(LLScriptFloaterManager::OBJ_SCRIPT == LLScriptFloaterManager::getObjectType(notification_id))
+	{
+		floater->setSavePosition(true);
+		floater->restorePosition();
+	}
+	else
+	{
+		floater->dockToChiclet(true);
+	}
+
+	//LLDialog(LLGiveInventory and LLLoadURL) should no longer steal focus (see EXT-5445)
+	LLFloaterReg::showTypedInstance<LLScriptFloater>("script_floater", notification_id, FALSE);
+
+	return floater;
+}
+
+void LLScriptFloater::setNotificationId(const LLUUID& id)
+{
+	mNotificationId = id;
+	// Lets save object id now while notification exists
+	mObjectId = notification_id_to_object_id(id);
+}
+
+void LLScriptFloater::getAllowedRect(LLRect& rect)
+{
+	rect = gViewerWindow->getWorldViewRectScaled();
+}
+
+void LLScriptFloater::createForm(const LLUUID& notification_id)
+{
+	// delete old form
+	if(mScriptForm)
+	{
+		removeChild(mScriptForm);
+		mScriptForm->die();
+	}
+
+	LLNotificationPtr notification = LLNotifications::getInstance()->find(notification_id);
+	if(NULL == notification)
+	{
+		return;
+	}
+
+	// create new form
+	LLRect toast_rect = getRect();
+	if (isScriptTextBox())
+	{
+		mScriptForm = new LLToastScriptTextbox(notify, toast_rect);
+	}
+	else
+	{
+		// LLToastNotifyPanel will fit own content in vertical direction,
+		// but it needs an initial rect to properly calculate  its width
+		// Use an initial rect of the script floater to make the floater
+		// window more configurable.
+		mScriptForm = new LLToastNotifyPanel(notification, toast_rect); 
+	}
+	addChild(mScriptForm);
+
+	// position form on floater
+	mScriptForm->setOrigin(0, 0);
+
+	// make floater size fit form size
+	LLRect panel_rect = mScriptForm->getRect();
+	toast_rect.setLeftTopAndSize(toast_rect.mLeft, toast_rect.mTop, panel_rect.getWidth(), panel_rect.getHeight() + getHeaderHeight());
+	setShape(toast_rect);
+}
+
+void LLScriptFloater::onClose(bool app_quitting)
+{
+	savePosition();
+
+	if(getNotificationId().notNull())
+	{
+		// we shouldn't kill notification on exit since it may be used as persistent.
+		if (app_quitting)
+		{
+			LLScriptFloaterManager::getInstance()->onRemoveNotification(getNotificationId());
+		}
+		else
+		{
+			LLScriptFloaterManager::getInstance()->removeNotification(getNotificationId());
+		}
+	}
+}
+
+void LLScriptFloater::setDocked(bool docked, bool pop_on_undock /* = true */)
+{
+	LLDockableFloater::setDocked(docked, pop_on_undock);
+
+	savePosition();
+
+	hideToastsIfNeeded();
+}
+
+void LLScriptFloater::setVisible(BOOL visible)
+{
+	LLDockableFloater::setVisible(visible);
+
+	hideToastsIfNeeded();
+
+	if(!visible)
+	{
+		LLIMChiclet* chiclet = LLBottomTray::getInstance()->getChicletPanel()->findChiclet<LLIMChiclet>(getNotificationId());
+		if(chiclet)
+		{
+			chiclet->setToggleState(false);
+		}
+	}
+}
+
+void LLScriptFloater::onMouseDown()
+{
+	if(getNotificationId().notNull())
+	{
+		// Remove new message icon
+		LLIMChiclet* chiclet = LLBottomTray::getInstance()->getChicletPanel()->findChiclet<LLIMChiclet>(getNotificationId());
+		if (chiclet == NULL)
+		{
+			llerror("Dock chiclet for LLScriptFloater doesn't exist", 0);
+		}
+		else
+		{
+			chiclet->setShowNewMessagesIcon(false);
+		}
+	}
+}
+
+void LLScriptFloater::savePosition()
+{
+	if(getSavePosition() && mObjectId.notNull())
+	{
+		LLScriptFloaterManager::FloaterPositionInfo fpi = {getRect(), isDocked()};
+		LLScriptFloaterManager::getInstance()->saveFloaterPosition(mObjectId, fpi);
+	}
+}
+
+void LLScriptFloater::restorePosition()
+{
+	LLScriptFloaterManager::FloaterPositionInfo fpi;
+	if(LLScriptFloaterManager::getInstance()->getFloaterPosition(mObjectId, fpi))
+	{
+		dockToChiclet(fpi.mDockState);
+		if(!fpi.mDockState)
+		{
+			// Un-docked floater is opened in 0,0, now move it to saved position
+			translate(fpi.mRect.mLeft - getRect().mLeft, fpi.mRect.mTop - getRect().mTop);
+		}
+	}
+	else
+	{
+		dockToChiclet(true);
+	}
+}
+
+void LLScriptFloater::onFocusLost()
+{
+	if(getNotificationId().notNull())
+	{
+		LLBottomTray::getInstance()->getChicletPanel()->setChicletToggleState(getNotificationId(), false);
+	}
+}
+
+void LLScriptFloater::onFocusReceived()
+{
+	// first focus will be received before setObjectId() call - don't toggle chiclet
+	if(getNotificationId().notNull())
+	{
+		LLBottomTray::getInstance()->getChicletPanel()->setChicletToggleState(getNotificationId(), true);
+	}
+}
+
+void LLScriptFloater::dockToChiclet(bool dock)
+{
+	if (getDockControl() == NULL)
+	{
+		LLChiclet* chiclet = LLBottomTray::getInstance()->getChicletPanel()->findChiclet<LLChiclet>(getNotificationId());
+		if (chiclet == NULL)
+		{
+			llwarns << "Dock chiclet for LLScriptFloater doesn't exist" << llendl;
+			return;
+		}
+		else
+		{
+			LLBottomTray::getInstance()->getChicletPanel()->scrollToChiclet(chiclet);
+		}
+
+		// Stop saving position while we dock floater
+		bool save = getSavePosition();
+		setSavePosition(false);
+
+		setDockControl(new LLDockControl(chiclet, this, getDockTongue(),
+			LLDockControl::TOP,  boost::bind(&LLScriptFloater::getAllowedRect, this, _1)));
+
+		setDocked(dock);
+
+		// Restore saving
+		setSavePosition(save);
+	}
+}
+
+void LLScriptFloater::hideToastsIfNeeded()
+{
+	using namespace LLNotificationsUI;
+
+	// find channel
+	LLScreenChannel* channel = dynamic_cast<LLScreenChannel*>(LLChannelManager::getInstance()->findChannelByID(
+		LLUUID(gSavedSettings.getString("NotificationChannelUUID"))));
+	// update notification channel state
+	if(channel)
+	{
+		channel->updateShowToastsState();
+		channel->redrawToasts();
+	}
+}
+
+//////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+
+void LLScriptFloaterManager::onAddNotification(const LLUUID& notification_id)
+{
+	if(notification_id.isNull())
+	{
+		llwarns << "Invalid notification ID" << llendl;
+		return;
+	}
+
+	// get scripted Object's ID
+	LLUUID object_id = notification_id_to_object_id(notification_id);
+	
+	// Need to indicate of "new message" for object chiclets according to requirements
+	// specified in the Message Bar design specification. See EXT-3142.
+	bool set_new_message = false;
+	EObjectType obj_type = getObjectType(notification_id);
+
+	// LLDialog can spawn only one instance, LLLoadURL and LLGiveInventory can spawn unlimited number of instances
+	if(OBJ_SCRIPT == obj_type)
+	{
+		// If an Object spawns more-than-one floater, only the newest one is shown. 
+		// The previous is automatically closed.
+		script_notification_map_t::const_iterator it = findUsingObjectId(object_id);
+		if(it != mNotifications.end())
+		{
+			LLIMChiclet* chiclet = LLBottomTray::getInstance()->getChicletPanel()->findChiclet<LLIMChiclet>(it->first);
+			if(chiclet)
+			{
+				// Pass the new_message icon state further.
+				set_new_message = chiclet->getShowNewMessagesIcon();
+			}
+
+			LLScriptFloater* floater = LLFloaterReg::findTypedInstance<LLScriptFloater>("script_floater", it->first);
+			if(floater)
+			{
+				// Generate chiclet with a "new message" indicator if a docked window was opened but not in focus. See EXT-3142.
+				set_new_message |= !floater->hasFocus();
+			}
+
+			removeNotification(it->first);
+		}
+	}
+
+	mNotifications.insert(std::make_pair(notification_id, object_id));
+
+	// Create inventory offer chiclet for offer type notifications
+	if( OBJ_GIVE_INVENTORY == obj_type )
+	{
+		LLBottomTray::instance().getChicletPanel()->createChiclet<LLInvOfferChiclet>(notification_id);
+	}
+	else
+	{
+		LLBottomTray::getInstance()->getChicletPanel()->createChiclet<LLScriptChiclet>(notification_id);
+	}
+
+	LLIMWellWindow::getInstance()->addObjectRow(notification_id, set_new_message);
+
+	LLSD data;
+	data["notification_id"] = notification_id;
+	data["new_message"] = set_new_message;
+	data["unread"] = 1; // each object has got only one floater
+	mNewObjectSignal(data);
+
+	toggleScriptFloater(notification_id, set_new_message);
+}
+
+void LLScriptFloaterManager::removeNotification(const LLUUID& notification_id)
+{
+	LLNotificationPtr notification = LLNotifications::instance().find(notification_id);
+	if (notification != NULL && !notification->isCancelled())
+	{
+		LLNotificationsUtil::cancel(notification);
+	}
+
+	onRemoveNotification(notification_id);
+}
+
+void LLScriptFloaterManager::onRemoveNotification(const LLUUID& notification_id)
+{
+	if(notification_id.isNull())
+	{
+		llwarns << "Invalid notification ID" << llendl;
+		return;
+	}
+
+	// remove related chiclet
+	LLBottomTray::getInstance()->getChicletPanel()->removeChiclet(notification_id);
+
+	LLIMWellWindow::getInstance()->removeObjectRow(notification_id);
+
+	mNotifications.erase(notification_id);
+
+	// close floater
+	LLScriptFloater* floater = LLFloaterReg::findTypedInstance<LLScriptFloater>("script_floater", notification_id);
+	if(floater)
+	{
+		floater->savePosition();
+		floater->setNotificationId(LLUUID::null);
+		floater->closeFloater();
+	}
+}
+
+void LLScriptFloaterManager::toggleScriptFloater(const LLUUID& notification_id, bool set_new_message)
+{
+	LLSD data;
+	data["notification_id"] = notification_id;
+	data["new_message"] = set_new_message;
+	mToggleFloaterSignal(data);
+
+	// toggle floater
+	LLScriptFloater::toggle(notification_id);
+}
+
+LLUUID LLScriptFloaterManager::findObjectId(const LLUUID& notification_id)
+{
+	script_notification_map_t::const_iterator it = mNotifications.find(notification_id);
+	if(mNotifications.end() != it)
+	{
+		return it->second;
+	}
+	return LLUUID::null;
+}
+
+LLUUID LLScriptFloaterManager::findNotificationId(const LLUUID& object_id)
+{
+	if(object_id.notNull())
+	{
+		script_notification_map_t::const_iterator it = findUsingObjectId(object_id);
+		if(mNotifications.end() != it)
+		{
+			return it->first;
+		}
+	}
+	return LLUUID::null;
+}
+
+// static
+LLScriptFloaterManager::EObjectType LLScriptFloaterManager::getObjectType(const LLUUID& notification_id)
+{
+	if(notification_id.isNull())
+	{
+		llwarns << "Invalid notification ID" << llendl;
+		return OBJ_UNKNOWN;
+	}
+
+	static const object_type_map TYPE_MAP = initObjectTypeMap();
+
+	LLNotificationPtr notification = LLNotificationsUtil::find(notification_id);
+	object_type_map::const_iterator it = TYPE_MAP.find(notification->getName());
+	if(it != TYPE_MAP.end())
+	{
+		return it->second;
+	}
+
+	llwarns << "Unknown object type" << llendl;
+	return OBJ_UNKNOWN;
+}
+
+// static
+std::string LLScriptFloaterManager::getObjectName(const LLUUID& notification_id)
+{
+	using namespace LLNotificationsUI;
+	LLNotificationPtr notification = LLNotifications::getInstance()->find(notification_id);
+	if(!notification)
+	{
+		llwarns << "Invalid notification" << llendl;
+		return LLStringUtil::null;
+	}
+
+	std::string text;
+
+	switch(LLScriptFloaterManager::getObjectType(notification_id))
+	{
+	case LLScriptFloaterManager::OBJ_SCRIPT:
+		text = notification->getSubstitutions()["TITLE"].asString();
+		break;
+	case LLScriptFloaterManager::OBJ_LOAD_URL:
+		text = notification->getSubstitutions()["OBJECTNAME"].asString();
+		break;
+	case LLScriptFloaterManager::OBJ_GIVE_INVENTORY:
+		text = notification->getSubstitutions()["OBJECTFROMNAME"].asString();
+		break;
+	default:
+		text = LLTrans::getString("object");
+		break;
+	}
+
+	return text;
+}
+
+//static
+LLScriptFloaterManager::object_type_map LLScriptFloaterManager::initObjectTypeMap()
+{
+	object_type_map type_map;
+	type_map["ScriptDialog"] = OBJ_SCRIPT;
+	type_map["ScriptDialogGroup"] = OBJ_SCRIPT;
+	type_map["LoadWebPage"] = OBJ_LOAD_URL;
+	type_map["ObjectGiveItem"] = OBJ_GIVE_INVENTORY;
+	return type_map;
+}
+
+LLScriptFloaterManager::script_notification_map_t::const_iterator LLScriptFloaterManager::findUsingObjectId(const LLUUID& object_id)
+{
+	script_notification_map_t::const_iterator it = mNotifications.begin();
+	for(; mNotifications.end() != it; ++it)
+	{
+		if(object_id == it->second)
+		{
+			return it;
+		}
+	}
+	return mNotifications.end();
+}
+
+void LLScriptFloaterManager::saveFloaterPosition(const LLUUID& object_id, const FloaterPositionInfo& fpi)
+{
+	if(object_id.notNull())
+	{
+		LLScriptFloaterManager::getInstance()->mFloaterPositions[object_id] = fpi;
+	}
+	else
+	{
+		llwarns << "Invalid object id" << llendl;
+	}
+}
+
+bool LLScriptFloaterManager::getFloaterPosition(const LLUUID& object_id, FloaterPositionInfo& fpi)
+{
+	floater_position_map_t::const_iterator it = mFloaterPositions.find(object_id);
+	if(LLScriptFloaterManager::getInstance()->mFloaterPositions.end() != it)
+	{
+		fpi = it->second;
+		return true;
+	}
+	return false;
+}
+
+void LLScriptFloaterManager::setFloaterVisible(const LLUUID& notification_id, bool visible)
+{
+	LLScriptFloater* floater = LLFloaterReg::findTypedInstance<LLScriptFloater>(
+		"script_floater", notification_id);
+	if(floater)
+	{
+		floater->setVisible(visible);
+	}
+}
+
+// EOF
diff --git a/indra/newview/llscripttextboxfloater.h b/indra/newview/llscripttextboxfloater.h
new file mode 100644
index 0000000000..b0ab725810
--- /dev/null
+++ b/indra/newview/llscripttextboxfloater.h
@@ -0,0 +1,212 @@
+/** 
+ * @file llscripttextboxfloater.h
+ * @brief LLScriptTextboxFloater class definition
+ *
+ * $LicenseInfo:firstyear=2009&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_SCRIPTTEXTBOXFLOATER_H
+#define LL_SCRIPTTEXTBOXFLOATER_H
+
+#include "lltransientdockablefloater.h"
+
+class LLToastNotifyPanel;
+
+/**
+ * Handles script notifications ("ScriptDialog" and "ScriptDialogGroup")
+ * and manages Script Floaters.
+ */
+class LLScriptTextboxFloaterManager : public LLSingleton<LLScriptTextboxFloaterManager>
+{
+	// *TODO
+	// LLScriptTextboxFloaterManager and LLScriptTextboxFloater will need some refactoring after we 
+	// know how script notifications should look like.
+public:
+
+	typedef enum e_object_type
+	{
+		OBJ_SCRIPT,
+		OBJ_GIVE_INVENTORY,
+		OBJ_LOAD_URL,
+
+		OBJ_UNKNOWN
+	}EObjectType;
+
+	/**
+	 * Handles new notifications.
+	 * Saves notification and object ids, removes old notification if needed, creates script chiclet
+	 * Note that one object can spawn one script floater.
+	 */
+	void onAddNotification(const LLUUID& notification_id);
+
+	/**
+	 * Removes notification.
+	 */
+	void removeNotification(const LLUUID& notification_id);
+
+	/**
+	 * Handles notification removal.
+	 * Removes script notification toast, removes script chiclet, closes script floater
+	 */
+	void onRemoveNotification(const LLUUID& notification_id);
+
+	/**
+	 * Toggles script floater.
+	 * Removes "new message" icon from chiclet and removes notification toast.
+	 */
+	void toggleScriptFloater(const LLUUID& object_id, bool set_new_message = false);
+
+	LLUUID findObjectId(const LLUUID& notification_id);
+
+	LLUUID findNotificationId(const LLUUID& object_id);
+
+	static EObjectType getObjectType(const LLUUID& notification_id);
+
+	static std::string getObjectName(const LLUUID& notification_id);
+
+	typedef boost::signals2::signal<void(const LLSD&)> object_signal_t;
+
+	boost::signals2::connection addNewObjectCallback(const object_signal_t::slot_type& cb) { return mNewObjectSignal.connect(cb); }
+	boost::signals2::connection addToggleObjectFloaterCallback(const object_signal_t::slot_type& cb) { return mToggleFloaterSignal.connect(cb); }
+
+	struct FloaterPositionInfo
+	{
+		LLRect mRect;
+		bool mDockState;
+	};
+
+	void saveFloaterPosition(const LLUUID& object_id, const FloaterPositionInfo& fpi);
+
+	bool getFloaterPosition(const LLUUID& object_id, FloaterPositionInfo& fpi);
+
+	void setFloaterVisible(const LLUUID& notification_id, bool visible);
+
+protected:
+
+	typedef std::map<std::string, EObjectType> object_type_map;
+
+	static object_type_map initObjectTypeMap();
+
+	// <notification_id, object_id>
+	typedef std::map<LLUUID, LLUUID> script_notification_map_t;
+
+	script_notification_map_t::const_iterator findUsingObjectId(const LLUUID& object_id);
+
+private:
+
+	script_notification_map_t mNotifications;
+
+	object_signal_t mNewObjectSignal;
+	object_signal_t mToggleFloaterSignal;
+
+	// <object_id, floater position>
+	typedef std::map<LLUUID, FloaterPositionInfo> floater_position_map_t;
+
+	floater_position_map_t mFloaterPositions;
+};
+
+/**
+ * Floater script forms.
+ * LLScriptTextboxFloater will create script form based on notification data and 
+ * will auto fit the form.
+ */
+class LLScriptTextboxFloater : public LLDockableFloater
+{
+public:
+
+	/**
+	 * key - UUID of scripted Object
+	 */
+	LLScriptTextboxFloater(const LLSD& key);
+
+	virtual ~LLScriptTextboxFloater(){};
+
+	/**
+	 * Toggle existing floater or create and show a new one.
+	 */
+	static bool toggle(const LLUUID& object_id);
+
+	/**
+	 * Creates and shows floater
+	 */
+	static LLScriptTextboxFloater* show(const LLUUID& object_id);
+
+	const LLUUID& getNotificationId() { return mNotificationId; }
+
+	void setNotificationId(const LLUUID& id);
+
+	/**
+	 * Close notification if script floater is closed.
+	 */
+	/*virtual*/ void onClose(bool app_quitting);
+
+	/**
+	 * Hide all notification toasts when we show dockable floater
+	 */
+	/*virtual*/ void setDocked(bool docked, bool pop_on_undock = true);
+
+	/**
+	 * Hide all notification toasts when we show dockable floater
+	 */
+	/*virtual*/ void setVisible(BOOL visible);
+
+	bool getSavePosition() { return mSaveFloaterPosition; }
+
+	void setSavePosition(bool save) { mSaveFloaterPosition = save; }
+
+	void savePosition();
+
+	void restorePosition();
+
+protected:
+
+	/**
+	 * Creates script form, will delete old form if floater is shown for same object.
+	 */
+	void createForm(const LLUUID& object_id);
+
+	/*virtual*/ void getAllowedRect(LLRect& rect);
+
+	/**
+	 * Hide all notification toasts.
+	 */
+	static void hideToastsIfNeeded();
+
+	/**
+	 * Removes chiclets new messages icon
+	 */
+	void onMouseDown();
+
+	/*virtual*/ void onFocusLost();
+	
+	/*virtual*/ void onFocusReceived();
+
+	void dockToChiclet(bool dock);
+
+private:
+	LLToastNotifyPanel* mScriptForm;
+	LLUUID mNotificationId;
+	LLUUID mObjectId;
+	bool mSaveFloaterPosition;
+};
+
+#endif //LL_SCRIPTFLOATER_H
-- 
cgit v1.2.3


From 532ee1dae0f3a612a38a16e0a0144bcea12c64a3 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Tue, 28 Sep 2010 13:14:23 +0100
Subject: scrattttch

---
 indra/newview/llscripttextboxfloater.cpp | 576 -------------------------------
 indra/newview/llscripttextboxfloater.h   | 212 ------------
 2 files changed, 788 deletions(-)
 delete mode 100644 indra/newview/llscripttextboxfloater.cpp
 delete mode 100644 indra/newview/llscripttextboxfloater.h

(limited to 'indra/newview')

diff --git a/indra/newview/llscripttextboxfloater.cpp b/indra/newview/llscripttextboxfloater.cpp
deleted file mode 100644
index 0f7223aaf0..0000000000
--- a/indra/newview/llscripttextboxfloater.cpp
+++ /dev/null
@@ -1,576 +0,0 @@
-/** 
- * @file llscriptfloater.cpp
- * @brief LLScriptFloater class definition
- *
- * $LicenseInfo:firstyear=2009&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- * 
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- * 
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
- * $/LicenseInfo$
- */
-
-#include "llviewerprecompiledheaders.h"
-#include "llscriptfloater.h"
-#include "llagentcamera.h"
-
-#include "llbottomtray.h"
-#include "llchannelmanager.h"
-#include "llchiclet.h"
-#include "llfloaterreg.h"
-#include "llnotifications.h"
-#include "llnotificationsutil.h"
-#include "llscreenchannel.h"
-#include "llsyswellwindow.h"
-#include "lltoastnotifypanel.h"
-#include "lltoastscripttextbox.h"
-#include "lltrans.h"
-#include "llviewerwindow.h"
-#include "llimfloater.h"
-
-//////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////
-
-LLUUID notification_id_to_object_id(const LLUUID& notification_id)
-{
-	LLNotificationPtr notification = LLNotifications::getInstance()->find(notification_id);
-	if(notification)
-	{
-		return notification->getPayload()["object_id"].asUUID();
-	}
-	return LLUUID::null;
-}
-
-//////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////
-
-LLScriptFloater::LLScriptFloater(const LLSD& key)
-: LLDockableFloater(NULL, true, key)
-, mScriptForm(NULL)
-, mSaveFloaterPosition(false)
-{
-	setMouseDownCallback(boost::bind(&LLScriptFloater::onMouseDown, this));
-	setOverlapsScreenChannel(true);
-	mIsDockedStateForcedCallback = boost::bind(&LLAgentCamera::cameraMouselook, &gAgentCamera);
-}
-
-bool LLScriptFloater::toggle(const LLUUID& notification_id)
-{
-	LLScriptFloater* floater = LLFloaterReg::findTypedInstance<LLScriptFloater>("script_floater", notification_id);
-
-	// show existing floater
-	if(floater)
-	{
-		if(floater->getVisible())
-		{
-			floater->setVisible(false);
-			return false;
-		}
-		else
-		{
-			floater->setVisible(TRUE);
-			floater->setFocus(FALSE);
-		}
-	}
-	// create and show new floater
-	else
-	{
-		show(notification_id);
-	}
-
-	LLBottomTray::getInstance()->getChicletPanel()->setChicletToggleState(notification_id, true);
-	return true;
-}
-
-LLScriptFloater* LLScriptFloater::show(const LLUUID& notification_id)
-{
-	LLScriptFloater* floater = LLFloaterReg::getTypedInstance<LLScriptFloater>("script_floater", notification_id);
-	floater->setNotificationId(notification_id);
-	floater->createForm(notification_id);
-
-	//LLDialog(LLGiveInventory and LLLoadURL) should no longer steal focus (see EXT-5445)
-	floater->setAutoFocus(FALSE);
-
-	if(LLScriptFloaterManager::OBJ_SCRIPT == LLScriptFloaterManager::getObjectType(notification_id))
-	{
-		floater->setSavePosition(true);
-		floater->restorePosition();
-	}
-	else
-	{
-		floater->dockToChiclet(true);
-	}
-
-	//LLDialog(LLGiveInventory and LLLoadURL) should no longer steal focus (see EXT-5445)
-	LLFloaterReg::showTypedInstance<LLScriptFloater>("script_floater", notification_id, FALSE);
-
-	return floater;
-}
-
-void LLScriptFloater::setNotificationId(const LLUUID& id)
-{
-	mNotificationId = id;
-	// Lets save object id now while notification exists
-	mObjectId = notification_id_to_object_id(id);
-}
-
-void LLScriptFloater::getAllowedRect(LLRect& rect)
-{
-	rect = gViewerWindow->getWorldViewRectScaled();
-}
-
-void LLScriptFloater::createForm(const LLUUID& notification_id)
-{
-	// delete old form
-	if(mScriptForm)
-	{
-		removeChild(mScriptForm);
-		mScriptForm->die();
-	}
-
-	LLNotificationPtr notification = LLNotifications::getInstance()->find(notification_id);
-	if(NULL == notification)
-	{
-		return;
-	}
-
-	// create new form
-	LLRect toast_rect = getRect();
-	if (isScriptTextBox())
-	{
-		mScriptForm = new LLToastScriptTextbox(notify, toast_rect);
-	}
-	else
-	{
-		// LLToastNotifyPanel will fit own content in vertical direction,
-		// but it needs an initial rect to properly calculate  its width
-		// Use an initial rect of the script floater to make the floater
-		// window more configurable.
-		mScriptForm = new LLToastNotifyPanel(notification, toast_rect); 
-	}
-	addChild(mScriptForm);
-
-	// position form on floater
-	mScriptForm->setOrigin(0, 0);
-
-	// make floater size fit form size
-	LLRect panel_rect = mScriptForm->getRect();
-	toast_rect.setLeftTopAndSize(toast_rect.mLeft, toast_rect.mTop, panel_rect.getWidth(), panel_rect.getHeight() + getHeaderHeight());
-	setShape(toast_rect);
-}
-
-void LLScriptFloater::onClose(bool app_quitting)
-{
-	savePosition();
-
-	if(getNotificationId().notNull())
-	{
-		// we shouldn't kill notification on exit since it may be used as persistent.
-		if (app_quitting)
-		{
-			LLScriptFloaterManager::getInstance()->onRemoveNotification(getNotificationId());
-		}
-		else
-		{
-			LLScriptFloaterManager::getInstance()->removeNotification(getNotificationId());
-		}
-	}
-}
-
-void LLScriptFloater::setDocked(bool docked, bool pop_on_undock /* = true */)
-{
-	LLDockableFloater::setDocked(docked, pop_on_undock);
-
-	savePosition();
-
-	hideToastsIfNeeded();
-}
-
-void LLScriptFloater::setVisible(BOOL visible)
-{
-	LLDockableFloater::setVisible(visible);
-
-	hideToastsIfNeeded();
-
-	if(!visible)
-	{
-		LLIMChiclet* chiclet = LLBottomTray::getInstance()->getChicletPanel()->findChiclet<LLIMChiclet>(getNotificationId());
-		if(chiclet)
-		{
-			chiclet->setToggleState(false);
-		}
-	}
-}
-
-void LLScriptFloater::onMouseDown()
-{
-	if(getNotificationId().notNull())
-	{
-		// Remove new message icon
-		LLIMChiclet* chiclet = LLBottomTray::getInstance()->getChicletPanel()->findChiclet<LLIMChiclet>(getNotificationId());
-		if (chiclet == NULL)
-		{
-			llerror("Dock chiclet for LLScriptFloater doesn't exist", 0);
-		}
-		else
-		{
-			chiclet->setShowNewMessagesIcon(false);
-		}
-	}
-}
-
-void LLScriptFloater::savePosition()
-{
-	if(getSavePosition() && mObjectId.notNull())
-	{
-		LLScriptFloaterManager::FloaterPositionInfo fpi = {getRect(), isDocked()};
-		LLScriptFloaterManager::getInstance()->saveFloaterPosition(mObjectId, fpi);
-	}
-}
-
-void LLScriptFloater::restorePosition()
-{
-	LLScriptFloaterManager::FloaterPositionInfo fpi;
-	if(LLScriptFloaterManager::getInstance()->getFloaterPosition(mObjectId, fpi))
-	{
-		dockToChiclet(fpi.mDockState);
-		if(!fpi.mDockState)
-		{
-			// Un-docked floater is opened in 0,0, now move it to saved position
-			translate(fpi.mRect.mLeft - getRect().mLeft, fpi.mRect.mTop - getRect().mTop);
-		}
-	}
-	else
-	{
-		dockToChiclet(true);
-	}
-}
-
-void LLScriptFloater::onFocusLost()
-{
-	if(getNotificationId().notNull())
-	{
-		LLBottomTray::getInstance()->getChicletPanel()->setChicletToggleState(getNotificationId(), false);
-	}
-}
-
-void LLScriptFloater::onFocusReceived()
-{
-	// first focus will be received before setObjectId() call - don't toggle chiclet
-	if(getNotificationId().notNull())
-	{
-		LLBottomTray::getInstance()->getChicletPanel()->setChicletToggleState(getNotificationId(), true);
-	}
-}
-
-void LLScriptFloater::dockToChiclet(bool dock)
-{
-	if (getDockControl() == NULL)
-	{
-		LLChiclet* chiclet = LLBottomTray::getInstance()->getChicletPanel()->findChiclet<LLChiclet>(getNotificationId());
-		if (chiclet == NULL)
-		{
-			llwarns << "Dock chiclet for LLScriptFloater doesn't exist" << llendl;
-			return;
-		}
-		else
-		{
-			LLBottomTray::getInstance()->getChicletPanel()->scrollToChiclet(chiclet);
-		}
-
-		// Stop saving position while we dock floater
-		bool save = getSavePosition();
-		setSavePosition(false);
-
-		setDockControl(new LLDockControl(chiclet, this, getDockTongue(),
-			LLDockControl::TOP,  boost::bind(&LLScriptFloater::getAllowedRect, this, _1)));
-
-		setDocked(dock);
-
-		// Restore saving
-		setSavePosition(save);
-	}
-}
-
-void LLScriptFloater::hideToastsIfNeeded()
-{
-	using namespace LLNotificationsUI;
-
-	// find channel
-	LLScreenChannel* channel = dynamic_cast<LLScreenChannel*>(LLChannelManager::getInstance()->findChannelByID(
-		LLUUID(gSavedSettings.getString("NotificationChannelUUID"))));
-	// update notification channel state
-	if(channel)
-	{
-		channel->updateShowToastsState();
-		channel->redrawToasts();
-	}
-}
-
-//////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////
-
-void LLScriptFloaterManager::onAddNotification(const LLUUID& notification_id)
-{
-	if(notification_id.isNull())
-	{
-		llwarns << "Invalid notification ID" << llendl;
-		return;
-	}
-
-	// get scripted Object's ID
-	LLUUID object_id = notification_id_to_object_id(notification_id);
-	
-	// Need to indicate of "new message" for object chiclets according to requirements
-	// specified in the Message Bar design specification. See EXT-3142.
-	bool set_new_message = false;
-	EObjectType obj_type = getObjectType(notification_id);
-
-	// LLDialog can spawn only one instance, LLLoadURL and LLGiveInventory can spawn unlimited number of instances
-	if(OBJ_SCRIPT == obj_type)
-	{
-		// If an Object spawns more-than-one floater, only the newest one is shown. 
-		// The previous is automatically closed.
-		script_notification_map_t::const_iterator it = findUsingObjectId(object_id);
-		if(it != mNotifications.end())
-		{
-			LLIMChiclet* chiclet = LLBottomTray::getInstance()->getChicletPanel()->findChiclet<LLIMChiclet>(it->first);
-			if(chiclet)
-			{
-				// Pass the new_message icon state further.
-				set_new_message = chiclet->getShowNewMessagesIcon();
-			}
-
-			LLScriptFloater* floater = LLFloaterReg::findTypedInstance<LLScriptFloater>("script_floater", it->first);
-			if(floater)
-			{
-				// Generate chiclet with a "new message" indicator if a docked window was opened but not in focus. See EXT-3142.
-				set_new_message |= !floater->hasFocus();
-			}
-
-			removeNotification(it->first);
-		}
-	}
-
-	mNotifications.insert(std::make_pair(notification_id, object_id));
-
-	// Create inventory offer chiclet for offer type notifications
-	if( OBJ_GIVE_INVENTORY == obj_type )
-	{
-		LLBottomTray::instance().getChicletPanel()->createChiclet<LLInvOfferChiclet>(notification_id);
-	}
-	else
-	{
-		LLBottomTray::getInstance()->getChicletPanel()->createChiclet<LLScriptChiclet>(notification_id);
-	}
-
-	LLIMWellWindow::getInstance()->addObjectRow(notification_id, set_new_message);
-
-	LLSD data;
-	data["notification_id"] = notification_id;
-	data["new_message"] = set_new_message;
-	data["unread"] = 1; // each object has got only one floater
-	mNewObjectSignal(data);
-
-	toggleScriptFloater(notification_id, set_new_message);
-}
-
-void LLScriptFloaterManager::removeNotification(const LLUUID& notification_id)
-{
-	LLNotificationPtr notification = LLNotifications::instance().find(notification_id);
-	if (notification != NULL && !notification->isCancelled())
-	{
-		LLNotificationsUtil::cancel(notification);
-	}
-
-	onRemoveNotification(notification_id);
-}
-
-void LLScriptFloaterManager::onRemoveNotification(const LLUUID& notification_id)
-{
-	if(notification_id.isNull())
-	{
-		llwarns << "Invalid notification ID" << llendl;
-		return;
-	}
-
-	// remove related chiclet
-	LLBottomTray::getInstance()->getChicletPanel()->removeChiclet(notification_id);
-
-	LLIMWellWindow::getInstance()->removeObjectRow(notification_id);
-
-	mNotifications.erase(notification_id);
-
-	// close floater
-	LLScriptFloater* floater = LLFloaterReg::findTypedInstance<LLScriptFloater>("script_floater", notification_id);
-	if(floater)
-	{
-		floater->savePosition();
-		floater->setNotificationId(LLUUID::null);
-		floater->closeFloater();
-	}
-}
-
-void LLScriptFloaterManager::toggleScriptFloater(const LLUUID& notification_id, bool set_new_message)
-{
-	LLSD data;
-	data["notification_id"] = notification_id;
-	data["new_message"] = set_new_message;
-	mToggleFloaterSignal(data);
-
-	// toggle floater
-	LLScriptFloater::toggle(notification_id);
-}
-
-LLUUID LLScriptFloaterManager::findObjectId(const LLUUID& notification_id)
-{
-	script_notification_map_t::const_iterator it = mNotifications.find(notification_id);
-	if(mNotifications.end() != it)
-	{
-		return it->second;
-	}
-	return LLUUID::null;
-}
-
-LLUUID LLScriptFloaterManager::findNotificationId(const LLUUID& object_id)
-{
-	if(object_id.notNull())
-	{
-		script_notification_map_t::const_iterator it = findUsingObjectId(object_id);
-		if(mNotifications.end() != it)
-		{
-			return it->first;
-		}
-	}
-	return LLUUID::null;
-}
-
-// static
-LLScriptFloaterManager::EObjectType LLScriptFloaterManager::getObjectType(const LLUUID& notification_id)
-{
-	if(notification_id.isNull())
-	{
-		llwarns << "Invalid notification ID" << llendl;
-		return OBJ_UNKNOWN;
-	}
-
-	static const object_type_map TYPE_MAP = initObjectTypeMap();
-
-	LLNotificationPtr notification = LLNotificationsUtil::find(notification_id);
-	object_type_map::const_iterator it = TYPE_MAP.find(notification->getName());
-	if(it != TYPE_MAP.end())
-	{
-		return it->second;
-	}
-
-	llwarns << "Unknown object type" << llendl;
-	return OBJ_UNKNOWN;
-}
-
-// static
-std::string LLScriptFloaterManager::getObjectName(const LLUUID& notification_id)
-{
-	using namespace LLNotificationsUI;
-	LLNotificationPtr notification = LLNotifications::getInstance()->find(notification_id);
-	if(!notification)
-	{
-		llwarns << "Invalid notification" << llendl;
-		return LLStringUtil::null;
-	}
-
-	std::string text;
-
-	switch(LLScriptFloaterManager::getObjectType(notification_id))
-	{
-	case LLScriptFloaterManager::OBJ_SCRIPT:
-		text = notification->getSubstitutions()["TITLE"].asString();
-		break;
-	case LLScriptFloaterManager::OBJ_LOAD_URL:
-		text = notification->getSubstitutions()["OBJECTNAME"].asString();
-		break;
-	case LLScriptFloaterManager::OBJ_GIVE_INVENTORY:
-		text = notification->getSubstitutions()["OBJECTFROMNAME"].asString();
-		break;
-	default:
-		text = LLTrans::getString("object");
-		break;
-	}
-
-	return text;
-}
-
-//static
-LLScriptFloaterManager::object_type_map LLScriptFloaterManager::initObjectTypeMap()
-{
-	object_type_map type_map;
-	type_map["ScriptDialog"] = OBJ_SCRIPT;
-	type_map["ScriptDialogGroup"] = OBJ_SCRIPT;
-	type_map["LoadWebPage"] = OBJ_LOAD_URL;
-	type_map["ObjectGiveItem"] = OBJ_GIVE_INVENTORY;
-	return type_map;
-}
-
-LLScriptFloaterManager::script_notification_map_t::const_iterator LLScriptFloaterManager::findUsingObjectId(const LLUUID& object_id)
-{
-	script_notification_map_t::const_iterator it = mNotifications.begin();
-	for(; mNotifications.end() != it; ++it)
-	{
-		if(object_id == it->second)
-		{
-			return it;
-		}
-	}
-	return mNotifications.end();
-}
-
-void LLScriptFloaterManager::saveFloaterPosition(const LLUUID& object_id, const FloaterPositionInfo& fpi)
-{
-	if(object_id.notNull())
-	{
-		LLScriptFloaterManager::getInstance()->mFloaterPositions[object_id] = fpi;
-	}
-	else
-	{
-		llwarns << "Invalid object id" << llendl;
-	}
-}
-
-bool LLScriptFloaterManager::getFloaterPosition(const LLUUID& object_id, FloaterPositionInfo& fpi)
-{
-	floater_position_map_t::const_iterator it = mFloaterPositions.find(object_id);
-	if(LLScriptFloaterManager::getInstance()->mFloaterPositions.end() != it)
-	{
-		fpi = it->second;
-		return true;
-	}
-	return false;
-}
-
-void LLScriptFloaterManager::setFloaterVisible(const LLUUID& notification_id, bool visible)
-{
-	LLScriptFloater* floater = LLFloaterReg::findTypedInstance<LLScriptFloater>(
-		"script_floater", notification_id);
-	if(floater)
-	{
-		floater->setVisible(visible);
-	}
-}
-
-// EOF
diff --git a/indra/newview/llscripttextboxfloater.h b/indra/newview/llscripttextboxfloater.h
deleted file mode 100644
index b0ab725810..0000000000
--- a/indra/newview/llscripttextboxfloater.h
+++ /dev/null
@@ -1,212 +0,0 @@
-/** 
- * @file llscripttextboxfloater.h
- * @brief LLScriptTextboxFloater class definition
- *
- * $LicenseInfo:firstyear=2009&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- * 
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- * 
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
- * $/LicenseInfo$
- */
-
-#ifndef LL_SCRIPTTEXTBOXFLOATER_H
-#define LL_SCRIPTTEXTBOXFLOATER_H
-
-#include "lltransientdockablefloater.h"
-
-class LLToastNotifyPanel;
-
-/**
- * Handles script notifications ("ScriptDialog" and "ScriptDialogGroup")
- * and manages Script Floaters.
- */
-class LLScriptTextboxFloaterManager : public LLSingleton<LLScriptTextboxFloaterManager>
-{
-	// *TODO
-	// LLScriptTextboxFloaterManager and LLScriptTextboxFloater will need some refactoring after we 
-	// know how script notifications should look like.
-public:
-
-	typedef enum e_object_type
-	{
-		OBJ_SCRIPT,
-		OBJ_GIVE_INVENTORY,
-		OBJ_LOAD_URL,
-
-		OBJ_UNKNOWN
-	}EObjectType;
-
-	/**
-	 * Handles new notifications.
-	 * Saves notification and object ids, removes old notification if needed, creates script chiclet
-	 * Note that one object can spawn one script floater.
-	 */
-	void onAddNotification(const LLUUID& notification_id);
-
-	/**
-	 * Removes notification.
-	 */
-	void removeNotification(const LLUUID& notification_id);
-
-	/**
-	 * Handles notification removal.
-	 * Removes script notification toast, removes script chiclet, closes script floater
-	 */
-	void onRemoveNotification(const LLUUID& notification_id);
-
-	/**
-	 * Toggles script floater.
-	 * Removes "new message" icon from chiclet and removes notification toast.
-	 */
-	void toggleScriptFloater(const LLUUID& object_id, bool set_new_message = false);
-
-	LLUUID findObjectId(const LLUUID& notification_id);
-
-	LLUUID findNotificationId(const LLUUID& object_id);
-
-	static EObjectType getObjectType(const LLUUID& notification_id);
-
-	static std::string getObjectName(const LLUUID& notification_id);
-
-	typedef boost::signals2::signal<void(const LLSD&)> object_signal_t;
-
-	boost::signals2::connection addNewObjectCallback(const object_signal_t::slot_type& cb) { return mNewObjectSignal.connect(cb); }
-	boost::signals2::connection addToggleObjectFloaterCallback(const object_signal_t::slot_type& cb) { return mToggleFloaterSignal.connect(cb); }
-
-	struct FloaterPositionInfo
-	{
-		LLRect mRect;
-		bool mDockState;
-	};
-
-	void saveFloaterPosition(const LLUUID& object_id, const FloaterPositionInfo& fpi);
-
-	bool getFloaterPosition(const LLUUID& object_id, FloaterPositionInfo& fpi);
-
-	void setFloaterVisible(const LLUUID& notification_id, bool visible);
-
-protected:
-
-	typedef std::map<std::string, EObjectType> object_type_map;
-
-	static object_type_map initObjectTypeMap();
-
-	// <notification_id, object_id>
-	typedef std::map<LLUUID, LLUUID> script_notification_map_t;
-
-	script_notification_map_t::const_iterator findUsingObjectId(const LLUUID& object_id);
-
-private:
-
-	script_notification_map_t mNotifications;
-
-	object_signal_t mNewObjectSignal;
-	object_signal_t mToggleFloaterSignal;
-
-	// <object_id, floater position>
-	typedef std::map<LLUUID, FloaterPositionInfo> floater_position_map_t;
-
-	floater_position_map_t mFloaterPositions;
-};
-
-/**
- * Floater script forms.
- * LLScriptTextboxFloater will create script form based on notification data and 
- * will auto fit the form.
- */
-class LLScriptTextboxFloater : public LLDockableFloater
-{
-public:
-
-	/**
-	 * key - UUID of scripted Object
-	 */
-	LLScriptTextboxFloater(const LLSD& key);
-
-	virtual ~LLScriptTextboxFloater(){};
-
-	/**
-	 * Toggle existing floater or create and show a new one.
-	 */
-	static bool toggle(const LLUUID& object_id);
-
-	/**
-	 * Creates and shows floater
-	 */
-	static LLScriptTextboxFloater* show(const LLUUID& object_id);
-
-	const LLUUID& getNotificationId() { return mNotificationId; }
-
-	void setNotificationId(const LLUUID& id);
-
-	/**
-	 * Close notification if script floater is closed.
-	 */
-	/*virtual*/ void onClose(bool app_quitting);
-
-	/**
-	 * Hide all notification toasts when we show dockable floater
-	 */
-	/*virtual*/ void setDocked(bool docked, bool pop_on_undock = true);
-
-	/**
-	 * Hide all notification toasts when we show dockable floater
-	 */
-	/*virtual*/ void setVisible(BOOL visible);
-
-	bool getSavePosition() { return mSaveFloaterPosition; }
-
-	void setSavePosition(bool save) { mSaveFloaterPosition = save; }
-
-	void savePosition();
-
-	void restorePosition();
-
-protected:
-
-	/**
-	 * Creates script form, will delete old form if floater is shown for same object.
-	 */
-	void createForm(const LLUUID& object_id);
-
-	/*virtual*/ void getAllowedRect(LLRect& rect);
-
-	/**
-	 * Hide all notification toasts.
-	 */
-	static void hideToastsIfNeeded();
-
-	/**
-	 * Removes chiclets new messages icon
-	 */
-	void onMouseDown();
-
-	/*virtual*/ void onFocusLost();
-	
-	/*virtual*/ void onFocusReceived();
-
-	void dockToChiclet(bool dock);
-
-private:
-	LLToastNotifyPanel* mScriptForm;
-	LLUUID mNotificationId;
-	LLUUID mObjectId;
-	bool mSaveFloaterPosition;
-};
-
-#endif //LL_SCRIPTFLOATER_H
-- 
cgit v1.2.3


From b6a498c3018976b97c2353be066502e4a298e156 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Tue, 28 Sep 2010 13:41:46 +0100
Subject: iterate iterate.

---
 indra/newview/llscriptfloater.cpp      | 11 +++++++++--
 indra/newview/llscriptfloater.h        |  2 ++
 indra/newview/lltoastscripttextbox.cpp |  2 +-
 indra/newview/lltoastscripttextbox.h   |  4 ++--
 4 files changed, 14 insertions(+), 5 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llscriptfloater.cpp b/indra/newview/llscriptfloater.cpp
index 0f7223aaf0..678611a943 100644
--- a/indra/newview/llscriptfloater.cpp
+++ b/indra/newview/llscriptfloater.cpp
@@ -152,9 +152,9 @@ void LLScriptFloater::createForm(const LLUUID& notification_id)
 
 	// create new form
 	LLRect toast_rect = getRect();
-	if (isScriptTextBox())
+	if (isScriptTextbox())
 	{
-		mScriptForm = new LLToastScriptTextbox(notify, toast_rect);
+		mScriptForm = new LLToastScriptTextbox(notification);
 	}
 	else
 	{
@@ -573,4 +573,11 @@ void LLScriptFloaterManager::setFloaterVisible(const LLUUID& notification_id, bo
 	}
 }
 
+//////////////////////////////////////////////////////////////////
+
+bool  LLScriptFloater::isScriptTextbox()
+{
+	return true;
+}
+
 // EOF
diff --git a/indra/newview/llscriptfloater.h b/indra/newview/llscriptfloater.h
index da70bb4334..fec81704d8 100644
--- a/indra/newview/llscriptfloater.h
+++ b/indra/newview/llscriptfloater.h
@@ -203,6 +203,8 @@ protected:
 	void dockToChiclet(bool dock);
 
 private:
+	bool isScriptTextbox();
+
 	LLToastNotifyPanel* mScriptForm;
 	LLUUID mNotificationId;
 	LLUUID mObjectId;
diff --git a/indra/newview/lltoastscripttextbox.cpp b/indra/newview/lltoastscripttextbox.cpp
index b203579362..7fef346ae5 100644
--- a/indra/newview/lltoastscripttextbox.cpp
+++ b/indra/newview/lltoastscripttextbox.cpp
@@ -51,7 +51,7 @@
 const S32 LLToastScriptTextbox::DEFAULT_MESSAGE_MAX_LINE_COUNT	= 7;
 
 LLToastScriptTextbox::LLToastScriptTextbox(LLNotificationPtr& notification)
-:	LLToastPanel(notification),
+:	LLToastNotifyPanel(notification),
 	mInventoryOffer(NULL)
 {
 	buildFromFile( "panel_notify_textbox.xml");
diff --git a/indra/newview/lltoastscripttextbox.h b/indra/newview/lltoastscripttextbox.h
index 2d942939bc..86fe93cf66 100644
--- a/indra/newview/lltoastscripttextbox.h
+++ b/indra/newview/lltoastscripttextbox.h
@@ -28,7 +28,7 @@
 #define LL_LLTOASTSCRIPTTEXTBOX_H
 
 #include "llfontgl.h"
-#include "lltoastpanel.h"
+#include "lltoastnotifypanel.h"
 #include "lldarray.h"
 #include "lltimer.h"
 #include "llviewermessage.h"
@@ -42,7 +42,7 @@ class LLButton;
  * Replaces class LLGroupNotifyBox.
  */
 class LLToastScriptTextbox
-:	public LLToastPanel
+:	public LLToastNotifyPanel
 {
 public:
 	void close();
-- 
cgit v1.2.3


From d2474edf85674aa4fb150caee184fc434915d5e6 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Tue, 28 Sep 2010 17:47:24 +0100
Subject: restore switching logic between textbox/nontextbox, after the
 refactor.

---
 indra/newview/llscriptfloater.cpp | 29 ++++++++++++++++++++++++++---
 indra/newview/llscriptfloater.h   |  3 ++-
 2 files changed, 28 insertions(+), 4 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llscriptfloater.cpp b/indra/newview/llscriptfloater.cpp
index 678611a943..825ee0823d 100644
--- a/indra/newview/llscriptfloater.cpp
+++ b/indra/newview/llscriptfloater.cpp
@@ -32,6 +32,7 @@
 #include "llchannelmanager.h"
 #include "llchiclet.h"
 #include "llfloaterreg.h"
+#include "lllslconstants.h"
 #include "llnotifications.h"
 #include "llnotificationsutil.h"
 #include "llscreenchannel.h"
@@ -152,7 +153,7 @@ void LLScriptFloater::createForm(const LLUUID& notification_id)
 
 	// create new form
 	LLRect toast_rect = getRect();
-	if (isScriptTextbox())
+	if (isScriptTextbox(notification))
 	{
 		mScriptForm = new LLToastScriptTextbox(notification);
 	}
@@ -575,9 +576,31 @@ void LLScriptFloaterManager::setFloaterVisible(const LLUUID& notification_id, bo
 
 //////////////////////////////////////////////////////////////////
 
-bool  LLScriptFloater::isScriptTextbox()
+bool LLScriptFloater::isScriptTextbox(LLNotificationPtr notification)
 {
-	return true;
+	// get a form for the notification
+	LLNotificationFormPtr form(notification->getForm());
+
+	if (form)
+	{
+		// get number of elements
+		int num_options = form->getNumElements();
+	
+		// if ANY of the buttons have the magic lltextbox string as name, then
+		// treat the whole dialog as a simple text entry box (i.e. mixed button
+		// and textbox forms are not supported)
+		for (int i=0; i<num_options; ++i)
+		{
+			LLSD form_element = form->getElement(i);
+			llwarns << form_element << llendl;
+			if (form_element["name"].asString() == TEXTBOX_MAGIC_TOKEN)
+			{
+				return true;
+			}
+		}
+	}
+
+	return false;
 }
 
 // EOF
diff --git a/indra/newview/llscriptfloater.h b/indra/newview/llscriptfloater.h
index fec81704d8..dc52baa115 100644
--- a/indra/newview/llscriptfloater.h
+++ b/indra/newview/llscriptfloater.h
@@ -28,6 +28,7 @@
 #define LL_SCRIPTFLOATER_H
 
 #include "lltransientdockablefloater.h"
+#include "llnotificationptr.h"
 
 class LLToastNotifyPanel;
 
@@ -203,7 +204,7 @@ protected:
 	void dockToChiclet(bool dock);
 
 private:
-	bool isScriptTextbox();
+	bool isScriptTextbox(LLNotificationPtr notification);
 
 	LLToastNotifyPanel* mScriptForm;
 	LLUUID mNotificationId;
-- 
cgit v1.2.3


From e73e8de56fc2a0fd35cde975f82ead1a02112cbe Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Tue, 28 Sep 2010 18:13:21 +0100
Subject: trivial reformat before I tear this apart.

---
 indra/newview/lltoastscripttextbox.cpp | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/lltoastscripttextbox.cpp b/indra/newview/lltoastscripttextbox.cpp
index 7fef346ae5..64360b9e48 100644
--- a/indra/newview/lltoastscripttextbox.cpp
+++ b/indra/newview/lltoastscripttextbox.cpp
@@ -80,13 +80,13 @@ LLToastScriptTextbox::LLToastScriptTextbox(LLNotificationPtr& notification)
 	const std::string& message = payload["message"].asString();
 
 	std::string timeStr = "["+LLTrans::getString("UTCTimeWeek")+"],["
-							+LLTrans::getString("UTCTimeDay")+"] ["
-							+LLTrans::getString("UTCTimeMth")+"] ["
-							+LLTrans::getString("UTCTimeYr")+"] ["
-							+LLTrans::getString("UTCTimeHr")+"]:["
-							+LLTrans::getString("UTCTimeMin")+"]:["
-							+LLTrans::getString("UTCTimeSec")+"] ["
-							+LLTrans::getString("UTCTimeTimezone")+"]";
+		+LLTrans::getString("UTCTimeDay")+"] ["
+		+LLTrans::getString("UTCTimeMth")+"] ["
+		+LLTrans::getString("UTCTimeYr")+"] ["
+		+LLTrans::getString("UTCTimeHr")+"]:["
+		+LLTrans::getString("UTCTimeMin")+"]:["
+		+LLTrans::getString("UTCTimeSec")+"] ["
+		+LLTrans::getString("UTCTimeTimezone")+"]";
 	const LLDate timeStamp = notification->getDate();
 	LLDate notice_date = timeStamp.notNull() ? timeStamp : LLDate::now();
 	LLSD substitution;
-- 
cgit v1.2.3


From 2a869d52f189a31c185b93f6425dd3e3dd8e927f Mon Sep 17 00:00:00 2001
From: Wolfpup Lowenhar <wolfpup67@earthlink.net>
Date: Tue, 28 Sep 2010 14:14:10 -0400
Subject: update for STORM-255 to correct small issue with tool tip in
 pannel_preferences_chat.xml

---
 indra/newview/skins/default/xui/en/panel_preferences_chat.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml
index 3adc174aaf..e36415832c 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml
@@ -366,7 +366,7 @@
      name="chat_window"
      top_pad="0"
      tool_tip="Show your Instant Messages in separate floaters, or in one floater with many tabs (Requires restart)"
-     width="331">
+     width="150">
      <radio_item
       height="16"
       label="Separate windows"
-- 
cgit v1.2.3


From 9ef927831de63c42cfd5cf1ac5cdae6484ff976b Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Tue, 28 Sep 2010 11:27:55 -0700
Subject: fixed super long username clipping

---
 indra/newview/skins/default/xui/en/panel_edit_profile.xml | 3 ++-
 indra/newview/skins/default/xui/en/panel_profile_view.xml | 7 ++++---
 2 files changed, 6 insertions(+), 4 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_edit_profile.xml b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
index 0adaa662aa..5f16101132 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
@@ -131,7 +131,7 @@
     width="70" />
       <text
        follows="top|left"
-       height="13"
+       height="20"
        layout="topleft"
        left_pad="0"
        name="user_slid"
@@ -140,6 +140,7 @@
        top_delta="-2"
        use_ellipses="true" 
        value="hamilton.linden"
+       wrap="true" 
        width="215" />
      <panel
        name="lifes_images_panel"
diff --git a/indra/newview/skins/default/xui/en/panel_profile_view.xml b/indra/newview/skins/default/xui/en/panel_profile_view.xml
index b0a175db0d..551efa0c26 100644
--- a/indra/newview/skins/default/xui/en/panel_profile_view.xml
+++ b/indra/newview/skins/default/xui/en/panel_profile_view.xml
@@ -99,7 +99,7 @@
    width="70" />
   <text
    follows="top|left"
-   height="17"
+   height="20"
    layout="topleft"
    left_pad="0"
    name="user_slid"
@@ -108,10 +108,11 @@
    top_delta="-2"
    use_ellipses="true"
    value="jack.linden"
-   width="215" />
+   width="215" 
+   wrap="true "/>
   <tab_container
    follows="all"
-   height="491"
+   height="489"
    halign="center"
    layout="topleft"
    left="5"
-- 
cgit v1.2.3


From cfd2467c1cdcd0dab2a5950aad7cc0e6ed00fc79 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Tue, 28 Sep 2010 15:12:09 -0700
Subject: fixing display_name help browser link

---
 indra/newview/skins/default/xui/en/notifications.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index cab9b7ff9b..eb2baf3e4c 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -3188,7 +3188,7 @@ You are no longer frozen.
    icon="alertmodal.tga"
    name="SetDisplayName"
    type="alert">
-    The name above your avatar's head is called a [secondlife:///app/help/script display_name]. You can change it periodically.
+    The name above your avatar's head is called a [secondlife:///app/help/display_name display_name]. You can change it periodically.
 
     During the evaluation period of this Project Viewer release, you are able to update your Display Name as frequently as you wish. When this feature goes officially live, you will able to update your Display Name only once a week.
 
-- 
cgit v1.2.3


From 7007896f9811022c58fab6e7e320dfb6773b1a71 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Wed, 29 Sep 2010 12:23:15 +0100
Subject: trivial comment changes.

---
 indra/newview/llscriptfloater.cpp | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llscriptfloater.cpp b/indra/newview/llscriptfloater.cpp
index 825ee0823d..53a5881f4b 100644
--- a/indra/newview/llscriptfloater.cpp
+++ b/indra/newview/llscriptfloater.cpp
@@ -583,12 +583,12 @@ bool LLScriptFloater::isScriptTextbox(LLNotificationPtr notification)
 
 	if (form)
 	{
-		// get number of elements
+		// get number of elements in the form
 		int num_options = form->getNumElements();
 	
-		// if ANY of the buttons have the magic lltextbox string as name, then
-		// treat the whole dialog as a simple text entry box (i.e. mixed button
-		// and textbox forms are not supported)
+		// if ANY of the buttons have the magic lltextbox string as
+		// name, then treat the whole dialog as a simple text entry
+		// box (i.e. mixed button and textbox forms are not supported)
 		for (int i=0; i<num_options; ++i)
 		{
 			LLSD form_element = form->getElement(i);
-- 
cgit v1.2.3


From 32b04991c86b4e6467a23e6b5ce264e4ec5c2ad9 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Wed, 29 Sep 2010 13:56:12 +0100
Subject: textbox dialog working, preparing to send response properly.

---
 indra/newview/lltoastscripttextbox.cpp             | 41 ++++++++++------------
 .../skins/default/xui/en/panel_notify_textbox.xml  |  3 +-
 2 files changed, 19 insertions(+), 25 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/lltoastscripttextbox.cpp b/indra/newview/lltoastscripttextbox.cpp
index 64360b9e48..391aee79e8 100644
--- a/indra/newview/lltoastscripttextbox.cpp
+++ b/indra/newview/lltoastscripttextbox.cpp
@@ -57,25 +57,23 @@ LLToastScriptTextbox::LLToastScriptTextbox(LLNotificationPtr& notification)
 	buildFromFile( "panel_notify_textbox.xml");
 
 	const LLSD& payload = notification->getPayload();
-	LLGroupData groupData;
-	if (!gAgent.getGroupData(payload["group_id"].asUUID(),groupData))
-	{
-		llwarns << "Group notice for unknown group: " << payload["group_id"].asUUID() << llendl;
-	}
-
-	//group icon
-	LLIconCtrl* pGroupIcon = getChild<LLIconCtrl>("group_icon", TRUE);
-	pGroupIcon->setValue(groupData.mInsigniaID);
-
-	//header title
-	const std::string& from_name = payload["sender_name"].asString();
-	std::stringstream from;
-	from << from_name << "/" << groupData.mName;
-	LLTextBox* pTitleText = getChild<LLTextBox>("title");
-	pTitleText->setValue(from.str());
+	llwarns << "PAYLOAD " << payload << llendl;
+	llwarns << "TYPE " << notification->getType() << llendl;
+	llwarns << "MESSAGE " << notification->getMessage() << llendl;
+	llwarns << "LABEL " << notification->getLabel() << llendl;
+	llwarns << "URL " << notification->getURL() << llendl;
+
+	/*
+2010-09-29T12:24:44Z WARNING: LLToastScriptTextbox: PAYLOAD {'chat_channel':i-376,'object_id':ubb05bcf2-4eca-2203-13f4-b328411d344f,'sender':'216.82.20.80:13001'}
+2010-09-29T12:24:44Z WARNING: LLToastScriptTextbox: TYPE notify
+2010-09-29T12:24:44Z WARNING: LLToastScriptTextbox: MESSAGE Tofu Tester's 'lltextbox test'
+Write something here...
+2010-09-29T12:24:44Z WARNING: LLToastScriptTextbox: LABEL 
+2010-09-29T12:24:44Z WARNING: LLToastScriptTextbox: URL 
+*/
 
 	//message subject
-	const std::string& subject = payload["subject"].asString();
+	//const std::string& subject = payload["subject"].asString();
 	//message body
 	const std::string& message = payload["message"].asString();
 
@@ -97,10 +95,6 @@ LLToastScriptTextbox::LLToastScriptTextbox(LLNotificationPtr& notification)
 	pMessageText->clear();
 
 	LLStyle::Params style;
-	LLFontGL* subject_font = LLFontGL::getFontByName(getString("subject_font"));
-	if (subject_font) 
-		style.font = subject_font;
-	pMessageText->appendText(subject, FALSE, style);
 
 	LLFontGL* date_font = LLFontGL::getFontByName(getString("date_font"));
 	if (date_font)
@@ -109,7 +103,7 @@ LLToastScriptTextbox::LLToastScriptTextbox(LLNotificationPtr& notification)
 	
 	style.font = pMessageText->getDefaultFont();
 	pMessageText->appendText(message, TRUE, style);
-
+	/*
 	//attachment
 	BOOL hasInventory = payload["inventory_offer"].isDefined();
 
@@ -132,7 +126,7 @@ LLToastScriptTextbox::LLToastScriptTextbox(LLNotificationPtr& notification)
 												LLInventoryType::IT_TEXTURE);
 		pAttachIcon->setValue(attachIconImg->getName());
 	}
-
+	*/
 	//ok button
 	LLButton* pOkBtn = getChild<LLButton>("btn_ok");
 	pOkBtn->setClickedCallback((boost::bind(&LLToastScriptTextbox::onClickOk, this)));
@@ -169,6 +163,7 @@ void LLToastScriptTextbox::close()
 void LLToastScriptTextbox::onClickOk()
 {
 	LLSD response = mNotification->getResponseTemplate();
+	response["OH MY GOD WHAT A HACK"] = true;
 	mNotification->respond(response);
 	close();
 }
diff --git a/indra/newview/skins/default/xui/en/panel_notify_textbox.xml b/indra/newview/skins/default/xui/en/panel_notify_textbox.xml
index a0d103e2a3..6a07d41e7e 100644
--- a/indra/newview/skins/default/xui/en/panel_notify_textbox.xml
+++ b/indra/newview/skins/default/xui/en/panel_notify_textbox.xml
@@ -59,8 +59,7 @@
      max_length="2147483647"
      name="message"
      parse_highlights="true"
-     read_only="true"
-     text_color="GroupNotifyTextColor"
+     read_only="false"
      top="40"
      type="string"
      use_ellipses="true"
-- 
cgit v1.2.3


From 921d6187073afa3e76e05395ddb8a64f9f479d68 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Wed, 29 Sep 2010 14:10:04 +0100
Subject: clean up xui a bit, still working on proper script reponse.

---
 indra/newview/lltoastscripttextbox.cpp             |  9 +++-
 .../skins/default/xui/en/panel_notify_textbox.xml  | 58 +---------------------
 2 files changed, 8 insertions(+), 59 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/lltoastscripttextbox.cpp b/indra/newview/lltoastscripttextbox.cpp
index 391aee79e8..a9f8272ea9 100644
--- a/indra/newview/lltoastscripttextbox.cpp
+++ b/indra/newview/lltoastscripttextbox.cpp
@@ -151,12 +151,13 @@ void LLToastScriptTextbox::close()
 	// The group notice dialog may be an inventory offer.
 	// If it has an inventory save button and that button is still enabled
 	// Then we need to send the inventory declined message
+	/*
 	if(mInventoryOffer != NULL)
 	{
 		mInventoryOffer->forceResponse(IOR_DECLINE);
 		mInventoryOffer = NULL;
 	}
-
+	*/
 	die();
 }
 
@@ -166,8 +167,9 @@ void LLToastScriptTextbox::onClickOk()
 	response["OH MY GOD WHAT A HACK"] = true;
 	mNotification->respond(response);
 	close();
+	//llerrs << response << llendl;
 }
-
+/*
 void LLToastScriptTextbox::onClickAttachment()
 {
 	if (mInventoryOffer != NULL) {
@@ -190,7 +192,9 @@ void LLToastScriptTextbox::onClickAttachment()
 		mInventoryOffer = NULL;
 	}
 }
+*/
 
+ /*
 //static
 bool LLToastScriptTextbox::isAttachmentOpenable(LLAssetType::EType type)
 {
@@ -208,3 +212,4 @@ bool LLToastScriptTextbox::isAttachmentOpenable(LLAssetType::EType type)
 	}
 }
 
+ */
diff --git a/indra/newview/skins/default/xui/en/panel_notify_textbox.xml b/indra/newview/skins/default/xui/en/panel_notify_textbox.xml
index 6a07d41e7e..dcd1e29e17 100644
--- a/indra/newview/skins/default/xui/en/panel_notify_textbox.xml
+++ b/indra/newview/skins/default/xui/en/panel_notify_textbox.xml
@@ -11,44 +11,9 @@
     <string
      name="message_max_lines_count"
      value="7" />
-    <string
-     name="subject_font"
-     value="SANSSERIF_BIG" />
     <string
      name="date_font"
      value="SANSSERIF" />
-    <panel
-     background_visible="true"
-     follows="top"
-     height="30"
-     label="header"
-     layout="topleft"
-     left="0"
-     name="header"
-     top="0"
-     width="305">
-        <icon
-         follows="all"
-         height="20"
-         layout="topleft"
-         left="5"
-         mouse_opaque="true"
-         name="group_icon"
-         top="5"
-         width="20" />
-        <text
-         follows="all"
-         font="SansSerifBig"
-         height="20"
-         layout="topleft"
-         left_pad="10"
-         name="title"
-         text_color="GroupNotifyTextColor"
-         top="5"
-         use_ellipses="true"
-         value="Sender Name / Group Name"
-         width="230" />
-    </panel>
     <text_editor
      parse_urls="true"
      enabled="true"
@@ -65,29 +30,8 @@
      use_ellipses="true"
      value="message"
      width="270"
-	 word_wrap="true" >
+     word_wrap="true" >
     </text_editor>
-    <icon
-     bottom="60"
-     follows="left|bottom|right"
-     height="15"
-     layout="topleft"
-     left="25"
-     mouse_opaque="true"
-     name="attachment_icon"
-     width="15" />
-    <text
-     bottom="60"
-     follows="left|bottom|right"
-     font="SansSerif"
-     height="15"
-     layout="topleft"
-     left="45"
-     name="attachment"
-     text_color="GroupNotifyTextColor"
-     value="Attachment"
-     use_ellipses="true"
-     width="250" />
     <button
      bottom="85"
      follows="bottom"
-- 
cgit v1.2.3


From 42ed8e8ffadd6bd7d8784084e9a29badf5d75c5c Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Wed, 29 Sep 2010 17:03:05 +0100
Subject: response is starting to limp along.

---
 indra/newview/lltoastnotifypanel.cpp   | 1 +
 indra/newview/lltoastscripttextbox.cpp | 6 ++++--
 indra/newview/llviewermessage.cpp      | 6 +++++-
 3 files changed, 10 insertions(+), 3 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/lltoastnotifypanel.cpp b/indra/newview/lltoastnotifypanel.cpp
index 51f32331d8..45c031964c 100644
--- a/indra/newview/lltoastnotifypanel.cpp
+++ b/indra/newview/lltoastnotifypanel.cpp
@@ -527,6 +527,7 @@ void LLToastNotifyPanel::onClickButton(void* data)
 		self->mNotification->setResponder(new_info);
 	}
 
+	llwarns << response << llendl;
 	self->mNotification->respond(response);
 
 	if(is_reusable)
diff --git a/indra/newview/lltoastscripttextbox.cpp b/indra/newview/lltoastscripttextbox.cpp
index a9f8272ea9..2a0d971a44 100644
--- a/indra/newview/lltoastscripttextbox.cpp
+++ b/indra/newview/lltoastscripttextbox.cpp
@@ -161,13 +161,15 @@ void LLToastScriptTextbox::close()
 	die();
 }
 
+#include "lllslconstants.h"
 void LLToastScriptTextbox::onClickOk()
 {
 	LLSD response = mNotification->getResponseTemplate();
-	response["OH MY GOD WHAT A HACK"] = true;
+	//response["OH MY GOD WHAT A HACK"] = "woot";
+	response[TEXTBOX_MAGIC_TOKEN] = "ffffffffuuuuu";
 	mNotification->respond(response);
 	close();
-	//llerrs << response << llendl;
+	llwarns << response << llendl;
 }
 /*
 void LLToastScriptTextbox::onClickAttachment()
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 26b7e0fb6d..b78c7b3d66 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -6171,10 +6171,14 @@ const S32 SCRIPT_DIALOG_BUTTON_STR_SIZE = 24;
 const S32 SCRIPT_DIALOG_MAX_MESSAGE_SIZE = 512;
 const char* SCRIPT_DIALOG_HEADER = "Script Dialog:\n";
 
+#include "lllslconstants.h"
 bool callback_script_dialog(const LLSD& notification, const LLSD& response)
 {
 	LLNotificationForm form(notification["form"]);
-	std::string button = LLNotification::getSelectedOptionName(response);
+	//std::string button = "booya";//LLNotification::getSelectedOptionName(response);
+	std::string button = response[TEXTBOX_MAGIC_TOKEN].asString().empty() ?
+		LLNotification::getSelectedOptionName(response) :
+		response[TEXTBOX_MAGIC_TOKEN].asString();
 	S32 button_idx = LLNotification::getSelectedOption(notification, response);
 	// Didn't click "Ignore"
 	if (button_idx != -1)
-- 
cgit v1.2.3


From 578ee535644931ede7dd74741d905d04d8da7fd6 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Wed, 29 Sep 2010 17:20:16 +0100
Subject: work on response integrity.

---
 indra/newview/lltoastscripttextbox.cpp | 17 +++++++++++------
 indra/newview/llviewermessage.cpp      |  6 +++---
 2 files changed, 14 insertions(+), 9 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/lltoastscripttextbox.cpp b/indra/newview/lltoastscripttextbox.cpp
index 2a0d971a44..91a4831a9c 100644
--- a/indra/newview/lltoastscripttextbox.cpp
+++ b/indra/newview/lltoastscripttextbox.cpp
@@ -164,12 +164,17 @@ void LLToastScriptTextbox::close()
 #include "lllslconstants.h"
 void LLToastScriptTextbox::onClickOk()
 {
-	LLSD response = mNotification->getResponseTemplate();
-	//response["OH MY GOD WHAT A HACK"] = "woot";
-	response[TEXTBOX_MAGIC_TOKEN] = "ffffffffuuuuu";
-	mNotification->respond(response);
-	close();
-	llwarns << response << llendl;
+	LLViewerTextEditor* pMessageText = getChild<LLViewerTextEditor>("message");
+
+	if (pMessageText)
+	{
+		LLSD response = mNotification->getResponseTemplate();
+		//response["OH MY GOD WHAT A HACK"] = "woot";
+		response[TEXTBOX_MAGIC_TOKEN] = pMessageText->getText();
+		mNotification->respond(response);
+		close();
+		llwarns << response << llendl;
+	}
 }
 /*
 void LLToastScriptTextbox::onClickAttachment()
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index b78c7b3d66..f897f5e733 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -6176,9 +6176,9 @@ bool callback_script_dialog(const LLSD& notification, const LLSD& response)
 {
 	LLNotificationForm form(notification["form"]);
 	//std::string button = "booya";//LLNotification::getSelectedOptionName(response);
-	std::string button = response[TEXTBOX_MAGIC_TOKEN].asString().empty() ?
-		LLNotification::getSelectedOptionName(response) :
-		response[TEXTBOX_MAGIC_TOKEN].asString();
+	std::string button = response.has(TEXTBOX_MAGIC_TOKEN) ?
+		response[TEXTBOX_MAGIC_TOKEN].asString() :
+		LLNotification::getSelectedOptionName(response);
 	S32 button_idx = LLNotification::getSelectedOption(notification, response);
 	// Didn't click "Ignore"
 	if (button_idx != -1)
-- 
cgit v1.2.3


From f7f3df3a2c0b7a87828c4a2c777d9a94502f3d4e Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Wed, 29 Sep 2010 18:39:47 +0100
Subject: make empty textboxes return an empty string instead of doing nothing.
  I hope.

---
 indra/newview/llviewermessage.cpp | 20 +++++++++++++++-----
 1 file changed, 15 insertions(+), 5 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index f897f5e733..321100e140 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -6176,10 +6176,20 @@ bool callback_script_dialog(const LLSD& notification, const LLSD& response)
 {
 	LLNotificationForm form(notification["form"]);
 	//std::string button = "booya";//LLNotification::getSelectedOptionName(response);
-	std::string button = response.has(TEXTBOX_MAGIC_TOKEN) ?
-		response[TEXTBOX_MAGIC_TOKEN].asString() :
-		LLNotification::getSelectedOptionName(response);
-	S32 button_idx = LLNotification::getSelectedOption(notification, response);
+	llwarns << "ok: " << response << llendl;
+	std::string rtn_text;
+	S32 button_idx;
+	if (response[TEXTBOX_MAGIC_TOKEN].isDefined())
+	{
+		rtn_text = response[TEXTBOX_MAGIC_TOKEN].asString();
+		button_idx = 0;
+	}
+	else
+	{
+		rtn_text = LLNotification::getSelectedOptionName(response);
+		button_idx = LLNotification::getSelectedOption(notification, response);
+	}
+	llwarns << "rtn: " << rtn_text << " btnidx: " << button_idx << llendl;
 	// Didn't click "Ignore"
 	if (button_idx != -1)
 	{
@@ -6192,7 +6202,7 @@ bool callback_script_dialog(const LLSD& notification, const LLSD& response)
 		msg->addUUID("ObjectID", notification["payload"]["object_id"].asUUID());
 		msg->addS32("ChatChannel", notification["payload"]["chat_channel"].asInteger());
 		msg->addS32("ButtonIndex", button_idx);
-		msg->addString("ButtonLabel", button);
+		msg->addString("ButtonLabel", rtn_text);
 		msg->sendReliable(LLHost(notification["payload"]["sender"].asString()));
 	}
 
-- 
cgit v1.2.3


From ca1821048583acedaae7e1dbfe83a0b058faee2c Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Wed, 29 Sep 2010 19:00:55 +0100
Subject: more robustness for empty-but-not-aborted textboxes.

---
 indra/newview/lltoastscripttextbox.cpp | 6 ++++++
 indra/newview/llviewermessage.cpp      | 5 ++---
 2 files changed, 8 insertions(+), 3 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/lltoastscripttextbox.cpp b/indra/newview/lltoastscripttextbox.cpp
index 91a4831a9c..bdadff4cb0 100644
--- a/indra/newview/lltoastscripttextbox.cpp
+++ b/indra/newview/lltoastscripttextbox.cpp
@@ -171,6 +171,12 @@ void LLToastScriptTextbox::onClickOk()
 		LLSD response = mNotification->getResponseTemplate();
 		//response["OH MY GOD WHAT A HACK"] = "woot";
 		response[TEXTBOX_MAGIC_TOKEN] = pMessageText->getText();
+		if (response[TEXTBOX_MAGIC_TOKEN].asString().empty())
+		{
+			// so we can distinguish between a successfully
+			// submitted blank textbox, and an ignored toast
+			response[TEXTBOX_MAGIC_TOKEN] = true;
+		}
 		mNotification->respond(response);
 		close();
 		llwarns << response << llendl;
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 321100e140..3a8f76aca1 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -6179,15 +6179,14 @@ bool callback_script_dialog(const LLSD& notification, const LLSD& response)
 	llwarns << "ok: " << response << llendl;
 	std::string rtn_text;
 	S32 button_idx;
-	if (response[TEXTBOX_MAGIC_TOKEN].isDefined())
+	button_idx = LLNotification::getSelectedOption(notification, response);
+	if (response[TEXTBOX_MAGIC_TOKEN].isString())
 	{
 		rtn_text = response[TEXTBOX_MAGIC_TOKEN].asString();
-		button_idx = 0;
 	}
 	else
 	{
 		rtn_text = LLNotification::getSelectedOptionName(response);
-		button_idx = LLNotification::getSelectedOption(notification, response);
 	}
 	llwarns << "rtn: " << rtn_text << " btnidx: " << button_idx << llendl;
 	// Didn't click "Ignore"
-- 
cgit v1.2.3


From 2669b54e2c25ca705c4a41a89d46dee7a199757e Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Wed, 29 Sep 2010 19:13:02 +0100
Subject: start to de-cruftify.

---
 indra/newview/lltoastscripttextbox.cpp | 88 +---------------------------------
 1 file changed, 1 insertion(+), 87 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/lltoastscripttextbox.cpp b/indra/newview/lltoastscripttextbox.cpp
index bdadff4cb0..23ae4c142d 100644
--- a/indra/newview/lltoastscripttextbox.cpp
+++ b/indra/newview/lltoastscripttextbox.cpp
@@ -63,15 +63,6 @@ LLToastScriptTextbox::LLToastScriptTextbox(LLNotificationPtr& notification)
 	llwarns << "LABEL " << notification->getLabel() << llendl;
 	llwarns << "URL " << notification->getURL() << llendl;
 
-	/*
-2010-09-29T12:24:44Z WARNING: LLToastScriptTextbox: PAYLOAD {'chat_channel':i-376,'object_id':ubb05bcf2-4eca-2203-13f4-b328411d344f,'sender':'216.82.20.80:13001'}
-2010-09-29T12:24:44Z WARNING: LLToastScriptTextbox: TYPE notify
-2010-09-29T12:24:44Z WARNING: LLToastScriptTextbox: MESSAGE Tofu Tester's 'lltextbox test'
-Write something here...
-2010-09-29T12:24:44Z WARNING: LLToastScriptTextbox: LABEL 
-2010-09-29T12:24:44Z WARNING: LLToastScriptTextbox: URL 
-*/
-
 	//message subject
 	//const std::string& subject = payload["subject"].asString();
 	//message body
@@ -103,30 +94,7 @@ Write something here...
 	
 	style.font = pMessageText->getDefaultFont();
 	pMessageText->appendText(message, TRUE, style);
-	/*
-	//attachment
-	BOOL hasInventory = payload["inventory_offer"].isDefined();
-
-	//attachment text
-	LLTextBox * pAttachLink = getChild<LLTextBox>("attachment");
-	//attachment icon
-	LLIconCtrl* pAttachIcon = getChild<LLIconCtrl>("attachment_icon", TRUE);
-
-	//If attachment is empty let it be invisible and not take place at the panel
-	pAttachLink->setVisible(hasInventory);
-	pAttachIcon->setVisible(hasInventory);
-	if (hasInventory) {
-		pAttachLink->setValue(payload["inventory_name"]);
-
-		mInventoryOffer = new LLOfferInfo(payload["inventory_offer"]);
-		getChild<LLTextBox>("attachment")->setClickedCallback(boost::bind(
-				&LLToastScriptTextbox::onClickAttachment, this));
-
-		LLUIImagePtr attachIconImg = LLInventoryIcon::getIcon(mInventoryOffer->mType,
-												LLInventoryType::IT_TEXTURE);
-		pAttachIcon->setValue(attachIconImg->getName());
-	}
-	*/
+
 	//ok button
 	LLButton* pOkBtn = getChild<LLButton>("btn_ok");
 	pOkBtn->setClickedCallback((boost::bind(&LLToastScriptTextbox::onClickOk, this)));
@@ -148,16 +116,6 @@ LLToastScriptTextbox::~LLToastScriptTextbox()
 
 void LLToastScriptTextbox::close()
 {
-	// The group notice dialog may be an inventory offer.
-	// If it has an inventory save button and that button is still enabled
-	// Then we need to send the inventory declined message
-	/*
-	if(mInventoryOffer != NULL)
-	{
-		mInventoryOffer->forceResponse(IOR_DECLINE);
-		mInventoryOffer = NULL;
-	}
-	*/
 	die();
 }
 
@@ -182,47 +140,3 @@ void LLToastScriptTextbox::onClickOk()
 		llwarns << response << llendl;
 	}
 }
-/*
-void LLToastScriptTextbox::onClickAttachment()
-{
-	if (mInventoryOffer != NULL) {
-		mInventoryOffer->forceResponse(IOR_ACCEPT);
-
-		LLTextBox * pAttachLink = getChild<LLTextBox> ("attachment");
-		static const LLUIColor textColor = LLUIColorTable::instance().getColor(
-				"GroupNotifyDimmedTextColor");
-		pAttachLink->setColor(textColor);
-
-		LLIconCtrl* pAttachIcon =
-				getChild<LLIconCtrl> ("attachment_icon", TRUE);
-		pAttachIcon->setEnabled(FALSE);
-
-		//if attachment isn't openable - notify about saving
-		if (!isAttachmentOpenable(mInventoryOffer->mType)) {
-			LLNotifications::instance().add("AttachmentSaved", LLSD(), LLSD());
-		}
-
-		mInventoryOffer = NULL;
-	}
-}
-*/
-
- /*
-//static
-bool LLToastScriptTextbox::isAttachmentOpenable(LLAssetType::EType type)
-{
-	switch(type)
-	{
-	case LLAssetType::AT_LANDMARK:
-	case LLAssetType::AT_NOTECARD:
-	case LLAssetType::AT_IMAGE_JPEG:
-	case LLAssetType::AT_IMAGE_TGA:
-	case LLAssetType::AT_TEXTURE:
-	case LLAssetType::AT_TEXTURE_TGA:
-		return true;
-	default:
-		return false;
-	}
-}
-
- */
-- 
cgit v1.2.3


From 4dfb0b7b2d76cf288cca34c23218c4769ec76991 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Wed, 29 Sep 2010 19:33:03 +0100
Subject: finally, properly(?) deal with submitting empty text.

---
 indra/newview/lltoastscripttextbox.cpp | 2 --
 indra/newview/llviewermessage.cpp      | 7 +++++--
 2 files changed, 5 insertions(+), 4 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/lltoastscripttextbox.cpp b/indra/newview/lltoastscripttextbox.cpp
index 23ae4c142d..95f70eda88 100644
--- a/indra/newview/lltoastscripttextbox.cpp
+++ b/indra/newview/lltoastscripttextbox.cpp
@@ -63,8 +63,6 @@ LLToastScriptTextbox::LLToastScriptTextbox(LLNotificationPtr& notification)
 	llwarns << "LABEL " << notification->getLabel() << llendl;
 	llwarns << "URL " << notification->getURL() << llendl;
 
-	//message subject
-	//const std::string& subject = payload["subject"].asString();
 	//message body
 	const std::string& message = payload["message"].asString();
 
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 3a8f76aca1..e284d8d154 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -6180,9 +6180,12 @@ bool callback_script_dialog(const LLSD& notification, const LLSD& response)
 	std::string rtn_text;
 	S32 button_idx;
 	button_idx = LLNotification::getSelectedOption(notification, response);
-	if (response[TEXTBOX_MAGIC_TOKEN].isString())
+	if (response[TEXTBOX_MAGIC_TOKEN].isDefined())
 	{
-		rtn_text = response[TEXTBOX_MAGIC_TOKEN].asString();
+		if (response[TEXTBOX_MAGIC_TOKEN].isString())
+			rtn_text = response[TEXTBOX_MAGIC_TOKEN].asString();
+		else
+			rtn_text.clear(); // bool marks empty string
 	}
 	else
 	{
-- 
cgit v1.2.3


From 366b390a9be2b56e84c6cd5f85f5e2740d364cd1 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Wed, 29 Sep 2010 11:52:43 -0700
Subject: DN-116 Long user name wraps at far right edge in profile panel

---
 indra/newview/skins/default/xui/en/panel_edit_profile.xml | 2 +-
 indra/newview/skins/default/xui/en/panel_profile_view.xml | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_edit_profile.xml b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
index 5f16101132..665af93876 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
@@ -141,7 +141,7 @@
        use_ellipses="true" 
        value="hamilton.linden"
        wrap="true" 
-       width="215" />
+       width="205" />
      <panel
        name="lifes_images_panel"
          follows="left|top|right"
diff --git a/indra/newview/skins/default/xui/en/panel_profile_view.xml b/indra/newview/skins/default/xui/en/panel_profile_view.xml
index 551efa0c26..406ec775a5 100644
--- a/indra/newview/skins/default/xui/en/panel_profile_view.xml
+++ b/indra/newview/skins/default/xui/en/panel_profile_view.xml
@@ -108,7 +108,7 @@
    top_delta="-2"
    use_ellipses="true"
    value="jack.linden"
-   width="215" 
+   width="205" 
    wrap="true "/>
   <tab_container
    follows="all"
-- 
cgit v1.2.3


From 7a43f0983d6906efcea56370e927912461ab898b Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Wed, 29 Sep 2010 14:26:01 -0700
Subject: edit profile display name now sizes down if too long

---
 indra/newview/llpanelme.cpp                           | 14 ++++++++++++++
 .../skins/default/xui/en/panel_edit_profile.xml       | 19 +++++++++++++++++--
 2 files changed, 31 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llpanelme.cpp b/indra/newview/llpanelme.cpp
index a4a63cdc1c..79d5195ccf 100644
--- a/indra/newview/llpanelme.cpp
+++ b/indra/newview/llpanelme.cpp
@@ -232,6 +232,20 @@ void LLPanelMyProfileEdit::onNameCache(const LLUUID& agent_id, const LLAvatarNam
 {
 	getChild<LLUICtrl>("user_name")->setValue( av_name.mDisplayName );
 	getChild<LLUICtrl>("user_slid")->setValue( av_name.mUsername );
+	getChild<LLUICtrl>("user_name_small")->setValue( av_name.mDisplayName );
+
+	// show smaller display name if too long to display in regular size
+	if (getChild<LLTextBox>("user_name")->getTextPixelWidth() > getChild<LLTextBox>("user_name")->getRect().getWidth())
+	{
+		getChild<LLUICtrl>("user_name_small")->setVisible( true );
+		getChild<LLUICtrl>("user_name")->setVisible( false );
+	}
+	else
+	{
+		getChild<LLUICtrl>("user_name_small")->setVisible( false );
+		getChild<LLUICtrl>("user_name")->setVisible( true );
+
+	}
 }
 
 BOOL LLPanelMyProfileEdit::postBuild()
diff --git a/indra/newview/skins/default/xui/en/panel_edit_profile.xml b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
index 665af93876..cf075b8aae 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
@@ -118,7 +118,22 @@
        top_delta="3"
        value="Hamilton Hitchings"
        use_ellipses="true" 
-       width="265" />
+       visible="true" 
+       width="250" />
+      <text
+       follows="top|left"
+       font="SansSerifBold"
+       height="20"
+       layout="topleft"
+       left_delta="0"
+       name="user_name_small"
+       text_color="white"
+       top_delta="-4"
+       value="Hamilton Hitchings"
+       use_ellipses="true"
+       visible="false" 
+       wrap="true"
+       width="245" />
       <text
     follows="top|left"
     height="13"
@@ -126,7 +141,7 @@
     left="10"
     name="user_label"
     text_color="LtGray"
-    top_pad="4" 
+    top_pad="8" 
     value="Username:"
     width="70" />
       <text
-- 
cgit v1.2.3


From 793d6579fcfb427d9abafdcd728ef18887dbfc11 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Thu, 30 Sep 2010 10:35:06 +0100
Subject: remove a wad of the experimental evil deadcode that I added while
 hacking.

---
 indra/newview/CMakeLists.txt                       |   1 -
 indra/newview/llnotificationhandler.h              |  22 +--
 indra/newview/llnotificationmanager.cpp            |   1 -
 .../newview/llnotificationscripttextboxhandler.cpp | 174 ---------------------
 4 files changed, 1 insertion(+), 197 deletions(-)
 delete mode 100644 indra/newview/llnotificationscripttextboxhandler.cpp

(limited to 'indra/newview')

diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 300103929b..c439781175 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -309,7 +309,6 @@ set(viewer_SOURCE_FILES
     llnotificationmanager.cpp
     llnotificationofferhandler.cpp
     llnotificationscripthandler.cpp
-    llnotificationscripttextboxhandler.cpp
     llnotificationstorage.cpp
     llnotificationtiphandler.cpp
     lloutfitslist.cpp
diff --git a/indra/newview/llnotificationhandler.h b/indra/newview/llnotificationhandler.h
index a9ae2bd21f..28a69f2373 100644
--- a/indra/newview/llnotificationhandler.h
+++ b/indra/newview/llnotificationhandler.h
@@ -197,29 +197,9 @@ protected:
 	virtual void initChannel();
 
 	// own handlers
-	virtual void onRejectToast(LLUUID& id);
+	void onRejectToast(LLUUID& id);
 };
 
-/**
- * Handler for specific textbox-based script notices.
- */
-
-class LLScriptTextboxHandler : public LLSysHandler
-{
- public:
-	LLScriptTextboxHandler(e_notification_type type, const LLSD& id);
-	virtual ~LLScriptTextboxHandler();
-
-	// base interface functions
-	virtual bool processNotification(const LLSD& notify);
-
-protected:
-	virtual void onDeleteToast(LLToast* toast);
-	virtual void initChannel();
-
-	// own handlers
-	virtual void onRejectToast(LLUUID& id);
-};
 
 /**
  * Handler for group system notices.
diff --git a/indra/newview/llnotificationmanager.cpp b/indra/newview/llnotificationmanager.cpp
index 3967117fc8..6988227128 100644
--- a/indra/newview/llnotificationmanager.cpp
+++ b/indra/newview/llnotificationmanager.cpp
@@ -74,7 +74,6 @@ void LLNotificationManager::init()
 	LLNotifications::instance().getChannel("Browser")->connectChanged(boost::bind(&LLBrowserNotification::processNotification, LLBrowserNotification::getInstance(), _1));
 
 	mNotifyHandlers["notify"] = boost::shared_ptr<LLEventHandler>(new LLScriptHandler(NT_NOTIFY, LLSD()));
-	//mNotifyHandlers["notify"] = boost::shared_ptr<LLEventHandler>(new LLScriptTextboxHandler(NT_NOTIFY, LLSD()));
 	mNotifyHandlers["notifytip"] =  boost::shared_ptr<LLEventHandler>(new LLTipHandler(NT_NOTIFY, LLSD()));
 	mNotifyHandlers["groupnotify"] = boost::shared_ptr<LLEventHandler>(new LLGroupHandler(NT_GROUPNOTIFY, LLSD()));
 	mNotifyHandlers["alert"] = boost::shared_ptr<LLEventHandler>(new LLAlertHandler(NT_ALERT, LLSD()));
diff --git a/indra/newview/llnotificationscripttextboxhandler.cpp b/indra/newview/llnotificationscripttextboxhandler.cpp
deleted file mode 100644
index 9556501c42..0000000000
--- a/indra/newview/llnotificationscripttextboxhandler.cpp
+++ /dev/null
@@ -1,174 +0,0 @@
-/** 
- * @file llnotificationscripthandler.cpp
- * @brief Notification Handler Class for Simple Notifications and Notification Tips
- *
- * $LicenseInfo:firstyear=2000&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- * 
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- * 
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
- * $/LicenseInfo$
- */
-
-
-#include "llviewerprecompiledheaders.h" // must be first include
-
-#include "llnotificationhandler.h"
-#include "lltoastnotifypanel.h"
-#include "llviewercontrol.h"
-#include "llviewerwindow.h"
-#include "llnotificationmanager.h"
-#include "llnotifications.h"
-#include "llscriptfloater.h"
-#include "lltoastscripttextbox.h"
-
-using namespace LLNotificationsUI;
-
-static const std::string SCRIPT_DIALOG				("ScriptDialog");
-static const std::string SCRIPT_DIALOG_GROUP		("ScriptDialogGroup");
-static const std::string SCRIPT_LOAD_URL			("LoadWebPage");
-
-//--------------------------------------------------------------------------
-LLScriptTextboxHandler::LLScriptTextboxHandler(e_notification_type type, const LLSD& id)
-{
-	mType = type;
-
-	// Getting a Channel for our notifications
-	mChannel = LLChannelManager::getInstance()->createNotificationChannel();
-	mChannel->setControlHovering(true);
-	
-	LLScreenChannel* channel = dynamic_cast<LLScreenChannel*>(mChannel);
-	if(channel)
-		channel->setOnRejectToastCallback(boost::bind(&LLScriptTextboxHandler::onRejectToast, this, _1));
-
-}
-
-//--------------------------------------------------------------------------
-LLScriptTextboxHandler::~LLScriptTextboxHandler()
-{
-}
-
-//--------------------------------------------------------------------------
-void LLScriptTextboxHandler::initChannel()
-{
-	S32 channel_right_bound = gViewerWindow->getWorldViewRectScaled().mRight - gSavedSettings.getS32("NotificationChannelRightMargin"); 
-	S32 channel_width = gSavedSettings.getS32("NotifyBoxWidth");
-	mChannel->init(channel_right_bound - channel_width, channel_right_bound);
-}
-
-//--------------------------------------------------------------------------
-bool LLScriptTextboxHandler::processNotification(const LLSD& notify)
-{
-	if(!mChannel)
-	{
-		return false;
-	}
-
-	LLNotificationPtr notification = LLNotifications::instance().find(notify["id"].asUUID());
-
-	if(!notification)
-		return false;
-
-	// arrange a channel on a screen
-	if(!mChannel->getVisible())
-	{
-		initChannel();
-	}
-	
-	if(notify["sigtype"].asString() == "add" || notify["sigtype"].asString() == "change")
-	{
-		if (LLHandlerUtil::canLogToIM(notification))
-		{
-			LLHandlerUtil::logToIMP2P(notification);
-		}
-
-		if(0)//(SCRIPT_DIALOG == notification->getName() || SCRIPT_DIALOG_GROUP == notification->getName() || SCRIPT_LOAD_URL == notification->getName())
-		{
-			LLScriptFloaterManager::getInstance()->onAddNotification(notification->getID());
-		}
-		else
-		{
-			LLToastScriptTextbox* notify_box = new LLToastScriptTextbox(notification);
-
-			LLToast::Params p;
-			p.notif_id = notification->getID();
-			p.notification = notification;
-			p.panel = notify_box;	
-			p.on_delete_toast = boost::bind(&LLScriptTextboxHandler::onDeleteToast, this, _1);
-
-			LLScreenChannel* channel = dynamic_cast<LLScreenChannel*>(mChannel);
-			if(channel)
-			{
-				channel->addToast(p);
-			}
-
-			// send a signal to the counter manager
-			mNewNotificationSignal();
-		}
-	}
-	else if (notify["sigtype"].asString() == "delete")
-	{
-		if(SCRIPT_DIALOG == notification->getName() || SCRIPT_DIALOG_GROUP == notification->getName() || SCRIPT_LOAD_URL == notification->getName())
-		{
-			LLScriptFloaterManager::getInstance()->onRemoveNotification(notification->getID());
-		}
-		else
-		{
-			mChannel->killToastByNotificationID(notification->getID());
-		}
-	}
-	return false;
-}
-
-//--------------------------------------------------------------------------
-
-void LLScriptTextboxHandler::onDeleteToast(LLToast* toast)
-{
-	// send a signal to the counter manager
-	mDelNotificationSignal();
-
-	// send a signal to a listener to let him perform some action
-	// in this case listener is a SysWellWindow and it will remove a corresponding item from its list
-	mNotificationIDSignal(toast->getNotificationID());
-
-	LLNotificationPtr notification = LLNotifications::getInstance()->find(toast->getNotificationID());
-	
-	if( notification && 
-		(SCRIPT_DIALOG == notification->getName() || SCRIPT_DIALOG_GROUP == notification->getName()) )
-	{
-		LLScriptFloaterManager::getInstance()->onRemoveNotification(notification->getID());
-	}
-}
-
-//--------------------------------------------------------------------------
-void LLScriptTextboxHandler::onRejectToast(LLUUID& id)
-{
-	LLNotificationPtr notification = LLNotifications::instance().find(id);
-
-	if (notification
-			&& LLNotificationManager::getInstance()->getHandlerForNotification(
-					notification->getType()) == this)
-	{
-		LLNotifications::instance().cancel(notification);
-	}
-}
-
-//--------------------------------------------------------------------------
-
-
-
-
-- 
cgit v1.2.3


From 03842eebcf6cb01d9e0dbe493fad2af533a9333a Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Thu, 30 Sep 2010 10:36:08 +0100
Subject: remove more evil deadcode.

---
 indra/newview/llnotificationscripthandler.cpp | 2 --
 1 file changed, 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llnotificationscripthandler.cpp b/indra/newview/llnotificationscripthandler.cpp
index eed0bdc15d..45590c3cdb 100644
--- a/indra/newview/llnotificationscripthandler.cpp
+++ b/indra/newview/llnotificationscripthandler.cpp
@@ -97,12 +97,10 @@ bool LLScriptHandler::processNotification(const LLSD& notify)
 
 		if(SCRIPT_DIALOG == notification->getName() || SCRIPT_DIALOG_GROUP == notification->getName() || SCRIPT_LOAD_URL == notification->getName())
 		{
-			llwarns << "DUMB ROUTE" << llendl;
 			LLScriptFloaterManager::getInstance()->onAddNotification(notification->getID());
 		}
 		else
 		{
-			llwarns << "SMART ROUTE" << llendl;
 			LLToastNotifyPanel* notify_box = new LLToastNotifyPanel(notification);
 
 			LLToast::Params p;
-- 
cgit v1.2.3


From ace8964cf56891202f3d0690d7321656ce1bd1f9 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Thu, 30 Sep 2010 11:13:02 +0100
Subject: more de-crufting.

---
 indra/newview/lltoastnotifypanel.cpp | 46 ++++--------------------------------
 indra/newview/lltoastnotifypanel.h   |  2 --
 2 files changed, 5 insertions(+), 43 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/lltoastnotifypanel.cpp b/indra/newview/lltoastnotifypanel.cpp
index 45c031964c..3f7dc24ade 100644
--- a/indra/newview/lltoastnotifypanel.cpp
+++ b/indra/newview/lltoastnotifypanel.cpp
@@ -55,7 +55,6 @@ LLToastNotifyPanel::button_click_signal_t LLToastNotifyPanel::sButtonClickSignal
 LLToastNotifyPanel::LLToastNotifyPanel(LLNotificationPtr& notification, const LLRect& rect, bool show_images) : 
 LLToastPanel(notification),
 mTextBox(NULL),
-mUserInputBox(NULL),
 mInfoPanel(NULL),
 mControlPanel(NULL),
 mNumOptions(0),
@@ -68,42 +67,14 @@ mCloseNotificationOnDestroy(true)
 	{
 		this->setShape(rect);
 	}		 
-	// get a form for the notification
-	LLNotificationFormPtr form(notification->getForm());
-	// get number of elements
-	mNumOptions = form->getNumElements();
-
 	mInfoPanel = getChild<LLPanel>("info_panel");
 	mControlPanel = getChild<LLPanel>("control_panel");
 	BUTTON_WIDTH = gSavedSettings.getS32("ToastButtonWidth");
-
 	// customize panel's attributes
-
 	// is it intended for displaying a tip?
 	mIsTip = notification->getType() == "notifytip";
 	// is it a script dialog?
 	mIsScriptDialog = (notification->getName() == "ScriptDialog" || notification->getName() == "ScriptDialogGroup");
-	// is it a script dialog with llTextBox()?
-	mIsScriptTextBox = false;
-	if (mIsScriptDialog)
-	{
-		// if ANY of the buttons have the magic lltextbox string as name, then
-		// treat the whole dialog as a simple text entry box (i.e. mixed button
-		// and textbox forms are not supported)
-		for (int i=0; i<mNumOptions; ++i)
-		{
-			LLSD form_element = form->getElement(i);
-			llwarns << form_element << llendl;
-			if (form_element["name"].asString() == TEXTBOX_MAGIC_TOKEN)
-			{
-				mIsScriptTextBox = true;
-				break;
-			}
-		}
-	}
-	llwarns << "FORM ELEMS " << int(form->getNumElements()) << llendl;
-	llwarns << "isScriptDialog? " << int(mIsScriptDialog) << llendl;
-	llwarns << "isScriptTextBox? " << int(mIsScriptTextBox) << llendl;
 	// is it a caution?
 	//
 	// caution flag can be set explicitly by specifying it in the notification payload, or it can be set implicitly if the
@@ -124,6 +95,10 @@ mCloseNotificationOnDestroy(true)
 	setIsChrome(TRUE);
 	// initialize
 	setFocusRoot(!mIsTip);
+	// get a form for the notification
+	LLNotificationFormPtr form(notification->getForm());
+	// get number of elements
+	mNumOptions = form->getNumElements();
 
 	// customize panel's outfit
 	// preliminary adjust panel's layout
@@ -149,11 +124,6 @@ mCloseNotificationOnDestroy(true)
 	mTextBox->setPlainText(!show_images);
 	mTextBox->setValue(notification->getMessage());
 
-	mUserInputBox = getChild<LLTextEditor>("user_input_box"); 
-	mUserInputBox->setMaxTextLength(254);// FIXME
-	mUserInputBox->setVisible(FALSE);
-	mUserInputBox->setEnabled(FALSE);
-
 	// add buttons for a script notification
 	if (mIsTip)
 	{
@@ -176,11 +146,6 @@ mCloseNotificationOnDestroy(true)
 			if (form_element["name"].asString() == TEXTBOX_MAGIC_TOKEN)
 			{
 				// a textbox pretending to be a button.
-				// (re)enable the textbox for this panel, and continue.
-				mUserInputBox->setVisible(TRUE);
-				mUserInputBox->setEnabled(TRUE);
-				mUserInputBox->setFocus(TRUE);
-				mUserInputBox->insertText("FOOOOOO!!!!");
 				continue;
 			}
 			LLButton* new_button = createButton(form_element, TRUE);
@@ -295,7 +260,7 @@ LLButton* LLToastNotifyPanel::createButton(const LLSD& form_element, BOOL is_opt
 		p.image_color(LLUIColorTable::instance().getColor("ButtonCautionImageColor"));
 		p.image_color_disabled(LLUIColorTable::instance().getColor("ButtonCautionImageColor"));
 	}
-	// for the scriptdialog buttons we use fixed button size. This is a limit!
+	// for the scriptdialog buttons we use fixed button size. This  is a limit!
 	if (!mIsScriptDialog && font->getWidth(form_element["text"].asString()) > BUTTON_WIDTH)
 	{
 		p.rect.width = 1;
@@ -527,7 +492,6 @@ void LLToastNotifyPanel::onClickButton(void* data)
 		self->mNotification->setResponder(new_info);
 	}
 
-	llwarns << response << llendl;
 	self->mNotification->respond(response);
 
 	if(is_reusable)
diff --git a/indra/newview/lltoastnotifypanel.h b/indra/newview/lltoastnotifypanel.h
index 06f6767ccd..57711b3d80 100644
--- a/indra/newview/lltoastnotifypanel.h
+++ b/indra/newview/lltoastnotifypanel.h
@@ -99,7 +99,6 @@ protected:
 
 	// panel elements
 	LLTextBase*		mTextBox;
-	LLTextEditor*           mUserInputBox;
 	LLPanel*		mInfoPanel;		// a panel, that contains an information
 	LLPanel*		mControlPanel;	// a panel, that contains buttons (if present)
 
@@ -122,7 +121,6 @@ protected:
 	void disableRespondedOptions(LLNotificationPtr& notification);
 
 	bool mIsTip;
-	bool mIsScriptTextBox;
 	bool mAddedDefaultBtn;
 	bool mIsScriptDialog;
 	bool mIsCaution; 
-- 
cgit v1.2.3


From de84d95ba083c5a2ab827b9b51849d30ab11c7d3 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Thu, 30 Sep 2010 11:15:58 +0100
Subject: minor tidy-up.

---
 indra/newview/llviewermessage.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index e284d8d154..02d27be4ec 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -37,6 +37,7 @@
 #include "llfloaterreg.h"
 #include "llfollowcamparams.h"
 #include "llinventorydefines.h"
+#include "lllslconstants.h"
 #include "llregionhandle.h"
 #include "llsdserialize.h"
 #include "llteleportflags.h"
@@ -6171,7 +6172,6 @@ const S32 SCRIPT_DIALOG_BUTTON_STR_SIZE = 24;
 const S32 SCRIPT_DIALOG_MAX_MESSAGE_SIZE = 512;
 const char* SCRIPT_DIALOG_HEADER = "Script Dialog:\n";
 
-#include "lllslconstants.h"
 bool callback_script_dialog(const LLSD& notification, const LLSD& response)
 {
 	LLNotificationForm form(notification["form"]);
-- 
cgit v1.2.3


From dd6a77c9e1baeec7276d3599b73d5cde384e810f Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Thu, 30 Sep 2010 12:01:36 +0100
Subject: xui / panel format cleanup.

---
 indra/newview/lltoastscripttextbox.cpp             | 48 ++++------------------
 indra/newview/lltoastscripttextbox.h               | 25 +----------
 .../skins/default/xui/en/panel_notify_textbox.xml  | 19 ++++-----
 3 files changed, 18 insertions(+), 74 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/lltoastscripttextbox.cpp b/indra/newview/lltoastscripttextbox.cpp
index 95f70eda88..581bb9519c 100644
--- a/indra/newview/lltoastscripttextbox.cpp
+++ b/indra/newview/lltoastscripttextbox.cpp
@@ -31,8 +31,6 @@
 #include "llfocusmgr.h"
 
 #include "llbutton.h"
-#include "lliconctrl.h"
-#include "llinventoryfunctions.h"
 #include "llnotifications.h"
 #include "llviewertexteditor.h"
 
@@ -44,59 +42,30 @@
 
 #include "llglheaders.h"
 #include "llagent.h"
-#include "llavatariconctrl.h"
-#include "llfloaterinventory.h"
-#include "llinventorytype.h"
 
-const S32 LLToastScriptTextbox::DEFAULT_MESSAGE_MAX_LINE_COUNT	= 7;
+const S32 LLToastScriptTextbox::DEFAULT_MESSAGE_MAX_LINE_COUNT= 7;
 
 LLToastScriptTextbox::LLToastScriptTextbox(LLNotificationPtr& notification)
-:	LLToastNotifyPanel(notification),
-	mInventoryOffer(NULL)
+:	LLToastNotifyPanel(notification)
 {
 	buildFromFile( "panel_notify_textbox.xml");
 
 	const LLSD& payload = notification->getPayload();
-	llwarns << "PAYLOAD " << payload << llendl;
-	llwarns << "TYPE " << notification->getType() << llendl;
-	llwarns << "MESSAGE " << notification->getMessage() << llendl;
-	llwarns << "LABEL " << notification->getLabel() << llendl;
-	llwarns << "URL " << notification->getURL() << llendl;
 
 	//message body
 	const std::string& message = payload["message"].asString();
 
-	std::string timeStr = "["+LLTrans::getString("UTCTimeWeek")+"],["
-		+LLTrans::getString("UTCTimeDay")+"] ["
-		+LLTrans::getString("UTCTimeMth")+"] ["
-		+LLTrans::getString("UTCTimeYr")+"] ["
-		+LLTrans::getString("UTCTimeHr")+"]:["
-		+LLTrans::getString("UTCTimeMin")+"]:["
-		+LLTrans::getString("UTCTimeSec")+"] ["
-		+LLTrans::getString("UTCTimeTimezone")+"]";
-	const LLDate timeStamp = notification->getDate();
-	LLDate notice_date = timeStamp.notNull() ? timeStamp : LLDate::now();
-	LLSD substitution;
-	substitution["datetime"] = (S32) notice_date.secondsSinceEpoch();
-	LLStringUtil::format(timeStr, substitution);
-
 	LLViewerTextEditor* pMessageText = getChild<LLViewerTextEditor>("message");
 	pMessageText->clear();
 
 	LLStyle::Params style;
-
-	LLFontGL* date_font = LLFontGL::getFontByName(getString("date_font"));
-	if (date_font)
-		style.font = date_font;
-	pMessageText->appendText(timeStr + "\n", TRUE, style);
-	
 	style.font = pMessageText->getDefaultFont();
 	pMessageText->appendText(message, TRUE, style);
 
-	//ok button
-	LLButton* pOkBtn = getChild<LLButton>("btn_ok");
-	pOkBtn->setClickedCallback((boost::bind(&LLToastScriptTextbox::onClickOk, this)));
-	setDefaultBtn(pOkBtn);
+	//submit button
+	LLButton* pSubmitBtn = getChild<LLButton>("btn_submit");
+	pSubmitBtn->setClickedCallback((boost::bind(&LLToastScriptTextbox::onClickSubmit, this)));
+	setDefaultBtn(pSubmitBtn);
 
 	S32 maxLinesCount;
 	std::istringstream ss( getString("message_max_lines_count") );
@@ -104,7 +73,7 @@ LLToastScriptTextbox::LLToastScriptTextbox(LLNotificationPtr& notification)
 	{
 		maxLinesCount = DEFAULT_MESSAGE_MAX_LINE_COUNT;
 	}
-	snapToMessageHeight(pMessageText, maxLinesCount);
+	//snapToMessageHeight(pMessageText, maxLinesCount);
 }
 
 // virtual
@@ -118,14 +87,13 @@ void LLToastScriptTextbox::close()
 }
 
 #include "lllslconstants.h"
-void LLToastScriptTextbox::onClickOk()
+void LLToastScriptTextbox::onClickSubmit()
 {
 	LLViewerTextEditor* pMessageText = getChild<LLViewerTextEditor>("message");
 
 	if (pMessageText)
 	{
 		LLSD response = mNotification->getResponseTemplate();
-		//response["OH MY GOD WHAT A HACK"] = "woot";
 		response[TEXTBOX_MAGIC_TOKEN] = pMessageText->getText();
 		if (response[TEXTBOX_MAGIC_TOKEN].asString().empty())
 		{
diff --git a/indra/newview/lltoastscripttextbox.h b/indra/newview/lltoastscripttextbox.h
index 86fe93cf66..ae3b545e0a 100644
--- a/indra/newview/lltoastscripttextbox.h
+++ b/indra/newview/lltoastscripttextbox.h
@@ -27,19 +27,13 @@
 #ifndef LL_LLTOASTSCRIPTTEXTBOX_H
 #define LL_LLTOASTSCRIPTTEXTBOX_H
 
-#include "llfontgl.h"
 #include "lltoastnotifypanel.h"
-#include "lldarray.h"
-#include "lltimer.h"
-#include "llviewermessage.h"
 #include "llnotificationptr.h"
 
 class LLButton;
 
 /**
- * Toast panel for group notification.
- *
- * Replaces class LLGroupNotifyBox.
+ * Toast panel for scripted llTextbox notifications.
  */
 class LLToastScriptTextbox
 :	public LLToastNotifyPanel
@@ -49,7 +43,6 @@ public:
 
 	static bool onNewNotification(const LLSD& notification);
 
-
 	// Non-transient messages.  You can specify non-default button
 	// layouts (like one for script dialogs) by passing various
 	// numbers in for "layout".
@@ -57,23 +50,9 @@ public:
 
 	/*virtual*/ ~LLToastScriptTextbox();
 protected:
-	void onClickOk();
-	void onClickAttachment();
+	void onClickSubmit();
 private:
-	static bool isAttachmentOpenable(LLAssetType::EType);
-
 	static const S32 DEFAULT_MESSAGE_MAX_LINE_COUNT;
-
-	LLButton* mSaveInventoryBtn;
-
-	LLUUID mGroupID;
-	LLOfferInfo* mInventoryOffer;
 };
 
-// This view contains the stack of notification windows.
-//extern LLView* gGroupNotifyBoxView;
-
-const S32 GROUP_LAYOUT_DEFAULT = 0;
-const S32 GROUP_LAYOUT_SCRIPT_DIALOG = 1;
-
 #endif
diff --git a/indra/newview/skins/default/xui/en/panel_notify_textbox.xml b/indra/newview/skins/default/xui/en/panel_notify_textbox.xml
index dcd1e29e17..0fc84f0f3c 100644
--- a/indra/newview/skins/default/xui/en/panel_notify_textbox.xml
+++ b/indra/newview/skins/default/xui/en/panel_notify_textbox.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <panel
  background_visible="true"
- height="90"
+ height="150"
  label="instant_message"
  layout="topleft"
  left="0"
@@ -11,17 +11,14 @@
     <string
      name="message_max_lines_count"
      value="7" />
-    <string
-     name="date_font"
-     value="SANSSERIF" />
     <text_editor
      parse_urls="true"
      enabled="true"
      follows="all"
-     height="0"
+     height="60"
      layout="topleft"
      left="25"
-     max_length="2147483647"
+     max_length="250"
      name="message"
      parse_highlights="true"
      read_only="false"
@@ -33,12 +30,12 @@
      word_wrap="true" >
     </text_editor>
     <button
-     bottom="85"
-     follows="bottom"
+     top="110"
+     follows="top|left"
      height="20"
-     label="OK"
+     label="Submit"
      layout="topleft"
-     right="-10"
-     name="btn_ok"
+     left="25"
+     name="btn_submit"
      width="70" />
 </panel>
-- 
cgit v1.2.3


From 5b3f293453af7c54ef5c1913c706982ece8be1d0 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Thu, 30 Sep 2010 12:06:44 +0100
Subject: more de-crufting.

---
 indra/newview/llscriptfloater.cpp | 1 -
 indra/newview/llviewermessage.cpp | 5 ++---
 2 files changed, 2 insertions(+), 4 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llscriptfloater.cpp b/indra/newview/llscriptfloater.cpp
index 53a5881f4b..170e23e4c5 100644
--- a/indra/newview/llscriptfloater.cpp
+++ b/indra/newview/llscriptfloater.cpp
@@ -592,7 +592,6 @@ bool LLScriptFloater::isScriptTextbox(LLNotificationPtr notification)
 		for (int i=0; i<num_options; ++i)
 		{
 			LLSD form_element = form->getElement(i);
-			llwarns << form_element << llendl;
 			if (form_element["name"].asString() == TEXTBOX_MAGIC_TOKEN)
 			{
 				return true;
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 02d27be4ec..dfd7b1092a 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -6175,8 +6175,7 @@ const char* SCRIPT_DIALOG_HEADER = "Script Dialog:\n";
 bool callback_script_dialog(const LLSD& notification, const LLSD& response)
 {
 	LLNotificationForm form(notification["form"]);
-	//std::string button = "booya";//LLNotification::getSelectedOptionName(response);
-	llwarns << "ok: " << response << llendl;
+
 	std::string rtn_text;
 	S32 button_idx;
 	button_idx = LLNotification::getSelectedOption(notification, response);
@@ -6191,7 +6190,7 @@ bool callback_script_dialog(const LLSD& notification, const LLSD& response)
 	{
 		rtn_text = LLNotification::getSelectedOptionName(response);
 	}
-	llwarns << "rtn: " << rtn_text << " btnidx: " << button_idx << llendl;
+
 	// Didn't click "Ignore"
 	if (button_idx != -1)
 	{
-- 
cgit v1.2.3


From a3584c383efa433671ee3ef9e139081c021a3b76 Mon Sep 17 00:00:00 2001
From: Seth ProductEngine <slitovchuk@productengine.com>
Date: Fri, 1 Oct 2010 22:23:07 +0300
Subject: STORM-264 FIXED Add lower-right corner resize marker for detached
 side panels. Detached SP now has a slightly reduced height not to make it
 flush with the bottom bar.

---
 indra/newview/llsidetray.cpp | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llsidetray.cpp b/indra/newview/llsidetray.cpp
index 9ee504cc4c..426ad26f1b 100644
--- a/indra/newview/llsidetray.cpp
+++ b/indra/newview/llsidetray.cpp
@@ -57,6 +57,8 @@ using namespace LLNotificationsUI;
 static LLRootViewRegistry::Register<LLSideTray>	t1("side_tray");
 static LLDefaultChildRegistry::Register<LLSideTrayTab>	t2("sidetray_tab");
 
+static const S32 BOTTOM_BAR_PAD = 5;
+
 static const std::string COLLAPSED_NAME = "<<";
 static const std::string EXPANDED_NAME  = ">>";
 
@@ -316,6 +318,9 @@ void LLSideTrayTab::undock(LLFloater* floater_tab)
 	floater_tab->setTitle(mTabTitle);
 	floater_tab->setName(getName());
 
+	// Resize handles get obscured by added panel so move them to front.
+	floater_tab->moveResizeHandlesToFront();
+
 	// Reshape the floater if needed.
 	LLRect floater_rect;
 	if (floater_tab->hasSavedRect())
@@ -327,13 +332,18 @@ void LLSideTrayTab::undock(LLFloater* floater_tab)
 	{
 		// Detaching for the first time. Reshape the floater.
 		floater_rect = side_tray->getLocalRect();
+
+		// Reduce detached floater height by small BOTTOM_BAR_PAD not to make it flush with the bottom bar.
+		floater_rect.mBottom += LLBottomTray::getInstance()->getRect().getHeight() + BOTTOM_BAR_PAD;
+		floater_rect.makeValid();
 		floater_tab->reshape(floater_rect.getWidth(), floater_rect.getHeight());
 	}
 
 	// Reshape the panel.
 	{
-		LLRect panel_rect = floater_rect;
+		LLRect panel_rect = floater_tab->getLocalRect();
 		panel_rect.mTop -= floater_tab->getHeaderHeight();
+		panel_rect.makeValid();
 		setRect(panel_rect);
 		reshape(panel_rect.getWidth(), panel_rect.getHeight());
 	}
-- 
cgit v1.2.3


From 60e8d3c6579ab1e2dbf7a1d7c7ac5cb7d3c8296a Mon Sep 17 00:00:00 2001
From: Paul Guslisty <pguslisty@productengine.com>
Date: Thu, 30 Sep 2010 14:26:19 +0300
Subject: STORM-212 FIXED Gear button is always disabled in My Profile->My
 Picks

- Deleted gear button as unnecessary. There is no functionality for it.
---
 indra/newview/skins/default/xui/en/panel_picks.xml | 15 ++-------------
 1 file changed, 2 insertions(+), 13 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_picks.xml b/indra/newview/skins/default/xui/en/panel_picks.xml
index 4f7c4fa9b2..978b204df9 100644
--- a/indra/newview/skins/default/xui/en/panel_picks.xml
+++ b/indra/newview/skins/default/xui/en/panel_picks.xml
@@ -106,18 +106,6 @@ bg_opaque_color="DkGray2"
 		      user_resize="false" 
 		      auto_resize="true"
 			  width="51">
-	            <button
-	             enabled="false"
-	             follows="bottom|left"
-	             height="18"
-	             image_selected="OptionsMenu_Press"
-	             image_unselected="OptionsMenu_Off"
-	             image_disabled="OptionsMenu_Disabled"
-	             layout="topleft"
-	             left="0"
-	             name="gear_menu_btn"
-	             top_pad="0"
-	             width="18" />
 				<button
 	             follows="bottom|left"
 	             height="18"
@@ -125,9 +113,10 @@ bg_opaque_color="DkGray2"
 	             image_selected="AddItem_Press"
 	             image_unselected="AddItem_Off"
 	             layout="topleft"
-	             left_pad="15"
+	             left="0"
 	             name="new_btn"
 	             tool_tip="Create a new pick or classified at the current location"
+	             top="0"
 	             width="18" />
 		  </layout_panel>
 		  
-- 
cgit v1.2.3


From 0e7b77b9827668fd9819be807ff0dfa4cd0b1219 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Thu, 30 Sep 2010 12:49:28 +0100
Subject: make the ignore button slightly clickable.  XUI is wierd.

---
 .../skins/default/xui/en/panel_notify_textbox.xml  | 46 +++++++++++++++++-----
 1 file changed, 36 insertions(+), 10 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_notify_textbox.xml b/indra/newview/skins/default/xui/en/panel_notify_textbox.xml
index 0fc84f0f3c..99a3540012 100644
--- a/indra/newview/skins/default/xui/en/panel_notify_textbox.xml
+++ b/indra/newview/skins/default/xui/en/panel_notify_textbox.xml
@@ -1,16 +1,26 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <panel
- background_visible="true"
- height="150"
- label="instant_message"
- layout="topleft"
- left="0"
- name="panel_notify_textbox"
- top="0"
- width="305">
-    <string
+   background_visible="true"
+   height="230"
+   label="instant_message"
+   layout="topleft"
+   left="0"
+   name="panel_notify_textbox"
+   top="0"
+   width="305">
+  <string
      name="message_max_lines_count"
      value="7" />
+  <panel
+   bevel_style="none"
+   follows="left|right|top"
+   height="150"
+   label="info_panel"
+   layout="topleft"
+   left="0"
+   name="info_panel"
+   top="0"
+   width="305">
     <text_editor
      parse_urls="true"
      enabled="true"
@@ -26,7 +36,7 @@
      type="string"
      use_ellipses="true"
      value="message"
-     width="270"
+     width="260"
      word_wrap="true" >
     </text_editor>
     <button
@@ -38,4 +48,20 @@
      left="25"
      name="btn_submit"
      width="70" />
+  </panel>
+  <panel
+     background_visible="false"
+     follows="left|right|bottom"
+     height="0" 
+     width="290"
+     label="control_panel"
+     layout="topleft"
+     left="10"
+     name="control_panel"
+     top_pad="5">
+    <!-- 
+	 Notes:
+	 This panel holds the Ignore button and possibly other buttons of notification.
+      -->
+  </panel>
 </panel>
-- 
cgit v1.2.3


From 5ec66ba471ad1527710b6686353bc2688cbb72ed Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Thu, 30 Sep 2010 15:00:23 -0700
Subject: changing punctuation only display name error message

---
 indra/newview/skins/default/xui/en/notifications.xml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index eb2baf3e4c..efd6ed0ac8 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -3288,7 +3288,7 @@ Please try again later.
    icon="alertmodal.tga"
  name="AgentDisplayNameSetOnlyPunctuation"
  type="alertmodal">
-    Your display name can't contain only punctuation.
+    Your display name must contain letters other than punctuation.
   </notification>
 
 
@@ -5490,7 +5490,7 @@ An object named [OBJECTFROMNAME] owned by [NAME_SLURL] has given you this [OBJEC
    icon="notify.tga"
    name="OfferFriendship"
    type="offer">
-[NAME_SLURL] is offering friendship.
+[NAME] is offering friendship.
 
 [MESSAGE]
 
-- 
cgit v1.2.3


From 77eda083f7295f13e652ffb75c79000b873588d3 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Thu, 30 Sep 2010 15:03:07 -0700
Subject: fixing [NAME] issue for friend notifications with no message

---
 indra/newview/llviewermessage.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 9b1f2e67c6..4e40b706a0 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -2876,7 +2876,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
 			}
 			else
 			{
-				args["NAME_SLURL"] = LLSLURL("agent", from_id, "about").getSLURLString();
+				args["NAME"] = LLSLURL("agent", from_id, "about").getSLURLString();
 				if(message.empty())
 				{
 					//support for frienship offers from clients before July 2008
-- 
cgit v1.2.3


From 716b873102e1d69ef7d0e5f44be7371e023f129b Mon Sep 17 00:00:00 2001
From: Wolfpup Lowenhar <wolfpup67@earthlink.net>
Date: Thu, 30 Sep 2010 22:06:51 -0400
Subject: STORM-256 Corrupted lines above mini location bar when navigation and
 favorites bar hidden

---
 indra/newview/skins/default/xui/en/main_view.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/main_view.xml b/indra/newview/skins/default/xui/en/main_view.xml
index 8d9ebf6e06..464fbef7af 100644
--- a/indra/newview/skins/default/xui/en/main_view.xml
+++ b/indra/newview/skins/default/xui/en/main_view.xml
@@ -20,7 +20,7 @@
                   mouse_opaque="false"
                   name="nav_bar_container"
                   tab_stop="false"
-                  min_height="10" 
+                  min_height="1" 
                   width="1024"
                   user_resize="false" 
                   visible="false">
-- 
cgit v1.2.3


From 9820c8f57e5bca25143c1e5a1123eba59cb82a04 Mon Sep 17 00:00:00 2001
From: Wolfpup Lowenhar <wolfpup67@earthlink.net>
Date: Thu, 30 Sep 2010 22:42:16 -0400
Subject: STORM-256 Corrupted lines above mini location bar when navigation and
 favorites bar hidden

---
 indra/newview/skins/default/xui/en/main_view.xml | 1 -
 1 file changed, 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/main_view.xml b/indra/newview/skins/default/xui/en/main_view.xml
index 464fbef7af..520a604bde 100644
--- a/indra/newview/skins/default/xui/en/main_view.xml
+++ b/indra/newview/skins/default/xui/en/main_view.xml
@@ -20,7 +20,6 @@
                   mouse_opaque="false"
                   name="nav_bar_container"
                   tab_stop="false"
-                  min_height="1" 
                   width="1024"
                   user_resize="false" 
                   visible="false">
-- 
cgit v1.2.3


From c7b6ebaf762ba9bcdf64c6bc3b1e0fb81356c5b2 Mon Sep 17 00:00:00 2001
From: Merov Linden <merov@lindenlab.com>
Date: Thu, 30 Sep 2010 22:57:05 -0700
Subject: Port of SNOW-643 : Water flicker at high altitude. This doesn't fix
 the low altitude flicker though (STORM-306)

---
 indra/newview/lldrawable.cpp         |   1 +
 indra/newview/lldrawpool.cpp         |   1 +
 indra/newview/lldrawpool.h           |   1 +
 indra/newview/lldrawpoolground.cpp   |   2 +-
 indra/newview/lldrawpoolsky.cpp      |   2 +-
 indra/newview/lldrawpoolwater.cpp    |  28 +--
 indra/newview/lldrawpoolwlsky.cpp    |   2 +-
 indra/newview/llfloatergodtools.cpp  |  18 +-
 indra/newview/llspatialpartition.cpp |  25 ++-
 indra/newview/llspatialpartition.h   |   7 +
 indra/newview/llsurface.cpp          |   5 +
 indra/newview/llviewerdisplay.cpp    |   3 +-
 indra/newview/llviewerobject.cpp     |   4 +-
 indra/newview/llviewerobject.h       |  22 +--
 indra/newview/llviewerregion.cpp     |   1 +
 indra/newview/llviewerregion.h       |   1 +
 indra/newview/llviewershadermgr.cpp  |   4 +-
 indra/newview/llviewerwindow.cpp     |   5 +
 indra/newview/llvosurfacepatch.cpp   |   2 +-
 indra/newview/llvowater.cpp          |  16 +-
 indra/newview/llvowater.h            |  14 ++
 indra/newview/llworld.cpp            | 353 +++++++++++++++++++++++++++--------
 indra/newview/llworld.h              |   1 +
 indra/newview/pipeline.cpp           |  45 ++---
 indra/newview/pipeline.h             |   1 +
 25 files changed, 417 insertions(+), 147 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/lldrawable.cpp b/indra/newview/lldrawable.cpp
index 583bb54160..8106fada11 100644
--- a/indra/newview/lldrawable.cpp
+++ b/indra/newview/lldrawable.cpp
@@ -358,6 +358,7 @@ void LLDrawable::makeActive()
 	{
 		U32 pcode = mVObjp->getPCode();
 		if (pcode == LLViewerObject::LL_VO_WATER ||
+			pcode == LLViewerObject::LL_VO_VOID_WATER ||
 			pcode == LLViewerObject::LL_VO_SURFACE_PATCH ||
 			pcode == LLViewerObject::LL_VO_PART_GROUP ||
 			pcode == LLViewerObject::LL_VO_HUD_PART_GROUP ||
diff --git a/indra/newview/lldrawpool.cpp b/indra/newview/lldrawpool.cpp
index cb651f9d3a..ba576ff97f 100644
--- a/indra/newview/lldrawpool.cpp
+++ b/indra/newview/lldrawpool.cpp
@@ -89,6 +89,7 @@ LLDrawPool *LLDrawPool::createPool(const U32 type, LLViewerTexture *tex0)
 	case POOL_SKY:
 		poolp = new LLDrawPoolSky();
 		break;
+	case POOL_VOIDWATER:
 	case POOL_WATER:
 		poolp = new LLDrawPoolWater();
 		break;
diff --git a/indra/newview/lldrawpool.h b/indra/newview/lldrawpool.h
index 221f81ec25..e394aeaaf1 100644
--- a/indra/newview/lldrawpool.h
+++ b/indra/newview/lldrawpool.h
@@ -57,6 +57,7 @@ public:
 		POOL_BUMP,
 		POOL_INVISIBLE, // see below *
 		POOL_AVATAR,
+		POOL_VOIDWATER,
 		POOL_WATER,
 		POOL_GLOW,
 		POOL_ALPHA,
diff --git a/indra/newview/lldrawpoolground.cpp b/indra/newview/lldrawpoolground.cpp
index e950fbfa82..b4dc0c26a6 100644
--- a/indra/newview/lldrawpoolground.cpp
+++ b/indra/newview/lldrawpoolground.cpp
@@ -68,7 +68,7 @@ void LLDrawPoolGround::render(S32 pass)
 
 	LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE);
 
-	LLGLClampToFarClip far_clip(glh_get_current_projection());
+	LLGLSquashToFarClip far_clip(glh_get_current_projection());
 
 	F32 water_height = gAgent.getRegion()->getWaterHeight();
 	glPushMatrix();
diff --git a/indra/newview/lldrawpoolsky.cpp b/indra/newview/lldrawpoolsky.cpp
index d811ab8c54..9eb45a952c 100644
--- a/indra/newview/lldrawpoolsky.cpp
+++ b/indra/newview/lldrawpoolsky.cpp
@@ -97,7 +97,7 @@ void LLDrawPoolSky::render(S32 pass)
 
 	LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE);
 
-	LLGLClampToFarClip far_clip(glh_get_current_projection());
+	LLGLSquashToFarClip far_clip(glh_get_current_projection());
 
 	LLGLEnable fog_enable( (mVertexShaderLevel < 1 && LLViewerCamera::getInstance()->cameraUnderWater()) ? GL_FOG : 0);
 
diff --git a/indra/newview/lldrawpoolwater.cpp b/indra/newview/lldrawpoolwater.cpp
index ce1b899d55..6126908231 100644
--- a/indra/newview/lldrawpoolwater.cpp
+++ b/indra/newview/lldrawpoolwater.cpp
@@ -532,6 +532,7 @@ void LLDrawPoolWater::shade()
 	glColor4fv(water_color.mV);
 
 	{
+		LLGLEnable depth_clamp(gGLManager.mHasDepthClamp ? GL_DEPTH_CLAMP : 0);
 		LLGLDisable cullface(GL_CULL_FACE);
 		for (std::vector<LLFace*>::iterator iter = mDrawFace.begin();
 			iter != mDrawFace.end(); iter++)
@@ -548,30 +549,19 @@ void LLDrawPoolWater::shade()
 
 			sNeedsReflectionUpdate = TRUE;
 			
-			if (water->getUseTexture())
+			if (water->getUseTexture() || !water->getIsEdgePatch())
 			{
 				sNeedsDistortionUpdate = TRUE;
 				face->renderIndexed();
 			}
+			else if (gGLManager.mHasDepthClamp || deferred_render)
+			{
+				face->renderIndexed();
+			}
 			else
-			{ //smash background faces to far clip plane
-				if (water->getIsEdgePatch())
-				{
-					if (deferred_render)
-					{
-						face->renderIndexed();
-					}
-					else
-					{
-						LLGLClampToFarClip far_clip(glh_get_current_projection());
-						face->renderIndexed();
-					}
-				}
-				else
-				{
-					sNeedsDistortionUpdate = TRUE;
-					face->renderIndexed();
-				}
+			{
+				LLGLSquashToFarClip far_clip(glh_get_current_projection());
+				face->renderIndexed();
 			}
 		}
 	}
diff --git a/indra/newview/lldrawpoolwlsky.cpp b/indra/newview/lldrawpoolwlsky.cpp
index 41a299151e..eaa6aa7e37 100644
--- a/indra/newview/lldrawpoolwlsky.cpp
+++ b/indra/newview/lldrawpoolwlsky.cpp
@@ -260,7 +260,7 @@ void LLDrawPoolWLSky::render(S32 pass)
 	LLGLDepthTest depth(GL_TRUE, GL_FALSE);
 	LLGLDisable clip(GL_CLIP_PLANE0);
 
-	LLGLClampToFarClip far_clip(glh_get_current_projection());
+	LLGLSquashToFarClip far_clip(glh_get_current_projection());
 
 	renderSkyHaze(camHeightLocal);
 
diff --git a/indra/newview/llfloatergodtools.cpp b/indra/newview/llfloatergodtools.cpp
index f95112a8ab..087e4abe7e 100644
--- a/indra/newview/llfloatergodtools.cpp
+++ b/indra/newview/llfloatergodtools.cpp
@@ -210,13 +210,6 @@ void LLFloaterGodTools::processRegionInfo(LLMessageSystem* msg)
 	llassert(msg);
 	if (!msg) return;
 
-	LLHost host = msg->getSender();
-	if (host != gAgent.getRegionHost())
-	{
-		// update is for a different region than the one we're in
-		return;
-	}
-
 	//const S32 SIM_NAME_BUF = 256;
 	U32 region_flags;
 	U8 sim_access;
@@ -234,6 +227,8 @@ void LLFloaterGodTools::processRegionInfo(LLMessageSystem* msg)
 	S32 redirect_grid_y;
 	LLUUID cache_id;
 
+	LLHost host = msg->getSender();
+
 	msg->getStringFast(_PREHASH_RegionInfo, _PREHASH_SimName, sim_name);
 	msg->getU32Fast(_PREHASH_RegionInfo, _PREHASH_EstateID, estate_id);
 	msg->getU32Fast(_PREHASH_RegionInfo, _PREHASH_ParentEstateID, parent_estate_id);
@@ -243,6 +238,15 @@ void LLFloaterGodTools::processRegionInfo(LLMessageSystem* msg)
 	msg->getF32Fast(_PREHASH_RegionInfo, _PREHASH_ObjectBonusFactor, object_bonus_factor);
 	msg->getF32Fast(_PREHASH_RegionInfo, _PREHASH_BillableFactor, billable_factor);
 	msg->getF32Fast(_PREHASH_RegionInfo, _PREHASH_WaterHeight, water_height);
+
+	if (host != gAgent.getRegionHost())
+	{
+		// Update is for a different region than the one we're in.
+		// Just check for a waterheight change.
+		LLWorld::getInstance()->waterHeightRegionInfo(sim_name, water_height);
+		return;
+	}
+
 	msg->getF32Fast(_PREHASH_RegionInfo, _PREHASH_TerrainRaiseLimit, terrain_raise_limit);
 	msg->getF32Fast(_PREHASH_RegionInfo, _PREHASH_TerrainLowerLimit, terrain_lower_limit);
 	msg->getS32Fast(_PREHASH_RegionInfo, _PREHASH_PricePerMeter, price_per_meter);
diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp
index fb984a7c62..960e72ee42 100644
--- a/indra/newview/llspatialpartition.cpp
+++ b/indra/newview/llspatialpartition.cpp
@@ -1555,7 +1555,9 @@ void LLSpatialGroup::doOcclusion(LLCamera* camera)
 {
 	if (mSpatialPartition->isOcclusionEnabled() && LLPipeline::sUseOcclusion > 1)
 	{
-		if (earlyFail(camera, this))
+		// Don't cull hole/edge water, unless we have the GL_ARB_depth_clamp extension
+		if ((mSpatialPartition->mDrawableType == LLDrawPool::POOL_VOIDWATER && !gGLManager.mHasDepthClamp) ||
+			earlyFail(camera, this))
 		{
 			setOcclusionState(LLSpatialGroup::DISCARD_QUERY);
 			assert_states_valid(this);
@@ -1576,7 +1578,18 @@ void LLSpatialGroup::doOcclusion(LLCamera* camera)
 				{
 					buildOcclusion();
 				}
-
+				
+				// Depth clamp all water to avoid it being culled as a result of being
+				// behind the far clip plane, and in the case of edge water to avoid
+				// it being culled while still visible.
+				bool const use_depth_clamp = gGLManager.mHasDepthClamp &&
+											(mSpatialPartition->mDrawableType == LLDrawPool::POOL_WATER ||
+											mSpatialPartition->mDrawableType == LLDrawPool::POOL_VOIDWATER);
+				if (use_depth_clamp)
+				{
+					glEnable(GL_DEPTH_CLAMP);
+				}
+				
 				glBeginQueryARB(GL_SAMPLES_PASSED_ARB, mOcclusionQuery[LLViewerCamera::sCurCameraID]);					
 				glVertexPointer(3, GL_FLOAT, 0, mOcclusionVerts);
 				if (camera->getOrigin().isExactlyZero())
@@ -1592,6 +1605,11 @@ void LLSpatialGroup::doOcclusion(LLCamera* camera)
 								GL_UNSIGNED_BYTE, get_box_fan_indices(camera, mBounds[0]));
 				}
 				glEndQueryARB(GL_SAMPLES_PASSED_ARB);
+				
+				if (use_depth_clamp)
+				{
+					glDisable(GL_DEPTH_CLAMP);
+				}
 			}
 
 			setOcclusionState(LLSpatialGroup::QUERY_PENDING);
@@ -2591,9 +2609,10 @@ void renderBoundingBox(LLDrawable* drawable, BOOL set_color = TRUE)
 						gGL.color4f(0.5f,0.5f,0.5f,1.0f);
 						break;
 				case LLViewerObject::LL_VO_PART_GROUP:
-			case LLViewerObject::LL_VO_HUD_PART_GROUP:
+				case LLViewerObject::LL_VO_HUD_PART_GROUP:
 						gGL.color4f(0,0,1,1);
 						break;
+				case LLViewerObject::LL_VO_VOID_WATER:
 				case LLViewerObject::LL_VO_WATER:
 						gGL.color4f(0,0.5f,1,1);
 						break;
diff --git a/indra/newview/llspatialpartition.h b/indra/newview/llspatialpartition.h
index 1a25f3f85d..2b9cf6c630 100644
--- a/indra/newview/llspatialpartition.h
+++ b/indra/newview/llspatialpartition.h
@@ -551,6 +551,13 @@ public:
 	virtual void addGeometryCount(LLSpatialGroup* group, U32 &vertex_count, U32& index_count) { }
 };
 
+//spatial partition for hole and edge water (implemented in LLVOWater.cpp)
+class LLVoidWaterPartition : public LLWaterPartition
+{
+public:
+	LLVoidWaterPartition();
+};
+
 //spatial partition for terrain (impelmented in LLVOSurfacePatch.cpp)
 class LLTerrainPartition : public LLSpatialPartition
 {
diff --git a/indra/newview/llsurface.cpp b/indra/newview/llsurface.cpp
index af4d9fa7b9..6fc8153b77 100644
--- a/indra/newview/llsurface.cpp
+++ b/indra/newview/llsurface.cpp
@@ -1162,8 +1162,13 @@ void LLSurface::setWaterHeight(F32 height)
 	if (!mWaterObjp.isNull())
 	{
 		LLVector3 water_pos_region = mWaterObjp->getPositionRegion();
+		bool changed = water_pos_region.mV[VZ] != height;
 		water_pos_region.mV[VZ] = height;
 		mWaterObjp->setPositionRegion(water_pos_region);
+		if (changed)
+		{
+			LLWorld::getInstance()->updateWaterObjects();
+		}
 	}
 	else
 	{
diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp
index 916cbe2267..10c5a27aa7 100644
--- a/indra/newview/llviewerdisplay.cpp
+++ b/indra/newview/llviewerdisplay.cpp
@@ -573,7 +573,8 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 
 		S32 water_clip = 0;
 		if ((LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_ENVIRONMENT) > 1) &&
-			 gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_WATER))
+			 (gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_WATER) || 
+			  gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_VOIDWATER)))
 		{
 			if (LLViewerCamera::getInstance()->cameraUnderWater())
 			{
diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp
index 741a9e6ec4..4ef1853095 100644
--- a/indra/newview/llviewerobject.cpp
+++ b/indra/newview/llviewerobject.cpp
@@ -167,8 +167,10 @@ LLViewerObject *LLViewerObject::createObject(const LLUUID &id, const LLPCode pco
 	  res = new LLVOSurfacePatch(id, pcode, regionp); break;
 	case LL_VO_SKY:
 	  res = new LLVOSky(id, pcode, regionp); break;
+	case LL_VO_VOID_WATER:
+		res = new LLVOVoidWater(id, pcode, regionp); break;
 	case LL_VO_WATER:
-	  res = new LLVOWater(id, pcode, regionp); break;
+		res = new LLVOWater(id, pcode, regionp); break;
 	case LL_VO_GROUND:
 	  res = new LLVOGround(id, pcode, regionp); break;
 	case LL_VO_PART_GROUP:
diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h
index bcc2cb164f..10683618cc 100644
--- a/indra/newview/llviewerobject.h
+++ b/indra/newview/llviewerobject.h
@@ -131,7 +131,7 @@ public:
 
 	typedef const child_list_t const_child_list_t;
 
-	LLViewerObject(const LLUUID &id, const LLPCode type, LLViewerRegion *regionp, BOOL is_global = FALSE);
+	LLViewerObject(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp, BOOL is_global = FALSE);
 	MEM_TYPE_NEW(LLMemType::MTYPE_OBJECT);
 
 	virtual void markDead();				// Mark this object as dead, and clean up its references
@@ -518,14 +518,14 @@ public:
 	{
 		LL_VO_CLOUDS =				LL_PCODE_APP | 0x20,
 		LL_VO_SURFACE_PATCH =		LL_PCODE_APP | 0x30,
-		//LL_VO_STARS =				LL_PCODE_APP | 0x40,
+		LL_VO_WL_SKY =				LL_PCODE_APP | 0x40,
 		LL_VO_SQUARE_TORUS =		LL_PCODE_APP | 0x50,
 		LL_VO_SKY =					LL_PCODE_APP | 0x60,
-		LL_VO_WATER =				LL_PCODE_APP | 0x70,
-		LL_VO_GROUND =				LL_PCODE_APP | 0x80,
-		LL_VO_PART_GROUP =			LL_PCODE_APP | 0x90,
-		LL_VO_TRIANGLE_TORUS =		LL_PCODE_APP | 0xa0,
-		LL_VO_WL_SKY =				LL_PCODE_APP | 0xb0, // should this be moved to 0x40?
+		LL_VO_VOID_WATER =			LL_PCODE_APP | 0x70,
+		LL_VO_WATER =				LL_PCODE_APP | 0x80,
+		LL_VO_GROUND =				LL_PCODE_APP | 0x90,
+		LL_VO_PART_GROUP =			LL_PCODE_APP | 0xa0,
+		LL_VO_TRIANGLE_TORUS =		LL_PCODE_APP | 0xb0,
 		LL_VO_HUD_PART_GROUP =		LL_PCODE_APP | 0xc0,
 	} EVOType;
 
@@ -717,8 +717,8 @@ public:
 class LLAlphaObject : public LLViewerObject
 {
 public:
-	LLAlphaObject(const LLUUID &id, const LLPCode type, LLViewerRegion *regionp)
-	: LLViewerObject(id,type,regionp) 
+	LLAlphaObject(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp)
+	: LLViewerObject(id,pcode,regionp) 
 	{ mDepth = 0.f; }
 
 	virtual F32 getPartSize(S32 idx);
@@ -735,8 +735,8 @@ public:
 class LLStaticViewerObject : public LLViewerObject
 {
 public:
-	LLStaticViewerObject(const LLUUID& id, const LLPCode type, LLViewerRegion* regionp, BOOL is_global = FALSE)
-		: LLViewerObject(id,type,regionp, is_global)
+	LLStaticViewerObject(const LLUUID& id, const LLPCode pcode, LLViewerRegion* regionp, BOOL is_global = FALSE)
+		: LLViewerObject(id,pcode,regionp, is_global)
 	{ }
 
 	virtual void updateDrawable(BOOL force_damped);
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index 98f16757b2..74e9b9f4a2 100644
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -261,6 +261,7 @@ LLViewerRegion::LLViewerRegion(const U64 &handle,
 	//MUST MATCH declaration of eObjectPartitions
 	mObjectPartition.push_back(new LLHUDPartition());		//PARTITION_HUD
 	mObjectPartition.push_back(new LLTerrainPartition());	//PARTITION_TERRAIN
+	mObjectPartition.push_back(new LLVoidWaterPartition());	//PARTITION_VOIDWATER
 	mObjectPartition.push_back(new LLWaterPartition());		//PARTITION_WATER
 	mObjectPartition.push_back(new LLTreePartition());		//PARTITION_TREE
 	mObjectPartition.push_back(new LLParticlePartition());	//PARTITION_PARTICLE
diff --git a/indra/newview/llviewerregion.h b/indra/newview/llviewerregion.h
index 038c831e59..bf3948bef1 100644
--- a/indra/newview/llviewerregion.h
+++ b/indra/newview/llviewerregion.h
@@ -73,6 +73,7 @@ public:
 	{
 		PARTITION_HUD=0,
 		PARTITION_TERRAIN,
+		PARTITION_VOIDWATER,
 		PARTITION_WATER,
 		PARTITION_TREE,
 		PARTITION_PARTICLE,
diff --git a/indra/newview/llviewershadermgr.cpp b/indra/newview/llviewershadermgr.cpp
index d078c15316..c1abead36e 100644
--- a/indra/newview/llviewershadermgr.cpp
+++ b/indra/newview/llviewershadermgr.cpp
@@ -335,8 +335,8 @@ void LLViewerShaderMgr::setShaders()
 	}
 	else
 	{
-			LLPipeline::sRenderGlow = 
-			LLPipeline::sWaterReflections = FALSE;
+		LLPipeline::sRenderGlow = FALSE;
+		LLPipeline::sWaterReflections = FALSE;
 	}
 	
 	//hack to reset buffers that change behavior with shaders
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 43d18c6d83..66b8d7cd69 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -1406,6 +1406,11 @@ LLViewerWindow::LLViewerWindow(
 		gSavedSettings.setBOOL("ProbeHardwareOnStartup", FALSE);
 	}
 
+	if (!gGLManager.mHasDepthClamp)
+	{
+		LL_INFOS("RenderInit") << "Missing feature GL_ARB_depth_clamp. Void water might disappear in rare cases." << LL_ENDL;
+	}
+	
 	// If we crashed while initializng GL stuff last time, disable certain features
 	if (gSavedSettings.getBOOL("RenderInitError"))
 	{
diff --git a/indra/newview/llvosurfacepatch.cpp b/indra/newview/llvosurfacepatch.cpp
index eba600b50a..2eb4398488 100644
--- a/indra/newview/llvosurfacepatch.cpp
+++ b/indra/newview/llvosurfacepatch.cpp
@@ -80,7 +80,7 @@ public:
 //============================================================================
 
 LLVOSurfacePatch::LLVOSurfacePatch(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp)
-	:	LLStaticViewerObject(id, LL_VO_SURFACE_PATCH, regionp),
+	:	LLStaticViewerObject(id, pcode, regionp),
 		mDirtiedPatch(FALSE),
 		mPool(NULL),
 		mBaseComp(0),
diff --git a/indra/newview/llvowater.cpp b/indra/newview/llvowater.cpp
index 598938b710..9280eb8fa4 100644
--- a/indra/newview/llvowater.cpp
+++ b/indra/newview/llvowater.cpp
@@ -61,7 +61,8 @@ const F32 WAVE_STEP_INV	= (1. / WAVE_STEP);
 
 
 LLVOWater::LLVOWater(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp)
-:	LLStaticViewerObject(id, LL_VO_WATER, regionp)
+:	LLStaticViewerObject(id, pcode, regionp),
+	mRenderType(LLPipeline::RENDER_TYPE_WATER)
 {
 	// Terrain must draw during selection passes so it can block objects behind it.
 	mbCanSelect = FALSE;
@@ -114,7 +115,7 @@ LLDrawable *LLVOWater::createDrawable(LLPipeline *pipeline)
 {
 	pipeline->allocDrawable(this);
 	mDrawable->setLit(FALSE);
-	mDrawable->setRenderType(LLPipeline::RENDER_TYPE_WATER);
+	mDrawable->setRenderType(mRenderType);
 
 	LLDrawPoolWater *pool = (LLDrawPoolWater*) gPipeline.getPool(LLDrawPool::POOL_WATER);
 
@@ -268,6 +269,11 @@ U32 LLVOWater::getPartitionType() const
 	return LLViewerRegion::PARTITION_WATER; 
 }
 
+U32 LLVOVoidWater::getPartitionType() const
+{
+	return LLViewerRegion::PARTITION_VOIDWATER;
+}
+
 LLWaterPartition::LLWaterPartition()
 : LLSpatialPartition(0, FALSE, 0)
 {
@@ -275,3 +281,9 @@ LLWaterPartition::LLWaterPartition()
 	mDrawableType = LLPipeline::RENDER_TYPE_WATER;
 	mPartitionType = LLViewerRegion::PARTITION_WATER;
 }
+
+LLVoidWaterPartition::LLVoidWaterPartition()
+{
+	mDrawableType = LLPipeline::RENDER_TYPE_VOIDWATER;
+	mPartitionType = LLViewerRegion::PARTITION_VOIDWATER;
+}
diff --git a/indra/newview/llvowater.h b/indra/newview/llvowater.h
index beefc3f17f..cb9584cabf 100644
--- a/indra/newview/llvowater.h
+++ b/indra/newview/llvowater.h
@@ -29,6 +29,7 @@
 
 #include "llviewerobject.h"
 #include "llviewertexture.h"
+#include "pipeline.h"
 #include "v2math.h"
 
 const U32 N_RES	= 16; //32			// number of subdivisions of wave tile
@@ -77,6 +78,19 @@ public:
 protected:
 	BOOL mUseTexture;
 	BOOL mIsEdgePatch;
+	S32  mRenderType; 
 };
 
+class LLVOVoidWater : public LLVOWater
+{
+public:
+	LLVOVoidWater(LLUUID const& id, LLPCode pcode, LLViewerRegion* regionp) : LLVOWater(id, pcode, regionp)
+	{
+		mRenderType = LLPipeline::RENDER_TYPE_VOIDWATER;
+	}
+
+	/*virtual*/ U32 getPartitionType() const;
+};
+
+
 #endif // LL_VOSURFACEPATCH_H
diff --git a/indra/newview/llworld.cpp b/indra/newview/llworld.cpp
index 5760d04a08..8731c9e1a7 100644
--- a/indra/newview/llworld.cpp
+++ b/indra/newview/llworld.cpp
@@ -55,6 +55,11 @@
 #include "pipeline.h"
 #include "llappviewer.h"		// for do_disconnect()
 
+#include <deque>
+#include <queue>
+#include <map>
+#include <cstring>
+
 //
 // Globals
 //
@@ -834,10 +839,69 @@ F32 LLWorld::getLandFarClip() const
 
 void LLWorld::setLandFarClip(const F32 far_clip)
 {
+	static S32 const rwidth = (S32)REGION_WIDTH_U32;
+	S32 const n1 = (llceil(mLandFarClip) - 1) / rwidth;
+	S32 const n2 = (llceil(far_clip) - 1) / rwidth;
+	bool need_water_objects_update = n1 != n2;
+
 	mLandFarClip = far_clip;
+
+	if (need_water_objects_update)
+	{
+		updateWaterObjects();
+	}
 }
 
+// Some region that we're connected to, but not the one we're in, gave us
+// a (possibly) new water height. Update it in our local copy.
+void LLWorld::waterHeightRegionInfo(std::string const& sim_name, F32 water_height)
+{
+	for (region_list_t::iterator iter = mRegionList.begin(); iter != mRegionList.end(); ++iter)
+	{
+		if ((*iter)->getName() == sim_name)
+		{
+			(*iter)->setWaterHeight(water_height);
+			break;
+		}
+	}
+}
 
+// There are three types of water objects:
+// Region water objects: the water in a region.
+// Hole water objects: water in the void but within current draw distance.
+// Edge water objects: the water outside the draw distance, up till the horizon.
+//
+// For example:
+//
+// -----------------------horizon-------------------------
+// |                 |                 |                 |
+// |  Edge Water     |                 |                 |
+// |                 |                 |                 |
+// |                 |                 |                 |
+// |                 |                 |                 |
+// |                 |                 |                 |
+// |                 |      rwidth     |                 |
+// |                 |     <----->     |                 |
+// -------------------------------------------------------
+// |                 |Hole |other|     |                 |
+// |                 |Water|reg. |     |                 |
+// |                 |-----------------|                 |
+// |                 |other|cur. |<--> |                 |
+// |                 |reg. | reg.|  \__|_ draw distance  |
+// |                 |-----------------|                 |
+// |                 |     |     |<--->|                 |
+// |                 |     |     |  \__|_ range          |
+// -------------------------------------------------------
+// |                 |<----width------>|<--horizon ext.->|
+// |                 |                 |                 |
+// |                 |                 |                 |
+// |                 |                 |                 |
+// |                 |                 |                 |
+// |                 |                 |                 |
+// |                 |                 |                 |
+// |                 |                 |                 |
+// -------------------------------------------------------
+//
 void LLWorld::updateWaterObjects()
 {
 	if (!gAgent.getRegion())
@@ -850,128 +914,265 @@ void LLWorld::updateWaterObjects()
 		return;
 	}
 
-	// First, determine the min and max "box" of water objects
-	S32 min_x = 0;
-	S32 min_y = 0;
-	S32 max_x = 0;
-	S32 max_y = 0;
+	// Region width in meters.
+	S32 const rwidth = (S32)REGION_WIDTH_U32;
+
+	// The distance we might see into the void
+	// when standing on the edge of a region, in meters.
+	S32 const draw_distance = llceil(mLandFarClip);
+
+	// We can only have "holes" in the water (where there no region) if we
+	// can have existing regions around it. Taking into account that this
+	// code is only executed when we enter a region, and not when we walk
+	// around in it, we (only) need to take into account regions that fall
+	// within the draw_distance.
+	//
+	// Set 'range' to draw_distance, rounded up to the nearest multiple of rwidth.
+	S32 const nsims = (draw_distance + rwidth - 1) / rwidth;
+	S32 const range = nsims * rwidth;
+
+	// Get South-West corner of current region.
+	LLViewerRegion const* regionp = gAgent.getRegion();
 	U32 region_x, region_y;
-
-	S32 rwidth = 256;
-
-	// We only want to fill in water for stuff that's near us, say, within 256 or 512m
-	S32 range = LLViewerCamera::getInstance()->getFar() > 256.f ? 512 : 256;
-
-	LLViewerRegion* regionp = gAgent.getRegion();
 	from_region_handle(regionp->getHandle(), &region_x, &region_y);
 
-	min_x = (S32)region_x - range;
-	min_y = (S32)region_y - range;
-	max_x = (S32)region_x + range;
-	max_y = (S32)region_y + range;
+	// The min. and max. coordinates of the South-West corners of the Hole water objects.
+	S32 const min_x = (S32)region_x - range;
+	S32 const min_y = (S32)region_y - range;
+	S32 const max_x = (S32)region_x + range;
+	S32 const max_y = (S32)region_y + range;
+
+	// Attempt to determine a sensible water height for all the
+	// Hole Water objects.
+	//
+	// It make little sense to try to guess what the best water
+	// height should be when that isn't completely obvious: if it's
+	// impossible to satisfy every region's water height without
+	// getting a jump in the water height.
+	//
+	// In order to keep the reasoning simple, we assume something
+	// logical as a group of connected regions, where the coastline
+	// is at the outer edge. Anything more complex that would "break"
+	// under such an assumption would probably break anyway (would
+	// depend on terrain editing and existing mega prims, say, if
+	// anything would make sense at all).
+	//
+	// So, what we do is find all connected regions within the
+	// draw distance that border void, and then pick the lowest
+	// water height of those (coast) regions.
+	S32 const n = 2 * nsims + 1;
+	S32 const origin = nsims + nsims * n;
+	std::vector<F32> water_heights(n * n);
+	std::vector<U8> checked(n * n, 0);		// index = nx + ny * n + origin;
+	U8 const region_bit = 1;
+	U8 const hole_bit = 2;
+	U8 const bordering_hole_bit = 4;
+	U8 const bordering_edge_bit = 8;
+	// Use the legacy waterheight for the Edge water in the case
+	// that we don't find any Hole water at all.
+	F32 water_height = DEFAULT_WATER_HEIGHT;
+	int max_count = 0;
+	LL_DEBUGS("WaterHeight") << "Current region: " << regionp->getName() << "; water height: " << regionp->getWaterHeight() << " m." << LL_ENDL;
+	std::map<S32, int> water_height_counts;
+	typedef std::queue<std::pair<S32, S32>, std::deque<std::pair<S32, S32> > > nxny_pairs_type;
+	nxny_pairs_type nxny_pairs;
+	nxny_pairs.push(nxny_pairs_type::value_type(0, 0));
+	water_heights[origin] = regionp->getWaterHeight();
+	checked[origin] = region_bit;
+	// For debugging purposes.
+	int number_of_connected_regions = 1;
+	int uninitialized_regions = 0;
+	int bordering_hole = 0;
+	int bordering_edge = 0;
+	while(!nxny_pairs.empty())
+	{
+		S32 const nx = nxny_pairs.front().first;
+		S32 const ny = nxny_pairs.front().second;
+		LL_DEBUGS("WaterHeight") << "nx,ny = " << nx << "," << ny << LL_ENDL;
+		S32 const index = nx + ny * n + origin;
+		nxny_pairs.pop();
+		for (S32 dir = 0; dir < 4; ++dir)
+		{
+			S32 const cnx = nx + gDirAxes[dir][0];
+			S32 const cny = ny + gDirAxes[dir][1];
+			LL_DEBUGS("WaterHeight") << "dir = " << dir << "; cnx,cny = " << cnx << "," << cny << LL_ENDL;
+			S32 const cindex = cnx + cny * n + origin;
+			bool is_hole = false;
+			bool is_edge = false;
+			LLViewerRegion* new_region_found = NULL;
+			if (cnx < -nsims || cnx > nsims ||
+			    cny < -nsims || cny > nsims)
+			{
+				LL_DEBUGS("WaterHeight") << "  Edge Water!" << LL_ENDL;
+				// Bumped into Edge water object.
+				is_edge = true;
+			}
+			else if (checked[cindex])
+			{
+				LL_DEBUGS("WaterHeight") << "  Already checked before!" << LL_ENDL;
+				// Already checked.
+				is_hole = (checked[cindex] & hole_bit);
+			}
+			else
+			{
+				S32 x = (S32)region_x + cnx * rwidth;
+				S32 y = (S32)region_y + cny * rwidth;
+				U64 region_handle = to_region_handle(x, y);
+				new_region_found = getRegionFromHandle(region_handle);
+				is_hole = !new_region_found;
+				checked[cindex] = is_hole ? hole_bit : region_bit;
+			}
+			if (is_hole)
+			{
+				// This was a region that borders at least one 'hole'.
+				// Count the found coastline.
+				F32 new_water_height = water_heights[index];
+				LL_DEBUGS("WaterHeight") << "  This is void; counting coastline with water height of " << new_water_height << LL_ENDL;
+				S32 new_water_height_cm = llround(new_water_height * 100);
+				int count = (water_height_counts[new_water_height_cm] += 1);
+				// Just use the lowest water height: this is mainly about the horizon water,
+				// and whatever we do, we don't want it to be possible to look under the water
+				// when looking in the distance: it is better to make a step downwards in water
+				// height when going away from the avie than a step upwards. However, since
+				// everyone is used to DEFAULT_WATER_HEIGHT, don't allow a single region
+				// to drag the water level below DEFAULT_WATER_HEIGHT on it's own.
+				if (bordering_hole == 0 ||			// First time we get here.
+				    (new_water_height >= DEFAULT_WATER_HEIGHT &&
+					 new_water_height < water_height) ||
+				    (new_water_height < DEFAULT_WATER_HEIGHT &&
+					 count > max_count)
+				   )
+				{
+					water_height = new_water_height;
+				}
+				if (count > max_count)
+				{
+					max_count = count;
+				}
+				if (!(checked[index] & bordering_hole_bit))
+				{
+					checked[index] |= bordering_hole_bit;
+					++bordering_hole;
+				}
+			}
+			else if (is_edge && !(checked[index] & bordering_edge_bit))
+			{
+				checked[index] |= bordering_edge_bit;
+				++bordering_edge;
+			}
+			if (!new_region_found)
+			{
+				// Dead end, there is no region here.
+				continue;
+			}
+			// Found a new connected region.
+			++number_of_connected_regions;
+			if (new_region_found->getName().empty())
+			{
+				// Uninitialized LLViewerRegion, don't use it's water height.
+				LL_DEBUGS("WaterHeight") << "  Uninitialized region." << LL_ENDL;
+				++uninitialized_regions;
+				continue;
+			}
+			nxny_pairs.push(nxny_pairs_type::value_type(cnx, cny));
+			water_heights[cindex] = new_region_found->getWaterHeight();
+			LL_DEBUGS("WaterHeight") << "  Found a new region (name: " << new_region_found->getName() << "; water height: " << water_heights[cindex] << " m)!" << LL_ENDL;
+		}
+	}
+	llinfos << "Number of connected regions: " << number_of_connected_regions << " (" << uninitialized_regions <<
+		" uninitialized); number of regions bordering Hole water: " << bordering_hole <<
+		"; number of regions bordering Edge water: " << bordering_edge << llendl;
+	llinfos << "Coastline count (height, count): ";
+	bool first = true;
+	for (std::map<S32, int>::iterator iter = water_height_counts.begin(); iter != water_height_counts.end(); ++iter)
+	{
+		if (!first) llcont << ", ";
+		llcont << "(" << (iter->first / 100.f) << ", " << iter->second << ")";
+		first = false;
+	}
+	llcont << llendl;
+	llinfos << "Water height used for Hole and Edge water objects: " << water_height << llendl;
 
-	F32 height = 0.f;
-	
-	for (region_list_t::iterator iter = mRegionList.begin();
-		 iter != mRegionList.end(); ++iter)
+	// Update all Region water objects.
+	for (region_list_t::iterator iter = mRegionList.begin(); iter != mRegionList.end(); ++iter)
 	{
 		LLViewerRegion* regionp = *iter;
 		LLVOWater* waterp = regionp->getLand().getWaterObj();
-		height += regionp->getWaterHeight();
 		if (waterp)
 		{
 			gObjectList.updateActive(waterp);
 		}
 	}
 
+	// Clean up all existing Hole water objects.
 	for (std::list<LLVOWater*>::iterator iter = mHoleWaterObjects.begin();
-		 iter != mHoleWaterObjects.end(); ++ iter)
+		 iter != mHoleWaterObjects.end(); ++iter)
 	{
 		LLVOWater* waterp = *iter;
 		gObjectList.killObject(waterp);
 	}
 	mHoleWaterObjects.clear();
 
-	// Now, get a list of the holes
-	S32 x, y;
-	for (x = min_x; x <= max_x; x += rwidth)
+	// Let the Edge and Hole water boxes be 1024 meter high so that they
+	// are never too small to be drawn (A LL_VO_*_WATER box has water
+	// rendered on it's bottom surface only), and put their bottom at
+	// the current regions water height.
+	F32 const box_height = 1024;
+	F32 const water_center_z = water_height + box_height / 2;
+
+	// Create new Hole water objects within 'range' where there is no region.
+	for (S32 x = min_x; x <= max_x; x += rwidth)
 	{
-		for (y = min_y; y <= max_y; y += rwidth)
+		for (S32 y = min_y; y <= max_y; y += rwidth)
 		{
 			U64 region_handle = to_region_handle(x, y);
 			if (!getRegionFromHandle(region_handle))
 			{
-				LLVOWater* waterp = (LLVOWater *)gObjectList.createObjectViewer(LLViewerObject::LL_VO_WATER, gAgent.getRegion());
+				LLVOWater* waterp = (LLVOWater*)gObjectList.createObjectViewer(LLViewerObject::LL_VO_VOID_WATER, gAgent.getRegion());
 				waterp->setUseTexture(FALSE);
-				waterp->setPositionGlobal(LLVector3d(x + rwidth/2,
-													 y + rwidth/2,
-													 256.f+DEFAULT_WATER_HEIGHT));
-				waterp->setScale(LLVector3((F32)rwidth, (F32)rwidth, 512.f));
+				waterp->setPositionGlobal(LLVector3d(x + rwidth / 2, y + rwidth / 2, water_center_z));
+				waterp->setScale(LLVector3((F32)rwidth, (F32)rwidth, box_height));
 				gPipeline.createObject(waterp);
 				mHoleWaterObjects.push_back(waterp);
 			}
 		}
 	}
 
-	// Update edge water objects
-	S32 wx, wy;
-	S32 center_x, center_y;
-	wx = (max_x - min_x) + rwidth;
-	wy = (max_y - min_y) + rwidth;
-	center_x = min_x + (wx >> 1);
-	center_y = min_y + (wy >> 1);
-
-	S32 add_boundary[4] = {
-		512 - (max_x - region_x),
-		512 - (max_y - region_y),
-		512 - (region_x - min_x),
-		512 - (region_y - min_y) };
+	// Center of the region.
+	S32 const center_x = region_x + rwidth / 2;
+	S32 const center_y = region_y + rwidth / 2;
+	// Width of the area with Hole water objects.
+	S32 const width = rwidth + 2 * range;
+	S32 const horizon_extend = 2048 + 512 - range;	// Legacy value.
+	// The overlap is needed to get rid of sky pixels being visible between the
+	// Edge and Hole water object at greater distances (due to floating point
+	// round off errors).
+	S32 const edge_hole_overlap = 1;		// Twice the actual overlap.
 		
-	S32 dir;
-	for (dir = 0; dir < 8; dir++)
+	for (S32 dir = 0; dir < 8; ++dir)
 	{
-		S32 dim[2] = { 0 };
-		switch (gDirAxes[dir][0])
-		{
-		case -1: dim[0] = add_boundary[2]; break;
-		case  0: dim[0] = wx; break;
-		default: dim[0] = add_boundary[0]; break;
-		}
-		switch (gDirAxes[dir][1])
-		{
-		case -1: dim[1] = add_boundary[3]; break;
-		case  0: dim[1] = wy; break;
-		default: dim[1] = add_boundary[1]; break;
-		}
+		// Size of the Edge water objects.
+		S32 const dim_x = (gDirAxes[dir][0] == 0) ? width : (horizon_extend + edge_hole_overlap);
+		S32 const dim_y = (gDirAxes[dir][1] == 0) ? width : (horizon_extend + edge_hole_overlap);
+		// And their position.
+		S32 const water_center_x = center_x + (width + horizon_extend) / 2 * gDirAxes[dir][0];
+		S32 const water_center_y = center_y + (width + horizon_extend) / 2 * gDirAxes[dir][1];
 
-		// Resize and reshape the water objects
-		const S32 water_center_x = center_x + llround((wx + dim[0]) * 0.5f * gDirAxes[dir][0]);
-		const S32 water_center_y = center_y + llround((wy + dim[1]) * 0.5f * gDirAxes[dir][1]);
-		
 		LLVOWater* waterp = mEdgeWaterObjects[dir];
 		if (!waterp || waterp->isDead())
 		{
 			// The edge water objects can be dead because they're attached to the region that the
 			// agent was in when they were originally created.
-			mEdgeWaterObjects[dir] = (LLVOWater *)gObjectList.createObjectViewer(LLViewerObject::LL_VO_WATER,
-																				 gAgent.getRegion());
+			mEdgeWaterObjects[dir] = (LLVOWater *)gObjectList.createObjectViewer(LLViewerObject::LL_VO_VOID_WATER, gAgent.getRegion());
 			waterp = mEdgeWaterObjects[dir];
 			waterp->setUseTexture(FALSE);
-			waterp->setIsEdgePatch(TRUE);
+			waterp->setIsEdgePatch(TRUE);		// Mark that this is edge water and not hole water.
 			gPipeline.createObject(waterp);
 		}
 
 		waterp->setRegion(gAgent.getRegion());
-		LLVector3d water_pos(water_center_x, water_center_y, 
-			DEFAULT_WATER_HEIGHT+256.f);
-		LLVector3 water_scale((F32) dim[0], (F32) dim[1], 512.f);
-
-		//stretch out to horizon
-		water_scale.mV[0] += fabsf(2048.f * gDirAxes[dir][0]);
-		water_scale.mV[1] += fabsf(2048.f * gDirAxes[dir][1]);
-
-		water_pos.mdV[0] += 1024.f * gDirAxes[dir][0];
-		water_pos.mdV[1] += 1024.f * gDirAxes[dir][1];
+		LLVector3d water_pos(water_center_x, water_center_y, water_center_z);
+		LLVector3 water_scale((F32) dim_x, (F32) dim_y, box_height);
 
 		waterp->setPositionGlobal(water_pos);
 		waterp->setScale(water_scale);
diff --git a/indra/newview/llworld.h b/indra/newview/llworld.h
index 4465fde210..c60dc8dc29 100644
--- a/indra/newview/llworld.h
+++ b/indra/newview/llworld.h
@@ -137,6 +137,7 @@ public:
 
 	LLViewerTexture *getDefaultWaterTexture();
 	void updateWaterObjects();
+	void waterHeightRegionInfo(std::string const& sim_name, F32 water_height);
 	void shiftRegions(const LLVector3& offset);
 
 	void setSpaceTimeUSec(const U64 space_time_usec);
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index 1ee3b84b5e..272682710c 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -628,14 +628,14 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY)
 //static
 void LLPipeline::updateRenderDeferred()
 {
-	BOOL deferred = (gSavedSettings.getBOOL("RenderDeferred") && 
-		LLRenderTarget::sUseFBO &&
-			 LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferred") &&
-		gSavedSettings.getBOOL("VertexShaderEnable") && 
-		gSavedSettings.getBOOL("RenderAvatarVP") &&
-			 (gSavedSettings.getBOOL("WindLightUseAtmosShaders")) ? TRUE : FALSE) &&
-		!gUseWireframe;
-	
+	BOOL deferred = ((gSavedSettings.getBOOL("RenderDeferred") && 
+					 LLRenderTarget::sUseFBO &&
+					 LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferred") &&
+					 gSavedSettings.getBOOL("VertexShaderEnable") && 
+					 gSavedSettings.getBOOL("RenderAvatarVP") &&
+					 gSavedSettings.getBOOL("WindLightUseAtmosShaders")) ? TRUE : FALSE) &&
+					!gUseWireframe;
+
 	sRenderDeferred = deferred;			
 }
 
@@ -1632,20 +1632,14 @@ void LLPipeline::updateCull(LLCamera& camera, LLCullResult& result, S32 water_cl
 
 	camera.disableUserClipPlane();
 
-	if (gSky.mVOSkyp.notNull() && gSky.mVOSkyp->mDrawable.notNull())
+	if (hasRenderType(LLPipeline::RENDER_TYPE_SKY) && 
+		gSky.mVOSkyp.notNull() && 
+		gSky.mVOSkyp->mDrawable.notNull())
 	{
-		// Hack for sky - always visible.
-		if (hasRenderType(LLPipeline::RENDER_TYPE_SKY)) 
-		{
-			gSky.mVOSkyp->mDrawable->setVisible(camera);
-			sCull->pushDrawable(gSky.mVOSkyp->mDrawable);
-			gSky.updateCull();
-			stop_glerror();
-		}
-	}
-	else
-	{
-		llinfos << "No sky drawable!" << llendl;
+		gSky.mVOSkyp->mDrawable->setVisible(camera);
+		sCull->pushDrawable(gSky.mVOSkyp->mDrawable);
+		gSky.updateCull();
+		stop_glerror();
 	}
 
 	if (hasRenderType(LLPipeline::RENDER_TYPE_GROUND) && 
@@ -2214,6 +2208,7 @@ void LLPipeline::stateSort(LLCamera& camera, LLCullResult &result)
 					  LLPipeline::RENDER_TYPE_TERRAIN,
 					  LLPipeline::RENDER_TYPE_TREE,
 					  LLPipeline::RENDER_TYPE_SKY,
+					  LLPipeline::RENDER_TYPE_VOIDWATER,
 					  LLPipeline::RENDER_TYPE_WATER,
 					  LLPipeline::END_RENDER_TYPES))
 	{
@@ -5005,6 +5000,10 @@ void LLPipeline::setLight(LLDrawable *drawablep, BOOL is_light)
 void LLPipeline::toggleRenderType(U32 type)
 {
 	gPipeline.mRenderTypeEnabled[type] = !gPipeline.mRenderTypeEnabled[type];
+	if (type == LLPipeline::RENDER_TYPE_WATER)
+	{
+		gPipeline.mRenderTypeEnabled[LLPipeline::RENDER_TYPE_VOIDWATER] = !gPipeline.mRenderTypeEnabled[LLPipeline::RENDER_TYPE_VOIDWATER];
+	}
 }
 
 //static
@@ -7331,6 +7330,7 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)
 				gPipeline.pushRenderTypeMask();
 
 				clearRenderTypeMask(LLPipeline::RENDER_TYPE_WATER,
+									LLPipeline::RENDER_TYPE_VOIDWATER,
 									LLPipeline::RENDER_TYPE_GROUND,
 									LLPipeline::RENDER_TYPE_SKY,
 									LLPipeline::RENDER_TYPE_CLOUDS,
@@ -7383,6 +7383,7 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)
 		{
 			camera.setFar(camera_in.getFar());
 			clearRenderTypeMask(LLPipeline::RENDER_TYPE_WATER,
+								LLPipeline::RENDER_TYPE_VOIDWATER,
 								LLPipeline::RENDER_TYPE_GROUND,
 								END_RENDER_TYPES);	
 			stop_glerror();
@@ -7899,6 +7900,7 @@ void LLPipeline::generateGI(LLCamera& camera, LLVector3& lightDir, std::vector<L
 								 LLPipeline::RENDER_TYPE_TREE, 
 								 LLPipeline::RENDER_TYPE_TERRAIN,
 								 LLPipeline::RENDER_TYPE_WATER,
+								 LLPipeline::RENDER_TYPE_VOIDWATER,
 								 LLPipeline::RENDER_TYPE_PASS_ALPHA_SHADOW,
 								 LLPipeline::RENDER_TYPE_AVATAR,
 								 LLPipeline::RENDER_TYPE_PASS_SIMPLE,
@@ -8082,6 +8084,7 @@ void LLPipeline::generateSunShadow(LLCamera& camera)
 					LLPipeline::RENDER_TYPE_TREE, 
 					LLPipeline::RENDER_TYPE_TERRAIN,
 					LLPipeline::RENDER_TYPE_WATER,
+					LLPipeline::RENDER_TYPE_VOIDWATER,
 					LLPipeline::RENDER_TYPE_PASS_ALPHA_SHADOW,
 					LLPipeline::RENDER_TYPE_PASS_SIMPLE,
 					LLPipeline::RENDER_TYPE_PASS_BUMP,
diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h
index fe0683d29f..74e1cf6d7e 100644
--- a/indra/newview/pipeline.h
+++ b/indra/newview/pipeline.h
@@ -358,6 +358,7 @@ public:
 		RENDER_TYPE_AVATAR						= LLDrawPool::POOL_AVATAR,
 		RENDER_TYPE_TREE						= LLDrawPool::POOL_TREE,
 		RENDER_TYPE_INVISIBLE					= LLDrawPool::POOL_INVISIBLE,
+		RENDER_TYPE_VOIDWATER					= LLDrawPool::POOL_VOIDWATER,
 		RENDER_TYPE_WATER						= LLDrawPool::POOL_WATER,
  		RENDER_TYPE_ALPHA						= LLDrawPool::POOL_ALPHA,
 		RENDER_TYPE_GLOW						= LLDrawPool::POOL_GLOW,
-- 
cgit v1.2.3


From d1ad7a56beee603b336600d4aace1e4d4c0f5ade Mon Sep 17 00:00:00 2001
From: Merov Linden <merov@lindenlab.com>
Date: Sat, 2 Oct 2010 18:30:52 -0700
Subject: STORM-137 : Build script modif so that Windows build does not rely on
 fmod.dll being dropped in the source tree + addition to allow fmod to be
 found in standalone. Caution: wait an upcoming install.xml commit before
 pulling if building internaly.

---
 indra/newview/CMakeLists.txt     |  4 +++-
 indra/newview/viewer_manifest.py | 12 ++++++------
 2 files changed, 9 insertions(+), 7 deletions(-)
 mode change 100644 => 100755 indra/newview/CMakeLists.txt
 mode change 100644 => 100755 indra/newview/viewer_manifest.py

(limited to 'indra/newview')

diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
old mode 100644
new mode 100755
index 1f4302d870..ce98ecb2b1
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -1471,6 +1471,9 @@ if (WINDOWS)
       ${SHARED_LIB_STAGING_DIR}/Release/openjpeg.dll
       ${SHARED_LIB_STAGING_DIR}/RelWithDebInfo/openjpeg.dll
       ${SHARED_LIB_STAGING_DIR}/Debug/openjpegd.dll
+      ${SHARED_LIB_STAGING_DIR}/Release/fmod.dll
+      ${SHARED_LIB_STAGING_DIR}/RelWithDebInfo/fmod.dll
+      ${SHARED_LIB_STAGING_DIR}/Debug/fmod.dll
       ${SHARED_LIB_STAGING_DIR}/Release/msvcr80.dll
       ${SHARED_LIB_STAGING_DIR}/Release/msvcp80.dll
       ${SHARED_LIB_STAGING_DIR}/Release/Microsoft.VC80.CRT.manifest
@@ -1492,7 +1495,6 @@ if (WINDOWS)
       ${CMAKE_CURRENT_SOURCE_DIR}/featuretable.txt
       ${CMAKE_CURRENT_SOURCE_DIR}/featuretable_xp.txt
       ${CMAKE_CURRENT_SOURCE_DIR}/dbghelp.dll
-      ${CMAKE_CURRENT_SOURCE_DIR}/fmod.dll
       ${ARCH_PREBUILT_DIRS_RELEASE}/libeay32.dll
       ${ARCH_PREBUILT_DIRS_RELEASE}/qtcore4.dll
       ${ARCH_PREBUILT_DIRS_RELEASE}/qtgui4.dll
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
old mode 100644
new mode 100755
index 949fa3cc1c..26adc78459
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -259,6 +259,12 @@ class WindowsManifest(ViewerManifest):
             except RuntimeError:
                 print "Skipping llkdu.dll"
 
+            # Get fmod dll, continue if missing
+            try:
+                self.path("fmod.dll")
+            except:
+                print "Skipping fmod.dll"
+
             # Get llcommon and deps. If missing assume static linkage and continue.
             try:
                 self.path('llcommon.dll')
@@ -315,12 +321,6 @@ class WindowsManifest(ViewerManifest):
         # For use in crash reporting (generates minidumps)
         self.path("dbghelp.dll")
 
-        try:
-            # FMOD for sound
-            self.path("fmod.dll")
-        except:
-            print "Skipping FMOD - not found"
-
         self.enable_no_crt_manifest_check()
         
         # Media plugins - QuickTime
-- 
cgit v1.2.3


From 83bd99df5dfbe1fec188d20922cf3b367b79c827 Mon Sep 17 00:00:00 2001
From: Loren Shih <seraph@lindenlab.com>
Date: Mon, 4 Oct 2010 11:19:26 -0400
Subject: SH-270 FIXED As a SL user, I want my speaker order settings to
 persist between sessions SH-271 FIXED Add #ifdefs to llparticipantlist.h

Changed speaker order to store its speaker ordering using settings.xml.
Did some superficial code cleanup.
---
 indra/newview/llcallfloater.cpp     |   6 +-
 indra/newview/llparticipantlist.cpp |  99 +++++----
 indra/newview/llparticipantlist.h   | 431 ++++++++++++++++++------------------
 3 files changed, 278 insertions(+), 258 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llcallfloater.cpp b/indra/newview/llcallfloater.cpp
index c78f73c3b8..2dfc30675e 100644
--- a/indra/newview/llcallfloater.cpp
+++ b/indra/newview/llcallfloater.cpp
@@ -44,6 +44,7 @@
 #include "llspeakers.h"
 #include "lltextutil.h"
 #include "lltransientfloatermgr.h"
+#include "llviewercontrol.h"
 #include "llviewerwindow.h"
 #include "llvoicechannel.h"
 #include "llviewerparcelmgr.h"
@@ -327,8 +328,9 @@ void LLCallFloater::refreshParticipantList()
 	{
 		mParticipants = new LLParticipantList(mSpeakerManager, mAvatarList, true, mVoiceType != VC_GROUP_CHAT && mVoiceType != VC_AD_HOC_CHAT, false);
 		mParticipants->setValidateSpeakerCallback(boost::bind(&LLCallFloater::validateSpeaker, this, _1));
-		mParticipants->setSortOrder(LLParticipantList::E_SORT_BY_RECENT_SPEAKERS);
-
+		const U32 speaker_sort_order = gSavedSettings.getU32("SpeakerParticipantDefaultOrder");
+		mParticipants->setSortOrder(LLParticipantList::EParticipantSortOrder(speaker_sort_order));
+		
 		if (LLLocalSpeakerMgr::getInstance() == mSpeakerManager)
 		{
 			mAvatarList->setNoItemsCommentText(getString("no_one_near"));
diff --git a/indra/newview/llparticipantlist.cpp b/indra/newview/llparticipantlist.cpp
index c8aa9ac91e..1c68f8a43c 100644
--- a/indra/newview/llparticipantlist.cpp
+++ b/indra/newview/llparticipantlist.cpp
@@ -197,17 +197,20 @@ private:
 	uuid_set_t mAvalineCallers;
 };
 
-LLParticipantList::LLParticipantList(LLSpeakerMgr* data_source, LLAvatarList* avatar_list,  bool use_context_menu/* = true*/,
-		bool exclude_agent /*= true*/, bool can_toggle_icons /*= true*/):
+LLParticipantList::LLParticipantList(LLSpeakerMgr* data_source, 
+									 LLAvatarList* avatar_list,
+									 bool use_context_menu/* = true*/,
+									 bool exclude_agent /*= true*/, 
+									 bool can_toggle_icons /*= true*/) :
 	mSpeakerMgr(data_source),
 	mAvatarList(avatar_list),
-	mSortOrder(E_SORT_BY_NAME)
-,	mParticipantListMenu(NULL)
-,	mExcludeAgent(exclude_agent)
-,	mValidateSpeakerCallback(NULL)
+	mParticipantListMenu(NULL),
+	mExcludeAgent(exclude_agent),
+	mValidateSpeakerCallback(NULL)
 {
+
 	mAvalineUpdater = new LLAvalineUpdater(boost::bind(&LLParticipantList::onAvalineCallerFound, this, _1),
-		boost::bind(&LLParticipantList::onAvalineCallerRemoved, this, _1));
+										   boost::bind(&LLParticipantList::onAvalineCallerRemoved, this, _1));
 
 	mSpeakerAddListener = new SpeakerAddListener(*this);
 	mSpeakerRemoveListener = new SpeakerRemoveListener(*this);
@@ -378,15 +381,15 @@ void LLParticipantList::onAvatarListRefreshed(LLUICtrl* ctrl, const LLSD& param)
 }
 
 /*
-Seems this method is not necessary after onAvalineCallerRemoved was implemented;
+  Seems this method is not necessary after onAvalineCallerRemoved was implemented;
 
-It does nothing because list item is always created with correct class type for Avaline caller.
-For now Avaline Caller is removed from the LLSpeakerMgr List when it is removed from the Voice Client
-session.
-This happens in two cases: if Avaline Caller ends call itself or if Resident ends group call.
+  It does nothing because list item is always created with correct class type for Avaline caller.
+  For now Avaline Caller is removed from the LLSpeakerMgr List when it is removed from the Voice Client
+  session.
+  This happens in two cases: if Avaline Caller ends call itself or if Resident ends group call.
 
-Probably Avaline caller should be removed from the LLSpeakerMgr list ONLY if it ends call itself.
-Asked in EXT-4301.
+  Probably Avaline caller should be removed from the LLSpeakerMgr list ONLY if it ends call itself.
+  Asked in EXT-4301.
 */
 void LLParticipantList::onAvalineCallerFound(const LLUUID& participant_id)
 {
@@ -428,16 +431,19 @@ void LLParticipantList::onAvalineCallerRemoved(const LLUUID& participant_id)
 
 void LLParticipantList::setSortOrder(EParticipantSortOrder order)
 {
-	if ( mSortOrder != order )
+	const U32 speaker_sort_order = gSavedSettings.getU32("SpeakerParticipantDefaultOrder");
+
+	if ( speaker_sort_order != order )
 	{
-		mSortOrder = order;
+		gSavedSettings.setU32("SpeakerParticipantDefaultOrder", (U32)order);
 		sort();
 	}
 }
 
-LLParticipantList::EParticipantSortOrder LLParticipantList::getSortOrder()
+const LLParticipantList::EParticipantSortOrder LLParticipantList::getSortOrder() const
 {
-	return mSortOrder;
+	const U32 speaker_sort_order = gSavedSettings.getU32("SpeakerParticipantDefaultOrder");
+	return EParticipantSortOrder(speaker_sort_order);
 }
 
 void LLParticipantList::setValidateSpeakerCallback(validate_speaker_callback_t cb)
@@ -536,28 +542,29 @@ void LLParticipantList::sort()
 	if ( !mAvatarList )
 		return;
 
-	switch ( mSortOrder ) {
-	case E_SORT_BY_NAME :
-		// if mExcludeAgent == true , then no need to keep agent on top of the list
-		if(mExcludeAgent)
-		{
-			mAvatarList->sortByName();
-		}
-		else
-		{
-			mAvatarList->setComparator(&AGENT_ON_TOP_NAME_COMPARATOR);
+	switch ( getSortOrder() ) 
+	{
+		case E_SORT_BY_NAME :
+			// if mExcludeAgent == true , then no need to keep agent on top of the list
+			if(mExcludeAgent)
+			{
+				mAvatarList->sortByName();
+			}
+			else
+			{
+				mAvatarList->setComparator(&AGENT_ON_TOP_NAME_COMPARATOR);
+				mAvatarList->sort();
+			}
+			break;
+		case E_SORT_BY_RECENT_SPEAKERS:
+			if (mSortByRecentSpeakers.isNull())
+				mSortByRecentSpeakers = new LLAvatarItemRecentSpeakerComparator(*this);
+			mAvatarList->setComparator(mSortByRecentSpeakers.get());
 			mAvatarList->sort();
-		}
-		break;
-	case E_SORT_BY_RECENT_SPEAKERS:
-		if (mSortByRecentSpeakers.isNull())
-			mSortByRecentSpeakers = new LLAvatarItemRecentSpeakerComparator(*this);
-		mAvatarList->setComparator(mSortByRecentSpeakers.get());
-		mAvatarList->sort();
-		break;
-	default :
-		llwarns << "Unrecognized sort order for " << mAvatarList->getName() << llendl;
-		return;
+			break;
+		default :
+			llwarns << "Unrecognized sort order for " << mAvatarList->getName() << llendl;
+			return;
 	}
 }
 
@@ -630,7 +637,7 @@ bool LLParticipantList::SpeakerClearListener::handleEvent(LLPointer<LLOldEvents:
 //
 bool LLParticipantList::SpeakerModeratorUpdateListener::handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata)
 {
-		return mParent.onModeratorUpdateEvent(event, userdata);
+	return mParent.onModeratorUpdateEvent(event, userdata);
 }
 
 bool LLParticipantList::SpeakerMuteListener::handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata)
@@ -852,7 +859,7 @@ void LLParticipantList::LLParticipantListMenu::confirmMuteAllCallback(const LLSD
 	const LLUUID& session_id = payload["session_id"];
 
 	LLIMSpeakerMgr * speaker_manager = dynamic_cast<LLIMSpeakerMgr*> (
-			LLIMModel::getInstance()->getSpeakerManager(session_id));
+		LLIMModel::getInstance()->getSpeakerManager(session_id));
 	if (speaker_manager)
 	{
 		speaker_manager->moderateVoiceAllParticipants(false);
@@ -910,9 +917,9 @@ bool LLParticipantList::LLParticipantListMenu::enableContextMenuItem(const LLSD&
 }
 
 /*
-Processed menu items with such parameters:
-	can_allow_text_chat
-	can_moderate_voice
+  Processed menu items with such parameters:
+  can_allow_text_chat
+  can_moderate_voice
 */
 bool LLParticipantList::LLParticipantListMenu::enableModerateContextMenuItem(const LLSD& userdata)
 {
@@ -963,11 +970,11 @@ bool LLParticipantList::LLParticipantListMenu::checkContextMenuItem(const LLSD&
 	}
 	else if(item == "is_sorted_by_name")
 	{
-		return E_SORT_BY_NAME == mParent.mSortOrder;
+		return E_SORT_BY_NAME == mParent.getSortOrder();
 	}
 	else if(item == "is_sorted_by_recent_speakers")
 	{
-		return E_SORT_BY_RECENT_SPEAKERS == mParent.mSortOrder;
+		return E_SORT_BY_RECENT_SPEAKERS == mParent.getSortOrder();
 	}
 
 	return false;
diff --git a/indra/newview/llparticipantlist.h b/indra/newview/llparticipantlist.h
index 722a749d19..e0b3d42c25 100644
--- a/indra/newview/llparticipantlist.h
+++ b/indra/newview/llparticipantlist.h
@@ -24,6 +24,9 @@
  * $/LicenseInfo$
  */
 
+#ifndef LL_PARTICIPANTLIST_H
+#define LL_PARTICIPANTLIST_H
+
 #include "llviewerprecompiledheaders.h"
 #include "llevent.h"
 #include "llavatarlist.h" // for LLAvatarItemRecentSpeakerComparator
@@ -37,239 +40,247 @@ class LLAvalineUpdater;
 class LLParticipantList
 {
 	LOG_CLASS(LLParticipantList);
+public:
+
+	typedef boost::function<bool (const LLUUID& speaker_id)> validate_speaker_callback_t;
+
+	LLParticipantList(LLSpeakerMgr* data_source, 
+					  LLAvatarList* avatar_list, 
+					  bool use_context_menu = true, 
+					  bool exclude_agent = true, 
+					  bool can_toggle_icons = true);
+	~LLParticipantList();
+	void setSpeakingIndicatorsVisible(BOOL visible);
+
+	enum EParticipantSortOrder
+	{
+		E_SORT_BY_NAME = 0,
+		E_SORT_BY_RECENT_SPEAKERS = 1,
+	};
+
+	/**
+	 * Adds specified avatar ID to the existing list if it is not Agent's ID
+	 *
+	 * @param[in] avatar_id - Avatar UUID to be added into the list
+	 */
+	void addAvatarIDExceptAgent(const LLUUID& avatar_id);
+
+	/**
+	 * Set and sort Avatarlist by given order
+	 */
+	void setSortOrder(EParticipantSortOrder order = E_SORT_BY_NAME);
+	const EParticipantSortOrder getSortOrder() const;
+
+	/**
+	 * Refreshes the participant list if it's in sort by recent speaker order.
+	 */
+	void updateRecentSpeakersOrder();
+
+	/**
+	 * Set a callback to be called before adding a speaker. Invalid speakers will not be added.
+	 *
+	 * If the callback is unset all speakers are considered as valid.
+	 *
+	 * @see onAddItemEvent()
+	 */
+	void setValidateSpeakerCallback(validate_speaker_callback_t cb);
+
+protected:
+	/**
+	 * LLSpeakerMgr event handlers
+	 */
+	bool onAddItemEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
+	bool onRemoveItemEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
+	bool onClearListEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
+	bool onModeratorUpdateEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
+	bool onSpeakerMuteEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
+
+	/**
+	 * Sorts the Avatarlist by stored order
+	 */
+	void sort();
+
+	/**
+	 * List of listeners implementing LLOldEvents::LLSimpleListener.
+	 * There is no way to handle all the events in one listener as LLSpeakerMgr registers
+	 * listeners in such a way that one listener can handle only one type of event
+	 **/
+	class BaseSpeakerListener : public LLOldEvents::LLSimpleListener
+	{
 	public:
+		BaseSpeakerListener(LLParticipantList& parent) : mParent(parent) {}
+	protected:
+		LLParticipantList& mParent;
+	};
 
-		typedef boost::function<bool (const LLUUID& speaker_id)> validate_speaker_callback_t;
-
-		LLParticipantList(LLSpeakerMgr* data_source, LLAvatarList* avatar_list, bool use_context_menu = true, bool exclude_agent = true, bool can_toggle_icons = true);
-		~LLParticipantList();
-		void setSpeakingIndicatorsVisible(BOOL visible);
-
-		typedef enum e_participant_sort_oder {
-			E_SORT_BY_NAME = 0,
-			E_SORT_BY_RECENT_SPEAKERS = 1,
-		} EParticipantSortOrder;
+	class SpeakerAddListener : public BaseSpeakerListener
+	{
+	public:
+		SpeakerAddListener(LLParticipantList& parent) : BaseSpeakerListener(parent) {}
+		/*virtual*/ bool handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
+	};
 
-		/**
-		 * Adds specified avatar ID to the existing list if it is not Agent's ID
-		 *
-		 * @param[in] avatar_id - Avatar UUID to be added into the list
-		 */
-		void addAvatarIDExceptAgent(const LLUUID& avatar_id);
+	class SpeakerRemoveListener : public BaseSpeakerListener
+	{
+	public:
+		SpeakerRemoveListener(LLParticipantList& parent) : BaseSpeakerListener(parent) {}
+		/*virtual*/ bool handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
+	};
 
-		/**
-		 * Set and sort Avatarlist by given order
-		 */
-		void setSortOrder(EParticipantSortOrder order = E_SORT_BY_NAME);
-		EParticipantSortOrder getSortOrder();
+	class SpeakerClearListener : public BaseSpeakerListener
+	{
+	public:
+		SpeakerClearListener(LLParticipantList& parent) : BaseSpeakerListener(parent) {}
+		/*virtual*/ bool handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
+	};
 
-		/**
-		 * Refreshes the participant list if it's in sort by recent speaker order.
-		 */
-		void updateRecentSpeakersOrder();
+	class SpeakerModeratorUpdateListener : public BaseSpeakerListener
+	{
+	public:
+		SpeakerModeratorUpdateListener(LLParticipantList& parent) : BaseSpeakerListener(parent) {}
+		/*virtual*/ bool handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
+	};
+		
+	class SpeakerMuteListener : public BaseSpeakerListener
+	{
+	public:
+		SpeakerMuteListener(LLParticipantList& parent) : BaseSpeakerListener(parent) {}
 
-		/**
-		 * Set a callback to be called before adding a speaker. Invalid speakers will not be added.
-		 *
-		 * If the callback is unset all speakers are considered as valid.
-		 *
-		 * @see onAddItemEvent()
-		 */
-		void setValidateSpeakerCallback(validate_speaker_callback_t cb);
+		/*virtual*/ bool handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
+	};
 
+	/**
+	 * Menu used in the participant list.
+	 */
+	class LLParticipantListMenu : public LLListContextMenu
+	{
+	public:
+		LLParticipantListMenu(LLParticipantList& parent):mParent(parent){};
+		/*virtual*/ LLContextMenu* createMenu();
+		/*virtual*/ void show(LLView* spawning_view, const uuid_vec_t& uuids, S32 x, S32 y);
 	protected:
+		LLParticipantList& mParent;
+	private:
+		bool enableContextMenuItem(const LLSD& userdata);
+		bool enableModerateContextMenuItem(const LLSD& userdata);
+		bool checkContextMenuItem(const LLSD& userdata);
+
+		void sortParticipantList(const LLSD& userdata);
+		void toggleAllowTextChat(const LLSD& userdata);
+		void toggleMute(const LLSD& userdata, U32 flags);
+		void toggleMuteText(const LLSD& userdata);
+		void toggleMuteVoice(const LLSD& userdata);
+		
 		/**
-		 * LLSpeakerMgr event handlers
+		 * Return true if Agent is group moderator(and moderator of group call).
 		 */
-		bool onAddItemEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
-		bool onRemoveItemEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
-		bool onClearListEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
-		bool onModeratorUpdateEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
-		bool onSpeakerMuteEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
+		bool isGroupModerator();
 
+		// Voice moderation support
 		/**
-		 * Sorts the Avatarlist by stored order
+		 * Check whether specified by argument avatar is muted for group chat or not.
 		 */
-		void sort();
-
-		//List of listeners implementing LLOldEvents::LLSimpleListener.
-		//There is no way to handle all the events in one listener as LLSpeakerMgr registers listeners in such a way
-		//that one listener can handle only one type of event
-		class BaseSpeakerListner : public LLOldEvents::LLSimpleListener
-		{
-		public:
-			BaseSpeakerListner(LLParticipantList& parent) : mParent(parent) {}
-		protected:
-			LLParticipantList& mParent;
-		};
-
-		class SpeakerAddListener : public BaseSpeakerListner
-		{
-		public:
-			SpeakerAddListener(LLParticipantList& parent) : BaseSpeakerListner(parent) {}
-			/*virtual*/ bool handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
-		};
-
-		class SpeakerRemoveListener : public BaseSpeakerListner
-		{
-		public:
-			SpeakerRemoveListener(LLParticipantList& parent) : BaseSpeakerListner(parent) {}
-			/*virtual*/ bool handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
-		};
-
-		class SpeakerClearListener : public BaseSpeakerListner
-		{
-		public:
-			SpeakerClearListener(LLParticipantList& parent) : BaseSpeakerListner(parent) {}
-			/*virtual*/ bool handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
-		};
-
-		class SpeakerModeratorUpdateListener : public BaseSpeakerListner
-		{
-		public:
-			SpeakerModeratorUpdateListener(LLParticipantList& parent) : BaseSpeakerListner(parent) {}
-			/*virtual*/ bool handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
-		};
-		
-		class SpeakerMuteListener : public BaseSpeakerListner
-		{
-		public:
-			SpeakerMuteListener(LLParticipantList& parent) : BaseSpeakerListner(parent) {}
-
-			/*virtual*/ bool handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
-		};
+		bool isMuted(const LLUUID& avatar_id);
 
 		/**
-		 * Menu used in the participant list.
+		 * Processes Voice moderation menu items.
+		 *
+		 * It calls either moderateVoiceParticipant() or moderateVoiceParticipant() depend on
+		 * passed parameter.
+		 *
+		 * @param userdata can be "selected" or "others".
+		 *
+		 * @see moderateVoiceParticipant()
+		 * @see moderateVoiceAllParticipants()
 		 */
-		class LLParticipantListMenu : public LLListContextMenu
-		{
-		public:
-			LLParticipantListMenu(LLParticipantList& parent):mParent(parent){};
-			/*virtual*/ LLContextMenu* createMenu();
-			/*virtual*/ void show(LLView* spawning_view, const uuid_vec_t& uuids, S32 x, S32 y);
-		protected:
-			LLParticipantList& mParent;
-		private:
-			bool enableContextMenuItem(const LLSD& userdata);
-			bool enableModerateContextMenuItem(const LLSD& userdata);
-			bool checkContextMenuItem(const LLSD& userdata);
-
-			void sortParticipantList(const LLSD& userdata);
-			void toggleAllowTextChat(const LLSD& userdata);
-			void toggleMute(const LLSD& userdata, U32 flags);
-			void toggleMuteText(const LLSD& userdata);
-			void toggleMuteVoice(const LLSD& userdata);
-		
-			/**
-			 * Return true if Agent is group moderator(and moderator of group call).
-			 */
-			bool isGroupModerator();
-
-			// Voice moderation support
-			/**
-			 * Check whether specified by argument avatar is muted for group chat or not.
-			 */
-			bool isMuted(const LLUUID& avatar_id);
-
-			/**
-			 * Processes Voice moderation menu items.
-			 *
-			 * It calls either moderateVoiceParticipant() or moderateVoiceParticipant() depend on
-			 * passed parameter.
-			 *
-			 * @param userdata can be "selected" or "others".
-			 *
-			 * @see moderateVoiceParticipant()
-			 * @see moderateVoiceAllParticipants()
-			 */
-			void moderateVoice(const LLSD& userdata);
-
-			/**
-			 * Mutes/Unmutes avatar for current group voice chat.
-			 *
-			 * It only marks avatar as muted for session and does not use local Agent's Block list.
-			 * It does not mute Agent itself.
-			 *
-			 * @param[in] avatar_id UUID of avatar to be processed
-			 * @param[in] unmute if true - specified avatar will be muted, otherwise - unmuted.
-			 *
-			 * @see moderateVoiceAllParticipants()
-			 */
-			void moderateVoiceParticipant(const LLUUID& avatar_id, bool unmute);
-
-			/**
-			 * Mutes/Unmutes all avatars for current group voice chat.
-			 *
-			 * It only marks avatars as muted for session and does not use local Agent's Block list.
-			 *
-			 * @param[in] unmute if true - avatars will be muted, otherwise - unmuted.
-			 *
-			 * @see moderateVoiceParticipant()
-			 */
-			void moderateVoiceAllParticipants(bool unmute);
-
-			static void confirmMuteAllCallback(const LLSD& notification, const LLSD& response);
-		};
+		void moderateVoice(const LLSD& userdata);
 
 		/**
-		 * Comparator for comparing avatar items by last spoken time
+		 * Mutes/Unmutes avatar for current group voice chat.
+		 *
+		 * It only marks avatar as muted for session and does not use local Agent's Block list.
+		 * It does not mute Agent itself.
+		 *
+		 * @param[in] avatar_id UUID of avatar to be processed
+		 * @param[in] unmute if true - specified avatar will be muted, otherwise - unmuted.
+		 *
+		 * @see moderateVoiceAllParticipants()
 		 */
-		class LLAvatarItemRecentSpeakerComparator : public LLAvatarItemNameComparator, public LLRefCount
-		{
-			LOG_CLASS(LLAvatarItemRecentSpeakerComparator);
-		  public:
-			LLAvatarItemRecentSpeakerComparator(LLParticipantList& parent):mParent(parent){};
-			virtual ~LLAvatarItemRecentSpeakerComparator() {};
-		  protected:
-			virtual bool doCompare(const LLAvatarListItem* avatar_item1, const LLAvatarListItem* avatar_item2) const;
-		  private:
-			LLParticipantList& mParent;
-		};
-
-	private:
-		void onAvatarListDoubleClicked(LLUICtrl* ctrl);
-		void onAvatarListRefreshed(LLUICtrl* ctrl, const LLSD& param);
-
-		void onAvalineCallerFound(const LLUUID& participant_id);
-		void onAvalineCallerRemoved(const LLUUID& participant_id);
+		void moderateVoiceParticipant(const LLUUID& avatar_id, bool unmute);
 
 		/**
-		 * Adjusts passed participant to work properly.
+		 * Mutes/Unmutes all avatars for current group voice chat.
 		 *
-		 * Adds SpeakerMuteListener to process moderation actions.
-		 */
-		void adjustParticipant(const LLUUID& speaker_id);
-
-		LLSpeakerMgr*		mSpeakerMgr;
-		LLAvatarList*		mAvatarList;
-
-		std::set<LLUUID>	mModeratorList;
-		std::set<LLUUID>	mModeratorToRemoveList;
-
-		LLPointer<SpeakerAddListener>				mSpeakerAddListener;
-		LLPointer<SpeakerRemoveListener>			mSpeakerRemoveListener;
-		LLPointer<SpeakerClearListener>				mSpeakerClearListener;
-		LLPointer<SpeakerModeratorUpdateListener>	mSpeakerModeratorListener;
-		LLPointer<SpeakerMuteListener>				mSpeakerMuteListener;
-
-		LLParticipantListMenu*    mParticipantListMenu;
-
-		EParticipantSortOrder	mSortOrder;
-		/*
-		 * This field manages an adding  a new avatar_id in the mAvatarList
-		 * If true, then agent_id wont  be added into mAvatarList
-		 * Also by default this field is controlling a sort procedure, @c sort() 
+		 * It only marks avatars as muted for session and does not use local Agent's Block list.
+		 *
+		 * @param[in] unmute if true - avatars will be muted, otherwise - unmuted.
+		 *
+		 * @see moderateVoiceParticipant()
 		 */
-		bool mExcludeAgent;
+		void moderateVoiceAllParticipants(bool unmute);
 
-		// boost::connections
-		boost::signals2::connection mAvatarListDoubleClickConnection;
-		boost::signals2::connection mAvatarListRefreshConnection;
-		boost::signals2::connection mAvatarListReturnConnection;
-		boost::signals2::connection mAvatarListToggleIconsConnection;
+		static void confirmMuteAllCallback(const LLSD& notification, const LLSD& response);
+	};
 
-		LLPointer<LLAvatarItemRecentSpeakerComparator> mSortByRecentSpeakers;
-		validate_speaker_callback_t mValidateSpeakerCallback;
-		LLAvalineUpdater* mAvalineUpdater;
+	/**
+	 * Comparator for comparing avatar items by last spoken time
+	 */
+	class LLAvatarItemRecentSpeakerComparator : public LLAvatarItemNameComparator, public LLRefCount
+	{
+		LOG_CLASS(LLAvatarItemRecentSpeakerComparator);
+	public:
+		LLAvatarItemRecentSpeakerComparator(LLParticipantList& parent):mParent(parent){};
+		virtual ~LLAvatarItemRecentSpeakerComparator() {};
+	protected:
+		virtual bool doCompare(const LLAvatarListItem* avatar_item1, const LLAvatarListItem* avatar_item2) const;
+	private:
+		LLParticipantList& mParent;
+	};
+
+private:
+	void onAvatarListDoubleClicked(LLUICtrl* ctrl);
+	void onAvatarListRefreshed(LLUICtrl* ctrl, const LLSD& param);
+
+	void onAvalineCallerFound(const LLUUID& participant_id);
+	void onAvalineCallerRemoved(const LLUUID& participant_id);
+
+	/**
+	 * Adjusts passed participant to work properly.
+	 *
+	 * Adds SpeakerMuteListener to process moderation actions.
+	 */
+	void adjustParticipant(const LLUUID& speaker_id);
+
+	LLSpeakerMgr*		mSpeakerMgr;
+	LLAvatarList*		mAvatarList;
+
+	std::set<LLUUID>	mModeratorList;
+	std::set<LLUUID>	mModeratorToRemoveList;
+
+	LLPointer<SpeakerAddListener>				mSpeakerAddListener;
+	LLPointer<SpeakerRemoveListener>			mSpeakerRemoveListener;
+	LLPointer<SpeakerClearListener>				mSpeakerClearListener;
+	LLPointer<SpeakerModeratorUpdateListener>	mSpeakerModeratorListener;
+	LLPointer<SpeakerMuteListener>				mSpeakerMuteListener;
+
+	LLParticipantListMenu*    mParticipantListMenu;
+
+	/**
+	 * This field manages an adding  a new avatar_id in the mAvatarList
+	 * If true, then agent_id wont  be added into mAvatarList
+	 * Also by default this field is controlling a sort procedure, @c sort() 
+	 */
+	bool mExcludeAgent;
+
+	// boost::connections
+	boost::signals2::connection mAvatarListDoubleClickConnection;
+	boost::signals2::connection mAvatarListRefreshConnection;
+	boost::signals2::connection mAvatarListReturnConnection;
+	boost::signals2::connection mAvatarListToggleIconsConnection;
+
+	LLPointer<LLAvatarItemRecentSpeakerComparator> mSortByRecentSpeakers;
+	validate_speaker_callback_t mValidateSpeakerCallback;
+	LLAvalineUpdater* mAvalineUpdater;
 };
+
+#endif // LL_PARTICIPANTLIST_H
-- 
cgit v1.2.3


From cafefd3f5f161d79ecd62bc00b769e6b2b94dc82 Mon Sep 17 00:00:00 2001
From: Loren Shih <seraph@lindenlab.com>
Date: Mon, 4 Oct 2010 11:19:37 -0400
Subject: SH-270 FIXED As a SL user, I want my speaker order settings to
 persist between sessions SH-271 FIXED Add #ifdefs to llparticipantlist.h

Changed speaker order to store its speaker ordering using settings.xml.
Did some superficial code cleanup.
---
 indra/newview/app_settings/settings.xml | 11 +++++++++++
 1 file changed, 11 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index b641a16847..b67530215b 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -11079,6 +11079,17 @@
       <key>Value</key>
       <integer>1</integer>
     </map>
+    <key>SpeakerParticipantDefaultOrder</key>
+    <map>
+      <key>Comment</key>
+      <string>Order for displaying speakers in voice controls.  0 = alphabetical. 1 = recent.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>U32</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>SpeakerParticipantRemoveDelay</key>
     <map>
       <key>Comment</key>
-- 
cgit v1.2.3


From 2e7f87c0212610685b65fa52a02b9811fb7cf631 Mon Sep 17 00:00:00 2001
From: Eli Linden <eli@lindenlab.com>
Date: Mon, 4 Oct 2010 16:07:37 -0700
Subject: CT-575 WIP ignore. testing access to beta branch.

---
 indra/newview/skins/default/xui/en/floater_aaa.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/floater_aaa.xml b/indra/newview/skins/default/xui/en/floater_aaa.xml
index cae6146880..d78fb281a9 100644
--- a/indra/newview/skins/default/xui/en/floater_aaa.xml
+++ b/indra/newview/skins/default/xui/en/floater_aaa.xml
@@ -19,7 +19,7 @@
  width="320">
   <string name="nudge_parabuild" translate="false">Nudge 1</string>
   <string name="test_the_vlt">This string CHANGE2 is extracted.</string>
-  <string name="testing_eli">Just a test. changes.</string>
+  <string name="testing_eli">Testing access to beta branch</string>
   <chat_history
    parse_urls="true"
    bg_readonly_color="ChatHistoryBgColor"
-- 
cgit v1.2.3


From 8ce02aeef0c170b87ddb570b97eddd0c0dd13184 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Tue, 5 Oct 2010 15:37:06 -0700
Subject: DN-135 adding highlight color to the username for consistency in
 person inspector

---
 indra/newview/skins/default/xui/en/inspect_avatar.xml | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/inspect_avatar.xml b/indra/newview/skins/default/xui/en/inspect_avatar.xml
index b2efd13441..853d5f8735 100644
--- a/indra/newview/skins/default/xui/en/inspect_avatar.xml
+++ b/indra/newview/skins/default/xui/en/inspect_avatar.xml
@@ -42,6 +42,7 @@
      text_color="White"
      use_ellipses="true"
      word_wrap="true"
+    visible="false" 
      value="Grumpity ProductEngine with a long name"
      width="185" />
    <text
@@ -53,7 +54,6 @@
     top="10"
     text_color="White"
     use_ellipses="true"
-    visible="false" 
     value="Grumpity ProductEngine"
     width="190" />
    <text
@@ -61,10 +61,10 @@
      height="16"
      left="8"
      name="user_slid"
-     font="SansSerifSmall"
-     text_color="White"
-     value="James.pinden"
-     width="175"
+     font="SansSerifSmallBold"
+     text_color="EmphasisColor"
+     value="james.linden"
+     width="185"
      use_ellipses="true" />
     <text
      follows="top|left"
-- 
cgit v1.2.3


From 7c47576f02e2e5f1300e786b8868a0697554f69a Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Tue, 5 Oct 2010 15:38:45 -0700
Subject: DN-130 As a resident I want to show usernames in local chat if
 username preference is set so that I can follow the conversation when people
 are changing their display name

---
 indra/newview/llchathistory.cpp | 12 ++++++++++++
 1 file changed, 12 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index 162c846202..f28e02c66e 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -55,6 +55,7 @@
 #include "llworld.h"
 #include "lluiconstants.h"
 
+#include "llviewercontrol.h"
 
 #include "llsidetray.h"//for blocked objects panel
 
@@ -365,6 +366,17 @@ public:
 		LLTextBox* user_name = getChild<LLTextBox>("user_name");
 		user_name->setValue( LLSD(av_name.mDisplayName ) );
 		user_name->setToolTip( av_name.mUsername );
+
+		if (gSavedSettings.getBOOL("NameTagShowUsernames"))
+		{
+		LLStyle::Params style_params_name;
+		LLColor4 userNameColor = LLUIColorTable::instance().getColor("EmphasisColor");
+		style_params_name.color(userNameColor);
+		style_params_name.font.name("SansSerifSmall");
+		style_params_name.font.style("NORMAL");
+		style_params_name.readonly_color(userNameColor);
+		user_name->appendText("  - " + av_name.mUsername, FALSE, style_params_name);
+		}
 		setToolTip( av_name.mUsername );
 		// name might have changed, update width
 		updateMinUserNameWidth();
-- 
cgit v1.2.3


From d950a97af099b4560753957ccf8f2d69102f20c6 Mon Sep 17 00:00:00 2001
From: Andrew Productengine <adyukov@productengine.com>
Date: Wed, 6 Oct 2010 14:02:34 +0300
Subject: STORM-299 FIXED World map floater opening instead Mini-map if
 double-click on minimized Mini-map.

- What map floater is shown on Mini-map doublecklick now differs depending on whether it is minimized.
---
 indra/newview/llfloatermap.cpp | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloatermap.cpp b/indra/newview/llfloatermap.cpp
index c9d7eff02b..6571401632 100644
--- a/indra/newview/llfloatermap.cpp
+++ b/indra/newview/llfloatermap.cpp
@@ -125,7 +125,9 @@ BOOL LLFloaterMap::postBuild()
 
 BOOL LLFloaterMap::handleDoubleClick( S32 x, S32 y, MASK mask )
 {
-	LLFloaterReg::showInstance("world_map");
+	// If floater is minimized, minimap should be shown on doubleclick (STORM-299)
+	std::string floater_to_show = this->isMinimized() ? "mini_map" : "world_map";
+	LLFloaterReg::showInstance(floater_to_show);
 	return TRUE;
 }
 
-- 
cgit v1.2.3


From 0fe2156f87bfc150eb465d66e20245c4ee3e3e8f Mon Sep 17 00:00:00 2001
From: Andrew Productengine <adyukov@productengine.com>
Date: Wed, 6 Oct 2010 19:15:49 +0300
Subject: STORM-187 ADDITIONAL FIX Fixed buttons autohiding in bottomtray on
 resize.

The bug was caused by moving nearby chat bar into panel inside layout panel instead of being layout panel itself in changeset 741eb25e921c without modifying get_panel_min_width() call which used that layout panel. This broke behaviour of LLBottomTray::processWidthDecreased().

- Fixed it by using this new nearby chat container layout panel in this call.
---
 indra/newview/llbottomtray.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp
index ef6f2f7337..29c2b7565e 100644
--- a/indra/newview/llbottomtray.cpp
+++ b/indra/newview/llbottomtray.cpp
@@ -1026,7 +1026,7 @@ S32 LLBottomTray::processWidthDecreased(S32 delta_width)
 		processShrinkButtons(delta_width, buttons_freed_width);
 	}
 	// 3. Decreasing width of nearby chat.
-	const S32 chatbar_panel_min_width = get_panel_min_width(mToolbarStack, mNearbyChatBar);
+	const S32 chatbar_panel_min_width = get_panel_min_width(mToolbarStack, mChatBarContainer);
 	const S32 chatbar_panel_width = mChatBarContainer->getRect().getWidth();
 	if (still_should_be_processed && chatbar_panel_width > chatbar_panel_min_width)
 	{
-- 
cgit v1.2.3


From be1c9a867440e4306348887ce07c88ba6cd31241 Mon Sep 17 00:00:00 2001
From: "Mark Palange (Mani)" <palange@lindenlab.com>
Date: Wed, 6 Oct 2010 16:45:45 -0700
Subject: PLAT-40 Fix changing the lang code for polish from 'da' to 'pl'
 reviewed by brad

---
 indra/newview/installers/windows/installer_template.nsi | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/installers/windows/installer_template.nsi b/indra/newview/installers/windows/installer_template.nsi
index d1cd335783..d5712f80cf 100644
--- a/indra/newview/installers/windows/installer_template.nsi
+++ b/indra/newview/installers/windows/installer_template.nsi
@@ -52,7 +52,7 @@ LangString LanguageCode ${LANG_JAPANESE} "ja"
 LangString LanguageCode ${LANG_ITALIAN}  "it"
 LangString LanguageCode ${LANG_KOREAN}   "ko"
 LangString LanguageCode ${LANG_DUTCH}    "nl"
-LangString LanguageCode ${LANG_POLISH}   "da"
+LangString LanguageCode ${LANG_POLISH}   "pl"
 LangString LanguageCode ${LANG_PORTUGUESEBR} "pt"
 LangString LanguageCode ${LANG_SIMPCHINESE}  "zh"
 
-- 
cgit v1.2.3


From 7d9ec365cc815fad03c31bfaf9acf5d871c2e11b Mon Sep 17 00:00:00 2001
From: Merov Linden <merov@lindenlab.com>
Date: Wed, 6 Oct 2010 19:57:45 -0700
Subject: STORM-306 : Fix black flickering of water on Mac when atm shading off

---
 indra/newview/pipeline.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index 1ee3b84b5e..e69b0a2996 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -4814,7 +4814,7 @@ void LLPipeline::enableLightsFullbright(const LLColor4& color)
 void LLPipeline::disableLights()
 {
 	enableLights(0); // no lighting (full bright)
-	//glColor4f(1.f, 1.f, 1.f, 1.f); // lighting color = white by default
+	glColor4f(1.f, 1.f, 1.f, 1.f); // lighting color = white by default
 }
 
 //============================================================================
-- 
cgit v1.2.3


From 235980dfe3f5683c7871285888001740c1c5d66f Mon Sep 17 00:00:00 2001
From: Merov Linden <merov@lindenlab.com>
Date: Wed, 6 Oct 2010 19:57:45 -0700
Subject: STORM-306 : Fix black flickering of water on Mac when atm shading off

---
 indra/newview/pipeline.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index 272682710c..cc3fa7f254 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -4809,7 +4809,7 @@ void LLPipeline::enableLightsFullbright(const LLColor4& color)
 void LLPipeline::disableLights()
 {
 	enableLights(0); // no lighting (full bright)
-	//glColor4f(1.f, 1.f, 1.f, 1.f); // lighting color = white by default
+	glColor4f(1.f, 1.f, 1.f, 1.f); // lighting color = white by default
 }
 
 //============================================================================
-- 
cgit v1.2.3


From 6589c200199e1fe0d0bf5f610d990ae197108981 Mon Sep 17 00:00:00 2001
From: Paul Guslisty <pguslisty@productengine.com>
Date: Thu, 7 Oct 2010 13:46:50 +0300
Subject: STORM-263 FIXED Cog button in lower-left of sidebar panel does not
 close popup menu on second click

- In all places of sidebar panel where gear menu button is used changed type of gear menu buttons from LLButton to LLMenuButton

- Added setMenuPosition and setMenu to the LLMenuButton interface as public methods

- In all sidebar panels where LLButton was replaced with LLMenuButton the algorithm of replacing is simple and the same for all sidebar panels.
  In general the algorithm is:
    1. set gearMenu to the menuButton using LLMenuButton::setMenu
    2. set mouse down callback for the menuButton
    3. in callback for mouse down set the menu position where it should be shown using LLMenuButton::setMenuPosition
---
 indra/newview/lloutfitslist.cpp                    |  23 ++++-
 indra/newview/llpanellandmarks.cpp                 |  12 +++
 indra/newview/llpanelmaininventory.cpp             |  13 ++-
 indra/newview/llpanelmaininventory.h               |   2 +
 indra/newview/llpaneloutfitedit.cpp                |  27 +++--
 indra/newview/llpaneloutfitedit.h                  |   5 +-
 indra/newview/llpanelpeople.cpp                    | 110 ++++++++++++---------
 indra/newview/llpanelpeople.h                      |  11 ++-
 indra/newview/llpanelteleporthistory.cpp           |  30 +++---
 indra/newview/llpanelteleporthistory.h             |   2 +
 indra/newview/llpanelwearing.cpp                   |  24 ++++-
 .../skins/default/xui/en/panel_landmarks.xml       |   2 +-
 .../skins/default/xui/en/panel_main_inventory.xml  |   2 +-
 .../skins/default/xui/en/panel_outfit_edit.xml     |   4 +-
 .../skins/default/xui/en/panel_outfits_list.xml    |   2 +-
 .../skins/default/xui/en/panel_outfits_wearing.xml |   2 +-
 .../newview/skins/default/xui/en/panel_people.xml  |   9 +-
 .../default/xui/en/panel_teleport_history.xml      |   2 +-
 18 files changed, 188 insertions(+), 94 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp
index c0f7fa4abf..bd9536d931 100644
--- a/indra/newview/lloutfitslist.cpp
+++ b/indra/newview/lloutfitslist.cpp
@@ -38,6 +38,7 @@
 #include "llinventoryfunctions.h"
 #include "llinventorymodel.h"
 #include "lllistcontextmenu.h"
+#include "llmenubutton.h"
 #include "llnotificationsutil.h"
 #include "lloutfitobserver.h"
 #include "llsidetray.h"
@@ -99,10 +100,8 @@ public:
 
 		updateItemsVisibility();
 		mMenu->buildDrawLabels();
+		mMenu->arrangeAndClear();
 		mMenu->updateParent(LLMenuGL::sMenuContainer);
-		S32 menu_x = 0;
-		S32 menu_y = spawning_view->getRect().getHeight() + mMenu->getRect().getHeight();
-		LLMenuGL::showPopup(spawning_view, mMenu, menu_x, menu_y);
 	}
 
 	void updateItemsVisibility()
@@ -115,6 +114,8 @@ public:
 		mMenu->arrangeAndClear(); // update menu height
 	}
 
+	LLMenuGL* getMenu() { return mMenu; }
+
 private:
 	const LLUUID& getSelectedOutfitID()
 	{
@@ -353,6 +354,15 @@ BOOL LLOutfitsList::postBuild()
 	mAccordion = getChild<LLAccordionCtrl>("outfits_accordion");
 	mAccordion->setComparator(&OUTFIT_TAB_NAME_COMPARATOR);
 
+	LLMenuButton* menu_gear_btn = getChild<LLMenuButton>("options_gear_btn");
+
+	// LLMenuButton::handleMouseDownCallback calls signal LLUICtrl::mouse_signal_t, not LLButton::commit_signal_t.
+	// That's why to set signal LLUICtrl::mouse_signal_t we need to upcast to LLUICtrl. Using static_cast instead
+	// of getChild<LLUICtrl>(...) for performance.
+	static_cast<LLUICtrl*>(menu_gear_btn)->setMouseDownCallback(boost::bind(&LLOutfitsList::showGearMenu, this, _1));
+
+	menu_gear_btn->setMenu(mGearMenu->getMenu());
+
 	return TRUE;
 }
 
@@ -695,7 +705,14 @@ bool LLOutfitsList::isActionEnabled(const LLSD& userdata)
 void LLOutfitsList::showGearMenu(LLView* spawning_view)
 {
 	if (!mGearMenu) return;
+
 	mGearMenu->show(spawning_view);
+
+	LLMenuButton* btn = dynamic_cast<LLMenuButton*>(spawning_view);
+	if (btn)
+	{
+		btn->setMenuPosition(LLMenuButton::ON_TOP_LEFT);
+	}
 }
 
 void LLOutfitsList::getSelectedItemsUUIDs(uuid_vec_t& selected_uuids) const
diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp
index 24bf67a000..0e74cce37f 100644
--- a/indra/newview/llpanellandmarks.cpp
+++ b/indra/newview/llpanellandmarks.cpp
@@ -47,6 +47,7 @@
 #include "llinventorymodelbackgroundfetch.h"
 #include "llinventorypanel.h"
 #include "lllandmarkactions.h"
+#include "llmenubutton.h"
 #include "llplacesinventorybridge.h"
 #include "llplacesinventorypanel.h"
 #include "llsidetray.h"
@@ -707,6 +708,8 @@ void LLLandmarksPanel::initListCommandsHandlers()
 	mMenuAdd = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_place_add_button.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
 
 	mListCommands->childSetAction(ADD_BUTTON_NAME, boost::bind(&LLLandmarksPanel::showActionMenu, this, mMenuAdd, ADD_BUTTON_NAME));
+
+	getChild<LLUICtrl>("options_gear_btn")->setMouseDownCallback(boost::bind(&LLLandmarksPanel::onActionsButtonClick, this));
 }
 
 
@@ -751,6 +754,15 @@ void LLLandmarksPanel::showActionMenu(LLMenuGL* menu, std::string spawning_view_
 		menu->buildDrawLabels();
 		menu->updateParent(LLMenuGL::sMenuContainer);
 		LLView* spawning_view = getChild<LLView> (spawning_view_name);
+
+		LLMenuButton* btn = dynamic_cast <LLMenuButton*>(spawning_view);
+		if (btn)
+		{
+			btn->setMenu(menu);
+			btn->setMenuPosition(LLMenuButton::ON_TOP_LEFT);
+			return;
+		}
+
 		S32 menu_x, menu_y;
 		//show menu in co-ordinates of panel
 		spawning_view->localPointToOtherView(0, spawning_view->getRect().getHeight(), &menu_x, &menu_y, this);
diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp
index 27e054af34..59d58321a9 100644
--- a/indra/newview/llpanelmaininventory.cpp
+++ b/indra/newview/llpanelmaininventory.cpp
@@ -192,6 +192,8 @@ BOOL LLPanelMainInventory::postBuild()
 		mFilterEditor->setCommitCallback(boost::bind(&LLPanelMainInventory::onFilterEdit, this, _2));
 	}
 
+	mGearMenuButton = getChild<LLMenuButton>("options_gear_btn");
+
 	initListCommandsHandlers();
 
 	// *TODO:Get the cost info from the server
@@ -900,10 +902,14 @@ void LLFloaterInventoryFinder::selectNoTypes(void* user_data)
 
 void LLPanelMainInventory::initListCommandsHandlers()
 {
-	childSetAction("options_gear_btn", boost::bind(&LLPanelMainInventory::onGearButtonClick, this));
 	childSetAction("trash_btn", boost::bind(&LLPanelMainInventory::onTrashButtonClick, this));
 	childSetAction("add_btn", boost::bind(&LLPanelMainInventory::onAddButtonClick, this));
 
+	// LLMenuButton::handleMouseDownCallback calls signal LLUICtrl::mouse_signal_t, not LLButton::commit_signal_t.
+	// That's why to set signal LLUICtrl::mouse_signal_t we need to upcast to LLUICtrl. Using static_cast instead
+	// of getChild<LLUICtrl>(...) for performance.
+	static_cast<LLUICtrl*>(mGearMenuButton)->setMouseDownCallback(boost::bind(&LLPanelMainInventory::onGearButtonClick, this));
+
 	mTrashButton = getChild<LLDragAndDropButton>("trash_btn");
 	mTrashButton->setDragAndDropHandler(boost::bind(&LLPanelMainInventory::handleDragAndDropToTrash, this
 			,	_4 // BOOL drop
@@ -914,6 +920,7 @@ void LLPanelMainInventory::initListCommandsHandlers()
 	mCommitCallbackRegistrar.add("Inventory.GearDefault.Custom.Action", boost::bind(&LLPanelMainInventory::onCustomAction, this, _2));
 	mEnableCallbackRegistrar.add("Inventory.GearDefault.Enable", boost::bind(&LLPanelMainInventory::isActionEnabled, this, _2));
 	mMenuGearDefault = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_inventory_gear_default.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
+	mGearMenuButton->setMenu(mMenuGearDefault);
 	mMenuAdd = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_inventory_add.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
 
 	// Update the trash button when selected item(s) get worn or taken off.
@@ -929,7 +936,9 @@ void LLPanelMainInventory::updateListCommands()
 
 void LLPanelMainInventory::onGearButtonClick()
 {
-	showActionMenu(mMenuGearDefault,"options_gear_btn");
+	mMenuGearDefault->buildDrawLabels();
+	mMenuGearDefault->updateParent(LLMenuGL::sMenuContainer);
+	mGearMenuButton->setMenuPosition(LLMenuButton::ON_TOP_LEFT);
 }
 
 void LLPanelMainInventory::onAddButtonClick()
diff --git a/indra/newview/llpanelmaininventory.h b/indra/newview/llpanelmaininventory.h
index fb31206870..8853ba9248 100644
--- a/indra/newview/llpanelmaininventory.h
+++ b/indra/newview/llpanelmaininventory.h
@@ -31,6 +31,7 @@
 #include "llpanel.h"
 #include "llinventoryobserver.h"
 #include "lldndbutton.h"
+#include "llmenubutton.h"
 
 #include "llfolderview.h"
 
@@ -144,6 +145,7 @@ private:
 	LLDragAndDropButton*		mTrashButton;
 	LLMenuGL*					mMenuGearDefault;
 	LLMenuGL*					mMenuAdd;
+	LLMenuButton*				mGearMenuButton;
 
 	bool						mNeedUploadCost;
 	// List Commands                                                              //
diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp
index 54b0805a6c..c625ba5a11 100644
--- a/indra/newview/llpaneloutfitedit.cpp
+++ b/indra/newview/llpaneloutfitedit.cpp
@@ -403,7 +403,9 @@ LLPanelOutfitEdit::LLPanelOutfitEdit()
 	mAddWearablesPanel(NULL),
 	mFolderViewFilterCmbBox(NULL),
 	mListViewFilterCmbBox(NULL),
-	mPlusBtn(NULL)
+	mPlusBtn(NULL),
+	mWearablesGearMenuBtn(NULL),
+	mGearMenuBtn(NULL)
 {
 	mSavedFolderState = new LLSaveFolderState();
 	mSavedFolderState->setApply(FALSE);
@@ -478,13 +480,20 @@ BOOL LLPanelOutfitEdit::postBuild()
 	childSetCommitCallback("folder_view_btn", boost::bind(&LLPanelOutfitEdit::saveListSelection, this), NULL);
 	childSetCommitCallback("list_view_btn", boost::bind(&LLPanelOutfitEdit::showWearablesListView, this), NULL);
 	childSetCommitCallback("list_view_btn", boost::bind(&LLPanelOutfitEdit::saveListSelection, this), NULL);
-	childSetCommitCallback("wearables_gear_menu_btn", boost::bind(&LLPanelOutfitEdit::onGearButtonClick, this, _1), NULL);
-	childSetCommitCallback("gear_menu_btn", boost::bind(&LLPanelOutfitEdit::onGearButtonClick, this, _1), NULL);
 	childSetCommitCallback("shop_btn_1", boost::bind(&LLPanelOutfitEdit::onShopButtonClicked, this), NULL);
 	childSetCommitCallback("shop_btn_2", boost::bind(&LLPanelOutfitEdit::onShopButtonClicked, this), NULL);
 
 	setVisibleCallback(boost::bind(&LLPanelOutfitEdit::onVisibilityChange, this, _2));
 
+	mWearablesGearMenuBtn = getChild<LLMenuButton>("wearables_gear_menu_btn");
+	mGearMenuBtn = getChild<LLMenuButton>("gear_menu_btn");
+
+	// LLMenuButton::handleMouseDownCallback calls signal LLUICtrl::mouse_signal_t, not LLButton::commit_signal_t.
+	// That's why to set signal LLUICtrl::mouse_signal_t we need to upcast to LLUICtrl. Using static_cast instead
+	// of getChild<LLUICtrl>(...) for performance.
+	static_cast<LLUICtrl*>(mWearablesGearMenuBtn)->setMouseDownCallback(boost::bind(&LLPanelOutfitEdit::onGearButtonClick, this, _1));
+	static_cast<LLUICtrl*>(mGearMenuBtn)->setMouseDownCallback(boost::bind(&LLPanelOutfitEdit::onGearButtonClick, this, _1));
+
 	mCOFWearables = getChild<LLCOFWearables>("cof_wearables_list");
 	mCOFWearables->setCommitCallback(boost::bind(&LLPanelOutfitEdit::filterWearablesBySelectedItem, this));
 
@@ -1259,32 +1268,36 @@ void LLPanelOutfitEdit::resetAccordionState()
 void LLPanelOutfitEdit::onGearButtonClick(LLUICtrl* clicked_button)
 {
 	LLMenuGL* menu = NULL;
+	LLMenuButton* btn = NULL;
 
 	if (mAddWearablesPanel->getVisible())
 	{
 		if (!mAddWearablesGearMenu)
 		{
 			mAddWearablesGearMenu = LLAddWearablesGearMenu::create(mWearableItemsList, mInventoryItemsPanel);
+			mWearablesGearMenuBtn->setMenu(mAddWearablesGearMenu);
 		}
 
 		menu = mAddWearablesGearMenu;
+		btn = mWearablesGearMenuBtn;
 	}
 	else
 	{
 		if (!mGearMenu)
 		{
 			mGearMenu = LLPanelOutfitEditGearMenu::create();
+			mGearMenuBtn->setMenu(mGearMenu);
 		}
 
 		menu = mGearMenu;
+		btn = mGearMenuBtn;
 	}
 
-	if (!menu) return;
+	if (!menu || !btn) return;
 
-	menu->arrangeAndClear(); // update menu height
-	S32 menu_y = menu->getRect().getHeight() + clicked_button->getRect().getHeight();
 	menu->buildDrawLabels();
-	LLMenuGL::showPopup(clicked_button, menu, 0, menu_y);
+	menu->arrangeAndClear();
+	btn->setMenuPosition(LLMenuButton::ON_TOP_LEFT);
 }
 
 void LLPanelOutfitEdit::onAddMoreButtonClicked()
diff --git a/indra/newview/llpaneloutfitedit.h b/indra/newview/llpaneloutfitedit.h
index 2dca986e33..07edbdb9ba 100644
--- a/indra/newview/llpaneloutfitedit.h
+++ b/indra/newview/llpaneloutfitedit.h
@@ -38,6 +38,7 @@
 #include "llinventory.h"
 #include "llinventoryfunctions.h"
 #include "llinventorymodel.h"
+#include "llmenubutton.h"
 #include "llwearableitemslist.h"
 
 class LLButton;
@@ -238,8 +239,8 @@ private:
 	LLMenuGL*			mAddWearablesGearMenu;
 	bool				mInitialized;
 	std::auto_ptr<LLSaveOutfitComboBtn> mSaveComboBtn;
-
-
+	LLMenuButton*		mWearablesGearMenuBtn;
+	LLMenuButton*		mGearMenuBtn;
 
 };
 
diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp
index d096b17145..8d387f3e85 100644
--- a/indra/newview/llpanelpeople.cpp
+++ b/indra/newview/llpanelpeople.cpp
@@ -463,7 +463,11 @@ LLPanelPeople::LLPanelPeople()
 		mAllFriendList(NULL),
 		mNearbyList(NULL),
 		mRecentList(NULL),
-		mGroupList(NULL)
+		mGroupList(NULL),
+		mNearbyGearButton(NULL),
+		mFriendsGearButton(NULL),
+		mGroupsGearButton(NULL),
+		mRecentGearButton(NULL)
 {
 	mFriendListUpdater = new LLFriendListUpdater(boost::bind(&LLPanelPeople::updateFriendList,	this));
 	mNearbyListUpdater = new LLNearbyListUpdater(boost::bind(&LLPanelPeople::updateNearbyList,	this));
@@ -599,11 +603,6 @@ BOOL LLPanelPeople::postBuild()
 	buttonSetAction("teleport_btn",		boost::bind(&LLPanelPeople::onTeleportButtonClicked,	this));
 	buttonSetAction("share_btn",		boost::bind(&LLPanelPeople::onShareButtonClicked,		this));
 
-	getChild<LLPanel>(NEARBY_TAB_NAME)->childSetAction("nearby_view_sort_btn",boost::bind(&LLPanelPeople::onNearbyViewSortButtonClicked,		this));
-	getChild<LLPanel>(RECENT_TAB_NAME)->childSetAction("recent_viewsort_btn",boost::bind(&LLPanelPeople::onRecentViewSortButtonClicked,			this));
-	getChild<LLPanel>(FRIENDS_TAB_NAME)->childSetAction("friends_viewsort_btn",boost::bind(&LLPanelPeople::onFriendsViewSortButtonClicked,		this));
-	getChild<LLPanel>(GROUP_TAB_NAME)->childSetAction("groups_viewsort_btn",boost::bind(&LLPanelPeople::onGroupsViewSortButtonClicked,		this));
-
 	// Must go after setting commit callback and initializing all pointers to children.
 	mTabContainer->selectTabByName(NEARBY_TAB_NAME);
 
@@ -623,24 +622,49 @@ BOOL LLPanelPeople::postBuild()
 	enable_registrar.add("People.Recent.ViewSort.CheckItem",	boost::bind(&LLPanelPeople::onRecentViewSortMenuItemCheck,	this, _2));
 	enable_registrar.add("People.Nearby.ViewSort.CheckItem",	boost::bind(&LLPanelPeople::onNearbyViewSortMenuItemCheck,	this, _2));
 
+	mNearbyGearButton = getChild<LLMenuButton>("nearby_view_sort_btn");
+	mFriendsGearButton = getChild<LLMenuButton>("friends_viewsort_btn");
+	mGroupsGearButton = getChild<LLMenuButton>("groups_viewsort_btn");
+	mRecentGearButton = getChild<LLMenuButton>("recent_viewsort_btn");
+
+	// LLMenuButton::handleMouseDownCallback calls signal LLUICtrl::mouse_signal_t, not LLButton::commit_signal_t.
+	// That's why to set signal LLUICtrl::mouse_signal_t we need to upcast to LLUICtrl. Using static_cast instead
+	// of getChild<LLUICtrl>(...) for performance.
+	static_cast<LLUICtrl*>(mNearbyGearButton)->setMouseDownCallback(boost::bind(&LLPanelPeople::onViewSortButtonClicked, this));
+	static_cast<LLUICtrl*>(mFriendsGearButton)->setMouseDownCallback(boost::bind(&LLPanelPeople::onViewSortButtonClicked, this));
+	static_cast<LLUICtrl*>(mGroupsGearButton)->setMouseDownCallback(boost::bind(&LLPanelPeople::onViewSortButtonClicked, this));
+	static_cast<LLUICtrl*>(mRecentGearButton)->setMouseDownCallback(boost::bind(&LLPanelPeople::onViewSortButtonClicked, this));
+
 	LLMenuGL* plus_menu  = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_group_plus.xml",  gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
 	mGroupPlusMenuHandle  = plus_menu->getHandle();
 
 	LLMenuGL* nearby_view_sort  = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_people_nearby_view_sort.xml",  gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
 	if(nearby_view_sort)
+	{
 		mNearbyViewSortMenuHandle  = nearby_view_sort->getHandle();
+		mNearbyGearButton->setMenu(nearby_view_sort);
+	}
 
 	LLMenuGL* friend_view_sort  = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_people_friends_view_sort.xml",  gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
 	if(friend_view_sort)
+	{
 		mFriendsViewSortMenuHandle  = friend_view_sort->getHandle();
+		mFriendsGearButton->setMenu(friend_view_sort);
+	}
 
 	LLMenuGL* group_view_sort  = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_people_groups_view_sort.xml",  gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
 	if(group_view_sort)
+	{
 		mGroupsViewSortMenuHandle  = group_view_sort->getHandle();
+		mGroupsGearButton->setMenu(group_view_sort);
+	}
 
 	LLMenuGL* recent_view_sort  = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_people_recent_view_sort.xml",  gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
 	if(recent_view_sort)
+	{
 		mRecentViewSortMenuHandle  = recent_view_sort->getHandle();
+		mRecentGearButton->setMenu(recent_view_sort);
+	}
 
 	LLVoiceClient::getInstance()->addObserver(this);
 
@@ -907,20 +931,9 @@ void LLPanelPeople::getCurrentItemIDs(uuid_vec_t& selected_uuids) const
 void LLPanelPeople::showGroupMenu(LLMenuGL* menu)
 {
 	// Shows the menu at the top of the button bar.
-
-	// Calculate its coordinates.
-	// (assumes that groups panel is the current tab)
-	LLPanel* bottom_panel = mTabContainer->getCurrentPanel()->getChild<LLPanel>("bottom_panel"); 
-	LLPanel* parent_panel = mTabContainer->getCurrentPanel();
 	menu->arrangeAndClear();
-	S32 menu_height = menu->getRect().getHeight();
-	S32 menu_x = -2; // *HACK: compensates HPAD in showPopup()
-	S32 menu_y = bottom_panel->getRect().mTop + menu_height;
-
-	// Actually show the menu.
 	menu->buildDrawLabels();
 	menu->updateParent(LLMenuGL::sMenuContainer);
-	LLMenuGL::showPopup(parent_panel, menu, menu_x, menu_y);
 }
 
 void LLPanelPeople::setSortOrder(LLAvatarList* list, ESortOrder order, bool save)
@@ -1347,36 +1360,39 @@ void LLPanelPeople::onMoreButtonClicked()
 	// *TODO: not implemented yet
 }
 
-void LLPanelPeople::onFriendsViewSortButtonClicked()
-{
-	LLMenuGL* menu = (LLMenuGL*)mFriendsViewSortMenuHandle.get();
-	if (!menu)
-		return;
-	showGroupMenu(menu);
-}
-
-void LLPanelPeople::onGroupsViewSortButtonClicked()
-{
-	LLMenuGL* menu = (LLMenuGL*)mGroupsViewSortMenuHandle.get();
-	if (!menu)
-		return;
-	showGroupMenu(menu);
-}
-
-void LLPanelPeople::onRecentViewSortButtonClicked()
-{
-	LLMenuGL* menu = (LLMenuGL*)mRecentViewSortMenuHandle.get();
-	if (!menu)
-		return;
-	showGroupMenu(menu);
-}
-
-void LLPanelPeople::onNearbyViewSortButtonClicked()
-{
-	LLMenuGL* menu = (LLMenuGL*)mNearbyViewSortMenuHandle.get();
-	if (!menu)
-		return;
-	showGroupMenu(menu);
+void LLPanelPeople::onViewSortButtonClicked()
+{
+	std::string current_panel = getActiveTabName();
+
+    LLMenuGL* menu = NULL;
+    LLMenuButton* btn = NULL;
+
+    if (current_panel == NEARBY_TAB_NAME)
+    {
+        menu = dynamic_cast<LLMenuGL*>(mNearbyViewSortMenuHandle.get());
+        btn = mNearbyGearButton;
+    }
+    else if (current_panel == FRIENDS_TAB_NAME)
+    {
+        menu = dynamic_cast<LLMenuGL*>(mFriendsViewSortMenuHandle.get());
+        btn = mFriendsGearButton;
+    }
+    else if (current_panel == GROUP_TAB_NAME)
+    {
+        menu = dynamic_cast<LLMenuGL*>(mGroupsViewSortMenuHandle.get());
+        btn = mGroupsGearButton;
+    }
+    else if (current_panel == RECENT_TAB_NAME)
+    {
+        menu = dynamic_cast<LLMenuGL*>(mRecentViewSortMenuHandle.get());
+        btn = mRecentGearButton;
+    }
+
+    if (menu && btn)
+    {
+    	showGroupMenu(menu);
+    	btn->setMenuPosition(LLMenuButton::ON_TOP_LEFT);
+    }
 }
 
 void	LLPanelPeople::onOpen(const LLSD& key)
diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h
index d0913ee756..3109feef0c 100644
--- a/indra/newview/llpanelpeople.h
+++ b/indra/newview/llpanelpeople.h
@@ -30,6 +30,7 @@
 #include <llpanel.h>
 
 #include "llcallingcard.h" // for avatar tracker
+#include "llmenubutton.h"
 #include "llvoiceclient.h"
 
 class LLFilterEditor;
@@ -100,10 +101,7 @@ private:
 	void					onShareButtonClicked();
 	void					onMoreButtonClicked();
 	void					onActivateButtonClicked();
-	void					onRecentViewSortButtonClicked();
-	void					onNearbyViewSortButtonClicked();
-	void					onFriendsViewSortButtonClicked();
-	void					onGroupsViewSortButtonClicked();
+	void					onViewSortButtonClicked();
 	void					onAvatarListDoubleClicked(LLUICtrl* ctrl);
 	void					onAvatarListCommitted(LLAvatarList* list);
 	void					onGroupPlusButtonClicked();
@@ -157,6 +155,11 @@ private:
 	Updater*				mNearbyListUpdater;
 	Updater*				mRecentListUpdater;
 
+	LLMenuButton*			mNearbyGearButton;
+	LLMenuButton*			mFriendsGearButton;
+	LLMenuButton*			mGroupsGearButton;
+	LLMenuButton*			mRecentGearButton;
+
 	std::string				mFilterSubString;
 	std::string				mFilterSubStringOrig;
 };
diff --git a/indra/newview/llpanelteleporthistory.cpp b/indra/newview/llpanelteleporthistory.cpp
index a7cbf52290..216b7e2fa9 100644
--- a/indra/newview/llpanelteleporthistory.cpp
+++ b/indra/newview/llpanelteleporthistory.cpp
@@ -375,7 +375,8 @@ LLTeleportHistoryPanel::LLTeleportHistoryPanel()
 		mHistoryAccordion(NULL),
 		mAccordionTabMenu(NULL),
 		mLastSelectedFlatlList(NULL),
-		mLastSelectedItemIndex(-1)
+		mLastSelectedItemIndex(-1),
+		mMenuGearButton(NULL)
 {
 	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_teleport_history.xml");
 }
@@ -439,8 +440,6 @@ BOOL LLTeleportHistoryPanel::postBuild()
 		}
 	}
 
-	getChild<LLPanel>("bottom_panel")->childSetAction("gear_btn",boost::bind(&LLTeleportHistoryPanel::onGearButtonClicked, this));
-
 	LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar;
 
 	registrar.add("TeleportHistory.ExpandAllFolders",  boost::bind(&LLTeleportHistoryPanel::onExpandAllFolders,  this));
@@ -448,9 +447,19 @@ BOOL LLTeleportHistoryPanel::postBuild()
 	registrar.add("TeleportHistory.ClearTeleportHistory",  boost::bind(&LLTeleportHistoryPanel::onClearTeleportHistory,  this));
 	mEnableCallbackRegistrar.add("TeleportHistory.GearMenu.Enable", boost::bind(&LLTeleportHistoryPanel::isActionEnabled, this, _2));
 
-	LLMenuGL* gear_menu  = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_teleport_history_gear.xml",  gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
+	mMenuGearButton = getChild<LLMenuButton>("gear_btn");
+
+	LLMenuGL* gear_menu  = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_teleport_history_gear.xml",  gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());;
 	if(gear_menu)
+	{
 		mGearMenuHandle  = gear_menu->getHandle();
+		mMenuGearButton->setMenu(gear_menu);
+	}
+
+	// LLMenuButton::handleMouseDownCallback calls signal LLUICtrl::mouse_signal_t, not LLButton::commit_signal_t.
+	// That's why to set signal LLUICtrl::mouse_signal_t we need to upcast to LLUICtrl. Using static_cast instead
+	// of getChild<LLUICtrl>(...) for performance.
+	static_cast<LLUICtrl*>(mMenuGearButton)->setMouseDownCallback(boost::bind(&LLTeleportHistoryPanel::onGearButtonClicked, this));
 
 	return TRUE;
 }
@@ -991,19 +1000,12 @@ void LLTeleportHistoryPanel::onGearButtonClicked()
 	if (!menu)
 		return;
 
-	// Shows the menu at the top of the button bar.
-
-	// Calculate its coordinates.
-	LLPanel* bottom_panel = getChild<LLPanel>("bottom_panel");
 	menu->arrangeAndClear();
-	S32 menu_height = menu->getRect().getHeight();
-	S32 menu_x = -2; // *HACK: compensates HPAD in showPopup()
-	S32 menu_y = bottom_panel->getRect().mTop + menu_height;
-
-	// Actually show the menu.
 	menu->buildDrawLabels();
 	menu->updateParent(LLMenuGL::sMenuContainer);
-	LLMenuGL::showPopup(this, menu, menu_x, menu_y);
+
+	// Shows the menu at the top of the button bar.
+	mMenuGearButton->setMenuPosition(LLMenuButton::ON_TOP_LEFT);
 }
 
 bool LLTeleportHistoryPanel::isActionEnabled(const LLSD& userdata) const
diff --git a/indra/newview/llpanelteleporthistory.h b/indra/newview/llpanelteleporthistory.h
index b5a025b39b..04809383f2 100644
--- a/indra/newview/llpanelteleporthistory.h
+++ b/indra/newview/llpanelteleporthistory.h
@@ -33,6 +33,7 @@
 #include "llpanelplacestab.h"
 #include "llteleporthistory.h"
 #include "llmenugl.h"
+#include "llmenubutton.h"
 
 class LLTeleportHistoryStorage;
 class LLAccordionCtrl;
@@ -118,6 +119,7 @@ private:
 	ContextMenu mContextMenu;
 	LLContextMenu*			mAccordionTabMenu;
 	LLHandle<LLView>		mGearMenuHandle;
+	LLMenuButton*			mMenuGearButton;
 };
 
 
diff --git a/indra/newview/llpanelwearing.cpp b/indra/newview/llpanelwearing.cpp
index 860470cd73..1b46294c52 100644
--- a/indra/newview/llpanelwearing.cpp
+++ b/indra/newview/llpanelwearing.cpp
@@ -32,6 +32,7 @@
 #include "llinventoryfunctions.h"
 #include "llinventorymodel.h"
 #include "llinventoryobserver.h"
+#include "llmenubutton.h"
 #include "llsidetray.h"
 #include "llviewermenu.h"
 #include "llwearableitemslist.h"
@@ -67,13 +68,13 @@ public:
 	{
 		if (!mMenu) return;
 
+		mMenu->arrangeAndClear();
 		mMenu->buildDrawLabels();
 		mMenu->updateParent(LLMenuGL::sMenuContainer);
-		S32 menu_x = 0;
-		S32 menu_y = spawning_view->getRect().getHeight() + mMenu->getRect().getHeight();
-		LLMenuGL::showPopup(spawning_view, mMenu, menu_x, menu_y);
 	}
 
+	LLMenuGL* getMenu() { return mMenu; }
+
 private:
 
 	void onTakeOff()
@@ -189,6 +190,16 @@ BOOL LLPanelWearing::postBuild()
 	mCOFItemsList = getChild<LLWearableItemsList>("cof_items_list");
 	mCOFItemsList->setRightMouseDownCallback(boost::bind(&LLPanelWearing::onWearableItemsListRightClick, this, _1, _2, _3));
 
+	LLMenuButton* menu_gear_btn = getChild<LLMenuButton>("options_gear_btn");
+
+	// LLMenuButton::handleMouseDownCallback calls signal LLUICtrl::mouse_signal_t, not LLButton::commit_signal_t.
+	// That's why to set signal LLUICtrl::mouse_signal_t we need to upcast to LLUICtrl. Using static_cast instead
+	// of getChild<LLUICtrl>(...) for performance.
+	static_cast<LLUICtrl*>(menu_gear_btn)->setMouseDownCallback(boost::bind(&LLPanelWearing::showGearMenu, this, _1));
+
+	menu_gear_btn->setMenu(mGearMenu->getMenu());
+
+
 	return TRUE;
 }
 
@@ -257,7 +268,14 @@ bool LLPanelWearing::isActionEnabled(const LLSD& userdata)
 void LLPanelWearing::showGearMenu(LLView* spawning_view)
 {
 	if (!mGearMenu) return;
+
 	mGearMenu->show(spawning_view);
+
+	LLMenuButton* btn = dynamic_cast<LLMenuButton*>(spawning_view);
+	if (btn)
+	{
+		btn->setMenuPosition(LLMenuButton::ON_TOP_LEFT);
+	}
 }
 
 boost::signals2::connection LLPanelWearing::setSelectionChangeCallback(commit_callback_t cb)
diff --git a/indra/newview/skins/default/xui/en/panel_landmarks.xml b/indra/newview/skins/default/xui/en/panel_landmarks.xml
index 7e415f45a4..5106215835 100644
--- a/indra/newview/skins/default/xui/en/panel_landmarks.xml
+++ b/indra/newview/skins/default/xui/en/panel_landmarks.xml
@@ -115,7 +115,7 @@
 		       layout="topleft"
 		       name="options_gear_btn_panel"
 		       width="32">
-		          <button
+		          <menu_button
 		           follows="bottom|left"
 		           tool_tip="Show additional options"
 		           height="25"
diff --git a/indra/newview/skins/default/xui/en/panel_main_inventory.xml b/indra/newview/skins/default/xui/en/panel_main_inventory.xml
index 16529f4064..2b6e082542 100644
--- a/indra/newview/skins/default/xui/en/panel_main_inventory.xml
+++ b/indra/newview/skins/default/xui/en/panel_main_inventory.xml
@@ -119,7 +119,7 @@
        layout="topleft"
        name="options_gear_btn_panel"
        width="32">
-          <button
+          <menu_button
            follows="bottom|left"
            tool_tip="Show additional options"
            height="25"
diff --git a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml
index 883cbb30c6..89e12b2d1d 100644
--- a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml
+++ b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml
@@ -375,7 +375,7 @@ It is calculated as border_size + 2*UIResizeBarOverlap
      name="no_add_wearables_button_bar"
      top_pad="0"
      width="313">
-        <button
+        <menu_button
          follows="bottom|left"
          height="25"
          image_hover_unselected="Toolbar_Left_Over"
@@ -423,7 +423,7 @@ It is calculated as border_size + 2*UIResizeBarOverlap
      top_delta="0"
      visible="false"
      width="313">
-        <button
+        <menu_button
          follows="bottom|left"
          height="25"
          image_hover_unselected="Toolbar_Left_Over"
diff --git a/indra/newview/skins/default/xui/en/panel_outfits_list.xml b/indra/newview/skins/default/xui/en/panel_outfits_list.xml
index d18f0d57ca..9f98019c94 100644
--- a/indra/newview/skins/default/xui/en/panel_outfits_list.xml
+++ b/indra/newview/skins/default/xui/en/panel_outfits_list.xml
@@ -35,7 +35,7 @@
 	 visible="true"
 	 name="bottom_panel"
 	 width="312">
-     <button
+     <menu_button
        follows="bottom|left"
        tool_tip="Show additional options"
        height="25"
diff --git a/indra/newview/skins/default/xui/en/panel_outfits_wearing.xml b/indra/newview/skins/default/xui/en/panel_outfits_wearing.xml
index 2fbbf6610c..d85b778db2 100644
--- a/indra/newview/skins/default/xui/en/panel_outfits_wearing.xml
+++ b/indra/newview/skins/default/xui/en/panel_outfits_wearing.xml
@@ -29,7 +29,7 @@
      name="bottom_panel"
      top_pad="0"
      width="312">
-        <button
+        <menu_button
          follows="bottom|left"
          height="25"
          image_hover_unselected="Toolbar_Left_Over"
diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml
index ab8930c967..3ffb462bb5 100644
--- a/indra/newview/skins/default/xui/en/panel_people.xml
+++ b/indra/newview/skins/default/xui/en/panel_people.xml
@@ -114,7 +114,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
              name="bottom_panel"
              top_pad="0"
              width="313">
-             <button
+             <menu_button
              follows="bottom|left"
              height="25"
              image_hover_unselected="Toolbar_Left_Over"
@@ -242,7 +242,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
 				       layout="topleft"
 				       name="options_gear_btn_panel"
 				       width="32">
-				          <button
+				          <menu_button
 				           follows="bottom|left"
 				           tool_tip="Show additional options"
 				           height="25"
@@ -407,7 +407,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
              name="bottom_panel"
              top_pad="0"
              width="313">
-               <button
+               <menu_button
                follows="bottom|left"
                tool_tip="Options"
                height="25"
@@ -490,7 +490,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
              name="bottom_panel"
              top_pad="0"
              width="313">
-               <button
+               <menu_button
                follows="bottom|left"
                tool_tip="Options"
                height="25"
@@ -499,7 +499,6 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
                image_selected="Toolbar_Left_Selected"
                image_unselected="Toolbar_Left_Off"
                layout="topleft"
-               left="3"
                name="recent_viewsort_btn"
                top="1"
                width="31" />
diff --git a/indra/newview/skins/default/xui/en/panel_teleport_history.xml b/indra/newview/skins/default/xui/en/panel_teleport_history.xml
index bf09836e87..768efc2f3f 100644
--- a/indra/newview/skins/default/xui/en/panel_teleport_history.xml
+++ b/indra/newview/skins/default/xui/en/panel_teleport_history.xml
@@ -157,7 +157,7 @@
      left="3"
      name="bottom_panel"
      width="313">
-        <button
+        <menu_button
          follows="bottom|left"
          tool_tip="Show additional options"
          height="25"
-- 
cgit v1.2.3


From 637bcedf029bfbe4d31668834476bf972a97dd60 Mon Sep 17 00:00:00 2001
From: Paul Guslisty <pguslisty@productengine.com>
Date: Thu, 7 Oct 2010 17:12:49 +0300
Subject: FIXED STORM-302 Parcel lists scroll bar overlaps with other
 components if panel is undocked

- Added missing column to the xml of the scroll list

- Adjusted columns width to show all columns
---
 .../newview/skins/default/xui/en/panel_group_land_money.xml  | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_group_land_money.xml b/indra/newview/skins/default/xui/en/panel_group_land_money.xml
index 76f7484c68..64539f2134 100644
--- a/indra/newview/skins/default/xui/en/panel_group_land_money.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_land_money.xml
@@ -65,19 +65,23 @@
         <scroll_list.columns
          label="Parcel"
          name="name"
-         width="78" />
+         width="47" />
         <scroll_list.columns
          label="Region"
          name="location"
-         width="78" />
+         width="47" />
         <scroll_list.columns
          label="Type"
          name="type"
-         width="70" />
+         width="47" />
         <scroll_list.columns
          label="Area"
          name="area"
-         width="50" />
+         width="47" />
+        <scroll_list.columns
+         label="Hidden"
+         name="hidden"
+         width="47" />
     </scroll_list>
     <text
      type="string"
-- 
cgit v1.2.3


From c3b9ed68cfa988ddbbcfae36be04d4a8e69c1983 Mon Sep 17 00:00:00 2001
From: Seth ProductEngine <slitovchuk@productengine.com>
Date: Thu, 7 Oct 2010 18:54:30 +0300
Subject: STORM-296 FIXED Item types that can be dropped to Places SP->My
 Landmarks  restricted to landmarks and folders only.

---
 indra/newview/llplacesinventorypanel.cpp | 18 ++++++++++++++++++
 indra/newview/llplacesinventorypanel.h   |  6 ++++++
 2 files changed, 24 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/llplacesinventorypanel.cpp b/indra/newview/llplacesinventorypanel.cpp
index 29e262199e..408270a1a0 100644
--- a/indra/newview/llplacesinventorypanel.cpp
+++ b/indra/newview/llplacesinventorypanel.cpp
@@ -205,6 +205,24 @@ BOOL LLPlacesFolderView::handleRightMouseDown(S32 x, S32 y, MASK mask)
 	return LLFolderView::handleRightMouseDown(x, y, mask);
 }
 
+BOOL LLPlacesFolderView::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
+										   EDragAndDropType cargo_type,
+										   void* cargo_data,
+										   EAcceptance* accept,
+										   std::string& tooltip_msg)
+{
+	// Don't accept anything except landmarks and folders to be dropped
+	// in places folder view. See STORM-296.
+	if (cargo_type != DAD_LANDMARK && cargo_type != DAD_CATEGORY)
+	{
+		*accept = ACCEPT_NO;
+		return FALSE;
+	}
+
+	return LLFolderView::handleDragAndDrop(x, y, mask, drop, cargo_type, cargo_data,
+										   accept, tooltip_msg);
+}
+
 void LLPlacesFolderView::setupMenuHandle(LLInventoryType::EType asset_type, LLHandle<LLView> menu_handle)
 {
 	mMenuHandlesByInventoryType[asset_type] = menu_handle;
diff --git a/indra/newview/llplacesinventorypanel.h b/indra/newview/llplacesinventorypanel.h
index 6641871a0b..a44776d18b 100644
--- a/indra/newview/llplacesinventorypanel.h
+++ b/indra/newview/llplacesinventorypanel.h
@@ -70,6 +70,12 @@ public:
 	 */
 	/*virtual*/ BOOL handleRightMouseDown( S32 x, S32 y, MASK mask );
 
+	/*virtual*/ BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
+									   EDragAndDropType cargo_type,
+									   void* cargo_data,
+									   EAcceptance* accept,
+									   std::string& tooltip_msg);
+
 	void setupMenuHandle(LLInventoryType::EType asset_type, LLHandle<LLView> menu_handle);
 
 	void setParentLandmarksPanel(LLLandmarksPanel* panel)
-- 
cgit v1.2.3


From 2ed5f04b99c4805b8adda9745811e82616d61c9b Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Thu, 7 Oct 2010 10:42:31 -0700
Subject: Adding viewer hint for setting display name the when edit profile is
 opened with no display name set

---
 indra/newview/app_settings/ignorable_dialogs.xml   | 11 +++++++++++
 indra/newview/llfirstuse.cpp                       |  6 ++++++
 indra/newview/llfirstuse.h                         |  1 +
 indra/newview/llpanelme.cpp                        | 22 ++++++++++++++++++++--
 .../newview/skins/default/xui/en/notifications.xml |  8 ++++++++
 5 files changed, 46 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/ignorable_dialogs.xml b/indra/newview/app_settings/ignorable_dialogs.xml
index 0720ccee49..9ddf007ce7 100644
--- a/indra/newview/app_settings/ignorable_dialogs.xml
+++ b/indra/newview/app_settings/ignorable_dialogs.xml
@@ -45,6 +45,17 @@
     <key>Value</key>
     <integer>1</integer>
   </map>
+  <key>FirstDisplayName</key>
+  <map>
+    <key>Comment</key>
+    <string>Shows hint when edits profile for the first time</string>
+    <key>Persist</key>
+    <integer>1</integer>
+    <key>Type</key>
+    <string>Boolean</string>
+    <key>Value</key>
+    <integer>1</integer>
+  </map>
   <key>FirstReceiveLindens</key>
   <map>
     <key>Comment</key>
diff --git a/indra/newview/llfirstuse.cpp b/indra/newview/llfirstuse.cpp
index dd08706f4f..b08c113923 100644
--- a/indra/newview/llfirstuse.cpp
+++ b/indra/newview/llfirstuse.cpp
@@ -116,6 +116,12 @@ void LLFirstUse::notMoving(bool enable)
 	firstUseNotification("FirstNotMoving", enable, "HintMove", LLSD(), LLSD().with("target", "move_btn").with("direction", "top"));
 }
 
+// static
+void LLFirstUse::setDisplayName(bool enable)
+{
+	firstUseNotification("FirstDisplayName", enable, "HintDisplayName", LLSD(), LLSD().with("target", "set_display_name").with("direction", "left"));
+}
+
 // static
 void LLFirstUse::receiveLindens(bool enable)
 {
diff --git a/indra/newview/llfirstuse.h b/indra/newview/llfirstuse.h
index 275f134400..3b7ff6383b 100644
--- a/indra/newview/llfirstuse.h
+++ b/indra/newview/llfirstuse.h
@@ -91,6 +91,7 @@ public:
 	static void notMoving(bool enable = true);
 	static void newInventory(bool enable = true);
 	static void receiveLindens(bool enable = true);
+	static void setDisplayName(bool enable = true);
 	static void useSandbox();
 	
 protected:
diff --git a/indra/newview/llpanelme.cpp b/indra/newview/llpanelme.cpp
index 79d5195ccf..3cc6b32678 100644
--- a/indra/newview/llpanelme.cpp
+++ b/indra/newview/llpanelme.cpp
@@ -34,6 +34,8 @@
 #include "llagent.h"
 #include "llagentcamera.h"
 #include "llagentwearables.h"
+#include "llfirstuse.h"
+#include "llhints.h"
 #include "llsidetray.h"
 #include "llviewercontrol.h"
 #include "llviewerdisplayname.h"
@@ -190,8 +192,20 @@ void LLPanelMyProfileEdit::onOpen(const LLSD& key)
 	set_name->setEnabled(use_display_names);
 	// force new avatar name fetch so we have latest update time
 	LLAvatarNameCache::fetch(gAgent.getID()); 
-
 	LLPanelMyProfile::onOpen(getAvatarId());
+	
+	LLAvatarName av_name;	
+	if (LLAvatarNameCache::useDisplayNames())
+	{
+		if (LLAvatarNameCache::get(gAgent.getID(), &av_name) && av_name.mIsDisplayNameDefault)  	
+		{
+			LLFirstUse::setDisplayName();
+		}
+		else
+		{
+			LLFirstUse::setDisplayName(false);
+		}
+	}
 }
 
 void LLPanelMyProfileEdit::processProperties(void* data, EAvatarProcessorType type)
@@ -258,6 +272,8 @@ BOOL LLPanelMyProfileEdit::postBuild()
 	getChild<LLUICtrl>("set_name")->setCommitCallback(
 		boost::bind(&LLPanelMyProfileEdit::onClickSetName, this));
 
+	LLHints::registerHintTarget("set_display_name", getChild<LLUICtrl>("set_name")->getHandle());
+
 	return LLPanelAvatarProfile::postBuild();
 }
 /**
@@ -386,7 +402,9 @@ void LLPanelMyProfileEdit::onClickSetName()
 {	
 	LLAvatarNameCache::get(getAvatarId(), 
 			boost::bind(&LLPanelMyProfileEdit::onAvatarNameCache,
-				this, _1, _2));
+				this, _1, _2));	
+
+	LLFirstUse::setDisplayName(false);
 }
 
 void LLPanelMyProfileEdit::onAvatarNameCache(const LLUUID& agent_id, const LLAvatarName& av_name)
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index efd6ed0ac8..88b5613880 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -6537,6 +6537,14 @@ Mute everyone?
     To walk or run, open the Move Panel and use the directional arrows to navigate. You can also use the directional keys on your keyboard.
   </notification>
 
+  <notification
+  name="HintDisplayName"
+  label="Display Name"
+  type="hint"
+  unique="true">
+    Set your customizable display name here. This is in addition to your unique username, which can't be changed.
+  </notification>
+
   <notification
   name="HintInventory"
   label="Inventory"
-- 
cgit v1.2.3


From 3abd522936a7a82b2ab76f5ec27bcfc99deb55f0 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Thu, 7 Oct 2010 12:26:46 -0700
Subject: Updating display name hint text per Jack's request.

---
 indra/newview/skins/default/xui/en/notifications.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 88b5613880..b837dfbed5 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -6542,7 +6542,7 @@ Mute everyone?
   label="Display Name"
   type="hint"
   unique="true">
-    Set your customizable display name here. This is in addition to your unique username, which can't be changed.
+    Set your customizable display name here. This is in addition to your unique username, which can't be changed. You can change how you see other people's names in your preferences.
   </notification>
 
   <notification
-- 
cgit v1.2.3


From f6a9174463ecb93f537752b7194eb0400a13758b Mon Sep 17 00:00:00 2001
From: Eli Linden <eli@lindenlab.com>
Date: Thu, 7 Oct 2010 16:37:06 -0700
Subject: CT-575 WIP ES translation for Set18

---
 indra/newview/skins/default/xui/es/floater_map.xml | 25 +------
 .../skins/default/xui/es/floater_nearby_chat.xml   |  4 +-
 .../newview/skins/default/xui/es/floater_tools.xml |  7 +-
 .../skins/default/xui/es/menu_attachment_self.xml  |  1 +
 .../skins/default/xui/es/menu_avatar_self.xml      |  3 +-
 .../default/xui/es/menu_inspect_object_gear.xml    |  1 +
 .../default/xui/es/menu_inspect_self_gear.xml      |  1 +
 .../newview/skins/default/xui/es/menu_mini_map.xml |  1 +
 indra/newview/skins/default/xui/es/menu_object.xml |  8 +-
 .../xui/es/menu_people_friends_view_sort.xml       |  1 +
 .../xui/es/menu_people_nearby_multiselect.xml      |  1 +
 indra/newview/skins/default/xui/es/menu_viewer.xml | 16 ++--
 .../default/xui/es/menu_wearable_list_item.xml     |  2 +-
 .../skins/default/xui/es/menu_wearing_gear.xml     |  1 +
 .../skins/default/xui/es/menu_wearing_tab.xml      |  2 +
 .../newview/skins/default/xui/es/notifications.xml | 12 ++-
 .../default/xui/es/panel_avatar_list_item.xml      |  4 +
 .../skins/default/xui/es/panel_bottomtray.xml      | 18 ++---
 .../skins/default/xui/es/panel_classified_info.xml | 14 +++-
 .../skins/default/xui/es/panel_edit_classified.xml | 12 ++-
 .../skins/default/xui/es/panel_edit_pick.xml       | 10 ++-
 .../skins/default/xui/es/panel_edit_profile.xml    | 10 ++-
 .../skins/default/xui/es/panel_edit_wearable.xml   | 10 ++-
 .../default/xui/es/panel_group_info_sidetray.xml   | 10 ++-
 .../skins/default/xui/es/panel_landmarks.xml       | 14 +++-
 .../skins/default/xui/es/panel_my_profile.xml      |  7 +-
 indra/newview/skins/default/xui/es/panel_notes.xml | 30 +++++---
 .../skins/default/xui/es/panel_outfit_edit.xml     | 10 ++-
 .../default/xui/es/panel_outfits_inventory.xml     | 10 ++-
 .../newview/skins/default/xui/es/panel_people.xml  | 50 ++++++++++---
 .../skins/default/xui/es/panel_pick_info.xml       | 20 +++--
 indra/newview/skins/default/xui/es/panel_picks.xml | 23 ++++--
 .../newview/skins/default/xui/es/panel_places.xml  | 48 ++++++++++--
 .../default/xui/es/panel_preferences_chat.xml      | 38 +++++-----
 .../default/xui/es/panel_preferences_general.xml   |  2 +-
 .../default/xui/es/panel_preferences_graphics1.xml | 36 ++++-----
 .../newview/skins/default/xui/es/panel_profile.xml | 26 +++++--
 .../default/xui/es/panel_side_tray_tab_caption.xml |  2 +
 .../skins/default/xui/es/sidepanel_inventory.xml   | 20 +++--
 .../skins/default/xui/es/sidepanel_item_info.xml   | 85 +++++++++++-----------
 indra/newview/skins/default/xui/es/strings.xml     | 36 ++++++---
 41 files changed, 408 insertions(+), 223 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/es/floater_map.xml b/indra/newview/skins/default/xui/es/floater_map.xml
index 73e947f1f7..fa01a4a635 100644
--- a/indra/newview/skins/default/xui/es/floater_map.xml
+++ b/indra/newview/skins/default/xui/es/floater_map.xml
@@ -1,28 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater name="Map" title="">
-	<floater.string name="mini_map_north">
-		N
-	</floater.string>
-	<floater.string name="mini_map_east">
-		E
-	</floater.string>
-	<floater.string name="mini_map_west">
-		O
-	</floater.string>
-	<floater.string name="mini_map_south">
-		S
-	</floater.string>
-	<floater.string name="mini_map_southeast">
-		SE
-	</floater.string>
-	<floater.string name="mini_map_northeast">
-		NE
-	</floater.string>
-	<floater.string name="mini_map_southwest">
-		SO
-	</floater.string>
-	<floater.string name="mini_map_northwest">
-		NO
+	<floater.string name="ToolTipMsg">
+		[REGIÓN](Haz doble clic para abrir el mapa y pulsa la tecla Mayús y arrastra para obtener una vista panorámica)
 	</floater.string>
 	<floater.string name="mini_map_caption">
 		MINIMAPA
diff --git a/indra/newview/skins/default/xui/es/floater_nearby_chat.xml b/indra/newview/skins/default/xui/es/floater_nearby_chat.xml
index d30a39f725..1fee9ab056 100644
--- a/indra/newview/skins/default/xui/es/floater_nearby_chat.xml
+++ b/indra/newview/skins/default/xui/es/floater_nearby_chat.xml
@@ -1,2 +1,4 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="nearby_chat" title="CHAT"/>
+<floater name="nearby_chat" title="CHAT">
+	<check_box label="Traducir chat (mediante Google)" name="translate_chat_checkbox"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_tools.xml b/indra/newview/skins/default/xui/es/floater_tools.xml
index bc99cfe215..9867f1b575 100644
--- a/indra/newview/skins/default/xui/es/floater_tools.xml
+++ b/indra/newview/skins/default/xui/es/floater_tools.xml
@@ -182,10 +182,10 @@
 			<text name="Group:">
 				Grupo:
 			</text>
-			<button label="Configurar..." label_selected="Configurar..." name="button set group" tool_tip="Elige un grupo con el que compartir los permisos de este objeto"/>
 			<name_box initial_value="Cargando..." name="Group Name Proxy"/>
-			<button label="Transferir" label_selected="Transferir" name="button deed" tool_tip="La transferencia entrega este objeto con los permisos del próximo propietario. Los objetos compartidos por el grupo pueden ser transferidos por un oficial del grupo."/>
+			<button label="Configurar..." label_selected="Configurar..." name="button set group" tool_tip="Elige un grupo con el que compartir los permisos de este objeto"/>
 			<check_box label="Compartir" name="checkbox share with group" tool_tip="Permite que todos los miembros del grupo compartan tus permisos de modificación en este objeto. Debes transferirlo para activar las restricciones según los roles."/>
+			<button label="Transferir" label_selected="Transferir" name="button deed" tool_tip="La transferencia entrega este objeto con los permisos del próximo propietario. Los objetos compartidos por el grupo pueden ser transferidos por un oficial del grupo."/>
 			<text name="label click action" width="180">
 				Al tocarlo:
 			</text>
@@ -437,7 +437,8 @@
 				<combo_box.item label="succión" name="suction"/>
 				<combo_box.item label="tejido" name="weave"/>
 			</combo_box>
-			<text name="tex scale">
+			<check_box initial_value="falso" label="Alinear caras del plano" name="checkbox planar align" tool_tip="Alinear texturas en todas las caras seleccionadas con la última cara seleccionada. Requiere la representación de texturas en el plano."/>
+			<text name="rpt">
 				Repeticiones por cara
 			</text>
 			<spinner label="Horizontal (U)" name="TexScaleU"/>
diff --git a/indra/newview/skins/default/xui/es/menu_attachment_self.xml b/indra/newview/skins/default/xui/es/menu_attachment_self.xml
index dc4efa1ce8..ab76c92d65 100644
--- a/indra/newview/skins/default/xui/es/menu_attachment_self.xml
+++ b/indra/newview/skins/default/xui/es/menu_attachment_self.xml
@@ -3,6 +3,7 @@
 	<menu_item_call label="Tocar" name="Attachment Object Touch"/>
 	<menu_item_call label="Editar" name="Edit..."/>
 	<menu_item_call label="Quitar" name="Detach"/>
+	<menu_item_call label="Sentarte" name="Sit Down Here"/>
 	<menu_item_call label="Levantarme" name="Stand Up"/>
 	<menu_item_call label="Cambiar vestuario" name="Change Outfit"/>
 	<menu_item_call label="Editar mi vestuario" name="Edit Outfit"/>
diff --git a/indra/newview/skins/default/xui/es/menu_avatar_self.xml b/indra/newview/skins/default/xui/es/menu_avatar_self.xml
index ddc0b97310..50f8384b0f 100644
--- a/indra/newview/skins/default/xui/es/menu_avatar_self.xml
+++ b/indra/newview/skins/default/xui/es/menu_avatar_self.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Self Pie">
+	<menu_item_call label="Sentarte" name="Sit Down Here"/>
 	<menu_item_call label="Levantarme" name="Stand Up"/>
 	<context_menu label="Quitarme" name="Take Off &gt;">
 		<context_menu label="Ropas" name="Clothes &gt;">
@@ -17,7 +18,7 @@
 			<menu_item_call label="Toda la ropa" name="All Clothes"/>
 		</context_menu>
 		<context_menu label="HUD" name="Object Detach HUD"/>
-		<context_menu label="Desanexar" name="Object Detach"/>
+		<context_menu label="Quitar" name="Object Detach"/>
 		<menu_item_call label="Quitarse todo" name="Detach All"/>
 	</context_menu>
 	<menu_item_call label="Cambiar vestuario" name="Chenge Outfit"/>
diff --git a/indra/newview/skins/default/xui/es/menu_inspect_object_gear.xml b/indra/newview/skins/default/xui/es/menu_inspect_object_gear.xml
index af85b833e9..bcdc25894f 100644
--- a/indra/newview/skins/default/xui/es/menu_inspect_object_gear.xml
+++ b/indra/newview/skins/default/xui/es/menu_inspect_object_gear.xml
@@ -9,6 +9,7 @@
 	<menu_item_call label="Abrir" name="open"/>
 	<menu_item_call label="Editar" name="edit"/>
 	<menu_item_call label="Ponerse" name="wear"/>
+	<menu_item_call label="Añadir" name="add"/>
 	<menu_item_call label="Denunciar" name="report"/>
 	<menu_item_call label="Ignorar" name="block"/>
 	<menu_item_call label="Acercar el zoom" name="zoom_in"/>
diff --git a/indra/newview/skins/default/xui/es/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/es/menu_inspect_self_gear.xml
index 4b56984541..c8a1e9d9da 100644
--- a/indra/newview/skins/default/xui/es/menu_inspect_self_gear.xml
+++ b/indra/newview/skins/default/xui/es/menu_inspect_self_gear.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <menu name="Gear Menu">
+	<menu_item_call label="Sentarte" name="sit_down_here"/>
 	<menu_item_call label="Levantarme" name="stand_up"/>
 	<menu_item_call label="Cambiar vestuario" name="change_outfit"/>
 	<menu_item_call label="Mi perfil" name="my_profile"/>
diff --git a/indra/newview/skins/default/xui/es/menu_mini_map.xml b/indra/newview/skins/default/xui/es/menu_mini_map.xml
index 8e464177fe..41dc817551 100644
--- a/indra/newview/skins/default/xui/es/menu_mini_map.xml
+++ b/indra/newview/skins/default/xui/es/menu_mini_map.xml
@@ -4,6 +4,7 @@
 	<menu_item_call label="Zoom medio" name="Zoom Medium"/>
 	<menu_item_call label="Zoom lejos" name="Zoom Far"/>
 	<menu_item_check label="Girar el mapa" name="Rotate Map"/>
+	<menu_item_check label="Centrar automáticamente" name="Auto Center"/>
 	<menu_item_call label="Parar la búsqueda" name="Stop Tracking"/>
 	<menu_item_call label="Mapa del mundo" name="World Map"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/es/menu_object.xml b/indra/newview/skins/default/xui/es/menu_object.xml
index fb83b51ecc..06121e0c09 100644
--- a/indra/newview/skins/default/xui/es/menu_object.xml
+++ b/indra/newview/skins/default/xui/es/menu_object.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Object Pie">
 	<menu_item_call label="Tocar" name="Object Touch">
-		<on_enable parameter="Tocar" name="EnableTouch"/>
+		<menu_item_call.on_enable name="EnableTouch" parameter="Tocar"/>
 	</menu_item_call>
 	<menu_item_call label="Editar" name="Edit..."/>
 	<menu_item_call label="Construir" name="Build"/>
@@ -12,16 +12,16 @@
 	<menu_item_call label="Acercar el zoom" name="Zoom In"/>
 	<context_menu label="Ponerme" name="Put On">
 		<menu_item_call label="Ponerme" name="Wear"/>
+		<menu_item_call label="Añadir" name="Add"/>
 		<context_menu label="Anexar" name="Object Attach"/>
-		<context_menu label="Anexar como HUD" name="Object Attach HUD"/>
+		<context_menu label="Anexar el HUD" name="Object Attach HUD"/>
 	</context_menu>
-	<context_menu label="Quitarme" name="Remove">
+	<context_menu label="Quitar" name="Remove">
 		<menu_item_call label="Denunciar una infracción" name="Report Abuse..."/>
 		<menu_item_call label="Ignorar" name="Object Mute"/>
 		<menu_item_call label="Devolver" name="Return..."/>
 		<menu_item_call label="Eliminar" name="Delete"/>
 	</context_menu>
-	<menu_item_call label="Comprar" name="Pie Object Bye"/>
 	<menu_item_call label="Tomar" name="Pie Object Take"/>
 	<menu_item_call label="Coger una copia" name="Take Copy"/>
 	<menu_item_call label="Pagar" name="Pay..."/>
diff --git a/indra/newview/skins/default/xui/es/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/es/menu_people_friends_view_sort.xml
index 0e883be00e..3899ad9e96 100644
--- a/indra/newview/skins/default/xui/es/menu_people_friends_view_sort.xml
+++ b/indra/newview/skins/default/xui/es/menu_people_friends_view_sort.xml
@@ -3,5 +3,6 @@
 	<menu_item_check label="Ordenar alfabéticamente" name="sort_name"/>
 	<menu_item_check label="Ordenar por estatus" name="sort_status"/>
 	<menu_item_check label="Ver los iconos de la gente" name="view_icons"/>
+	<menu_item_check label="Ver permisos concedidos" name="view_permissions"/>
 	<menu_item_call label="Ver la lista de Residentes y Objetos ignorados" name="show_blocked_list"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/es/menu_people_nearby_multiselect.xml b/indra/newview/skins/default/xui/es/menu_people_nearby_multiselect.xml
index 4ab6000994..227c5ebe58 100644
--- a/indra/newview/skins/default/xui/es/menu_people_nearby_multiselect.xml
+++ b/indra/newview/skins/default/xui/es/menu_people_nearby_multiselect.xml
@@ -6,4 +6,5 @@
 	<menu_item_call label="Llamar" name="Call"/>
 	<menu_item_call label="Compartir" name="Share"/>
 	<menu_item_call label="Pagar" name="Pay"/>
+	<menu_item_call label="Ofrecer teleporte" name="teleport"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_viewer.xml b/indra/newview/skins/default/xui/es/menu_viewer.xml
index 66c0bf9311..4ad631ac10 100644
--- a/indra/newview/skins/default/xui/es/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/es/menu_viewer.xml
@@ -94,7 +94,6 @@
 			<menu_item_call label="Configurar scripts como no ejecutándose" name="Set Scripts to Not Running"/>
 		</menu>
 		<menu label="Opciones" name="Options">
-			<menu_item_call label="Configurar los permisos por defecto de subida" name="perm prefs"/>
 			<menu_item_check label="Mostrar los permisos avanzados" name="DebugPermissions"/>
 			<menu_item_check label="Seleccionar sólo mis objetos" name="Select Only My Objects"/>
 			<menu_item_check label="Seleccionar sólo los objetos movibles" name="Select Only Movable Objects"/>
@@ -121,7 +120,6 @@
 		<menu_item_call label="Acerca de [APP_NAME]" name="About Second Life"/>
 	</menu>
 	<menu label="Avanzado" name="Advanced">
-		<menu_item_check label="Mostrar el menú Avanzado" name="Show Advanced Menu"/>
 		<menu_item_call label="Parar mis animaciones" name="Stop Animating My Avatar"/>
 		<menu_item_call label="Recargar las texturas" name="Rebake Texture"/>
 		<menu_item_call label="Interfaz en el tamaño predeterminado" name="Set UI Size to Default"/>
@@ -168,7 +166,6 @@
 			<menu_item_check label="Niebla" name="Fog"/>
 			<menu_item_check label="Objetos flexibles" name="Flexible Objects"/>
 		</menu>
-		<menu_item_check label="Ejecutar múltiples temas" name="Run Multiple Threads"/>
 		<menu_item_check label="Usar Plugin Read Thread" name="Use Plugin Read Thread"/>
 		<menu_item_call label="Vaciar la caché de grupo" name="ClearGroupCache"/>
 		<menu_item_check label="Vista subjetiva suavizada" name="Mouse Smoothing"/>
@@ -177,7 +174,6 @@
 			<menu_item_check label="Buscar" name="Search"/>
 			<menu_item_call label="Recuperar las teclas" name="Release Keys"/>
 			<menu_item_call label="Interfaz en el tamaño predeterminado" name="Set UI Size to Default"/>
-			<menu_item_check label="Mostrar el menú Avanzado - acceso directo antiguo" name="Show Advanced Menu - legacy shortcut"/>
 			<menu_item_check label="Correr siempre" name="Always Run"/>
 			<menu_item_check label="Volar" name="Fly"/>
 			<menu_item_call label="Cerrar la ventana" name="Close Window"/>
@@ -197,6 +193,7 @@
 			<menu_item_call label="Acercar el zoom" name="Zoom In"/>
 			<menu_item_call label="Zoom por defecto" name="Zoom Default"/>
 			<menu_item_call label="Alejar el zoom" name="Zoom Out"/>
+			<menu_item_check label="Mostrar el menú Avanzado" name="Show Advanced Menu"/>
 		</menu>
 		<menu_item_call label="Mostrar las configuraciones del depurador" name="Debug Settings"/>
 		<menu_item_check label="Mostrar el menú &apos;Develop&apos;" name="Debug Mode"/>
@@ -239,9 +236,15 @@
 		<menu label="Rendering" name="Rendering">
 			<menu_item_check label="Axes" name="Axes"/>
 			<menu_item_check label="Wireframe" name="Wireframe"/>
-			<menu_item_check label="Global Illumination" name="Global Illumination"/>
+			<menu_item_check label="Luces y sombras" name="Lighting and Shadows"/>
+			<menu_item_check label="Sombras del sol/la luna/proyectores" name="Shadows from Sun/Moon/Projectors"/>
+			<menu_item_check label="SSAO y sombras suavizadas" name="SSAO and Shadow Smoothing"/>
+			<menu_item_check label="Iluminación global (experimental)" name="Global Illumination"/>
+			<menu_item_check label="Capas alfa automáticas (deferidas)" name="Automatic Alpha Masks (deferred)"/>
+			<menu_item_check label="Capas alfa automáticas (no deferidas)" name="Automatic Alpha Masks (non-deferred)"/>
 			<menu_item_check label="Animation Textures" name="Animation Textures"/>
 			<menu_item_check label="Disable Textures" name="Disable Textures"/>
+			<menu_item_check label="Atlas de texturas (experimental)" name="Texture Atlas"/>
 			<menu_item_check label="Render Attached Lights" name="Render Attached Lights"/>
 			<menu_item_check label="Render Attached Particles" name="Render Attached Particles"/>
 			<menu_item_check label="Hover Glow Objects" name="Hover Glow Objects"/>
@@ -261,7 +264,8 @@
 			<menu_item_call label="Web Browser Test" name="Web Browser Test"/>
 			<menu_item_call label="Print Selected Object Info" name="Print Selected Object Info"/>
 			<menu_item_call label="Memory Stats" name="Memory Stats"/>
-			<menu_item_check label="Double-Click Auto-Pilot" name="Double-ClickAuto-Pilot"/>
+			<menu_item_check label="Double-Click Auto-Pilot" name="Double-Click Auto-Pilot"/>
+			<menu_item_check label="Teleportar mediante doble clic" name="DoubleClick Teleport"/>
 			<menu_item_check label="Debug Clicks" name="Debug Clicks"/>
 			<menu_item_check label="Debug Mouse Events" name="Debug Mouse Events"/>
 		</menu>
diff --git a/indra/newview/skins/default/xui/es/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/es/menu_wearable_list_item.xml
index c207a0371d..4bffa689e7 100644
--- a/indra/newview/skins/default/xui/es/menu_wearable_list_item.xml
+++ b/indra/newview/skins/default/xui/es/menu_wearable_list_item.xml
@@ -9,6 +9,6 @@
 	<context_menu label="Anexar al HUD" name="wearable_attach_to_hud"/>
 	<menu_item_call label="Quitarme" name="take_off"/>
 	<menu_item_call label="Editar" name="edit"/>
-	<menu_item_call label="Perfil del objeto" name="object_profile"/>
+	<menu_item_call label="Perfil del elemento" name="object_profile"/>
 	<menu_item_call label="Mostrar original" name="show_original"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_wearing_gear.xml b/indra/newview/skins/default/xui/es/menu_wearing_gear.xml
index 5f68e1687f..9d9ce75e53 100644
--- a/indra/newview/skins/default/xui/es/menu_wearing_gear.xml
+++ b/indra/newview/skins/default/xui/es/menu_wearing_gear.xml
@@ -1,4 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <menu name="Gear Wearing">
 	<menu_item_call label="Editar el vestuario" name="edit"/>
+	<menu_item_call label="Quitarme" name="takeoff"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/es/menu_wearing_tab.xml b/indra/newview/skins/default/xui/es/menu_wearing_tab.xml
index 56f4afda9b..64fd7ce4cf 100644
--- a/indra/newview/skins/default/xui/es/menu_wearing_tab.xml
+++ b/indra/newview/skins/default/xui/es/menu_wearing_tab.xml
@@ -1,4 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Wearing">
+	<menu_item_call label="Quitarme" name="take_off"/>
+	<menu_item_call label="Quitar" name="detach"/>
 	<menu_item_call label="Editar el vestuario" name="edit"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/es/notifications.xml b/indra/newview/skins/default/xui/es/notifications.xml
index e9eda790dd..91d47061c4 100644
--- a/indra/newview/skins/default/xui/es/notifications.xml
+++ b/indra/newview/skins/default/xui/es/notifications.xml
@@ -1822,6 +1822,10 @@ Dado que estos objetos tienen scripts, moverlos a tu inventario puede provocar u
 		¿Estás seguro de que quieres salir?
 		<usetemplate ignoretext="Confirmar antes de salir" name="okcancelignore" notext="No salir" yestext="Salir"/>
 	</notification>
+	<notification name="DeleteItems">
+		[QUESTION]
+		<usetemplate ignoretext="Confirmar antes de eliminar elementos" name="okcancelignore" notext="Cancelar" yestext="OK"/>
+	</notification>
 	<notification name="HelpReportAbuseEmailLL">
 		Usa esta herramienta para denunciar violaciones de las [http://secondlife.com/corporate/tos.php Condiciones del Servicio] o las [http://secondlife.com/corporate/cs.php Normas de la Comunidad].
 
@@ -2749,9 +2753,13 @@ Comprueba la configuración de la red y del servidor de seguridad.
 		( [EXISTENCE] segundos vivo)
 El avatar &apos;[NAME]&apos; ya estaba totalmente cargado al salir.
 	</notification>
-	<notification name="AvatarRezSelfBakeNotification">
+	<notification name="AvatarRezSelfBakedTextureUploadNotification">
+		( [EXISTENCE] segundos con vida )
+Has actualizado una textura obtenida mediante bake de [RESOLUTION] para &apos;[BODYREGION]&apos; después de [TIME] segundos.
+	</notification>
+	<notification name="AvatarRezSelfBakedTextureUpdateNotification">
 		( [EXISTENCE] segundos con vida )
-Has [ACTION] una textura obtenida mediante bake de [RESOLUTION] para &apos;[BODYREGION]&apos; después de [TIME] segundos.
+Has actualizado de manera local una textura obtenida mediante bake de [RESOLUTION] para &apos;[BODYREGION]&apos; después de [TIME] segundos.
 	</notification>
 	<notification name="ConfirmLeaveCall">
 		¿Estás seguro de que deseas salir de esta multiconferencia?
diff --git a/indra/newview/skins/default/xui/es/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/es/panel_avatar_list_item.xml
index e1ffc14823..09221c5599 100644
--- a/indra/newview/skins/default/xui/es/panel_avatar_list_item.xml
+++ b/indra/newview/skins/default/xui/es/panel_avatar_list_item.xml
@@ -22,5 +22,9 @@
 		[COUNT] año/s
 	</string>
 	<text name="avatar_name" value="Desconocido"/>
+	<icon name="permission_edit_theirs_icon" tool_tip="Puedes editar los objetos de este amigo"/>
+	<icon name="permission_edit_mine_icon" tool_tip="Este amigo puede editar, eliminar o manipular tus objetos"/>
+	<icon name="permission_map_icon" tool_tip="Este amigo puede encontrarte en el mapa"/>
+	<icon name="permission_online_icon" tool_tip="Este amigo puede ver cuándo estás conectado"/>
 	<button name="profile_btn" tool_tip="Ver el perfil"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/es/panel_bottomtray.xml b/indra/newview/skins/default/xui/es/panel_bottomtray.xml
index 5ea09ed795..2b1d017a2d 100644
--- a/indra/newview/skins/default/xui/es/panel_bottomtray.xml
+++ b/indra/newview/skins/default/xui/es/panel_bottomtray.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="bottom_tray">
+	<string name="DragIndicationImageName" value="Accordion_ArrowOpened_Off"/>
 	<string name="SpeakBtnToolTip" value="Activa/Desactiva el micrófono"/>
 	<string name="VoiceControlBtnToolTip" value="Muestra/Oculta el panel del control de voz"/>
 	<layout_stack name="toolbar_stack">
@@ -12,28 +13,25 @@
 			<gesture_combo_list label="Gestos" name="Gesture" tool_tip="Muestra/Oculta los gestos"/>
 		</layout_panel>
 		<layout_panel name="movement_panel">
-			<button label="Moverme" name="movement_btn" tool_tip="Muestra/Oculta los controles del movimiento"/>
+			<bottomtray_button label="Moverme" name="movement_btn" tool_tip="Muestra/Oculta los controles del movimiento"/>
 		</layout_panel>
 		<layout_panel name="cam_panel">
-			<button label="Visión" name="camera_btn" tool_tip="Muestra/Oculta los controles de la cámara"/>
+			<bottomtray_button label="Visión" name="camera_btn" tool_tip="Muestra/Oculta los controles de la cámara"/>
 		</layout_panel>
 		<layout_panel name="snapshot_panel">
-			<button label="" name="snapshots" tool_tip="Hacer una foto"/>
-		</layout_panel>
-		<layout_panel name="sidebar_btn_panel">
-			<button label="Barra lateral" name="sidebar_btn" tool_tip="Muestra/Oculta la barra lateral"/>
+			<bottomtray_button label="" name="snapshots" tool_tip="Hacer una foto"/>
 		</layout_panel>
 		<layout_panel name="build_btn_panel">
-			<button label="Construir" name="build_btn" tool_tip="Muestra/Oculta las herramientas de construcción"/>
+			<bottomtray_button label="Construir" name="build_btn" tool_tip="Muestra/Oculta las herramientas de construcción"/>
 		</layout_panel>
 		<layout_panel name="search_btn_panel">
-			<button label="Buscar" name="search_btn" tool_tip="Muestra/Oculta la búsqueda"/>
+			<bottomtray_button label="Buscar" name="search_btn" tool_tip="Muestra/Oculta la búsqueda"/>
 		</layout_panel>
 		<layout_panel name="world_map_btn_panel">
-			<button label="Mapa" name="world_map_btn" tool_tip="Muestra/Oculta el mapa del mundo"/>
+			<bottomtray_button label="Mapa" name="world_map_btn" tool_tip="Muestra/Oculta el mapa del mundo"/>
 		</layout_panel>
 		<layout_panel name="mini_map_btn_panel">
-			<button label="Minimapa" name="mini_map_btn" tool_tip="Muestra/Oculta el minimapa"/>
+			<bottomtray_button label="Minimapa" name="mini_map_btn" tool_tip="Muestra/Oculta el minimapa"/>
 		</layout_panel>
 		<layout_panel name="im_well_panel">
 			<chiclet_im_well name="im_well">
diff --git a/indra/newview/skins/default/xui/es/panel_classified_info.xml b/indra/newview/skins/default/xui/es/panel_classified_info.xml
index 35fe174970..3c168b9e53 100644
--- a/indra/newview/skins/default/xui/es/panel_classified_info.xml
+++ b/indra/newview/skins/default/xui/es/panel_classified_info.xml
@@ -46,8 +46,16 @@
 		</panel>
 	</scroll_container>
 	<panel name="buttons">
-		<button label="Teleportar" name="teleport_btn"/>
-		<button label="Mapa" name="show_on_map_btn"/>
-		<button label="Editar" name="edit_btn"/>
+		<layout_stack name="layout_stack1">
+			<layout_panel name="layout_panel1">
+				<button label="Teleporte" name="teleport_btn"/>
+			</layout_panel>
+			<layout_panel name="show_on_map_btn_lp">
+				<button label="Mapa" name="show_on_map_btn"/>
+			</layout_panel>
+			<layout_panel name="edit_btn_lp">
+				<button label="Editar" name="edit_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/es/panel_edit_classified.xml b/indra/newview/skins/default/xui/es/panel_edit_classified.xml
index 6d53b401c0..ffad843732 100644
--- a/indra/newview/skins/default/xui/es/panel_edit_classified.xml
+++ b/indra/newview/skins/default/xui/es/panel_edit_classified.xml
@@ -36,13 +36,19 @@
 				<icons_combo_box.item label="Contenido moderado" name="mature_ci" value="Moderado"/>
 				<icons_combo_box.item label="Contenido general" name="pg_ci" value="General"/>
 			</icons_combo_box>
+			<check_box label="Renovar automáticamente cada semana" name="auto_renew"/>
 			<text name="price_for_listing_label" value="Precio por publicarlo:"/>
 			<spinner label="L$" name="price_for_listing" tool_tip="Precio por publicarlo." value="50"/>
-			<check_box label="Renovar automáticamente cada semana" name="auto_renew"/>
 		</panel>
 	</scroll_container>
 	<panel label="bottom_panel" name="bottom_panel">
-		<button label="[LABEL]" name="save_changes_btn"/>
-		<button label="Cancelar" name="cancel_btn"/>
+		<layout_stack name="bottom_panel_ls">
+			<layout_panel name="save_changes_btn_lp">
+				<button label="[LABEL]" name="save_changes_btn"/>
+			</layout_panel>
+			<layout_panel name="show_on_map_btn_lp">
+				<button label="Cancelar" name="cancel_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/es/panel_edit_pick.xml b/indra/newview/skins/default/xui/es/panel_edit_pick.xml
index f8a03d2302..9b101ee4ba 100644
--- a/indra/newview/skins/default/xui/es/panel_edit_pick.xml
+++ b/indra/newview/skins/default/xui/es/panel_edit_pick.xml
@@ -25,7 +25,13 @@
 		</panel>
 	</scroll_container>
 	<panel label="bottom_panel" name="bottom_panel">
-		<button label="Guardar" name="save_changes_btn"/>
-		<button label="Cancelar" name="cancel_btn"/>
+		<layout_stack name="layout_stack1">
+			<layout_panel name="layout_panel1">
+				<button label="Guardar" name="save_changes_btn"/>
+			</layout_panel>
+			<layout_panel name="layout_panel1">
+				<button label="Cancelar" name="cancel_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/es/panel_edit_profile.xml b/indra/newview/skins/default/xui/es/panel_edit_profile.xml
index e7bd7aba17..8da8a9771b 100644
--- a/indra/newview/skins/default/xui/es/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/es/panel_edit_profile.xml
@@ -45,7 +45,13 @@
 		</panel>
 	</scroll_container>
 	<panel name="profile_me_buttons_panel">
-		<button label="Guardar cambios" name="save_btn"/>
-		<button label="Cancelar" name="cancel_btn"/>
+		<layout_stack name="bottom_panel_ls">
+			<layout_panel name="save_changes_btn_lp">
+				<button label="Guardar cambios" name="save_btn"/>
+			</layout_panel>
+			<layout_panel name="show_on_map_btn_lp">
+				<button label="Cancelar" name="cancel_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/es/panel_edit_wearable.xml b/indra/newview/skins/default/xui/es/panel_edit_wearable.xml
index 09321f7b91..15c683f375 100644
--- a/indra/newview/skins/default/xui/es/panel_edit_wearable.xml
+++ b/indra/newview/skins/default/xui/es/panel_edit_wearable.xml
@@ -102,7 +102,13 @@
 		<icon name="female_icon" tool_tip="Mujer"/>
 	</panel>
 	<panel name="button_panel">
-		<button label="Guardar como" name="save_as_button"/>
-		<button label="Deshacer los cambios" name="revert_button"/>
+		<layout_stack name="button_panel_ls">
+			<layout_panel name="save_as_btn_lp">
+				<button label="Guardar como" name="save_as_button"/>
+			</layout_panel>
+			<layout_panel name="revert_btn_lp">
+				<button label="Deshacer los cambios" name="revert_button"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/es/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/es/panel_group_info_sidetray.xml
index 872dfb13d7..09c4eec4d9 100644
--- a/indra/newview/skins/default/xui/es/panel_group_info_sidetray.xml
+++ b/indra/newview/skins/default/xui/es/panel_group_info_sidetray.xml
@@ -13,7 +13,7 @@
 		Gratis
 	</panel.string>
 	<panel name="group_info_top">
-		<text name="group_name" value="(Cargando...)"/>
+		<text_editor name="group_name" value="(Cargando...)"/>
 		<line_editor label="Escribe aquí el nombre de tu nuevo grupo" name="group_name_editor"/>
 	</panel>
 	<layout_stack name="layout">
@@ -25,9 +25,15 @@
 				<accordion_tab name="group_land_tab" title="Terreno/Bienes"/>
 			</accordion>
 		</layout_panel>
-		<layout_panel name="button_row">
+	</layout_stack>
+	<layout_stack name="button_row_ls">
+		<layout_panel name="btn_chat_lp">
 			<button label="Chat" name="btn_chat"/>
+		</layout_panel>
+		<layout_panel name="call_btn_lp">
 			<button label="Llamar al grupo" name="btn_call" tool_tip="Llama a este grupo"/>
+		</layout_panel>
+		<layout_panel name="btn_apply_lp">
 			<button label="Guardar" label_selected="Guardar" name="btn_apply"/>
 			<button label="Crear un grupo" name="btn_create" tool_tip="Crea un grupo nuevo"/>
 		</layout_panel>
diff --git a/indra/newview/skins/default/xui/es/panel_landmarks.xml b/indra/newview/skins/default/xui/es/panel_landmarks.xml
index 8f476403c7..b92685f0ae 100644
--- a/indra/newview/skins/default/xui/es/panel_landmarks.xml
+++ b/indra/newview/skins/default/xui/es/panel_landmarks.xml
@@ -7,8 +7,16 @@
 		<accordion_tab name="tab_library" title="Biblioteca"/>
 	</accordion>
 	<panel name="bottom_panel">
-		<button name="options_gear_btn" tool_tip="Ver más opciones"/>
-		<button name="add_btn" tool_tip="Añadir un nuevo hito"/>
-		<dnd_button name="trash_btn" tool_tip="Quitar el hito seleccionado"/>
+		<layout_stack name="bottom_panel">
+			<layout_panel name="options_gear_btn_panel">
+				<button name="options_gear_btn" tool_tip="Ver más opciones"/>
+			</layout_panel>
+			<layout_panel name="add_btn_panel">
+				<button name="add_btn" tool_tip="Añadir un nuevo hito"/>
+			</layout_panel>
+			<layout_panel name="trash_btn_panel">
+				<dnd_button name="trash_btn" tool_tip="Quitar el hito seleccionado"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/es/panel_my_profile.xml b/indra/newview/skins/default/xui/es/panel_my_profile.xml
index 5a6fd8b144..14c94acf5b 100644
--- a/indra/newview/skins/default/xui/es/panel_my_profile.xml
+++ b/indra/newview/skins/default/xui/es/panel_my_profile.xml
@@ -27,9 +27,8 @@
 				</panel>
 			</scroll_container>
 		</layout_panel>
-		<layout_panel name="profile_me_buttons_panel">
-			<button label="Editar el perfil" name="edit_profile_btn" tool_tip="Modificar tu información personal"/>
-			<button label="Modificar la apariencia" name="edit_appearance_btn" tool_tip="Crear o modificar tu apariencia: tu físico, ropas, etc."/>
-		</layout_panel>
 	</layout_stack>
+	<panel name="profile_me_buttons_panel">
+		<button label="Editar el perfil" name="edit_profile_btn" tool_tip="Modificar tu información personal"/>
+	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/es/panel_notes.xml b/indra/newview/skins/default/xui/es/panel_notes.xml
index 8de2afa767..00d4caf468 100644
--- a/indra/newview/skins/default/xui/es/panel_notes.xml
+++ b/indra/newview/skins/default/xui/es/panel_notes.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="Notas y Privacidad" name="panel_notes">
 	<layout_stack name="layout">
-		<panel name="notes_stack">
+		<layout_panel name="notes_stack">
 			<scroll_container name="profile_scroll">
 				<panel name="profile_scroll_panel">
 					<text name="status_message" value="Mis notas privadas:"/>
@@ -11,13 +11,25 @@
 					<check_box label="Edite, borre o coja mis objetos" name="objects_check"/>
 				</panel>
 			</scroll_container>
-		</panel>
-		<panel name="notes_buttons_panel">
-			<button label="Añadir como amigo" name="add_friend" tool_tip="Ofrecer amistad a este Residente"/>
-			<button label="MI" name="im" tool_tip="Abrir un mensaje instantáneo"/>
-			<button label="Llamar" name="call" tool_tip="Llamar a este Residente"/>
-			<button label="Mapa" name="show_on_map_btn" tool_tip="Mostrar al Residente en el mapa"/>
-			<button label="Teleportar" name="teleport" tool_tip="Ofrecer teleporte"/>
-		</panel>
+		</layout_panel>
+		<layout_panel name="notes_buttons_panel">
+			<layout_stack name="bottom_bar_ls">
+				<layout_panel name="add_friend_btn_lp">
+					<button label="Añadir como amigo" name="add_friend" tool_tip="Ofrecer amistad a este Residente"/>
+				</layout_panel>
+				<layout_panel name="im_btn_lp">
+					<button label="MI" name="im" tool_tip="Abrir una sesión de mensajes instantáneos"/>
+				</layout_panel>
+				<layout_panel name="call_btn_lp">
+					<button label="Llamar" name="call" tool_tip="Llamar a este Residente"/>
+				</layout_panel>
+				<layout_panel name="show_on_map_btn_lp">
+					<button label="Mapa" name="show_on_map_btn" tool_tip="Mostrar al Residente en el mapa"/>
+				</layout_panel>
+				<layout_panel name="teleport_btn_lp">
+					<button label="Teleporte" name="teleport" tool_tip="Ofrecer teleporte"/>
+				</layout_panel>
+			</layout_stack>
+		</layout_panel>
 	</layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/es/panel_outfit_edit.xml b/indra/newview/skins/default/xui/es/panel_outfit_edit.xml
index f697539502..9e669995aa 100644
--- a/indra/newview/skins/default/xui/es/panel_outfit_edit.xml
+++ b/indra/newview/skins/default/xui/es/panel_outfit_edit.xml
@@ -45,7 +45,13 @@
 		<button name="shop_btn_2" tool_tip="Visita el Mercado de SL. Asimismo, puedes seleccionar algo que lleves puesto y, a continuación, hacer clic aquí para ver más ítems relacionados"/>
 	</panel>
 	<panel name="save_revert_button_bar">
-		<button label="Guardar" name="save_btn"/>
-		<button label="Deshacer los cambios" name="revert_btn" tool_tip="Volver a la última versión guardada"/>
+		<layout_stack name="button_bar_ls">
+			<layout_panel name="save_btn_lp">
+				<button label="Guardar" name="save_btn"/>
+			</layout_panel>
+			<layout_panel name="revert_btn_lp">
+				<button label="Deshacer los cambios" name="revert_btn" tool_tip="Volver a la última versión guardada"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/es/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/es/panel_outfits_inventory.xml
index 582b0d1955..1107e72b54 100644
--- a/indra/newview/skins/default/xui/es/panel_outfits_inventory.xml
+++ b/indra/newview/skins/default/xui/es/panel_outfits_inventory.xml
@@ -11,7 +11,13 @@
 		<panel label="PUESTO" name="cof_tab"/>
 	</tab_container>
 	<panel name="bottom_panel">
-		<button label="Guardar como" name="save_btn"/>
-		<button label="Ponerme" name="wear_btn" tool_tip="Ponerme el vestuario seleccionado"/>
+		<layout_stack name="bottom_panel_ls">
+			<layout_panel name="save_btn_lp">
+				<button label="Guardar como" name="save_btn"/>
+			</layout_panel>
+			<layout_panel name="wear_btn_lp">
+				<button label="Ponerme" name="wear_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/es/panel_people.xml b/indra/newview/skins/default/xui/es/panel_people.xml
index 13f584ff28..1773735598 100644
--- a/indra/newview/skins/default/xui/es/panel_people.xml
+++ b/indra/newview/skins/default/xui/es/panel_people.xml
@@ -32,9 +32,17 @@
 				<accordion_tab name="tab_all" title="Todos"/>
 			</accordion>
 			<panel label="bottom_panel" name="bottom_panel">
-				<button name="friends_viewsort_btn" tool_tip="Opciones"/>
-				<button name="add_btn" tool_tip="Ofrecer amistad a un Residente"/>
-				<button name="del_btn" tool_tip="Quitar a la persona seleccionada de tu lista de amigos"/>
+				<layout_stack name="bottom_panel">
+					<layout_panel name="options_gear_btn_panel">
+						<button name="friends_viewsort_btn" tool_tip="Ver más opciones"/>
+					</layout_panel>
+					<layout_panel name="add_btn_panel">
+						<button name="add_btn" tool_tip="Ofrecer amistad a un Residente"/>
+					</layout_panel>
+					<layout_panel name="trash_btn_panel">
+						<dnd_button name="trash_btn" tool_tip="Quitar a la persona seleccionada de tu lista de amigos"/>
+					</layout_panel>
+				</layout_stack>
 			</panel>
 		</panel>
 		<panel label="MIS GRUPOS" name="groups_panel">
@@ -52,13 +60,33 @@
 		</panel>
 	</tab_container>
 	<panel name="button_bar">
-		<button label="Perfil" name="view_profile_btn" tool_tip="Mostrar imágenes, grupos y otra información del Residente"/>
-		<button label="MI" name="im_btn" tool_tip="Abrir un mensaje instantáneo"/>
-		<button label="Llamar" name="call_btn" tool_tip="Llamar a este Residente"/>
-		<button label="Compartir" name="share_btn" tool_tip="Compartir un objeto del inventario"/>
-		<button label="Teleportar" name="teleport_btn" tool_tip="Ofrecer teleporte"/>
-		<button label="Perfil del grupo" name="group_info_btn" tool_tip="Ver la información del grupo"/>
-		<button label="Chat de grupo" name="chat_btn" tool_tip="Abrir el chat"/>
-		<button label="Multiconferencia" name="group_call_btn" tool_tip="Llamar a este grupo"/>
+		<layout_stack name="bottom_bar_ls">
+			<layout_panel name="view_profile_btn_lp">
+				<button label="Perfil" name="view_profile_btn" tool_tip="Mostrar imágenes, grupos y otra información del Residente"/>
+			</layout_panel>
+			<layout_panel name="chat_btn_lp">
+				<button label="MI" name="im_btn" tool_tip="Abrir una sesión de mensajes instantáneos"/>
+			</layout_panel>
+			<layout_panel name="chat_btn_lp">
+				<button label="Llamar" name="call_btn" tool_tip="Llamar a este Residente"/>
+			</layout_panel>
+			<layout_panel name="chat_btn_lp">
+				<button label="Compartir" name="share_btn" tool_tip="Compartir un objeto del inventario"/>
+			</layout_panel>
+			<layout_panel name="chat_btn_lp">
+				<button label="Teleporte" name="teleport_btn" tool_tip="Ofrecer teleporte"/>
+			</layout_panel>
+		</layout_stack>
+		<layout_stack name="bottom_bar_ls1">
+			<layout_panel name="group_info_btn_lp">
+				<button label="Perfil del grupo" name="group_info_btn" tool_tip="Ver la información del grupo"/>
+			</layout_panel>
+			<layout_panel name="chat_btn_lp">
+				<button label="Chat de grupo" name="chat_btn" tool_tip="Abrir el chat"/>
+			</layout_panel>
+			<layout_panel name="group_call_btn_lp">
+				<button label="Llamar al grupo" name="group_call_btn" tool_tip="Llama a este grupo"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/es/panel_pick_info.xml b/indra/newview/skins/default/xui/es/panel_pick_info.xml
index c55addbc93..a1259cf483 100644
--- a/indra/newview/skins/default/xui/es/panel_pick_info.xml
+++ b/indra/newview/skins/default/xui/es/panel_pick_info.xml
@@ -3,14 +3,22 @@
 	<text name="title" value="Información del destacado"/>
 	<scroll_container name="profile_scroll">
 		<panel name="scroll_content_panel">
-			<text name="pick_name" value="[nombre]"/>
-			<text name="pick_location" value="[cargando...]"/>
-			<text name="pick_desc" value="[descripción]"/>
+			<text_editor name="pick_name" value="[nombre]"/>
+			<text_editor name="pick_location" value="[cargando...]"/>
+			<text_editor name="pick_desc" value="[descripción]"/>
 		</panel>
 	</scroll_container>
 	<panel name="buttons">
-		<button label="Teleporte" name="teleport_btn"/>
-		<button label="Mapa" name="show_on_map_btn"/>
-		<button label="Editar" name="edit_btn"/>
+		<layout_stack name="layout_stack1">
+			<layout_panel name="layout_panel1">
+				<button label="Teleporte" name="teleport_btn"/>
+			</layout_panel>
+			<layout_panel name="show_on_map_btn_lp">
+				<button label="Mapa" name="show_on_map_btn"/>
+			</layout_panel>
+			<layout_panel name="edit_btn_lp">
+				<button label="Editar" name="edit_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/es/panel_picks.xml b/indra/newview/skins/default/xui/es/panel_picks.xml
index abedc6c551..904cdd12f1 100644
--- a/indra/newview/skins/default/xui/es/panel_picks.xml
+++ b/indra/newview/skins/default/xui/es/panel_picks.xml
@@ -2,19 +2,28 @@
 <panel label="Destacados" name="panel_picks">
 	<string name="no_picks" value="No hay destacados"/>
 	<string name="no_classifieds" value="No hay clasificados"/>
-	<text name="empty_picks_panel_text">
-		No hay ni destacados ni clasificados
-	</text>
 	<accordion name="accordion">
 		<accordion_tab name="tab_picks" title="Destacados"/>
 		<accordion_tab name="tab_classifieds" title="Clasificados"/>
 	</accordion>
 	<panel label="bottom_panel" name="edit_panel">
-		<button name="new_btn" tool_tip="Crear un nuevo destacado o clasificado de la posición actual"/>
+		<layout_stack name="edit_panel_ls">
+			<layout_panel name="gear_menu_btn">
+				<button name="new_btn" tool_tip="Crear un nuevo destacado o clasificado de la posición actual"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 	<panel name="buttons_cucks">
-		<button label="Información" name="info_btn" tool_tip="Mostrar la información del destacado"/>
-		<button label="Teleportarse" name="teleport_btn" tool_tip="Teleportar a esta zona"/>
-		<button label="Mapa" name="show_on_map_btn" tool_tip="Mostrar esta zona en el mapa del mundo"/>
+		<layout_stack name="buttons_cucks_ls">
+			<layout_panel name="info_btn_lp">
+				<button label="Información" name="info_btn" tool_tip="Mostrar la información del destacado"/>
+			</layout_panel>
+			<layout_panel name="teleport_btn_lp">
+				<button label="Teleporte" name="teleport_btn" tool_tip="Teleportar a esta zona"/>
+			</layout_panel>
+			<layout_panel name="show_on_map_btn_lp">
+				<button label="Mapa" name="show_on_map_btn" tool_tip="Mostrar esta zona en el mapa del mundo"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/es/panel_places.xml b/indra/newview/skins/default/xui/es/panel_places.xml
index d186a04f4b..2e349c7fe2 100644
--- a/indra/newview/skins/default/xui/es/panel_places.xml
+++ b/indra/newview/skins/default/xui/es/panel_places.xml
@@ -4,13 +4,45 @@
 	<string name="teleport_history_tab_title" value="HISTORIAL DE TELEPORTES"/>
 	<filter_editor label="Filtrar mis lugares" name="Filter"/>
 	<panel name="button_panel">
-		<button label="Teleporte" name="teleport_btn" tool_tip="Teleportar a la zona elegida"/>
-		<button label="Mapa" name="map_btn" tool_tip="Mostrar esta zona en el mapa del mundo"/>
-		<button label="Editar" name="edit_btn" tool_tip="Editar la información del hito"/>
-		<button label="▼" name="overflow_btn" tool_tip="Ver más opciones"/>
-		<button label="Guardar" name="save_btn"/>
-		<button label="Cancelar" name="cancel_btn"/>
-		<button label="Cerrar" name="close_btn"/>
-		<button label="Perfil" name="profile_btn" tool_tip="Mostrar el perfil del lugar"/>
+		<layout_stack name="bottom_bar_ls0">
+			<layout_panel name="lp1">
+				<layout_stack name="bottom_bar_ls1">
+					<layout_panel name="teleport_btn_lp">
+						<button label="Teleporte" name="teleport_btn" tool_tip="Teleportar a la zona elegida"/>
+					</layout_panel>
+					<layout_panel name="chat_btn_lp">
+						<button label="Mapa" name="map_btn" tool_tip="Mostrar esta zona en el mapa del mundo"/>
+					</layout_panel>
+				</layout_stack>
+			</layout_panel>
+			<layout_panel name="lp2">
+				<layout_stack name="bottom_bar_ls3">
+					<layout_panel name="edit_btn_lp">
+						<button label="Editar" name="edit_btn" tool_tip="Editar la información del hito"/>
+					</layout_panel>
+					<layout_panel name="overflow_btn_lp">
+						<button label="▼" name="overflow_btn" tool_tip="Ver más opciones"/>
+					</layout_panel>
+				</layout_stack>
+				<layout_stack name="bottom_bar_ls3">
+					<layout_panel name="profile_btn_lp">
+						<button label="Perfil" name="profile_btn" tool_tip="Mostrar el perfil del lugar"/>
+					</layout_panel>
+				</layout_stack>
+				<layout_stack name="bottom_bar_close_ls3">
+					<layout_panel name="close_btn_lp">
+						<button label="Cerrar" name="close_btn"/>
+					</layout_panel>
+				</layout_stack>
+			</layout_panel>
+		</layout_stack>
+		<layout_stack name="bottom_bar_ls2">
+			<layout_panel name="save_btn_lp">
+				<button label="Guardar" name="save_btn"/>
+			</layout_panel>
+			<layout_panel name="cancel_btn_lp">
+				<button label="Cancelar" name="cancel_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_chat.xml b/indra/newview/skins/default/xui/es/panel_preferences_chat.xml
index 22f967afe6..a4981e1a5d 100644
--- a/indra/newview/skins/default/xui/es/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/es/panel_preferences_chat.xml
@@ -56,27 +56,27 @@
 		<radio_item label="Varias ventanas" name="radio" value="0"/>
 		<radio_item label="Pestañas" name="radio2" value="1"/>
 	</radio_group>
-	<check_box label="Traducir Chat" name="translate_chat_checkbox" />
+	<check_box label="Utiliza la herramienta de traducción automática mientras utilizas el chat (mediante Google)" name="translate_chat_checkbox"/>
 	<text name="translate_language_text">
-		Idioma de chat:
+		Traducir el chat al:
 	</text>
 	<combo_box name="translate_language_combobox">
-		<combo_box.item name="System Default Language" label="Predeterminado del sistema" />
-		<combo_box.item name="English" label="English (Inglés)" />
-		<combo_box.item name="Danish" label="Dansk (Danés)" />
-		<combo_box.item name="German" label="Deutsch (Alemán)" />
-		<combo_box.item name="Spanish" label="Español" />
-		<combo_box.item name="French" label="Français (Francés)" />
-		<combo_box.item name="Italian" label="Italiano" />
-		<combo_box.item name="Hungarian" label="Magyar (Húngaro)" />
-		<combo_box.item name="Dutch" label="Nederlands (Neerlandés)" />
-		<combo_box.item name="Polish" label="Polski (Polaco)" />
-		<combo_box.item name="Portugese" label="Português (Portugués)" />
-		<combo_box.item name="Russian" label="Русский (Ruso)" />
-		<combo_box.item name="Turkish" label="Türkçe (Turco)" />
-		<combo_box.item name="Ukrainian" label="Українська (Ucraniano)" />
-		<combo_box.item name="Chinese" label="中文 (简体) (Chino)" />
-		<combo_box.item name="Japanese" label="日本語 (Japonés)" />
-		<combo_box.item name="Korean" label="한국어 (Coreano)" />
+		<combo_box.item label="Predeterminado del sistema" name="System Default Language"/>
+		<combo_box.item label="English" name="English"/>
+		<combo_box.item label="Dansk (danés)" name="Danish"/>
+		<combo_box.item label="Deutsch (alemán)" name="German"/>
+		<combo_box.item label="Español (español)" name="Spanish"/>
+		<combo_box.item label="Français (francés)" name="French"/>
+		<combo_box.item label="Italiano (italiano)" name="Italian"/>
+		<combo_box.item label="Magyar (húngaro)" name="Hungarian"/>
+		<combo_box.item label="Nederlands (neerlandés)" name="Dutch"/>
+		<combo_box.item label="Polski (polaco)" name="Polish"/>
+		<combo_box.item label="Português (portugués)" name="Portugese"/>
+		<combo_box.item label="Русский (ruso)" name="Russian"/>
+		<combo_box.item label="Türkçe (turco)" name="Turkish"/>
+		<combo_box.item label="Українська (ucraniano)" name="Ukrainian"/>
+		<combo_box.item label="中文 (简体) (chino)" name="Chinese"/>
+		<combo_box.item label="日本語 (japonés)" name="Japanese"/>
+		<combo_box.item label="한국어 (coreano)" name="Korean"/>
 	</combo_box>
 </panel>
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_general.xml b/indra/newview/skins/default/xui/es/panel_preferences_general.xml
index 20109cf2c5..c609cb74ba 100644
--- a/indra/newview/skins/default/xui/es/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/es/panel_preferences_general.xml
@@ -13,7 +13,7 @@
 		<combo_box.item label="Italiano - Beta" name="Italian"/>
 		<combo_box.item label="Nederlands (Neerlandés) - Beta" name="Dutch"/>
 		<combo_box.item label="Polski (Polaco) - Beta" name="Polish"/>
-		<combo_box.item label="Português (Portugués) - Beta" name="Portugese"/>
+		<combo_box.item label="Português (portugués) - Beta" name="Portugese"/>
 		<combo_box.item label="日本語 (Japonés) - Beta" name="(Japanese)"/>
 	</combo_box>
 	<text name="language_textbox2">
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml
index feebf197c4..36b6493004 100644
--- a/indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml
@@ -28,22 +28,16 @@
 		<check_box initial_value="true" label="Efecto de relieve y brillo" name="BumpShiny"/>
 		<check_box initial_value="true" label="Shaders básicos" name="BasicShaders" tool_tip="Desactivando esta opción puede prevenir fallos en algunos controladores de la tarjeta gráfica."/>
 		<check_box initial_value="true" label="Shaders de la atmósfera" name="WindLightUseAtmosShaders"/>
-		<check_box initial_value="true" label="Reflejos en el agua" name="Reflections"/>
-		<text name="ReflectionDetailText">
-			Objetos reflejados:
+		<text name="reflection_label">
+			Reflejos en el agua:
 		</text>
-		<radio_group name="ReflectionDetailRadio">
-			<radio_item label="Terreno y árboles" name="0"/>
-			<radio_item label="Todos los objetos estáticos" name="1"/>
-			<radio_item label="Todos los avatares y objetos" name="2"/>
-			<radio_item label="Todo" name="3"/>
-		</radio_group>
-		<text name="AvatarRenderingText">
-			Renderización del avatar:
-		</text>
-		<check_box initial_value="true" label="Avatares simulados" name="AvatarImpostors"/>
-		<check_box initial_value="true" label="Renderizado por hardware" name="AvatarVertexProgram"/>
-		<check_box initial_value="true" label="Ropas del avatar" name="AvatarCloth"/>
+		<combo_box initial_value="true" label="Reflejos en el agua" name="Reflections">
+			<combo_box.item label="Mínimo" name="0"/>
+			<combo_box.item label="Terreno y árboles" name="1"/>
+			<combo_box.item label="Todos los objetos estáticos" name="2"/>
+			<combo_box.item label="Todos los avatares y objetos" name="3"/>
+			<combo_box.item label="Todo" name="4"/>
+		</combo_box>
 		<slider label="Distancia de dibujo:" name="DrawDistance"/>
 		<text name="DrawDistanceMeterText2">
 			m
@@ -81,13 +75,12 @@
 		<text name="SkyMeshDetailText">
 			Bajo
 		</text>
-		<text name="LightingDetailText">
-			Detalles de iluminación:
+		<text name="AvatarRenderingText">
+			Renderización del avatar:
 		</text>
-		<radio_group name="LightingDetailRadio">
-			<radio_item label="Sólo el Sol y la Luna" name="SunMoon" value="0"/>
-			<radio_item label="Puntos de luz cercanos" name="LocalLights" value="1"/>
-		</radio_group>
+		<check_box initial_value="true" label="Avatares simulados" name="AvatarImpostors"/>
+		<check_box initial_value="true" label="Renderizado por hardware" name="AvatarVertexProgram"/>
+		<check_box initial_value="true" label="Ropas del avatar" name="AvatarCloth"/>
 		<text name="TerrainDetailText">
 			Detalle del terreno:
 		</text>
@@ -95,6 +88,7 @@
 			<radio_item label="Bajo" name="0"/>
 			<radio_item label="Alto" name="2"/>
 		</radio_group>
+		--&gt;
 	</panel>
 	<button label="Aplicar" label_selected="Aplicar" name="Apply"/>
 	<button label="Por defecto" name="Defaults"/>
diff --git a/indra/newview/skins/default/xui/es/panel_profile.xml b/indra/newview/skins/default/xui/es/panel_profile.xml
index d725bfe618..5cfe83cd61 100644
--- a/indra/newview/skins/default/xui/es/panel_profile.xml
+++ b/indra/newview/skins/default/xui/es/panel_profile.xml
@@ -36,17 +36,29 @@
 				</panel>
 			</scroll_container>
 		</layout_panel>
+	</layout_stack>
+	<layout_stack name="layout_verb_buttons">
 		<layout_panel name="profile_buttons_panel">
-			<button label="Añadir como amigo" name="add_friend" tool_tip="Ofrecer amistad a este Residente"/>
-			<button label="MI" name="im" tool_tip="Abrir una sesión de mensajes instantáneos"/>
-			<button label="Llamar" name="call" tool_tip="Llamar a este Residente"/>
-			<button label="Mapa" name="show_on_map_btn" tool_tip="Mostrar al Residente en el mapa"/>
-			<button label="Teleportar" name="teleport" tool_tip="Ofrecer teleporte"/>
-			<button label="▼" name="overflow_btn" tool_tip="Pagar dinero al Residente o compartir algo del inventario con él"/>
+			<layout_stack name="bottom_bar_ls">
+				<layout_panel name="add_friend_btn_lp">
+					<button label="Añadir como amigo" name="add_friend" tool_tip="Ofrecer amistad a este Residente"/>
+				</layout_panel>
+				<layout_panel name="im_btn_lp">
+					<button label="MI" name="im" tool_tip="Abrir una sesión de mensajes instantáneos"/>
+				</layout_panel>
+				<layout_panel name="call_btn_lp">
+					<button label="Llamar" name="call" tool_tip="Llamar a este Residente"/>
+				</layout_panel>
+				<layout_panel name="chat_btn_lp">
+					<button label="Teleporte" name="teleport" tool_tip="Ofrecer teleporte"/>
+				</layout_panel>
+				<layout_panel name="overflow_btn_lp">
+					<button label="▼" name="overflow_btn" tool_tip="Pagar dinero al Residente o compartir algo del inventario con él"/>
+				</layout_panel>
+			</layout_stack>
 		</layout_panel>
 		<layout_panel name="profile_me_buttons_panel">
 			<button label="Editar el perfil" name="edit_profile_btn" tool_tip="Modificar tu información personal"/>
-			<button label="Modificar la apariencia" name="edit_appearance_btn" tool_tip="Crear o modificar tu apariencia: tu físico, ropas, etc."/>
 		</layout_panel>
 	</layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/es/panel_side_tray_tab_caption.xml b/indra/newview/skins/default/xui/es/panel_side_tray_tab_caption.xml
index 3633b0ccaa..775e343dc9 100644
--- a/indra/newview/skins/default/xui/es/panel_side_tray_tab_caption.xml
+++ b/indra/newview/skins/default/xui/es/panel_side_tray_tab_caption.xml
@@ -1,5 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="sidetray_tab_panel">
 	<text name="sidetray_tab_title" value="Panel lateral"/>
+	<button name="undock" tool_tip="Soltar"/>
+	<button name="dock" tool_tip="Fijar"/>
 	<button name="show_help" tool_tip="Ver ayuda"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/es/sidepanel_inventory.xml b/indra/newview/skins/default/xui/es/sidepanel_inventory.xml
index 2c22a7ba46..b233fdd734 100644
--- a/indra/newview/skins/default/xui/es/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/es/sidepanel_inventory.xml
@@ -2,12 +2,20 @@
 <panel label="Cosas" name="objects panel">
 	<panel label="" name="sidepanel__inventory_panel">
 		<panel name="button_panel">
-			<button label="Perfil" name="info_btn" tool_tip="Mostrar el perfil del objeto"/>
-			<button label="Compartir" name="share_btn" tool_tip="Compartir un objeto del inventario"/>
-			<button label="Comprar" name="shop_btn" tool_tip="Abrir la página web del mercado"/>
-			<button label="Ponerme" name="wear_btn" tool_tip="Ponerme el vestuario seleccionado"/>
-			<button label="Play" name="play_btn"/>
-			<button label="Teleporte" name="teleport_btn" tool_tip="Teleportar a la zona elegida"/>
+			<layout_stack name="button_panel_ls">
+				<layout_panel name="info_btn_lp">
+					<button label="Perfil" name="info_btn" tool_tip="Mostrar el perfil del objeto"/>
+				</layout_panel>
+				<layout_panel name="share_btn_lp">
+					<button label="Compartir" name="share_btn" tool_tip="Compartir un objeto del inventario"/>
+				</layout_panel>
+				<layout_panel name="shop_btn_lp">
+					<button label="Comprar" name="shop_btn" tool_tip="Abrir la página web del mercado"/>
+					<button label="Ponerme" name="wear_btn" tool_tip="Ponerme el vestuario seleccionado"/>
+					<button label="Play" name="play_btn"/>
+					<button label="Teleporte" name="teleport_btn" tool_tip="Teleportar a la zona elegida"/>
+				</layout_panel>
+			</layout_stack>
 		</panel>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/es/sidepanel_item_info.xml b/indra/newview/skins/default/xui/es/sidepanel_item_info.xml
index 0cea46afba..ef7c6781be 100644
--- a/indra/newview/skins/default/xui/es/sidepanel_item_info.xml
+++ b/indra/newview/skins/default/xui/es/sidepanel_item_info.xml
@@ -23,54 +23,53 @@
 	</panel.string>
 	<text name="title" value="Perfil del elemento"/>
 	<text name="origin" value="(Inventario)"/>
-	<panel label="" name="item_profile">
-		<text name="LabelItemNameTitle">
-			Nombre:
-		</text>
-		<text name="LabelItemDescTitle">
-			Descripción:
-		</text>
-		<text name="LabelCreatorTitle">
-			Creador:
-		</text>
-		<button label="Perfil..." name="BtnCreator"/>
-		<text name="LabelOwnerTitle">
-			Propietario:
-		</text>
-		<button label="Perfil..." name="BtnOwner"/>
-		<text name="LabelAcquiredTitle">
-			Obtenido:
-		</text>
-		<text name="LabelAcquiredDate"/>
-		<panel name="perms_inv">
-			<text name="perm_modify">
-				Tú puedes:
+	<scroll_container name="item_profile_scroll">
+		<panel label="" name="item_profile">
+			<text name="LabelItemNameTitle">
+				Nombre:
 			</text>
-			<check_box label="Modificar" name="CheckOwnerModify"/>
-			<check_box label="Copiar" name="CheckOwnerCopy"/>
-			<check_box label="Transferir" name="CheckOwnerTransfer"/>
-			<text name="AnyoneLabel">
-				Cualquiera:
+			<text name="LabelItemDescTitle">
+				Descripción:
 			</text>
-			<check_box label="Copiar" name="CheckEveryoneCopy"/>
-			<text name="GroupLabel">
-				Grupo:
+			<text name="LabelCreatorTitle">
+				Creador:
 			</text>
-			<check_box label="Compartir" name="CheckShareWithGroup" tool_tip="Permite que todos los miembros del grupo compartan tus permisos de modificación de este objeto. Debes transferirlo para activar las restricciones según los roles."/>
-			<text name="NextOwnerLabel">
-				Próximo propietario:
+			<text name="LabelOwnerTitle">
+				Propietario:
 			</text>
-			<check_box label="Modificar" name="CheckNextOwnerModify"/>
-			<check_box label="Copiar" name="CheckNextOwnerCopy"/>
-			<check_box label="Transferir" name="CheckNextOwnerTransfer" tool_tip="El próximo propietario puede dar o revender este objeto"/>
+			<text name="LabelAcquiredTitle">
+				Obtenido:
+			</text>
+			<panel name="perms_inv">
+				<text name="perm_modify">
+					Tú puedes:
+				</text>
+				<check_box label="Modificar" name="CheckOwnerModify"/>
+				<check_box label="Copiar" name="CheckOwnerCopy"/>
+				<check_box label="Transferir" name="CheckOwnerTransfer"/>
+				<text name="AnyoneLabel">
+					Cualquiera:
+				</text>
+				<check_box label="Copiar" name="CheckEveryoneCopy"/>
+				<text name="GroupLabel">
+					Grupo:
+				</text>
+				<check_box label="Compartir" name="CheckShareWithGroup" tool_tip="Permite que todos los miembros del grupo compartan tus permisos de modificación de este objeto. Debes transferirlo para activar las restricciones según los roles."/>
+				<text name="NextOwnerLabel">
+					Próximo propietario:
+				</text>
+				<check_box label="Modificar" name="CheckNextOwnerModify"/>
+				<check_box label="Copiar" name="CheckNextOwnerCopy"/>
+				<check_box label="Transferir" name="CheckNextOwnerTransfer" tool_tip="El próximo propietario puede dar o revender este objeto"/>
+			</panel>
+			<check_box label="En venta" name="CheckPurchase"/>
+			<combo_box name="combobox sale copy">
+				<combo_box.item label="Copiar" name="Copy"/>
+				<combo_box.item label="Original" name="Original"/>
+			</combo_box>
+			<spinner label="Precio: L$" name="Edit Cost"/>
 		</panel>
-		<check_box label="En venta" name="CheckPurchase"/>
-		<combo_box name="combobox sale copy">
-			<combo_box.item label="Copiar" name="Copy"/>
-			<combo_box.item label="Original" name="Original"/>
-		</combo_box>
-		<spinner label="Precio: L$" name="Edit Cost"/>
-	</panel>
+	</scroll_container>
 	<panel name="button_panel">
 		<button label="Cancelar" name="cancel_btn"/>
 	</panel>
diff --git a/indra/newview/skins/default/xui/es/strings.xml b/indra/newview/skins/default/xui/es/strings.xml
index a6404bf14c..ac12b700ee 100644
--- a/indra/newview/skins/default/xui/es/strings.xml
+++ b/indra/newview/skins/default/xui/es/strings.xml
@@ -1267,6 +1267,9 @@
 	<string name="Right Pec">
 		Pecho derecho
 	</string>
+	<string name="Invalid Attachment">
+		Punto de colocación no válido
+	</string>
 	<string name="YearsMonthsOld">
 		[AGEYEARS] [AGEMONTHS] de edad
 	</string>
@@ -1644,9 +1647,6 @@
 	<string name="ATTACH_HUD_BOTTOM_RIGHT">
 		HUD: abajo der.
 	</string>
-	<string name="Bad attachment point">
-		Punto de colocación no válido
-	</string>
 	<string name="CursorPos">
 		Línea [LINE], Columna [COLUMN]
 	</string>
@@ -1662,12 +1662,6 @@
 	<string name="BusyModeResponseDefault">
 		El Residente al que has enviado un mensaje ha solicitado que no se le moleste porque está en modo ocupado. Podrá ver tu mensaje más adelante, ya que éste aparecerá en su panel de MI.
 	</string>
-	<string name="NoOutfits">
-		Todavía no tienes vestuario. Intenta con [secondlife:///app/search/all/ Buscar]
-	</string>
-	<string name="NoOutfitsTabsMatched">
-		¿No encuentras lo que buscas? Intenta con [secondlife:///app/search/all/[SEARCH_TERM] Buscar].
-	</string>
 	<string name="MuteByName">
 		(Por el nombre)
 	</string>
@@ -1822,6 +1816,12 @@ Se esperaba .wav, .tga, .bmp, .jpg, .jpeg, o .bvh
 	<string name="accel-win-shift">
 		Mayús+
 	</string>
+	<string name="Esc">
+		Esc
+	</string>
+	<string name="Home">
+		Base
+	</string>
 	<string name="FileSaved">
 		Archivo guardado
 	</string>
@@ -3438,6 +3438,9 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE].
 	<string name="IM_moderator_label">
 		(Moderador)
 	</string>
+	<string name="Saved_message">
+		(Guardado [LONG_TIMESTAMP])
+	</string>
 	<string name="answered_call">
 		Han respondido a tu llamada
 	</string>
@@ -3459,6 +3462,12 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE].
 	<string name="hang_up-im">
 		Se colgó la llamada de voz
 	</string>
+	<string name="conference-title-incoming">
+		Conferencia con [AGENT_NAME]
+	</string>
+	<string name="no_session_message">
+		(La sesión de MI no existe)
+	</string>
 	<string name="only_user_message">
 		Usted es el único usuario en esta sesión.
 	</string>
@@ -3843,4 +3852,13 @@ Denuncia de infracción
 	<string name="Chat">
 		Chat
 	</string>
+	<string name="DeleteItems">
+		¿Deseas eliminar los elementos seleccionados?
+	</string>
+	<string name="DeleteItem">
+		¿Deseas eliminar el elemento seleccionado?
+	</string>
+	<string name="EmptyOutfitText">
+		No hay elementos en este vestuario
+	</string>
 </strings>
-- 
cgit v1.2.3


From ae0930751b991737e3fda2b3774411ea71160dca Mon Sep 17 00:00:00 2001
From: Eli Linden <eli@lindenlab.com>
Date: Thu, 7 Oct 2010 16:37:23 -0700
Subject: CT-575 WIP ES translation for Set18, new file

---
 indra/newview/skins/default/xui/es/menu_add_wearable_gear.xml | 6 ++++++
 1 file changed, 6 insertions(+)
 create mode 100644 indra/newview/skins/default/xui/es/menu_add_wearable_gear.xml

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/es/menu_add_wearable_gear.xml b/indra/newview/skins/default/xui/es/menu_add_wearable_gear.xml
new file mode 100644
index 0000000000..f2367c72a3
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/menu_add_wearable_gear.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Add Wearable Gear Menu">
+	<menu_item_check label="Ordenar por los más recientes" name="sort_by_most_recent"/>
+	<menu_item_check label="Ordenar alfabéticamente" name="sort_by_name"/>
+	<menu_item_check label="Ordenar por tipo" name="sort_by_type"/>
+</menu>
-- 
cgit v1.2.3


From e52f276121e640eef991cfbfd0846a97280592c9 Mon Sep 17 00:00:00 2001
From: Eli Linden <eli@lindenlab.com>
Date: Thu, 7 Oct 2010 16:57:10 -0700
Subject: CT-575 WIP Add list of 11 Spanish Residents who volunteer translation
 of Viewer

---
 indra/newview/skins/default/xui/da/floater_about.xml | 2 +-
 indra/newview/skins/default/xui/de/floater_about.xml | 2 +-
 indra/newview/skins/default/xui/en/floater_about.xml | 2 +-
 indra/newview/skins/default/xui/es/floater_about.xml | 2 +-
 indra/newview/skins/default/xui/fr/floater_about.xml | 2 +-
 indra/newview/skins/default/xui/it/floater_about.xml | 2 +-
 indra/newview/skins/default/xui/ja/floater_about.xml | 2 +-
 indra/newview/skins/default/xui/nl/floater_about.xml | 2 +-
 indra/newview/skins/default/xui/pl/floater_about.xml | 2 +-
 indra/newview/skins/default/xui/pt/floater_about.xml | 2 +-
 10 files changed, 10 insertions(+), 10 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/da/floater_about.xml b/indra/newview/skins/default/xui/da/floater_about.xml
index 2e9d003848..9b1df65d1b 100644
--- a/indra/newview/skins/default/xui/da/floater_about.xml
+++ b/indra/newview/skins/default/xui/da/floater_about.xml
@@ -45,7 +45,7 @@ Voice Server Version: [VOICE_VERSION]
 			<text_editor name="credits_editor">
 				Second Life er lavet til dig af Philip, Tessa, Andrew, Cory, Ian, James, Phoenix, Ryan, Haney, Dan, Char, Ben, John, Tanya, Eddie, Richard, Mitch, Doug, Eric, Frank, Bruce, Aaron, Peter, Alice, Charlie, Debra, Eileen, Helen, Janet, Steffan, Steve, Tom, Mark, Hunter, Xenon, Burgess, Bill, Jim, Lee, Hamlet, Daniel, Jeff, Todd, Sarah, Tim, Stephanie, Colin, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Jack, Vektor, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Jesse, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Yuko, Makiko, Thomas, Harry, Seth, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Brad, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, Beez, Milo, Hermia, Red, Thrax, Gulliver, Joe, Sally, Paul, Jose, Rejean, Dore, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, Dustin, George, Del, Matthew, Cat, Jacqui, Adrian, Viola, Alfred, Noel, Irfan, Yool, Rika, Jane, Frontier, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Jeremy, JP, Jake, Anthony, Maurice, Madhavi, Leopard, Kyle, Joon, Bert, Belinda, Jon, Kristi, Bridie, Pramod, Socrates, Maria, Aric, Adreanne, Jay, Kari, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Colossus, Zen, BigPapi, Pastrami, Kurz, Mani, Neuro, Mel, Sardonyx, MJ, Rowan, Sgt, Elvis, Samuel, Leo, Bryan, Niko, Austin, Soft, Poppy, Rachel, Aki, Banzai, Alexa, Sue, Bender, CG, Angelo, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Rothman, Niall, Marin, Allison, Katie, Dawn, Dusty, Katt, Judy, Andrea, Ambroff, Infinity, Rico, Gail, Kalpana, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Maestro, Simone, Yang, T, Shannon, Nelson, Khanh, Scott, Courtney, Charlene, Quixote, Susan, Zed, Amanda, Katelin, Enkidu, Roxie, Esbee, JoRoan, Scarlet, Tay, Kevin, Wolfgang, Johnny, Ray, Andren, Merov, Bob, Rand, Howard, Callen, Heff, Galen, Newell, Dessie, Les, Michon, Jenelle, Geo, Siz, Shapiro, Pete, Calyle, Selene, Allen, Phoebe, Goldin, Kimmora, Dakota, Slaton, Lindquist, Zoey, Hari, Othello, Rohit, Sheldon, Petra, Viale, Gordon, Kaye, Pink, Ferny, Emerson, Davy, Bri, Chan, Juan, Robert, Terrence, Nathan, Carl, Ashley, JessieAnn, Huseby, Karina, Paris, Kurt, Rick, Lis, Kotler, Theeba, Lynx, Murphy, Doten, Taka, Norm, Jillian, Marcus, Mae, Novack, Esther, Perry, Dana, Ducot, Javier, Porter, Madison, Gecko, Dough, JR, Gisele, Crimp, Norie, Arch, Kimi, Fisher, Barbara, Jason, Peggy, Bernard, Jules, Leroy, Eva, Khederian, Campbell, Vogt, Masido, Karel, Torres, Lo, Breezer, Delby, Rountree, Anna, Servus, Rue, Itiaes, Chuck, Luna, Novella, Zaza, Wen, Gino, Lex, Cassandra, Limey, Nancy, Anukul, Silver, Brodesky, Jinsai, Squid, Gez, Rakesh, Ladan, Edelman, Marcet, Squire, Tatem, Tony, Jerm, Tia, Falcon, BK, Tiggs, Driscoll, Bacon, Timothee, Cru, Carmilla, Coyot, Webb, Kazu, Rudas, LJ, Sea, Ali Wallace, Bewest, Pup, Drub, Dragon, Inoshiro, Byron, Rhett, Xandix, Aimee, Fredrik, Thor, Teddy, Baron, Nelly, Ghengis, Epic, Eli, Stone, Grapes, Irie, Prep, Scobu, Valerie, Alain, and many others.
 
-Tak til følgende beboere: Drew Dwi, Zai Lynch, Latif Khalifa, Ellla McMahon, Harleen Gretzky, Squirrel Wood, Malarthi Behemoth, Dante Tucker, Buckaroo Mu, Eddi Decosta, Dirk, Talamasca, Torben Trautman, Irene Muni, Lilly Zenovka, Vick Forcella, Sasy Scarborough, Gentle Welinder, Elric Anatine, Techwolf Lupindo, Dusan Writer, WolfPup Lowenhar, Marianne McCann, Fiachra Lach, Sitearm Madonna, Sudane Erato, Sahkolihaa Contepomi, Sachi Vixen, Questar Utu, Dimitrio Lewis, Matto Destiny, Scrim Pinion, Radio Signals, Psi Merlin, Pixel Gausman, Mel Vanbeeck, Laurent Bechir, Lamorna Proctor, Lares Carter, Gwyneth Llewelyn, Hydra Shaftoe, Holger Gilruth, Gentle Heron, Carla Broek, Boroondas Gupte, Fury Rosewood, Flower Ducatillon, Colpo Wexler, gwampa Lomu, Borg Capalini, Beansy Twine, Ardy Lay, , 45ms Zhong, Adeon Writer, Aeonix Aeon, Ai Austin, Aiko Ying, Alexandrea Fride, Alliez Mysterio, Annie Milestone, Annika Genezzia, Ansariel Hiller, ArminasX Saiman, Arya Braveheart, Asaeda Meltingdots, Asturkon Jua, Avallyn Oakleaf, Avatar Quinzet, BabyA Littlething, Bacchus Ireto, Bazaar, Riva, Benjamin Bigdipper, Beth Walcher, Bezilon Kasei, Biancaluce Robbiani, Bill Walach, blakopal Galicia, Blitzckreed Levenque, Bryn Oh, Callipygian Christensen, Cap Carver, Carr Arbenlow, Chantal Harvey, Charles Courtois, Charlie Sazaland, Cherry Cheevers, ChickyBabes Zuzu, Christopher  Organiser, Ciaran Laval, Clara Young, Celierra Darling, Corinne Helendale, Corro Moseley, Coughdrop Littlething, Darien Caldwell, Dartagan Shepherd, Debs Regent, Decro Schmooz, Denim Kamachi, DiJodi Dubratt, Dil Spitz, Edgware Marker, Egehan Dryke, Emma Portilo, Emmie Fairymeadow, Evangelista Emerald, Faelon Swordthain, Frenchimmo Sabra, Gaberoonie Zanzibar, Ganymedes Costagravas, Gene Frostbite, GeneJ Composer, Giggles Littlebird, Grady Echegaray, Guni Greenstein, Gypsy Tripsa, Hackshaven Harford, Ham Rambler, Han Shuffle, Hanglow Short, Hatzfeld Runo, herina Bode, Horatio Freund, Hypatia Callisto, Hypatia Pickens, Identity Euler, Imnotgoing Sideways, Innula Zenovka, Iyoba Tarantal, Jack Abraham, Jagga Meredith, Jennifer Boyle, Jeremy Marquez, Jessica Qin, Jinx Nordberg, Jo Bernandes, Jocial Sonnenkern, Joel Savard, Jondan Lundquist, Josef Munster, Josette Windlow, Juilan Tripsa, Juro Kothari, Justin RiversRunRed, Kagehi Kohn, Kaimen Takahe, Keklily Longfall, Ken Lavender, Kestral Karas, Khisme Nitely, Kimar Coba, Kithrak Kirkorian, Kitty Barnett, Kolor Fall, Komiko Okamoto, Korvel Noh, Larry Pixel, Leal Choche, len Starship, Lenae Munz, Lexi Frua, Lillie Cordeaux, Lizzy Macarthur, LSL Scientist, Luban Yiyuan, Luc Starsider, Maccus McCullough, Madison Blanc, Maggie Darwin, Mallory Destiny, Manx Wharton, Marc Claridge, Marc2 Sands, Matthew Anthony, Maxim RiversRunRed, Medhue Simoni, Melinda Latynina, Mencius Watts, Michi Lumin, Midian Farspire, Miles Glaz, Mindy Mathy, Mitch Wagner, Mo Hax, Mourna Biziou, Nao Noe, naofan Teardrop, Naomah Beaumont, Nathiel Siamendes, Nber Medici, Neko Link, Netpat Igaly, Neutron Chesnokov, Newfie Pendragon, Nicholai Laviscu, Nick Rhodes, Nicoladie Gymnast, Ollie Kubrick, Orenj Marat, Orion Delphis, Oryx Tempel, Parvati Silverweb, PeterPunk Mooney, Pixel Scientist, Pounce Teazle, Professor Noarlunga, Quantum Destiny, Quicksilver Hermes, Ralf Setsuko, RAT Quan, RedMokum Bravin, Revolution Perenti, Rezit Sideways, Rich Grainger, Rosco Teardrop, Rose Evans, Rudee Voom, RufusTT Horsefly, Saii Hallard, SaintLEOlions Zimer, Samm Larkham, Satanello Miami, SexySteven Morrisey, Sheet Spotter, Shnurui Troughton, sicarius Thorne, Sicarius Toxx, Sini Nubalo, SLB Wirefly, snowy Sidran, Soupa Segura, ST Mensing, Starshine Halasy, Stickman Ingmann, Synystyr Texan, Takeda Terrawyng, Tali Rosca, Templar Merlin, Tezcatlipoca Bisiani, Tiel Stonecutter, Tony Kembia, TouchaHoney Perhaps, Trey Reanimator, TriloByte Zanzibar, Trinity Dechou, Trinity Dejavu, Unlikely Quintessa, UsikuFarasi Kanarik, Veritas Raymaker, Vex Streeter, Viaticus Speculaas, Villain Baroque, Vixie Durant, Void Singer, Watty Berkson, Westley Schridde, Westley Streeter, Whimsy Winx, Winter Ventura, Wundur Primbee, xstorm Radek, YongYong Francois, Zak Westminster, Zana Kohime, Zaren Alexander, Zeja Pyle, ZenMondo Wormser, Zoex Flanagan, and many others.
+Tak til følgende beboere: Drew Dwi, Zai Lynch, Latif Khalifa, Ellla McMahon, Harleen Gretzky, Squirrel Wood, Malarthi Behemoth, Dante Tucker, Buckaroo Mu, Eddi Decosta, Dirk, Talamasca, Torben Trautman, Irene Muni, Aralara Rajal, Aura Dirval, Cayu Cluny, Eva Rau, FreeSL Aeon, Frontera Thor, Inma Rau, Lunita Savira, Minerva Memel, Polo Gufler, Xiki Luik, Lilly Zenovka, Vick Forcella, Sasy Scarborough, Gentle Welinder, Elric Anatine, Techwolf Lupindo, Dusan Writer, WolfPup Lowenhar, Marianne McCann, Fiachra Lach, Sitearm Madonna, Sudane Erato, Sahkolihaa Contepomi, Sachi Vixen, Questar Utu, Dimitrio Lewis, Matto Destiny, Scrim Pinion, Radio Signals, Psi Merlin, Pixel Gausman, Mel Vanbeeck, Laurent Bechir, Lamorna Proctor, Lares Carter, Gwyneth Llewelyn, Hydra Shaftoe, Holger Gilruth, Gentle Heron, Carla Broek, Boroondas Gupte, Fury Rosewood, Flower Ducatillon, Colpo Wexler, gwampa Lomu, Borg Capalini, Beansy Twine, Ardy Lay, , 45ms Zhong, Adeon Writer, Aeonix Aeon, Ai Austin, Aiko Ying, Alexandrea Fride, Alliez Mysterio, Annie Milestone, Annika Genezzia, Ansariel Hiller, ArminasX Saiman, Arya Braveheart, Asaeda Meltingdots, Asturkon Jua, Avallyn Oakleaf, Avatar Quinzet, BabyA Littlething, Bacchus Ireto, Bazaar, Riva, Benjamin Bigdipper, Beth Walcher, Bezilon Kasei, Biancaluce Robbiani, Bill Walach, blakopal Galicia, Blitzckreed Levenque, Bryn Oh, Callipygian Christensen, Cap Carver, Carr Arbenlow, Chantal Harvey, Charles Courtois, Charlie Sazaland, Cherry Cheevers, ChickyBabes Zuzu, Christopher  Organiser, Ciaran Laval, Clara Young, Celierra Darling, Corinne Helendale, Corro Moseley, Coughdrop Littlething, Darien Caldwell, Dartagan Shepherd, Debs Regent, Decro Schmooz, Denim Kamachi, DiJodi Dubratt, Dil Spitz, Edgware Marker, Egehan Dryke, Emma Portilo, Emmie Fairymeadow, Evangelista Emerald, Faelon Swordthain, Frenchimmo Sabra, Gaberoonie Zanzibar, Ganymedes Costagravas, Gene Frostbite, GeneJ Composer, Giggles Littlebird, Grady Echegaray, Guni Greenstein, Gypsy Tripsa, Hackshaven Harford, Ham Rambler, Han Shuffle, Hanglow Short, Hatzfeld Runo, herina Bode, Horatio Freund, Hypatia Callisto, Hypatia Pickens, Identity Euler, Imnotgoing Sideways, Innula Zenovka, Iyoba Tarantal, Jack Abraham, Jagga Meredith, Jennifer Boyle, Jeremy Marquez, Jessica Qin, Jinx Nordberg, Jo Bernandes, Jocial Sonnenkern, Joel Savard, Jondan Lundquist, Josef Munster, Josette Windlow, Juilan Tripsa, Juro Kothari, Justin RiversRunRed, Kagehi Kohn, Kaimen Takahe, Keklily Longfall, Ken Lavender, Kestral Karas, Khisme Nitely, Kimar Coba, Kithrak Kirkorian, Kitty Barnett, Kolor Fall, Komiko Okamoto, Korvel Noh, Larry Pixel, Leal Choche, len Starship, Lenae Munz, Lexi Frua, Lillie Cordeaux, Lizzy Macarthur, LSL Scientist, Luban Yiyuan, Luc Starsider, Maccus McCullough, Madison Blanc, Maggie Darwin, Mallory Destiny, Manx Wharton, Marc Claridge, Marc2 Sands, Matthew Anthony, Maxim RiversRunRed, Medhue Simoni, Melinda Latynina, Mencius Watts, Michi Lumin, Midian Farspire, Miles Glaz, Mindy Mathy, Mitch Wagner, Mo Hax, Mourna Biziou, Nao Noe, naofan Teardrop, Naomah Beaumont, Nathiel Siamendes, Nber Medici, Neko Link, Netpat Igaly, Neutron Chesnokov, Newfie Pendragon, Nicholai Laviscu, Nick Rhodes, Nicoladie Gymnast, Ollie Kubrick, Orenj Marat, Orion Delphis, Oryx Tempel, Parvati Silverweb, PeterPunk Mooney, Pixel Scientist, Pounce Teazle, Professor Noarlunga, Quantum Destiny, Quicksilver Hermes, Ralf Setsuko, RAT Quan, RedMokum Bravin, Revolution Perenti, Rezit Sideways, Rich Grainger, Rosco Teardrop, Rose Evans, Rudee Voom, RufusTT Horsefly, Saii Hallard, SaintLEOlions Zimer, Samm Larkham, Satanello Miami, SexySteven Morrisey, Sheet Spotter, Shnurui Troughton, sicarius Thorne, Sicarius Toxx, Sini Nubalo, SLB Wirefly, snowy Sidran, Soupa Segura, ST Mensing, Starshine Halasy, Stickman Ingmann, Synystyr Texan, Takeda Terrawyng, Tali Rosca, Templar Merlin, Tezcatlipoca Bisiani, Tiel Stonecutter, Tony Kembia, TouchaHoney Perhaps, Trey Reanimator, TriloByte Zanzibar, Trinity Dechou, Trinity Dejavu, Unlikely Quintessa, UsikuFarasi Kanarik, Veritas Raymaker, Vex Streeter, Viaticus Speculaas, Villain Baroque, Vixie Durant, Void Singer, Watty Berkson, Westley Schridde, Westley Streeter, Whimsy Winx, Winter Ventura, Wundur Primbee, xstorm Radek, YongYong Francois, Zak Westminster, Zana Kohime, Zaren Alexander, Zeja Pyle, ZenMondo Wormser, Zoex Flanagan, and many others.
 
 
 
diff --git a/indra/newview/skins/default/xui/de/floater_about.xml b/indra/newview/skins/default/xui/de/floater_about.xml
index b18894d478..d15ab105c2 100644
--- a/indra/newview/skins/default/xui/de/floater_about.xml
+++ b/indra/newview/skins/default/xui/de/floater_about.xml
@@ -45,7 +45,7 @@ Voice-Serverversion: [VOICE_VERSION]
 			<text_editor name="credits_editor">
 				Second Life wird Ihnen präsentiert von Philip, Tessa, Andrew, Cory, Ian, James, Phoenix, Ryan, Haney, Dan, Char, Ben, John, Tanya, Eddie, Richard, Mitch, Doug, Eric, Frank, Bruce, Aaron, Peter, Alice, Charlie, Debra, Eileen, Helen, Janet, Steffan, Steve, Tom, Mark, Hunter, Xenon, Burgess, Bill, Jim, Lee, Hamlet, Daniel, Jeff, Todd, Sarah, Tim, Stephanie, Colin, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Jack, Vektor, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Jesse, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Yuko, Makiko, Thomas, Harry, Seth, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Brad, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, Beez, Milo, Hermia, Red, Thrax, Gulliver, Joe, Sally, Paul, Jose, Rejean, Dore, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, Dustin, George, Del, Matthew, Cat, Jacqui, Adrian, Viola, Alfred, Noel, Irfan, Yool, Rika, Jane, Frontier, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Jeremy, JP, Jake, Anthony, Maurice, Madhavi, Leopard, Kyle, Joon, Bert, Belinda, Jon, Kristi, Bridie, Pramod, Socrates, Maria, Aric, Adreanne, Jay, Kari, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Colossus, Zen, BigPapi, Pastrami, Kurz, Mani, Neuro, Mel, Sardonyx, MJ, Rowan, Sgt, Elvis, Samuel, Leo, Bryan, Niko, Austin, Soft, Poppy, Rachel, Aki, Banzai, Alexa, Sue, Bender, CG, Angelo, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Rothman, Niall, Marin, Allison, Katie, Dawn, Dusty, Katt, Judy, Andrea, Ambroff, Infinity, Rico, Gail, Kalpana, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Maestro, Simone, Yang, T, Shannon, Nelson, Khanh, Scott, Courtney, Charlene, Quixote, Susan, Zed, Amanda, Katelin, Enkidu, Roxie, Esbee, JoRoan, Scarlet, Tay, Kevin, Wolfgang, Johnny, Ray, Andren, Merov, Bob, Rand, Howard, Callen, Heff, Galen, Newell, Dessie, Les, Michon, Jenelle, Geo, Siz, Shapiro, Pete, Calyle, Selene, Allen, Phoebe, Goldin, Kimmora, Dakota, Slaton, Lindquist, Zoey, Hari, Othello, Rohit, Sheldon, Petra, Viale, Gordon, Kaye, Pink, Ferny, Emerson, Davy, Bri, Chan, Juan, Robert, Terrence, Nathan, Carl, Ashley, JessieAnn, Huseby, Karina, Paris, Kurt, Rick, Lis, Kotler, Theeba, Lynx, Murphy, Doten, Taka, Norm, Jillian, Marcus, Mae, Novack, Esther, Perry, Dana, Ducot, Javier, Porter, Madison, Gecko, Dough, JR, Gisele, Crimp, Norie, Arch, Kimi, Fisher, Barbara, Jason, Peggy, Bernard, Jules, Leroy, Eva, Khederian, Campbell, Vogt, Masido, Karel, Torres, Lo, Breezer, Delby, Rountree, Anna, Servus, Rue, Itiaes, Chuck, Luna, Novella, Zaza, Wen, Gino, Lex, Cassandra, Limey, Nancy, Anukul, Silver, Brodesky, Jinsai, Squid, Gez, Rakesh, Ladan, Edelman, Marcet, Squire, Tatem, Tony, Jerm, Tia, Falcon, BK, Tiggs, Driscoll, Bacon, Timothee, Cru, Carmilla, Coyot, Webb, Kazu, Rudas, LJ, Sea, Ali Wallace, Bewest, Pup, Drub, Dragon, Inoshiro, Byron, Rhett, Xandix, Aimee, Fredrik, Thor, Teddy, Baron, Nelly, Ghengis, Epic, Eli, Stone, Grapes, Irie, Prep, Scobu, Valerie, Alain und vielen anderen.
 
-Wir bedanken uns bei folgenden Einwohnern, die uns geholfen haben, dies zur bisher besten Version zu machen: Drew Dwi, Zai Lynch, Latif Khalifa, Ellla McMahon, Harleen Gretzky, Squirrel Wood, Malarthi Behemoth, Dante Tucker, Buckaroo Mu, Eddi Decosta, Dirk, Talamasca, Torben Trautman, Irene Muni, Lilly Zenovka, Vick Forcella, Sasy Scarborough, Gentle Welinder, Elric Anatine, Techwolf Lupindo, Dusan Writer, WolfPup Lowenhar, Marianne McCann, Fiachra Lach, Sitearm Madonna, Sudane Erato, Sahkolihaa Contepomi, Sachi Vixen, Questar Utu, Dimitrio Lewis, Matto Destiny, Scrim Pinion, Radio Signals, Psi Merlin, Pixel Gausman, Mel Vanbeeck, Laurent Bechir, Lamorna Proctor, Lares Carter, Gwyneth Llewelyn, Hydra Shaftoe, Holger Gilruth, Gentle Heron, Carla Broek, Boroondas Gupte, Fury Rosewood, Flower Ducatillon, Colpo Wexler, gwampa Lomu, Borg Capalini, Beansy Twine, Ardy Lay, , 45ms Zhong, Adeon Writer, Aeonix Aeon, Ai Austin, Aiko Ying, Alexandrea Fride, Alliez Mysterio, Annie Milestone, Annika Genezzia, Ansariel Hiller, ArminasX Saiman, Arya Braveheart, Asaeda Meltingdots, Asturkon Jua, Avallyn Oakleaf, Avatar Quinzet, BabyA Littlething, Bacchus Ireto, Bazaar, Riva, Benjamin Bigdipper, Beth Walcher, Bezilon Kasei, Biancaluce Robbiani, Bill Walach, blakopal Galicia, Blitzckreed Levenque, Bryn Oh, Callipygian Christensen, Cap Carver, Carr Arbenlow, Chantal Harvey, Charles Courtois, Charlie Sazaland, Cherry Cheevers, ChickyBabes Zuzu, Christopher  Organiser, Ciaran Laval, Clara Young, Celierra Darling, Corinne Helendale, Corro Moseley, Coughdrop Littlething, Darien Caldwell, Dartagan Shepherd, Debs Regent, Decro Schmooz, Denim Kamachi, DiJodi Dubratt, Dil Spitz, Edgware Marker, Egehan Dryke, Emma Portilo, Emmie Fairymeadow, Evangelista Emerald, Faelon Swordthain, Frenchimmo Sabra, Gaberoonie Zanzibar, Ganymedes Costagravas, Gene Frostbite, GeneJ Composer, Giggles Littlebird, Grady Echegaray, Guni Greenstein, Gypsy Tripsa, Hackshaven Harford, Ham Rambler, Han Shuffle, Hanglow Short, Hatzfeld Runo, herina Bode, Horatio Freund, Hypatia Callisto, Hypatia Pickens, Identity Euler, Imnotgoing Sideways, Innula Zenovka, Iyoba Tarantal, Jack Abraham, Jagga Meredith, Jennifer Boyle, Jeremy Marquez, Jessica Qin, Jinx Nordberg, Jo Bernandes, Jocial Sonnenkern, Joel Savard, Jondan Lundquist, Josef Munster, Josette Windlow, Juilan Tripsa, Juro Kothari, Justin RiversRunRed, Kagehi Kohn, Kaimen Takahe, Keklily Longfall, Ken Lavender, Kestral Karas, Khisme Nitely, Kimar Coba, Kithrak Kirkorian, Kitty Barnett, Kolor Fall, Komiko Okamoto, Korvel Noh, Larry Pixel, Leal Choche, len Starship, Lenae Munz, Lexi Frua, Lillie Cordeaux, Lizzy Macarthur, LSL Scientist, Luban Yiyuan, Luc Starsider, Maccus McCullough, Madison Blanc, Maggie Darwin, Mallory Destiny, Manx Wharton, Marc Claridge, Marc2 Sands, Matthew Anthony, Maxim RiversRunRed, Medhue Simoni, Melinda Latynina, Mencius Watts, Michi Lumin, Midian Farspire, Miles Glaz, Mindy Mathy, Mitch Wagner, Mo Hax, Mourna Biziou, Nao Noe, naofan Teardrop, Naomah Beaumont, Nathiel Siamendes, Nber Medici, Neko Link, Netpat Igaly, Neutron Chesnokov, Newfie Pendragon, Nicholai Laviscu, Nick Rhodes, Nicoladie Gymnast, Ollie Kubrick, Orenj Marat, Orion Delphis, Oryx Tempel, Parvati Silverweb, PeterPunk Mooney, Pixel Scientist, Pounce Teazle, Professor Noarlunga, Quantum Destiny, Quicksilver Hermes, Ralf Setsuko, RAT Quan, RedMokum Bravin, Revolution Perenti, Rezit Sideways, Rich Grainger, Rosco Teardrop, Rose Evans, Rudee Voom, RufusTT Horsefly, Saii Hallard, SaintLEOlions Zimer, Samm Larkham, Satanello Miami, SexySteven Morrisey, Sheet Spotter, Shnurui Troughton, sicarius Thorne, Sicarius Toxx, Sini Nubalo, SLB Wirefly, snowy Sidran, Soupa Segura, ST Mensing, Starshine Halasy, Stickman Ingmann, Synystyr Texan, Takeda Terrawyng, Tali Rosca, Templar Merlin, Tezcatlipoca Bisiani, Tiel Stonecutter, Tony Kembia, TouchaHoney Perhaps, Trey Reanimator, TriloByte Zanzibar, Trinity Dechou, Trinity Dejavu, Unlikely Quintessa, UsikuFarasi Kanarik, Veritas Raymaker, Vex Streeter, Viaticus Speculaas, Villain Baroque, Vixie Durant, Void Singer, Watty Berkson, Westley Schridde, Westley Streeter, Whimsy Winx, Winter Ventura, Wundur Primbee, xstorm Radek, YongYong Francois, Zak Westminster, Zana Kohime, Zaren Alexander, Zeja Pyle, ZenMondo Wormser, Zoex Flanagan und vielen anderen.
+Wir bedanken uns bei folgenden Einwohnern, die uns geholfen haben, dies zur bisher besten Version zu machen: Drew Dwi, Zai Lynch, Latif Khalifa, Ellla McMahon, Harleen Gretzky, Squirrel Wood, Malarthi Behemoth, Dante Tucker, Buckaroo Mu, Eddi Decosta, Dirk, Talamasca, Torben Trautman, Irene Muni, Aralara Rajal, Aura Dirval, Cayu Cluny, Eva Rau, FreeSL Aeon, Frontera Thor, Inma Rau, Lunita Savira, Minerva Memel, Polo Gufler, Xiki Luik, Lilly Zenovka, Vick Forcella, Sasy Scarborough, Gentle Welinder, Elric Anatine, Techwolf Lupindo, Dusan Writer, WolfPup Lowenhar, Marianne McCann, Fiachra Lach, Sitearm Madonna, Sudane Erato, Sahkolihaa Contepomi, Sachi Vixen, Questar Utu, Dimitrio Lewis, Matto Destiny, Scrim Pinion, Radio Signals, Psi Merlin, Pixel Gausman, Mel Vanbeeck, Laurent Bechir, Lamorna Proctor, Lares Carter, Gwyneth Llewelyn, Hydra Shaftoe, Holger Gilruth, Gentle Heron, Carla Broek, Boroondas Gupte, Fury Rosewood, Flower Ducatillon, Colpo Wexler, gwampa Lomu, Borg Capalini, Beansy Twine, Ardy Lay, , 45ms Zhong, Adeon Writer, Aeonix Aeon, Ai Austin, Aiko Ying, Alexandrea Fride, Alliez Mysterio, Annie Milestone, Annika Genezzia, Ansariel Hiller, ArminasX Saiman, Arya Braveheart, Asaeda Meltingdots, Asturkon Jua, Avallyn Oakleaf, Avatar Quinzet, BabyA Littlething, Bacchus Ireto, Bazaar, Riva, Benjamin Bigdipper, Beth Walcher, Bezilon Kasei, Biancaluce Robbiani, Bill Walach, blakopal Galicia, Blitzckreed Levenque, Bryn Oh, Callipygian Christensen, Cap Carver, Carr Arbenlow, Chantal Harvey, Charles Courtois, Charlie Sazaland, Cherry Cheevers, ChickyBabes Zuzu, Christopher  Organiser, Ciaran Laval, Clara Young, Celierra Darling, Corinne Helendale, Corro Moseley, Coughdrop Littlething, Darien Caldwell, Dartagan Shepherd, Debs Regent, Decro Schmooz, Denim Kamachi, DiJodi Dubratt, Dil Spitz, Edgware Marker, Egehan Dryke, Emma Portilo, Emmie Fairymeadow, Evangelista Emerald, Faelon Swordthain, Frenchimmo Sabra, Gaberoonie Zanzibar, Ganymedes Costagravas, Gene Frostbite, GeneJ Composer, Giggles Littlebird, Grady Echegaray, Guni Greenstein, Gypsy Tripsa, Hackshaven Harford, Ham Rambler, Han Shuffle, Hanglow Short, Hatzfeld Runo, herina Bode, Horatio Freund, Hypatia Callisto, Hypatia Pickens, Identity Euler, Imnotgoing Sideways, Innula Zenovka, Iyoba Tarantal, Jack Abraham, Jagga Meredith, Jennifer Boyle, Jeremy Marquez, Jessica Qin, Jinx Nordberg, Jo Bernandes, Jocial Sonnenkern, Joel Savard, Jondan Lundquist, Josef Munster, Josette Windlow, Juilan Tripsa, Juro Kothari, Justin RiversRunRed, Kagehi Kohn, Kaimen Takahe, Keklily Longfall, Ken Lavender, Kestral Karas, Khisme Nitely, Kimar Coba, Kithrak Kirkorian, Kitty Barnett, Kolor Fall, Komiko Okamoto, Korvel Noh, Larry Pixel, Leal Choche, len Starship, Lenae Munz, Lexi Frua, Lillie Cordeaux, Lizzy Macarthur, LSL Scientist, Luban Yiyuan, Luc Starsider, Maccus McCullough, Madison Blanc, Maggie Darwin, Mallory Destiny, Manx Wharton, Marc Claridge, Marc2 Sands, Matthew Anthony, Maxim RiversRunRed, Medhue Simoni, Melinda Latynina, Mencius Watts, Michi Lumin, Midian Farspire, Miles Glaz, Mindy Mathy, Mitch Wagner, Mo Hax, Mourna Biziou, Nao Noe, naofan Teardrop, Naomah Beaumont, Nathiel Siamendes, Nber Medici, Neko Link, Netpat Igaly, Neutron Chesnokov, Newfie Pendragon, Nicholai Laviscu, Nick Rhodes, Nicoladie Gymnast, Ollie Kubrick, Orenj Marat, Orion Delphis, Oryx Tempel, Parvati Silverweb, PeterPunk Mooney, Pixel Scientist, Pounce Teazle, Professor Noarlunga, Quantum Destiny, Quicksilver Hermes, Ralf Setsuko, RAT Quan, RedMokum Bravin, Revolution Perenti, Rezit Sideways, Rich Grainger, Rosco Teardrop, Rose Evans, Rudee Voom, RufusTT Horsefly, Saii Hallard, SaintLEOlions Zimer, Samm Larkham, Satanello Miami, SexySteven Morrisey, Sheet Spotter, Shnurui Troughton, sicarius Thorne, Sicarius Toxx, Sini Nubalo, SLB Wirefly, snowy Sidran, Soupa Segura, ST Mensing, Starshine Halasy, Stickman Ingmann, Synystyr Texan, Takeda Terrawyng, Tali Rosca, Templar Merlin, Tezcatlipoca Bisiani, Tiel Stonecutter, Tony Kembia, TouchaHoney Perhaps, Trey Reanimator, TriloByte Zanzibar, Trinity Dechou, Trinity Dejavu, Unlikely Quintessa, UsikuFarasi Kanarik, Veritas Raymaker, Vex Streeter, Viaticus Speculaas, Villain Baroque, Vixie Durant, Void Singer, Watty Berkson, Westley Schridde, Westley Streeter, Whimsy Winx, Winter Ventura, Wundur Primbee, xstorm Radek, YongYong Francois, Zak Westminster, Zana Kohime, Zaren Alexander, Zeja Pyle, ZenMondo Wormser, Zoex Flanagan und vielen anderen.
 
 
 
diff --git a/indra/newview/skins/default/xui/en/floater_about.xml b/indra/newview/skins/default/xui/en/floater_about.xml
index f4d65bdb3a..f5365be11f 100644
--- a/indra/newview/skins/default/xui/en/floater_about.xml
+++ b/indra/newview/skins/default/xui/en/floater_about.xml
@@ -112,7 +112,7 @@ Packets Lost: [PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number
        word_wrap="true">
 Second Life is brought to you by Philip, Tessa, Andrew, Cory, Ian, James, Phoenix, Ryan, Haney, Dan, Char, Ben, John, Tanya, Eddie, Richard, Mitch, Doug, Eric, Frank, Bruce, Aaron, Peter, Alice, Charlie, Debra, Eileen, Helen, Janet, Steffan, Steve, Tom, Mark, Hunter, Xenon, Burgess, Bill, Jim, Lee, Hamlet, Daniel, Jeff, Todd, Sarah, Tim, Stephanie, Colin, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Jack, Vektor, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Jesse, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Yuko, Makiko, Thomas, Harry, Seth, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Brad, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, Beez, Milo, Hermia, Red, Thrax, Gulliver, Joe, Sally, Paul, Jose, Rejean, Dore, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, Dustin, George, Del, Matthew, Cat, Jacqui, Adrian, Viola, Alfred, Noel, Irfan, Yool, Rika, Jane, Frontier, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Jeremy, JP, Jake, Anthony, Maurice, Madhavi, Leopard, Kyle, Joon, Bert, Belinda, Jon, Kristi, Bridie, Pramod, Socrates, Maria, Aric, Adreanne, Jay, Kari, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Colossus, Zen, BigPapi, Pastrami, Kurz, Mani, Neuro, Mel, Sardonyx, MJ, Rowan, Sgt, Elvis, Samuel, Leo, Bryan, Niko, Austin, Soft, Poppy, Rachel, Aki, Banzai, Alexa, Sue, Bender, CG, Angelo, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Rothman, Niall, Marin, Allison, Katie, Dawn, Dusty, Katt, Judy, Andrea, Ambroff, Infinity, Rico, Gail, Kalpana, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Maestro, Simone, Yang, T, Shannon, Nelson, Khanh, Scott, Courtney, Charlene, Quixote, Susan, Zed, Amanda, Katelin, Enkidu, Roxie, Esbee, JoRoan, Scarlet, Tay, Kevin, Wolfgang, Johnny, Ray, Andren, Merov, Bob, Rand, Howard, Callen, Heff, Galen, Newell, Dessie, Les, Michon, Jenelle, Geo, Siz, Shapiro, Pete, Calyle, Selene, Allen, Phoebe, Goldin, Kimmora, Dakota, Slaton, Lindquist, Zoey, Hari, Othello, Rohit, Sheldon, Petra, Viale, Gordon, Kaye, Pink, Ferny, Emerson, Davy, Bri, Chan, Juan, Robert, Terrence, Nathan, Carl, Ashley, JessieAnn, Huseby, Karina, Paris, Kurt, Rick, Lis, Kotler, Theeba, Lynx, Murphy, Doten, Taka, Norm, Jillian, Marcus, Mae, Novack, Esther, Perry, Dana, Ducot, Javier, Porter, Madison, Gecko, Dough, JR, Gisele, Crimp, Norie, Arch, Kimi, Fisher, Barbara, Jason, Peggy, Bernard, Jules, Leroy, Eva, Khederian, Campbell, Vogt, Masido, Karel, Torres, Lo, Breezer, Delby, Rountree, Anna, Servus, Rue, Itiaes, Chuck, Luna, Novella, Zaza, Wen, Gino, Lex, Cassandra, Limey, Nancy, Anukul, Silver, Brodesky, Jinsai, Squid, Gez, Rakesh, Ladan, Edelman, Marcet, Squire, Tatem, Tony, Jerm, Tia, Falcon, BK, Tiggs, Driscoll, Bacon, Timothee, Cru, Carmilla, Coyot, Webb, Kazu, Rudas, LJ, Sea, Ali Wallace, Bewest, Pup, Drub, Dragon, Inoshiro, Byron, Rhett, Xandix, Aimee, Fredrik, Thor, Teddy, Baron, Nelly, Ghengis, Epic, Eli, Stone, Grapes, Irie, Prep, Scobu, Valerie, Alain, and many others.
 
-Thank you to the following Residents for helping to ensure that this is the best version yet: Drew Dwi, Zai Lynch, Latif Khalifa, Ellla McMahon, Harleen Gretzky, Squirrel Wood, Malarthi Behemoth, Dante Tucker, Buckaroo Mu, Eddi Decosta, Dirk, Talamasca, Torben Trautman, Irene Muni, Lilly Zenovka, Vick Forcella, Sasy Scarborough, Gentle Welinder, Elric Anatine, Techwolf Lupindo, Dusan Writer, WolfPup Lowenhar, Marianne McCann, Fiachra Lach, Sitearm Madonna, Sudane Erato, Sahkolihaa Contepomi, Sachi Vixen, Questar Utu, Dimitrio Lewis, Matto Destiny, Scrim Pinion, Radio Signals, Psi Merlin, Pixel Gausman, Mel Vanbeeck, Laurent Bechir, Lamorna Proctor, Lares Carter, Gwyneth Llewelyn, Hydra Shaftoe, Holger Gilruth, Gentle Heron, Carla Broek, Boroondas Gupte, Fury Rosewood, Flower Ducatillon, Colpo Wexler, gwampa Lomu, Borg Capalini, Beansy Twine, Ardy Lay, , 45ms Zhong, Adeon Writer, Aeonix Aeon, Ai Austin, Aiko Ying, Alexandrea Fride, Alliez Mysterio, Annie Milestone, Annika Genezzia, Ansariel Hiller, ArminasX Saiman, Arya Braveheart, Asaeda Meltingdots, Asturkon Jua, Avallyn Oakleaf, Avatar Quinzet, BabyA Littlething, Bacchus Ireto, Bazaar, Riva, Benjamin Bigdipper, Beth Walcher, Bezilon Kasei, Biancaluce Robbiani, Bill Walach, blakopal Galicia, Blitzckreed Levenque, Bryn Oh, Callipygian Christensen, Cap Carver, Carr Arbenlow, Chantal Harvey, Charles Courtois, Charlie Sazaland, Cherry Cheevers, ChickyBabes Zuzu, Christopher  Organiser, Ciaran Laval, Clara Young, Celierra Darling, Corinne Helendale, Corro Moseley, Coughdrop Littlething, Darien Caldwell, Dartagan Shepherd, Debs Regent, Decro Schmooz, Denim Kamachi, DiJodi Dubratt, Dil Spitz, Edgware Marker, Egehan Dryke, Emma Portilo, Emmie Fairymeadow, Evangelista Emerald, Faelon Swordthain, Frenchimmo Sabra, Gaberoonie Zanzibar, Ganymedes Costagravas, Gene Frostbite, GeneJ Composer, Giggles Littlebird, Grady Echegaray, Guni Greenstein, Gypsy Tripsa, Hackshaven Harford, Ham Rambler, Han Shuffle, Hanglow Short, Hatzfeld Runo, herina Bode, Horatio Freund, Hypatia Callisto, Hypatia Pickens, Identity Euler, Imnotgoing Sideways, Innula Zenovka, Iyoba Tarantal, Jack Abraham, Jagga Meredith, Jennifer Boyle, Jeremy Marquez, Jessica Qin, Jinx Nordberg, Jo Bernandes, Jocial Sonnenkern, Joel Savard, Jondan Lundquist, Josef Munster, Josette Windlow, Juilan Tripsa, Juro Kothari, Justin RiversRunRed, Kagehi Kohn, Kaimen Takahe, Keklily Longfall, Ken Lavender, Kestral Karas, Khisme Nitely, Kimar Coba, Kithrak Kirkorian, Kitty Barnett, Kolor Fall, Komiko Okamoto, Korvel Noh, Larry Pixel, Leal Choche, len Starship, Lenae Munz, Lexi Frua, Lillie Cordeaux, Lizzy Macarthur, LSL Scientist, Luban Yiyuan, Luc Starsider, Maccus McCullough, Madison Blanc, Maggie Darwin, Mallory Destiny, Manx Wharton, Marc Claridge, Marc2 Sands, Matthew Anthony, Maxim RiversRunRed, Medhue Simoni, Melinda Latynina, Mencius Watts, Michi Lumin, Midian Farspire, Miles Glaz, Mindy Mathy, Mitch Wagner, Mo Hax, Mourna Biziou, Nao Noe, naofan Teardrop, Naomah Beaumont, Nathiel Siamendes, Nber Medici, Neko Link, Netpat Igaly, Neutron Chesnokov, Newfie Pendragon, Nicholai Laviscu, Nick Rhodes, Nicoladie Gymnast, Ollie Kubrick, Orenj Marat, Orion Delphis, Oryx Tempel, Parvati Silverweb, PeterPunk Mooney, Pixel Scientist, Pounce Teazle, Professor Noarlunga, Quantum Destiny, Quicksilver Hermes, Ralf Setsuko, RAT Quan, RedMokum Bravin, Revolution Perenti, Rezit Sideways, Rich Grainger, Rosco Teardrop, Rose Evans, Rudee Voom, RufusTT Horsefly, Saii Hallard, SaintLEOlions Zimer, Samm Larkham, Satanello Miami, SexySteven Morrisey, Sheet Spotter, Shnurui Troughton, sicarius Thorne, Sicarius Toxx, Sini Nubalo, SLB Wirefly, snowy Sidran, Soupa Segura, ST Mensing, Starshine Halasy, Stickman Ingmann, Synystyr Texan, Takeda Terrawyng, Tali Rosca, Templar Merlin, Tezcatlipoca Bisiani, Tiel Stonecutter, Tony Kembia, TouchaHoney Perhaps, Trey Reanimator, TriloByte Zanzibar, Trinity Dechou, Trinity Dejavu, Unlikely Quintessa, UsikuFarasi Kanarik, Veritas Raymaker, Vex Streeter, Viaticus Speculaas, Villain Baroque, Vixie Durant, Void Singer, Watty Berkson, Westley Schridde, Westley Streeter, Whimsy Winx, Winter Ventura, Wundur Primbee, xstorm Radek, YongYong Francois, Zak Westminster, Zana Kohime, Zaren Alexander, Zeja Pyle, ZenMondo Wormser, Zoex Flanagan, and many others.
+Thank you to the following Residents for helping to ensure that this is the best version yet: Drew Dwi, Zai Lynch, Latif Khalifa, Ellla McMahon, Harleen Gretzky, Squirrel Wood, Malarthi Behemoth, Dante Tucker, Buckaroo Mu, Eddi Decosta, Dirk, Talamasca, Torben Trautman, Irene Muni, Aralara Rajal, Aura Dirval, Cayu Cluny, Eva Rau, FreeSL Aeon, Frontera Thor, Inma Rau, Lunita Savira, Minerva Memel, Polo Gufler, Xiki Luik, Lilly Zenovka, Vick Forcella, Sasy Scarborough, Gentle Welinder, Elric Anatine, Techwolf Lupindo, Dusan Writer, WolfPup Lowenhar, Marianne McCann, Fiachra Lach, Sitearm Madonna, Sudane Erato, Sahkolihaa Contepomi, Sachi Vixen, Questar Utu, Dimitrio Lewis, Matto Destiny, Scrim Pinion, Radio Signals, Psi Merlin, Pixel Gausman, Mel Vanbeeck, Laurent Bechir, Lamorna Proctor, Lares Carter, Gwyneth Llewelyn, Hydra Shaftoe, Holger Gilruth, Gentle Heron, Carla Broek, Boroondas Gupte, Fury Rosewood, Flower Ducatillon, Colpo Wexler, gwampa Lomu, Borg Capalini, Beansy Twine, Ardy Lay, , 45ms Zhong, Adeon Writer, Aeonix Aeon, Ai Austin, Aiko Ying, Alexandrea Fride, Alliez Mysterio, Annie Milestone, Annika Genezzia, Ansariel Hiller, ArminasX Saiman, Arya Braveheart, Asaeda Meltingdots, Asturkon Jua, Avallyn Oakleaf, Avatar Quinzet, BabyA Littlething, Bacchus Ireto, Bazaar, Riva, Benjamin Bigdipper, Beth Walcher, Bezilon Kasei, Biancaluce Robbiani, Bill Walach, blakopal Galicia, Blitzckreed Levenque, Bryn Oh, Callipygian Christensen, Cap Carver, Carr Arbenlow, Chantal Harvey, Charles Courtois, Charlie Sazaland, Cherry Cheevers, ChickyBabes Zuzu, Christopher  Organiser, Ciaran Laval, Clara Young, Celierra Darling, Corinne Helendale, Corro Moseley, Coughdrop Littlething, Darien Caldwell, Dartagan Shepherd, Debs Regent, Decro Schmooz, Denim Kamachi, DiJodi Dubratt, Dil Spitz, Edgware Marker, Egehan Dryke, Emma Portilo, Emmie Fairymeadow, Evangelista Emerald, Faelon Swordthain, Frenchimmo Sabra, Gaberoonie Zanzibar, Ganymedes Costagravas, Gene Frostbite, GeneJ Composer, Giggles Littlebird, Grady Echegaray, Guni Greenstein, Gypsy Tripsa, Hackshaven Harford, Ham Rambler, Han Shuffle, Hanglow Short, Hatzfeld Runo, herina Bode, Horatio Freund, Hypatia Callisto, Hypatia Pickens, Identity Euler, Imnotgoing Sideways, Innula Zenovka, Iyoba Tarantal, Jack Abraham, Jagga Meredith, Jennifer Boyle, Jeremy Marquez, Jessica Qin, Jinx Nordberg, Jo Bernandes, Jocial Sonnenkern, Joel Savard, Jondan Lundquist, Josef Munster, Josette Windlow, Juilan Tripsa, Juro Kothari, Justin RiversRunRed, Kagehi Kohn, Kaimen Takahe, Keklily Longfall, Ken Lavender, Kestral Karas, Khisme Nitely, Kimar Coba, Kithrak Kirkorian, Kitty Barnett, Kolor Fall, Komiko Okamoto, Korvel Noh, Larry Pixel, Leal Choche, len Starship, Lenae Munz, Lexi Frua, Lillie Cordeaux, Lizzy Macarthur, LSL Scientist, Luban Yiyuan, Luc Starsider, Maccus McCullough, Madison Blanc, Maggie Darwin, Mallory Destiny, Manx Wharton, Marc Claridge, Marc2 Sands, Matthew Anthony, Maxim RiversRunRed, Medhue Simoni, Melinda Latynina, Mencius Watts, Michi Lumin, Midian Farspire, Miles Glaz, Mindy Mathy, Mitch Wagner, Mo Hax, Mourna Biziou, Nao Noe, naofan Teardrop, Naomah Beaumont, Nathiel Siamendes, Nber Medici, Neko Link, Netpat Igaly, Neutron Chesnokov, Newfie Pendragon, Nicholai Laviscu, Nick Rhodes, Nicoladie Gymnast, Ollie Kubrick, Orenj Marat, Orion Delphis, Oryx Tempel, Parvati Silverweb, PeterPunk Mooney, Pixel Scientist, Pounce Teazle, Professor Noarlunga, Quantum Destiny, Quicksilver Hermes, Ralf Setsuko, RAT Quan, RedMokum Bravin, Revolution Perenti, Rezit Sideways, Rich Grainger, Rosco Teardrop, Rose Evans, Rudee Voom, RufusTT Horsefly, Saii Hallard, SaintLEOlions Zimer, Samm Larkham, Satanello Miami, SexySteven Morrisey, Sheet Spotter, Shnurui Troughton, sicarius Thorne, Sicarius Toxx, Sini Nubalo, SLB Wirefly, snowy Sidran, Soupa Segura, ST Mensing, Starshine Halasy, Stickman Ingmann, Synystyr Texan, Takeda Terrawyng, Tali Rosca, Templar Merlin, Tezcatlipoca Bisiani, Tiel Stonecutter, Tony Kembia, TouchaHoney Perhaps, Trey Reanimator, TriloByte Zanzibar, Trinity Dechou, Trinity Dejavu, Unlikely Quintessa, UsikuFarasi Kanarik, Veritas Raymaker, Vex Streeter, Viaticus Speculaas, Villain Baroque, Vixie Durant, Void Singer, Watty Berkson, Westley Schridde, Westley Streeter, Whimsy Winx, Winter Ventura, Wundur Primbee, xstorm Radek, YongYong Francois, Zak Westminster, Zana Kohime, Zaren Alexander, Zeja Pyle, ZenMondo Wormser, Zoex Flanagan, and many others.
 
 
 
diff --git a/indra/newview/skins/default/xui/es/floater_about.xml b/indra/newview/skins/default/xui/es/floater_about.xml
index 1af089cfaf..bb845e1ee0 100644
--- a/indra/newview/skins/default/xui/es/floater_about.xml
+++ b/indra/newview/skins/default/xui/es/floater_about.xml
@@ -45,7 +45,7 @@ Versión del servidor de voz: [VOICE_VERSION]
 			<text_editor name="credits_editor">
 				Te ofrecen Second Life Philip, Tessa, Andrew, Cory, Ian, James, Phoenix, Ryan, Haney, Dan, Char, Ben, John, Tanya, Eddie, Richard, Mitch, Doug, Eric, Frank, Bruce, Aaron, Peter, Alice, Charlie, Debra, Eileen, Helen, Janet, Steffan, Steve, Tom, Mark, Hunter, Xenon, Burgess, Bill, Jim, Lee, Hamlet, Daniel, Jeff, Todd, Sarah, Tim, Stephanie, Colin, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Jack, Vektor, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Jesse, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Yuko, Makiko, Thomas, Harry, Seth, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Brad, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, Beez, Milo, Hermia, Red, Thrax, Gulliver, Joe, Sally, Paul, Jose, Rejean, Dore, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, Dustin, George, Del, Matthew, Cat, Jacqui, Adrian, Viola, Alfred, Noel, Irfan, Yool, Rika, Jane, Frontier, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Jeremy, JP, Jake, Anthony, Maurice, Madhavi, Leopard, Kyle, Joon, Bert, Belinda, Jon, Kristi, Bridie, Pramod, Socrates, Maria, Aric, Adreanne, Jay, Kari, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Colossus, Zen, BigPapi, Pastrami, Kurz, Mani, Neuro, Mel, Sardonyx, MJ, Rowan, Sgt, Elvis, Samuel, Leo, Bryan, Niko, Austin, Soft, Poppy, Rachel, Aki, Banzai, Alexa, Sue, Bender, CG, Angelo, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Rothman, Niall, Marin, Allison, Katie, Dawn, Dusty, Katt, Judy, Andrea, Ambroff, Infinity, Rico, Gail, Kalpana, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Maestro, Simone, Yang, T, Shannon, Nelson, Khanh, Scott, Courtney, Charlene, Quixote, Susan, Zed, Amanda, Katelin, Enkidu, Roxie, Esbee, JoRoan, Scarlet, Tay, Kevin, Wolfgang, Johnny, Ray, Andren, Merov, Bob, Rand, Howard, Callen, Heff, Galen, Newell, Dessie, Les, Michon, Jenelle, Geo, Siz, Shapiro, Pete, Calyle, Selene, Allen, Phoebe, Goldin, Kimmora, Dakota, Slaton, Lindquist, Zoey, Hari, Othello, Rohit, Sheldon, Petra, Viale, Gordon, Kaye, Pink, Ferny, Emerson, Davy, Bri, Chan, Juan, Robert, Terrence, Nathan, Carl, Ashley, JessieAnn, Huseby, Karina, Paris, Kurt, Rick, Lis, Kotler, Theeba, Lynx, Murphy, Doten, Taka, Norm, Jillian, Marcus, Mae, Novack, Esther, Perry, Dana, Ducot, Javier, Porter, Madison, Gecko, Dough, JR, Gisele, Crimp, Norie, Arch, Kimi, Fisher, Barbara, Jason, Peggy, Bernard, Jules, Leroy, Eva, Khederian, Campbell, Vogt, Masido, Karel, Torres, Lo, Breezer, Delby, Rountree, Anna, Servus, Rue, Itiaes, Chuck, Luna, Novella, Zaza, Wen, Gino, Lex, Cassandra, Limey, Nancy, Anukul, Silver, Brodesky, Jinsai, Squid, Gez, Rakesh, Ladan, Edelman, Marcet, Squire, Tatem, Tony, Jerm, Tia, Falcon, BK, Tiggs, Driscoll, Bacon, Timothee, Cru, Carmilla, Coyot, Webb, Kazu, Rudas, LJ, Sea, Ali Wallace, Bewest, Pup, Drub, Dragon, Inoshiro, Byron, Rhett, Xandix, Aimee, Fredrik, Thor, Teddy, Baron, Nelly, Ghengis, Epic, Eli, Stone, Grapes, Irie, Prep, Scobu, Valerie, Alain, y muchos otros.
 
-Gracias a estos Residentes por ayudarnos a estar seguros de que, con todo, esta es la mejor versión: Drew Dwi, Zai Lynch, Latif Khalifa, Ellla McMahon, Harleen Gretzky, Squirrel Wood, Malarthi Behemoth, Dante Tucker, Buckaroo Mu, Eddi Decosta, Dirk Talamasca, Torben Trautman, Irene Muni, Lilly Zenovka, Vick Forcella, Sasy Scarborough, Gentle Welinder, Elric Anatine, Techwolf Lupindo, Dusan Writer, WolfPup Lowenhar, Marianne McCann, Fiachra Lach, Sitearm Madonna, Sudane Erato, Sahkolihaa Contepomi, Sachi Vixen, Questar Utu, Dimitrio Lewis, Matto Destiny, Scrim Pinion, Radio Signals, Psi Merlin, Pixel Gausman, Mel Vanbeeck, Laurent Bechir, Lamorna Proctor, Lares Carter, Gwyneth Llewelyn, Hydra Shaftoe, Holger Gilruth, Gentle Heron, Carla Broek, Boroondas Gupte, Fury Rosewood, Flower Ducatillon, Colpo Wexler, gwampa Lomu, Borg Capalini, Beansy Twine, Ardy Lay, 45ms Zhong, Adeon Writer, Aeonix Aeon, Ai Austin, Aiko Ying, Alexandrea Fride, Alliez Mysterio, Annie Milestone, Annika Genezzia, Ansariel Hiller, ArminasX Saiman, Arya Braveheart, Asaeda Meltingdots, Asturkon Jua, Avallyn Oakleaf, Avatar Quinzet, BabyA Littlething, Bacchus Ireto, Bazaar, Riva, Benjamin Bigdipper, Beth Walcher, Bezilon Kasei, Biancaluce Robbiani, Bill Walach, blakopal Galicia, Blitzckreed Levenque, Bryn Oh, Callipygian Christensen, Cap Carver, Carr Arbenlow, Chantal Harvey, Charles Courtois, Charlie Sazaland, Cherry Cheevers, ChickyBabes Zuzu, Christopher  Organiser, Ciaran Laval, Clara Young, Celierra Darling, Corinne Helendale, Corro Moseley, Coughdrop Littlething, Darien Caldwell, Dartagan Shepherd, Debs Regent, Decro Schmooz, Denim Kamachi, DiJodi Dubratt, Dil Spitz, Edgware Marker, Egehan Dryke, Emma Portilo, Emmie Fairymeadow, Evangelista Emerald, Faelon Swordthain, Frenchimmo Sabra, Gaberoonie Zanzibar, Ganymedes Costagravas, Gene Frostbite, GeneJ Composer, Giggles Littlebird, Grady Echegaray, Guni Greenstein, Gypsy Tripsa, Hackshaven Harford, Ham Rambler, Han Shuffle, Hanglow Short, Hatzfeld Runo, herina Bode, Horatio Freund, Hypatia Callisto, Hypatia Pickens, Identity Euler, Imnotgoing Sideways, Innula Zenovka, Iyoba Tarantal, Jack Abraham, Jagga Meredith, Jennifer Boyle, Jeremy Marquez, Jessica Qin, Jinx Nordberg, Jo Bernandes, Jocial Sonnenkern, Joel Savard, Jondan Lundquist, Josef Munster, Josette Windlow, Juilan Tripsa, Juro Kothari, Justin RiversRunRed, Kagehi Kohn, Kaimen Takahe, Keklily Longfall, Ken Lavender, Kestral Karas, Khisme Nitely, Kimar Coba, Kithrak Kirkorian, Kitty Barnett, Kolor Fall, Komiko Okamoto, Korvel Noh, Larry Pixel, Leal Choche, len Starship, Lenae Munz, Lexi Frua, Lillie Cordeaux, Lizzy Macarthur, LSL Scientist, Luban Yiyuan, Luc Starsider, Maccus McCullough, Madison Blanc, Maggie Darwin, Mallory Destiny, Manx Wharton, Marc Claridge, Marc2 Sands, Matthew Anthony, Maxim RiversRunRed, Medhue Simoni, Melinda Latynina, Mencius Watts, Michi Lumin, Midian Farspire, Miles Glaz, Mindy Mathy, Mitch Wagner, Mo Hax, Mourna Biziou, Nao Noe, naofan Teardrop, Naomah Beaumont, Nathiel Siamendes, Nber Medici, Neko Link, Netpat Igaly, Neutron Chesnokov, Newfie Pendragon, Nicholai Laviscu, Nick Rhodes, Nicoladie Gymnast, Ollie Kubrick, Orenj Marat, Orion Delphis, Oryx Tempel, Parvati Silverweb, PeterPunk Mooney, Pixel Scientist, Pounce Teazle, Professor Noarlunga, Quantum Destiny, Quicksilver Hermes, Ralf Setsuko, RAT Quan, RedMokum Bravin, Revolution Perenti, Rezit Sideways, Rich Grainger, Rosco Teardrop, Rose Evans, Rudee Voom, RufusTT Horsefly, Saii Hallard, SaintLEOlions Zimer, Samm Larkham, Satanello Miami, SexySteven Morrisey, Sheet Spotter, Shnurui Troughton, sicarius Thorne, Sicarius Toxx, Sini Nubalo, SLB Wirefly, snowy Sidran, Soupa Segura, ST Mensing, Starshine Halasy, Stickman Ingmann, Synystyr Texan, Takeda Terrawyng, Tali Rosca, Templar Merlin, Tezcatlipoca Bisiani, Tiel Stonecutter, Tony Kembia, TouchaHoney Perhaps, Trey Reanimator, TriloByte Zanzibar, Trinity Dechou, Trinity Dejavu, Unlikely Quintessa, UsikuFarasi Kanarik, Veritas Raymaker, Vex Streeter, Viaticus Speculaas, Villain Baroque, Vixie Durant, Void Singer, Watty Berkson, Westley Schridde, Westley Streeter, Whimsy Winx, Winter Ventura, Wundur Primbee, xstorm Radek, YongYong Francois, Zak Westminster, Zana Kohime, Zaren Alexander, Zeja Pyle, ZenMondo Wormser, Zoex Flanagan, y muchos otros.
+Gracias a estos Residentes por ayudarnos a estar seguros de que, con todo, esta es la mejor versión: Drew Dwi, Zai Lynch, Latif Khalifa, Ellla McMahon, Harleen Gretzky, Squirrel Wood, Malarthi Behemoth, Dante Tucker, Buckaroo Mu, Eddi Decosta, Dirk Talamasca, Torben Trautman, Irene Muni, Aralara Rajal, Aura Dirval, Cayu Cluny, Eva Rau, FreeSL Aeon, Frontera Thor, Inma Rau, Lunita Savira, Minerva Memel, Polo Gufler, Xiki Luik, Lilly Zenovka, Vick Forcella, Sasy Scarborough, Gentle Welinder, Elric Anatine, Techwolf Lupindo, Dusan Writer, WolfPup Lowenhar, Marianne McCann, Fiachra Lach, Sitearm Madonna, Sudane Erato, Sahkolihaa Contepomi, Sachi Vixen, Questar Utu, Dimitrio Lewis, Matto Destiny, Scrim Pinion, Radio Signals, Psi Merlin, Pixel Gausman, Mel Vanbeeck, Laurent Bechir, Lamorna Proctor, Lares Carter, Gwyneth Llewelyn, Hydra Shaftoe, Holger Gilruth, Gentle Heron, Carla Broek, Boroondas Gupte, Fury Rosewood, Flower Ducatillon, Colpo Wexler, gwampa Lomu, Borg Capalini, Beansy Twine, Ardy Lay, 45ms Zhong, Adeon Writer, Aeonix Aeon, Ai Austin, Aiko Ying, Alexandrea Fride, Alliez Mysterio, Annie Milestone, Annika Genezzia, Ansariel Hiller, ArminasX Saiman, Arya Braveheart, Asaeda Meltingdots, Asturkon Jua, Avallyn Oakleaf, Avatar Quinzet, BabyA Littlething, Bacchus Ireto, Bazaar, Riva, Benjamin Bigdipper, Beth Walcher, Bezilon Kasei, Biancaluce Robbiani, Bill Walach, blakopal Galicia, Blitzckreed Levenque, Bryn Oh, Callipygian Christensen, Cap Carver, Carr Arbenlow, Chantal Harvey, Charles Courtois, Charlie Sazaland, Cherry Cheevers, ChickyBabes Zuzu, Christopher  Organiser, Ciaran Laval, Clara Young, Celierra Darling, Corinne Helendale, Corro Moseley, Coughdrop Littlething, Darien Caldwell, Dartagan Shepherd, Debs Regent, Decro Schmooz, Denim Kamachi, DiJodi Dubratt, Dil Spitz, Edgware Marker, Egehan Dryke, Emma Portilo, Emmie Fairymeadow, Evangelista Emerald, Faelon Swordthain, Frenchimmo Sabra, Gaberoonie Zanzibar, Ganymedes Costagravas, Gene Frostbite, GeneJ Composer, Giggles Littlebird, Grady Echegaray, Guni Greenstein, Gypsy Tripsa, Hackshaven Harford, Ham Rambler, Han Shuffle, Hanglow Short, Hatzfeld Runo, herina Bode, Horatio Freund, Hypatia Callisto, Hypatia Pickens, Identity Euler, Imnotgoing Sideways, Innula Zenovka, Iyoba Tarantal, Jack Abraham, Jagga Meredith, Jennifer Boyle, Jeremy Marquez, Jessica Qin, Jinx Nordberg, Jo Bernandes, Jocial Sonnenkern, Joel Savard, Jondan Lundquist, Josef Munster, Josette Windlow, Juilan Tripsa, Juro Kothari, Justin RiversRunRed, Kagehi Kohn, Kaimen Takahe, Keklily Longfall, Ken Lavender, Kestral Karas, Khisme Nitely, Kimar Coba, Kithrak Kirkorian, Kitty Barnett, Kolor Fall, Komiko Okamoto, Korvel Noh, Larry Pixel, Leal Choche, len Starship, Lenae Munz, Lexi Frua, Lillie Cordeaux, Lizzy Macarthur, LSL Scientist, Luban Yiyuan, Luc Starsider, Maccus McCullough, Madison Blanc, Maggie Darwin, Mallory Destiny, Manx Wharton, Marc Claridge, Marc2 Sands, Matthew Anthony, Maxim RiversRunRed, Medhue Simoni, Melinda Latynina, Mencius Watts, Michi Lumin, Midian Farspire, Miles Glaz, Mindy Mathy, Mitch Wagner, Mo Hax, Mourna Biziou, Nao Noe, naofan Teardrop, Naomah Beaumont, Nathiel Siamendes, Nber Medici, Neko Link, Netpat Igaly, Neutron Chesnokov, Newfie Pendragon, Nicholai Laviscu, Nick Rhodes, Nicoladie Gymnast, Ollie Kubrick, Orenj Marat, Orion Delphis, Oryx Tempel, Parvati Silverweb, PeterPunk Mooney, Pixel Scientist, Pounce Teazle, Professor Noarlunga, Quantum Destiny, Quicksilver Hermes, Ralf Setsuko, RAT Quan, RedMokum Bravin, Revolution Perenti, Rezit Sideways, Rich Grainger, Rosco Teardrop, Rose Evans, Rudee Voom, RufusTT Horsefly, Saii Hallard, SaintLEOlions Zimer, Samm Larkham, Satanello Miami, SexySteven Morrisey, Sheet Spotter, Shnurui Troughton, sicarius Thorne, Sicarius Toxx, Sini Nubalo, SLB Wirefly, snowy Sidran, Soupa Segura, ST Mensing, Starshine Halasy, Stickman Ingmann, Synystyr Texan, Takeda Terrawyng, Tali Rosca, Templar Merlin, Tezcatlipoca Bisiani, Tiel Stonecutter, Tony Kembia, TouchaHoney Perhaps, Trey Reanimator, TriloByte Zanzibar, Trinity Dechou, Trinity Dejavu, Unlikely Quintessa, UsikuFarasi Kanarik, Veritas Raymaker, Vex Streeter, Viaticus Speculaas, Villain Baroque, Vixie Durant, Void Singer, Watty Berkson, Westley Schridde, Westley Streeter, Whimsy Winx, Winter Ventura, Wundur Primbee, xstorm Radek, YongYong Francois, Zak Westminster, Zana Kohime, Zaren Alexander, Zeja Pyle, ZenMondo Wormser, Zoex Flanagan, y muchos otros.
 
 
 
diff --git a/indra/newview/skins/default/xui/fr/floater_about.xml b/indra/newview/skins/default/xui/fr/floater_about.xml
index a1cbeecfb9..f963a40cd3 100644
--- a/indra/newview/skins/default/xui/fr/floater_about.xml
+++ b/indra/newview/skins/default/xui/fr/floater_about.xml
@@ -45,7 +45,7 @@ Version serveur vocal : [VOICE_VERSION]
 			<text_editor name="credits_editor">
 				Second Life existe grâce aux efforts de Philip, Tessa, Andrew, Cory, Ian, James, Phoenix, Ryan, Haney, Dan, Char, Ben, John, Tanya, Eddie, Richard, Mitch, Doug, Eric, Frank, Bruce, Aaron, Peter, Alice, Charlie, Debra, Eileen, Helen, Janet, Steffan, Steve, Tom, Mark, Hunter, Xenon, Burgess, Bill, Jim, Lee, Hamlet, Daniel, Jeff, Todd, Sarah, Tim, Stephanie, Colin, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Jack, Vektor, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Jesse, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Yuko, Makiko, Thomas, Harry, Seth, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Brad, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, Beez, Milo, Hermia, Red, Thrax, Gulliver, Joe, Sally, Paul, Jose, Rejean, Dore, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, Dustin, George, Del, Matthew, Cat, Jacqui, Adrian, Viola, Alfred, Noel, Irfan, Yool, Rika, Jane, Frontier, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Jeremy, JP, Jake, Anthony, Maurice, Madhavi, Leopard, Kyle, Joon, Bert, Belinda, Jon, Kristi, Bridie, Pramod, Socrates, Maria, Aric, Adreanne, Jay, Kari, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Colossus, Zen, BigPapi, Pastrami, Kurz, Mani, Neuro, Mel, Sardonyx, MJ, Rowan, Sgt, Elvis, Samuel, Leo, Bryan, Niko, Austin, Soft, Poppy, Rachel, Aki, Banzai, Alexa, Sue, Bender, CG, Angelo, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Rothman, Niall, Marin, Allison, Katie, Dawn, Dusty, Katt, Judy, Andrea, Ambroff, Infinity, Rico, Gail, Kalpana, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Maestro, Simone, Yang, T, Shannon, Nelson, Khanh, Scott, Courtney, Charlene, Quixote, Susan, Zed, Amanda, Katelin, Enkidu, Roxie, Esbee, JoRoan, Scarlet, Tay, Kevin, Wolfgang, Johnny, Ray, Andren, Merov, Bob, Rand, Howard, Callen, Heff, Galen, Newell, Dessie, Les, Michon, Jenelle, Geo, Siz, Shapiro, Pete, Calyle, Selene, Allen, Phoebe, Goldin, Kimmora, Dakota, Slaton, Lindquist, Zoey, Hari, Othello, Rohit, Sheldon, Petra, Viale, Gordon, Kaye, Pink, Ferny, Emerson, Davy, Bri, Chan, Juan, Robert, Terrence, Nathan, Carl, Ashley, JessieAnn, Huseby, Karina, Paris, Kurt, Rick, Lis, Kotler, Theeba, Lynx, Murphy, Doten, Taka, Norm, Jillian, Marcus, Mae, Novack, Esther, Perry, Dana, Ducot, Javier, Porter, Madison, Gecko, Dough, JR, Gisele, Crimp, Norie, Arch, Kimi, Fisher, Barbara, Jason, Peggy, Bernard, Jules, Leroy, Eva, Khederian, Campbell, Vogt, Masido, Karel, Torres, Lo, Breezer, Delby, Rountree, Anna, Servus, Rue, Itiaes, Chuck, Luna, Novella, Zaza, Wen, Gino, Lex, Cassandra, Limey, Nancy, Anukul, Silver, Brodesky, Jinsai, Squid, Gez, Rakesh, Ladan, Edelman, Marcet, Squire, Tatem, Tony, Jerm, Tia, Falcon, BK, Tiggs, Driscoll, Bacon, Timothee, Cru, Carmilla, Coyot, Webb, Kazu, Rudas, LJ, Sea, Ali Wallace, Bewest, Pup, Drub, Dragon, Inoshiro, Byron, Rhett, Xandix, Aimee, Fredrik, Thor, Teddy, Baron, Nelly, Ghengis, Epic, Eli, Stone, Grapes, Irie, Prep, Scobu, Valerie, Alain et bien d&apos;autres.
 
-Tous nos remerciements aux résidents suivants pour avoir testé cette version (la meilleure qui soit jusqu&apos;à présent) : Drew Dwi, Zai Lynch, Latif Khalifa, Ellla McMahon, Harleen Gretzky, Squirrel Wood, Malarthi Behemoth, Dante Tucker, Buckaroo Mu, Eddi Decosta, Dirk, Talamasca, Torben Trautman, Irene Muni, Lilly Zenovka, Vick Forcella, Sasy Scarborough, Gentle Welinder, Elric Anatine, Techwolf Lupindo, Dusan Writer, WolfPup Lowenhar, Marianne McCann, Fiachra Lach, Sitearm Madonna, Sudane Erato, Sahkolihaa Contepomi, Sachi Vixen, Questar Utu, Dimitrio Lewis, Matto Destiny, Scrim Pinion, Radio Signals, Psi Merlin, Pixel Gausman, Mel Vanbeeck, Laurent Bechir, Lamorna Proctor, Lares Carter, Gwyneth Llewelyn, Hydra Shaftoe, Holger Gilruth, Gentle Heron, Carla Broek, Boroondas Gupte, Fury Rosewood, Flower Ducatillon, Colpo Wexler, gwampa Lomu, Borg Capalini, Beansy Twine, Ardy Lay, , 45ms Zhong, Adeon Writer, Aeonix Aeon, Ai Austin, Aiko Ying, Alexandrea Fride, Alliez Mysterio, Annie Milestone, Annika Genezzia, Ansariel Hiller, ArminasX Saiman, Arya Braveheart, Asaeda Meltingdots, Asturkon Jua, Avallyn Oakleaf, Avatar Quinzet, BabyA Littlething, Bacchus Ireto, Bazaar, Riva, Benjamin Bigdipper, Beth Walcher, Bezilon Kasei, Biancaluce Robbiani, Bill Walach, blakopal Galicia, Blitzckreed Levenque, Bryn Oh, Callipygian Christensen, Cap Carver, Carr Arbenlow, Chantal Harvey, Charles Courtois, Charlie Sazaland, Cherry Cheevers, ChickyBabes Zuzu, Christopher  Organiser, Ciaran Laval, Clara Young, Celierra Darling, Corinne Helendale, Corro Moseley, Coughdrop Littlething, Darien Caldwell, Dartagan Shepherd, Debs Regent, Decro Schmooz, Denim Kamachi, DiJodi Dubratt, Dil Spitz, Edgware Marker, Egehan Dryke, Emma Portilo, Emmie Fairymeadow, Evangelista Emerald, Faelon Swordthain, Frenchimmo Sabra, Gaberoonie Zanzibar, Ganymedes Costagravas, Gene Frostbite, GeneJ Composer, Giggles Littlebird, Grady Echegaray, Guni Greenstein, Gypsy Tripsa, Hackshaven Harford, Ham Rambler, Han Shuffle, Hanglow Short, Hatzfeld Runo, herina Bode, Horatio Freund, Hypatia Callisto, Hypatia Pickens, Identity Euler, Imnotgoing Sideways, Innula Zenovka, Iyoba Tarantal, Jack Abraham, Jagga Meredith, Jennifer Boyle, Jeremy Marquez, Jessica Qin, Jinx Nordberg, Jo Bernandes, Jocial Sonnenkern, Joel Savard, Jondan Lundquist, Josef Munster, Josette Windlow, Juilan Tripsa, Juro Kothari, Justin RiversRunRed, Kagehi Kohn, Kaimen Takahe, Keklily Longfall, Ken Lavender, Kestral Karas, Khisme Nitely, Kimar Coba, Kithrak Kirkorian, Kitty Barnett, Kolor Fall, Komiko Okamoto, Korvel Noh, Larry Pixel, Leal Choche, len Starship, Lenae Munz, Lexi Frua, Lillie Cordeaux, Lizzy Macarthur, LSL Scientist, Luban Yiyuan, Luc Starsider, Maccus McCullough, Madison Blanc, Maggie Darwin, Mallory Destiny, Manx Wharton, Marc Claridge, Marc2 Sands, Matthew Anthony, Maxim RiversRunRed, Medhue Simoni, Melinda Latynina, Mencius Watts, Michi Lumin, Midian Farspire, Miles Glaz, Mindy Mathy, Mitch Wagner, Mo Hax, Mourna Biziou, Nao Noe, naofan Teardrop, Naomah Beaumont, Nathiel Siamendes, Nber Medici, Neko Link, Netpat Igaly, Neutron Chesnokov, Newfie Pendragon, Nicholai Laviscu, Nick Rhodes, Nicoladie Gymnast, Ollie Kubrick, Orenj Marat, Orion Delphis, Oryx Tempel, Parvati Silverweb, PeterPunk Mooney, Pixel Scientist, Pounce Teazle, Professor Noarlunga, Quantum Destiny, Quicksilver Hermes, Ralf Setsuko, RAT Quan, RedMokum Bravin, Revolution Perenti, Rezit Sideways, Rich Grainger, Rosco Teardrop, Rose Evans, Rudee Voom, RufusTT Horsefly, Saii Hallard, SaintLEOlions Zimer, Samm Larkham, Satanello Miami, SexySteven Morrisey, Sheet Spotter, Shnurui Troughton, sicarius Thorne, Sicarius Toxx, Sini Nubalo, SLB Wirefly, snowy Sidran, Soupa Segura, ST Mensing, Starshine Halasy, Stickman Ingmann, Synystyr Texan, Takeda Terrawyng, Tali Rosca, Templar Merlin, Tezcatlipoca Bisiani, Tiel Stonecutter, Tony Kembia, TouchaHoney Perhaps, Trey Reanimator, TriloByte Zanzibar, Trinity Dechou, Trinity Dejavu, Unlikely Quintessa, UsikuFarasi Kanarik, Veritas Raymaker, Vex Streeter, Viaticus Speculaas, Villain Baroque, Vixie Durant, Void Singer, Watty Berkson, Westley Schridde, Westley Streeter, Whimsy Winx, Winter Ventura, Wundur Primbee, xstorm Radek, YongYong Francois, Zak Westminster, Zana Kohime, Zaren Alexander, Zeja Pyle, ZenMondo Wormser, Zoex Flanagan et bien d&apos;autres.
+Tous nos remerciements aux résidents suivants pour avoir testé cette version (la meilleure qui soit jusqu&apos;à présent) : Drew Dwi, Zai Lynch, Latif Khalifa, Ellla McMahon, Harleen Gretzky, Squirrel Wood, Malarthi Behemoth, Dante Tucker, Buckaroo Mu, Eddi Decosta, Dirk, Talamasca, Torben Trautman, Irene Muni, Aralara Rajal, Aura Dirval, Cayu Cluny, Eva Rau, FreeSL Aeon, Frontera Thor, Inma Rau, Lunita Savira, Minerva Memel, Polo Gufler, Xiki Luik, Lilly Zenovka, Vick Forcella, Sasy Scarborough, Gentle Welinder, Elric Anatine, Techwolf Lupindo, Dusan Writer, WolfPup Lowenhar, Marianne McCann, Fiachra Lach, Sitearm Madonna, Sudane Erato, Sahkolihaa Contepomi, Sachi Vixen, Questar Utu, Dimitrio Lewis, Matto Destiny, Scrim Pinion, Radio Signals, Psi Merlin, Pixel Gausman, Mel Vanbeeck, Laurent Bechir, Lamorna Proctor, Lares Carter, Gwyneth Llewelyn, Hydra Shaftoe, Holger Gilruth, Gentle Heron, Carla Broek, Boroondas Gupte, Fury Rosewood, Flower Ducatillon, Colpo Wexler, gwampa Lomu, Borg Capalini, Beansy Twine, Ardy Lay, , 45ms Zhong, Adeon Writer, Aeonix Aeon, Ai Austin, Aiko Ying, Alexandrea Fride, Alliez Mysterio, Annie Milestone, Annika Genezzia, Ansariel Hiller, ArminasX Saiman, Arya Braveheart, Asaeda Meltingdots, Asturkon Jua, Avallyn Oakleaf, Avatar Quinzet, BabyA Littlething, Bacchus Ireto, Bazaar, Riva, Benjamin Bigdipper, Beth Walcher, Bezilon Kasei, Biancaluce Robbiani, Bill Walach, blakopal Galicia, Blitzckreed Levenque, Bryn Oh, Callipygian Christensen, Cap Carver, Carr Arbenlow, Chantal Harvey, Charles Courtois, Charlie Sazaland, Cherry Cheevers, ChickyBabes Zuzu, Christopher  Organiser, Ciaran Laval, Clara Young, Celierra Darling, Corinne Helendale, Corro Moseley, Coughdrop Littlething, Darien Caldwell, Dartagan Shepherd, Debs Regent, Decro Schmooz, Denim Kamachi, DiJodi Dubratt, Dil Spitz, Edgware Marker, Egehan Dryke, Emma Portilo, Emmie Fairymeadow, Evangelista Emerald, Faelon Swordthain, Frenchimmo Sabra, Gaberoonie Zanzibar, Ganymedes Costagravas, Gene Frostbite, GeneJ Composer, Giggles Littlebird, Grady Echegaray, Guni Greenstein, Gypsy Tripsa, Hackshaven Harford, Ham Rambler, Han Shuffle, Hanglow Short, Hatzfeld Runo, herina Bode, Horatio Freund, Hypatia Callisto, Hypatia Pickens, Identity Euler, Imnotgoing Sideways, Innula Zenovka, Iyoba Tarantal, Jack Abraham, Jagga Meredith, Jennifer Boyle, Jeremy Marquez, Jessica Qin, Jinx Nordberg, Jo Bernandes, Jocial Sonnenkern, Joel Savard, Jondan Lundquist, Josef Munster, Josette Windlow, Juilan Tripsa, Juro Kothari, Justin RiversRunRed, Kagehi Kohn, Kaimen Takahe, Keklily Longfall, Ken Lavender, Kestral Karas, Khisme Nitely, Kimar Coba, Kithrak Kirkorian, Kitty Barnett, Kolor Fall, Komiko Okamoto, Korvel Noh, Larry Pixel, Leal Choche, len Starship, Lenae Munz, Lexi Frua, Lillie Cordeaux, Lizzy Macarthur, LSL Scientist, Luban Yiyuan, Luc Starsider, Maccus McCullough, Madison Blanc, Maggie Darwin, Mallory Destiny, Manx Wharton, Marc Claridge, Marc2 Sands, Matthew Anthony, Maxim RiversRunRed, Medhue Simoni, Melinda Latynina, Mencius Watts, Michi Lumin, Midian Farspire, Miles Glaz, Mindy Mathy, Mitch Wagner, Mo Hax, Mourna Biziou, Nao Noe, naofan Teardrop, Naomah Beaumont, Nathiel Siamendes, Nber Medici, Neko Link, Netpat Igaly, Neutron Chesnokov, Newfie Pendragon, Nicholai Laviscu, Nick Rhodes, Nicoladie Gymnast, Ollie Kubrick, Orenj Marat, Orion Delphis, Oryx Tempel, Parvati Silverweb, PeterPunk Mooney, Pixel Scientist, Pounce Teazle, Professor Noarlunga, Quantum Destiny, Quicksilver Hermes, Ralf Setsuko, RAT Quan, RedMokum Bravin, Revolution Perenti, Rezit Sideways, Rich Grainger, Rosco Teardrop, Rose Evans, Rudee Voom, RufusTT Horsefly, Saii Hallard, SaintLEOlions Zimer, Samm Larkham, Satanello Miami, SexySteven Morrisey, Sheet Spotter, Shnurui Troughton, sicarius Thorne, Sicarius Toxx, Sini Nubalo, SLB Wirefly, snowy Sidran, Soupa Segura, ST Mensing, Starshine Halasy, Stickman Ingmann, Synystyr Texan, Takeda Terrawyng, Tali Rosca, Templar Merlin, Tezcatlipoca Bisiani, Tiel Stonecutter, Tony Kembia, TouchaHoney Perhaps, Trey Reanimator, TriloByte Zanzibar, Trinity Dechou, Trinity Dejavu, Unlikely Quintessa, UsikuFarasi Kanarik, Veritas Raymaker, Vex Streeter, Viaticus Speculaas, Villain Baroque, Vixie Durant, Void Singer, Watty Berkson, Westley Schridde, Westley Streeter, Whimsy Winx, Winter Ventura, Wundur Primbee, xstorm Radek, YongYong Francois, Zak Westminster, Zana Kohime, Zaren Alexander, Zeja Pyle, ZenMondo Wormser, Zoex Flanagan et bien d&apos;autres.
 
 
 
diff --git a/indra/newview/skins/default/xui/it/floater_about.xml b/indra/newview/skins/default/xui/it/floater_about.xml
index 026b7b7616..140f7bdc14 100644
--- a/indra/newview/skins/default/xui/it/floater_about.xml
+++ b/indra/newview/skins/default/xui/it/floater_about.xml
@@ -45,7 +45,7 @@ Versione Server voice: [VOICE_VERSION]
 			<text_editor name="credits_editor">
 				Second Life ti è offerto da Philip, Tessa, Andrew, Cory, Ian, James, Phoenix, Ryan, Haney, Dan, Char, Ben, John, Tanya, Eddie, Richard, Mitch, Doug, Eric, Frank, Bruce, Aaron, Peter, Alice, Charlie, Debra, Eileen, Helen, Janet, Steffan, Steve, Tom, Mark, Hunter, Xenon, Burgess, Bill, Jim, Lee, Hamlet, Daniel, Jeff, Todd, Sarah, Tim, Stephanie, Colin, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Jack, Vektor, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Jesse, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Yuko, Makiko, Thomas, Harry, Seth, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Brad, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, Beez, Milo, Hermia, Red, Thrax, Gulliver, Joe, Sally, Paul, Jose, Rejean, Dore, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, Dustin, George, Del, Matthew, Cat, Jacqui, Adrian, Viola, Alfred, Noel, Irfan, Yool, Rika, Jane, Frontier, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Jeremy, JP, Jake, Anthony, Maurice, Madhavi, Leopard, Kyle, Joon, Bert, Belinda, Jon, Kristi, Bridie, Pramod, Socrates, Maria, Aric, Adreanne, Jay, Kari, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Colossus, Zen, BigPapi, Pastrami, Kurz, Mani, Neuro, Mel, Sardonyx, MJ, Rowan, Sgt, Elvis, Samuel, Leo, Bryan, Niko, Austin, Soft, Poppy, Rachel, Aki, Banzai, Alexa, Sue, Bender, CG, Angelo, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Rothman, Niall, Marin, Allison, Katie, Dawn, Dusty, Katt, Judy, Andrea, Ambroff, Infinity, Rico, Gail, Kalpana, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Maestro, Simone, Yang, T, Shannon, Nelson, Khanh, Scott, Courtney, Charlene, Quixote, Susan, Zed, Amanda, Katelin, Enkidu, Roxie, Esbee, JoRoan, Scarlet, Tay, Kevin, Wolfgang, Johnny, Ray, Andren, Merov, Bob, Rand, Howard, Callen, Heff, Galen, Newell, Dessie, Les, Michon, Jenelle, Geo, Siz, Shapiro, Pete, Calyle, Selene, Allen, Phoebe, Goldin, Kimmora, Dakota, Slaton, Lindquist, Zoey, Hari, Othello, Rohit, Sheldon, Petra, Viale, Gordon, Kaye, Pink, Ferny, Emerson, Davy, Bri, Chan, Juan, Robert, Terrence, Nathan, Carl, Ashley, JessieAnn, Huseby, Karina, Paris, Kurt, Rick, Lis, Kotler, Theeba, Lynx, Murphy, Doten, Taka, Norm, Jillian, Marcus, Mae, Novack, Esther, Perry, Dana, Ducot, Javier, Porter, Madison, Gecko, Dough, JR, Gisele, Crimp, Norie, Arch, Kimi, Fisher, Barbara, Jason, Peggy, Bernard, Jules, Leroy, Eva, Khederian, Campbell, Vogt, Masido, Karel, Torres, Lo, Breezer, Delby, Rountree, Anna, Servus, Rue, Itiaes, Chuck, Luna, Novella, Zaza, Wen, Gino, Lex, Cassandra, Limey, Nancy, Anukul, Silver, Brodesky, Jinsai, Squid, Gez, Rakesh, Ladan, Edelman, Marcet, Squire, Tatem, Tony, Jerm, Tia, Falcon, BK, Tiggs, Driscoll, Bacon, Timothee, Cru, Carmilla, Coyot, Webb, Kazu, Rudas, LJ, Sea, Ali Wallace, Bewest, Pup, Drub, Dragon, Inoshiro, Byron, Rhett, Xandix, Aimee, Fredrik, Thor, Teddy, Baron, Nelly, Ghengis, Epic, Eli, Stone, Grapes, Irie, Prep, Scobu, Valerie, Alain e molti altri ancora.
 
-Si ringraziano i seguenti residenti per aver contribuito a rendere questa versione la migliore possibile: Drew Dwi, Zai Lynch, Latif Khalifa, Ellla McMahon, Harleen Gretzky, Squirrel Wood, Malarthi Behemoth, Dante Tucker, Buckaroo Mu, Eddi Decosta, Dirk, Talamasca, Torben Trautman, Irene Muni, Lilly Zenovka, Vick Forcella, Sasy Scarborough, Gentle Welinder, Elric Anatine, Techwolf Lupindo, Dusan Writer, WolfPup Lowenhar, Marianne McCann, Fiachra Lach, Sitearm Madonna, Sudane Erato, Sahkolihaa Contepomi, Sachi Vixen, Questar Utu, Dimitrio Lewis, Matto Destiny, Scrim Pinion, Radio Signals, Psi Merlin, Pixel Gausman, Mel Vanbeeck, Laurent Bechir, Lamorna Proctor, Lares Carter, Gwyneth Llewelyn, Hydra Shaftoe, Holger Gilruth, Gentle Heron, Carla Broek, Boroondas Gupte, Fury Rosewood, Flower Ducatillon, Colpo Wexler, gwampa Lomu, Borg Capalini, Beansy Twine, Ardy Lay, , 45ms Zhong, Adeon Writer, Aeonix Aeon, Ai Austin, Aiko Ying, Alexandrea Fride, Alliez Mysterio, Annie Milestone, Annika Genezzia, Ansariel Hiller, ArminasX Saiman, Arya Braveheart, Asaeda Meltingdots, Asturkon Jua, Avallyn Oakleaf, Avatar Quinzet, BabyA Littlething, Bacchus Ireto, Bazaar, Riva, Benjamin Bigdipper, Beth Walcher, Bezilon Kasei, Biancaluce Robbiani, Bill Walach, blakopal Galicia, Blitzckreed Levenque, Bryn Oh, Callipygian Christensen, Cap Carver, Carr Arbenlow, Chantal Harvey, Charles Courtois, Charlie Sazaland, Cherry Cheevers, ChickyBabes Zuzu, Christopher  Organiser, Ciaran Laval, Clara Young, Celierra Darling, Corinne Helendale, Corro Moseley, Coughdrop Littlething, Darien Caldwell, Dartagan Shepherd, Debs Regent, Decro Schmooz, Denim Kamachi, DiJodi Dubratt, Dil Spitz, Edgware Marker, Egehan Dryke, Emma Portilo, Emmie Fairymeadow, Evangelista Emerald, Faelon Swordthain, Frenchimmo Sabra, Gaberoonie Zanzibar, Ganymedes Costagravas, Gene Frostbite, GeneJ Composer, Giggles Littlebird, Grady Echegaray, Guni Greenstein, Gypsy Tripsa, Hackshaven Harford, Ham Rambler, Han Shuffle, Hanglow Short, Hatzfeld Runo, herina Bode, Horatio Freund, Hypatia Callisto, Hypatia Pickens, Identity Euler, Imnotgoing Sideways, Innula Zenovka, Iyoba Tarantal, Jack Abraham, Jagga Meredith, Jennifer Boyle, Jeremy Marquez, Jessica Qin, Jinx Nordberg, Jo Bernandes, Jocial Sonnenkern, Joel Savard, Jondan Lundquist, Josef Munster, Josette Windlow, Juilan Tripsa, Juro Kothari, Justin RiversRunRed, Kagehi Kohn, Kaimen Takahe, Keklily Longfall, Ken Lavender, Kestral Karas, Khisme Nitely, Kimar Coba, Kithrak Kirkorian, Kitty Barnett, Kolor Fall, Komiko Okamoto, Korvel Noh, Larry Pixel, Leal Choche, len Starship, Lenae Munz, Lexi Frua, Lillie Cordeaux, Lizzy Macarthur, LSL Scientist, Luban Yiyuan, Luc Starsider, Maccus McCullough, Madison Blanc, Maggie Darwin, Mallory Destiny, Manx Wharton, Marc Claridge, Marc2 Sands, Matthew Anthony, Maxim RiversRunRed, Medhue Simoni, Melinda Latynina, Mencius Watts, Michi Lumin, Midian Farspire, Miles Glaz, Mindy Mathy, Mitch Wagner, Mo Hax, Mourna Biziou, Nao Noe, naofan Teardrop, Naomah Beaumont, Nathiel Siamendes, Nber Medici, Neko Link, Netpat Igaly, Neutron Chesnokov, Newfie Pendragon, Nicholai Laviscu, Nick Rhodes, Nicoladie Gymnast, Ollie Kubrick, Orenj Marat, Orion Delphis, Oryx Tempel, Parvati Silverweb, PeterPunk Mooney, Pixel Scientist, Pounce Teazle, Professor Noarlunga, Quantum Destiny, Quicksilver Hermes, Ralf Setsuko, RAT Quan, RedMokum Bravin, Revolution Perenti, Rezit Sideways, Rich Grainger, Rosco Teardrop, Rose Evans, Rudee Voom, RufusTT Horsefly, Saii Hallard, SaintLEOlions Zimer, Samm Larkham, Satanello Miami, SexySteven Morrisey, Sheet Spotter, Shnurui Troughton, sicarius Thorne, Sicarius Toxx, Sini Nubalo, SLB Wirefly, snowy Sidran, Soupa Segura, ST Mensing, Starshine Halasy, Stickman Ingmann, Synystyr Texan, Takeda Terrawyng, Tali Rosca, Templar Merlin, Tezcatlipoca Bisiani, Tiel Stonecutter, Tony Kembia, TouchaHoney Perhaps, Trey Reanimator, TriloByte Zanzibar, Trinity Dechou, Trinity Dejavu, Unlikely Quintessa, UsikuFarasi Kanarik, Veritas Raymaker, Vex Streeter, Viaticus Speculaas, Villain Baroque, Vixie Durant, Void Singer, Watty Berkson, Westley Schridde, Westley Streeter, Whimsy Winx, Winter Ventura, Wundur Primbee, xstorm Radek, YongYong Francois, Zak Westminster, Zana Kohime, Zaren Alexander, Zeja Pyle, ZenMondo Wormser, Zoex Flanagan e molti altri ancora.
+Si ringraziano i seguenti residenti per aver contribuito a rendere questa versione la migliore possibile: Drew Dwi, Zai Lynch, Latif Khalifa, Ellla McMahon, Harleen Gretzky, Squirrel Wood, Malarthi Behemoth, Dante Tucker, Buckaroo Mu, Eddi Decosta, Dirk, Talamasca, Torben Trautman, Irene Muni, Aralara Rajal, Aura Dirval, Cayu Cluny, Eva Rau, FreeSL Aeon, Frontera Thor, Inma Rau, Lunita Savira, Minerva Memel, Polo Gufler, Xiki Luik, Lilly Zenovka, Vick Forcella, Sasy Scarborough, Gentle Welinder, Elric Anatine, Techwolf Lupindo, Dusan Writer, WolfPup Lowenhar, Marianne McCann, Fiachra Lach, Sitearm Madonna, Sudane Erato, Sahkolihaa Contepomi, Sachi Vixen, Questar Utu, Dimitrio Lewis, Matto Destiny, Scrim Pinion, Radio Signals, Psi Merlin, Pixel Gausman, Mel Vanbeeck, Laurent Bechir, Lamorna Proctor, Lares Carter, Gwyneth Llewelyn, Hydra Shaftoe, Holger Gilruth, Gentle Heron, Carla Broek, Boroondas Gupte, Fury Rosewood, Flower Ducatillon, Colpo Wexler, gwampa Lomu, Borg Capalini, Beansy Twine, Ardy Lay, , 45ms Zhong, Adeon Writer, Aeonix Aeon, Ai Austin, Aiko Ying, Alexandrea Fride, Alliez Mysterio, Annie Milestone, Annika Genezzia, Ansariel Hiller, ArminasX Saiman, Arya Braveheart, Asaeda Meltingdots, Asturkon Jua, Avallyn Oakleaf, Avatar Quinzet, BabyA Littlething, Bacchus Ireto, Bazaar, Riva, Benjamin Bigdipper, Beth Walcher, Bezilon Kasei, Biancaluce Robbiani, Bill Walach, blakopal Galicia, Blitzckreed Levenque, Bryn Oh, Callipygian Christensen, Cap Carver, Carr Arbenlow, Chantal Harvey, Charles Courtois, Charlie Sazaland, Cherry Cheevers, ChickyBabes Zuzu, Christopher  Organiser, Ciaran Laval, Clara Young, Celierra Darling, Corinne Helendale, Corro Moseley, Coughdrop Littlething, Darien Caldwell, Dartagan Shepherd, Debs Regent, Decro Schmooz, Denim Kamachi, DiJodi Dubratt, Dil Spitz, Edgware Marker, Egehan Dryke, Emma Portilo, Emmie Fairymeadow, Evangelista Emerald, Faelon Swordthain, Frenchimmo Sabra, Gaberoonie Zanzibar, Ganymedes Costagravas, Gene Frostbite, GeneJ Composer, Giggles Littlebird, Grady Echegaray, Guni Greenstein, Gypsy Tripsa, Hackshaven Harford, Ham Rambler, Han Shuffle, Hanglow Short, Hatzfeld Runo, herina Bode, Horatio Freund, Hypatia Callisto, Hypatia Pickens, Identity Euler, Imnotgoing Sideways, Innula Zenovka, Iyoba Tarantal, Jack Abraham, Jagga Meredith, Jennifer Boyle, Jeremy Marquez, Jessica Qin, Jinx Nordberg, Jo Bernandes, Jocial Sonnenkern, Joel Savard, Jondan Lundquist, Josef Munster, Josette Windlow, Juilan Tripsa, Juro Kothari, Justin RiversRunRed, Kagehi Kohn, Kaimen Takahe, Keklily Longfall, Ken Lavender, Kestral Karas, Khisme Nitely, Kimar Coba, Kithrak Kirkorian, Kitty Barnett, Kolor Fall, Komiko Okamoto, Korvel Noh, Larry Pixel, Leal Choche, len Starship, Lenae Munz, Lexi Frua, Lillie Cordeaux, Lizzy Macarthur, LSL Scientist, Luban Yiyuan, Luc Starsider, Maccus McCullough, Madison Blanc, Maggie Darwin, Mallory Destiny, Manx Wharton, Marc Claridge, Marc2 Sands, Matthew Anthony, Maxim RiversRunRed, Medhue Simoni, Melinda Latynina, Mencius Watts, Michi Lumin, Midian Farspire, Miles Glaz, Mindy Mathy, Mitch Wagner, Mo Hax, Mourna Biziou, Nao Noe, naofan Teardrop, Naomah Beaumont, Nathiel Siamendes, Nber Medici, Neko Link, Netpat Igaly, Neutron Chesnokov, Newfie Pendragon, Nicholai Laviscu, Nick Rhodes, Nicoladie Gymnast, Ollie Kubrick, Orenj Marat, Orion Delphis, Oryx Tempel, Parvati Silverweb, PeterPunk Mooney, Pixel Scientist, Pounce Teazle, Professor Noarlunga, Quantum Destiny, Quicksilver Hermes, Ralf Setsuko, RAT Quan, RedMokum Bravin, Revolution Perenti, Rezit Sideways, Rich Grainger, Rosco Teardrop, Rose Evans, Rudee Voom, RufusTT Horsefly, Saii Hallard, SaintLEOlions Zimer, Samm Larkham, Satanello Miami, SexySteven Morrisey, Sheet Spotter, Shnurui Troughton, sicarius Thorne, Sicarius Toxx, Sini Nubalo, SLB Wirefly, snowy Sidran, Soupa Segura, ST Mensing, Starshine Halasy, Stickman Ingmann, Synystyr Texan, Takeda Terrawyng, Tali Rosca, Templar Merlin, Tezcatlipoca Bisiani, Tiel Stonecutter, Tony Kembia, TouchaHoney Perhaps, Trey Reanimator, TriloByte Zanzibar, Trinity Dechou, Trinity Dejavu, Unlikely Quintessa, UsikuFarasi Kanarik, Veritas Raymaker, Vex Streeter, Viaticus Speculaas, Villain Baroque, Vixie Durant, Void Singer, Watty Berkson, Westley Schridde, Westley Streeter, Whimsy Winx, Winter Ventura, Wundur Primbee, xstorm Radek, YongYong Francois, Zak Westminster, Zana Kohime, Zaren Alexander, Zeja Pyle, ZenMondo Wormser, Zoex Flanagan e molti altri ancora.
 
 
 
diff --git a/indra/newview/skins/default/xui/ja/floater_about.xml b/indra/newview/skins/default/xui/ja/floater_about.xml
index d2765eb0c8..61fedede35 100644
--- a/indra/newview/skins/default/xui/ja/floater_about.xml
+++ b/indra/newview/skins/default/xui/ja/floater_about.xml
@@ -45,7 +45,7 @@ Qt Webkit バージョン: [QT_WEBKIT_VERSION]
 			<text_editor name="credits_editor">
 				Second Life は、Philip, Tessa, Andrew, Cory, Ian, James, Phoenix, Ryan, Haney, Dan, Char, Ben, John, Tanya, Eddie, Richard, Mitch, Doug, Eric, Frank, Bruce, Aaron, Peter, Alice, Charlie, Debra, Eileen, Helen, Janet, Steffan, Steve, Tom, Mark, Hunter, Xenon, Burgess, Bill, Jim, Lee, Hamlet, Daniel, Jeff, Todd, Sarah, Tim, Stephanie, Colin, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Jack, Vektor, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Jesse, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Yuko, Makiko, Thomas, Harry, Seth, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Brad, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, Beez, Milo, Hermia, Red, Thrax, Gulliver, Joe, Sally, Paul, Jose, Rejean, Dore, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, Dustin, George, Del, Matthew, Cat, Jacqui, Adrian, Viola, Alfred, Noel, Irfan, Yool, Rika, Jane, Frontier, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Jeremy, JP, Jake, Anthony, Maurice, Madhavi, Leopard, Kyle, Joon, Bert, Belinda, Jon, Kristi, Bridie, Pramod, Socrates, Maria, Aric, Adreanne, Jay, Kari, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Colossus, Zen, BigPapi, Pastrami, Kurz, Mani, Neuro, Mel, Sardonyx, MJ, Rowan, Sgt, Elvis, Samuel, Leo, Bryan, Niko, Austin, Soft, Poppy, Rachel, Aki, Banzai, Alexa, Sue, Bender, CG, Angelo, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Rothman, Niall, Marin, Allison, Katie, Dawn, Dusty, Katt, Judy, Andrea, Ambroff, Infinity, Rico, Gail, Kalpana, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Maestro, Simone, Yang, T, Shannon, Nelson, Khanh, Scott, Courtney, Charlene, Quixote, Susan, Zed, Amanda, Katelin, Enkidu, Roxie, Esbee, JoRoan, Scarlet, Tay, Kevin, Wolfgang, Johnny, Ray, Andren, Merov, Bob, Rand, Howard, Callen, Heff, Galen, Newell, Dessie, Les, Michon, Jenelle, Geo, Siz, Shapiro, Pete, Calyle, Selene, Allen, Phoebe, Goldin, Kimmora, Dakota, Slaton, Lindquist, Zoey, Hari, Othello, Rohit, Sheldon, Petra, Viale, Gordon, Kaye, Pink, Ferny, Emerson, Davy, Bri, Chan, Juan, Robert, Terrence, Nathan, Carl, Ashley, JessieAnn, Huseby, Karina, Paris, Kurt, Rick, Lis, Kotler, Theeba, Lynx, Murphy, Doten, Taka, Norm, Jillian, Marcus, Mae, Novack, Esther, Perry, Dana, Ducot, Javier, Porter, Madison, Gecko, Dough, JR, Gisele, Crimp, Norie, Arch, Kimi, Fisher, Barbara, Jason, Peggy, Bernard, Jules, Leroy, Eva, Khederian, Campbell, Vogt, Masido, Karel, Torres, Lo, Breezer, Delby, Rountree, Anna, Servus, Rue, Itiaes, Chuck, Luna, Novella, Zaza, Wen, Gino, Lex, Cassandra, Limey, Nancy, Anukul, Silver, Brodesky, Jinsai, Squid, Gez, Rakesh, Ladan, Edelman, Marcet, Squire, Tatem, Tony, Jerm, Tia, Falcon, BK, Tiggs, Driscoll, Bacon, Timothee, Cru, Carmilla, Coyot, Webb, Kazu, Rudas, LJ, Sea, Ali Wallace, Bewest, Pup, Drub, Dragon, Inoshiro, Byron, Rhett, Xandix, Aimee, Fredrik, Thor, Teddy, Baron, Nelly, Ghengis, Epic, Eli, Stone, Grapes, Irie, Prep, Scobu, Valerie, Alain その他大勢の方々によって提供されています。
 
-現在最も優れたバージョンとなるようご協力いただいた次の住人の皆様に深く感謝いたします。 Drew Dwi, Zai Lynch, Latif Khalifa, Ellla McMahon, Harleen Gretzky, Squirrel Wood, Malarthi Behemoth, Dante Tucker, Buckaroo Mu, Eddi Decosta, Dirk, Talamasca, Torben Trautman, Irene Muni, Lilly Zenovka, Vick Forcella, Sasy Scarborough, Gentle Welinder, Elric Anatine, Techwolf Lupindo, Dusan Writer, WolfPup Lowenhar, Marianne McCann, Fiachra Lach, Sitearm Madonna, Sudane Erato, Sahkolihaa Contepomi, Sachi Vixen, Questar Utu, Dimitrio Lewis, Matto Destiny, Scrim Pinion, Radio Signals, Psi Merlin, Pixel Gausman, Mel Vanbeeck, Laurent Bechir, Lamorna Proctor, Lares Carter, Gwyneth Llewelyn, Hydra Shaftoe, Holger Gilruth, Gentle Heron, Carla Broek, Boroondas Gupte, Fury Rosewood, Flower Ducatillon, Colpo Wexler, gwampa Lomu, Borg Capalini, Beansy Twine, Ardy Lay, , 45ms Zhong, Adeon Writer, Aeonix Aeon, Ai Austin, Aiko Ying, Alexandrea Fride, Alliez Mysterio, Annie Milestone, Annika Genezzia, Ansariel Hiller, ArminasX Saiman, Arya Braveheart, Asaeda Meltingdots, Asturkon Jua, Avallyn Oakleaf, Avatar Quinzet, BabyA Littlething, Bacchus Ireto, Bazaar, Riva, Benjamin Bigdipper, Beth Walcher, Bezilon Kasei, Biancaluce Robbiani, Bill Walach, blakopal Galicia, Blitzckreed Levenque, Bryn Oh, Callipygian Christensen, Cap Carver, Carr Arbenlow, Chantal Harvey, Charles Courtois, Charlie Sazaland, Cherry Cheevers, ChickyBabes Zuzu, Christopher  Organiser, Ciaran Laval, Clara Young, Celierra Darling, Corinne Helendale, Corro Moseley, Coughdrop Littlething, Darien Caldwell, Dartagan Shepherd, Debs Regent, Decro Schmooz, Denim Kamachi, DiJodi Dubratt, Dil Spitz, Edgware Marker, Egehan Dryke, Emma Portilo, Emmie Fairymeadow, Evangelista Emerald, Faelon Swordthain, Frenchimmo Sabra, Gaberoonie Zanzibar, Ganymedes Costagravas, Gene Frostbite, GeneJ Composer, Giggles Littlebird, Grady Echegaray, Guni Greenstein, Gypsy Tripsa, Hackshaven Harford, Ham Rambler, Han Shuffle, Hanglow Short, Hatzfeld Runo, herina Bode, Horatio Freund, Hypatia Callisto, Hypatia Pickens, Identity Euler, Imnotgoing Sideways, Innula Zenovka, Iyoba Tarantal, Jack Abraham, Jagga Meredith, Jennifer Boyle, Jeremy Marquez, Jessica Qin, Jinx Nordberg, Jo Bernandes, Jocial Sonnenkern, Joel Savard, Jondan Lundquist, Josef Munster, Josette Windlow, Juilan Tripsa, Juro Kothari, Justin RiversRunRed, Kagehi Kohn, Kaimen Takahe, Keklily Longfall, Ken Lavender, Kestral Karas, Khisme Nitely, Kimar Coba, Kithrak Kirkorian, Kitty Barnett, Kolor Fall, Komiko Okamoto, Korvel Noh, Larry Pixel, Leal Choche, len Starship, Lenae Munz, Lexi Frua, Lillie Cordeaux, Lizzy Macarthur, LSL Scientist, Luban Yiyuan, Luc Starsider, Maccus McCullough, Madison Blanc, Maggie Darwin, Mallory Destiny, Manx Wharton, Marc Claridge, Marc2 Sands, Matthew Anthony, Maxim RiversRunRed, Medhue Simoni, Melinda Latynina, Mencius Watts, Michi Lumin, Midian Farspire, Miles Glaz, Mindy Mathy, Mitch Wagner, Mo Hax, Mourna Biziou, Nao Noe, naofan Teardrop, Naomah Beaumont, Nathiel Siamendes, Nber Medici, Neko Link, Netpat Igaly, Neutron Chesnokov, Newfie Pendragon, Nicholai Laviscu, Nick Rhodes, Nicoladie Gymnast, Ollie Kubrick, Orenj Marat, Orion Delphis, Oryx Tempel, Parvati Silverweb, PeterPunk Mooney, Pixel Scientist, Pounce Teazle, Professor Noarlunga, Quantum Destiny, Quicksilver Hermes, Ralf Setsuko, RAT Quan, RedMokum Bravin, Revolution Perenti, Rezit Sideways, Rich Grainger, Rosco Teardrop, Rose Evans, Rudee Voom, RufusTT Horsefly, Saii Hallard, SaintLEOlions Zimer, Samm Larkham, Satanello Miami, SexySteven Morrisey, Sheet Spotter, Shnurui Troughton, sicarius Thorne, Sicarius Toxx, Sini Nubalo, SLB Wirefly, snowy Sidran, Soupa Segura, ST Mensing, Starshine Halasy, Stickman Ingmann, Synystyr Texan, Takeda Terrawyng, Tali Rosca, Templar Merlin, Tezcatlipoca Bisiani, Tiel Stonecutter, Tony Kembia, TouchaHoney Perhaps, Trey Reanimator, TriloByte Zanzibar, Trinity Dechou, Trinity Dejavu, Unlikely Quintessa, UsikuFarasi Kanarik, Veritas Raymaker, Vex Streeter, Viaticus Speculaas, Villain Baroque, Vixie Durant, Void Singer, Watty Berkson, Westley Schridde, Westley Streeter, Whimsy Winx, Winter Ventura, Wundur Primbee, xstorm Radek, YongYong Francois, Zak Westminster, Zana Kohime, Zaren Alexander, Zeja Pyle, ZenMondo Wormser, Zoex Flanagan その他大勢の方々。
+現在最も優れたバージョンとなるようご協力いただいた次の住人の皆様に深く感謝いたします。 Drew Dwi, Zai Lynch, Latif Khalifa, Ellla McMahon, Harleen Gretzky, Squirrel Wood, Malarthi Behemoth, Dante Tucker, Buckaroo Mu, Eddi Decosta, Dirk, Talamasca, Torben Trautman, Irene Muni, Aralara Rajal, Aura Dirval, Cayu Cluny, Eva Rau, FreeSL Aeon, Frontera Thor, Inma Rau, Lunita Savira, Minerva Memel, Polo Gufler, Xiki Luik, Lilly Zenovka, Vick Forcella, Sasy Scarborough, Gentle Welinder, Elric Anatine, Techwolf Lupindo, Dusan Writer, WolfPup Lowenhar, Marianne McCann, Fiachra Lach, Sitearm Madonna, Sudane Erato, Sahkolihaa Contepomi, Sachi Vixen, Questar Utu, Dimitrio Lewis, Matto Destiny, Scrim Pinion, Radio Signals, Psi Merlin, Pixel Gausman, Mel Vanbeeck, Laurent Bechir, Lamorna Proctor, Lares Carter, Gwyneth Llewelyn, Hydra Shaftoe, Holger Gilruth, Gentle Heron, Carla Broek, Boroondas Gupte, Fury Rosewood, Flower Ducatillon, Colpo Wexler, gwampa Lomu, Borg Capalini, Beansy Twine, Ardy Lay, , 45ms Zhong, Adeon Writer, Aeonix Aeon, Ai Austin, Aiko Ying, Alexandrea Fride, Alliez Mysterio, Annie Milestone, Annika Genezzia, Ansariel Hiller, ArminasX Saiman, Arya Braveheart, Asaeda Meltingdots, Asturkon Jua, Avallyn Oakleaf, Avatar Quinzet, BabyA Littlething, Bacchus Ireto, Bazaar, Riva, Benjamin Bigdipper, Beth Walcher, Bezilon Kasei, Biancaluce Robbiani, Bill Walach, blakopal Galicia, Blitzckreed Levenque, Bryn Oh, Callipygian Christensen, Cap Carver, Carr Arbenlow, Chantal Harvey, Charles Courtois, Charlie Sazaland, Cherry Cheevers, ChickyBabes Zuzu, Christopher  Organiser, Ciaran Laval, Clara Young, Celierra Darling, Corinne Helendale, Corro Moseley, Coughdrop Littlething, Darien Caldwell, Dartagan Shepherd, Debs Regent, Decro Schmooz, Denim Kamachi, DiJodi Dubratt, Dil Spitz, Edgware Marker, Egehan Dryke, Emma Portilo, Emmie Fairymeadow, Evangelista Emerald, Faelon Swordthain, Frenchimmo Sabra, Gaberoonie Zanzibar, Ganymedes Costagravas, Gene Frostbite, GeneJ Composer, Giggles Littlebird, Grady Echegaray, Guni Greenstein, Gypsy Tripsa, Hackshaven Harford, Ham Rambler, Han Shuffle, Hanglow Short, Hatzfeld Runo, herina Bode, Horatio Freund, Hypatia Callisto, Hypatia Pickens, Identity Euler, Imnotgoing Sideways, Innula Zenovka, Iyoba Tarantal, Jack Abraham, Jagga Meredith, Jennifer Boyle, Jeremy Marquez, Jessica Qin, Jinx Nordberg, Jo Bernandes, Jocial Sonnenkern, Joel Savard, Jondan Lundquist, Josef Munster, Josette Windlow, Juilan Tripsa, Juro Kothari, Justin RiversRunRed, Kagehi Kohn, Kaimen Takahe, Keklily Longfall, Ken Lavender, Kestral Karas, Khisme Nitely, Kimar Coba, Kithrak Kirkorian, Kitty Barnett, Kolor Fall, Komiko Okamoto, Korvel Noh, Larry Pixel, Leal Choche, len Starship, Lenae Munz, Lexi Frua, Lillie Cordeaux, Lizzy Macarthur, LSL Scientist, Luban Yiyuan, Luc Starsider, Maccus McCullough, Madison Blanc, Maggie Darwin, Mallory Destiny, Manx Wharton, Marc Claridge, Marc2 Sands, Matthew Anthony, Maxim RiversRunRed, Medhue Simoni, Melinda Latynina, Mencius Watts, Michi Lumin, Midian Farspire, Miles Glaz, Mindy Mathy, Mitch Wagner, Mo Hax, Mourna Biziou, Nao Noe, naofan Teardrop, Naomah Beaumont, Nathiel Siamendes, Nber Medici, Neko Link, Netpat Igaly, Neutron Chesnokov, Newfie Pendragon, Nicholai Laviscu, Nick Rhodes, Nicoladie Gymnast, Ollie Kubrick, Orenj Marat, Orion Delphis, Oryx Tempel, Parvati Silverweb, PeterPunk Mooney, Pixel Scientist, Pounce Teazle, Professor Noarlunga, Quantum Destiny, Quicksilver Hermes, Ralf Setsuko, RAT Quan, RedMokum Bravin, Revolution Perenti, Rezit Sideways, Rich Grainger, Rosco Teardrop, Rose Evans, Rudee Voom, RufusTT Horsefly, Saii Hallard, SaintLEOlions Zimer, Samm Larkham, Satanello Miami, SexySteven Morrisey, Sheet Spotter, Shnurui Troughton, sicarius Thorne, Sicarius Toxx, Sini Nubalo, SLB Wirefly, snowy Sidran, Soupa Segura, ST Mensing, Starshine Halasy, Stickman Ingmann, Synystyr Texan, Takeda Terrawyng, Tali Rosca, Templar Merlin, Tezcatlipoca Bisiani, Tiel Stonecutter, Tony Kembia, TouchaHoney Perhaps, Trey Reanimator, TriloByte Zanzibar, Trinity Dechou, Trinity Dejavu, Unlikely Quintessa, UsikuFarasi Kanarik, Veritas Raymaker, Vex Streeter, Viaticus Speculaas, Villain Baroque, Vixie Durant, Void Singer, Watty Berkson, Westley Schridde, Westley Streeter, Whimsy Winx, Winter Ventura, Wundur Primbee, xstorm Radek, YongYong Francois, Zak Westminster, Zana Kohime, Zaren Alexander, Zeja Pyle, ZenMondo Wormser, Zoex Flanagan その他大勢の方々。
 
 
 
diff --git a/indra/newview/skins/default/xui/nl/floater_about.xml b/indra/newview/skins/default/xui/nl/floater_about.xml
index f71f935c24..f543ebbbe3 100644
--- a/indra/newview/skins/default/xui/nl/floater_about.xml
+++ b/indra/newview/skins/default/xui/nl/floater_about.xml
@@ -45,7 +45,7 @@ Vivox Versie: [VIVOX_VERSION]
 			<text_editor name="credits_editor">
 				Second Life wordt u aangeboden door Philip, Tessa, Andrew, Cory, James, Ben, Char, Charlie, Colin, Dan, Daniel, Doug, Eric, Hamlet, Haney, Eve, Hunter, Ian, Jeff, Jennifer, Jim, John, Lee, Mark, Peter, Phoenix, Richard, Robin, Xenon, Steve, Tanya, Eddie, Avi, Frank, Bruce, Aaron, Alice, Bob, Debra, Eileen, Helen, Janet, Louie, Leviathania, Stefan, Ray, Kevin, Tom, Mikeb, MikeT, Burgess, Elena, Tracy, Bill, Todd, Ryan, Zach, Sarah, Nova, Tim, Stephanie, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Magellan, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Ventrella, Jack, Vektor, Iris, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Altruima, Jesse, Teeny, Monroe, Icculus, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Satoko, Yuko, Makiko, Thomas, Harry, Seth, Alexei, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, beez, Milo, Hermia, Red, Thrax, Joe, Sally, Magenta, Mogura, Paul, Jose, Rejean, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Jean, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, dustin, George, Del, Matthew, Cat, Jacqui, Lightfoot, Adrian, Viola, Alfred, Noel, Irfan, Sunil, Yool, Rika, Jane, Xtreme, Frontier, a2, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Gulliver, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Anthony, Jeremy, JP, Jake, Maurice, Madhavi, Leopard, Kyle, Joon, Kari, Bert, Belinda, Jon, Kristi, Bridie, Pramod, KJ, Socrates, Maria, Ivan, Aric, Yamasaki, Adreanne, Jay, MitchK, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Rohn, Colossus, Zen, BigPapi, Brad, Pastrami, Kurz, Mani, Neuro, Jaime, MJ, Rowan, Sgt, Elvis, Gecko, Samuel, Sardonyx, Leo, Bryan, Niko, Soft, Poppy, Rachel, Aki, Angelo, Banzai, Alexa, Sue, CeeLo, Bender, CG, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Heidy, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Winnie, Stella, Milton, Rothman, Niall, Marin, Allison, Katie, Dawn, Katt, Dusty, Kalpana, Judy, Andrea, Ambroff, Infinity, Gail, Rico, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Vidtuts, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Austin, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Yang, T, Simone, Maestro, Scott, Charlene, Quixote, Amanda, Susan, Zed, Anne, Enkidu, Esbee, Joroan, Katelin, Roxie, Tay, Scarlet, Kevin, Johnny, Wolfgang, Andren, Bob, Howard, Merov, Rand, Ray, Michon, Newell, Galen, Dessie, Les, Michon, Jenelle, Geo, Siz, Shapiro, Pete, Calyle, Selene, Allen, Phoebe, Goldin, Kimmora, Dakota, Slaton, Lindquist, Zoey, Hari, Othello, Rohit, Sheldon, Petra, Viale, Gordon, Kaye, Pink, Ferny, Emerson, Davy, Bri, Chan, Juan, Robert, Terrence, Nathan, Carl and many others.
 
-Een &apos;Dank u&apos; voor de volgende bewoners voor het helpen zorgdragen dat dit de beste versie tot nu toe is: able whitman, Adeon Writer, adonaira aabye, Aeron Kohime, Agathos Frascati, Aimee Trescothick, Aleric Inglewood, Alissa Sabre, Aminom Marvin, Angela Talamasca, Aralara Rajal, Armin Weatherwax, Ashrilyn Hayashida, Athanasius Skytower, Aura Dirval, Barney Boomslang, Biancaluce Robbiani, Biker Offcourse, Borg Capalini, Bulli Schumann, catherine pfeffer, Chalice Yao, Corre Porta, Court Goodman, Cummere Mayo, Dale Innis, Darien Caldwell, Darjeeling Schoonhoven, Daten Thielt, dimentox travanti, Dirk Talamasca, Drew Dwi, Duckless Vandyke, Elanthius Flagstaff, Electro Burnstein, emiley tomsen, Escort DeFarge, Eva Rau, Ezian Ecksol, Fire Centaur, Fluf Fredriksson, Francisco Koolhoven, Frontera Thor, Frungi Stastny, Gally Young, gearsawe stonecutter, Gigs Taggart, Gordon Wendt, Gudmund Shepherd, Gypsy Paz, Harleen Gretzky, Henri Beauchamp, Inma Rau, Irene Muni, Iskar Ariantho, Jacek Antonelli, JB Kraft, Jessicka Graves, Joeseph Albanese, Joshua Philgarlic, Khyota Wulluf, kirstenlee Cinquetti, Latif Khalifa, Lex Neva, Lilibeth Andree, Lisa Lowe, Lunita Savira, Loosey Demonia, lum pfohl, Marcos Fonzarelli, MartinRJ Fayray, Marusame Arai, Matthew Dowd, Maya Remblai, McCabe Maxsted, Meghan Dench, Melchoir Tokhes, Menos Short, Michelle2 Zenovka, Mimika Oh, Minerva Memel, Mm Alder, Ochi Wolfe, Omei Turnbull, Pesho Replacement, Phantom Ninetails, phoenixflames kukulcan, Polo Gufler, prez pessoa, princess niven, Prokofy Neva, Qie Niangao, Rem Beattie, RodneyLee Jessop, Saijanai Kuhn, Seg Baphomet, Sergen Davies, Shirley Marquez, SignpostMarv Martin, Sindy Tsure, Sira Arbizu, Skips Jigsaw, Sougent Harrop, Spritely Pixel, Squirrel Wood, StarSong Bright, Subversive Writer, Sugarcult Dagger, Sylumm Grigorovich, Tammy Nowotny, Tanooki Darkes, Tayra Dagostino, Theoretical Chemistry, Thickbrick Sleaford, valerie rosewood, Vex Streeter, Vixen Heron, Whoops Babii, Winter Ventura, Xiki Luik, Yann Dufaux, Yina Yao, Yukinoroh Kamachi, Zolute Infinity, Zwagoth Klaar
+Een &apos;Dank u&apos; voor de volgende bewoners voor het helpen zorgdragen dat dit de beste versie tot nu toe is: able whitman, Adeon Writer, adonaira aabye, Aeron Kohime, Agathos Frascati, Aimee Trescothick, Aleric Inglewood, Alissa Sabre, Aminom Marvin, Angela Talamasca, Aralara Rajal, Armin Weatherwax, Ashrilyn Hayashida, Athanasius Skytower, Aura Dirval, Barney Boomslang, Biancaluce Robbiani, Biker Offcourse, Borg Capalini, Bulli Schumann, catherine pfeffer, Chalice Yao, Corre Porta, Court Goodman, Cummere Mayo, Dale Innis, Darien Caldwell, Darjeeling Schoonhoven, Daten Thielt, dimentox travanti, Dirk Talamasca, Drew Dwi, Duckless Vandyke, Elanthius Flagstaff, Electro Burnstein, emiley tomsen, Escort DeFarge, Eva Rau, Ezian Ecksol, Fire Centaur, Fluf Fredriksson, Francisco Koolhoven, Frontera Thor, Frungi Stastny, Gally Young, gearsawe stonecutter, Gigs Taggart, Gordon Wendt, Gudmund Shepherd, Gypsy Paz, Harleen Gretzky, Henri Beauchamp, Inma Rau, Irene Muni, Aralara Rajal, Aura Dirval, Cayu Cluny, Eva Rau, FreeSL Aeon, Frontera Thor, Inma Rau, Lunita Savira, Minerva Memel, Polo Gufler, Xiki Luik, Iskar Ariantho, Jacek Antonelli, JB Kraft, Jessicka Graves, Joeseph Albanese, Joshua Philgarlic, Khyota Wulluf, kirstenlee Cinquetti, Latif Khalifa, Lex Neva, Lilibeth Andree, Lisa Lowe, Lunita Savira, Loosey Demonia, lum pfohl, Marcos Fonzarelli, MartinRJ Fayray, Marusame Arai, Matthew Dowd, Maya Remblai, McCabe Maxsted, Meghan Dench, Melchoir Tokhes, Menos Short, Michelle2 Zenovka, Mimika Oh, Minerva Memel, Mm Alder, Ochi Wolfe, Omei Turnbull, Pesho Replacement, Phantom Ninetails, phoenixflames kukulcan, Polo Gufler, prez pessoa, princess niven, Prokofy Neva, Qie Niangao, Rem Beattie, RodneyLee Jessop, Saijanai Kuhn, Seg Baphomet, Sergen Davies, Shirley Marquez, SignpostMarv Martin, Sindy Tsure, Sira Arbizu, Skips Jigsaw, Sougent Harrop, Spritely Pixel, Squirrel Wood, StarSong Bright, Subversive Writer, Sugarcult Dagger, Sylumm Grigorovich, Tammy Nowotny, Tanooki Darkes, Tayra Dagostino, Theoretical Chemistry, Thickbrick Sleaford, valerie rosewood, Vex Streeter, Vixen Heron, Whoops Babii, Winter Ventura, Xiki Luik, Yann Dufaux, Yina Yao, Yukinoroh Kamachi, Zolute Infinity, Zwagoth Klaar
 
 
 
diff --git a/indra/newview/skins/default/xui/pl/floater_about.xml b/indra/newview/skins/default/xui/pl/floater_about.xml
index e032008e7b..637325ddd0 100644
--- a/indra/newview/skins/default/xui/pl/floater_about.xml
+++ b/indra/newview/skins/default/xui/pl/floater_about.xml
@@ -45,7 +45,7 @@ Wersja serwera głosu: [VOICE_VERSION]
 			<text_editor name="credits_editor">
 				Second Life zostało stworzone dla Was przez Philip, Tessa, Andrew, Cory, Ian, James, Phoenix, Ryan, Haney, Dan, Char, Ben, John, Tanya, Eddie, Richard, Mitch, Doug, Eric, Frank, Bruce, Aaron, Peter, Alice, Charlie, Debra, Eileen, Helen, Janet, Steffan, Steve, Tom, Mark, Hunter, Xenon, Burgess, Bill, Jim, Lee, Hamlet, Daniel, Jeff, Todd, Sarah, Tim, Stephanie, Colin, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Jack, Vektor, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Jesse, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Yuko, Makiko, Thomas, Harry, Seth, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Brad, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, Beez, Milo, Hermia, Red, Thrax, Gulliver, Joe, Sally, Paul, Jose, Rejean, Dore, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, Dustin, George, Del, Matthew, Cat, Jacqui, Adrian, Viola, Alfred, Noel, Irfan, Yool, Rika, Jane, Frontier, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Jeremy, JP, Jake, Anthony, Maurice, Madhavi, Leopard, Kyle, Joon, Bert, Belinda, Jon, Kristi, Bridie, Pramod, Socrates, Maria, Aric, Adreanne, Jay, Kari, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Colossus, Zen, BigPapi, Pastrami, Kurz, Mani, Neuro, Mel, Sardonyx, MJ, Rowan, Sgt, Elvis, Samuel, Leo, Bryan, Niko, Austin, Soft, Poppy, Rachel, Aki, Banzai, Alexa, Sue, Bender, CG, Angelo, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Rothman, Niall, Marin, Allison, Katie, Dawn, Dusty, Katt, Judy, Andrea, Ambroff, Infinity, Rico, Gail, Kalpana, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Maestro, Simone, Yang, T, Shannon, Nelson, Khanh, Scott, Courtney, Charlene, Quixote, Susan, Zed, Amanda, Katelin, Enkidu, Roxie, Esbee, JoRoan, Scarlet, Tay, Kevin, Wolfgang, Johnny, Ray, Andren, Merov, Bob, Rand, Howard, Callen, Heff, Galen, Newell, Dessie, Les, Michon, Jenelle, Geo, Siz, Shapiro, Pete, Calyle, Selene, Allen, Phoebe, Goldin, Kimmora, Dakota, Slaton, Lindquist, Zoey, Hari, Othello, Rohit, Sheldon, Petra, Viale, Gordon, Kaye, Pink, Ferny, Emerson, Davy, Bri, Chan, Juan, Robert, Terrence, Nathan, Carl, Ashley, JessieAnn, Huseby, Karina, Paris, Kurt, Rick, Lis, Kotler, Theeba, Lynx, Murphy, Doten, Taka, Norm, Jillian, Marcus, Mae, Novack, Esther, Perry, Dana, Ducot, Javier, Porter, Madison, Gecko, Dough, JR, Gisele, Crimp, Norie, Arch, Kimi, Fisher, Barbara, Jason, Peggy, Bernard, Jules, Leroy, Eva, Khederian, Campbell, Vogt, Masido, Karel, Torres, Lo, Breezer, Delby, Rountree, Anna, Servus, Rue, Itiaes, Chuck, Luna, Novella, Zaza, Wen, Gino, Lex, Cassandra, Limey, Nancy, Anukul, Silver, Brodesky, Jinsai, Squid, Gez, Rakesh, Ladan, Edelman, Marcet, Squire, Tatem, Tony, Jerm, Tia, Falcon, BK, Tiggs, Driscoll, Bacon, Timothee, Cru, Carmilla, Coyot, Webb, Kazu, Rudas, LJ, Sea, Ali Wallace, Bewest, Pup, Drub, Dragon, Inoshiro, Byron, Rhett, Xandix, Aimee, Fredrik, Thor, Teddy, Baron, Nelly, Ghengis, Epic, Eli, Stone, Grapes, Irie, Prep, Scobu, Valerie, Alain, and many others.
 
-Podziękowania dla następujących Rezydentów za pomoc w pracy nad obecną wersją Second Life: Drew Dwi, Zai Lynch, Latif Khalifa, Ellla McMahon, Harleen Gretzky, Squirrel Wood, Malarthi Behemoth, Dante Tucker, Buckaroo Mu, Eddi Decosta, Dirk, Talamasca, Torben Trautman, Irene Muni, Lilly Zenovka, Vick Forcella, Sasy Scarborough, Gentle Welinder, Elric Anatine, Techwolf Lupindo, Dusan Writer, WolfPup Lowenhar, Marianne McCann, Fiachra Lach, Sitearm Madonna, Sudane Erato, Sahkolihaa Contepomi, Sachi Vixen, Questar Utu, Dimitrio Lewis, Matto Destiny, Scrim Pinion, Radio Signals, Psi Merlin, Pixel Gausman, Mel Vanbeeck, Laurent Bechir, Lamorna Proctor, Lares Carter, Gwyneth Llewelyn, Hydra Shaftoe, Holger Gilruth, Gentle Heron, Carla Broek, Boroondas Gupte, Fury Rosewood, Flower Ducatillon, Colpo Wexler, gwampa Lomu, Borg Capalini, Beansy Twine, Ardy Lay, , 45ms Zhong, Adeon Writer, Aeonix Aeon, Ai Austin, Aiko Ying, Alexandrea Fride, Alliez Mysterio, Annie Milestone, Annika Genezzia, Ansariel Hiller, ArminasX Saiman, Arya Braveheart, Asaeda Meltingdots, Asturkon Jua, Avallyn Oakleaf, Avatar Quinzet, BabyA Littlething, Bacchus Ireto, Bazaar, Riva, Benjamin Bigdipper, Beth Walcher, Bezilon Kasei, Biancaluce Robbiani, Bill Walach, blakopal Galicia, Blitzckreed Levenque, Bryn Oh, Callipygian Christensen, Cap Carver, Carr Arbenlow, Chantal Harvey, Charles Courtois, Charlie Sazaland, Cherry Cheevers, ChickyBabes Zuzu, Christopher  Organiser, Ciaran Laval, Clara Young, Celierra Darling, Corinne Helendale, Corro Moseley, Coughdrop Littlething, Darien Caldwell, Dartagan Shepherd, Debs Regent, Decro Schmooz, Denim Kamachi, DiJodi Dubratt, Dil Spitz, Edgware Marker, Egehan Dryke, Emma Portilo, Emmie Fairymeadow, Evangelista Emerald, Faelon Swordthain, Frenchimmo Sabra, Gaberoonie Zanzibar, Ganymedes Costagravas, Gene Frostbite, GeneJ Composer, Giggles Littlebird, Grady Echegaray, Guni Greenstein, Gypsy Tripsa, Hackshaven Harford, Ham Rambler, Han Shuffle, Hanglow Short, Hatzfeld Runo, herina Bode, Horatio Freund, Hypatia Callisto, Hypatia Pickens, Identity Euler, Imnotgoing Sideways, Innula Zenovka, Iyoba Tarantal, Jack Abraham, Jagga Meredith, Jennifer Boyle, Jeremy Marquez, Jessica Qin, Jinx Nordberg, Jo Bernandes, Jocial Sonnenkern, Joel Savard, Jondan Lundquist, Josef Munster, Josette Windlow, Juilan Tripsa, Juro Kothari, Justin RiversRunRed, Kagehi Kohn, Kaimen Takahe, Keklily Longfall, Ken Lavender, Kestral Karas, Khisme Nitely, Kimar Coba, Kithrak Kirkorian, Kitty Barnett, Kolor Fall, Komiko Okamoto, Korvel Noh, Larry Pixel, Leal Choche, len Starship, Lenae Munz, Lexi Frua, Lillie Cordeaux, Lizzy Macarthur, LSL Scientist, Luban Yiyuan, Luc Starsider, Maccus McCullough, Madison Blanc, Maggie Darwin, Mallory Destiny, Manx Wharton, Marc Claridge, Marc2 Sands, Matthew Anthony, Maxim RiversRunRed, Medhue Simoni, Melinda Latynina, Mencius Watts, Michi Lumin, Midian Farspire, Miles Glaz, Mindy Mathy, Mitch Wagner, Mo Hax, Mourna Biziou, Nao Noe, naofan Teardrop, Naomah Beaumont, Nathiel Siamendes, Nber Medici, Neko Link, Netpat Igaly, Neutron Chesnokov, Newfie Pendragon, Nicholai Laviscu, Nick Rhodes, Nicoladie Gymnast, Ollie Kubrick, Orenj Marat, Orion Delphis, Oryx Tempel, Parvati Silverweb, PeterPunk Mooney, Pixel Scientist, Pounce Teazle, Professor Noarlunga, Quantum Destiny, Quicksilver Hermes, Ralf Setsuko, RAT Quan, RedMokum Bravin, Revolution Perenti, Rezit Sideways, Rich Grainger, Rosco Teardrop, Rose Evans, Rudee Voom, RufusTT Horsefly, Saii Hallard, SaintLEOlions Zimer, Samm Larkham, Satanello Miami, SexySteven Morrisey, Sheet Spotter, Shnurui Troughton, sicarius Thorne, Sicarius Toxx, Sini Nubalo, SLB Wirefly, snowy Sidran, Soupa Segura, ST Mensing, Starshine Halasy, Stickman Ingmann, Synystyr Texan, Takeda Terrawyng, Tali Rosca, Templar Merlin, Tezcatlipoca Bisiani, Tiel Stonecutter, Tony Kembia, TouchaHoney Perhaps, Trey Reanimator, TriloByte Zanzibar, Trinity Dechou, Trinity Dejavu, Unlikely Quintessa, UsikuFarasi Kanarik, Veritas Raymaker, Vex Streeter, Viaticus Speculaas, Villain Baroque, Vixie Durant, Void Singer, Watty Berkson, Westley Schridde, Westley Streeter, Whimsy Winx, Winter Ventura, Wundur Primbee, xstorm Radek, YongYong Francois, Zak Westminster, Zana Kohime, Zaren Alexander, Zeja Pyle, ZenMondo Wormser, Zoex Flanagan, and many others.
+Podziękowania dla następujących Rezydentów za pomoc w pracy nad obecną wersją Second Life: Drew Dwi, Zai Lynch, Latif Khalifa, Ellla McMahon, Harleen Gretzky, Squirrel Wood, Malarthi Behemoth, Dante Tucker, Buckaroo Mu, Eddi Decosta, Dirk, Talamasca, Torben Trautman, Irene Muni, Aralara Rajal, Aura Dirval, Cayu Cluny, Eva Rau, FreeSL Aeon, Frontera Thor, Inma Rau, Lunita Savira, Minerva Memel, Polo Gufler, Xiki Luik, Lilly Zenovka, Vick Forcella, Sasy Scarborough, Gentle Welinder, Elric Anatine, Techwolf Lupindo, Dusan Writer, WolfPup Lowenhar, Marianne McCann, Fiachra Lach, Sitearm Madonna, Sudane Erato, Sahkolihaa Contepomi, Sachi Vixen, Questar Utu, Dimitrio Lewis, Matto Destiny, Scrim Pinion, Radio Signals, Psi Merlin, Pixel Gausman, Mel Vanbeeck, Laurent Bechir, Lamorna Proctor, Lares Carter, Gwyneth Llewelyn, Hydra Shaftoe, Holger Gilruth, Gentle Heron, Carla Broek, Boroondas Gupte, Fury Rosewood, Flower Ducatillon, Colpo Wexler, gwampa Lomu, Borg Capalini, Beansy Twine, Ardy Lay, , 45ms Zhong, Adeon Writer, Aeonix Aeon, Ai Austin, Aiko Ying, Alexandrea Fride, Alliez Mysterio, Annie Milestone, Annika Genezzia, Ansariel Hiller, ArminasX Saiman, Arya Braveheart, Asaeda Meltingdots, Asturkon Jua, Avallyn Oakleaf, Avatar Quinzet, BabyA Littlething, Bacchus Ireto, Bazaar, Riva, Benjamin Bigdipper, Beth Walcher, Bezilon Kasei, Biancaluce Robbiani, Bill Walach, blakopal Galicia, Blitzckreed Levenque, Bryn Oh, Callipygian Christensen, Cap Carver, Carr Arbenlow, Chantal Harvey, Charles Courtois, Charlie Sazaland, Cherry Cheevers, ChickyBabes Zuzu, Christopher  Organiser, Ciaran Laval, Clara Young, Celierra Darling, Corinne Helendale, Corro Moseley, Coughdrop Littlething, Darien Caldwell, Dartagan Shepherd, Debs Regent, Decro Schmooz, Denim Kamachi, DiJodi Dubratt, Dil Spitz, Edgware Marker, Egehan Dryke, Emma Portilo, Emmie Fairymeadow, Evangelista Emerald, Faelon Swordthain, Frenchimmo Sabra, Gaberoonie Zanzibar, Ganymedes Costagravas, Gene Frostbite, GeneJ Composer, Giggles Littlebird, Grady Echegaray, Guni Greenstein, Gypsy Tripsa, Hackshaven Harford, Ham Rambler, Han Shuffle, Hanglow Short, Hatzfeld Runo, herina Bode, Horatio Freund, Hypatia Callisto, Hypatia Pickens, Identity Euler, Imnotgoing Sideways, Innula Zenovka, Iyoba Tarantal, Jack Abraham, Jagga Meredith, Jennifer Boyle, Jeremy Marquez, Jessica Qin, Jinx Nordberg, Jo Bernandes, Jocial Sonnenkern, Joel Savard, Jondan Lundquist, Josef Munster, Josette Windlow, Juilan Tripsa, Juro Kothari, Justin RiversRunRed, Kagehi Kohn, Kaimen Takahe, Keklily Longfall, Ken Lavender, Kestral Karas, Khisme Nitely, Kimar Coba, Kithrak Kirkorian, Kitty Barnett, Kolor Fall, Komiko Okamoto, Korvel Noh, Larry Pixel, Leal Choche, len Starship, Lenae Munz, Lexi Frua, Lillie Cordeaux, Lizzy Macarthur, LSL Scientist, Luban Yiyuan, Luc Starsider, Maccus McCullough, Madison Blanc, Maggie Darwin, Mallory Destiny, Manx Wharton, Marc Claridge, Marc2 Sands, Matthew Anthony, Maxim RiversRunRed, Medhue Simoni, Melinda Latynina, Mencius Watts, Michi Lumin, Midian Farspire, Miles Glaz, Mindy Mathy, Mitch Wagner, Mo Hax, Mourna Biziou, Nao Noe, naofan Teardrop, Naomah Beaumont, Nathiel Siamendes, Nber Medici, Neko Link, Netpat Igaly, Neutron Chesnokov, Newfie Pendragon, Nicholai Laviscu, Nick Rhodes, Nicoladie Gymnast, Ollie Kubrick, Orenj Marat, Orion Delphis, Oryx Tempel, Parvati Silverweb, PeterPunk Mooney, Pixel Scientist, Pounce Teazle, Professor Noarlunga, Quantum Destiny, Quicksilver Hermes, Ralf Setsuko, RAT Quan, RedMokum Bravin, Revolution Perenti, Rezit Sideways, Rich Grainger, Rosco Teardrop, Rose Evans, Rudee Voom, RufusTT Horsefly, Saii Hallard, SaintLEOlions Zimer, Samm Larkham, Satanello Miami, SexySteven Morrisey, Sheet Spotter, Shnurui Troughton, sicarius Thorne, Sicarius Toxx, Sini Nubalo, SLB Wirefly, snowy Sidran, Soupa Segura, ST Mensing, Starshine Halasy, Stickman Ingmann, Synystyr Texan, Takeda Terrawyng, Tali Rosca, Templar Merlin, Tezcatlipoca Bisiani, Tiel Stonecutter, Tony Kembia, TouchaHoney Perhaps, Trey Reanimator, TriloByte Zanzibar, Trinity Dechou, Trinity Dejavu, Unlikely Quintessa, UsikuFarasi Kanarik, Veritas Raymaker, Vex Streeter, Viaticus Speculaas, Villain Baroque, Vixie Durant, Void Singer, Watty Berkson, Westley Schridde, Westley Streeter, Whimsy Winx, Winter Ventura, Wundur Primbee, xstorm Radek, YongYong Francois, Zak Westminster, Zana Kohime, Zaren Alexander, Zeja Pyle, ZenMondo Wormser, Zoex Flanagan, and many others.
 
 
 
diff --git a/indra/newview/skins/default/xui/pt/floater_about.xml b/indra/newview/skins/default/xui/pt/floater_about.xml
index 4044110b47..ac365f1702 100644
--- a/indra/newview/skins/default/xui/pt/floater_about.xml
+++ b/indra/newview/skins/default/xui/pt/floater_about.xml
@@ -44,7 +44,7 @@ Versão do servidor de voz: [VOICE_VERSION]
 			<text_editor name="credits_editor">
 				O Second Life é o resultado do trabalho de Philip, Tessa, Andrew, Cory, James, Ben, Char, Charlie, Colin, Dan, Daniel, Doug, Eric, Hamlet, Haney, Eve, Hunter, Ian, Jeff, Jennifer, Jim, John, Lee, Mark, Peter, Phoenix, Richard, Robin, Xenon, Steve, Tanya, Eddie, Avi, Frank, Bruce, Aaron, Alice, Bob, Debra, Eileen, Helen, Janet, Louie, Leviathania, Stefan, Ray, Kevin, Tom, Mikeb, MikeT, Burgess, Elena, Tracy, Bill, Todd, Ryan, Zach, Sarah, Nova, Tim, Stephanie, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Magellan, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Ventrella, Jack, Vektor, Iris, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Altruima, Jesse, Teeny, Monroe, Icculus, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Satoko, Yuko, Makiko, Thomas, Harry, Seth, Alexei, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, beez, Milo, Hermia, Red, Thrax, Joe, Sally, Magenta, Mogura, Paul, Jose, Rejean, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Jean, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, dustin, George, Del, Matthew, Cat, Jacqui, Lightfoot, Adrian, Viola, Alfred, Noel, Irfan, Sunil, Yool, Rika, Jane, Xtreme, Frontier, a2, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Gulliver, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Anthony, Jeremy, JP, Jake, Maurice, Madhavi, Leopard, Kyle, Joon, Kari, Bert, Belinda, Jon, Kristi, Bridie, Pramod, KJ, Socrates, Maria, Ivan, Aric, Yamasaki, Adreanne, Jay, MitchK, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Rohn, Colossus, Zen, BigPapi, Brad, Pastrami, Kurz, Mani, Neuro, Jaime, MJ, Rowan, Sgt, Elvis, Gecko, Samuel, Sardonyx, Leo, Bryan, Niko, Soft, Poppy, Rachel, Aki, Angelo, Banzai, Alexa, Sue, CeeLo, Bender, CG, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Heidy, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Winnie, Stella, Milton, Rothman, Niall, Marin, Allison, Katie, Dawn, Katt, Dusty, Kalpana, Judy, Andrea, Ambroff, Infinity, Gail, Rico, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Vidtuts, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Austin, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Yang, T, Simone, Maestro, Scott, Charlene, Quixote, Amanda, Susan, Zed, Anne, Enkidu, Esbee, Joroan, Katelin, Roxie, Tay, Scarlet, Kevin, Johnny, Wolfgang, Andren, Bob, Howard, Merov, Rand, Ray, Michon, Newell, Galen, Dessie, Les e muitos mais.
 
-Agradecemos também aos seguintes residentes por sua colaboração na mais nova versão do Second Life: Drew Dwi, Zai Lynch, Latif Khalifa, Ellla McMahon, Harleen Gretzky, Squirrel Wood, Malarthi Behemoth, Dante Tucker, Buckaroo Mu, Eddi Decosta, Dirk, Talamasca, Torben Trautman, Irene Muni, Lilly Zenovka, Vick Forcella, Sasy Scarborough, Gentle Welinder, Elric Anatine, Techwolf Lupindo, Dusan Writer, WolfPup Lowenhar, Marianne McCann, Fiachra Lach, Sitearm Madonna, Sudane Erato, Sahkolihaa Contepomi, Sachi Vixen, Questar Utu, Dimitrio Lewis, Matto Destiny, Scrim Pinion, Radio Signals, Psi Merlin, Pixel Gausman, Mel Vanbeeck, Laurent Bechir, Lamorna Proctor, Lares Carter, Gwyneth Llewelyn, Hydra Shaftoe, Holger Gilruth, Gentle Heron, Carla Broek, Boroondas Gupte, Fury Rosewood, Flower Ducatillon, Colpo Wexler, gwampa Lomu, Borg Capalini, Beansy Twine, Ardy Lay, , 45ms Zhong, Adeon Writer, Aeonix Aeon, Ai Austin, Aiko Ying, Alexandrea Fride, Alliez Mysterio, Annie Milestone, Annika Genezzia, Ansariel Hiller, ArminasX Saiman, Arya Braveheart, Asaeda Meltingdots, Asturkon Jua, Avallyn Oakleaf, Avatar Quinzet, BabyA Littlething, Bacchus Ireto, Bazaar, Riva, Benjamin Bigdipper, Beth Walcher, Bezilon Kasei, Biancaluce Robbiani, Bill Walach, blakopal Galicia, Blitzckreed Levenque, Bryn Oh, Callipygian Christensen, Cap Carver, Carr Arbenlow, Chantal Harvey, Charles Courtois, Charlie Sazaland, Cherry Cheevers, ChickyBabes Zuzu, Christopher  Organiser, Ciaran Laval, Clara Young, Celierra Darling, Corinne Helendale, Corro Moseley, Coughdrop Littlething, Darien Caldwell, Dartagan Shepherd, Debs Regent, Decro Schmooz, Denim Kamachi, DiJodi Dubratt, Dil Spitz, Edgware Marker, Egehan Dryke, Emma Portilo, Emmie Fairymeadow, Evangelista Emerald, Faelon Swordthain, Frenchimmo Sabra, Gaberoonie Zanzibar, Ganymedes Costagravas, Gene Frostbite, GeneJ Composer, Giggles Littlebird, Grady Echegaray, Guni Greenstein, Gypsy Tripsa, Hackshaven Harford, Ham Rambler, Han Shuffle, Hanglow Short, Hatzfeld Runo, herina Bode, Horatio Freund, Hypatia Callisto, Hypatia Pickens, Identity Euler, Imnotgoing Sideways, Innula Zenovka, Iyoba Tarantal, Jack Abraham, Jagga Meredith, Jennifer Boyle, Jeremy Marquez, Jessica Qin, Jinx Nordberg, Jo Bernandes, Jocial Sonnenkern, Joel Savard, Jondan Lundquist, Josef Munster, Josette Windlow, Juilan Tripsa, Juro Kothari, Justin RiversRunRed, Kagehi Kohn, Kaimen Takahe, Keklily Longfall, Ken Lavender, Kestral Karas, Khisme Nitely, Kimar Coba, Kithrak Kirkorian, Kitty Barnett, Kolor Fall, Komiko Okamoto, Korvel Noh, Larry Pixel, Leal Choche, len Starship, Lenae Munz, Lexi Frua, Lillie Cordeaux, Lizzy Macarthur, LSL Scientist, Luban Yiyuan, Luc Starsider, Maccus McCullough, Madison Blanc, Maggie Darwin, Mallory Destiny, Manx Wharton, Marc Claridge, Marc2 Sands, Matthew Anthony, Maxim RiversRunRed, Medhue Simoni, Melinda Latynina, Mencius Watts, Michi Lumin, Midian Farspire, Miles Glaz, Mindy Mathy, Mitch Wagner, Mo Hax, Mourna Biziou, Nao Noe, naofan Teardrop, Naomah Beaumont, Nathiel Siamendes, Nber Medici, Neko Link, Netpat Igaly, Neutron Chesnokov, Newfie Pendragon, Nicholai Laviscu, Nick Rhodes, Nicoladie Gymnast, Ollie Kubrick, Orenj Marat, Orion Delphis, Oryx Tempel, Parvati Silverweb, PeterPunk Mooney, Pixel Scientist, Pounce Teazle, Professor Noarlunga, Quantum Destiny, Quicksilver Hermes, Ralf Setsuko, RAT Quan, RedMokum Bravin, Revolution Perenti, Rezit Sideways, Rich Grainger, Rosco Teardrop, Rose Evans, Rudee Voom, RufusTT Horsefly, Saii Hallard, SaintLEOlions Zimer, Samm Larkham, Satanello Miami, SexySteven Morrisey, Sheet Spotter, Shnurui Troughton, sicarius Thorne, Sicarius Toxx, Sini Nubalo, SLB Wirefly, snowy Sidran, Soupa Segura, ST Mensing, Starshine Halasy, Stickman Ingmann, Synystyr Texan, Takeda Terrawyng, Tali Rosca, Templar Merlin, Tezcatlipoca Bisiani, Tiel Stonecutter, Tony Kembia, TouchaHoney Perhaps, Trey Reanimator, TriloByte Zanzibar, Trinity Dechou, Trinity Dejavu, Unlikely Quintessa, UsikuFarasi Kanarik, Veritas Raymaker, Vex Streeter, Viaticus Speculaas, Villain Baroque, Vixie Durant, Void Singer, Watty Berkson, Westley Schridde, Westley Streeter, Whimsy Winx, Winter Ventura, Wundur Primbee, xstorm Radek, YongYong Francois, Zak Westminster, Zana Kohime, Zaren Alexander, Zeja Pyle, ZenMondo Wormser, Zoex Flanagan e muitos mais.
+Agradecemos também aos seguintes residentes por sua colaboração na mais nova versão do Second Life: Drew Dwi, Zai Lynch, Latif Khalifa, Ellla McMahon, Harleen Gretzky, Squirrel Wood, Malarthi Behemoth, Dante Tucker, Buckaroo Mu, Eddi Decosta, Dirk, Talamasca, Torben Trautman, Irene Muni, Aralara Rajal, Aura Dirval, Cayu Cluny, Eva Rau, FreeSL Aeon, Frontera Thor, Inma Rau, Lunita Savira, Minerva Memel, Polo Gufler, Xiki Luik, Lilly Zenovka, Vick Forcella, Sasy Scarborough, Gentle Welinder, Elric Anatine, Techwolf Lupindo, Dusan Writer, WolfPup Lowenhar, Marianne McCann, Fiachra Lach, Sitearm Madonna, Sudane Erato, Sahkolihaa Contepomi, Sachi Vixen, Questar Utu, Dimitrio Lewis, Matto Destiny, Scrim Pinion, Radio Signals, Psi Merlin, Pixel Gausman, Mel Vanbeeck, Laurent Bechir, Lamorna Proctor, Lares Carter, Gwyneth Llewelyn, Hydra Shaftoe, Holger Gilruth, Gentle Heron, Carla Broek, Boroondas Gupte, Fury Rosewood, Flower Ducatillon, Colpo Wexler, gwampa Lomu, Borg Capalini, Beansy Twine, Ardy Lay, , 45ms Zhong, Adeon Writer, Aeonix Aeon, Ai Austin, Aiko Ying, Alexandrea Fride, Alliez Mysterio, Annie Milestone, Annika Genezzia, Ansariel Hiller, ArminasX Saiman, Arya Braveheart, Asaeda Meltingdots, Asturkon Jua, Avallyn Oakleaf, Avatar Quinzet, BabyA Littlething, Bacchus Ireto, Bazaar, Riva, Benjamin Bigdipper, Beth Walcher, Bezilon Kasei, Biancaluce Robbiani, Bill Walach, blakopal Galicia, Blitzckreed Levenque, Bryn Oh, Callipygian Christensen, Cap Carver, Carr Arbenlow, Chantal Harvey, Charles Courtois, Charlie Sazaland, Cherry Cheevers, ChickyBabes Zuzu, Christopher  Organiser, Ciaran Laval, Clara Young, Celierra Darling, Corinne Helendale, Corro Moseley, Coughdrop Littlething, Darien Caldwell, Dartagan Shepherd, Debs Regent, Decro Schmooz, Denim Kamachi, DiJodi Dubratt, Dil Spitz, Edgware Marker, Egehan Dryke, Emma Portilo, Emmie Fairymeadow, Evangelista Emerald, Faelon Swordthain, Frenchimmo Sabra, Gaberoonie Zanzibar, Ganymedes Costagravas, Gene Frostbite, GeneJ Composer, Giggles Littlebird, Grady Echegaray, Guni Greenstein, Gypsy Tripsa, Hackshaven Harford, Ham Rambler, Han Shuffle, Hanglow Short, Hatzfeld Runo, herina Bode, Horatio Freund, Hypatia Callisto, Hypatia Pickens, Identity Euler, Imnotgoing Sideways, Innula Zenovka, Iyoba Tarantal, Jack Abraham, Jagga Meredith, Jennifer Boyle, Jeremy Marquez, Jessica Qin, Jinx Nordberg, Jo Bernandes, Jocial Sonnenkern, Joel Savard, Jondan Lundquist, Josef Munster, Josette Windlow, Juilan Tripsa, Juro Kothari, Justin RiversRunRed, Kagehi Kohn, Kaimen Takahe, Keklily Longfall, Ken Lavender, Kestral Karas, Khisme Nitely, Kimar Coba, Kithrak Kirkorian, Kitty Barnett, Kolor Fall, Komiko Okamoto, Korvel Noh, Larry Pixel, Leal Choche, len Starship, Lenae Munz, Lexi Frua, Lillie Cordeaux, Lizzy Macarthur, LSL Scientist, Luban Yiyuan, Luc Starsider, Maccus McCullough, Madison Blanc, Maggie Darwin, Mallory Destiny, Manx Wharton, Marc Claridge, Marc2 Sands, Matthew Anthony, Maxim RiversRunRed, Medhue Simoni, Melinda Latynina, Mencius Watts, Michi Lumin, Midian Farspire, Miles Glaz, Mindy Mathy, Mitch Wagner, Mo Hax, Mourna Biziou, Nao Noe, naofan Teardrop, Naomah Beaumont, Nathiel Siamendes, Nber Medici, Neko Link, Netpat Igaly, Neutron Chesnokov, Newfie Pendragon, Nicholai Laviscu, Nick Rhodes, Nicoladie Gymnast, Ollie Kubrick, Orenj Marat, Orion Delphis, Oryx Tempel, Parvati Silverweb, PeterPunk Mooney, Pixel Scientist, Pounce Teazle, Professor Noarlunga, Quantum Destiny, Quicksilver Hermes, Ralf Setsuko, RAT Quan, RedMokum Bravin, Revolution Perenti, Rezit Sideways, Rich Grainger, Rosco Teardrop, Rose Evans, Rudee Voom, RufusTT Horsefly, Saii Hallard, SaintLEOlions Zimer, Samm Larkham, Satanello Miami, SexySteven Morrisey, Sheet Spotter, Shnurui Troughton, sicarius Thorne, Sicarius Toxx, Sini Nubalo, SLB Wirefly, snowy Sidran, Soupa Segura, ST Mensing, Starshine Halasy, Stickman Ingmann, Synystyr Texan, Takeda Terrawyng, Tali Rosca, Templar Merlin, Tezcatlipoca Bisiani, Tiel Stonecutter, Tony Kembia, TouchaHoney Perhaps, Trey Reanimator, TriloByte Zanzibar, Trinity Dechou, Trinity Dejavu, Unlikely Quintessa, UsikuFarasi Kanarik, Veritas Raymaker, Vex Streeter, Viaticus Speculaas, Villain Baroque, Vixie Durant, Void Singer, Watty Berkson, Westley Schridde, Westley Streeter, Whimsy Winx, Winter Ventura, Wundur Primbee, xstorm Radek, YongYong Francois, Zak Westminster, Zana Kohime, Zaren Alexander, Zeja Pyle, ZenMondo Wormser, Zoex Flanagan e muitos mais.
 
 
 
-- 
cgit v1.2.3


From a913e25fcc47c893c116e3a2a42449559bbcb8fe Mon Sep 17 00:00:00 2001
From: Seth ProductEngine <slitovchuk@productengine.com>
Date: Sat, 9 Oct 2010 00:24:57 +0300
Subject: STORM-289 FIXED browser navigation bar layout to make it resize
 properly after minimize/restore. When floater media browser is minimized its
 button bars are shrunk to zero height and their height is not restored upon
 unminimizing because they have auto_resize disabled. Setting min_height for
 the button bars makes them restored with this height upon uminimizing the
 floater.

---
 indra/newview/skins/default/xui/en/floater_media_browser.xml | 3 +++
 1 file changed, 3 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/floater_media_browser.xml b/indra/newview/skins/default/xui/en/floater_media_browser.xml
index c02d607586..1b21b97092 100644
--- a/indra/newview/skins/default/xui/en/floater_media_browser.xml
+++ b/indra/newview/skins/default/xui/en/floater_media_browser.xml
@@ -33,6 +33,7 @@
          height="20"
          layout="topleft"
          left="0"
+         min_height="20"
          name="nav_controls"
          top="400"
          user_resize="false"
@@ -106,6 +107,7 @@
          height="20"
          layout="topleft"
          left_delta="0"
+         min_height="20"         
          name="time_controls"
          top_delta="0"
          user_resize="false"
@@ -163,6 +165,7 @@
          height="20"
          layout="topleft"
          left_delta="0"
+         min_height="20"         
          name="parcel_owner_controls"
          top_delta="0"
          user_resize="false"
-- 
cgit v1.2.3


From 023644b4bcd41519f21cc350139d97e78254872c Mon Sep 17 00:00:00 2001
From: Merov Linden <merov@lindenlab.com>
Date: Fri, 8 Oct 2010 15:31:40 -0700
Subject: STORM-137: Fix windows packaging issue, namely, do not require a
 manifest to move the fmod.dll

---
 indra/newview/viewer_manifest.py | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index 26adc78459..84dd37ead3 100755
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -259,12 +259,6 @@ class WindowsManifest(ViewerManifest):
             except RuntimeError:
                 print "Skipping llkdu.dll"
 
-            # Get fmod dll, continue if missing
-            try:
-                self.path("fmod.dll")
-            except:
-                print "Skipping fmod.dll"
-
             # Get llcommon and deps. If missing assume static linkage and continue.
             try:
                 self.path('llcommon.dll')
@@ -277,6 +271,12 @@ class WindowsManifest(ViewerManifest):
 
             self.disable_manifest_check()
 
+            # Get fmod dll, continue if missing
+            try:
+                self.path("fmod.dll")
+            except:
+                print "Skipping fmod.dll"
+
             # For textures
             if self.args['configuration'].lower() == 'debug':
                 self.path("openjpegd.dll")
-- 
cgit v1.2.3


From 7ffc9b06c820d70724af2aef361ff9964e584e73 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Fri, 8 Oct 2010 16:56:02 -0700
Subject: Created a floater for setting display name

---
 indra/newview/CMakeLists.txt                       |   2 +
 indra/newview/llcallfloater.cpp                    |   3 +
 indra/newview/llfloaterdisplayname.cpp             | 178 +++++++++++++++++++++
 indra/newview/llfloaterdisplayname.h               |  38 +++++
 indra/newview/llhints.cpp                          |   5 +
 indra/newview/llpanelme.cpp                        | 106 ++----------
 indra/newview/llpanelme.h                          |   5 +-
 indra/newview/llviewerdisplayname.cpp              |  13 ++
 indra/newview/llviewerdisplayname.h                |   7 +-
 indra/newview/llviewerfloaterreg.cpp               |   2 +
 .../skins/default/xui/en/floater_display_name.xml  |  83 ++++++++++
 .../newview/skins/default/xui/en/notifications.xml |  41 +----
 12 files changed, 358 insertions(+), 125 deletions(-)
 create mode 100644 indra/newview/llfloaterdisplayname.cpp
 create mode 100644 indra/newview/llfloaterdisplayname.h
 create mode 100644 indra/newview/skins/default/xui/en/floater_display_name.xml

(limited to 'indra/newview')

diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 74b9179cb4..bd2489769a 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -169,6 +169,7 @@ set(viewer_SOURCE_FILES
     llfloatercamera.cpp
     llfloatercolorpicker.cpp
     llfloaterdaycycle.cpp
+    llfloaterdisplayname.cpp
     llfloaterenvsettings.cpp
     llfloaterevent.cpp
     llfloaterfonttest.cpp
@@ -701,6 +702,7 @@ set(viewer_HEADER_FILES
     llfloatercamera.h
     llfloatercolorpicker.h
     llfloaterdaycycle.h
+    llfloaterdisplayname.h
     llfloaterenvsettings.h
     llfloaterevent.h
     llfloaterfonttest.h
diff --git a/indra/newview/llcallfloater.cpp b/indra/newview/llcallfloater.cpp
index d3ef144ea8..078bd73379 100644
--- a/indra/newview/llcallfloater.cpp
+++ b/indra/newview/llcallfloater.cpp
@@ -45,6 +45,7 @@
 #include "llspeakers.h"
 #include "lltextutil.h"
 #include "lltransientfloatermgr.h"
+#include "llviewerdisplayname.h"
 #include "llviewerwindow.h"
 #include "llvoicechannel.h"
 #include "llviewerparcelmgr.h"
@@ -117,6 +118,8 @@ LLCallFloater::LLCallFloater(const LLSD& key)
 
 	// update the agent's name if display name setting change
 	LLAvatarNameCache::addUseDisplayNamesCallback(boost::bind(&LLCallFloater::updateAgentModeratorState, this));
+	LLViewerDisplayName::addNameChangedCallback(boost::bind(&LLCallFloater::updateAgentModeratorState, this));
+
 }
 
 LLCallFloater::~LLCallFloater()
diff --git a/indra/newview/llfloaterdisplayname.cpp b/indra/newview/llfloaterdisplayname.cpp
new file mode 100644
index 0000000000..11ac3d8fdf
--- /dev/null
+++ b/indra/newview/llfloaterdisplayname.cpp
@@ -0,0 +1,178 @@
+/** 
+ * @file llfloaterdisplayname.cpp
+ * @author Leyla Farazha
+ * @brief Implementation of the LLFloaterDisplayName class.
+ *
+ * $LicenseInfo:firstyear=2002&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+
+#include "llviewerprecompiledheaders.h"
+#include "llfloaterreg.h"
+#include "llfloater.h"
+
+#include "llnotificationsutil.h"
+#include "llviewerdisplayname.h"
+
+#include "llnotifications.h"
+#include "llfloaterdisplayname.h"
+#include "llavatarnamecache.h"
+
+#include "llagent.h"
+
+
+class LLFloaterDisplayName : public LLFloater
+{
+public:
+	LLFloaterDisplayName(const LLSD& key);
+	virtual ~LLFloaterDisplayName() {};
+	/*virtual*/	BOOL	postBuild();
+	void onSave();
+	void onReset();
+	void onCancel();
+	/*virtual*/ void onOpen(const LLSD& key);
+	
+private:
+	
+	void onCacheSetName(bool success,
+										  const std::string& reason,
+										  const LLSD& content);
+};
+
+LLFloaterDisplayName::LLFloaterDisplayName(const LLSD& key)
+	: LLFloater(key)
+{
+}
+
+void LLFloaterDisplayName::onOpen(const LLSD& key)
+{
+	getChild<LLUICtrl>("display_name_editor")->clear();
+	getChild<LLUICtrl>("display_name_confirm")->clear();
+}
+
+BOOL LLFloaterDisplayName::postBuild()
+{
+	getChild<LLUICtrl>("reset_btn")->setCommitCallback(boost::bind(&LLFloaterDisplayName::onReset, this));	
+	getChild<LLUICtrl>("cancel_btn")->setCommitCallback(boost::bind(&LLFloaterDisplayName::onCancel, this));	
+	getChild<LLUICtrl>("save_btn")->setCommitCallback(boost::bind(&LLFloaterDisplayName::onSave, this));	
+	
+	center();
+
+	return TRUE;
+}
+
+void LLFloaterDisplayName::onCacheSetName(bool success,
+										  const std::string& reason,
+										  const LLSD& content)
+{
+	if (success)
+	{
+		// Inform the user that the change took place, but will take a while
+		// to percolate.
+		LLSD args;
+		args["DISPLAY_NAME"] = content["display_name"];
+		LLNotificationsUtil::add("SetDisplayNameSuccess", args);
+
+		// Re-fetch my name, as it may have been sanitized by the service
+		//LLAvatarNameCache::get(getAvatarId(),
+		//	boost::bind(&LLPanelMyProfileEdit::onNameCache, this, _1, _2));
+		return;
+	}
+
+	// Request failed, notify the user
+	std::string error_tag = content["error_tag"].asString();
+	llinfos << "set name failure error_tag " << error_tag << llendl;
+
+	// We might have a localized string for this message
+	// error_args will usually be empty from the server.
+	if (!error_tag.empty()
+		&& LLNotifications::getInstance()->templateExists(error_tag))
+	{
+		LLNotificationsUtil::add(error_tag);
+		return;
+	}
+
+	// The server error might have a localized message for us
+	std::string lang_code = LLUI::getLanguage();
+	LLSD error_desc = content["error_description"];
+	if (error_desc.has( lang_code ))
+	{
+		LLSD args;
+		args["MESSAGE"] = error_desc[lang_code].asString();
+		LLNotificationsUtil::add("GenericAlert", args);
+		return;
+	}
+
+	// No specific error, throw a generic one
+	LLNotificationsUtil::add("SetDisplayNameFailedGeneric");
+}
+
+void LLFloaterDisplayName::onCancel()
+{
+	setVisible(false);
+}
+
+void LLFloaterDisplayName::onReset()
+{
+	LLViewerDisplayName::set("",
+		boost::bind(&LLFloaterDisplayName::onCacheSetName, this, _1, _2, _3));
+
+	setVisible(false);
+}
+
+
+void LLFloaterDisplayName::onSave()
+{
+	std::string display_name_utf8 = getChild<LLUICtrl>("display_name_editor")->getValue().asString();
+	std::string display_name_confirm = getChild<LLUICtrl>("display_name_confirm")->getValue().asString();
+
+	if (display_name_utf8.compare(display_name_confirm))
+	{
+		LLNotificationsUtil::add("SetDisplayNameMismatch");
+		return;
+	}
+
+	const U32 DISPLAY_NAME_MAX_LENGTH = 31; // characters, not bytes
+	LLWString display_name_wstr = utf8string_to_wstring(display_name_utf8);
+	if (display_name_wstr.size() > DISPLAY_NAME_MAX_LENGTH)
+	{
+		LLSD args;
+		args["LENGTH"] = llformat("%d", DISPLAY_NAME_MAX_LENGTH);
+		LLNotificationsUtil::add("SetDisplayNameFailedLength", args);
+		return;
+	}
+
+	LLViewerDisplayName::set(display_name_utf8,
+		boost::bind(&LLFloaterDisplayName::onCacheSetName, this, _1, _2, _3));	
+
+	setVisible(false);
+}
+
+
+//////////////////////////////////////////////////////////////////////////////
+// LLInspectObjectUtil
+//////////////////////////////////////////////////////////////////////////////
+void LLFloaterDisplayNameUtil::registerFloater()
+{
+	LLFloaterReg::add("display_name", "floater_display_name.xml",
+					  &LLFloaterReg::build<LLFloaterDisplayName>);
+}
diff --git a/indra/newview/llfloaterdisplayname.h b/indra/newview/llfloaterdisplayname.h
new file mode 100644
index 0000000000..a00bf56712
--- /dev/null
+++ b/indra/newview/llfloaterdisplayname.h
@@ -0,0 +1,38 @@
+/** 
+ * @file llfloaterdisplayname.h
+ *
+ * $LicenseInfo:firstyear=2009&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LLFLOATERDISPLAYNAME_H
+#define LLFLOATERDISPLAYNAME_H
+
+
+namespace LLFloaterDisplayNameUtil
+{
+	// Register with LLFloaterReg
+	void registerFloater();
+}
+
+
+
+#endif
diff --git a/indra/newview/llhints.cpp b/indra/newview/llhints.cpp
index d837ed8205..b326fc26f2 100644
--- a/indra/newview/llhints.cpp
+++ b/indra/newview/llhints.cpp
@@ -210,10 +210,15 @@ void LLHintPopup::draw()
 			}
 			else if (!targetp->isInVisibleChain()) 
 			{
+				setEnabled(false);
+				setMouseOpaque(false);
 				// if target is invisible, don't draw, but keep alive in case widget comes back
 			}
 			else
 			{
+				setEnabled(true);
+				setMouseOpaque(true);
+
 				LLRect target_rect;
 				targetp->localRectToOtherView(targetp->getLocalRect(), &target_rect, getParent());
 
diff --git a/indra/newview/llpanelme.cpp b/indra/newview/llpanelme.cpp
index 3cc6b32678..9a13d00685 100644
--- a/indra/newview/llpanelme.cpp
+++ b/indra/newview/llpanelme.cpp
@@ -35,6 +35,7 @@
 #include "llagentcamera.h"
 #include "llagentwearables.h"
 #include "llfirstuse.h"
+#include "llfloaterreg.h"
 #include "llhints.h"
 #include "llsidetray.h"
 #include "llviewercontrol.h"
@@ -208,6 +209,14 @@ void LLPanelMyProfileEdit::onOpen(const LLSD& key)
 	}
 }
 
+void LLPanelMyProfileEdit::onClose(const LLSD& key)
+{
+	if (LLAvatarNameCache::useDisplayNames())
+	{
+		LLFirstUse::setDisplayName(false);
+	}	
+}
+
 void LLPanelMyProfileEdit::processProperties(void* data, EAvatarProcessorType type)
 {
 	if(APT_PROPERTIES == type)
@@ -262,6 +271,12 @@ void LLPanelMyProfileEdit::onNameCache(const LLUUID& agent_id, const LLAvatarNam
 	}
 }
 
+void LLPanelMyProfileEdit::onAvatarNameChanged()
+{
+	LLAvatarNameCache::get(getAvatarId(),
+		boost::bind(&LLPanelMyProfileEdit::onNameCache, this, _1, _2));
+}
+
 BOOL LLPanelMyProfileEdit::postBuild()
 {
 	initTexturePickerMouseEvents();
@@ -273,7 +288,7 @@ BOOL LLPanelMyProfileEdit::postBuild()
 		boost::bind(&LLPanelMyProfileEdit::onClickSetName, this));
 
 	LLHints::registerHintTarget("set_display_name", getChild<LLUICtrl>("set_name")->getHandle());
-
+	LLViewerDisplayName::addNameChangedCallback(boost::bind(&LLPanelMyProfileEdit::onAvatarNameChanged, this));
 	return LLPanelAvatarProfile::postBuild();
 }
 /**
@@ -316,88 +331,6 @@ void LLPanelMyProfileEdit::onTexturePickerMouseLeave(LLUICtrl* ctrl)
 	mTextureEditIconMap[ctrl->getName()]->setVisible(FALSE);
 }
 
-void LLPanelMyProfileEdit::onCacheSetName(bool success,
-										  const std::string& reason,
-										  const LLSD& content)
-{
-	if (success)
-	{
-		// Inform the user that the change took place, but will take a while
-		// to percolate.
-		LLSD args;
-		args["DISPLAY_NAME"] = content["display_name"];
-		LLNotificationsUtil::add("SetDisplayNameSuccess", args);
-
-		// Re-fetch my name, as it may have been sanitized by the service
-		LLAvatarNameCache::get(getAvatarId(),
-			boost::bind(&LLPanelMyProfileEdit::onNameCache, this, _1, _2));
-		return;
-	}
-
-	// Request failed, notify the user
-	std::string error_tag = content["error_tag"].asString();
-	llinfos << "set name failure error_tag " << error_tag << llendl;
-
-	// We might have a localized string for this message
-	// error_args will usually be empty from the server.
-	if (!error_tag.empty()
-		&& LLNotifications::getInstance()->templateExists(error_tag))
-	{
-		LLNotificationsUtil::add(error_tag);
-		return;
-	}
-
-	// The server error might have a localized message for us
-	std::string lang_code = LLUI::getLanguage();
-	LLSD error_desc = content["error_description"];
-	if (error_desc.has( lang_code ))
-	{
-		LLSD args;
-		args["MESSAGE"] = error_desc[lang_code].asString();
-		LLNotificationsUtil::add("GenericAlert", args);
-		return;
-	}
-
-	// No specific error, throw a generic one
-	LLNotificationsUtil::add("SetDisplayNameFailedGeneric");
-}
-
-void LLPanelMyProfileEdit::onDialogSetName(const LLSD& notification, const LLSD& response)
-{
-	S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
-	if (option == 0 || option == 1)
-	{
-		LLUUID agent_id = notification["payload"]["agent_id"];
-		if (agent_id.isNull()) return;
-
-		std::string display_name_utf8;
-		if (option == 0)
-		{
-			// user gave us a name
-			display_name_utf8 = response["display_name"].asString();
-		}
-		else
-		{
-			// reset back to People API default
-			display_name_utf8 = "";
-		}
-
-		const U32 DISPLAY_NAME_MAX_LENGTH = 31; // characters, not bytes
-		LLWString display_name_wstr = utf8string_to_wstring(display_name_utf8);
-		if (display_name_wstr.size() > DISPLAY_NAME_MAX_LENGTH)
-		{
-			LLSD args;
-			args["LENGTH"] = llformat("%d", DISPLAY_NAME_MAX_LENGTH);
-			LLNotificationsUtil::add("SetDisplayNameFailedLength", args);
-			return;
-		}
-
-		LLViewerDisplayName::set(display_name_utf8,
-			boost::bind(&LLPanelMyProfileEdit::onCacheSetName, this,
-				_1, _2, _3));
-	}
-}
-
 void LLPanelMyProfileEdit::onClickSetName()
 {	
 	LLAvatarNameCache::get(getAvatarId(), 
@@ -444,12 +377,7 @@ void LLPanelMyProfileEdit::onAvatarNameCache(const LLUUID& agent_id, const LLAva
 		return;
 	}
 	
-	LLSD args;
-	args["DISPLAY_NAME"] = av_name.mDisplayName;
-	LLSD payload;
-	payload["agent_id"] = agent_id;
-	LLNotificationsUtil::add("SetDisplayName", args, payload, 
-		boost::bind(&LLPanelMyProfileEdit::onDialogSetName, this, _1, _2));
+	LLFloaterReg::showInstance("display_name");
 }
 
 void LLPanelMyProfileEdit::enableEditing(bool enable)
diff --git a/indra/newview/llpanelme.h b/indra/newview/llpanelme.h
index 93264922f6..d5b2fee869 100644
--- a/indra/newview/llpanelme.h
+++ b/indra/newview/llpanelme.h
@@ -78,6 +78,9 @@ public:
 	/*virtual*/BOOL postBuild();
 
 	/*virtual*/ void onOpen(const LLSD& key);
+	/*virtual*/ void onClose(const LLSD& key);
+
+	void onAvatarNameChanged();
 
 protected:	
 
@@ -91,8 +94,6 @@ private:
 	void onTexturePickerMouseEnter(LLUICtrl* ctrl);
 	void onTexturePickerMouseLeave(LLUICtrl* ctrl);
 	void onClickSetName();
-	void onDialogSetName(const LLSD& notification, const LLSD& response);
-	void onCacheSetName(bool success, const std::string& reason, const LLSD& content);
 	void onAvatarNameCache(const LLUUID& id, const LLAvatarName& av_name);
 
 	/**
diff --git a/indra/newview/llviewerdisplayname.cpp b/indra/newview/llviewerdisplayname.cpp
index f71a7c2d20..5741fab29a 100644
--- a/indra/newview/llviewerdisplayname.cpp
+++ b/indra/newview/llviewerdisplayname.cpp
@@ -44,6 +44,15 @@ namespace LLViewerDisplayName
 {
 	// Fired when viewer receives server response to display name change
 	set_name_signal_t sSetDisplayNameSignal;
+
+	// Fired when there is a change in the agent's name
+	name_changed_signal_t sNameChangedSignal;
+
+	void addNameChangedCallback(const name_changed_signal_t::slot_type& cb) 
+	{ 
+		sNameChangedSignal.connect(cb); 
+	}
+
 }
 
 class LLSetDisplayNameResponder : public LLHTTPClient::Responder
@@ -183,6 +192,10 @@ class LLDisplayNameUpdate : public LLHTTPNode
 		args["SLID"] = av_name.mUsername;
 		args["NEW_NAME"] = av_name.mDisplayName;
 		LLNotificationsUtil::add("DisplayNameUpdate", args);
+		if (agent_id == gAgent.getID())
+		{
+			LLViewerDisplayName::sNameChangedSignal();
+		}
 	}
 };
 
diff --git a/indra/newview/llviewerdisplayname.h b/indra/newview/llviewerdisplayname.h
index 922263eb12..16d59ae43b 100644
--- a/indra/newview/llviewerdisplayname.h
+++ b/indra/newview/llviewerdisplayname.h
@@ -38,11 +38,16 @@ namespace LLViewerDisplayName
 		void (bool success, const std::string& reason, const LLSD& content)>
 			set_name_signal_t;
 	typedef set_name_signal_t::slot_type set_name_slot_t;
+	
+	typedef boost::signals2::signal<void (void)> name_changed_signal_t;
+	typedef name_changed_signal_t::slot_type name_changed_slot_t;
 
 	// Sends an update to the server to change a display name
 	// and call back when done.  May not succeed due to service
 	// unavailable or name not available.
-	void set(const std::string& display_name, const set_name_slot_t& slot);
+	void set(const std::string& display_name, const set_name_slot_t& slot); 
+	
+	void addNameChangedCallback(const name_changed_signal_t::slot_type& cb);
 }
 
 #endif // LLVIEWERDISPLAYNAME_H
diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp
index 7490ccf77a..b3f14b441d 100644
--- a/indra/newview/llviewerfloaterreg.cpp
+++ b/indra/newview/llviewerfloaterreg.cpp
@@ -49,6 +49,7 @@
 #include "llfloaterbump.h"
 #include "llfloatercamera.h"
 #include "llfloaterdaycycle.h"
+#include "llfloaterdisplayname.h"
 #include "llfloaterevent.h"
 #include "llfloatersearch.h"
 #include "llfloaterenvsettings.h"
@@ -176,6 +177,7 @@ void LLViewerFloaterReg::registerFloaters()
 	LLInspectObjectUtil::registerFloater();
 	LLInspectRemoteObjectUtil::registerFloater();
 	LLNotificationsUI::registerFloater();
+	LLFloaterDisplayNameUtil::registerFloater();
 	
 	LLFloaterReg::add("lagmeter", "floater_lagmeter.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterLagMeter>);
 	LLFloaterReg::add("land_holdings", "floater_land_holdings.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterLandHoldings>);
diff --git a/indra/newview/skins/default/xui/en/floater_display_name.xml b/indra/newview/skins/default/xui/en/floater_display_name.xml
new file mode 100644
index 0000000000..ecf2e524aa
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/floater_display_name.xml
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<floater
+ legacy_header_height="18"
+ can_minimize="false"
+ can_close="false" 
+ height="280"
+ layout="topleft"
+ name="Display Name"
+ help_topic="display_name"
+ save_rect="false"
+ width="440">
+    <text
+     type="string"
+     length="1"
+     follows="left|top"
+     font="SansSerif"
+     height="40"
+     layout="topleft"
+     left="25"
+     name="info_text"
+     top="40"
+     use_ellipses="true"
+     width="400"
+     wrap="true">
+      The name you give your avatar is called your Display Name. You can change it once a week.
+    </text>
+    <text
+      top_pad="15"
+      width="150"
+      height="20"
+      font="SansSerif"
+      name="set_name_label">
+      New display name:
+    </text>
+    <line_editor
+      width="330"
+      name="display_name_editor"
+      max_length_chars="31"
+      height="20"
+      top_pad="5"
+      left="50" />
+    <text
+       top_pad="15"
+       left="25" 
+       width="300"
+       height="20"
+      font="SansSerif"
+    name="set_name_label">
+      Type your new name again to confirm:
+    </text>
+    <line_editor
+      width="330"
+      name="display_name_confirm"
+      max_length_chars="31"
+      height="20"
+      top_pad="5"
+      left="50" />
+    <button
+     height="23"
+     label="Save"
+     layout="topleft"
+     font="SansSerif"
+     left="35"
+     name="save_btn"
+     top_pad="40"
+     width="120" />
+    <button
+     height="23"
+     label="Reset"
+     layout="topleft"
+     font="SansSerif"
+     left_pad="5"
+     name="reset_btn"
+     width="120" />
+    <button
+     height="23"
+     label="Cancel"
+     font="SansSerif"
+     layout="topleft"
+     left_pad="5"
+     name="cancel_btn"
+     width="120" />
+</floater>
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index b837dfbed5..4e25efe555 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -3184,38 +3184,6 @@ You are no longer frozen.
     </form>
   </notification>
 
-  <notification
-   icon="alertmodal.tga"
-   name="SetDisplayName"
-   type="alert">
-    The name above your avatar's head is called a [secondlife:///app/help/display_name display_name]. You can change it periodically.
-
-    During the evaluation period of this Project Viewer release, you are able to update your Display Name as frequently as you wish. When this feature goes officially live, you will able to update your Display Name only once a week.
-
-    Press reset to make it the same as your username.
-
-    Change your display name?
-    <form name="form">
-      <input name="display_name" max_length_chars="31" type="text">
-[DISPLAY_NAME]
-      </input>
-      <button
-       default="true"
-       index="0"
-       name="Change"
-       text="Change"/>
-      <button
-       index="1"
-       name="Reset"
-       text="Reset"/>
-      <button
-       index="2"
-       name="Cancel"
-       text="Cancel"/>
-    </form>
-    <unique/>
-  </notification>
-
   <notification
    icon="alertmodal.tga"
    name="SetDisplayNameSuccess"
@@ -3256,7 +3224,14 @@ Please try a shorter name.
     Sorry, we could not set your display name.  Please try again later.
   </notification>
 
-<!-- *NOTE: This should never happen, users should see SetDisplayNameFailedLockout above -->
+  <notification
+   icon="alertmodal.tga"
+   name="SetDisplayNameMismatch"
+   type="alertmodal">
+    The display names you entered do not match. Please re-enter.
+  </notification>
+
+  <!-- *NOTE: This should never happen, users should see SetDisplayNameFailedLockout above -->
   <notification
    icon="alertmodal.tga"
    name="AgentDisplayNameUpdateThresholdExceeded"
-- 
cgit v1.2.3


From 3059e130984052091cadd92007413df3c8cea07d Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Fri, 8 Oct 2010 17:01:32 -0700
Subject: Fixed issue where non-visible hint wasn't allowing mouse events to
 pass through

---
 indra/newview/llhints.cpp | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llhints.cpp b/indra/newview/llhints.cpp
index b326fc26f2..7f6df627e0 100644
--- a/indra/newview/llhints.cpp
+++ b/indra/newview/llhints.cpp
@@ -210,12 +210,14 @@ void LLHintPopup::draw()
 			}
 			else if (!targetp->isInVisibleChain()) 
 			{
+				// if target is invisible, don't draw, but keep alive in case widget comes back
+				// but do make it so that it allows mouse events to pass through
 				setEnabled(false);
 				setMouseOpaque(false);
-				// if target is invisible, don't draw, but keep alive in case widget comes back
 			}
 			else
 			{
+				// revert back enabled and mouse opaque state in case we disabled it before
 				setEnabled(true);
 				setMouseOpaque(true);
 
-- 
cgit v1.2.3


From 393c819477b268aa0a05ec0a006e1dba27d6e6c6 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Sun, 10 Oct 2010 15:25:11 +0100
Subject: VWR-21967 There's lots of ::renderForSelect() code that we don't need
 any more. VWR-22088 Remove underlying ::renderForSelect() code
 (render-pipeline)

---
 indra/newview/lldrawpool.h               |   1 -
 indra/newview/lldrawpoolavatar.cpp       |  73 -------------
 indra/newview/lldrawpoolavatar.h         |   1 -
 indra/newview/lldrawpoolclouds.cpp       |   3 -
 indra/newview/lldrawpoolclouds.h         |   1 -
 indra/newview/lldrawpoolground.cpp       |   4 -
 indra/newview/lldrawpoolground.h         |   1 -
 indra/newview/lldrawpoolsky.cpp          |   4 -
 indra/newview/lldrawpoolsky.h            |   1 -
 indra/newview/lldrawpoolterrain.cpp      |  21 ----
 indra/newview/lldrawpoolterrain.h        |   1 -
 indra/newview/lldrawpooltree.cpp         |  62 -----------
 indra/newview/lldrawpooltree.h           |   1 -
 indra/newview/lldrawpoolwater.cpp        |   6 -
 indra/newview/lldrawpoolwater.h          |   1 -
 indra/newview/llface.cpp                 |  78 -------------
 indra/newview/llface.h                   |   1 -
 indra/newview/llfloatersnapshot.cpp      |   2 -
 indra/newview/llglsandbox.cpp            |  94 +++++++---------
 indra/newview/llhudicon.cpp              |   5 -
 indra/newview/llhudicon.h                |   1 -
 indra/newview/llhudobject.cpp            |  21 ----
 indra/newview/llhudobject.h              |   1 -
 indra/newview/llhudtext.cpp              |  78 ++++---------
 indra/newview/llhudtext.h                |   3 +-
 indra/newview/llviewerjoint.cpp          |   2 +-
 indra/newview/llviewerjointmesh.cpp      |  27 +----
 indra/newview/llviewerobjectlist.cpp     |  28 -----
 indra/newview/llviewerobjectlist.h       |   1 -
 indra/newview/llviewerwindow.cpp         |  29 ++---
 indra/newview/llviewerwindow.h           |   3 +-
 indra/newview/llviewerwindowlistener.cpp |   3 +-
 indra/newview/llvoavatar.cpp             |   2 +-
 indra/newview/pipeline.cpp               | 181 -------------------------------
 indra/newview/pipeline.h                 |   2 -
 35 files changed, 77 insertions(+), 666 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/lldrawpool.h b/indra/newview/lldrawpool.h
index 221f81ec25..c69fee2bdf 100644
--- a/indra/newview/lldrawpool.h
+++ b/indra/newview/lldrawpool.h
@@ -167,7 +167,6 @@ public:
 	LLFacePool(const U32 type);
 	virtual ~LLFacePool();
 	
-	virtual void renderForSelect() = 0;
 	BOOL isDead() { return mReferences.empty(); }
 	
 	virtual LLViewerTexture *getTexture();
diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp
index 8cf4dc1b95..dbd5da31a6 100644
--- a/indra/newview/lldrawpoolavatar.cpp
+++ b/indra/newview/lldrawpoolavatar.cpp
@@ -743,79 +743,6 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)
 	}
 }
 
-//-----------------------------------------------------------------------------
-// renderForSelect()
-//-----------------------------------------------------------------------------
-void LLDrawPoolAvatar::renderForSelect()
-{
-
-
-	if (mDrawFace.empty())
-	{
-		return;
-	}
-
-	const LLFace *facep = mDrawFace[0];
-	if (!facep->getDrawable())
-	{
-		return;
-	}
-	LLVOAvatar *avatarp = (LLVOAvatar *)facep->getDrawable()->getVObj().get();
-
-	if (avatarp->isDead() || avatarp->mIsDummy || avatarp->mDrawable.isNull())
-	{
-		return;
-	}
-
-	S32 curr_shader_level = getVertexShaderLevel();
-	S32 name = avatarp->mDrawable->getVObj()->mGLName;
-	LLColor4U color((U8)(name >> 16), (U8)(name >> 8), (U8)name);
-
-	BOOL impostor = avatarp->isImpostor();
-	if (impostor)
-	{
-		gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_VERT_COLOR);
-		gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_ALPHA, LLTexUnit::TBS_VERT_ALPHA);
-
-		avatarp->renderImpostor(color);
-
-		gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
-		return;
-	}
-
-	sVertexProgram = &gAvatarPickProgram;
-	if (curr_shader_level > 0)
-	{
-		gAvatarMatrixParam = sVertexProgram->mUniform[LLViewerShaderMgr::AVATAR_MATRIX];
-	}
-	gGL.setAlphaRejectSettings(LLRender::CF_GREATER_EQUAL, 0.2f);
-	gGL.setSceneBlendType(LLRender::BT_REPLACE);
-
-	glColor4ubv(color.mV);
-
-	if (curr_shader_level > 0)  // for hardware blending
-	{
-		sRenderingSkinned = TRUE;
-		sVertexProgram->bind();
-		enable_vertex_weighting(sVertexProgram->mAttribute[LLViewerShaderMgr::AVATAR_WEIGHT]);
-	}
-	
-	avatarp->renderSkinned(AVATAR_RENDER_PASS_SINGLE);
-
-	// if we're in software-blending, remember to set the fence _after_ we draw so we wait till this rendering is done
-	if (curr_shader_level > 0)
-	{
-		sRenderingSkinned = FALSE;
-		sVertexProgram->unbind();
-		disable_vertex_weighting(sVertexProgram->mAttribute[LLViewerShaderMgr::AVATAR_WEIGHT]);
-	}
-
-	gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
-	gGL.setSceneBlendType(LLRender::BT_ALPHA);
-
-	// restore texture mode
-	gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
-}
 
 //-----------------------------------------------------------------------------
 // getDebugTexture()
diff --git a/indra/newview/lldrawpoolavatar.h b/indra/newview/lldrawpoolavatar.h
index c46fed824e..f536d3c911 100644
--- a/indra/newview/lldrawpoolavatar.h
+++ b/indra/newview/lldrawpoolavatar.h
@@ -64,7 +64,6 @@ public:
 	/*virtual*/ void endRenderPass(S32 pass);
 	/*virtual*/ void prerender();
 	/*virtual*/ void render(S32 pass = 0);
-	/*virtual*/ void renderForSelect();
 
 	/*virtual*/ S32 getNumDeferredPasses();
 	/*virtual*/ void beginDeferredPass(S32 pass);
diff --git a/indra/newview/lldrawpoolclouds.cpp b/indra/newview/lldrawpoolclouds.cpp
index f7da144671..5db1d8cfed 100644
--- a/indra/newview/lldrawpoolclouds.cpp
+++ b/indra/newview/lldrawpoolclouds.cpp
@@ -95,6 +95,3 @@ void LLDrawPoolClouds::render(S32 pass)
 }
 
 
-void LLDrawPoolClouds::renderForSelect()
-{
-}
diff --git a/indra/newview/lldrawpoolclouds.h b/indra/newview/lldrawpoolclouds.h
index 548720ed9c..019f11a795 100644
--- a/indra/newview/lldrawpoolclouds.h
+++ b/indra/newview/lldrawpoolclouds.h
@@ -49,7 +49,6 @@ public:
 	/*virtual*/ void enqueue(LLFace *face);
 	/*virtual*/ void beginRenderPass(S32 pass);
 	/*virtual*/ void render(S32 pass = 0);
-	/*virtual*/ void renderForSelect();
 };
 
 #endif // LL_LLDRAWPOOLSKY_H
diff --git a/indra/newview/lldrawpoolground.cpp b/indra/newview/lldrawpoolground.cpp
index e950fbfa82..bb7c55e931 100644
--- a/indra/newview/lldrawpoolground.cpp
+++ b/indra/newview/lldrawpoolground.cpp
@@ -85,7 +85,3 @@ void LLDrawPoolGround::render(S32 pass)
 	glPopMatrix();
 }
 
-void LLDrawPoolGround::renderForSelect()
-{
-}
-
diff --git a/indra/newview/lldrawpoolground.h b/indra/newview/lldrawpoolground.h
index c6c7cbf964..a4f8a3fcf5 100644
--- a/indra/newview/lldrawpoolground.h
+++ b/indra/newview/lldrawpoolground.h
@@ -47,7 +47,6 @@ public:
 
 	/*virtual*/ void prerender();
 	/*virtual*/ void render(S32 pass = 0);
-	/*virtual*/ void renderForSelect();
 };
 
 #endif // LL_LLDRAWPOOLGROUND_H
diff --git a/indra/newview/lldrawpoolsky.cpp b/indra/newview/lldrawpoolsky.cpp
index d811ab8c54..41ea8d73b3 100644
--- a/indra/newview/lldrawpoolsky.cpp
+++ b/indra/newview/lldrawpoolsky.cpp
@@ -143,10 +143,6 @@ void LLDrawPoolSky::renderSkyCubeFace(U8 side)
 	}
 }
 
-void LLDrawPoolSky::renderForSelect()
-{
-}
-
 void LLDrawPoolSky::endRenderPass( S32 pass )
 {
 }
diff --git a/indra/newview/lldrawpoolsky.h b/indra/newview/lldrawpoolsky.h
index 15d643c886..098bd2134a 100644
--- a/indra/newview/lldrawpoolsky.h
+++ b/indra/newview/lldrawpoolsky.h
@@ -58,7 +58,6 @@ public:
 
 	/*virtual*/ void prerender();
 	/*virtual*/ void render(S32 pass = 0);
-	/*virtual*/ void renderForSelect();
 	/*virtual*/ void endRenderPass(S32 pass);
 	void setSkyTex(LLSkyTex* const st) { mSkyTex = st; }
 
diff --git a/indra/newview/lldrawpoolterrain.cpp b/indra/newview/lldrawpoolterrain.cpp
index 3dede9d8fc..84eeace9c6 100644
--- a/indra/newview/lldrawpoolterrain.cpp
+++ b/indra/newview/lldrawpoolterrain.cpp
@@ -899,27 +899,6 @@ void LLDrawPoolTerrain::renderOwnership()
 }
 
 
-void LLDrawPoolTerrain::renderForSelect()
-{
-	if (mDrawFace.empty())
-	{
-		return;
-	}
-
-	
-	gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
-
-	for (std::vector<LLFace*>::iterator iter = mDrawFace.begin();
-		 iter != mDrawFace.end(); iter++)
-	{
-		LLFace *facep = *iter;
-		if (!facep->getDrawable()->isDead() && (facep->getDrawable()->getVObj()->mGLName))
-		{
-			facep->renderForSelect(LLVertexBuffer::MAP_VERTEX);
-		}
-	}
-}
-
 void LLDrawPoolTerrain::dirtyTextures(const std::set<LLViewerFetchedTexture*>& textures)
 {
 	LLViewerFetchedTexture* tex = LLViewerTextureManager::staticCastToFetchedTexture(mTexturep) ;
diff --git a/indra/newview/lldrawpoolterrain.h b/indra/newview/lldrawpoolterrain.h
index 730298609d..3056da44d5 100644
--- a/indra/newview/lldrawpoolterrain.h
+++ b/indra/newview/lldrawpoolterrain.h
@@ -66,7 +66,6 @@ public:
 	/*virtual*/ void prerender();
 	/*virtual*/ void beginRenderPass( S32 pass );
 	/*virtual*/ void endRenderPass( S32 pass );
-	/*virtual*/ void renderForSelect();
 	/*virtual*/ void dirtyTextures(const std::set<LLViewerFetchedTexture*>& textures);
 	/*virtual*/ LLViewerTexture *getTexture();
 	/*virtual*/ LLViewerTexture *getDebugTexture();
diff --git a/indra/newview/lldrawpooltree.cpp b/indra/newview/lldrawpooltree.cpp
index 09cca8b73c..f1198c9a8d 100644
--- a/indra/newview/lldrawpooltree.cpp
+++ b/indra/newview/lldrawpooltree.cpp
@@ -183,68 +183,6 @@ void LLDrawPoolTree::endShadowPass(S32 pass)
 }
 
 
-void LLDrawPoolTree::renderForSelect()
-{
-	if (mDrawFace.empty())
-	{
-		return;
-	}
-
-	LLOverrideFaceColor color(this, 1.f, 1.f, 1.f, 1.f);
-
-	LLGLSObjectSelectAlpha gls_alpha;
-	gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
-
-	gGL.setSceneBlendType(LLRender::BT_REPLACE);
-	gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f);
-
-	gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR);
-	gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_ALPHA, LLTexUnit::TBS_VERT_ALPHA);
-
-	if (gSavedSettings.getBOOL("RenderAnimateTrees"))
-	{
-		renderTree(TRUE);
-	}
-	else
-	{
-		gGL.getTexUnit(sDiffTex)->bind(mTexturep);
-				
-		for (std::vector<LLFace*>::iterator iter = mDrawFace.begin();
-			 iter != mDrawFace.end(); iter++)
-		{
-			LLFace *face = *iter;
-			LLDrawable *drawablep = face->getDrawable();
-
-			if (drawablep->isDead() || face->mVertexBuffer.isNull())
-			{
-				continue;
-			}
-
-			// Render each of the trees
-			LLVOTree *treep = (LLVOTree *)drawablep->getVObj().get();
-
-			LLColor4U color(255,255,255,255);
-
-			if (treep->mGLName != 0)
-			{
-				S32 name = treep->mGLName;
-				color = LLColor4U((U8)(name >> 16), (U8)(name >> 8), (U8)name, 255);
-				
-				LLFacePool::LLOverrideFaceColor col(this, color);
-				
-				face->mVertexBuffer->setBuffer(LLDrawPoolTree::VERTEX_DATA_MASK);
-				face->mVertexBuffer->drawRange(LLRender::TRIANGLES, 0, face->mVertexBuffer->getRequestedVerts()-1, face->mVertexBuffer->getRequestedIndices(), 0); 
-				gPipeline.addTrianglesDrawn(face->mVertexBuffer->getRequestedIndices());
-			}
-		}
-	}
-
-	gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
-	gGL.setSceneBlendType(LLRender::BT_ALPHA);
-
-	gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
-}
-
 void LLDrawPoolTree::renderTree(BOOL selecting)
 {
 	LLGLState normalize(GL_NORMALIZE, TRUE);
diff --git a/indra/newview/lldrawpooltree.h b/indra/newview/lldrawpooltree.h
index cebe41f75f..ddb259bb82 100644
--- a/indra/newview/lldrawpooltree.h
+++ b/indra/newview/lldrawpooltree.h
@@ -62,7 +62,6 @@ public:
 	/*virtual*/ void render(S32 pass = 0);
 	/*virtual*/ void endRenderPass( S32 pass );
 	/*virtual*/ S32	 getNumPasses() { return 1; }
-	/*virtual*/ void renderForSelect();
 	/*virtual*/ BOOL verify() const;
 	/*virtual*/ LLViewerTexture *getTexture();
 	/*virtual*/ LLViewerTexture *getDebugTexture();
diff --git a/indra/newview/lldrawpoolwater.cpp b/indra/newview/lldrawpoolwater.cpp
index ce1b899d55..c20e1f9a26 100644
--- a/indra/newview/lldrawpoolwater.cpp
+++ b/indra/newview/lldrawpoolwater.cpp
@@ -601,12 +601,6 @@ void LLDrawPoolWater::shade()
 
 }
 
-void LLDrawPoolWater::renderForSelect()
-{
-	// Can't select water!
-	return;
-}
-
 LLViewerTexture *LLDrawPoolWater::getDebugTexture()
 {
 	return LLViewerFetchedTexture::sSmokeImagep;
diff --git a/indra/newview/lldrawpoolwater.h b/indra/newview/lldrawpoolwater.h
index 3ab4bc5e2c..2648a5276c 100644
--- a/indra/newview/lldrawpoolwater.h
+++ b/indra/newview/lldrawpoolwater.h
@@ -74,7 +74,6 @@ public:
 	/*virtual*/ S32 getNumPasses();
 	/*virtual*/ void render(S32 pass = 0);
 	/*virtual*/ void prerender();
-	/*virtual*/ void renderForSelect();
 
 	/*virtual*/ LLViewerTexture *getDebugTexture();
 	/*virtual*/ LLColor3 getDebugColor() const; // For AGP debug display
diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp
index d22950cad3..2471da9da5 100644
--- a/indra/newview/llface.cpp
+++ b/indra/newview/llface.cpp
@@ -399,84 +399,6 @@ void LLFace::updateCenterAgent()
 	}
 }
 
-void LLFace::renderForSelect(U32 data_mask)
-{
-	if(mDrawablep.isNull() || mVertexBuffer.isNull())
-	{
-		return;
-	}
-
-	LLSpatialGroup* group = mDrawablep->getSpatialGroup();
-	if (!group || group->isState(LLSpatialGroup::GEOM_DIRTY))
-	{
-		return;
-	}
-
-	if (mVObjp->mGLName)
-	{
-		S32 name = mVObjp->mGLName;
-
-		LLColor4U color((U8)(name >> 16), (U8)(name >> 8), (U8)name);
-#if 0 // *FIX: Postponing this fix until we have texcoord pick info...
-		if (mTEOffset != -1)
-		{
-			color.mV[VALPHA] = (U8)(getTextureEntry()->getColor().mV[VALPHA] * 255.f);
-		}
-#endif
-		glColor4ubv(color.mV);
-
-		if (!getPool())
-		{
-			switch (getPoolType())
-			{
-			case LLDrawPool::POOL_ALPHA:
-				gGL.getTexUnit(0)->bind(getTexture());
-				break;
-			default:
-				gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
-				break;
-			}
-		}
-
-		mVertexBuffer->setBuffer(data_mask);
-#if !LL_RELEASE_FOR_DOWNLOAD
-		LLGLState::checkClientArrays("", data_mask);
-#endif
-		if (mTEOffset != -1)
-		{
-			// mask off high 4 bits (16 total possible faces)
-			color.mV[0] &= 0x0f;
-			color.mV[0] |= (mTEOffset & 0x0f) << 4;
-			glColor4ubv(color.mV);
-		}
-
-		if (mIndicesCount)
-		{
-			if (isState(GLOBAL))
-			{
-				if (mDrawablep->getVOVolume())
-				{
-					glPushMatrix();
-					glMultMatrixf((float*) mDrawablep->getRegion()->mRenderMatrix.mMatrix);
-					mVertexBuffer->draw(LLRender::TRIANGLES, mIndicesCount, mIndicesIndex);
-					glPopMatrix();
-				}
-				else
-				{
-					mVertexBuffer->draw(LLRender::TRIANGLES, mIndicesCount, mIndicesIndex);
-				}
-			}
-			else
-			{
-				glPushMatrix();
-				glMultMatrixf((float*)getRenderMatrix().mMatrix);
-				mVertexBuffer->draw(LLRender::TRIANGLES, mIndicesCount, mIndicesIndex);
-				glPopMatrix();
-			}
-		}
-	}
-}
-
 void LLFace::renderSelected(LLViewerTexture *imagep, const LLColor4& color)
 {
 	if (mDrawablep->getSpatialGroup() == NULL)
diff --git a/indra/newview/llface.h b/indra/newview/llface.h
index 0166e45bee..6c941bd092 100644
--- a/indra/newview/llface.h
+++ b/indra/newview/llface.h
@@ -173,7 +173,6 @@ public:
 	void		updateCenterAgent(); // Update center when xform has changed.
 	void		renderSelectedUV();
 
-	void		renderForSelect(U32 data_mask = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0);
 	void		renderSelected(LLViewerTexture *image, const LLColor4 &color);
 
 	F32			getKey()					const	{ return mDistance; }
diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp
index 36e8ad9dfc..51ee38bd65 100644
--- a/indra/newview/llfloatersnapshot.cpp
+++ b/indra/newview/llfloatersnapshot.cpp
@@ -1212,8 +1212,6 @@ LLViewerWindow::ESnapshotType LLFloaterSnapshot::Impl::getLayerType(LLFloaterSna
 		type = LLViewerWindow::SNAPSHOT_TYPE_COLOR;
 	else if (id == "depth")
 		type = LLViewerWindow::SNAPSHOT_TYPE_DEPTH;
-	else if (id == "objects")
-		type = LLViewerWindow::SNAPSHOT_TYPE_OBJECT_ID;
 	return type;
 }
 
diff --git a/indra/newview/llglsandbox.cpp b/indra/newview/llglsandbox.cpp
index 83846f5b61..aab88e9779 100644
--- a/indra/newview/llglsandbox.cpp
+++ b/indra/newview/llglsandbox.cpp
@@ -662,35 +662,27 @@ void LLViewerParcelMgr::renderCollisionSegments(U8* segments, BOOL use_pass, LLV
 				x2 = x1 + PARCEL_GRID_STEP_METERS;
 				y2 = y1;
 
-				if (gRenderForSelect)
-				{
-					LLColor4U color((U8)(GL_NAME_PARCEL_WALL >> 16), (U8)(GL_NAME_PARCEL_WALL >> 8), (U8)GL_NAME_PARCEL_WALL);
-					gGL.color4ubv(color.mV);
-				}
-				else
-				{
-					dy = (pos_y - y1) + DIST_OFFSET;
-					
-					if (pos_x < x1)
-						dx = pos_x - x1;
-					else if (pos_x > x2)
-						dx = pos_x - x2;
-					else 
-						dx = 0;
+				dy = (pos_y - y1) + DIST_OFFSET;
 					
-					dist = dx*dx+dy*dy;
-
-					if (dist < MIN_DIST_SQ)
-						alpha = MAX_ALPHA;
-					else if (dist > MAX_DIST_SQ)
-						alpha = 0.0f;
-					else
-						alpha = 30/dist;
-
-					alpha = llclamp(alpha, 0.0f, MAX_ALPHA);
-
-					gGL.color4f(1.f, 1.f, 1.f, alpha);
-				}
+				if (pos_x < x1)
+					dx = pos_x - x1;
+				else if (pos_x > x2)
+					dx = pos_x - x2;
+				else 
+					dx = 0;
+				
+				dist = dx*dx+dy*dy;
+				
+				if (dist < MIN_DIST_SQ)
+					alpha = MAX_ALPHA;
+				else if (dist > MAX_DIST_SQ)
+					alpha = 0.0f;
+				else
+					alpha = 30/dist;
+				
+				alpha = llclamp(alpha, 0.0f, MAX_ALPHA);
+				
+				gGL.color4f(1.f, 1.f, 1.f, alpha);
 
 				if ((pos_y - y1) < 0) direction = SOUTH_MASK;
 				else 		direction = NORTH_MASK;
@@ -708,35 +700,27 @@ void LLViewerParcelMgr::renderCollisionSegments(U8* segments, BOOL use_pass, LLV
 				x2 = x1;
 				y2 = y1 + PARCEL_GRID_STEP_METERS;
 
-				if (gRenderForSelect)
-				{
-					LLColor4U color((U8)(GL_NAME_PARCEL_WALL >> 16), (U8)(GL_NAME_PARCEL_WALL >> 8), (U8)GL_NAME_PARCEL_WALL);
-					gGL.color4ubv(color.mV);
-				}
+				dx = (pos_x - x1) + DIST_OFFSET;
+				
+				if (pos_y < y1) 
+					dy = pos_y - y1;
+				else if (pos_y > y2)
+					dy = pos_y - y2;
+				else 
+					dy = 0;
+				
+				dist = dx*dx+dy*dy;
+				
+				if (dist < MIN_DIST_SQ) 
+					alpha = MAX_ALPHA;
+				else if (dist > MAX_DIST_SQ)
+					alpha = 0.0f;
 				else
-				{					
-					dx = (pos_x - x1) + DIST_OFFSET;
-		
-					if (pos_y < y1) 
-						dy = pos_y - y1;
-					else if (pos_y > y2)
-						dy = pos_y - y2;
-					else 
-						dy = 0;
-
-					dist = dx*dx+dy*dy;
-					
-					if (dist < MIN_DIST_SQ) 
-						alpha = MAX_ALPHA;
-					else if (dist > MAX_DIST_SQ)
-						alpha = 0.0f;
-					else
-						alpha = 30/dist;
-
-					alpha = llclamp(alpha, 0.0f, MAX_ALPHA);
+					alpha = 30/dist;
+				
+				alpha = llclamp(alpha, 0.0f, MAX_ALPHA);
 
-					gGL.color4f(1.f, 1.f, 1.f, alpha);
-				}
+				gGL.color4f(1.f, 1.f, 1.f, alpha);
 
 				if ((pos_x - x1) > 0) direction = WEST_MASK;
 				else 		direction = EAST_MASK;
diff --git a/indra/newview/llhudicon.cpp b/indra/newview/llhudicon.cpp
index aea8c5928b..568b0ae585 100644
--- a/indra/newview/llhudicon.cpp
+++ b/indra/newview/llhudicon.cpp
@@ -201,11 +201,6 @@ void LLHUDIcon::render()
 	renderIcon(FALSE);
 }
 
-void LLHUDIcon::renderForSelect()
-{
-	renderIcon(TRUE);
-}
-
 BOOL LLHUDIcon::lineSegmentIntersect(const LLVector3& start, const LLVector3& end, LLVector3* intersection)
 {
 	if (mHidden)
diff --git a/indra/newview/llhudicon.h b/indra/newview/llhudicon.h
index 7712ebac1a..c0e6169eae 100644
--- a/indra/newview/llhudicon.h
+++ b/indra/newview/llhudicon.h
@@ -51,7 +51,6 @@ friend class LLHUDObject;
 
 public:
 	/*virtual*/ void render();
-	/*virtual*/ void renderForSelect();
 	/*virtual*/ void markDead();
 	/*virtual*/ F32 getDistance() const { return mDistance; }
 
diff --git a/indra/newview/llhudobject.cpp b/indra/newview/llhudobject.cpp
index 3e814a0773..b74f719b16 100644
--- a/indra/newview/llhudobject.cpp
+++ b/indra/newview/llhudobject.cpp
@@ -283,27 +283,6 @@ void LLHUDObject::renderAll()
 	LLVertexBuffer::unbind();
 }
 
-// static
-void LLHUDObject::renderAllForSelect()
-{
-	LLHUDObject *hud_objp;
-	
-	hud_object_list_t::iterator object_it;
-	for (object_it = sHUDObjects.begin(); object_it != sHUDObjects.end(); )
-	{
-		hud_object_list_t::iterator cur_it = object_it++;
-		hud_objp = (*cur_it);
-		if (hud_objp->getNumRefs() == 1)
-		{
-			sHUDObjects.erase(cur_it);
-		}
-		else if (hud_objp->isVisible())
-		{
-			hud_objp->renderForSelect();
-		}
-	}
-}
-
 // static
 void LLHUDObject::renderAllForTimer()
 {
diff --git a/indra/newview/llhudobject.h b/indra/newview/llhudobject.h
index 97145b9a84..36f809eca2 100644
--- a/indra/newview/llhudobject.h
+++ b/indra/newview/llhudobject.h
@@ -100,7 +100,6 @@ protected:
 	~LLHUDObject();
 
 	virtual void render() = 0;
-	virtual void renderForSelect() {};
 	virtual void renderForTimer() {};
 	
 protected:
diff --git a/indra/newview/llhudtext.cpp b/indra/newview/llhudtext.cpp
index 96638018c4..8e44678924 100644
--- a/indra/newview/llhudtext.cpp
+++ b/indra/newview/llhudtext.cpp
@@ -222,44 +222,21 @@ void LLHUDText::render()
 	if (!mOnHUDAttachment && sDisplayText)
 	{
 		LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE);
-		renderText(FALSE);
+		renderText();
 	}
 }
 
-void LLHUDText::renderForSelect()
-{
-	if (!mOnHUDAttachment)
-	{
-		LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE);
-		renderText(TRUE);
-	}
-}
-
-void LLHUDText::renderText(BOOL for_select)
+void LLHUDText::renderText()
 {
 	if (!mVisible || mHidden)
 	{
 		return;
 	}
 
-	// don't pick text that isn't bound to a viewerobject or isn't in a bubble
-	if (for_select && 
-		(!mSourceObject || mSourceObject->mDrawable.isNull() || !mUseBubble))
-	{
-		return;
-	}
-	
-	if (for_select)
-	{
-		gGL.getTexUnit(0)->disable();
-	}
-	else
-	{
-		gGL.getTexUnit(0)->enable(LLTexUnit::TT_TEXTURE);
-	}
+	gGL.getTexUnit(0)->enable(LLTexUnit::TT_TEXTURE);
 
-	LLGLState gls_blend(GL_BLEND, for_select ? FALSE : TRUE);
-	LLGLState gls_alpha(GL_ALPHA_TEST, for_select ? FALSE : TRUE);
+	LLGLState gls_blend(GL_BLEND, TRUE);
+	LLGLState gls_alpha(GL_ALPHA_TEST, TRUE);
 	
 	LLColor4 shadow_color(0.f, 0.f, 0.f, 1.f);
 	F32 alpha_factor = 1.f;
@@ -364,35 +341,22 @@ void LLHUDText::renderText(BOOL for_select)
 				- (height_vec);
 			LLUI::translate(bg_pos.mV[VX], bg_pos.mV[VY], bg_pos.mV[VZ]);
 
-			if (for_select)
-			{
-				gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
-				S32 name = mSourceObject->mGLName;
-				LLColor4U coloru((U8)(name >> 16), (U8)(name >> 8), (U8)name);
-				gGL.color4ubv(coloru.mV);
-				gl_segmented_rect_3d_tex(border_scale_vec, scaled_border_width, scaled_border_height, width_vec, height_vec);
-				LLUI::popMatrix();
-				return;
-			}
-			else
+			gGL.getTexUnit(0)->bind(imagep->getImage());
+			
+			gGL.color4fv(bg_color.mV);
+			gl_segmented_rect_3d_tex(border_scale_vec, scaled_border_width, scaled_border_height, width_vec, height_vec);
+			
+			if ( mLabelSegments.size())
 			{
-				gGL.getTexUnit(0)->bind(imagep->getImage());
-				
-				gGL.color4fv(bg_color.mV);
-				gl_segmented_rect_3d_tex(border_scale_vec, scaled_border_width, scaled_border_height, width_vec, height_vec);
-		
-				if ( mLabelSegments.size())
+				LLUI::pushMatrix();
 				{
-					LLUI::pushMatrix();
-					{
-						gGL.color4f(text_color.mV[VX], text_color.mV[VY], text_color.mV[VZ], gSavedSettings.getF32("ChatBubbleOpacity") * alpha_factor);
-						LLVector3 label_height = (mFontp->getLineHeight() * mLabelSegments.size() + (VERTICAL_PADDING / 3.f)) * y_pixel_vec;
-						LLVector3 label_offset = height_vec - label_height;
-						LLUI::translate(label_offset.mV[VX], label_offset.mV[VY], label_offset.mV[VZ]);
-						gl_segmented_rect_3d_tex_top(border_scale_vec, scaled_border_width, scaled_border_height, width_vec, label_height);
-					}
-					LLUI::popMatrix();
+					gGL.color4f(text_color.mV[VX], text_color.mV[VY], text_color.mV[VZ], gSavedSettings.getF32("ChatBubbleOpacity") * alpha_factor);
+					LLVector3 label_height = (mFontp->getLineHeight() * mLabelSegments.size() + (VERTICAL_PADDING / 3.f)) * y_pixel_vec;
+					LLVector3 label_offset = height_vec - label_height;
+					LLUI::translate(label_offset.mV[VX], label_offset.mV[VY], label_offset.mV[VZ]);
+					gl_segmented_rect_3d_tex_top(border_scale_vec, scaled_border_width, scaled_border_height, width_vec, label_height);
 				}
+				LLUI::popMatrix();
 			}
 
 			BOOL outside_width = llabs(mPositionOffset.mV[VX]) > mWidth * 0.5f;
@@ -550,10 +514,6 @@ void LLHUDText::renderText(BOOL for_select)
 	}
 	/// Reset the default color to white.  The renderer expects this to be the default. 
 	gGL.color4f(1.0f, 1.0f, 1.0f, 1.0f);
-	if (for_select)
-	{
-		gGL.getTexUnit(0)->enable(LLTexUnit::TT_TEXTURE);
-	}
 }
 
 void LLHUDText::setStringUTF8(const std::string &wtext)
@@ -1051,7 +1011,7 @@ void LLHUDText::renderAllHUD()
 
 		for (text_it = sVisibleHUDTextObjects.begin(); text_it != sVisibleHUDTextObjects.end(); ++text_it)
 		{
-			(*text_it)->renderText(FALSE);
+			(*text_it)->renderText();
 		}
 	}
 	
diff --git a/indra/newview/llhudtext.h b/indra/newview/llhudtext.h
index 4f4ee55a61..637e2c930f 100644
--- a/indra/newview/llhudtext.h
+++ b/indra/newview/llhudtext.h
@@ -129,8 +129,7 @@ protected:
 	LLHUDText(const U8 type);
 
 	/*virtual*/ void render();
-	/*virtual*/ void renderForSelect();
-	void renderText(BOOL for_select);
+	void renderText();
 	static void updateAll();
 	void setLOD(S32 lod);
 	S32 getMaxLines();
diff --git a/indra/newview/llviewerjoint.cpp b/indra/newview/llviewerjoint.cpp
index 0cf5fe0ada..baf85d6884 100644
--- a/indra/newview/llviewerjoint.cpp
+++ b/indra/newview/llviewerjoint.cpp
@@ -257,7 +257,7 @@ U32 LLViewerJoint::render( F32 pixelArea, BOOL first_pass, BOOL is_dummy )
 		// if object is transparent, defer it, otherwise
 		// give the joint subclass a chance to draw itself
 		//----------------------------------------------------------------
-		if ( gRenderForSelect || is_dummy )
+		if ( is_dummy )
 		{
 			triangle_count += drawShape( pixelArea, first_pass, is_dummy );
 		}
diff --git a/indra/newview/llviewerjointmesh.cpp b/indra/newview/llviewerjointmesh.cpp
index ae2aa41b3a..e59e685f53 100644
--- a/indra/newview/llviewerjointmesh.cpp
+++ b/indra/newview/llviewerjointmesh.cpp
@@ -61,7 +61,6 @@ extern PFNGLWEIGHTPOINTERARBPROC glWeightPointerARB;
 extern PFNGLWEIGHTFVARBPROC glWeightfvARB;
 extern PFNGLVERTEXBLENDARBPROC glVertexBlendARB;
 #endif
-extern BOOL gRenderForSelect;
 
 static LLPointer<LLVertexBuffer> sRenderBuffer = NULL;
 static const U32 sRenderMask = LLVertexBuffer::MAP_VERTEX |
@@ -515,17 +514,14 @@ U32 LLViewerJointMesh::drawShape( F32 pixelArea, BOOL first_pass, BOOL is_dummy)
 	//----------------------------------------------------------------
 	// setup current color
 	//----------------------------------------------------------------
-	if (!gRenderForSelect)
-	{
-		if (is_dummy)
-			glColor4fv(LLVOAvatar::getDummyColor().mV);
-		else
-			glColor4fv(mColor.mV);
-	}
+	if (is_dummy)
+		glColor4fv(LLVOAvatar::getDummyColor().mV);
+	else
+		glColor4fv(mColor.mV);
 
 	stop_glerror();
 	
-	LLGLSSpecular specular(LLColor4(1.f,1.f,1.f,1.f), gRenderForSelect ? 0.0f : mShiny && !(mFace->getPool()->getVertexShaderLevel() > 0));
+	LLGLSSpecular specular(LLColor4(1.f,1.f,1.f,1.f), mShiny && !(mFace->getPool()->getVertexShaderLevel() > 0));
 
 	//----------------------------------------------------------------
 	// setup current texture
@@ -580,19 +576,6 @@ U32 LLViewerJointMesh::drawShape( F32 pixelArea, BOOL first_pass, BOOL is_dummy)
 		gGL.getTexUnit(0)->bind(LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT));
 	}
 	
-	if (gRenderForSelect)
-	{
-		if (isTransparent())
-		{
-			gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR);
-			gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_ALPHA, LLTexUnit::TBS_CONST_ALPHA);
-		}
-		else
-		{
-			gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
-		}
-	}
-	
 	mFace->mVertexBuffer->setBuffer(sRenderMask);
 
 	U32 start = mMesh->mFaceVertexOffset;
diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp
index 05695193a5..d3232043ae 100644
--- a/indra/newview/llviewerobjectlist.cpp
+++ b/indra/newview/llviewerobjectlist.cpp
@@ -1269,34 +1269,6 @@ void LLViewerObjectList::generatePickList(LLCamera &camera)
 	}
 }
 
-void LLViewerObjectList::renderPickList(const LLRect& screen_rect, BOOL pick_parcel_wall, BOOL render_transparent)
-{
-	gRenderForSelect = TRUE;
-		
-	gPipeline.renderForSelect(mSelectPickList, render_transparent, screen_rect);
-
-	//
-	// Render pass for selected objects
-	//
-	gGL.color4f(1,1,1,1);	
-	gViewerWindow->renderSelections( TRUE, pick_parcel_wall, FALSE );
-
-	//fix for DEV-19335.  Don't pick hud objects when customizing avatar (camera mode doesn't play nice with nametags).
-	if (!gAgentCamera.cameraCustomizeAvatar())
-	{
-		// render pickable ui elements, like names, etc.
-		LLHUDObject::renderAllForSelect();
-	}
-	
-	gGL.flush();
-	LLVertexBuffer::unbind();
-
-	gRenderForSelect = FALSE;
-
-	//llinfos << "Rendered " << count << " for select" << llendl;
-	//llinfos << "Took " << pick_timer.getElapsedTimeF32()*1000.f << "ms to pick" << llendl;
-}
-
 LLViewerObject *LLViewerObjectList::getSelectedObject(const U32 object_id)
 {
 	std::set<LLViewerObject*>::iterator pick_it;
diff --git a/indra/newview/llviewerobjectlist.h b/indra/newview/llviewerobjectlist.h
index eba5584b57..605bac8e89 100644
--- a/indra/newview/llviewerobjectlist.h
+++ b/indra/newview/llviewerobjectlist.h
@@ -104,7 +104,6 @@ public:
 
 	// Selection related stuff
 	void generatePickList(LLCamera &camera);
-	void renderPickList(const LLRect& screen_rect, BOOL pick_parcel_wall, BOOL render_transparent);
 
 	LLViewerObject *getSelectedObject(const U32 object_id);
 
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 983a2d25c8..a7cca4c532 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -3986,29 +3986,18 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei
 		{
 			gDisplaySwapBuffers = FALSE;
 			gDepthDirty = TRUE;
-			if (type == SNAPSHOT_TYPE_OBJECT_ID)
-			{
-				glClearColor(0.f, 0.f, 0.f, 0.f);
-				glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
 
-				LLViewerCamera::getInstance()->setZoomParameters(scale_factor, subimage_x+(subimage_y*llceil(scale_factor)));
-				setup3DRender();
-				gObjectList.renderPickList(gViewerWindow->getWindowRectScaled(), FALSE, FALSE);
+			const U32 subfield = subimage_x+(subimage_y*llceil(scale_factor));
+
+			if (LLPipeline::sRenderDeferred)
+			{
+				display(do_rebuild, scale_factor, subfield, FALSE);
 			}
 			else
 			{
-				const U32 subfield = subimage_x+(subimage_y*llceil(scale_factor));
-
-				if (LLPipeline::sRenderDeferred)
-				{
-					display(do_rebuild, scale_factor, subfield, FALSE);
-				}
-				else
-				{
-					display(do_rebuild, scale_factor, subfield, TRUE);
-					// Required for showing the GUI in snapshots?  See DEV-16350 for details. JC
-					render_ui(scale_factor, subfield);
-				}
+				display(do_rebuild, scale_factor, subfield, TRUE);
+				// Required for showing the GUI in snapshots?  See DEV-16350 for details. JC
+				render_ui(scale_factor, subfield);
 			}
 
 			S32 subimage_x_offset = llclamp(buffer_x_offset - (subimage_x * window_width), 0, window_width);
@@ -4031,7 +4020,7 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei
 					LLAppViewer::instance()->pingMainloopTimeout("LLViewerWindow::rawSnapshot");
 				}
 				
-				if (type == SNAPSHOT_TYPE_OBJECT_ID || type == SNAPSHOT_TYPE_COLOR)
+				if (type == SNAPSHOT_TYPE_COLOR)
 				{
 					glReadPixels(
 						subimage_x_offset, out_y + subimage_y_offset,
diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h
index 633c3a41d2..47fb7c4883 100644
--- a/indra/newview/llviewerwindow.h
+++ b/indra/newview/llviewerwindow.h
@@ -316,8 +316,7 @@ public:
 	typedef enum
 	{
 		SNAPSHOT_TYPE_COLOR,
-		SNAPSHOT_TYPE_DEPTH,
-		SNAPSHOT_TYPE_OBJECT_ID
+		SNAPSHOT_TYPE_DEPTH
 	} ESnapshotType;
 	BOOL			saveSnapshot(const std::string&  filename, S32 image_width, S32 image_height, BOOL show_ui = TRUE, BOOL do_rebuild = FALSE, ESnapshotType type = SNAPSHOT_TYPE_COLOR);
 	BOOL			rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_height, BOOL keep_window_aspect = TRUE, BOOL is_texture = FALSE,
diff --git a/indra/newview/llviewerwindowlistener.cpp b/indra/newview/llviewerwindowlistener.cpp
index 4473b5820d..0b52948680 100644
--- a/indra/newview/llviewerwindowlistener.cpp
+++ b/indra/newview/llviewerwindowlistener.cpp
@@ -54,7 +54,7 @@ LLViewerWindowListener::LLViewerWindowListener(LLViewerWindow* llviewerwindow):
 //  saveSnapshotArgs["type"] = LLSD::String();
     add("saveSnapshot",
         "Save screenshot: [\"filename\"], [\"width\"], [\"height\"], [\"showui\"], [\"rebuild\"], [\"type\"]\n"
-        "type: \"COLOR\", \"DEPTH\", \"OBJECT_ID\"\n"
+        "type: \"COLOR\", \"DEPTH\"\n"
         "Post on [\"reply\"] an event containing [\"ok\"]",
         &LLViewerWindowListener::saveSnapshot,
         saveSnapshotArgs);
@@ -71,7 +71,6 @@ void LLViewerWindowListener::saveSnapshot(const LLSD& event) const
 #define tp(name) types[#name] = LLViewerWindow::SNAPSHOT_TYPE_##name
     tp(COLOR);
     tp(DEPTH);
-    tp(OBJECT_ID);
 #undef  tp
     // Our add() call should ensure that the incoming LLSD does in fact
     // contain our required arguments. Deal with the optional ones.
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index c31714de5a..4e37e7df69 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -3855,7 +3855,7 @@ U32 LLVOAvatar::renderSkinned(EAvatarRenderPass pass)
 	// *NOTE: this is disabled (there is no UI for enabling sShowFootPlane) due
 	// to DEV-14477.  the code is left here to aid in tracking down the cause
 	// of the crash in the future. -brad
-	if (!gRenderForSelect && sShowFootPlane && mDrawable.notNull())
+	if (sShowFootPlane && mDrawable.notNull())
 	{
 		LLVector3 slaved_pos = mDrawable->getPositionAgent();
 		LLVector3 foot_plane_normal(mFootPlane.mV[VX], mFootPlane.mV[VY], mFootPlane.mV[VZ]);
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index e69b0a2996..a883f24c4f 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -128,8 +128,6 @@ static S32 sDelayedVBOEnable = 0;
 
 BOOL	gAvatarBacklight = FALSE;
 
-BOOL	gRenderForSelect = FALSE;
-
 BOOL	gDebugPipeline = FALSE;
 LLPipeline gPipeline;
 const LLMatrix4* gGLLastMatrix = NULL;
@@ -3805,185 +3803,6 @@ void LLPipeline::renderDebug()
 	gGL.flush();
 }
 
-void LLPipeline::renderForSelect(std::set<LLViewerObject*>& objects, BOOL render_transparent, const LLRect& screen_rect)
-{
-	assertInitialized();
-
-	gGL.setColorMask(true, false);
-	gPipeline.resetDrawOrders();
-
-	LLViewerCamera* camera = LLViewerCamera::getInstance();
-	for (std::set<LLViewerObject*>::iterator iter = objects.begin(); iter != objects.end(); ++iter)
-	{
-		stateSort((*iter)->mDrawable, *camera);
-	}
-
-	LLMemType mt(LLMemType::MTYPE_PIPELINE_RENDER_SELECT);
-	
-	
-	
-	glMatrixMode(GL_MODELVIEW);
-
-	LLGLSDefault gls_default;
-	LLGLSObjectSelect gls_object_select;
-	gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
-	LLGLDepthTest gls_depth(GL_TRUE,GL_TRUE);
-	disableLights();
-	
-	LLVertexBuffer::unbind();
-
-	//for each drawpool
-	LLGLState::checkStates();
-	LLGLState::checkTextureChannels();
-	LLGLState::checkClientArrays();
-	U32 last_type = 0;
-	
-	// If we don't do this, we crash something on changing graphics settings
-	// from Medium -> Low, because we unload all the shaders and the 
-	// draw pools aren't aware.  I don't know if this has to be a separate
-	// loop before actual rendering. JC
-	for (pool_set_t::iterator iter = mPools.begin(); iter != mPools.end(); ++iter)
-	{
-		LLDrawPool *poolp = *iter;
-		if (poolp->isFacePool() && hasRenderType(poolp->getType()))
-		{
-			poolp->prerender();
-		}
-	}
-	for (pool_set_t::iterator iter = mPools.begin(); iter != mPools.end(); ++iter)
-	{
-		LLDrawPool *poolp = *iter;
-		if (poolp->isFacePool() && hasRenderType(poolp->getType()))
-		{
-			LLFacePool* face_pool = (LLFacePool*) poolp;
-			face_pool->renderForSelect();
-			LLVertexBuffer::unbind();
-			gGLLastMatrix = NULL;
-			glLoadMatrixd(gGLModelView);
-
-			if (poolp->getType() != last_type)
-			{
-				last_type = poolp->getType();
-				LLGLState::checkStates();
-				LLGLState::checkTextureChannels();
-				LLGLState::checkClientArrays();
-			}
-		}
-	}	
-
-	LLGLEnable alpha_test(GL_ALPHA_TEST);
-	if (render_transparent)
-	{
-		gGL.setAlphaRejectSettings(LLRender::CF_GREATER_EQUAL, 0.f);
-	}
-	else
-	{
-		gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.2f);
-	}
-
-	gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_VERT_COLOR);
-	gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_ALPHA, LLTexUnit::TBS_VERT_ALPHA);
-
-	U32 prim_mask = LLVertexBuffer::MAP_VERTEX | 
-					LLVertexBuffer::MAP_TEXCOORD0;
-
-	for (std::set<LLViewerObject*>::iterator i = objects.begin(); i != objects.end(); ++i)
-	{
-		LLViewerObject* vobj = *i;
-		LLDrawable* drawable = vobj->mDrawable;
-		if (vobj->isDead() || 
-			vobj->isHUDAttachment() ||
-			(LLSelectMgr::getInstance()->mHideSelectedObjects && vobj->isSelected()) ||
-			drawable->isDead() || 
-			!hasRenderType(drawable->getRenderType()))
-		{
-			continue;
-		}
-
-		for (S32 j = 0; j < drawable->getNumFaces(); ++j)
-		{
-			LLFace* facep = drawable->getFace(j);
-			if (!facep->getPool())
-			{
-				facep->renderForSelect(prim_mask);
-			}
-		}
-	}
-
-	// pick HUD objects
-	if (isAgentAvatarValid() && sShowHUDAttachments)
-	{
-		glh::matrix4f save_proj(glh_get_current_projection());
-		glh::matrix4f save_model(glh_get_current_modelview());
-
-		setup_hud_matrices(screen_rect);
-		for (LLVOAvatar::attachment_map_t::iterator iter = gAgentAvatarp->mAttachmentPoints.begin(); 
-			 iter != gAgentAvatarp->mAttachmentPoints.end(); )
-		{
-			LLVOAvatar::attachment_map_t::iterator curiter = iter++;
-			LLViewerJointAttachment* attachment = curiter->second;
-			if (attachment->getIsHUDAttachment())
-			{
-				for (LLViewerJointAttachment::attachedobjs_vec_t::iterator attachment_iter = attachment->mAttachedObjects.begin();
-					 attachment_iter != attachment->mAttachedObjects.end();
-					 ++attachment_iter)
-				{
-					if (LLViewerObject* attached_object = (*attachment_iter))
-					{
-						LLDrawable* drawable = attached_object->mDrawable;
-						if (drawable->isDead())
-						{
-							continue;
-						}
-							
-						for (S32 j = 0; j < drawable->getNumFaces(); ++j)
-						{
-							LLFace* facep = drawable->getFace(j);
-							if (!facep->getPool())
-							{
-								facep->renderForSelect(prim_mask);
-							}
-						}
-							
-						//render child faces
-						LLViewerObject::const_child_list_t& child_list = attached_object->getChildren();
-						for (LLViewerObject::child_list_t::const_iterator iter = child_list.begin();
-							 iter != child_list.end(); iter++)
-						{
-							LLViewerObject* child = *iter;
-							LLDrawable* child_drawable = child->mDrawable;
-							for (S32 l = 0; l < child_drawable->getNumFaces(); ++l)
-							{
-								LLFace* facep = child_drawable->getFace(l);
-								if (!facep->getPool())
-								{
-									facep->renderForSelect(prim_mask);
-								}
-							}
-						}
-					}
-				}
-			}
-		}
-
-		glMatrixMode(GL_PROJECTION);
-		glLoadMatrixf(save_proj.m);
-		glh_set_current_projection(save_proj);
-
-		glMatrixMode(GL_MODELVIEW);
-		glLoadMatrixf(save_model.m);
-		glh_set_current_modelview(save_model);
-
-	
-	}
-
-	gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
-	
-	LLVertexBuffer::unbind();
-	
-	gGL.setColorMask(true, true);
-}
-
 void LLPipeline::rebuildPools()
 {
 	LLMemType mt(LLMemType::MTYPE_PIPELINE_REBUILD_POOLS);
diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h
index fe0683d29f..75edb6b1ef 100644
--- a/indra/newview/pipeline.h
+++ b/indra/newview/pipeline.h
@@ -244,7 +244,6 @@ public:
 	void renderHighlights();
 	void renderDebug();
 
-	void renderForSelect(std::set<LLViewerObject*>& objects, BOOL render_transparent, const LLRect& screen_rect);
 	void rebuildPools(); // Rebuild pools
 
 	void findReferences(LLDrawable *drawablep);	// Find the lists which have references to this object
@@ -711,7 +710,6 @@ void render_bbox(const LLVector3 &min, const LLVector3 &max);
 void render_hud_elements();
 
 extern LLPipeline gPipeline;
-extern BOOL gRenderForSelect;
 extern BOOL gDebugPipeline;
 extern const LLMatrix4* gGLLastMatrix;
 
-- 
cgit v1.2.3


From 33bfe43b0cbae946f5c0929f1dacc16e2e9d88f6 Mon Sep 17 00:00:00 2001
From: Andrew Productengine <adyukov@productengine.com>
Date: Mon, 11 Oct 2010 19:32:42 +0300
Subject: STORM-301 FIXED Fixed behaviour of camera on undocked 'My Appearance'
 tab minimizing.

- Added signal to LLFloater that is emitted on minimize.

- Set minimize callback for appearance tab floater in LLSideTrayTab::undock. Method from LLSidePanelAppearance that handles camera issues
is called on minimization of floater.
---
 indra/newview/llsidepanelappearance.cpp |  5 +++++
 indra/newview/llsidepanelappearance.h   |  1 +
 indra/newview/llsidetray.cpp            | 20 ++++++++++++++++++++
 3 files changed, 26 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp
index a3c6a7b6f1..1999f14828 100644
--- a/indra/newview/llsidepanelappearance.cpp
+++ b/indra/newview/llsidepanelappearance.cpp
@@ -182,6 +182,11 @@ void LLSidepanelAppearance::onOpen(const LLSD& key)
 }
 
 void LLSidepanelAppearance::onVisibilityChange(const LLSD &new_visibility)
+{
+	updateToVisibility(new_visibility);
+}
+
+void LLSidepanelAppearance::updateToVisibility(const LLSD &new_visibility)
 {
 	if (new_visibility.asBoolean())
 	{
diff --git a/indra/newview/llsidepanelappearance.h b/indra/newview/llsidepanelappearance.h
index f28cdfa49a..2a83dfbc9d 100644
--- a/indra/newview/llsidepanelappearance.h
+++ b/indra/newview/llsidepanelappearance.h
@@ -63,6 +63,7 @@ public:
 	void setWearablesLoading(bool val);
 	void showDefaultSubpart();
 	void updateScrollingPanelList();
+	void updateToVisibility( const LLSD& new_visibility );
 
 private:
 	void onFilterEdit(const std::string& search_string);
diff --git a/indra/newview/llsidetray.cpp b/indra/newview/llsidetray.cpp
index 426ad26f1b..b7470c03bc 100644
--- a/indra/newview/llsidetray.cpp
+++ b/indra/newview/llsidetray.cpp
@@ -49,6 +49,8 @@
 #include "llwindow.h"//for SetCursor
 #include "lltransientfloatermgr.h"
 
+#include "llsidepanelappearance.h"
+
 //#include "llscrollcontainer.h"
 
 using namespace std;
@@ -290,6 +292,13 @@ void LLSideTrayTab::dock()
 	}
 }
 
+static void on_minimize(LLSidepanelAppearance* panel, LLSD minimized)
+{
+	if (!panel) return;
+	bool visible = !minimized.asBoolean();
+	panel->updateToVisibility(LLSD(visible));	
+}
+
 void LLSideTrayTab::undock(LLFloater* floater_tab)
 {
 	LLSideTray* side_tray = getSideTray();
@@ -351,6 +360,17 @@ void LLSideTrayTab::undock(LLFloater* floater_tab)
 	// Set FOLLOWS_ALL flag for the tab to follow floater dimensions upon resizing.
 	setFollowsAll();
 
+	// Camera view may need to be changed for appearance panel(STORM-301) on minimize of floater,
+	// so setting callback here. 
+	if (getName() == "sidebar_appearance")
+	{
+		LLSidepanelAppearance* panel_appearance = dynamic_cast<LLSidepanelAppearance*>(getPanel());
+		if(panel_appearance)
+		{
+			floater_tab->setMinimizeCallback(boost::bind(&on_minimize, panel_appearance, _2));
+		}
+	}
+
 	if (!side_tray->getCollapsed())
 	{
 		side_tray->collapseSideBar();
-- 
cgit v1.2.3


From 64bf07b6d1f3c230e38cdd85bc752a40e1f67b67 Mon Sep 17 00:00:00 2001
From: Eli Linden <eli@lindenlab.com>
Date: Mon, 11 Oct 2010 11:36:23 -0700
Subject: CT-575 WIP PL and DA translation for set18; ES correction

---
 indra/newview/skins/default/xui/da/floater_map.xml | 25 +------
 .../skins/default/xui/da/floater_nearby_chat.xml   |  4 +-
 .../newview/skins/default/xui/da/floater_tools.xml |  9 ++-
 .../skins/default/xui/da/menu_attachment_self.xml  |  1 +
 .../skins/default/xui/da/menu_avatar_self.xml      |  1 +
 .../default/xui/da/menu_inspect_object_gear.xml    |  1 +
 .../default/xui/da/menu_inspect_self_gear.xml      |  1 +
 .../newview/skins/default/xui/da/menu_mini_map.xml |  1 +
 indra/newview/skins/default/xui/da/menu_object.xml |  4 +-
 .../skins/default/xui/da/menu_participant_list.xml |  2 +-
 .../xui/da/menu_people_friends_view_sort.xml       |  1 +
 .../xui/da/menu_people_nearby_multiselect.xml      |  1 +
 indra/newview/skins/default/xui/da/menu_viewer.xml | 16 ++--
 .../default/xui/da/menu_wearable_list_item.xml     |  4 +-
 .../skins/default/xui/da/menu_wearing_gear.xml     |  1 +
 .../skins/default/xui/da/menu_wearing_tab.xml      |  2 +
 .../newview/skins/default/xui/da/notifications.xml | 12 ++-
 .../default/xui/da/panel_avatar_list_item.xml      |  4 +
 .../skins/default/xui/da/panel_bottomtray.xml      | 18 ++---
 .../skins/default/xui/da/panel_classified_info.xml | 14 +++-
 .../skins/default/xui/da/panel_edit_classified.xml | 12 ++-
 .../skins/default/xui/da/panel_edit_pick.xml       | 10 ++-
 .../skins/default/xui/da/panel_edit_profile.xml    | 10 ++-
 .../skins/default/xui/da/panel_edit_wearable.xml   | 10 ++-
 .../default/xui/da/panel_group_info_sidetray.xml   | 12 ++-
 .../skins/default/xui/da/panel_landmarks.xml       | 14 +++-
 .../skins/default/xui/da/panel_my_profile.xml      |  7 +-
 indra/newview/skins/default/xui/da/panel_notes.xml | 30 +++++---
 .../skins/default/xui/da/panel_outfit_edit.xml     | 10 ++-
 .../default/xui/da/panel_outfits_inventory.xml     | 10 ++-
 .../newview/skins/default/xui/da/panel_people.xml  | 50 ++++++++++---
 .../skins/default/xui/da/panel_pick_info.xml       | 20 +++--
 indra/newview/skins/default/xui/da/panel_picks.xml | 23 ++++--
 .../newview/skins/default/xui/da/panel_places.xml  | 48 ++++++++++--
 .../default/xui/da/panel_preferences_chat.xml      | 26 +++----
 .../default/xui/da/panel_preferences_graphics1.xml | 36 ++++-----
 .../newview/skins/default/xui/da/panel_profile.xml | 26 +++++--
 .../default/xui/da/panel_side_tray_tab_caption.xml |  2 +
 .../skins/default/xui/da/sidepanel_inventory.xml   | 20 +++--
 .../skins/default/xui/da/sidepanel_item_info.xml   | 85 +++++++++++-----------
 indra/newview/skins/default/xui/da/strings.xml     | 36 ++++++---
 .../default/xui/es/panel_preferences_chat.xml      |  4 +-
 indra/newview/skins/default/xui/pl/floater_map.xml | 25 +------
 .../skins/default/xui/pl/floater_nearby_chat.xml   |  4 +-
 .../newview/skins/default/xui/pl/floater_tools.xml |  9 ++-
 .../skins/default/xui/pl/menu_attachment_self.xml  |  1 +
 .../skins/default/xui/pl/menu_avatar_self.xml      |  1 +
 .../default/xui/pl/menu_inspect_object_gear.xml    |  1 +
 .../default/xui/pl/menu_inspect_self_gear.xml      |  1 +
 .../newview/skins/default/xui/pl/menu_mini_map.xml |  1 +
 indra/newview/skins/default/xui/pl/menu_object.xml |  4 +-
 .../xui/pl/menu_people_friends_view_sort.xml       |  1 +
 .../xui/pl/menu_people_nearby_multiselect.xml      |  1 +
 indra/newview/skins/default/xui/pl/menu_viewer.xml | 16 ++--
 .../default/xui/pl/menu_wearable_list_item.xml     |  2 +-
 .../skins/default/xui/pl/menu_wearing_gear.xml     |  1 +
 .../skins/default/xui/pl/menu_wearing_tab.xml      |  2 +
 .../newview/skins/default/xui/pl/notifications.xml | 14 +++-
 .../default/xui/pl/panel_avatar_list_item.xml      |  4 +
 .../skins/default/xui/pl/panel_bottomtray.xml      | 18 ++---
 .../skins/default/xui/pl/panel_classified_info.xml | 14 +++-
 .../skins/default/xui/pl/panel_edit_classified.xml | 12 ++-
 .../skins/default/xui/pl/panel_edit_pick.xml       | 10 ++-
 .../skins/default/xui/pl/panel_edit_profile.xml    | 16 ++--
 .../skins/default/xui/pl/panel_edit_wearable.xml   | 10 ++-
 .../default/xui/pl/panel_group_info_sidetray.xml   | 14 +++-
 .../skins/default/xui/pl/panel_landmarks.xml       | 14 +++-
 .../skins/default/xui/pl/panel_my_profile.xml      |  7 +-
 indra/newview/skins/default/xui/pl/panel_notes.xml | 30 +++++---
 .../skins/default/xui/pl/panel_outfit_edit.xml     | 10 ++-
 .../default/xui/pl/panel_outfits_inventory.xml     | 10 ++-
 .../newview/skins/default/xui/pl/panel_people.xml  | 50 ++++++++++---
 .../skins/default/xui/pl/panel_pick_info.xml       | 20 +++--
 indra/newview/skins/default/xui/pl/panel_picks.xml | 23 ++++--
 .../newview/skins/default/xui/pl/panel_places.xml  | 48 ++++++++++--
 .../default/xui/pl/panel_preferences_chat.xml      | 38 +++++-----
 .../default/xui/pl/panel_preferences_graphics1.xml | 36 ++++-----
 .../newview/skins/default/xui/pl/panel_profile.xml | 28 +++++--
 .../default/xui/pl/panel_side_tray_tab_caption.xml |  2 +
 .../skins/default/xui/pl/sidepanel_inventory.xml   | 20 +++--
 .../skins/default/xui/pl/sidepanel_item_info.xml   | 85 +++++++++++-----------
 indra/newview/skins/default/xui/pl/strings.xml     | 38 +++++++---
 82 files changed, 817 insertions(+), 447 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/da/floater_map.xml b/indra/newview/skins/default/xui/da/floater_map.xml
index c331908c3c..5df9bb5f6e 100644
--- a/indra/newview/skins/default/xui/da/floater_map.xml
+++ b/indra/newview/skins/default/xui/da/floater_map.xml
@@ -1,28 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater name="Map" title="">
-	<floater.string name="mini_map_north">
-		N
-	</floater.string>
-	<floater.string name="mini_map_east">
-		Ø
-	</floater.string>
-	<floater.string name="mini_map_west">
-		V
-	</floater.string>
-	<floater.string name="mini_map_south">
-		S
-	</floater.string>
-	<floater.string name="mini_map_southeast">
-		SØ
-	</floater.string>
-	<floater.string name="mini_map_northeast">
-		NØ
-	</floater.string>
-	<floater.string name="mini_map_southwest">
-		SV
-	</floater.string>
-	<floater.string name="mini_map_northwest">
-		NV
+	<floater.string name="ToolTipMsg">
+		[REGION](Dobbeltklik for at åbne kort, klik-og-træk for at panorere)
 	</floater.string>
 	<floater.string name="mini_map_caption">
 		MINIKORT
diff --git a/indra/newview/skins/default/xui/da/floater_nearby_chat.xml b/indra/newview/skins/default/xui/da/floater_nearby_chat.xml
index ef4e4cbe7e..bd17224259 100644
--- a/indra/newview/skins/default/xui/da/floater_nearby_chat.xml
+++ b/indra/newview/skins/default/xui/da/floater_nearby_chat.xml
@@ -1,2 +1,4 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="nearby_chat" title="CHAT NÆRVED"/>
+<floater name="nearby_chat" title="CHAT NÆRVED">
+	<check_box label="Oversæt chat (håndteret af Google)" name="translate_chat_checkbox"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/da/floater_tools.xml b/indra/newview/skins/default/xui/da/floater_tools.xml
index a84af9adc0..6fda088b51 100644
--- a/indra/newview/skins/default/xui/da/floater_tools.xml
+++ b/indra/newview/skins/default/xui/da/floater_tools.xml
@@ -179,10 +179,10 @@
 			<text name="Group:">
 				Gruppe:
 			</text>
-			<button label="Sæt..." label_selected="Sæt..." name="button set group" tool_tip="Vælg en gruppe der skal dele dette objekts rettigheder"/>
 			<name_box initial_value="Henter..." name="Group Name Proxy"/>
-			<button label="Dedikér" label_selected="Dedikér" name="button deed" tool_tip="Dedikering giver denne genstand væk med rettighederne for &apos;næste ejer&apos;. Gruppe-delte objekter kan dedikeres af gruppe-administrator."/>
+			<button label="Sæt..." label_selected="Sæt..." name="button set group" tool_tip="Vælg en gruppe der skal dele dette objekts rettigheder"/>
 			<check_box label="Del" name="checkbox share with group" tool_tip="Tillad alle medlemmer fra den valgte gruppe at dele dine &apos;redigere&apos; rettigheder for dette objekt. Du skal dedikere for åbne for rolle begrænsninger."/>
+			<button label="Dedikér" label_selected="Dedikér" name="button deed" tool_tip="Dedikering giver denne genstand væk med rettighederne for &apos;næste ejer&apos;. Gruppe-delte objekter kan dedikeres af gruppe-administrator."/>
 			<text name="label click action">
 				Klik for at:
 			</text>
@@ -436,8 +436,9 @@
 				<combo_box.item label="Rør" name="suction"/>
 				<combo_box.item label="Væv" name="weave"/>
 			</combo_box>
-			<text name="tex scale">
-				Gentagelser på overflade
+			<check_box initial_value="falsk" label="Flugt planare overflader" name="checkbox planar align" tool_tip="Flugt teksuter på alle valgte overflader med den sidst valgte overflade. Kræver at planar tekstur-mapning er valgt."/>
+			<text name="rpt">
+				Gentagelser / overflade
 			</text>
 			<spinner label="Vandret (U)" name="TexScaleU"/>
 			<check_box label="Vend" name="checkbox flip s"/>
diff --git a/indra/newview/skins/default/xui/da/menu_attachment_self.xml b/indra/newview/skins/default/xui/da/menu_attachment_self.xml
index e70b7ce33d..1c19435f90 100644
--- a/indra/newview/skins/default/xui/da/menu_attachment_self.xml
+++ b/indra/newview/skins/default/xui/da/menu_attachment_self.xml
@@ -3,6 +3,7 @@
 	<menu_item_call label="Berør" name="Attachment Object Touch"/>
 	<menu_item_call label="Redigér" name="Edit..."/>
 	<menu_item_call label="Tag af" name="Detach"/>
+	<menu_item_call label="Sid ned" name="Sit Down Here"/>
 	<menu_item_call label="Stå op" name="Stand Up"/>
 	<menu_item_call label="Skift sæt" name="Change Outfit"/>
 	<menu_item_call label="Redigér mit sæt" name="Edit Outfit"/>
diff --git a/indra/newview/skins/default/xui/da/menu_avatar_self.xml b/indra/newview/skins/default/xui/da/menu_avatar_self.xml
index af4fdcc154..5a05a12b4e 100644
--- a/indra/newview/skins/default/xui/da/menu_avatar_self.xml
+++ b/indra/newview/skins/default/xui/da/menu_avatar_self.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Self Pie">
+	<menu_item_call label="Sid ned" name="Sit Down Here"/>
 	<menu_item_call label="Stå op" name="Stand Up"/>
 	<context_menu label="Tag af" name="Take Off &gt;">
 		<context_menu label="Tøj" name="Clothes &gt;">
diff --git a/indra/newview/skins/default/xui/da/menu_inspect_object_gear.xml b/indra/newview/skins/default/xui/da/menu_inspect_object_gear.xml
index c7bb2a9ead..e28842836d 100644
--- a/indra/newview/skins/default/xui/da/menu_inspect_object_gear.xml
+++ b/indra/newview/skins/default/xui/da/menu_inspect_object_gear.xml
@@ -9,6 +9,7 @@
 	<menu_item_call label="Åben" name="open"/>
 	<menu_item_call label="Redigér" name="edit"/>
 	<menu_item_call label="Tag på" name="wear"/>
+	<menu_item_call label="Tilføj" name="add"/>
 	<menu_item_call label="Rapportér" name="report"/>
 	<menu_item_call label="Blokér" name="block"/>
 	<menu_item_call label="Zoom ind" name="zoom_in"/>
diff --git a/indra/newview/skins/default/xui/da/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/da/menu_inspect_self_gear.xml
index c226d06404..a2ddd116a7 100644
--- a/indra/newview/skins/default/xui/da/menu_inspect_self_gear.xml
+++ b/indra/newview/skins/default/xui/da/menu_inspect_self_gear.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <menu name="Gear Menu">
+	<menu_item_call label="Sid ned" name="sit_down_here"/>
 	<menu_item_call label="Stå op" name="stand_up"/>
 	<menu_item_call label="Skift sæt" name="change_outfit"/>
 	<menu_item_call label="Profil" name="my_profile"/>
diff --git a/indra/newview/skins/default/xui/da/menu_mini_map.xml b/indra/newview/skins/default/xui/da/menu_mini_map.xml
index 38486cdecb..9dcce49708 100644
--- a/indra/newview/skins/default/xui/da/menu_mini_map.xml
+++ b/indra/newview/skins/default/xui/da/menu_mini_map.xml
@@ -4,6 +4,7 @@
 	<menu_item_call label="Zoom mellem" name="Zoom Medium"/>
 	<menu_item_call label="Zoom langt" name="Zoom Far"/>
 	<menu_item_check label="Rotér kort" name="Rotate Map"/>
+	<menu_item_check label="Auto centrér" name="Auto Center"/>
 	<menu_item_call label="Fjern ref." name="Stop Tracking"/>
 	<menu_item_call label="Verdenskort" name="World Map"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/da/menu_object.xml b/indra/newview/skins/default/xui/da/menu_object.xml
index 3c96d62ce3..bc0cdde86f 100644
--- a/indra/newview/skins/default/xui/da/menu_object.xml
+++ b/indra/newview/skins/default/xui/da/menu_object.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Object Pie">
 	<menu_item_call label="Berør" name="Object Touch">
-		<on_enable parameter="Berør" name="EnableTouch"/>
+		<menu_item_call.on_enable name="EnableTouch" parameter="Berør"/>
 	</menu_item_call>
 	<menu_item_call label="Redigér" name="Edit..."/>
 	<menu_item_call label="Byg" name="Build"/>
@@ -12,6 +12,7 @@
 	<menu_item_call label="Zoom In" name="Zoom In"/>
 	<context_menu label="Tag på" name="Put On">
 		<menu_item_call label="Tag på" name="Wear"/>
+		<menu_item_call label="Tilføj" name="Add"/>
 		<context_menu label="Vedhæft" name="Object Attach"/>
 		<context_menu label="Vedhæft HUD" name="Object Attach HUD"/>
 	</context_menu>
@@ -21,7 +22,6 @@
 		<menu_item_call label="Returnér" name="Return..."/>
 		<menu_item_call label="Slet" name="Delete"/>
 	</context_menu>
-	<menu_item_call label="Køb" name="Pie Object Bye"/>
 	<menu_item_call label="Tag" name="Pie Object Take"/>
 	<menu_item_call label="Tag kopi" name="Take Copy"/>
 	<menu_item_call label="Betal" name="Pay..."/>
diff --git a/indra/newview/skins/default/xui/da/menu_participant_list.xml b/indra/newview/skins/default/xui/da/menu_participant_list.xml
index 0069dcbacb..5951d3ffb9 100644
--- a/indra/newview/skins/default/xui/da/menu_participant_list.xml
+++ b/indra/newview/skins/default/xui/da/menu_participant_list.xml
@@ -11,7 +11,7 @@
 	<menu_item_check label="Se person ikoner" name="View Icons"/>
 	<menu_item_check label="Blokér stemme" name="Block/Unblock"/>
 	<menu_item_check label="Blokér tekst" name="MuteText"/>
-	<context_menu label="Moderator muligheder" name="Moderator Options">
+	<context_menu label="Moderator valg" name="Moderator Options">
 		<menu_item_check label="Tillad tekst chat" name="AllowTextChat"/>
 		<menu_item_call label="Sluk for denne deltager" name="ModerateVoiceMuteSelected"/>
 		<menu_item_call label="Fjern slukning for denne deltager" name="ModerateVoiceUnMuteSelected"/>
diff --git a/indra/newview/skins/default/xui/da/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/da/menu_people_friends_view_sort.xml
index 525450f23f..32c5e6a6c7 100644
--- a/indra/newview/skins/default/xui/da/menu_people_friends_view_sort.xml
+++ b/indra/newview/skins/default/xui/da/menu_people_friends_view_sort.xml
@@ -3,5 +3,6 @@
 	<menu_item_check label="Sortér efter navn" name="sort_name"/>
 	<menu_item_check label="Sortér efter status" name="sort_status"/>
 	<menu_item_check label="Vis person ikoner" name="view_icons"/>
+	<menu_item_check label="Vis tildelte rettigheder" name="view_permissions"/>
 	<menu_item_call label="Vis blokerede beboere og objekter" name="show_blocked_list"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/da/menu_people_nearby_multiselect.xml b/indra/newview/skins/default/xui/da/menu_people_nearby_multiselect.xml
index 08b7136b97..9318a0e340 100644
--- a/indra/newview/skins/default/xui/da/menu_people_nearby_multiselect.xml
+++ b/indra/newview/skins/default/xui/da/menu_people_nearby_multiselect.xml
@@ -6,4 +6,5 @@
 	<menu_item_call label="Opkald" name="Call"/>
 	<menu_item_call label="Del" name="Share"/>
 	<menu_item_call label="Betal" name="Pay"/>
+	<menu_item_call label="tilbyd teleport" name="teleport"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/da/menu_viewer.xml b/indra/newview/skins/default/xui/da/menu_viewer.xml
index fa74568c2d..73986372ce 100644
--- a/indra/newview/skins/default/xui/da/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/da/menu_viewer.xml
@@ -92,7 +92,6 @@
 			<menu_item_call label="Sæt scripts til &quot;Not Running&quot;" name="Set Scripts to Not Running"/>
 		</menu>
 		<menu label="Valg" name="Options">
-			<menu_item_call label="Sæt standard rettigher for upload" name="perm prefs"/>
 			<menu_item_check label="Vis avancerede rettigheder" name="DebugPermissions"/>
 			<menu_item_check label="Vælg kun egne objekter" name="Select Only My Objects"/>
 			<menu_item_check label="Vis kun flytbare objekter" name="Select Only Movable Objects"/>
@@ -119,7 +118,6 @@
 		<menu_item_call label="Om [APP_NAME]" name="About Second Life"/>
 	</menu>
 	<menu label="Avanceret" name="Advanced">
-		<menu_item_check label="Vis avanceret menu" name="Show Advanced Menu"/>
 		<menu_item_call label="Stop animering af min avatar" name="Stop Animating My Avatar"/>
 		<menu_item_call label="Gendan teksturer" name="Rebake Texture"/>
 		<menu_item_call label="Sæt UI størrelse til standard" name="Set UI Size to Default"/>
@@ -166,7 +164,6 @@
 			<menu_item_check label="Tåge" name="Fog"/>
 			<menu_item_check label="Fleksible objekter" name="Flexible Objects"/>
 		</menu>
-		<menu_item_check label="Kør flere &apos;threats&apos;" name="Run Multiple Threads"/>
 		<menu_item_check label="Benyt &quot;Plugin Read Thread&quot;" name="Use Plugin Read Thread"/>
 		<menu_item_call label="Tøm gruppe cache" name="ClearGroupCache"/>
 		<menu_item_check label="Muse udjævning" name="Mouse Smoothing"/>
@@ -175,7 +172,6 @@
 			<menu_item_check label="Søg" name="Search"/>
 			<menu_item_call label="Frigør taster" name="Release Keys"/>
 			<menu_item_call label="Sæt UI størrelse til standard" name="Set UI Size to Default"/>
-			<menu_item_check label="Vis avanceret menu" name="Show Advanced Menu - legacy shortcut"/>
 			<menu_item_check label="Løb altid" name="Always Run"/>
 			<menu_item_check label="Flyv" name="Fly"/>
 			<menu_item_call label="Luk vindue" name="Close Window"/>
@@ -195,6 +191,7 @@
 			<menu_item_call label="Zoom ind" name="Zoom In"/>
 			<menu_item_call label="Zoom standard" name="Zoom Default"/>
 			<menu_item_call label="Zoom ud" name="Zoom Out"/>
+			<menu_item_check label="Vis avanceret menu" name="Show Advanced Menu"/>
 		</menu>
 		<menu_item_call label="Vis debug valg" name="Debug Settings"/>
 		<menu_item_check label="Vis udviklingsmenu" name="Debug Mode"/>
@@ -237,9 +234,15 @@
 		<menu label="Gengivelse" name="Rendering">
 			<menu_item_check label="Akser" name="Axes"/>
 			<menu_item_check label="Wireframe" name="Wireframe"/>
-			<menu_item_check label="Global oplysning" name="Global Illumination"/>
+			<menu_item_check label="Lys og skygger" name="Lighting and Shadows"/>
+			<menu_item_check label="Skygger fra sol/måne/andre lyskilder" name="Shadows from Sun/Moon/Projectors"/>
+			<menu_item_check label="SSAO og skygge udjævning" name="SSAO and Shadow Smoothing"/>
+			<menu_item_check label="Globalt lys (eksperimentiel)" name="Global Illumination"/>
+			<menu_item_check label="Automatisk alpha-masker (udskudte)" name="Automatic Alpha Masks (deferred)"/>
+			<menu_item_check label="Automatiske alpha-masker (ikke udskudt)" name="Automatic Alpha Masks (non-deferred)"/>
 			<menu_item_check label="Animationsteksturer" name="Animation Textures"/>
 			<menu_item_check label="Slå teksturer fra" name="Disable Textures"/>
+			<menu_item_check label="Tekstur atlas (eksperimentiel)" name="Texture Atlas"/>
 			<menu_item_check label="Gengiv vedhæftede lys" name="Render Attached Lights"/>
 			<menu_item_check label="Gengiv vedhæftede partikler" name="Render Attached Particles"/>
 			<menu_item_check label="Hover Glow Objects" name="Hover Glow Objects"/>
@@ -259,7 +262,8 @@
 			<menu_item_call label="Test web browser" name="Web Browser Test"/>
 			<menu_item_call label="Print info om valgt objekt" name="Print Selected Object Info"/>
 			<menu_item_call label="Hukommelse statistik" name="Memory Stats"/>
-			<menu_item_check label="Dobbelt-klik auto-pilot" name="Double-ClickAuto-Pilot"/>
+			<menu_item_check label="Dobbeltklik for auto-pilot" name="Double-Click Auto-Pilot"/>
+			<menu_item_check label="Dobeltklik for at teleportere" name="DoubleClick Teleport"/>
 			<menu_item_check label="Debug klik" name="Debug Clicks"/>
 			<menu_item_check label="Debug muse-hændelser" name="Debug Mouse Events"/>
 		</menu>
diff --git a/indra/newview/skins/default/xui/da/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/da/menu_wearable_list_item.xml
index 0845f19b15..63f4b0b388 100644
--- a/indra/newview/skins/default/xui/da/menu_wearable_list_item.xml
+++ b/indra/newview/skins/default/xui/da/menu_wearable_list_item.xml
@@ -6,9 +6,9 @@
 	<menu_item_call label="Tag af" name="take_off_or_detach"/>
 	<menu_item_call label="Tag af" name="detach"/>
 	<context_menu label="Vedhæft til" name="wearable_attach_to"/>
-	<context_menu label="Vedhæft på HUD" name="wearable_attach_to_hud"/>
+	<context_menu label="Vedhæft til HUD" name="wearable_attach_to_hud"/>
 	<menu_item_call label="Tag af" name="take_off"/>
 	<menu_item_call label="Redigér" name="edit"/>
-	<menu_item_call label="Objekt profil" name="object_profile"/>
+	<menu_item_call label="Genstandsprofil" name="object_profile"/>
 	<menu_item_call label="Vis original" name="show_original"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/da/menu_wearing_gear.xml b/indra/newview/skins/default/xui/da/menu_wearing_gear.xml
index 39f99ad6aa..515a15b287 100644
--- a/indra/newview/skins/default/xui/da/menu_wearing_gear.xml
+++ b/indra/newview/skins/default/xui/da/menu_wearing_gear.xml
@@ -1,4 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <menu name="Gear Wearing">
 	<menu_item_call label="Redigér sæt" name="edit"/>
+	<menu_item_call label="Tag af" name="takeoff"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/da/menu_wearing_tab.xml b/indra/newview/skins/default/xui/da/menu_wearing_tab.xml
index 878c8bb04d..c0db7b6842 100644
--- a/indra/newview/skins/default/xui/da/menu_wearing_tab.xml
+++ b/indra/newview/skins/default/xui/da/menu_wearing_tab.xml
@@ -1,4 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Wearing">
+	<menu_item_call label="Tag af" name="take_off"/>
+	<menu_item_call label="Tag af" name="detach"/>
 	<menu_item_call label="Redigér sæt" name="edit"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/da/notifications.xml b/indra/newview/skins/default/xui/da/notifications.xml
index 62d9c5a203..eaae513e74 100644
--- a/indra/newview/skins/default/xui/da/notifications.xml
+++ b/indra/newview/skins/default/xui/da/notifications.xml
@@ -808,6 +808,10 @@ For at få adgang til voksen regioner, skal beboere være alders-checket, enten
 	<notification name="ConfirmQuit">
 		<usetemplate ignoretext="Bekræft før jeg afslutter" name="okcancelignore" notext="Afslut ikke" yestext="Quit"/>
 	</notification>
+	<notification name="DeleteItems">
+		[QUESTION]
+		<usetemplate ignoretext="Bekræft før sletning af genstande" name="okcancelignore" notext="Annullér" yestext="OK"/>
+	</notification>
 	<notification name="HelpReportAbuseEmailLL">
 		Benyt dette værktøj til at rapportere krænkninger af [http://secondlife.com/corporate/tos.php Terms of Service] og [http://secondlife.com/corporate/cs.php Community Standards].
 
@@ -1634,9 +1638,13 @@ Check venligst din netværks- og firewall setup.
 		( [EXISTENCE] sekunder i live )
 Avatar &apos;[NAME]&apos; forsvandt helt &quot;uploaded&quot;.
 	</notification>
-	<notification name="AvatarRezSelfBakeNotification">
+	<notification name="AvatarRezSelfBakedTextureUploadNotification">
+		( [EXISTENCE] sekunder i live )
+Du uploadede en [RESOLUTION] &quot;bagt&quot; tekstur til &apos;[BODYREGION]&apos; efter [TIME] sekunder.
+	</notification>
+	<notification name="AvatarRezSelfBakedTextureUpdateNotification">
 		( [EXISTENCE] sekunder i live )
-You [ACTION] a [RESOLUTION] baked texture for &apos;[BODYREGION]&apos; after [TIME] seconds.
+Du opdaterede en [RESOLUTION] &quot;bagt&quot; tekstur for &apos;[BODYREGION]&apos; efter [TIME] sekunder.
 	</notification>
 	<notification name="ConfirmLeaveCall">
 		Er du sikker på at du vil forlade dette opkald?
diff --git a/indra/newview/skins/default/xui/da/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/da/panel_avatar_list_item.xml
index 56332c00e6..df1173a0a0 100644
--- a/indra/newview/skins/default/xui/da/panel_avatar_list_item.xml
+++ b/indra/newview/skins/default/xui/da/panel_avatar_list_item.xml
@@ -22,5 +22,9 @@
 		[COUNT]å
 	</string>
 	<text name="avatar_name" value="Ukendt"/>
+	<icon name="permission_edit_theirs_icon" tool_tip="Du kan redigere denne vens objekter"/>
+	<icon name="permission_edit_mine_icon" tool_tip="Denne ven kan redigere, slette eller tage dine objekter"/>
+	<icon name="permission_map_icon" tool_tip="Denne ven kan finde dig på kortet"/>
+	<icon name="permission_online_icon" tool_tip="Denne ven kan se når du er online"/>
 	<button name="profile_btn" tool_tip="Vis profil"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/da/panel_bottomtray.xml b/indra/newview/skins/default/xui/da/panel_bottomtray.xml
index 2d288a9494..3cd9d55dd0 100644
--- a/indra/newview/skins/default/xui/da/panel_bottomtray.xml
+++ b/indra/newview/skins/default/xui/da/panel_bottomtray.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="bottom_tray">
+	<string name="DragIndicationImageName" value="Accordion_ArrowOpened_Off"/>
 	<string name="SpeakBtnToolTip" value="Slå mikrofon til/fra"/>
 	<string name="VoiceControlBtnToolTip" value="Vis/skjul stemme kontrolpanel"/>
 	<layout_stack name="toolbar_stack">
@@ -12,28 +13,25 @@
 			<gesture_combo_list label="Bevægelse" name="Gesture" tool_tip="Skjuler/viser bevægelser"/>
 		</layout_panel>
 		<layout_panel name="movement_panel">
-			<button label="Flyt" name="movement_btn" tool_tip="Vis/skjul bevægelseskontroller"/>
+			<bottomtray_button label="Flyt" name="movement_btn" tool_tip="Vis/skjul bevægelseskontroller"/>
 		</layout_panel>
 		<layout_panel name="cam_panel">
-			<button label="Vis" name="camera_btn" tool_tip="Vis/Skjul kamerakontroller"/>
+			<bottomtray_button label="Vis" name="camera_btn" tool_tip="Vis/Skjul kamerakontroller"/>
 		</layout_panel>
 		<layout_panel name="snapshot_panel">
-			<button label="" name="snapshots" tool_tip="Tag foto"/>
-		</layout_panel>
-		<layout_panel name="sidebar_btn_panel">
-			<button label="Sidepanel" name="sidebar_btn" tool_tip="Vis/skjul sidepanel"/>
+			<bottomtray_button label="" name="snapshots" tool_tip="Tag foto"/>
 		</layout_panel>
 		<layout_panel name="build_btn_panel">
-			<button label="Byg" name="build_btn" tool_tip="Vis/skjul byggeværktøjer"/>
+			<bottomtray_button label="Byg" name="build_btn" tool_tip="Vis/skjul byggeværktøjer"/>
 		</layout_panel>
 		<layout_panel name="search_btn_panel">
-			<button label="Søg" name="search_btn" tool_tip="Vis/skjul søgning"/>
+			<bottomtray_button label="Søg" name="search_btn" tool_tip="Vis/skjul søgning"/>
 		</layout_panel>
 		<layout_panel name="world_map_btn_panel">
-			<button label="Kort" name="world_map_btn" tool_tip="Vis/skjul verdenskort"/>
+			<bottomtray_button label="Kort" name="world_map_btn" tool_tip="Vis/skjul verdenskort"/>
 		</layout_panel>
 		<layout_panel name="mini_map_btn_panel">
-			<button label="Mini-kort" name="mini_map_btn" tool_tip="Vis/skjul Mini-kort"/>
+			<bottomtray_button label="Mini-kort" name="mini_map_btn" tool_tip="Vis/skjul Mini-kort"/>
 		</layout_panel>
 		<layout_panel name="im_well_panel">
 			<chiclet_im_well name="im_well">
diff --git a/indra/newview/skins/default/xui/da/panel_classified_info.xml b/indra/newview/skins/default/xui/da/panel_classified_info.xml
index 28f8936457..5790f1f19f 100644
--- a/indra/newview/skins/default/xui/da/panel_classified_info.xml
+++ b/indra/newview/skins/default/xui/da/panel_classified_info.xml
@@ -46,8 +46,16 @@
 		</panel>
 	</scroll_container>
 	<panel name="buttons">
-		<button label="Teleport" name="teleport_btn"/>
-		<button label="Kort" name="show_on_map_btn"/>
-		<button label="Redigér" name="edit_btn"/>
+		<layout_stack name="layout_stack1">
+			<layout_panel name="layout_panel1">
+				<button label="Teleportér" name="teleport_btn"/>
+			</layout_panel>
+			<layout_panel name="show_on_map_btn_lp">
+				<button label="Kort" name="show_on_map_btn"/>
+			</layout_panel>
+			<layout_panel name="edit_btn_lp">
+				<button label="Redigér" name="edit_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/da/panel_edit_classified.xml b/indra/newview/skins/default/xui/da/panel_edit_classified.xml
index 7fb2f930fa..fc4780a34e 100644
--- a/indra/newview/skins/default/xui/da/panel_edit_classified.xml
+++ b/indra/newview/skins/default/xui/da/panel_edit_classified.xml
@@ -36,13 +36,19 @@
 				<icons_combo_box.item label="Moderat" name="mature_ci" value="Voksent"/>
 				<icons_combo_box.item label="Generelt" name="pg_ci" value="PG"/>
 			</icons_combo_box>
+			<check_box label="Forny automatisk hver uge" name="auto_renew"/>
 			<text name="price_for_listing_label" value="Pris for optagelse:"/>
 			<spinner label="L$" name="price_for_listing" tool_tip="Pris for optagelse." value="50"/>
-			<check_box label="Forny automatisk hver uge" name="auto_renew"/>
 		</panel>
 	</scroll_container>
 	<panel label="bottom_panel" name="bottom_panel">
-		<button label="[LABEL]" name="save_changes_btn"/>
-		<button label="Annullér" name="cancel_btn"/>
+		<layout_stack name="bottom_panel_ls">
+			<layout_panel name="save_changes_btn_lp">
+				<button label="[LABEL]" name="save_changes_btn"/>
+			</layout_panel>
+			<layout_panel name="show_on_map_btn_lp">
+				<button label="Annullér" name="cancel_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/da/panel_edit_pick.xml b/indra/newview/skins/default/xui/da/panel_edit_pick.xml
index dcc4e7a4b6..fd287b1a0a 100644
--- a/indra/newview/skins/default/xui/da/panel_edit_pick.xml
+++ b/indra/newview/skins/default/xui/da/panel_edit_pick.xml
@@ -25,7 +25,13 @@
 		</panel>
 	</scroll_container>
 	<panel label="bottom_panel" name="bottom_panel">
-		<button label="Gem favorit Pick" name="save_changes_btn"/>
-		<button label="Annullér" name="cancel_btn"/>
+		<layout_stack name="layout_stack1">
+			<layout_panel name="layout_panel1">
+				<button label="Gem valgte" name="save_changes_btn"/>
+			</layout_panel>
+			<layout_panel name="layout_panel1">
+				<button label="Annullér" name="cancel_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/da/panel_edit_profile.xml b/indra/newview/skins/default/xui/da/panel_edit_profile.xml
index 85461e23a7..27a6000419 100644
--- a/indra/newview/skins/default/xui/da/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/da/panel_edit_profile.xml
@@ -46,7 +46,13 @@
 		</panel>
 	</scroll_container>
 	<panel name="profile_me_buttons_panel">
-		<button label="Gem ændringer" name="save_btn"/>
-		<button label="Annullér" name="cancel_btn"/>
+		<layout_stack name="bottom_panel_ls">
+			<layout_panel name="save_changes_btn_lp">
+				<button label="Gem ændringer" name="save_btn"/>
+			</layout_panel>
+			<layout_panel name="show_on_map_btn_lp">
+				<button label="Annullér" name="cancel_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/da/panel_edit_wearable.xml b/indra/newview/skins/default/xui/da/panel_edit_wearable.xml
index 604c166ef0..4b9360f0d1 100644
--- a/indra/newview/skins/default/xui/da/panel_edit_wearable.xml
+++ b/indra/newview/skins/default/xui/da/panel_edit_wearable.xml
@@ -102,7 +102,13 @@
 		<icon name="female_icon" tool_tip="Kvindelig"/>
 	</panel>
 	<panel name="button_panel">
-		<button label="Gem som" name="save_as_button"/>
-		<button label="Annullér ændringer" name="revert_button"/>
+		<layout_stack name="button_panel_ls">
+			<layout_panel name="save_as_btn_lp">
+				<button label="Gem som" name="save_as_button"/>
+			</layout_panel>
+			<layout_panel name="revert_btn_lp">
+				<button label="Annullér ændringer" name="revert_button"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/da/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/da/panel_group_info_sidetray.xml
index a7aa842439..3d561f1e5b 100644
--- a/indra/newview/skins/default/xui/da/panel_group_info_sidetray.xml
+++ b/indra/newview/skins/default/xui/da/panel_group_info_sidetray.xml
@@ -13,7 +13,7 @@
 		Gratis
 	</panel.string>
 	<panel name="group_info_top">
-		<text name="group_name" value="(Henter...)"/>
+		<text_editor name="group_name" value="(Henter...)"/>
 		<line_editor label="Indtast nyt gruppenavn her" name="group_name_editor"/>
 	</panel>
 	<layout_stack name="layout">
@@ -25,10 +25,16 @@
 				<accordion_tab name="group_land_tab" title="Land/Aktiver"/>
 			</accordion>
 		</layout_panel>
-		<layout_panel name="button_row">
+	</layout_stack>
+	<layout_stack name="button_row_ls">
+		<layout_panel name="btn_chat_lp">
 			<button label="Chat" name="btn_chat"/>
+		</layout_panel>
+		<layout_panel name="call_btn_lp">
 			<button label="Gruppeopkald" name="btn_call" tool_tip="Opkald til denne gruppe"/>
-			<button label="Gem" label_selected="Save" name="btn_apply"/>
+		</layout_panel>
+		<layout_panel name="btn_apply_lp">
+			<button label="Gem" label_selected="Gem" name="btn_apply"/>
 			<button label="Opret gruppe" name="btn_create" tool_tip="Opret en ny gruppe"/>
 		</layout_panel>
 	</layout_stack>
diff --git a/indra/newview/skins/default/xui/da/panel_landmarks.xml b/indra/newview/skins/default/xui/da/panel_landmarks.xml
index 9a0a2fb207..e9e5e506fd 100644
--- a/indra/newview/skins/default/xui/da/panel_landmarks.xml
+++ b/indra/newview/skins/default/xui/da/panel_landmarks.xml
@@ -7,8 +7,16 @@
 		<accordion_tab name="tab_library" title="Bibliotek"/>
 	</accordion>
 	<panel name="bottom_panel">
-		<button name="options_gear_btn" tool_tip="Vis yderligere valg"/>
-		<button name="add_btn" tool_tip="Tilføj nyt landemærke"/>
-		<dnd_button name="trash_btn" tool_tip="Fjern valgte landemærke"/>
+		<layout_stack name="bottom_panel">
+			<layout_panel name="options_gear_btn_panel">
+				<button name="options_gear_btn" tool_tip="Vis flere valg"/>
+			</layout_panel>
+			<layout_panel name="add_btn_panel">
+				<button name="add_btn" tool_tip="Tilføj nyt landemærke"/>
+			</layout_panel>
+			<layout_panel name="trash_btn_panel">
+				<dnd_button name="trash_btn" tool_tip="Fjern valgte landemærke"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/da/panel_my_profile.xml b/indra/newview/skins/default/xui/da/panel_my_profile.xml
index 7eb3c9f4e5..2db4b278d7 100644
--- a/indra/newview/skins/default/xui/da/panel_my_profile.xml
+++ b/indra/newview/skins/default/xui/da/panel_my_profile.xml
@@ -27,9 +27,8 @@
 				</panel>
 			</scroll_container>
 		</layout_panel>
-		<layout_panel name="profile_me_buttons_panel">
-			<button label="Redigér profil" name="edit_profile_btn" tool_tip="Redigér din personlige information"/>
-			<button label="Rediger udseende" name="edit_appearance_btn" tool_tip="Opret/tilret dit udseende: fysiske data, tøj m.v."/>
-		</layout_panel>
 	</layout_stack>
+	<panel name="profile_me_buttons_panel">
+		<button label="Redigér profil" name="edit_profile_btn" tool_tip="Redigér din personlige information"/>
+	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/da/panel_notes.xml b/indra/newview/skins/default/xui/da/panel_notes.xml
index 5b3a2d0906..7d8097f6ff 100644
--- a/indra/newview/skins/default/xui/da/panel_notes.xml
+++ b/indra/newview/skins/default/xui/da/panel_notes.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="Noter &amp; Privatliv" name="panel_notes">
 	<layout_stack name="layout">
-		<panel name="notes_stack">
+		<layout_panel name="notes_stack">
 			<scroll_container name="profile_scroll">
 				<panel name="profile_scroll_panel">
 					<text name="status_message" value="Min private noter:"/>
@@ -11,13 +11,25 @@
 					<check_box label="Editére, slette og tage mine objekter" name="objects_check"/>
 				</panel>
 			</scroll_container>
-		</panel>
-		<panel name="notes_buttons_panel">
-			<button label="Tilføj ven" name="add_friend" tool_tip="Tilbyd venskab til beboer"/>
-			<button label="IM" name="im" tool_tip="Åben session med personlig besked (IM)"/>
-			<button label="Kald" name="call" tool_tip="Opkald til denne beboer"/>
-			<button label="Kort" name="show_on_map_btn" tool_tip="Vis beboer på kort"/>
-			<button label="Teleport" name="teleport" tool_tip="Tilbyd teleport"/>
-		</panel>
+		</layout_panel>
+		<layout_panel name="notes_buttons_panel">
+			<layout_stack name="bottom_bar_ls">
+				<layout_panel name="add_friend_btn_lp">
+					<button label="Tilføj ven" name="add_friend" tool_tip="Tilbyd venskab til beboer"/>
+				</layout_panel>
+				<layout_panel name="im_btn_lp">
+					<button label="IM" name="im" tool_tip="Åben session med personlige beskeder"/>
+				</layout_panel>
+				<layout_panel name="call_btn_lp">
+					<button label="Opkald" name="call" tool_tip="Opkald til denne beboer"/>
+				</layout_panel>
+				<layout_panel name="show_on_map_btn_lp">
+					<button label="Kort" name="show_on_map_btn" tool_tip="Vis denne beboer på kortet"/>
+				</layout_panel>
+				<layout_panel name="teleport_btn_lp">
+					<button label="Teleportér" name="teleport" tool_tip="Tilbyd teleport"/>
+				</layout_panel>
+			</layout_stack>
+		</layout_panel>
 	</layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/da/panel_outfit_edit.xml b/indra/newview/skins/default/xui/da/panel_outfit_edit.xml
index 99ef3b5411..3736ea06ba 100644
--- a/indra/newview/skins/default/xui/da/panel_outfit_edit.xml
+++ b/indra/newview/skins/default/xui/da/panel_outfit_edit.xml
@@ -45,7 +45,13 @@
 		<button name="shop_btn_2" tool_tip="Besøg SL markedspladsen. Du kan også vælge noget du har på, og så klikke her for at se andre ting som dette"/>
 	</panel>
 	<panel name="save_revert_button_bar">
-		<button label="Gem" name="save_btn"/>
-		<button label="Annullér ændringer" name="revert_btn" tool_tip="Vend tilbage til sidst gemte version"/>
+		<layout_stack name="button_bar_ls">
+			<layout_panel name="save_btn_lp">
+				<button label="Gem" name="save_btn"/>
+			</layout_panel>
+			<layout_panel name="revert_btn_lp">
+				<button label="Annullér ændringer" name="revert_btn" tool_tip="Vend tilbage til gemt version"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/da/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/da/panel_outfits_inventory.xml
index 6f9dd5b775..055c42c003 100644
--- a/indra/newview/skins/default/xui/da/panel_outfits_inventory.xml
+++ b/indra/newview/skins/default/xui/da/panel_outfits_inventory.xml
@@ -11,7 +11,13 @@
 		<panel label="HAR PÅ" name="cof_tab"/>
 	</tab_container>
 	<panel name="bottom_panel">
-		<button label="Gem som" name="save_btn"/>
-		<button label="Tag på" name="wear_btn" tool_tip="Tag valgte sæt på"/>
+		<layout_stack name="bottom_panel_ls">
+			<layout_panel name="save_btn_lp">
+				<button label="Gem som" name="save_btn"/>
+			</layout_panel>
+			<layout_panel name="wear_btn_lp">
+				<button label="Tag på" name="wear_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/da/panel_people.xml b/indra/newview/skins/default/xui/da/panel_people.xml
index 5d8474259c..6c910cc3b2 100644
--- a/indra/newview/skins/default/xui/da/panel_people.xml
+++ b/indra/newview/skins/default/xui/da/panel_people.xml
@@ -32,9 +32,17 @@ Leder du efter nogen at være sammen med? Prøv [secondlife:///app/worldmap Worl
 				<accordion_tab name="tab_all" title="Alle"/>
 			</accordion>
 			<panel label="bottom_panel" name="bottom_panel">
-				<button name="friends_viewsort_btn" tool_tip="Valg"/>
-				<button name="add_btn" tool_tip="Tilbyd venskab til en beboer"/>
-				<button name="del_btn" tool_tip="Fjern valgte person fra din venneliste"/>
+				<layout_stack name="bottom_panel">
+					<layout_panel name="options_gear_btn_panel">
+						<button name="friends_viewsort_btn" tool_tip="Vis flere valg"/>
+					</layout_panel>
+					<layout_panel name="add_btn_panel">
+						<button name="add_btn" tool_tip="Tilbyd venskab til en beboer"/>
+					</layout_panel>
+					<layout_panel name="trash_btn_panel">
+						<dnd_button name="trash_btn" tool_tip="Fjern valgte personer fra venneliste"/>
+					</layout_panel>
+				</layout_stack>
 			</panel>
 		</panel>
 		<panel label="MINE GRUPPER" name="groups_panel">
@@ -52,13 +60,33 @@ Leder du efter nogen at være sammen med? Prøv [secondlife:///app/worldmap Worl
 		</panel>
 	</tab_container>
 	<panel name="button_bar">
-		<button label="Profil" name="view_profile_btn" tool_tip="Vis billede, gruppe og anden information om beboer"/>
-		<button label="IM" name="im_btn" tool_tip="Chat privat med denne person"/>
-		<button label="Opkald" name="call_btn" tool_tip="Opkald til denne beboer"/>
-		<button label="Del" name="share_btn" tool_tip="Del en genstand i beholdning"/>
-		<button label="Teleport" name="teleport_btn" tool_tip="Tilbyd teleport"/>
-		<button label="Group profil" name="group_info_btn" tool_tip="Vis gruppe information"/>
-		<button label="Gruppe chat" name="chat_btn" tool_tip="Åben chat session"/>
-		<button label="Gruppe opkald" name="group_call_btn" tool_tip="Opkald til denne gruppe"/>
+		<layout_stack name="bottom_bar_ls">
+			<layout_panel name="view_profile_btn_lp">
+				<button label="Profil" name="view_profile_btn" tool_tip="Vis billeder, grupper og anden beboer information"/>
+			</layout_panel>
+			<layout_panel name="chat_btn_lp">
+				<button label="IM" name="im_btn" tool_tip="Åben session med privat besked (IM)"/>
+			</layout_panel>
+			<layout_panel name="chat_btn_lp">
+				<button label="Kald" name="call_btn" tool_tip="Opkald til denne beboer"/>
+			</layout_panel>
+			<layout_panel name="chat_btn_lp">
+				<button label="Del" name="share_btn" tool_tip="Del en genstand fra beholdning"/>
+			</layout_panel>
+			<layout_panel name="chat_btn_lp">
+				<button label="Teleportér" name="teleport_btn" tool_tip="Tilbyd teleport"/>
+			</layout_panel>
+		</layout_stack>
+		<layout_stack name="bottom_bar_ls1">
+			<layout_panel name="group_info_btn_lp">
+				<button label="Gruppe profil" name="group_info_btn" tool_tip="Vis gruppe information"/>
+			</layout_panel>
+			<layout_panel name="chat_btn_lp">
+				<button label="Gruppe chat" name="chat_btn" tool_tip="Åben chat session"/>
+			</layout_panel>
+			<layout_panel name="group_call_btn_lp">
+				<button label="Gruppe kald" name="group_call_btn" tool_tip="Opkald til denne gruppe"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/da/panel_pick_info.xml b/indra/newview/skins/default/xui/da/panel_pick_info.xml
index ce05018b5b..8a5141f967 100644
--- a/indra/newview/skins/default/xui/da/panel_pick_info.xml
+++ b/indra/newview/skins/default/xui/da/panel_pick_info.xml
@@ -3,14 +3,22 @@
 	<text name="title" value="Favorit info"/>
 	<scroll_container name="profile_scroll">
 		<panel name="scroll_content_panel">
-			<text name="pick_name" value="[name]"/>
-			<text name="pick_location" value="[loading...]"/>
-			<text name="pick_desc" value="[description]"/>
+			<text_editor name="pick_name" value="[name]"/>
+			<text_editor name="pick_location" value="[loading...]"/>
+			<text_editor name="pick_desc" value="[description]"/>
 		</panel>
 	</scroll_container>
 	<panel name="buttons">
-		<button label="Teleportér" name="teleport_btn"/>
-		<button label="Kort" name="show_on_map_btn"/>
-		<button label="Redigér" name="edit_btn"/>
+		<layout_stack name="layout_stack1">
+			<layout_panel name="layout_panel1">
+				<button label="Teleport" name="teleport_btn"/>
+			</layout_panel>
+			<layout_panel name="show_on_map_btn_lp">
+				<button label="Kort" name="show_on_map_btn"/>
+			</layout_panel>
+			<layout_panel name="edit_btn_lp">
+				<button label="Rediger" name="edit_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/da/panel_picks.xml b/indra/newview/skins/default/xui/da/panel_picks.xml
index ee3c59b88a..8af68ee69a 100644
--- a/indra/newview/skins/default/xui/da/panel_picks.xml
+++ b/indra/newview/skins/default/xui/da/panel_picks.xml
@@ -2,19 +2,28 @@
 <panel label="Favoritter" name="panel_picks">
 	<string name="no_picks" value="Ingen favoritter"/>
 	<string name="no_classifieds" value="Ingen annoncer"/>
-	<text name="empty_picks_panel_text">
-		Der er ingen favoritter/annoncer her
-	</text>
 	<accordion name="accordion">
 		<accordion_tab name="tab_picks" title="Favoritter"/>
 		<accordion_tab name="tab_classifieds" title="Annoncer"/>
 	</accordion>
 	<panel label="bottom_panel" name="edit_panel">
-		<button name="new_btn" tool_tip="Opret en ny favorit eller annonce på dette sted"/>
+		<layout_stack name="edit_panel_ls">
+			<layout_panel name="gear_menu_btn">
+				<button name="new_btn" tool_tip="Opret favorit eller annonce på nuværende lokation"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 	<panel name="buttons_cucks">
-		<button label="Info" name="info_btn" tool_tip="Vis favorit information"/>
-		<button label="Teleportér" name="teleport_btn" tool_tip="Teleportér til dette sted"/>
-		<button label="Kort" name="show_on_map_btn" tool_tip="Vis dette sted på verdenskort"/>
+		<layout_stack name="buttons_cucks_ls">
+			<layout_panel name="info_btn_lp">
+				<button label="Info" name="info_btn" tool_tip="Vis favoritinformation"/>
+			</layout_panel>
+			<layout_panel name="teleport_btn_lp">
+				<button label="Teleport" name="teleport_btn" tool_tip="Teleportér til tilsvarende område"/>
+			</layout_panel>
+			<layout_panel name="show_on_map_btn_lp">
+				<button label="Kort" name="show_on_map_btn" tool_tip="Vis tilsvarende område på verdenskort"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/da/panel_places.xml b/indra/newview/skins/default/xui/da/panel_places.xml
index ac15da1717..ca3d7c71bb 100644
--- a/indra/newview/skins/default/xui/da/panel_places.xml
+++ b/indra/newview/skins/default/xui/da/panel_places.xml
@@ -4,13 +4,45 @@
 	<string name="teleport_history_tab_title" value="TELEPORT HISTORIK"/>
 	<filter_editor label="Filtrér mine steder" name="Filter"/>
 	<panel name="button_panel">
-		<button label="Teleportér" name="teleport_btn" tool_tip="Teleportér til det valgte område"/>
-		<button label="Kort" name="map_btn" tool_tip="Vis dette område på verdenskortet"/>
-		<button label="Redigér" name="edit_btn" tool_tip="Redigér landemærke information"/>
-		<button label="▼" name="overflow_btn" tool_tip="Vise flere valgmuligheder"/>
-		<button label="Gem" name="save_btn"/>
-		<button label="Annullér" name="cancel_btn"/>
-		<button label="Luk" name="close_btn"/>
-		<button label="Profil" name="profile_btn" tool_tip="Vis profil for stedet"/>
+		<layout_stack name="bottom_bar_ls0">
+			<layout_panel name="lp1">
+				<layout_stack name="bottom_bar_ls1">
+					<layout_panel name="teleport_btn_lp">
+						<button label="Teleport" name="teleport_btn" tool_tip="Teleportér til valgte område"/>
+					</layout_panel>
+					<layout_panel name="chat_btn_lp">
+						<button label="Kort" name="map_btn" tool_tip="Vis tilsvarende område på verdenskort"/>
+					</layout_panel>
+				</layout_stack>
+			</layout_panel>
+			<layout_panel name="lp2">
+				<layout_stack name="bottom_bar_ls3">
+					<layout_panel name="edit_btn_lp">
+						<button label="Redigér" name="edit_btn" tool_tip="Redigér landemærke information"/>
+					</layout_panel>
+					<layout_panel name="overflow_btn_lp">
+						<button label="▼" name="overflow_btn" tool_tip="Vis flere valg"/>
+					</layout_panel>
+				</layout_stack>
+				<layout_stack name="bottom_bar_ls3">
+					<layout_panel name="profile_btn_lp">
+						<button label="Profil" name="profile_btn" tool_tip="Vis profil for sted"/>
+					</layout_panel>
+				</layout_stack>
+				<layout_stack name="bottom_bar_close_ls3">
+					<layout_panel name="close_btn_lp">
+						<button label="Luk" name="close_btn"/>
+					</layout_panel>
+				</layout_stack>
+			</layout_panel>
+		</layout_stack>
+		<layout_stack name="bottom_bar_ls2">
+			<layout_panel name="save_btn_lp">
+				<button label="Gem" name="save_btn"/>
+			</layout_panel>
+			<layout_panel name="cancel_btn_lp">
+				<button label="Annullér" name="cancel_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/da/panel_preferences_chat.xml b/indra/newview/skins/default/xui/da/panel_preferences_chat.xml
index bea106bf28..72f8476094 100644
--- a/indra/newview/skins/default/xui/da/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/da/panel_preferences_chat.xml
@@ -56,9 +56,9 @@
 		<radio_item label="Separate vinduer" name="radio" value="0"/>
 		<radio_item label="Faner" name="radio2" value="1"/>
 	</radio_group>
-	<check_box label="Oversæt Chat" name="translate_chat_checkbox" />
+	<check_box label="Benyt maskin-oversættelse ved chat (håndteret af Google)" name="translate_chat_checkbox"/>
 	<text name="translate_language_text" width="110">
-		Chat Sprog:
+		Oversæt chat til :
 	</text>
 	<combo_box name="translate_language_combobox" width="146">
 		<combo_box.item label="System standard" name="System Default Language"/>
@@ -67,16 +67,16 @@
 		<combo_box.item label="Deutsch (Tysk)" name="German"/>
 		<combo_box.item label="Español (Spansk)" name="Spanish"/>
 		<combo_box.item label="Français (Fransk)" name="French"/>
-		<combo_box.item label="Italiano (Italiensk)" name="Italian" />
-		<combo_box.item label="Magyar (Ungarsk)" name="Hungarian" />
-		<combo_box.item label="Nederlands (Hollandsk)" name="Dutch" />
-		<combo_box.item label="Polski (Polsk)" name="Polish" />
-		<combo_box.item label="Português (Portugisisk)" name="Portugese" />
-		<combo_box.item label="Русский (Russisk)" name="Russian" />
-		<combo_box.item label="Türkçe (Tyrkisk)" name="Turkish" />
-		<combo_box.item label="Українська (Ukrainsk)" name="Ukrainian" />
-		<combo_box.item label="中文 (简体) (Kinesisk)" name="Chinese" />
-		<combo_box.item label="日本語 (Japansk)" name="Japanese" />
-		<combo_box.item label="한국어 (Koreansk)" name="Korean" />
+		<combo_box.item label="Italiano (Italiensk)" name="Italian"/>
+		<combo_box.item label="Magyar (Ungarsk)" name="Hungarian"/>
+		<combo_box.item label="Nederlands (Hollandsk)" name="Dutch"/>
+		<combo_box.item label="Polski (Polsk)" name="Polish"/>
+		<combo_box.item label="Português (Portugisisk)" name="Portugese"/>
+		<combo_box.item label="Русский (Russisk)" name="Russian"/>
+		<combo_box.item label="Türkçe (Tyrkisk)" name="Turkish"/>
+		<combo_box.item label="Українська (Ukrainsk)" name="Ukrainian"/>
+		<combo_box.item label="中文 (简体) (Kinesisk)" name="Chinese"/>
+		<combo_box.item label="日本語 (Japansk)" name="Japanese"/>
+		<combo_box.item label="한국어 (Koreansk)" name="Korean"/>
 	</combo_box>
 </panel>
diff --git a/indra/newview/skins/default/xui/da/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/da/panel_preferences_graphics1.xml
index 62214089f5..5bc5025ff1 100644
--- a/indra/newview/skins/default/xui/da/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/da/panel_preferences_graphics1.xml
@@ -29,22 +29,16 @@
 		<check_box initial_value="true" label="Glatte flader og skin" name="BumpShiny"/>
 		<check_box initial_value="true" label="Basale flader" name="BasicShaders" tool_tip="Ved at slå dette valg fra, kan det forhindres at visse grafikkort drivere crasher."/>
 		<check_box initial_value="true" label="Atmosfæriske flader" name="WindLightUseAtmosShaders"/>
-		<check_box initial_value="true" label="Reflektioner i vand" name="Reflections"/>
-		<text name="ReflectionDetailText">
-			Spejlnings detaljer:
+		<text name="reflection_label">
+			Reflektioner i vand:
 		</text>
-		<radio_group name="ReflectionDetailRadio">
-			<radio_item label="Terræn og træer" name="0"/>
-			<radio_item label="Alle statiske objekter" name="1"/>
-			<radio_item label="Alle avatarer og objekter" name="2"/>
-			<radio_item label="Alt" name="3"/>
-		</radio_group>
-		<text name="AvatarRenderingText">
-			Avatar gengivelse
-		</text>
-		<check_box initial_value="true" label="Mini-figurer på lang afstand" name="AvatarImpostors"/>
-		<check_box initial_value="true" label="Hardware Skinning" name="AvatarVertexProgram"/>
-		<check_box initial_value="true" label="Avatar tøj" name="AvatarCloth"/>
+		<combo_box initial_value="true" label="Reflektioner i vand" name="Reflections">
+			<combo_box.item label="Minimum" name="0"/>
+			<combo_box.item label="Terræn og træer" name="1"/>
+			<combo_box.item label="Alle statiske objekter" name="2"/>
+			<combo_box.item label="Alle avatarer og objekter" name="3"/>
+			<combo_box.item label="Alt" name="4"/>
+		</combo_box>
 		<slider label="Maks. visnings-afstand:" name="DrawDistance"/>
 		<text name="DrawDistanceMeterText2">
 			m
@@ -82,13 +76,12 @@
 		<text name="SkyMeshDetailText">
 			Lav
 		</text>
-		<text name="LightingDetailText">
-			Lys detaljer:
+		<text name="AvatarRenderingText">
+			Avatar gengivelse
 		</text>
-		<radio_group name="LightingDetailRadio">
-			<radio_item label="Kun sol og måne" name="SunMoon" value="0"/>
-			<radio_item label="Lys i nærheden" name="LocalLights" value="1"/>
-		</radio_group>
+		<check_box initial_value="true" label="Mini-figurer på lang afstand" name="AvatarImpostors"/>
+		<check_box initial_value="true" label="Hardware Skinning" name="AvatarVertexProgram"/>
+		<check_box initial_value="true" label="Avatar tøj" name="AvatarCloth"/>
 		<text name="TerrainDetailText">
 			Terræn detaljer:
 		</text>
@@ -96,6 +89,7 @@
 			<radio_item label="Lav" name="0"/>
 			<radio_item label="Høj" name="2"/>
 		</radio_group>
+		--&gt;
 	</panel>
 	<button label="Benyt" label_selected="Benyt" name="Apply"/>
 	<button label="Nulstil" name="Defaults"/>
diff --git a/indra/newview/skins/default/xui/da/panel_profile.xml b/indra/newview/skins/default/xui/da/panel_profile.xml
index c5bfc3ae80..b2d1e9791a 100644
--- a/indra/newview/skins/default/xui/da/panel_profile.xml
+++ b/indra/newview/skins/default/xui/da/panel_profile.xml
@@ -25,17 +25,29 @@
 				</panel>
 			</scroll_container>
 		</layout_panel>
+	</layout_stack>
+	<layout_stack name="layout_verb_buttons">
 		<layout_panel name="profile_buttons_panel">
-			<button label="Tilføj ven" name="add_friend" tool_tip="Tilbyd venskab til beboeren"/>
-			<button label="IM" name="im" tool_tip="Åben session med personlige beskeder (IM)"/>
-			<button label="Opkald" name="call" tool_tip="Opkald til denne beboer"/>
-			<button label="Kort" name="show_on_map_btn" tool_tip="Vis beboeren på kortet"/>
-			<button label="Teleport" name="teleport" tool_tip="Tilbyd teleport"/>
-			<button label="▼" name="overflow_btn" tool_tip="Betal penge til eller del beholdning med beboeren"/>
+			<layout_stack name="bottom_bar_ls">
+				<layout_panel name="add_friend_btn_lp">
+					<button label="Tilføj ven" name="add_friend" tool_tip="Tilbyd venskab til beboeren"/>
+				</layout_panel>
+				<layout_panel name="im_btn_lp">
+					<button label="Personlig besked" name="im" tool_tip="Åben session med personlig besked"/>
+				</layout_panel>
+				<layout_panel name="call_btn_lp">
+					<button label="Opkald" name="call" tool_tip="Opkald til denne beboer"/>
+				</layout_panel>
+				<layout_panel name="chat_btn_lp">
+					<button label="Teleportér" name="teleport" tool_tip="Tilbyd teleport"/>
+				</layout_panel>
+				<layout_panel name="overflow_btn_lp">
+					<button label="▼" name="overflow_btn" tool_tip="Betal eller del beholdning med denne beboer"/>
+				</layout_panel>
+			</layout_stack>
 		</layout_panel>
 		<layout_panel name="profile_me_buttons_panel">
 			<button label="Redigér profil" name="edit_profile_btn" tool_tip="Redigér din personlige information"/>
-			<button label="Redigér udseende" name="edit_appearance_btn" tool_tip="Opret/redigér dit udseende: fysiske data, tøj m.v."/>
 		</layout_panel>
 	</layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/da/panel_side_tray_tab_caption.xml b/indra/newview/skins/default/xui/da/panel_side_tray_tab_caption.xml
index 5c0bd829d8..ce3a1d8b4e 100644
--- a/indra/newview/skins/default/xui/da/panel_side_tray_tab_caption.xml
+++ b/indra/newview/skins/default/xui/da/panel_side_tray_tab_caption.xml
@@ -1,5 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="sidetray_tab_panel">
 	<text name="sidetray_tab_title" value="Side bjælke"/>
+	<button name="undock" tool_tip="Løsriv"/>
+	<button name="dock" tool_tip="Fastgør"/>
 	<button name="show_help" tool_tip="Vis hjælp"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/da/sidepanel_inventory.xml b/indra/newview/skins/default/xui/da/sidepanel_inventory.xml
index 64ee3f0428..b3293b981e 100644
--- a/indra/newview/skins/default/xui/da/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/da/sidepanel_inventory.xml
@@ -2,12 +2,20 @@
 <panel label="Ting" name="objects panel">
 	<panel label="" name="sidepanel__inventory_panel">
 		<panel name="button_panel">
-			<button label="Profil" name="info_btn" tool_tip="Vis objekt profil"/>
-			<button label="Del" name="share_btn" tool_tip="Del en genstand fra beholdning"/>
-			<button label="Køb ind" name="shop_btn" tool_tip="Åben hjemmeside for markedsplads"/>
-			<button label="Bær" name="wear_btn" tool_tip="Tag valgte sæt på"/>
-			<button label="Afspil" name="play_btn"/>
-			<button label="Teleportér" name="teleport_btn" tool_tip="Teleport til det valgte område"/>
+			<layout_stack name="button_panel_ls">
+				<layout_panel name="info_btn_lp">
+					<button label="Profil" name="info_btn" tool_tip="Vis objektprofil"/>
+				</layout_panel>
+				<layout_panel name="share_btn_lp">
+					<button label="Del" name="share_btn" tool_tip="Del en genstand fra beholdning"/>
+				</layout_panel>
+				<layout_panel name="shop_btn_lp">
+					<button label="Butik" name="shop_btn" tool_tip="Åben hjemmeside for markedsplads"/>
+					<button label="Tag på" name="wear_btn" tool_tip="Tag det valgte sæt på"/>
+					<button label="Afspil" name="play_btn"/>
+					<button label="Teleport" name="teleport_btn" tool_tip="Teleporter til valgte område"/>
+				</layout_panel>
+			</layout_stack>
 		</panel>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/da/sidepanel_item_info.xml b/indra/newview/skins/default/xui/da/sidepanel_item_info.xml
index 2350af8d49..d52845160b 100644
--- a/indra/newview/skins/default/xui/da/sidepanel_item_info.xml
+++ b/indra/newview/skins/default/xui/da/sidepanel_item_info.xml
@@ -23,54 +23,53 @@
 	</panel.string>
 	<text name="title" value="Profil for genstand"/>
 	<text name="origin" value="(Beholdning)"/>
-	<panel label="" name="item_profile">
-		<text name="LabelItemNameTitle">
-			Navn:
-		</text>
-		<text name="LabelItemDescTitle">
-			Beskrivelse:
-		</text>
-		<text name="LabelCreatorTitle">
-			Skaber:
-		</text>
-		<button label="Profil..." name="BtnCreator"/>
-		<text name="LabelOwnerTitle">
-			Ejer:
-		</text>
-		<button label="Profil..." name="BtnOwner"/>
-		<text name="LabelAcquiredTitle">
-			Anskaffet:
-		</text>
-		<text name="LabelAcquiredDate"/>
-		<panel name="perms_inv">
-			<text name="perm_modify">
-				Du kan:
+	<scroll_container name="item_profile_scroll">
+		<panel label="" name="item_profile">
+			<text name="LabelItemNameTitle">
+				Navn:
 			</text>
-			<check_box label="Redigere" name="CheckOwnerModify"/>
-			<check_box label="Kopiere" name="CheckOwnerCopy"/>
-			<check_box label="Overfør" name="CheckOwnerTransfer"/>
-			<text name="AnyoneLabel">
-				Alle:
+			<text name="LabelItemDescTitle">
+				Beskrivelse:
 			</text>
-			<check_box label="Kopiere" name="CheckEveryoneCopy"/>
-			<text name="GroupLabel">
-				Gruppe:
+			<text name="LabelCreatorTitle">
+				Skaber:
 			</text>
-			<check_box label="Del" name="CheckShareWithGroup" tool_tip="Giver alle medlemmer adgang til at give gruppen ret til at ændre rettigheder for dette objekt. Du skal dedikere for at åbne for rolle begrænsninger."/>
-			<text name="NextOwnerLabel">
-				Næste ejer:
+			<text name="LabelOwnerTitle">
+				Ejer:
 			</text>
-			<check_box label="Redigere" name="CheckNextOwnerModify"/>
-			<check_box label="Kopiere" name="CheckNextOwnerCopy"/>
-			<check_box label="Overføre" name="CheckNextOwnerTransfer" tool_tip="Næste ejer kan give væk eller sælge dette objekt"/>
+			<text name="LabelAcquiredTitle">
+				Anskaffet:
+			</text>
+			<panel name="perms_inv">
+				<text name="perm_modify">
+					Du kan:
+				</text>
+				<check_box label="Redigere" name="CheckOwnerModify"/>
+				<check_box label="Kopi" name="CheckOwnerCopy"/>
+				<check_box label="Overføre" name="CheckOwnerTransfer"/>
+				<text name="AnyoneLabel">
+					Enhver:
+				</text>
+				<check_box label="Kopi" name="CheckEveryoneCopy"/>
+				<text name="GroupLabel">
+					Gruppe:
+				</text>
+				<check_box label="Del" name="CheckShareWithGroup" tool_tip="Tillader alle medlermmer af valgte gruppe at dele dine redigeringsrettigheder for dette objekt. Du skal vælge dedikere for at tildele rollerettigheder."/>
+				<text name="NextOwnerLabel">
+					Næste ejer:
+				</text>
+				<check_box label="Redigér" name="CheckNextOwnerModify"/>
+				<check_box label="Kopiere" name="CheckNextOwnerCopy"/>
+				<check_box label="Overfør" name="CheckNextOwnerTransfer" tool_tip="Næste ejer kan give dette objekt væk"/>
+			</panel>
+			<check_box label="Til salg" name="CheckPurchase"/>
+			<combo_box name="combobox sale copy">
+				<combo_box.item label="Kopi" name="Copy"/>
+				<combo_box.item label="Original" name="Original"/>
+			</combo_box>
+			<spinner label="Pris: L$" name="Edit Cost"/>
 		</panel>
-		<check_box label="Til salg" name="CheckPurchase"/>
-		<combo_box name="combobox sale copy">
-			<combo_box.item label="Kopi" name="Copy"/>
-			<combo_box.item label="Original" name="Original"/>
-		</combo_box>
-		<spinner label="Pris: L$" name="Edit Cost"/>
-	</panel>
+	</scroll_container>
 	<panel name="button_panel">
 		<button label="Annullér" name="cancel_btn"/>
 	</panel>
diff --git a/indra/newview/skins/default/xui/da/strings.xml b/indra/newview/skins/default/xui/da/strings.xml
index 712f6f8b50..9f4119e73b 100644
--- a/indra/newview/skins/default/xui/da/strings.xml
+++ b/indra/newview/skins/default/xui/da/strings.xml
@@ -1264,6 +1264,9 @@
 	<string name="Right Pec">
 		Højre bryst
 	</string>
+	<string name="Invalid Attachment">
+		Ugyldig vedhæftningspunktt
+	</string>
 	<string name="YearsMonthsOld">
 		[AGEYEARS] [AGEMONTHS] gammel
 	</string>
@@ -1641,9 +1644,6 @@
 	<string name="ATTACH_HUD_BOTTOM_RIGHT">
 		HUD Nederst til højre
 	</string>
-	<string name="Bad attachment point">
-		Ugyldig fæste-punkt
-	</string>
 	<string name="CursorPos">
 		Linie [LINE], Kolonne [COLUMN]
 	</string>
@@ -1659,12 +1659,6 @@
 	<string name="BusyModeResponseDefault">
 		Beboeren du sendte en besked er &apos;optaget&apos;, hvilket betyder at han/hun ikke vil forstyrres. Din besked vil blive vis i hans/hendes IM panel til senere visning.
 	</string>
-	<string name="NoOutfits">
-		You don&apos;t have any outfits yet. Try [secondlife:///app/search/all/ Search]
-	</string>
-	<string name="NoOutfitsTabsMatched">
-		Fandt du ikke hvad du søgte? Prøv [secondlife:///app/search/all/[SEARCH_TERM] Search].
-	</string>
 	<string name="MuteByName">
 		(Efter navn)
 	</string>
@@ -1819,6 +1813,12 @@ Forventet .wav, .tga, .bmp, .jpg, .jpeg, or .bvh
 	<string name="accel-win-shift">
 		Shift+
 	</string>
+	<string name="Esc">
+		Esc
+	</string>
+	<string name="Home">
+		Hjem
+	</string>
 	<string name="FileSaved">
 		Fil gemt
 	</string>
@@ -3435,6 +3435,9 @@ Hvis du bliver ved med at modtage denne besked, kontakt venligst [SUPPORT_SITE].
 	<string name="IM_moderator_label">
 		(Moderator)
 	</string>
+	<string name="Saved_message">
+		(Gemt [LONG_TIMESTAMP])
+	</string>
 	<string name="answered_call">
 		Dit opkald er blevet besvaret
 	</string>
@@ -3456,6 +3459,12 @@ Hvis du bliver ved med at modtage denne besked, kontakt venligst [SUPPORT_SITE].
 	<string name="hang_up-im">
 		Forladt stemme opkald
 	</string>
+	<string name="conference-title-incoming">
+		Konference med [AGENT_NAME]
+	</string>
+	<string name="no_session_message">
+		(IM session eksisterer ikke)
+	</string>
 	<string name="only_user_message">
 		Du er den eneste deltager i denne samtale
 	</string>
@@ -3840,4 +3849,13 @@ Krænkelsesanmeldelse
 	<string name="Chat">
 		Chat
 	</string>
+	<string name="DeleteItems">
+		Slet valgte genstande?
+	</string>
+	<string name="DeleteItem">
+		Slet valgte genstand?
+	</string>
+	<string name="EmptyOutfitText">
+		Der er ingen genstande i dette sæt
+	</string>
 </strings>
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_chat.xml b/indra/newview/skins/default/xui/es/panel_preferences_chat.xml
index a4981e1a5d..05aea82d82 100644
--- a/indra/newview/skins/default/xui/es/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/es/panel_preferences_chat.xml
@@ -62,10 +62,10 @@
 	</text>
 	<combo_box name="translate_language_combobox">
 		<combo_box.item label="Predeterminado del sistema" name="System Default Language"/>
-		<combo_box.item label="English" name="English"/>
+		<combo_box.item label="English (inglés)" name="English"/>
 		<combo_box.item label="Dansk (danés)" name="Danish"/>
 		<combo_box.item label="Deutsch (alemán)" name="German"/>
-		<combo_box.item label="Español (español)" name="Spanish"/>
+		<combo_box.item label="Español" name="Spanish"/>
 		<combo_box.item label="Français (francés)" name="French"/>
 		<combo_box.item label="Italiano (italiano)" name="Italian"/>
 		<combo_box.item label="Magyar (húngaro)" name="Hungarian"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_map.xml b/indra/newview/skins/default/xui/pl/floater_map.xml
index 4f1430623a..fd151e91ad 100644
--- a/indra/newview/skins/default/xui/pl/floater_map.xml
+++ b/indra/newview/skins/default/xui/pl/floater_map.xml
@@ -1,28 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater name="Map" title="">
-	<floater.string name="mini_map_north">
-		N
-	</floater.string>
-	<floater.string name="mini_map_east">
-		E
-	</floater.string>
-	<floater.string name="mini_map_west">
-		W
-	</floater.string>
-	<floater.string name="mini_map_south">
-		S
-	</floater.string>
-	<floater.string name="mini_map_southeast">
-		SE
-	</floater.string>
-	<floater.string name="mini_map_northeast">
-		NE
-	</floater.string>
-	<floater.string name="mini_map_southwest">
-		SW
-	</floater.string>
-	<floater.string name="mini_map_northwest">
-		NW
+	<floater.string name="ToolTipMsg">
+		[REGION](Podwójne kliknięcie otwiera Mapę, Shift i przeciągnięcie kursorem zmienia skalę)
 	</floater.string>
 	<floater.string name="mini_map_caption">
 		MINIMAPA
diff --git a/indra/newview/skins/default/xui/pl/floater_nearby_chat.xml b/indra/newview/skins/default/xui/pl/floater_nearby_chat.xml
index e00b3188ea..7dc3e1f22e 100644
--- a/indra/newview/skins/default/xui/pl/floater_nearby_chat.xml
+++ b/indra/newview/skins/default/xui/pl/floater_nearby_chat.xml
@@ -1,2 +1,4 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="nearby_chat" title="CZAT LOKALNY"/>
+<floater name="nearby_chat" title="CZAT LOKALNY">
+	<check_box label="Tłumaczenie czatu (wspierane przez Google)" name="translate_chat_checkbox"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_tools.xml b/indra/newview/skins/default/xui/pl/floater_tools.xml
index 817a72efd9..6efef4161e 100644
--- a/indra/newview/skins/default/xui/pl/floater_tools.xml
+++ b/indra/newview/skins/default/xui/pl/floater_tools.xml
@@ -185,10 +185,10 @@
 			<text name="Group:">
 				Grupa:
 			</text>
-			<button label="Ustaw..." label_selected="Ustaw..." name="button set group" tool_tip="Wybierz grupę, która uzyska dostęp do praw obiektu"/>
 			<name_box initial_value="Ładowanie..." name="Group Name Proxy"/>
-			<button label="Przypisz" label_selected="Przypisz" name="button deed" tool_tip="Przypisanie oddaje prawa następnemu właścicielowi. Obiekty posiadane przez grupę mogą zostać przypisane przez oficera grupy."/>
+			<button label="Ustaw..." label_selected="Ustaw..." name="button set group" tool_tip="Wybierz grupę, która uzyska dostęp do praw obiektu"/>
 			<check_box label="Udostępnij" name="checkbox share with group" tool_tip="Pozwól członkom grupy na dzielenie praw do modyfikacji tego obiektu. Musisz przypisać obiekt aby uaktywnić ograniczenia dla ról."/>
+			<button label="Przypisz" label_selected="Przypisz" name="button deed" tool_tip="Przypisanie oddaje prawa następnemu właścicielowi. Obiekty posiadane przez grupę mogą zostać przypisane przez oficera grupy."/>
 			<text name="label click action">
 				Kliknij:
 			</text>
@@ -446,8 +446,9 @@
 				<combo_box.item label="Suction" name="suction"/>
 				<combo_box.item label="Fali" name="weave"/>
 			</combo_box>
-			<text name="tex scale">
-				Powtórzenia
+			<check_box initial_value="nieprawda" label="Połącz powierzchnie planarne" name="checkbox planar align" tool_tip="Połącz tekstury na wszystkich wybranych powierzchniach z powierzchnią wybraną jako ostatnia. Wymaga planarnego mapowania tekstury."/>
+			<text name="rpt">
+				Powtórzenia / Powierzchnia
 			</text>
 			<spinner label="Poziomo (U)" name="TexScaleU"/>
 			<check_box label="Odwróć" name="checkbox flip s"/>
diff --git a/indra/newview/skins/default/xui/pl/menu_attachment_self.xml b/indra/newview/skins/default/xui/pl/menu_attachment_self.xml
index cdc01f286c..c19b0a1c2e 100644
--- a/indra/newview/skins/default/xui/pl/menu_attachment_self.xml
+++ b/indra/newview/skins/default/xui/pl/menu_attachment_self.xml
@@ -3,6 +3,7 @@
 	<menu_item_call label="Dotknij" name="Attachment Object Touch"/>
 	<menu_item_call label="Edytuj" name="Edit..."/>
 	<menu_item_call label="Odłącz" name="Detach"/>
+	<menu_item_call label="Usiądź tutaj" name="Sit Down Here"/>
 	<menu_item_call label="Wstań" name="Stand Up"/>
 	<menu_item_call label="Zmień strój" name="Change Outfit"/>
 	<menu_item_call label="Edytuj mój strój" name="Edit Outfit"/>
diff --git a/indra/newview/skins/default/xui/pl/menu_avatar_self.xml b/indra/newview/skins/default/xui/pl/menu_avatar_self.xml
index c824e90d36..ea151788c6 100644
--- a/indra/newview/skins/default/xui/pl/menu_avatar_self.xml
+++ b/indra/newview/skins/default/xui/pl/menu_avatar_self.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Self Pie">
+	<menu_item_call label="Usiądź tu" name="Sit Down Here"/>
 	<menu_item_call label="Wstań" name="Stand Up"/>
 	<context_menu label="Zdejmij" name="Take Off &gt;">
 		<context_menu label="Ubrania" name="Clothes &gt;">
diff --git a/indra/newview/skins/default/xui/pl/menu_inspect_object_gear.xml b/indra/newview/skins/default/xui/pl/menu_inspect_object_gear.xml
index 2c56d2ca3d..c12bd490ff 100644
--- a/indra/newview/skins/default/xui/pl/menu_inspect_object_gear.xml
+++ b/indra/newview/skins/default/xui/pl/menu_inspect_object_gear.xml
@@ -9,6 +9,7 @@
 	<menu_item_call label="Otwórz" name="open"/>
 	<menu_item_call label="Edytuj" name="edit"/>
 	<menu_item_call label="Ubierz" name="wear"/>
+	<menu_item_call label="Dodaj" name="add"/>
 	<menu_item_call label="Raport" name="report"/>
 	<menu_item_call label="Zablokuj" name="block"/>
 	<menu_item_call label="Przybliż" name="zoom_in"/>
diff --git a/indra/newview/skins/default/xui/pl/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/pl/menu_inspect_self_gear.xml
index 6d6377dbc3..90d71371e8 100644
--- a/indra/newview/skins/default/xui/pl/menu_inspect_self_gear.xml
+++ b/indra/newview/skins/default/xui/pl/menu_inspect_self_gear.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <menu name="Gear Menu">
+	<menu_item_call label="Usiądź tutaj" name="sit_down_here"/>
 	<menu_item_call label="Wstań" name="stand_up"/>
 	<menu_item_call label="Zmień strój" name="change_outfit"/>
 	<menu_item_call label="Mój profil" name="my_profile"/>
diff --git a/indra/newview/skins/default/xui/pl/menu_mini_map.xml b/indra/newview/skins/default/xui/pl/menu_mini_map.xml
index 94e4c91abb..148adfba0d 100644
--- a/indra/newview/skins/default/xui/pl/menu_mini_map.xml
+++ b/indra/newview/skins/default/xui/pl/menu_mini_map.xml
@@ -4,6 +4,7 @@
 	<menu_item_call label="Zoom średnio" name="Zoom Medium"/>
 	<menu_item_call label="Zoom daleko" name="Zoom Far"/>
 	<menu_item_check label="Obróć mapę" name="Rotate Map"/>
+	<menu_item_check label="Autocentrowanie" name="Auto Center"/>
 	<menu_item_call label="Zatrzymaj" name="Stop Tracking"/>
 	<menu_item_call label="Mapa Świata" name="World Map"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_object.xml b/indra/newview/skins/default/xui/pl/menu_object.xml
index 773d4221b2..2173401dd2 100644
--- a/indra/newview/skins/default/xui/pl/menu_object.xml
+++ b/indra/newview/skins/default/xui/pl/menu_object.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Object Pie">
 	<menu_item_call label="Dotknij" name="Object Touch">
-		<on_enable parameter="Dotknij" name="EnableTouch"/>
+		<menu_item_call.on_enable name="EnableTouch" parameter="Dotknij"/>
 	</menu_item_call>
 	<menu_item_call label="Edytuj" name="Edit..."/>
 	<menu_item_call label="Buduj" name="Build"/>
@@ -12,6 +12,7 @@
 	<menu_item_call label="Przybliż" name="Zoom In"/>
 	<context_menu label="Załóż na" name="Put On">
 		<menu_item_call label="Załóż" name="Wear"/>
+		<menu_item_call label="Dodaj" name="Add"/>
 		<context_menu label="Dołącz" name="Object Attach"/>
 		<context_menu label="Dołącz HUD" name="Object Attach HUD"/>
 	</context_menu>
@@ -21,7 +22,6 @@
 		<menu_item_call label="Zwróć" name="Return..."/>
 		<menu_item_call label="Usuń" name="Delete"/>
 	</context_menu>
-	<menu_item_call label="Kup" name="Pie Object Bye"/>
 	<menu_item_call label="Weź" name="Pie Object Take"/>
 	<menu_item_call label="Weź kopię" name="Take Copy"/>
 	<menu_item_call label="Zapłać" name="Pay..."/>
diff --git a/indra/newview/skins/default/xui/pl/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/pl/menu_people_friends_view_sort.xml
index 9c33fad00f..b62b85d30a 100644
--- a/indra/newview/skins/default/xui/pl/menu_people_friends_view_sort.xml
+++ b/indra/newview/skins/default/xui/pl/menu_people_friends_view_sort.xml
@@ -3,5 +3,6 @@
 	<menu_item_check label="Porządkuj według nazwy" name="sort_name"/>
 	<menu_item_check label="Porządkuj według statusu" name="sort_status"/>
 	<menu_item_check label="Wyświetlaj ikonki" name="view_icons"/>
+	<menu_item_check label="Zobacz udzielone prawa" name="view_permissions"/>
 	<menu_item_call label="Pokaż zablokowanych Rezydentów &amp; obiekty" name="show_blocked_list"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_people_nearby_multiselect.xml b/indra/newview/skins/default/xui/pl/menu_people_nearby_multiselect.xml
index c924185c6f..dcfc48fb60 100644
--- a/indra/newview/skins/default/xui/pl/menu_people_nearby_multiselect.xml
+++ b/indra/newview/skins/default/xui/pl/menu_people_nearby_multiselect.xml
@@ -6,4 +6,5 @@
 	<menu_item_call label="Zadzwoń" name="Call"/>
 	<menu_item_call label="Udostępnij" name="Share"/>
 	<menu_item_call label="Zapłać" name="Pay"/>
+	<menu_item_call label="Teleportuj" name="teleport"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_viewer.xml b/indra/newview/skins/default/xui/pl/menu_viewer.xml
index a71961ada7..2210b1e483 100644
--- a/indra/newview/skins/default/xui/pl/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/pl/menu_viewer.xml
@@ -92,7 +92,6 @@
 			<menu_item_call label="Wstrzymaj działanie skryptów w selekcji" name="Set Scripts to Not Running"/>
 		</menu>
 		<menu label="Opcje" name="Options">
-			<menu_item_call label="Ustaw domyślne pozwolenia ładowania" name="perm prefs"/>
 			<menu_item_check label="Pokaż zaawansowane pozwolenia" name="DebugPermissions"/>
 			<menu_item_check label="Wybierz tylko moje obiekty" name="Select Only My Objects"/>
 			<menu_item_check label="Wybierz tylko obiekty przesuwalne" name="Select Only Movable Objects"/>
@@ -119,7 +118,6 @@
 		<menu_item_call label="O [APP_NAME]" name="About Second Life"/>
 	</menu>
 	<menu label="Zaawansowane" name="Advanced">
-		<menu_item_check label="Pokaż menu Zaawansowane" name="Show Advanced Menu"/>
 		<menu_item_call label="Zatrzymaj wszystkie animacje" name="Stop Animating My Avatar"/>
 		<menu_item_call label="Odswież wyświetlanie tekstur" name="Rebake Texture"/>
 		<menu_item_call label="Domyślne ustawienia rozmiaru interfejsu" name="Set UI Size to Default"/>
@@ -166,7 +164,6 @@
 			<menu_item_check label="Mgła" name="Fog"/>
 			<menu_item_check label="Obiekty elastyczne" name="Flexible Objects"/>
 		</menu>
-		<menu_item_check label="Uruchom wiele wątków" name="Run Multiple Threads"/>
 		<menu_item_check label="Użyj plugin Read Thread" name="Use Plugin Read Thread"/>
 		<menu_item_call label="Wyczyść bufor danych grupy" name="ClearGroupCache"/>
 		<menu_item_check label="Wygładzanie ruchu myszki" name="Mouse Smoothing"/>
@@ -175,7 +172,6 @@
 			<menu_item_check label="Szukaj" name="Search"/>
 			<menu_item_call label="Zwolnij klawisze" name="Release Keys"/>
 			<menu_item_call label="Domyślne ustawienia rozmiaru interfejsu" name="Set UI Size to Default"/>
-			<menu_item_check label="Pokaż menu Zaawansowane" name="Show Advanced Menu - legacy shortcut"/>
 			<menu_item_check label="Biegnij" name="Always Run"/>
 			<menu_item_check label="Zacznij latać" name="Fly"/>
 			<menu_item_call label="Zamknij okno" name="Close Window"/>
@@ -195,6 +191,7 @@
 			<menu_item_call label="Przybliż" name="Zoom In"/>
 			<menu_item_call label="Domyślne przybliżenie" name="Zoom Default"/>
 			<menu_item_call label="Oddal" name="Zoom Out"/>
+			<menu_item_check label="Pokaż menu Zaawansowane" name="Show Advanced Menu"/>
 		</menu>
 		<menu_item_call label="Pokaż ustawienia debugowania" name="Debug Settings"/>
 		<menu_item_check label="Pokaż menu progresu" name="Debug Mode"/>
@@ -237,9 +234,15 @@
 		<menu label="Renderowanie" name="Rendering">
 			<menu_item_check label="Osie" name="Axes"/>
 			<menu_item_check label="Tryb obrazu szkieletowego" name="Wireframe"/>
-			<menu_item_check label="Globalne oświetlenie" name="Global Illumination"/>
+			<menu_item_check label="Oświetlenie i cienie" name="Lighting and Shadows"/>
+			<menu_item_check label="Cienie Słońca/Księżyca/Projektory" name="Shadows from Sun/Moon/Projectors"/>
+			<menu_item_check label="SSAO and wygładzanie cienia" name="SSAO and Shadow Smoothing"/>
+			<menu_item_check label="Globalne oświetlenie (eksperymentalne)" name="Global Illumination"/>
+			<menu_item_check label="Automatyczne maski alpha (deferred)" name="Automatic Alpha Masks (deferred)"/>
+			<menu_item_check label="Automatyczne maski alpha (non-deferred)" name="Automatic Alpha Masks (non-deferred)"/>
 			<menu_item_check label="Tekstury animacji" name="Animation Textures"/>
 			<menu_item_check label="Wyłącz tekstury" name="Disable Textures"/>
+			<menu_item_check label="Texture Atlas (experimental)" name="Texture Atlas"/>
 			<menu_item_check label="Renderowania załączonego światła" name="Render Attached Lights"/>
 			<menu_item_check label="Renderowanie załączonych cząsteczek" name="Render Attached Particles"/>
 			<menu_item_check label="Wyświetlaj obiekty odblaskowe" name="Hover Glow Objects"/>
@@ -259,7 +262,8 @@
 			<menu_item_call label="Test przeglądarki internetowej" name="Web Browser Test"/>
 			<menu_item_call label="Drukuj zaznaczone informacje o obiekcie" name="Print Selected Object Info"/>
 			<menu_item_call label="Statystyki pamięci" name="Memory Stats"/>
-			<menu_item_check label="Kliknij podójnie by uruchomić auto-pilota" name="Double-ClickAuto-Pilot"/>
+			<menu_item_check label="Podwójne kliknięcie - Auto-Pilot" name="Double-Click Auto-Pilot"/>
+			<menu_item_check label="Podwójne kliknięcie - Teleportuj" name="DoubleClick Teleport"/>
 			<menu_item_check label="Debugowanie zdarzeń klikania" name="Debug Clicks"/>
 			<menu_item_check label="Debugowanie zdarzeń myszy" name="Debug Mouse Events"/>
 		</menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/pl/menu_wearable_list_item.xml
index b31949a098..bf85246be8 100644
--- a/indra/newview/skins/default/xui/pl/menu_wearable_list_item.xml
+++ b/indra/newview/skins/default/xui/pl/menu_wearable_list_item.xml
@@ -9,6 +9,6 @@
 	<context_menu label="Dołącz do załączników HUD" name="wearable_attach_to_hud"/>
 	<menu_item_call label="Zdejmij" name="take_off"/>
 	<menu_item_call label="Edytuj" name="edit"/>
-	<menu_item_call label="Profil obiekty" name="object_profile"/>
+	<menu_item_call label="Profil obiektu" name="object_profile"/>
 	<menu_item_call label="Pokaż oryginalny" name="show_original"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_wearing_gear.xml b/indra/newview/skins/default/xui/pl/menu_wearing_gear.xml
index 4930bd7540..47cafdbd99 100644
--- a/indra/newview/skins/default/xui/pl/menu_wearing_gear.xml
+++ b/indra/newview/skins/default/xui/pl/menu_wearing_gear.xml
@@ -1,4 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <menu name="Gear Wearing">
 	<menu_item_call label="Edytuj strój" name="edit"/>
+	<menu_item_call label="Zdejmij" name="takeoff"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_wearing_tab.xml b/indra/newview/skins/default/xui/pl/menu_wearing_tab.xml
index 6ee55133fe..7531437043 100644
--- a/indra/newview/skins/default/xui/pl/menu_wearing_tab.xml
+++ b/indra/newview/skins/default/xui/pl/menu_wearing_tab.xml
@@ -1,4 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Wearing">
+	<menu_item_call label="Zdejmij" name="take_off"/>
+	<menu_item_call label="Odłącz" name="detach"/>
 	<menu_item_call label="Edytuj strój" name="edit"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/pl/notifications.xml b/indra/newview/skins/default/xui/pl/notifications.xml
index 7fcd7b5e04..7fda575c29 100644
--- a/indra/newview/skins/default/xui/pl/notifications.xml
+++ b/indra/newview/skins/default/xui/pl/notifications.xml
@@ -67,7 +67,7 @@ Szczegóły błędu: Błąd o nazwie &apos;[_NAME]&apos; nie został odnaleziony
 		[MESSAGE]
 		<usetemplate name="okcancelbuttons" notext="Anuluj" yestext="Tak"/>
 	</notification>
-	<notification name="BadInstallation">		
+	<notification name="BadInstallation">
 		Podczas aktualizacji [APP_NAME] wystąpił błąd. Proszę odwiedzić stronę [http://get.secondlife.com pobierz najnowsza wersję] aby ściągnąć ostatnią wersję klienta.
 		<usetemplate name="okbutton" yestext="OK"/>
 	</notification>
@@ -1786,6 +1786,10 @@ Przenieść obiekty szafy?
 		Na pewno chcesz skończyć?
 		<usetemplate ignoretext="Na pewno chcesz skończyć?" name="okcancelignore" notext="Nie kończ" yestext="Wyłącz"/>
 	</notification>
+	<notification name="DeleteItems">
+		[QUESTION]
+		<usetemplate ignoretext="Potwierdź, że na pewno chcesz skasować obiekty" name="okcancelignore" notext="Cofnij" yestext="OK"/>
+	</notification>
 	<notification name="HelpReportAbuseEmailLL">
 		Używaj tej opcji do zgłaszania nadużyć [http://secondlife.com/corporate/tos.php Warunków Umowy (Terms of Service)] i [http://secondlife.com/corporate/cs.php Standardów Społeczeństwa (Community Standards)].
 
@@ -2719,9 +2723,13 @@ Proszę sprawdź swoją sieć i ustawienia firewall.
 		( [EXISTENCE] sekund w Second Life)
 Awatar &apos;[NAME]&apos; pozostał w pełni załadowany.
 	</notification>
-	<notification name="AvatarRezSelfBakeNotification">
+	<notification name="AvatarRezSelfBakedTextureUploadNotification">
+		( [EXISTENCE] sekund w Second Life )
+Zbakowane tekstury [RESOLUTION] dla &apos;[BODYREGION]&apos; zostały załadowane po[TIME] sekundach.
+	</notification>
+	<notification name="AvatarRezSelfBakedTextureUpdateNotification">
 		( [EXISTENCE] sekund w Second Life )
-You [ACTION] a [RESOLUTION] baked texture for &apos;[BODYREGION]&apos; after [TIME] seconds.
+Zbakowane tekstury zostały lokalnie zaktualizowane [RESOLUTION] dla &apos;[BODYREGION]&apos; po [TIME] sekundach.
 	</notification>
 	<notification name="ConfirmLeaveCall">
 		Czy jestes pewien/pewna, że chcesz zakończyć rozmowę?
diff --git a/indra/newview/skins/default/xui/pl/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/pl/panel_avatar_list_item.xml
index 917610d3e9..1ab95eec00 100644
--- a/indra/newview/skins/default/xui/pl/panel_avatar_list_item.xml
+++ b/indra/newview/skins/default/xui/pl/panel_avatar_list_item.xml
@@ -22,5 +22,9 @@
 		[COUNT]lat
 	</string>
 	<text name="avatar_name" value="Nieznane"/>
+	<icon name="permission_edit_theirs_icon" tool_tip="Możesz edytować obiekty tego Znajomego"/>
+	<icon name="permission_edit_mine_icon" tool_tip="Ten Znajomy może edytować, kasować lub wziąć Twoje obiekty"/>
+	<icon name="permission_map_icon" tool_tip="Ten Znajomy może zlokalizować Ciebie na mapie"/>
+	<icon name="permission_online_icon" tool_tip="Ten Znajomy widzi Ciebie kiedy jesteś obecny/obecna w SL"/>
 	<button name="profile_btn" tool_tip="Zobacz profil"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_bottomtray.xml b/indra/newview/skins/default/xui/pl/panel_bottomtray.xml
index a0f4eb5244..8a033fc32f 100644
--- a/indra/newview/skins/default/xui/pl/panel_bottomtray.xml
+++ b/indra/newview/skins/default/xui/pl/panel_bottomtray.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="bottom_tray">
+	<string name="DragIndicationImageName" value="Accordion_ArrowOpened_Off"/>
 	<string name="SpeakBtnToolTip" value="Włącza/wyłącza mikrofon"/>
 	<string name="VoiceControlBtnToolTip" value="Pokazuje/Ukrywa panel kontroli głosu"/>
 	<layout_stack name="toolbar_stack">
@@ -12,28 +13,25 @@
 			<gesture_combo_list label="Gesturki" name="Gesture" tool_tip="Pokazuje/Ukrywa gesturki"/>
 		</layout_panel>
 		<layout_panel name="movement_panel">
-			<button label="Ruch" name="movement_btn" tool_tip="Pokaż/Ukryj ustawienia ruchu"/>
+			<bottomtray_button label="Ruch" name="movement_btn" tool_tip="Pokaż/Ukryj ustawienia ruchu"/>
 		</layout_panel>
 		<layout_panel name="cam_panel">
-			<button label="Widok" name="camera_btn" tool_tip="Pokaż/Ukryj ustawienia kamery"/>
+			<bottomtray_button label="Widok" name="camera_btn" tool_tip="Pokaż/Ukryj ustawienia kamery"/>
 		</layout_panel>
 		<layout_panel name="snapshot_panel">
-			<button label="" name="snapshots" tool_tip="Zrób zdjęcie"/>
-		</layout_panel>
-		<layout_panel name="sidebar_btn_panel">
-			<button label="Schowek" name="sidebar_btn" tool_tip="Pokazuje/ukrywa schowek"/>
+			<bottomtray_button label="" name="snapshots" tool_tip="Zrób zdjęcie"/>
 		</layout_panel>
 		<layout_panel name="build_btn_panel">
-			<button label="Buduj" name="build_btn" tool_tip="Pokazuje/ukrywa narzędzia budowania"/>
+			<bottomtray_button label="Buduj" name="build_btn" tool_tip="Pokazuje/ukrywa narzędzia budowania"/>
 		</layout_panel>
 		<layout_panel name="search_btn_panel">
-			<button label="Szukaj" name="search_btn" tool_tip="Pokazuje/ukrywa Szukaj"/>
+			<bottomtray_button label="Szukaj" name="search_btn" tool_tip="Pokazuje/ukrywa Szukaj"/>
 		</layout_panel>
 		<layout_panel name="world_map_btn_panel">
-			<button label="Mapa" name="world_map_btn" tool_tip="Pokazuje/ukrywa Mapę Świata"/>
+			<bottomtray_button label="Mapa" name="world_map_btn" tool_tip="Pokazuje/ukrywa Mapę Świata"/>
 		</layout_panel>
 		<layout_panel name="mini_map_btn_panel">
-			<button label="Mini-Mapa" name="mini_map_btn" tool_tip="Pokazuje/ukrywa Mini-Mapę"/>
+			<bottomtray_button label="Mini-Mapa" name="mini_map_btn" tool_tip="Pokazuje/ukrywa Mini-Mapę"/>
 		</layout_panel>
 		<layout_panel name="im_well_panel">
 			<chiclet_im_well name="im_well">
diff --git a/indra/newview/skins/default/xui/pl/panel_classified_info.xml b/indra/newview/skins/default/xui/pl/panel_classified_info.xml
index 0b275d6dcf..52f54fc7cf 100644
--- a/indra/newview/skins/default/xui/pl/panel_classified_info.xml
+++ b/indra/newview/skins/default/xui/pl/panel_classified_info.xml
@@ -46,8 +46,16 @@
 		</panel>
 	</scroll_container>
 	<panel name="buttons">
-		<button label="Teleportuj" name="teleport_btn"/>
-		<button label="Mapa" name="show_on_map_btn"/>
-		<button label="Edytuj" name="edit_btn"/>
+		<layout_stack name="layout_stack1">
+			<layout_panel name="layout_panel1">
+				<button label="Teleportuj" name="teleport_btn"/>
+			</layout_panel>
+			<layout_panel name="show_on_map_btn_lp">
+				<button label="Mapa" name="show_on_map_btn"/>
+			</layout_panel>
+			<layout_panel name="edit_btn_lp">
+				<button label="Edytuj" name="edit_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_edit_classified.xml b/indra/newview/skins/default/xui/pl/panel_edit_classified.xml
index 07f9b3a13f..7cfd9c221c 100644
--- a/indra/newview/skins/default/xui/pl/panel_edit_classified.xml
+++ b/indra/newview/skins/default/xui/pl/panel_edit_classified.xml
@@ -36,13 +36,19 @@
 				<icons_combo_box.item label="Treść Moderate" name="mature_ci" value="Mature"/>
 				<icons_combo_box.item label="Treść General" name="pg_ci" value="PG"/>
 			</icons_combo_box>
+			<check_box label="Ponawiaj automatycznie co tydzień." name="auto_renew"/>
 			<text name="price_for_listing_label" value="Cena za wyświetlenie:"/>
 			<spinner label="L$" name="price_for_listing" tool_tip="Cena za umieszczenie reklamy." value="50"/>
-			<check_box label="Ponawiaj automatycznie co tydzień." name="auto_renew"/>
 		</panel>
 	</scroll_container>
 	<panel label="bottom_panel" name="bottom_panel">
-		<button label="[LABEL]" name="save_changes_btn"/>
-		<button label="Anuluj" name="cancel_btn"/>
+		<layout_stack name="bottom_panel_ls">
+			<layout_panel name="save_changes_btn_lp">
+				<button label="[LABEL]" name="save_changes_btn"/>
+			</layout_panel>
+			<layout_panel name="show_on_map_btn_lp">
+				<button label="Cofnij" name="cancel_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_edit_pick.xml b/indra/newview/skins/default/xui/pl/panel_edit_pick.xml
index 22fb00671d..8a183c00cf 100644
--- a/indra/newview/skins/default/xui/pl/panel_edit_pick.xml
+++ b/indra/newview/skins/default/xui/pl/panel_edit_pick.xml
@@ -25,7 +25,13 @@
 		</panel>
 	</scroll_container>
 	<panel label="bottom_panel" name="bottom_panel">
-		<button label="Zapisz obrazek" name="save_changes_btn"/>
-		<button label="Anuluj" name="cancel_btn"/>
+		<layout_stack name="layout_stack1">
+			<layout_panel name="layout_panel1">
+				<button label="Zapisz obrazek" name="save_changes_btn"/>
+			</layout_panel>
+			<layout_panel name="layout_panel1">
+				<button label="Cofnij" name="cancel_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_edit_profile.xml b/indra/newview/skins/default/xui/pl/panel_edit_profile.xml
index c9790f5eba..fdc691cbb9 100644
--- a/indra/newview/skins/default/xui/pl/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/pl/panel_edit_profile.xml
@@ -34,18 +34,24 @@
 				</text>
 				<check_box label="Pokaż w wyszukiwarce" name="show_in_search_checkbox"/>
 				<text name="title_acc_status_text" value="Moje konto:"/>
+				<text_editor name="acc_status_text" value="Rezydent. Brak danych konta."/>
 				<text name="my_account_link" value="[[URL] idź do dashboard]"/>
-				<text name="acc_status_text" value="Rezydent. Brak danych konta."/>
 				<text name="title_partner_text" value="Partner:"/>
-				<text name="partner_edit_link" value="[[URL] Edytuj]"/>
 				<panel name="partner_data_panel">
-					<text initial_value="(wyszukiwanie)" name="partner_text" value="[FIRST] [LAST]"/>
+					<name_box initial_value="(wyszukiwanie)" name="partner_text" value="[FIRST] [LAST]"/>
 				</panel>
+				<text name="partner_edit_link" value="[[URL] Edytuj]"/>
 			</panel>
 		</panel>
 	</scroll_container>
 	<panel name="profile_me_buttons_panel">
-		<button label="Zapisz zmiany" name="save_btn"/>
-		<button label="Anuluj" name="cancel_btn"/>
+		<layout_stack name="bottom_panel_ls">
+			<layout_panel name="save_changes_btn_lp">
+				<button label="Zapisz zmiany" name="save_btn"/>
+			</layout_panel>
+			<layout_panel name="show_on_map_btn_lp">
+				<button label="Cofnij" name="cancel_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_edit_wearable.xml b/indra/newview/skins/default/xui/pl/panel_edit_wearable.xml
index da2c26f02b..d1157b910d 100644
--- a/indra/newview/skins/default/xui/pl/panel_edit_wearable.xml
+++ b/indra/newview/skins/default/xui/pl/panel_edit_wearable.xml
@@ -102,7 +102,13 @@
 		<icon name="female_icon" tool_tip="Kobieta"/>
 	</panel>
 	<panel name="button_panel">
-		<button label="Zapisz" name="save_as_button"/>
-		<button label="Cofnij zmiany" name="revert_button"/>
+		<layout_stack name="button_panel_ls">
+			<layout_panel name="save_as_btn_lp">
+				<button label="Zapisz jako" name="save_as_button"/>
+			</layout_panel>
+			<layout_panel name="revert_btn_lp">
+				<button label="Cofnij zmiany" name="revert_button"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/pl/panel_group_info_sidetray.xml
index e637588cf0..37fb529f2b 100644
--- a/indra/newview/skins/default/xui/pl/panel_group_info_sidetray.xml
+++ b/indra/newview/skins/default/xui/pl/panel_group_info_sidetray.xml
@@ -13,7 +13,7 @@
 		Darmowe
 	</panel.string>
 	<panel name="group_info_top">
-		<text name="group_name" value="(Ładowanie...)"/>
+		<text_editor name="group_name" value="(Ładowanie...)"/>
 		<line_editor label="Wpisz nazwę swojej nowej grupy tutaj" name="group_name_editor"/>
 	</panel>
 	<layout_stack name="layout">
@@ -25,11 +25,17 @@
 				<accordion_tab name="group_land_tab" title="Posiadlość/Majątek"/>
 			</accordion>
 		</layout_panel>
-		<layout_panel name="button_row">
+	</layout_stack>
+	<layout_stack name="button_row_ls">
+		<layout_panel name="btn_chat_lp">
 			<button label="Czat" name="btn_chat"/>
-			<button label="Konferencja głosowa" name="btn_call" tool_tip="Konferencja głosowa"/>
+		</layout_panel>
+		<layout_panel name="call_btn_lp">
+			<button label="Konferencja głosowa w grupie" name="btn_call" tool_tip="Rozpocznij konferencję głosową w tej grupie"/>
+		</layout_panel>
+		<layout_panel name="btn_apply_lp">
 			<button label="Zapisz" label_selected="Zapisz" name="btn_apply"/>
-			<button label="Stwórz nową grupę" name="btn_create" tool_tip="Stwórz nową grupę"/>
+			<button label="Stwórz grupę" name="btn_create" tool_tip="Stwórz nową grupę"/>
 		</layout_panel>
 	</layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_landmarks.xml b/indra/newview/skins/default/xui/pl/panel_landmarks.xml
index dcc495b5a8..039be3b504 100644
--- a/indra/newview/skins/default/xui/pl/panel_landmarks.xml
+++ b/indra/newview/skins/default/xui/pl/panel_landmarks.xml
@@ -7,8 +7,16 @@
 		<accordion_tab name="tab_library" title="Biblioteka"/>
 	</accordion>
 	<panel name="bottom_panel">
-		<button name="options_gear_btn" tool_tip="Pokaż dodatkowe opcje"/>
-		<button name="add_btn" tool_tip="Dodaj nowy landmark"/>
-		<dnd_button name="trash_btn" tool_tip="Usuń zaznaczony landmark"/>
+		<layout_stack name="bottom_panel">
+			<layout_panel name="options_gear_btn_panel">
+				<button name="options_gear_btn" tool_tip="Pokaż opcje dodatkowe"/>
+			</layout_panel>
+			<layout_panel name="add_btn_panel">
+				<button name="add_btn" tool_tip="Dodaj nowy landmark"/>
+			</layout_panel>
+			<layout_panel name="trash_btn_panel">
+				<dnd_button name="trash_btn" tool_tip="Usuń wybrany landmark"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_my_profile.xml b/indra/newview/skins/default/xui/pl/panel_my_profile.xml
index fefab15af0..6b0ba44bb4 100644
--- a/indra/newview/skins/default/xui/pl/panel_my_profile.xml
+++ b/indra/newview/skins/default/xui/pl/panel_my_profile.xml
@@ -27,9 +27,8 @@
 				</panel>
 			</scroll_container>
 		</layout_panel>
-		<layout_panel name="profile_me_buttons_panel">
-			<button label="Edytuj profil" name="edit_profile_btn" tool_tip="Edytuj swoje dane"/>
-			<button label="Edytuj wygląd" name="edit_appearance_btn" tool_tip="Stwórz/edytuj swój wygląd: dane fizyczne, ubrania itp."/>
-		</layout_panel>
 	</layout_stack>
+	<panel name="profile_me_buttons_panel">
+		<button label="Edytuj profil" name="edit_profile_btn" tool_tip="Edytuj informacje o sobie"/>
+	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_notes.xml b/indra/newview/skins/default/xui/pl/panel_notes.xml
index 35cb7e1bce..571171d64c 100644
--- a/indra/newview/skins/default/xui/pl/panel_notes.xml
+++ b/indra/newview/skins/default/xui/pl/panel_notes.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="Notatki &amp; Prywatność" name="panel_notes">
 	<layout_stack name="layout">
-		<panel name="notes_stack">
+		<layout_panel name="notes_stack">
 			<scroll_container name="profile_scroll">
 				<panel name="profile_scroll_panel">
 					<text name="status_message" value="Notatki:"/>
@@ -11,13 +11,25 @@
 					<check_box label="Edytowanie, kasowanie lub zabieranie moich obiektów" name="objects_check"/>
 				</panel>
 			</scroll_container>
-		</panel>
-		<panel name="notes_buttons_panel">
-			<button label="Dodaj do znajomych" name="add_friend" tool_tip="Zaoferuj znajomość Rezydentowi"/>
-			<button label="IM" name="im" tool_tip="Otwórz wiadomości IM"/>
-			<button label="Dzwoń" name="call" tool_tip="Zadzwoń do Rezydenta"/>
-			<button label="Mapa" name="show_on_map_btn" tool_tip="Pokaż Rezydenta na mapie"/>
-			<button label="Teleportuj" name="teleport" tool_tip="Teleportuj"/>
-		</panel>
+		</layout_panel>
+		<layout_panel name="notes_buttons_panel">
+			<layout_stack name="bottom_bar_ls">
+				<layout_panel name="add_friend_btn_lp">
+					<button label="Dodaj do Znajomych" name="add_friend" tool_tip="Zaoferuj znajomość Rezydentowi"/>
+				</layout_panel>
+				<layout_panel name="im_btn_lp">
+					<button label="IM" name="im" tool_tip="Otwórz wiadomości IM"/>
+				</layout_panel>
+				<layout_panel name="call_btn_lp">
+					<button label="Dzwoń" name="call" tool_tip="Zadzwoń do Rezydenta"/>
+				</layout_panel>
+				<layout_panel name="show_on_map_btn_lp">
+					<button label="Mapa" name="show_on_map_btn" tool_tip="Pokaż Rezydenta na mapie"/>
+				</layout_panel>
+				<layout_panel name="teleport_btn_lp">
+					<button label="Teleportuj" name="teleport" tool_tip="Teleportuj"/>
+				</layout_panel>
+			</layout_stack>
+		</layout_panel>
 	</layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_outfit_edit.xml b/indra/newview/skins/default/xui/pl/panel_outfit_edit.xml
index 31502cccba..50353d4fba 100644
--- a/indra/newview/skins/default/xui/pl/panel_outfit_edit.xml
+++ b/indra/newview/skins/default/xui/pl/panel_outfit_edit.xml
@@ -45,7 +45,13 @@
 		<button name="shop_btn_2" tool_tip="Odwiedź stronę SL Marketplace. Możesz również zaznaczyć rzecz, którą masz na sobie a następnie kliknąć tutaj aby zobaczyć więcej rzeczy tego rodzaju."/>
 	</panel>
 	<panel name="save_revert_button_bar">
-		<button label="Zapisz" name="save_btn"/>
-		<button label="Cofnij zmiany" name="revert_btn" tool_tip="Cofnij do ostatniej zapisanej wersji"/>
+		<layout_stack name="button_bar_ls">
+			<layout_panel name="save_btn_lp">
+				<button label="Zapisz" name="save_btn"/>
+			</layout_panel>
+			<layout_panel name="revert_btn_lp">
+				<button label="Cofnij zmiany" name="revert_btn" tool_tip="Przywróć ostatnią zapisaną wersję"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/pl/panel_outfits_inventory.xml
index 2d2ada25e8..bf23ace58f 100644
--- a/indra/newview/skins/default/xui/pl/panel_outfits_inventory.xml
+++ b/indra/newview/skins/default/xui/pl/panel_outfits_inventory.xml
@@ -11,7 +11,13 @@
 		<panel label="ZAŁOŻONE" name="cof_tab"/>
 	</tab_container>
 	<panel name="bottom_panel">
-		<button label="Zapisz jako" name="save_btn"/>
-		<button label="Ubierz" name="wear_btn" tool_tip="Ubierz wybrany obiekt"/>
+		<layout_stack name="bottom_panel_ls">
+			<layout_panel name="save_btn_lp">
+				<button label="Zapisz jako" name="save_btn"/>
+			</layout_panel>
+			<layout_panel name="wear_btn_lp">
+				<button label="Załóż" name="wear_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_people.xml b/indra/newview/skins/default/xui/pl/panel_people.xml
index 19df36c9ee..fcb6b19635 100644
--- a/indra/newview/skins/default/xui/pl/panel_people.xml
+++ b/indra/newview/skins/default/xui/pl/panel_people.xml
@@ -32,9 +32,17 @@ Chcesz spotkać ludzi? Spróbuj [secondlife:///app/worldmap Mapa Świata].
 				<accordion_tab name="tab_all" title="Wszyscy"/>
 			</accordion>
 			<panel label="bottom_panel" name="bottom_panel">
-				<button name="friends_viewsort_btn" tool_tip="Opcje"/>
-				<button name="add_btn" tool_tip="Zaproponuj znajomość"/>
-				<button name="del_btn" tool_tip="Usuń wybraną osobę ze swojej listy znajomych"/>
+				<layout_stack name="bottom_panel">
+					<layout_panel name="options_gear_btn_panel">
+						<button name="friends_viewsort_btn" tool_tip="Pokaż opcje dodatkowe"/>
+					</layout_panel>
+					<layout_panel name="add_btn_panel">
+						<button name="add_btn" tool_tip="Dodaj wybranego Rezydenta do znajomych"/>
+					</layout_panel>
+					<layout_panel name="trash_btn_panel">
+						<dnd_button name="trash_btn" tool_tip="Usuń wybraną osobę ze swojej listy znajomych"/>
+					</layout_panel>
+				</layout_stack>
 			</panel>
 		</panel>
 		<panel label="GRUPY" name="groups_panel">
@@ -52,13 +60,33 @@ Chcesz spotkać ludzi? Spróbuj [secondlife:///app/worldmap Mapa Świata].
 		</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" width="55"/>
-		<button label="IM" name="im_btn" tool_tip="Rozpocznij rozmowę prywatną (IM)" width="35"/>
-		<button label="Zadzwoń" name="call_btn" tool_tip="Zadzwoń do tego Rezydenta" width="62"/>
-		<button label="Podziel się" name="share_btn" tool_tip="Udostępnij obiekt z Szafy" width="72"/>
-		<button label="Teleportuj" name="teleport_btn" tool_tip="Zaproponuj teleportację" width="70"/>
-		<button label="Profil grupy" name="group_info_btn" tool_tip="Pokaż informacje o grupie" width="69"/>
-		<button label="Konferencja Grupowa" name="chat_btn" tool_tip="Rozpocznij konferencę" width="124"/>
-		<button label="Rozmowa Głosowa" name="group_call_btn" tool_tip="Rozmowa głosowa w tej grupie" width="108"/>
+		<layout_stack name="bottom_bar_ls">
+			<layout_panel name="view_profile_btn_lp">
+				<button label="Profil" name="view_profile_btn" tool_tip="Pokaż zdjęcie, grupy i inne informacje o Rezydencie"/>
+			</layout_panel>
+			<layout_panel name="chat_btn_lp">
+				<button label="IM" name="im_btn" tool_tip="Otwórz wiadomości IM"/>
+			</layout_panel>
+			<layout_panel name="chat_btn_lp">
+				<button label="Dzwoń" name="call_btn" tool_tip="Zadzwoń do tego Rezydenta"/>
+			</layout_panel>
+			<layout_panel name="chat_btn_lp">
+				<button label="Udostępnij" name="share_btn" tool_tip="Udostępnij obiekt z Szafy"/>
+			</layout_panel>
+			<layout_panel name="chat_btn_lp">
+				<button label="Teleportuj" name="teleport_btn" tool_tip="Zaproponuj teleport"/>
+			</layout_panel>
+		</layout_stack>
+		<layout_stack name="bottom_bar_ls1">
+			<layout_panel name="group_info_btn_lp">
+				<button label="Profil grupy" name="group_info_btn" tool_tip="Pokaż informacje o grupie"/>
+			</layout_panel>
+			<layout_panel name="chat_btn_lp">
+				<button label="Czat grupy" name="chat_btn" tool_tip="Otwórz sesję czatu"/>
+			</layout_panel>
+			<layout_panel name="group_call_btn_lp">
+				<button label="Rozmowa głosowa w grupie" name="group_call_btn" tool_tip="Rozmowa głosowa w tej grupie"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_pick_info.xml b/indra/newview/skins/default/xui/pl/panel_pick_info.xml
index 0454ecc430..26afded795 100644
--- a/indra/newview/skins/default/xui/pl/panel_pick_info.xml
+++ b/indra/newview/skins/default/xui/pl/panel_pick_info.xml
@@ -3,14 +3,22 @@
 	<text name="title" value="Info o Ulubionych"/>
 	<scroll_container name="profile_scroll">
 		<panel name="scroll_content_panel">
-			<text name="pick_name" value="[name]"/>
-			<text name="pick_location" value="[loading...]"/>
-			<text name="pick_desc" value="[description]"/>
+			<text_editor name="pick_name" value="[name]"/>
+			<text_editor name="pick_location" value="[loading...]"/>
+			<text_editor name="pick_desc" value="[description]"/>
 		</panel>
 	</scroll_container>
 	<panel name="buttons">
-		<button label="Teleportuj" name="teleport_btn"/>
-		<button label="Mapa" name="show_on_map_btn"/>
-		<button label="Edytuj" name="edit_btn"/>
+		<layout_stack name="layout_stack1">
+			<layout_panel name="layout_panel1">
+				<button label="Teleportuj" name="teleport_btn"/>
+			</layout_panel>
+			<layout_panel name="show_on_map_btn_lp">
+				<button label="Mapa" name="show_on_map_btn"/>
+			</layout_panel>
+			<layout_panel name="edit_btn_lp">
+				<button label="Edytuj" name="edit_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_picks.xml b/indra/newview/skins/default/xui/pl/panel_picks.xml
index 5d69c25ff3..1ba4e76196 100644
--- a/indra/newview/skins/default/xui/pl/panel_picks.xml
+++ b/indra/newview/skins/default/xui/pl/panel_picks.xml
@@ -2,19 +2,28 @@
 <panel label="Ulubione" name="panel_picks">
 	<string name="no_picks" value="Brak Ulubionych"/>
 	<string name="no_classifieds" value="Brak Reklam"/>
-	<text name="empty_picks_panel_text">
-		Brak ulubionych/reklam w tym miejscu
-	</text>
 	<accordion name="accordion">
 		<accordion_tab name="tab_picks" title="Ulubione"/>
 		<accordion_tab name="tab_classifieds" title="Reklamy"/>
 	</accordion>
 	<panel label="bottom_panel" name="edit_panel">
-		<button name="new_btn" tool_tip="Stwórz w obecnym miejscu nową zakładkę w ulubionych lub reklamę"/>
+		<layout_stack name="edit_panel_ls">
+			<layout_panel name="gear_menu_btn">
+				<button name="new_btn" tool_tip="Stwórz w obecnym miejscu nową zakładkę w ulubionych lub reklamę"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 	<panel name="buttons_cucks">
-		<button label="Info" name="info_btn" tool_tip="Pokaż info o ulubionych"/>
-		<button label="Teleportuj" name="teleport_btn" tool_tip="Teleportuj do odpowiadającego miejsca"/>
-		<button label="Mapa" name="show_on_map_btn" tool_tip="Pokaż odpowiadające miejsce w Mapie Świata"/>
+		<layout_stack name="buttons_cucks_ls">
+			<layout_panel name="info_btn_lp">
+				<button label="Informacja" name="info_btn" tool_tip="Pokaż informację o ulubionych"/>
+			</layout_panel>
+			<layout_panel name="teleport_btn_lp">
+				<button label="Teleportuj" name="teleport_btn" tool_tip="Teleportuj do odpowiadającego obszaru"/>
+			</layout_panel>
+			<layout_panel name="show_on_map_btn_lp">
+				<button label="Mapa" name="show_on_map_btn" tool_tip="Pokaż odpowiadający obszar na Mapie Świata"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_places.xml b/indra/newview/skins/default/xui/pl/panel_places.xml
index 23f724317e..e0a0cfd96a 100644
--- a/indra/newview/skins/default/xui/pl/panel_places.xml
+++ b/indra/newview/skins/default/xui/pl/panel_places.xml
@@ -4,13 +4,45 @@
 	<string name="teleport_history_tab_title" value="HISTORIA TELEPORTÓW"/>
 	<filter_editor label="Filtruj Moje Miejsca" name="Filter"/>
 	<panel name="button_panel">
-		<button label="Teleportuj" name="teleport_btn" tool_tip="Teleportuj do wybranego miejsca"/>
-		<button label="Mapa" name="map_btn" tool_tip="Pokaż miejsce na Mapie Świata"/>
-		<button label="Edytuj" name="edit_btn" tool_tip="Edytuj informacje landmarka"/>
-		<button label="▼" name="overflow_btn" tool_tip="Pokaż opcje dodatkowe"/>
-		<button label="Zapisz" name="save_btn"/>
-		<button label="Anuluj" name="cancel_btn"/>
-		<button label="Zamknij" name="close_btn"/>
-		<button label="Profil" name="profile_btn" tool_tip="Pokaż opis miejsca"/>
+		<layout_stack name="bottom_bar_ls0">
+			<layout_panel name="lp1">
+				<layout_stack name="bottom_bar_ls1">
+					<layout_panel name="teleport_btn_lp">
+						<button label="Teleportuj" name="teleport_btn" tool_tip="Teleportuj się w wybrane miejsce"/>
+					</layout_panel>
+					<layout_panel name="chat_btn_lp">
+						<button label="Mapa" name="map_btn" tool_tip="Pokaż odpowiadające miejsce na Mapie Świata"/>
+					</layout_panel>
+				</layout_stack>
+			</layout_panel>
+			<layout_panel name="lp2">
+				<layout_stack name="bottom_bar_ls3">
+					<layout_panel name="edit_btn_lp">
+						<button label="Edytuj" name="edit_btn" tool_tip="Edytuj informacje landmarka"/>
+					</layout_panel>
+					<layout_panel name="overflow_btn_lp">
+						<button label="▼" name="overflow_btn" tool_tip="Pokaż opcje dodatkowe"/>
+					</layout_panel>
+				</layout_stack>
+				<layout_stack name="bottom_bar_ls3">
+					<layout_panel name="profile_btn_lp">
+						<button label="Profil" name="profile_btn" tool_tip="Pokaż profil miejsca"/>
+					</layout_panel>
+				</layout_stack>
+				<layout_stack name="bottom_bar_close_ls3">
+					<layout_panel name="close_btn_lp">
+						<button label="Zamknij" name="close_btn"/>
+					</layout_panel>
+				</layout_stack>
+			</layout_panel>
+		</layout_stack>
+		<layout_stack name="bottom_bar_ls2">
+			<layout_panel name="save_btn_lp">
+				<button label="Zapisz" name="save_btn"/>
+			</layout_panel>
+			<layout_panel name="cancel_btn_lp">
+				<button label="Cofnij" name="cancel_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_chat.xml b/indra/newview/skins/default/xui/pl/panel_preferences_chat.xml
index e980d71ce4..87894bb358 100644
--- a/indra/newview/skins/default/xui/pl/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/pl/panel_preferences_chat.xml
@@ -56,27 +56,27 @@
 		<radio_item label="Osobne okna" name="radio" value="0"/>
 		<radio_item label="Etykiety" name="radio2" value="1"/>
 	</radio_group>
-	<check_box label="Przetłumacz Czat" name="translate_chat_checkbox" />
+	<check_box label="Używaj translatora podczas rozmowy (wspierany przez Google)" name="translate_chat_checkbox"/>
 	<text name="translate_language_text">
-		Czat Język:
+		Przetłumacz czat na:
 	</text>
 	<combo_box name="translate_language_combobox">
-		<combo_box.item name="System Default Language" label="Domyślny" />
-		<combo_box.item name="English" label="English (Angielski)" />
-		<combo_box.item name="Danish" label="Dansk (Duński)" />
-		<combo_box.item name="German" label="Deutsch (Niemiecki)" />
-		<combo_box.item name="Spanish" label="Español (Hiszpański)" />
-		<combo_box.item name="French" label="Français (Francuski)" />
-		<combo_box.item name="Italian" label="Italiano (Włoski)" />
-		<combo_box.item name="Hungarian" label="Magyar (Węgierski)" />
-		<combo_box.item name="Dutch" label="Nederlands (Niderlandzki)" />
-		<combo_box.item name="Polish" label="Polski" />
-		<combo_box.item name="Portugese" label="Português (Portugalski)" />
-		<combo_box.item name="Russian" label="Русский (Rosyjski)" />
-		<combo_box.item name="Turkish" label="Türkçe (Turecki)" />
-		<combo_box.item name="Ukrainian" label="Українська (Ukraiński)" />
-		<combo_box.item name="Chinese" label="中文 (简体) (Chiński)" />
-		<combo_box.item name="Japanese" label="日本語 (Japoński)" />
-		<combo_box.item name="Korean" label="한국어 (Koreański)" />
+		<combo_box.item label="Domyślny" name="System Default Language"/>
+		<combo_box.item label="English (Angielski)" name="English"/>
+		<combo_box.item label="Dansk (Duński)" name="Danish"/>
+		<combo_box.item label="Deutsch (Niemiecki)" name="German"/>
+		<combo_box.item label="Español (Hiszpański)" name="Spanish"/>
+		<combo_box.item label="Français (Francuski)" name="French"/>
+		<combo_box.item label="Italiano (Włoski)" name="Italian"/>
+		<combo_box.item label="Magyar (Węgierski)" name="Hungarian"/>
+		<combo_box.item label="Nederlands (Holenderski)" name="Dutch"/>
+		<combo_box.item label="Polski" name="Polish"/>
+		<combo_box.item label="Português (Portugalski)" name="Portugese"/>
+		<combo_box.item label="Русский (Rosyjski)" name="Russian"/>
+		<combo_box.item label="Türkçe (Turecki)" name="Turkish"/>
+		<combo_box.item label="Українська (Ukraiński)" name="Ukrainian"/>
+		<combo_box.item label="中文 (简体) (Chiński)" name="Chinese"/>
+		<combo_box.item label="日本語 (Japoński)" name="Japanese"/>
+		<combo_box.item label="한국어 (Koreański)" name="Korean"/>
 	</combo_box>
 </panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/pl/panel_preferences_graphics1.xml
index e60d540066..1a9f59bbff 100644
--- a/indra/newview/skins/default/xui/pl/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/pl/panel_preferences_graphics1.xml
@@ -29,22 +29,16 @@
 		<check_box initial_value="true" label="Mapowanie wypukłości i połysk" name="BumpShiny"/>
 		<check_box initial_value="true" label="Podstawowe shadery" name="BasicShaders" tool_tip="Wyłączenie tej opcji może naprawić błędy niektórych sterowników graficznych."/>
 		<check_box initial_value="true" label="Shadery atmosfery" name="WindLightUseAtmosShaders"/>
-		<check_box initial_value="true" label="Refleksy w wodzie" name="Reflections"/>
-		<text name="ReflectionDetailText">
-			Ustawienia refleksów:
+		<text name="reflection_label">
+			Refleksy w wodzie:
 		</text>
-		<radio_group name="ReflectionDetailRadio">
-			<radio_item label="Teren i drzewa" name="0"/>
-			<radio_item label="Obiekty statyczne" name="1"/>
-			<radio_item label="Awatary i obiekty" name="2"/>
-			<radio_item label="Wszystko" name="3"/>
-		</radio_group>
-		<text name="AvatarRenderingText">
-			Rendering awatarów
-		</text>
-		<check_box initial_value="true" label="Impostoryzacja awatarowa" name="AvatarImpostors"/>
-		<check_box initial_value="true" label="Rendering awatara przez GPU" name="AvatarVertexProgram"/>
-		<check_box initial_value="true" label="Oddzielne warstwy ubrań" name="AvatarCloth"/>
+		<combo_box initial_value="true" label="Refleksy w wodzie" name="Reflections">
+			<combo_box.item label="Mało" name="0"/>
+			<combo_box.item label="Teren i drzewa" name="1"/>
+			<combo_box.item label="Obiekty statyczne" name="2"/>
+			<combo_box.item label="Awatary i obiekty" name="3"/>
+			<combo_box.item label="Wszystko" name="4"/>
+		</combo_box>
 		<slider label="Pole widzenia:" name="DrawDistance"/>
 		<text name="DrawDistanceMeterText2">
 			m
@@ -82,13 +76,12 @@
 		<text name="SkyMeshDetailText">
 			Mało
 		</text>
-		<text name="LightingDetailText">
-			Ustawienia świateł:
+		<text name="AvatarRenderingText">
+			Rendering awatarów
 		</text>
-		<radio_group name="LightingDetailRadio">
-			<radio_item label="Tylko Słońce i Księżyc" name="SunMoon" value="0"/>
-			<radio_item label="Tylko bliskie światła" name="LocalLights" value="1"/>
-		</radio_group>
+		<check_box initial_value="true" label="Impostoryzacja awatarowa" name="AvatarImpostors"/>
+		<check_box initial_value="true" label="Rendering awatara przez GPU" name="AvatarVertexProgram"/>
+		<check_box initial_value="true" label="Oddzielne warstwy ubrań" name="AvatarCloth"/>
 		<text name="TerrainDetailText">
 			Szczegóły terenu:
 		</text>
@@ -96,6 +89,7 @@
 			<radio_item label="Niska" name="0"/>
 			<radio_item label="Wysoka" name="2"/>
 		</radio_group>
+		--&gt;
 	</panel>
 	<button label="Zastosuj" label_selected="Zastosuj" name="Apply"/>
 	<button label="Zresetuj" name="Defaults"/>
diff --git a/indra/newview/skins/default/xui/pl/panel_profile.xml b/indra/newview/skins/default/xui/pl/panel_profile.xml
index 97c2fdd417..f4a5699f8d 100644
--- a/indra/newview/skins/default/xui/pl/panel_profile.xml
+++ b/indra/newview/skins/default/xui/pl/panel_profile.xml
@@ -25,17 +25,29 @@
 				</panel>
 			</scroll_container>
 		</layout_panel>
+	</layout_stack>
+	<layout_stack name="layout_verb_buttons">
 		<layout_panel name="profile_buttons_panel">
-			<button label="Poznaj" name="add_friend" tool_tip="Zaoferuj znajomość Rezydentowi"/>
-			<button label="IM" name="im" tool_tip="Rozpocznij sesję czatu (IM)"/>
-			<button label="Dzwoń" name="call" tool_tip="Zadzwoń"/>
-			<button label="Mapa" name="show_on_map_btn" tool_tip="Pokaż Rezydenta na mapie"/>
-			<button label="Teleportuj" name="teleport" tool_tip="Teleportuj"/>
-			<button label="▼" name="overflow_btn" tool_tip="Zapłać lub udostępnij obiekty Rezydentowi"/>
+			<layout_stack name="bottom_bar_ls">
+				<layout_panel name="add_friend_btn_lp">
+					<button label="Poznaj" name="add_friend" tool_tip="Zaproponuj znajomość Rezydentowi"/>
+				</layout_panel>
+				<layout_panel name="im_btn_lp">
+					<button label="IM" name="im" tool_tip="Otwórz wiadomości IM"/>
+				</layout_panel>
+				<layout_panel name="call_btn_lp">
+					<button label="Dzwoń" name="call" tool_tip="Zadzwoń do tego Rezydenta"/>
+				</layout_panel>
+				<layout_panel name="chat_btn_lp">
+					<button label="Teleportuj" name="teleport" tool_tip="Teleportuj"/>
+				</layout_panel>
+				<layout_panel name="overflow_btn_lp">
+					<button label="▼" name="overflow_btn" tool_tip="Zapłać lub udostępnij obiekt Rezydentowi"/>
+				</layout_panel>
+			</layout_stack>
 		</layout_panel>
 		<layout_panel name="profile_me_buttons_panel">
-			<button label="Edytuj profil" name="edit_profile_btn" tool_tip="Edytuj swoje dane"/>
-			<button label="Edytuj wygląd" name="edit_appearance_btn" tool_tip="Stwórz/edytuj swój wygląd: dane fizyczne, ubranie..."/>
+			<button label="Edytuj profil" name="edit_profile_btn" tool_tip="Edytuj informacje o sobie"/>
 		</layout_panel>
 	</layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_side_tray_tab_caption.xml b/indra/newview/skins/default/xui/pl/panel_side_tray_tab_caption.xml
index 0ae9c1cf61..95cd7c53dc 100644
--- a/indra/newview/skins/default/xui/pl/panel_side_tray_tab_caption.xml
+++ b/indra/newview/skins/default/xui/pl/panel_side_tray_tab_caption.xml
@@ -1,5 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="sidetray_tab_panel">
 	<text name="sidetray_tab_title" value="Schowek"/>
+	<button name="undock" tool_tip="Odłącz"/>
+	<button name="dock" tool_tip="Przyłącz"/>
 	<button name="show_help" tool_tip="Pomoc"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/pl/sidepanel_inventory.xml b/indra/newview/skins/default/xui/pl/sidepanel_inventory.xml
index 9e5280bcc4..c2e50473a5 100644
--- a/indra/newview/skins/default/xui/pl/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/pl/sidepanel_inventory.xml
@@ -2,12 +2,20 @@
 <panel label="Rzeczy" name="objects panel">
 	<panel label="" name="sidepanel__inventory_panel">
 		<panel name="button_panel">
-			<button label="Profil" name="info_btn" tool_tip="Pokaż profil obiektu"/>
-			<button label="Udostępnij" name="share_btn" tool_tip="Udostępnij obiekt z Szafy"/>
-			<button label="Zakupy" name="shop_btn" tool_tip="Otwórz stronę Marketplace"/>
-			<button label="Ubierz" name="wear_btn" tool_tip="Załóż wybrany strój"/>
-			<button label="Odtwarzaj" name="play_btn"/>
-			<button label="Teleportuj" name="teleport_btn" tool_tip="Teleportuj się w wybrane miejsce"/>
+			<layout_stack name="button_panel_ls">
+				<layout_panel name="info_btn_lp">
+					<button label="Profil" name="info_btn" tool_tip="Pokaż profil obiektu"/>
+				</layout_panel>
+				<layout_panel name="share_btn_lp">
+					<button label="Udostępnij" name="share_btn" tool_tip="Udostępnij obiekt z Szafy"/>
+				</layout_panel>
+				<layout_panel name="shop_btn_lp">
+					<button label="Zakupy" name="shop_btn" tool_tip="Otwórz stronę Marketplace"/>
+					<button label="Załóż" name="wear_btn" tool_tip="Załóż wybrany strój"/>
+					<button label="Odtwarzaj" name="play_btn"/>
+					<button label="Teleportuj" name="teleport_btn" tool_tip="Teleportuj się w wybrane miejsce"/>
+				</layout_panel>
+			</layout_stack>
 		</panel>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/pl/sidepanel_item_info.xml b/indra/newview/skins/default/xui/pl/sidepanel_item_info.xml
index e39bbd75c5..0c285e6546 100644
--- a/indra/newview/skins/default/xui/pl/sidepanel_item_info.xml
+++ b/indra/newview/skins/default/xui/pl/sidepanel_item_info.xml
@@ -23,54 +23,53 @@
 	</panel.string>
 	<text name="title" value="Profil obiektu"/>
 	<text name="origin" value="(Szafa)"/>
-	<panel label="" name="item_profile">
-		<text name="LabelItemNameTitle">
-			Nazwa:
-		</text>
-		<text name="LabelItemDescTitle">
-			Opis:
-		</text>
-		<text name="LabelCreatorTitle">
-			Twórca:
-		</text>
-		<button label="Profil..." name="BtnCreator"/>
-		<text name="LabelOwnerTitle">
-			Właściciel:
-		</text>
-		<button label="Profil..." name="BtnOwner"/>
-		<text name="LabelAcquiredTitle">
-			Nabyte:
-		</text>
-		<text name="LabelAcquiredDate"/>
-		<panel name="perms_inv">
-			<text name="perm_modify">
-				Możesz:
+	<scroll_container name="item_profile_scroll">
+		<panel label="" name="item_profile">
+			<text name="LabelItemNameTitle">
+				Nazwa:
 			</text>
-			<check_box label="Zmienia" name="CheckOwnerModify"/>
-			<check_box label="Kopiuj" name="CheckOwnerCopy"/>
-			<check_box label="Sprzedaje/Oddaje" name="CheckOwnerTransfer"/>
-			<text name="AnyoneLabel">
-				Każdy:
+			<text name="LabelItemDescTitle">
+				Opis:
 			</text>
-			<check_box label="Kopiuje" name="CheckEveryoneCopy"/>
-			<text name="GroupLabel">
-				Grupa:
+			<text name="LabelCreatorTitle">
+				Twórca:
 			</text>
-			<check_box label="Udostępnij" name="CheckShareWithGroup" tool_tip="Pozwól wszystkim członkom ustawionej grupy na dzielenie prawa do modyfikacji dla tego obiektu. Musisz przypisać obiekt grupie aby aktywować ograniczenia wynikające z roli."/>
-			<text name="NextOwnerLabel">
-				Następny właściciel:
+			<text name="LabelOwnerTitle">
+				Właściciel:
 			</text>
-			<check_box label="Modyfikuje" name="CheckNextOwnerModify"/>
-			<check_box label="Kopiuje" name="CheckNextOwnerCopy"/>
-			<check_box label="Sprzedaje/Oddaje" name="CheckNextOwnerTransfer" tool_tip="Następny właściciel może oddawać lub sprzedawać ten obiekt"/>
+			<text name="LabelAcquiredTitle">
+				Nabyte:
+			</text>
+			<panel name="perms_inv">
+				<text name="perm_modify">
+					Możesz:
+				</text>
+				<check_box label="Modyfikuje" name="CheckOwnerModify"/>
+				<check_box label="Kopiuje" name="CheckOwnerCopy"/>
+				<check_box label="Oddaje/Sprzedaje" name="CheckOwnerTransfer"/>
+				<text name="AnyoneLabel">
+					Każdy:
+				</text>
+				<check_box label="Kopiuje" name="CheckEveryoneCopy"/>
+				<text name="GroupLabel">
+					Grupa:
+				</text>
+				<check_box label="Udostępnij" name="CheckShareWithGroup" tool_tip="Pozwól wszystkim członkom ustawionej grupy na dzielenie prawa do modyfikacji dla tego obiektu. Musisz przypisać obiekt grupie aby aktywować ograniczenia wynikające z roli."/>
+				<text name="NextOwnerLabel">
+					Następny właściciel:
+				</text>
+				<check_box label="Modyfikuje" name="CheckNextOwnerModify"/>
+				<check_box label="Kopiuje" name="CheckNextOwnerCopy"/>
+				<check_box label="Sprzedaje/Oddaje" name="CheckNextOwnerTransfer" tool_tip="Następny właściciel może oddawać lub sprzedawać ten obiekt"/>
+			</panel>
+			<check_box label="Na sprzedaż" name="CheckPurchase"/>
+			<combo_box name="combobox sale copy">
+				<combo_box.item label="Kopiuje" name="Copy"/>
+				<combo_box.item label="Oryginalny" name="Original"/>
+			</combo_box>
+			<spinner label="Cena: L$" name="Edit Cost"/>
 		</panel>
-		<check_box label="Na sprzedaż" name="CheckPurchase"/>
-		<combo_box name="combobox sale copy">
-			<combo_box.item label="Kopiuje" name="Copy"/>
-			<combo_box.item label="Oryginalny" name="Original"/>
-		</combo_box>
-		<spinner label="Cena: L$" name="Edit Cost"/>
-	</panel>
+	</scroll_container>
 	<panel name="button_panel">
 		<button label="Anuluj" name="cancel_btn"/>
 	</panel>
diff --git a/indra/newview/skins/default/xui/pl/strings.xml b/indra/newview/skins/default/xui/pl/strings.xml
index f90e357373..c9fe22f3c8 100644
--- a/indra/newview/skins/default/xui/pl/strings.xml
+++ b/indra/newview/skins/default/xui/pl/strings.xml
@@ -1264,6 +1264,9 @@
 	<string name="Right Pec">
 		Prawy Pec
 	</string>
+	<string name="Invalid Attachment">
+		Nieważny punkt załącznika
+	</string>
 	<string name="YearsMonthsOld">
 		[AGEYEARS] [AGEMONTHS]
 	</string>
@@ -1641,9 +1644,6 @@
 	<string name="ATTACH_HUD_BOTTOM_RIGHT">
 		HUD prawa dolna strona
 	</string>
-	<string name="Bad attachment point">
-		Nieprawidłowy punkt załączenia
-	</string>
 	<string name="CursorPos">
 		Linia [LINE], Kolumna [COLUMN]
 	</string>
@@ -1659,12 +1659,6 @@
 	<string name="BusyModeResponseDefault">
 		Rezydent, do którego wysłałeś wiadomość prywatną znajduje się w trybie pracy. Oznacza to, iż Twoja wiadomość zostanie zapisana do przejrzenia poźniej.
 	</string>
-	<string name="NoOutfits">
-		Nie posiadasz jeszcze żadnych strojów. Spróbuj [secondlife:///app/search/all/ Szukaj]
-	</string>
-	<string name="NoOutfitsTabsMatched">
-		Nie znaleziono tego czego szukasz? Spróbuj [secondlife:///app/search/all/[SEARCH_TERM] Szukaj].
-	</string>
 	<string name="MuteByName">
 		(Nazwa)
 	</string>
@@ -1705,7 +1699,7 @@
 		Nie dodałeś nic do Ulubionych i Reklam. Kliknij na poniższy przycisk Dodaj aby dodać miejsce do Ulubionych lub Reklamy.
 	</string>
 	<string name="NoAvatarPicksClassifiedsText">
-		Użytkownik nie posiada Ulubionych lub Reklam
+		Brak ulubionych miejsc/reklam
 	</string>
 	<string name="PicksClassifiedsLoadingText">
 		Ładowanie...
@@ -1819,6 +1813,12 @@ Expected .wav, .tga, .bmp, .jpg, .jpeg, or .bvh
 	<string name="accel-win-shift">
 		Shift+
 	</string>
+	<string name="Esc">
+		Esc
+	</string>
+	<string name="Home">
+		Miejsce Startu
+	</string>
 	<string name="FileSaved">
 		Zapisane pliki
 	</string>
@@ -3435,6 +3435,9 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 	<string name="IM_moderator_label">
 		(Moderator)
 	</string>
+	<string name="Saved_message">
+		(Zapisano [LONG_TIMESTAMP])
+	</string>
 	<string name="answered_call">
 		Twoja rozmowa głosowa została odebrana
 	</string>
@@ -3456,6 +3459,12 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 	<string name="hang_up-im">
 		Rozmowa głosowa zakończona
 	</string>
+	<string name="conference-title-incoming">
+		Konferencja z  [AGENT_NAME]
+	</string>
+	<string name="no_session_message">
+		(Sesja IM wygasła)
+	</string>
 	<string name="only_user_message">
 		Jesteś jedyną osobą w tej konferencji.
 	</string>
@@ -3840,4 +3849,13 @@ Raport o Nadużyciu
 	<string name="Chat">
 		Czat
 	</string>
+	<string name="DeleteItems">
+		Usuń wybrane obiekty?
+	</string>
+	<string name="DeleteItem">
+		Usuń wybrane obiekty?
+	</string>
+	<string name="EmptyOutfitText">
+		W tym stroju nie ma elementów
+	</string>
 </strings>
-- 
cgit v1.2.3


From ac6149314e8b8c1f924504969c8a3f7617c7c6a9 Mon Sep 17 00:00:00 2001
From: Eli Linden <eli@lindenlab.com>
Date: Mon, 11 Oct 2010 11:36:39 -0700
Subject: CT-575 WIP PL and DA translation for set18, new files

---
 indra/newview/skins/default/xui/da/menu_add_wearable_gear.xml | 6 ++++++
 indra/newview/skins/default/xui/pl/menu_add_wearable_gear.xml | 6 ++++++
 2 files changed, 12 insertions(+)
 create mode 100644 indra/newview/skins/default/xui/da/menu_add_wearable_gear.xml
 create mode 100644 indra/newview/skins/default/xui/pl/menu_add_wearable_gear.xml

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/da/menu_add_wearable_gear.xml b/indra/newview/skins/default/xui/da/menu_add_wearable_gear.xml
new file mode 100644
index 0000000000..1e8301dc4c
--- /dev/null
+++ b/indra/newview/skins/default/xui/da/menu_add_wearable_gear.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Add Wearable Gear Menu">
+	<menu_item_check label="Sortér efter nyeste" name="sort_by_most_recent"/>
+	<menu_item_check label="Sortér efter navn" name="sort_by_name"/>
+	<menu_item_check label="Sortér efter type" name="sort_by_type"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/pl/menu_add_wearable_gear.xml b/indra/newview/skins/default/xui/pl/menu_add_wearable_gear.xml
new file mode 100644
index 0000000000..7c572b4fc9
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/menu_add_wearable_gear.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Add Wearable Gear Menu">
+	<menu_item_check label="Porządkuj według daty" name="sort_by_most_recent"/>
+	<menu_item_check label="Porządkuj według nazwy" name="sort_by_name"/>
+	<menu_item_check label="Porządkuj według typu" name="sort_by_type"/>
+</menu>
-- 
cgit v1.2.3


From e7340516ad54387e281a793d9e7faca3c5cf4692 Mon Sep 17 00:00:00 2001
From: Eli Linden <eli@lindenlab.com>
Date: Mon, 11 Oct 2010 13:03:32 -0700
Subject: CT-575 WIP FR translation for set18

---
 indra/newview/skins/default/xui/fr/floater_map.xml |  2 +-
 .../skins/default/xui/fr/floater_nearby_chat.xml   |  4 +-
 .../newview/skins/default/xui/fr/floater_tools.xml |  7 +-
 .../skins/default/xui/fr/menu_attachment_self.xml  |  1 +
 .../skins/default/xui/fr/menu_avatar_self.xml      |  1 +
 .../default/xui/fr/menu_inspect_object_gear.xml    |  1 +
 .../default/xui/fr/menu_inspect_self_gear.xml      |  1 +
 .../newview/skins/default/xui/fr/menu_mini_map.xml |  1 +
 indra/newview/skins/default/xui/fr/menu_object.xml |  6 +-
 .../xui/fr/menu_people_friends_view_sort.xml       |  1 +
 .../xui/fr/menu_people_nearby_multiselect.xml      |  1 +
 indra/newview/skins/default/xui/fr/menu_viewer.xml | 19 ++---
 .../default/xui/fr/menu_wearable_list_item.xml     |  2 +-
 .../skins/default/xui/fr/menu_wearing_gear.xml     |  1 +
 .../skins/default/xui/fr/menu_wearing_tab.xml      |  2 +
 .../newview/skins/default/xui/fr/notifications.xml | 12 ++-
 .../default/xui/fr/panel_avatar_list_item.xml      |  4 +
 .../skins/default/xui/fr/panel_bottomtray.xml      | 18 ++---
 .../skins/default/xui/fr/panel_classified_info.xml | 14 +++-
 .../skins/default/xui/fr/panel_edit_classified.xml | 12 ++-
 .../skins/default/xui/fr/panel_edit_pick.xml       | 10 ++-
 .../skins/default/xui/fr/panel_edit_profile.xml    | 10 ++-
 .../skins/default/xui/fr/panel_edit_wearable.xml   | 10 ++-
 .../default/xui/fr/panel_group_info_sidetray.xml   | 10 ++-
 .../skins/default/xui/fr/panel_landmarks.xml       | 14 +++-
 .../skins/default/xui/fr/panel_my_profile.xml      |  7 +-
 indra/newview/skins/default/xui/fr/panel_notes.xml | 22 ++++--
 .../skins/default/xui/fr/panel_outfit_edit.xml     | 10 ++-
 .../default/xui/fr/panel_outfits_inventory.xml     | 10 ++-
 .../newview/skins/default/xui/fr/panel_people.xml  | 50 ++++++++++---
 .../skins/default/xui/fr/panel_pick_info.xml       | 20 +++--
 indra/newview/skins/default/xui/fr/panel_picks.xml | 20 ++++-
 .../newview/skins/default/xui/fr/panel_places.xml  | 48 ++++++++++--
 .../default/xui/fr/panel_preferences_chat.xml      | 38 +++++-----
 .../default/xui/fr/panel_preferences_graphics1.xml | 36 ++++-----
 .../newview/skins/default/xui/fr/panel_profile.xml | 26 +++++--
 .../default/xui/fr/panel_side_tray_tab_caption.xml |  2 +
 .../skins/default/xui/fr/sidepanel_inventory.xml   | 20 +++--
 .../skins/default/xui/fr/sidepanel_item_info.xml   | 87 +++++++++++-----------
 indra/newview/skins/default/xui/fr/strings.xml     | 38 +++++++---
 40 files changed, 401 insertions(+), 197 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/fr/floater_map.xml b/indra/newview/skins/default/xui/fr/floater_map.xml
index cd013f6c0e..04afe89c7b 100644
--- a/indra/newview/skins/default/xui/fr/floater_map.xml
+++ b/indra/newview/skins/default/xui/fr/floater_map.xml
@@ -25,7 +25,7 @@
 		NO
 	</floater.string>
 	<floater.string name="ToolTipMsg">
-		[AGENT][REGION](Double-cliquez pour ouvrir la carte)
+		[REGION](Carte : double-clic ; Panoramique : Maj + faire glisser)
 	</floater.string>
 	<floater.string name="mini_map_caption">
 		MINI-CARTE
diff --git a/indra/newview/skins/default/xui/fr/floater_nearby_chat.xml b/indra/newview/skins/default/xui/fr/floater_nearby_chat.xml
index a59253a746..9b1b21c434 100644
--- a/indra/newview/skins/default/xui/fr/floater_nearby_chat.xml
+++ b/indra/newview/skins/default/xui/fr/floater_nearby_chat.xml
@@ -1,2 +1,4 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="nearby_chat" title="CHAT PRÈS DE MOI"/>
+<floater name="nearby_chat" title="CHAT PRÈS DE MOI">
+	<check_box label="Traduction du chat (fournie par Google)" name="translate_chat_checkbox"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_tools.xml b/indra/newview/skins/default/xui/fr/floater_tools.xml
index b0c8636ea3..666aaa8147 100644
--- a/indra/newview/skins/default/xui/fr/floater_tools.xml
+++ b/indra/newview/skins/default/xui/fr/floater_tools.xml
@@ -182,10 +182,10 @@
 			<text name="Group:">
 				Groupe :
 			</text>
-			<button label="Définir..." label_selected="Définir..." name="button set group" tool_tip="Choisissez un groupe pour partager les droits de cet objet"/>
 			<name_box initial_value="Chargement..." name="Group Name Proxy"/>
-			<button label="Céder" label_selected="Céder" name="button deed" tool_tip="En cédant un objet, vous donnez aussi les droits au prochain propriétaire. Seul un officier peut céder les objets d&apos;un groupe."/>
+			<button label="Définir..." label_selected="Définir..." name="button set group" tool_tip="Choisissez un groupe pour partager les droits de cet objet"/>
 			<check_box label="Partager" name="checkbox share with group" tool_tip="Autorisez tous les membres du groupe choisi à utiliser et à partager vos droits pour cet objet. Pour activer les restrictions de rôles, vous devez d&apos;abord cliquer sur Transférer."/>
+			<button label="Céder" label_selected="Céder" name="button deed" tool_tip="En cédant un objet, vous donnez aussi les droits au prochain propriétaire. Seul un officier peut céder les objets d&apos;un groupe."/>
 			<text name="label click action">
 				Cliquer pour :
 			</text>
@@ -437,7 +437,8 @@
 				<combo_box.item label="Ventouses" name="suction"/>
 				<combo_box.item label="Tissage" name="weave"/>
 			</combo_box>
-			<text name="tex scale">
+			<check_box initial_value="false" label="Aligner les faces Plan" name="checkbox planar align" tool_tip="Aligner les textures sur toutes les faces sélectionnées avec la dernière face sélectionnée. Application de la texture Plan requise."/>
+			<text name="rpt">
 				Répétitions / Face
 			</text>
 			<spinner label="Horizontal (U)" name="TexScaleU"/>
diff --git a/indra/newview/skins/default/xui/fr/menu_attachment_self.xml b/indra/newview/skins/default/xui/fr/menu_attachment_self.xml
index 4516b624b8..78198fb5a8 100644
--- a/indra/newview/skins/default/xui/fr/menu_attachment_self.xml
+++ b/indra/newview/skins/default/xui/fr/menu_attachment_self.xml
@@ -3,6 +3,7 @@
 	<menu_item_call label="Toucher" name="Attachment Object Touch"/>
 	<menu_item_call label="Modifier" name="Edit..."/>
 	<menu_item_call label="Détacher" name="Detach"/>
+	<menu_item_call label="M&apos;asseoir" name="Sit Down Here"/>
 	<menu_item_call label="Me lever" name="Stand Up"/>
 	<menu_item_call label="Changer de tenue" name="Change Outfit"/>
 	<menu_item_call label="Modifier ma tenue" name="Edit Outfit"/>
diff --git a/indra/newview/skins/default/xui/fr/menu_avatar_self.xml b/indra/newview/skins/default/xui/fr/menu_avatar_self.xml
index bcf2757b58..c7ee2e9f88 100644
--- a/indra/newview/skins/default/xui/fr/menu_avatar_self.xml
+++ b/indra/newview/skins/default/xui/fr/menu_avatar_self.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Self Pie">
+	<menu_item_call label="M&apos;asseoir" name="Sit Down Here"/>
 	<menu_item_call label="Me lever" name="Stand Up"/>
 	<context_menu label="Enlever" name="Take Off &gt;">
 		<context_menu label="Habits" name="Clothes &gt;">
diff --git a/indra/newview/skins/default/xui/fr/menu_inspect_object_gear.xml b/indra/newview/skins/default/xui/fr/menu_inspect_object_gear.xml
index e2b215cbb8..074bb54cdc 100644
--- a/indra/newview/skins/default/xui/fr/menu_inspect_object_gear.xml
+++ b/indra/newview/skins/default/xui/fr/menu_inspect_object_gear.xml
@@ -9,6 +9,7 @@
 	<menu_item_call label="Ouvrir" name="open"/>
 	<menu_item_call label="Modifier" name="edit"/>
 	<menu_item_call label="Porter" name="wear"/>
+	<menu_item_call label="Ajouter" name="add"/>
 	<menu_item_call label="Signaler" name="report"/>
 	<menu_item_call label="Ignorer" name="block"/>
 	<menu_item_call label="Zoomer en avant" name="zoom_in"/>
diff --git a/indra/newview/skins/default/xui/fr/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/fr/menu_inspect_self_gear.xml
index 5f570b5608..3bc164788a 100644
--- a/indra/newview/skins/default/xui/fr/menu_inspect_self_gear.xml
+++ b/indra/newview/skins/default/xui/fr/menu_inspect_self_gear.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <menu name="Gear Menu">
+	<menu_item_call label="M&apos;asseoir" name="sit_down_here"/>
 	<menu_item_call label="Me lever" name="stand_up"/>
 	<menu_item_call label="Changer de tenue" name="change_outfit"/>
 	<menu_item_call label="Mon profil" name="my_profile"/>
diff --git a/indra/newview/skins/default/xui/fr/menu_mini_map.xml b/indra/newview/skins/default/xui/fr/menu_mini_map.xml
index 9dc40af502..7530f31d4e 100644
--- a/indra/newview/skins/default/xui/fr/menu_mini_map.xml
+++ b/indra/newview/skins/default/xui/fr/menu_mini_map.xml
@@ -4,6 +4,7 @@
 	<menu_item_call label="Zoom moyen" name="Zoom Medium"/>
 	<menu_item_call label="Zoom éloigné" name="Zoom Far"/>
 	<menu_item_check label="Faire pivoter la carte" name="Rotate Map"/>
+	<menu_item_check label="Centrage auto" name="Auto Center"/>
 	<menu_item_call label="Arrêter de suivre" name="Stop Tracking"/>
 	<menu_item_call label="Carte du monde" name="World Map"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_object.xml b/indra/newview/skins/default/xui/fr/menu_object.xml
index f7fe0ae71f..a50a9df4b1 100644
--- a/indra/newview/skins/default/xui/fr/menu_object.xml
+++ b/indra/newview/skins/default/xui/fr/menu_object.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Object Pie">
 	<menu_item_call label="Toucher" name="Object Touch">
-		<on_enable parameter="Toucher" name="EnableTouch"/>
+		<menu_item_call.on_enable name="EnableTouch" parameter="Toucher"/>
 	</menu_item_call>
 	<menu_item_call label="Modifier" name="Edit..."/>
 	<menu_item_call label="Construire" name="Build"/>
@@ -12,8 +12,9 @@
 	<menu_item_call label="Zoomer en avant" name="Zoom In"/>
 	<context_menu label="Porter" name="Put On">
 		<menu_item_call label="Porter" name="Wear"/>
+		<menu_item_call label="Ajouter" name="Add"/>
 		<context_menu label="Attacher" name="Object Attach"/>
-		<context_menu label="Attacher les éléments HUD" name="Object Attach HUD"/>
+		<context_menu label="Attacher HUD" name="Object Attach HUD"/>
 	</context_menu>
 	<context_menu label="Supprimer" name="Remove">
 		<menu_item_call label="Signaler une infraction" name="Report Abuse..."/>
@@ -21,7 +22,6 @@
 		<menu_item_call label="Retour" name="Return..."/>
 		<menu_item_call label="Supprimer" name="Delete"/>
 	</context_menu>
-	<menu_item_call label="Acheter" name="Pie Object Bye"/>
 	<menu_item_call label="Prendre" name="Pie Object Take"/>
 	<menu_item_call label="Prendre une copie" name="Take Copy"/>
 	<menu_item_call label="Payer" name="Pay..."/>
diff --git a/indra/newview/skins/default/xui/fr/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/fr/menu_people_friends_view_sort.xml
index 5adf8714cf..a6170a6c16 100644
--- a/indra/newview/skins/default/xui/fr/menu_people_friends_view_sort.xml
+++ b/indra/newview/skins/default/xui/fr/menu_people_friends_view_sort.xml
@@ -3,5 +3,6 @@
 	<menu_item_check label="Trier par nom" name="sort_name"/>
 	<menu_item_check label="Trier par statut" name="sort_status"/>
 	<menu_item_check label="Afficher les icônes des résidents" name="view_icons"/>
+	<menu_item_check label="Afficher les droits octroyés" name="view_permissions"/>
 	<menu_item_call label="Afficher les résidents et les objets ignorés" name="show_blocked_list"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_people_nearby_multiselect.xml b/indra/newview/skins/default/xui/fr/menu_people_nearby_multiselect.xml
index 18ae84a67b..8400ec0a14 100644
--- a/indra/newview/skins/default/xui/fr/menu_people_nearby_multiselect.xml
+++ b/indra/newview/skins/default/xui/fr/menu_people_nearby_multiselect.xml
@@ -6,4 +6,5 @@
 	<menu_item_call label="Appeler" name="Call"/>
 	<menu_item_call label="Partager" name="Share"/>
 	<menu_item_call label="Payer" name="Pay"/>
+	<menu_item_call label="Proposer une téléportation" name="teleport"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_viewer.xml b/indra/newview/skins/default/xui/fr/menu_viewer.xml
index cd0e41e496..5f51c61655 100644
--- a/indra/newview/skins/default/xui/fr/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/fr/menu_viewer.xml
@@ -94,7 +94,6 @@
 			<menu_item_call label="Définir les scripts sur Pas d&apos;exécution" name="Set Scripts to Not Running"/>
 		</menu>
 		<menu label="Options" name="Options">
-			<menu_item_call label="Définir les droits de chargement par défaut" name="perm prefs"/>
 			<menu_item_check label="Afficher les droits avancés" name="DebugPermissions"/>
 			<menu_item_check label="Sélectionner mes objets uniquement" name="Select Only My Objects"/>
 			<menu_item_check label="Sélectionner les objets déplaçables uniquement" name="Select Only Movable Objects"/>
@@ -121,7 +120,6 @@
 		<menu_item_call label="À propos de [APP_NAME]" name="About Second Life"/>
 	</menu>
 	<menu label="Avancé" name="Advanced">
-		<menu_item_check label="Afficher le menu Avancé" name="Show Advanced Menu"/>
 		<menu_item_call label="Arrêter mon animation" name="Stop Animating My Avatar"/>
 		<menu_item_call label="Refixer les textures" name="Rebake Texture"/>
 		<menu_item_call label="Taille de l&apos;interface par défaut" name="Set UI Size to Default"/>
@@ -168,7 +166,6 @@
 			<menu_item_check label="Tester FRInfo" name="Test FRInfo"/>
 			<menu_item_check label="Objets flexibles" name="Flexible Objects"/>
 		</menu>
-		<menu_item_check label="Exécuter plusieurs threads" name="Run Multiple Threads"/>
 		<menu_item_check label="Utiliser le thread de lecture de plug-in" name="Use Plugin Read Thread"/>
 		<menu_item_call label="Effacer le cache du groupe" name="ClearGroupCache"/>
 		<menu_item_check label="Effet de lissage de la souris" name="Mouse Smoothing"/>
@@ -177,7 +174,6 @@
 			<menu_item_check label="Rechercher" name="Search"/>
 			<menu_item_call label="Relâcher les touches" name="Release Keys"/>
 			<menu_item_call label="Taille de l&apos;interface par défaut" name="Set UI Size to Default"/>
-			<menu_item_check label="Afficher le menu Avancé - raccourci existant" name="Show Advanced Menu - legacy shortcut"/>
 			<menu_item_check label="Toujours courir" name="Always Run"/>
 			<menu_item_check label="Voler" name="Fly"/>
 			<menu_item_call label="Fermer la fenêtre" name="Close Window"/>
@@ -197,6 +193,7 @@
 			<menu_item_call label="Zoomer en avant" name="Zoom In"/>
 			<menu_item_call label="Zoom par défaut" name="Zoom Default"/>
 			<menu_item_call label="Zoomer en arrière" name="Zoom Out"/>
+			<menu_item_check label="Afficher le menu Avancé" name="Show Advanced Menu"/>
 		</menu>
 		<menu_item_call label="Afficher les paramètres de débogage" name="Debug Settings"/>
 		<menu_item_check label="Afficher le menu Développeurs" name="Debug Mode"/>
@@ -262,16 +259,19 @@
 			<menu_item_check label="Filaire" name="Wireframe"/>
 			<menu_item_check label="Occlusion objet-objet" name="Object-Object Occlusion"/>
 			<menu_item_check label="Objets de mémoire vidéo" name="Framebuffer Objects"/>
-			<menu_item_check label="Rendu différé" name="Deferred Rendering"/>
-			<menu_item_check label="Illumination globale" name="Global Illumination"/>
+			<menu_item_check label="Éclairage et ombres" name="Lighting and Shadows"/>
+			<menu_item_check label="Ombres du soleil/de la lune/des projecteurs" name="Shadows from Sun/Moon/Projectors"/>
+			<menu_item_check label="SSAO et lissage des ombres" name="SSAO and Shadow Smoothing"/>
+			<menu_item_check label="Illumination globale (expérimental)" name="Global Illumination"/>
 			<menu_item_check label="Débogage GL" name="Debug GL"/>
 			<menu_item_check label="Débogage pipeline" name="Debug Pipeline"/>
-			<menu_item_check label="Alpha rapide" name="Fast Alpha"/>
+			<menu_item_check label="Masques alpha automatiques (différés)" name="Automatic Alpha Masks (deferred)"/>
+			<menu_item_check label="Masques alpha automatiques (non différés)" name="Automatic Alpha Masks (non-deferred)"/>
 			<menu_item_check label="Textures d&apos;animation" name="Animation Textures"/>
 			<menu_item_check label="Désactiver les textures" name="Disable Textures"/>
 			<menu_item_check label="Textures pleine résolution" name="Rull Res Textures"/>
 			<menu_item_check label="Audit Textures" name="Audit Textures"/>
-			<menu_item_check label="Atlas des textures" name="Texture Atlas"/>
+			<menu_item_check label="Atlas des textures (expérimental)" name="Texture Atlas"/>
 			<menu_item_check label="Rendu des lumières jointes" name="Render Attached Lights"/>
 			<menu_item_check label="Rendu des particules jointes" name="Render Attached Particles"/>
 			<menu_item_check label="Objets en surbrillance avec le pointeur" name="Hover Glow Objects"/>
@@ -308,7 +308,8 @@
 			<menu_item_call label="Imprimer les infos sur l&apos;objet sélectionné" name="Print Selected Object Info"/>
 			<menu_item_call label="Imprimer les infos sur l&apos;avatar" name="Print Agent Info"/>
 			<menu_item_call label="Statistiques de mémoire" name="Memory Stats"/>
-			<menu_item_check label="Double-ClickAuto-Pilot" name="Double-ClickAuto-Pilot"/>
+			<menu_item_check label="Pilote auto par double-click" name="Double-Click Auto-Pilot"/>
+			<menu_item_check label="Téléportation par double-clic" name="DoubleClick Teleport"/>
 			<menu_item_check label="Débogage SelectMgr" name="Debug SelectMgr"/>
 			<menu_item_check label="Débogage clics" name="Debug Clicks"/>
 			<menu_item_check label="Débogage des vues" name="Debug Views"/>
diff --git a/indra/newview/skins/default/xui/fr/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/fr/menu_wearable_list_item.xml
index e2eeb39782..187cb4bcd2 100644
--- a/indra/newview/skins/default/xui/fr/menu_wearable_list_item.xml
+++ b/indra/newview/skins/default/xui/fr/menu_wearable_list_item.xml
@@ -9,6 +9,6 @@
 	<context_menu label="Attacher au HUD" name="wearable_attach_to_hud"/>
 	<menu_item_call label="Enlever" name="take_off"/>
 	<menu_item_call label="Modifier" name="edit"/>
-	<menu_item_call label="Profil de l&apos;objet" name="object_profile"/>
+	<menu_item_call label="Profil de l&apos;article" name="object_profile"/>
 	<menu_item_call label="Afficher l&apos;original" name="show_original"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_wearing_gear.xml b/indra/newview/skins/default/xui/fr/menu_wearing_gear.xml
index d5330c2417..0ca9fe1879 100644
--- a/indra/newview/skins/default/xui/fr/menu_wearing_gear.xml
+++ b/indra/newview/skins/default/xui/fr/menu_wearing_gear.xml
@@ -1,4 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <menu name="Gear Wearing">
 	<menu_item_call label="Modifier la tenue" name="edit"/>
+	<menu_item_call label="Enlever" name="takeoff"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_wearing_tab.xml b/indra/newview/skins/default/xui/fr/menu_wearing_tab.xml
index b99f751fae..4d88445506 100644
--- a/indra/newview/skins/default/xui/fr/menu_wearing_tab.xml
+++ b/indra/newview/skins/default/xui/fr/menu_wearing_tab.xml
@@ -1,4 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Wearing">
+	<menu_item_call label="Enlever" name="take_off"/>
+	<menu_item_call label="Détacher" name="detach"/>
 	<menu_item_call label="Modifier la tenue" name="edit"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/fr/notifications.xml b/indra/newview/skins/default/xui/fr/notifications.xml
index 259ac4cee6..2a7d1d1a5d 100644
--- a/indra/newview/skins/default/xui/fr/notifications.xml
+++ b/indra/newview/skins/default/xui/fr/notifications.xml
@@ -1811,6 +1811,10 @@ Déplacer les objets de l&apos;inventaire ?
 		Êtes-vous certain de vouloir quitter ?
 		<usetemplate ignoretext="Confirmer avant de quitter" name="okcancelignore" notext="Ne pas quitter" yestext="Quitter"/>
 	</notification>
+	<notification name="DeleteItems">
+		[QUESTION]
+		<usetemplate ignoretext="Confirmer avant de supprimer des articles" name="okcancelignore" notext="Annuler" yestext="OK"/>
+	</notification>
 	<notification name="HelpReportAbuseEmailLL">
 		Utilisez cet outil pour signaler des infractions aux [http://secondlife.com/corporate/tos.php Conditions d’utilisation] et aux [http://secondlife.com/corporate/cs.php Règles communautaires].
 
@@ -2744,9 +2748,13 @@ Veuillez vérifier la configuration de votre réseau et de votre pare-feu.
 		([EXISTENCE] secondes d&apos;existence)
 Départ de l&apos;avatar [NAME] entièrement chargé.
 	</notification>
-	<notification name="AvatarRezSelfBakeNotification">
+	<notification name="AvatarRezSelfBakedTextureUploadNotification">
+		([EXISTENCE] secondes d&apos;existence)
+Texture figée de [RESOLUTION] chargée pour [BODYREGION] au bout de [TIME] secondes.
+	</notification>
+	<notification name="AvatarRezSelfBakedTextureUpdateNotification">
 		([EXISTENCE] secondes d&apos;existence)
-Vous avez [ACTION] une texture figée de [RESOLUTION] pour [BODYREGION] au bout de [TIME] secondes.
+Texture figée de [RESOLUTION] mise à jour localement pour [BODYREGION] au bout de [TIME] secondes.
 	</notification>
 	<notification name="ConfirmLeaveCall">
 		Voulez-vous vraiment quitter cet appel ?
diff --git a/indra/newview/skins/default/xui/fr/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/fr/panel_avatar_list_item.xml
index 792fd70c7f..607665ddd8 100644
--- a/indra/newview/skins/default/xui/fr/panel_avatar_list_item.xml
+++ b/indra/newview/skins/default/xui/fr/panel_avatar_list_item.xml
@@ -23,5 +23,9 @@
 	</string>
 	<text name="avatar_name" value="Inconnu"/>
 	<text name="last_interaction" value="0s"/>
+	<icon name="permission_edit_theirs_icon" tool_tip="Vous pouvez modifier les objets de cet(te) ami(e)."/>
+	<icon name="permission_edit_mine_icon" tool_tip="Cet(te) ami(e) peut modifier, supprimer ou prendre vos objets."/>
+	<icon name="permission_map_icon" tool_tip="Cet(te) ami(e) peut vous localiser sur la carte."/>
+	<icon name="permission_online_icon" tool_tip="Cet(te) ami(e) peut voir lorsque vous êtes en ligne."/>
 	<button name="profile_btn" tool_tip="Voir le profil"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_bottomtray.xml b/indra/newview/skins/default/xui/fr/panel_bottomtray.xml
index 328b97ee72..c4537861e3 100644
--- a/indra/newview/skins/default/xui/fr/panel_bottomtray.xml
+++ b/indra/newview/skins/default/xui/fr/panel_bottomtray.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="bottom_tray">
+	<string name="DragIndicationImageName" value="Accordion_ArrowOpened_Off"/>
 	<string name="SpeakBtnToolTip" value="Active/Désactive le micro"/>
 	<string name="VoiceControlBtnToolTip" value="Affiche/Masque le panneau de contrôle de la voix"/>
 	<layout_stack name="toolbar_stack">
@@ -12,28 +13,25 @@
 			<gesture_combo_list label="Geste" name="Gesture" tool_tip="Affiche/Masque les gestes"/>
 		</layout_panel>
 		<layout_panel name="movement_panel">
-			<button label="Bouger" name="movement_btn" tool_tip="Affiche/Masque le contrôle des déplacements"/>
+			<bottomtray_button label="Bouger" name="movement_btn" tool_tip="Affiche/Masque le contrôle des déplacements"/>
 		</layout_panel>
 		<layout_panel name="cam_panel">
-			<button label="Affichage" name="camera_btn" tool_tip="Affiche/Masque le contrôle de la caméra"/>
+			<bottomtray_button label="Affichage" name="camera_btn" tool_tip="Affiche/Masque le contrôle de la caméra"/>
 		</layout_panel>
 		<layout_panel name="snapshot_panel">
-			<button label="" name="snapshots" tool_tip="Prendre une photo"/>
-		</layout_panel>
-		<layout_panel name="sidebar_btn_panel">
-			<button label="Panneau latéral" name="sidebar_btn" tool_tip="Affiche/Masque le panneau latéral"/>
+			<bottomtray_button label="" name="snapshots" tool_tip="Prendre une photo"/>
 		</layout_panel>
 		<layout_panel name="build_btn_panel">
-			<button label="Construire" name="build_btn" tool_tip="Affiche/Masque les outils pour la construction"/>
+			<bottomtray_button label="Construire" name="build_btn" tool_tip="Affiche/Masque les outils pour la construction"/>
 		</layout_panel>
 		<layout_panel name="search_btn_panel">
-			<button label="Rechercher" name="search_btn" tool_tip="Affiche/Masque la recherche"/>
+			<bottomtray_button label="Rechercher" name="search_btn" tool_tip="Affiche/Masque la recherche"/>
 		</layout_panel>
 		<layout_panel name="world_map_btn_panel">
-			<button label="Carte" name="world_map_btn" tool_tip="Affiche/Masque la carte du monde"/>
+			<bottomtray_button label="Carte" name="world_map_btn" tool_tip="Affiche/Masque la carte du monde"/>
 		</layout_panel>
 		<layout_panel name="mini_map_btn_panel">
-			<button label="Mini-carte" name="mini_map_btn" tool_tip="Affiche/Masque la mini-carte"/>
+			<bottomtray_button label="Mini-carte" name="mini_map_btn" tool_tip="Affiche/Masque la mini-carte"/>
 		</layout_panel>
 		<layout_panel name="im_well_panel">
 			<chiclet_im_well name="im_well">
diff --git a/indra/newview/skins/default/xui/fr/panel_classified_info.xml b/indra/newview/skins/default/xui/fr/panel_classified_info.xml
index e4aecfdfc0..c4265be877 100644
--- a/indra/newview/skins/default/xui/fr/panel_classified_info.xml
+++ b/indra/newview/skins/default/xui/fr/panel_classified_info.xml
@@ -52,8 +52,16 @@
 		</panel>
 	</scroll_container>
 	<panel name="buttons">
-		<button label="Téléporter" name="teleport_btn"/>
-		<button label="Carte" name="show_on_map_btn"/>
-		<button label="Édition" name="edit_btn"/>
+		<layout_stack name="layout_stack1">
+			<layout_panel name="layout_panel1">
+				<button label="Téléportation" name="teleport_btn"/>
+			</layout_panel>
+			<layout_panel name="show_on_map_btn_lp">
+				<button label="Carte" name="show_on_map_btn"/>
+			</layout_panel>
+			<layout_panel name="edit_btn_lp">
+				<button label="Modifier" name="edit_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_edit_classified.xml b/indra/newview/skins/default/xui/fr/panel_edit_classified.xml
index 2e2b848c93..7b58f2e825 100644
--- a/indra/newview/skins/default/xui/fr/panel_edit_classified.xml
+++ b/indra/newview/skins/default/xui/fr/panel_edit_classified.xml
@@ -36,13 +36,19 @@
 				<icons_combo_box.item label="Contenu Modéré" name="mature_ci" value="Mature"/>
 				<icons_combo_box.item label="Contenu Général" name="pg_ci" value="PG"/>
 			</icons_combo_box>
+			<check_box label="Renouvellement auto toutes les semaines" name="auto_renew"/>
 			<text name="price_for_listing_label" value="Coût de l&apos;annonce :"/>
 			<spinner label="L$" name="price_for_listing" tool_tip="Coût de l&apos;annonce." value="50"/>
-			<check_box label="Renouvellement auto toutes les semaines" name="auto_renew"/>
 		</panel>
 	</scroll_container>
 	<panel label="bottom_panel" name="bottom_panel">
-		<button label="[LABEL]" name="save_changes_btn"/>
-		<button label="Annuler" name="cancel_btn"/>
+		<layout_stack name="bottom_panel_ls">
+			<layout_panel name="save_changes_btn_lp">
+				<button label="[LABEL]" name="save_changes_btn"/>
+			</layout_panel>
+			<layout_panel name="show_on_map_btn_lp">
+				<button label="Annuler" name="cancel_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_edit_pick.xml b/indra/newview/skins/default/xui/fr/panel_edit_pick.xml
index 5872b01fb0..2364d9bbb2 100644
--- a/indra/newview/skins/default/xui/fr/panel_edit_pick.xml
+++ b/indra/newview/skins/default/xui/fr/panel_edit_pick.xml
@@ -25,7 +25,13 @@
 		</panel>
 	</scroll_container>
 	<panel label="bottom_panel" name="bottom_panel">
-		<button label="Enregistrer" name="save_changes_btn"/>
-		<button label="Annuler" name="cancel_btn"/>
+		<layout_stack name="layout_stack1">
+			<layout_panel name="layout_panel1">
+				<button label="Enregistrer" name="save_changes_btn"/>
+			</layout_panel>
+			<layout_panel name="layout_panel1">
+				<button label="Annuler" name="cancel_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_edit_profile.xml b/indra/newview/skins/default/xui/fr/panel_edit_profile.xml
index 4be12054df..9a6401536f 100644
--- a/indra/newview/skins/default/xui/fr/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/fr/panel_edit_profile.xml
@@ -53,7 +53,13 @@
 		</panel>
 	</scroll_container>
 	<panel name="profile_me_buttons_panel">
-		<button label="Enregistrer les changements" name="save_btn" width="166"/>
-		<button label="Annuler" name="cancel_btn"/>
+		<layout_stack name="bottom_panel_ls">
+			<layout_panel name="save_changes_btn_lp">
+				<button label="Enregistrer les changements" name="save_btn"/>
+			</layout_panel>
+			<layout_panel name="show_on_map_btn_lp">
+				<button label="Annuler" name="cancel_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_edit_wearable.xml b/indra/newview/skins/default/xui/fr/panel_edit_wearable.xml
index 624026efbb..d7a3d3bd85 100644
--- a/indra/newview/skins/default/xui/fr/panel_edit_wearable.xml
+++ b/indra/newview/skins/default/xui/fr/panel_edit_wearable.xml
@@ -102,7 +102,13 @@
 		<icon name="female_icon" tool_tip="Femme"/>
 	</panel>
 	<panel name="button_panel">
-		<button label="Enregistrer sous" name="save_as_button"/>
-		<button label="Annuler" name="revert_button" width="130"/>
+		<layout_stack name="button_panel_ls">
+			<layout_panel name="save_as_btn_lp">
+				<button label="Enregistrer sous" name="save_as_button"/>
+			</layout_panel>
+			<layout_panel name="revert_btn_lp">
+				<button label="Annuler" name="revert_button"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/fr/panel_group_info_sidetray.xml
index 5b08b4aefb..047cd692e8 100644
--- a/indra/newview/skins/default/xui/fr/panel_group_info_sidetray.xml
+++ b/indra/newview/skins/default/xui/fr/panel_group_info_sidetray.xml
@@ -13,7 +13,7 @@
 		Gratuit
 	</panel.string>
 	<panel name="group_info_top">
-		<text name="group_name" value="(en cours de chargement...)"/>
+		<text_editor name="group_name" value="(en cours de chargement...)"/>
 		<line_editor label="Saisissez le nom du groupe ici" name="group_name_editor"/>
 	</panel>
 	<layout_stack name="layout">
@@ -25,9 +25,15 @@
 				<accordion_tab name="group_land_tab" title="Terrain/Actifs"/>
 			</accordion>
 		</layout_panel>
-		<layout_panel name="button_row">
+	</layout_stack>
+	<layout_stack name="button_row_ls">
+		<layout_panel name="btn_chat_lp">
 			<button label="Chat" name="btn_chat"/>
+		</layout_panel>
+		<layout_panel name="call_btn_lp">
 			<button label="Appel de groupe" name="btn_call" tool_tip="Appeler ce groupe"/>
+		</layout_panel>
+		<layout_panel name="btn_apply_lp">
 			<button label="Enregistrer" label_selected="Enregistrer" name="btn_apply"/>
 			<button label="Créer un groupe" name="btn_create" tool_tip="Créer un groupe"/>
 		</layout_panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_landmarks.xml b/indra/newview/skins/default/xui/fr/panel_landmarks.xml
index 9e0d08958b..7501e54f11 100644
--- a/indra/newview/skins/default/xui/fr/panel_landmarks.xml
+++ b/indra/newview/skins/default/xui/fr/panel_landmarks.xml
@@ -7,8 +7,16 @@
 		<accordion_tab name="tab_library" title="Bibliothèque"/>
 	</accordion>
 	<panel name="bottom_panel">
-		<button name="options_gear_btn" tool_tip="Afficher d&apos;autres options"/>
-		<button name="add_btn" tool_tip="Ajouter un nouveau repère"/>
-		<dnd_button name="trash_btn" tool_tip="Supprimer le repère sélectionné"/>
+		<layout_stack name="bottom_panel">
+			<layout_panel name="options_gear_btn_panel">
+				<button name="options_gear_btn" tool_tip="Afficher d&apos;autres options"/>
+			</layout_panel>
+			<layout_panel name="add_btn_panel">
+				<button name="add_btn" tool_tip="Ajouter un nouveau repère"/>
+			</layout_panel>
+			<layout_panel name="trash_btn_panel">
+				<dnd_button name="trash_btn" tool_tip="Supprimer le repère sélectionné"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_my_profile.xml b/indra/newview/skins/default/xui/fr/panel_my_profile.xml
index ce2e5f4c60..8dbc22d3c7 100644
--- a/indra/newview/skins/default/xui/fr/panel_my_profile.xml
+++ b/indra/newview/skins/default/xui/fr/panel_my_profile.xml
@@ -42,9 +42,8 @@
 				</panel>
 			</scroll_container>
 		</layout_panel>
-		<layout_panel name="profile_me_buttons_panel">
-			<button label="Modifier le profil" name="edit_profile_btn" tool_tip="Modifier vos informations personnelles"/>
-			<button label="Changer d&apos;apparence" name="edit_appearance_btn" tool_tip="Créer/modifier votre apparence : données physiques, habits, etc."/>
-		</layout_panel>
 	</layout_stack>
+	<panel name="profile_me_buttons_panel">
+		<button label="Modifier le profil" name="edit_profile_btn" tool_tip="Modifier vos informations personnelles"/>
+	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_notes.xml b/indra/newview/skins/default/xui/fr/panel_notes.xml
index 1609b6c9d3..1b44bc4b73 100644
--- a/indra/newview/skins/default/xui/fr/panel_notes.xml
+++ b/indra/newview/skins/default/xui/fr/panel_notes.xml
@@ -13,11 +13,23 @@
 			</scroll_container>
 		</layout_panel>
 		<layout_panel name="notes_buttons_panel">
-			<button label="Devenir amis" name="add_friend" tool_tip="Proposer à un résident de devenir votre ami"/>
-			<button label="IM" name="im" width="30" tool_tip="Ouvrir une session IM"/>
-			<button label="Appeler" name="call" width="60" tool_tip="Appeler ce résident"/>
-			<button label="Carte" name="show_on_map_btn" tool_tip="Afficher le résident sur la carte"/>
-			<button label="Téléporter" name="teleport" tool_tip="Proposer une téléportation"/>
+			<layout_stack name="bottom_bar_ls">
+				<layout_panel name="add_friend_btn_lp">
+					<button label="Devenir amis" name="add_friend" tool_tip="Proposer à ce résident de devenir votre ami"/>
+				</layout_panel>
+				<layout_panel name="im_btn_lp">
+					<button label="IM" name="im" tool_tip="Ouvrir une session IM"/>
+				</layout_panel>
+				<layout_panel name="call_btn_lp">
+					<button label="Appeler" name="call" tool_tip="Appeler ce résident"/>
+				</layout_panel>
+				<layout_panel name="show_on_map_btn_lp">
+					<button label="Carte" name="show_on_map_btn" tool_tip="Afficher le résident sur la carte"/>
+				</layout_panel>
+				<layout_panel name="teleport_btn_lp">
+					<button label="Téléporter" name="teleport" tool_tip="Proposer une téléportation"/>
+				</layout_panel>
+			</layout_stack>
 		</layout_panel>
 	</layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_outfit_edit.xml b/indra/newview/skins/default/xui/fr/panel_outfit_edit.xml
index a3d23b0e70..39bc7ef8af 100644
--- a/indra/newview/skins/default/xui/fr/panel_outfit_edit.xml
+++ b/indra/newview/skins/default/xui/fr/panel_outfit_edit.xml
@@ -45,7 +45,13 @@
 		<button name="shop_btn_2" tool_tip="Visiter la Place du marché SL. Vous pouvez également sélectionner quelque chose que vous portez, puis cliquer ici pour consulter d&apos;autres articles similaires."/>
 	</panel>
 	<panel name="save_revert_button_bar">
-		<button label="Enregistrer" name="save_btn"/>
-		<button label="Annuler les modifications" name="revert_btn" tool_tip="Rétablir la dernière version enregistrée"/>
+		<layout_stack name="button_bar_ls">
+			<layout_panel name="save_btn_lp">
+				<button label="Enregistrer" name="save_btn"/>
+			</layout_panel>
+			<layout_panel name="revert_btn_lp">
+				<button label="Annuler" name="revert_btn" tool_tip="Rétablir la dernière version enregistrée"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/fr/panel_outfits_inventory.xml
index 791a0bcf2e..1bc553c8c0 100644
--- a/indra/newview/skins/default/xui/fr/panel_outfits_inventory.xml
+++ b/indra/newview/skins/default/xui/fr/panel_outfits_inventory.xml
@@ -11,7 +11,13 @@
 		<panel label="PORTÉ" name="cof_tab"/>
 	</tab_container>
 	<panel name="bottom_panel">
-		<button label="Enregistrer sous" name="save_btn"/>
-		<button label="Porter" name="wear_btn" tool_tip="Porter la tenue sélectionnée"/>
+		<layout_stack name="bottom_panel_ls">
+			<layout_panel name="save_btn_lp">
+				<button label="Enregistrer sous" name="save_btn"/>
+			</layout_panel>
+			<layout_panel name="wear_btn_lp">
+				<button label="Porter" name="wear_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_people.xml b/indra/newview/skins/default/xui/fr/panel_people.xml
index f7eb803d4a..76edc316c2 100644
--- a/indra/newview/skins/default/xui/fr/panel_people.xml
+++ b/indra/newview/skins/default/xui/fr/panel_people.xml
@@ -32,9 +32,17 @@ Pour rechercher des résidents avec qui passer du temps, utilisez [secondlife://
 				<accordion_tab name="tab_all" title="Tout"/>
 			</accordion>
 			<panel label="bottom_panel" name="bottom_panel">
-				<button name="friends_viewsort_btn" tool_tip="Options"/>
-				<button name="add_btn" tool_tip="Proposer à un résident de devenir votre ami"/>
-				<button name="del_btn" tool_tip="Supprimer le résident sélectionné de votre liste d&apos;amis"/>
+				<layout_stack name="bottom_panel">
+					<layout_panel name="options_gear_btn_panel">
+						<button name="friends_viewsort_btn" tool_tip="Afficher d&apos;autres options"/>
+					</layout_panel>
+					<layout_panel name="add_btn_panel">
+						<button name="add_btn" tool_tip="Proposer à un résident de devenir votre ami"/>
+					</layout_panel>
+					<layout_panel name="trash_btn_panel">
+						<dnd_button name="trash_btn" tool_tip="Supprimer le résident sélectionné de votre liste d&apos;amis"/>
+					</layout_panel>
+				</layout_stack>
 			</panel>
 		</panel>
 		<panel label="MES GROUPES" name="groups_panel">
@@ -52,13 +60,33 @@ Pour rechercher des résidents avec qui passer du temps, utilisez [secondlife://
 		</panel>
 	</tab_container>
 	<panel name="button_bar">
-		<button label="Profil" name="view_profile_btn" tool_tip="Afficher la photo, les groupes et autres infos des résidents"/>
-		<button label="IM" name="im_btn" tool_tip="Ouvrir une session IM"/>
-		<button label="Appeler" name="call_btn" tool_tip="Appeler ce résident"/>
-		<button label="Partager" name="share_btn" tool_tip="Partager un article d&apos;inventaire"/>
-		<button label="Téléporter" name="teleport_btn" tool_tip="Proposer une téléportation"/>
-		<button label="Profil" name="group_info_btn" tool_tip="Voir le profil du groupe"/>
-		<button label="Chat" name="chat_btn" tool_tip="Ouvrir une session de chat"/>
-		<button label="Appel" name="group_call_btn" tool_tip="Appeler ce groupe"/>
+		<layout_stack name="bottom_bar_ls">
+			<layout_panel name="view_profile_btn_lp">
+				<button label="Profil" name="view_profile_btn" tool_tip="Afficher la photo, les groupes et autres infos des résidents"/>
+			</layout_panel>
+			<layout_panel name="chat_btn_lp">
+				<button label="IM" name="im_btn" tool_tip="Ouvrir une session IM"/>
+			</layout_panel>
+			<layout_panel name="chat_btn_lp">
+				<button label="Appeler" name="call_btn" tool_tip="Appeler ce résident"/>
+			</layout_panel>
+			<layout_panel name="chat_btn_lp">
+				<button label="Partager" name="share_btn" tool_tip="Partager un article de l&apos;inventaire"/>
+			</layout_panel>
+			<layout_panel name="chat_btn_lp">
+				<button label="Téléporter" name="teleport_btn" tool_tip="Proposer une téléportation"/>
+			</layout_panel>
+		</layout_stack>
+		<layout_stack name="bottom_bar_ls1">
+			<layout_panel name="group_info_btn_lp">
+				<button label="Profil du groupe" name="group_info_btn" tool_tip="Afficher les informations sur le groupe"/>
+			</layout_panel>
+			<layout_panel name="chat_btn_lp">
+				<button label="Chat de groupe" name="chat_btn" tool_tip="Ouvrir une session de chat"/>
+			</layout_panel>
+			<layout_panel name="group_call_btn_lp">
+				<button label="Appel de groupe" name="group_call_btn" tool_tip="Appeler ce groupe"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_pick_info.xml b/indra/newview/skins/default/xui/fr/panel_pick_info.xml
index 3ca1e9a21b..1de9b243f1 100644
--- a/indra/newview/skins/default/xui/fr/panel_pick_info.xml
+++ b/indra/newview/skins/default/xui/fr/panel_pick_info.xml
@@ -3,14 +3,22 @@
 	<text name="title" value="Infos"/>
 	<scroll_container name="profile_scroll">
 		<panel name="scroll_content_panel">
-			<text name="pick_name" value="[name]"/>
-			<text name="pick_location" value="[loading...]"/>
-			<text name="pick_desc" value="[description]"/>
+			<text_editor name="pick_name" value="[name]"/>
+			<text_editor name="pick_location" value="[loading...]"/>
+			<text_editor name="pick_desc" value="[description]"/>
 		</panel>
 	</scroll_container>
 	<panel name="buttons">
-		<button label="Téléporter" name="teleport_btn"/>
-		<button label="Carte" name="show_on_map_btn"/>
-		<button label="Modifier" name="edit_btn"/>
+		<layout_stack name="layout_stack1">
+			<layout_panel name="layout_panel1">
+				<button label="Téléportation" name="teleport_btn"/>
+			</layout_panel>
+			<layout_panel name="show_on_map_btn_lp">
+				<button label="Carte" name="show_on_map_btn"/>
+			</layout_panel>
+			<layout_panel name="edit_btn_lp">
+				<button label="Modifier" name="edit_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_picks.xml b/indra/newview/skins/default/xui/fr/panel_picks.xml
index 78acf929ba..fb277f653f 100644
--- a/indra/newview/skins/default/xui/fr/panel_picks.xml
+++ b/indra/newview/skins/default/xui/fr/panel_picks.xml
@@ -7,11 +7,23 @@
 		<accordion_tab name="tab_classifieds" title="Petites annonces"/>
 	</accordion>
 	<panel label="bottom_panel" name="edit_panel">
-		<button name="new_btn" tool_tip="Créer un nouveau favori ou une nouvelle petite annonce à l&apos;endroit actuel"/>
+		<layout_stack name="edit_panel_ls">
+			<layout_panel name="gear_menu_btn">
+				<button name="new_btn" tool_tip="Créer un nouveau favori ou une nouvelle petite annonce à l’endroit actuel"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 	<panel name="buttons_cucks">
-		<button label="Infos" name="info_btn" tool_tip="Afficher les informations du Favori"/>
-		<button label="Téléporter" name="teleport_btn" tool_tip="Me téléporter jusqu&apos;à la zone correspondante"/>
-		<button label="Carte" name="show_on_map_btn" tool_tip="Afficher la zone correspondante sur la carte du monde"/>
+		<layout_stack name="buttons_cucks_ls">
+			<layout_panel name="info_btn_lp">
+				<button label="Infos" name="info_btn" tool_tip="Afficher les informations du favori"/>
+			</layout_panel>
+			<layout_panel name="teleport_btn_lp">
+				<button label="Téléportation" name="teleport_btn" tool_tip="Me téléporter jusqu&apos;à la zone correspondante"/>
+			</layout_panel>
+			<layout_panel name="show_on_map_btn_lp">
+				<button label="Carte" name="show_on_map_btn" tool_tip="Afficher la zone correspondante sur la carte du monde"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_places.xml b/indra/newview/skins/default/xui/fr/panel_places.xml
index 52a69db23c..7f3601b90d 100644
--- a/indra/newview/skins/default/xui/fr/panel_places.xml
+++ b/indra/newview/skins/default/xui/fr/panel_places.xml
@@ -4,13 +4,45 @@
 	<string name="teleport_history_tab_title" value="HISTORIQUE DES TÉLÉP."/>
 	<filter_editor label="Filtrer les endroits" name="Filter"/>
 	<panel name="button_panel">
-		<button label="Téléporter" name="teleport_btn" tool_tip="Me téléporter jusqu&apos;à la zone sélectionnée"/>
-		<button label="Carte" name="map_btn" tool_tip="Afficher la zone correspondante sur la carte du monde"/>
-		<button label="Modifier" name="edit_btn" tool_tip="Modifier les informations du repère"/>
-		<button label="▼" name="overflow_btn" tool_tip="Afficher d&apos;autres options"/>
-		<button label="Enregistrer" name="save_btn"/>
-		<button label="Annuler" name="cancel_btn"/>
-		<button label="Fermer" name="close_btn"/>
-		<button label="Profil" name="profile_btn" tool_tip="Afficher le profil de l&apos;endroit"/>
+		<layout_stack name="bottom_bar_ls0">
+			<layout_panel name="lp1">
+				<layout_stack name="bottom_bar_ls1">
+					<layout_panel name="teleport_btn_lp">
+						<button label="Téléportation" name="teleport_btn" tool_tip="Me téléporter jusqu&apos;à la zone sélectionnée"/>
+					</layout_panel>
+					<layout_panel name="chat_btn_lp">
+						<button label="Carte" name="map_btn" tool_tip="Afficher la zone correspondante sur la carte du monde"/>
+					</layout_panel>
+				</layout_stack>
+			</layout_panel>
+			<layout_panel name="lp2">
+				<layout_stack name="bottom_bar_ls3">
+					<layout_panel name="edit_btn_lp">
+						<button label="Modifier" name="edit_btn" tool_tip="Modifier les informations du repère"/>
+					</layout_panel>
+					<layout_panel name="overflow_btn_lp">
+						<button label="▼" name="overflow_btn" tool_tip="Afficher d&apos;autres options"/>
+					</layout_panel>
+				</layout_stack>
+				<layout_stack name="bottom_bar_ls3">
+					<layout_panel name="profile_btn_lp">
+						<button label="Profil" name="profile_btn" tool_tip="Afficher le profil de l&apos;endroit"/>
+					</layout_panel>
+				</layout_stack>
+				<layout_stack name="bottom_bar_close_ls3">
+					<layout_panel name="close_btn_lp">
+						<button label="Fermer" name="close_btn"/>
+					</layout_panel>
+				</layout_stack>
+			</layout_panel>
+		</layout_stack>
+		<layout_stack name="bottom_bar_ls2">
+			<layout_panel name="save_btn_lp">
+				<button label="Enregistrer" name="save_btn"/>
+			</layout_panel>
+			<layout_panel name="cancel_btn_lp">
+				<button label="Annuler" name="cancel_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml b/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml
index ed1107f5e6..a482fa99d0 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml
@@ -56,27 +56,27 @@
 		<radio_item label="Plusieurs fenêtres" name="radio" value="0"/>
 		<radio_item label="Onglets" name="radio2" value="1"/>
 	</radio_group>
-		<check_box label="Traduire Chat" name="translate_chat_checkbox" />
+	<check_box label="Utiliser la traduction automatique lors des chats (fournie par Google)" name="translate_chat_checkbox"/>
 	<text name="translate_language_text">
-		Langue de chat :
+		Traduire le chat en :
 	</text>
 	<combo_box name="translate_language_combobox">
-		<combo_box.item name="System Default Language" label="Choix par défaut" />
-		<combo_box.item name="English" label="English (Anglais)" />
-		<combo_box.item name="Danish" label="Dansk (Danois)" />
-		<combo_box.item name="German" label="Deutsch (Allemand)" />
-		<combo_box.item name="Spanish" label="Español (Espagnol)" />
-		<combo_box.item name="French" label="Français" />
-		<combo_box.item name="Italian" label="Italiano (Italien)" />
-		<combo_box.item name="Hungarian" label="Magyar (Hongrois)" />
-		<combo_box.item name="Dutch" label="Nederlands (Néerlandais)" />
-		<combo_box.item name="Polish" label="Polski (Polonais)" />
-		<combo_box.item name="Portugese" label="Português (Portugais)" />
-		<combo_box.item name="Russian" label="Русский (Russe)" />
-		<combo_box.item name="Turkish" label="Türkçe (Turc)" />
-		<combo_box.item name="Ukrainian" label="Українська (Ukrainien)" />
-		<combo_box.item name="Chinese" label="中文 (简体) (Chinois)" />
-		<combo_box.item name="Japanese" label="日本語 (Japonais)" />
-		<combo_box.item name="Korean" label="한국어 (Coréen)" />
+		<combo_box.item label="Choix par défaut" name="System Default Language"/>
+		<combo_box.item label="English (Anglais)" name="English"/>
+		<combo_box.item label="Dansk (Danois)" name="Danish"/>
+		<combo_box.item label="Deutsch (Allemand)" name="German"/>
+		<combo_box.item label="Español (Espagnol)" name="Spanish"/>
+		<combo_box.item label="Français" name="French"/>
+		<combo_box.item label="Italiano (Italien)" name="Italian"/>
+		<combo_box.item label="Magyar (Hongrois)" name="Hungarian"/>
+		<combo_box.item label="Nederlands (Néerlandais)" name="Dutch"/>
+		<combo_box.item label="Polski (Polonais)" name="Polish"/>
+		<combo_box.item label="Português (Portugais)" name="Portugese"/>
+		<combo_box.item label="Русский (Russe)" name="Russian"/>
+		<combo_box.item label="Türkçe (Turc)" name="Turkish"/>
+		<combo_box.item label="Українська (Ukrainien)" name="Ukrainian"/>
+		<combo_box.item label="中文 (简体) (Chinois)" name="Chinese"/>
+		<combo_box.item label="日本語 (Japonais)" name="Japanese"/>
+		<combo_box.item label="한국어 (Coréen)" name="Korean"/>
 	</combo_box>
 </panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml
index 23dc2f6e89..0c8d957f5b 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml
@@ -28,22 +28,16 @@
 		<check_box initial_value="true" label="Placage de relief et brillance" name="BumpShiny"/>
 		<check_box initial_value="true" label="Effets de base" name="BasicShaders" tool_tip="La désactivation de cette option peut éviter le plantage de certains pilotes de cartes graphiques"/>
 		<check_box initial_value="true" label="Effets atmosphériques" name="WindLightUseAtmosShaders"/>
-		<check_box initial_value="true" label="Reflets dans l&apos;eau" name="Reflections"/>
-		<text name="ReflectionDetailText">
-			Objets reflétés :
+		<text name="reflection_label">
+			Reflets dans l&apos;eau :
 		</text>
-		<radio_group name="ReflectionDetailRadio">
-			<radio_item label="Terrain et arbres" name="0"/>
-			<radio_item label="Tous les objets statiques" name="1"/>
-			<radio_item label="Tous les objets et avatars" name="2"/>
-			<radio_item label="Tout" name="3"/>
-		</radio_group>
-		<text name="AvatarRenderingText">
-			Rendu de l&apos;avatar :
-		</text>
-		<check_box initial_value="true" label="Avatars éloignés en 2D" name="AvatarImpostors"/>
-		<check_box initial_value="true" label="Accélération du rendu" name="AvatarVertexProgram"/>
-		<check_box initial_value="true" label="Mouvement des habits" name="AvatarCloth"/>
+		<combo_box initial_value="true" label="Reflets dans l&apos;eau" name="Reflections">
+			<combo_box.item label="Minimes" name="0"/>
+			<combo_box.item label="Terrain et arbres" name="1"/>
+			<combo_box.item label="Tous les objets statiques" name="2"/>
+			<combo_box.item label="Tous les objets et avatars" name="3"/>
+			<combo_box.item label="Tout" name="4"/>
+		</combo_box>
 		<slider label="Limite d&apos;affichage :" name="DrawDistance"/>
 		<text name="DrawDistanceMeterText2">
 			m
@@ -81,13 +75,12 @@
 		<text name="SkyMeshDetailText">
 			Faible
 		</text>
-		<text name="LightingDetailText">
-			Sources lumineuses :
+		<text name="AvatarRenderingText">
+			Rendu de l&apos;avatar :
 		</text>
-		<radio_group name="LightingDetailRadio">
-			<radio_item label="Soleil et lune uniquement" name="SunMoon" value="0"/>
-			<radio_item label="Lumières à proximité" name="LocalLights" value="1"/>
-		</radio_group>
+		<check_box initial_value="true" label="Avatars éloignés en 2D" name="AvatarImpostors"/>
+		<check_box initial_value="true" label="Accélération du rendu" name="AvatarVertexProgram"/>
+		<check_box initial_value="true" label="Mouvement des habits" name="AvatarCloth"/>
 		<text left="380" name="TerrainDetailText">
 			Rendu du terrain :
 		</text>
@@ -95,6 +88,7 @@
 			<radio_item label="Bas" name="0"/>
 			<radio_item label="Haut" name="2"/>
 		</radio_group>
+		--&gt;
 	</panel>
 	<button label="Appliquer" label_selected="Appliquer" name="Apply"/>
 	<button label="Réinitialiser" name="Defaults"/>
diff --git a/indra/newview/skins/default/xui/fr/panel_profile.xml b/indra/newview/skins/default/xui/fr/panel_profile.xml
index f1c12c9fee..4606f5a0c6 100644
--- a/indra/newview/skins/default/xui/fr/panel_profile.xml
+++ b/indra/newview/skins/default/xui/fr/panel_profile.xml
@@ -40,17 +40,29 @@
 				</panel>
 			</scroll_container>
 		</layout_panel>
+	</layout_stack>
+	<layout_stack name="layout_verb_buttons">
 		<layout_panel name="profile_buttons_panel">
-			<button label="Devenir amis" name="add_friend" tool_tip="Proposer à un résident de devenir votre ami"/>
-			<button label="IM" name="im" tool_tip="Ouvrir une session IM"/>
-			<button label="Appeler" name="call" tool_tip="Appeler ce résident"/>
-			<button label="Carte" name="show_on_map_btn" tool_tip="Afficher le résident sur la carte"/>
-			<button label="Téléporter" name="teleport" tool_tip="Proposer une téléportation"/>
-			<button label="▼" name="overflow_btn" tool_tip="Payer ou partager l&apos;inventaire avec le résident"/>
+			<layout_stack name="bottom_bar_ls">
+				<layout_panel name="add_friend_btn_lp">
+					<button label="Devenir amis" name="add_friend" tool_tip="Proposer à ce résident de devenir votre ami"/>
+				</layout_panel>
+				<layout_panel name="im_btn_lp">
+					<button label="IM" name="im" tool_tip="Ouvrir une session IM"/>
+				</layout_panel>
+				<layout_panel name="call_btn_lp">
+					<button label="Appeler" name="call" tool_tip="Appeler ce résident"/>
+				</layout_panel>
+				<layout_panel name="chat_btn_lp">
+					<button label="Téléporter" name="teleport" tool_tip="Proposer une téléportation"/>
+				</layout_panel>
+				<layout_panel name="overflow_btn_lp">
+					<button label="▼" name="overflow_btn" tool_tip="Payer le résident ou partager l&apos;inventaire avec lui"/>
+				</layout_panel>
+			</layout_stack>
 		</layout_panel>
 		<layout_panel name="profile_me_buttons_panel">
 			<button label="Modifier le profil" name="edit_profile_btn" tool_tip="Modifier vos informations personnelles"/>
-			<button label="Changer d&apos;apparence" name="edit_appearance_btn" tool_tip="Créer/modifier votre apparence : données physiques, habits, etc."/>
 		</layout_panel>
 	</layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_side_tray_tab_caption.xml b/indra/newview/skins/default/xui/fr/panel_side_tray_tab_caption.xml
index 2899f630f4..45efbdc980 100644
--- a/indra/newview/skins/default/xui/fr/panel_side_tray_tab_caption.xml
+++ b/indra/newview/skins/default/xui/fr/panel_side_tray_tab_caption.xml
@@ -1,5 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="sidetray_tab_panel">
 	<text name="sidetray_tab_title" value="Panneau latéral"/>
+	<button name="undock" tool_tip="Détacher"/>
+	<button name="dock" tool_tip="Attacher"/>
 	<button name="show_help" tool_tip="Afficher l&apos;aide"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/fr/sidepanel_inventory.xml b/indra/newview/skins/default/xui/fr/sidepanel_inventory.xml
index ebee1af45b..3c4d2626c1 100644
--- a/indra/newview/skins/default/xui/fr/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/fr/sidepanel_inventory.xml
@@ -2,12 +2,20 @@
 <panel label="Choses" name="objects panel">
 	<panel label="" name="sidepanel__inventory_panel">
 		<panel name="button_panel">
-			<button label="Profil" name="info_btn" tool_tip="Afficher le profil de l&apos;objet"/>
-			<button label="Partager" name="share_btn" tool_tip="Partager un article de l&apos;inventaire"/>
-			<button label="Acheter" name="shop_btn" tool_tip="Accéder à la place du marché sur le Web"/>
-			<button label="Porter" name="wear_btn" tool_tip="Porter la tenue sélectionnée"/>
-			<button label="Jouer" name="play_btn"/>
-			<button label="Téléporter" name="teleport_btn" tool_tip="Me téléporter jusqu&apos;à la zone sélectionnée"/>
+			<layout_stack name="button_panel_ls">
+				<layout_panel name="info_btn_lp">
+					<button label="Profil" name="info_btn" tool_tip="Afficher le profil de l&apos;article"/>
+				</layout_panel>
+				<layout_panel name="share_btn_lp">
+					<button label="Partager" name="share_btn" tool_tip="Partager un article de l&apos;inventaire"/>
+				</layout_panel>
+				<layout_panel name="shop_btn_lp">
+					<button label="Acheter" name="shop_btn" tool_tip="Accéder à la place du marché sur le Web"/>
+					<button label="Porter" name="wear_btn" tool_tip="Porter la tenue sélectionnée"/>
+					<button label="Lire" name="play_btn"/>
+					<button label="Téléportation" name="teleport_btn" tool_tip="Me téléporter jusqu&apos;à la zone sélectionnée"/>
+				</layout_panel>
+			</layout_stack>
 		</panel>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/fr/sidepanel_item_info.xml b/indra/newview/skins/default/xui/fr/sidepanel_item_info.xml
index 77c6f4877c..95649d3934 100644
--- a/indra/newview/skins/default/xui/fr/sidepanel_item_info.xml
+++ b/indra/newview/skins/default/xui/fr/sidepanel_item_info.xml
@@ -23,56 +23,53 @@
 	</panel.string>
 	<text name="title" value="Profil de l&apos;article"/>
 	<text name="origin" value="(inventaire)"/>
-	<panel label="" name="item_profile">
-		<text name="LabelItemNameTitle">
-			Nom :
-		</text>
-		<text name="LabelItemDescTitle">
-			Description :
-		</text>
-		<text name="LabelCreatorTitle">
-			Créateur :
-		</text>
-		<text name="LabelCreatorName"/>
-		<button label="Profil" name="BtnCreator"/>
-		<text name="LabelOwnerTitle">
-			Propriétaire :
-		</text>
-		<text name="LabelOwnerName"/>
-		<button label="Profil" name="BtnOwner"/>
-		<text name="LabelAcquiredTitle">
-			Acquis le :
-		</text>
-		<text name="LabelAcquiredDate"/>
-		<panel name="perms_inv">
-			<text name="perm_modify">
-				Vous pouvez :
+	<scroll_container name="item_profile_scroll">
+		<panel label="" name="item_profile">
+			<text name="LabelItemNameTitle">
+				Nom :
 			</text>
-			<check_box label="Modifier" name="CheckOwnerModify"/>
-			<check_box label="Copier" name="CheckOwnerCopy"/>
-			<check_box label="Transférer" name="CheckOwnerTransfer"/>
-			<text name="AnyoneLabel">
-				N&apos;importe qui :
+			<text name="LabelItemDescTitle">
+				Description :
 			</text>
-			<check_box label="Copier" name="CheckEveryoneCopy"/>
-			<text name="GroupLabel">
-				Groupe :
+			<text name="LabelCreatorTitle">
+				Créateur :
 			</text>
-			<check_box label="Partager" name="CheckShareWithGroup" tool_tip="Autoriser tous les membres du groupe choisi à partager vos droits de modification pour cet objet. Pour activer les restrictions de rôles, vous devez d&apos;abord cliquer sur Céder."/>
-			<text name="NextOwnerLabel">
-				Prochain propriétaire :
+			<text name="LabelOwnerTitle">
+				Propriétaire :
 			</text>
-			<check_box label="Modifier" name="CheckNextOwnerModify"/>
-			<check_box label="Copier" name="CheckNextOwnerCopy"/>
-			<check_box label="Transférer" name="CheckNextOwnerTransfer" tool_tip="Le prochain propriétaire peut donner ou revendre cet objet."/>
+			<text name="LabelAcquiredTitle">
+				Acquis le :
+			</text>
+			<panel name="perms_inv">
+				<text name="perm_modify">
+					Vous pouvez :
+				</text>
+				<check_box label="Modifier" name="CheckOwnerModify"/>
+				<check_box label="Copier" name="CheckOwnerCopy"/>
+				<check_box label="Transférer" name="CheckOwnerTransfer"/>
+				<text name="AnyoneLabel">
+					N&apos;importe qui :
+				</text>
+				<check_box label="Copier" name="CheckEveryoneCopy"/>
+				<text name="GroupLabel">
+					Groupe :
+				</text>
+				<check_box label="Partager" name="CheckShareWithGroup" tool_tip="Autoriser tous les membres du groupe choisi à partager vos droits de modification pour cet objet. Pour activer les restrictions de rôles, vous devez d&apos;abord cliquer sur Céder."/>
+				<text name="NextOwnerLabel">
+					Prochain propriétaire :
+				</text>
+				<check_box label="Modifier" name="CheckNextOwnerModify"/>
+				<check_box label="Copier" name="CheckNextOwnerCopy"/>
+				<check_box label="Transférer" name="CheckNextOwnerTransfer" tool_tip="Le prochain propriétaire peut donner ou revendre cet objet."/>
+			</panel>
+			<check_box label="À vendre" name="CheckPurchase"/>
+			<combo_box name="combobox sale copy">
+				<combo_box.item label="Copier" name="Copy"/>
+				<combo_box.item label="Original" name="Original"/>
+			</combo_box>
+			<spinner label="Prix : L$" name="Edit Cost"/>
 		</panel>
-		<check_box label="À vendre" name="CheckPurchase"/>
-		<combo_box name="combobox sale copy">
-			<combo_box.item label="Copier" name="Copy"/>
-			<combo_box.item label="Original" name="Original"/>
-		</combo_box>
-		<spinner label="Prix : L$" name="Edit Cost"/>
-	</panel>
+	</scroll_container>
 	<panel name="button_panel">
 		<button label="Annuler" name="cancel_btn"/>
 	</panel>
diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml
index 159281f97f..a7a766f6a6 100644
--- a/indra/newview/skins/default/xui/fr/strings.xml
+++ b/indra/newview/skins/default/xui/fr/strings.xml
@@ -1294,6 +1294,9 @@
 	<string name="Right Pec">
 		Pectoral droit
 	</string>
+	<string name="Invalid Attachment">
+		Point d&apos;attache non valide
+	</string>
 	<string name="YearsMonthsOld">
 		[AGEYEARS] [AGEMONTHS]
 	</string>
@@ -1671,9 +1674,6 @@
 	<string name="ATTACH_HUD_BOTTOM_RIGHT">
 		HUD en bas à droite
 	</string>
-	<string name="Bad attachment point">
-		Point d&apos;attache non valide
-	</string>
 	<string name="CursorPos">
 		Ligne [LINE], colonne [COLUMN]
 	</string>
@@ -1695,12 +1695,6 @@
 	<string name="BusyModeResponseDefault">
 		Le résident auquel vous avez envoyé un message est en mode Occupé, ce qui signifie qu&apos;il a demandé à ne pas être dérangé.  Votre message restera affiché dans son panneau IM afin qu&apos;il puisse le lire ultérieurement.
 	</string>
-	<string name="NoOutfits">
-		Aucune tenue n&apos;est actuellement en votre possession. Essayez [secondlife:///app/search/all Rechercher].
-	</string>
-	<string name="NoOutfitsTabsMatched">
-		Vous n&apos;avez pas trouvé ce que vous cherchiez ? Essayez [secondlife:///app/search/all/Rechercher [SEARCH_TERM]].
-	</string>
 	<string name="MuteByName">
 		(par nom)
 	</string>
@@ -1741,7 +1735,7 @@
 		Vous n&apos;avez pas créé de favoris ni de petites annonces Cliquez sur le bouton Plus pour créer un favori ou une petite annonce.
 	</string>
 	<string name="NoAvatarPicksClassifiedsText">
-		L&apos;utilisateur n&apos;a ni favoris ni petites annonces
+		L&apos;utilisateur n&apos;a ni favoris ni petites annonces.
 	</string>
 	<string name="PicksClassifiedsLoadingText">
 		Chargement...
@@ -1864,6 +1858,12 @@
 	<string name="accel-win-shift">
 		Maj+
 	</string>
+	<string name="Esc">
+		Échap
+	</string>
+	<string name="Home">
+		Début
+	</string>
 	<string name="FileSaved">
 		Fichier enregistré
 	</string>
@@ -3528,6 +3528,9 @@ Si ce message persiste, veuillez aller sur la page [SUPPORT_SITE].
 	<string name="IM_moderator_label">
 		(Modérateur)
 	</string>
+	<string name="Saved_message">
+		(Enregistrement : [LONG_TIMESTAMP])
+	</string>
 	<string name="answered_call">
 		Votre appel a fait l&apos;objet d&apos;une réponse
 	</string>
@@ -3555,12 +3558,18 @@ Si ce message persiste, veuillez aller sur la page [SUPPORT_SITE].
 	<string name="conference-title">
 		Conférence ad-hoc
 	</string>
+	<string name="conference-title-incoming">
+		Conférence avec [AGENT_NAME]
+	</string>
 	<string name="inventory_item_offered-im">
 		Objet de l&apos;inventaire offert
 	</string>
 	<string name="share_alert">
 		Faire glisser les objets de l&apos;inventaire ici
 	</string>
+	<string name="no_session_message">
+		(Session IM inexistante)
+	</string>
 	<string name="only_user_message">
 		Vous êtes le seul participant à cette session.
 	</string>
@@ -3945,4 +3954,13 @@ de l&apos;infraction signalée
 	<string name="Chat">
 		Chat
 	</string>
+	<string name="DeleteItems">
+		Supprimer les articles sélectionnés ?
+	</string>
+	<string name="DeleteItem">
+		Supprimer l&apos;article sélectionné ?
+	</string>
+	<string name="EmptyOutfitText">
+		Cette tenue ne contient aucun article.
+	</string>
 </strings>
-- 
cgit v1.2.3


From 8c493584c7dc6924785a83eb14fec28ccdcb7a54 Mon Sep 17 00:00:00 2001
From: Eli Linden <eli@lindenlab.com>
Date: Mon, 11 Oct 2010 13:03:44 -0700
Subject: CT-575 WIP FR translation for set18, new file

---
 indra/newview/skins/default/xui/fr/menu_add_wearable_gear.xml | 6 ++++++
 1 file changed, 6 insertions(+)
 create mode 100644 indra/newview/skins/default/xui/fr/menu_add_wearable_gear.xml

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/fr/menu_add_wearable_gear.xml b/indra/newview/skins/default/xui/fr/menu_add_wearable_gear.xml
new file mode 100644
index 0000000000..7e7993175e
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_add_wearable_gear.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Add Wearable Gear Menu">
+	<menu_item_check label="Trier en commençant par le plus récent" name="sort_by_most_recent"/>
+	<menu_item_check label="Trier par nom" name="sort_by_name"/>
+	<menu_item_check label="Trier par type" name="sort_by_type"/>
+</menu>
-- 
cgit v1.2.3


From 1d08fa4cd72c17dfbe7906fa8f5e2bc44d0fb7cd Mon Sep 17 00:00:00 2001
From: leyla_linden <none@none>
Date: Mon, 11 Oct 2010 14:01:30 -0700
Subject: DN-162 Green - shown in local chat after name if View Display Names
 setting is off with Show User Names setting on.

---
 indra/newview/llchathistory.cpp | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index f28e02c66e..378c4358b3 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -367,15 +367,15 @@ public:
 		user_name->setValue( LLSD(av_name.mDisplayName ) );
 		user_name->setToolTip( av_name.mUsername );
 
-		if (gSavedSettings.getBOOL("NameTagShowUsernames"))
-		{
-		LLStyle::Params style_params_name;
-		LLColor4 userNameColor = LLUIColorTable::instance().getColor("EmphasisColor");
-		style_params_name.color(userNameColor);
-		style_params_name.font.name("SansSerifSmall");
-		style_params_name.font.style("NORMAL");
-		style_params_name.readonly_color(userNameColor);
-		user_name->appendText("  - " + av_name.mUsername, FALSE, style_params_name);
+		if (gSavedSettings.getBOOL("NameTagShowUsernames") && LLAvatarNameCache::useDisplayNames())
+		{
+			LLStyle::Params style_params_name;
+			LLColor4 userNameColor = LLUIColorTable::instance().getColor("EmphasisColor");
+			style_params_name.color(userNameColor);
+			style_params_name.font.name("SansSerifSmall");
+			style_params_name.font.style("NORMAL");
+			style_params_name.readonly_color(userNameColor);
+			user_name->appendText("  - " + av_name.mUsername, FALSE, style_params_name);
 		}
 		setToolTip( av_name.mUsername );
 		// name might have changed, update width
-- 
cgit v1.2.3


From f01ba3cf29b45ed312cc7f383a60819b1a8026c6 Mon Sep 17 00:00:00 2001
From: leyla_linden <none@none>
Date: Mon, 11 Oct 2010 14:03:14 -0700
Subject: DN-161 Display Name and Username labels shown in profiles when View
 Display Names setting is off and when Display Names disabled on Simulator
 DN-163 Set display name error if user changes View Display Name setting to
 off in preferences with Edit profile panel open

---
 indra/newview/llpanelme.cpp                        | 41 +++++++++++++++++++---
 indra/newview/llpanelprofileview.cpp               | 16 +++++++++
 .../skins/default/xui/en/panel_edit_profile.xml    |  2 +-
 .../skins/default/xui/en/panel_profile_view.xml    |  2 +-
 4 files changed, 54 insertions(+), 7 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llpanelme.cpp b/indra/newview/llpanelme.cpp
index 9a13d00685..f587923269 100644
--- a/indra/newview/llpanelme.cpp
+++ b/indra/newview/llpanelme.cpp
@@ -176,6 +176,8 @@ LLPanelMyProfileEdit::LLPanelMyProfileEdit()
 	buildFromFile( "panel_edit_profile.xml");
 
 	setAvatarId(gAgent.getID());
+
+	LLAvatarNameCache::addUseDisplayNamesCallback(boost::bind(&LLPanelMyProfileEdit::onAvatarNameChanged, this));
 }
 
 void LLPanelMyProfileEdit::onOpen(const LLSD& key)
@@ -186,11 +188,6 @@ void LLPanelMyProfileEdit::onOpen(const LLSD& key)
 	// is loaded.
 	enableEditing(false);
 
-	// Only allow changing name if this region/grid supports it
-	bool use_display_names = LLAvatarNameCache::useDisplayNames();
-	LLUICtrl* set_name = getChild<LLUICtrl>("set_name");
-	set_name->setVisible(use_display_names);
-	set_name->setEnabled(use_display_names);
 	// force new avatar name fetch so we have latest update time
 	LLAvatarNameCache::fetch(gAgent.getID()); 
 	LLPanelMyProfile::onOpen(getAvatarId());
@@ -207,6 +204,23 @@ void LLPanelMyProfileEdit::onOpen(const LLSD& key)
 			LLFirstUse::setDisplayName(false);
 		}
 	}
+
+	if (LLAvatarNameCache::useDisplayNames())
+	{
+		getChild<LLUICtrl>("user_label")->setVisible( true );
+		getChild<LLUICtrl>("user_slid")->setVisible( true );
+		getChild<LLUICtrl>("display_name_label")->setVisible( true );
+		getChild<LLUICtrl>("set_name")->setVisible( true );
+		getChild<LLUICtrl>("set_name")->setEnabled( true );
+	}
+	else
+	{
+		getChild<LLUICtrl>("user_label")->setVisible( false );
+		getChild<LLUICtrl>("user_slid")->setVisible( false );
+		getChild<LLUICtrl>("display_name_label")->setVisible( false );
+		getChild<LLUICtrl>("set_name")->setVisible( false );
+		getChild<LLUICtrl>("set_name")->setEnabled( false );
+	}
 }
 
 void LLPanelMyProfileEdit::onClose(const LLSD& key)
@@ -267,10 +281,27 @@ void LLPanelMyProfileEdit::onNameCache(const LLUUID& agent_id, const LLAvatarNam
 	{
 		getChild<LLUICtrl>("user_name_small")->setVisible( false );
 		getChild<LLUICtrl>("user_name")->setVisible( true );
+	}
 
+	if (LLAvatarNameCache::useDisplayNames())
+	{
+		getChild<LLUICtrl>("user_label")->setVisible( true );
+		getChild<LLUICtrl>("user_slid")->setVisible( true );
+		getChild<LLUICtrl>("display_name_label")->setVisible( true );
+		getChild<LLUICtrl>("set_name")->setVisible( true );
+		getChild<LLUICtrl>("set_name")->setEnabled( true );
+	}
+	else
+	{
+		getChild<LLUICtrl>("user_label")->setVisible( false );
+		getChild<LLUICtrl>("user_slid")->setVisible( false );
+		getChild<LLUICtrl>("display_name_label")->setVisible( false );
+		getChild<LLUICtrl>("set_name")->setVisible( false );
+		getChild<LLUICtrl>("set_name")->setEnabled( false );
 	}
 }
 
+
 void LLPanelMyProfileEdit::onAvatarNameChanged()
 {
 	LLAvatarNameCache::get(getAvatarId(),
diff --git a/indra/newview/llpanelprofileview.cpp b/indra/newview/llpanelprofileview.cpp
index 2c4270090c..9011583a60 100644
--- a/indra/newview/llpanelprofileview.cpp
+++ b/indra/newview/llpanelprofileview.cpp
@@ -225,6 +225,22 @@ void LLPanelProfileView::onAvatarNameCache(const LLUUID& agent_id,
 
 	}
 
+	if (LLAvatarNameCache::useDisplayNames())
+	{
+		getChild<LLUICtrl>("user_label")->setVisible( true );
+		getChild<LLUICtrl>("user_slid")->setVisible( true );
+		getChild<LLUICtrl>("display_name_label")->setVisible( true );
+		getChild<LLUICtrl>("copy_to_clipboard")->setVisible( true );
+		getChild<LLUICtrl>("copy_to_clipboard")->setEnabled( true );
+	}
+	else
+	{
+		getChild<LLUICtrl>("user_label")->setVisible( false );
+		getChild<LLUICtrl>("user_slid")->setVisible( false );
+		getChild<LLUICtrl>("display_name_label")->setVisible( false );
+		getChild<LLUICtrl>("copy_to_clipboard")->setVisible( false );
+		getChild<LLUICtrl>("copy_to_clipboard")->setEnabled( false );
+	}
 }
 
 // EOF
diff --git a/indra/newview/skins/default/xui/en/panel_edit_profile.xml b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
index cf075b8aae..a863f1cc56 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
@@ -93,7 +93,7 @@
      height="13"
      layout="topleft"
      left="10"
-     name="user_label"
+     name="display_name_label"
      text_color="LtGray"
      value="Display Name:"
      width="80" />
diff --git a/indra/newview/skins/default/xui/en/panel_profile_view.xml b/indra/newview/skins/default/xui/en/panel_profile_view.xml
index 406ec775a5..dc5173867b 100644
--- a/indra/newview/skins/default/xui/en/panel_profile_view.xml
+++ b/indra/newview/skins/default/xui/en/panel_profile_view.xml
@@ -34,7 +34,7 @@
    height="13"
    layout="topleft"
    left="45"
-   name="user_label"
+   name="display_name_label"
    text_color="LtGray"
    value="Display Name:"
    width="80" />
-- 
cgit v1.2.3


From 3a4e38efa6547a989b19f3fb1195901571884f87 Mon Sep 17 00:00:00 2001
From: Loren Shih <seraph@lindenlab.com>
Date: Mon, 11 Oct 2010 17:37:59 -0400
Subject: SH-280 FIXED Anti-aliasing broken SH-287 FIXED Anti-aliasing setting
 does not take effect until relog

Added logic to control RenderUseFBO setting based on graphics quality.  RenderUseFBO controls whether anti-aliasing is enabled.
---
 indra/newview/featuretable.txt              | 11 +++++++----
 indra/newview/featuretable_linux.txt        | 10 ++++++----
 indra/newview/featuretable_mac.txt          |  6 ++++++
 indra/newview/featuretable_solaris.txt      |  6 ++++++
 indra/newview/featuretable_xp.txt           |  9 ++++++---
 indra/newview/llfloaterhardwaresettings.cpp |  8 +++++++-
 indra/newview/pipeline.cpp                  |  5 +++++
 indra/newview/pipeline.h                    |  1 +
 8 files changed, 44 insertions(+), 12 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/featuretable.txt b/indra/newview/featuretable.txt
index e3fc9d4949..f8adc15edc 100644
--- a/indra/newview/featuretable.txt
+++ b/indra/newview/featuretable.txt
@@ -61,6 +61,7 @@ RenderDeferredSSAO			1	0
 RenderShadowDetail			1	0
 WatchdogDisabled				1	1
 RenderUseStreamVBO			1	1
+RenderUseFBO				1	1
 
 //
 // Low Graphics Settings
@@ -89,7 +90,7 @@ SkyUseClassicClouds			1	0
 RenderDeferred				1	0
 RenderDeferredSSAO			1	0
 RenderShadowDetail			1	0
-
+RenderUseFBO				1	0
 
 //
 // Mid Graphics Settings
@@ -116,7 +117,7 @@ WLSkyDetail					1	48
 RenderDeferred				1	0
 RenderDeferredSSAO			1	0
 RenderShadowDetail			1	0
-
+RenderUseFBO				1	0
 
 //
 // High Graphics Settings (purty)
@@ -143,7 +144,7 @@ WLSkyDetail					1	48
 RenderDeferred				1	0
 RenderDeferredSSAO			1	0
 RenderShadowDetail			1	0
-
+RenderUseFBO				1	1
 
 //
 // Ultra graphics (REALLY PURTY!)
@@ -170,6 +171,7 @@ WLSkyDetail					1	128
 RenderDeferred				1	0
 RenderDeferredSSAO			1	0
 RenderShadowDetail			1	0
+RenderUseFBO				1	1
 
 //
 // Class Unknown Hardware (unknown)
@@ -244,7 +246,8 @@ WindLightUseAtmosShaders	0	0
 RenderDeferred				0	0
 RenderDeferredSSAO			0	0
 RenderShadowDetail			0	0
-
+RenderUseFBO				1	0
+		
 //
 // CPU based feature masks
 //
diff --git a/indra/newview/featuretable_linux.txt b/indra/newview/featuretable_linux.txt
index 1bad7e5260..4a99280b06 100644
--- a/indra/newview/featuretable_linux.txt
+++ b/indra/newview/featuretable_linux.txt
@@ -60,6 +60,7 @@ RenderDeferred				1	0
 RenderDeferredSSAO			1	0
 RenderShadowDetail			1	0
 WatchdogDisabled				1	1
+RenderUseFBO				1	1
 
 //
 // Low Graphics Settings
@@ -88,7 +89,7 @@ SkyUseClassicClouds			1	0
 RenderDeferred				1	0
 RenderDeferredSSAO			1	0
 RenderShadowDetail			1	0
-
+RenderUseFBO				1	0
 
 //
 // Mid Graphics Settings
@@ -115,7 +116,7 @@ WLSkyDetail					1	48
 RenderDeferred				1	0
 RenderDeferredSSAO			1	0
 RenderShadowDetail			1	0
-
+RenderUseFBO				1	0
 
 //
 // High Graphics Settings (purty)
@@ -142,7 +143,7 @@ WLSkyDetail					1	48
 RenderDeferred				1	0
 RenderDeferredSSAO			1	0
 RenderShadowDetail			1	0
-
+RenderUseFBO				1	1
 
 //
 // Ultra graphics (REALLY PURTY!)
@@ -169,7 +170,7 @@ WLSkyDetail					1	128
 RenderDeferred				1	0
 RenderDeferredSSAO			1	0
 RenderShadowDetail			1	0
-
+RenderUseFBO				1	1
 
 //
 // Class Unknown Hardware (unknown)
@@ -244,6 +245,7 @@ WindLightUseAtmosShaders	0	0
 RenderDeferred				0	0
 RenderDeferredSSAO			0	0
 RenderShadowDetail			0	0
+RenderUseFBO				1	0
 
 
 //
diff --git a/indra/newview/featuretable_mac.txt b/indra/newview/featuretable_mac.txt
index 4fba47e3df..67cace7268 100644
--- a/indra/newview/featuretable_mac.txt
+++ b/indra/newview/featuretable_mac.txt
@@ -60,6 +60,7 @@ Disregard128DefaultDrawDistance	1	1
 Disregard96DefaultDrawDistance	1	1
 SkyUseClassicClouds			1	1
 WatchdogDisabled				1	1
+RenderUseFBO				1	1
 
 //
 // Low Graphics Settings
@@ -87,6 +88,7 @@ VertexShaderEnable			1	0
 WindLightUseAtmosShaders	1	0
 WLSkyDetail					1	48
 SkyUseClassicClouds			1	0
+RenderUseFBO				1	0
 
 //
 // Mid Graphics Settings
@@ -112,6 +114,7 @@ RenderWaterReflections		1	0
 VertexShaderEnable			1	1
 WindLightUseAtmosShaders	1	0
 WLSkyDetail					1	48
+RenderUseFBO				1	0
 
 //
 // High Graphics Settings (purty)
@@ -137,6 +140,7 @@ RenderWaterReflections		1	0
 VertexShaderEnable			1	1
 WindLightUseAtmosShaders	1	1
 WLSkyDetail					1	48
+RenderUseFBO				1	1
 
 //
 // Ultra graphics (REALLY PURTY!)
@@ -162,6 +166,7 @@ RenderWaterReflections		1	1
 VertexShaderEnable			1	1
 WindLightUseAtmosShaders	1	1
 WLSkyDetail					1	128
+RenderUseFBO				1	1
 
 //
 // Class Unknown Hardware (unknown)
@@ -227,6 +232,7 @@ RenderUseImpostors			0	0
 RenderVBOEnable				1	0
 RenderWaterReflections		0	0
 WindLightUseAtmosShaders	0	0
+RenderUseFBO				1	0
 
 //
 // CPU based feature masks
diff --git a/indra/newview/featuretable_solaris.txt b/indra/newview/featuretable_solaris.txt
index 0ae463332c..7df75687f2 100644
--- a/indra/newview/featuretable_solaris.txt
+++ b/indra/newview/featuretable_solaris.txt
@@ -38,6 +38,7 @@ RenderTextureMemoryMultiple		1	1.0
 UseOcclusion		1       1
 RenderCubeMap		1       1
 WatchdogDisabled				1	1
+RenderUseFBO				1	1
 
 
 //
@@ -52,6 +53,7 @@ RenderAvatarMode	1	0
 RenderLighting		1	0
 RenderObjectBump	1	0
 RenderRippleWater	1	0
+RenderUseFBO		1	0
 
 //
 // Class 1 Hardware
@@ -65,6 +67,7 @@ RenderAvatarMode	1	0
 RenderLighting		1	0
 RenderObjectBump	1	0
 RenderRippleWater	1	0
+RenderUseFBO		1	0
 
 //
 // Class 2 Hardware (make it purty)
@@ -76,6 +79,7 @@ RenderAvatarMode	1	1
 RenderLighting		1	1
 RenderObjectBump	1	1
 RenderRippleWater	1	1
+RenderUseFBO		1	1
 
 //
 // Class 3 Hardware (make it purty)
@@ -87,6 +91,7 @@ RenderAvatarMode	1	1
 RenderLighting		1	1
 RenderObjectBump	1	1
 RenderRippleWater	1	1
+RenderUseFBO		1	1
 
 //
 // No Pixel Shaders available
@@ -114,6 +119,7 @@ RenderParticleCount	1	1024
 RenderTerrainDetail 1	0
 RenderCubeMap		0	0
 UseOcclusion		0	0
+RenderUseFBO		1	0
 
 
 list low
diff --git a/indra/newview/featuretable_xp.txt b/indra/newview/featuretable_xp.txt
index 9b901022c4..1e83bc73a5 100644
--- a/indra/newview/featuretable_xp.txt
+++ b/indra/newview/featuretable_xp.txt
@@ -59,6 +59,7 @@ SkyUseClassicClouds			1	1
 RenderDeferred				1	0
 RenderDeferredSSAO			1	0
 RenderShadowDetail			1	0
+RenderUseFBO				1	1
 WatchdogDisabled				1	1
 RenderUseStreamVBO			1	1
 
@@ -89,7 +90,7 @@ SkyUseClassicClouds			1	0
 RenderDeferred				1	0
 RenderDeferredSSAO			1	0
 RenderShadowDetail			1	0
-
+RenderUseFBO				1	0
 
 //
 // Mid Graphics Settings
@@ -116,7 +117,7 @@ WLSkyDetail					1	48
 RenderDeferred				1	0
 RenderDeferredSSAO			1	0
 RenderShadowDetail			1	0
-
+RenderUseFBO				1	0
 
 //
 // High Graphics Settings (purty)
@@ -143,7 +144,7 @@ WLSkyDetail					1	48
 RenderDeferred				1	0
 RenderDeferredSSAO			1	0
 RenderShadowDetail			1	0
-
+RenderUseFBO				1	1
 
 //
 // Ultra graphics (REALLY PURTY!)
@@ -170,6 +171,7 @@ WLSkyDetail					1	128
 RenderDeferred				1	0
 RenderDeferredSSAO			1	0
 RenderShadowDetail			1	0
+RenderUseFBO				1	1
 
 //
 // Class Unknown Hardware (unknown)
@@ -244,6 +246,7 @@ WindLightUseAtmosShaders	0	0
 RenderDeferred				0	0
 RenderDeferredSSAO			0	0
 RenderShadowDetail			0	0
+RenderUseFBO				1	0
 
 //
 // CPU based feature masks
diff --git a/indra/newview/llfloaterhardwaresettings.cpp b/indra/newview/llfloaterhardwaresettings.cpp
index 2985626bd7..0e89ca966a 100644
--- a/indra/newview/llfloaterhardwaresettings.cpp
+++ b/indra/newview/llfloaterhardwaresettings.cpp
@@ -102,7 +102,13 @@ void LLFloaterHardwareSettings::refreshEnabledState()
 	getChildView("gamma")->setEnabled(!gPipeline.canUseWindLightShaders());
 	getChildView("(brightness, lower is brighter)")->setEnabled(!gPipeline.canUseWindLightShaders());
 	getChildView("fog")->setEnabled(!gPipeline.canUseWindLightShaders());
-
+	getChildView("fsaa")->setEnabled(gPipeline.canUseAntiAliasing());
+	/* Enable to reset fsaa value to disabled when feature is not available.
+	if (!gPipeline.canUseAntiAliasing())
+	{
+		getChild<LLUICtrl>("fsaa")->setValue((LLSD::Integer) 0);
+	}
+	*/
 }
 
 //============================================================================
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index e69b0a2996..cb24720e7b 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -870,6 +870,11 @@ BOOL LLPipeline::canUseWindLightShadersOnObjects() const
 		&& LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_OBJECT) > 0);
 }
 
+BOOL LLPipeline::canUseAntiAliasing() const
+{
+	return (gSavedSettings.getBOOL("RenderUseFBO"));
+}
+
 void LLPipeline::unloadShaders()
 {
 	LLMemType mt_us(LLMemType::MTYPE_PIPELINE_UNLOAD_SHADERS);
diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h
index fe0683d29f..b80765dac6 100644
--- a/indra/newview/pipeline.h
+++ b/indra/newview/pipeline.h
@@ -188,6 +188,7 @@ public:
 	BOOL		canUseVertexShaders();
 	BOOL		canUseWindLightShaders() const;
 	BOOL		canUseWindLightShadersOnObjects() const;
+	BOOL		canUseAntiAliasing() const;
 
 	// phases
 	void resetFrameStats();
-- 
cgit v1.2.3


From affefe2361ee73eee60bca42e3edb41c65ffa95d Mon Sep 17 00:00:00 2001
From: Merov Linden <merov@lindenlab.com>
Date: Mon, 11 Oct 2010 14:42:00 -0700
Subject: STORM-365 : Quick fix for attachments being visible in mouselook

---
 indra/newview/pipeline.cpp | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index e69b0a2996..c758ce991f 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -9049,7 +9049,10 @@ LLCullResult::sg_list_t::iterator LLPipeline::endAlphaGroups()
 
 BOOL LLPipeline::hasRenderType(const U32 type) const
 {
-	return mRenderTypeEnabled[type];
+    // STORM-365 : LLViewerJointAttachment::setAttachmentVisibility() is setting type to 0 to actually mean "do not render"
+    // We then need to test that value here and return FALSE to prevent attachment to render (in mouselook for instance)
+    // TODO: reintroduce RENDER_TYPE_NONE in LLRenderTypeMask and initialize its mRenderTypeEnabled[RENDER_TYPE_NONE] to FALSE explicitely
+	return (type == 0 ? FALSE : mRenderTypeEnabled[type]);
 }
 
 void LLPipeline::setRenderTypeMask(U32 type, ...)
-- 
cgit v1.2.3


From 41484c19eeb534330a17aff7e7b6663b86198cfe Mon Sep 17 00:00:00 2001
From: Aaron Stone <stone@lindenlab.com>
Date: Mon, 11 Oct 2010 15:33:15 -0700
Subject: llvocache.h relies on defines in lldir.h, but forgot to include that
 file. This is otherwise masked by lldir.h being included from elsewhere, but
 is a nice to fix.

---
 indra/newview/llvocache.h | 1 +
 1 file changed, 1 insertion(+)

(limited to 'indra/newview')

diff --git a/indra/newview/llvocache.h b/indra/newview/llvocache.h
index 56b48ef705..ccdff5e96c 100644
--- a/indra/newview/llvocache.h
+++ b/indra/newview/llvocache.h
@@ -30,6 +30,7 @@
 #include "lluuid.h"
 #include "lldatapacker.h"
 #include "lldlinked.h"
+#include "lldir.h"
 
 
 //---------------------------------------------------------------------------
-- 
cgit v1.2.3


From cb877cf725efd38bf252cd5534bcc31c2d441619 Mon Sep 17 00:00:00 2001
From: Aaron Stone <stone@lindenlab.com>
Date: Mon, 11 Oct 2010 15:33:15 -0700
Subject: llvocache.h relies on defines in lldir.h, but forgot to include that
 file. This is otherwise masked by lldir.h being included from elsewhere, but
 is a nice to fix.

---
 indra/newview/llvocache.h | 1 +
 1 file changed, 1 insertion(+)

(limited to 'indra/newview')

diff --git a/indra/newview/llvocache.h b/indra/newview/llvocache.h
index 56b48ef705..ccdff5e96c 100644
--- a/indra/newview/llvocache.h
+++ b/indra/newview/llvocache.h
@@ -30,6 +30,7 @@
 #include "lluuid.h"
 #include "lldatapacker.h"
 #include "lldlinked.h"
+#include "lldir.h"
 
 
 //---------------------------------------------------------------------------
-- 
cgit v1.2.3


From 87c503cd2c7d9c04a5a93c116c4c82ec782af399 Mon Sep 17 00:00:00 2001
From: Eli Linden <eli@lindenlab.com>
Date: Mon, 11 Oct 2010 16:03:24 -0700
Subject: CT-575 WIP PT translation for set18

---
 indra/newview/skins/default/xui/pt/floater_map.xml | 25 +------
 .../skins/default/xui/pt/floater_nearby_chat.xml   |  4 +-
 .../newview/skins/default/xui/pt/floater_tools.xml |  9 ++-
 .../skins/default/xui/pt/menu_attachment_self.xml  |  1 +
 .../skins/default/xui/pt/menu_avatar_self.xml      |  1 +
 .../default/xui/pt/menu_inspect_object_gear.xml    |  1 +
 .../default/xui/pt/menu_inspect_self_gear.xml      |  1 +
 .../newview/skins/default/xui/pt/menu_mini_map.xml |  1 +
 indra/newview/skins/default/xui/pt/menu_object.xml |  4 +-
 .../skins/default/xui/pt/menu_participant_list.xml |  2 +-
 .../xui/pt/menu_people_friends_view_sort.xml       |  1 +
 .../xui/pt/menu_people_nearby_multiselect.xml      |  1 +
 indra/newview/skins/default/xui/pt/menu_viewer.xml | 16 ++--
 .../default/xui/pt/menu_wearable_list_item.xml     |  2 +-
 .../skins/default/xui/pt/menu_wearing_gear.xml     |  1 +
 .../skins/default/xui/pt/menu_wearing_tab.xml      |  2 +
 .../newview/skins/default/xui/pt/notifications.xml | 12 ++-
 .../default/xui/pt/panel_avatar_list_item.xml      |  4 +
 .../skins/default/xui/pt/panel_bottomtray.xml      | 18 ++---
 .../skins/default/xui/pt/panel_classified_info.xml | 14 +++-
 .../skins/default/xui/pt/panel_edit_classified.xml | 12 ++-
 .../skins/default/xui/pt/panel_edit_pick.xml       | 10 ++-
 .../skins/default/xui/pt/panel_edit_profile.xml    | 10 ++-
 .../skins/default/xui/pt/panel_edit_wearable.xml   | 10 ++-
 .../default/xui/pt/panel_group_info_sidetray.xml   | 10 ++-
 .../skins/default/xui/pt/panel_landmarks.xml       | 14 +++-
 .../skins/default/xui/pt/panel_my_profile.xml      |  7 +-
 indra/newview/skins/default/xui/pt/panel_notes.xml | 30 +++++---
 .../skins/default/xui/pt/panel_outfit_edit.xml     | 10 ++-
 .../default/xui/pt/panel_outfits_inventory.xml     | 10 ++-
 .../newview/skins/default/xui/pt/panel_people.xml  | 50 ++++++++++---
 .../skins/default/xui/pt/panel_pick_info.xml       | 20 +++--
 indra/newview/skins/default/xui/pt/panel_picks.xml | 23 ++++--
 .../newview/skins/default/xui/pt/panel_places.xml  | 48 ++++++++++--
 .../default/xui/pt/panel_preferences_chat.xml      | 38 +++++-----
 .../default/xui/pt/panel_preferences_general.xml   |  2 +-
 .../default/xui/pt/panel_preferences_graphics1.xml | 36 ++++-----
 .../newview/skins/default/xui/pt/panel_profile.xml | 26 +++++--
 .../default/xui/pt/panel_side_tray_tab_caption.xml |  2 +
 .../skins/default/xui/pt/sidepanel_inventory.xml   | 20 +++--
 .../skins/default/xui/pt/sidepanel_item_info.xml   | 85 +++++++++++-----------
 indra/newview/skins/default/xui/pt/strings.xml     | 36 ++++++---
 42 files changed, 407 insertions(+), 222 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/pt/floater_map.xml b/indra/newview/skins/default/xui/pt/floater_map.xml
index 6f09a5e383..38c2647199 100644
--- a/indra/newview/skins/default/xui/pt/floater_map.xml
+++ b/indra/newview/skins/default/xui/pt/floater_map.xml
@@ -1,28 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater name="Map" title="">
-	<floater.string name="mini_map_north">
-		N
-	</floater.string>
-	<floater.string name="mini_map_east">
-		L
-	</floater.string>
-	<floater.string name="mini_map_west">
-		O
-	</floater.string>
-	<floater.string name="mini_map_south">
-		S
-	</floater.string>
-	<floater.string name="mini_map_southeast">
-		SE
-	</floater.string>
-	<floater.string name="mini_map_northeast">
-		NE
-	</floater.string>
-	<floater.string name="mini_map_southwest">
-		SO
-	</floater.string>
-	<floater.string name="mini_map_northwest">
-		NO
+	<floater.string name="ToolTipMsg">
+		[REGION](Clique duas vezes para abrir o mapa, shift+arraste para a visão pan)
 	</floater.string>
 	<floater.string name="mini_map_caption">
 		MINIMAPA
diff --git a/indra/newview/skins/default/xui/pt/floater_nearby_chat.xml b/indra/newview/skins/default/xui/pt/floater_nearby_chat.xml
index 5ba2dcd925..60edfa505f 100644
--- a/indra/newview/skins/default/xui/pt/floater_nearby_chat.xml
+++ b/indra/newview/skins/default/xui/pt/floater_nearby_chat.xml
@@ -1,2 +1,4 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="nearby_chat" title="Bate-papo local"/>
+<floater name="nearby_chat" title="Bate-papo local">
+	<check_box label="Traduzir bate-papo (via Google)" name="translate_chat_checkbox"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_tools.xml b/indra/newview/skins/default/xui/pt/floater_tools.xml
index 67d8e35cf2..14e00fa7ae 100644
--- a/indra/newview/skins/default/xui/pt/floater_tools.xml
+++ b/indra/newview/skins/default/xui/pt/floater_tools.xml
@@ -182,10 +182,10 @@
 			<text name="Group:">
 				Grupo:
 			</text>
-			<button label="Definir..." label_selected="Definir..." name="button set group" tool_tip="Selecione o grupo que terá acesso à autorização do objeto"/>
 			<name_box initial_value="Carregando..." name="Group Name Proxy"/>
-			<button label="Doar" label_selected="Doar" name="button deed" tool_tip="Ao doar este item, o próximo dono terá permissões de próximo dono.  Objetos de grupos podem ser doados por um oficial do grupo."/>
+			<button label="Definir..." label_selected="Definir..." name="button set group" tool_tip="Selecione o grupo que terá acesso à autorização do objeto"/>
 			<check_box label="Compartilhar" name="checkbox share with group" tool_tip="Permitir que todos os membros do grupo tenhas suas permissões de modificação para este objeto.  Faça uma doação para ativar restrições de função."/>
+			<button label="Doar" label_selected="Doar" name="button deed" tool_tip="Ao doar este item, o próximo dono terá permissões de próximo dono.  Objetos de grupos podem ser doados por um oficial do grupo."/>
 			<text name="label click action">
 				Clique para:
 			</text>
@@ -437,8 +437,9 @@
 				<combo_box.item label="Sulcos" name="suction"/>
 				<combo_box.item label="Weave" name="weave"/>
 			</combo_box>
-			<text name="tex scale">
-				Repetições/Face
+			<check_box initial_value="falso" label="Alinhar planares" name="checkbox planar align" tool_tip="Alinhar texturas dos planos selecionados com o plano selecionado por último. Requer mapeamento planar da textura."/>
+			<text name="rpt">
+				Repetições / Plano
 			</text>
 			<spinner label="Horizontal (U)" name="TexScaleU"/>
 			<check_box label="Inverter" name="checkbox flip s"/>
diff --git a/indra/newview/skins/default/xui/pt/menu_attachment_self.xml b/indra/newview/skins/default/xui/pt/menu_attachment_self.xml
index 65070f821a..09060cf3ae 100644
--- a/indra/newview/skins/default/xui/pt/menu_attachment_self.xml
+++ b/indra/newview/skins/default/xui/pt/menu_attachment_self.xml
@@ -3,6 +3,7 @@
 	<menu_item_call label="Tocar" name="Attachment Object Touch"/>
 	<menu_item_call label="Editar" name="Edit..."/>
 	<menu_item_call label="Tirar" name="Detach"/>
+	<menu_item_call label="Sentar" name="Sit Down Here"/>
 	<menu_item_call label="Ficar de pé" name="Stand Up"/>
 	<menu_item_call label="Trocar de look" name="Change Outfit"/>
 	<menu_item_call label="Editar meu look" name="Edit Outfit"/>
diff --git a/indra/newview/skins/default/xui/pt/menu_avatar_self.xml b/indra/newview/skins/default/xui/pt/menu_avatar_self.xml
index 755975f9a5..6e203d5a25 100644
--- a/indra/newview/skins/default/xui/pt/menu_avatar_self.xml
+++ b/indra/newview/skins/default/xui/pt/menu_avatar_self.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Self Pie">
+	<menu_item_call label="Sentar" name="Sit Down Here"/>
 	<menu_item_call label="Ficar de pé" name="Stand Up"/>
 	<context_menu label="Tirar" name="Take Off &gt;">
 		<context_menu label="Roupa" name="Clothes &gt;">
diff --git a/indra/newview/skins/default/xui/pt/menu_inspect_object_gear.xml b/indra/newview/skins/default/xui/pt/menu_inspect_object_gear.xml
index b69d205533..184db26538 100644
--- a/indra/newview/skins/default/xui/pt/menu_inspect_object_gear.xml
+++ b/indra/newview/skins/default/xui/pt/menu_inspect_object_gear.xml
@@ -9,6 +9,7 @@
 	<menu_item_call label="Abrir" name="open"/>
 	<menu_item_call label="Editar" name="edit"/>
 	<menu_item_call label="Vestir" name="wear"/>
+	<menu_item_call label="Adicionar" name="add"/>
 	<menu_item_call label="Denunciar" name="report"/>
 	<menu_item_call label="Bloquear" name="block"/>
 	<menu_item_call label="Mais zoom" name="zoom_in"/>
diff --git a/indra/newview/skins/default/xui/pt/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/pt/menu_inspect_self_gear.xml
index c3e0608954..7e67f4cfd4 100644
--- a/indra/newview/skins/default/xui/pt/menu_inspect_self_gear.xml
+++ b/indra/newview/skins/default/xui/pt/menu_inspect_self_gear.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <menu name="Gear Menu">
+	<menu_item_call label="Sentar" name="sit_down_here"/>
 	<menu_item_call label="Ficar de pé" name="stand_up"/>
 	<menu_item_call label="Trocar de look" name="change_outfit"/>
 	<menu_item_call label="Meu perfil" name="my_profile"/>
diff --git a/indra/newview/skins/default/xui/pt/menu_mini_map.xml b/indra/newview/skins/default/xui/pt/menu_mini_map.xml
index 380bd8cf11..d742038e15 100644
--- a/indra/newview/skins/default/xui/pt/menu_mini_map.xml
+++ b/indra/newview/skins/default/xui/pt/menu_mini_map.xml
@@ -4,6 +4,7 @@
 	<menu_item_call label="Zoom Médio" name="Zoom Medium"/>
 	<menu_item_call label="Zoom Longe" name="Zoom Far"/>
 	<menu_item_check label="Girar mapa" name="Rotate Map"/>
+	<menu_item_check label="Auto Center" name="Auto Center"/>
 	<menu_item_call label="Parar Acompanhamento" name="Stop Tracking"/>
 	<menu_item_call label="Mapa-múndi" name="World Map"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_object.xml b/indra/newview/skins/default/xui/pt/menu_object.xml
index 26512fb286..bf94859699 100644
--- a/indra/newview/skins/default/xui/pt/menu_object.xml
+++ b/indra/newview/skins/default/xui/pt/menu_object.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Object Pie">
 	<menu_item_call label="Tocar" name="Object Touch">
-		<on_enable parameter="Tocar" name="EnableTouch"/>
+		<menu_item_call.on_enable name="EnableTouch" parameter="Tocar"/>
 	</menu_item_call>
 	<menu_item_call label="Editar" name="Edit..."/>
 	<menu_item_call label="Construir" name="Build"/>
@@ -12,6 +12,7 @@
 	<menu_item_call label="Mais zoom" name="Zoom In"/>
 	<context_menu label="Colocar no(a)" name="Put On">
 		<menu_item_call label="Vestir" name="Wear"/>
+		<menu_item_call label="Adicionar" name="Add"/>
 		<context_menu label="Anexar" name="Object Attach"/>
 		<context_menu label="Anexar o HUD" name="Object Attach HUD"/>
 	</context_menu>
@@ -21,7 +22,6 @@
 		<menu_item_call label="Devolver" name="Return..."/>
 		<menu_item_call label="Excluir" name="Delete"/>
 	</context_menu>
-	<menu_item_call label="Comprar" name="Pie Object Bye"/>
 	<menu_item_call label="Pegar" name="Pie Object Take"/>
 	<menu_item_call label="Pegar uma cópia" name="Take Copy"/>
 	<menu_item_call label="Pagar" name="Pay..."/>
diff --git a/indra/newview/skins/default/xui/pt/menu_participant_list.xml b/indra/newview/skins/default/xui/pt/menu_participant_list.xml
index ee522210fb..01f1d4ef80 100644
--- a/indra/newview/skins/default/xui/pt/menu_participant_list.xml
+++ b/indra/newview/skins/default/xui/pt/menu_participant_list.xml
@@ -11,7 +11,7 @@
 	<menu_item_check label="Ver ícones de pessoas" name="View Icons"/>
 	<menu_item_check label="Bloquear voz" name="Block/Unblock"/>
 	<menu_item_check label="Bloquear texto" name="MuteText"/>
-	<context_menu label="Opções do moderador" name="Moderator Options">
+	<context_menu label="Opções do moderador &gt;" name="Moderator Options">
 		<menu_item_check label="Pode bater papo por escrito" name="AllowTextChat"/>
 		<menu_item_call label="Silenciar este participante" name="ModerateVoiceMuteSelected"/>
 		<menu_item_call label="Desfazer silenciar deste participante" name="ModerateVoiceUnMuteSelected"/>
diff --git a/indra/newview/skins/default/xui/pt/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/pt/menu_people_friends_view_sort.xml
index 25a37488d7..e7c325010f 100644
--- a/indra/newview/skins/default/xui/pt/menu_people_friends_view_sort.xml
+++ b/indra/newview/skins/default/xui/pt/menu_people_friends_view_sort.xml
@@ -3,5 +3,6 @@
 	<menu_item_check label="Ordenar por nome" name="sort_name"/>
 	<menu_item_check label="Ordenar por status" name="sort_status"/>
 	<menu_item_check label="Ver ícones de pessoas" name="view_icons"/>
+	<menu_item_check label="Autorizações de visualização dadas" name="view_permissions"/>
 	<menu_item_call label="Ver residentes e objetos bloqueados" name="show_blocked_list"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_people_nearby_multiselect.xml b/indra/newview/skins/default/xui/pt/menu_people_nearby_multiselect.xml
index fc08b3accb..79edb96b1c 100644
--- a/indra/newview/skins/default/xui/pt/menu_people_nearby_multiselect.xml
+++ b/indra/newview/skins/default/xui/pt/menu_people_nearby_multiselect.xml
@@ -6,4 +6,5 @@
 	<menu_item_call label="Ligar" name="Call"/>
 	<menu_item_call label="Compartilhar" name="Share"/>
 	<menu_item_call label="Pagar" name="Pay"/>
+	<menu_item_call label="Teletransportar?" name="teleport"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_viewer.xml b/indra/newview/skins/default/xui/pt/menu_viewer.xml
index 33fccbedcc..90adb3fdb5 100644
--- a/indra/newview/skins/default/xui/pt/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/pt/menu_viewer.xml
@@ -94,7 +94,6 @@
 			<menu_item_call label="Scripts em modo não execução" name="Set Scripts to Not Running"/>
 		</menu>
 		<menu label="Opções" name="Options">
-			<menu_item_call label="Autorizações de upload padrão" name="perm prefs"/>
 			<menu_item_check label="Mostrar permissões avançadas" name="DebugPermissions"/>
 			<menu_item_check label="Só selecionar meus objetos" name="Select Only My Objects"/>
 			<menu_item_check label="Só selecionar objetos móveis" name="Select Only Movable Objects"/>
@@ -121,7 +120,6 @@
 		<menu_item_call label="Sobre [APP_NAME]" name="About Second Life"/>
 	</menu>
 	<menu label="Avançado" name="Advanced">
-		<menu_item_check label="Exibir menu avançado" name="Show Advanced Menu"/>
 		<menu_item_call label="Parar minha animação" name="Stop Animating My Avatar"/>
 		<menu_item_call label="Recarregar texturas" name="Rebake Texture"/>
 		<menu_item_call label="Interface tamanho padrão" name="Set UI Size to Default"/>
@@ -168,7 +166,6 @@
 			<menu_item_check label="Neblina" name="Fog"/>
 			<menu_item_check label="Objetos flexíveis" name="Flexible Objects"/>
 		</menu>
-		<menu_item_check label="Executar diversas instâncias" name="Run Multiple Threads"/>
 		<menu_item_check label="Usar plugin de leitura de threads" name="Use Plugin Read Thread"/>
 		<menu_item_call label="Limpar cache de grupo" name="ClearGroupCache"/>
 		<menu_item_check label="Smoothing de mouse" name="Mouse Smoothing"/>
@@ -177,7 +174,6 @@
 			<menu_item_check label="Busca" name="Search"/>
 			<menu_item_call label="Soltar objeto" name="Release Keys"/>
 			<menu_item_call label="Interface tamanho padrão" name="Set UI Size to Default"/>
-			<menu_item_check label="Mostrar menu avançado - atalho antigo" name="Show Advanced Menu - legacy shortcut"/>
 			<menu_item_check label="Correr sempre" name="Always Run"/>
 			<menu_item_check label="Voar" name="Fly"/>
 			<menu_item_call label="Fechar janela" name="Close Window"/>
@@ -197,6 +193,7 @@
 			<menu_item_call label="Mais zoom" name="Zoom In"/>
 			<menu_item_call label="Zoom padrão" name="Zoom Default"/>
 			<menu_item_call label="Menos zoom" name="Zoom Out"/>
+			<menu_item_check label="Exibir menu avançado" name="Show Advanced Menu"/>
 		</menu>
 		<menu_item_call label="Mostrar configurações de depuração" name="Debug Settings"/>
 		<menu_item_check label="Show Develop Menu" name="Debug Mode"/>
@@ -239,9 +236,15 @@
 		<menu label="Rendering" name="Rendering">
 			<menu_item_check label="Axes" name="Axes"/>
 			<menu_item_check label="Wireframe" name="Wireframe"/>
-			<menu_item_check label="Global Illumination" name="Global Illumination"/>
+			<menu_item_check label="Iluminação e sombras" name="Lighting and Shadows"/>
+			<menu_item_check label="Sombras da projeção do sol/lua" name="Shadows from Sun/Moon/Projectors"/>
+			<menu_item_check label="SSAO e sombra suave" name="SSAO and Shadow Smoothing"/>
+			<menu_item_check label="Iluminação global (fase experimental)" name="Global Illumination"/>
+			<menu_item_check label="Máscaras alpha automáticas (adiadas)" name="Automatic Alpha Masks (deferred)"/>
+			<menu_item_check label="Máscaras alpha automáticas (sem adiar)" name="Automatic Alpha Masks (non-deferred)"/>
 			<menu_item_check label="Texturas de animação" name="Animation Textures"/>
 			<menu_item_check label="Desativar texturas" name="Disable Textures"/>
+			<menu_item_check label="Atlas texturizado (fase experimental)" name="Texture Atlas"/>
 			<menu_item_check label="Render Attached Lights" name="Render Attached Lights"/>
 			<menu_item_check label="Render Attached Particles" name="Render Attached Particles"/>
 			<menu_item_check label="Objetos iridescentes" name="Hover Glow Objects"/>
@@ -261,7 +264,8 @@
 			<menu_item_call label="Teste de navegador web" name="Web Browser Test"/>
 			<menu_item_call label="Print Selected Object Info" name="Print Selected Object Info"/>
 			<menu_item_call label="Dados de memória" name="Memory Stats"/>
-			<menu_item_check label="Double-Click Auto-Pilot" name="Double-ClickAuto-Pilot"/>
+			<menu_item_check label="Trajeto c/ dois cliques" name="Double-Click Auto-Pilot"/>
+			<menu_item_check label="Teletransportar c/ dois cliques" name="DoubleClick Teleport"/>
 			<menu_item_check label="Debug Clicks" name="Debug Clicks"/>
 			<menu_item_check label="Debug Mouse Events" name="Debug Mouse Events"/>
 		</menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/pt/menu_wearable_list_item.xml
index 6dce884348..2487f6779f 100644
--- a/indra/newview/skins/default/xui/pt/menu_wearable_list_item.xml
+++ b/indra/newview/skins/default/xui/pt/menu_wearable_list_item.xml
@@ -9,6 +9,6 @@
 	<context_menu label="Anexar ao HUD" name="wearable_attach_to_hud"/>
 	<menu_item_call label="Tirar" name="take_off"/>
 	<menu_item_call label="Editar" name="edit"/>
-	<menu_item_call label="Perfil do objeto" name="object_profile"/>
+	<menu_item_call label="Perfil do item" name="object_profile"/>
 	<menu_item_call label="Mostrar original" name="show_original"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_wearing_gear.xml b/indra/newview/skins/default/xui/pt/menu_wearing_gear.xml
index c0387f491a..7b6ce4d87e 100644
--- a/indra/newview/skins/default/xui/pt/menu_wearing_gear.xml
+++ b/indra/newview/skins/default/xui/pt/menu_wearing_gear.xml
@@ -1,4 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <menu name="Gear Wearing">
 	<menu_item_call label="Editar look" name="edit"/>
+	<menu_item_call label="Tirar" name="takeoff"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_wearing_tab.xml b/indra/newview/skins/default/xui/pt/menu_wearing_tab.xml
index 5b62d9578c..4e6e52ebc7 100644
--- a/indra/newview/skins/default/xui/pt/menu_wearing_tab.xml
+++ b/indra/newview/skins/default/xui/pt/menu_wearing_tab.xml
@@ -1,4 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Wearing">
+	<menu_item_call label="Tirar" name="take_off"/>
+	<menu_item_call label="Tirar" name="detach"/>
 	<menu_item_call label="Editar look" name="edit"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/pt/notifications.xml b/indra/newview/skins/default/xui/pt/notifications.xml
index a6645d8b13..ec0ea9efff 100644
--- a/indra/newview/skins/default/xui/pt/notifications.xml
+++ b/indra/newview/skins/default/xui/pt/notifications.xml
@@ -1801,6 +1801,10 @@ Mover para o inventário o(s) item(s)?
 		Tem certeza que deseja sair?
 		<usetemplate ignoretext="Confirmar antes de sair" name="okcancelignore" notext="Não sair" yestext="Sair"/>
 	</notification>
+	<notification name="DeleteItems">
+		[QUESTION]
+		<usetemplate ignoretext="Confirmar antes de excluir" name="okcancelignore" notext="Cancelar" yestext="OK"/>
+	</notification>
 	<notification name="HelpReportAbuseEmailLL">
 		Use esta ferramenta para denunciar infrações dos [http://secondlife.com/corporate/tos.php Termos do Serviço] e das [http://secondlife.com/corporate/cs.php Normas da Comunidade].
 
@@ -2727,9 +2731,13 @@ Verifique a configuração da sua rede e firewall.
 		( [EXISTENCE] segundos de vida )
 Avatar &apos;[NAME]&apos; saiu totalmente carregado.
 	</notification>
-	<notification name="AvatarRezSelfBakeNotification">
+	<notification name="AvatarRezSelfBakedTextureUploadNotification">
+		( [EXISTENCE] segundos de vida )
+Você carregou uma textura com [RESOLUTION] para o(a) &apos;[BODYREGION]&apos; em [TIME] segundos.
+	</notification>
+	<notification name="AvatarRezSelfBakedTextureUpdateNotification">
 		( [EXISTENCE] segundos de vida )
-[ACTION] de textura com [RESOLUTION] para o(a) &apos;[BODYREGION]&apos; em [TIME] segundos.
+Você carregou uma textura com [RESOLUTION] para o(a) &apos;[BODYREGION]&apos; em [TIME] segundos.
 	</notification>
 	<notification name="ConfirmLeaveCall">
 		Tem certeza de que quer sair desta ligação?
diff --git a/indra/newview/skins/default/xui/pt/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/pt/panel_avatar_list_item.xml
index 06d8823a74..ca67125c65 100644
--- a/indra/newview/skins/default/xui/pt/panel_avatar_list_item.xml
+++ b/indra/newview/skins/default/xui/pt/panel_avatar_list_item.xml
@@ -22,5 +22,9 @@
 		[COUNT]anos
 	</string>
 	<text name="avatar_name" value="Desconhecido"/>
+	<icon name="permission_edit_theirs_icon" tool_tip="Você pode editar os pertences deste amigo"/>
+	<icon name="permission_edit_mine_icon" tool_tip="Este amigo pode editar, excluir ou pegar seus pertences"/>
+	<icon name="permission_map_icon" tool_tip="Este amigo pode localizar você no mapa"/>
+	<icon name="permission_online_icon" tool_tip="Este amigo pode saber quando você estiver online"/>
 	<button name="profile_btn" tool_tip="Ver perfil"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_bottomtray.xml b/indra/newview/skins/default/xui/pt/panel_bottomtray.xml
index 9fd7da55df..cb517f643c 100644
--- a/indra/newview/skins/default/xui/pt/panel_bottomtray.xml
+++ b/indra/newview/skins/default/xui/pt/panel_bottomtray.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="bottom_tray">
+	<string name="DragIndicationImageName" value="Accordion_ArrowOpened_Off"/>
 	<string name="SpeakBtnToolTip" value="Liga e desliga o microfone"/>
 	<string name="VoiceControlBtnToolTip" value="Mostra/oculta os controles de voz"/>
 	<layout_stack name="toolbar_stack">
@@ -12,28 +13,25 @@
 			<gesture_combo_list label="Gesto" name="Gesture" tool_tip="Mostra/oculta os gestos"/>
 		</layout_panel>
 		<layout_panel name="movement_panel">
-			<button label="Movimentar" name="movement_btn" tool_tip="Mostra/oculta os controles de movimento"/>
+			<bottomtray_button label="Movimentar" name="movement_btn" tool_tip="Mostra/oculta os controles de movimento"/>
 		</layout_panel>
 		<layout_panel name="cam_panel">
-			<button label="Exibir" name="camera_btn" tool_tip="Mostra/oculta os controles da câmera"/>
+			<bottomtray_button label="Exibir" name="camera_btn" tool_tip="Mostra/oculta os controles da câmera"/>
 		</layout_panel>
 		<layout_panel name="snapshot_panel">
-			<button label="" name="snapshots" tool_tip="Tirar foto"/>
-		</layout_panel>
-		<layout_panel name="sidebar_btn_panel">
-			<button label="Barra lateral" name="sidebar_btn" tool_tip="Mostra/oculta a barra lateral"/>
+			<bottomtray_button label="" name="snapshots" tool_tip="Tirar foto"/>
 		</layout_panel>
 		<layout_panel name="build_btn_panel">
-			<button label="Construir" name="build_btn" tool_tip="Mostra/oculta ferramentas de Construção"/>
+			<bottomtray_button label="Construir" name="build_btn" tool_tip="Mostra/oculta ferramentas de Construção"/>
 		</layout_panel>
 		<layout_panel name="search_btn_panel">
-			<button label="Busca" name="search_btn" tool_tip="Mostra/oculta os gestos"/>
+			<bottomtray_button label="Busca" name="search_btn" tool_tip="Mostra/oculta os gestos"/>
 		</layout_panel>
 		<layout_panel name="world_map_btn_panel">
-			<button label="Mapa" name="world_map_btn" tool_tip="Mostra/oculta o Mapa Múndi"/>
+			<bottomtray_button label="Mapa" name="world_map_btn" tool_tip="Mostra/oculta o Mapa Múndi"/>
 		</layout_panel>
 		<layout_panel name="mini_map_btn_panel">
-			<button label="Mini Mapa" name="mini_map_btn" tool_tip="Mostra/oculta o Mini Mapa"/>
+			<bottomtray_button label="Mini Mapa" name="mini_map_btn" tool_tip="Mostra/oculta o Mini Mapa"/>
 		</layout_panel>
 		<layout_panel name="im_well_panel">
 			<chiclet_im_well name="im_well">
diff --git a/indra/newview/skins/default/xui/pt/panel_classified_info.xml b/indra/newview/skins/default/xui/pt/panel_classified_info.xml
index 191c005b1a..73bfe7444e 100644
--- a/indra/newview/skins/default/xui/pt/panel_classified_info.xml
+++ b/indra/newview/skins/default/xui/pt/panel_classified_info.xml
@@ -46,8 +46,16 @@
 		</panel>
 	</scroll_container>
 	<panel name="buttons">
-		<button label="Teletransportar" name="teleport_btn"/>
-		<button label="Mapa" name="show_on_map_btn"/>
-		<button label="Editar" name="edit_btn"/>
+		<layout_stack name="layout_stack1">
+			<layout_panel name="layout_panel1">
+				<button label="Teletransportar" name="teleport_btn"/>
+			</layout_panel>
+			<layout_panel name="show_on_map_btn_lp">
+				<button label="Mapa" name="show_on_map_btn"/>
+			</layout_panel>
+			<layout_panel name="edit_btn_lp">
+				<button label="Editar" name="edit_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_edit_classified.xml b/indra/newview/skins/default/xui/pt/panel_edit_classified.xml
index f6fb223599..23e00bfc3a 100644
--- a/indra/newview/skins/default/xui/pt/panel_edit_classified.xml
+++ b/indra/newview/skins/default/xui/pt/panel_edit_classified.xml
@@ -36,13 +36,19 @@
 				<icons_combo_box.item label="Moderado" name="mature_ci" value="Adulto"/>
 				<icons_combo_box.item label="Público geral" name="pg_ci" value="Adequado para menores"/>
 			</icons_combo_box>
+			<check_box label="Renovação automática semanal" name="auto_renew"/>
 			<text name="price_for_listing_label" value="Preço do anúncio:"/>
 			<spinner label="L$" name="price_for_listing" tool_tip="Preço do anúncio" value="50"/>
-			<check_box label="Renovação automática semanal" name="auto_renew"/>
 		</panel>
 	</scroll_container>
 	<panel label="bottom_panel" name="bottom_panel">
-		<button label="[LABEL]" name="save_changes_btn"/>
-		<button label="Cancelar" name="cancel_btn"/>
+		<layout_stack name="bottom_panel_ls">
+			<layout_panel name="save_changes_btn_lp">
+				<button label="[LABEL]" name="save_changes_btn"/>
+			</layout_panel>
+			<layout_panel name="show_on_map_btn_lp">
+				<button label="Cancelar" name="cancel_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_edit_pick.xml b/indra/newview/skins/default/xui/pt/panel_edit_pick.xml
index 96a294bc28..432affcf09 100644
--- a/indra/newview/skins/default/xui/pt/panel_edit_pick.xml
+++ b/indra/newview/skins/default/xui/pt/panel_edit_pick.xml
@@ -25,7 +25,13 @@
 		</panel>
 	</scroll_container>
 	<panel label="bottom_panel" name="bottom_panel">
-		<button label="Salvar destaque" name="save_changes_btn"/>
-		<button label="Cancelar" name="cancel_btn"/>
+		<layout_stack name="layout_stack1">
+			<layout_panel name="layout_panel1">
+				<button label="Salvar destaque" name="save_changes_btn"/>
+			</layout_panel>
+			<layout_panel name="layout_panel1">
+				<button label="Cancelar" name="cancel_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_edit_profile.xml b/indra/newview/skins/default/xui/pt/panel_edit_profile.xml
index c9e5513424..e82c03845b 100644
--- a/indra/newview/skins/default/xui/pt/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/pt/panel_edit_profile.xml
@@ -45,7 +45,13 @@
 		</panel>
 	</scroll_container>
 	<panel name="profile_me_buttons_panel">
-		<button label="Salvar alterações" name="save_btn"/>
-		<button label="Cancelar" name="cancel_btn"/>
+		<layout_stack name="bottom_panel_ls">
+			<layout_panel name="save_changes_btn_lp">
+				<button label="Salvar alterações" name="save_btn"/>
+			</layout_panel>
+			<layout_panel name="show_on_map_btn_lp">
+				<button label="Cancelar" name="cancel_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_edit_wearable.xml b/indra/newview/skins/default/xui/pt/panel_edit_wearable.xml
index 9890d26d35..679bb524b4 100644
--- a/indra/newview/skins/default/xui/pt/panel_edit_wearable.xml
+++ b/indra/newview/skins/default/xui/pt/panel_edit_wearable.xml
@@ -102,7 +102,13 @@
 		<icon name="female_icon" tool_tip="Feminino"/>
 	</panel>
 	<panel name="button_panel">
-		<button label="Salvar como" name="save_as_button"/>
-		<button label="Desfazer mudanças" name="revert_button"/>
+		<layout_stack name="button_panel_ls">
+			<layout_panel name="save_as_btn_lp">
+				<button label="Salvar como" name="save_as_button"/>
+			</layout_panel>
+			<layout_panel name="revert_btn_lp">
+				<button label="Desfazer mudanças" name="revert_button"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/pt/panel_group_info_sidetray.xml
index 29d757346c..30c825723b 100644
--- a/indra/newview/skins/default/xui/pt/panel_group_info_sidetray.xml
+++ b/indra/newview/skins/default/xui/pt/panel_group_info_sidetray.xml
@@ -13,7 +13,7 @@
 		Grátis
 	</panel.string>
 	<panel name="group_info_top">
-		<text name="group_name" value="Carregando..."/>
+		<text_editor name="group_name" value="Carregando..."/>
 		<line_editor label="Digite o nome do grupo novo aqui" name="group_name_editor"/>
 	</panel>
 	<layout_stack name="layout">
@@ -25,9 +25,15 @@
 				<accordion_tab name="group_land_tab" title="Terrenos/Bens"/>
 			</accordion>
 		</layout_panel>
-		<layout_panel name="button_row">
+	</layout_stack>
+	<layout_stack name="button_row_ls">
+		<layout_panel name="btn_chat_lp">
 			<button label="Bate-papo" name="btn_chat"/>
+		</layout_panel>
+		<layout_panel name="call_btn_lp">
 			<button label="Ligar para o grupo" name="btn_call" tool_tip="Ligar para este grupo"/>
+		</layout_panel>
+		<layout_panel name="btn_apply_lp">
 			<button label="Salvar" label_selected="Salvar" name="btn_apply"/>
 			<button label="Criar grupo" name="btn_create" tool_tip="Criar um grupo novo"/>
 		</layout_panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_landmarks.xml b/indra/newview/skins/default/xui/pt/panel_landmarks.xml
index 3f357bcefe..49e1203601 100644
--- a/indra/newview/skins/default/xui/pt/panel_landmarks.xml
+++ b/indra/newview/skins/default/xui/pt/panel_landmarks.xml
@@ -7,8 +7,16 @@
 		<accordion_tab name="tab_library" title="Biblioteca"/>
 	</accordion>
 	<panel name="bottom_panel">
-		<button name="options_gear_btn" tool_tip="Mostrar opções adicionais"/>
-		<button name="add_btn" tool_tip="Adicionar marco"/>
-		<dnd_button name="trash_btn" tool_tip="Excluir marco selecionado"/>
+		<layout_stack name="bottom_panel">
+			<layout_panel name="options_gear_btn_panel">
+				<button name="options_gear_btn" tool_tip="Mostrar opções adicionais"/>
+			</layout_panel>
+			<layout_panel name="add_btn_panel">
+				<button name="add_btn" tool_tip="Adicionar marco"/>
+			</layout_panel>
+			<layout_panel name="trash_btn_panel">
+				<dnd_button name="trash_btn" tool_tip="Excluir marco selecionado"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_my_profile.xml b/indra/newview/skins/default/xui/pt/panel_my_profile.xml
index b1ca318add..1a28f61c2d 100644
--- a/indra/newview/skins/default/xui/pt/panel_my_profile.xml
+++ b/indra/newview/skins/default/xui/pt/panel_my_profile.xml
@@ -27,9 +27,8 @@
 				</panel>
 			</scroll_container>
 		</layout_panel>
-		<layout_panel name="profile_me_buttons_panel">
-			<button label="Editar perfil" name="edit_profile_btn" tool_tip="Editar dados pessoais"/>
-			<button label="Editar aparência" name="edit_appearance_btn" tool_tip="Criar/editar aparência: físico, roupas, etc."/>
-		</layout_panel>
 	</layout_stack>
+	<panel name="profile_me_buttons_panel">
+		<button label="Editar perfil" name="edit_profile_btn" tool_tip="Editar dados pessoais"/>
+	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_notes.xml b/indra/newview/skins/default/xui/pt/panel_notes.xml
index 9aa842d9a5..c15e838b34 100644
--- a/indra/newview/skins/default/xui/pt/panel_notes.xml
+++ b/indra/newview/skins/default/xui/pt/panel_notes.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="Anotações e Privacidade" name="panel_notes">
 	<layout_stack name="layout">
-		<panel name="notes_stack">
+		<layout_panel name="notes_stack">
 			<scroll_container name="profile_scroll">
 				<panel name="profile_scroll_panel">
 					<text name="status_message" value="Minhas anotações privadas:"/>
@@ -11,13 +11,25 @@
 					<check_box label="Pegar, editar ou excluir objetos meus" name="objects_check"/>
 				</panel>
 			</scroll_container>
-		</panel>
-		<panel name="notes_buttons_panel">
-			<button label="Adicionar amigo" name="add_friend" tool_tip="Oferecer amizade ao residente"/>
-			<button label="MI" name="im" tool_tip="Abrir sessão de mensagem instantânea"/>
-			<button label="Ligar" name="call" tool_tip="Ligar para este residente"/>
-			<button label="Mapa" name="show_on_map_btn" tool_tip="Exibir o residente no mapa"/>
-			<button label="Teletransportar" name="teleport" tool_tip="Oferecer teletransporte"/>
-		</panel>
+		</layout_panel>
+		<layout_panel name="notes_buttons_panel">
+			<layout_stack name="bottom_bar_ls">
+				<layout_panel name="add_friend_btn_lp">
+					<button label="Adicionar amigo" name="add_friend" tool_tip="Oferecer amizade ao residente"/>
+				</layout_panel>
+				<layout_panel name="im_btn_lp">
+					<button label="MI" name="im" tool_tip="Abrir sessão de mensagem instantânea"/>
+				</layout_panel>
+				<layout_panel name="call_btn_lp">
+					<button label="Ligar" name="call" tool_tip="Ligar para este residente"/>
+				</layout_panel>
+				<layout_panel name="show_on_map_btn_lp">
+					<button label="Mapa" name="show_on_map_btn" tool_tip="Exibir o residente no mapa"/>
+				</layout_panel>
+				<layout_panel name="teleport_btn_lp">
+					<button label="Teletransportar" name="teleport" tool_tip="Oferecer teletransporte"/>
+				</layout_panel>
+			</layout_stack>
+		</layout_panel>
 	</layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_outfit_edit.xml b/indra/newview/skins/default/xui/pt/panel_outfit_edit.xml
index 12c57411db..eb23f5c079 100644
--- a/indra/newview/skins/default/xui/pt/panel_outfit_edit.xml
+++ b/indra/newview/skins/default/xui/pt/panel_outfit_edit.xml
@@ -45,7 +45,13 @@
 		<button name="shop_btn_2" tool_tip="Visite o SL Marketplace. Ou selecione algum artigo do seu look e clique aqui para ver outros artigos parecidos"/>
 	</panel>
 	<panel name="save_revert_button_bar">
-		<button label="Salvar" name="save_btn"/>
-		<button label="Desfazer mudanças" name="revert_btn" tool_tip="Voltar à versão salva anterior"/>
+		<layout_stack name="button_bar_ls">
+			<layout_panel name="save_btn_lp">
+				<button label="Salvar" name="save_btn"/>
+			</layout_panel>
+			<layout_panel name="revert_btn_lp">
+				<button label="Desfazer mudanças" name="revert_btn" tool_tip="Voltar à versão salva anterior"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/pt/panel_outfits_inventory.xml
index 96f4d60957..816a9bc46e 100644
--- a/indra/newview/skins/default/xui/pt/panel_outfits_inventory.xml
+++ b/indra/newview/skins/default/xui/pt/panel_outfits_inventory.xml
@@ -11,7 +11,13 @@
 		<panel label="EM USO" name="cof_tab"/>
 	</tab_container>
 	<panel name="bottom_panel">
-		<button label="Salvar como" name="save_btn"/>
-		<button label="Vestir" name="wear_btn" tool_tip="Vestir look selecionado"/>
+		<layout_stack name="bottom_panel_ls">
+			<layout_panel name="save_btn_lp">
+				<button label="Salvar como" name="save_btn"/>
+			</layout_panel>
+			<layout_panel name="wear_btn_lp">
+				<button label="Vestir" name="wear_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_people.xml b/indra/newview/skins/default/xui/pt/panel_people.xml
index efeea89fa9..e02e3998eb 100644
--- a/indra/newview/skins/default/xui/pt/panel_people.xml
+++ b/indra/newview/skins/default/xui/pt/panel_people.xml
@@ -32,9 +32,17 @@ Em busca de alguém para conversar? Procure no [secondlife:///app/worldmap Mapa-
 				<accordion_tab name="tab_all" title="Todos"/>
 			</accordion>
 			<panel label="bottom_panel" name="bottom_panel">
-				<button name="friends_viewsort_btn" tool_tip="Opções"/>
-				<button name="add_btn" tool_tip="Oferecer amizade para um residente"/>
-				<button name="del_btn" tool_tip="Remover a pessoa selecionada da sua lista de amigos"/>
+				<layout_stack name="bottom_panel">
+					<layout_panel name="options_gear_btn_panel">
+						<button name="friends_viewsort_btn" tool_tip="Mostrar opções adicionais"/>
+					</layout_panel>
+					<layout_panel name="add_btn_panel">
+						<button name="add_btn" tool_tip="Oferecer amizade para um residente"/>
+					</layout_panel>
+					<layout_panel name="trash_btn_panel">
+						<dnd_button name="trash_btn" tool_tip="Remover a pessoa selecionada da sua lista de amigos"/>
+					</layout_panel>
+				</layout_stack>
 			</panel>
 		</panel>
 		<panel label="MEUS GRUPOS" name="groups_panel">
@@ -52,13 +60,33 @@ Em busca de alguém para conversar? Procure no [secondlife:///app/worldmap Mapa-
 		</panel>
 	</tab_container>
 	<panel name="button_bar">
-		<button label="Perfil" name="view_profile_btn" tool_tip="Exibir fotografia, grupos e outras informações dos residentes" width="50"/>
-		<button label="MI" name="im_btn" tool_tip="Iniciar MI" width="24"/>
-		<button label="Chamada" name="call_btn" tool_tip="Ligar para este residente" width="61"/>
-		<button label="Compartilhar" name="share_btn" tool_tip="Compartilhar item de inventário" width="82"/>
-		<button label="Teletransporte" name="teleport_btn" tool_tip="Oferecer teletransporte" width="86"/>
-		<button label="Perfil do grupo" name="group_info_btn" tool_tip="Exibir informação de grupo"/>
-		<button label="Bate-papo de grupo" name="chat_btn" tool_tip="Iniciar bate-papo"/>
-		<button label="Ligar para o grupo" name="group_call_btn" tool_tip="Ligar para este grupo"/>
+		<layout_stack name="bottom_bar_ls">
+			<layout_panel name="view_profile_btn_lp">
+				<button label="Perfil" name="view_profile_btn" tool_tip="Exibir fotografia, grupos e outras informações dos residentes"/>
+			</layout_panel>
+			<layout_panel name="chat_btn_lp">
+				<button label="MI" name="im_btn" tool_tip="Abrir sessão de mensagem instantânea"/>
+			</layout_panel>
+			<layout_panel name="chat_btn_lp">
+				<button label="Ligar" name="call_btn" tool_tip="Ligar para este residente"/>
+			</layout_panel>
+			<layout_panel name="chat_btn_lp">
+				<button label="Compartilhar" name="share_btn" tool_tip="Compartilhar item de inventário"/>
+			</layout_panel>
+			<layout_panel name="chat_btn_lp">
+				<button label="Teletransportar" name="teleport_btn" tool_tip="Oferecer teletransporte"/>
+			</layout_panel>
+		</layout_stack>
+		<layout_stack name="bottom_bar_ls1">
+			<layout_panel name="group_info_btn_lp">
+				<button label="Perfil do grupo" name="group_info_btn" tool_tip="Exibir dados do grupo"/>
+			</layout_panel>
+			<layout_panel name="chat_btn_lp">
+				<button label="Bate-papo de grupo" name="chat_btn" tool_tip="Nova sessão de bate-papo"/>
+			</layout_panel>
+			<layout_panel name="group_call_btn_lp">
+				<button label="Ligar para o grupo" name="group_call_btn" tool_tip="Ligar para este grupo"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_pick_info.xml b/indra/newview/skins/default/xui/pt/panel_pick_info.xml
index 007965a8c9..caa140a245 100644
--- a/indra/newview/skins/default/xui/pt/panel_pick_info.xml
+++ b/indra/newview/skins/default/xui/pt/panel_pick_info.xml
@@ -3,14 +3,22 @@
 	<text name="title" value="Detalhes do destaque"/>
 	<scroll_container name="profile_scroll">
 		<panel name="scroll_content_panel">
-			<text name="pick_name" value="[NAME]"/>
-			<text name="pick_location" value="[carregando...]"/>
-			<text name="pick_desc" value="[descrição]"/>
+			<text_editor name="pick_name" value="[NAME]"/>
+			<text_editor name="pick_location" value="[carregando...]"/>
+			<text_editor name="pick_desc" value="[descrição]"/>
 		</panel>
 	</scroll_container>
 	<panel name="buttons">
-		<button label="Teletransportar" name="teleport_btn"/>
-		<button label="Mapa" name="show_on_map_btn"/>
-		<button label="Editar" name="edit_btn"/>
+		<layout_stack name="layout_stack1">
+			<layout_panel name="layout_panel1">
+				<button label="Teletransportar" name="teleport_btn"/>
+			</layout_panel>
+			<layout_panel name="show_on_map_btn_lp">
+				<button label="Mapa" name="show_on_map_btn"/>
+			</layout_panel>
+			<layout_panel name="edit_btn_lp">
+				<button label="Editar" name="edit_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_picks.xml b/indra/newview/skins/default/xui/pt/panel_picks.xml
index 453954bc3e..2ff1eed624 100644
--- a/indra/newview/skins/default/xui/pt/panel_picks.xml
+++ b/indra/newview/skins/default/xui/pt/panel_picks.xml
@@ -2,19 +2,28 @@
 <panel label="Destaques" name="panel_picks">
 	<string name="no_picks" value="Sem destaques"/>
 	<string name="no_classifieds" value="Sem classificados"/>
-	<text name="empty_picks_panel_text">
-		Não ha nenhum destaque/ classificado aqui
-	</text>
 	<accordion name="accordion">
 		<accordion_tab name="tab_picks" title="Destaques"/>
 		<accordion_tab name="tab_classifieds" title="Classificados"/>
 	</accordion>
 	<panel label="bottom_panel" name="edit_panel">
-		<button name="new_btn" tool_tip="Criar um novo destaque ou classificado na localização atual"/>
+		<layout_stack name="edit_panel_ls">
+			<layout_panel name="gear_menu_btn">
+				<button name="new_btn" tool_tip="Criar um novo destaque ou classificado na localização atual"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 	<panel name="buttons_cucks">
-		<button label="Info" name="info_btn" tool_tip="Exibir informação de destaque"/>
-		<button label="Teletransportar" name="teleport_btn" tool_tip="Teletransportar para a área correspondente"/>
-		<button label="Mapa" name="show_on_map_btn" tool_tip="Exibir a área correspondente no Mapa Mundi"/>
+		<layout_stack name="buttons_cucks_ls">
+			<layout_panel name="info_btn_lp">
+				<button label="Info" name="info_btn" tool_tip="Exibir dados do destaque"/>
+			</layout_panel>
+			<layout_panel name="teleport_btn_lp">
+				<button label="Teletransportar" name="teleport_btn" tool_tip="Teletransportar para a área correspondente"/>
+			</layout_panel>
+			<layout_panel name="show_on_map_btn_lp">
+				<button label="Mapa" name="show_on_map_btn" tool_tip="Exibir a área correspondente no Mapa Mundi"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_places.xml b/indra/newview/skins/default/xui/pt/panel_places.xml
index 5f2c56ab8c..2e443bc057 100644
--- a/indra/newview/skins/default/xui/pt/panel_places.xml
+++ b/indra/newview/skins/default/xui/pt/panel_places.xml
@@ -4,13 +4,45 @@
 	<string name="teleport_history_tab_title" value="TELETRANSPORTES"/>
 	<filter_editor label="Filtrar meus lugares" name="Filter"/>
 	<panel name="button_panel">
-		<button label="Teletransportar" name="teleport_btn" tool_tip="Teletransportar para a área selecionada"/>
-		<button label="Mapa" name="map_btn" tool_tip="Mostrar a área no Mapa Múndi"/>
-		<button label="Editar" name="edit_btn" tool_tip="Editar dados do marco"/>
-		<button label="▼" name="overflow_btn" tool_tip="Mostrar opções adicionais"/>
-		<button label="Salvar" name="save_btn"/>
-		<button label="Cancelar" name="cancel_btn"/>
-		<button label="Fechar" name="close_btn"/>
-		<button label="Perfil" name="profile_btn" tool_tip="Mostrar perfil do lugar"/>
+		<layout_stack name="bottom_bar_ls0">
+			<layout_panel name="lp1">
+				<layout_stack name="bottom_bar_ls1">
+					<layout_panel name="teleport_btn_lp">
+						<button label="Teletransportar" name="teleport_btn" tool_tip="Teletransportar para a área selecionada"/>
+					</layout_panel>
+					<layout_panel name="chat_btn_lp">
+						<button label="Mapa" name="map_btn" tool_tip="Exibir a área correspondente no Mapa Mundi"/>
+					</layout_panel>
+				</layout_stack>
+			</layout_panel>
+			<layout_panel name="lp2">
+				<layout_stack name="bottom_bar_ls3">
+					<layout_panel name="edit_btn_lp">
+						<button label="Editar" name="edit_btn" tool_tip="Editar dados do marco"/>
+					</layout_panel>
+					<layout_panel name="overflow_btn_lp">
+						<button label="▼" name="overflow_btn" tool_tip="Mostrar opções adicionais"/>
+					</layout_panel>
+				</layout_stack>
+				<layout_stack name="bottom_bar_ls3">
+					<layout_panel name="profile_btn_lp">
+						<button label="Perfil" name="profile_btn" tool_tip="Mostrar perfil do lugar"/>
+					</layout_panel>
+				</layout_stack>
+				<layout_stack name="bottom_bar_close_ls3">
+					<layout_panel name="close_btn_lp">
+						<button label="Fechar" name="close_btn"/>
+					</layout_panel>
+				</layout_stack>
+			</layout_panel>
+		</layout_stack>
+		<layout_stack name="bottom_bar_ls2">
+			<layout_panel name="save_btn_lp">
+				<button label="Salvar" name="save_btn"/>
+			</layout_panel>
+			<layout_panel name="cancel_btn_lp">
+				<button label="Cancelar" name="cancel_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_chat.xml b/indra/newview/skins/default/xui/pt/panel_preferences_chat.xml
index 1ec674e2e2..ea15b90628 100644
--- a/indra/newview/skins/default/xui/pt/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/pt/panel_preferences_chat.xml
@@ -56,27 +56,27 @@
 		<radio_item label="Janelas separadas" name="radio" value="0"/>
 		<radio_item label="Guias" name="radio2" value="1"/>
 	</radio_group>
-	<check_box label="Traduzir Chat" name="translate_chat_checkbox" />
+	<check_box label="Traduzir bate-papo automaticamente (via Google)" name="translate_chat_checkbox"/>
 	<text name="translate_language_text">
-		Chat Língua:
+		Traduzir bate-papo para:
 	</text>
 	<combo_box name="translate_language_combobox">
-		<combo_box.item name="System Default Language" label="Padrão do Sistema" />
-		<combo_box.item name="English" label="English (Inglês)" />
-		<combo_box.item name="Danish" label="Dansk (Dinamarquês)" />
-		<combo_box.item name="German" label="Deutsch (Alemão)" />
-		<combo_box.item name="Spanish" label="Español (Espanhol)" />
-		<combo_box.item name="French" label="Français (Francês)" />
-		<combo_box.item name="Italian" label="Italiano" />
-		<combo_box.item name="Hungarian" label="Magyar (Húngaro)" />
-		<combo_box.item name="Dutch" label="Nederlands (Holandês)" />
-		<combo_box.item name="Polish" label="Polski (Polonês)" />
-		<combo_box.item name="Portugese" label="Português" />
-		<combo_box.item name="Russian" label="Русский (Russo)" />
-		<combo_box.item name="Turkish" label="Türkçe (Turco)" />
-		<combo_box.item name="Ukrainian" label="Українська (Ucraniano)" />
-		<combo_box.item name="Chinese" label="中文 (简体) (Chinês)" />
-		<combo_box.item name="Japanese" label="日本語 (Japonês)" />
-		<combo_box.item name="Korean" label="한국어 (Coreano)" />
+		<combo_box.item label="Padrão" name="System Default Language"/>
+		<combo_box.item label="English (Inglês)" name="English"/>
+		<combo_box.item label="Dansk (Dinamarquês)" name="Danish"/>
+		<combo_box.item label="Deutsch (Alemão)" name="German"/>
+		<combo_box.item label="Español (Espanhol)" name="Spanish"/>
+		<combo_box.item label="Français (Francês)" name="French"/>
+		<combo_box.item label="Italiano (Italiano)" name="Italian"/>
+		<combo_box.item label="Magyar (Húngaro)" name="Hungarian"/>
+		<combo_box.item label="Nederlands (Holandês)" name="Dutch"/>
+		<combo_box.item label="Polski (Polonês)" name="Polish"/>
+		<combo_box.item label="Português (Português)" name="Portugese"/>
+		<combo_box.item label="Русский (Russo)" name="Russian"/>
+		<combo_box.item label="Türkçe (Turco)" name="Turkish"/>
+		<combo_box.item label="Українська (Ucraniano)" name="Ukrainian"/>
+		<combo_box.item label="中文 (简体) (Chinês)" name="Chinese"/>
+		<combo_box.item label="日本語 (Japonês)" name="Japanese"/>
+		<combo_box.item label="한국어 (Coreano)" name="Korean"/>
 	</combo_box>
 </panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_general.xml b/indra/newview/skins/default/xui/pt/panel_preferences_general.xml
index 8a34897c9b..aefee32d44 100644
--- a/indra/newview/skins/default/xui/pt/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/pt/panel_preferences_general.xml
@@ -13,7 +13,7 @@
 		<combo_box.item label="Italiano - Beta" name="Italian"/>
 		<combo_box.item label="Nederlands (Holandês) - Beta" name="Dutch"/>
 		<combo_box.item label="Polski (Polonês) - Beta" name="Polish"/>
-		<combo_box.item label="Português - Beta" name="Portugese"/>
+		<combo_box.item label="Português (Português) - Beta" name="Portugese"/>
 		<combo_box.item label="日本語 (Japonês) - Beta" name="(Japanese)"/>
 	</combo_box>
 	<text name="language_textbox2">
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml
index c24cc96d3b..912eea13b8 100644
--- a/indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml
@@ -29,22 +29,16 @@ rápido
 		<check_box initial_value="true" label="Bump de Mapeamento e Brilho" name="BumpShiny"/>
 		<check_box initial_value="true" label="Sombreadores básicos" name="BasicShaders" tool_tip="Desabilitar esta opção poderá impedir que alguns drivers de placa de vídeo a travem."/>
 		<check_box initial_value="true" label="Sombreadores Atmosféricos" name="WindLightUseAtmosShaders"/>
-		<check_box initial_value="true" label="Reflexos de Água" name="Reflections"/>
-		<text name="ReflectionDetailText">
-			Detalhes de Reflexão:
+		<text name="reflection_label">
+			Reflexo de água:
 		</text>
-		<radio_group name="ReflectionDetailRadio">
-			<radio_item label="Terreno e árvores" name="0"/>
-			<radio_item label="Todos os objetos estáticos" name="1"/>
-			<radio_item label="Todos os avatares e Objetos" name="2"/>
-			<radio_item label="Tudo" name="3"/>
-		</radio_group>
-		<text name="AvatarRenderingText">
-			Renderização de Avatar:
-		</text>
-		<check_box initial_value="true" label="Atributos do Avatar" name="AvatarImpostors"/>
-		<check_box initial_value="true" label="Melhoria de Hardware" name="AvatarVertexProgram"/>
-		<check_box initial_value="true" label="Vestimenta do Avatar" name="AvatarCloth"/>
+		<combo_box initial_value="true" label="Reflexos de Água" name="Reflections">
+			<combo_box.item label="Mínimo" name="0"/>
+			<combo_box.item label="Terreno e árvores" name="1"/>
+			<combo_box.item label="Objetos estáticos" name="2"/>
+			<combo_box.item label="Avatares e objetos" name="3"/>
+			<combo_box.item label="Tudo" name="4"/>
+		</combo_box>
 		<slider label="Distancia de desenho:" name="DrawDistance"/>
 		<text name="DrawDistanceMeterText2">
 			m
@@ -82,13 +76,12 @@ rápido
 		<text name="SkyMeshDetailText">
 			Baixo
 		</text>
-		<text name="LightingDetailText">
-			Detalhes de Iluminação:
+		<text name="AvatarRenderingText">
+			Renderização de Avatar:
 		</text>
-		<radio_group name="LightingDetailRadio">
-			<radio_item label="Sol e Lua apenas" name="SunMoon" value="0"/>
-			<radio_item label="Luzes locais nas proximidades" name="LocalLights" value="1"/>
-		</radio_group>
+		<check_box initial_value="true" label="Atributos do Avatar" name="AvatarImpostors"/>
+		<check_box initial_value="true" label="Melhoria de Hardware" name="AvatarVertexProgram"/>
+		<check_box initial_value="true" label="Vestimenta do Avatar" name="AvatarCloth"/>
 		<text name="TerrainDetailText">
 			Detalhe do Terreno:
 		</text>
@@ -96,6 +89,7 @@ rápido
 			<radio_item label="Baixo" name="0"/>
 			<radio_item label="Alto" name="2"/>
 		</radio_group>
+		--&gt;
 	</panel>
 	<button label="Aplicar" label_selected="Aplicar" name="Apply"/>
 	<button label="Redefinir" left="110" name="Defaults"/>
diff --git a/indra/newview/skins/default/xui/pt/panel_profile.xml b/indra/newview/skins/default/xui/pt/panel_profile.xml
index 805e3aaebd..e4200ae5da 100644
--- a/indra/newview/skins/default/xui/pt/panel_profile.xml
+++ b/indra/newview/skins/default/xui/pt/panel_profile.xml
@@ -36,17 +36,29 @@
 				</panel>
 			</scroll_container>
 		</layout_panel>
+	</layout_stack>
+	<layout_stack name="layout_verb_buttons">
 		<layout_panel name="profile_buttons_panel">
-			<button label="Adicionar amigo" name="add_friend" tool_tip="Oferecer amizade ao residente"/>
-			<button label="MI" name="im" tool_tip="Abrir sessão de mensagem instantânea"/>
-			<button label="Ligar" name="call" tool_tip="Ligar para este residente"/>
-			<button label="Mapa" name="show_on_map_btn" tool_tip="Exibir o residente no mapa"/>
-			<button label="Teletransportar" name="teleport" tool_tip="Oferecer teletransporte"/>
-			<button label="▼" name="overflow_btn" tool_tip="Pagar ou compartilhar inventário com o residente"/>
+			<layout_stack name="bottom_bar_ls">
+				<layout_panel name="add_friend_btn_lp">
+					<button label="Adicionar amigo" name="add_friend" tool_tip="Oferecer amizade ao residente"/>
+				</layout_panel>
+				<layout_panel name="im_btn_lp">
+					<button label="MI" name="im" tool_tip="Abrir sessão de mensagem instantânea"/>
+				</layout_panel>
+				<layout_panel name="call_btn_lp">
+					<button label="Ligar" name="call" tool_tip="Ligar para este residente"/>
+				</layout_panel>
+				<layout_panel name="chat_btn_lp">
+					<button label="Teletransportar" name="teleport" tool_tip="Oferecer teletransporte"/>
+				</layout_panel>
+				<layout_panel name="overflow_btn_lp">
+					<button label="▼" name="overflow_btn" tool_tip="Pagar ou compartilhar inventário com o residente"/>
+				</layout_panel>
+			</layout_stack>
 		</layout_panel>
 		<layout_panel name="profile_me_buttons_panel">
 			<button label="Editar perfil" name="edit_profile_btn" tool_tip="Editar dados pessoais"/>
-			<button label="Editar aparência" name="edit_appearance_btn" tool_tip="Criar/editar aparência: físico, roupas, etc."/>
 		</layout_panel>
 	</layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_side_tray_tab_caption.xml b/indra/newview/skins/default/xui/pt/panel_side_tray_tab_caption.xml
index 7c06119901..09444a5535 100644
--- a/indra/newview/skins/default/xui/pt/panel_side_tray_tab_caption.xml
+++ b/indra/newview/skins/default/xui/pt/panel_side_tray_tab_caption.xml
@@ -1,5 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="sidetray_tab_panel">
 	<text name="sidetray_tab_title" value="Bandeja lateral"/>
+	<button name="undock" tool_tip="Soltar janela"/>
+	<button name="dock" tool_tip="Ancorar janela"/>
 	<button name="show_help" tool_tip="Mostrar ajuda"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/pt/sidepanel_inventory.xml b/indra/newview/skins/default/xui/pt/sidepanel_inventory.xml
index e382da258f..11ac6c106a 100644
--- a/indra/newview/skins/default/xui/pt/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/pt/sidepanel_inventory.xml
@@ -2,12 +2,20 @@
 <panel label="Coisas" name="objects panel">
 	<panel label="" name="sidepanel__inventory_panel">
 		<panel name="button_panel">
-			<button label="Perfil" name="info_btn" tool_tip="Mostrar perfil do objeto"/>
-			<button label="Compartilhar" name="share_btn" tool_tip="Compartilhar item de inventário"/>
-			<button label="Comprar" name="shop_btn" tool_tip="Abrir página do Marketplace"/>
-			<button label="Vestir" name="wear_btn" tool_tip="Vestir visual selecionado"/>
-			<button label="Tocar" name="play_btn"/>
-			<button label="Teletransportar" name="teleport_btn" tool_tip="Teletransportar para a área selecionada"/>
+			<layout_stack name="button_panel_ls">
+				<layout_panel name="info_btn_lp">
+					<button label="Perfil" name="info_btn" tool_tip="Mostrar perfil do objeto"/>
+				</layout_panel>
+				<layout_panel name="share_btn_lp">
+					<button label="Compartilhar" name="share_btn" tool_tip="Compartilhar item de inventário"/>
+				</layout_panel>
+				<layout_panel name="shop_btn_lp">
+					<button label="Comprar" name="shop_btn" tool_tip="Abrir página do Marketplace"/>
+					<button label="Vestir" name="wear_btn" tool_tip="Vestir visual selecionado"/>
+					<button label="Tocar" name="play_btn"/>
+					<button label="Teletransportar" name="teleport_btn" tool_tip="Teletransportar para a área selecionada"/>
+				</layout_panel>
+			</layout_stack>
 		</panel>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/pt/sidepanel_item_info.xml b/indra/newview/skins/default/xui/pt/sidepanel_item_info.xml
index 5af3a73d3d..e6370ea830 100644
--- a/indra/newview/skins/default/xui/pt/sidepanel_item_info.xml
+++ b/indra/newview/skins/default/xui/pt/sidepanel_item_info.xml
@@ -23,54 +23,53 @@
 	</panel.string>
 	<text name="title" value="Perfil do item"/>
 	<text name="origin" value="(Inventário)"/>
-	<panel label="" name="item_profile">
-		<text name="LabelItemNameTitle">
-			Nome:
-		</text>
-		<text name="LabelItemDescTitle">
-			Descrição:
-		</text>
-		<text name="LabelCreatorTitle">
-			Criador:
-		</text>
-		<button label="Perfil..." name="BtnCreator"/>
-		<text name="LabelOwnerTitle">
-			Proprietário:
-		</text>
-		<button label="Perfil..." name="BtnOwner"/>
-		<text name="LabelAcquiredTitle">
-			Adquirido:
-		</text>
-		<text name="LabelAcquiredDate"/>
-		<panel name="perms_inv">
-			<text name="perm_modify">
-				Você pode:
+	<scroll_container name="item_profile_scroll">
+		<panel label="" name="item_profile">
+			<text name="LabelItemNameTitle">
+				Nome:
 			</text>
-			<check_box label="Modificar" name="CheckOwnerModify"/>
-			<check_box label="Copiar" name="CheckOwnerCopy"/>
-			<check_box label="Transferir" name="CheckOwnerTransfer"/>
-			<text name="AnyoneLabel">
-				Todos:
+			<text name="LabelItemDescTitle">
+				Descrição:
 			</text>
-			<check_box label="Copiar" name="CheckEveryoneCopy"/>
-			<text name="GroupLabel">
-				Grupo:
+			<text name="LabelCreatorTitle">
+				Criador:
 			</text>
-			<check_box label="Compartilhar" name="CheckShareWithGroup" tool_tip="Permitir que todos os membros do grupo tenham o seu nível de modificação para este objeto. Faça uma doação para ativar restrições de função."/>
-			<text name="NextOwnerLabel">
-				Próximo proprietário:
+			<text name="LabelOwnerTitle">
+				Proprietário:
 			</text>
-			<check_box label="Modificar" name="CheckNextOwnerModify"/>
-			<check_box label="Copiar" name="CheckNextOwnerCopy"/>
-			<check_box label="Transferir" name="CheckNextOwnerTransfer" tool_tip="O próximo dono poderá revender ou dar este objeto"/>
+			<text name="LabelAcquiredTitle">
+				Adquirido:
+			</text>
+			<panel name="perms_inv">
+				<text name="perm_modify">
+					Você pode:
+				</text>
+				<check_box label="Modificar" name="CheckOwnerModify"/>
+				<check_box label="Copiar" name="CheckOwnerCopy"/>
+				<check_box label="Transferir" name="CheckOwnerTransfer"/>
+				<text name="AnyoneLabel">
+					Todos:
+				</text>
+				<check_box label="Copiar" name="CheckEveryoneCopy"/>
+				<text name="GroupLabel">
+					Grupo:
+				</text>
+				<check_box label="Compartilhar" name="CheckShareWithGroup" tool_tip="Permitir que todos os membros do grupo tenhas suas permissões de modificação para este objeto. Faça uma doação para ativar restrições de função."/>
+				<text name="NextOwnerLabel">
+					Próximo proprietário:
+				</text>
+				<check_box label="Modificar" name="CheckNextOwnerModify"/>
+				<check_box label="Copiar" name="CheckNextOwnerCopy"/>
+				<check_box label="Transferir" name="CheckNextOwnerTransfer" tool_tip="O próximo dono poderá revender ou dar este objeto"/>
+			</panel>
+			<check_box label="À venda" name="CheckPurchase"/>
+			<combo_box name="combobox sale copy">
+				<combo_box.item label="Copiar" name="Copy"/>
+				<combo_box.item label="Original" name="Original"/>
+			</combo_box>
+			<spinner label="Preço: L$" name="Edit Cost"/>
 		</panel>
-		<check_box label="À venda" name="CheckPurchase"/>
-		<combo_box name="combobox sale copy">
-			<combo_box.item label="Copiar" name="Copy"/>
-			<combo_box.item label="Original" name="Original"/>
-		</combo_box>
-		<spinner label="Preço: L$" name="Edit Cost"/>
-	</panel>
+	</scroll_container>
 	<panel name="button_panel">
 		<button label="Cancelar" name="cancel_btn"/>
 	</panel>
diff --git a/indra/newview/skins/default/xui/pt/strings.xml b/indra/newview/skins/default/xui/pt/strings.xml
index b6ecc9347b..5d87a855ef 100644
--- a/indra/newview/skins/default/xui/pt/strings.xml
+++ b/indra/newview/skins/default/xui/pt/strings.xml
@@ -1267,6 +1267,9 @@
 	<string name="Right Pec">
 		Peitoral D
 	</string>
+	<string name="Invalid Attachment">
+		Ponto de encaixe inválido
+	</string>
 	<string name="YearsMonthsOld">
 		[AGEYEARS] [AGEMONTHS] de idade
 	</string>
@@ -1644,9 +1647,6 @@
 	<string name="ATTACH_HUD_BOTTOM_RIGHT">
 		HUD direito inferior
 	</string>
-	<string name="Bad attachment point">
-		Ponto de encaixe inválido
-	</string>
 	<string name="CursorPos">
 		Linha [LINE], Coluna [COLUMN]
 	</string>
@@ -1662,12 +1662,6 @@
 	<string name="BusyModeResponseDefault">
 		O residente para o qual escreveu está no modo &apos;ocupado&apos;, ou seja, ele prefere não receber nada no momento. Sua mensagem será exibida como uma MI mais tarde.
 	</string>
-	<string name="NoOutfits">
-		Você ainda não tem nenhum look. Tente encontrar um na [secondlife:///app/search/groups Busca].
-	</string>
-	<string name="NoOutfitsTabsMatched">
-		Não encontrou o que procura? Tente fazer uma [secondlife:///app/search/people/[SEARCH_TERM] Busca].
-	</string>
 	<string name="MuteByName">
 		(por nome)
 	</string>
@@ -1822,6 +1816,12 @@ Expected .wav, .tga, .bmp, .jpg, .jpeg, or .bvh
 	<string name="accel-win-shift">
 		Shift+
 	</string>
+	<string name="Esc">
+		Esc
+	</string>
+	<string name="Home">
+		Início
+	</string>
 	<string name="FileSaved">
 		Arquivo salvo
 	</string>
@@ -3437,6 +3437,9 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
 	<string name="IM_moderator_label">
 		(Moderador)
 	</string>
+	<string name="Saved_message">
+		(Salvo em [LONG_TIMESTAMP])
+	</string>
 	<string name="answered_call">
 		Ligação atendida
 	</string>
@@ -3458,6 +3461,12 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
 	<string name="hang_up-im">
 		Saiu da ligação de voz
 	</string>
+	<string name="conference-title-incoming">
+		Conversa com [AGENT_NAME]
+	</string>
+	<string name="no_session_message">
+		(Sessão de MI inexistente)
+	</string>
 	<string name="only_user_message">
 		Você é o único usuário desta sessão.
 	</string>
@@ -3842,4 +3851,13 @@ Denunciar abuso
 	<string name="Chat">
 		Bate-papo
 	</string>
+	<string name="DeleteItems">
+		Excluir itens selecionados?
+	</string>
+	<string name="DeleteItem">
+		Excluir item selecionado?
+	</string>
+	<string name="EmptyOutfitText">
+		Este look não possui nenhuma peça
+	</string>
 </strings>
-- 
cgit v1.2.3


From 2a8de5a952bc5072ed9bb85b147e7d9af42ccb41 Mon Sep 17 00:00:00 2001
From: Eli Linden <eli@lindenlab.com>
Date: Mon, 11 Oct 2010 16:03:37 -0700
Subject: CT-575 WIP PT translation for set18, new file

---
 indra/newview/skins/default/xui/pt/menu_add_wearable_gear.xml | 6 ++++++
 1 file changed, 6 insertions(+)
 create mode 100644 indra/newview/skins/default/xui/pt/menu_add_wearable_gear.xml

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/pt/menu_add_wearable_gear.xml b/indra/newview/skins/default/xui/pt/menu_add_wearable_gear.xml
new file mode 100644
index 0000000000..4b81276ab3
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/menu_add_wearable_gear.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Add Wearable Gear Menu">
+	<menu_item_check label="Ordenar por mais recente" name="sort_by_most_recent"/>
+	<menu_item_check label="Ordenar por nome" name="sort_by_name"/>
+	<menu_item_check label="Ordenar por tipo" name="sort_by_type"/>
+</menu>
-- 
cgit v1.2.3


From 0bc3a8f977beb4af2d89c5917aaeca8108a3b376 Mon Sep 17 00:00:00 2001
From: Eli Linden <eli@lindenlab.com>
Date: Mon, 11 Oct 2010 18:28:01 -0700
Subject: CT-575 WIP JA DE IT translation for set18

---
 indra/newview/skins/default/xui/de/floater_map.xml |  2 +-
 .../skins/default/xui/de/floater_nearby_chat.xml   |  4 +-
 .../newview/skins/default/xui/de/floater_tools.xml |  9 ++-
 .../skins/default/xui/de/menu_attachment_self.xml  |  1 +
 .../skins/default/xui/de/menu_avatar_self.xml      |  1 +
 .../default/xui/de/menu_inspect_object_gear.xml    |  1 +
 .../default/xui/de/menu_inspect_self_gear.xml      |  1 +
 .../newview/skins/default/xui/de/menu_mini_map.xml |  1 +
 indra/newview/skins/default/xui/de/menu_object.xml |  4 +-
 .../xui/de/menu_people_friends_view_sort.xml       |  1 +
 .../xui/de/menu_people_nearby_multiselect.xml      |  1 +
 indra/newview/skins/default/xui/de/menu_viewer.xml | 19 ++---
 .../skins/default/xui/de/menu_wearing_gear.xml     |  1 +
 .../skins/default/xui/de/menu_wearing_tab.xml      |  2 +
 .../newview/skins/default/xui/de/notifications.xml | 14 +++-
 .../default/xui/de/panel_avatar_list_item.xml      |  4 +
 .../skins/default/xui/de/panel_bottomtray.xml      | 18 ++---
 .../skins/default/xui/de/panel_classified_info.xml | 14 +++-
 .../skins/default/xui/de/panel_edit_classified.xml | 12 ++-
 .../skins/default/xui/de/panel_edit_pick.xml       | 10 ++-
 .../skins/default/xui/de/panel_edit_profile.xml    | 10 ++-
 .../skins/default/xui/de/panel_edit_wearable.xml   | 10 ++-
 .../default/xui/de/panel_group_info_sidetray.xml   | 10 ++-
 .../skins/default/xui/de/panel_landmarks.xml       | 14 +++-
 .../skins/default/xui/de/panel_my_profile.xml      |  7 +-
 indra/newview/skins/default/xui/de/panel_notes.xml | 22 ++++--
 .../skins/default/xui/de/panel_outfit_edit.xml     | 10 ++-
 .../default/xui/de/panel_outfits_inventory.xml     | 10 ++-
 .../newview/skins/default/xui/de/panel_people.xml  | 50 ++++++++++---
 .../skins/default/xui/de/panel_pick_info.xml       | 20 +++--
 indra/newview/skins/default/xui/de/panel_picks.xml | 20 ++++-
 .../newview/skins/default/xui/de/panel_places.xml  | 48 ++++++++++--
 .../default/xui/de/panel_preferences_chat.xml      | 38 +++++-----
 .../default/xui/de/panel_preferences_graphics1.xml | 36 ++++-----
 .../newview/skins/default/xui/de/panel_profile.xml | 26 +++++--
 .../default/xui/de/panel_side_tray_tab_caption.xml |  2 +
 .../skins/default/xui/de/sidepanel_inventory.xml   | 20 +++--
 .../skins/default/xui/de/sidepanel_item_info.xml   | 87 +++++++++++-----------
 indra/newview/skins/default/xui/de/strings.xml     | 38 +++++++---
 indra/newview/skins/default/xui/it/floater_map.xml | 25 +------
 .../skins/default/xui/it/floater_nearby_chat.xml   |  4 +-
 .../newview/skins/default/xui/it/floater_tools.xml |  7 +-
 .../skins/default/xui/it/menu_attachment_self.xml  |  1 +
 .../skins/default/xui/it/menu_avatar_self.xml      |  1 +
 .../default/xui/it/menu_inspect_object_gear.xml    |  1 +
 .../default/xui/it/menu_inspect_self_gear.xml      |  1 +
 .../newview/skins/default/xui/it/menu_mini_map.xml |  1 +
 indra/newview/skins/default/xui/it/menu_object.xml |  8 +-
 .../skins/default/xui/it/menu_participant_list.xml |  2 +-
 .../xui/it/menu_people_friends_view_sort.xml       |  1 +
 .../xui/it/menu_people_nearby_multiselect.xml      |  1 +
 indra/newview/skins/default/xui/it/menu_viewer.xml | 16 ++--
 .../default/xui/it/menu_wearable_list_item.xml     |  2 +-
 .../skins/default/xui/it/menu_wearing_gear.xml     |  1 +
 .../skins/default/xui/it/menu_wearing_tab.xml      |  2 +
 .../newview/skins/default/xui/it/notifications.xml | 14 +++-
 .../default/xui/it/panel_avatar_list_item.xml      |  4 +
 .../skins/default/xui/it/panel_bottomtray.xml      | 18 ++---
 .../skins/default/xui/it/panel_classified_info.xml | 14 +++-
 .../skins/default/xui/it/panel_edit_classified.xml | 12 ++-
 .../skins/default/xui/it/panel_edit_pick.xml       | 10 ++-
 .../skins/default/xui/it/panel_edit_profile.xml    | 10 ++-
 .../skins/default/xui/it/panel_edit_wearable.xml   | 10 ++-
 .../default/xui/it/panel_group_info_sidetray.xml   | 10 ++-
 .../skins/default/xui/it/panel_landmarks.xml       | 14 +++-
 .../skins/default/xui/it/panel_my_profile.xml      |  7 +-
 indra/newview/skins/default/xui/it/panel_notes.xml | 30 +++++---
 .../skins/default/xui/it/panel_outfit_edit.xml     | 10 ++-
 .../default/xui/it/panel_outfits_inventory.xml     | 10 ++-
 .../newview/skins/default/xui/it/panel_people.xml  | 50 ++++++++++---
 .../skins/default/xui/it/panel_pick_info.xml       | 20 +++--
 indra/newview/skins/default/xui/it/panel_picks.xml | 23 ++++--
 .../newview/skins/default/xui/it/panel_places.xml  | 48 ++++++++++--
 .../default/xui/it/panel_preferences_chat.xml      | 38 +++++-----
 .../default/xui/it/panel_preferences_general.xml   |  4 +-
 .../default/xui/it/panel_preferences_graphics1.xml | 36 ++++-----
 .../newview/skins/default/xui/it/panel_profile.xml | 26 +++++--
 .../default/xui/it/panel_side_tray_tab_caption.xml |  2 +
 .../skins/default/xui/it/sidepanel_inventory.xml   | 20 +++--
 .../skins/default/xui/it/sidepanel_item_info.xml   | 85 +++++++++++----------
 indra/newview/skins/default/xui/it/strings.xml     | 36 ++++++---
 indra/newview/skins/default/xui/ja/floater_map.xml |  2 +-
 .../skins/default/xui/ja/floater_nearby_chat.xml   |  4 +-
 .../newview/skins/default/xui/ja/floater_tools.xml |  7 +-
 .../skins/default/xui/ja/menu_attachment_self.xml  |  1 +
 .../skins/default/xui/ja/menu_avatar_self.xml      |  3 +-
 .../default/xui/ja/menu_inspect_object_gear.xml    |  1 +
 .../default/xui/ja/menu_inspect_self_gear.xml      |  1 +
 .../newview/skins/default/xui/ja/menu_mini_map.xml |  1 +
 indra/newview/skins/default/xui/ja/menu_object.xml |  6 +-
 .../xui/ja/menu_people_friends_view_sort.xml       |  1 +
 .../xui/ja/menu_people_nearby_multiselect.xml      |  1 +
 indra/newview/skins/default/xui/ja/menu_viewer.xml | 19 ++---
 .../default/xui/ja/menu_wearable_list_item.xml     |  6 +-
 .../skins/default/xui/ja/menu_wearing_gear.xml     |  1 +
 .../skins/default/xui/ja/menu_wearing_tab.xml      |  2 +
 .../newview/skins/default/xui/ja/notifications.xml | 12 ++-
 .../default/xui/ja/panel_avatar_list_item.xml      |  4 +
 .../skins/default/xui/ja/panel_bottomtray.xml      | 18 ++---
 .../skins/default/xui/ja/panel_classified_info.xml | 14 +++-
 .../skins/default/xui/ja/panel_edit_classified.xml | 12 ++-
 .../skins/default/xui/ja/panel_edit_pick.xml       | 10 ++-
 .../skins/default/xui/ja/panel_edit_profile.xml    | 10 ++-
 .../skins/default/xui/ja/panel_edit_wearable.xml   | 10 ++-
 .../default/xui/ja/panel_group_info_sidetray.xml   | 10 ++-
 .../skins/default/xui/ja/panel_landmarks.xml       | 14 +++-
 .../skins/default/xui/ja/panel_my_profile.xml      |  7 +-
 indra/newview/skins/default/xui/ja/panel_notes.xml | 22 ++++--
 .../skins/default/xui/ja/panel_outfit_edit.xml     | 10 ++-
 .../default/xui/ja/panel_outfits_inventory.xml     | 10 ++-
 .../newview/skins/default/xui/ja/panel_people.xml  | 50 ++++++++++---
 .../skins/default/xui/ja/panel_pick_info.xml       | 20 +++--
 indra/newview/skins/default/xui/ja/panel_picks.xml | 20 ++++-
 .../newview/skins/default/xui/ja/panel_places.xml  | 48 ++++++++++--
 .../default/xui/ja/panel_preferences_chat.xml      | 38 +++++-----
 .../default/xui/ja/panel_preferences_general.xml   |  2 +-
 .../default/xui/ja/panel_preferences_graphics1.xml | 36 ++++-----
 .../newview/skins/default/xui/ja/panel_profile.xml | 26 +++++--
 .../default/xui/ja/panel_side_tray_tab_caption.xml |  2 +
 .../skins/default/xui/ja/sidepanel_inventory.xml   | 20 +++--
 .../skins/default/xui/ja/sidepanel_item_info.xml   | 87 +++++++++++-----------
 indra/newview/skins/default/xui/ja/strings.xml     | 36 ++++++---
 122 files changed, 1215 insertions(+), 622 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/de/floater_map.xml b/indra/newview/skins/default/xui/de/floater_map.xml
index d4358fa8e9..217a641dec 100644
--- a/indra/newview/skins/default/xui/de/floater_map.xml
+++ b/indra/newview/skins/default/xui/de/floater_map.xml
@@ -25,7 +25,7 @@
 		NW
 	</floater.string>
 	<floater.string name="ToolTipMsg">
-		[AGENT][REGION](Karte mit Doppelklick öffnen)
+		[REGION](Doppelklicken, um Karte zu öffnen; Umschalt-Taste gedrückt halten und ziehen, um zu schwenken)
 	</floater.string>
 	<floater.string name="mini_map_caption">
 		MINI-KARTE
diff --git a/indra/newview/skins/default/xui/de/floater_nearby_chat.xml b/indra/newview/skins/default/xui/de/floater_nearby_chat.xml
index e362273396..bbb4114200 100644
--- a/indra/newview/skins/default/xui/de/floater_nearby_chat.xml
+++ b/indra/newview/skins/default/xui/de/floater_nearby_chat.xml
@@ -1,2 +1,4 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="nearby_chat" title="CHAT IN DER NÄHE"/>
+<floater name="nearby_chat" title="CHAT IN DER NÄHE">
+	<check_box label="Chat übersetzen (Service von Google)" name="translate_chat_checkbox"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_tools.xml b/indra/newview/skins/default/xui/de/floater_tools.xml
index 3de3718f66..fe4c505cee 100644
--- a/indra/newview/skins/default/xui/de/floater_tools.xml
+++ b/indra/newview/skins/default/xui/de/floater_tools.xml
@@ -182,10 +182,10 @@
 			<text name="Group:">
 				Gruppe:
 			</text>
-			<button label="Festlegen..." label_selected="Festlegen..." name="button set group" tool_tip="Eine Gruppe auswählen, um die Berechtigungen des Objekts zu teilen."/>
 			<name_box initial_value="Wird geladen..." name="Group Name Proxy"/>
-			<button label="Übertragung" label_selected="Übertragung" name="button deed" tool_tip="Eine Übertragung bedeutet, dass das Objekt mit den Berechtigungen „Nächster Eigentümer“ weitergegeben wird. Mit der Gruppe geteilte Objekte können von einem Gruppen-Officer übertragen werden."/>
+			<button label="Festlegen..." label_selected="Festlegen..." name="button set group" tool_tip="Eine Gruppe auswählen, um die Berechtigungen des Objekts zu teilen."/>
 			<check_box label="Teilen" name="checkbox share with group" tool_tip="Mit allen Mitgliedern der zugeordneten Gruppe, Ihre Berechtigungen dieses Objekt zu ändern teilen. Sie müssen Übereignen, um Rollenbeschränkungen zu aktivieren."/>
+			<button label="Übertragung" label_selected="Übertragung" name="button deed" tool_tip="Eine Übertragung bedeutet, dass das Objekt mit den Berechtigungen „Nächster Eigentümer“ weitergegeben wird. Mit der Gruppe geteilte Objekte können von einem Gruppen-Officer übertragen werden."/>
 			<text name="label click action">
 				Bei Linksklick:
 			</text>
@@ -440,8 +440,9 @@
 				<combo_box.item label="Saugen" name="suction"/>
 				<combo_box.item label="gewoben" name="weave"/>
 			</combo_box>
-			<text name="tex scale">
-				Wiederholungen / Fläche
+			<check_box initial_value="falsch" label="Flache Oberflächen ausrichten" name="checkbox planar align" tool_tip="Texturen auf allen ausgewählten Oberflächen an der zuletzt ausgewählten Oberfläche ausrichten. Planar Texture Mapping erforderlich."/>
+			<text name="rpt">
+				Wiederholungen / Oberfläche
 			</text>
 			<spinner label="Horizontal (U)" name="TexScaleU"/>
 			<check_box label="Umkehren" name="checkbox flip s"/>
diff --git a/indra/newview/skins/default/xui/de/menu_attachment_self.xml b/indra/newview/skins/default/xui/de/menu_attachment_self.xml
index a47c633d57..644fc68ba4 100644
--- a/indra/newview/skins/default/xui/de/menu_attachment_self.xml
+++ b/indra/newview/skins/default/xui/de/menu_attachment_self.xml
@@ -3,6 +3,7 @@
 	<menu_item_call label="Berühren" name="Attachment Object Touch"/>
 	<menu_item_call label="Bearbeiten" name="Edit..."/>
 	<menu_item_call label="Abnehmen" name="Detach"/>
+	<menu_item_call label="Hinsetzen" name="Sit Down Here"/>
 	<menu_item_call label="Aufstehen" name="Stand Up"/>
 	<menu_item_call label="Outfit ändern" name="Change Outfit"/>
 	<menu_item_call label="Mein Outfit bearbeiten" name="Edit Outfit"/>
diff --git a/indra/newview/skins/default/xui/de/menu_avatar_self.xml b/indra/newview/skins/default/xui/de/menu_avatar_self.xml
index c74f646abb..582c76ac94 100644
--- a/indra/newview/skins/default/xui/de/menu_avatar_self.xml
+++ b/indra/newview/skins/default/xui/de/menu_avatar_self.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Self Pie">
+	<menu_item_call label="Hinsetzen" name="Sit Down Here"/>
 	<menu_item_call label="Aufstehen" name="Stand Up"/>
 	<context_menu label="Ausziehen" name="Take Off &gt;">
 		<context_menu label="Kleidung" name="Clothes &gt;">
diff --git a/indra/newview/skins/default/xui/de/menu_inspect_object_gear.xml b/indra/newview/skins/default/xui/de/menu_inspect_object_gear.xml
index 634ef0b198..7c47913e30 100644
--- a/indra/newview/skins/default/xui/de/menu_inspect_object_gear.xml
+++ b/indra/newview/skins/default/xui/de/menu_inspect_object_gear.xml
@@ -9,6 +9,7 @@
 	<menu_item_call label="Öffnen" name="open"/>
 	<menu_item_call label="Bearbeiten" name="edit"/>
 	<menu_item_call label="Anziehen" name="wear"/>
+	<menu_item_call label="Hinzufügen" name="add"/>
 	<menu_item_call label="Melden" name="report"/>
 	<menu_item_call label="Ignorieren" name="block"/>
 	<menu_item_call label="Hineinzoomen" name="zoom_in"/>
diff --git a/indra/newview/skins/default/xui/de/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/de/menu_inspect_self_gear.xml
index b28e83c3e3..851a96cc09 100644
--- a/indra/newview/skins/default/xui/de/menu_inspect_self_gear.xml
+++ b/indra/newview/skins/default/xui/de/menu_inspect_self_gear.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <menu name="Gear Menu">
+	<menu_item_call label="Hinsetzen" name="sit_down_here"/>
 	<menu_item_call label="Aufstehen" name="stand_up"/>
 	<menu_item_call label="Outfit ändern" name="change_outfit"/>
 	<menu_item_call label="Mein Profil" name="my_profile"/>
diff --git a/indra/newview/skins/default/xui/de/menu_mini_map.xml b/indra/newview/skins/default/xui/de/menu_mini_map.xml
index 7139b98965..bec79be34d 100644
--- a/indra/newview/skins/default/xui/de/menu_mini_map.xml
+++ b/indra/newview/skins/default/xui/de/menu_mini_map.xml
@@ -4,6 +4,7 @@
 	<menu_item_call label="Zoom Mittel" name="Zoom Medium"/>
 	<menu_item_call label="Zoom Weit" name="Zoom Far"/>
 	<menu_item_check label="Karte drehen" name="Rotate Map"/>
+	<menu_item_check label="Automatisch zentrieren" name="Auto Center"/>
 	<menu_item_call label="Verfolgung abschalten" name="Stop Tracking"/>
 	<menu_item_call label="Weltkarte" name="World Map"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/de/menu_object.xml b/indra/newview/skins/default/xui/de/menu_object.xml
index 5003939fb6..19057d4228 100644
--- a/indra/newview/skins/default/xui/de/menu_object.xml
+++ b/indra/newview/skins/default/xui/de/menu_object.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Object Pie">
 	<menu_item_call label="Berühren" name="Object Touch">
-		<on_enable parameter="Berühren" name="EnableTouch"/>
+		<menu_item_call.on_enable name="EnableTouch" parameter="Berühren"/>
 	</menu_item_call>
 	<menu_item_call label="Bearbeiten" name="Edit..."/>
 	<menu_item_call label="Bauen" name="Build"/>
@@ -12,6 +12,7 @@
 	<menu_item_call label="Hineinzoomen" name="Zoom In"/>
 	<context_menu label="Anziehen" name="Put On">
 		<menu_item_call label="Anziehen" name="Wear"/>
+		<menu_item_call label="Hinzufügen" name="Add"/>
 		<context_menu label="Anhängen" name="Object Attach"/>
 		<context_menu label="HUD anhängen" name="Object Attach HUD"/>
 	</context_menu>
@@ -21,7 +22,6 @@
 		<menu_item_call label="Zurückgeben" name="Return..."/>
 		<menu_item_call label="Löschen" name="Delete"/>
 	</context_menu>
-	<menu_item_call label="Kaufen" name="Pie Object Bye"/>
 	<menu_item_call label="Nehmen" name="Pie Object Take"/>
 	<menu_item_call label="Kopie nehmen" name="Take Copy"/>
 	<menu_item_call label="Bezahlen" name="Pay..."/>
diff --git a/indra/newview/skins/default/xui/de/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/de/menu_people_friends_view_sort.xml
index 9d50a42ed4..84d9d8938c 100644
--- a/indra/newview/skins/default/xui/de/menu_people_friends_view_sort.xml
+++ b/indra/newview/skins/default/xui/de/menu_people_friends_view_sort.xml
@@ -3,5 +3,6 @@
 	<menu_item_check label="Nach Name sortieren" name="sort_name"/>
 	<menu_item_check label="Nach Status sortieren" name="sort_status"/>
 	<menu_item_check label="Symbole für Personen anzeigen" name="view_icons"/>
+	<menu_item_check label="Erteilte Genehmigungen anzeigen" name="view_permissions"/>
 	<menu_item_call label="Ignorierte Einwohner &amp; Objekte anzeigen" name="show_blocked_list"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/de/menu_people_nearby_multiselect.xml b/indra/newview/skins/default/xui/de/menu_people_nearby_multiselect.xml
index d978d9e40c..b6e99edfe1 100644
--- a/indra/newview/skins/default/xui/de/menu_people_nearby_multiselect.xml
+++ b/indra/newview/skins/default/xui/de/menu_people_nearby_multiselect.xml
@@ -6,4 +6,5 @@
 	<menu_item_call label="Anrufen" name="Call"/>
 	<menu_item_call label="Teilen" name="Share"/>
 	<menu_item_call label="Bezahlen" name="Pay"/>
+	<menu_item_call label="Teleport anbieten" name="teleport"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_viewer.xml b/indra/newview/skins/default/xui/de/menu_viewer.xml
index b9b6a8ed50..bb9a4c8354 100644
--- a/indra/newview/skins/default/xui/de/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/de/menu_viewer.xml
@@ -94,7 +94,6 @@
 			<menu_item_call label="Skripts auf nicht ausführen einstellen" name="Set Scripts to Not Running"/>
 		</menu>
 		<menu label="Optionen" name="Options">
-			<menu_item_call label="Hochlade-Berechtigungen (Standard) festlegen" name="perm prefs"/>
 			<menu_item_check label="Erweiterte Berechtigungen anzeigen" name="DebugPermissions"/>
 			<menu_item_check label="Nur meine Objekte auswählen" name="Select Only My Objects"/>
 			<menu_item_check label="Nur bewegliche Objekte auswählen" name="Select Only Movable Objects"/>
@@ -121,7 +120,6 @@
 		<menu_item_call label="INFO ÜBER [APP_NAME]" name="About Second Life"/>
 	</menu>
 	<menu label="Erweitert" name="Advanced">
-		<menu_item_check label="Menü „Erweitert“ anzeigen" name="Show Advanced Menu"/>
 		<menu_item_call label="Animation meines Avatars stoppen" name="Stop Animating My Avatar"/>
 		<menu_item_call label="Textur neu laden" name="Rebake Texture"/>
 		<menu_item_call label="UI-Größe auf Standard setzen" name="Set UI Size to Default"/>
@@ -169,7 +167,6 @@
 			<menu_item_check label="FRInfo testen" name="Test FRInfo"/>
 			<menu_item_check label="Flexible Objekte" name="Flexible Objects"/>
 		</menu>
-		<menu_item_check label="Mehrere Threads ausführen" name="Run Multiple Threads"/>
 		<menu_item_check label="Plugin Read Thread verwenden" name="Use Plugin Read Thread"/>
 		<menu_item_call label="Gruppen-Cache löschen" name="ClearGroupCache"/>
 		<menu_item_check label="Weiche Mausbewegung" name="Mouse Smoothing"/>
@@ -178,7 +175,6 @@
 			<menu_item_check label="Suchen" name="Search"/>
 			<menu_item_call label="Tasten freigeben" name="Release Keys"/>
 			<menu_item_call label="UI-Größe auf Standard setzen" name="Set UI Size to Default"/>
-			<menu_item_check label="Erweitert-Menü anzeigen - veraltetet" name="Show Advanced Menu - legacy shortcut"/>
 			<menu_item_check label="Immer rennen" name="Always Run"/>
 			<menu_item_check label="Fliegen" name="Fly"/>
 			<menu_item_call label="Fenster schließen" name="Close Window"/>
@@ -198,6 +194,7 @@
 			<menu_item_call label="Hineinzoomen" name="Zoom In"/>
 			<menu_item_call label="Zoom-Standard" name="Zoom Default"/>
 			<menu_item_call label="Wegzoomen" name="Zoom Out"/>
+			<menu_item_check label="Menü „Erweitert“ anzeigen" name="Show Advanced Menu"/>
 		</menu>
 		<menu_item_call label="Debug-Einstellungen anzeigen" name="Debug Settings"/>
 		<menu_item_check label="Menü „Entwickler“ anzeigen" name="Debug Mode"/>
@@ -263,16 +260,19 @@
 			<menu_item_check label="Wireframe" name="Wireframe"/>
 			<menu_item_check label="Objekt-Objekt Okklusion" name="Object-Object Occlusion"/>
 			<menu_item_check label="Framebuffer-Objekte" name="Framebuffer Objects"/>
-			<menu_item_check label="Deferred Rendering" name="Deferred Rendering"/>
-			<menu_item_check label="Globale Beleuchtung" name="Global Illumination"/>
+			<menu_item_check label="Licht und Schatten" name="Lighting and Shadows"/>
+			<menu_item_check label="Schatten von Sonne-/Mond-Projektoren" name="Shadows from Sun/Moon/Projectors"/>
+			<menu_item_check label="SSAO und Schattenglättung" name="SSAO and Shadow Smoothing"/>
+			<menu_item_check label="Globale Beleuchtung (experimentell)" name="Global Illumination"/>
 			<menu_item_check label="Fehler in GL beseitigen" name="Debug GL"/>
 			<menu_item_check label="Fehler in Pipeline beseitigen" name="Debug Pipeline"/>
-			<menu_item_check label="Schnelles Alpha" name="Fast Alpha"/>
+			<menu_item_check label="Automatische Alpha-Masken (aufgeschoben)" name="Automatic Alpha Masks (deferred)"/>
+			<menu_item_check label="Automatische Alpha-Masken (nicht aufgeschoben)" name="Automatic Alpha Masks (non-deferred)"/>
 			<menu_item_check label="Animationstexturen" name="Animation Textures"/>
 			<menu_item_check label="Texturen deaktivieren" name="Disable Textures"/>
 			<menu_item_check label="Voll-Res-Texturen" name="Rull Res Textures"/>
 			<menu_item_check label="Texturen prüfen" name="Audit Textures"/>
-			<menu_item_check label="Textur-Atlas" name="Texture Atlas"/>
+			<menu_item_check label="Textur-Atlas (experimentell)" name="Texture Atlas"/>
 			<menu_item_check label="Angehängte Lichter rendern" name="Render Attached Lights"/>
 			<menu_item_check label="Angehängte Partikel rendern" name="Render Attached Particles"/>
 			<menu_item_check label="Leucht-Objekte schweben lassen" name="Hover Glow Objects"/>
@@ -309,7 +309,8 @@
 			<menu_item_call label="Ausgewählte Objektinfo drucken" name="Print Selected Object Info"/>
 			<menu_item_call label="Agent-Info drucken" name="Print Agent Info"/>
 			<menu_item_call label="Speicher-Stats" name="Memory Stats"/>
-			<menu_item_check label="Double-ClickAuto-Pilot" name="Double-ClickAuto-Pilot"/>
+			<menu_item_check label="Doppelklicken: Auto-Pilot" name="Double-Click Auto-Pilot"/>
+			<menu_item_check label="Doppelklicken: Teleport" name="DoubleClick Teleport"/>
 			<menu_item_check label="Fehler in SelectMgr beseitigen" name="Debug SelectMgr"/>
 			<menu_item_check label="Fehler in Klicks beseitigen" name="Debug Clicks"/>
 			<menu_item_check label="Debug-Ansichten" name="Debug Views"/>
diff --git a/indra/newview/skins/default/xui/de/menu_wearing_gear.xml b/indra/newview/skins/default/xui/de/menu_wearing_gear.xml
index d994571f01..80d4ff4d9f 100644
--- a/indra/newview/skins/default/xui/de/menu_wearing_gear.xml
+++ b/indra/newview/skins/default/xui/de/menu_wearing_gear.xml
@@ -1,4 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <menu name="Gear Wearing">
 	<menu_item_call label="Outfit bearbeiten" name="edit"/>
+	<menu_item_call label="Ausziehen" name="takeoff"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/de/menu_wearing_tab.xml b/indra/newview/skins/default/xui/de/menu_wearing_tab.xml
index d690572c8e..695451a105 100644
--- a/indra/newview/skins/default/xui/de/menu_wearing_tab.xml
+++ b/indra/newview/skins/default/xui/de/menu_wearing_tab.xml
@@ -1,4 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Wearing">
+	<menu_item_call label="Ausziehen" name="take_off"/>
+	<menu_item_call label="Abnehmen" name="detach"/>
 	<menu_item_call label="Outfit bearbeiten" name="edit"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/de/notifications.xml b/indra/newview/skins/default/xui/de/notifications.xml
index e5baf0f98f..0d966de380 100644
--- a/indra/newview/skins/default/xui/de/notifications.xml
+++ b/indra/newview/skins/default/xui/de/notifications.xml
@@ -1831,6 +1831,10 @@ Inventarobjekt(e) verschieben?
 		Wirklich beenden?
 		<usetemplate ignoretext="Bestätigen, bevor Sitzung beendet wird" name="okcancelignore" notext="Nicht beenden" yestext="Beenden"/>
 	</notification>
+	<notification name="DeleteItems">
+		[QUESTION]
+		<usetemplate ignoretext="Vor dem Löschen von Objekten bestätigen" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
+	</notification>
 	<notification name="HelpReportAbuseEmailLL">
 		Mit dieser Funktion können Sie Verstöße gegen die [http://secondlife.com/corporate/tos.php Servicebedingungen (EN)] und [http://secondlife.com/corporate/cs.php Community-Standards] melden.
 
@@ -2763,9 +2767,13 @@ Bitte überprüfen Sie Ihr Netzwerk- und Firewall-Setup.
 		(Seit [EXISTENCE] Sekunden inworld )
 Avatar &apos;[NAME]&apos; hat als vollständig gerezzter Avatar die Welt verlassen.
 	</notification>
-	<notification name="AvatarRezSelfBakeNotification">
-		(Seit [EXISTENCE] Sekunden inworld )
-Die [RESOLUTION]-gebakene Textur für &apos;[BODYREGION]&apos; wurde in [TIME] Sekunden [ACTION].
+	<notification name="AvatarRezSelfBakedTextureUploadNotification">
+		( [EXISTENCE] Sekunden am Leben)
+Sie haben eine [RESOLUTION]-gebackene Textur für „[BODYREGION]“ nach [TIME] Sekunden hochgeladen.
+	</notification>
+	<notification name="AvatarRezSelfBakedTextureUpdateNotification">
+		( [EXISTENCE] Sekunden am Leben)
+Sie haben lokal eine [RESOLUTION]-gebackene Textur für „[BODYREGION]“ nach [TIME] Sekunden aktualisiert.
 	</notification>
 	<notification name="ConfirmLeaveCall">
 		Möchten Sie dieses Gespräch wirklich verlassen ?
diff --git a/indra/newview/skins/default/xui/de/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/de/panel_avatar_list_item.xml
index 0715175dd9..2db8cf7c09 100644
--- a/indra/newview/skins/default/xui/de/panel_avatar_list_item.xml
+++ b/indra/newview/skins/default/xui/de/panel_avatar_list_item.xml
@@ -23,5 +23,9 @@
 	</string>
 	<text name="avatar_name" value="Unbekannt"/>
 	<text name="last_interaction" value="0s"/>
+	<icon name="permission_edit_theirs_icon" tool_tip="Sie können die Objekte dieses Freunds bearbeiten"/>
+	<icon name="permission_edit_mine_icon" tool_tip="Dieser Freund kann Ihre Objekte bearbeiten, löschen und an sich nehmen"/>
+	<icon name="permission_map_icon" tool_tip="Dieser Freund kann Sie auf der Karte finden"/>
+	<icon name="permission_online_icon" tool_tip="Dieser Freund kann sehen, wenn Sie online sind"/>
 	<button name="profile_btn" tool_tip="Profil anzeigen"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/de/panel_bottomtray.xml b/indra/newview/skins/default/xui/de/panel_bottomtray.xml
index ea15c88380..afe9836401 100644
--- a/indra/newview/skins/default/xui/de/panel_bottomtray.xml
+++ b/indra/newview/skins/default/xui/de/panel_bottomtray.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="bottom_tray">
+	<string name="DragIndicationImageName" value="Accordion_ArrowOpened_Off"/>
 	<string name="SpeakBtnToolTip" value="Schaltet Mikrofon ein/aus"/>
 	<string name="VoiceControlBtnToolTip" value="Voice-Chat-Steuerung anzeigen/ausblenden"/>
 	<layout_stack name="toolbar_stack">
@@ -12,28 +13,25 @@
 			<gesture_combo_list label="Gesten" name="Gesture" tool_tip="Gesten anzeigen/ausblenden"/>
 		</layout_panel>
 		<layout_panel name="movement_panel">
-			<button label="Bewegen" name="movement_btn" tool_tip="Bewegungssteuerung anzeigen/ausblenden"/>
+			<bottomtray_button label="Bewegen" name="movement_btn" tool_tip="Bewegungssteuerung anzeigen/ausblenden"/>
 		</layout_panel>
 		<layout_panel name="cam_panel">
-			<button label="Ansicht" name="camera_btn" tool_tip="Kamerasteuerung anzeigen/ausblenden"/>
+			<bottomtray_button label="Ansicht" name="camera_btn" tool_tip="Kamerasteuerung anzeigen/ausblenden"/>
 		</layout_panel>
 		<layout_panel name="snapshot_panel">
-			<button label="" name="snapshots" tool_tip="Foto machen"/>
-		</layout_panel>
-		<layout_panel name="sidebar_btn_panel">
-			<button label="Seitenleiste" name="sidebar_btn" tool_tip="Seitenleiste anzeigen/ausblenden"/>
+			<bottomtray_button label="" name="snapshots" tool_tip="Foto machen"/>
 		</layout_panel>
 		<layout_panel name="build_btn_panel">
-			<button label="Bauen" name="build_btn" tool_tip="Bauwerkzeuge ein-/ausblenden"/>
+			<bottomtray_button label="Bauen" name="build_btn" tool_tip="Bauwerkzeuge ein-/ausblenden"/>
 		</layout_panel>
 		<layout_panel name="search_btn_panel">
-			<button label="Suche" name="search_btn" tool_tip="Suche anzeigen/ausblenden"/>
+			<bottomtray_button label="Suche" name="search_btn" tool_tip="Suche anzeigen/ausblenden"/>
 		</layout_panel>
 		<layout_panel name="world_map_btn_panel">
-			<button label="Karte" name="world_map_btn" tool_tip="Karte ein-/ausblenden"/>
+			<bottomtray_button label="Karte" name="world_map_btn" tool_tip="Karte ein-/ausblenden"/>
 		</layout_panel>
 		<layout_panel name="mini_map_btn_panel">
-			<button label="Minikarte" name="mini_map_btn" tool_tip="Minikarte ein-/ausblenden"/>
+			<bottomtray_button label="Minikarte" name="mini_map_btn" tool_tip="Minikarte ein-/ausblenden"/>
 		</layout_panel>
 		<layout_panel name="im_well_panel">
 			<chiclet_im_well name="im_well">
diff --git a/indra/newview/skins/default/xui/de/panel_classified_info.xml b/indra/newview/skins/default/xui/de/panel_classified_info.xml
index ac1cd7ba88..007e9d69f0 100644
--- a/indra/newview/skins/default/xui/de/panel_classified_info.xml
+++ b/indra/newview/skins/default/xui/de/panel_classified_info.xml
@@ -52,8 +52,16 @@
 		</panel>
 	</scroll_container>
 	<panel name="buttons">
-		<button label="Teleportieren" name="teleport_btn"/>
-		<button label="Karte" name="show_on_map_btn"/>
-		<button label="Bearbeiten" name="edit_btn"/>
+		<layout_stack name="layout_stack1">
+			<layout_panel name="layout_panel1">
+				<button label="Teleportieren" name="teleport_btn"/>
+			</layout_panel>
+			<layout_panel name="show_on_map_btn_lp">
+				<button label="Karte" name="show_on_map_btn"/>
+			</layout_panel>
+			<layout_panel name="edit_btn_lp">
+				<button label="Bearbeiten" name="edit_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/de/panel_edit_classified.xml b/indra/newview/skins/default/xui/de/panel_edit_classified.xml
index 0d9487e895..bd270697ea 100644
--- a/indra/newview/skins/default/xui/de/panel_edit_classified.xml
+++ b/indra/newview/skins/default/xui/de/panel_edit_classified.xml
@@ -36,13 +36,19 @@
 				<icons_combo_box.item label="Moderater Inhalt" name="mature_ci" value="Moderat"/>
 				<icons_combo_box.item label="Genereller Inhalt" name="pg_ci" value="G"/>
 			</icons_combo_box>
+			<check_box label="Jede Woche automatisch erneuern" name="auto_renew"/>
 			<text name="price_for_listing_label" value="Preis für Anzeige:"/>
 			<spinner label="L$" name="price_for_listing" tool_tip="Preis für Anzeige." value="50"/>
-			<check_box label="Jede Woche automatisch erneuern" name="auto_renew"/>
 		</panel>
 	</scroll_container>
 	<panel label="bottom_panel" name="bottom_panel">
-		<button label="[LABEL]" name="save_changes_btn"/>
-		<button label="Abbrechen" name="cancel_btn"/>
+		<layout_stack name="bottom_panel_ls">
+			<layout_panel name="save_changes_btn_lp">
+				<button label="[LABEL]" name="save_changes_btn"/>
+			</layout_panel>
+			<layout_panel name="show_on_map_btn_lp">
+				<button label="Abbrechen" name="cancel_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/de/panel_edit_pick.xml b/indra/newview/skins/default/xui/de/panel_edit_pick.xml
index 1ec4f09161..3c56df763d 100644
--- a/indra/newview/skins/default/xui/de/panel_edit_pick.xml
+++ b/indra/newview/skins/default/xui/de/panel_edit_pick.xml
@@ -25,7 +25,13 @@
 		</panel>
 	</scroll_container>
 	<panel label="bottom_panel" name="bottom_panel">
-		<button label="Auswahl speichern" name="save_changes_btn"/>
-		<button label="Abbrechen" name="cancel_btn"/>
+		<layout_stack name="layout_stack1">
+			<layout_panel name="layout_panel1">
+				<button label="Auswahl speichern" name="save_changes_btn"/>
+			</layout_panel>
+			<layout_panel name="layout_panel1">
+				<button label="Abbrechen" name="cancel_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/de/panel_edit_profile.xml b/indra/newview/skins/default/xui/de/panel_edit_profile.xml
index bf74abaeba..b689856f8c 100644
--- a/indra/newview/skins/default/xui/de/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/de/panel_edit_profile.xml
@@ -53,7 +53,13 @@
 		</panel>
 	</scroll_container>
 	<panel name="profile_me_buttons_panel">
-		<button label="Änderungen speichern" name="save_btn"/>
-		<button label="Abbrechen" name="cancel_btn"/>
+		<layout_stack name="bottom_panel_ls">
+			<layout_panel name="save_changes_btn_lp">
+				<button label="Änderungen speichern" name="save_btn"/>
+			</layout_panel>
+			<layout_panel name="show_on_map_btn_lp">
+				<button label="Abbrechen" name="cancel_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/de/panel_edit_wearable.xml b/indra/newview/skins/default/xui/de/panel_edit_wearable.xml
index faeea3a5de..271db4c15c 100644
--- a/indra/newview/skins/default/xui/de/panel_edit_wearable.xml
+++ b/indra/newview/skins/default/xui/de/panel_edit_wearable.xml
@@ -102,7 +102,13 @@
 		<icon name="female_icon" tool_tip="Weiblich"/>
 	</panel>
 	<panel name="button_panel">
-		<button label="Speichern unter" name="save_as_button"/>
-		<button label="Änderungen rückgängig machen" name="revert_button"/>
+		<layout_stack name="button_panel_ls">
+			<layout_panel name="save_as_btn_lp">
+				<button label="Speichern unter" name="save_as_button"/>
+			</layout_panel>
+			<layout_panel name="revert_btn_lp">
+				<button label="Änderungen rückgängig machen" name="revert_button"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/de/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/de/panel_group_info_sidetray.xml
index b89e4f90de..bf4d44af52 100644
--- a/indra/newview/skins/default/xui/de/panel_group_info_sidetray.xml
+++ b/indra/newview/skins/default/xui/de/panel_group_info_sidetray.xml
@@ -13,7 +13,7 @@
 		Kostenlos
 	</panel.string>
 	<panel name="group_info_top">
-		<text name="group_name" value="(wird geladen...)"/>
+		<text_editor name="group_name" value="(wird geladen...)"/>
 		<line_editor label="Neuen Gruppennamen hier eingeben" name="group_name_editor"/>
 	</panel>
 	<layout_stack name="layout">
@@ -25,9 +25,15 @@
 				<accordion_tab name="group_land_tab" title="Land/Kapital"/>
 			</accordion>
 		</layout_panel>
-		<layout_panel name="button_row">
+	</layout_stack>
+	<layout_stack name="button_row_ls">
+		<layout_panel name="btn_chat_lp">
 			<button label="Chat" name="btn_chat"/>
+		</layout_panel>
+		<layout_panel name="call_btn_lp">
 			<button label="Gruppe anrufen" name="btn_call" tool_tip="Diese Gruppe anrufen"/>
+		</layout_panel>
+		<layout_panel name="btn_apply_lp">
 			<button label="Speichern" label_selected="Speichern" name="btn_apply"/>
 			<button label="Gruppe erstellen" name="btn_create" tool_tip="Neue Gruppe erstellen"/>
 		</layout_panel>
diff --git a/indra/newview/skins/default/xui/de/panel_landmarks.xml b/indra/newview/skins/default/xui/de/panel_landmarks.xml
index db12462a31..c1f8a20728 100644
--- a/indra/newview/skins/default/xui/de/panel_landmarks.xml
+++ b/indra/newview/skins/default/xui/de/panel_landmarks.xml
@@ -7,8 +7,16 @@
 		<accordion_tab name="tab_library" title="Bibliothek"/>
 	</accordion>
 	<panel name="bottom_panel">
-		<button name="options_gear_btn" tool_tip="Zusätzliche Optionen anzeigen"/>
-		<button name="add_btn" tool_tip="Neue Landmarke hinzufügen"/>
-		<dnd_button name="trash_btn" tool_tip="Ausgewählte Landmarke hinzufügen"/>
+		<layout_stack name="bottom_panel">
+			<layout_panel name="options_gear_btn_panel">
+				<button name="options_gear_btn" tool_tip="Zusätzliche Optionen anzeigen"/>
+			</layout_panel>
+			<layout_panel name="add_btn_panel">
+				<button name="add_btn" tool_tip="Neue Landmarke hinzufügen"/>
+			</layout_panel>
+			<layout_panel name="trash_btn_panel">
+				<dnd_button name="trash_btn" tool_tip="Ausgewählte Landmarke hinzufügen"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/de/panel_my_profile.xml b/indra/newview/skins/default/xui/de/panel_my_profile.xml
index 55eed89848..aea87cc2c4 100644
--- a/indra/newview/skins/default/xui/de/panel_my_profile.xml
+++ b/indra/newview/skins/default/xui/de/panel_my_profile.xml
@@ -42,9 +42,8 @@
 				</panel>
 			</scroll_container>
 		</layout_panel>
-		<layout_panel name="profile_me_buttons_panel">
-			<button label="Profil bearbeiten" name="edit_profile_btn" tool_tip="Ihre persönlichen Informationen bearbeiten"/>
-			<button label="Aussehen bearbeiten" name="edit_appearance_btn" tool_tip="Ihr Aussehen bearbeiten: Körpermaße, Bekleidung, usw."/>
-		</layout_panel>
 	</layout_stack>
+	<panel name="profile_me_buttons_panel">
+		<button label="Profil bearbeiten" name="edit_profile_btn" tool_tip="Ihre persönlichen Informationen bearbeiten"/>
+	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/de/panel_notes.xml b/indra/newview/skins/default/xui/de/panel_notes.xml
index 374c117cdd..ef1961b63d 100644
--- a/indra/newview/skins/default/xui/de/panel_notes.xml
+++ b/indra/newview/skins/default/xui/de/panel_notes.xml
@@ -13,11 +13,23 @@
 			</scroll_container>
 		</layout_panel>
 		<layout_panel name="notes_buttons_panel">
-			<button label="Freund hinzufügen" name="add_friend" tool_tip="Bieten Sie dem Einwohner die Freundschaft an" width="109"/>
-			<button label="IM" name="im" tool_tip="Instant Messenger öffnen" width="24"/>
-			<button label="Anrufen" name="call" tool_tip="Diesen Einwohner anrufen"/>
-			<button label="Karte" name="show_on_map_btn" tool_tip="Einwohner auf Karte anzeigen" width="40"/>
-			<button label="Teleportieren" name="teleport" tool_tip="Teleport anbieten"/>
+			<layout_stack name="bottom_bar_ls">
+				<layout_panel name="add_friend_btn_lp">
+					<button label="Freund hinzufügen" name="add_friend" tool_tip="Dem Einwohner die Freundschaft anbieten"/>
+				</layout_panel>
+				<layout_panel name="im_btn_lp">
+					<button label="IM" name="im" tool_tip="Instant Messenger öffnen"/>
+				</layout_panel>
+				<layout_panel name="call_btn_lp">
+					<button label="Anrufen" name="call" tool_tip="Diesen Einwohner anrufen"/>
+				</layout_panel>
+				<layout_panel name="show_on_map_btn_lp">
+					<button label="Karte" name="show_on_map_btn" tool_tip="Einwohner auf Karte anzeigen"/>
+				</layout_panel>
+				<layout_panel name="teleport_btn_lp">
+					<button label="Teleportieren" name="teleport" tool_tip="Teleport anbieten"/>
+				</layout_panel>
+			</layout_stack>
 		</layout_panel>
 	</layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/de/panel_outfit_edit.xml b/indra/newview/skins/default/xui/de/panel_outfit_edit.xml
index b38e07f3e1..632f414747 100644
--- a/indra/newview/skins/default/xui/de/panel_outfit_edit.xml
+++ b/indra/newview/skins/default/xui/de/panel_outfit_edit.xml
@@ -45,7 +45,13 @@
 		<button name="shop_btn_2" tool_tip="Besuchen Sie den Marktplatz. Sie können auch einen Teil Ihres Outfits auswählen, und dann hier klicken, um ähnliche Artikel anzuzeigen."/>
 	</panel>
 	<panel name="save_revert_button_bar">
-		<button label="Speichern" name="save_btn"/>
-		<button label="Änderungen rückgängig machen" name="revert_btn" tool_tip="Zur zuletzt gespeicherten Version zurücksetzen"/>
+		<layout_stack name="button_bar_ls">
+			<layout_panel name="save_btn_lp">
+				<button label="Speichern" name="save_btn"/>
+			</layout_panel>
+			<layout_panel name="revert_btn_lp">
+				<button label="Änderungen rückgängig machen" name="revert_btn" tool_tip="Zur zuletzt gespeicherten Version zurückkehren"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/de/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/de/panel_outfits_inventory.xml
index e25d7d412b..d5158b2d97 100644
--- a/indra/newview/skins/default/xui/de/panel_outfits_inventory.xml
+++ b/indra/newview/skins/default/xui/de/panel_outfits_inventory.xml
@@ -11,7 +11,13 @@
 		<panel label="AKTUELLES OUTFIT" name="cof_tab"/>
 	</tab_container>
 	<panel name="bottom_panel">
-		<button label="Speichern unter" name="save_btn"/>
-		<button label="Anziehen" name="wear_btn" tool_tip="Ausgewähltes Outfit tragen"/>
+		<layout_stack name="bottom_panel_ls">
+			<layout_panel name="save_btn_lp">
+				<button label="Speichern unter" name="save_btn"/>
+			</layout_panel>
+			<layout_panel name="wear_btn_lp">
+				<button label="Anziehen" name="wear_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/de/panel_people.xml b/indra/newview/skins/default/xui/de/panel_people.xml
index 8acb680175..6c859da4d6 100644
--- a/indra/newview/skins/default/xui/de/panel_people.xml
+++ b/indra/newview/skins/default/xui/de/panel_people.xml
@@ -32,9 +32,17 @@ Sie suchen nach Leuten? Verwenden Sie die [secondlife:///app/worldmap Karte].
 				<accordion_tab name="tab_all" title="Alle"/>
 			</accordion>
 			<panel label="bottom_panel" name="bottom_panel">
-				<button name="friends_viewsort_btn" tool_tip="Optionen"/>
-				<button name="add_btn" tool_tip="Bieten Sie einem Einwohner die Freundschaft an"/>
-				<button name="del_btn" tool_tip="Ausgewählte Person von Ihrer Freundesliste entfernen"/>
+				<layout_stack name="bottom_panel">
+					<layout_panel name="options_gear_btn_panel">
+						<button name="friends_viewsort_btn" tool_tip="Zusätzliche Optionen anzeigen"/>
+					</layout_panel>
+					<layout_panel name="add_btn_panel">
+						<button name="add_btn" tool_tip="Bieten Sie einem Einwohner die Freundschaft an"/>
+					</layout_panel>
+					<layout_panel name="trash_btn_panel">
+						<dnd_button name="trash_btn" tool_tip="Ausgewählte Person von Ihrer Freundesliste entfernen"/>
+					</layout_panel>
+				</layout_stack>
 			</panel>
 		</panel>
 		<panel label="MEINE GRUPPEN" name="groups_panel">
@@ -52,13 +60,33 @@ Sie suchen nach Leuten? Verwenden Sie die [secondlife:///app/worldmap Karte].
 		</panel>
 	</tab_container>
 	<panel name="button_bar">
-		<button label="Profil" name="view_profile_btn" tool_tip="Bilder, Gruppen und andere Einwohner-Informationen anzeigen"/>
-		<button label="IM" name="im_btn" tool_tip="Instant Messenger öffnen"/>
-		<button label="Anrufen" name="call_btn" tool_tip="Diesen Einwohner anrufen"/>
-		<button label="Teilen" name="share_btn" tool_tip="Inventarobjekt teilen"/>
-		<button label="Teleport" name="teleport_btn" tool_tip="Teleport anbieten"/>
-		<button label="Gruppenprofil" name="group_info_btn" tool_tip="Gruppeninformationen anzeigen"/>
-		<button label="Gruppen-Chat" name="chat_btn" tool_tip="Chat öffnen"/>
-		<button label="Gruppe anrufen" name="group_call_btn" tool_tip="Diese Gruppe anrufen"/>
+		<layout_stack name="bottom_bar_ls">
+			<layout_panel name="view_profile_btn_lp">
+				<button label="Profil" name="view_profile_btn" tool_tip="Bilder, Gruppen und andere Einwohner-Informationen anzeigen"/>
+			</layout_panel>
+			<layout_panel name="chat_btn_lp">
+				<button label="IM" name="im_btn" tool_tip="Instant Messenger öffnen"/>
+			</layout_panel>
+			<layout_panel name="chat_btn_lp">
+				<button label="Anrufen" name="call_btn" tool_tip="Diesen Einwohner anrufen"/>
+			</layout_panel>
+			<layout_panel name="chat_btn_lp">
+				<button label="Teilen" name="share_btn" tool_tip="Inventarobjekt teilen"/>
+			</layout_panel>
+			<layout_panel name="chat_btn_lp">
+				<button label="Teleportieren" name="teleport_btn" tool_tip="Teleport anbieten"/>
+			</layout_panel>
+		</layout_stack>
+		<layout_stack name="bottom_bar_ls1">
+			<layout_panel name="group_info_btn_lp">
+				<button label="Gruppenprofil" name="group_info_btn" tool_tip="Gruppeninformationen anzeigen"/>
+			</layout_panel>
+			<layout_panel name="chat_btn_lp">
+				<button label="Gruppen-Chat" name="chat_btn" tool_tip="Chat öffnen"/>
+			</layout_panel>
+			<layout_panel name="group_call_btn_lp">
+				<button label="Gruppe anrufen" name="group_call_btn" tool_tip="Diese Gruppe anrufen"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/de/panel_pick_info.xml b/indra/newview/skins/default/xui/de/panel_pick_info.xml
index d8939a8ed1..f215c43a3d 100644
--- a/indra/newview/skins/default/xui/de/panel_pick_info.xml
+++ b/indra/newview/skins/default/xui/de/panel_pick_info.xml
@@ -3,14 +3,22 @@
 	<text name="title" value="Auswahl-Info"/>
 	<scroll_container name="profile_scroll">
 		<panel name="scroll_content_panel">
-			<text name="pick_name" value="[name]"/>
-			<text name="pick_location" value="[wird geladen...]"/>
-			<text name="pick_desc" value="[description]"/>
+			<text_editor name="pick_name" value="[name]"/>
+			<text_editor name="pick_location" value="[wird geladen...]"/>
+			<text_editor name="pick_desc" value="[description]"/>
 		</panel>
 	</scroll_container>
 	<panel name="buttons">
-		<button label="Teleportieren" name="teleport_btn"/>
-		<button label="Karte" name="show_on_map_btn"/>
-		<button label="Bearbeiten" name="edit_btn"/>
+		<layout_stack name="layout_stack1">
+			<layout_panel name="layout_panel1">
+				<button label="Teleportieren" name="teleport_btn"/>
+			</layout_panel>
+			<layout_panel name="show_on_map_btn_lp">
+				<button label="Karte" name="show_on_map_btn"/>
+			</layout_panel>
+			<layout_panel name="edit_btn_lp">
+				<button label="Bearbeiten" name="edit_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/de/panel_picks.xml b/indra/newview/skins/default/xui/de/panel_picks.xml
index df68381082..6aaa3151a8 100644
--- a/indra/newview/skins/default/xui/de/panel_picks.xml
+++ b/indra/newview/skins/default/xui/de/panel_picks.xml
@@ -7,11 +7,23 @@
 		<accordion_tab name="tab_classifieds" title="Anzeigen"/>
 	</accordion>
 	<panel label="bottom_panel" name="edit_panel">
-		<button name="new_btn" tool_tip="An aktuellem Standort neue Auswahl oder Anzeige erstellen"/>
+		<layout_stack name="edit_panel_ls">
+			<layout_panel name="gear_menu_btn">
+				<button name="new_btn" tool_tip="An aktuellem Standort neue Auswahl oder Anzeige erstellen"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 	<panel name="buttons_cucks">
-		<button label="Info" name="info_btn" tool_tip="Auswahl-Information anzeigen"/>
-		<button label="Teleportieren" name="teleport_btn" tool_tip="Zu entsprechendem Standort teleportieren" width="100"/>
-		<button label="Karte" name="show_on_map_btn" tool_tip="Den entsprechenden Standort auf der Karte anzeigen"/>
+		<layout_stack name="buttons_cucks_ls">
+			<layout_panel name="info_btn_lp">
+				<button label="Info" name="info_btn" tool_tip="Informationen zur Auswahl anzeigen"/>
+			</layout_panel>
+			<layout_panel name="teleport_btn_lp">
+				<button label="Teleportieren" name="teleport_btn" tool_tip="Zu entsprechendem Standort teleportieren"/>
+			</layout_panel>
+			<layout_panel name="show_on_map_btn_lp">
+				<button label="Karte" name="show_on_map_btn" tool_tip="Den entsprechenden Standort auf der Karte anzeigen"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/de/panel_places.xml b/indra/newview/skins/default/xui/de/panel_places.xml
index bd5c1c8ffe..0e85829a0b 100644
--- a/indra/newview/skins/default/xui/de/panel_places.xml
+++ b/indra/newview/skins/default/xui/de/panel_places.xml
@@ -4,13 +4,45 @@
 	<string name="teleport_history_tab_title" value="TELEPORT-LISTE"/>
 	<filter_editor label="Meine Orte filtern" name="Filter"/>
 	<panel name="button_panel">
-		<button label="Teleportieren" name="teleport_btn" tool_tip="Zu ausgewähltem Standort teleportieren"/>
-		<button label="Karte" name="map_btn" tool_tip="Den entsprechenden Standort auf der Karte anzeigen" width="60"/>
-		<button label="Bearbeiten" name="edit_btn" tool_tip="Landmarken-Info bearbeiten"/>
-		<button label="▼" name="overflow_btn" tool_tip="Zusätzliche Optionen anzeigen"/>
-		<button label="Speichern" name="save_btn" width="66"/>
-		<button label="Abbrechen" name="cancel_btn" width="66"/>
-		<button label="Schließen" name="close_btn"/>
-		<button label="Profil" name="profile_btn" tool_tip="Ortsprofil anzeigen"/>
+		<layout_stack name="bottom_bar_ls0">
+			<layout_panel name="lp1">
+				<layout_stack name="bottom_bar_ls1">
+					<layout_panel name="teleport_btn_lp">
+						<button label="Teleportieren" name="teleport_btn" tool_tip="Zu ausgewähltem Standort teleportieren"/>
+					</layout_panel>
+					<layout_panel name="chat_btn_lp">
+						<button label="Karte" name="map_btn" tool_tip="Den entsprechenden Standort auf der Karte anzeigen"/>
+					</layout_panel>
+				</layout_stack>
+			</layout_panel>
+			<layout_panel name="lp2">
+				<layout_stack name="bottom_bar_ls3">
+					<layout_panel name="edit_btn_lp">
+						<button label="Bearbeiten" name="edit_btn" tool_tip="Landmarken-Info bearbeiten"/>
+					</layout_panel>
+					<layout_panel name="overflow_btn_lp">
+						<button label="▼" name="overflow_btn" tool_tip="Zusätzliche Optionen anzeigen"/>
+					</layout_panel>
+				</layout_stack>
+				<layout_stack name="bottom_bar_ls3">
+					<layout_panel name="profile_btn_lp">
+						<button label="Profil" name="profile_btn" tool_tip="Ortsprofil anzeigen"/>
+					</layout_panel>
+				</layout_stack>
+				<layout_stack name="bottom_bar_close_ls3">
+					<layout_panel name="close_btn_lp">
+						<button label="Schließen" name="close_btn"/>
+					</layout_panel>
+				</layout_stack>
+			</layout_panel>
+		</layout_stack>
+		<layout_stack name="bottom_bar_ls2">
+			<layout_panel name="save_btn_lp">
+				<button label="Speichern" name="save_btn"/>
+			</layout_panel>
+			<layout_panel name="cancel_btn_lp">
+				<button label="Abbrechen" name="cancel_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_chat.xml b/indra/newview/skins/default/xui/de/panel_preferences_chat.xml
index 064eb3895b..aa314a1a57 100644
--- a/indra/newview/skins/default/xui/de/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_chat.xml
@@ -56,27 +56,27 @@
 		<radio_item label="Getrennte Fenster" name="radio" value="0"/>
 		<radio_item label="Registerkarten" name="radio2" value="1"/>
 	</radio_group>
-	<check_box label="Übersetzen Chat" name="translate_chat_checkbox" />
+	<check_box label="Bei Chat Maschinenübersetzung verwenden (Service von Google)" name="translate_chat_checkbox"/>
 	<text name="translate_language_text">
-		Chat-Sprache:
+		Chat übersetzen in:
 	</text>
 	<combo_box name="translate_language_combobox" width="200">
-		<combo_box.item name="System Default Language" label="Betriebssystem-Einstellung" />
-		<combo_box.item name="English" label="English (Englisch)" />
-		<combo_box.item name="Danish" label="Danks (Dänisch)" />
-		<combo_box.item name="German" label="Deutsch" />
-		<combo_box.item name="Spanish" label="Español (Spanisch)" />
-		<combo_box.item name="French" label="Français (Französisch)" />
-		<combo_box.item name="Italian" label="Italiano (Italienisch)" />
-		<combo_box.item name="Hungarian" label="Magyar (Ungarisch)" />
-		<combo_box.item name="Dutch" label="Nederlands (Niederländisch)" />
-		<combo_box.item name="Polish" label="Polski (Polnisch)" />
-		<combo_box.item name="Portugese" label="Português (Portugiesisch)" />
-		<combo_box.item name="Russian" label="Русский (Russian)" />
-		<combo_box.item name="Turkish" label="Türkçe (Türkisch)" />
-		<combo_box.item name="Ukrainian" label="Українська (Ukrainisch)" />
-		<combo_box.item name="Chinese" label="中文 (简体) (Chinesisch)" />
-		<combo_box.item name="Japanese" label="日本語 (Japanisch)" />
-		<combo_box.item name="Korean" label="한국어 (Koreanisch)" />
+		<combo_box.item label="Systemstandard" name="System Default Language"/>
+		<combo_box.item label="English (Englisch)" name="English"/>
+		<combo_box.item label="Dansk (Dänisch)" name="Danish"/>
+		<combo_box.item label="Deutsch" name="German"/>
+		<combo_box.item label="Español (Spanisch)" name="Spanish"/>
+		<combo_box.item label="Français (Französisch)" name="French"/>
+		<combo_box.item label="Italiano (Italienisch)" name="Italian"/>
+		<combo_box.item label="Magyar (Ungarisch)" name="Hungarian"/>
+		<combo_box.item label="Nederlands (Holländisch)" name="Dutch"/>
+		<combo_box.item label="Polski (Polnisch)" name="Polish"/>
+		<combo_box.item label="Português (Portugiesisch)" name="Portugese"/>
+		<combo_box.item label="Русский (Russisch)" name="Russian"/>
+		<combo_box.item label="Türkçe (Türkisch)" name="Turkish"/>
+		<combo_box.item label="Українська (Ukrainisch)" name="Ukrainian"/>
+		<combo_box.item label="中文 (简体) (Chinesisch)" name="Chinese"/>
+		<combo_box.item label="日本語 (Japanisch)" name="Japanese"/>
+		<combo_box.item label="한국어 (Koreanisch)" name="Korean"/>
 	</combo_box>
 </panel>
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml
index 7077534719..ae3c791ab9 100644
--- a/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml
@@ -28,22 +28,16 @@
 		<check_box initial_value="true" label="Bumpmapping und Glanz" name="BumpShiny"/>
 		<check_box initial_value="true" label="Einfache Shader" name="BasicShaders" tool_tip="Deaktivieren Sie diese Option, wenn der Grafikkartentreiber Abstürze verursacht"/>
 		<check_box initial_value="true" label="Atmosphären-Shader" name="WindLightUseAtmosShaders"/>
-		<check_box initial_value="true" label="Wasserreflexionen" name="Reflections"/>
-		<text name="ReflectionDetailText">
-			Spiegelung:
+		<text name="reflection_label">
+			Wasserreflexionen:
 		</text>
-		<radio_group name="ReflectionDetailRadio">
-			<radio_item label="Terrain und Bäume" name="0"/>
-			<radio_item label="Alle statischen Objekte" name="1"/>
-			<radio_item label="Alle Avatare und Objekte" name="2"/>
-			<radio_item label="Alles" name="3"/>
-		</radio_group>
-		<text name="AvatarRenderingText">
-			Avatar-Darstellung:
-		</text>
-		<check_box initial_value="true" label="Vereinfachte Avatardarstellung" name="AvatarImpostors"/>
-		<check_box initial_value="true" label="Hardware-Hautberechnung" name="AvatarVertexProgram"/>
-		<check_box initial_value="true" label="Avatar-Kleidung" name="AvatarCloth"/>
+		<combo_box initial_value="true" label="Wasserreflexionen" name="Reflections">
+			<combo_box.item label="Minimal" name="0"/>
+			<combo_box.item label="Terrain und Bäume" name="1"/>
+			<combo_box.item label="Alle statischen Objekte" name="2"/>
+			<combo_box.item label="Alle Avatare und Objekte" name="3"/>
+			<combo_box.item label="Alles" name="4"/>
+		</combo_box>
 		<slider label="Sichtweite:" name="DrawDistance"/>
 		<text name="DrawDistanceMeterText2">
 			m
@@ -81,13 +75,12 @@
 		<text name="SkyMeshDetailText">
 			Niedrig
 		</text>
-		<text name="LightingDetailText">
-			Beleuchtungsdetails:
+		<text name="AvatarRenderingText">
+			Avatar-Darstellung:
 		</text>
-		<radio_group name="LightingDetailRadio">
-			<radio_item label="Nur Sonne und Mond" name="SunMoon" value="0"/>
-			<radio_item label="Lokale Lichtquellen" name="LocalLights" value="1"/>
-		</radio_group>
+		<check_box initial_value="true" label="Vereinfachte Avatardarstellung" name="AvatarImpostors"/>
+		<check_box initial_value="true" label="Hardware-Hautberechnung" name="AvatarVertexProgram"/>
+		<check_box initial_value="true" label="Avatar-Kleidung" name="AvatarCloth"/>
 		<text name="TerrainDetailText">
 			Terraindetails:
 		</text>
@@ -95,6 +88,7 @@
 			<radio_item label="Niedrig" name="0"/>
 			<radio_item label="Hoch" name="2"/>
 		</radio_group>
+		--&gt;
 	</panel>
 	<button label="Übernehmen" label_selected="Übernehmen" name="Apply"/>
 	<button label="Zurücksetzen" name="Defaults"/>
diff --git a/indra/newview/skins/default/xui/de/panel_profile.xml b/indra/newview/skins/default/xui/de/panel_profile.xml
index cda2788e40..40fa2f922a 100644
--- a/indra/newview/skins/default/xui/de/panel_profile.xml
+++ b/indra/newview/skins/default/xui/de/panel_profile.xml
@@ -40,17 +40,29 @@
 				</panel>
 			</scroll_container>
 		</layout_panel>
+	</layout_stack>
+	<layout_stack name="layout_verb_buttons">
 		<layout_panel name="profile_buttons_panel">
-			<button label="Freund hinzufügen" name="add_friend" tool_tip="Bieten Sie dem Einwohner die Freundschaft an"/>
-			<button label="IM" name="im" tool_tip="Instant Messenger öffnen"/>
-			<button label="Anrufen" name="call" tool_tip="Diesen Einwohner anrufen"/>
-			<button label="Karte" name="show_on_map_btn" tool_tip="Einwohner auf Karte anzeigen"/>
-			<button label="Teleportieren" name="teleport" tool_tip="Teleport anbieten"/>
-			<button label="▼" name="overflow_btn" tool_tip="Dem Einwohner Geld geben oder Inventar an den Einwohner schicken"/>
+			<layout_stack name="bottom_bar_ls">
+				<layout_panel name="add_friend_btn_lp">
+					<button label="Freund hinzufügen" name="add_friend" tool_tip="Dem Einwohner die Freundschaft anbieten"/>
+				</layout_panel>
+				<layout_panel name="im_btn_lp">
+					<button label="IM" name="im" tool_tip="Instant Messenger öffnen"/>
+				</layout_panel>
+				<layout_panel name="call_btn_lp">
+					<button label="Anrufen" name="call" tool_tip="Diesen Einwohner anrufen"/>
+				</layout_panel>
+				<layout_panel name="chat_btn_lp">
+					<button label="Teleportieren" name="teleport" tool_tip="Teleport anbieten"/>
+				</layout_panel>
+				<layout_panel name="overflow_btn_lp">
+					<button label="▼" name="overflow_btn" tool_tip="Dem Einwohner Geld geben oder Inventar an den Einwohner schicken"/>
+				</layout_panel>
+			</layout_stack>
 		</layout_panel>
 		<layout_panel name="profile_me_buttons_panel">
 			<button label="Profil bearbeiten" name="edit_profile_btn" tool_tip="Ihre persönlichen Informationen bearbeiten"/>
-			<button label="Aussehen bearbeiten" name="edit_appearance_btn" tool_tip="Ihr Aussehen bearbeiten: Körpermaße, Bekleidung, usw."/>
 		</layout_panel>
 	</layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/de/panel_side_tray_tab_caption.xml b/indra/newview/skins/default/xui/de/panel_side_tray_tab_caption.xml
index 93fff56f84..652fb7c836 100644
--- a/indra/newview/skins/default/xui/de/panel_side_tray_tab_caption.xml
+++ b/indra/newview/skins/default/xui/de/panel_side_tray_tab_caption.xml
@@ -1,5 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="sidetray_tab_panel">
 	<text name="sidetray_tab_title" value="Klappmenü??"/>
+	<button name="undock" tool_tip="Abkoppeln"/>
+	<button name="dock" tool_tip="Andocken"/>
 	<button name="show_help" tool_tip="Hilfe anzeigen"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/de/sidepanel_inventory.xml b/indra/newview/skins/default/xui/de/sidepanel_inventory.xml
index f9bf2fe081..d817d1df90 100644
--- a/indra/newview/skins/default/xui/de/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/de/sidepanel_inventory.xml
@@ -2,12 +2,20 @@
 <panel label="Sonstiges" name="objects panel">
 	<panel label="" name="sidepanel__inventory_panel">
 		<panel name="button_panel">
-			<button label="Profil" name="info_btn" tool_tip="Objektprofil anzeigen"/>
-			<button label="Teilen" name="share_btn" tool_tip="Inventarobjekt teilen"/>
-			<button label="Einkaufen" name="shop_btn" tool_tip="Marktplatz-Webseite öffnen"/>
-			<button label="Anziehen" name="wear_btn" tool_tip="Ausgewähltes Outfit tragen"/>
-			<button label="Wiedergeben" name="play_btn"/>
-			<button label="Teleportieren" name="teleport_btn" tool_tip="Zu ausgewähltem Standort teleportieren"/>
+			<layout_stack name="button_panel_ls">
+				<layout_panel name="info_btn_lp">
+					<button label="Profil" name="info_btn" tool_tip="Objektprofil anzeigen"/>
+				</layout_panel>
+				<layout_panel name="share_btn_lp">
+					<button label="Teilen" name="share_btn" tool_tip="Inventarobjekt teilen"/>
+				</layout_panel>
+				<layout_panel name="shop_btn_lp">
+					<button label="Einkaufen" name="shop_btn" tool_tip="Marktplatz-Webseite öffnen"/>
+					<button label="Anziehen" name="wear_btn" tool_tip="Ausgewähltes Outfit tragen"/>
+					<button label="Wiedergeben" name="play_btn"/>
+					<button label="Teleportieren" name="teleport_btn" tool_tip="Zu ausgewähltem Standort teleportieren"/>
+				</layout_panel>
+			</layout_stack>
 		</panel>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/de/sidepanel_item_info.xml b/indra/newview/skins/default/xui/de/sidepanel_item_info.xml
index 4ba187dbd6..18241dea32 100644
--- a/indra/newview/skins/default/xui/de/sidepanel_item_info.xml
+++ b/indra/newview/skins/default/xui/de/sidepanel_item_info.xml
@@ -23,56 +23,53 @@
 	</panel.string>
 	<text name="title" value="Objektprofil"/>
 	<text name="origin" value="(Inventar)"/>
-	<panel label="" name="item_profile">
-		<text name="LabelItemNameTitle">
-			Name:
-		</text>
-		<text name="LabelItemDescTitle">
-			Beschreibung:
-		</text>
-		<text name="LabelCreatorTitle">
-			Ersteller:
-		</text>
-		<text name="LabelCreatorName"/>
-		<button label="Profil" name="BtnCreator"/>
-		<text name="LabelOwnerTitle">
-			Eigentümer:
-		</text>
-		<text name="LabelOwnerName"/>
-		<button label="Profil" name="BtnOwner"/>
-		<text name="LabelAcquiredTitle">
-			Erworben:
-		</text>
-		<text name="LabelAcquiredDate"/>
-		<panel name="perms_inv">
-			<text name="perm_modify">
-				Sie können:
+	<scroll_container name="item_profile_scroll">
+		<panel label="" name="item_profile">
+			<text name="LabelItemNameTitle">
+				Name:
 			</text>
-			<check_box label="Bearbeiten" name="CheckOwnerModify"/>
-			<check_box label="Kopieren" name="CheckOwnerCopy"/>
-			<check_box label="Übertragen" name="CheckOwnerTransfer"/>
-			<text name="AnyoneLabel">
-				Jeder:
+			<text name="LabelItemDescTitle">
+				Beschreibung:
 			</text>
-			<check_box label="Kopieren" name="CheckEveryoneCopy"/>
-			<text name="GroupLabel">
-				Gruppe:
+			<text name="LabelCreatorTitle">
+				Ersteller:
 			</text>
-			<check_box label="Teilen" name="CheckShareWithGroup" tool_tip="Mit allen Mitgliedern der zugeordneten Gruppe, Ihre Berechtigungen dieses Objekt zu ändern, teilen. Sie müssen Übereignen, um Rollenbeschränkungen zu aktivieren."/>
-			<text name="NextOwnerLabel">
-				Nächster Eigentümer:
+			<text name="LabelOwnerTitle">
+				Eigentümer:
 			</text>
-			<check_box label="Bearbeiten" name="CheckNextOwnerModify"/>
-			<check_box label="Kopieren" name="CheckNextOwnerCopy"/>
-			<check_box label="Übertragen" name="CheckNextOwnerTransfer" tool_tip="Nächster Eigentümer kann dieses Objekt weitergeben oder -verkaufen"/>
+			<text name="LabelAcquiredTitle">
+				Erworben:
+			</text>
+			<panel name="perms_inv">
+				<text name="perm_modify">
+					Sie können:
+				</text>
+				<check_box label="Bearbeiten" name="CheckOwnerModify"/>
+				<check_box label="Kopieren" name="CheckOwnerCopy"/>
+				<check_box label="Übertragen" name="CheckOwnerTransfer"/>
+				<text name="AnyoneLabel">
+					Jeder:
+				</text>
+				<check_box label="Kopieren" name="CheckEveryoneCopy"/>
+				<text name="GroupLabel">
+					Gruppe:
+				</text>
+				<check_box label="Teilen" name="CheckShareWithGroup" tool_tip="Mit allen Mitgliedern der zugeordneten Gruppe, Ihre Berechtigungen dieses Objekt zu ändern, teilen. Sie müssen eine Übereignung durchführen, um Rollenbeschränkungen zu aktivieren."/>
+				<text name="NextOwnerLabel">
+					Nächster Eigentümer:
+				</text>
+				<check_box label="Bearbeiten" name="CheckNextOwnerModify"/>
+				<check_box label="Kopieren" name="CheckNextOwnerCopy"/>
+				<check_box label="Übertragen" name="CheckNextOwnerTransfer" tool_tip="Nächster Eigentümer kann dieses Objekt weitergeben oder -verkaufen"/>
+			</panel>
+			<check_box label="Zum Verkauf" name="CheckPurchase"/>
+			<combo_box name="combobox sale copy">
+				<combo_box.item label="Kopieren" name="Copy"/>
+				<combo_box.item label="Original" name="Original"/>
+			</combo_box>
+			<spinner label="Preis: L$" name="Edit Cost"/>
 		</panel>
-		<check_box label="Zum Verkauf" name="CheckPurchase"/>
-		<combo_box name="combobox sale copy">
-			<combo_box.item label="Kopieren" name="Copy"/>
-			<combo_box.item label="Original" name="Original"/>
-		</combo_box>
-		<spinner label="Preis: L$" name="Edit Cost"/>
-	</panel>
+	</scroll_container>
 	<panel name="button_panel">
 		<button label="Abbrechen" name="cancel_btn"/>
 	</panel>
diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml
index 1adc4e3db1..ae2991df45 100644
--- a/indra/newview/skins/default/xui/de/strings.xml
+++ b/indra/newview/skins/default/xui/de/strings.xml
@@ -1294,6 +1294,9 @@
 	<string name="Right Pec">
 		Rechts
 	</string>
+	<string name="Invalid Attachment">
+		Ungültige Stelle für Anhang
+	</string>
 	<string name="YearsMonthsOld">
 		[AGEYEARS] [AGEMONTHS] alt
 	</string>
@@ -1671,9 +1674,6 @@
 	<string name="ATTACH_HUD_BOTTOM_RIGHT">
 		HUD unten rechts
 	</string>
-	<string name="Bad attachment point">
-		Ungültige Stelle für Anhang
-	</string>
 	<string name="CursorPos">
 		Zeile [LINE], Spalte [COLUMN]
 	</string>
@@ -1695,12 +1695,6 @@
 	<string name="BusyModeResponseDefault">
 		Der Einwohner/Die Einwohnerin ist „beschäftigt”, d.h. er/sie möchte im Moment nicht gestört werden.  Ihre Nachricht wird dem Einwohner/der Einwohnerin als IM angezeigt, und kann später beantwortet werden.
 	</string>
-	<string name="NoOutfits">
-		Sie haben noch keine Outfits. Versuchen Sie es mit der [secondlife:///app/search/all Suche].
-	</string>
-	<string name="NoOutfitsTabsMatched">
-		Sie haben nicht das Richtige gefunden? Versuchen Sie es mit der [secondlife:///app/search/all/[SEARCH_TERM] Suche].
-	</string>
 	<string name="MuteByName">
 		(Nach Namen)
 	</string>
@@ -1741,7 +1735,7 @@
 		Sie haben keine Auswahl oder Anzeigen erstelllt. Klicken Sie auf die „Plus&quot;-Schaltfläche, um eine Auswahl oder Anzeige zu erstellen.
 	</string>
 	<string name="NoAvatarPicksClassifiedsText">
-		Der Einwohner hat eine Auswahl oder Anzeigen im Profil.
+		Der Einwohner hat keine Auswahl oder Anzeigen
 	</string>
 	<string name="PicksClassifiedsLoadingText">
 		Wird geladen...
@@ -1864,6 +1858,12 @@ Gültige Formate: .wav, .tga, .bmp, .jpg, .jpeg oder .bvh
 	<string name="accel-win-shift">
 		Umschalt+
 	</string>
+	<string name="Esc">
+		Esc
+	</string>
+	<string name="Home">
+		Zuhause
+	</string>
 	<string name="FileSaved">
 		Datei wurde gespeichert
 	</string>
@@ -3528,6 +3528,9 @@ Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_
 	<string name="IM_moderator_label">
 		(Moderator)
 	</string>
+	<string name="Saved_message">
+		(Gespeichert am [LONG_TIMESTAMP])
+	</string>
 	<string name="answered_call">
 		Ihr Anruf wurde entgegengenommen
 	</string>
@@ -3555,12 +3558,18 @@ Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_
 	<string name="conference-title">
 		Ad-hoc-Konferenz
 	</string>
+	<string name="conference-title-incoming">
+		Konferenz mit [AGENT_NAME]
+	</string>
 	<string name="inventory_item_offered-im">
 		Inventarobjekt angeboten
 	</string>
 	<string name="share_alert">
 		Objekte aus dem Inventar hier her ziehen
 	</string>
+	<string name="no_session_message">
+		(IM-Session nicht vorhanden)
+	</string>
 	<string name="only_user_message">
 		Sie sind der einzige Benutzer in dieser Sitzung.
 	</string>
@@ -3945,4 +3954,13 @@ Missbrauchsbericht
 	<string name="Chat">
 		Chat
 	</string>
+	<string name="DeleteItems">
+		Ausgewählte Objekte löschen?
+	</string>
+	<string name="DeleteItem">
+		Ausgewähltes Objekt löschen?
+	</string>
+	<string name="EmptyOutfitText">
+		Keine Objekte in diesem Outfit
+	</string>
 </strings>
diff --git a/indra/newview/skins/default/xui/it/floater_map.xml b/indra/newview/skins/default/xui/it/floater_map.xml
index ca537efba9..3dcfdd4662 100644
--- a/indra/newview/skins/default/xui/it/floater_map.xml
+++ b/indra/newview/skins/default/xui/it/floater_map.xml
@@ -1,28 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater name="Map" title="">
-	<floater.string name="mini_map_north">
-		N
-	</floater.string>
-	<floater.string name="mini_map_east">
-		E
-	</floater.string>
-	<floater.string name="mini_map_west">
-		O
-	</floater.string>
-	<floater.string name="mini_map_south">
-		S
-	</floater.string>
-	<floater.string name="mini_map_southeast">
-		SE
-	</floater.string>
-	<floater.string name="mini_map_northeast">
-		NE
-	</floater.string>
-	<floater.string name="mini_map_southwest">
-		SO
-	</floater.string>
-	<floater.string name="mini_map_northwest">
-		NO
+	<floater.string name="ToolTipMsg">
+		[REGION](Fai doppio clic per aprire la Mappa, premi il tasto Maiusc e trascina per la panoramica)
 	</floater.string>
 	<floater.string name="mini_map_caption">
 		MINI MAPPA
diff --git a/indra/newview/skins/default/xui/it/floater_nearby_chat.xml b/indra/newview/skins/default/xui/it/floater_nearby_chat.xml
index 9878fe85ea..4c41df8a62 100644
--- a/indra/newview/skins/default/xui/it/floater_nearby_chat.xml
+++ b/indra/newview/skins/default/xui/it/floater_nearby_chat.xml
@@ -1,2 +1,4 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="nearby_chat" title="CHAT NEI DINTORNI"/>
+<floater name="nearby_chat" title="CHAT NEI DINTORNI">
+	<check_box label="Traduci chat (tecnologia Google)" name="translate_chat_checkbox"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_tools.xml b/indra/newview/skins/default/xui/it/floater_tools.xml
index 68d193ff33..fbe611407e 100644
--- a/indra/newview/skins/default/xui/it/floater_tools.xml
+++ b/indra/newview/skins/default/xui/it/floater_tools.xml
@@ -183,10 +183,10 @@
 			<text name="Group:">
 				Gruppo:
 			</text>
-			<button label="Imposta..." label_selected="Imposta..." name="button set group" tool_tip="Scegli un gruppo con cui condividere i diritti relativi all&apos;oggetto"/>
 			<name_box initial_value="Caricamento in corso..." name="Group Name Proxy"/>
-			<button label="Cessione" label_selected="Cessione" name="button deed" tool_tip="Con una cessione si trasferisce il bene con i diritti al proprietario successivo Gli oggetti in proprietà condivisa di gruppo possono essere ceduti soltanto da un funzionario del gruppo."/>
+			<button label="Imposta..." label_selected="Imposta..." name="button set group" tool_tip="Scegli un gruppo con cui condividere i diritti relativi all&apos;oggetto"/>
 			<check_box label="Condividi" name="checkbox share with group" tool_tip="Consenti a tutti i membri del gruppo selezionato di condividere i tuoi diritti di modifica di questo oggetto. Per attivare le restrizioni per ruolo devi prima effettuare la cessione."/>
+			<button label="Cessione" label_selected="Cessione" name="button deed" tool_tip="Con una cessione si trasferisce il bene con i diritti al proprietario successivo Gli oggetti in proprietà condivisa di gruppo possono essere ceduti soltanto da un funzionario del gruppo."/>
 			<text name="label click action">
 				Fai clic per:
 			</text>
@@ -438,7 +438,8 @@
 				<combo_box.item label="Cerchi rialzati" name="suction"/>
 				<combo_box.item label="Trama" name="weave"/>
 			</combo_box>
-			<text name="tex scale">
+			<check_box initial_value="falso" label="Allinea facce planari" name="checkbox planar align" tool_tip="Allinea le texture su tutte le facce selezionate con l’ultima faccia selezionata. È richiesta la mappatura planare delle texture."/>
+			<text name="rpt">
 				Ripetizioni / Faccia
 			</text>
 			<spinner label="Orizzontale (U)" name="TexScaleU"/>
diff --git a/indra/newview/skins/default/xui/it/menu_attachment_self.xml b/indra/newview/skins/default/xui/it/menu_attachment_self.xml
index fe5464b156..489d6af1d7 100644
--- a/indra/newview/skins/default/xui/it/menu_attachment_self.xml
+++ b/indra/newview/skins/default/xui/it/menu_attachment_self.xml
@@ -3,6 +3,7 @@
 	<menu_item_call label="Tocca" name="Attachment Object Touch"/>
 	<menu_item_call label="Modifica" name="Edit..."/>
 	<menu_item_call label="Stacca" name="Detach"/>
+	<menu_item_call label="Siedi" name="Sit Down Here"/>
 	<menu_item_call label="Alzati" name="Stand Up"/>
 	<menu_item_call label="Cambia vestiario" name="Change Outfit"/>
 	<menu_item_call label="Modifica il mio vestiario" name="Edit Outfit"/>
diff --git a/indra/newview/skins/default/xui/it/menu_avatar_self.xml b/indra/newview/skins/default/xui/it/menu_avatar_self.xml
index 7d918423c3..977503dace 100644
--- a/indra/newview/skins/default/xui/it/menu_avatar_self.xml
+++ b/indra/newview/skins/default/xui/it/menu_avatar_self.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Self Pie">
+	<menu_item_call label="Siedi" name="Sit Down Here"/>
 	<menu_item_call label="Alzati" name="Stand Up"/>
 	<context_menu label="Togli" name="Take Off &gt;">
 		<context_menu label="Abiti" name="Clothes &gt;">
diff --git a/indra/newview/skins/default/xui/it/menu_inspect_object_gear.xml b/indra/newview/skins/default/xui/it/menu_inspect_object_gear.xml
index eb10ebd0b6..ede4a507c0 100644
--- a/indra/newview/skins/default/xui/it/menu_inspect_object_gear.xml
+++ b/indra/newview/skins/default/xui/it/menu_inspect_object_gear.xml
@@ -9,6 +9,7 @@
 	<menu_item_call label="Apri" name="open"/>
 	<menu_item_call label="Modifica" name="edit"/>
 	<menu_item_call label="Indossa" name="wear"/>
+	<menu_item_call label="Aggiungi" name="add"/>
 	<menu_item_call label="Segnala" name="report"/>
 	<menu_item_call label="Blocca" name="block"/>
 	<menu_item_call label="Zoom avanti" name="zoom_in"/>
diff --git a/indra/newview/skins/default/xui/it/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/it/menu_inspect_self_gear.xml
index 80edae8a2b..8b4ed607e7 100644
--- a/indra/newview/skins/default/xui/it/menu_inspect_self_gear.xml
+++ b/indra/newview/skins/default/xui/it/menu_inspect_self_gear.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <menu name="Gear Menu">
+	<menu_item_call label="Siedi" name="sit_down_here"/>
 	<menu_item_call label="Alzati" name="stand_up"/>
 	<menu_item_call label="Cambia vestiario" name="change_outfit"/>
 	<menu_item_call label="Il mio profilo" name="my_profile"/>
diff --git a/indra/newview/skins/default/xui/it/menu_mini_map.xml b/indra/newview/skins/default/xui/it/menu_mini_map.xml
index fa574230e0..ecc2bef06a 100644
--- a/indra/newview/skins/default/xui/it/menu_mini_map.xml
+++ b/indra/newview/skins/default/xui/it/menu_mini_map.xml
@@ -4,6 +4,7 @@
 	<menu_item_call label="Zoom Medio" name="Zoom Medium"/>
 	<menu_item_call label="Zoom Distante" name="Zoom Far"/>
 	<menu_item_check label="Ruota la mappa" name="Rotate Map"/>
+	<menu_item_check label="Centra automaticamente" name="Auto Center"/>
 	<menu_item_call label="Ferma il puntamento" name="Stop Tracking"/>
 	<menu_item_call label="Mappa del mondo" name="World Map"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/it/menu_object.xml b/indra/newview/skins/default/xui/it/menu_object.xml
index 413fcfdc8a..4c7402ea08 100644
--- a/indra/newview/skins/default/xui/it/menu_object.xml
+++ b/indra/newview/skins/default/xui/it/menu_object.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Object Pie">
 	<menu_item_call label="Tocca" name="Object Touch">
-		<on_enable parameter="Tocca" name="EnableTouch"/>
+		<menu_item_call.on_enable name="EnableTouch" parameter="Tocca"/>
 	</menu_item_call>
 	<menu_item_call label="Modifica" name="Edit..."/>
 	<menu_item_call label="Costruisci" name="Build"/>
@@ -10,18 +10,18 @@
 	<menu_item_call label="Alzati" name="Object Stand Up"/>
 	<menu_item_call label="Profilo dell&apos;oggetto" name="Object Inspect"/>
 	<menu_item_call label="Zoom avanti" name="Zoom In"/>
-	<context_menu label="Indossa" name="Put On">
+	<context_menu label="Metti" name="Put On">
 		<menu_item_call label="Indossa" name="Wear"/>
+		<menu_item_call label="Aggiungi" name="Add"/>
 		<context_menu label="Attacca" name="Object Attach"/>
 		<context_menu label="Attacca HUD" name="Object Attach HUD"/>
 	</context_menu>
-	<context_menu label="Togli" name="Remove">
+	<context_menu label="Rimuovi" name="Remove">
 		<menu_item_call label="Segnala abuso" name="Report Abuse..."/>
 		<menu_item_call label="Blocca" name="Object Mute"/>
 		<menu_item_call label="Restituisci" name="Return..."/>
 		<menu_item_call label="Elimina" name="Delete"/>
 	</context_menu>
-	<menu_item_call label="Acquista" name="Pie Object Bye"/>
 	<menu_item_call label="Prendi" name="Pie Object Take"/>
 	<menu_item_call label="Prendi copia" name="Take Copy"/>
 	<menu_item_call label="Paga" name="Pay..."/>
diff --git a/indra/newview/skins/default/xui/it/menu_participant_list.xml b/indra/newview/skins/default/xui/it/menu_participant_list.xml
index 52e3c933da..1b057c4077 100644
--- a/indra/newview/skins/default/xui/it/menu_participant_list.xml
+++ b/indra/newview/skins/default/xui/it/menu_participant_list.xml
@@ -11,7 +11,7 @@
 	<menu_item_check label="Icone persone" name="View Icons"/>
 	<menu_item_check label="Blocca voce" name="Block/Unblock"/>
 	<menu_item_check label="Blocca testo" name="MuteText"/>
-	<context_menu label="Opzioni moderatore " name="Moderator Options">
+	<context_menu label="Opzioni moderatore" name="Moderator Options">
 		<menu_item_check label="Consenti chat di testo" name="AllowTextChat"/>
 		<menu_item_call label="Disattiva audio di questo participante" name="ModerateVoiceMuteSelected"/>
 		<menu_item_call label="Riattiva audio di questo participante" name="ModerateVoiceUnMuteSelected"/>
diff --git a/indra/newview/skins/default/xui/it/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/it/menu_people_friends_view_sort.xml
index 1f987890c4..3a799f44eb 100644
--- a/indra/newview/skins/default/xui/it/menu_people_friends_view_sort.xml
+++ b/indra/newview/skins/default/xui/it/menu_people_friends_view_sort.xml
@@ -3,5 +3,6 @@
 	<menu_item_check label="Ordina in base al nome" name="sort_name"/>
 	<menu_item_check label="Ordina in base allo stato" name="sort_status"/>
 	<menu_item_check label="Icone persone" name="view_icons"/>
+	<menu_item_check label="Visualizza autorizzazioni concesse" name="view_permissions"/>
 	<menu_item_call label="Mostra oggetti e residenti bloccati" name="show_blocked_list"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/it/menu_people_nearby_multiselect.xml b/indra/newview/skins/default/xui/it/menu_people_nearby_multiselect.xml
index 9784a4cc9a..e0b9ceb63d 100644
--- a/indra/newview/skins/default/xui/it/menu_people_nearby_multiselect.xml
+++ b/indra/newview/skins/default/xui/it/menu_people_nearby_multiselect.xml
@@ -6,4 +6,5 @@
 	<menu_item_call label="Chiama" name="Call"/>
 	<menu_item_call label="Condividi" name="Share"/>
 	<menu_item_call label="Paga" name="Pay"/>
+	<menu_item_call label="Offri Teleport" name="teleport"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_viewer.xml b/indra/newview/skins/default/xui/it/menu_viewer.xml
index 6290b79211..72dfbeecb6 100644
--- a/indra/newview/skins/default/xui/it/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/it/menu_viewer.xml
@@ -94,7 +94,6 @@
 			<menu_item_call label="Imposta script come non in esecuzione" name="Set Scripts to Not Running"/>
 		</menu>
 		<menu label="Opzioni" name="Options">
-			<menu_item_call label="Definisci diritti di caricamento predefiniti" name="perm prefs"/>
 			<menu_item_check label="Mostra autorizzazioni avanzate" name="DebugPermissions"/>
 			<menu_item_check label="Seleziona solo i miei oggetti" name="Select Only My Objects"/>
 			<menu_item_check label="Seleziona solo gli oggetti spostabili" name="Select Only Movable Objects"/>
@@ -121,7 +120,6 @@
 		<menu_item_call label="Informazioni su [APP_NAME]" name="About Second Life"/>
 	</menu>
 	<menu label="Avanzate" name="Advanced">
-		<menu_item_check label="Mostra menu Avanzato" name="Show Advanced Menu"/>
 		<menu_item_call label="Ferma animazione" name="Stop Animating My Avatar"/>
 		<menu_item_call label="Ridisegna le texture" name="Rebake Texture"/>
 		<menu_item_call label="Imposta dimensioni dell&apos;interfaccia sui valori predefiniti" name="Set UI Size to Default"/>
@@ -168,7 +166,6 @@
 			<menu_item_check label="Nebbia" name="Fog"/>
 			<menu_item_check label="Oggetti flessibili" name="Flexible Objects"/>
 		</menu>
-		<menu_item_check label="Esegui thread multipli" name="Run Multiple Threads"/>
 		<menu_item_check label="Usa thread lettura plugin" name="Use Plugin Read Thread"/>
 		<menu_item_call label="Pulisci cache di gruppo" name="ClearGroupCache"/>
 		<menu_item_check label="Fluidità mouse" name="Mouse Smoothing"/>
@@ -177,7 +174,6 @@
 			<menu_item_check label="Cerca" name="Search"/>
 			<menu_item_call label="Rilascia tasti" name="Release Keys"/>
 			<menu_item_call label="Imposta dimensioni dell&apos;interfaccia sui valori predefiniti" name="Set UI Size to Default"/>
-			<menu_item_check label="Mostra menu Avanzato - tasti di scelta rapida esistenti" name="Show Advanced Menu - legacy shortcut"/>
 			<menu_item_check label="Corri sempre" name="Always Run"/>
 			<menu_item_check label="Vola" name="Fly"/>
 			<menu_item_call label="Chiudi finestra" name="Close Window"/>
@@ -197,6 +193,7 @@
 			<menu_item_call label="Zoom avanti" name="Zoom In"/>
 			<menu_item_call label="Zoom predefinito" name="Zoom Default"/>
 			<menu_item_call label="Zoom indietro" name="Zoom Out"/>
+			<menu_item_check label="Mostra menu Avanzato" name="Show Advanced Menu"/>
 		</menu>
 		<menu_item_call label="Mostra impostazioni di debug" name="Debug Settings"/>
 		<menu_item_check label="Mostra menu sviluppo" name="Debug Mode"/>
@@ -239,9 +236,15 @@
 		<menu label="Rendering" name="Rendering">
 			<menu_item_check label="Assi" name="Axes"/>
 			<menu_item_check label="Wireframe" name="Wireframe"/>
-			<menu_item_check label="Illuminazione globale" name="Global Illumination"/>
+			<menu_item_check label="Luci e ombre" name="Lighting and Shadows"/>
+			<menu_item_check label="Ombra dal sole, dalla luna e dai proiettori" name="Shadows from Sun/Moon/Projectors"/>
+			<menu_item_check label="SSAO e ombre fluide" name="SSAO and Shadow Smoothing"/>
+			<menu_item_check label="Illuminazione globale (sperimentale)" name="Global Illumination"/>
+			<menu_item_check label="Maschera alfa automatica (differita)" name="Automatic Alpha Masks (deferred)"/>
+			<menu_item_check label="Maschera alfa automatica (non differita)" name="Automatic Alpha Masks (non-deferred)"/>
 			<menu_item_check label="Texture delle animazioni" name="Animation Textures"/>
 			<menu_item_check label="Disabilita texture" name="Disable Textures"/>
+			<menu_item_check label="Atlante tessitura (sperimentale)" name="Texture Atlas"/>
 			<menu_item_check label="Rendering delle luci unite" name="Render Attached Lights"/>
 			<menu_item_check label="Rendering particelle unite" name="Render Attached Particles"/>
 			<menu_item_check label="Gli oggetti brillano quando sono sotto il cursore" name="Hover Glow Objects"/>
@@ -261,7 +264,8 @@
 			<menu_item_call label="Test browser Web" name="Web Browser Test"/>
 			<menu_item_call label="Stampa informazioni oggetto selezionato" name="Print Selected Object Info"/>
 			<menu_item_call label="Statistiche memoria" name="Memory Stats"/>
-			<menu_item_check label="Doppio clic pilota automatico" name="Double-ClickAuto-Pilot"/>
+			<menu_item_check label="Doppio clic pilota automatico" name="Double-Click Auto-Pilot"/>
+			<menu_item_check label="Doppio clic per teleport" name="DoubleClick Teleport"/>
 			<menu_item_check label="Debug clic" name="Debug Clicks"/>
 			<menu_item_check label="Debug eventi mouse" name="Debug Mouse Events"/>
 		</menu>
diff --git a/indra/newview/skins/default/xui/it/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/it/menu_wearable_list_item.xml
index b0bd68966d..c9a02d8a86 100644
--- a/indra/newview/skins/default/xui/it/menu_wearable_list_item.xml
+++ b/indra/newview/skins/default/xui/it/menu_wearable_list_item.xml
@@ -9,6 +9,6 @@
 	<context_menu label="Attacca a HUD" name="wearable_attach_to_hud"/>
 	<menu_item_call label="Togli" name="take_off"/>
 	<menu_item_call label="Modifica" name="edit"/>
-	<menu_item_call label="Profilo dell&apos;oggetto" name="object_profile"/>
+	<menu_item_call label="Profilo articolo" name="object_profile"/>
 	<menu_item_call label="Mostra originale" name="show_original"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_wearing_gear.xml b/indra/newview/skins/default/xui/it/menu_wearing_gear.xml
index 40eea8f03c..7c8eef64e5 100644
--- a/indra/newview/skins/default/xui/it/menu_wearing_gear.xml
+++ b/indra/newview/skins/default/xui/it/menu_wearing_gear.xml
@@ -1,4 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <menu name="Gear Wearing">
 	<menu_item_call label="Modifica vestiario" name="edit"/>
+	<menu_item_call label="Togli" name="takeoff"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/it/menu_wearing_tab.xml b/indra/newview/skins/default/xui/it/menu_wearing_tab.xml
index 48ff0a2160..4a5366091f 100644
--- a/indra/newview/skins/default/xui/it/menu_wearing_tab.xml
+++ b/indra/newview/skins/default/xui/it/menu_wearing_tab.xml
@@ -1,4 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Wearing">
+	<menu_item_call label="Togli" name="take_off"/>
+	<menu_item_call label="Stacca" name="detach"/>
 	<menu_item_call label="Modifica vestiario" name="edit"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/it/notifications.xml b/indra/newview/skins/default/xui/it/notifications.xml
index 474bdca55f..2346c19926 100644
--- a/indra/newview/skins/default/xui/it/notifications.xml
+++ b/indra/newview/skins/default/xui/it/notifications.xml
@@ -1818,6 +1818,10 @@ Trasferisci gli elementi nell&apos;inventario?
 		Confermi di voler uscire?
 		<usetemplate ignoretext="Conferma prima di uscire" name="okcancelignore" notext="Non uscire" yestext="Esci"/>
 	</notification>
+	<notification name="DeleteItems">
+		[QUESTION]
+		<usetemplate ignoretext="Conferma prima di cancellare gli elementi" name="okcancelignore" notext="Annulla" yestext="OK"/>
+	</notification>
 	<notification name="HelpReportAbuseEmailLL">
 		Usa questo strumento per segnalare violazioni a [http://secondlife.com/corporate/tos.php Terms of Service] e [http://secondlife.com/corporate/cs.php Community Standards].
 
@@ -2747,9 +2751,13 @@ Ti consigliamo di controllare le tue impostazioni di rete e della firewall.
 		( presente da [EXISTENCE] secondi )
 Avatar &apos;[NAME]&apos; è partito completamente caricato.
 	</notification>
-	<notification name="AvatarRezSelfBakeNotification">
-		( in esistenza da [EXISTENCE] secondi )
-Effettuata l&apos;azione: [ACTION] di una texture [RESOLUTION] completata per &apos;[BODYREGION]&apos; dopo [TIME] secondi.
+	<notification name="AvatarRezSelfBakedTextureUploadNotification">
+		( In esistenza da [EXISTENCE] secondi)
+Hai caricato una texture [RESOLUTION] completata per &apos;[BODYREGION]&apos; dopo [TIME] secondi.
+	</notification>
+	<notification name="AvatarRezSelfBakedTextureUpdateNotification">
+		( In esistenza da [EXISTENCE] secondi)
+Hai aggiornato localmente una texture [RESOLUTION] completata per &apos;[BODYREGION]&apos; dopo [TIME] secondi.
 	</notification>
 	<notification name="ConfirmLeaveCall">
 		Sei sicuro di volere uscire dalla chiamata?
diff --git a/indra/newview/skins/default/xui/it/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/it/panel_avatar_list_item.xml
index 4c7f298590..3e604ca775 100644
--- a/indra/newview/skins/default/xui/it/panel_avatar_list_item.xml
+++ b/indra/newview/skins/default/xui/it/panel_avatar_list_item.xml
@@ -22,5 +22,9 @@
 		[COUNT] a
 	</string>
 	<text name="avatar_name" value="Sconosciuto"/>
+	<icon name="permission_edit_theirs_icon" tool_tip="Puoi modificare gli oggetti di questo amico"/>
+	<icon name="permission_edit_mine_icon" tool_tip="Questo amico può modificare, cancellare o prendere i tuoi oggetti"/>
+	<icon name="permission_map_icon" tool_tip="Questo amico può identificarti sulla mappa"/>
+	<icon name="permission_online_icon" tool_tip="Questo amico può vedere se sei online"/>
 	<button name="profile_btn" tool_tip="Vedi profilo"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/it/panel_bottomtray.xml b/indra/newview/skins/default/xui/it/panel_bottomtray.xml
index e4d99cc402..3d12473c87 100644
--- a/indra/newview/skins/default/xui/it/panel_bottomtray.xml
+++ b/indra/newview/skins/default/xui/it/panel_bottomtray.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="bottom_tray">
+	<string name="DragIndicationImageName" value="Accordion_ArrowOpened_Off"/>
 	<string name="SpeakBtnToolTip" value="Accende o spegne il microfono"/>
 	<string name="VoiceControlBtnToolTip" value="Mostra o nasconde il pannello di regolazione voce"/>
 	<layout_stack name="toolbar_stack">
@@ -12,28 +13,25 @@
 			<gesture_combo_list label="Gesture" name="Gesture" tool_tip="Mostra o nasconde le gesture"/>
 		</layout_panel>
 		<layout_panel name="movement_panel">
-			<button label="Sposta" name="movement_btn" tool_tip="Mostra o nasconde i comandi del movimento"/>
+			<bottomtray_button label="Sposta" name="movement_btn" tool_tip="Mostra o nasconde i comandi del movimento"/>
 		</layout_panel>
 		<layout_panel name="cam_panel">
-			<button label="Visuale" name="camera_btn" tool_tip="Mostra o nasconde le regolazioni della visuale"/>
+			<bottomtray_button label="Visuale" name="camera_btn" tool_tip="Mostra o nasconde le regolazioni della visuale"/>
 		</layout_panel>
 		<layout_panel name="snapshot_panel">
-			<button label="" name="snapshots" tool_tip="Scatta una foto"/>
-		</layout_panel>
-		<layout_panel name="sidebar_btn_panel">
-			<button label="Barra laterale" name="sidebar_btn" tool_tip="Mostra o nasconde la barra laterale"/>
+			<bottomtray_button label="" name="snapshots" tool_tip="Scatta una foto"/>
 		</layout_panel>
 		<layout_panel name="build_btn_panel">
-			<button label="Costruisci" name="build_btn" tool_tip="Mostra o nasconde gli strumenti di costruzione"/>
+			<bottomtray_button label="Costruisci" name="build_btn" tool_tip="Mostra o nasconde gli strumenti di costruzione"/>
 		</layout_panel>
 		<layout_panel name="search_btn_panel">
-			<button label="Cerca" name="search_btn" tool_tip="Mostra o nasconde la ricerca"/>
+			<bottomtray_button label="Cerca" name="search_btn" tool_tip="Mostra o nasconde la ricerca"/>
 		</layout_panel>
 		<layout_panel name="world_map_btn_panel">
-			<button label="Mappa" name="world_map_btn" tool_tip="Mostra o nasconde la mappa del mondo"/>
+			<bottomtray_button label="Mappa" name="world_map_btn" tool_tip="Mostra o nasconde la mappa del mondo"/>
 		</layout_panel>
 		<layout_panel name="mini_map_btn_panel">
-			<button label="Mini mappa" name="mini_map_btn" tool_tip="Mostra o nasconde la mini mappa"/>
+			<bottomtray_button label="Mini mappa" name="mini_map_btn" tool_tip="Mostra o nasconde la mini mappa"/>
 		</layout_panel>
 		<layout_panel name="im_well_panel">
 			<chiclet_im_well name="im_well">
diff --git a/indra/newview/skins/default/xui/it/panel_classified_info.xml b/indra/newview/skins/default/xui/it/panel_classified_info.xml
index 3d363d9c75..a7cf51c4b9 100644
--- a/indra/newview/skins/default/xui/it/panel_classified_info.xml
+++ b/indra/newview/skins/default/xui/it/panel_classified_info.xml
@@ -46,8 +46,16 @@
 		</panel>
 	</scroll_container>
 	<panel name="buttons">
-		<button label="Teleport" name="teleport_btn"/>
-		<button label="Mappa" name="show_on_map_btn"/>
-		<button label="Modifica" name="edit_btn"/>
+		<layout_stack name="layout_stack1">
+			<layout_panel name="layout_panel1">
+				<button label="Teleport" name="teleport_btn"/>
+			</layout_panel>
+			<layout_panel name="show_on_map_btn_lp">
+				<button label="Mappa" name="show_on_map_btn"/>
+			</layout_panel>
+			<layout_panel name="edit_btn_lp">
+				<button label="Modifica" name="edit_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/it/panel_edit_classified.xml b/indra/newview/skins/default/xui/it/panel_edit_classified.xml
index bbe8ebbc32..ad827696ff 100644
--- a/indra/newview/skins/default/xui/it/panel_edit_classified.xml
+++ b/indra/newview/skins/default/xui/it/panel_edit_classified.xml
@@ -36,13 +36,19 @@
 				<icons_combo_box.item label="Contenuto moderato" name="mature_ci" value="Moderato"/>
 				<icons_combo_box.item label="Contenuto generale" name="pg_ci" value="Generale"/>
 			</icons_combo_box>
+			<check_box label="Rinnovo automatico ogni settimana" name="auto_renew"/>
 			<text name="price_for_listing_label" value="Prezzo per inserzione:"/>
 			<spinner label="L$" name="price_for_listing" tool_tip="Prezzo per inserzione:" value="50"/>
-			<check_box label="Rinnovo automatico ogni settimana" name="auto_renew"/>
 		</panel>
 	</scroll_container>
 	<panel label="bottom_panel" name="bottom_panel">
-		<button label="[LABEL]" name="save_changes_btn"/>
-		<button label="Annulla" name="cancel_btn"/>
+		<layout_stack name="bottom_panel_ls">
+			<layout_panel name="save_changes_btn_lp">
+				<button label="[LABEL]" name="save_changes_btn"/>
+			</layout_panel>
+			<layout_panel name="show_on_map_btn_lp">
+				<button label="Annulla" name="cancel_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/it/panel_edit_pick.xml b/indra/newview/skins/default/xui/it/panel_edit_pick.xml
index f93b953eac..8e464ca037 100644
--- a/indra/newview/skins/default/xui/it/panel_edit_pick.xml
+++ b/indra/newview/skins/default/xui/it/panel_edit_pick.xml
@@ -25,7 +25,13 @@
 		</panel>
 	</scroll_container>
 	<panel label="bottom_panel" name="bottom_panel">
-		<button label="Salva luogo preferito" name="save_changes_btn"/>
-		<button label="Annulla" name="cancel_btn"/>
+		<layout_stack name="layout_stack1">
+			<layout_panel name="layout_panel1">
+				<button label="Salva luogo preferito" name="save_changes_btn"/>
+			</layout_panel>
+			<layout_panel name="layout_panel1">
+				<button label="Annulla" name="cancel_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/it/panel_edit_profile.xml b/indra/newview/skins/default/xui/it/panel_edit_profile.xml
index 3ecf4bcaf2..263ae105dc 100644
--- a/indra/newview/skins/default/xui/it/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/it/panel_edit_profile.xml
@@ -45,7 +45,13 @@
 		</panel>
 	</scroll_container>
 	<panel name="profile_me_buttons_panel">
-		<button label="Salva modifiche" name="save_btn"/>
-		<button label="Annulla" name="cancel_btn"/>
+		<layout_stack name="bottom_panel_ls">
+			<layout_panel name="save_changes_btn_lp">
+				<button label="Salva modifiche" name="save_btn"/>
+			</layout_panel>
+			<layout_panel name="show_on_map_btn_lp">
+				<button label="Annulla" name="cancel_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/it/panel_edit_wearable.xml b/indra/newview/skins/default/xui/it/panel_edit_wearable.xml
index 19456281bb..94bda7b2a6 100644
--- a/indra/newview/skins/default/xui/it/panel_edit_wearable.xml
+++ b/indra/newview/skins/default/xui/it/panel_edit_wearable.xml
@@ -102,7 +102,13 @@
 		<icon name="female_icon" tool_tip="Femmina"/>
 	</panel>
 	<panel name="button_panel">
-		<button label="Salva con nome" name="save_as_button"/>
-		<button label="Annulla modifiche" name="revert_button"/>
+		<layout_stack name="button_panel_ls">
+			<layout_panel name="save_as_btn_lp">
+				<button label="Salva con nome" name="save_as_button"/>
+			</layout_panel>
+			<layout_panel name="revert_btn_lp">
+				<button label="Annulla modifiche" name="revert_button"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/it/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/it/panel_group_info_sidetray.xml
index da797b309f..34ee3c2dca 100644
--- a/indra/newview/skins/default/xui/it/panel_group_info_sidetray.xml
+++ b/indra/newview/skins/default/xui/it/panel_group_info_sidetray.xml
@@ -13,7 +13,7 @@
 		Gratis
 	</panel.string>
 	<panel name="group_info_top">
-		<text name="group_name" value="(Caricamento in corso...)"/>
+		<text_editor name="group_name" value="(Caricamento in corso...)"/>
 		<line_editor label="Scrivi qui il nome del gruppo" name="group_name_editor"/>
 	</panel>
 	<layout_stack name="layout">
@@ -25,9 +25,15 @@
 				<accordion_tab name="group_land_tab" title="Terra/Beni"/>
 			</accordion>
 		</layout_panel>
-		<layout_panel name="button_row">
+	</layout_stack>
+	<layout_stack name="button_row_ls">
+		<layout_panel name="btn_chat_lp">
 			<button label="Chat" name="btn_chat"/>
+		</layout_panel>
+		<layout_panel name="call_btn_lp">
 			<button label="Chiamata al gruppo" name="btn_call" tool_tip="Chiama questo gruppo"/>
+		</layout_panel>
+		<layout_panel name="btn_apply_lp">
 			<button label="Salva" label_selected="Salva" name="btn_apply"/>
 			<button label="Crea un gruppo" name="btn_create" tool_tip="Crea un nuovo gruppo"/>
 		</layout_panel>
diff --git a/indra/newview/skins/default/xui/it/panel_landmarks.xml b/indra/newview/skins/default/xui/it/panel_landmarks.xml
index 74cd9e6fb1..5617105c31 100644
--- a/indra/newview/skins/default/xui/it/panel_landmarks.xml
+++ b/indra/newview/skins/default/xui/it/panel_landmarks.xml
@@ -7,8 +7,16 @@
 		<accordion_tab name="tab_library" title="Libreria"/>
 	</accordion>
 	<panel name="bottom_panel">
-		<button name="options_gear_btn" tool_tip="Mostra opzioni addizionali"/>
-		<button name="add_btn" tool_tip="Aggiungi un nuovo punto di riferimento"/>
-		<dnd_button name="trash_btn" tool_tip="Rimuovi il punto di riferimento selezionato"/>
+		<layout_stack name="bottom_panel">
+			<layout_panel name="options_gear_btn_panel">
+				<button name="options_gear_btn" tool_tip="Mostra ulteriori opzioni"/>
+			</layout_panel>
+			<layout_panel name="add_btn_panel">
+				<button name="add_btn" tool_tip="Aggiungi un nuovo punto di riferimento"/>
+			</layout_panel>
+			<layout_panel name="trash_btn_panel">
+				<dnd_button name="trash_btn" tool_tip="Rimuovi il punto di riferimento selezionato"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/it/panel_my_profile.xml b/indra/newview/skins/default/xui/it/panel_my_profile.xml
index 08c050228f..3e6683beb8 100644
--- a/indra/newview/skins/default/xui/it/panel_my_profile.xml
+++ b/indra/newview/skins/default/xui/it/panel_my_profile.xml
@@ -27,9 +27,8 @@
 				</panel>
 			</scroll_container>
 		</layout_panel>
-		<layout_panel name="profile_me_buttons_panel">
-			<button label="Modifica profilo" name="edit_profile_btn" tool_tip="Modifica le tue informazioni personali"/>
-			<button label="Modifica aspetto fisico" name="edit_appearance_btn" tool_tip="Crea/modifica il tuo aspetto: parti del corpo, abiti ecc."/>
-		</layout_panel>
 	</layout_stack>
+	<panel name="profile_me_buttons_panel">
+		<button label="Modifica profilo" name="edit_profile_btn" tool_tip="Modifica le tue informazioni personali"/>
+	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/it/panel_notes.xml b/indra/newview/skins/default/xui/it/panel_notes.xml
index 9ce6b47a32..e127138277 100644
--- a/indra/newview/skins/default/xui/it/panel_notes.xml
+++ b/indra/newview/skins/default/xui/it/panel_notes.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="Note e Privacy" name="panel_notes">
 	<layout_stack name="layout">
-		<panel name="notes_stack">
+		<layout_panel name="notes_stack">
 			<scroll_container name="profile_scroll">
 				<panel name="profile_scroll_panel">
 					<text name="status_message" value="Le mie note private:"/>
@@ -11,13 +11,25 @@
 					<check_box label="Modificare, eliminare o prendere i miei oggetti" name="objects_check"/>
 				</panel>
 			</scroll_container>
-		</panel>
-		<panel name="notes_buttons_panel">
-			<button label="Aggiungi amico" name="add_friend" tool_tip="Offri amicizia a questo residente"/>
-			<button label="IM" name="im" tool_tip="Apri una sessione messaggio istantaneo"/>
-			<button label="Chiama" name="call" tool_tip="Chiama questo residente"/>
-			<button label="Mappa" name="show_on_map_btn" tool_tip="Mostra il residente sulla mappa"/>
-			<button label="Teleport" name="teleport" tool_tip="Offri teleport"/>
-		</panel>
+		</layout_panel>
+		<layout_panel name="notes_buttons_panel">
+			<layout_stack name="bottom_bar_ls">
+				<layout_panel name="add_friend_btn_lp">
+					<button label="Aggiungi come amico" name="add_friend" tool_tip="Offri amicizia a questo residente"/>
+				</layout_panel>
+				<layout_panel name="im_btn_lp">
+					<button label="IM" name="im" tool_tip="Apri una sessione messaggio istantaneo"/>
+				</layout_panel>
+				<layout_panel name="call_btn_lp">
+					<button label="Chiama" name="call" tool_tip="Chiama questo residente"/>
+				</layout_panel>
+				<layout_panel name="show_on_map_btn_lp">
+					<button label="Mappa" name="show_on_map_btn" tool_tip="Mostra il residente sulla mappa"/>
+				</layout_panel>
+				<layout_panel name="teleport_btn_lp">
+					<button label="Teleport" name="teleport" tool_tip="Offri teleport"/>
+				</layout_panel>
+			</layout_stack>
+		</layout_panel>
 	</layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/it/panel_outfit_edit.xml b/indra/newview/skins/default/xui/it/panel_outfit_edit.xml
index 6628d4f730..446c211b1c 100644
--- a/indra/newview/skins/default/xui/it/panel_outfit_edit.xml
+++ b/indra/newview/skins/default/xui/it/panel_outfit_edit.xml
@@ -45,7 +45,13 @@
 		<button name="shop_btn_2" tool_tip="Visita Marketplace di SL. In alternativa puoi scegliere un capo che stai indossando, poi fare clic qui per vedere altri capi simili"/>
 	</panel>
 	<panel name="save_revert_button_bar">
-		<button label="Salva" name="save_btn"/>
-		<button label="Annulla modifiche" name="revert_btn" tool_tip="Ripristina l&apos;ultima versione salvata"/>
+		<layout_stack name="button_bar_ls">
+			<layout_panel name="save_btn_lp">
+				<button label="Salva" name="save_btn"/>
+			</layout_panel>
+			<layout_panel name="revert_btn_lp">
+				<button label="Annulla modifiche" name="revert_btn" tool_tip="Ripristina l&apos;ultima versione salvata"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/it/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/it/panel_outfits_inventory.xml
index 8f6ca38767..c7821bc363 100644
--- a/indra/newview/skins/default/xui/it/panel_outfits_inventory.xml
+++ b/indra/newview/skins/default/xui/it/panel_outfits_inventory.xml
@@ -11,7 +11,13 @@
 		<panel label="INDOSSA" name="cof_tab"/>
 	</tab_container>
 	<panel name="bottom_panel">
-		<button label="Salva con nome" name="save_btn"/>
-		<button label="Indossa" name="wear_btn" tool_tip="Indossa il vestiario selezionato"/>
+		<layout_stack name="bottom_panel_ls">
+			<layout_panel name="save_btn_lp">
+				<button label="Salva con nome" name="save_btn"/>
+			</layout_panel>
+			<layout_panel name="wear_btn_lp">
+				<button label="Indossa" name="wear_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/it/panel_people.xml b/indra/newview/skins/default/xui/it/panel_people.xml
index 3d07ff45ba..a8f60e556e 100644
--- a/indra/newview/skins/default/xui/it/panel_people.xml
+++ b/indra/newview/skins/default/xui/it/panel_people.xml
@@ -32,9 +32,17 @@ Stai cercando persone da frequentare? Prova la [secondlife:///app/worldmap Mappa
 				<accordion_tab name="tab_all" title="Tutto"/>
 			</accordion>
 			<panel label="bottom_panel" name="bottom_panel">
-				<button name="friends_viewsort_btn" tool_tip="Opzioni"/>
-				<button name="add_btn" tool_tip="Offri amicizia a un residente"/>
-				<button name="del_btn" tool_tip="Rimuovi la persona selezionata dalla lista degli amici"/>
+				<layout_stack name="bottom_panel">
+					<layout_panel name="options_gear_btn_panel">
+						<button name="friends_viewsort_btn" tool_tip="Mostra ulteriori opzioni"/>
+					</layout_panel>
+					<layout_panel name="add_btn_panel">
+						<button name="add_btn" tool_tip="Offri amicizia a un residente"/>
+					</layout_panel>
+					<layout_panel name="trash_btn_panel">
+						<dnd_button name="trash_btn" tool_tip="Rimuovi la persona selezionata dalla lista degli amici"/>
+					</layout_panel>
+				</layout_stack>
 			</panel>
 		</panel>
 		<panel label="I MIEI GRUPPI" name="groups_panel">
@@ -52,13 +60,33 @@ Stai cercando persone da frequentare? Prova la [secondlife:///app/worldmap Mappa
 		</panel>
 	</tab_container>
 	<panel name="button_bar">
-		<button label="Profilo" name="view_profile_btn" tool_tip="Mostra immagine, gruppi e altre informazioni del residente"/>
-		<button label="IM" name="im_btn" tool_tip="Apri una sessione messaggio istantaneo"/>
-		<button label="Chiama" name="call_btn" tool_tip="Chiama questo residente"/>
-		<button label="Condividi" name="share_btn" tool_tip="Condividi un oggetto dell&apos;inventario"/>
-		<button label="Teleport" name="teleport_btn" tool_tip="Offri teleport"/>
-		<button label="Profilo del gruppo" name="group_info_btn" tool_tip="Mostra informazioni gruppo"/>
-		<button label="Chat di gruppo" name="chat_btn" tool_tip="Apri sessione chat"/>
-		<button label="Chiamata al gruppo" name="group_call_btn" tool_tip="Chiama questo gruppo"/>
+		<layout_stack name="bottom_bar_ls">
+			<layout_panel name="view_profile_btn_lp">
+				<button label="Profilo" name="view_profile_btn" tool_tip="Mostra immagine, gruppi e altre informazioni del residente"/>
+			</layout_panel>
+			<layout_panel name="chat_btn_lp">
+				<button label="IM" name="im_btn" tool_tip="Apri una sessione messaggio istantaneo"/>
+			</layout_panel>
+			<layout_panel name="chat_btn_lp">
+				<button label="Chiama" name="call_btn" tool_tip="Chiama questo residente"/>
+			</layout_panel>
+			<layout_panel name="chat_btn_lp">
+				<button label="Condividi" name="share_btn" tool_tip="Condividi un oggetto dell&apos;inventario"/>
+			</layout_panel>
+			<layout_panel name="chat_btn_lp">
+				<button label="Teleport" name="teleport_btn" tool_tip="Offri teleport"/>
+			</layout_panel>
+		</layout_stack>
+		<layout_stack name="bottom_bar_ls1">
+			<layout_panel name="group_info_btn_lp">
+				<button label="Profilo del gruppo" name="group_info_btn" tool_tip="Mostra informazioni gruppo"/>
+			</layout_panel>
+			<layout_panel name="chat_btn_lp">
+				<button label="Chat di gruppo" name="chat_btn" tool_tip="Apri sessione chat"/>
+			</layout_panel>
+			<layout_panel name="group_call_btn_lp">
+				<button label="Chiamata al gruppo" name="group_call_btn" tool_tip="Chiama questo gruppo"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/it/panel_pick_info.xml b/indra/newview/skins/default/xui/it/panel_pick_info.xml
index 7c059b443d..ca9959a581 100644
--- a/indra/newview/skins/default/xui/it/panel_pick_info.xml
+++ b/indra/newview/skins/default/xui/it/panel_pick_info.xml
@@ -3,14 +3,22 @@
 	<text name="title" value="Scegli Info"/>
 	<scroll_container name="profile_scroll">
 		<panel name="scroll_content_panel">
-			<text name="pick_name" value="[nome]"/>
-			<text name="pick_location" value="[caricamento...]"/>
-			<text name="pick_desc" value="[descrizione]"/>
+			<text_editor name="pick_name" value="[nome]"/>
+			<text_editor name="pick_location" value="[caricamento...]"/>
+			<text_editor name="pick_desc" value="[descrizione]"/>
 		</panel>
 	</scroll_container>
 	<panel name="buttons">
-		<button label="Teleport" name="teleport_btn"/>
-		<button label="Mappa" name="show_on_map_btn"/>
-		<button label="Modifica" name="edit_btn"/>
+		<layout_stack name="layout_stack1">
+			<layout_panel name="layout_panel1">
+				<button label="Teleport" name="teleport_btn"/>
+			</layout_panel>
+			<layout_panel name="show_on_map_btn_lp">
+				<button label="Mappa" name="show_on_map_btn"/>
+			</layout_panel>
+			<layout_panel name="edit_btn_lp">
+				<button label="Modifica" name="edit_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/it/panel_picks.xml b/indra/newview/skins/default/xui/it/panel_picks.xml
index 823e0fcd03..3faf28a948 100644
--- a/indra/newview/skins/default/xui/it/panel_picks.xml
+++ b/indra/newview/skins/default/xui/it/panel_picks.xml
@@ -2,19 +2,28 @@
 <panel label="Preferiti" name="panel_picks">
 	<string name="no_picks" value="Nessun luogo preferito"/>
 	<string name="no_classifieds" value="Nessun annuncio"/>
-	<text name="empty_picks_panel_text">
-		Nessuna foto/annuncio qui
-	</text>
 	<accordion name="accordion">
 		<accordion_tab name="tab_picks" title="Preferiti"/>
 		<accordion_tab name="tab_classifieds" title="Annunci pubblicitari"/>
 	</accordion>
 	<panel label="bottom_panel" name="edit_panel">
-		<button name="new_btn" tool_tip="Crea un nuovo luogo preferito o annuncio in questo luogo"/>
+		<layout_stack name="edit_panel_ls">
+			<layout_panel name="gear_menu_btn">
+				<button name="new_btn" tool_tip="Crea un nuovo luogo preferito o annuncio in questo luogo"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 	<panel name="buttons_cucks">
-		<button label="Informazioni" name="info_btn" tool_tip="Mostra informazioni sul luogo preferito"/>
-		<button label="Teleport" name="teleport_btn" tool_tip="Teleport alla zona corrispondente"/>
-		<button label="Mappa" name="show_on_map_btn" tool_tip="Mostra la zona corrispondente nella mappa del Mondo"/>
+		<layout_stack name="buttons_cucks_ls">
+			<layout_panel name="info_btn_lp">
+				<button label="Informazioni" name="info_btn" tool_tip="Mostra informazioni sul luogo preferito"/>
+			</layout_panel>
+			<layout_panel name="teleport_btn_lp">
+				<button label="Teleport" name="teleport_btn" tool_tip="Teleport alla zona corrispondente"/>
+			</layout_panel>
+			<layout_panel name="show_on_map_btn_lp">
+				<button label="Mappa" name="show_on_map_btn" tool_tip="Mostra la zona corrispondente nella mappa del Mondo"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/it/panel_places.xml b/indra/newview/skins/default/xui/it/panel_places.xml
index 9a052068f7..e33f8190eb 100644
--- a/indra/newview/skins/default/xui/it/panel_places.xml
+++ b/indra/newview/skins/default/xui/it/panel_places.xml
@@ -4,13 +4,45 @@
 	<string name="teleport_history_tab_title" value="CRONOLOGIA TELEPORT"/>
 	<filter_editor label="Filtra i miei luoghi" name="Filter"/>
 	<panel name="button_panel">
-		<button label="Teleport" name="teleport_btn" tool_tip="Teleport alla zona selezionata"/>
-		<button label="Mappa" name="map_btn" tool_tip="Mostra la zona corrispondente nella mappa del Mondo"/>
-		<button label="Modifica" name="edit_btn" tool_tip="Modifica le informazioni del punto di riferimento"/>
-		<button label="▼" name="overflow_btn" tool_tip="Mostra opzioni addizionali"/>
-		<button label="Salva" name="save_btn"/>
-		<button label="Annulla" name="cancel_btn"/>
-		<button label="Chiudi" name="close_btn"/>
-		<button label="Profilo" name="profile_btn" tool_tip="Mostra il profilo del luogo"/>
+		<layout_stack name="bottom_bar_ls0">
+			<layout_panel name="lp1">
+				<layout_stack name="bottom_bar_ls1">
+					<layout_panel name="teleport_btn_lp">
+						<button label="Teleport" name="teleport_btn" tool_tip="Teleport alla zona selezionata"/>
+					</layout_panel>
+					<layout_panel name="chat_btn_lp">
+						<button label="Mappa" name="map_btn" tool_tip="Mostra la zona corrispondente nella mappa del Mondo"/>
+					</layout_panel>
+				</layout_stack>
+			</layout_panel>
+			<layout_panel name="lp2">
+				<layout_stack name="bottom_bar_ls3">
+					<layout_panel name="edit_btn_lp">
+						<button label="Modifica" name="edit_btn" tool_tip="Modifica le informazioni del punto di riferimento"/>
+					</layout_panel>
+					<layout_panel name="overflow_btn_lp">
+						<button label="▼" name="overflow_btn" tool_tip="Mostra ulteriori opzioni"/>
+					</layout_panel>
+				</layout_stack>
+				<layout_stack name="bottom_bar_ls3">
+					<layout_panel name="profile_btn_lp">
+						<button label="Profilo" name="profile_btn" tool_tip="Mostra il profilo del luogo"/>
+					</layout_panel>
+				</layout_stack>
+				<layout_stack name="bottom_bar_close_ls3">
+					<layout_panel name="close_btn_lp">
+						<button label="Chiudi" name="close_btn"/>
+					</layout_panel>
+				</layout_stack>
+			</layout_panel>
+		</layout_stack>
+		<layout_stack name="bottom_bar_ls2">
+			<layout_panel name="save_btn_lp">
+				<button label="Salva" name="save_btn"/>
+			</layout_panel>
+			<layout_panel name="cancel_btn_lp">
+				<button label="Annulla" name="cancel_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/it/panel_preferences_chat.xml b/indra/newview/skins/default/xui/it/panel_preferences_chat.xml
index d28ed41698..4a1bbdf64a 100644
--- a/indra/newview/skins/default/xui/it/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/it/panel_preferences_chat.xml
@@ -56,27 +56,27 @@
 		<radio_item label="Finestre separate" name="radio" value="0"/>
 		<radio_item label="Schede" name="radio2" value="1"/>
 	</radio_group>
-	<check_box label="Traduci Chat" name="translate_chat_checkbox" />
+	<check_box label="Usa la traduzione meccanica durante le chat (tecnologia Google)" name="translate_chat_checkbox"/>
 	<text name="translate_language_text" width="110">
-		Chat Lingua:
+		Traduci chat in:
 	</text>
 	<combo_box name="translate_language_combobox" width="146">
-		<combo_box.item name="System Default Language" label="Default di sistema" />
-		<combo_box.item name="English" label="English" />
-		<combo_box.item name="Danish" label="Dansk (Danese)" />
-		<combo_box.item name="German" label="Deutsch (Tedesco)" />
-		<combo_box.item name="Spanish" label="Español (Spagnolo)" />
-		<combo_box.item name="French" label="Français (Francese)" />
-		<combo_box.item name="Italian" label="Italiano" />
-		<combo_box.item name="Hungarian" label="Magyar (Ungherese)" />
-		<combo_box.item name="Dutch" label="Nederlands (Olandese)" />
-		<combo_box.item name="Polish" label="Polski (Polacco)" />
-		<combo_box.item name="Portugese" label="Português (Portoghese)" />
-		<combo_box.item name="Russian" label="Русский (Russo)" />
-		<combo_box.item name="Turkish" label="Türkçe (Turco)" />
-		<combo_box.item name="Ukrainian" label="Українська (Ukraino)" />
-		<combo_box.item name="Chinese" label="中文 (简体) (Cinese)" />
-		<combo_box.item name="Japanese" label="日本語 (Giapponese)" />
-		<combo_box.item name="Korean" label="한국어 (Coreano)" />
+		<combo_box.item label="Default di sistema" name="System Default Language"/>
+		<combo_box.item label="English (Inglese)" name="English"/>
+		<combo_box.item label="Dansk (Danese)" name="Danish"/>
+		<combo_box.item label="Deutsch (Tedesco)" name="German"/>
+		<combo_box.item label="Español (Spagnolo)" name="Spanish"/>
+		<combo_box.item label="Français (Francese)" name="French"/>
+		<combo_box.item label="Italiano" name="Italian"/>
+		<combo_box.item label="Magyar (Ungherese)" name="Hungarian"/>
+		<combo_box.item label="Nederlands (Olandese)" name="Dutch"/>
+		<combo_box.item label="Polski (Polacco)" name="Polish"/>
+		<combo_box.item label="Português (Portoghese)" name="Portugese"/>
+		<combo_box.item label="Русский (Russo)" name="Russian"/>
+		<combo_box.item label="Türkçe (Turco)" name="Turkish"/>
+		<combo_box.item label="Українська (Ucraino)" name="Ukrainian"/>
+		<combo_box.item label="中文 (简体) (Cinese)" name="Chinese"/>
+		<combo_box.item label="日本語 (Giapponese)" name="Japanese"/>
+		<combo_box.item label="한국어 (Coreano)" name="Korean"/>
 	</combo_box>
 </panel>
diff --git a/indra/newview/skins/default/xui/it/panel_preferences_general.xml b/indra/newview/skins/default/xui/it/panel_preferences_general.xml
index 60c4ed5211..95c73f482d 100644
--- a/indra/newview/skins/default/xui/it/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/it/panel_preferences_general.xml
@@ -32,8 +32,8 @@
 		Luogo di partenza:
 	</text>
 	<combo_box name="start_location_combo">
-		<combo_box.item label="Ultimo luogo visitato" name="MyLastLocation" tool_tip="Vai automaticamente all&apos;ultimo luogo visitato quando effettui l'accesso."/>
-		<combo_box.item label="Casa mia" name="MyHome" tool_tip="Vai automaticamente a casa quando effettui l'accesso"/>
+		<combo_box.item label="Ultimo luogo visitato" name="MyLastLocation" tool_tip="Vai automaticamente all&apos;ultimo luogo visitato quando effettui l&apos;accesso."/>
+		<combo_box.item label="Casa mia" name="MyHome" tool_tip="Vai automaticamente a casa quando effettui l&apos;accesso"/>
 	</combo_box>
 	<check_box initial_value="true" label="Mostra con il login" name="show_location_checkbox"/>
 	<text name="name_tags_textbox">
diff --git a/indra/newview/skins/default/xui/it/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/it/panel_preferences_graphics1.xml
index 71980695b6..67b3c61a47 100644
--- a/indra/newview/skins/default/xui/it/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/it/panel_preferences_graphics1.xml
@@ -28,22 +28,16 @@
 		<check_box initial_value="true" label="Piccoli rilievi e scintillii" name="BumpShiny"/>
 		<check_box initial_value="true" label="Effetti grafici base" name="BasicShaders" tool_tip="Disabilitare questa opzione può evitare che qualche scheda grafica vada in crash."/>
 		<check_box initial_value="true" label="Effetti grafici atmosferici" name="WindLightUseAtmosShaders"/>
-		<check_box initial_value="true" label="Riflessi dell&apos;acqua" name="Reflections"/>
-		<text name="ReflectionDetailText">
-			Dettaglio dei riflessi
+		<text name="reflection_label">
+			Riflessi nell’acqua:
 		</text>
-		<radio_group name="ReflectionDetailRadio">
-			<radio_item label="Terreno e alberi" name="0"/>
-			<radio_item label="Tutti gli aggetti statici" name="1"/>
-			<radio_item label="Tutti gli avatar e gli oggetti" name="2"/>
-			<radio_item label="Tutto" name="3"/>
-		</radio_group>
-		<text name="AvatarRenderingText">
-			Rendering dell&apos;avatar:
-		</text>
-		<check_box initial_value="true" label="Avatar bidimensionali (Impostor)" name="AvatarImpostors"/>
-		<check_box initial_value="true" label="Hardware Skinning" name="AvatarVertexProgram"/>
-		<check_box initial_value="true" label="Abiti dell&apos;avatar" name="AvatarCloth"/>
+		<combo_box initial_value="true" label="Riflessi dell&apos;acqua" name="Reflections">
+			<combo_box.item label="Minimo" name="0"/>
+			<combo_box.item label="Terreno e alberi" name="1"/>
+			<combo_box.item label="Tutti gli oggetti statici" name="2"/>
+			<combo_box.item label="Tutti gli avatar e gli oggetti" name="3"/>
+			<combo_box.item label="Tutto" name="4"/>
+		</combo_box>
 		<slider label="Distanza di disegno:" name="DrawDistance"/>
 		<text name="DrawDistanceMeterText2">
 			m
@@ -81,13 +75,12 @@
 		<text name="SkyMeshDetailText">
 			Basso
 		</text>
-		<text name="LightingDetailText">
-			Dettagli illuminazione:
+		<text name="AvatarRenderingText">
+			Rendering dell&apos;avatar:
 		</text>
-		<radio_group name="LightingDetailRadio">
-			<radio_item label="Solo il sole e la luna" name="SunMoon" value="0"/>
-			<radio_item label="Luci locali" name="LocalLights" value="1"/>
-		</radio_group>
+		<check_box initial_value="true" label="Avatar bidimensionali (Impostor)" name="AvatarImpostors"/>
+		<check_box initial_value="true" label="Hardware Skinning" name="AvatarVertexProgram"/>
+		<check_box initial_value="true" label="Abiti dell&apos;avatar" name="AvatarCloth"/>
 		<text name="TerrainDetailText">
 			Dettagli terreno:
 		</text>
@@ -95,6 +88,7 @@
 			<radio_item label="Basso" name="0"/>
 			<radio_item label="Alto" name="2"/>
 		</radio_group>
+		--&gt;
 	</panel>
 	<button label="Applica" label_selected="Applica" name="Apply"/>
 	<button label="Reimposta" name="Defaults"/>
diff --git a/indra/newview/skins/default/xui/it/panel_profile.xml b/indra/newview/skins/default/xui/it/panel_profile.xml
index 9927ecbb88..8a8d8f5846 100644
--- a/indra/newview/skins/default/xui/it/panel_profile.xml
+++ b/indra/newview/skins/default/xui/it/panel_profile.xml
@@ -36,17 +36,29 @@
 				</panel>
 			</scroll_container>
 		</layout_panel>
+	</layout_stack>
+	<layout_stack name="layout_verb_buttons">
 		<layout_panel name="profile_buttons_panel">
-			<button label="Aggiungi amico" name="add_friend" tool_tip="Offri amicizia a questo residente"/>
-			<button label="IM" name="im" tool_tip="Apri una sessione messaggio istantaneo"/>
-			<button label="Chiama" name="call" tool_tip="Chiama questo residente"/>
-			<button label="Mappa" name="show_on_map_btn" tool_tip="Mostra il residente sulla mappa"/>
-			<button label="Teleport" name="teleport" tool_tip="Offri teleport"/>
-			<button label="▼" name="overflow_btn" tool_tip="Paga del denaro o condividi qualcosa dall&apos;inventario con il residente"/>
+			<layout_stack name="bottom_bar_ls">
+				<layout_panel name="add_friend_btn_lp">
+					<button label="Aggiungi come amico" name="add_friend" tool_tip="Offri amicizia a questo residente"/>
+				</layout_panel>
+				<layout_panel name="im_btn_lp">
+					<button label="IM" name="im" tool_tip="Apri una sessione messaggio istantaneo"/>
+				</layout_panel>
+				<layout_panel name="call_btn_lp">
+					<button label="Chiama" name="call" tool_tip="Chiama questo residente"/>
+				</layout_panel>
+				<layout_panel name="chat_btn_lp">
+					<button label="Teleport" name="teleport" tool_tip="Offri teleport"/>
+				</layout_panel>
+				<layout_panel name="overflow_btn_lp">
+					<button label="▼" name="overflow_btn" tool_tip="Paga del denaro o condividi qualcosa dall&apos;inventario con il residente"/>
+				</layout_panel>
+			</layout_stack>
 		</layout_panel>
 		<layout_panel name="profile_me_buttons_panel">
 			<button label="Modifica profilo" name="edit_profile_btn" tool_tip="Modifica le tue informazioni personali"/>
-			<button label="Modifica aspetto fisico" name="edit_appearance_btn" tool_tip="Crea/modifica il tuo aspetto: parti del corpo, abiti ecc."/>
 		</layout_panel>
 	</layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/it/panel_side_tray_tab_caption.xml b/indra/newview/skins/default/xui/it/panel_side_tray_tab_caption.xml
index 753e89f2fd..3c7874e093 100644
--- a/indra/newview/skins/default/xui/it/panel_side_tray_tab_caption.xml
+++ b/indra/newview/skins/default/xui/it/panel_side_tray_tab_caption.xml
@@ -1,5 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="sidetray_tab_panel">
 	<text name="sidetray_tab_title" value="Pannello laterale"/>
+	<button name="undock" tool_tip="Disàncora"/>
+	<button name="dock" tool_tip="Àncora"/>
 	<button name="show_help" tool_tip="Mostra Aiuto"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/it/sidepanel_inventory.xml b/indra/newview/skins/default/xui/it/sidepanel_inventory.xml
index 3944f8e306..1c1744d94b 100644
--- a/indra/newview/skins/default/xui/it/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/it/sidepanel_inventory.xml
@@ -2,12 +2,20 @@
 <panel label="Cose" name="objects panel">
 	<panel label="" name="sidepanel__inventory_panel">
 		<panel name="button_panel">
-			<button label="Profilo" name="info_btn" tool_tip="Mostra profilo dell&apos;oggetto"/>
-			<button label="Condividi" name="share_btn" tool_tip="Condividi un oggetto dell&apos;inventario"/>
-			<button label="Acquisti" name="shop_btn" tool_tip="Apri pagina web di Marketplace"/>
-			<button label="Indossa" name="wear_btn" tool_tip="Indossa il vestiario selezionato"/>
-			<button label="Riproduci" name="play_btn"/>
-			<button label="Teleport" name="teleport_btn" tool_tip="Teleport alla zona selezionata"/>
+			<layout_stack name="button_panel_ls">
+				<layout_panel name="info_btn_lp">
+					<button label="Profilo" name="info_btn" tool_tip="Mostra profilo dell&apos;oggetto"/>
+				</layout_panel>
+				<layout_panel name="share_btn_lp">
+					<button label="Condividi" name="share_btn" tool_tip="Condividi un oggetto dell&apos;inventario"/>
+				</layout_panel>
+				<layout_panel name="shop_btn_lp">
+					<button label="Acquisti" name="shop_btn" tool_tip="Apri pagina web di Marketplace"/>
+					<button label="Indossa" name="wear_btn" tool_tip="Indossa il vestiario selezionato"/>
+					<button label="Riproduci" name="play_btn"/>
+					<button label="Teleport" name="teleport_btn" tool_tip="Teleport alla zona selezionata"/>
+				</layout_panel>
+			</layout_stack>
 		</panel>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/it/sidepanel_item_info.xml b/indra/newview/skins/default/xui/it/sidepanel_item_info.xml
index 6f650ea55d..900a65956b 100644
--- a/indra/newview/skins/default/xui/it/sidepanel_item_info.xml
+++ b/indra/newview/skins/default/xui/it/sidepanel_item_info.xml
@@ -23,54 +23,53 @@
 	</panel.string>
 	<text name="title" value="Profilo articolo"/>
 	<text name="origin" value="(Inventario)"/>
-	<panel label="" name="item_profile">
-		<text name="LabelItemNameTitle">
-			Nome:
-		</text>
-		<text name="LabelItemDescTitle">
-			Descrizione:
-		</text>
-		<text name="LabelCreatorTitle">
-			Ideatore:
-		</text>
-		<button label="Profilo..." name="BtnCreator"/>
-		<text name="LabelOwnerTitle">
-			Proprietario:
-		</text>
-		<button label="Profilo..." name="BtnOwner"/>
-		<text name="LabelAcquiredTitle">
-			Acquisito:
-		</text>
-		<text name="LabelAcquiredDate"/>
-		<panel name="perms_inv">
-			<text name="perm_modify">
-				Tu puoi:
+	<scroll_container name="item_profile_scroll">
+		<panel label="" name="item_profile">
+			<text name="LabelItemNameTitle">
+				Nome:
 			</text>
-			<check_box label="Modifica" name="CheckOwnerModify"/>
-			<check_box label="Copia" name="CheckOwnerCopy"/>
-			<check_box label="Trasferisci" name="CheckOwnerTransfer"/>
-			<text name="AnyoneLabel">
-				Chiunque:
+			<text name="LabelItemDescTitle">
+				Descrizione:
 			</text>
-			<check_box label="Copia" name="CheckEveryoneCopy"/>
-			<text name="GroupLabel">
-				Gruppo:
+			<text name="LabelCreatorTitle">
+				Ideatore:
 			</text>
-			<check_box label="Condividi" name="CheckShareWithGroup" tool_tip="Consenti a tutti i membri del gruppo selezionato di condividere i tuoi diritti di modifica di questo oggetto. Per attivare le restrizioni per ruolo devi prima effettuare la cessione."/>
-			<text name="NextOwnerLabel">
-				Proprietario successivo:
+			<text name="LabelOwnerTitle">
+				Proprietario:
 			</text>
-			<check_box label="Modifica" name="CheckNextOwnerModify"/>
-			<check_box label="Copia" name="CheckNextOwnerCopy"/>
-			<check_box label="Trasferisci" name="CheckNextOwnerTransfer" tool_tip="Il prossimo proprietario può regalare o rivendere questo oggetto"/>
+			<text name="LabelAcquiredTitle">
+				Acquisito:
+			</text>
+			<panel name="perms_inv">
+				<text name="perm_modify">
+					Tu puoi:
+				</text>
+				<check_box label="Modifica" name="CheckOwnerModify"/>
+				<check_box label="Copia" name="CheckOwnerCopy"/>
+				<check_box label="Trasferisci" name="CheckOwnerTransfer"/>
+				<text name="AnyoneLabel">
+					Chiunque:
+				</text>
+				<check_box label="Copia" name="CheckEveryoneCopy"/>
+				<text name="GroupLabel">
+					Gruppo:
+				</text>
+				<check_box label="Condividi" name="CheckShareWithGroup" tool_tip="Consenti a tutti i membri del gruppo selezionato di condividere i tuoi diritti di modifica di questo oggetto. Per attivare le restrizioni per ruolo devi prima effettuare la cessione."/>
+				<text name="NextOwnerLabel">
+					Proprietario successivo:
+				</text>
+				<check_box label="Modifica" name="CheckNextOwnerModify"/>
+				<check_box label="Copia" name="CheckNextOwnerCopy"/>
+				<check_box label="Trasferisci" name="CheckNextOwnerTransfer" tool_tip="Il prossimo proprietario può regalare o rivendere questo oggetto"/>
+			</panel>
+			<check_box label="In vendita" name="CheckPurchase"/>
+			<combo_box name="combobox sale copy">
+				<combo_box.item label="Copia" name="Copy"/>
+				<combo_box.item label="Originale" name="Original"/>
+			</combo_box>
+			<spinner label="Prezzo: L$" name="Edit Cost"/>
 		</panel>
-		<check_box label="In vendita" name="CheckPurchase"/>
-		<combo_box name="combobox sale copy">
-			<combo_box.item label="Copia" name="Copy"/>
-			<combo_box.item label="Originale" name="Original"/>
-		</combo_box>
-		<spinner label="Prezzo: L$" name="Edit Cost"/>
-	</panel>
+	</scroll_container>
 	<panel name="button_panel">
 		<button label="Annulla" name="cancel_btn"/>
 	</panel>
diff --git a/indra/newview/skins/default/xui/it/strings.xml b/indra/newview/skins/default/xui/it/strings.xml
index fa465ee9c2..4fc0d19199 100644
--- a/indra/newview/skins/default/xui/it/strings.xml
+++ b/indra/newview/skins/default/xui/it/strings.xml
@@ -1273,6 +1273,9 @@
 	<string name="Right Pec">
 		Petto destro
 	</string>
+	<string name="Invalid Attachment">
+		Punto di collegamento non valido
+	</string>
 	<string name="YearsMonthsOld">
 		Nato da [AGEYEARS] [AGEMONTHS]
 	</string>
@@ -1650,9 +1653,6 @@
 	<string name="ATTACH_HUD_BOTTOM_RIGHT">
 		HUD basso a destra
 	</string>
-	<string name="Bad attachment point">
-		Punto di collegamento non valido
-	</string>
 	<string name="CursorPos">
 		Riga [LINE], Colonna [COLUMN]
 	</string>
@@ -1668,12 +1668,6 @@
 	<string name="BusyModeResponseDefault">
 		Il residente al quale hai inviato un messaggio è in modalità &apos;occupato&apos;, ovvero ha chiesto di non essere disturbato.  Il tuo messaggio comparirà nel suo pannello IM, dove potrà essere letto in un secondo momento.
 	</string>
-	<string name="NoOutfits">
-		Non hai ancora vestiario da indossare. Prova [secondlife:///app/search/all Cerca].
-	</string>
-	<string name="NoOutfitsTabsMatched">
-		Non riesci a trovare quello che cerchi? Prova [secondlife:///app/search/all/[SEARCH_TERM] Cerca].
-	</string>
 	<string name="MuteByName">
 		(In base al nome)
 	</string>
@@ -1828,6 +1822,12 @@ Tipi conosciuti .wav, .tga, .bmp, .jpg, .jpeg, or .bvh
 	<string name="accel-win-shift">
 		Shift+
 	</string>
+	<string name="Esc">
+		Esc
+	</string>
+	<string name="Home">
+		Home
+	</string>
 	<string name="FileSaved">
 		File salvato
 	</string>
@@ -3444,6 +3444,9 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
 	<string name="IM_moderator_label">
 		(Moderatore)
 	</string>
+	<string name="Saved_message">
+		(Salvato [LONG_TIMESTAMP])
+	</string>
 	<string name="answered_call">
 		Risposto alla chiamata
 	</string>
@@ -3465,6 +3468,12 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
 	<string name="hang_up-im">
 		Chiusa la chiamata
 	</string>
+	<string name="conference-title-incoming">
+		Chiamata in conferenza con [AGENT_NAME]
+	</string>
+	<string name="no_session_message">
+		(La sessione IM non esiste)
+	</string>
 	<string name="only_user_message">
 		Sei l&apos;unico utente di questa sessione.
 	</string>
@@ -3849,4 +3858,13 @@ Segnala abuso
 	<string name="Chat">
 		Chat
 	</string>
+	<string name="DeleteItems">
+		Cancellare gli elementi selezionati?
+	</string>
+	<string name="DeleteItem">
+		Cancellare l’elemento selezionato?
+	</string>
+	<string name="EmptyOutfitText">
+		Questo vestiario non contiene alcun elemento
+	</string>
 </strings>
diff --git a/indra/newview/skins/default/xui/ja/floater_map.xml b/indra/newview/skins/default/xui/ja/floater_map.xml
index 0676e86703..82b49df221 100644
--- a/indra/newview/skins/default/xui/ja/floater_map.xml
+++ b/indra/newview/skins/default/xui/ja/floater_map.xml
@@ -25,7 +25,7 @@
 		北西
 	</floater.string>
 	<floater.string name="ToolTipMsg">
-		[AGENT][REGION] (ダブルクリックで地図を開きます)
+		[REGION](ダブルクリックで地図を開く。Shift‐ドラッグで水平・垂直移動)
 	</floater.string>
 	<floater.string name="mini_map_caption">
 		ミニマップ
diff --git a/indra/newview/skins/default/xui/ja/floater_nearby_chat.xml b/indra/newview/skins/default/xui/ja/floater_nearby_chat.xml
index a3cc105048..a29c6a0630 100644
--- a/indra/newview/skins/default/xui/ja/floater_nearby_chat.xml
+++ b/indra/newview/skins/default/xui/ja/floater_nearby_chat.xml
@@ -1,2 +1,4 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="nearby_chat" title="近くのチャット"/>
+<floater name="nearby_chat" title="近くのチャット">
+	<check_box label="チャットを翻訳(Google翻訳)" name="translate_chat_checkbox"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_tools.xml b/indra/newview/skins/default/xui/ja/floater_tools.xml
index d095dee974..bbd78fb818 100644
--- a/indra/newview/skins/default/xui/ja/floater_tools.xml
+++ b/indra/newview/skins/default/xui/ja/floater_tools.xml
@@ -182,10 +182,10 @@
 			<text name="Group:">
 				グループ:
 			</text>
-			<button label="設定..." label_selected="設定..." name="button set group" tool_tip="このオブジェクト権限を共有するグループを選択します"/>
 			<name_box initial_value="ローディング..." name="Group Name Proxy"/>
-			<button label="譲渡" label_selected="譲渡" name="button deed" tool_tip="このアイテムを譲渡すると「次の所有者」の権限が適用されます。 グループ共有オブジェクトは、グループのオフィサーが譲渡できます"/>
+			<button label="設定..." label_selected="設定..." name="button set group" tool_tip="このオブジェクト権限を共有するグループを選択します"/>
 			<check_box label="共有" name="checkbox share with group" tool_tip="設定したグループのメンバー全員にこのオブジェクトの修正権限を与えます。 譲渡しない限り、役割制限を有効にはできません"/>
+			<button label="譲渡" label_selected="譲渡" name="button deed" tool_tip="このアイテムを譲渡すると「次の所有者」の権限が適用されます。 グループ共有オブジェクトは、グループのオフィサーが譲渡できます"/>
 			<text name="label click action">
 				クリックで:
 			</text>
@@ -437,7 +437,8 @@
 				<combo_box.item label="吸い込み" name="suction"/>
 				<combo_box.item label="織目" name="weave"/>
 			</combo_box>
-			<text name="tex scale">
+			<check_box initial_value="false" label="平面を揃える" name="checkbox planar align" tool_tip="選択面全てのテクスチャを、最後に選択された面に揃えます。 平面テクスチャのマッピングが必要です。"/>
+			<text name="rpt">
 				反復 / 面
 			</text>
 			<spinner label="水平(U)" name="TexScaleU"/>
diff --git a/indra/newview/skins/default/xui/ja/menu_attachment_self.xml b/indra/newview/skins/default/xui/ja/menu_attachment_self.xml
index 6b1319e584..5d95949189 100644
--- a/indra/newview/skins/default/xui/ja/menu_attachment_self.xml
+++ b/indra/newview/skins/default/xui/ja/menu_attachment_self.xml
@@ -3,6 +3,7 @@
 	<menu_item_call label="触る" name="Attachment Object Touch"/>
 	<menu_item_call label="編集" name="Edit..."/>
 	<menu_item_call label="取り外す" name="Detach"/>
+	<menu_item_call label="座る" name="Sit Down Here"/>
 	<menu_item_call label="立ち上がる" name="Stand Up"/>
 	<menu_item_call label="アウトフィットを変更" name="Change Outfit"/>
 	<menu_item_call label="アウトフィットの編集" name="Edit Outfit"/>
diff --git a/indra/newview/skins/default/xui/ja/menu_avatar_self.xml b/indra/newview/skins/default/xui/ja/menu_avatar_self.xml
index bca90cf5e4..fc9c8caf51 100644
--- a/indra/newview/skins/default/xui/ja/menu_avatar_self.xml
+++ b/indra/newview/skins/default/xui/ja/menu_avatar_self.xml
@@ -1,7 +1,8 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Self Pie">
+	<menu_item_call label="座る" name="Sit Down Here"/>
 	<menu_item_call label="立ち上がる" name="Stand Up"/>
-	<context_menu label="脱ぐ" name="Take Off &gt;">
+	<context_menu label="取り外す" name="Take Off &gt;">
 		<context_menu label="衣類" name="Clothes &gt;">
 			<menu_item_call label="シャツ" name="Shirt"/>
 			<menu_item_call label="パンツ" name="Pants"/>
diff --git a/indra/newview/skins/default/xui/ja/menu_inspect_object_gear.xml b/indra/newview/skins/default/xui/ja/menu_inspect_object_gear.xml
index 506614316e..2edade70bf 100644
--- a/indra/newview/skins/default/xui/ja/menu_inspect_object_gear.xml
+++ b/indra/newview/skins/default/xui/ja/menu_inspect_object_gear.xml
@@ -9,6 +9,7 @@
 	<menu_item_call label="開く" name="open"/>
 	<menu_item_call label="編集" name="edit"/>
 	<menu_item_call label="装着" name="wear"/>
+	<menu_item_call label="追加" name="add"/>
 	<menu_item_call label="報告" name="report"/>
 	<menu_item_call label="ブロック" name="block"/>
 	<menu_item_call label="ズームイン" name="zoom_in"/>
diff --git a/indra/newview/skins/default/xui/ja/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/ja/menu_inspect_self_gear.xml
index ee054673c5..90b3efd144 100644
--- a/indra/newview/skins/default/xui/ja/menu_inspect_self_gear.xml
+++ b/indra/newview/skins/default/xui/ja/menu_inspect_self_gear.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <menu name="Gear Menu">
+	<menu_item_call label="座る" name="sit_down_here"/>
 	<menu_item_call label="立ち上がる" name="stand_up"/>
 	<menu_item_call label="アウトフィットを変更" name="change_outfit"/>
 	<menu_item_call label="プロフィール" name="my_profile"/>
diff --git a/indra/newview/skins/default/xui/ja/menu_mini_map.xml b/indra/newview/skins/default/xui/ja/menu_mini_map.xml
index 0a89c5e63a..12ea6e2299 100644
--- a/indra/newview/skins/default/xui/ja/menu_mini_map.xml
+++ b/indra/newview/skins/default/xui/ja/menu_mini_map.xml
@@ -4,6 +4,7 @@
 	<menu_item_call label="ズーム(中)" name="Zoom Medium"/>
 	<menu_item_call label="ズーム(遠)" name="Zoom Far"/>
 	<menu_item_check label="地図を回転" name="Rotate Map"/>
+	<menu_item_check label="中央へ自動移動" name="Auto Center"/>
 	<menu_item_call label="追跡をやめる" name="Stop Tracking"/>
 	<menu_item_call label="世界地図" name="World Map"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_object.xml b/indra/newview/skins/default/xui/ja/menu_object.xml
index 6724f2d109..c11dc9bb3e 100644
--- a/indra/newview/skins/default/xui/ja/menu_object.xml
+++ b/indra/newview/skins/default/xui/ja/menu_object.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Object Pie">
 	<menu_item_call label="触る" name="Object Touch">
-		<on_enable parameter="触る" name="EnableTouch"/>
+		<menu_item_call.on_enable name="EnableTouch" parameter="触る"/>
 	</menu_item_call>
 	<menu_item_call label="編集" name="Edit..."/>
 	<menu_item_call label="制作" name="Build"/>
@@ -12,16 +12,16 @@
 	<menu_item_call label="ズームイン" name="Zoom In"/>
 	<context_menu label="装着" name="Put On">
 		<menu_item_call label="装着" name="Wear"/>
+		<menu_item_call label="追加" name="Add"/>
 		<context_menu label="取り付ける" name="Object Attach"/>
 		<context_menu label="HUD を取り付ける" name="Object Attach HUD"/>
 	</context_menu>
-	<context_menu label="取り除く" name="Remove">
+	<context_menu label="取り外す" name="Remove">
 		<menu_item_call label="嫌がらせの報告" name="Report Abuse..."/>
 		<menu_item_call label="ブロック" name="Object Mute"/>
 		<menu_item_call label="返却" name="Return..."/>
 		<menu_item_call label="削除" name="Delete"/>
 	</context_menu>
-	<menu_item_call label="買う" name="Pie Object Bye"/>
 	<menu_item_call label="取る" name="Pie Object Take"/>
 	<menu_item_call label="コピーを取る" name="Take Copy"/>
 	<menu_item_call label="支払う" name="Pay..."/>
diff --git a/indra/newview/skins/default/xui/ja/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/ja/menu_people_friends_view_sort.xml
index 5eaad31898..76340e4d76 100644
--- a/indra/newview/skins/default/xui/ja/menu_people_friends_view_sort.xml
+++ b/indra/newview/skins/default/xui/ja/menu_people_friends_view_sort.xml
@@ -3,5 +3,6 @@
 	<menu_item_check label="名前で並べ替え" name="sort_name"/>
 	<menu_item_check label="オンライン状態で並べ替え" name="sort_status"/>
 	<menu_item_check label="人のアイコン表示" name="view_icons"/>
+	<menu_item_check label="与えられた権限を表示" name="view_permissions"/>
 	<menu_item_call label="ブロックされた住人とオブジェクトを表示" name="show_blocked_list"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_people_nearby_multiselect.xml b/indra/newview/skins/default/xui/ja/menu_people_nearby_multiselect.xml
index 238bfc4af9..3f20e5d3ab 100644
--- a/indra/newview/skins/default/xui/ja/menu_people_nearby_multiselect.xml
+++ b/indra/newview/skins/default/xui/ja/menu_people_nearby_multiselect.xml
@@ -6,4 +6,5 @@
 	<menu_item_call label="コール" name="Call"/>
 	<menu_item_call label="共有" name="Share"/>
 	<menu_item_call label="支払う" name="Pay"/>
+	<menu_item_call label="テレポートを送る" name="teleport"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_viewer.xml b/indra/newview/skins/default/xui/ja/menu_viewer.xml
index f6476857d2..85aaf17256 100644
--- a/indra/newview/skins/default/xui/ja/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/ja/menu_viewer.xml
@@ -94,7 +94,6 @@
 			<menu_item_call label="スクリプトを実行停止にする" name="Set Scripts to Not Running"/>
 		</menu>
 		<menu label="オプション" name="Options">
-			<menu_item_call label="デフォルトのアップロード権限を設定" name="perm prefs"/>
 			<menu_item_check label="権限の詳細を表示する" name="DebugPermissions"/>
 			<menu_item_check label="私のオブジェクトだけを選択する" name="Select Only My Objects"/>
 			<menu_item_check label="動的オブジェクトだけを選択する" name="Select Only Movable Objects"/>
@@ -121,7 +120,6 @@
 		<menu_item_call label="[APP_NAME] について" name="About Second Life"/>
 	</menu>
 	<menu label="アドバンス" name="Advanced">
-		<menu_item_check label="アドバンスメニューを表示する" name="Show Advanced Menu"/>
 		<menu_item_call label="自分のアニメーションを停止する" name="Stop Animating My Avatar"/>
 		<menu_item_call label="テクスチャのリベークをする" name="Rebake Texture"/>
 		<menu_item_call label="UI のサイズをデフォルトに設定する" name="Set UI Size to Default"/>
@@ -169,7 +167,6 @@
 			<menu_item_check label="FRInfo のテスト" name="Test FRInfo"/>
 			<menu_item_check label="フレキシブルオブジェクト" name="Flexible Objects"/>
 		</menu>
-		<menu_item_check label="マルチスレッド処理" name="Run Multiple Threads"/>
 		<menu_item_check label="Use Plugin Read Thread" name="Use Plugin Read Thread"/>
 		<menu_item_call label="グループキャッシュのクリア" name="ClearGroupCache"/>
 		<menu_item_check label="マウスの平滑化" name="Mouse Smoothing"/>
@@ -178,7 +175,6 @@
 			<menu_item_check label="検索" name="Search"/>
 			<menu_item_call label="キーをリリース" name="Release Keys"/>
 			<menu_item_call label="UI のサイズをデフォルトに設定する" name="Set UI Size to Default"/>
-			<menu_item_check label="アドバンスメニューを表示 - レガシーのショートカット" name="Show Advanced Menu - legacy shortcut"/>
 			<menu_item_check label="常に走る" name="Always Run"/>
 			<menu_item_check label="飛行する" name="Fly"/>
 			<menu_item_call label="ウィンドウを閉じる" name="Close Window"/>
@@ -198,6 +194,7 @@
 			<menu_item_call label="ズームイン" name="Zoom In"/>
 			<menu_item_call label="ズーム(デフォルト)" name="Zoom Default"/>
 			<menu_item_call label="ズームアウト" name="Zoom Out"/>
+			<menu_item_check label="アドバンスメニューを表示する" name="Show Advanced Menu"/>
 		</menu>
 		<menu_item_call label="デバッグ設定を表示する" name="Debug Settings"/>
 		<menu_item_check label="開発メニューを表示する" name="Debug Mode"/>
@@ -263,16 +260,19 @@
 			<menu_item_check label="ワイヤーフレーム" name="Wireframe"/>
 			<menu_item_check label="オブジェクト間オクルージョン" name="Object-Object Occlusion"/>
 			<menu_item_check label="フレームバッファオブジェクト" name="Framebuffer Objects"/>
-			<menu_item_check label="遅延レンダリング" name="Deferred Rendering"/>
-			<menu_item_check label="グローバルイルミネーション" name="Global Illumination"/>
+			<menu_item_check label="光と影" name="Lighting and Shadows"/>
+			<menu_item_check label="太陽・月・プロジェクタからの影" name="Shadows from Sun/Moon/Projectors"/>
+			<menu_item_check label="SSAO と影の平滑化" name="SSAO and Shadow Smoothing"/>
+			<menu_item_check label="グローバルイルミネーション(試験段階)" name="Global Illumination"/>
 			<menu_item_check label="GL デバッグ" name="Debug GL"/>
 			<menu_item_check label="経路をデバッグ" name="Debug Pipeline"/>
-			<menu_item_check label="ファーストアルファ" name="Fast Alpha"/>
+			<menu_item_check label="自動アルファマスク(遅延)" name="Automatic Alpha Masks (deferred)"/>
+			<menu_item_check label="自動アルファマスク(遅延なし)" name="Automatic Alpha Masks (non-deferred)"/>
 			<menu_item_check label="アニメーションテクスチャ" name="Animation Textures"/>
 			<menu_item_check label="テクスチャを無効にする" name="Disable Textures"/>
 			<menu_item_check label="フル解像度テクスチャ" name="Rull Res Textures"/>
 			<menu_item_check label="テクスチャの検査" name="Audit Textures"/>
-			<menu_item_check label="テクスチャアトラス" name="Texture Atlas"/>
+			<menu_item_check label="テクスチャアトラス(試験段階)" name="Texture Atlas"/>
 			<menu_item_check label="装着された光源を描画する" name="Render Attached Lights"/>
 			<menu_item_check label="取り付けられたパーティクルを描画する" name="Render Attached Particles"/>
 			<menu_item_check label="マウスオーバーで強調表示する" name="Hover Glow Objects"/>
@@ -309,7 +309,8 @@
 			<menu_item_call label="選択したオブジェクト情報をプリント" name="Print Selected Object Info"/>
 			<menu_item_call label="エージェント情報をプリント" name="Print Agent Info"/>
 			<menu_item_call label="メモリ使用状況" name="Memory Stats"/>
-			<menu_item_check label="ダブルクリックした場所に自動操作で移動する" name="Double-ClickAuto-Pilot"/>
+			<menu_item_check label="ダブルクリックで自動追跡を行う" name="Double-Click Auto-Pilot"/>
+			<menu_item_check label="ダブルクリックでテレポート" name="DoubleClick Teleport"/>
 			<menu_item_check label="SelectMgr のデバッグ" name="Debug SelectMgr"/>
 			<menu_item_check label="ダブルクリック" name="Debug Clicks"/>
 			<menu_item_check label="デバッグ表示" name="Debug Views"/>
diff --git a/indra/newview/skins/default/xui/ja/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/ja/menu_wearable_list_item.xml
index 273fbd856c..c402fa0b6d 100644
--- a/indra/newview/skins/default/xui/ja/menu_wearable_list_item.xml
+++ b/indra/newview/skins/default/xui/ja/menu_wearable_list_item.xml
@@ -5,10 +5,10 @@
 	<menu_item_call label="追加" name="wear_add"/>
 	<menu_item_call label="取り外す" name="take_off_or_detach"/>
 	<menu_item_call label="取り外す" name="detach"/>
-	<context_menu label="装着" name="wearable_attach_to"/>
-	<context_menu label="HUDに装着" name="wearable_attach_to_hud"/>
+	<context_menu label="装着:" name="wearable_attach_to"/>
+	<context_menu label="HUD に装着" name="wearable_attach_to_hud"/>
 	<menu_item_call label="取り外す" name="take_off"/>
 	<menu_item_call label="編集" name="edit"/>
-	<menu_item_call label="オブジェクトのプロフィール" name="object_profile"/>
+	<menu_item_call label="アイテムのプロフィール" name="object_profile"/>
 	<menu_item_call label="オリジナルを表示" name="show_original"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_wearing_gear.xml b/indra/newview/skins/default/xui/ja/menu_wearing_gear.xml
index f79b59ee05..7a97538117 100644
--- a/indra/newview/skins/default/xui/ja/menu_wearing_gear.xml
+++ b/indra/newview/skins/default/xui/ja/menu_wearing_gear.xml
@@ -1,4 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <menu name="Gear Wearing">
 	<menu_item_call label="アウトフットの編集" name="edit"/>
+	<menu_item_call label="取り外す" name="takeoff"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_wearing_tab.xml b/indra/newview/skins/default/xui/ja/menu_wearing_tab.xml
index 1336df94b0..9effed1f42 100644
--- a/indra/newview/skins/default/xui/ja/menu_wearing_tab.xml
+++ b/indra/newview/skins/default/xui/ja/menu_wearing_tab.xml
@@ -1,4 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Wearing">
+	<menu_item_call label="取り外す" name="take_off"/>
+	<menu_item_call label="取り外す" name="detach"/>
 	<menu_item_call label="アウトフットの編集" name="edit"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/ja/notifications.xml b/indra/newview/skins/default/xui/ja/notifications.xml
index 709797cb58..e0b72e31de 100644
--- a/indra/newview/skins/default/xui/ja/notifications.xml
+++ b/indra/newview/skins/default/xui/ja/notifications.xml
@@ -1861,6 +1861,10 @@ Adult 専用リージョンに入るには、住人のアカウントが年齢
 		終了しようとしています。続けますか?
 		<usetemplate ignoretext="終了時の確認" name="okcancelignore" notext="終了しない" yestext="終了"/>
 	</notification>
+	<notification name="DeleteItems">
+		[QUESTION]
+		<usetemplate ignoretext="アイテムを削除する前の確認" name="okcancelignore" notext="取り消し" yestext="OK"/>
+	</notification>
 	<notification name="HelpReportAbuseEmailLL">
 		このツールを利用して [http://secondlife.com/corporate/tos.php 利用規約] や [http://jp.secondlife.com/corporate/cs.php コミュニティスタンダード] の違反を報告してください。
 
@@ -2799,9 +2803,13 @@ M キーを押して変更します。
 		( [EXISTENCE] 秒)
 アバター「 NAME 」が完全に読み込まれました。
 	</notification>
-	<notification name="AvatarRezSelfBakeNotification">
+	<notification name="AvatarRezSelfBakedTextureUploadNotification">
+		( 作成後[EXISTENCE]秒経過)
+&apos;[BODYREGION]&apos;の[RESOLUTION]のベークドテクスチャは[TIME]秒後にアップロードされました。
+	</notification>
+	<notification name="AvatarRezSelfBakedTextureUpdateNotification">
 		( 作成後[EXISTENCE]秒経過)
-&apos;[BODYREGION]&apos; の[RESOLUTION]のベークドテクスチャは[TIME]秒後に[ACTION]されました。
+&apos;[BODYREGION]&apos;の[RESOLUTION]のベークドテクスチャは[TIME]秒後にローカルに更新されました。
 	</notification>
 	<notification name="ConfirmLeaveCall">
 		このコールから抜けますか?
diff --git a/indra/newview/skins/default/xui/ja/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/ja/panel_avatar_list_item.xml
index 03eaf33d92..25864ec629 100644
--- a/indra/newview/skins/default/xui/ja/panel_avatar_list_item.xml
+++ b/indra/newview/skins/default/xui/ja/panel_avatar_list_item.xml
@@ -23,5 +23,9 @@
 	</string>
 	<text name="avatar_name" value="不明"/>
 	<text name="last_interaction" value="0 秒"/>
+	<icon name="permission_edit_theirs_icon" tool_tip="このフレンドのオブジェクトを編集することができます"/>
+	<icon name="permission_edit_mine_icon" tool_tip="このフレンドは、あなたのオブジェクトを編集・削除・取得することができます"/>
+	<icon name="permission_map_icon" tool_tip="このフレンドは地図上であなたの位置を表示できます"/>
+	<icon name="permission_online_icon" tool_tip="このフレンドはあなたがオンラインにいることを確認できます"/>
 	<button name="profile_btn" tool_tip="プロフィールの表示"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_bottomtray.xml b/indra/newview/skins/default/xui/ja/panel_bottomtray.xml
index 04b4893026..3529abbf36 100644
--- a/indra/newview/skins/default/xui/ja/panel_bottomtray.xml
+++ b/indra/newview/skins/default/xui/ja/panel_bottomtray.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="bottom_tray">
+	<string name="DragIndicationImageName" value="Accordion_ArrowOpened_Off"/>
 	<string name="SpeakBtnToolTip" value="マイクのオン・オフ"/>
 	<string name="VoiceControlBtnToolTip" value="ボイスコントロールパネルの表示・非表示"/>
 	<layout_stack name="toolbar_stack">
@@ -12,28 +13,25 @@
 			<gesture_combo_list label="ジェスチャー" name="Gesture" tool_tip="ジェスチャーの表示・非表示"/>
 		</layout_panel>
 		<layout_panel name="movement_panel">
-			<button label="移動" name="movement_btn" tool_tip="移動コントロールの表示・非表示"/>
+			<bottomtray_button label="移動" name="movement_btn" tool_tip="移動コントロールの表示・非表示"/>
 		</layout_panel>
 		<layout_panel name="cam_panel">
-			<button label="視界" name="camera_btn" tool_tip="カメラコントロールの表示・非表示"/>
+			<bottomtray_button label="視界" name="camera_btn" tool_tip="カメラコントロールの表示・非表示"/>
 		</layout_panel>
 		<layout_panel name="snapshot_panel">
-			<button label="" name="snapshots" tool_tip="スナップショットを撮ります"/>
-		</layout_panel>
-		<layout_panel name="sidebar_btn_panel">
-			<button label="サイドバー" name="sidebar_btn" tool_tip="サイドバーの表示・非表示"/>
+			<bottomtray_button label="" name="snapshots" tool_tip="スナップショットを撮ります"/>
 		</layout_panel>
 		<layout_panel name="build_btn_panel">
-			<button label="制作" name="build_btn" tool_tip="制作ツールの表示・非表示"/>
+			<bottomtray_button label="制作" name="build_btn" tool_tip="制作ツールの表示・非表示"/>
 		</layout_panel>
 		<layout_panel name="search_btn_panel">
-			<button label="検索" name="search_btn" tool_tip="検索の表示・非表示"/>
+			<bottomtray_button label="検索" name="search_btn" tool_tip="検索の表示・非表示"/>
 		</layout_panel>
 		<layout_panel name="world_map_btn_panel">
-			<button label="地図" name="world_map_btn" tool_tip="世界地図の表示・非表示"/>
+			<bottomtray_button label="地図" name="world_map_btn" tool_tip="世界地図の表示・非表示"/>
 		</layout_panel>
 		<layout_panel name="mini_map_btn_panel">
-			<button label="ミニマップ" name="mini_map_btn" tool_tip="ミニマップの表示・非表示"/>
+			<bottomtray_button label="ミニマップ" name="mini_map_btn" tool_tip="ミニマップの表示・非表示"/>
 		</layout_panel>
 		<layout_panel name="im_well_panel">
 			<chiclet_im_well name="im_well">
diff --git a/indra/newview/skins/default/xui/ja/panel_classified_info.xml b/indra/newview/skins/default/xui/ja/panel_classified_info.xml
index 0aa0e8a8a9..57a255afde 100644
--- a/indra/newview/skins/default/xui/ja/panel_classified_info.xml
+++ b/indra/newview/skins/default/xui/ja/panel_classified_info.xml
@@ -52,8 +52,16 @@
 		</panel>
 	</scroll_container>
 	<panel name="buttons">
-		<button label="テレポート" name="teleport_btn"/>
-		<button label="地図" name="show_on_map_btn"/>
-		<button label="編集" name="edit_btn"/>
+		<layout_stack name="layout_stack1">
+			<layout_panel name="layout_panel1">
+				<button label="テレポート" name="teleport_btn"/>
+			</layout_panel>
+			<layout_panel name="show_on_map_btn_lp">
+				<button label="地図" name="show_on_map_btn"/>
+			</layout_panel>
+			<layout_panel name="edit_btn_lp">
+				<button label="編集" name="edit_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_edit_classified.xml b/indra/newview/skins/default/xui/ja/panel_edit_classified.xml
index 5e90076a74..b556b68e02 100644
--- a/indra/newview/skins/default/xui/ja/panel_edit_classified.xml
+++ b/indra/newview/skins/default/xui/ja/panel_edit_classified.xml
@@ -36,13 +36,19 @@
 				<icons_combo_box.item label="「Moderate」コンテンツ" name="mature_ci" value="Mature"/>
 				<icons_combo_box.item label="「General」コンテンツ" name="pg_ci" value="PG"/>
 			</icons_combo_box>
+			<check_box label="毎週自動更新" name="auto_renew"/>
 			<text name="price_for_listing_label" value="掲載価格:"/>
 			<spinner label="L$" name="price_for_listing" tool_tip="掲載価格" value="50"/>
-			<check_box label="毎週自動更新" name="auto_renew"/>
 		</panel>
 	</scroll_container>
 	<panel label="bottom_panel" name="bottom_panel">
-		<button label="[LABEL]" name="save_changes_btn"/>
-		<button label="キャンセル" name="cancel_btn"/>
+		<layout_stack name="bottom_panel_ls">
+			<layout_panel name="save_changes_btn_lp">
+				<button label="[LABEL]" name="save_changes_btn"/>
+			</layout_panel>
+			<layout_panel name="show_on_map_btn_lp">
+				<button label="取り消し" name="cancel_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_edit_pick.xml b/indra/newview/skins/default/xui/ja/panel_edit_pick.xml
index e58fa979d7..4fb031b677 100644
--- a/indra/newview/skins/default/xui/ja/panel_edit_pick.xml
+++ b/indra/newview/skins/default/xui/ja/panel_edit_pick.xml
@@ -25,7 +25,13 @@
 		</panel>
 	</scroll_container>
 	<panel label="bottom_panel" name="bottom_panel">
-		<button label="ピックを保存" name="save_changes_btn"/>
-		<button label="キャンセル" name="cancel_btn"/>
+		<layout_stack name="layout_stack1">
+			<layout_panel name="layout_panel1">
+				<button label="ピックを保存" name="save_changes_btn"/>
+			</layout_panel>
+			<layout_panel name="layout_panel1">
+				<button label="取り消し" name="cancel_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_edit_profile.xml b/indra/newview/skins/default/xui/ja/panel_edit_profile.xml
index cd81565acb..2aba4edc0d 100644
--- a/indra/newview/skins/default/xui/ja/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/ja/panel_edit_profile.xml
@@ -53,7 +53,13 @@
 		</panel>
 	</scroll_container>
 	<panel name="profile_me_buttons_panel">
-		<button label="変更を保存" name="save_btn"/>
-		<button label="キャンセル" name="cancel_btn"/>
+		<layout_stack name="bottom_panel_ls">
+			<layout_panel name="save_changes_btn_lp">
+				<button label="変更を保存" name="save_btn"/>
+			</layout_panel>
+			<layout_panel name="show_on_map_btn_lp">
+				<button label="取り消し" name="cancel_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_edit_wearable.xml b/indra/newview/skins/default/xui/ja/panel_edit_wearable.xml
index 426f738b33..6cbed88ebc 100644
--- a/indra/newview/skins/default/xui/ja/panel_edit_wearable.xml
+++ b/indra/newview/skins/default/xui/ja/panel_edit_wearable.xml
@@ -102,7 +102,13 @@
 		<icon name="female_icon" tool_tip="女性"/>
 	</panel>
 	<panel name="button_panel">
-		<button label="別名で保存" name="save_as_button"/>
-		<button label="変更を元に戻す" name="revert_button"/>
+		<layout_stack name="button_panel_ls">
+			<layout_panel name="save_as_btn_lp">
+				<button label="別名で保存" name="save_as_button"/>
+			</layout_panel>
+			<layout_panel name="revert_btn_lp">
+				<button label="変更を元に戻す" name="revert_button"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/ja/panel_group_info_sidetray.xml
index 4166108472..85406702bc 100644
--- a/indra/newview/skins/default/xui/ja/panel_group_info_sidetray.xml
+++ b/indra/newview/skins/default/xui/ja/panel_group_info_sidetray.xml
@@ -13,7 +13,7 @@
 		無料
 	</panel.string>
 	<panel name="group_info_top">
-		<text name="group_name" value="(ローディング...)"/>
+		<text_editor name="group_name" value="(ローディング...)"/>
 		<line_editor label="新しいグループの名前を入力してください" name="group_name_editor"/>
 	</panel>
 	<layout_stack name="layout">
@@ -25,9 +25,15 @@
 				<accordion_tab name="group_land_tab" title="土地・資産"/>
 			</accordion>
 		</layout_panel>
-		<layout_panel name="button_row">
+	</layout_stack>
+	<layout_stack name="button_row_ls">
+		<layout_panel name="btn_chat_lp">
 			<button label="チャット" name="btn_chat"/>
+		</layout_panel>
+		<layout_panel name="call_btn_lp">
 			<button label="グループコール" name="btn_call" tool_tip="このグループにコールする"/>
+		</layout_panel>
+		<layout_panel name="btn_apply_lp">
 			<button label="保存" label_selected="保存" name="btn_apply"/>
 			<button label="グループを作成" name="btn_create" tool_tip="新しいグループを作成"/>
 		</layout_panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_landmarks.xml b/indra/newview/skins/default/xui/ja/panel_landmarks.xml
index 993c52b561..e3b716c35b 100644
--- a/indra/newview/skins/default/xui/ja/panel_landmarks.xml
+++ b/indra/newview/skins/default/xui/ja/panel_landmarks.xml
@@ -7,8 +7,16 @@
 		<accordion_tab name="tab_library" title="ライブラリ"/>
 	</accordion>
 	<panel name="bottom_panel">
-		<button name="options_gear_btn" tool_tip="その他のオプションを表示します"/>
-		<button name="add_btn" tool_tip="新しいランドマークを追加します"/>
-		<dnd_button name="trash_btn" tool_tip="選択したランドマークを削除します"/>
+		<layout_stack name="bottom_panel">
+			<layout_panel name="options_gear_btn_panel">
+				<button name="options_gear_btn" tool_tip="オプションを表示します"/>
+			</layout_panel>
+			<layout_panel name="add_btn_panel">
+				<button name="add_btn" tool_tip="新しいランドマークを追加"/>
+			</layout_panel>
+			<layout_panel name="trash_btn_panel">
+				<dnd_button name="trash_btn" tool_tip="選択したランドマークを削除します"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_my_profile.xml b/indra/newview/skins/default/xui/ja/panel_my_profile.xml
index 17461ef771..94c5a6a4b7 100644
--- a/indra/newview/skins/default/xui/ja/panel_my_profile.xml
+++ b/indra/newview/skins/default/xui/ja/panel_my_profile.xml
@@ -42,9 +42,8 @@
 				</panel>
 			</scroll_container>
 		</layout_panel>
-		<layout_panel name="profile_me_buttons_panel">
-			<button label="プロフィールの編集" name="edit_profile_btn" tool_tip="個人的な情報を編集します"/>
-			<button label="容姿の編集" name="edit_appearance_btn" tool_tip="見た目を作成・編集します: (身体的データ、衣類など)"/>
-		</layout_panel>
 	</layout_stack>
+	<panel name="profile_me_buttons_panel">
+		<button label="プロフィールの編集" name="edit_profile_btn" tool_tip="個人的な情報を編集します"/>
+	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_notes.xml b/indra/newview/skins/default/xui/ja/panel_notes.xml
index cbeb5a7f97..aa6d823c59 100644
--- a/indra/newview/skins/default/xui/ja/panel_notes.xml
+++ b/indra/newview/skins/default/xui/ja/panel_notes.xml
@@ -13,11 +13,23 @@
 			</scroll_container>
 		</layout_panel>
 		<layout_panel name="notes_buttons_panel">
-			<button label="フレンド登録" name="add_friend" tool_tip="フレンド登録を申し出ます"/>
-			<button label="IM" name="im" tool_tip="インスタントメッセージを開きます"/>
-			<button label="コール" name="call" tool_tip="この住人にコールします"/>
-			<button label="地図" name="show_on_map_btn" tool_tip="住人を地図上で表示します"/>
-			<button label="テレポート" name="teleport" tool_tip="テレポートを送ります"/>
+			<layout_stack name="bottom_bar_ls">
+				<layout_panel name="add_friend_btn_lp">
+					<button label="フレンド登録" name="add_friend" tool_tip="フレンド登録を申し出ます"/>
+				</layout_panel>
+				<layout_panel name="im_btn_lp">
+					<button label="IM" name="im" tool_tip="インスタントメッセージを開きます"/>
+				</layout_panel>
+				<layout_panel name="call_btn_lp">
+					<button label="コール" name="call" tool_tip="この住人にコールする"/>
+				</layout_panel>
+				<layout_panel name="show_on_map_btn_lp">
+					<button label="地図" name="show_on_map_btn" tool_tip="住人を地図上で表示する"/>
+				</layout_panel>
+				<layout_panel name="teleport_btn_lp">
+					<button label="テレポート" name="teleport" tool_tip="テレポートを送ります"/>
+				</layout_panel>
+			</layout_stack>
 		</layout_panel>
 	</layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_outfit_edit.xml b/indra/newview/skins/default/xui/ja/panel_outfit_edit.xml
index 8d1da51be5..6897660214 100644
--- a/indra/newview/skins/default/xui/ja/panel_outfit_edit.xml
+++ b/indra/newview/skins/default/xui/ja/panel_outfit_edit.xml
@@ -45,7 +45,13 @@
 		<button name="shop_btn_2" tool_tip="「SL マーケットプレイス」ページをご覧ください。また、いま着用しているアイテムを選択してここをクリックすると、それに似たアイテムが表示されます。"/>
 	</panel>
 	<panel name="save_revert_button_bar">
-		<button label="保存" name="save_btn"/>
-		<button label="変更を元に戻す" name="revert_btn" tool_tip="前回保存された状態に戻す"/>
+		<layout_stack name="button_bar_ls">
+			<layout_panel name="save_btn_lp">
+				<button label="保存" name="save_btn"/>
+			</layout_panel>
+			<layout_panel name="revert_btn_lp">
+				<button label="変更を元に戻す" name="revert_btn" tool_tip="前回保存された状態に戻す"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/ja/panel_outfits_inventory.xml
index c649113000..2a0647653d 100644
--- a/indra/newview/skins/default/xui/ja/panel_outfits_inventory.xml
+++ b/indra/newview/skins/default/xui/ja/panel_outfits_inventory.xml
@@ -11,7 +11,13 @@
 		<panel label="着用中" name="cof_tab"/>
 	</tab_container>
 	<panel name="bottom_panel">
-		<button label="別名で保存" name="save_btn"/>
-		<button label="装着" name="wear_btn" tool_tip="選択したアウトフィットを着用します"/>
+		<layout_stack name="bottom_panel_ls">
+			<layout_panel name="save_btn_lp">
+				<button label="別名で保存" name="save_btn"/>
+			</layout_panel>
+			<layout_panel name="wear_btn_lp">
+				<button label="装着" name="wear_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_people.xml b/indra/newview/skins/default/xui/ja/panel_people.xml
index 68af19910a..f2ccddc9de 100644
--- a/indra/newview/skins/default/xui/ja/panel_people.xml
+++ b/indra/newview/skins/default/xui/ja/panel_people.xml
@@ -32,9 +32,17 @@
 				<accordion_tab name="tab_all" title="全員"/>
 			</accordion>
 			<panel label="bottom_panel" name="bottom_panel">
-				<button name="friends_viewsort_btn" tool_tip="オプション"/>
-				<button name="add_btn" tool_tip="フレンド登録を申し出ます"/>
-				<button name="del_btn" tool_tip="選択した人をフレンドリストから削除します"/>
+				<layout_stack name="bottom_panel">
+					<layout_panel name="options_gear_btn_panel">
+						<button name="friends_viewsort_btn" tool_tip="オプションを表示します"/>
+					</layout_panel>
+					<layout_panel name="add_btn_panel">
+						<button name="add_btn" tool_tip="フレンド登録を申し出る"/>
+					</layout_panel>
+					<layout_panel name="trash_btn_panel">
+						<dnd_button name="trash_btn" tool_tip="選択した人をフレンドリストから削除"/>
+					</layout_panel>
+				</layout_stack>
 			</panel>
 		</panel>
 		<panel label="マイ グループ" name="groups_panel">
@@ -52,13 +60,33 @@
 		</panel>
 	</tab_container>
 	<panel name="button_bar">
-		<button label="プロフィール" name="view_profile_btn" tool_tip="写真、グループ、その他住人情報を表示します"/>
-		<button label="IM" name="im_btn" tool_tip="インスタントメッセージを開きます"/>
-		<button label="コール" name="call_btn" tool_tip="この住人にコールします"/>
-		<button label="共有" name="share_btn" tool_tip="持ち物アイテムを共有"/>
-		<button label="テレポート" name="teleport_btn" tool_tip="テレポートを送ります"/>
-		<button label="グループ情報" name="group_info_btn" tool_tip="グループ情報を表示します"/>
-		<button label="グループチャット" name="chat_btn" tool_tip="チャットを開始します"/>
-		<button label="グループコール" name="group_call_btn" tool_tip="このグループにコールします"/>
+		<layout_stack name="bottom_bar_ls">
+			<layout_panel name="view_profile_btn_lp">
+				<button label="プロフィール" name="view_profile_btn" tool_tip="写真、グループ、その他住人情報を表示"/>
+			</layout_panel>
+			<layout_panel name="chat_btn_lp">
+				<button label="IM" name="im_btn" tool_tip="インスタントメッセージを開きます"/>
+			</layout_panel>
+			<layout_panel name="chat_btn_lp">
+				<button label="コール" name="call_btn" tool_tip="この住人にコールする"/>
+			</layout_panel>
+			<layout_panel name="chat_btn_lp">
+				<button label="共有" name="share_btn" tool_tip="「持ち物」のアイテムを共有する"/>
+			</layout_panel>
+			<layout_panel name="chat_btn_lp">
+				<button label="テレポート" name="teleport_btn" tool_tip="テレポートを送ります"/>
+			</layout_panel>
+		</layout_stack>
+		<layout_stack name="bottom_bar_ls1">
+			<layout_panel name="group_info_btn_lp">
+				<button label="グループ情報" name="group_info_btn" tool_tip="グループ情報を表示します"/>
+			</layout_panel>
+			<layout_panel name="chat_btn_lp">
+				<button label="グループチャット" name="chat_btn" tool_tip="チャットを開始します"/>
+			</layout_panel>
+			<layout_panel name="group_call_btn_lp">
+				<button label="グループコール" name="group_call_btn" tool_tip="このグループにコールする"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_pick_info.xml b/indra/newview/skins/default/xui/ja/panel_pick_info.xml
index 30fd8d1adc..e7b5d1929d 100644
--- a/indra/newview/skins/default/xui/ja/panel_pick_info.xml
+++ b/indra/newview/skins/default/xui/ja/panel_pick_info.xml
@@ -3,14 +3,22 @@
 	<text name="title" value="ピックの情報"/>
 	<scroll_container name="profile_scroll">
 		<panel name="scroll_content_panel">
-			<text name="pick_name" value="[name]"/>
-			<text name="pick_location" value="[loading...]"/>
-			<text name="pick_desc" value="[description]"/>
+			<text_editor name="pick_name" value="[name]"/>
+			<text_editor name="pick_location" value="[loading...]"/>
+			<text_editor name="pick_desc" value="[description]"/>
 		</panel>
 	</scroll_container>
 	<panel name="buttons">
-		<button label="テレポート" name="teleport_btn"/>
-		<button label="地図" name="show_on_map_btn"/>
-		<button label="編集" name="edit_btn"/>
+		<layout_stack name="layout_stack1">
+			<layout_panel name="layout_panel1">
+				<button label="テレポート" name="teleport_btn"/>
+			</layout_panel>
+			<layout_panel name="show_on_map_btn_lp">
+				<button label="地図" name="show_on_map_btn"/>
+			</layout_panel>
+			<layout_panel name="edit_btn_lp">
+				<button label="編集" name="edit_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_picks.xml b/indra/newview/skins/default/xui/ja/panel_picks.xml
index 4f58c032da..c6eaaeef41 100644
--- a/indra/newview/skins/default/xui/ja/panel_picks.xml
+++ b/indra/newview/skins/default/xui/ja/panel_picks.xml
@@ -7,11 +7,23 @@
 		<accordion_tab name="tab_classifieds" title="クラシファイド広告"/>
 	</accordion>
 	<panel label="bottom_panel" name="edit_panel">
-		<button name="new_btn" tool_tip="現在地の新しいピック、またはクラシファイド広告を作成します"/>
+		<layout_stack name="edit_panel_ls">
+			<layout_panel name="gear_menu_btn">
+				<button name="new_btn" tool_tip="現在地の新しいピック、またはクラシファイド広告を作成します"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 	<panel name="buttons_cucks">
-		<button label="情報" name="info_btn" tool_tip="ピックの情報を表示します"/>
-		<button label="テレポート" name="teleport_btn" tool_tip="該当するエリアにテレポートします"/>
-		<button label="地図" name="show_on_map_btn" tool_tip="世界地図に該当するエリアを表示します"/>
+		<layout_stack name="buttons_cucks_ls">
+			<layout_panel name="info_btn_lp">
+				<button label="情報" name="info_btn" tool_tip="ピックの情報を表示"/>
+			</layout_panel>
+			<layout_panel name="teleport_btn_lp">
+				<button label="テレポート" name="teleport_btn" tool_tip="該当するエリアにテレポート"/>
+			</layout_panel>
+			<layout_panel name="show_on_map_btn_lp">
+				<button label="地図" name="show_on_map_btn" tool_tip="世界地図に該当するエリアを表示"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_places.xml b/indra/newview/skins/default/xui/ja/panel_places.xml
index c83e3591a7..3e364c9b3a 100644
--- a/indra/newview/skins/default/xui/ja/panel_places.xml
+++ b/indra/newview/skins/default/xui/ja/panel_places.xml
@@ -4,13 +4,45 @@
 	<string name="teleport_history_tab_title" value="テレポートの履歴"/>
 	<filter_editor label="場所をフィルター" name="Filter"/>
 	<panel name="button_panel">
-		<button label="テレポート" name="teleport_btn" tool_tip="該当するエリアにテレポートします"/>
-		<button label="地図" name="map_btn" tool_tip="世界地図に該当するエリアを表示"/>
-		<button label="編集" name="edit_btn" tool_tip="ランドマークの情報を編集します"/>
-		<button label="▼" name="overflow_btn" tool_tip="その他のオプションを表示"/>
-		<button label="保存" name="save_btn"/>
-		<button label="キャンセル" name="cancel_btn"/>
-		<button label="閉じる" name="close_btn"/>
-		<button label="プロフィール" name="profile_btn" tool_tip="場所のプロフィールを表示"/>
+		<layout_stack name="bottom_bar_ls0">
+			<layout_panel name="lp1">
+				<layout_stack name="bottom_bar_ls1">
+					<layout_panel name="teleport_btn_lp">
+						<button label="テレポート" name="teleport_btn" tool_tip="該当するエリアにテレポートする"/>
+					</layout_panel>
+					<layout_panel name="chat_btn_lp">
+						<button label="地図" name="map_btn" tool_tip="世界地図に該当するエリアを表示"/>
+					</layout_panel>
+				</layout_stack>
+			</layout_panel>
+			<layout_panel name="lp2">
+				<layout_stack name="bottom_bar_ls3">
+					<layout_panel name="edit_btn_lp">
+						<button label="編集" name="edit_btn" tool_tip="ランドマークの情報を編集します"/>
+					</layout_panel>
+					<layout_panel name="overflow_btn_lp">
+						<button label="▼" name="overflow_btn" tool_tip="オプションを表示します"/>
+					</layout_panel>
+				</layout_stack>
+				<layout_stack name="bottom_bar_ls3">
+					<layout_panel name="profile_btn_lp">
+						<button label="プロフィール" name="profile_btn" tool_tip="場所のプロフィールを表示"/>
+					</layout_panel>
+				</layout_stack>
+				<layout_stack name="bottom_bar_close_ls3">
+					<layout_panel name="close_btn_lp">
+						<button label="閉じる" name="close_btn"/>
+					</layout_panel>
+				</layout_stack>
+			</layout_panel>
+		</layout_stack>
+		<layout_stack name="bottom_bar_ls2">
+			<layout_panel name="save_btn_lp">
+				<button label="保存" name="save_btn"/>
+			</layout_panel>
+			<layout_panel name="cancel_btn_lp">
+				<button label="取り消し" name="cancel_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml b/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml
index 4082f71a76..c260cebef8 100644
--- a/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml
@@ -56,27 +56,27 @@
 		<radio_item label="別々のウィンドウ" name="radio" value="0"/>
 		<radio_item label="タブ" name="radio2" value="1"/>
 	</radio_group>
-		<check_box label="翻訳チャット" name="translate_chat_checkbox" />
+	<check_box label="チャット中に内容を機械翻訳する(Google翻訳)" name="translate_chat_checkbox"/>
 	<text name="translate_language_text">
-		チャット言語:
+		翻訳する言語:
 	</text>
 	<combo_box name="translate_language_combobox">
-		<combo_box.item name="System Default Language" label="システム・デフォルト" />
-		<combo_box.item name="English" label="English (英語)" />
-		<combo_box.item name="Danish" label="Dansk (デンマーク語)" />
-		<combo_box.item name="German" label="Deutsch (ドイツ語)" />
-		<combo_box.item name="Spanish" label="Español (スペイン語)" />
-		<combo_box.item name="French" label="Français (フランス語)" />
-		<combo_box.item name="Italian" label="Italiano (イタリア語)" />
-		<combo_box.item name="Hungarian" label="Magyar (ハンガリー語)" />
-		<combo_box.item name="Dutch" label="Nederlands (オランダ語)" />
-		<combo_box.item name="Polish" label="Polski (ポーランド語)" />
-		<combo_box.item name="Portugese" label="Português (ポルトガル語)" />
-		<combo_box.item name="Russian" label="Русский (ロシア語)" />
-		<combo_box.item name="Turkish" label="Türkçe (トルコ語)" />
-		<combo_box.item name="Ukrainian" label="Українська (ウクライナ語)" />
-		<combo_box.item name="Chinese" label="中文 (简体) (中国語)" />
-		<combo_box.item name="Japanese" label="日本語" />
-		<combo_box.item name="Korean" label="한국어 (韓国語)" />
+		<combo_box.item label="システム標準" name="System Default Language"/>
+		<combo_box.item label="English(英語)" name="English"/>
+		<combo_box.item label="Dansk(デンマーク語)" name="Danish"/>
+		<combo_box.item label="Deutsch(ドイツ語)" name="German"/>
+		<combo_box.item label="Español(スペイン語)" name="Spanish"/>
+		<combo_box.item label="Français(フランス語)" name="French"/>
+		<combo_box.item label="Italiano(イタリア語)" name="Italian"/>
+		<combo_box.item label="Magyar(ハンガリー語)" name="Hungarian"/>
+		<combo_box.item label="Nederlands(オランダ語)" name="Dutch"/>
+		<combo_box.item label="Polski(ポーランド語)" name="Polish"/>
+		<combo_box.item label="Português(ポルトガル語)" name="Portugese"/>
+		<combo_box.item label="Русский(ロシア語)" name="Russian"/>
+		<combo_box.item label="Türkçe(トルコ語)" name="Turkish"/>
+		<combo_box.item label="Українська(ウクライナ語)" name="Ukrainian"/>
+		<combo_box.item label="中文 (简体)(中国語)" name="Chinese"/>
+		<combo_box.item label="日本語" name="Japanese"/>
+		<combo_box.item label="한국어(韓国語)" name="Korean"/>
 	</combo_box>
 </panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_general.xml b/indra/newview/skins/default/xui/ja/panel_preferences_general.xml
index 4ccb70b321..751faff1d8 100644
--- a/indra/newview/skins/default/xui/ja/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/ja/panel_preferences_general.xml
@@ -13,7 +13,7 @@
 		<combo_box.item label="Italiano (イタリア語) - ベータ" name="Italian"/>
 		<combo_box.item label="Nederlands (オランダ語) - ベータ" name="Dutch"/>
 		<combo_box.item label="Polski (ポーランド語) - ベータ" name="Polish"/>
-		<combo_box.item label="Português (ポルトガル語) – ベータ" name="Portugese"/>
+		<combo_box.item label="Português(ポルトガル語) - ベータ" name="Portugese"/>
 		<combo_box.item label="日本語 – ベータ" name="(Japanese)"/>
 	</combo_box>
 	<text name="language_textbox2">
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml
index 8a50581075..92635182c8 100644
--- a/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml
@@ -28,22 +28,16 @@
 		<check_box initial_value="true" label="バンプマッピングと光沢" name="BumpShiny"/>
 		<check_box initial_value="true" label="基本シェーダー" name="BasicShaders" tool_tip="このオプションを無効にすると、グラフィックカードのドライバの種類によっては、クラッシュするのを防ぎます。"/>
 		<check_box initial_value="true" label="周囲(大気)シェーダー" name="WindLightUseAtmosShaders"/>
-		<check_box initial_value="true" label="水の反射" name="Reflections"/>
-		<text name="ReflectionDetailText">
-			反射詳細:
+		<text name="reflection_label">
+			水の反射:
 		</text>
-		<radio_group name="ReflectionDetailRadio">
-			<radio_item label="地形と樹木" name="0"/>
-			<radio_item label="すべての静止オブジェクト" name="1"/>
-			<radio_item label="すべてのアバターとオブジェクト" name="2"/>
-			<radio_item label="すべて" name="3"/>
-		</radio_group>
-		<text name="AvatarRenderingText">
-			アバター表示:
-		</text>
-		<check_box initial_value="true" label="アバターの描画を簡略化" name="AvatarImpostors"/>
-		<check_box initial_value="true" label="ハードウェアスキニング" name="AvatarVertexProgram"/>
-		<check_box initial_value="true" label="アバターの布" name="AvatarCloth"/>
+		<combo_box initial_value="true" label="水の反射" name="Reflections">
+			<combo_box.item label="最小" name="0"/>
+			<combo_box.item label="地形と樹木" name="1"/>
+			<combo_box.item label="すべての静止オブジェクト" name="2"/>
+			<combo_box.item label="すべてのアバターとオブジェクト" name="3"/>
+			<combo_box.item label="すべて" name="4"/>
+		</combo_box>
 		<slider label="描画距離:" name="DrawDistance"/>
 		<text name="DrawDistanceMeterText2">
 			m
@@ -81,13 +75,12 @@
 		<text name="SkyMeshDetailText">
 			低
 		</text>
-		<text name="LightingDetailText">
-			ライティング詳細:
+		<text name="AvatarRenderingText">
+			アバター表示:
 		</text>
-		<radio_group name="LightingDetailRadio">
-			<radio_item label="太陽と月のみ" name="SunMoon" value="0"/>
-			<radio_item label="近くのローカルサイト" name="LocalLights" value="1"/>
-		</radio_group>
+		<check_box initial_value="true" label="アバターの描画を簡略化" name="AvatarImpostors"/>
+		<check_box initial_value="true" label="ハードウェアスキニング" name="AvatarVertexProgram"/>
+		<check_box initial_value="true" label="アバターの布" name="AvatarCloth"/>
 		<text name="TerrainDetailText">
 			地形詳細:
 		</text>
@@ -95,6 +88,7 @@
 			<radio_item label="低" name="0"/>
 			<radio_item label="高" name="2"/>
 		</radio_group>
+		--&gt;
 	</panel>
 	<button label="適用" label_selected="適用" name="Apply"/>
 	<button label="リセット" name="Defaults"/>
diff --git a/indra/newview/skins/default/xui/ja/panel_profile.xml b/indra/newview/skins/default/xui/ja/panel_profile.xml
index e7bc989c52..860020c87c 100644
--- a/indra/newview/skins/default/xui/ja/panel_profile.xml
+++ b/indra/newview/skins/default/xui/ja/panel_profile.xml
@@ -40,17 +40,29 @@
 				</panel>
 			</scroll_container>
 		</layout_panel>
+	</layout_stack>
+	<layout_stack name="layout_verb_buttons">
 		<layout_panel name="profile_buttons_panel">
-			<button label="フレンド登録" name="add_friend" tool_tip="フレンド登録を申し出ます"/>
-			<button label="IM" name="im" tool_tip="インスタントメッセージを開きます"/>
-			<button label="コール" name="call" tool_tip="この住人にコールします"/>
-			<button label="地図" name="show_on_map_btn" tool_tip="住人を地図上で表示します"/>
-			<button label="テレポート" name="teleport" tool_tip="テレポートを送ります"/>
-			<button label="▼" name="overflow_btn" tool_tip="住人にお金を渡すか持ち物を共有します"/>
+			<layout_stack name="bottom_bar_ls">
+				<layout_panel name="add_friend_btn_lp">
+					<button label="フレンド登録" name="add_friend" tool_tip="フレンド登録を申し出ます"/>
+				</layout_panel>
+				<layout_panel name="im_btn_lp">
+					<button label="IM" name="im" tool_tip="インスタントメッセージを開きます"/>
+				</layout_panel>
+				<layout_panel name="call_btn_lp">
+					<button label="コール" name="call" tool_tip="この住人にコールする"/>
+				</layout_panel>
+				<layout_panel name="chat_btn_lp">
+					<button label="テレポート" name="teleport" tool_tip="テレポートを送ります"/>
+				</layout_panel>
+				<layout_panel name="overflow_btn_lp">
+					<button label="▼" name="overflow_btn" tool_tip="住人にお金を渡すか持ち物を共有します"/>
+				</layout_panel>
+			</layout_stack>
 		</layout_panel>
 		<layout_panel name="profile_me_buttons_panel">
 			<button label="プロフィールの編集" name="edit_profile_btn" tool_tip="個人的な情報を編集します"/>
-			<button label="容姿の編集" name="edit_appearance_btn" tool_tip="見た目を作成・編集します: (身体的データ、衣類など)"/>
 		</layout_panel>
 	</layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_side_tray_tab_caption.xml b/indra/newview/skins/default/xui/ja/panel_side_tray_tab_caption.xml
index 8f4a76fd43..d06db8ccb1 100644
--- a/indra/newview/skins/default/xui/ja/panel_side_tray_tab_caption.xml
+++ b/indra/newview/skins/default/xui/ja/panel_side_tray_tab_caption.xml
@@ -1,5 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="sidetray_tab_panel">
 	<text name="sidetray_tab_title" value="サイドパネル"/>
+	<button name="undock" tool_tip="切り離す"/>
+	<button name="dock" tool_tip="ドッキング"/>
 	<button name="show_help" tool_tip="ヘルプを表示"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/ja/sidepanel_inventory.xml b/indra/newview/skins/default/xui/ja/sidepanel_inventory.xml
index 648719b6bd..e26d8717d1 100644
--- a/indra/newview/skins/default/xui/ja/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/ja/sidepanel_inventory.xml
@@ -2,12 +2,20 @@
 <panel label="もの" name="objects panel">
 	<panel label="" name="sidepanel__inventory_panel">
 		<panel name="button_panel">
-			<button label="プロフィール" name="info_btn" tool_tip="オブジェクトのプロフィールを表示する"/>
-			<button label="共有" name="share_btn" tool_tip="「持ち物」のアイテムを共有する"/>
-			<button label="ショッピング" name="shop_btn" tool_tip="マーケットプレイスのサイトを開く"/>
-			<button label="装着" name="wear_btn" tool_tip="選択したアウトフィットを着用する"/>
-			<button label="プレイ" name="play_btn"/>
-			<button label="テレポート" name="teleport_btn" tool_tip="該当するエリアにテレポートする"/>
+			<layout_stack name="button_panel_ls">
+				<layout_panel name="info_btn_lp">
+					<button label="プロフィール" name="info_btn" tool_tip="オブジェクトのプロフィールを表示する"/>
+				</layout_panel>
+				<layout_panel name="share_btn_lp">
+					<button label="共有" name="share_btn" tool_tip="「持ち物」のアイテムを共有する"/>
+				</layout_panel>
+				<layout_panel name="shop_btn_lp">
+					<button label="店" name="shop_btn" tool_tip="マーケットプレイスのサイトを開く"/>
+					<button label="装着" name="wear_btn" tool_tip="選択したアウトフィットを着用する"/>
+					<button label="プレイ" name="play_btn"/>
+					<button label="テレポート" name="teleport_btn" tool_tip="該当するエリアにテレポートする"/>
+				</layout_panel>
+			</layout_stack>
 		</panel>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/ja/sidepanel_item_info.xml b/indra/newview/skins/default/xui/ja/sidepanel_item_info.xml
index 519b69799b..d820994b59 100644
--- a/indra/newview/skins/default/xui/ja/sidepanel_item_info.xml
+++ b/indra/newview/skins/default/xui/ja/sidepanel_item_info.xml
@@ -23,56 +23,53 @@
 	</panel.string>
 	<text name="title" value="アイテムのプロフィール"/>
 	<text name="origin" value="(持ち物)"/>
-	<panel label="" name="item_profile">
-		<text name="LabelItemNameTitle">
-			名前:
-		</text>
-		<text name="LabelItemDescTitle">
-			説明:
-		</text>
-		<text name="LabelCreatorTitle">
-			制作者:
-		</text>
-		<text name="LabelCreatorName"/>
-		<button label="プロフィール" name="BtnCreator"/>
-		<text name="LabelOwnerTitle">
-			所有者:
-		</text>
-		<text name="LabelOwnerName"/>
-		<button label="プロフィール" name="BtnOwner"/>
-		<text name="LabelAcquiredTitle">
-			取得:
-		</text>
-		<text name="LabelAcquiredDate"/>
-		<panel name="perms_inv">
-			<text name="perm_modify">
-				あなたができること:
+	<scroll_container name="item_profile_scroll">
+		<panel label="" name="item_profile">
+			<text name="LabelItemNameTitle">
+				名前:
 			</text>
-			<check_box label="修正" name="CheckOwnerModify"/>
-			<check_box label="コピー" name="CheckOwnerCopy"/>
-			<check_box label="再販・プレゼント" name="CheckOwnerTransfer"/>
-			<text name="AnyoneLabel">
-				全員:
+			<text name="LabelItemDescTitle">
+				説明:
 			</text>
-			<check_box label="コピー" name="CheckEveryoneCopy"/>
-			<text name="GroupLabel">
-				グループ:
+			<text name="LabelCreatorTitle">
+				制作者:
 			</text>
-			<check_box label="共有" name="CheckShareWithGroup" tool_tip="設定したグループのメンバー全員にこのオブジェクトの修正権限を与えます。譲渡しない限り、役割制限を有効にはできません。"/>
-			<text name="NextOwnerLabel">
-				次の所有者:
+			<text name="LabelOwnerTitle">
+				所有者:
 			</text>
-			<check_box label="修正" name="CheckNextOwnerModify"/>
-			<check_box label="コピー" name="CheckNextOwnerCopy"/>
-			<check_box label="再販・プレゼント" name="CheckNextOwnerTransfer" tool_tip="次の所有者はこのオブジェクトを他人にあげたり再販できます"/>
+			<text name="LabelAcquiredTitle">
+				取得:
+			</text>
+			<panel name="perms_inv">
+				<text name="perm_modify">
+					あなたができること:
+				</text>
+				<check_box label="修正" name="CheckOwnerModify"/>
+				<check_box label="コピー" name="CheckOwnerCopy"/>
+				<check_box label="再販・プレゼント" name="CheckOwnerTransfer"/>
+				<text name="AnyoneLabel">
+					全員:
+				</text>
+				<check_box label="コピー" name="CheckEveryoneCopy"/>
+				<text name="GroupLabel">
+					グループ:
+				</text>
+				<check_box label="共有" name="CheckShareWithGroup" tool_tip="設定したグループのメンバー全員にこのオブジェクトの修正権限を与えます。 譲渡しない限り、役割制限を有効にはできません。"/>
+				<text name="NextOwnerLabel">
+					次の所有者:
+				</text>
+				<check_box label="修正" name="CheckNextOwnerModify"/>
+				<check_box label="コピー" name="CheckNextOwnerCopy"/>
+				<check_box label="再販・プレゼント" name="CheckNextOwnerTransfer" tool_tip="次の所有者はこのオブジェクトを他人にあげたり再販できます"/>
+			</panel>
+			<check_box label="販売中" name="CheckPurchase"/>
+			<combo_box name="combobox sale copy">
+				<combo_box.item label="コピー" name="Copy"/>
+				<combo_box.item label="オリジナル" name="Original"/>
+			</combo_box>
+			<spinner label="価格: L$" name="Edit Cost"/>
 		</panel>
-		<check_box label="販売中" name="CheckPurchase"/>
-		<combo_box name="combobox sale copy">
-			<combo_box.item label="コピー" name="Copy"/>
-			<combo_box.item label="オリジナル" name="Original"/>
-		</combo_box>
-		<spinner label="価格:L$" name="Edit Cost"/>
-	</panel>
+	</scroll_container>
 	<panel name="button_panel">
 		<button label="キャンセル" name="cancel_btn"/>
 	</panel>
diff --git a/indra/newview/skins/default/xui/ja/strings.xml b/indra/newview/skins/default/xui/ja/strings.xml
index dd59065a9d..072ae6c630 100644
--- a/indra/newview/skins/default/xui/ja/strings.xml
+++ b/indra/newview/skins/default/xui/ja/strings.xml
@@ -1294,6 +1294,9 @@
 	<string name="Right Pec">
 		右胸筋
 	</string>
+	<string name="Invalid Attachment">
+		装着先が正しくありません
+	</string>
 	<string name="YearsMonthsOld">
 		[AGEYEARS] [AGEMONTHS]
 	</string>
@@ -1671,9 +1674,6 @@
 	<string name="ATTACH_HUD_BOTTOM_RIGHT">
 		HUD(右下)
 	</string>
-	<string name="Bad attachment point">
-		装着先が正しくありません
-	</string>
 	<string name="CursorPos">
 		[LINE] 行目、[COLUMN] 列目
 	</string>
@@ -1695,12 +1695,6 @@
 	<string name="BusyModeResponseDefault">
 		メッセージを送った住人は、誰にも邪魔をされたくないため現在「取り込み中」モードです。  あなたのメッセージは、あとで確認できるように IM パネルに表示されます。
 	</string>
-	<string name="NoOutfits">
-		アウトフィットがまだありません。[secondlife:///app/search/all/ Search]をお試しください
-	</string>
-	<string name="NoOutfitsTabsMatched">
-		お探しのものは見つかりましたか?[secondlife:///app/search/all/[SEARCH_TERM]をお試しください。
-	</string>
 	<string name="MuteByName">
 		(名称別)
 	</string>
@@ -1864,6 +1858,12 @@
 	<string name="accel-win-shift">
 		Shift+
 	</string>
+	<string name="Esc">
+		Esc
+	</string>
+	<string name="Home">
+		ホーム
+	</string>
 	<string name="FileSaved">
 		ファイルが保存されました
 	</string>
@@ -3528,6 +3528,9 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ
 	<string name="IM_moderator_label">
 		(モデレータ)
 	</string>
+	<string name="Saved_message">
+		(保存日時:[LONG_TIMESTAMP])
+	</string>
 	<string name="answered_call">
 		相手がコールを受けました
 	</string>
@@ -3555,12 +3558,18 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ
 	<string name="conference-title">
 		アドホックコンファレンス
 	</string>
+	<string name="conference-title-incoming">
+		[AGENT_NAME]とコンファレンスする
+	</string>
 	<string name="inventory_item_offered-im">
 		持ち物アイテムを送りました
 	</string>
 	<string name="share_alert">
 		持ち物からここにアイテムをドラッグします
 	</string>
+	<string name="no_session_message">
+		(IM セッションが存在しません)
+	</string>
 	<string name="only_user_message">
 		このセッションにいるユーザーはあなただけです。
 	</string>
@@ -3945,4 +3954,13 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ
 	<string name="Chat">
 		チャット
 	</string>
+	<string name="DeleteItems">
+		選択したアイテムを削除しますか
+	</string>
+	<string name="DeleteItem">
+		選択したアイテムを削除しますか
+	</string>
+	<string name="EmptyOutfitText">
+		このアウトフィットにはアイテムがありません
+	</string>
 </strings>
-- 
cgit v1.2.3


From e0fbd5e7d0e39104ca9cc860ccc106ad36dc0894 Mon Sep 17 00:00:00 2001
From: Eli Linden <eli@lindenlab.com>
Date: Mon, 11 Oct 2010 18:28:24 -0700
Subject: CT-575 WIP JA DE IT translation for set18, new files

---
 indra/newview/skins/default/xui/de/menu_add_wearable_gear.xml | 6 ++++++
 indra/newview/skins/default/xui/it/menu_add_wearable_gear.xml | 6 ++++++
 indra/newview/skins/default/xui/ja/menu_add_wearable_gear.xml | 6 ++++++
 3 files changed, 18 insertions(+)
 create mode 100644 indra/newview/skins/default/xui/de/menu_add_wearable_gear.xml
 create mode 100644 indra/newview/skins/default/xui/it/menu_add_wearable_gear.xml
 create mode 100644 indra/newview/skins/default/xui/ja/menu_add_wearable_gear.xml

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/de/menu_add_wearable_gear.xml b/indra/newview/skins/default/xui/de/menu_add_wearable_gear.xml
new file mode 100644
index 0000000000..f3775a05ec
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_add_wearable_gear.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Add Wearable Gear Menu">
+	<menu_item_check label="Nach aktuellesten Objekten sortieren" name="sort_by_most_recent"/>
+	<menu_item_check label="Nach Name sortieren" name="sort_by_name"/>
+	<menu_item_check label="Nach Typ sortieren" name="sort_by_type"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/it/menu_add_wearable_gear.xml b/indra/newview/skins/default/xui/it/menu_add_wearable_gear.xml
new file mode 100644
index 0000000000..46abd7deed
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/menu_add_wearable_gear.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Add Wearable Gear Menu">
+	<menu_item_check label="Mostra prima i più recenti" name="sort_by_most_recent"/>
+	<menu_item_check label="Ordina in base al nome" name="sort_by_name"/>
+	<menu_item_check label="Ordina in base al tipo" name="sort_by_type"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_add_wearable_gear.xml b/indra/newview/skins/default/xui/ja/menu_add_wearable_gear.xml
new file mode 100644
index 0000000000..982a03c6a8
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/menu_add_wearable_gear.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Add Wearable Gear Menu">
+	<menu_item_check label="新しい順に並べ替え" name="sort_by_most_recent"/>
+	<menu_item_check label="名前で並べ替え" name="sort_by_name"/>
+	<menu_item_check label="タイプによる並べ替え" name="sort_by_type"/>
+</menu>
-- 
cgit v1.2.3


From bf699333fa8defca3bf1f3ae346cd0ed5e94e2dd Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Tue, 12 Oct 2010 13:31:19 +0300
Subject: STORM-358 FIXED Disabled higlighting URLs in object names inside
 nearby chat toasts.

---
 indra/newview/llchatitemscontainerctrl.cpp | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llchatitemscontainerctrl.cpp b/indra/newview/llchatitemscontainerctrl.cpp
index e78bdbe25c..ababa71348 100644
--- a/indra/newview/llchatitemscontainerctrl.cpp
+++ b/indra/newview/llchatitemscontainerctrl.cpp
@@ -169,7 +169,9 @@ void LLNearbyChatToastPanel::init(LLSD& notification)
 	{
 		std::string str_sender;
 
-		str_sender = fromName;
+		str_sender = "<nolink>"; // disable parsing URLs in object names (STORM-358)
+		str_sender += fromName;
+		str_sender += "</nolink>";
 
 		str_sender+=" ";
 
-- 
cgit v1.2.3


From be340c9fe93d90cc52a239f983e3694c7812335e Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Tue, 12 Oct 2010 13:40:18 +0300
Subject: STORM-360 FIXED Disabled higlighting of URLs in object names inside
 IM well window.

---
 indra/newview/skins/default/xui/en/panel_active_object_row.xml | 1 +
 1 file changed, 1 insertion(+)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_active_object_row.xml b/indra/newview/skins/default/xui/en/panel_active_object_row.xml
index bef5f8dafd..3e3271b181 100644
--- a/indra/newview/skins/default/xui/en/panel_active_object_row.xml
+++ b/indra/newview/skins/default/xui/en/panel_active_object_row.xml
@@ -53,6 +53,7 @@
     top="10"
     left_pad="20"
     height="14"
+    parse_urls="false"
     width="245"
     length="1"
     follows="right|left"
-- 
cgit v1.2.3


From 7111a1b3d946d00924627956f249cc4e513dd55b Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Tue, 12 Oct 2010 14:05:13 +0300
Subject: STORM-359 FIXED Disable higlighting URLs in object names inside
 llDialog/llGiveInventory/llLoadURL and script question dialogs.

---
 indra/newview/skins/default/xui/en/notifications.xml | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index e1aecda151..af3280314a 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -5266,7 +5266,7 @@ No valid parcel could be found.
    icon="notify.tga"
    name="ObjectGiveItem"
    type="offer">
-An object named [OBJECTFROMNAME] owned by [NAME_SLURL] has given you this [OBJECTTYPE]:
+An object named &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt; owned by [NAME_SLURL] has given you this [OBJECTTYPE]:
 [ITEM_SLURL]
     <form name="form">
       <button
@@ -5510,7 +5510,7 @@ Load web page [URL]?
 
 [MESSAGE]
 
-From object: [OBJECTNAME], owner: [NAME]?
+From object: &lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;, owner: [NAME]?
     <form name="form">
       <button
        index="0"
@@ -5552,7 +5552,7 @@ The item you are trying to wear uses a feature that your Viewer can&apos;t read.
    name="ScriptQuestion"
    persist="true"
    type="notify">
-&apos;[OBJECTNAME]&apos;, an object owned by &apos;[NAME]&apos;, would like to:
+&apos;&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;&apos;, an object owned by &apos;[NAME]&apos;, would like to:
 
 [QUESTIONS]
 Is this OK?
@@ -5578,7 +5578,7 @@ Is this OK?
    priority="high"
    persist="true"
    type="notify">
-An object named &apos;[OBJECTNAME]&apos;, owned by &apos;[NAME]&apos; would like to:
+An object named &apos;&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;&apos;, owned by &apos;[NAME]&apos; would like to:
 
 [QUESTIONS]
 If you do not trust this object and its creator, you should deny the request.
@@ -5605,7 +5605,7 @@ Grant this request?
    icon="notify.tga"
    name="ScriptDialog"
    type="notify">
-[FIRST] [LAST]&apos;s &apos;[TITLE]&apos;
+[FIRST] [LAST]&apos;s &apos;&lt;nolink&gt;[TITLE]&lt;/nolink&gt;&apos;
 [MESSAGE]
     <form name="form">
       <button
@@ -5619,7 +5619,7 @@ Grant this request?
    icon="notify.tga"
    name="ScriptDialogGroup"
    type="notify">
-[GROUPNAME]&apos;s &apos;[TITLE]&apos;
+[GROUPNAME]&apos;s &apos;&lt;nolink&gt;[TITLE]&lt;/nolink&gt;&apos;
 [MESSAGE]
     <form name="form">
       <button
-- 
cgit v1.2.3


From cc902e3d24c88bd49c591e81506875c5e3782b08 Mon Sep 17 00:00:00 2001
From: Andrew Productengine <adyukov@productengine.com>
Date: Tue, 12 Oct 2010 15:51:32 +0300
Subject: STORM-279 FIXED Fixed "Avatar cloth" checkbox in graphics settings.

- Bug was caused by too small height of panel that contained checkbox, so most part of checkbox didn't work(it was hanging outside of panel).
Increased height of panel, so now checkbox is completely inside panel and works.
---
 indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
index 113d5fb6dc..bed45fc522 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
@@ -155,7 +155,7 @@
 	 visiblity_control="ShowAdvancedGraphicsSettings"
      border="false"
 	 follows="top|left"
-     height="283"
+     height="300"
      label="CustomGraphics"
      layout="topleft"
      left="5"
-- 
cgit v1.2.3


From def038f0071bf80c2ce399255b662b7314e042e8 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Tue, 12 Oct 2010 10:20:17 -0700
Subject: DN-164 Edit Partner link not active in Edit Profile Panel

---
 indra/newview/skins/default/xui/en/panel_edit_profile.xml | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_edit_profile.xml b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
index cf075b8aae..d216bd9b2e 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
@@ -3,7 +3,7 @@
  background_visible="true"
  class="edit_profile_panel"
   follows="all"
- height="548"
+ height="585"
  label="Profile Edit"
  layout="topleft"
  left="0"
@@ -60,7 +60,7 @@
  <scroll_container
      color="DkGray2"
      follows="all"
-     height="507"
+     height="537"
      min_height="300"
      layout="topleft"
      left="8"
@@ -74,7 +74,7 @@
          follows="left|top|right"
          layout="topleft"
          top="0"
-     height="507"
+     height="537"
      min_height="300"
          left="0"
          width="292">
@@ -83,7 +83,7 @@
      follows="left|top|right"
          layout="topleft"
          top="0"
-     height="507"
+     height="537"
      min_height="300"
          left="0"
          width="292">
@@ -377,7 +377,6 @@
            initial_value="(retrieving)"
            layout="topleft"
            left="0"
-           link="true"
            name="partner_text"
            top="0"
            use_ellipses="true"
@@ -387,6 +386,7 @@
          follows="left|top"
          height="15"
          layout="topleft"
+           link="true"
          left="10"
          name="partner_edit_link"
          value="[[URL] Edit]"
-- 
cgit v1.2.3


From f1c41c7945456e0647fac3ae631034cf1ffb0e65 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Tue, 12 Oct 2010 10:22:52 -0700
Subject: DN-120 "As a Viewer Developer, I want to update general preferences,
 so that "Show Display Names" appears less intrusive" DN-160 View Display
 Names Preference extends below border in preference

---
 .../default/xui/en/panel_preferences_general.xml   | 95 ++++++++++++----------
 .../default/xui/en/panel_preferences_setup.xml     | 28 +------
 2 files changed, 52 insertions(+), 71 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_preferences_general.xml b/indra/newview/skins/default/xui/en/panel_preferences_general.xml
index 11a3b2ba9b..392d50fc42 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_general.xml
@@ -106,7 +106,7 @@
      height="15"
      layout="topleft"
      left="30"
-     top_pad="15"
+     top_pad="14"
      name="maturity_desired_prompt"
      width="200">
         I want to access content rated:
@@ -216,33 +216,42 @@
     layout="topleft"
     left="30"
     name="name_tags_textbox"
-    top_pad="15"
+    top_pad="14"
     width="400">
        Name tags:
    </text>
    <radio_group
      control_name="AvatarNameTagMode"
-     height="45"
+     height="20"
      layout="topleft"
      left="50"
+     top_pad="5" 
      name="Name_Tag_Preference">
         <radio_item
          label="Off"
          name="radio"
+         top_delta="20" 
+         layout="topleft"
+         height="16" 
+         left="0" 
          value="0"
          width="75" />
         <radio_item
          label="On"
-         left_delta="0"
+         left_pad="0"
+         layout="topleft"
+         top_delta="0" 
+         height="16" 
          name="radio2"
-		 top_pad="5"
          value="1"
          width="75" />
         <radio_item
          label="Show briefly"
-         left_delta="0"
+         left_pad="0"
          name="radio3"
-		 top_pad="5"
+         height="16"
+         layout="topleft"
+         top_delta="0"
          value="2"
          width="160" />
     </radio_group>
@@ -250,60 +259,45 @@
 	 enabled_control="AvatarNameTagMode"
      control_name="RenderNameShowSelf"
      height="16"
-     label="Show my name"
+     label="My name"
      layout="topleft"
      left="70"
      name="show_my_name_checkbox1"
-	 top_pad="4"
-     width="300" />
+	 top_pad="0"
+     width="100" />
    <check_box
-    control_name="NameTagShowFriends"
+     control_name="NameTagShowUsernames"
 	 enabled_control="AvatarNameTagMode"
      height="16"
-    label="Highlight friends"
-    left_delta="0"
-    name="show_friends"
-    tool_tip="Highlight the name tags of your friends"
-    top_pad="2" />
-  <text
-    follows="left|top"
-    height="15"
+     label="Usernames"
      layout="topleft"
-    left="250"
-    name="name_tags_textbox"
-    top="175"
-    width="200">
-       Tags show:
-   </text>
+     left_pad="70"
+     name="show_slids"
+     tool_tip="Show username, like bobsmith123"
+     top_delta="0" />
     <check_box
      control_name="NameTagShowGroupTitles"
 	 enabled_control="AvatarNameTagMode"
      height="16"
      label="Group titles"
-     left="265"
+     layout="topleft"
+     left="70"
+     width="100" 
      name="show_all_title_checkbox1"
 	 tool_tip="Show group titles, like Officer or Member"
      top_pad="5" />
-  <!--
-   <check_box
-     control_name="NameTagShowDisplayNames"
-	 enabled_control="AvatarNameTagMode"
-     height="16"
-     label="Display names"
-     left_delta="0"
-     name="show_display_names"
-	 tool_tip="Show display names, like José Sanchez"
-     top_pad="5" />
-     -->
+
    <check_box
-     control_name="NameTagShowUsernames"
+    control_name="NameTagShowFriends"
 	 enabled_control="AvatarNameTagMode"
      height="16"
-     label="Usernames"
-     left_delta="0"
-     name="show_slids"
-     tool_tip="Show username, like bobsmith123"
-     top_pad="2" />
+    label="Highlight friends"
+     layout="topleft"
+    left_pad="70"
+    name="show_friends"
+    tool_tip="Highlight the name tags of your friends"
+    top_delta="0" />
+
     <text
      type="string"
      length="1"
@@ -312,7 +306,7 @@
      layout="topleft"
      left="30"
      name="effects_color_textbox"
-     top="290"
+     top_pad="9"
      width="200">
         My effects:
     </text>
@@ -374,6 +368,17 @@
      name="item4"
      value="0" />
   </combo_box>
+  <check_box
+control_name="UseDisplayNames"
+follows="top|left"
+height="14"
+label="View Display Names"
+layout="topleft"
+left="30"
+name="display_names_check"
+width="237"
+tool_tip="Check to use display names in chat, IM, name tags, etc."
+top_pad="20"/>
     <text
      type="string"
      length="1"
@@ -383,7 +388,7 @@
      left="30"
      mouse_opaque="false"
      name="text_box3"
-     top_pad="15"
+     top_pad="10"
      width="240">
        Busy mode response:
     </text>
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_setup.xml b/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
index 850a39aeaf..140d16e37f 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
@@ -115,7 +115,7 @@
    layout="topleft"
    left="77"
    name="connection_port_enabled"
-   top_pad="15"
+   top_pad="20"
    width="256">
     <check_box.commit_callback
      function="Notification.Show"
@@ -147,7 +147,7 @@
    left="80"
    mouse_opaque="false"
    name="cache_size_label_l"
-   top_pad="10"
+   top_pad="20"
    width="200">
     Cache size
   </text>
@@ -195,7 +195,6 @@
    control_name="CacheLocationTopFolder"
    border_style="line"
    border_thickness="1"
-   enabled="false"
    follows="left|top"
    font="SansSerif"
    height="23"
@@ -387,27 +386,4 @@
    name="web_proxy_port"
    top_delta="0"
    width="145" />
-  <text
-       type="string"
-       length="1"
-       follows="left|top"
-       height="10"
-       layout="topleft"
-       left="30"
-       name="Communications:"
-       top_pad="5"
-       width="300">
-    Communications:
-  </text>
-  <check_box
-control_name="UseDisplayNames"
-follows="top|left"
-height="15"
-label="View Display Names"
-layout="topleft"
-left_delta="50"
-name="display_names_check"
-width="237"
-tool_tip="Check to use display names in chat, IM, name tags, etc."
-top_pad="10"/>
 </panel>
-- 
cgit v1.2.3


From f1335361ecf14e32eda0055a527c4a5c24e20554 Mon Sep 17 00:00:00 2001
From: Loren Shih <seraph@lindenlab.com>
Date: Tue, 12 Oct 2010 16:47:53 -0400
Subject: ECC-10 FIXED Antialiasing is broken Updated some legacy files to
 correspond to default settings.

---
 indra/newview/app_settings/high_graphics.xml  | 2 ++
 indra/newview/app_settings/low_graphics.xml   | 2 ++
 indra/newview/app_settings/mid_graphics.xml   | 2 ++
 indra/newview/app_settings/ultra_graphics.xml | 2 ++
 4 files changed, 8 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/high_graphics.xml b/indra/newview/app_settings/high_graphics.xml
index 587b2f2a89..4da2b0fd00 100644
--- a/indra/newview/app_settings/high_graphics.xml
+++ b/indra/newview/app_settings/high_graphics.xml
@@ -24,6 +24,8 @@
 	<RenderTerrainLODFactor value="2"/>
 	<!--Default for now-->
 	<RenderTreeLODFactor value="0.5"/>
+	<!--Default for now-->
+	<RenderUseFBO value="1"/>
 	<!--Try Impostors-->
 	<RenderUseImpostors value="TRUE"/>
 	<!--Default for now-->
diff --git a/indra/newview/app_settings/low_graphics.xml b/indra/newview/app_settings/low_graphics.xml
index a5bbdfc1d0..136087f69b 100644
--- a/indra/newview/app_settings/low_graphics.xml
+++ b/indra/newview/app_settings/low_graphics.xml
@@ -26,6 +26,8 @@
 	<RenderTerrainLODFactor value="1.0"/>
 	<!--Default for now-->
 	<RenderTreeLODFactor value="0.5"/>
+	<!--Default for now-->
+	<RenderUseFBO value="0"/>
 	<!--Try Impostors-->
 	<RenderUseImpostors value="TRUE"/>
 	<!--Default for now-->
diff --git a/indra/newview/app_settings/mid_graphics.xml b/indra/newview/app_settings/mid_graphics.xml
index a1430a58f9..c150a87cdf 100644
--- a/indra/newview/app_settings/mid_graphics.xml
+++ b/indra/newview/app_settings/mid_graphics.xml
@@ -24,6 +24,8 @@
 	<RenderTerrainLODFactor value="1.0"/>
 	<!--Default for now-->
 	<RenderTreeLODFactor value="0.5"/>
+	<!--Default for now-->
+	<RenderUseFBO value="0"/>
 	<!--Try Impostors-->
 	<RenderUseImpostors value="TRUE"/>
 	<!--Default for now-->
diff --git a/indra/newview/app_settings/ultra_graphics.xml b/indra/newview/app_settings/ultra_graphics.xml
index f741089ca2..e7dce3b989 100644
--- a/indra/newview/app_settings/ultra_graphics.xml
+++ b/indra/newview/app_settings/ultra_graphics.xml
@@ -24,6 +24,8 @@
 	<RenderTerrainLODFactor value="2.0"/>
 	<!--Default for now-->
 	<RenderTreeLODFactor value="1.0"/>
+	<!--Default for now-->
+	<RenderUseFBO value="1"/>
 	<!--Try Impostors-->
 	<RenderUseImpostors value="TRUE"/>
 	<!--Default for now-->
-- 
cgit v1.2.3


From 58f0e78cb491833440d85e105593bccc2d2aa4ab Mon Sep 17 00:00:00 2001
From: Dave SIMmONs <simon@lindenlab.com>
Date: Tue, 12 Oct 2010 13:50:17 -0700
Subject: Initial work on viewer motion interpolation.  Changes include: *
 InterpolationTime and InterpolationPhaseOut values in settings.xml to control
 new object interpolation code.  Use zero to revert to old logic * Viewer
 motion interpolation lasts InterpolationTime and will start to phase out
 after InterpolationPhaseOut seconds * Changed LLWorld::getMinAllowedZ() to
 take a world-position as a parameter * Added
 LLVOAvatarSelf::resetRegionCrossingTimer() * Actually reset
 LLVOAvatarSelf::mRegionCrossingTimer so we get sensible timing data for
 region crossings * LLVOAvatarSelf::updateRegion() will update position value
 due to region changes Code reviewed by Ambroff

*
---
 indra/newview/app_settings/settings.xml |  22 ++++
 indra/newview/llmaniptranslate.cpp      |   2 +-
 indra/newview/llpanelobject.cpp         |   4 +-
 indra/newview/llviewermessage.cpp       |   1 +
 indra/newview/llviewerobject.cpp        | 177 ++++++++++++++++++++++++++------
 indra/newview/llviewerobject.h          |  19 +++-
 indra/newview/llviewerobjectlist.cpp    |  19 +++-
 indra/newview/llvoavatar.cpp            |   1 +
 indra/newview/llvoavatarself.cpp        |  21 ++++
 indra/newview/llvoavatarself.h          |   2 +
 indra/newview/llworld.cpp               |   5 +-
 indra/newview/llworld.h                 |   2 +-
 12 files changed, 232 insertions(+), 43 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 742a20a849..d4dd654bbc 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -11245,6 +11245,28 @@
       <key>Value</key>
       <integer>1</integer>
     </map>
+    <key>InterpolationTime</key>
+    <map>
+      <key>Comment</key>
+      <string>How long to extrapolate object motion after last packet received</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <integer>3.0</integer>
+    </map>
+    <key>InterpolationPhaseOut</key>
+    <map>
+      <key>Comment</key>
+      <string>Seconds to phase out interpolated motion</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <integer>1.0</integer>
+    </map>
     <key>VerboseLogs</key>
     <map>
       <key>Comment</key>
diff --git a/indra/newview/llmaniptranslate.cpp b/indra/newview/llmaniptranslate.cpp
index 5eb3b789f2..f871df0c36 100644
--- a/indra/newview/llmaniptranslate.cpp
+++ b/indra/newview/llmaniptranslate.cpp
@@ -726,7 +726,7 @@ BOOL LLManipTranslate::handleHover(S32 x, S32 y, MASK mask)
 				LLVector3d new_position_global = selectNode->mSavedPositionGlobal + clamped_relative_move;
 
 				// Don't let object centers go too far underground
-				F64 min_height = LLWorld::getInstance()->getMinAllowedZ(object);
+				F64 min_height = LLWorld::getInstance()->getMinAllowedZ(object, object->getPositionGlobal());
 				if (new_position_global.mdV[VZ] < min_height)
 				{
 					new_position_global.mdV[VZ] = min_height;
diff --git a/indra/newview/llpanelobject.cpp b/indra/newview/llpanelobject.cpp
index d756a1b931..a0c320ba19 100644
--- a/indra/newview/llpanelobject.cpp
+++ b/indra/newview/llpanelobject.cpp
@@ -1695,10 +1695,10 @@ void LLPanelObject::sendPosition(BOOL btn_down)
 
 	LLVector3 newpos(mCtrlPosX->get(), mCtrlPosY->get(), mCtrlPosZ->get());
 	LLViewerRegion* regionp = mObject->getRegion();
-		
+
 	// Clamp the Z height
 	const F32 height = newpos.mV[VZ];
-	const F32 min_height = LLWorld::getInstance()->getMinAllowedZ(mObject);
+	const F32 min_height = LLWorld::getInstance()->getMinAllowedZ(mObject, mObject->getPositionGlobal());
 	const F32 max_height = LLWorld::getInstance()->getRegionMaxHeight();
 
 	if (!mObject->isAttachment())
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 26b7e0fb6d..8120c37874 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -3722,6 +3722,7 @@ void process_crossed_region(LLMessageSystem* msg, void**)
 		return;
 	}
 	LL_INFOS("Messaging") << "process_crossed_region()" << LL_ENDL;
+	gAgentAvatarp->resetRegionCrossingTimer();
 
 	U32 sim_ip;
 	msg->getIPAddrFast(_PREHASH_RegionData, _PREHASH_SimIP, sim_ip);
diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp
index fd3e80d755..63bf9a9c46 100644
--- a/indra/newview/llviewerobject.cpp
+++ b/indra/newview/llviewerobject.cpp
@@ -102,8 +102,8 @@
 
 //#define DEBUG_UPDATE_TYPE
 
-BOOL gVelocityInterpolate = TRUE;
-BOOL gPingInterpolate = TRUE; 
+BOOL		LLViewerObject::sVelocityInterpolate = TRUE;
+BOOL		LLViewerObject::sPingInterpolate = TRUE; 
 
 U32			LLViewerObject::sNumZombieObjects = 0;
 S32			LLViewerObject::sNumObjects = 0;
@@ -114,6 +114,11 @@ S32			LLViewerObject::sAxisArrowLength(50);
 BOOL		LLViewerObject::sPulseEnabled(FALSE);
 BOOL		LLViewerObject::sUseSharedDrawables(FALSE); // TRUE
 
+// sMaxUpdateInterpolationTime must be greater than sPhaseOutUpdateInterpolationTime
+F64			LLViewerObject::sMaxUpdateInterpolationTime = 3.0;		// For motion interpolation: after X seconds with no updates, don't predict object motion
+F64			LLViewerObject::sPhaseOutUpdateInterpolationTime = 2.0;	// For motion interpolation: after Y seconds with no updates, taper off motion prediction
+
+
 static LLFastTimer::DeclareTimer FTM_CREATE_OBJECT("Create Object");
 
 // static
@@ -1838,7 +1843,7 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
 
 	new_rot.normQuat();
 
-	if (gPingInterpolate)
+	if (sPingInterpolate)
 	{ 
 		LLCircuitData *cdp = gMessageSystem->mCircuitInfo.findCircuit(mesgsys->getSender());
 		if (cdp)
@@ -1859,6 +1864,8 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
 	//
 	//
 
+	// WTF?   If we're going to skip this message, why are we 
+	// doing all the parenting, etc above?
 	U32 packet_id = mesgsys->getCurrentRecvPacketID(); 
 	if (packet_id < mLatestRecvPacketID && 
 		mLatestRecvPacketID - packet_id < 65536)
@@ -1999,7 +2006,7 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
 
 //	U32 ping_delay = mesgsys->mCircuitInfo.getPingDelay();
 	mLastInterpUpdateSecs = LLFrameTimer::getElapsedSeconds();
-	mLastMessageUpdateSecs = LLFrameTimer::getElapsedSeconds();
+	mLastMessageUpdateSecs = mLastInterpUpdateSecs;
 	if (mDrawable.notNull())
 	{
 		// Don't clear invisibility flag on update if still orphaned!
@@ -2026,6 +2033,8 @@ BOOL LLViewerObject::isActive() const
 	return TRUE;
 }
 
+
+
 BOOL LLViewerObject::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
 {
 	static LLFastTimer::DeclareTimer ftm("Viewer Object");
@@ -2039,7 +2048,7 @@ BOOL LLViewerObject::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
 
 	// CRO - don't velocity interp linked objects!
 	// Leviathan - but DO velocity interp joints
-	if (!mStatic && gVelocityInterpolate && !isSelected())
+	if (!mStatic && sVelocityInterpolate && !isSelected())
 	{
 		// calculate dt from last update
 		F32 dt_raw = (F32)(time - mLastInterpUpdateSecs);
@@ -2129,33 +2138,8 @@ BOOL LLViewerObject::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
 			return TRUE;
 		}
 		else
-		{
-			// linear motion
-			// PHYSICS_TIMESTEP is used below to correct for the fact that the velocity in object
-			// updates represents the average velocity of the last timestep, rather than the final velocity.
-			// the time dilation above should guarantee that dt is never less than PHYSICS_TIMESTEP, theoretically
-			// 
-			// There is a problem here if dt is negative. . .
-
-			// *TODO: should also wrap linear accel/velocity in check
-			// to see if object is selected, instead of explicitly
-			// zeroing it out	
-			LLVector3 accel = getAcceleration();
-			LLVector3 vel 	= getVelocity();
-			
-			if (!(accel.isExactlyZero() && vel.isExactlyZero()))
-			{
-				LLVector3 pos 	= (vel + (0.5f * (dt-PHYSICS_TIMESTEP)) * accel) * dt;	
-			
-				// region local  
-				setPositionRegion(pos + getPositionRegion());
-				setVelocity(vel + accel*dt);	
-				
-				// for objects that are spinning but not translating, make sure to flag them as having moved
-				setChanged(MOVED | SILHOUETTE);
-			}
-			
-			mLastInterpUpdateSecs = time;
+		{	// Move object based on it's velocity and rotation
+			interpolateLinearMotion(time, dt);
 		}
 	}
 
@@ -2171,6 +2155,121 @@ BOOL LLViewerObject::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
 }
 
 
+// Move an object due to idle-time viewer side updates by iterpolating motion
+void LLViewerObject::interpolateLinearMotion(const F64 & time, const F32 & dt)
+{
+	// linear motion
+	// PHYSICS_TIMESTEP is used below to correct for the fact that the velocity in object
+	// updates represents the average velocity of the last timestep, rather than the final velocity.
+	// the time dilation above should guarantee that dt is never less than PHYSICS_TIMESTEP, theoretically
+	// 
+	// *TODO: should also wrap linear accel/velocity in check
+	// to see if object is selected, instead of explicitly
+	// zeroing it out	
+
+	F64 time_since_last_update = time - mLastMessageUpdateSecs;
+	if (time_since_last_update <= 0.0 || dt <= 0.f)
+	{
+		return;
+	}
+
+	LLVector3 accel = getAcceleration();
+	LLVector3 vel 	= getVelocity();
+	
+	if (sMaxUpdateInterpolationTime <= 0.0)
+	{	// Old code path ... unbounded, simple interpolation
+		if (!(accel.isExactlyZero() && vel.isExactlyZero()))
+		{
+			LLVector3 pos   = (vel + (0.5f * (dt-PHYSICS_TIMESTEP)) * accel) * dt;  
+		
+			// region local  
+			setPositionRegion(pos + getPositionRegion());
+			setVelocity(vel + accel*dt);	
+			
+			// for objects that are spinning but not translating, make sure to flag them as having moved
+			setChanged(MOVED | SILHOUETTE);
+		}
+	}
+	else if ((!accel.isExactlyZero() || !vel.isExactlyZero()) &&	// object is moving and
+		(time_since_last_update < sMaxUpdateInterpolationTime))		// we should interpolate motion
+	{	// Object is moving, and hasn't been too long since we got an update from the server
+		
+		// Calculate predicted position and velocity
+		LLVector3 new_pos = (vel + (0.5f * (dt-PHYSICS_TIMESTEP)) * accel) * dt;	
+		LLVector3 new_v = accel * dt;
+
+		if (time_since_last_update > sPhaseOutUpdateInterpolationTime)
+		{	// Start to reduce motion interpolation since we haven't seen a server update in a while
+			F64 time_since_last_interpolation = time - mLastInterpUpdateSecs;
+			F64 phase_out = 1.0;
+			if (mLastInterpUpdateSecs - mLastMessageUpdateSecs > sPhaseOutUpdateInterpolationTime)
+			{	// Last update was already phased out a bit
+				phase_out = (sMaxUpdateInterpolationTime - time_since_last_update) / 
+							(sMaxUpdateInterpolationTime - time_since_last_interpolation);
+				//llinfos << "Continuing motion phase out of " << (F32) phase_out << llendl;
+			}
+			else
+			{	// Phase out from full value
+				phase_out = (sMaxUpdateInterpolationTime - time_since_last_update) / 
+							(sMaxUpdateInterpolationTime - sPhaseOutUpdateInterpolationTime);
+				//llinfos << "Starting motion phase out of " << (F32) phase_out << llendl;
+			}
+			phase_out = llclamp(phase_out, 0.0, 1.0);
+
+			new_pos = new_pos * ((F32) phase_out);
+			new_v = new_v * ((F32) phase_out);
+		}
+
+		new_pos = new_pos + getPositionRegion();
+		new_v = new_v + vel;
+
+
+		// Clamp interpolated position to minimum underground and maximum region height
+		LLVector3d new_pos_global = mRegionp->getPosGlobalFromRegion(new_pos);
+		F32 min_height = LLWorld::getInstance()->getMinAllowedZ(this, new_pos_global);
+		new_pos.mV[VZ] = llmax(min_height, new_pos.mV[VZ]);
+		new_pos.mV[VZ] = llmin(LLWorld::getInstance()->getRegionMaxHeight(), new_pos.mV[VZ]);
+
+		// Check to see if it's going off the region
+		LLVector3 temp(new_pos);
+		if (temp.clamp(0.f, mRegionp->getWidth()))
+		{	// Going off this region, so see if we might end up on another region
+			LLVector3d old_pos_global = mRegionp->getPosGlobalFromRegion(getPositionRegion());
+			new_pos_global = mRegionp->getPosGlobalFromRegion(new_pos);		// Re-fetch in case it got clipped above
+
+			// Clip the positions to known regions
+			LLVector3d clip_pos_global = LLWorld::getInstance()->clipToVisibleRegions(old_pos_global, new_pos_global);
+			if (clip_pos_global != new_pos_global)
+			{	// Was clipped, so this means we hit a edge where there is no region to enter
+				
+				//llinfos << "Hit empty region edge, clipped predicted position to " << mRegionp->getPosRegionFromGlobal(clip_pos_global)
+				//	<< " from " << new_pos << llendl;
+				new_pos = mRegionp->getPosRegionFromGlobal(clip_pos_global);
+				
+				// Stop motion and get server update for bouncing on the edge
+				new_v.clear();
+				setAcceleration(LLVector3::zero);
+			}
+			else
+			{	// Let predicted movement cross into another region
+				//llinfos << "Predicting region crossing to " << new_pos << llendl;
+			}
+		}
+
+		// Set new position and velocity
+		setPositionRegion(new_pos);
+		setVelocity(new_v);	
+		
+		// for objects that are spinning but not translating, make sure to flag them as having moved
+		setChanged(MOVED | SILHOUETTE);
+	}		
+
+	// Update the last time we did anything
+	mLastInterpUpdateSecs = time;
+}
+
+
+
 BOOL LLViewerObject::setData(const U8 *datap, const U32 data_size)
 {
 	LLMemType mt(LLMemType::MTYPE_OBJECT);
@@ -4971,6 +5070,20 @@ void LLViewerObject::setRegion(LLViewerRegion *regionp)
 	updateDrawable(FALSE);
 }
 
+// virtual
+void	LLViewerObject::updateRegion(LLViewerRegion *regionp)
+{
+//	if (regionp)
+//	{
+//		F64 now = LLFrameTimer::getElapsedSeconds();
+//		llinfos << "Updating to region " << regionp->getName()
+//			<< ", ms since last update message: " << (F32)((now - mLastMessageUpdateSecs) * 1000.0)
+//			<< ", ms since last interpolation: " << (F32)((now - mLastInterpUpdateSecs) * 1000.0) 
+//			<< llendl;
+//	}
+}
+
+
 bool LLViewerObject::specialHoverCursor() const
 {
 	return (mFlags & FLAGS_USE_PHYSICS)
diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h
index bcc2cb164f..77c34101ba 100644
--- a/indra/newview/llviewerobject.h
+++ b/indra/newview/llviewerobject.h
@@ -464,7 +464,7 @@ public:
 	bool specialHoverCursor() const;	// does it have a special hover cursor?
 
 	void			setRegion(LLViewerRegion *regionp);
-	virtual void	updateRegion(LLViewerRegion *regionp) {}
+	virtual void	updateRegion(LLViewerRegion *regionp);
 
 	void updateFlags();
 	BOOL setFlags(U32 flag, BOOL state);
@@ -510,6 +510,9 @@ private:
     // and the update wasn't due to this agent's last action.
     U32 checkMediaURL(const std::string &media_url);
 	
+	// Motion prediction between updates
+	void interpolateLinearMotion(const F64 & time, const F32 & dt);
+
 public:
 	//
 	// Viewer-side only types - use the LL_PCODE_APP mask.
@@ -669,9 +672,21 @@ protected:
 	mutable LLVector3		mPositionRegion;
 	mutable LLVector3		mPositionAgent;
 
+	static void setPhaseOutUpdateInterpolationTime(F32 value)	{ sPhaseOutUpdateInterpolationTime = (F64) value;	}
+	static void setMaxUpdateInterpolationTime(F32 value)		{ sMaxUpdateInterpolationTime = (F64) value;	}
+
+	static void	setVelocityInterpolate(BOOL value)		{ sVelocityInterpolate = value;	}
+	static void	setPingInterpolate(BOOL value)			{ sPingInterpolate = value;	}
+
 private:	
 	static S32 sNumObjects;
 
+	static F64 sPhaseOutUpdateInterpolationTime;	// For motion interpolation
+	static F64 sMaxUpdateInterpolationTime;			// For motion interpolation
+
+	static BOOL sVelocityInterpolate;
+	static BOOL sPingInterpolate;
+
 	//--------------------------------------------------------------------
 	// For objects that are attachments
 	//--------------------------------------------------------------------
@@ -742,7 +757,5 @@ public:
 	virtual void updateDrawable(BOOL force_damped);
 };
 
-extern BOOL gVelocityInterpolate;
-extern BOOL gPingInterpolate;
 
 #endif
diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp
index 05695193a5..fa9e51c152 100644
--- a/indra/newview/llviewerobjectlist.cpp
+++ b/indra/newview/llviewerobjectlist.cpp
@@ -654,9 +654,24 @@ void LLViewerObjectList::updateApparentAngles(LLAgent &agent)
 void LLViewerObjectList::update(LLAgent &agent, LLWorld &world)
 {
 	LLMemType mt(LLMemType::MTYPE_OBJECT);
+
 	// Update globals
-	gVelocityInterpolate = gSavedSettings.getBOOL("VelocityInterpolate");
-	gPingInterpolate = gSavedSettings.getBOOL("PingInterpolate");
+	LLViewerObject::setVelocityInterpolate( gSavedSettings.getBOOL("VelocityInterpolate") );
+	LLViewerObject::setPingInterpolate( gSavedSettings.getBOOL("PingInterpolate") );
+	
+	F32 interp_time = gSavedSettings.getF32("InterpolationTime");
+	F32 phase_out_time = gSavedSettings.getF32("InterpolationPhaseOut");
+	if (interp_time < 0.0 || 
+		phase_out_time < 0.0 ||
+		phase_out_time > interp_time)
+	{
+		llwarns << "Invalid values for InterpolationTime or InterpolationPhaseOut, resetting to defaults" << llendl;
+		interp_time = 3.0f;
+		phase_out_time = 1.0f;
+	}
+	LLViewerObject::setPhaseOutUpdateInterpolationTime( interp_time );
+	LLViewerObject::setMaxUpdateInterpolationTime( phase_out_time );
+
 	gAnimateTextures = gSavedSettings.getBOOL("AnimateTextures");
 
 	// update global timer
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index c31714de5a..119380f759 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -7727,6 +7727,7 @@ BOOL LLVOAvatar::LLVOAvatarXmlInfo::parseXmlMorphNodes(LLXmlTreeNode* root)
 //virtual
 void LLVOAvatar::updateRegion(LLViewerRegion *regionp)
 {
+	LLViewerObject::updateRegion(regionp);
 }
 
 std::string LLVOAvatar::getFullname() const
diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp
index e5cbf65682..0250627d1b 100644
--- a/indra/newview/llvoavatarself.cpp
+++ b/indra/newview/llvoavatarself.cpp
@@ -806,7 +806,24 @@ void LLVOAvatarSelf::removeMissingBakedTextures()
 //virtual
 void LLVOAvatarSelf::updateRegion(LLViewerRegion *regionp)
 {
+	// Save the global position
+	LLVector3d global_pos_from_old_region = getPositionGlobal();
+
+	// Change the region
 	setRegion(regionp);
+
+	if (regionp)
+	{	// Set correct region-relative position from global coordinates
+		setPositionGlobal(global_pos_from_old_region);
+
+		// Diagnostic info
+		//LLVector3d pos_from_new_region = getPositionGlobal();
+		//llinfos << "pos_from_old_region is " << global_pos_from_old_region
+		//	<< " while pos_from_new_region is " << pos_from_new_region
+		//	<< llendl;
+	}
+
+
 	if (!regionp || (regionp->getHandle() != mLastRegionHandle))
 	{
 		if (mLastRegionHandle != 0)
@@ -820,6 +837,9 @@ void LLVOAvatarSelf::updateRegion(LLViewerRegion *regionp)
 			F64 max = (mRegionCrossingCount == 1) ? 0 : LLViewerStats::getInstance()->getStat(LLViewerStats::ST_CROSSING_MAX);
 			max = llmax(delta, max);
 			LLViewerStats::getInstance()->setStat(LLViewerStats::ST_CROSSING_MAX, max);
+
+			// Diagnostics
+			llinfos << "Region crossing took " << (F32)(delta * 1000.0) << " ms " << llendl;
 		}
 		if (regionp)
 		{
@@ -827,6 +847,7 @@ void LLVOAvatarSelf::updateRegion(LLViewerRegion *regionp)
 		}
 	}
 	mRegionCrossingTimer.reset();
+	LLViewerObject::updateRegion(regionp);
 }
 
 //--------------------------------------------------------------------
diff --git a/indra/newview/llvoavatarself.h b/indra/newview/llvoavatarself.h
index 23a799ea3a..d13cf5ba38 100644
--- a/indra/newview/llvoavatarself.h
+++ b/indra/newview/llvoavatarself.h
@@ -123,6 +123,8 @@ public:
 	//--------------------------------------------------------------------
 	// Region state
 	//--------------------------------------------------------------------
+	void			resetRegionCrossingTimer()	{ mRegionCrossingTimer.reset();	}
+
 private:
 	U64				mLastRegionHandle;
 	LLFrameTimer	mRegionCrossingTimer;
diff --git a/indra/newview/llworld.cpp b/indra/newview/llworld.cpp
index 5760d04a08..2793a33401 100644
--- a/indra/newview/llworld.cpp
+++ b/indra/newview/llworld.cpp
@@ -423,14 +423,15 @@ BOOL LLWorld::positionRegionValidGlobal(const LLVector3d &pos_global)
 
 
 // Allow objects to go up to their radius underground.
-F32 LLWorld::getMinAllowedZ(LLViewerObject* object)
+F32 LLWorld::getMinAllowedZ(LLViewerObject* object, const LLVector3d &global_pos)
 {
-	F32 land_height = resolveLandHeightGlobal(object->getPositionGlobal());
+	F32 land_height = resolveLandHeightGlobal(global_pos);
 	F32 radius = 0.5f * object->getScale().length();
 	return land_height - radius;
 }
 
 
+
 LLViewerRegion* LLWorld::resolveRegionGlobal(LLVector3 &pos_region, const LLVector3d &pos_global)
 {
 	LLViewerRegion *regionp = getRegionFromPosGlobal(pos_global);
diff --git a/indra/newview/llworld.h b/indra/newview/llworld.h
index 4465fde210..d4f4d8d8df 100644
--- a/indra/newview/llworld.h
+++ b/indra/newview/llworld.h
@@ -89,7 +89,7 @@ public:
 
 	// Return the lowest allowed Z point to prevent objects from being moved
 	// underground.
-	F32 getMinAllowedZ(LLViewerObject* object);
+	F32 getMinAllowedZ(LLViewerObject* object, const LLVector3d &global_pos);
 
 	// takes a line segment defined by point_a and point_b, then
 	// determines the closest (to point_a) point of intersection that is
-- 
cgit v1.2.3


From 7b2b23c2b0e39564c8661894b5d847ce6337d207 Mon Sep 17 00:00:00 2001
From: Loren Shih <seraph@lindenlab.com>
Date: Tue, 12 Oct 2010 17:05:36 -0400
Subject: SH-319 FIXED Anti-aliasing enable/disable not preserved correctly
 when cancel out of preferences Added RenderUseFBO to list of parameters to be
 restored upon preference dialog cancel.

---
 indra/newview/llfloaterhardwaresettings.cpp | 3 +++
 indra/newview/llfloaterhardwaresettings.h   | 1 +
 2 files changed, 4 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloaterhardwaresettings.cpp b/indra/newview/llfloaterhardwaresettings.cpp
index 0e89ca966a..c6e5126ab1 100644
--- a/indra/newview/llfloaterhardwaresettings.cpp
+++ b/indra/newview/llfloaterhardwaresettings.cpp
@@ -50,6 +50,7 @@ LLFloaterHardwareSettings::LLFloaterHardwareSettings(const LLSD& key)
 	  // but init them anyway
 	  mUseVBO(0),
 	  mUseAniso(0),
+	  mUseFBO(0),
 	  mFSAASamples(0),
 	  mGamma(0.0),
 	  mVideoCardMem(0),
@@ -75,6 +76,7 @@ void LLFloaterHardwareSettings::refresh()
 
 	mUseVBO = gSavedSettings.getBOOL("RenderVBOEnable");
 	mUseAniso = gSavedSettings.getBOOL("RenderAnisotropic");
+	mUseFBO = gSavedSettings.getBOOL("RenderUseFBO");
 	mFSAASamples = gSavedSettings.getU32("RenderFSAASamples");
 	mGamma = gSavedSettings.getF32("RenderGamma");
 	mVideoCardMem = gSavedSettings.getS32("TextureMemory");
@@ -160,6 +162,7 @@ void LLFloaterHardwareSettings::cancel()
 {
 	gSavedSettings.setBOOL("RenderVBOEnable", mUseVBO);
 	gSavedSettings.setBOOL("RenderAnisotropic", mUseAniso);
+	gSavedSettings.setBOOL("RenderUseFBO", mUseFBO);
 	gSavedSettings.setU32("RenderFSAASamples", mFSAASamples);
 	gSavedSettings.setF32("RenderGamma", mGamma);
 	gSavedSettings.setS32("TextureMemory", mVideoCardMem);
diff --git a/indra/newview/llfloaterhardwaresettings.h b/indra/newview/llfloaterhardwaresettings.h
index f59b77b17f..626771b1d2 100644
--- a/indra/newview/llfloaterhardwaresettings.h
+++ b/indra/newview/llfloaterhardwaresettings.h
@@ -70,6 +70,7 @@ public:
 protected:
 	BOOL mUseVBO;
 	BOOL mUseAniso;
+	BOOL mUseFBO;
 	U32 mFSAASamples;
 	F32 mGamma;
 	S32 mVideoCardMem;
-- 
cgit v1.2.3


From aae37202f1ed591f3c453c96e3774c4efb2608dc Mon Sep 17 00:00:00 2001
From: Loren Shih <seraph@lindenlab.com>
Date: Tue, 12 Oct 2010 17:31:18 -0400
Subject: ECC-10 FIXED Antialiasing is broken Updated default RenderUseFBO
 setting to "TRUE" in settings.xml.

---
 indra/newview/app_settings/settings.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 2a0e23b1dc..0342072b3d 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -8228,7 +8228,7 @@
       <key>Type</key>
       <string>Boolean</string>
       <key>Value</key>
-      <integer>0</integer>
+      <integer>1</integer>
     </map>
   <key>RenderUseTriStrips</key>
   <map>
-- 
cgit v1.2.3


From d5d4a065275d1db1093111222f29942ee171f81c Mon Sep 17 00:00:00 2001
From: Dave SIMmONs <simon@lindenlab.com>
Date: Tue, 12 Oct 2010 17:15:29 -0700
Subject: Adjust viewer object interpolation code so that tapering off only
 occurs if the simulator stops sending data.  Reviewed by Ambroff

---
 indra/newview/llviewerobject.cpp | 65 +++++++++++++++++++++++++++-------------
 indra/newview/llviewerobject.h   |  2 ++
 2 files changed, 47 insertions(+), 20 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp
index 63bf9a9c46..c54d47ece6 100644
--- a/indra/newview/llviewerobject.cpp
+++ b/indra/newview/llviewerobject.cpp
@@ -207,6 +207,7 @@ LLViewerObject::LLViewerObject(const LLUUID &id, const LLPCode pcode, LLViewerRe
 	mLastInterpUpdateSecs(0.f),
 	mLastMessageUpdateSecs(0.f),
 	mLatestRecvPacketID(0),
+	mCircuitPacketCount(0),
 	mData(NULL),
 	mAudioSourcep(NULL),
 	mAudioGain(1.f),
@@ -1875,6 +1876,7 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
 	}
 
 	mLatestRecvPacketID = packet_id;
+	mCircuitPacketCount = 0;
 
 	// Set the change flags for scale
 	if (new_scale != getScale())
@@ -2190,8 +2192,7 @@ void LLViewerObject::interpolateLinearMotion(const F64 & time, const F32 & dt)
 			setChanged(MOVED | SILHOUETTE);
 		}
 	}
-	else if ((!accel.isExactlyZero() || !vel.isExactlyZero()) &&	// object is moving and
-		(time_since_last_update < sMaxUpdateInterpolationTime))		// we should interpolate motion
+	else if (!accel.isExactlyZero() || !vel.isExactlyZero())		// object is moving
 	{	// Object is moving, and hasn't been too long since we got an update from the server
 		
 		// Calculate predicted position and velocity
@@ -2199,25 +2200,48 @@ void LLViewerObject::interpolateLinearMotion(const F64 & time, const F32 & dt)
 		LLVector3 new_v = accel * dt;
 
 		if (time_since_last_update > sPhaseOutUpdateInterpolationTime)
-		{	// Start to reduce motion interpolation since we haven't seen a server update in a while
-			F64 time_since_last_interpolation = time - mLastInterpUpdateSecs;
-			F64 phase_out = 1.0;
-			if (mLastInterpUpdateSecs - mLastMessageUpdateSecs > sPhaseOutUpdateInterpolationTime)
-			{	// Last update was already phased out a bit
-				phase_out = (sMaxUpdateInterpolationTime - time_since_last_update) / 
-							(sMaxUpdateInterpolationTime - time_since_last_interpolation);
-				//llinfos << "Continuing motion phase out of " << (F32) phase_out << llendl;
-			}
-			else
-			{	// Phase out from full value
-				phase_out = (sMaxUpdateInterpolationTime - time_since_last_update) / 
-							(sMaxUpdateInterpolationTime - sPhaseOutUpdateInterpolationTime);
-				//llinfos << "Starting motion phase out of " << (F32) phase_out << llendl;
-			}
-			phase_out = llclamp(phase_out, 0.0, 1.0);
+		{	// Haven't seen a viewer update in a while, check to see if the ciruit is still active
+			if (mRegionp)
+			{	// The simulator will NOT send updates if the object continues normally on the path
+				// predicted by the velocity and the acceleration (often gravity) sent to the viewer
+				// So check to see if the circuit is blocked, which means the sim is likely in a long lag
+				LLCircuitData *cdp = gMessageSystem->mCircuitInfo.findCircuit( mRegionp->getHost() );
+				if (cdp)
+				{
+					if (!cdp->isAlive() ||		// Circuit is dead or blocked
+						 cdp->isBlocked() ||	// or doesn't seem to be getting any packets
+						 (mCircuitPacketCount > 0 && mCircuitPacketCount == cdp->getPacketsIn()))
+					{
+						// Start to reduce motion interpolation since we haven't seen a server update in a while
+						F64 time_since_last_interpolation = time - mLastInterpUpdateSecs;
+						F64 phase_out = 1.0;
+						if (time_since_last_update > sMaxUpdateInterpolationTime)
+						{	// Past the time limit, so stop the object
+							phase_out = 0.0;
+							//llinfos << "Motion phase out to zero" << llendl;
+						}
+						else if (mLastInterpUpdateSecs - mLastMessageUpdateSecs > sPhaseOutUpdateInterpolationTime)
+						{	// Last update was already phased out a bit
+							phase_out = (sMaxUpdateInterpolationTime - time_since_last_update) / 
+										(sMaxUpdateInterpolationTime - time_since_last_interpolation);
+							//llinfos << "Continuing motion phase out of " << (F32) phase_out << llendl;
+						}
+						else
+						{	// Phase out from full value
+							phase_out = (sMaxUpdateInterpolationTime - time_since_last_update) / 
+										(sMaxUpdateInterpolationTime - sPhaseOutUpdateInterpolationTime);
+							//llinfos << "Starting motion phase out of " << (F32) phase_out << llendl;
+						}
+						phase_out = llclamp(phase_out, 0.0, 1.0);
+
+						new_pos = new_pos * ((F32) phase_out);
+						new_v = new_v * ((F32) phase_out);
+					}
 
-			new_pos = new_pos * ((F32) phase_out);
-			new_v = new_v * ((F32) phase_out);
+					// Save current circuit packet count to see if it changes 
+					mCircuitPacketCount = cdp->getPacketsIn();
+				}
+			}
 		}
 
 		new_pos = new_pos + getPositionRegion();
@@ -5058,6 +5082,7 @@ void LLViewerObject::setRegion(LLViewerRegion *regionp)
 	}
 	
 	mLatestRecvPacketID = 0;
+	mCircuitPacketCount = 0;
 	mRegionp = regionp;
 
 	for (child_list_t::iterator i = mChildList.begin(); i != mChildList.end(); ++i)
diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h
index 77c34101ba..0cba4e05f9 100644
--- a/indra/newview/llviewerobject.h
+++ b/indra/newview/llviewerobject.h
@@ -615,6 +615,8 @@ protected:
 	F64				mLastInterpUpdateSecs;			// Last update for purposes of interpolation
 	F64				mLastMessageUpdateSecs;			// Last update from a message from the simulator
 	TPACKETID		mLatestRecvPacketID;			// Latest time stamp on message from simulator
+	U32				mCircuitPacketCount;			// Packet tracking for early detection of a stopped simulator circuit
+
 	// extra data sent from the sim...currently only used for tree species info
 	U8* mData;
 
-- 
cgit v1.2.3


From 17a04f8231a0787a7e72c7b3ad5cf37b08a466d0 Mon Sep 17 00:00:00 2001
From: Roxie Linden <roxie@lindenlab.com>
Date: Tue, 12 Oct 2010 17:49:36 -0700
Subject: EVE-47 - Event formatting should appear in "Profile" window   EVE-74
 - Change in-viewer support for 'notify me' to be maintainable via app slurl  
 EVE-72 - Modify viewer to make the event profile window be an html control

This is basically a reworking of the event profile display to remove all in-viewer
specific event display rendering, in preparation for richtext descriptions.
Most was removal of code.
---
 indra/newview/CMakeLists.txt                       |   2 -
 indra/newview/app_settings/settings.xml            |  11 +
 indra/newview/lleventinfo.cpp                      |  98 ------
 indra/newview/lleventinfo.h                        |  74 -----
 indra/newview/lleventnotifier.cpp                  | 336 +++++++++------------
 indra/newview/lleventnotifier.h                    |  29 +-
 indra/newview/llfloaterevent.cpp                   | 291 ++----------------
 indra/newview/llfloaterevent.h                     |  46 +--
 indra/newview/llfloaterworldmap.h                  |   1 -
 indra/newview/llstartup.cpp                        |  11 +-
 .../newview/skins/default/xui/da/floater_event.xml | 107 +++----
 .../newview/skins/default/xui/da/notifications.xml |   3 +-
 .../newview/skins/default/xui/de/floater_event.xml | 104 +++----
 .../newview/skins/default/xui/de/notifications.xml |   3 +-
 .../newview/skins/default/xui/en/floater_event.xml | 330 ++------------------
 .../newview/skins/default/xui/en/notifications.xml |   8 +-
 .../newview/skins/default/xui/es/floater_event.xml | 107 +++----
 .../newview/skins/default/xui/es/notifications.xml |   3 +-
 .../newview/skins/default/xui/fr/floater_event.xml | 104 +++----
 .../newview/skins/default/xui/fr/notifications.xml |   3 +-
 .../newview/skins/default/xui/it/floater_event.xml | 107 +++----
 .../newview/skins/default/xui/it/notifications.xml |   3 +-
 .../newview/skins/default/xui/ja/floater_event.xml | 104 +++----
 .../newview/skins/default/xui/ja/notifications.xml |   3 +-
 .../newview/skins/default/xui/nl/notifications.xml |   3 +-
 .../newview/skins/default/xui/pl/floater_event.xml | 107 +++----
 .../newview/skins/default/xui/pl/notifications.xml |   3 +-
 .../newview/skins/default/xui/pt/floater_event.xml | 107 +++----
 .../newview/skins/default/xui/pt/notifications.xml |   3 +-
 29 files changed, 555 insertions(+), 1556 deletions(-)
 delete mode 100644 indra/newview/lleventinfo.cpp
 delete mode 100644 indra/newview/lleventinfo.h

(limited to 'indra/newview')

diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index d685e6ae36..e15cc368e6 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -139,7 +139,6 @@ set(viewer_SOURCE_FILES
     lldriverparam.cpp
     lldynamictexture.cpp
     llemote.cpp
-    lleventinfo.cpp
     lleventnotifier.cpp
     lleventpoll.cpp
     llexpandabletextbox.cpp
@@ -667,7 +666,6 @@ set(viewer_HEADER_FILES
     lldriverparam.h
     lldynamictexture.h
     llemote.h
-    lleventinfo.h
     lleventnotifier.h
     lleventpoll.h
     llexpandabletextbox.h
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 0bed37b96a..a3c43cb21a 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -2875,6 +2875,17 @@
       <key>Value</key>
       <integer>175</integer>
     </map>
+    <key>EventURL</key>
+    <map>
+      <key>Comment</key>
+      <string>URL for Event website, displayed in the event floater</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>http://search.secondlife.com/viewer/embed/event/</string>
+    </map>
     <key>EveryoneCopy</key>
       <map>
         <key>Comment</key>
diff --git a/indra/newview/lleventinfo.cpp b/indra/newview/lleventinfo.cpp
deleted file mode 100644
index b7b4e10b17..0000000000
--- a/indra/newview/lleventinfo.cpp
+++ /dev/null
@@ -1,98 +0,0 @@
-/** 
- * @file lleventinfo.cpp
- * @brief LLEventInfo class implementation
- *
- * $LicenseInfo:firstyear=2004&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- * 
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- * 
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
- * $/LicenseInfo$
- */
-
-#include "llviewerprecompiledheaders.h"
-#include "lleventinfo.h"
-
-#include "lluuid.h"
-#include "message.h"
-
-LLEventInfo::cat_map LLEventInfo::sCategories;
-
-void LLEventInfo::unpack(LLMessageSystem *msg)
-{
-	U32 event_id;
-	msg->getU32("EventData", "EventID", event_id);
-	mID = event_id;
-
-	msg->getString("EventData", "Name", mName);
-
-	msg->getString("EventData", "Category", mCategoryStr);
-
-	msg->getString("EventData", "Date", mTimeStr);
-
-	U32 duration;
-	msg->getU32("EventData","Duration",duration);
-	mDuration = duration;
-
-	U32 date;
-	msg->getU32("EventData", "DateUTC", date);
-	mUnixTime = date;
-
-	msg->getString("EventData", "Desc", mDesc);
-
-	std::string buffer;
-	msg->getString("EventData", "Creator", buffer);
-	mRunByID = LLUUID(buffer);
-
-	U32 foo;
-	msg->getU32("EventData", "Cover", foo);
-
-	mHasCover = foo ? TRUE : FALSE;
-	if (mHasCover)
-	{
-		U32 cover;
-		msg->getU32("EventData", "Amount", cover);
-		mCover = cover;
-	}
-
-	msg->getString("EventData", "SimName", mSimName);
-
-	msg->getVector3d("EventData", "GlobalPos", mPosGlobal);
-
-	// Mature content
-	U32 event_flags;
-	msg->getU32("EventData", "EventFlags", event_flags);
-	mEventFlags = event_flags;
-}
-
-// static
-void LLEventInfo::loadCategories(const LLSD& options)
-{
-	for(LLSD::array_const_iterator resp_it = options.beginArray(),
-		end = options.endArray(); resp_it != end; ++resp_it)
-	{
-		LLSD name = (*resp_it)["category_name"];
-		if(name.isDefined())
-		{
-			LLSD id = (*resp_it)["category_id"];
-			if(id.isDefined())
-			{
-				LLEventInfo::sCategories[id.asInteger()] = name.asString();
-			}
-		}
-	}
-}
diff --git a/indra/newview/lleventinfo.h b/indra/newview/lleventinfo.h
deleted file mode 100644
index 958a276fbf..0000000000
--- a/indra/newview/lleventinfo.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/** 
- * @file lleventinfo.h
- * @brief LLEventInfo class definition
- *
- * $LicenseInfo:firstyear=2004&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- * 
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- * 
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
- * $/LicenseInfo$
- */
-
-#ifndef LL_LLEVENTINFO_H
-#define LL_LLEVENTINFO_H
-
-#include <map>
-
-#include "v3dmath.h"
-#include "lluuid.h"
-
-class LLMessageSystem;
-
-class LLEventInfo
-{
-public:
-        LLEventInfo() :
-	mID(0),
-	mDuration(0),
-	mUnixTime(0),
-	mHasCover(FALSE),
-	mCover(0),
-	mEventFlags(0),
-	mSelected(FALSE)
-	{}
-
-	void unpack(LLMessageSystem *msg);
-
-	static void loadCategories(const LLSD& options);
-
-public:
-	std::string mName;
-	U32			mID;
-	std::string mDesc;
-	std::string mCategoryStr;
-	U32			mDuration;
-	std::string	mTimeStr;
-	LLUUID		mRunByID;
-	std::string	mSimName;
-	LLVector3d	mPosGlobal;
-	time_t		mUnixTime; // seconds from 1970
-	BOOL		mHasCover;
-	U32			mCover;
-	U32			mEventFlags;
-	BOOL		mSelected;
-
-	typedef std::map<U32, std::string> cat_map;
-	static	cat_map sCategories;
-};
-
-#endif // LL_LLEVENTINFO_H
diff --git a/indra/newview/lleventnotifier.cpp b/indra/newview/lleventnotifier.cpp
index 68559a4236..bedab75f98 100644
--- a/indra/newview/lleventnotifier.cpp
+++ b/indra/newview/lleventnotifier.cpp
@@ -31,10 +31,63 @@
 #include "llnotificationsutil.h"
 #include "message.h"
 
-#include "lleventinfo.h"
 #include "llfloaterreg.h"
 #include "llfloaterworldmap.h"
+#include "llfloaterevent.h"
 #include "llagent.h"
+#include "llcommandhandler.h"	// secondlife:///app/... support
+
+class LLEventHandler : public LLCommandHandler
+{
+public:
+	// requires trusted browser to trigger
+	LLEventHandler() : LLCommandHandler("event", UNTRUSTED_THROTTLE) { }
+	bool handle(const LLSD& params, const LLSD& query_map,
+				LLMediaCtrl* web)
+	{
+		if (params.size() < 2)
+		{
+			return false;
+		}
+		std::string event_command = params[1].asString();
+		S32 event_id = params[0].asInteger();
+		if(event_command == "details")
+		{
+			LLFloaterEvent* floater = LLFloaterReg::getTypedInstance<LLFloaterEvent>("event");
+			if (floater)
+			{
+				floater->setEventID(event_id);
+				LLFloaterReg::showTypedInstance<LLFloaterEvent>("event");
+				return true;
+			}
+		}
+		else if(event_command == "notify")
+		{
+			// we're adding or removing a notification, so grab the date, name and notification bool
+			if (params.size() < 3)
+			{
+				return false;
+			}			
+			if(params[2].asString() == "enable")
+			{
+				gEventNotifier.add(event_id);
+				// tell the server to modify the database as this was a slurl event notification command
+				gEventNotifier.serverPushRequest(event_id, true);
+			
+			}
+			else
+			{
+				gEventNotifier.remove(event_id);
+			}
+			return true;
+		}
+
+		
+		return false;
+	}
+};
+LLEventHandler gEventHandler;
+
 
 LLEventNotifier gEventNotifier;
 
@@ -63,31 +116,102 @@ void LLEventNotifier::update()
 		// Check our notifications again and send out updates
 		// if they happen.
 
-		time_t alert_time = time_corrected() + 5 * 60;
+		F64 alert_time = LLDate::now().secondsSinceEpoch() + 5 * 60;
 		en_map::iterator iter;
 		for (iter = mEventNotifications.begin();
 			 iter != mEventNotifications.end();)
 		{
 			LLEventNotification *np = iter->second;
 
-			if (np->getEventDate() < (alert_time))
+			iter++;
+			if (np->getEventDateEpoch() < alert_time)
 			{
 				LLSD args;
 				args["NAME"] = np->getEventName();
+				
 				args["DATE"] = np->getEventDateStr();
 				LLNotificationsUtil::add("EventNotification", args, LLSD(),
-					boost::bind(&LLEventNotification::handleResponse, np, _1, _2));
-				mEventNotifications.erase(iter++);
+					boost::bind(&LLEventNotifier::handleResponse, this, np->getEventID(), _1, _2));
+				remove(np->getEventID());
+				
 			}
-			else
+		}
+		mNotificationTimer.reset();
+	}
+}
+
+
+
+bool LLEventNotifier::handleResponse(U32 eventId, const LLSD& notification, const LLSD& response)
+{
+	S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+	switch (option)
+	{
+		case 0:
+		{
+			LLFloaterEvent* floater = LLFloaterReg::getTypedInstance<LLFloaterEvent>("event");
+			if (floater)
 			{
-				iter++;
+				floater->setEventID(eventId);
+				LLFloaterReg::showTypedInstance<LLFloaterEvent>("event");
 			}
+			break;
 		}
-		mNotificationTimer.reset();
+		case 1:
+			break;
 	}
+	return true;
 }
 
+bool LLEventNotifier::add(U32 eventId, F64 eventEpoch, const std::string& eventDateStr, const std::string &eventName)
+{
+	LLEventNotification *new_enp = new LLEventNotification(eventId, eventEpoch, eventDateStr, eventName);
+	
+	llinfos << "Add event " << eventName << " id " << eventId << " date " << eventDateStr << llendl;
+	if(!new_enp->isValid())
+	{
+		delete new_enp;
+		return false;
+	}
+	
+	mEventNotifications[new_enp->getEventID()] = new_enp;
+	return true;
+	
+}
+
+void LLEventNotifier::add(U32 eventId)
+{
+	
+	gMessageSystem->newMessageFast(_PREHASH_EventInfoRequest);
+	gMessageSystem->nextBlockFast(_PREHASH_AgentData);
+	gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() );
+	gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID() );
+	gMessageSystem->nextBlockFast(_PREHASH_EventData);
+	gMessageSystem->addU32Fast(_PREHASH_EventID, eventId);
+	gAgent.sendReliableMessage();
+
+}
+
+//static 
+void LLEventNotifier::processEventInfoReply(LLMessageSystem *msg, void **)
+{
+	// extract the agent id
+	LLUUID agent_id;
+	U32 event_id;
+	std::string event_name;
+	std::string eventd_date;
+	U32 event_time_utc;
+	
+	msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id );
+	msg->getU32("EventData", "EventID", event_id);
+	msg->getString("EventData", "Name", event_name);
+	msg->getString("EventData", "Date", eventd_date);
+	msg->getU32("EventData", "DateUTC", event_time_utc);
+	
+	gEventNotifier.add(event_id, (F64)event_time_utc, eventd_date, event_name);
+}	
+	
+	
 void LLEventNotifier::load(const LLSD& event_options)
 {
 	for(LLSD::array_const_iterator resp_it = event_options.beginArray(),
@@ -95,15 +219,7 @@ void LLEventNotifier::load(const LLSD& event_options)
 	{
 		LLSD response = *resp_it;
 
-		LLEventNotification *new_enp = new LLEventNotification();
-
-		if(!new_enp->load(response))
-		{
-			delete new_enp;
-			continue;
-		}
-		
-		mEventNotifications[new_enp->getEventID()] = new_enp;
+		add(response["event_id"].asInteger(), response["event_date_ut"], response["event_date"].asString(), response["event_name"].asString());
 	}
 }
 
@@ -117,32 +233,6 @@ BOOL LLEventNotifier::hasNotification(const U32 event_id)
 	return FALSE;
 }
 
-
-void LLEventNotifier::add(LLEventInfo &event_info)
-{
-	// We need to tell the simulator that we want to pay attention to
-	// this event, as well as add it to our list.
-
-	if (mEventNotifications.find(event_info.mID) != mEventNotifications.end())
-	{
-		// We already have a notification for this event, don't bother.
-		return;
-	}
-
-	// Push up a message to tell the server we have this notification.
-	gMessageSystem->newMessage("EventNotificationAddRequest");
-	gMessageSystem->nextBlockFast(_PREHASH_AgentData);
-	gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() );
-	gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-	gMessageSystem->nextBlock("EventData");
-	gMessageSystem->addU32("EventID", event_info.mID);
-	gAgent.sendReliableMessage();
-
-	LLEventNotification *enp = new LLEventNotification;
-	enp->load(event_info);
-	mEventNotifications[event_info.mID] = enp;
-}
-
 void LLEventNotifier::remove(const U32 event_id)
 {
 	en_map::iterator iter;
@@ -153,164 +243,36 @@ void LLEventNotifier::remove(const U32 event_id)
 		return;
 	}
 
-	// Push up a message to tell the server to remove this notification.
-	gMessageSystem->newMessage("EventNotificationRemoveRequest");
+	serverPushRequest(event_id, false);
+	delete iter->second;
+	mEventNotifications.erase(iter);
+}
+
+
+void LLEventNotifier::serverPushRequest(U32 event_id, bool add)
+{
+	// Push up a message to tell the server we have this notification.
+	gMessageSystem->newMessage(add?"EventNotificationAddRequest":"EventNotificationRemoveRequest");
 	gMessageSystem->nextBlockFast(_PREHASH_AgentData);
 	gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() );
 	gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
 	gMessageSystem->nextBlock("EventData");
 	gMessageSystem->addU32("EventID", event_id);
 	gAgent.sendReliableMessage();
-	
-	delete iter->second;
-	mEventNotifications.erase(iter);
-}
-
-LLEventNotification::LLEventNotification() :
-	mEventID(0),
-	mEventDate(0),
-	mEventName("")
-{
 }
 
 
-LLEventNotification::~LLEventNotification()
+LLEventNotification::LLEventNotification(U32 eventId, F64 eventEpoch, const std::string& eventDateStr, const std::string &eventName) :
+	mEventID(eventId),
+	mEventName(eventName),
+	mEventDateEpoch(eventEpoch),
+    mEventDateStr(eventDateStr)
 {
+	
 }
 
-bool LLEventNotification::handleResponse(const LLSD& notification, const LLSD& response)
-{
-	S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
-	switch (option)
-	{
-	case 0:
-		{
-			gAgent.teleportViaLocation(getEventPosGlobal());
-			LLFloaterWorldMap* floater_world_map = LLFloaterWorldMap::getInstance();
-			if(floater_world_map) floater_world_map->trackLocation(getEventPosGlobal());
-			break;
-		}
-	case 1:
-		LLFloaterReg::showInstance("search", LLSD().with("category", "events").with("id", S32(getEventID())));
-		break;
-	case 2:
-		break;
-	}
 
-	// We could clean up the notification on the server now if we really wanted to.
-	return false;
-}
 
-BOOL LLEventNotification::load(const LLSD& response)
-{
-	BOOL event_ok = TRUE;
-	LLSD option = response.get("event_id");
-	if (option.isDefined())
-	{
-		mEventID = option.asInteger();
-	}
-	else
-	{
-		event_ok = FALSE;
-	}
 
-	option = response.get("event_name");
-	if (option.isDefined())
-	{
-		llinfos << "Event: " << option.asString() << llendl;
-		mEventName = option.asString();
-	}
-	else
-	{
-		event_ok = FALSE;
-	}
 
-	option = response.get("event_date");
-	if (option.isDefined())
-	{
-		llinfos << "EventDate: " << option.asString() << llendl;
-		mEventDateStr = option.asString();
-	}
-	else
-	{
-		event_ok = FALSE;
-	}
-
-	option = response.get("event_date_ut");
-	if (option.isDefined())
-	{
-		llinfos << "EventDate: " << option.asString() << llendl;
-		mEventDate = strtoul(option.asString().c_str(), NULL, 10);
-	}
-	else
-	{
-		event_ok = FALSE;
-	}
-
-	S32 grid_x = 0;
-	S32 grid_y = 0;
-	S32 x_region = 0;
-	S32 y_region = 0;
-
-	option = response.get("grid_x");
-	if (option.isDefined())
-	{
-		llinfos << "GridX: " << option.asInteger() << llendl;
-		grid_x= option.asInteger();
-	}
-	else
-	{
-		event_ok = FALSE;
-	}
-
-	option = response.get("grid_y");
-	if (option.isDefined())
-	{
-		llinfos << "GridY: " << option.asInteger() << llendl;
-		grid_y = option.asInteger();
-	}
-	else
-	{
-		event_ok = FALSE;
-	}
-
-	option = response.get("x_region");
-	if (option.isDefined())
-	{
-		llinfos << "RegionX: " << option.asInteger() << llendl;
-		x_region = option.asInteger();
-	}
-	else
-	{
-		event_ok = FALSE;
-	}
-
-	option = response.get("y_region");
-	if (option.isDefined())
-	{
-		llinfos << "RegionY: " << option.asInteger() << llendl;
-		y_region = option.asInteger();
-	}
-	else
-	{
-		event_ok = FALSE;
-	}
-
-	mEventPosGlobal.mdV[VX] = grid_x * 256 + x_region;
-	mEventPosGlobal.mdV[VY] = grid_y * 256 + y_region;
-	mEventPosGlobal.mdV[VZ] = 0.f;
-
-	return event_ok;
-}
-
-BOOL LLEventNotification::load(const LLEventInfo &event_info)
-{
-
-	mEventID = event_info.mID;
-	mEventName = event_info.mName;
-	mEventDateStr = event_info.mTimeStr;
-	mEventDate = event_info.mUnixTime;
-	mEventPosGlobal = event_info.mPosGlobal;
-	return TRUE;
-}
 
diff --git a/indra/newview/lleventnotifier.h b/indra/newview/lleventnotifier.h
index 0367fc47b0..697a708762 100644
--- a/indra/newview/lleventnotifier.h
+++ b/indra/newview/lleventnotifier.h
@@ -30,7 +30,6 @@
 #include "llframetimer.h"
 #include "v3dmath.h"
 
-class LLEventInfo;
 class LLEventNotification;
 
 
@@ -41,15 +40,21 @@ public:
 	virtual ~LLEventNotifier();
 
 	void update();	// Notify the user of the event if it's coming up
+	bool add(U32 eventId, F64 eventEpoch, const std::string& eventDateStr, const std::string &eventName);
+	void add(U32 eventId);
 
+	
 	void load(const LLSD& event_options);	// In the format that it comes in from login
-	void add(LLEventInfo &event_info);	// Add a new notification for an event
 	void remove(U32 event_id);
 
 	BOOL hasNotification(const U32 event_id);
+	void serverPushRequest(U32 event_id, bool add);
 
 	typedef std::map<U32, LLEventNotification *> en_map;
+	bool  handleResponse(U32 eventId, const LLSD& notification, const LLSD& response);		
 
+	static void processEventInfoReply(LLMessageSystem *msg, void **);	
+	
 protected:
 	en_map	mEventNotifications;
 	LLFrameTimer	mNotificationTimer;
@@ -59,25 +64,21 @@ protected:
 class LLEventNotification
 {
 public:
-	LLEventNotification();
-	virtual ~LLEventNotification();
+	LLEventNotification(U32 eventId, F64 eventEpoch, const std::string& eventDateStr, const std::string &eventName);
+
 
-	BOOL load(const LLSD& en);		// In the format it comes in from login
-	BOOL load(const LLEventInfo &event_info);		// From existing event_info on the viewer.
-	//void setEventID(const U32 event_id);
-	//void setEventName(std::string &event_name);
 	U32					getEventID() const				{ return mEventID; }
 	const std::string	&getEventName() const			{ return mEventName; }
-	time_t				getEventDate() const			{ return mEventDate; }
-	const std::string	&getEventDateStr() const		{ return mEventDateStr; }
-	LLVector3d			getEventPosGlobal() const		{ return mEventPosGlobal; }
-	bool				handleResponse(const LLSD& notification, const LLSD& payload);
+	bool                isValid() const                 { return mEventID > 0 && mEventDateEpoch != 0 && mEventName.size() > 0; }
+	const F64		    &getEventDateEpoch() const		{ return mEventDateEpoch; }
+	const std::string   &getEventDateStr() const        { return mEventDateStr; }
+	
+	
 protected:
 	U32			mEventID;			// EventID for this event
 	std::string	mEventName;
+	F64		    mEventDateEpoch;
 	std::string mEventDateStr;
-	time_t		mEventDate;
-	LLVector3d	mEventPosGlobal;
 };
 
 extern LLEventNotifier gEventNotifier;
diff --git a/indra/newview/llfloaterevent.cpp b/indra/newview/llfloaterevent.cpp
index ee2ba2ba54..0513146e8c 100644
--- a/indra/newview/llfloaterevent.cpp
+++ b/indra/newview/llfloaterevent.cpp
@@ -38,10 +38,11 @@
 #include "llcachename.h"
 #include "llcommandhandler.h"	// secondlife:///app/chat/ support
 #include "lleventflags.h"
-#include "lleventnotifier.h"
+#include "llmediactrl.h"
 #include "llexpandabletextbox.h"
 #include "llfloater.h"
 #include "llfloaterreg.h"
+#include "llmediactrl.h"
 #include "llfloaterworldmap.h"
 #include "llinventorymodel.h"
 #include "llsecondlifeurls.h"
@@ -57,35 +58,10 @@
 #include "lltrans.h"
 
 
-class LLEventHandler : public LLCommandHandler
-{
-public:
-	// requires trusted browser to trigger
-	LLEventHandler() : LLCommandHandler("event", UNTRUSTED_THROTTLE) { }
-	bool handle(const LLSD& params, const LLSD& query_map,
-				LLMediaCtrl* web)
-	{
-		if (params.size() < 1)
-		{
-			return false;
-		}
-		
-		LLFloaterEvent* floater = LLFloaterReg::getTypedInstance<LLFloaterEvent>("event");
-		if (floater)
-		{
-			floater->setEventID(params[0].asInteger());
-			LLFloaterReg::showTypedInstance<LLFloaterEvent>("event");
-			return true;
-		}
-
-		return false;
-	}
-};
-LLEventHandler gEventHandler;
-
 LLFloaterEvent::LLFloaterEvent(const LLSD& key)
 	: LLFloater(key),
-
+      LLViewerMediaObserver(),
+      mBrowser(NULL),
 	  mEventID(0)
 {
 }
@@ -98,253 +74,52 @@ LLFloaterEvent::~LLFloaterEvent()
 
 BOOL LLFloaterEvent::postBuild()
 {
-	mTBName = getChild<LLTextBox>("event_name");
-
-	mTBCategory = getChild<LLTextBox>("event_category");
-	
-	mTBDate = getChild<LLTextBox>("event_date");
-
-	mTBDuration = getChild<LLTextBox>("event_duration");
-
-	mTBDesc = getChild<LLExpandableTextBox>("event_desc");
-
-	mTBRunBy = getChild<LLTextBox>("event_runby");
-	mTBLocation = getChild<LLTextBox>("event_location");
-	mTBCover = getChild<LLTextBox>("event_cover");
-
-	mTeleportBtn = getChild<LLButton>( "teleport_btn");
-	mTeleportBtn->setClickedCallback(onClickTeleport, this);
-
-	mMapBtn = getChild<LLButton>( "map_btn");
-	mMapBtn->setClickedCallback(onClickMap, this);
-
-	mNotifyBtn = getChild<LLButton>( "notify_btn");
-	mNotifyBtn->setClickedCallback(onClickNotify, this);
-
-	mCreateEventBtn = getChild<LLButton>( "create_event_btn");
-	mCreateEventBtn->setClickedCallback(onClickCreateEvent, this);
-
-	mGodDeleteEventBtn = getChild<LLButton>( "god_delete_event_btn");
-	mGodDeleteEventBtn->setClickedCallback(boost::bind(&LLFloaterEvent::onClickDeleteEvent, this));
-
-	return TRUE;
-}
-
-void LLFloaterEvent::setEventID(const U32 event_id)
-{
-	mEventID = event_id;
-	// Should reset all of the panel state here
-	resetInfo();
-
-	if (event_id != 0)
+	mBrowser = getChild<LLMediaCtrl>("browser");
+	if (mBrowser)
 	{
-		sendEventInfoRequest();
+		mBrowser->addObserver(this);
+		mBrowser->setTrusted(true);
 	}
-}
-
-void LLFloaterEvent::onClickDeleteEvent()
-{
-	LLMessageSystem* msg = gMessageSystem;
-
-	msg->newMessageFast(_PREHASH_EventGodDelete);
-	msg->nextBlockFast(_PREHASH_AgentData);
-	msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
-	msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-
-	msg->nextBlockFast(_PREHASH_EventData);
-	msg->addU32Fast(_PREHASH_EventID, mEventID);
 
-	gAgent.sendReliableMessage();
-}
-
-void LLFloaterEvent::sendEventInfoRequest()
-{
-	LLMessageSystem *msg = gMessageSystem;
-
-	msg->newMessageFast(_PREHASH_EventInfoRequest);
-	msg->nextBlockFast(_PREHASH_AgentData);
-	msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID() );
-	msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID() );
-	msg->nextBlockFast(_PREHASH_EventData);
-	msg->addU32Fast(_PREHASH_EventID, mEventID);
-	gAgent.sendReliableMessage();
+	return TRUE;
 }
 
-//static 
-void LLFloaterEvent::processEventInfoReply(LLMessageSystem *msg, void **)
+void LLFloaterEvent::handleMediaEvent(LLPluginClassMedia *self, EMediaEvent event)
 {
-	// extract the agent id
-	LLUUID agent_id;
-	msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id );
-
-	LLFloaterEvent* floater = LLFloaterReg::getTypedInstance<LLFloaterEvent>("event");
-	
-	if(floater)
+	switch (event) 
 	{
-		floater->mEventInfo.unpack(msg);
-		floater->mTBName->setText(floater->mEventInfo.mName);
-		floater->mTBCategory->setText(floater->mEventInfo.mCategoryStr);
-		floater->mTBDate->setText(floater->mEventInfo.mTimeStr);
-		floater->mTBDesc->setText(floater->mEventInfo.mDesc);
-		floater->mTBRunBy->setText(LLSLURL("agent", floater->mEventInfo.mRunByID, "inspect").getSLURLString());
-
-		floater->mTBDuration->setText(llformat("%d:%.2d", floater->mEventInfo.mDuration / 60, floater->mEventInfo.mDuration % 60));
-
-		if (!floater->mEventInfo.mHasCover)
-		{
-			floater->mTBCover->setText(floater->getString("none"));
-		}
-		else
-		{
-			floater->mTBCover->setText(llformat("%d", floater->mEventInfo.mCover));
-		}
-
-		F32 global_x = (F32)floater->mEventInfo.mPosGlobal.mdV[VX];
-		F32 global_y = (F32)floater->mEventInfo.mPosGlobal.mdV[VY];
-
-		S32 region_x = llround(global_x) % REGION_WIDTH_UNITS;
-		S32 region_y = llround(global_y) % REGION_WIDTH_UNITS;
-		S32 region_z = llround((F32)floater->mEventInfo.mPosGlobal.mdV[VZ]);
-
-		std::string desc = floater->mEventInfo.mSimName + llformat(" (%d, %d, %d)", region_x, region_y, region_z);
-		floater->mTBLocation->setText(desc);
-
-		floater->getChildView("rating_icon_m")->setVisible( FALSE);
-		floater->getChildView("rating_icon_r")->setVisible( FALSE);
-		floater->getChildView("rating_icon_pg")->setVisible( FALSE);
-		floater->getChild<LLUICtrl>("rating_value")->setValue(floater->getString("unknown"));
-
-		//for some reason there's not adult flags for now, so see if region is adult and then
-		//set flags
-		LLWorldMapMessage::url_callback_t cb = boost::bind(	&regionInfoCallback, floater->mEventInfo.mID, _1);
-		LLWorldMapMessage::getInstance()->sendNamedRegionRequest(floater->mEventInfo.mSimName, cb, std::string("unused"), false);
-
-		if (floater->mEventInfo.mUnixTime < time_corrected())
-		{
-			floater->mNotifyBtn->setEnabled(FALSE);
-		}
-		else
-		{
-			floater->mNotifyBtn->setEnabled(TRUE);
-		}
-
-		if (gEventNotifier.hasNotification(floater->mEventInfo.mID))
-		{
-			floater->mNotifyBtn->setLabel(floater->getString("dont_notify"));
-		}
-		else
-		{
-			floater->mNotifyBtn->setLabel(floater->getString("notify"));
-		}
-	
-		floater->mMapBtn->setEnabled(TRUE);
-		floater->mTeleportBtn->setEnabled(TRUE);
+		case MEDIA_EVENT_NAVIGATE_BEGIN:
+			getChild<LLUICtrl>("status_text")->setValue(getString("loading_text"));
+			break;
+			
+		case MEDIA_EVENT_NAVIGATE_COMPLETE:
+			getChild<LLUICtrl>("status_text")->setValue(getString("done_text"));
+			break;
+			
+		default:
+			break;
 	}
 }
 
-//static 
-void LLFloaterEvent::regionInfoCallback(U32 event_id, U64 region_handle)
+void LLFloaterEvent::setEventID(const U32 event_id)
 {
-	LLSimInfo* sim_info = LLWorldMap::getInstance()->simInfoFromHandle(region_handle);
-	LLFloaterEvent* floater = LLFloaterReg::getTypedInstance<LLFloaterEvent>("event");
+	mEventID = event_id;
 
-	if (sim_info && floater && (event_id == floater->getEventID()))
+	if (event_id != 0)
 	{
-		// update the event with the maturity info
-		if (sim_info->isAdult())
-		{
-			floater->getChildView("rating_icon_m")->setVisible( FALSE);
-			floater->getChildView("rating_icon_r")->setVisible( TRUE);
-			floater->getChildView("rating_icon_pg")->setVisible( FALSE);
-			floater->getChild<LLUICtrl>("rating_value")->setValue(floater->getString("adult"));
-
-		}
-		else if (floater->mEventInfo.mEventFlags & EVENT_FLAG_MATURE)
-		{
-			floater->getChildView("rating_icon_m")->setVisible( TRUE);
-			floater->getChildView("rating_icon_r")->setVisible( FALSE);
-			floater->getChildView("rating_icon_pg")->setVisible( FALSE);
-			floater->getChild<LLUICtrl>("rating_value")->setValue(floater->getString("moderate"));
-		}
-		else
-		{
-			floater->getChildView("rating_icon_m")->setVisible( FALSE);
-			floater->getChildView("rating_icon_r")->setVisible( FALSE);
-			floater->getChildView("rating_icon_pg")->setVisible( TRUE);
-			floater->getChild<LLUICtrl>("rating_value")->setValue(floater->getString("general"));
-		}
+		LLSD subs;
+		subs["EVENT_ID"] = (S32)event_id;
+        // get the search URL and expand all of the substitutions                                                       
+        // (also adds things like [LANGUAGE], [VERSION], [OS], etc.)                                                    
+		std::ostringstream url;
+		url <<  gSavedSettings.getString("EventURL") << event_id << "/" << std::endl;
+		// and load the URL in the web view                                                                             
+        mBrowser->navigateTo(url.str());
+		
 	}
 }
 
 void LLFloaterEvent::draw()
 {
-	mGodDeleteEventBtn->setVisible(gAgent.isGodlike());
-
 	LLPanel::draw();
 }
-
-void LLFloaterEvent::resetInfo()
-{
-	mTBName->setText(LLStringUtil::null);
-	mTBCategory->setText(LLStringUtil::null);
-	mTBDate->setText(LLStringUtil::null);
-	mTBDesc->setText(LLStringUtil::null);
-	mTBDuration->setText(LLStringUtil::null);
-	mTBCover->setText(LLStringUtil::null);
-	mTBLocation->setText(LLStringUtil::null);
-	mTBRunBy->setText(LLStringUtil::null);
-	mNotifyBtn->setEnabled(FALSE);
-	mMapBtn->setEnabled(FALSE);
-	mTeleportBtn->setEnabled(FALSE);
-}
-
-// static
-void LLFloaterEvent::onClickTeleport(void* data)
-{
-	LLFloaterEvent* self = (LLFloaterEvent*)data;
-	LLFloaterWorldMap* worldmap_instance = LLFloaterWorldMap::getInstance();
-	if (!self->mEventInfo.mPosGlobal.isExactlyZero()&&worldmap_instance)
-	{
-		gAgent.teleportViaLocation(self->mEventInfo.mPosGlobal);
-		worldmap_instance->trackLocation(self->mEventInfo.mPosGlobal);
-	}
-}
-
-
-// static
-void LLFloaterEvent::onClickMap(void* data)
-{
-	LLFloaterEvent* self = (LLFloaterEvent*)data;
-	LLFloaterWorldMap* worldmap_instance = LLFloaterWorldMap::getInstance();
-
-	if (!self->mEventInfo.mPosGlobal.isExactlyZero()&&worldmap_instance)
-	{
-		worldmap_instance->trackLocation(self->mEventInfo.mPosGlobal);
-		LLFloaterReg::showInstance("world_map", "center");
-	}
-}
-
-
-// static
-void LLFloaterEvent::onClickCreateEvent(void* data)
-{
-	LLNotificationsUtil::add("PromptGoToEventsPage");//, LLSD(), LLSD(), callbackCreateEventWebPage); 
-}
-
-
-// static
-void LLFloaterEvent::onClickNotify(void *data)
-{
-	LLFloaterEvent* self = (LLFloaterEvent*)data;
-
-	if (!gEventNotifier.hasNotification(self->mEventID))
-	{
-		gEventNotifier.add(self->mEventInfo);
-		self->mNotifyBtn->setLabel(self->getString("dont_notify"));
-	}
-	else
-	{
-		gEventNotifier.remove(self->mEventInfo.mID);
-		self->mNotifyBtn->setLabel(self->getString("notify"));
-	}
-}
diff --git a/indra/newview/llfloaterevent.h b/indra/newview/llfloaterevent.h
index bfed2f259b..b1963309da 100644
--- a/indra/newview/llfloaterevent.h
+++ b/indra/newview/llfloaterevent.h
@@ -28,17 +28,15 @@
 #define LL_LLFLOATEREVENT_H
 
 #include "llfloater.h"
-#include "lleventinfo.h"
-#include "lluuid.h"
-#include "v3dmath.h"
+#include "llviewermediaobserver.h"
 
-class LLTextBox;
-class LLTextEditor;
+
+class LLMediaCtrl;
 class LLButton;
-class LLExpandableTextBox;
-class LLMessageSystem;
 
-class LLFloaterEvent : public LLFloater
+class LLFloaterEvent : public LLFloater,
+                       public LLViewerMediaObserver
+
 {
 public:
 	LLFloaterEvent(const LLSD& key);
@@ -48,44 +46,18 @@ public:
 	/*virtual*/ void draw();
 
 	void setEventID(const U32 event_id);
-	void sendEventInfoRequest();
-
-	static void processEventInfoReply(LLMessageSystem *msg, void **);
 
 	U32 getEventID() { return mEventID; }
 
-protected:
-	void resetInfo();
-
-	static void onClickTeleport(void*);
-	static void onClickMap(void*);
-	//static void onClickLandmark(void*);
-	static void onClickCreateEvent(void*);
-	static void onClickNotify(void*);
-	void onClickDeleteEvent();
-
-	static void regionInfoCallback(U32 event_id, U64 region_handle);
 
 
 protected:
+	/*virtual*/ void handleMediaEvent(LLPluginClassMedia *self, EMediaEvent event);	
+	
 	U32				mEventID;
-	LLEventInfo		mEventInfo;
-
-	LLTextBox*		mTBName;
-	LLTextBox*		mTBCategory;
-	LLTextBox*		mTBDate;
-	LLTextBox*		mTBDuration;
-	LLExpandableTextBox*	mTBDesc;
 
-	LLTextBox*		mTBRunBy;
-	LLTextBox*		mTBLocation;
-	LLTextBox*		mTBCover;
+	LLMediaCtrl*	mBrowser;
 
-	LLButton*		mTeleportBtn;
-	LLButton*		mMapBtn;
-	LLButton*		mCreateEventBtn;
-	LLButton*		mGodDeleteEventBtn;
-	LLButton*		mNotifyBtn;
 };
 
 #endif // LL_LLFLOATEREVENT_H
diff --git a/indra/newview/llfloaterworldmap.h b/indra/newview/llfloaterworldmap.h
index 6327039b7f..1628a421ec 100644
--- a/indra/newview/llfloaterworldmap.h
+++ b/indra/newview/llfloaterworldmap.h
@@ -39,7 +39,6 @@
 #include "lltracker.h"
 #include "llslurl.h"
 
-class LLEventInfo;
 class LLFriendObserver;
 class LLInventoryModel;
 class LLInventoryObserver;
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 975d1f9f32..6bbddd9b2e 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -118,7 +118,6 @@
 #include "llpanellogin.h"
 #include "llmutelist.h"
 #include "llavatarpropertiesprocessor.h"
-#include "llfloaterevent.h"
 #include "llpanelclassified.h"
 #include "llpanelpick.h"
 #include "llpanelgrouplandmoney.h"
@@ -1612,12 +1611,6 @@ bool idle_startup()
 			LLFloaterReg::showInstance("hud", LLSD(), FALSE);
 		}
 
-		LLSD event_categories = response["event_categories"];
-		if(event_categories.isDefined())
-		{
-			LLEventInfo::loadCategories(event_categories);
-		}
-
 		LLSD event_notifications = response["event_notifications"];
 		if(event_notifications.isDefined())
 		{
@@ -2329,8 +2322,8 @@ void register_viewer_callbacks(LLMessageSystem* msg)
 
 	msg->setHandlerFunc("MapBlockReply", LLWorldMapMessage::processMapBlockReply);
 	msg->setHandlerFunc("MapItemReply", LLWorldMapMessage::processMapItemReply);
-
-	msg->setHandlerFunc("EventInfoReply", LLFloaterEvent::processEventInfoReply);
+	msg->setHandlerFunc("EventInfoReply", LLEventNotifier::processEventInfoReply);
+	
 	msg->setHandlerFunc("PickInfoReply", &LLAvatarPropertiesProcessor::processPickInfoReply);
 //	msg->setHandlerFunc("ClassifiedInfoReply", LLPanelClassified::processClassifiedInfoReply);
 	msg->setHandlerFunc("ClassifiedInfoReply", LLAvatarPropertiesProcessor::processClassifiedInfoReply);
diff --git a/indra/newview/skins/default/xui/da/floater_event.xml b/indra/newview/skins/default/xui/da/floater_event.xml
index 1816144b45..1d16c942dd 100644
--- a/indra/newview/skins/default/xui/da/floater_event.xml
+++ b/indra/newview/skins/default/xui/da/floater_event.xml
@@ -1,72 +1,39 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater label="Event" name="Event" title="EVENT DETALJER">
-	<floater.string name="none">
-		ingen
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<floater
+ follows="all"
+ height="400"
+ can_resize="true"
+ help_topic="event_details"
+ label="Event"
+ layout="topleft"
+ name="Event"
+ save_rect="true"
+ save_visibility="false"
+ title="EVENT DETAILS" 
+ width="600">
+	<floater.string
+		name="loading_text">
+		Henter...
 	</floater.string>
-	<floater.string name="notify">
-		Meddel
-	</floater.string>
-	<floater.string name="dont_notify">
-		Meddel ikke
-	</floater.string>
-	<floater.string name="moderate">
-		Moderat
-	</floater.string>
-	<floater.string name="adult">
-		Voksent
-	</floater.string>
-	<floater.string name="general">
-		Generelt
-	</floater.string>
-	<floater.string name="unknown">
-		Ukendt
-	</floater.string>
-	<layout_stack name="layout">
-		<layout_panel name="profile_stack">
-			<text name="event_name">
-				Event uden navn.
-			</text>
-			<text name="event_category">
-				(ingen kategori)
-			</text>
-			<text name="event_runby_label">
-				Afholdt af:
-			</text>
-			<text initial_value="(henter)" name="event_runby"/>
-			<text name="event_date_label">
-				Dato:
-			</text>
-			<text name="event_date">
-				10/10/2010
-			</text>
-			<text name="event_duration_label">
-				Varighed:
-			</text>
-			<text name="event_duration">
-				1 time
-			</text>
-			<text name="event_covercharge_label">
-				Pris:
-			</text>
-			<text name="event_cover">
-				Gratis
-			</text>
-			<text name="event_location_label">
-				Lokation:
-			</text>
-			<text name="event_location" value="SampleParcel, Name Long (145, 228, 26)"/>
-			<text name="rating_label" value="Rating:"/>
-			<text name="rating_value" value="ukendt"/>
-			<expandable_text name="event_desc">
-				Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
-			</expandable_text>
-		</layout_panel>
-		<layout_panel name="button_panel">
-			<button name="create_event_btn" tool_tip="Opret event"/>
-			<button name="god_delete_event_btn" tool_tip="Slet event"/>
-			<button label="Giv besked" name="notify_btn"/>
-			<button label="Teleport" name="teleport_btn"/>
-			<button label="Kort" name="map_btn"/>
-		</layout_panel>
-	</layout_stack>
+    <floater.string
+     name="done_text">
+        Done
+    </floater.string>
+  <web_browser
+     follows="left|right|top|bottom"
+     layout="topleft"
+     left="10"
+     name="browser"
+     height="365"
+     width="580"
+     top="0"/>
+	<text
+	 follows="bottom|left"
+	 height="16"
+	 layout="topleft"
+	 left_delta="0"
+	 name="status_text"
+	 top_pad="10"
+	 width="150" />	 
 </floater>
+
diff --git a/indra/newview/skins/default/xui/da/notifications.xml b/indra/newview/skins/default/xui/da/notifications.xml
index 62d9c5a203..25195b44c8 100644
--- a/indra/newview/skins/default/xui/da/notifications.xml
+++ b/indra/newview/skins/default/xui/da/notifications.xml
@@ -1081,8 +1081,7 @@ Prøv at vælge mindre stykker land.
 [NAME]
 [DATE]
 		<form name="form">
-			<button name="Teleport" text="Teleportér"/>
-			<button name="Description" text="Beskrivelse"/>
+			<button name="Details" text="Beskrivelse"/>
 			<button name="Cancel" text="Annullér"/>
 		</form>
 	</notification>
diff --git a/indra/newview/skins/default/xui/de/floater_event.xml b/indra/newview/skins/default/xui/de/floater_event.xml
index cf663e2e1b..13108100f6 100644
--- a/indra/newview/skins/default/xui/de/floater_event.xml
+++ b/indra/newview/skins/default/xui/de/floater_event.xml
@@ -1,69 +1,39 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater label="Event" name="Event" title="EVENT-DETAILS">
-	<floater.string name="none">
-		keines
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<floater
+ follows="all"
+ height="400"
+ can_resize="true"
+ help_topic="event_details"
+ label="Event"
+ layout="topleft"
+ name="Event"
+ save_rect="true"
+ save_visibility="false"
+ title="EVENT DETAILS" 
+ width="600">
+	<floater.string
+		name="loading_text">
+		Wird geladen...
 	</floater.string>
-	<floater.string name="notify">
-		Benachrichtigen
-	</floater.string>
-	<floater.string name="dont_notify">
-		Nicht benachrichtigen
-	</floater.string>
-	<floater.string name="moderate">
-		Moderat
-	</floater.string>
-	<floater.string name="adult">
-		Adult
-	</floater.string>
-	<floater.string name="general">
-		Allgemein
-	</floater.string>
-	<floater.string name="unknown">
-		Unbekannt
-	</floater.string>
-	<layout_stack name="layout">
-		<layout_panel name="profile_stack">
-			<text name="event_name">
-				Namenloses Event....namenlos! Tadaaa! Tadatadaaaah!
-			</text>
-			<text name="event_category">
-				(keine Kategorie)
-			</text>
-			<text name="event_runby_label">
-				Ausgeführt von:
-			</text>
-			<text initial_value="(wird in Datenbank gesucht)" name="event_runby"/>
-			<text name="event_date_label">
-				Datum:
-			</text>
-			<text name="event_date">
-				10/10/2010
-			</text>
-			<text name="event_duration_label">
-				Dauer:
-			</text>
-			<text name="event_duration">
-				1 Stunde
-			</text>
-			<text name="event_covercharge_label">
-				Eintritt:
-			</text>
-			<text name="event_cover">
-				Kostenlos
-			</text>
-			<text name="event_location_label">
-				Standort:
-			</text>
-			<text name="event_location" value="SampleParcel, Name Long (145, 228, 26)"/>
-			<text name="rating_label" value="Einstufung:"/>
-			<text name="rating_value" value="unbekannt"/>
-		</layout_panel>
-		<layout_panel name="button_panel">
-			<button name="create_event_btn" tool_tip="Event erstellen"/>
-			<button name="god_delete_event_btn" tool_tip="Event löschen"/>
-			<button label="Mich benachrichtigen" name="notify_btn"/>
-			<button label="Teleportieren" name="teleport_btn"/>
-			<button label="Karte" name="map_btn"/>
-		</layout_panel>
-	</layout_stack>
+    <floater.string
+     name="done_text">
+        Done
+    </floater.string>
+  <web_browser
+     follows="left|right|top|bottom"
+     layout="topleft"
+     left="10"
+     name="browser"
+     height="365"
+     width="580"
+     top="0"/>
+	<text
+	 follows="bottom|left"
+	 height="16"
+	 layout="topleft"
+	 left_delta="0"
+	 name="status_text"
+	 top_pad="10"
+	 width="150" />	 
 </floater>
+
diff --git a/indra/newview/skins/default/xui/de/notifications.xml b/indra/newview/skins/default/xui/de/notifications.xml
index e5baf0f98f..5d4911d9b8 100644
--- a/indra/newview/skins/default/xui/de/notifications.xml
+++ b/indra/newview/skins/default/xui/de/notifications.xml
@@ -2195,8 +2195,7 @@ Wählen Sie eine kleinere Landfläche.
 [NAME]
 [DATE]
 		<form name="form">
-			<button name="Teleport" text="Teleportieren"/>
-			<button name="Description" text="Beschreibung"/>
+			<button name="Details" text="Beschreibung"/>
 			<button name="Cancel" text="Abbrechen"/>
 		</form>
 	</notification>
diff --git a/indra/newview/skins/default/xui/en/floater_event.xml b/indra/newview/skins/default/xui/en/floater_event.xml
index 9864083442..1be9748711 100644
--- a/indra/newview/skins/default/xui/en/floater_event.xml
+++ b/indra/newview/skins/default/xui/en/floater_event.xml
@@ -1,311 +1,39 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <floater
  follows="all"
- height="350"
+ height="400"
+ can_resize="true"
  help_topic="event_details"
  label="Event"
  layout="topleft"
  name="Event"
+ save_rect="true"
+ save_visibility="false"
  title="EVENT DETAILS" 
- width="330">
-  <floater.string
-   name="none">
-    none
-  </floater.string>
-  <floater.string
-   name="notify">
-    Notify
-  </floater.string>
-  <floater.string
-   name="dont_notify">
-    Don&apos;t Notify
-  </floater.string>
-  <floater.string
-   name="moderate">
-    Moderate
-  </floater.string>
-  <floater.string
-   name="adult">
-    Adult
-  </floater.string>
-  <floater.string
-   name="general">
-    General
-  </floater.string>
-  <floater.string
-   name="unknown">
-    Unknown
-  </floater.string>
-  <layout_stack
-    name="layout"
-    orientation="vertical"
-    follows="all"
-    layout="topleft"
-    left="0"
-    top="0"
-    height="350"
-    width="330"
-    border_size="0">
-    <layout_panel
-       name="profile_stack"
-       follows="top|left"
-       layout="topleft"
-       top="0"
-       left="0"
-       height="305"
-       width="330">
-      <text
-       follows="top|left|right"
-       font="SansSerifLarge"
-       text_color="white"
-       height="17"
-       layout="topleft"
-       left="10"
-       name="event_name"
-       top="5"
-       use_ellipses="true"
-       width="310">
-        Nameless Event...of Doom! De doom! Doom doom.
-      </text>
-      <text
-        type="string"
-        length="1"
-        follows="top|left"
-        height="13"
-        text_color="LtGray_50"
-        layout="topleft"
-        left="25"
-        name="event_category"
-        width="300">
-        (no category)
-      </text>
-
-      <text
-       type="string"
-       length="1"
-       follows="top|left"
-       layout="topleft"
-       left="10"
-       top_pad="7"
-       name="event_runby_label"
-       width="90">
-        Run by:
-      </text>
-      <text
-        follows="left|top"
-        height="20"
-        initial_value="(retrieving)"
-        layout="topleft"
-        left_pad="0"
-        link="true"
-        name="event_runby"
-        top_delta="0"
-        use_ellipses="true"
-        width="240" />
-      <text
-       type="string"
-       length="1"
-       follows="top|left"
-       layout="topleft"
-       left="10"
-       top_pad="5"
-       name="event_date_label"
-       width="90">
-        Date:
-      </text>
-      <text
-     type="string"
-     length="1"
-     left_pad="0"
-     height="17"
-     top_delta="0"
-     follows="top|left"
+ width="600">
+	<floater.string
+		name="loading_text">
+		Loading...
+	</floater.string>
+    <floater.string
+     name="done_text">
+        Done
+    </floater.string>
+  <web_browser
+     follows="left|right|top|bottom"
      layout="topleft"
-     name="event_date"
-     width="240">
-        10/10/2010
-      </text>
-      <text
-       type="string"
-       length="1"
-       follows="top|left"
-       layout="topleft"
-       left="10"
-       top_pad="5"
-       name="event_duration_label"
-       width="90">
-        Duration:
-      </text>
-      <text
-       type="string"
-       height="14"
-       length="1"
-       left_pad="0"
-       follows="top|left"
-       layout="topleft"
-       name="event_duration"
-       top_delta="0"
-       width="240">
-        1 hour
-      </text>
-      <text
-       type="string"
-       length="1"
-       follows="top|left"
-       layout="topleft"
-       left="10"
-       top_pad="5"
-       name="event_covercharge_label"
-       width="90">
-        Cover charge:
-      </text>
-      <text
-        type="string"
-        follows="left|top"
-        height="16"
-        layout="topleft"
-       left_pad="0"
-       name="event_cover"
-        visible="true"
-        width="240"
-        top_delta="0">
-        Free
-      </text>
-      <text
-       type="string"
-       length="1"
-       follows="top|left"
-       layout="topleft"
-       left="10"
-       top_pad="5"
-       name="event_location_label"
-       width="90">
-        Location:
-      </text>
-      <text
-       type="string"
-       length="1"
-       height="20"
-       left_pad="0"
-       follows="top|left"
-       layout="topleft"
-       name="event_location"
-       use_ellipses="true"
-       top_delta="0"
-       value="SampleParcel, Name Long (145, 228, 26)"
-       width="240" />
-      <icon
-       follows="top|left"
-       height="16"
-       image_name="Parcel_PG_Dark"
-       layout="topleft"
-       left="10"
-       name="rating_icon_pg"
-       width="18" />
-      <icon
-       follows="top|left"
-       height="16"
-       image_name="Parcel_M_Dark"
-       layout="topleft"
-       left="10"
-       name="rating_icon_m"
-       top_delta="0"
-       width="18" />
-      <icon
-       follows="top|left"
-       height="16"
-       image_name="Parcel_R_Dark"
-       layout="topleft"
-       left="10"
-       name="rating_icon_r"
-       top_delta="0"
-       width="18" />
-      <text
-       follows="left|top"
-       height="16"
-       layout="topleft"
-       left_pad="12"
-       name="rating_label"
-       top_delta="3"
-       value="Rating:"
-       width="90" />
-      <text
-       follows="left|right|top"
-       height="16"
-       layout="topleft"
-       left_pad="2"
-       name="rating_value"
-       top_delta="0"
-       value="unknown"
-       width="240" />
-      <expandable_text
-       follows="left|top|right"
-       height="65"
-       layout="topleft"
-       left="6"
-       name="event_desc"
-       width="322">
-       Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</expandable_text>
-    </layout_panel>
-    <layout_panel
-       follows="left|right"
-       height="24"
-       layout="topleft"
-       mouse_opaque="false"
-       name="button_panel"
-       top="0"
-       left="0"
-       user_resize="false">
-      <button
-       follows="left|top"
-           height="18"
-           image_selected="AddItem_Press"
-           image_unselected="AddItem_Off"
-           image_disabled="AddItem_Disabled"
-           layout="topleft"
-           left="6"
-       name="create_event_btn"
-           tool_tip="Create Event"
-           width="18" />
-      <button
-       follows="left|top"
-           height="18"
-           image_selected="MinusItem_Press"
-           image_unselected="MinusItem_Off"
-           image_disabled="MinusItem_Disabled"
-           layout="topleft"
-           visible="false" 
-           left="6"
-           top_pad="-7" 
-          name="god_delete_event_btn"
-           tool_tip="Delete Event"
-           width="18" />
-      <button
-   follows="left|top"
-   height="23"
-   label="Notify Me"
-   layout="topleft"
-   left_pad="3"
-   top_delta="-12"
-   name="notify_btn"
-   width="100" />
-      <button
-       follows="left|top"
-       height="23"
-       label="Teleport"
-       layout="topleft"
-       left_pad="5"
-       name="teleport_btn"
-       width="100" />
-      <button
-       follows="left|top"
-       height="23"
-       label="Map"
-       layout="topleft"
-       left_pad="5"
-       name="map_btn"
-       width="85" />
-    </layout_panel>
-  </layout_stack>
-  </floater>
+     left="10"
+     name="browser"
+     height="365"
+     width="580"
+     top="0"/>
+	<text
+	 follows="bottom|left"
+	 height="16"
+	 layout="topleft"
+	 left_delta="0"
+	 name="status_text"
+	 top_pad="10"
+	 width="150" />	 
+</floater>
 
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 609a9b09be..2473c2e424 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -4858,14 +4858,10 @@ Event Notification:
     <form name="form">
       <button
        index="0"
-       name="Teleport"
-       text="Teleport"/>
+       name="Details"
+       text="Details"/>
       <button
        index="1"
-       name="Description"
-       text="Description"/>
-      <button
-       index="2"
        name="Cancel"
        text="Cancel"/>
     </form>
diff --git a/indra/newview/skins/default/xui/es/floater_event.xml b/indra/newview/skins/default/xui/es/floater_event.xml
index 4bc5221796..f37c722f03 100644
--- a/indra/newview/skins/default/xui/es/floater_event.xml
+++ b/indra/newview/skins/default/xui/es/floater_event.xml
@@ -1,72 +1,39 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater label="Evento" name="Event" title="DETALLES DEL EVENTO">
-	<floater.string name="none">
-		ninguno
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<floater
+ follows="all"
+ height="400"
+ can_resize="true"
+ help_topic="event_details"
+ label="Event"
+ layout="topleft"
+ name="Event"
+ save_rect="true"
+ save_visibility="false"
+ title="EVENT DETAILS" 
+ width="600">
+	<floater.string
+		name="loading_text">
+		Cargando...
 	</floater.string>
-	<floater.string name="notify">
-		Notificar
-	</floater.string>
-	<floater.string name="dont_notify">
-		No notificar
-	</floater.string>
-	<floater.string name="moderate">
-		Moderado
-	</floater.string>
-	<floater.string name="adult">
-		Adulto
-	</floater.string>
-	<floater.string name="general">
-		General
-	</floater.string>
-	<floater.string name="unknown">
-		desconocida
-	</floater.string>
-	<layout_stack name="layout">
-		<layout_panel name="profile_stack">
-			<text name="event_name">
-				Evento sin nombre...
-			</text>
-			<text name="event_category">
-				(sin categoría)
-			</text>
-			<text name="event_runby_label">
-				Organizado por:
-			</text>
-			<text initial_value="(obteniendo)" name="event_runby"/>
-			<text name="event_date_label">
-				Fecha:
-			</text>
-			<text name="event_date">
-				10/10/2010
-			</text>
-			<text name="event_duration_label">
-				Duración:
-			</text>
-			<text name="event_duration">
-				1 hora
-			</text>
-			<text name="event_covercharge_label">
-				Entrada:
-			</text>
-			<text name="event_cover">
-				Gratis
-			</text>
-			<text name="event_location_label">
-				Localización:
-			</text>
-			<text name="event_location" value="SampleParcel, Name Long (145, 228, 26)"/>
-			<text name="rating_label" value="Calificación:"/>
-			<text name="rating_value" value="desconocida"/>
-			<expandable_text name="event_desc">
-				Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
-			</expandable_text>
-		</layout_panel>
-		<layout_panel name="button_panel">
-			<button name="create_event_btn" tool_tip="Crear el evento"/>
-			<button name="god_delete_event_btn" tool_tip="Borrar el evento"/>
-			<button label="Notificarme" name="notify_btn"/>
-			<button label="Teleportar" name="teleport_btn"/>
-			<button label="Mapa" name="map_btn"/>
-		</layout_panel>
-	</layout_stack>
+    <floater.string
+     name="done_text">
+        Done
+    </floater.string>
+  <web_browser
+     follows="left|right|top|bottom"
+     layout="topleft"
+     left="10"
+     name="browser"
+     height="365"
+     width="580"
+     top="0"/>
+	<text
+	 follows="bottom|left"
+	 height="16"
+	 layout="topleft"
+	 left_delta="0"
+	 name="status_text"
+	 top_pad="10"
+	 width="150" />	 
 </floater>
+
diff --git a/indra/newview/skins/default/xui/es/notifications.xml b/indra/newview/skins/default/xui/es/notifications.xml
index e9eda790dd..b4ac89b2d5 100644
--- a/indra/newview/skins/default/xui/es/notifications.xml
+++ b/indra/newview/skins/default/xui/es/notifications.xml
@@ -2186,8 +2186,7 @@ Inténtalo seleccionando un trozo más pequeño de terreno.
 [NAME]
 [DATE]
 		<form name="form">
-			<button name="Teleport" text="Teleportar"/>
-			<button name="Description" text="Descripción"/>
+			<button name="Details" text="Detalles"/>
 			<button name="Cancel" text="Cancelar"/>
 		</form>
 	</notification>
diff --git a/indra/newview/skins/default/xui/fr/floater_event.xml b/indra/newview/skins/default/xui/fr/floater_event.xml
index b005ce3b36..72361c0c1a 100644
--- a/indra/newview/skins/default/xui/fr/floater_event.xml
+++ b/indra/newview/skins/default/xui/fr/floater_event.xml
@@ -1,69 +1,39 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater label="Événement" name="Event" title="DÉTAILS SUR L&apos;ÉVÉNEMENT">
-	<floater.string name="none">
-		aucun
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<floater
+ follows="all"
+ height="400"
+ can_resize="true"
+ help_topic="event_details"
+ label="Event"
+ layout="topleft"
+ name="Event"
+ save_rect="true"
+ save_visibility="false"
+ title="EVENT DETAILS" 
+ width="600">
+	<floater.string
+		name="loading_text">
+		Chargement...
 	</floater.string>
-	<floater.string name="notify">
-		Prévenir
-	</floater.string>
-	<floater.string name="dont_notify">
-		Ne pas prévenir
-	</floater.string>
-	<floater.string name="moderate">
-		Modéré
-	</floater.string>
-	<floater.string name="adult">
-		Adulte
-	</floater.string>
-	<floater.string name="general">
-		Général
-	</floater.string>
-	<floater.string name="unknown">
-		Inconnu
-	</floater.string>
-	<layout_stack name="layout">
-		<layout_panel name="profile_stack">
-			<text name="event_name">
-				Nameless Event...of Doom! De doom! Doom doom.
-			</text>
-			<text name="event_category">
-				(pas de catégorie)
-			</text>
-			<text name="event_runby_label">
-				Organisé par :
-			</text>
-			<text initial_value="(récupération en cours)" name="event_runby"/>
-			<text name="event_date_label">
-				Date :
-			</text>
-			<text name="event_date">
-				10/10/2010
-			</text>
-			<text name="event_duration_label">
-				Durée :
-			</text>
-			<text name="event_duration">
-				1 heure
-			</text>
-			<text name="event_covercharge_label">
-				Prix :
-			</text>
-			<text name="event_cover">
-				Gratuit
-			</text>
-			<text name="event_location_label">
-				Lieu :
-			</text>
-			<text name="event_location" value="SampleParcel, Name Long (145, 228, 26)"/>
-			<text name="rating_label" value="Catégorie :"/>
-			<text name="rating_value" value="inconnu"/>
-		</layout_panel>
-		<layout_panel name="button_panel">
-			<button name="create_event_btn" tool_tip="Créer un événement"/>
-			<button name="god_delete_event_btn" tool_tip="Supprimer l&apos;événement"/>
-			<button label="Me prévenir" name="notify_btn"/>
-			<button label="Téléporter" name="teleport_btn"/>
-			<button label="Carte" name="map_btn"/>
-		</layout_panel>
-	</layout_stack>
+    <floater.string
+     name="done_text">
+        Done
+    </floater.string>
+  <web_browser
+     follows="left|right|top|bottom"
+     layout="topleft"
+     left="10"
+     name="browser"
+     height="365"
+     width="580"
+     top="0"/>
+	<text
+	 follows="bottom|left"
+	 height="16"
+	 layout="topleft"
+	 left_delta="0"
+	 name="status_text"
+	 top_pad="10"
+	 width="150" />	 
 </floater>
+
diff --git a/indra/newview/skins/default/xui/fr/notifications.xml b/indra/newview/skins/default/xui/fr/notifications.xml
index 259ac4cee6..0e25532863 100644
--- a/indra/newview/skins/default/xui/fr/notifications.xml
+++ b/indra/newview/skins/default/xui/fr/notifications.xml
@@ -2177,8 +2177,7 @@ Veuillez sélectionner un terrain plus petit.
 [NAME]
 [DATE]
 		<form name="form">
-			<button name="Teleport" text="Téléporter"/>
-			<button name="Description" text="Description"/>
+			<button name="Description" text="Détails"/>
 			<button name="Cancel" text="Annuler"/>
 		</form>
 	</notification>
diff --git a/indra/newview/skins/default/xui/it/floater_event.xml b/indra/newview/skins/default/xui/it/floater_event.xml
index a0807e04c9..177305e648 100644
--- a/indra/newview/skins/default/xui/it/floater_event.xml
+++ b/indra/newview/skins/default/xui/it/floater_event.xml
@@ -1,72 +1,39 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater label="Evento" name="Event" title="DETTAGLI DELL&apos;EVENTO">
-	<floater.string name="none">
-		nessuno
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<floater
+ follows="all"
+ height="400"
+ can_resize="true"
+ help_topic="event_details"
+ label="Event"
+ layout="topleft"
+ name="Event"
+ save_rect="true"
+ save_visibility="false"
+ title="EVENT DETAILS" 
+ width="600">
+	<floater.string
+		name="loading_text">
+		Caricamento in corso...
 	</floater.string>
-	<floater.string name="notify">
-		Avvisare
-	</floater.string>
-	<floater.string name="dont_notify">
-		Non avvisare
-	</floater.string>
-	<floater.string name="moderate">
-		Moderato
-	</floater.string>
-	<floater.string name="adult">
-		Adulto
-	</floater.string>
-	<floater.string name="general">
-		Generale
-	</floater.string>
-	<floater.string name="unknown">
-		Sconosciuto
-	</floater.string>
-	<layout_stack name="layout">
-		<layout_panel name="profile_stack">
-			<text name="event_name">
-				Evento senza nome...di Doom De doom! Doom doom.
-			</text>
-			<text name="event_category">
-				(nessuna categoria)
-			</text>
-			<text name="event_runby_label">
-				Organizzato da:
-			</text>
-			<text initial_value="(recupero)" name="event_runby"/>
-			<text name="event_date_label">
-				Data:
-			</text>
-			<text name="event_date">
-				10/10/2010
-			</text>
-			<text name="event_duration_label">
-				Durata:
-			</text>
-			<text name="event_duration">
-				1 ora
-			</text>
-			<text name="event_covercharge_label">
-				Costo:
-			</text>
-			<text name="event_cover">
-				Gratis
-			</text>
-			<text name="event_location_label">
-				Luogo:
-			</text>
-			<text name="event_location" value="SampleParcel, Name Long (145, 228, 26)"/>
-			<text name="rating_label" value="Categoria:"/>
-			<text name="rating_value" value="sconosciuto"/>
-			<expandable_text name="event_desc">
-				Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
-			</expandable_text>
-		</layout_panel>
-		<layout_panel name="button_panel">
-			<button name="create_event_btn" tool_tip="Crea evento"/>
-			<button name="god_delete_event_btn" tool_tip="Elimina evento"/>
-			<button label="Avvisami" name="notify_btn"/>
-			<button label="Teleport" name="teleport_btn"/>
-			<button label="Mappa" name="map_btn"/>
-		</layout_panel>
-	</layout_stack>
+    <floater.string
+     name="done_text">
+        Done
+    </floater.string>
+  <web_browser
+     follows="left|right|top|bottom"
+     layout="topleft"
+     left="10"
+     name="browser"
+     height="365"
+     width="580"
+     top="0"/>
+	<text
+	 follows="bottom|left"
+	 height="16"
+	 layout="topleft"
+	 left_delta="0"
+	 name="status_text"
+	 top_pad="10"
+	 width="150" />	 
 </floater>
+
diff --git a/indra/newview/skins/default/xui/it/notifications.xml b/indra/newview/skins/default/xui/it/notifications.xml
index 474bdca55f..546c25ac7d 100644
--- a/indra/newview/skins/default/xui/it/notifications.xml
+++ b/indra/newview/skins/default/xui/it/notifications.xml
@@ -2183,8 +2183,7 @@ Prova a selezionare una parte di terreno più piccola.
 [NAME]
 [DATE]
 		<form name="form">
-			<button name="Teleport" text="Teleport"/>
-			<button name="Description" text="Descrizione"/>
+			<button name="Details" text="Descrizione"/>
 			<button name="Cancel" text="Cancella"/>
 		</form>
 	</notification>
diff --git a/indra/newview/skins/default/xui/ja/floater_event.xml b/indra/newview/skins/default/xui/ja/floater_event.xml
index 671f9077d9..ec4188d300 100644
--- a/indra/newview/skins/default/xui/ja/floater_event.xml
+++ b/indra/newview/skins/default/xui/ja/floater_event.xml
@@ -1,69 +1,39 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater label="イベント" name="Event" title="イベント詳細">
-	<floater.string name="none">
-		なし
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<floater
+ follows="all"
+ height="400"
+ can_resize="true"
+ help_topic="event_details"
+ label="Event"
+ layout="topleft"
+ name="Event"
+ save_rect="true"
+ save_visibility="false"
+ title="EVENT DETAILS" 
+ width="600">
+	<floater.string
+		name="loading_text">
+		ローディング...
 	</floater.string>
-	<floater.string name="notify">
-		知らせる
-	</floater.string>
-	<floater.string name="dont_notify">
-		知らせない
-	</floater.string>
-	<floater.string name="moderate">
-		Moderate
-	</floater.string>
-	<floater.string name="adult">
-		Adult
-	</floater.string>
-	<floater.string name="general">
-		General
-	</floater.string>
-	<floater.string name="unknown">
-		不明
-	</floater.string>
-	<layout_stack name="layout">
-		<layout_panel name="profile_stack">
-			<text name="event_name">
-				Nameless Event...of Doom! De doom! Doom doom.
-			</text>
-			<text name="event_category">
-				(カテゴリなし)
-			</text>
-			<text name="event_runby_label">
-				主催者:
-			</text>
-			<text initial_value="(取得中)" name="event_runby"/>
-			<text name="event_date_label">
-				日付:
-			</text>
-			<text name="event_date">
-				10/10/2010
-			</text>
-			<text name="event_duration_label">
-				期間:
-			</text>
-			<text name="event_duration">
-				1 時間
-			</text>
-			<text name="event_covercharge_label">
-				カバーチャージ:
-			</text>
-			<text name="event_cover">
-				無料
-			</text>
-			<text name="event_location_label">
-				場所:
-			</text>
-			<text name="event_location" value="SampleParcel, Name Long (145, 228, 26)"/>
-			<text name="rating_label" value="レーティング区分:"/>
-			<text name="rating_value" value="不明"/>
-		</layout_panel>
-		<layout_panel name="button_panel">
-			<button name="create_event_btn" tool_tip="イベント作成"/>
-			<button name="god_delete_event_btn" tool_tip="イベント削除"/>
-			<button label="知らせる" name="notify_btn"/>
-			<button label="テレポート" name="teleport_btn"/>
-			<button label="地図" name="map_btn"/>
-		</layout_panel>
-	</layout_stack>
+    <floater.string
+     name="done_text">
+        Done
+    </floater.string>
+  <web_browser
+     follows="left|right|top|bottom"
+     layout="topleft"
+     left="10"
+     name="browser"
+     height="365"
+     width="580"
+     top="0"/>
+	<text
+	 follows="bottom|left"
+	 height="16"
+	 layout="topleft"
+	 left_delta="0"
+	 name="status_text"
+	 top_pad="10"
+	 width="150" />	 
 </floater>
+
diff --git a/indra/newview/skins/default/xui/ja/notifications.xml b/indra/newview/skins/default/xui/ja/notifications.xml
index 709797cb58..d1a5e88d46 100644
--- a/indra/newview/skins/default/xui/ja/notifications.xml
+++ b/indra/newview/skins/default/xui/ja/notifications.xml
@@ -2231,8 +2231,7 @@ Web ページにリンクすると、他人がこの場所に簡単にアクセ
 [NAME]
 [DATE]
 		<form name="form">
-			<button name="Teleport" text="テレポート"/>
-			<button name="Description" text="説明"/>
+			<button name="Details" text="説明"/>
 			<button name="Cancel" text="取り消し"/>
 		</form>
 	</notification>
diff --git a/indra/newview/skins/default/xui/nl/notifications.xml b/indra/newview/skins/default/xui/nl/notifications.xml
index a282c267a1..a282c70364 100644
--- a/indra/newview/skins/default/xui/nl/notifications.xml
+++ b/indra/newview/skins/default/xui/nl/notifications.xml
@@ -2550,8 +2550,7 @@ Probeer een kleiner stuk land te selecteren.
 [NAME]
 [DATE]
 		<form name="form">
-			<button name="Teleport" text="Teleport"/>
-			<button name="Description" text="Omschrijving"/>
+			<button name="Details" text="Omschrijving"/>
 			<button name="Cancel" text="Annuleren"/>
 		</form>
 	</notification>
diff --git a/indra/newview/skins/default/xui/pl/floater_event.xml b/indra/newview/skins/default/xui/pl/floater_event.xml
index 80862bfd2f..632e0b8a44 100644
--- a/indra/newview/skins/default/xui/pl/floater_event.xml
+++ b/indra/newview/skins/default/xui/pl/floater_event.xml
@@ -1,72 +1,39 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater label="IMPREZA" name="Event" title="IMPREZA">
-	<floater.string name="none">
-		żadne
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<floater
+ follows="all"
+ height="400"
+ can_resize="true"
+ help_topic="event_details"
+ label="Event"
+ layout="topleft"
+ name="Event"
+ save_rect="true"
+ save_visibility="false"
+ title="EVENT DETAILS" 
+ width="600">
+	<floater.string
+		name="loading_text">
+		Ładowanie...
 	</floater.string>
-	<floater.string name="notify">
-		Zawiadom
-	</floater.string>
-	<floater.string name="dont_notify">
-		Nie zawiadamiaj
-	</floater.string>
-	<floater.string name="moderate">
-		Mature
-	</floater.string>
-	<floater.string name="adult">
-		Adult
-	</floater.string>
-	<floater.string name="general">
-		General
-	</floater.string>
-	<floater.string name="unknown">
-		Nieznana
-	</floater.string>
-	<layout_stack name="layout">
-		<layout_panel name="profile_stack">
-			<text name="event_name">
-				Brak nazwy dla wydarzenia.
-			</text>
-			<text name="event_category">
-				(bez kategorii)
-			</text>
-			<text name="event_runby_label">
-				Prowadzona przez:
-			</text>
-			<text initial_value="(przetwarzanie)" name="event_runby"/>
-			<text name="event_date_label">
-				Data:
-			</text>
-			<text name="event_date">
-				10/10/2010
-			</text>
-			<text name="event_duration_label">
-				Długość:
-			</text>
-			<text name="event_duration">
-				1 godzina
-			</text>
-			<text name="event_covercharge_label">
-				Opłata:
-			</text>
-			<text name="event_cover">
-				Bez opłaty
-			</text>
-			<text name="event_location_label">
-				Lokalizacja:
-			</text>
-			<text name="event_location" value="SampleParcel, Name Long (145, 228, 26)"/>
-			<text name="rating_label" value="Rodzaj:"/>
-			<text name="rating_value" value="nieznane"/>
-			<expandable_text name="event_desc">
-				Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
-			</expandable_text>
-		</layout_panel>
-		<layout_panel name="button_panel">
-			<button name="create_event_btn" tool_tip="Stwórz imprezę"/>
-			<button name="god_delete_event_btn" tool_tip="Skasuj imprezę"/>
-			<button label="Zawiadom mnie" name="notify_btn"/>
-			<button label="Teleportuj" name="teleport_btn"/>
-			<button label="Mapa" name="map_btn"/>
-		</layout_panel>
-	</layout_stack>
+    <floater.string
+     name="done_text">
+        Done
+    </floater.string>
+  <web_browser
+     follows="left|right|top|bottom"
+     layout="topleft"
+     left="10"
+     name="browser"
+     height="365"
+     width="580"
+     top="0"/>
+	<text
+	 follows="bottom|left"
+	 height="16"
+	 layout="topleft"
+	 left_delta="0"
+	 name="status_text"
+	 top_pad="10"
+	 width="150" />	 
 </floater>
+
diff --git a/indra/newview/skins/default/xui/pl/notifications.xml b/indra/newview/skins/default/xui/pl/notifications.xml
index 7fcd7b5e04..02de82dd53 100644
--- a/indra/newview/skins/default/xui/pl/notifications.xml
+++ b/indra/newview/skins/default/xui/pl/notifications.xml
@@ -2153,8 +2153,7 @@ Spróbuj wybrać mniejszy obszar.
 [NAME]
 [DATE]
 		<form name="form">
-			<button name="Teleport" text="Teleportuj"/>
-			<button name="Description" text="Opis"/>
+			<button name="Details" text="Opis"/>
 			<button name="Cancel" text="Anuluj"/>
 		</form>
 	</notification>
diff --git a/indra/newview/skins/default/xui/pt/floater_event.xml b/indra/newview/skins/default/xui/pt/floater_event.xml
index 1cd4dcbda4..548c0bff86 100644
--- a/indra/newview/skins/default/xui/pt/floater_event.xml
+++ b/indra/newview/skins/default/xui/pt/floater_event.xml
@@ -1,72 +1,39 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater label="Evento" name="Event" title="DETALHES DO EVENTO">
-	<floater.string name="none">
-		nenhum
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<floater
+ follows="all"
+ height="400"
+ can_resize="true"
+ help_topic="event_details"
+ label="Event"
+ layout="topleft"
+ name="Event"
+ save_rect="true"
+ save_visibility="false"
+ title="EVENT DETAILS" 
+ width="600">
+	<floater.string
+		name="loading_text">
+		Carregando...
 	</floater.string>
-	<floater.string name="notify">
-		Avisar
-	</floater.string>
-	<floater.string name="dont_notify">
-		Não avisar
-	</floater.string>
-	<floater.string name="moderate">
-		Moderado
-	</floater.string>
-	<floater.string name="adult">
-		Adulto
-	</floater.string>
-	<floater.string name="general">
-		Público geral
-	</floater.string>
-	<floater.string name="unknown">
-		Desconhecido
-	</floater.string>
-	<layout_stack name="layout">
-		<layout_panel name="profile_stack">
-			<text name="event_name">
-				Evento sem nome... Terror! Terror Aterrorizante.
-			</text>
-			<text name="event_category">
-				(não categorizado)
-			</text>
-			<text name="event_runby_label">
-				Organização:
-			</text>
-			<text initial_value="(pesquisando)" name="event_runby"/>
-			<text name="event_date_label">
-				Data:
-			</text>
-			<text name="event_date">
-				10/10/2010
-			</text>
-			<text name="event_duration_label">
-				Duração:
-			</text>
-			<text name="event_duration">
-				1 hora
-			</text>
-			<text name="event_covercharge_label">
-				Cover:
-			</text>
-			<text name="event_cover">
-				Grátis
-			</text>
-			<text name="event_location_label">
-				Localização:
-			</text>
-			<text name="event_location" value="LoteExemplo, Nome extenso (145, 228, 26)"/>
-			<text name="rating_label" value="Classificação:"/>
-			<text name="rating_value" value="(Desconhecido)"/>
-			<expandable_text name="event_desc">
-				Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
-			</expandable_text>
-		</layout_panel>
-		<layout_panel name="button_panel">
-			<button name="create_event_btn" tool_tip="Criar evento"/>
-			<button name="god_delete_event_btn" tool_tip="Excluir evento"/>
-			<button label="Avise-me" name="notify_btn"/>
-			<button label="Teletransportar" name="teleport_btn"/>
-			<button label="Mapa" name="map_btn"/>
-		</layout_panel>
-	</layout_stack>
+    <floater.string
+     name="done_text">
+        Done
+    </floater.string>
+  <web_browser
+     follows="left|right|top|bottom"
+     layout="topleft"
+     left="10"
+     name="browser"
+     height="365"
+     width="580"
+     top="0"/>
+	<text
+	 follows="bottom|left"
+	 height="16"
+	 layout="topleft"
+	 left_delta="0"
+	 name="status_text"
+	 top_pad="10"
+	 width="150" />	 
 </floater>
+
diff --git a/indra/newview/skins/default/xui/pt/notifications.xml b/indra/newview/skins/default/xui/pt/notifications.xml
index a6645d8b13..19269bbc1c 100644
--- a/indra/newview/skins/default/xui/pt/notifications.xml
+++ b/indra/newview/skins/default/xui/pt/notifications.xml
@@ -2165,8 +2165,7 @@ Selecione o residente da lista e clique em &apos;MI&apos; na parte de baixo do p
 [NAME]
 [DATE]
 		<form name="form">
-			<button name="Teleport" text="Teletransporte"/>
-			<button name="Description" text="Descrição"/>
+			<button name="Details" text="Descrição"/>
 			<button name="Cancel" text="Cancelar"/>
 		</form>
 	</notification>
-- 
cgit v1.2.3


From 7cb3a6bca8317cde76bf10eb16944a2175f594bd Mon Sep 17 00:00:00 2001
From: Paul Guslisty <pguslisty@productengine.com>
Date: Wed, 13 Oct 2010 15:31:16 +0300
Subject: STORM-196 FIXED 'Undo changes' button is absent on 'Edit wearable'
 panel

-Added "top" parameter to the button to put button in visible area

-Added "left_pad" and changed "width" parameters for proper positioning inside layout_panel
---
 indra/newview/skins/default/xui/en/panel_edit_wearable.xml | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml
index 95c1c822b8..b8ef612c6c 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml
@@ -463,9 +463,10 @@
                  height="23"
                  label="Undo Changes"
                  layout="topleft"
-                 left_pad="7"
+                 left="1"
                  name="revert_button"
-                 width="152" />
+                 top="0"
+                 width="148" />
             </layout_panel>
         </layout_stack>
     </panel>
-- 
cgit v1.2.3


From fa20a3fe100bd2c99b6fe4c087c79268752a107c Mon Sep 17 00:00:00 2001
From: Loren Shih <seraph@lindenlab.com>
Date: Wed, 13 Oct 2010 17:05:53 -0400
Subject: SH-325 FIXED Add terminal / to SearchURL in viewer settings.xml Added
 "/".  Simple fix.

---
 indra/newview/app_settings/settings.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 47524a0e91..535bc95287 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -3863,7 +3863,7 @@
       <key>Type</key>
       <string>String</string>
       <key>Value</key>
-      <string>http://search.secondlife.com/viewer/[CATEGORY]?q=[QUERY]&amp;p=[AUTH_TOKEN]&amp;r=[MATURITY]&amp;lang=[LANGUAGE]&amp;g=[GODLIKE]&amp;sid=[SESSION_ID]&amp;rid=[REGION_ID]&amp;pid=[PARCEL_ID]&amp;channel=[CHANNEL]&amp;version=[VERSION]&amp;major=[VERSION_MAJOR]&amp;minor=[VERSION_MINOR]&amp;patch=[VERSION_PATCH]&amp;build=[VERSION_BUILD]</string>
+      <string>http://search.secondlife.com/viewer/[CATEGORY]/?q=[QUERY]&amp;p=[AUTH_TOKEN]&amp;r=[MATURITY]&amp;lang=[LANGUAGE]&amp;g=[GODLIKE]&amp;sid=[SESSION_ID]&amp;rid=[REGION_ID]&amp;pid=[PARCEL_ID]&amp;channel=[CHANNEL]&amp;version=[VERSION]&amp;major=[VERSION_MAJOR]&amp;minor=[VERSION_MINOR]&amp;patch=[VERSION_PATCH]&amp;build=[VERSION_BUILD]</string>
     </map>
     <key>HighResSnapshot</key>
     <map>
-- 
cgit v1.2.3


From 0957d94baa6067708061bbb53e8abc925ad69208 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Fri, 12 Nov 2010 16:03:35 -0800
Subject: DN-170 Info icon covers name in Inventory > Properties view in side
 panel DN-171 Landmark > More information panel can have name information
 clipped off for creator and owner

---
 indra/newview/skins/default/xui/en/panel_landmark_info.xml | 6 ++++--
 indra/newview/skins/default/xui/en/sidepanel_item_info.xml | 4 ++--
 indra/newview/skins/default/xui/en/sidepanel_task_info.xml | 2 ++
 3 files changed, 8 insertions(+), 4 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_landmark_info.xml b/indra/newview/skins/default/xui/en/panel_landmark_info.xml
index f8ae238148..f8635b9edb 100644
--- a/indra/newview/skins/default/xui/en/panel_landmark_info.xml
+++ b/indra/newview/skins/default/xui/en/panel_landmark_info.xml
@@ -184,7 +184,8 @@
                  left="70"
                  name="owner"
                  top_delta="0"
-                 width="200" />
+                 use_ellipses="true" 
+                 width="215" />
                 <text
                  follows="left|top"
                  height="15"
@@ -200,7 +201,8 @@
                  left="70"
                  name="creator"
                  top_delta="0"
-                 width="200" />
+                 use_ellipses="true" 
+                 width="215" />
                 <text
                  follows="left|top"
                  height="15"
diff --git a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
index 4b6d4b023b..8760c911dc 100644
--- a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
@@ -176,7 +176,7 @@
                  name="LabelCreatorName"
        top_delta="6"
        use_ellipses="true"
-       width="180">
+       width="165">
           </text>
           <button
           follows="top|right"
@@ -219,7 +219,7 @@
           name="LabelOwnerName"
           top_delta="6"
        use_ellipses="true"
-			 width="180">
+			 width="165">
           </text>
              <button
                  follows="top|right"
diff --git a/indra/newview/skins/default/xui/en/sidepanel_task_info.xml b/indra/newview/skins/default/xui/en/sidepanel_task_info.xml
index 5da449de3d..a2f7edb167 100644
--- a/indra/newview/skins/default/xui/en/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_task_info.xml
@@ -167,6 +167,7 @@
      left_pad="0"
              name="Creator Name"
 		     top_delta="0"
+         use_ellipses="true" 
 		     width="225">
 	        Erica Linden
 	     </text>
@@ -191,6 +192,7 @@
 			    left_pad="0"
 			    name="Owner Name"
 			    top_delta="0"
+          use_ellipses="true" 
 			    width="225">
 			    Erica Linden
 	     </text>
-- 
cgit v1.2.3


From 84f06e40e1e12723228e31d1a329c899cec99751 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Wed, 13 Oct 2010 14:36:01 -0700
Subject: DN-165 User cannot reset name to default if they are throttled
 because they receive the Sorry you cannot change your display name until
 [time] message. They cannot access the change display name dialog to hit
 reset when throttled.

---
 indra/newview/llfloaterdisplayname.cpp             | 57 +++++++++++++++++++---
 indra/newview/llpanelme.cpp                        | 12 -----
 .../skins/default/xui/en/floater_display_name.xml  | 34 ++++++++++---
 .../newview/skins/default/xui/en/notifications.xml | 10 +---
 4 files changed, 79 insertions(+), 34 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloaterdisplayname.cpp b/indra/newview/llfloaterdisplayname.cpp
index 11ac3d8fdf..ac8f107928 100644
--- a/indra/newview/llfloaterdisplayname.cpp
+++ b/indra/newview/llfloaterdisplayname.cpp
@@ -67,6 +67,37 @@ void LLFloaterDisplayName::onOpen(const LLSD& key)
 {
 	getChild<LLUICtrl>("display_name_editor")->clear();
 	getChild<LLUICtrl>("display_name_confirm")->clear();
+
+	LLAvatarName av_name;
+	LLAvatarNameCache::get(gAgent.getID(), &av_name);
+
+	F64 now_secs = LLDate::now().secondsSinceEpoch();
+
+	if (now_secs < av_name.mNextUpdate)
+	{
+		// ...can't update until some time in the future
+		F64 next_update_local_secs =
+			av_name.mNextUpdate - LLStringOps::getLocalTimeOffset();
+		LLDate next_update_local(next_update_local_secs);
+		// display as "July 18 12:17 PM"
+		std::string next_update_string =
+		next_update_local.toHTTPDateString("%B %d %I:%M %p");
+		getChild<LLUICtrl>("lockout_text")->setTextArg("[TIME]", next_update_string);
+		getChild<LLUICtrl>("lockout_text")->setVisible(true);
+		getChild<LLUICtrl>("save_btn")->setEnabled(false);
+		getChild<LLUICtrl>("display_name_editor")->setEnabled(false);
+		getChild<LLUICtrl>("display_name_confirm")->setEnabled(false);
+		getChild<LLUICtrl>("cancel_btn")->setFocus(TRUE);
+		
+	}
+	else
+	{
+		getChild<LLUICtrl>("lockout_text")->setVisible(false);
+		getChild<LLUICtrl>("save_btn")->setEnabled(true);
+		getChild<LLUICtrl>("display_name_editor")->setEnabled(true);
+		getChild<LLUICtrl>("display_name_confirm")->setEnabled(true);
+
+	}
 }
 
 BOOL LLFloaterDisplayName::postBuild()
@@ -133,9 +164,16 @@ void LLFloaterDisplayName::onCancel()
 
 void LLFloaterDisplayName::onReset()
 {
-	LLViewerDisplayName::set("",
-		boost::bind(&LLFloaterDisplayName::onCacheSetName, this, _1, _2, _3));
-
+	if (LLAvatarNameCache::useDisplayNames())
+	{
+		LLViewerDisplayName::set("",
+			boost::bind(&LLFloaterDisplayName::onCacheSetName, this, _1, _2, _3));
+	}	
+	else
+	{
+		LLNotificationsUtil::add("SetDisplayNameFailedGeneric");
+	}
+	
 	setVisible(false);
 }
 
@@ -160,9 +198,16 @@ void LLFloaterDisplayName::onSave()
 		LLNotificationsUtil::add("SetDisplayNameFailedLength", args);
 		return;
 	}
-
-	LLViewerDisplayName::set(display_name_utf8,
-		boost::bind(&LLFloaterDisplayName::onCacheSetName, this, _1, _2, _3));	
+	
+	if (LLAvatarNameCache::useDisplayNames())
+	{
+		LLViewerDisplayName::set(display_name_utf8,
+			boost::bind(&LLFloaterDisplayName::onCacheSetName, this, _1, _2, _3));	
+	}
+	else
+	{
+		LLNotificationsUtil::add("SetDisplayNameFailedGeneric");
+	}
 
 	setVisible(false);
 }
diff --git a/indra/newview/llpanelme.cpp b/indra/newview/llpanelme.cpp
index f587923269..a9f7b6c62c 100644
--- a/indra/newview/llpanelme.cpp
+++ b/indra/newview/llpanelme.cpp
@@ -394,18 +394,6 @@ void LLPanelMyProfileEdit::onAvatarNameCache(const LLUUID& agent_id, const LLAva
 			LLNotificationsUtil::add("SetDisplayNameBlocked");
 			return;
 		}
-	
-		// ...can't update until some time in the future
-		F64 next_update_local_secs =
-			av_name.mNextUpdate - LLStringOps::getLocalTimeOffset();
-		LLDate next_update_local(next_update_local_secs);
-		// display as "July 18 12:17 PM"
-		std::string next_update_string =
-		next_update_local.toHTTPDateString("%B %d %I:%M %p");
-		LLSD args;
-		args["TIME"] = next_update_string;
-		LLNotificationsUtil::add("SetDisplayNameFailedLockout", args);
-		return;
 	}
 	
 	LLFloaterReg::showInstance("display_name");
diff --git a/indra/newview/skins/default/xui/en/floater_display_name.xml b/indra/newview/skins/default/xui/en/floater_display_name.xml
index ecf2e524aa..7a3fb9334a 100644
--- a/indra/newview/skins/default/xui/en/floater_display_name.xml
+++ b/indra/newview/skins/default/xui/en/floater_display_name.xml
@@ -3,12 +3,13 @@
  legacy_header_height="18"
  can_minimize="false"
  can_close="false" 
- height="280"
+ height="300"
  layout="topleft"
  name="Display Name"
  help_topic="display_name"
  save_rect="false"
- width="440">
+ title="CHANGE DISPLAY NAME" 
+ width="445">
     <text
      type="string"
      length="1"
@@ -20,17 +21,34 @@
      name="info_text"
      top="40"
      use_ellipses="true"
-     width="400"
+     width="380"
      wrap="true">
       The name you give your avatar is called your Display Name. You can change it once a week.
     </text>
+	<text
+     type="string"
+     length="1"
+     follows="left|top"
+     font="SansSerif"
+     height="25"
+     layout="topleft"
+     left="25"
+	 text_color="EmphasisColor" 
+     name="lockout_text"
+     top="80"
+     use_ellipses="true"
+	 visible="false" 
+     width="410"
+     wrap="true">
+		You cannot change your Display Name until: [TIME].
+	</text>
     <text
-      top_pad="15"
+      top_pad="10"
       width="150"
       height="20"
       font="SansSerif"
       name="set_name_label">
-      New display name:
+      New Display Name:
     </text>
     <line_editor
       width="330"
@@ -39,9 +57,9 @@
       height="20"
       top_pad="5"
       left="50" />
-    <text
+	<text
        top_pad="15"
-       left="25" 
+       left="25"
        width="300"
        height="20"
       font="SansSerif"
@@ -62,6 +80,7 @@
      font="SansSerif"
      left="35"
      name="save_btn"
+     tool_tip="Save your new Display Name" 
      top_pad="40"
      width="120" />
     <button
@@ -71,6 +90,7 @@
      font="SansSerif"
      left_pad="5"
      name="reset_btn"
+     tool_tip="Make Display Name the same as Username"
      width="120" />
     <button
      height="23"
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 4e25efe555..7e9cc6772d 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -3193,14 +3193,6 @@ Hi [DISPLAY_NAME]!
 Just like in real life, it takes a while for everyone to learn about a new name.  Please allow several days for [http://wiki.secondlife.com/wiki/Setting_your_display_name your name to update] in objects, scripts, search, etc.
   </notification>
 
-  <notification
-   icon="alertmodal.tga"
-   name="SetDisplayNameFailedLockout"
-   type="alert">
-Sorry, you cannot [http://wiki.secondlife.com/wiki/Setting_your_display_name change your display name] until:
-[TIME]
-  </notification>
-
   <notification
  icon="alertmodal.tga"
  name="SetDisplayNameBlocked"
@@ -3231,7 +3223,7 @@ Please try a shorter name.
     The display names you entered do not match. Please re-enter.
   </notification>
 
-  <!-- *NOTE: This should never happen, users should see SetDisplayNameFailedLockout above -->
+  <!-- *NOTE: This should never happen -->
   <notification
    icon="alertmodal.tga"
    name="AgentDisplayNameUpdateThresholdExceeded"
-- 
cgit v1.2.3


From 330ea83c3dd8f56f4cef56481f951b705d28f027 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Wed, 13 Oct 2010 15:39:16 -0700
Subject: making profiles look nicer when display names isn't on

---
 indra/newview/llpanelme.cpp                        | 38 +++++++++++++++-------
 indra/newview/llpanelprofileview.cpp               |  3 +-
 .../skins/default/xui/en/panel_edit_profile.xml    | 36 ++++++++++++++++----
 .../skins/default/xui/en/panel_profile_view.xml    | 13 +++++++-
 4 files changed, 71 insertions(+), 19 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llpanelme.cpp b/indra/newview/llpanelme.cpp
index a9f7b6c62c..5ea94e0611 100644
--- a/indra/newview/llpanelme.cpp
+++ b/indra/newview/llpanelme.cpp
@@ -212,6 +212,8 @@ void LLPanelMyProfileEdit::onOpen(const LLSD& key)
 		getChild<LLUICtrl>("display_name_label")->setVisible( true );
 		getChild<LLUICtrl>("set_name")->setVisible( true );
 		getChild<LLUICtrl>("set_name")->setEnabled( true );
+		getChild<LLUICtrl>("solo_user_name")->setVisible( false );
+		getChild<LLUICtrl>("solo_username_label")->setVisible( false );
 	}
 	else
 	{
@@ -220,6 +222,8 @@ void LLPanelMyProfileEdit::onOpen(const LLSD& key)
 		getChild<LLUICtrl>("display_name_label")->setVisible( false );
 		getChild<LLUICtrl>("set_name")->setVisible( false );
 		getChild<LLUICtrl>("set_name")->setEnabled( false );
+		getChild<LLUICtrl>("solo_user_name")->setVisible( true );
+		getChild<LLUICtrl>("solo_username_label")->setVisible( true );
 	}
 }
 
@@ -270,18 +274,8 @@ void LLPanelMyProfileEdit::onNameCache(const LLUUID& agent_id, const LLAvatarNam
 	getChild<LLUICtrl>("user_name")->setValue( av_name.mDisplayName );
 	getChild<LLUICtrl>("user_slid")->setValue( av_name.mUsername );
 	getChild<LLUICtrl>("user_name_small")->setValue( av_name.mDisplayName );
+	getChild<LLUICtrl>("solo_user_name")->setValue( av_name.mDisplayName );
 
-	// show smaller display name if too long to display in regular size
-	if (getChild<LLTextBox>("user_name")->getTextPixelWidth() > getChild<LLTextBox>("user_name")->getRect().getWidth())
-	{
-		getChild<LLUICtrl>("user_name_small")->setVisible( true );
-		getChild<LLUICtrl>("user_name")->setVisible( false );
-	}
-	else
-	{
-		getChild<LLUICtrl>("user_name_small")->setVisible( false );
-		getChild<LLUICtrl>("user_name")->setVisible( true );
-	}
 
 	if (LLAvatarNameCache::useDisplayNames())
 	{
@@ -290,6 +284,21 @@ void LLPanelMyProfileEdit::onNameCache(const LLUUID& agent_id, const LLAvatarNam
 		getChild<LLUICtrl>("display_name_label")->setVisible( true );
 		getChild<LLUICtrl>("set_name")->setVisible( true );
 		getChild<LLUICtrl>("set_name")->setEnabled( true );
+
+		getChild<LLUICtrl>("solo_user_name")->setVisible( false );
+		getChild<LLUICtrl>("solo_username_label")->setVisible( false );
+
+		// show smaller display name if too long to display in regular size
+		if (getChild<LLTextBox>("user_name")->getTextPixelWidth() > getChild<LLTextBox>("user_name")->getRect().getWidth())
+		{
+			getChild<LLUICtrl>("user_name_small")->setVisible( true );
+			getChild<LLUICtrl>("user_name")->setVisible( false );
+		}
+		else
+		{
+			getChild<LLUICtrl>("user_name_small")->setVisible( false );
+			getChild<LLUICtrl>("user_name")->setVisible( true );
+		}
 	}
 	else
 	{
@@ -298,6 +307,11 @@ void LLPanelMyProfileEdit::onNameCache(const LLUUID& agent_id, const LLAvatarNam
 		getChild<LLUICtrl>("display_name_label")->setVisible( false );
 		getChild<LLUICtrl>("set_name")->setVisible( false );
 		getChild<LLUICtrl>("set_name")->setEnabled( false );
+		
+		getChild<LLUICtrl>("solo_user_name")->setVisible( true );
+		getChild<LLUICtrl>("user_name_small")->setVisible( false );
+		getChild<LLUICtrl>("user_name")->setVisible( false );
+		getChild<LLUICtrl>("solo_username_label")->setVisible( true );
 	}
 }
 
@@ -351,6 +365,8 @@ void LLPanelMyProfileEdit::resetData()
 	//childSetTextArg("name_text", "[LAST]", LLStringUtil::null);
 	getChild<LLUICtrl>("user_name")->setValue( LLSD() );
 	getChild<LLUICtrl>("user_slid")->setValue( LLSD() );
+	getChild<LLUICtrl>("solo_user_name")->setValue( LLSD() );
+	getChild<LLUICtrl>("user_name_small")->setValue( LLSD() );
 }
 
 void LLPanelMyProfileEdit::onTexturePickerMouseEnter(LLUICtrl* ctrl)
diff --git a/indra/newview/llpanelprofileview.cpp b/indra/newview/llpanelprofileview.cpp
index 9011583a60..7635aedf58 100644
--- a/indra/newview/llpanelprofileview.cpp
+++ b/indra/newview/llpanelprofileview.cpp
@@ -222,7 +222,6 @@ void LLPanelProfileView::onAvatarNameCache(const LLUUID& agent_id,
 	{
 		getChild<LLUICtrl>("user_name_small")->setVisible( false );
 		getChild<LLUICtrl>("user_name")->setVisible( true );
-
 	}
 
 	if (LLAvatarNameCache::useDisplayNames())
@@ -232,6 +231,7 @@ void LLPanelProfileView::onAvatarNameCache(const LLUUID& agent_id,
 		getChild<LLUICtrl>("display_name_label")->setVisible( true );
 		getChild<LLUICtrl>("copy_to_clipboard")->setVisible( true );
 		getChild<LLUICtrl>("copy_to_clipboard")->setEnabled( true );
+		getChild<LLUICtrl>("solo_username_label")->setVisible( false );
 	}
 	else
 	{
@@ -240,6 +240,7 @@ void LLPanelProfileView::onAvatarNameCache(const LLUUID& agent_id,
 		getChild<LLUICtrl>("display_name_label")->setVisible( false );
 		getChild<LLUICtrl>("copy_to_clipboard")->setVisible( false );
 		getChild<LLUICtrl>("copy_to_clipboard")->setEnabled( false );
+		getChild<LLUICtrl>("solo_username_label")->setVisible( true );
 	}
 }
 
diff --git a/indra/newview/skins/default/xui/en/panel_edit_profile.xml b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
index 70c7bae662..90dbddaff7 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
@@ -96,6 +96,17 @@
      name="display_name_label"
      text_color="LtGray"
      value="Display Name:"
+     width="80" />
+      <text
+     top="5"
+     follows="top|left"
+     height="13"
+     layout="topleft"
+     left="10"
+     name="solo_username_label"
+     text_color="LtGray"
+     value="Username:"
+     visible="false" 
      width="80" />
       <button
          name="set_name"
@@ -112,13 +123,26 @@
        font="SansSerifBigBold"
        height="20"
        layout="topleft"
-       left_pad="10"
-       name="user_name"
+       left="10"
+       name="solo_user_name"
        text_color="white"
        top_delta="3"
        value="Hamilton Hitchings"
-       use_ellipses="true" 
-       visible="true" 
+       use_ellipses="true"
+       visible="false"
+       width="275" />
+      <text
+       follows="top|left"
+       font="SansSerifBigBold"
+       height="20"
+       layout="topleft"
+       left="43"
+       name="user_name"
+       text_color="white"
+       top_delta="0"
+       value="Hamilton Hitchings"
+       use_ellipses="true"
+       visible="true"
        width="250" />
       <text
        follows="top|left"
@@ -131,7 +155,7 @@
        top_delta="-4"
        value="Hamilton Hitchings"
        use_ellipses="true"
-       visible="false" 
+       visible="false"
        wrap="true"
        width="245" />
       <text
@@ -141,7 +165,7 @@
     left="10"
     name="user_label"
     text_color="LtGray"
-    top_pad="8" 
+    top_pad="8"
     value="Username:"
     width="70" />
       <text
diff --git a/indra/newview/skins/default/xui/en/panel_profile_view.xml b/indra/newview/skins/default/xui/en/panel_profile_view.xml
index dc5173867b..97229c413c 100644
--- a/indra/newview/skins/default/xui/en/panel_profile_view.xml
+++ b/indra/newview/skins/default/xui/en/panel_profile_view.xml
@@ -38,6 +38,17 @@
    text_color="LtGray"
    value="Display Name:"
    width="80" />
+  <text
+   top_delta="0"
+   follows="top|left"
+   height="13"
+   layout="topleft"
+   left="45"
+   name="solo_username_label"
+   text_color="LtGray"
+   value="Username:"
+   visible="false" 
+   width="80" />
   <text
    follows="top|right"
    halign="right"
@@ -108,7 +119,7 @@
    top_delta="-2"
    use_ellipses="true"
    value="jack.linden"
-   width="205" 
+   width="195" 
    wrap="true "/>
   <tab_container
    follows="all"
-- 
cgit v1.2.3


From a486319bd04d01a02f19e61810c84916986de5e5 Mon Sep 17 00:00:00 2001
From: Roxie Linden <roxie@lindenlab.com>
Date: Wed, 13 Oct 2010 18:07:33 -0700
Subject: fix issue with last merge due to trusted browser changes

---
 indra/newview/llfloaterevent.cpp                   |  1 -
 .../newview/skins/default/xui/da/floater_event.xml |  1 +
 .../newview/skins/default/xui/de/floater_event.xml |  1 +
 .../newview/skins/default/xui/en/floater_event.xml |  1 +
 .../newview/skins/default/xui/es/floater_event.xml |  1 +
 .../newview/skins/default/xui/fr/floater_event.xml |  1 +
 .../newview/skins/default/xui/it/floater_event.xml |  1 +
 .../newview/skins/default/xui/ja/floater_event.xml |  1 +
 .../newview/skins/default/xui/nl/floater_event.xml | 40 ++++++++++++++++++++++
 .../newview/skins/default/xui/pl/floater_event.xml |  1 +
 .../newview/skins/default/xui/pt/floater_event.xml |  1 +
 11 files changed, 49 insertions(+), 1 deletion(-)
 create mode 100644 indra/newview/skins/default/xui/nl/floater_event.xml

(limited to 'indra/newview')

diff --git a/indra/newview/llfloaterevent.cpp b/indra/newview/llfloaterevent.cpp
index 0513146e8c..0b5ac8e798 100644
--- a/indra/newview/llfloaterevent.cpp
+++ b/indra/newview/llfloaterevent.cpp
@@ -78,7 +78,6 @@ BOOL LLFloaterEvent::postBuild()
 	if (mBrowser)
 	{
 		mBrowser->addObserver(this);
-		mBrowser->setTrusted(true);
 	}
 
 	return TRUE;
diff --git a/indra/newview/skins/default/xui/da/floater_event.xml b/indra/newview/skins/default/xui/da/floater_event.xml
index 1d16c942dd..58f2e555dd 100644
--- a/indra/newview/skins/default/xui/da/floater_event.xml
+++ b/indra/newview/skins/default/xui/da/floater_event.xml
@@ -20,6 +20,7 @@
         Done
     </floater.string>
   <web_browser
+     trusted_content="true" 
      follows="left|right|top|bottom"
      layout="topleft"
      left="10"
diff --git a/indra/newview/skins/default/xui/de/floater_event.xml b/indra/newview/skins/default/xui/de/floater_event.xml
index 13108100f6..87fb580aba 100644
--- a/indra/newview/skins/default/xui/de/floater_event.xml
+++ b/indra/newview/skins/default/xui/de/floater_event.xml
@@ -20,6 +20,7 @@
         Done
     </floater.string>
   <web_browser
+     trusted_content="true" 
      follows="left|right|top|bottom"
      layout="topleft"
      left="10"
diff --git a/indra/newview/skins/default/xui/en/floater_event.xml b/indra/newview/skins/default/xui/en/floater_event.xml
index 1be9748711..7ed020f832 100644
--- a/indra/newview/skins/default/xui/en/floater_event.xml
+++ b/indra/newview/skins/default/xui/en/floater_event.xml
@@ -20,6 +20,7 @@
         Done
     </floater.string>
   <web_browser
+     trusted_content="true" 
      follows="left|right|top|bottom"
      layout="topleft"
      left="10"
diff --git a/indra/newview/skins/default/xui/es/floater_event.xml b/indra/newview/skins/default/xui/es/floater_event.xml
index f37c722f03..8bca7783ab 100644
--- a/indra/newview/skins/default/xui/es/floater_event.xml
+++ b/indra/newview/skins/default/xui/es/floater_event.xml
@@ -20,6 +20,7 @@
         Done
     </floater.string>
   <web_browser
+     trusted_content="true" 
      follows="left|right|top|bottom"
      layout="topleft"
      left="10"
diff --git a/indra/newview/skins/default/xui/fr/floater_event.xml b/indra/newview/skins/default/xui/fr/floater_event.xml
index 72361c0c1a..3527d89973 100644
--- a/indra/newview/skins/default/xui/fr/floater_event.xml
+++ b/indra/newview/skins/default/xui/fr/floater_event.xml
@@ -20,6 +20,7 @@
         Done
     </floater.string>
   <web_browser
+     trusted_content="true" 
      follows="left|right|top|bottom"
      layout="topleft"
      left="10"
diff --git a/indra/newview/skins/default/xui/it/floater_event.xml b/indra/newview/skins/default/xui/it/floater_event.xml
index 177305e648..9a0105a589 100644
--- a/indra/newview/skins/default/xui/it/floater_event.xml
+++ b/indra/newview/skins/default/xui/it/floater_event.xml
@@ -20,6 +20,7 @@
         Done
     </floater.string>
   <web_browser
+     trusted_content="true" 
      follows="left|right|top|bottom"
      layout="topleft"
      left="10"
diff --git a/indra/newview/skins/default/xui/ja/floater_event.xml b/indra/newview/skins/default/xui/ja/floater_event.xml
index ec4188d300..9e99c4a931 100644
--- a/indra/newview/skins/default/xui/ja/floater_event.xml
+++ b/indra/newview/skins/default/xui/ja/floater_event.xml
@@ -20,6 +20,7 @@
         Done
     </floater.string>
   <web_browser
+     trusted_content="true" 
      follows="left|right|top|bottom"
      layout="topleft"
      left="10"
diff --git a/indra/newview/skins/default/xui/nl/floater_event.xml b/indra/newview/skins/default/xui/nl/floater_event.xml
new file mode 100644
index 0000000000..45ec58abdf
--- /dev/null
+++ b/indra/newview/skins/default/xui/nl/floater_event.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<floater
+ follows="all"
+ height="400"
+ can_resize="true"
+ help_topic="event_details"
+ label="Event"
+ layout="topleft"
+ name="Event"
+ save_rect="true"
+ save_visibility="false"
+ title="EVENT DETAILS" 
+ width="600">
+	<floater.string
+		name="loading_text">
+		Laden...
+	</floater.string>
+    <floater.string
+     name="done_text">
+        Done
+    </floater.string>
+  <web_browser
+     trusted_content="true" 
+     follows="left|right|top|bottom"
+     layout="topleft"
+     left="10"
+     name="browser"
+     height="365"
+     width="580"
+     top="0"/>
+	<text
+	 follows="bottom|left"
+	 height="16"
+	 layout="topleft"
+	 left_delta="0"
+	 name="status_text"
+	 top_pad="10"
+	 width="150" />	 
+</floater>
+
diff --git a/indra/newview/skins/default/xui/pl/floater_event.xml b/indra/newview/skins/default/xui/pl/floater_event.xml
index 632e0b8a44..6b24720d86 100644
--- a/indra/newview/skins/default/xui/pl/floater_event.xml
+++ b/indra/newview/skins/default/xui/pl/floater_event.xml
@@ -20,6 +20,7 @@
         Done
     </floater.string>
   <web_browser
+     trusted_content="true" 
      follows="left|right|top|bottom"
      layout="topleft"
      left="10"
diff --git a/indra/newview/skins/default/xui/pt/floater_event.xml b/indra/newview/skins/default/xui/pt/floater_event.xml
index 548c0bff86..df4fe9a6a8 100644
--- a/indra/newview/skins/default/xui/pt/floater_event.xml
+++ b/indra/newview/skins/default/xui/pt/floater_event.xml
@@ -20,6 +20,7 @@
         Done
     </floater.string>
   <web_browser
+     trusted_content="true" 
      follows="left|right|top|bottom"
      layout="topleft"
      left="10"
-- 
cgit v1.2.3


From 03277635d03e8e7c2f73285743fdd9c77802d76f Mon Sep 17 00:00:00 2001
From: Xiaohong Bao <bao@lindenlab.com>
Date: Wed, 13 Oct 2010 19:56:55 -0600
Subject: merge REV-13dc54d03e13 from skylight: fix for EXP-195: Custom login
 progress screen blurry when first presented to user as the image fully loads

---
 indra/newview/llviewertexture.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp
index 7ccd4828ba..f96b93da4d 100644
--- a/indra/newview/llviewertexture.cpp
+++ b/indra/newview/llviewertexture.cpp
@@ -1130,7 +1130,7 @@ void LLViewerFetchedTexture::init(bool firstinit)
 	// does not contain this image.
 	mIsMissingAsset = FALSE;
 
-	mLoadedCallbackDesiredDiscardLevel = 0;
+	mLoadedCallbackDesiredDiscardLevel = S8_MAX;
 	mPauseLoadedCallBacks = TRUE ;
 
 	mNeedsCreateTexture = FALSE;
@@ -1507,7 +1507,7 @@ void LLViewerFetchedTexture::processTextureStats()
 	}
 	else if(!mFullWidth || !mFullHeight)
 	{
-		mDesiredDiscardLevel = 	getMaxDiscardLevel() ;
+		mDesiredDiscardLevel = 	llmin(getMaxDiscardLevel(), (S32)mLoadedCallbackDesiredDiscardLevel) ;
 	}
 	else
 	{	
-- 
cgit v1.2.3


From 46596485982768844c9d373c2ddca3d678a24e2c Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Thu, 14 Oct 2010 12:34:28 +0300
Subject: STORM-381 FIXED Restored ability to join/create group from People tab
 > My Groups.

Backing out changeset fe6c8e0a4a23 (which was made to fix STORM-263).

We'll examine and fix the faulty changes.
---
 indra/newview/lloutfitslist.cpp                    |  23 +----
 indra/newview/llpanellandmarks.cpp                 |  12 ---
 indra/newview/llpanelmaininventory.cpp             |  13 +--
 indra/newview/llpanelmaininventory.h               |   2 -
 indra/newview/llpaneloutfitedit.cpp                |  27 ++---
 indra/newview/llpaneloutfitedit.h                  |   5 +-
 indra/newview/llpanelpeople.cpp                    | 110 +++++++++------------
 indra/newview/llpanelpeople.h                      |  11 +--
 indra/newview/llpanelteleporthistory.cpp           |  30 +++---
 indra/newview/llpanelteleporthistory.h             |   2 -
 indra/newview/llpanelwearing.cpp                   |  24 +----
 .../skins/default/xui/en/panel_landmarks.xml       |   2 +-
 .../skins/default/xui/en/panel_main_inventory.xml  |   2 +-
 .../skins/default/xui/en/panel_outfit_edit.xml     |   4 +-
 .../skins/default/xui/en/panel_outfits_list.xml    |   2 +-
 .../skins/default/xui/en/panel_outfits_wearing.xml |   2 +-
 .../newview/skins/default/xui/en/panel_people.xml  |   9 +-
 .../default/xui/en/panel_teleport_history.xml      |   2 +-
 18 files changed, 94 insertions(+), 188 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp
index bd9536d931..c0f7fa4abf 100644
--- a/indra/newview/lloutfitslist.cpp
+++ b/indra/newview/lloutfitslist.cpp
@@ -38,7 +38,6 @@
 #include "llinventoryfunctions.h"
 #include "llinventorymodel.h"
 #include "lllistcontextmenu.h"
-#include "llmenubutton.h"
 #include "llnotificationsutil.h"
 #include "lloutfitobserver.h"
 #include "llsidetray.h"
@@ -100,8 +99,10 @@ public:
 
 		updateItemsVisibility();
 		mMenu->buildDrawLabels();
-		mMenu->arrangeAndClear();
 		mMenu->updateParent(LLMenuGL::sMenuContainer);
+		S32 menu_x = 0;
+		S32 menu_y = spawning_view->getRect().getHeight() + mMenu->getRect().getHeight();
+		LLMenuGL::showPopup(spawning_view, mMenu, menu_x, menu_y);
 	}
 
 	void updateItemsVisibility()
@@ -114,8 +115,6 @@ public:
 		mMenu->arrangeAndClear(); // update menu height
 	}
 
-	LLMenuGL* getMenu() { return mMenu; }
-
 private:
 	const LLUUID& getSelectedOutfitID()
 	{
@@ -354,15 +353,6 @@ BOOL LLOutfitsList::postBuild()
 	mAccordion = getChild<LLAccordionCtrl>("outfits_accordion");
 	mAccordion->setComparator(&OUTFIT_TAB_NAME_COMPARATOR);
 
-	LLMenuButton* menu_gear_btn = getChild<LLMenuButton>("options_gear_btn");
-
-	// LLMenuButton::handleMouseDownCallback calls signal LLUICtrl::mouse_signal_t, not LLButton::commit_signal_t.
-	// That's why to set signal LLUICtrl::mouse_signal_t we need to upcast to LLUICtrl. Using static_cast instead
-	// of getChild<LLUICtrl>(...) for performance.
-	static_cast<LLUICtrl*>(menu_gear_btn)->setMouseDownCallback(boost::bind(&LLOutfitsList::showGearMenu, this, _1));
-
-	menu_gear_btn->setMenu(mGearMenu->getMenu());
-
 	return TRUE;
 }
 
@@ -705,14 +695,7 @@ bool LLOutfitsList::isActionEnabled(const LLSD& userdata)
 void LLOutfitsList::showGearMenu(LLView* spawning_view)
 {
 	if (!mGearMenu) return;
-
 	mGearMenu->show(spawning_view);
-
-	LLMenuButton* btn = dynamic_cast<LLMenuButton*>(spawning_view);
-	if (btn)
-	{
-		btn->setMenuPosition(LLMenuButton::ON_TOP_LEFT);
-	}
 }
 
 void LLOutfitsList::getSelectedItemsUUIDs(uuid_vec_t& selected_uuids) const
diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp
index 0e74cce37f..24bf67a000 100644
--- a/indra/newview/llpanellandmarks.cpp
+++ b/indra/newview/llpanellandmarks.cpp
@@ -47,7 +47,6 @@
 #include "llinventorymodelbackgroundfetch.h"
 #include "llinventorypanel.h"
 #include "lllandmarkactions.h"
-#include "llmenubutton.h"
 #include "llplacesinventorybridge.h"
 #include "llplacesinventorypanel.h"
 #include "llsidetray.h"
@@ -708,8 +707,6 @@ void LLLandmarksPanel::initListCommandsHandlers()
 	mMenuAdd = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_place_add_button.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
 
 	mListCommands->childSetAction(ADD_BUTTON_NAME, boost::bind(&LLLandmarksPanel::showActionMenu, this, mMenuAdd, ADD_BUTTON_NAME));
-
-	getChild<LLUICtrl>("options_gear_btn")->setMouseDownCallback(boost::bind(&LLLandmarksPanel::onActionsButtonClick, this));
 }
 
 
@@ -754,15 +751,6 @@ void LLLandmarksPanel::showActionMenu(LLMenuGL* menu, std::string spawning_view_
 		menu->buildDrawLabels();
 		menu->updateParent(LLMenuGL::sMenuContainer);
 		LLView* spawning_view = getChild<LLView> (spawning_view_name);
-
-		LLMenuButton* btn = dynamic_cast <LLMenuButton*>(spawning_view);
-		if (btn)
-		{
-			btn->setMenu(menu);
-			btn->setMenuPosition(LLMenuButton::ON_TOP_LEFT);
-			return;
-		}
-
 		S32 menu_x, menu_y;
 		//show menu in co-ordinates of panel
 		spawning_view->localPointToOtherView(0, spawning_view->getRect().getHeight(), &menu_x, &menu_y, this);
diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp
index 59d58321a9..27e054af34 100644
--- a/indra/newview/llpanelmaininventory.cpp
+++ b/indra/newview/llpanelmaininventory.cpp
@@ -192,8 +192,6 @@ BOOL LLPanelMainInventory::postBuild()
 		mFilterEditor->setCommitCallback(boost::bind(&LLPanelMainInventory::onFilterEdit, this, _2));
 	}
 
-	mGearMenuButton = getChild<LLMenuButton>("options_gear_btn");
-
 	initListCommandsHandlers();
 
 	// *TODO:Get the cost info from the server
@@ -902,14 +900,10 @@ void LLFloaterInventoryFinder::selectNoTypes(void* user_data)
 
 void LLPanelMainInventory::initListCommandsHandlers()
 {
+	childSetAction("options_gear_btn", boost::bind(&LLPanelMainInventory::onGearButtonClick, this));
 	childSetAction("trash_btn", boost::bind(&LLPanelMainInventory::onTrashButtonClick, this));
 	childSetAction("add_btn", boost::bind(&LLPanelMainInventory::onAddButtonClick, this));
 
-	// LLMenuButton::handleMouseDownCallback calls signal LLUICtrl::mouse_signal_t, not LLButton::commit_signal_t.
-	// That's why to set signal LLUICtrl::mouse_signal_t we need to upcast to LLUICtrl. Using static_cast instead
-	// of getChild<LLUICtrl>(...) for performance.
-	static_cast<LLUICtrl*>(mGearMenuButton)->setMouseDownCallback(boost::bind(&LLPanelMainInventory::onGearButtonClick, this));
-
 	mTrashButton = getChild<LLDragAndDropButton>("trash_btn");
 	mTrashButton->setDragAndDropHandler(boost::bind(&LLPanelMainInventory::handleDragAndDropToTrash, this
 			,	_4 // BOOL drop
@@ -920,7 +914,6 @@ void LLPanelMainInventory::initListCommandsHandlers()
 	mCommitCallbackRegistrar.add("Inventory.GearDefault.Custom.Action", boost::bind(&LLPanelMainInventory::onCustomAction, this, _2));
 	mEnableCallbackRegistrar.add("Inventory.GearDefault.Enable", boost::bind(&LLPanelMainInventory::isActionEnabled, this, _2));
 	mMenuGearDefault = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_inventory_gear_default.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
-	mGearMenuButton->setMenu(mMenuGearDefault);
 	mMenuAdd = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_inventory_add.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
 
 	// Update the trash button when selected item(s) get worn or taken off.
@@ -936,9 +929,7 @@ void LLPanelMainInventory::updateListCommands()
 
 void LLPanelMainInventory::onGearButtonClick()
 {
-	mMenuGearDefault->buildDrawLabels();
-	mMenuGearDefault->updateParent(LLMenuGL::sMenuContainer);
-	mGearMenuButton->setMenuPosition(LLMenuButton::ON_TOP_LEFT);
+	showActionMenu(mMenuGearDefault,"options_gear_btn");
 }
 
 void LLPanelMainInventory::onAddButtonClick()
diff --git a/indra/newview/llpanelmaininventory.h b/indra/newview/llpanelmaininventory.h
index 8853ba9248..fb31206870 100644
--- a/indra/newview/llpanelmaininventory.h
+++ b/indra/newview/llpanelmaininventory.h
@@ -31,7 +31,6 @@
 #include "llpanel.h"
 #include "llinventoryobserver.h"
 #include "lldndbutton.h"
-#include "llmenubutton.h"
 
 #include "llfolderview.h"
 
@@ -145,7 +144,6 @@ private:
 	LLDragAndDropButton*		mTrashButton;
 	LLMenuGL*					mMenuGearDefault;
 	LLMenuGL*					mMenuAdd;
-	LLMenuButton*				mGearMenuButton;
 
 	bool						mNeedUploadCost;
 	// List Commands                                                              //
diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp
index c625ba5a11..54b0805a6c 100644
--- a/indra/newview/llpaneloutfitedit.cpp
+++ b/indra/newview/llpaneloutfitedit.cpp
@@ -403,9 +403,7 @@ LLPanelOutfitEdit::LLPanelOutfitEdit()
 	mAddWearablesPanel(NULL),
 	mFolderViewFilterCmbBox(NULL),
 	mListViewFilterCmbBox(NULL),
-	mPlusBtn(NULL),
-	mWearablesGearMenuBtn(NULL),
-	mGearMenuBtn(NULL)
+	mPlusBtn(NULL)
 {
 	mSavedFolderState = new LLSaveFolderState();
 	mSavedFolderState->setApply(FALSE);
@@ -480,20 +478,13 @@ BOOL LLPanelOutfitEdit::postBuild()
 	childSetCommitCallback("folder_view_btn", boost::bind(&LLPanelOutfitEdit::saveListSelection, this), NULL);
 	childSetCommitCallback("list_view_btn", boost::bind(&LLPanelOutfitEdit::showWearablesListView, this), NULL);
 	childSetCommitCallback("list_view_btn", boost::bind(&LLPanelOutfitEdit::saveListSelection, this), NULL);
+	childSetCommitCallback("wearables_gear_menu_btn", boost::bind(&LLPanelOutfitEdit::onGearButtonClick, this, _1), NULL);
+	childSetCommitCallback("gear_menu_btn", boost::bind(&LLPanelOutfitEdit::onGearButtonClick, this, _1), NULL);
 	childSetCommitCallback("shop_btn_1", boost::bind(&LLPanelOutfitEdit::onShopButtonClicked, this), NULL);
 	childSetCommitCallback("shop_btn_2", boost::bind(&LLPanelOutfitEdit::onShopButtonClicked, this), NULL);
 
 	setVisibleCallback(boost::bind(&LLPanelOutfitEdit::onVisibilityChange, this, _2));
 
-	mWearablesGearMenuBtn = getChild<LLMenuButton>("wearables_gear_menu_btn");
-	mGearMenuBtn = getChild<LLMenuButton>("gear_menu_btn");
-
-	// LLMenuButton::handleMouseDownCallback calls signal LLUICtrl::mouse_signal_t, not LLButton::commit_signal_t.
-	// That's why to set signal LLUICtrl::mouse_signal_t we need to upcast to LLUICtrl. Using static_cast instead
-	// of getChild<LLUICtrl>(...) for performance.
-	static_cast<LLUICtrl*>(mWearablesGearMenuBtn)->setMouseDownCallback(boost::bind(&LLPanelOutfitEdit::onGearButtonClick, this, _1));
-	static_cast<LLUICtrl*>(mGearMenuBtn)->setMouseDownCallback(boost::bind(&LLPanelOutfitEdit::onGearButtonClick, this, _1));
-
 	mCOFWearables = getChild<LLCOFWearables>("cof_wearables_list");
 	mCOFWearables->setCommitCallback(boost::bind(&LLPanelOutfitEdit::filterWearablesBySelectedItem, this));
 
@@ -1268,36 +1259,32 @@ void LLPanelOutfitEdit::resetAccordionState()
 void LLPanelOutfitEdit::onGearButtonClick(LLUICtrl* clicked_button)
 {
 	LLMenuGL* menu = NULL;
-	LLMenuButton* btn = NULL;
 
 	if (mAddWearablesPanel->getVisible())
 	{
 		if (!mAddWearablesGearMenu)
 		{
 			mAddWearablesGearMenu = LLAddWearablesGearMenu::create(mWearableItemsList, mInventoryItemsPanel);
-			mWearablesGearMenuBtn->setMenu(mAddWearablesGearMenu);
 		}
 
 		menu = mAddWearablesGearMenu;
-		btn = mWearablesGearMenuBtn;
 	}
 	else
 	{
 		if (!mGearMenu)
 		{
 			mGearMenu = LLPanelOutfitEditGearMenu::create();
-			mGearMenuBtn->setMenu(mGearMenu);
 		}
 
 		menu = mGearMenu;
-		btn = mGearMenuBtn;
 	}
 
-	if (!menu || !btn) return;
+	if (!menu) return;
 
+	menu->arrangeAndClear(); // update menu height
+	S32 menu_y = menu->getRect().getHeight() + clicked_button->getRect().getHeight();
 	menu->buildDrawLabels();
-	menu->arrangeAndClear();
-	btn->setMenuPosition(LLMenuButton::ON_TOP_LEFT);
+	LLMenuGL::showPopup(clicked_button, menu, 0, menu_y);
 }
 
 void LLPanelOutfitEdit::onAddMoreButtonClicked()
diff --git a/indra/newview/llpaneloutfitedit.h b/indra/newview/llpaneloutfitedit.h
index 07edbdb9ba..2dca986e33 100644
--- a/indra/newview/llpaneloutfitedit.h
+++ b/indra/newview/llpaneloutfitedit.h
@@ -38,7 +38,6 @@
 #include "llinventory.h"
 #include "llinventoryfunctions.h"
 #include "llinventorymodel.h"
-#include "llmenubutton.h"
 #include "llwearableitemslist.h"
 
 class LLButton;
@@ -239,8 +238,8 @@ private:
 	LLMenuGL*			mAddWearablesGearMenu;
 	bool				mInitialized;
 	std::auto_ptr<LLSaveOutfitComboBtn> mSaveComboBtn;
-	LLMenuButton*		mWearablesGearMenuBtn;
-	LLMenuButton*		mGearMenuBtn;
+
+
 
 };
 
diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp
index 8d387f3e85..d096b17145 100644
--- a/indra/newview/llpanelpeople.cpp
+++ b/indra/newview/llpanelpeople.cpp
@@ -463,11 +463,7 @@ LLPanelPeople::LLPanelPeople()
 		mAllFriendList(NULL),
 		mNearbyList(NULL),
 		mRecentList(NULL),
-		mGroupList(NULL),
-		mNearbyGearButton(NULL),
-		mFriendsGearButton(NULL),
-		mGroupsGearButton(NULL),
-		mRecentGearButton(NULL)
+		mGroupList(NULL)
 {
 	mFriendListUpdater = new LLFriendListUpdater(boost::bind(&LLPanelPeople::updateFriendList,	this));
 	mNearbyListUpdater = new LLNearbyListUpdater(boost::bind(&LLPanelPeople::updateNearbyList,	this));
@@ -603,6 +599,11 @@ BOOL LLPanelPeople::postBuild()
 	buttonSetAction("teleport_btn",		boost::bind(&LLPanelPeople::onTeleportButtonClicked,	this));
 	buttonSetAction("share_btn",		boost::bind(&LLPanelPeople::onShareButtonClicked,		this));
 
+	getChild<LLPanel>(NEARBY_TAB_NAME)->childSetAction("nearby_view_sort_btn",boost::bind(&LLPanelPeople::onNearbyViewSortButtonClicked,		this));
+	getChild<LLPanel>(RECENT_TAB_NAME)->childSetAction("recent_viewsort_btn",boost::bind(&LLPanelPeople::onRecentViewSortButtonClicked,			this));
+	getChild<LLPanel>(FRIENDS_TAB_NAME)->childSetAction("friends_viewsort_btn",boost::bind(&LLPanelPeople::onFriendsViewSortButtonClicked,		this));
+	getChild<LLPanel>(GROUP_TAB_NAME)->childSetAction("groups_viewsort_btn",boost::bind(&LLPanelPeople::onGroupsViewSortButtonClicked,		this));
+
 	// Must go after setting commit callback and initializing all pointers to children.
 	mTabContainer->selectTabByName(NEARBY_TAB_NAME);
 
@@ -622,49 +623,24 @@ BOOL LLPanelPeople::postBuild()
 	enable_registrar.add("People.Recent.ViewSort.CheckItem",	boost::bind(&LLPanelPeople::onRecentViewSortMenuItemCheck,	this, _2));
 	enable_registrar.add("People.Nearby.ViewSort.CheckItem",	boost::bind(&LLPanelPeople::onNearbyViewSortMenuItemCheck,	this, _2));
 
-	mNearbyGearButton = getChild<LLMenuButton>("nearby_view_sort_btn");
-	mFriendsGearButton = getChild<LLMenuButton>("friends_viewsort_btn");
-	mGroupsGearButton = getChild<LLMenuButton>("groups_viewsort_btn");
-	mRecentGearButton = getChild<LLMenuButton>("recent_viewsort_btn");
-
-	// LLMenuButton::handleMouseDownCallback calls signal LLUICtrl::mouse_signal_t, not LLButton::commit_signal_t.
-	// That's why to set signal LLUICtrl::mouse_signal_t we need to upcast to LLUICtrl. Using static_cast instead
-	// of getChild<LLUICtrl>(...) for performance.
-	static_cast<LLUICtrl*>(mNearbyGearButton)->setMouseDownCallback(boost::bind(&LLPanelPeople::onViewSortButtonClicked, this));
-	static_cast<LLUICtrl*>(mFriendsGearButton)->setMouseDownCallback(boost::bind(&LLPanelPeople::onViewSortButtonClicked, this));
-	static_cast<LLUICtrl*>(mGroupsGearButton)->setMouseDownCallback(boost::bind(&LLPanelPeople::onViewSortButtonClicked, this));
-	static_cast<LLUICtrl*>(mRecentGearButton)->setMouseDownCallback(boost::bind(&LLPanelPeople::onViewSortButtonClicked, this));
-
 	LLMenuGL* plus_menu  = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_group_plus.xml",  gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
 	mGroupPlusMenuHandle  = plus_menu->getHandle();
 
 	LLMenuGL* nearby_view_sort  = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_people_nearby_view_sort.xml",  gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
 	if(nearby_view_sort)
-	{
 		mNearbyViewSortMenuHandle  = nearby_view_sort->getHandle();
-		mNearbyGearButton->setMenu(nearby_view_sort);
-	}
 
 	LLMenuGL* friend_view_sort  = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_people_friends_view_sort.xml",  gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
 	if(friend_view_sort)
-	{
 		mFriendsViewSortMenuHandle  = friend_view_sort->getHandle();
-		mFriendsGearButton->setMenu(friend_view_sort);
-	}
 
 	LLMenuGL* group_view_sort  = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_people_groups_view_sort.xml",  gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
 	if(group_view_sort)
-	{
 		mGroupsViewSortMenuHandle  = group_view_sort->getHandle();
-		mGroupsGearButton->setMenu(group_view_sort);
-	}
 
 	LLMenuGL* recent_view_sort  = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_people_recent_view_sort.xml",  gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
 	if(recent_view_sort)
-	{
 		mRecentViewSortMenuHandle  = recent_view_sort->getHandle();
-		mRecentGearButton->setMenu(recent_view_sort);
-	}
 
 	LLVoiceClient::getInstance()->addObserver(this);
 
@@ -931,9 +907,20 @@ void LLPanelPeople::getCurrentItemIDs(uuid_vec_t& selected_uuids) const
 void LLPanelPeople::showGroupMenu(LLMenuGL* menu)
 {
 	// Shows the menu at the top of the button bar.
+
+	// Calculate its coordinates.
+	// (assumes that groups panel is the current tab)
+	LLPanel* bottom_panel = mTabContainer->getCurrentPanel()->getChild<LLPanel>("bottom_panel"); 
+	LLPanel* parent_panel = mTabContainer->getCurrentPanel();
 	menu->arrangeAndClear();
+	S32 menu_height = menu->getRect().getHeight();
+	S32 menu_x = -2; // *HACK: compensates HPAD in showPopup()
+	S32 menu_y = bottom_panel->getRect().mTop + menu_height;
+
+	// Actually show the menu.
 	menu->buildDrawLabels();
 	menu->updateParent(LLMenuGL::sMenuContainer);
+	LLMenuGL::showPopup(parent_panel, menu, menu_x, menu_y);
 }
 
 void LLPanelPeople::setSortOrder(LLAvatarList* list, ESortOrder order, bool save)
@@ -1360,39 +1347,36 @@ void LLPanelPeople::onMoreButtonClicked()
 	// *TODO: not implemented yet
 }
 
-void LLPanelPeople::onViewSortButtonClicked()
-{
-	std::string current_panel = getActiveTabName();
-
-    LLMenuGL* menu = NULL;
-    LLMenuButton* btn = NULL;
-
-    if (current_panel == NEARBY_TAB_NAME)
-    {
-        menu = dynamic_cast<LLMenuGL*>(mNearbyViewSortMenuHandle.get());
-        btn = mNearbyGearButton;
-    }
-    else if (current_panel == FRIENDS_TAB_NAME)
-    {
-        menu = dynamic_cast<LLMenuGL*>(mFriendsViewSortMenuHandle.get());
-        btn = mFriendsGearButton;
-    }
-    else if (current_panel == GROUP_TAB_NAME)
-    {
-        menu = dynamic_cast<LLMenuGL*>(mGroupsViewSortMenuHandle.get());
-        btn = mGroupsGearButton;
-    }
-    else if (current_panel == RECENT_TAB_NAME)
-    {
-        menu = dynamic_cast<LLMenuGL*>(mRecentViewSortMenuHandle.get());
-        btn = mRecentGearButton;
-    }
-
-    if (menu && btn)
-    {
-    	showGroupMenu(menu);
-    	btn->setMenuPosition(LLMenuButton::ON_TOP_LEFT);
-    }
+void LLPanelPeople::onFriendsViewSortButtonClicked()
+{
+	LLMenuGL* menu = (LLMenuGL*)mFriendsViewSortMenuHandle.get();
+	if (!menu)
+		return;
+	showGroupMenu(menu);
+}
+
+void LLPanelPeople::onGroupsViewSortButtonClicked()
+{
+	LLMenuGL* menu = (LLMenuGL*)mGroupsViewSortMenuHandle.get();
+	if (!menu)
+		return;
+	showGroupMenu(menu);
+}
+
+void LLPanelPeople::onRecentViewSortButtonClicked()
+{
+	LLMenuGL* menu = (LLMenuGL*)mRecentViewSortMenuHandle.get();
+	if (!menu)
+		return;
+	showGroupMenu(menu);
+}
+
+void LLPanelPeople::onNearbyViewSortButtonClicked()
+{
+	LLMenuGL* menu = (LLMenuGL*)mNearbyViewSortMenuHandle.get();
+	if (!menu)
+		return;
+	showGroupMenu(menu);
 }
 
 void	LLPanelPeople::onOpen(const LLSD& key)
diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h
index 3109feef0c..d0913ee756 100644
--- a/indra/newview/llpanelpeople.h
+++ b/indra/newview/llpanelpeople.h
@@ -30,7 +30,6 @@
 #include <llpanel.h>
 
 #include "llcallingcard.h" // for avatar tracker
-#include "llmenubutton.h"
 #include "llvoiceclient.h"
 
 class LLFilterEditor;
@@ -101,7 +100,10 @@ private:
 	void					onShareButtonClicked();
 	void					onMoreButtonClicked();
 	void					onActivateButtonClicked();
-	void					onViewSortButtonClicked();
+	void					onRecentViewSortButtonClicked();
+	void					onNearbyViewSortButtonClicked();
+	void					onFriendsViewSortButtonClicked();
+	void					onGroupsViewSortButtonClicked();
 	void					onAvatarListDoubleClicked(LLUICtrl* ctrl);
 	void					onAvatarListCommitted(LLAvatarList* list);
 	void					onGroupPlusButtonClicked();
@@ -155,11 +157,6 @@ private:
 	Updater*				mNearbyListUpdater;
 	Updater*				mRecentListUpdater;
 
-	LLMenuButton*			mNearbyGearButton;
-	LLMenuButton*			mFriendsGearButton;
-	LLMenuButton*			mGroupsGearButton;
-	LLMenuButton*			mRecentGearButton;
-
 	std::string				mFilterSubString;
 	std::string				mFilterSubStringOrig;
 };
diff --git a/indra/newview/llpanelteleporthistory.cpp b/indra/newview/llpanelteleporthistory.cpp
index 216b7e2fa9..a7cbf52290 100644
--- a/indra/newview/llpanelteleporthistory.cpp
+++ b/indra/newview/llpanelteleporthistory.cpp
@@ -375,8 +375,7 @@ LLTeleportHistoryPanel::LLTeleportHistoryPanel()
 		mHistoryAccordion(NULL),
 		mAccordionTabMenu(NULL),
 		mLastSelectedFlatlList(NULL),
-		mLastSelectedItemIndex(-1),
-		mMenuGearButton(NULL)
+		mLastSelectedItemIndex(-1)
 {
 	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_teleport_history.xml");
 }
@@ -440,6 +439,8 @@ BOOL LLTeleportHistoryPanel::postBuild()
 		}
 	}
 
+	getChild<LLPanel>("bottom_panel")->childSetAction("gear_btn",boost::bind(&LLTeleportHistoryPanel::onGearButtonClicked, this));
+
 	LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar;
 
 	registrar.add("TeleportHistory.ExpandAllFolders",  boost::bind(&LLTeleportHistoryPanel::onExpandAllFolders,  this));
@@ -447,19 +448,9 @@ BOOL LLTeleportHistoryPanel::postBuild()
 	registrar.add("TeleportHistory.ClearTeleportHistory",  boost::bind(&LLTeleportHistoryPanel::onClearTeleportHistory,  this));
 	mEnableCallbackRegistrar.add("TeleportHistory.GearMenu.Enable", boost::bind(&LLTeleportHistoryPanel::isActionEnabled, this, _2));
 
-	mMenuGearButton = getChild<LLMenuButton>("gear_btn");
-
-	LLMenuGL* gear_menu  = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_teleport_history_gear.xml",  gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());;
+	LLMenuGL* gear_menu  = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_teleport_history_gear.xml",  gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
 	if(gear_menu)
-	{
 		mGearMenuHandle  = gear_menu->getHandle();
-		mMenuGearButton->setMenu(gear_menu);
-	}
-
-	// LLMenuButton::handleMouseDownCallback calls signal LLUICtrl::mouse_signal_t, not LLButton::commit_signal_t.
-	// That's why to set signal LLUICtrl::mouse_signal_t we need to upcast to LLUICtrl. Using static_cast instead
-	// of getChild<LLUICtrl>(...) for performance.
-	static_cast<LLUICtrl*>(mMenuGearButton)->setMouseDownCallback(boost::bind(&LLTeleportHistoryPanel::onGearButtonClicked, this));
 
 	return TRUE;
 }
@@ -1000,12 +991,19 @@ void LLTeleportHistoryPanel::onGearButtonClicked()
 	if (!menu)
 		return;
 
+	// Shows the menu at the top of the button bar.
+
+	// Calculate its coordinates.
+	LLPanel* bottom_panel = getChild<LLPanel>("bottom_panel");
 	menu->arrangeAndClear();
+	S32 menu_height = menu->getRect().getHeight();
+	S32 menu_x = -2; // *HACK: compensates HPAD in showPopup()
+	S32 menu_y = bottom_panel->getRect().mTop + menu_height;
+
+	// Actually show the menu.
 	menu->buildDrawLabels();
 	menu->updateParent(LLMenuGL::sMenuContainer);
-
-	// Shows the menu at the top of the button bar.
-	mMenuGearButton->setMenuPosition(LLMenuButton::ON_TOP_LEFT);
+	LLMenuGL::showPopup(this, menu, menu_x, menu_y);
 }
 
 bool LLTeleportHistoryPanel::isActionEnabled(const LLSD& userdata) const
diff --git a/indra/newview/llpanelteleporthistory.h b/indra/newview/llpanelteleporthistory.h
index 04809383f2..b5a025b39b 100644
--- a/indra/newview/llpanelteleporthistory.h
+++ b/indra/newview/llpanelteleporthistory.h
@@ -33,7 +33,6 @@
 #include "llpanelplacestab.h"
 #include "llteleporthistory.h"
 #include "llmenugl.h"
-#include "llmenubutton.h"
 
 class LLTeleportHistoryStorage;
 class LLAccordionCtrl;
@@ -119,7 +118,6 @@ private:
 	ContextMenu mContextMenu;
 	LLContextMenu*			mAccordionTabMenu;
 	LLHandle<LLView>		mGearMenuHandle;
-	LLMenuButton*			mMenuGearButton;
 };
 
 
diff --git a/indra/newview/llpanelwearing.cpp b/indra/newview/llpanelwearing.cpp
index 1b46294c52..860470cd73 100644
--- a/indra/newview/llpanelwearing.cpp
+++ b/indra/newview/llpanelwearing.cpp
@@ -32,7 +32,6 @@
 #include "llinventoryfunctions.h"
 #include "llinventorymodel.h"
 #include "llinventoryobserver.h"
-#include "llmenubutton.h"
 #include "llsidetray.h"
 #include "llviewermenu.h"
 #include "llwearableitemslist.h"
@@ -68,13 +67,13 @@ public:
 	{
 		if (!mMenu) return;
 
-		mMenu->arrangeAndClear();
 		mMenu->buildDrawLabels();
 		mMenu->updateParent(LLMenuGL::sMenuContainer);
+		S32 menu_x = 0;
+		S32 menu_y = spawning_view->getRect().getHeight() + mMenu->getRect().getHeight();
+		LLMenuGL::showPopup(spawning_view, mMenu, menu_x, menu_y);
 	}
 
-	LLMenuGL* getMenu() { return mMenu; }
-
 private:
 
 	void onTakeOff()
@@ -190,16 +189,6 @@ BOOL LLPanelWearing::postBuild()
 	mCOFItemsList = getChild<LLWearableItemsList>("cof_items_list");
 	mCOFItemsList->setRightMouseDownCallback(boost::bind(&LLPanelWearing::onWearableItemsListRightClick, this, _1, _2, _3));
 
-	LLMenuButton* menu_gear_btn = getChild<LLMenuButton>("options_gear_btn");
-
-	// LLMenuButton::handleMouseDownCallback calls signal LLUICtrl::mouse_signal_t, not LLButton::commit_signal_t.
-	// That's why to set signal LLUICtrl::mouse_signal_t we need to upcast to LLUICtrl. Using static_cast instead
-	// of getChild<LLUICtrl>(...) for performance.
-	static_cast<LLUICtrl*>(menu_gear_btn)->setMouseDownCallback(boost::bind(&LLPanelWearing::showGearMenu, this, _1));
-
-	menu_gear_btn->setMenu(mGearMenu->getMenu());
-
-
 	return TRUE;
 }
 
@@ -268,14 +257,7 @@ bool LLPanelWearing::isActionEnabled(const LLSD& userdata)
 void LLPanelWearing::showGearMenu(LLView* spawning_view)
 {
 	if (!mGearMenu) return;
-
 	mGearMenu->show(spawning_view);
-
-	LLMenuButton* btn = dynamic_cast<LLMenuButton*>(spawning_view);
-	if (btn)
-	{
-		btn->setMenuPosition(LLMenuButton::ON_TOP_LEFT);
-	}
 }
 
 boost::signals2::connection LLPanelWearing::setSelectionChangeCallback(commit_callback_t cb)
diff --git a/indra/newview/skins/default/xui/en/panel_landmarks.xml b/indra/newview/skins/default/xui/en/panel_landmarks.xml
index 5106215835..7e415f45a4 100644
--- a/indra/newview/skins/default/xui/en/panel_landmarks.xml
+++ b/indra/newview/skins/default/xui/en/panel_landmarks.xml
@@ -115,7 +115,7 @@
 		       layout="topleft"
 		       name="options_gear_btn_panel"
 		       width="32">
-		          <menu_button
+		          <button
 		           follows="bottom|left"
 		           tool_tip="Show additional options"
 		           height="25"
diff --git a/indra/newview/skins/default/xui/en/panel_main_inventory.xml b/indra/newview/skins/default/xui/en/panel_main_inventory.xml
index 2b6e082542..16529f4064 100644
--- a/indra/newview/skins/default/xui/en/panel_main_inventory.xml
+++ b/indra/newview/skins/default/xui/en/panel_main_inventory.xml
@@ -119,7 +119,7 @@
        layout="topleft"
        name="options_gear_btn_panel"
        width="32">
-          <menu_button
+          <button
            follows="bottom|left"
            tool_tip="Show additional options"
            height="25"
diff --git a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml
index 89e12b2d1d..883cbb30c6 100644
--- a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml
+++ b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml
@@ -375,7 +375,7 @@ It is calculated as border_size + 2*UIResizeBarOverlap
      name="no_add_wearables_button_bar"
      top_pad="0"
      width="313">
-        <menu_button
+        <button
          follows="bottom|left"
          height="25"
          image_hover_unselected="Toolbar_Left_Over"
@@ -423,7 +423,7 @@ It is calculated as border_size + 2*UIResizeBarOverlap
      top_delta="0"
      visible="false"
      width="313">
-        <menu_button
+        <button
          follows="bottom|left"
          height="25"
          image_hover_unselected="Toolbar_Left_Over"
diff --git a/indra/newview/skins/default/xui/en/panel_outfits_list.xml b/indra/newview/skins/default/xui/en/panel_outfits_list.xml
index 9f98019c94..d18f0d57ca 100644
--- a/indra/newview/skins/default/xui/en/panel_outfits_list.xml
+++ b/indra/newview/skins/default/xui/en/panel_outfits_list.xml
@@ -35,7 +35,7 @@
 	 visible="true"
 	 name="bottom_panel"
 	 width="312">
-     <menu_button
+     <button
        follows="bottom|left"
        tool_tip="Show additional options"
        height="25"
diff --git a/indra/newview/skins/default/xui/en/panel_outfits_wearing.xml b/indra/newview/skins/default/xui/en/panel_outfits_wearing.xml
index d85b778db2..2fbbf6610c 100644
--- a/indra/newview/skins/default/xui/en/panel_outfits_wearing.xml
+++ b/indra/newview/skins/default/xui/en/panel_outfits_wearing.xml
@@ -29,7 +29,7 @@
      name="bottom_panel"
      top_pad="0"
      width="312">
-        <menu_button
+        <button
          follows="bottom|left"
          height="25"
          image_hover_unselected="Toolbar_Left_Over"
diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml
index 3ffb462bb5..ab8930c967 100644
--- a/indra/newview/skins/default/xui/en/panel_people.xml
+++ b/indra/newview/skins/default/xui/en/panel_people.xml
@@ -114,7 +114,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
              name="bottom_panel"
              top_pad="0"
              width="313">
-             <menu_button
+             <button
              follows="bottom|left"
              height="25"
              image_hover_unselected="Toolbar_Left_Over"
@@ -242,7 +242,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
 				       layout="topleft"
 				       name="options_gear_btn_panel"
 				       width="32">
-				          <menu_button
+				          <button
 				           follows="bottom|left"
 				           tool_tip="Show additional options"
 				           height="25"
@@ -407,7 +407,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
              name="bottom_panel"
              top_pad="0"
              width="313">
-               <menu_button
+               <button
                follows="bottom|left"
                tool_tip="Options"
                height="25"
@@ -490,7 +490,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
              name="bottom_panel"
              top_pad="0"
              width="313">
-               <menu_button
+               <button
                follows="bottom|left"
                tool_tip="Options"
                height="25"
@@ -499,6 +499,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
                image_selected="Toolbar_Left_Selected"
                image_unselected="Toolbar_Left_Off"
                layout="topleft"
+               left="3"
                name="recent_viewsort_btn"
                top="1"
                width="31" />
diff --git a/indra/newview/skins/default/xui/en/panel_teleport_history.xml b/indra/newview/skins/default/xui/en/panel_teleport_history.xml
index 768efc2f3f..bf09836e87 100644
--- a/indra/newview/skins/default/xui/en/panel_teleport_history.xml
+++ b/indra/newview/skins/default/xui/en/panel_teleport_history.xml
@@ -157,7 +157,7 @@
      left="3"
      name="bottom_panel"
      width="313">
-        <menu_button
+        <button
          follows="bottom|left"
          tool_tip="Show additional options"
          height="25"
-- 
cgit v1.2.3


From a8b5da9a70936923e650bd5c200276da49106784 Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Thu, 14 Oct 2010 18:01:51 +0300
Subject: STORM-211 FIXED Only the hovered toasts now persists until you move
 mouse away (all toasts used to freeze).

---
 indra/newview/llscreenchannel.cpp | 40 ++++++++++++---------------------------
 indra/newview/llscreenchannel.h   |  8 ++++----
 indra/newview/lltoast.cpp         |  1 +
 3 files changed, 17 insertions(+), 32 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llscreenchannel.cpp b/indra/newview/llscreenchannel.cpp
index 5c923a0409..18c9ac28c1 100644
--- a/indra/newview/llscreenchannel.cpp
+++ b/indra/newview/llscreenchannel.cpp
@@ -253,8 +253,8 @@ void LLScreenChannel::addToast(const LLToast::Params& p)
 	if(mControlHovering)
 	{
 		new_toast_elem.toast->setOnToastHoverCallback(boost::bind(&LLScreenChannel::onToastHover, this, _1, _2));
-		new_toast_elem.toast->setMouseEnterCallback(boost::bind(&LLScreenChannel::stopFadingToasts, this));
-		new_toast_elem.toast->setMouseLeaveCallback(boost::bind(&LLScreenChannel::startFadingToasts, this));
+		new_toast_elem.toast->setMouseEnterCallback(boost::bind(&LLScreenChannel::stopFadingToast, this, new_toast_elem.toast));
+		new_toast_elem.toast->setMouseLeaveCallback(boost::bind(&LLScreenChannel::startFadingToast, this, new_toast_elem.toast));
 	}
 	
 	if(show_toast)
@@ -339,7 +339,6 @@ void LLScreenChannel::deleteToast(LLToast* toast)
 	if(mHoveredToast == toast)
 	{
 		mHoveredToast  = NULL;
-		startFadingToasts();
 	}
 
 	// close the toast
@@ -698,38 +697,23 @@ void LLScreenChannel::closeStartUpToast()
 	}
 }
 
-void LLNotificationsUI::LLScreenChannel::stopFadingToasts()
+void LLNotificationsUI::LLScreenChannel::stopFadingToast(LLToast* toast)
 {
-	if (!mToastList.size()) return;
+	if (!toast || toast != mHoveredToast) return;
 
-	if (!mHoveredToast) return;
-
-	std::vector<ToastElem>::iterator it = mToastList.begin();
-	while (it != mToastList.end())
-	{
-		ToastElem& elem = *it;
-		elem.toast->stopFading();
-		++it;
-	}
+	// Pause fade timer of the hovered toast.
+	toast->stopFading();
 }
 
-void LLNotificationsUI::LLScreenChannel::startFadingToasts()
+void LLNotificationsUI::LLScreenChannel::startFadingToast(LLToast* toast)
 {
-	if (!mToastList.size()) return;
-
-	//because onMouseLeave is processed after onMouseEnter
-	if (isHovering()) return;
-
-	std::vector<ToastElem>::iterator it = mToastList.begin();
-	while (it != mToastList.end())
+	if (!toast || toast == mHoveredToast)
 	{
-		ToastElem& elem = *it;
-		if (elem.toast->getVisible())
-		{
-			elem.toast->startFading();
-		}
-		++it;
+		return;
 	}
+
+	// Reset its fade timer.
+	toast->startFading();
 }
 
 //--------------------------------------------------------------------------
diff --git a/indra/newview/llscreenchannel.h b/indra/newview/llscreenchannel.h
index 6cf6d97550..a1fdd6e32c 100644
--- a/indra/newview/llscreenchannel.h
+++ b/indra/newview/llscreenchannel.h
@@ -193,11 +193,11 @@ public:
 	void		closeStartUpToast();
 
 
-	/** Stop fading all toasts */
-	virtual void stopFadingToasts();
+	/** Stop fading given toast */
+	virtual void stopFadingToast(LLToast* toast);
 
-	/** Start fading all toasts */
-	virtual void startFadingToasts();
+	/** Start fading given toast */
+	virtual void startFadingToast(LLToast* toast);
 
 	// get StartUp Toast's state
 	static bool	getStartUpToastShown() { return mWasStartUpToastShown; }
diff --git a/indra/newview/lltoast.cpp b/indra/newview/lltoast.cpp
index a9ab98da5f..c3090cb1fc 100644
--- a/indra/newview/lltoast.cpp
+++ b/indra/newview/lltoast.cpp
@@ -102,6 +102,7 @@ LLToast::LLToast(const LLToast::Params& p)
 	if(!p.on_delete_toast().empty())
 		mOnDeleteToastSignal.connect(p.on_delete_toast());
 
+	// *TODO: This signal doesn't seem to be used at all.
 	if(!p.on_mouse_enter().empty())
 		mOnMouseEnterSignal.connect(p.on_mouse_enter());
 }
-- 
cgit v1.2.3


From 69ae08acc949789daeff2c214eb569082e171fa9 Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Thu, 14 Oct 2010 20:15:53 +0300
Subject: STORM-376 FIXED Toast close button sometimes didn't disappear.

Reason:
Each toast's panel lies on an invisible floater which is a bit bigger than the panel.
Notification toasts were displayed so close to each other that the floaters were overlapped by 2 pixels.
Because of the overlapping, toasts sometimes didn't receive mouse-leave events, thus not hiding their close buttons.

Fix:
Increased padding between toasts by 2 pixels (from 5 to 7) to eliminate overlapping.
---
 indra/newview/app_settings/settings.xml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 742a20a849..d4a93f1f9b 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -5772,13 +5772,13 @@
     <key>ToastGap</key>
     <map>
       <key>Comment</key>
-      <string>Gap between toasts on a screen</string>
+      <string>Gap between toasts on a screen (min. value is 5)</string>
       <key>Persist</key>
       <integer>1</integer>
       <key>Type</key>
       <string>S32</string>
       <key>Value</key>
-      <integer>5</integer>
+      <integer>7</integer>
     </map>
     <key>ToastButtonWidth</key>
     <map>
-- 
cgit v1.2.3


From b049db546a5970d268014f3d0d5375834cdaf59d Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Thu, 14 Oct 2010 12:01:40 -0700
Subject: DN-177 Cannot click on Name in Friend Request to view profile - and
 no profile pic in friend request

---
 indra/newview/llviewermessage.cpp                    | 2 +-
 indra/newview/skins/default/xui/en/notifications.xml | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 4e40b706a0..9b1f2e67c6 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -2876,7 +2876,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
 			}
 			else
 			{
-				args["NAME"] = LLSLURL("agent", from_id, "about").getSLURLString();
+				args["NAME_SLURL"] = LLSLURL("agent", from_id, "about").getSLURLString();
 				if(message.empty())
 				{
 					//support for frienship offers from clients before July 2008
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 7e9cc6772d..34e2b2410e 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -5457,7 +5457,7 @@ An object named [OBJECTFROMNAME] owned by [NAME_SLURL] has given you this [OBJEC
    icon="notify.tga"
    name="OfferFriendship"
    type="offer">
-[NAME] is offering friendship.
+[NAME_SLURL] is offering friendship.
 
 [MESSAGE]
 
@@ -5486,7 +5486,7 @@ An object named [OBJECTFROMNAME] owned by [NAME_SLURL] has given you this [OBJEC
    name="OfferFriendshipNoMessage"
    persist="true"
    type="notify">
-[NAME] is offering friendship.
+[NAME_SLURL] is offering friendship.
 
 (By default, you will be able to see each other&apos;s online status.)
     <form name="form">
-- 
cgit v1.2.3


From f53f6f20df5c99311103c3d92938ce878d474f13 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Thu, 14 Oct 2010 13:20:43 -0700
Subject: DN-174Some length of Display Name (username) can cause the name to
 disappear off of the Buy object floater

---
 indra/newview/llfloaterbuy.cpp                        |  2 +-
 .../skins/default/xui/en/floater_buy_contents.xml     |  3 ++-
 .../skins/default/xui/en/floater_buy_object.xml       | 19 +++++++++++++++++--
 3 files changed, 20 insertions(+), 4 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloaterbuy.cpp b/indra/newview/llfloaterbuy.cpp
index f46a2be0fa..ee8487b160 100644
--- a/indra/newview/llfloaterbuy.cpp
+++ b/indra/newview/llfloaterbuy.cpp
@@ -177,7 +177,7 @@ void LLFloaterBuy::show(const LLSaleInfo& sale_info)
 	object_list->addElement(row);
 
 	floater->getChild<LLUICtrl>("buy_text")->setTextArg("[AMOUNT]", llformat("%d", sale_info.getSalePrice()));
-	floater->getChild<LLUICtrl>("buy_text")->setTextArg("[NAME]", owner_name);
+	floater->getChild<LLUICtrl>("buy_name_text")->setTextArg("[NAME]", owner_name);
 
 	// Must do this after the floater is created, because
 	// sometimes the inventory is already there and 
diff --git a/indra/newview/skins/default/xui/en/floater_buy_contents.xml b/indra/newview/skins/default/xui/en/floater_buy_contents.xml
index 77a0e9b91b..babbf0f5ca 100644
--- a/indra/newview/skins/default/xui/en/floater_buy_contents.xml
+++ b/indra/newview/skins/default/xui/en/floater_buy_contents.xml
@@ -56,7 +56,7 @@
     <text
      type="string"
      length="1"
-     follows="left|bottom"
+     follows="left|right|bottom"
      font="SansSerif"
      height="16"
      layout="topleft"
@@ -64,6 +64,7 @@
      name="buy_text"
      text_color="white"
      top="220"
+     use_ellipses="true" 
      width="260">
         Buy for L$[AMOUNT] from [NAME]?
     </text>
diff --git a/indra/newview/skins/default/xui/en/floater_buy_object.xml b/indra/newview/skins/default/xui/en/floater_buy_object.xml
index db595458c0..8dfb6ba00c 100644
--- a/indra/newview/skins/default/xui/en/floater_buy_object.xml
+++ b/indra/newview/skins/default/xui/en/floater_buy_object.xml
@@ -84,7 +84,7 @@
      length="1"
      follows="left|right|bottom"
      font="SansSerif"
-     height="35"
+     height="15"
      layout="topleft"
      left_delta="0"
 	 line_spacing.pixels="7"
@@ -95,8 +95,23 @@
      width="260"
 	 word_wrap="true">
 Buy for L$[AMOUNT] from:
-[NAME]?
     </text>
+  <text
+     type="string"
+     length="1"
+     follows="left|right|bottom"
+     font="SansSerif"
+     height="15"
+     layout="topleft"
+     left_delta="0"
+	 line_spacing.pixels="7"
+     name="buy_name_text"
+     text_color="white"
+     top_pad="5"
+     use_ellipses="true"
+     width="260">
+    [NAME]?
+  </text>
     <button
      follows="right|bottom"
      height="23"
-- 
cgit v1.2.3


From c12c60df4a28b3cb91870ae0666eb6b3422ff96b Mon Sep 17 00:00:00 2001
From: Seth ProductEngine <slitovchuk@productengine.com>
Date: Fri, 15 Oct 2010 00:10:55 +0300
Subject: STORM-263 FIXED popup menu of Cog button in lower-left of sidebar
 panel closing on second click

- Changed type of gear menu buttons from LLButton to LLMenuButton in all sidebar panels where gear menu button is used.

- Added setMenuPosition(), setMenu() and updateMenuOrigin() to the LLMenuButton.

- Moved actions common for displaying a context menu to LLMenuButton::toggleMenu().

- In all sidebar panels where LLButton was replaced with LLMenuButton the following steps were taken:
    1. setting gearMenu and its position relative to the menuButton with LLMenuButton::setMenu()
    2. setting mouse down callback for the menuButton if needed.
    3. calculating the menu origin point with LLMenuButton::updateMenuOrigin() in mouse down callback
---
 indra/newview/lloutfitslist.cpp                    | 27 +++-------
 indra/newview/lloutfitslist.h                      |  2 -
 indra/newview/llpanelappearancetab.h               |  2 -
 indra/newview/llpanellandmarks.cpp                 | 13 +++--
 indra/newview/llpanellandmarks.h                   |  2 +
 indra/newview/llpanelmaininventory.cpp             | 10 ++--
 indra/newview/llpanelmaininventory.h               |  3 +-
 indra/newview/llpaneloutfitedit.cpp                | 48 +++++------------
 indra/newview/llpaneloutfitedit.h                  |  7 ++-
 indra/newview/llpaneloutfitsinventory.cpp          | 10 ----
 indra/newview/llpanelpeople.cpp                    | 63 +++++++++-------------
 indra/newview/llpanelpeople.h                      | 10 ++--
 indra/newview/llpanelteleporthistory.cpp           | 34 ++++--------
 indra/newview/llpanelteleporthistory.h             |  3 +-
 indra/newview/llpanelwearing.cpp                   | 23 +++-----
 indra/newview/llpanelwearing.h                     |  2 -
 .../skins/default/xui/en/panel_landmarks.xml       |  2 +-
 .../skins/default/xui/en/panel_main_inventory.xml  |  2 +-
 .../skins/default/xui/en/panel_outfit_edit.xml     |  4 +-
 .../skins/default/xui/en/panel_outfits_list.xml    |  2 +-
 .../skins/default/xui/en/panel_outfits_wearing.xml |  2 +-
 .../newview/skins/default/xui/en/panel_people.xml  |  9 ++--
 .../default/xui/en/panel_teleport_history.xml      |  2 +-
 23 files changed, 101 insertions(+), 181 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp
index db9d386b6b..33c968bf00 100644
--- a/indra/newview/lloutfitslist.cpp
+++ b/indra/newview/lloutfitslist.cpp
@@ -38,6 +38,7 @@
 #include "llinventoryfunctions.h"
 #include "llinventorymodel.h"
 #include "lllistcontextmenu.h"
+#include "llmenubutton.h"
 #include "llnotificationsutil.h"
 #include "lloutfitobserver.h"
 #include "llsidetray.h"
@@ -126,18 +127,6 @@ public:
 		llassert(mMenu);
 	}
 
-	void show(LLView* spawning_view)
-	{
-		if (!mMenu) return;
-
-		updateItemsVisibility();
-		mMenu->buildDrawLabels();
-		mMenu->updateParent(LLMenuGL::sMenuContainer);
-		S32 menu_x = 0;
-		S32 menu_y = spawning_view->getRect().getHeight() + mMenu->getRect().getHeight();
-		LLMenuGL::showPopup(spawning_view, mMenu, menu_x, menu_y);
-	}
-
 	void updateItemsVisibility()
 	{
 		if (!mMenu) return;
@@ -148,6 +137,8 @@ public:
 		mMenu->arrangeAndClear(); // update menu height
 	}
 
+	LLMenuGL* getMenu() { return mMenu; }
+
 private:
 	const LLUUID& getSelectedOutfitID()
 	{
@@ -386,6 +377,11 @@ BOOL LLOutfitsList::postBuild()
 	mAccordion = getChild<LLAccordionCtrl>("outfits_accordion");
 	mAccordion->setComparator(&OUTFIT_TAB_NAME_COMPARATOR);
 
+	LLMenuButton* menu_gear_btn = getChild<LLMenuButton>("options_gear_btn");
+
+	menu_gear_btn->setMouseDownCallback(boost::bind(&LLOutfitListGearMenu::updateItemsVisibility, mGearMenu));
+	menu_gear_btn->setMenu(mGearMenu->getMenu());
+
 	return TRUE;
 }
 
@@ -727,13 +723,6 @@ bool LLOutfitsList::isActionEnabled(const LLSD& userdata)
 	return false;
 }
 
-// virtual
-void LLOutfitsList::showGearMenu(LLView* spawning_view)
-{
-	if (!mGearMenu) return;
-	mGearMenu->show(spawning_view);
-}
-
 void LLOutfitsList::getSelectedItemsUUIDs(uuid_vec_t& selected_uuids) const
 {
 	// Collect selected items from all selected lists.
diff --git a/indra/newview/lloutfitslist.h b/indra/newview/lloutfitslist.h
index f73ae5bef2..5fecbb83e7 100644
--- a/indra/newview/lloutfitslist.h
+++ b/indra/newview/lloutfitslist.h
@@ -94,8 +94,6 @@ public:
 
 	/*virtual*/ bool isActionEnabled(const LLSD& userdata);
 
-	/*virtual*/ void showGearMenu(LLView* spawning_view);
-
 	const LLUUID& getSelectedOutfitUUID() const { return mSelectedOutfitUUID; }
 
 	/*virtual*/ void getSelectedItemsUUIDs(uuid_vec_t& selected_uuids) const;
diff --git a/indra/newview/llpanelappearancetab.h b/indra/newview/llpanelappearancetab.h
index 81366c5db4..2ed6b00497 100644
--- a/indra/newview/llpanelappearancetab.h
+++ b/indra/newview/llpanelappearancetab.h
@@ -39,8 +39,6 @@ public:
 
 	virtual bool isActionEnabled(const LLSD& userdata) = 0;
 
-	virtual void showGearMenu(LLView* spawning_view) = 0;
-
 	virtual void getSelectedItemsUUIDs(uuid_vec_t& selected_uuids) const {}
 
 	static const std::string& getFilterSubString() { return sFilterSubString; }
diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp
index c4a484d368..e5695f420a 100644
--- a/indra/newview/llpanellandmarks.cpp
+++ b/indra/newview/llpanellandmarks.cpp
@@ -47,6 +47,7 @@
 #include "llinventorymodelbackgroundfetch.h"
 #include "llinventorypanel.h"
 #include "lllandmarkactions.h"
+#include "llmenubutton.h"
 #include "llplacesinventorybridge.h"
 #include "llplacesinventorypanel.h"
 #include "llsidetray.h"
@@ -191,6 +192,7 @@ LLLandmarksPanel::LLLandmarksPanel()
 	,	mLibraryInventoryPanel(NULL)
 	,	mCurrentSelectedList(NULL)
 	,	mListCommands(NULL)
+	,	mGearButton(NULL)
 	,	mGearFolderMenu(NULL)
 	,	mGearLandmarkMenu(NULL)
 {
@@ -685,7 +687,9 @@ void LLLandmarksPanel::initListCommandsHandlers()
 {
 	mListCommands = getChild<LLPanel>("bottom_panel");
 
-	mListCommands->childSetAction(OPTIONS_BUTTON_NAME, boost::bind(&LLLandmarksPanel::onActionsButtonClick, this));
+	mGearButton = getChild<LLMenuButton>(OPTIONS_BUTTON_NAME);
+	mGearButton->setMouseDownCallback(boost::bind(&LLLandmarksPanel::onActionsButtonClick, this));
+
 	mListCommands->childSetAction(TRASH_BUTTON_NAME, boost::bind(&LLLandmarksPanel::onTrashButtonClick, this));
 
 	LLDragAndDropButton* trash_btn = mListCommands->getChild<LLDragAndDropButton>(TRASH_BUTTON_NAME);
@@ -741,7 +745,7 @@ void LLLandmarksPanel::onActionsButtonClick()
 		}
 	}
 
-	showActionMenu(menu,OPTIONS_BUTTON_NAME);
+	mGearButton->setMenu(menu);
 }
 
 void LLLandmarksPanel::showActionMenu(LLMenuGL* menu, std::string spawning_view_name)
@@ -750,7 +754,10 @@ void LLLandmarksPanel::showActionMenu(LLMenuGL* menu, std::string spawning_view_
 	{
 		menu->buildDrawLabels();
 		menu->updateParent(LLMenuGL::sMenuContainer);
-		LLView* spawning_view = getChild<LLView> (spawning_view_name);
+		menu->arrangeAndClear();
+
+		LLView* spawning_view = getChild<LLView>(spawning_view_name);
+
 		S32 menu_x, menu_y;
 		//show menu in co-ordinates of panel
 		spawning_view->localPointToOtherView(0, spawning_view->getRect().getHeight(), &menu_x, &menu_y, this);
diff --git a/indra/newview/llpanellandmarks.h b/indra/newview/llpanellandmarks.h
index 0d4402d8cb..28c19d3e5f 100644
--- a/indra/newview/llpanellandmarks.h
+++ b/indra/newview/llpanellandmarks.h
@@ -39,6 +39,7 @@
 
 class LLAccordionCtrlTab;
 class LLFolderViewItem;
+class LLMenuButton;
 class LLMenuGL;
 class LLInventoryPanel;
 class LLPlacesInventoryPanel;
@@ -155,6 +156,7 @@ private:
 	LLPlacesInventoryPanel*		mLandmarksInventoryPanel;
 	LLPlacesInventoryPanel*		mMyInventoryPanel;
 	LLPlacesInventoryPanel*		mLibraryInventoryPanel;
+	LLMenuButton*				mGearButton;
 	LLMenuGL*					mGearLandmarkMenu;
 	LLMenuGL*					mGearFolderMenu;
 	LLMenuGL*					mMenuAdd;
diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp
index 5b07e4863b..cc69dbd9d4 100644
--- a/indra/newview/llpanelmaininventory.cpp
+++ b/indra/newview/llpanelmaininventory.cpp
@@ -39,6 +39,7 @@
 #include "llinventorypanel.h"
 #include "llfiltereditor.h"
 #include "llfloaterreg.h"
+#include "llmenubutton.h"
 #include "lloutfitobserver.h"
 #include "llpreviewtexture.h"
 #include "llresmgr.h"
@@ -192,6 +193,8 @@ BOOL LLPanelMainInventory::postBuild()
 		mFilterEditor->setCommitCallback(boost::bind(&LLPanelMainInventory::onFilterEdit, this, _2));
 	}
 
+	mGearMenuButton = getChild<LLMenuButton>("options_gear_btn");
+
 	initListCommandsHandlers();
 
 	// *TODO:Get the cost info from the server
@@ -900,7 +903,6 @@ void LLFloaterInventoryFinder::selectNoTypes(void* user_data)
 
 void LLPanelMainInventory::initListCommandsHandlers()
 {
-	childSetAction("options_gear_btn", boost::bind(&LLPanelMainInventory::onGearButtonClick, this));
 	childSetAction("trash_btn", boost::bind(&LLPanelMainInventory::onTrashButtonClick, this));
 	childSetAction("add_btn", boost::bind(&LLPanelMainInventory::onAddButtonClick, this));
 
@@ -914,6 +916,7 @@ void LLPanelMainInventory::initListCommandsHandlers()
 	mCommitCallbackRegistrar.add("Inventory.GearDefault.Custom.Action", boost::bind(&LLPanelMainInventory::onCustomAction, this, _2));
 	mEnableCallbackRegistrar.add("Inventory.GearDefault.Enable", boost::bind(&LLPanelMainInventory::isActionEnabled, this, _2));
 	mMenuGearDefault = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_inventory_gear_default.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
+	mGearMenuButton->setMenu(mMenuGearDefault);
 	mMenuAdd = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_inventory_add.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
 
 	// Update the trash button when selected item(s) get worn or taken off.
@@ -927,11 +930,6 @@ void LLPanelMainInventory::updateListCommands()
 	mTrashButton->setEnabled(trash_enabled);
 }
 
-void LLPanelMainInventory::onGearButtonClick()
-{
-	showActionMenu(mMenuGearDefault,"options_gear_btn");
-}
-
 void LLPanelMainInventory::onAddButtonClick()
 {
 	setUploadCostIfNeeded();
diff --git a/indra/newview/llpanelmaininventory.h b/indra/newview/llpanelmaininventory.h
index cf2cc14531..f95a99157d 100644
--- a/indra/newview/llpanelmaininventory.h
+++ b/indra/newview/llpanelmaininventory.h
@@ -40,6 +40,7 @@ class LLSaveFolderState;
 class LLFilterEditor;
 class LLTabContainer;
 class LLFloaterInventoryFinder;
+class LLMenuButton;
 class LLMenuGL;
 class LLFloater;
 
@@ -129,7 +130,6 @@ private:
 protected:
 	void initListCommandsHandlers();
 	void updateListCommands();
-	void onGearButtonClick();
 	void onAddButtonClick();
 	void showActionMenu(LLMenuGL* menu, std::string spawning_view_name);
 	void onTrashButtonClick();
@@ -145,6 +145,7 @@ private:
 	LLDragAndDropButton*		mTrashButton;
 	LLMenuGL*					mMenuGearDefault;
 	LLMenuGL*					mMenuAdd;
+	LLMenuButton*				mGearMenuButton;
 
 	bool						mNeedUploadCost;
 	// List Commands                                                              //
diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp
index 494db01f77..5638374178 100644
--- a/indra/newview/llpaneloutfitedit.cpp
+++ b/indra/newview/llpaneloutfitedit.cpp
@@ -56,6 +56,7 @@
 #include "llinventorymodel.h"
 #include "llinventorymodelbackgroundfetch.h"
 #include "llloadingindicator.h"
+#include "llmenubutton.h"
 #include "llpaneloutfitsinventory.h"
 #include "lluiconstants.h"
 #include "llsaveoutfitcombobtn.h"
@@ -403,7 +404,9 @@ LLPanelOutfitEdit::LLPanelOutfitEdit()
 	mAddWearablesPanel(NULL),
 	mFolderViewFilterCmbBox(NULL),
 	mListViewFilterCmbBox(NULL),
-	mPlusBtn(NULL)
+	mPlusBtn(NULL),
+	mWearablesGearMenuBtn(NULL),
+	mGearMenuBtn(NULL)
 {
 	mSavedFolderState = new LLSaveFolderState();
 	mSavedFolderState->setApply(FALSE);
@@ -478,13 +481,14 @@ BOOL LLPanelOutfitEdit::postBuild()
 	childSetCommitCallback("folder_view_btn", boost::bind(&LLPanelOutfitEdit::saveListSelection, this), NULL);
 	childSetCommitCallback("list_view_btn", boost::bind(&LLPanelOutfitEdit::showWearablesListView, this), NULL);
 	childSetCommitCallback("list_view_btn", boost::bind(&LLPanelOutfitEdit::saveListSelection, this), NULL);
-	childSetCommitCallback("wearables_gear_menu_btn", boost::bind(&LLPanelOutfitEdit::onGearButtonClick, this, _1), NULL);
-	childSetCommitCallback("gear_menu_btn", boost::bind(&LLPanelOutfitEdit::onGearButtonClick, this, _1), NULL);
 	childSetCommitCallback("shop_btn_1", boost::bind(&LLPanelOutfitEdit::onShopButtonClicked, this), NULL);
 	childSetCommitCallback("shop_btn_2", boost::bind(&LLPanelOutfitEdit::onShopButtonClicked, this), NULL);
 
 	setVisibleCallback(boost::bind(&LLPanelOutfitEdit::onVisibilityChange, this, _2));
 
+	mWearablesGearMenuBtn = getChild<LLMenuButton>("wearables_gear_menu_btn");
+	mGearMenuBtn = getChild<LLMenuButton>("gear_menu_btn");
+
 	mCOFWearables = findChild<LLCOFWearables>("cof_wearables_list");
 	mCOFWearables->setCommitCallback(boost::bind(&LLPanelOutfitEdit::filterWearablesBySelectedItem, this));
 
@@ -557,6 +561,13 @@ BOOL LLPanelOutfitEdit::postBuild()
 
 	mWearableItemsList->setComparator(mWearableListViewItemsComparator);
 
+	// Creating "Add Wearables" panel gear menu after initialization of mWearableItemsList and mInventoryItemsPanel.
+	mAddWearablesGearMenu = LLAddWearablesGearMenu::create(mWearableItemsList, mInventoryItemsPanel);
+	mWearablesGearMenuBtn->setMenu(mAddWearablesGearMenu);
+
+	mGearMenu = LLPanelOutfitEditGearMenu::create();
+	mGearMenuBtn->setMenu(mGearMenu);
+
 	mSaveComboBtn.reset(new LLSaveOutfitComboBtn(this));
 	return TRUE;
 }
@@ -1256,37 +1267,6 @@ void LLPanelOutfitEdit::resetAccordionState()
 	}
 }
 
-void LLPanelOutfitEdit::onGearButtonClick(LLUICtrl* clicked_button)
-{
-	LLMenuGL* menu = NULL;
-
-	if (mAddWearablesPanel->getVisible())
-	{
-		if (!mAddWearablesGearMenu)
-		{
-			mAddWearablesGearMenu = LLAddWearablesGearMenu::create(mWearableItemsList, mInventoryItemsPanel);
-		}
-
-		menu = mAddWearablesGearMenu;
-	}
-	else
-	{
-		if (!mGearMenu)
-		{
-			mGearMenu = LLPanelOutfitEditGearMenu::create();
-		}
-
-		menu = mGearMenu;
-	}
-
-	if (!menu) return;
-
-	menu->arrangeAndClear(); // update menu height
-	S32 menu_y = menu->getRect().getHeight() + clicked_button->getRect().getHeight();
-	menu->buildDrawLabels();
-	LLMenuGL::showPopup(clicked_button, menu, 0, menu_y);
-}
-
 void LLPanelOutfitEdit::onAddMoreButtonClicked()
 {
 	toggleAddWearablesPanel();
diff --git a/indra/newview/llpaneloutfitedit.h b/indra/newview/llpaneloutfitedit.h
index 2dca986e33..963db84503 100644
--- a/indra/newview/llpaneloutfitedit.h
+++ b/indra/newview/llpaneloutfitedit.h
@@ -54,6 +54,7 @@ class LLScrollListCtrl;
 class LLToggleableMenu;
 class LLFilterEditor;
 class LLFilteredWearableListManager;
+class LLMenuButton;
 class LLMenuGL;
 class LLFindNonLinksByMask;
 class LLFindWearablesOfType;
@@ -186,8 +187,6 @@ public:
 									  std::string& tooltip_msg);
 
 private:
-
-	void onGearButtonClick(LLUICtrl* clicked_button);
 	void onAddMoreButtonClicked();
 	void showFilteredWearablesListView(LLWearableType::EType type);
 	void onOutfitChanging(bool started);
@@ -238,8 +237,8 @@ private:
 	LLMenuGL*			mAddWearablesGearMenu;
 	bool				mInitialized;
 	std::auto_ptr<LLSaveOutfitComboBtn> mSaveComboBtn;
-
-
+	LLMenuButton*		mWearablesGearMenuBtn;
+	LLMenuButton*		mGearMenuBtn;
 
 };
 
diff --git a/indra/newview/llpaneloutfitsinventory.cpp b/indra/newview/llpaneloutfitsinventory.cpp
index d6d8a38ebe..4f2cfa2bbc 100644
--- a/indra/newview/llpaneloutfitsinventory.cpp
+++ b/indra/newview/llpaneloutfitsinventory.cpp
@@ -232,9 +232,7 @@ void LLPanelOutfitsInventory::initListCommandsHandlers()
 {
 	mListCommands = getChild<LLPanel>("bottom_panel");
 	mListCommands->childSetAction("wear_btn", boost::bind(&LLPanelOutfitsInventory::onWearButtonClick, this));
-	mMyOutfitsPanel->childSetAction("options_gear_btn", boost::bind(&LLPanelOutfitsInventory::showGearMenu, this));
 	mMyOutfitsPanel->childSetAction("trash_btn", boost::bind(&LLPanelOutfitsInventory::onTrashButtonClick, this));
-	mCurrentOutfitPanel->childSetAction("options_gear_btn", boost::bind(&LLPanelOutfitsInventory::showGearMenu, this));
 }
 
 void LLPanelOutfitsInventory::updateListCommands()
@@ -258,14 +256,6 @@ void LLPanelOutfitsInventory::updateListCommands()
 	}
 }
 
-void LLPanelOutfitsInventory::showGearMenu()
-{
-	if (!mActivePanel) return;
-
-	LLView* spawning_view = getChild<LLView>("options_gear_btn");
-	mActivePanel->showGearMenu(spawning_view);
-}
-
 void LLPanelOutfitsInventory::onTrashButtonClick()
 {
 	LLNotificationsUtil::add("DeleteOutfits", LLSD(), LLSD(), boost::bind(&LLPanelOutfitsInventory::onOutfitsRemovalConfirmation, this, _1, _2));
diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp
index 040b5319b9..b79a2d3224 100644
--- a/indra/newview/llpanelpeople.cpp
+++ b/indra/newview/llpanelpeople.cpp
@@ -29,6 +29,7 @@
 // libs
 #include "llavatarname.h"
 #include "llfloaterreg.h"
+#include "llmenubutton.h"
 #include "llmenugl.h"
 #include "llnotificationsutil.h"
 #include "lleventtimer.h"
@@ -464,7 +465,11 @@ LLPanelPeople::LLPanelPeople()
 		mAllFriendList(NULL),
 		mNearbyList(NULL),
 		mRecentList(NULL),
-		mGroupList(NULL)
+		mGroupList(NULL),
+		mNearbyGearButton(NULL),
+		mFriendsGearButton(NULL),
+		mGroupsGearButton(NULL),
+		mRecentGearButton(NULL)
 {
 	mFriendListUpdater = new LLFriendListUpdater(boost::bind(&LLPanelPeople::updateFriendList,	this));
 	mNearbyListUpdater = new LLNearbyListUpdater(boost::bind(&LLPanelPeople::updateNearbyList,	this));
@@ -600,11 +605,6 @@ BOOL LLPanelPeople::postBuild()
 	buttonSetAction("teleport_btn",		boost::bind(&LLPanelPeople::onTeleportButtonClicked,	this));
 	buttonSetAction("share_btn",		boost::bind(&LLPanelPeople::onShareButtonClicked,		this));
 
-	getChild<LLPanel>(NEARBY_TAB_NAME)->childSetAction("nearby_view_sort_btn",boost::bind(&LLPanelPeople::onNearbyViewSortButtonClicked,		this));
-	getChild<LLPanel>(RECENT_TAB_NAME)->childSetAction("recent_viewsort_btn",boost::bind(&LLPanelPeople::onRecentViewSortButtonClicked,			this));
-	getChild<LLPanel>(FRIENDS_TAB_NAME)->childSetAction("friends_viewsort_btn",boost::bind(&LLPanelPeople::onFriendsViewSortButtonClicked,		this));
-	getChild<LLPanel>(GROUP_TAB_NAME)->childSetAction("groups_viewsort_btn",boost::bind(&LLPanelPeople::onGroupsViewSortButtonClicked,		this));
-
 	// Must go after setting commit callback and initializing all pointers to children.
 	mTabContainer->selectTabByName(NEARBY_TAB_NAME);
 
@@ -624,24 +624,41 @@ BOOL LLPanelPeople::postBuild()
 	enable_registrar.add("People.Recent.ViewSort.CheckItem",	boost::bind(&LLPanelPeople::onRecentViewSortMenuItemCheck,	this, _2));
 	enable_registrar.add("People.Nearby.ViewSort.CheckItem",	boost::bind(&LLPanelPeople::onNearbyViewSortMenuItemCheck,	this, _2));
 
+	mNearbyGearButton = getChild<LLMenuButton>("nearby_view_sort_btn");
+	mFriendsGearButton = getChild<LLMenuButton>("friends_viewsort_btn");
+	mGroupsGearButton = getChild<LLMenuButton>("groups_viewsort_btn");
+	mRecentGearButton = getChild<LLMenuButton>("recent_viewsort_btn");
+
 	LLMenuGL* plus_menu  = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_group_plus.xml",  gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
 	mGroupPlusMenuHandle  = plus_menu->getHandle();
 
 	LLMenuGL* nearby_view_sort  = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_people_nearby_view_sort.xml",  gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
 	if(nearby_view_sort)
+	{
 		mNearbyViewSortMenuHandle  = nearby_view_sort->getHandle();
+		mNearbyGearButton->setMenu(nearby_view_sort);
+	}
 
 	LLMenuGL* friend_view_sort  = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_people_friends_view_sort.xml",  gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
 	if(friend_view_sort)
+	{
 		mFriendsViewSortMenuHandle  = friend_view_sort->getHandle();
+		mFriendsGearButton->setMenu(friend_view_sort);
+	}
 
 	LLMenuGL* group_view_sort  = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_people_groups_view_sort.xml",  gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
 	if(group_view_sort)
+	{
 		mGroupsViewSortMenuHandle  = group_view_sort->getHandle();
+		mGroupsGearButton->setMenu(group_view_sort);
+	}
 
 	LLMenuGL* recent_view_sort  = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_people_recent_view_sort.xml",  gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
 	if(recent_view_sort)
+	{
 		mRecentViewSortMenuHandle  = recent_view_sort->getHandle();
+		mRecentGearButton->setMenu(recent_view_sort);
+	}
 
 	LLVoiceClient::getInstance()->addObserver(this);
 
@@ -911,7 +928,7 @@ void LLPanelPeople::showGroupMenu(LLMenuGL* menu)
 
 	// Calculate its coordinates.
 	// (assumes that groups panel is the current tab)
-	LLPanel* bottom_panel = mTabContainer->getCurrentPanel()->getChild<LLPanel>("bottom_panel"); 
+	LLPanel* bottom_panel = mTabContainer->getCurrentPanel()->getChild<LLPanel>("bottom_panel");
 	LLPanel* parent_panel = mTabContainer->getCurrentPanel();
 	menu->arrangeAndClear();
 	S32 menu_height = menu->getRect().getHeight();
@@ -1346,38 +1363,6 @@ void LLPanelPeople::onMoreButtonClicked()
 	// *TODO: not implemented yet
 }
 
-void LLPanelPeople::onFriendsViewSortButtonClicked()
-{
-	LLMenuGL* menu = (LLMenuGL*)mFriendsViewSortMenuHandle.get();
-	if (!menu)
-		return;
-	showGroupMenu(menu);
-}
-
-void LLPanelPeople::onGroupsViewSortButtonClicked()
-{
-	LLMenuGL* menu = (LLMenuGL*)mGroupsViewSortMenuHandle.get();
-	if (!menu)
-		return;
-	showGroupMenu(menu);
-}
-
-void LLPanelPeople::onRecentViewSortButtonClicked()
-{
-	LLMenuGL* menu = (LLMenuGL*)mRecentViewSortMenuHandle.get();
-	if (!menu)
-		return;
-	showGroupMenu(menu);
-}
-
-void LLPanelPeople::onNearbyViewSortButtonClicked()
-{
-	LLMenuGL* menu = (LLMenuGL*)mNearbyViewSortMenuHandle.get();
-	if (!menu)
-		return;
-	showGroupMenu(menu);
-}
-
 void	LLPanelPeople::onOpen(const LLSD& key)
 {
 	std::string tab_name = key["people_panel_tab_name"];
diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h
index f5ff09b038..4412aed062 100644
--- a/indra/newview/llpanelpeople.h
+++ b/indra/newview/llpanelpeople.h
@@ -36,6 +36,7 @@ class LLAvatarList;
 class LLAvatarName;
 class LLFilterEditor;
 class LLGroupList;
+class LLMenuButton;
 class LLTabContainer;
 
 class LLPanelPeople 
@@ -101,10 +102,6 @@ private:
 	void					onShareButtonClicked();
 	void					onMoreButtonClicked();
 	void					onActivateButtonClicked();
-	void					onRecentViewSortButtonClicked();
-	void					onNearbyViewSortButtonClicked();
-	void					onFriendsViewSortButtonClicked();
-	void					onGroupsViewSortButtonClicked();
 	void					onAvatarListDoubleClicked(LLUICtrl* ctrl);
 	void					onAvatarListCommitted(LLAvatarList* list);
 	void					onGroupPlusButtonClicked();
@@ -156,6 +153,11 @@ private:
 	Updater*				mNearbyListUpdater;
 	Updater*				mRecentListUpdater;
 
+	LLMenuButton*			mNearbyGearButton;
+	LLMenuButton*			mFriendsGearButton;
+	LLMenuButton*			mGroupsGearButton;
+	LLMenuButton*			mRecentGearButton;
+
 	std::string				mFilterSubString;
 	std::string				mFilterSubStringOrig;
 };
diff --git a/indra/newview/llpanelteleporthistory.cpp b/indra/newview/llpanelteleporthistory.cpp
index 9b8167b15a..766f93e0a5 100644
--- a/indra/newview/llpanelteleporthistory.cpp
+++ b/indra/newview/llpanelteleporthistory.cpp
@@ -27,6 +27,7 @@
 #include "llviewerprecompiledheaders.h"
 
 #include "llfloaterreg.h"
+#include "llmenubutton.h"
 
 #include "llfloaterworldmap.h"
 #include "llpanelteleporthistory.h"
@@ -375,7 +376,8 @@ LLTeleportHistoryPanel::LLTeleportHistoryPanel()
 		mHistoryAccordion(NULL),
 		mAccordionTabMenu(NULL),
 		mLastSelectedFlatlList(NULL),
-		mLastSelectedItemIndex(-1)
+		mLastSelectedItemIndex(-1),
+		mMenuGearButton(NULL)
 {
 	buildFromFile( "panel_teleport_history.xml");
 }
@@ -439,8 +441,6 @@ BOOL LLTeleportHistoryPanel::postBuild()
 		}
 	}
 
-	getChild<LLPanel>("bottom_panel")->childSetAction("gear_btn",boost::bind(&LLTeleportHistoryPanel::onGearButtonClicked, this));
-
 	LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar;
 
 	registrar.add("TeleportHistory.ExpandAllFolders",  boost::bind(&LLTeleportHistoryPanel::onExpandAllFolders,  this));
@@ -448,9 +448,14 @@ BOOL LLTeleportHistoryPanel::postBuild()
 	registrar.add("TeleportHistory.ClearTeleportHistory",  boost::bind(&LLTeleportHistoryPanel::onClearTeleportHistory,  this));
 	mEnableCallbackRegistrar.add("TeleportHistory.GearMenu.Enable", boost::bind(&LLTeleportHistoryPanel::isActionEnabled, this, _2));
 
-	LLMenuGL* gear_menu  = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_teleport_history_gear.xml",  gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
+	mMenuGearButton = getChild<LLMenuButton>("gear_btn");
+
+	LLMenuGL* gear_menu  = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_teleport_history_gear.xml",  gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());;
 	if(gear_menu)
+	{
 		mGearMenuHandle  = gear_menu->getHandle();
+		mMenuGearButton->setMenu(gear_menu);
+	}
 
 	return TRUE;
 }
@@ -985,27 +990,6 @@ LLFlatListView* LLTeleportHistoryPanel::getFlatListViewFromTab(LLAccordionCtrlTa
 	return NULL;
 }
 
-void LLTeleportHistoryPanel::onGearButtonClicked()
-{
-	LLMenuGL* menu = (LLMenuGL*)mGearMenuHandle.get();
-	if (!menu)
-		return;
-
-	// Shows the menu at the top of the button bar.
-
-	// Calculate its coordinates.
-	LLPanel* bottom_panel = getChild<LLPanel>("bottom_panel");
-	menu->arrangeAndClear();
-	S32 menu_height = menu->getRect().getHeight();
-	S32 menu_x = -2; // *HACK: compensates HPAD in showPopup()
-	S32 menu_y = bottom_panel->getRect().mTop + menu_height;
-
-	// Actually show the menu.
-	menu->buildDrawLabels();
-	menu->updateParent(LLMenuGL::sMenuContainer);
-	LLMenuGL::showPopup(this, menu, menu_x, menu_y);
-}
-
 bool LLTeleportHistoryPanel::isActionEnabled(const LLSD& userdata) const
 {
 	S32 tabs_cnt = mItemContainers.size();
diff --git a/indra/newview/llpanelteleporthistory.h b/indra/newview/llpanelteleporthistory.h
index b5a025b39b..3d29454d15 100644
--- a/indra/newview/llpanelteleporthistory.h
+++ b/indra/newview/llpanelteleporthistory.h
@@ -38,6 +38,7 @@ class LLTeleportHistoryStorage;
 class LLAccordionCtrl;
 class LLAccordionCtrlTab;
 class LLFlatListView;
+class LLMenuButton;
 
 class LLTeleportHistoryPanel : public LLPanelPlacesTab
 {
@@ -94,7 +95,6 @@ private:
 	void showTeleportHistory();
 	void handleItemSelect(LLFlatListView* );
 	LLFlatListView* getFlatListViewFromTab(LLAccordionCtrlTab *);
-	void onGearButtonClicked();
 	bool isActionEnabled(const LLSD& userdata) const;
 
 	void setAccordionCollapsedByUser(LLUICtrl* acc_tab, bool collapsed);
@@ -118,6 +118,7 @@ private:
 	ContextMenu mContextMenu;
 	LLContextMenu*			mAccordionTabMenu;
 	LLHandle<LLView>		mGearMenuHandle;
+	LLMenuButton*			mMenuGearButton;
 };
 
 
diff --git a/indra/newview/llpanelwearing.cpp b/indra/newview/llpanelwearing.cpp
index 860470cd73..3b3d0cdce5 100644
--- a/indra/newview/llpanelwearing.cpp
+++ b/indra/newview/llpanelwearing.cpp
@@ -32,6 +32,7 @@
 #include "llinventoryfunctions.h"
 #include "llinventorymodel.h"
 #include "llinventoryobserver.h"
+#include "llmenubutton.h"
 #include "llsidetray.h"
 #include "llviewermenu.h"
 #include "llwearableitemslist.h"
@@ -63,16 +64,7 @@ public:
 		llassert(mMenu);
 	}
 
-	void show(LLView* spawning_view)
-	{
-		if (!mMenu) return;
-
-		mMenu->buildDrawLabels();
-		mMenu->updateParent(LLMenuGL::sMenuContainer);
-		S32 menu_x = 0;
-		S32 menu_y = spawning_view->getRect().getHeight() + mMenu->getRect().getHeight();
-		LLMenuGL::showPopup(spawning_view, mMenu, menu_x, menu_y);
-	}
+	LLMenuGL* getMenu() { return mMenu; }
 
 private:
 
@@ -189,6 +181,10 @@ BOOL LLPanelWearing::postBuild()
 	mCOFItemsList = getChild<LLWearableItemsList>("cof_items_list");
 	mCOFItemsList->setRightMouseDownCallback(boost::bind(&LLPanelWearing::onWearableItemsListRightClick, this, _1, _2, _3));
 
+	LLMenuButton* menu_gear_btn = getChild<LLMenuButton>("options_gear_btn");
+
+	menu_gear_btn->setMenu(mGearMenu->getMenu());
+
 	return TRUE;
 }
 
@@ -253,13 +249,6 @@ bool LLPanelWearing::isActionEnabled(const LLSD& userdata)
 	return false;
 }
 
-// virtual
-void LLPanelWearing::showGearMenu(LLView* spawning_view)
-{
-	if (!mGearMenu) return;
-	mGearMenu->show(spawning_view);
-}
-
 boost::signals2::connection LLPanelWearing::setSelectionChangeCallback(commit_callback_t cb)
 {
 	if (!mCOFItemsList) return boost::signals2::connection();
diff --git a/indra/newview/llpanelwearing.h b/indra/newview/llpanelwearing.h
index 1fa97735b1..157b2c4c5f 100644
--- a/indra/newview/llpanelwearing.h
+++ b/indra/newview/llpanelwearing.h
@@ -58,8 +58,6 @@ public:
 
 	/*virtual*/ bool isActionEnabled(const LLSD& userdata);
 
-	/*virtual*/ void showGearMenu(LLView* spawning_view);
-
 	/*virtual*/ void getSelectedItemsUUIDs(uuid_vec_t& selected_uuids) const;
 
 	boost::signals2::connection setSelectionChangeCallback(commit_callback_t cb);
diff --git a/indra/newview/skins/default/xui/en/panel_landmarks.xml b/indra/newview/skins/default/xui/en/panel_landmarks.xml
index 2ae46f79a5..2a5933e3e9 100644
--- a/indra/newview/skins/default/xui/en/panel_landmarks.xml
+++ b/indra/newview/skins/default/xui/en/panel_landmarks.xml
@@ -115,7 +115,7 @@
 		       layout="topleft"
 		       name="options_gear_btn_panel"
 		       width="32">
-		          <button
+		          <menu_button
 		           follows="bottom|left"
 		           tool_tip="Show additional options"
 		           height="25"
diff --git a/indra/newview/skins/default/xui/en/panel_main_inventory.xml b/indra/newview/skins/default/xui/en/panel_main_inventory.xml
index 16529f4064..2b6e082542 100644
--- a/indra/newview/skins/default/xui/en/panel_main_inventory.xml
+++ b/indra/newview/skins/default/xui/en/panel_main_inventory.xml
@@ -119,7 +119,7 @@
        layout="topleft"
        name="options_gear_btn_panel"
        width="32">
-          <button
+          <menu_button
            follows="bottom|left"
            tool_tip="Show additional options"
            height="25"
diff --git a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml
index bc050f9ad1..f4dee9cd55 100644
--- a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml
+++ b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml
@@ -378,7 +378,7 @@ It is calculated as border_size + 2*UIResizeBarOverlap
      name="no_add_wearables_button_bar"
      top_pad="0"
      width="313">
-        <button
+        <menu_button
          follows="bottom|left"
          height="25"
          image_hover_unselected="Toolbar_Left_Over"
@@ -426,7 +426,7 @@ It is calculated as border_size + 2*UIResizeBarOverlap
      top_delta="0"
      visible="false"
      width="313">
-        <button
+        <menu_button
          follows="bottom|left"
          height="25"
          image_hover_unselected="Toolbar_Left_Over"
diff --git a/indra/newview/skins/default/xui/en/panel_outfits_list.xml b/indra/newview/skins/default/xui/en/panel_outfits_list.xml
index d18f0d57ca..9f98019c94 100644
--- a/indra/newview/skins/default/xui/en/panel_outfits_list.xml
+++ b/indra/newview/skins/default/xui/en/panel_outfits_list.xml
@@ -35,7 +35,7 @@
 	 visible="true"
 	 name="bottom_panel"
 	 width="312">
-     <button
+     <menu_button
        follows="bottom|left"
        tool_tip="Show additional options"
        height="25"
diff --git a/indra/newview/skins/default/xui/en/panel_outfits_wearing.xml b/indra/newview/skins/default/xui/en/panel_outfits_wearing.xml
index 2fbbf6610c..d85b778db2 100644
--- a/indra/newview/skins/default/xui/en/panel_outfits_wearing.xml
+++ b/indra/newview/skins/default/xui/en/panel_outfits_wearing.xml
@@ -29,7 +29,7 @@
      name="bottom_panel"
      top_pad="0"
      width="312">
-        <button
+        <menu_button
          follows="bottom|left"
          height="25"
          image_hover_unselected="Toolbar_Left_Over"
diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml
index e7a0b768c6..d34c0c29a8 100644
--- a/indra/newview/skins/default/xui/en/panel_people.xml
+++ b/indra/newview/skins/default/xui/en/panel_people.xml
@@ -114,7 +114,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
              name="bottom_panel"
              top_pad="0"
              width="313">
-             <button
+             <menu_button
              follows="bottom|left"
              height="25"
              image_hover_unselected="Toolbar_Left_Over"
@@ -242,7 +242,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
 				       layout="topleft"
 				       name="options_gear_btn_panel"
 				       width="32">
-				          <button
+				          <menu_button
 				           follows="bottom|left"
 				           tool_tip="Show additional options"
 				           height="25"
@@ -407,7 +407,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
              name="bottom_panel"
              top_pad="0"
              width="313">
-               <button
+               <menu_button
                follows="bottom|left"
                tool_tip="Options"
                height="25"
@@ -490,7 +490,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
              name="bottom_panel"
              top_pad="0"
              width="313">
-               <button
+               <menu_button
                follows="bottom|left"
                tool_tip="Options"
                height="25"
@@ -499,7 +499,6 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
                image_selected="Toolbar_Left_Selected"
                image_unselected="Toolbar_Left_Off"
                layout="topleft"
-               left="3"
                name="recent_viewsort_btn"
                top="1"
                width="31" />
diff --git a/indra/newview/skins/default/xui/en/panel_teleport_history.xml b/indra/newview/skins/default/xui/en/panel_teleport_history.xml
index bf09836e87..768efc2f3f 100644
--- a/indra/newview/skins/default/xui/en/panel_teleport_history.xml
+++ b/indra/newview/skins/default/xui/en/panel_teleport_history.xml
@@ -157,7 +157,7 @@
      left="3"
      name="bottom_panel"
      width="313">
-        <button
+        <menu_button
          follows="bottom|left"
          tool_tip="Show additional options"
          height="25"
-- 
cgit v1.2.3


From 5ee546eb4e446632c32e62a5234241fd6498f281 Mon Sep 17 00:00:00 2001
From: Xiaohong Bao <bao@lindenlab.com>
Date: Thu, 14 Oct 2010 17:01:39 -0600
Subject: for SH-335: create a debug tool to track of memory availability.

---
 indra/newview/llappviewer.cpp     | 32 ++++++++++++++++++++++++++++++--
 indra/newview/llappviewer.h       |  2 ++
 indra/newview/llviewerdisplay.cpp |  1 -
 3 files changed, 32 insertions(+), 3 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 333c92e50d..f6cff3d443 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -984,6 +984,7 @@ bool LLAppViewer::mainLoop()
 	LLVoiceClient::getInstance()->init(gServicePump);
 	LLTimer frameTimer,idleTimer;
 	LLTimer debugTime;
+	LLFrameTimer memCheckTimer;
 	LLViewerJoystick* joystick(LLViewerJoystick::getInstance());
 	joystick->setNeedsReset(true);
 
@@ -994,11 +995,29 @@ bool LLAppViewer::mainLoop()
     // point of posting.
     LLSD newFrame;
 
+	const F32 memory_check_interval = 1.0f ; //second
+
 	// Handle messages
 	while (!LLApp::isExiting())
 	{
 		LLFastTimer::nextFrame(); // Should be outside of any timer instances
 
+		//clear call stack records
+		llclearcallstacks;
+
+		//check memory availability information
+		{
+			if(memory_check_interval < memCheckTimer.getElapsedTimeF32())
+			{
+				memCheckTimer.reset() ;
+
+				//update the availability of memory
+				gSysMemory.getAvailableMemoryKB(mAvailPhysicalMemInKB, mAvailVirtualMemInKB) ;
+			}
+			llcallstacks << "Available physical mem(KB): " << mAvailPhysicalMemInKB << llcallstacksendl ;
+			llcallstacks << "Available virtual mem(KB): " << mAvailVirtualMemInKB << llcallstacksendl ;
+		}
+
 		try
 		{
 			pingMainloopTimeout("Main:MiscNativeWindowEvents");
@@ -1225,11 +1244,20 @@ bool LLAppViewer::mainLoop()
 				resumeMainloopTimeout();
 	
 				pingMainloopTimeout("Main:End");
-			}
-						
+			}			
 		}
 		catch(std::bad_alloc)
 		{			
+			{
+				llinfos << "Availabe physical memory(KB) at the beginning of the frame: " << mAvailPhysicalMemInKB << llendl ;
+				llinfos << "Availabe virtual memory(KB) at the beginning of the frame: " << mAvailVirtualMemInKB << llendl ;
+
+				gSysMemory.getAvailableMemoryKB(mAvailPhysicalMemInKB, mAvailVirtualMemInKB) ;
+
+				llinfos << "Current availabe physical memory(KB): " << mAvailPhysicalMemInKB << llendl ;
+				llinfos << "Current availabe virtual memory(KB): " << mAvailVirtualMemInKB << llendl ;
+			}
+
 			//stop memory leaking simulation
 			LLFloaterMemLeak* mem_leak_instance =
 				LLFloaterReg::findTypedInstance<LLFloaterMemLeak>("mem_leaking");
diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h
index 56d88f07c8..a70a727c5d 100644
--- a/indra/newview/llappviewer.h
+++ b/indra/newview/llappviewer.h
@@ -258,6 +258,8 @@ private:
 
 	std::set<struct apr_dso_handle_t*> mPlugins;
 
+	U32 mAvailPhysicalMemInKB ;
+	U32 mAvailVirtualMemInKB ;
 public:
 	//some information for updater
 	typedef struct
diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp
index 916cbe2267..7c8b52d0b6 100644
--- a/indra/newview/llviewerdisplay.cpp
+++ b/indra/newview/llviewerdisplay.cpp
@@ -706,7 +706,6 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 		//
 		// Doing this here gives hardware occlusion queries extra time to complete
 		LLAppViewer::instance()->pingMainloopTimeout("Display:UpdateImages");
-		LLError::LLCallStacks::clear() ;
 		
 		{
 			LLMemType mt_iu(LLMemType::MTYPE_DISPLAY_IMAGE_UPDATE);
-- 
cgit v1.2.3


From 219cd6ecda60e1c48852f582f0994573fd0e10ae Mon Sep 17 00:00:00 2001
From: Xiaohong Bao <bao@lindenlab.com>
Date: Thu, 14 Oct 2010 21:23:23 -0600
Subject: more debug code for SH-207: viewer crash in
 LLVertexBuffer::mapBuffer.

---
 indra/newview/llappviewer.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index f6cff3d443..3a98749c0f 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -1012,7 +1012,7 @@ bool LLAppViewer::mainLoop()
 				memCheckTimer.reset() ;
 
 				//update the availability of memory
-				gSysMemory.getAvailableMemoryKB(mAvailPhysicalMemInKB, mAvailVirtualMemInKB) ;
+				LLMemoryInfo::getAvailableMemoryKB(mAvailPhysicalMemInKB, mAvailVirtualMemInKB) ;
 			}
 			llcallstacks << "Available physical mem(KB): " << mAvailPhysicalMemInKB << llcallstacksendl ;
 			llcallstacks << "Available virtual mem(KB): " << mAvailVirtualMemInKB << llcallstacksendl ;
@@ -1252,7 +1252,7 @@ bool LLAppViewer::mainLoop()
 				llinfos << "Availabe physical memory(KB) at the beginning of the frame: " << mAvailPhysicalMemInKB << llendl ;
 				llinfos << "Availabe virtual memory(KB) at the beginning of the frame: " << mAvailVirtualMemInKB << llendl ;
 
-				gSysMemory.getAvailableMemoryKB(mAvailPhysicalMemInKB, mAvailVirtualMemInKB) ;
+				LLMemoryInfo::getAvailableMemoryKB(mAvailPhysicalMemInKB, mAvailVirtualMemInKB) ;
 
 				llinfos << "Current availabe physical memory(KB): " << mAvailPhysicalMemInKB << llendl ;
 				llinfos << "Current availabe virtual memory(KB): " << mAvailVirtualMemInKB << llendl ;
-- 
cgit v1.2.3


From e748167abfabbc541c3ceb9e2d5a46fa3564f15a Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Fri, 15 Oct 2010 16:24:37 +0300
Subject: STORM-386 FIXED Disabled higlighting URLs in object names inside the
 "<name> has said something new" textbox that pops up in NEARBY CHAT window.

---
 indra/newview/skins/default/xui/en/widgets/chat_history.xml | 1 +
 1 file changed, 1 insertion(+)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/widgets/chat_history.xml b/indra/newview/skins/default/xui/en/widgets/chat_history.xml
index ef885e8045..c0a948931c 100644
--- a/indra/newview/skins/default/xui/en/widgets/chat_history.xml
+++ b/indra/newview/skins/default/xui/en/widgets/chat_history.xml
@@ -19,6 +19,7 @@
   font="SansSerif">
   <more_chat_text
     mouse_opaque="true" 
+    parse_urls="false"
     word_wrap="true"
     />
 </chat_history>
\ No newline at end of file
-- 
cgit v1.2.3


From b0fd7bf7ea85ad9f0249a887e7a592e01c6eabb7 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Fri, 15 Oct 2010 13:32:31 -0700
Subject: fixing ims not logging with display names off

---
 indra/newview/llimview.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index 5dd03783ad..c865dcf9a3 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -526,7 +526,8 @@ bool LLIMModel::LLIMSession::isOtherParticipantAvaline()
 
 void LLIMModel::LLIMSession::onAvatarNameCache(const LLUUID& avatar_id, const LLAvatarName& av_name)
 {
-	mHistoryFileName = av_name.mUsername;
+	// if username is empty, display names isn't enabled, use the display name
+	mHistoryFileName = av_name.mUsername.empty() ? av_name.mDisplayName : av_name.mUsername;
 }
 
 void LLIMModel::LLIMSession::buildHistoryFileName()
-- 
cgit v1.2.3


From 0f1d345e187c031ead1199c29674e93d922496cc Mon Sep 17 00:00:00 2001
From: "Boroondas Gupte (original fix by Aleric Inglewood)"
 <hg@boroon.dasgupta.ch>
Date: Sat, 16 Oct 2010 18:24:52 +0200
Subject: VWR-23459 FIXED Viewer compiled against Boost-1.42 crashes when
 certain command line options are given

used Aleric's SG2 changeset from http://svn.secondlife.com/trac/linden/changeset/3600
	patching file doc/contributions.txt
	Hunk #1 succeeded at 73 with fuzz 2.
	patching file indra/newview/llcommandlineparser.cpp
	Hunk #1 succeeded at 268 with fuzz 1 (offset -8 lines).

Edited doc/contributions.txt to create an entry for Aleric and moved the
issue ID there (patch wasn't able to place it at the right position,
lacking any context).
---
 indra/newview/llcommandlineparser.cpp | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llcommandlineparser.cpp b/indra/newview/llcommandlineparser.cpp
index 2f99ca1247..c7359a8865 100644
--- a/indra/newview/llcommandlineparser.cpp
+++ b/indra/newview/llcommandlineparser.cpp
@@ -267,7 +267,11 @@ bool parseAndStoreResults(po::command_line_parser& clp)
     {
         clp.options(gOptionsDesc);
         clp.positional(gPositionalOptions);
-        clp.style(po::command_line_style::default_style 
+		// SNOW-626: Boost 1.42 erroneously added allow_guessing to the default style
+		// (see http://groups.google.com/group/boost-list/browse_thread/thread/545d7bf98ff9bb16?fwc=2&pli=1)
+		// Remove allow_guessing from the default style, because that is not allowed
+		// when we have options that are a prefix of other options (aka, --help and --helperuri).
+        clp.style((po::command_line_style::default_style & ~po::command_line_style::allow_guessing)
                   | po::command_line_style::allow_long_disguise);
         po::basic_parsed_options<char> opts = clp.run();
         po::store(opts, gVariableMap);
-- 
cgit v1.2.3


From 869438e6cdabfbd89e7b2fc46a38e0d94189aa32 Mon Sep 17 00:00:00 2001
From: Roxie Linden <roxie@lindenlab.com>
Date: Mon, 18 Oct 2010 10:37:21 -0700
Subject: Point the events profiles and other components to the new events web
 pages

---
 indra/newview/app_settings/settings.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 322d823efb..33f5482e50 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -2906,7 +2906,7 @@
       <key>Type</key>
       <string>String</string>
       <key>Value</key>
-      <string>http://search.secondlife.com/viewer/embed/event/</string>
+      <string>http://events.secondlife.com/viewer/embed/event/</string>
     </map>
     <key>EveryoneCopy</key>
       <map>
-- 
cgit v1.2.3


From d97355a19f3b88512105965cfd752956f0230b41 Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Tue, 19 Oct 2010 19:55:19 +0300
Subject: STORM-390 FIXED "Place Profile" appeared instead of "Resident
 Profile" after clicking on user name in a nearby chat toast.

Now clicking an avatar name opens avatar profile; clicking an object name opens object inspector.

This change rolls back the fix of STORM-358.
---
 indra/newview/llchatitemscontainerctrl.cpp | 59 +++++++++++++++++++++++++++---
 1 file changed, 54 insertions(+), 5 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llchatitemscontainerctrl.cpp b/indra/newview/llchatitemscontainerctrl.cpp
index ababa71348..d353c809ca 100644
--- a/indra/newview/llchatitemscontainerctrl.cpp
+++ b/indra/newview/llchatitemscontainerctrl.cpp
@@ -31,6 +31,7 @@
 
 #include "llchatmsgbox.h"
 #include "llavatariconctrl.h"
+#include "llcommandhandler.h"
 #include "llfloaterreg.h"
 #include "lllocalcliprect.h"
 #include "lltrans.h"
@@ -44,6 +45,40 @@ static const S32 msg_left_offset = 10;
 static const S32 msg_right_offset = 10;
 static const S32 msg_height_pad = 5;
 
+//*******************************************************************************************************************
+// LLObjectHandler
+//*******************************************************************************************************************
+
+// handle secondlife:///app/object/<ID>/inspect SLURLs
+class LLObjectHandler : public LLCommandHandler
+{
+public:
+	LLObjectHandler() : LLCommandHandler("object", UNTRUSTED_BLOCK) { }
+
+	bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web)
+	{
+		if (params.size() < 2) return false;
+
+		LLUUID object_id;
+		if (!object_id.set(params[0], FALSE))
+		{
+			return false;
+		}
+
+		const std::string verb = params[1].asString();
+
+		if (verb == "inspect")
+		{
+			LLFloaterReg::showInstance("inspect_object", LLSD().with("object_id", object_id));
+			return true;
+		}
+
+		return false;
+	}
+};
+
+LLObjectHandler gObjectHandler;
+
 //*******************************************************************************************************************
 //LLNearbyChatToastPanel
 //*******************************************************************************************************************
@@ -169,17 +204,26 @@ void LLNearbyChatToastPanel::init(LLSD& notification)
 	{
 		std::string str_sender;
 
-		str_sender = "<nolink>"; // disable parsing URLs in object names (STORM-358)
-		str_sender += fromName;
-		str_sender += "</nolink>";
+		str_sender = fromName;
 
 		str_sender+=" ";
 
-		//append user name
+		//append sender name
+		if (mSourceType == CHAT_SOURCE_AGENT || mSourceType == CHAT_SOURCE_OBJECT)
 		{
 			LLStyle::Params style_params_name;
 
 			LLColor4 userNameColor = LLUIColorTable::instance().getColor("ChatToastAgentNameColor");
+			std::string href;
+
+			if (mSourceType == CHAT_SOURCE_AGENT)
+			{
+				href = LLSLURL("agent", mFromID, "about").getSLURLString();
+			}
+			else
+			{
+				href = LLSLURL("object", mFromID, "inspect").getSLURLString();
+			}
 
 			style_params_name.color(userNameColor);
 
@@ -188,11 +232,16 @@ void LLNearbyChatToastPanel::init(LLSD& notification)
 			style_params_name.font.name(font_name);
 			style_params_name.font.size(font_style_size);
 
-			style_params_name.link_href = LLSLURL("agent",mFromID,"about").getSLURLString();
+			style_params_name.link_href = href;
+			style_params_name.is_link = true;
 
 			msg_text->appendText(str_sender, FALSE, style_params_name);
 
 		}
+		else
+		{
+			msg_text->appendText(str_sender, false);
+		}
 	}
 
 	//append text
-- 
cgit v1.2.3


From b8444e52c1e52aabe86c84442abee90c1e4479f0 Mon Sep 17 00:00:00 2001
From: Andrew Productengine <adyukov@productengine.com>
Date: Tue, 19 Oct 2010 20:23:07 +0300
Subject: STORM-402 FIXED Fixed adding of people whom you sent IM to Recent
 list.

This regression was caused by fix of STORM-126 in changeset 09f13edf6aa8 where adding of people from mInitialTargetIDs was removed.
And it was used to add people whom you P2P im'ed.

- Used mInitialTargetIDs to add people whom you P2P im'ed.
---
 indra/newview/llimview.cpp | 28 +++++++++++++++++++---------
 1 file changed, 19 insertions(+), 9 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index c865dcf9a3..fe8a46e908 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -1049,17 +1049,27 @@ void LLIMModel::sendMessage(const std::string& utf8_text,
 		if( session == 0)//??? shouldn't really happen
 		{
 			LLRecentPeople::instance().add(other_participant_id);
+			return;
 		}
-		else
+		// IM_SESSION_INVITE means that this is an Ad-hoc incoming chat
+		//		(it can be also Group chat but it is checked above)
+		// In this case mInitialTargetIDs contains Ad-hoc session ID and it should not be added
+		// to Recent People to prevent showing of an item with (???)(???). See EXT-8246.
+		// Concrete participants will be added into this list once they sent message in chat.
+		if (IM_SESSION_INVITE == dialog) return;
+			
+		if (IM_SESSION_CONFERENCE_START == dialog) // outgoing ad-hoc session
 		{
-			// IM_SESSION_INVITE means that this is an Ad-hoc incoming chat
-			//		(it can be also Group chat but it is checked above)
-			// In this case mInitialTargetIDs contains Ad-hoc session ID and it should not be added
-			// to Recent People to prevent showing of an item with (???)(???). See EXT-8246.
-			// Concrete participants will be added into this list once they sent message in chat.
-			if (IM_SESSION_INVITE == dialog) return;
-			// Add only online members to recent (EXT-8658)
-			addSpeakersToRecent(im_session_id);			
+			// Add only online members of conference to recent list (EXT-8658)
+			addSpeakersToRecent(im_session_id);
+		}
+		else // outgoing P2P session
+		{
+			// Add the recepient of the session.
+			if (!session->mInitialTargetIDs.empty())
+			{
+				LLRecentPeople::instance().add(*(session->mInitialTargetIDs.begin()));
+			}
 		}
 	}
 }
-- 
cgit v1.2.3


From ea7420a7b3e1f68b8eb78a6e8ebd13683f7716b9 Mon Sep 17 00:00:00 2001
From: Paul Guslisty <pguslisty@productengine.com>
Date: Tue, 19 Oct 2010 20:59:08 +0300
Subject: STORM-293 FIXED Friend permissions icons overlap long names on 'My
 Friends' tab

- Added 'avatar name right padding' as parameter to avatar_list_item.
  Before it was calculated and correctness of calculation was strongly dependent on right positioning elements in XML, which was prone to errors.
---
 indra/newview/llavatarlistitem.cpp                            | 11 +++++++----
 indra/newview/llavatarlistitem.h                              |  4 +++-
 .../newview/skins/default/xui/en/widgets/avatar_list_item.xml |  1 +
 3 files changed, 11 insertions(+), 5 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llavatarlistitem.cpp b/indra/newview/llavatarlistitem.cpp
index a56dc129d4..30eecfe323 100644
--- a/indra/newview/llavatarlistitem.cpp
+++ b/indra/newview/llavatarlistitem.cpp
@@ -41,7 +41,7 @@
 
 bool LLAvatarListItem::sStaticInitialized = false;
 S32 LLAvatarListItem::sLeftPadding = 0;
-S32 LLAvatarListItem::sRightNamePadding = 0;
+S32 LLAvatarListItem::sNameRightPadding = 0;
 S32 LLAvatarListItem::sChildrenWidths[LLAvatarListItem::ALIC_COUNT];
 
 static LLWidgetNameRegistry::StaticRegistrar sRegisterAvatarListItemParams(&typeid(LLAvatarListItem::Params), "avatar_list_item");
@@ -52,7 +52,8 @@ LLAvatarListItem::Params::Params()
 	voice_call_joined_style("voice_call_joined_style"),
 	voice_call_left_style("voice_call_left_style"),
 	online_style("online_style"),
-	offline_style("offline_style")
+	offline_style("offline_style"),
+	name_right_pad("name_right_pad", 0)
 {};
 
 
@@ -119,6 +120,9 @@ BOOL  LLAvatarListItem::postBuild()
 		// so that we can hide and show them again later.
 		initChildrenWidths(this);
 
+		// Right padding between avatar name text box and nearest visible child.
+		sNameRightPadding = LLUICtrlFactory::getDefaultParams<LLAvatarListItem>().name_right_pad;
+
 		sStaticInitialized = true;
 	}
 
@@ -486,7 +490,6 @@ void LLAvatarListItem::initChildrenWidths(LLAvatarListItem* avatar_item)
 	S32 icon_width = avatar_item->mAvatarName->getRect().mLeft - avatar_item->mAvatarIcon->getRect().mLeft;
 
 	sLeftPadding = avatar_item->mAvatarIcon->getRect().mLeft;
-	sRightNamePadding = avatar_item->mLastInteractionTime->getRect().mLeft - avatar_item->mAvatarName->getRect().mRight;
 
 	S32 index = ALIC_COUNT;
 	sChildrenWidths[--index] = icon_width;
@@ -565,7 +568,7 @@ void LLAvatarListItem::updateChildren()
 
 	// apply paddings
 	name_new_width -= sLeftPadding;
-	name_new_width -= sRightNamePadding;
+	name_new_width -= sNameRightPadding;
 
 	name_view_rect.setLeftTopAndSize(
 		name_new_left,
diff --git a/indra/newview/llavatarlistitem.h b/indra/newview/llavatarlistitem.h
index a069838ac3..c95ac39696 100644
--- a/indra/newview/llavatarlistitem.h
+++ b/indra/newview/llavatarlistitem.h
@@ -51,6 +51,8 @@ public:
 									online_style,
 									offline_style;
 
+		Optional<S32>				name_right_pad;
+
 		Params();
 	};
 
@@ -215,7 +217,7 @@ private:
 
 	static bool	sStaticInitialized; // this variable is introduced to improve code readability
 	static S32  sLeftPadding; // padding to first left visible child (icon or name)
-	static S32  sRightNamePadding; // right padding from name to next visible child
+	static S32  sNameRightPadding; // right padding from name to next visible child
 
 	/**
 	 * Contains widths of each child specified by EAvatarListItemChildIndex
diff --git a/indra/newview/skins/default/xui/en/widgets/avatar_list_item.xml b/indra/newview/skins/default/xui/en/widgets/avatar_list_item.xml
index ed8df69bf4..1bb3188cc8 100644
--- a/indra/newview/skins/default/xui/en/widgets/avatar_list_item.xml
+++ b/indra/newview/skins/default/xui/en/widgets/avatar_list_item.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <avatar_list_item
+ name_right_pad="5"
  height="0"
  layout="topleft"
  left="0"
-- 
cgit v1.2.3


From e44b548704d8dbdaea59ceaea08015499a2bf623 Mon Sep 17 00:00:00 2001
From: Merov Linden <merov@lindenlab.com>
Date: Tue, 19 Oct 2010 17:48:35 -0700
Subject: STORM-281 : Fix Map FOV frustum when UI size not equal to 1

---
 indra/newview/llworldmapview.cpp | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp
index 0c17b5e297..620c8fe82d 100644
--- a/indra/newview/llworldmapview.cpp
+++ b/indra/newview/llworldmapview.cpp
@@ -880,8 +880,10 @@ void LLWorldMapView::drawFrustum()
 	F32 half_width_meters = far_clip_meters * tan( horiz_fov / 2 );
 	F32 half_width_pixels = half_width_meters * meters_to_pixels;
 	
-	F32 ctr_x = getLocalRect().getWidth() * 0.5f + sPanX;
-	F32 ctr_y = getLocalRect().getHeight() * 0.5f + sPanY;
+    // Compute the frustum coordinates. Take the UI scale into account.
+    F32 ui_scale_factor = gSavedSettings.getF32("UIScaleFactor");
+	F32 ctr_x = (getLocalRect().getWidth() * 0.5f + sPanX)  * ui_scale_factor;
+	F32 ctr_y = (getLocalRect().getHeight() * 0.5f + sPanY) * ui_scale_factor;
 
 	gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
 
-- 
cgit v1.2.3


From 802a985882532dd3bfa5497155f0097d201e4d46 Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Wed, 20 Oct 2010 19:24:32 +0300
Subject: STORM-311 FIXED "Share" button in My Inventory SP was not updated on
 Current Outfit changes.

When you wear an inventory item, the code that disables/enables the button was called as soon
as the item got linked to COF, before it actually appeared on your avatar. However
to determine whether to enable the button, the code checked avatar appearence.

I fixed it to take the COF link into account, i.e. to treat items linked to COF as
worn (=not shareable), no matter has appearance been updated or not.
---
 indra/newview/llgiveinventory.cpp      | 4 ++--
 indra/newview/llinventoryfunctions.cpp | 5 +----
 2 files changed, 3 insertions(+), 6 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llgiveinventory.cpp b/indra/newview/llgiveinventory.cpp
index 260e15c714..f990b9294d 100644
--- a/indra/newview/llgiveinventory.cpp
+++ b/indra/newview/llgiveinventory.cpp
@@ -128,7 +128,7 @@ bool LLGiveInventory::isInventoryGiveAcceptable(const LLInventoryItem* item)
 	switch(item->getType())
 	{
 	case LLAssetType::AT_OBJECT:
-		if (gAgentAvatarp->isWearingAttachment(item->getUUID()))
+		if (get_is_item_worn(item->getUUID()))
 		{
 			acceptable = false;
 		}
@@ -139,7 +139,7 @@ bool LLGiveInventory::isInventoryGiveAcceptable(const LLInventoryItem* item)
 			BOOL copyable = false;
 			if (item->getPermissions().allowCopyBy(gAgentID)) copyable = true;
 
-			if (!copyable && gAgentWearables.isWearingItem(item->getUUID()))
+			if (!copyable && get_is_item_worn(item->getUUID()))
 			{
 				acceptable = false;
 			}
diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp
index f3d9639dee..ef20869114 100644
--- a/indra/newview/llinventoryfunctions.cpp
+++ b/indra/newview/llinventoryfunctions.cpp
@@ -487,12 +487,9 @@ bool LLInventoryCollectFunctor::itemTransferCommonlyAllowed(const LLInventoryIte
 			return false;
 			break;
 		case LLAssetType::AT_OBJECT:
-			if (isAgentAvatarValid() && !gAgentAvatarp->isWearingAttachment(item->getUUID()))
-				return true;
-			break;
 		case LLAssetType::AT_BODYPART:
 		case LLAssetType::AT_CLOTHING:
-			if(!gAgentWearables.isWearingItem(item->getUUID()))
+			if (!get_is_item_worn(item->getUUID()))
 				return true;
 			break;
 		default:
-- 
cgit v1.2.3


From b3f3fb60999033a7a100102d563e66eaaa876fa3 Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Wed, 20 Oct 2010 21:23:27 +0300
Subject: STORM-417 FIXED Port of SNOW-140 to SG 2.0 : Forced updates not
 working on Mac

The point of this patch is to make the Mac updater code a bit more flexible
and reliable than it is right now. The issue is double:
 * reliability: the string comparison code on the bundle identifier is not UTF8 compliant
 * flexibility: the bundle identifier is hard coded to match the bundle identifier of LL viewer
   (i.e. com.secondlife.indra.viewer) so it can't work for another viewer
   (in particular, it didn't work for Snowglobe).
   The "bundle identifier" is one of those Mac only thing stored in the Info.plist of a "bundle"
   (the ".app" folder that's bundling an executable and all its resources and is seen
   as an application when browsing with the Mac OS X Finder).

The patch fixes both issues:
 * compare correctly UTF8 encoded strings
 * allow the bundle ID to be passed as a parameter to the updater

The patch has really no consequence on LL viewer. It's more a matter of having cleaner, better code.

Author: Cypren Christenson
Ported and reviewed by: Merov Linden
---
 indra/newview/llappviewer.cpp | 3 +++
 1 file changed, 3 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index ba14c248aa..931b9fd2f3 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -30,6 +30,7 @@
 
 // Viewer includes
 #include "llversioninfo.h"
+#include "llversionviewer.h"
 #include "llfeaturemanager.h"
 #include "lluictrlfactory.h"
 #include "lltexteditor.h"
@@ -4513,6 +4514,8 @@ void LLAppViewer::launchUpdater()
 	LLAppViewer::sUpdaterInfo->mUpdateExePath += update_url.asString();
 	LLAppViewer::sUpdaterInfo->mUpdateExePath += "\" -name \"";
 	LLAppViewer::sUpdaterInfo->mUpdateExePath += LLAppViewer::instance()->getSecondLifeTitle();
+	LLAppViewer::sUpdaterInfo->mUpdateExePath += "\" -bundleid \"";
+	LLAppViewer::sUpdaterInfo->mUpdateExePath += LL_VERSION_BUNDLE_ID;
 	LLAppViewer::sUpdaterInfo->mUpdateExePath += "\" &";
 
 	LL_DEBUGS("AppInit") << "Calling updater: " << LLAppViewer::sUpdaterInfo->mUpdateExePath << LL_ENDL;
-- 
cgit v1.2.3


From 755fdfb25fe06e35219f6bffcaf929f8dd7e1051 Mon Sep 17 00:00:00 2001
From: Merov Linden <merov@lindenlab.com>
Date: Wed, 20 Oct 2010 14:59:39 -0700
Subject: STORM-423: fix raw file association in strings.xml

---
 indra/newview/skins/default/xui/da/strings.xml | 2 +-
 indra/newview/skins/default/xui/de/strings.xml | 2 +-
 indra/newview/skins/default/xui/en/strings.xml | 2 +-
 indra/newview/skins/default/xui/es/strings.xml | 2 +-
 indra/newview/skins/default/xui/fr/strings.xml | 2 +-
 indra/newview/skins/default/xui/it/strings.xml | 2 +-
 indra/newview/skins/default/xui/ja/strings.xml | 2 +-
 indra/newview/skins/default/xui/nl/strings.xml | 2 +-
 indra/newview/skins/default/xui/pl/strings.xml | 2 +-
 indra/newview/skins/default/xui/pt/strings.xml | 2 +-
 10 files changed, 10 insertions(+), 10 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/da/strings.xml b/indra/newview/skins/default/xui/da/strings.xml
index 9f4119e73b..afd933c7fa 100644
--- a/indra/newview/skins/default/xui/da/strings.xml
+++ b/indra/newview/skins/default/xui/da/strings.xml
@@ -774,7 +774,7 @@
 	<string name="xml_file">
 		XML Fil
 	</string>
-	<string name="dot_raw_file">
+	<string name="raw_file">
 		RAW Fil
 	</string>
 	<string name="compressed_image_files">
diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml
index ae2991df45..afcb68f537 100644
--- a/indra/newview/skins/default/xui/de/strings.xml
+++ b/indra/newview/skins/default/xui/de/strings.xml
@@ -798,7 +798,7 @@
 	<string name="xml_file">
 		XML-Datei
 	</string>
-	<string name="dot_raw_file">
+	<string name="raw_file">
 		RAW-Datei
 	</string>
 	<string name="compressed_image_files">
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index bee0e4fde6..403d976350 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -338,7 +338,7 @@
 	<string name="avi_movie_file">AVI Movie File</string>
 	<string name="xaf_animation_file">XAF Anim File</string>
 	<string name="xml_file">XML File</string>
-	<string name="dot_raw_file">RAW File</string>
+	<string name="raw_file">RAW File</string>
 	<string name="compressed_image_files">Compressed Images</string>
 	<string name="load_files">Load Files</string>
 	<string name="choose_the_directory">Choose Directory</string>
diff --git a/indra/newview/skins/default/xui/es/strings.xml b/indra/newview/skins/default/xui/es/strings.xml
index ac12b700ee..5fa3d54de2 100644
--- a/indra/newview/skins/default/xui/es/strings.xml
+++ b/indra/newview/skins/default/xui/es/strings.xml
@@ -777,7 +777,7 @@
 	<string name="xml_file">
 		Archivo XML
 	</string>
-	<string name="dot_raw_file">
+	<string name="raw_file">
 		Archivo RAW
 	</string>
 	<string name="compressed_image_files">
diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml
index a7a766f6a6..af70048106 100644
--- a/indra/newview/skins/default/xui/fr/strings.xml
+++ b/indra/newview/skins/default/xui/fr/strings.xml
@@ -798,7 +798,7 @@
 	<string name="xml_file">
 		Fichier XML
 	</string>
-	<string name="dot_raw_file">
+	<string name="raw_file">
 		Fichier RAW
 	</string>
 	<string name="compressed_image_files">
diff --git a/indra/newview/skins/default/xui/it/strings.xml b/indra/newview/skins/default/xui/it/strings.xml
index 4fc0d19199..9dbfc2b79c 100644
--- a/indra/newview/skins/default/xui/it/strings.xml
+++ b/indra/newview/skins/default/xui/it/strings.xml
@@ -783,7 +783,7 @@
 	<string name="xml_file">
 		File XML
 	</string>
-	<string name="dot_raw_file">
+	<string name="raw_file">
 		File RAW
 	</string>
 	<string name="compressed_image_files">
diff --git a/indra/newview/skins/default/xui/ja/strings.xml b/indra/newview/skins/default/xui/ja/strings.xml
index 072ae6c630..92bbedaee5 100644
--- a/indra/newview/skins/default/xui/ja/strings.xml
+++ b/indra/newview/skins/default/xui/ja/strings.xml
@@ -798,7 +798,7 @@
 	<string name="xml_file">
 		XML ファイル
 	</string>
-	<string name="dot_raw_file">
+	<string name="raw_file">
 		RAW ファイル
 	</string>
 	<string name="compressed_image_files">
diff --git a/indra/newview/skins/default/xui/nl/strings.xml b/indra/newview/skins/default/xui/nl/strings.xml
index 1ee26c3f24..844945913f 100644
--- a/indra/newview/skins/default/xui/nl/strings.xml
+++ b/indra/newview/skins/default/xui/nl/strings.xml
@@ -665,7 +665,7 @@
 	<string name="xml_file">
 		XML bestand
 	</string>
-	<string name="dot_raw_file">
+	<string name="raw_file">
 		RAW bestand
 	</string>
 	<string name="compressed_image_files">
diff --git a/indra/newview/skins/default/xui/pl/strings.xml b/indra/newview/skins/default/xui/pl/strings.xml
index c9fe22f3c8..e355bdbb96 100644
--- a/indra/newview/skins/default/xui/pl/strings.xml
+++ b/indra/newview/skins/default/xui/pl/strings.xml
@@ -774,7 +774,7 @@
 	<string name="xml_file">
 		Plik XML
 	</string>
-	<string name="dot_raw_file">
+	<string name="raw_file">
 		Plik RAW
 	</string>
 	<string name="compressed_image_files">
diff --git a/indra/newview/skins/default/xui/pt/strings.xml b/indra/newview/skins/default/xui/pt/strings.xml
index 2247b0a76b..800ad479fc 100644
--- a/indra/newview/skins/default/xui/pt/strings.xml
+++ b/indra/newview/skins/default/xui/pt/strings.xml
@@ -777,7 +777,7 @@
 	<string name="xml_file">
 		Arquivo XML
 	</string>
-	<string name="dot_raw_file">
+	<string name="raw_file">
 		Arquivo RAW
 	</string>
 	<string name="compressed_image_files">
-- 
cgit v1.2.3


From 0d456a1ae7d523a3253a98212c420bd60c4a1f16 Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Thu, 21 Oct 2010 20:57:43 +0300
Subject: STORM-224 FIXED Changed label "Fabric" to read "Texture" in wearable
 editing panels.

---
 indra/newview/skins/default/xui/en/panel_edit_gloves.xml     | 2 +-
 indra/newview/skins/default/xui/en/panel_edit_jacket.xml     | 4 ++--
 indra/newview/skins/default/xui/en/panel_edit_pants.xml      | 2 +-
 indra/newview/skins/default/xui/en/panel_edit_shirt.xml      | 2 +-
 indra/newview/skins/default/xui/en/panel_edit_shoes.xml      | 2 +-
 indra/newview/skins/default/xui/en/panel_edit_skirt.xml      | 2 +-
 indra/newview/skins/default/xui/en/panel_edit_socks.xml      | 2 +-
 indra/newview/skins/default/xui/en/panel_edit_underpants.xml | 2 +-
 indra/newview/skins/default/xui/en/panel_edit_undershirt.xml | 2 +-
 9 files changed, 10 insertions(+), 10 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_edit_gloves.xml b/indra/newview/skins/default/xui/en/panel_edit_gloves.xml
index a490f27b9f..8c0c543d71 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_gloves.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_gloves.xml
@@ -26,7 +26,7 @@
         default_image_name="Default"
         follows="left|top"
         height="80"
-        label="Fabric"
+        label="Texture"
         layout="topleft"
         left="10"
         name="Fabric"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_jacket.xml b/indra/newview/skins/default/xui/en/panel_edit_jacket.xml
index 929cdffb3d..8e8d8e6505 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_jacket.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_jacket.xml
@@ -26,7 +26,7 @@
         default_image_name="Default"
         follows="left|top"
         height="80"
-        label="Upper Fabric"
+        label="Upper Texture"
         layout="topleft"
         left="25"
         name="Upper Fabric"
@@ -41,7 +41,7 @@
         default_image_name="Default"
         follows="left|top"
         height="80"
-        label="Lower Fabric"
+        label="Lower Texture"
         layout="topleft"
         left_pad="20"
         name="Lower Fabric"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_pants.xml b/indra/newview/skins/default/xui/en/panel_edit_pants.xml
index f22cf983aa..dd749a9259 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_pants.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_pants.xml
@@ -26,7 +26,7 @@
         default_image_name="Default"
         follows="left|top"
         height="80"
-        label="Fabric"
+        label="Texture"
         layout="topleft"
         left="10"
         name="Fabric"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_shirt.xml b/indra/newview/skins/default/xui/en/panel_edit_shirt.xml
index 85823073b5..5424b805e1 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_shirt.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_shirt.xml
@@ -26,7 +26,7 @@
         default_image_name="Default"
         follows="left|top"
         height="80"
-        label="Fabric"
+        label="Texture"
         layout="topleft"
         left="10"
         name="Fabric"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_shoes.xml b/indra/newview/skins/default/xui/en/panel_edit_shoes.xml
index b26fde68f1..859e7454a4 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_shoes.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_shoes.xml
@@ -26,7 +26,7 @@
         default_image_name="Default"
         follows="left|top"
         height="80"
-        label="Fabric"
+        label="Texture"
         layout="topleft"
         left="10"
         name="Fabric"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_skirt.xml b/indra/newview/skins/default/xui/en/panel_edit_skirt.xml
index bb8e0dca07..76d66cc5dc 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_skirt.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_skirt.xml
@@ -26,7 +26,7 @@
         default_image_name="Default"
         follows="left|top"
         height="80"
-        label="Fabric"
+        label="Texture"
         layout="topleft"
         left="10"
         name="Fabric"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_socks.xml b/indra/newview/skins/default/xui/en/panel_edit_socks.xml
index d813d94d93..5f978174b3 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_socks.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_socks.xml
@@ -26,7 +26,7 @@
         default_image_name="Default"
         follows="left|top"
         height="80"
-        label="Fabric"
+        label="Texture"
         layout="topleft"
         left="10"
         name="Fabric"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_underpants.xml b/indra/newview/skins/default/xui/en/panel_edit_underpants.xml
index 19225e9757..16f28377fb 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_underpants.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_underpants.xml
@@ -26,7 +26,7 @@
              default_image_name="Default"
              follows="left|top"
              height="80"
-             label="Fabric"
+             label="Texture"
              layout="topleft"
              left="10"
              name="Fabric"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_undershirt.xml b/indra/newview/skins/default/xui/en/panel_edit_undershirt.xml
index 720a55dcc2..059485cfb4 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_undershirt.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_undershirt.xml
@@ -26,7 +26,7 @@
         default_image_name="Default"
         follows="left|top"
         height="80"
-        label="Fabric"
+        label="Texture"
         layout="topleft"
         left="10"
         name="Fabric"
-- 
cgit v1.2.3


From 9c09665885783ca9a1405529942912aecca4d938 Mon Sep 17 00:00:00 2001
From: Andrew Productengine <adyukov@productengine.com>
Date: Thu, 21 Oct 2010 21:11:29 +0300
Subject: STORM-322 FIXED Fixed problem with redundant search entries shown in
 People/Groups/Roles/Members.

Bug was caused by adding members with uncached names to search results- when name was uncached, method that added ids
to member list, didn't respect the filter.

- Fixed by adding members only when their names are cached and match the filter. If name is not cached, LLCacheName::get() is
called for such user id, and when name is cached, it calls function that handles adding of user to list depending on filter.

- Added default sorting of members by name, added saving of sort order to settings.
---
 indra/newview/app_settings/settings.xml |  11 ++++
 indra/newview/llpanelgrouproles.cpp     | 107 ++++++++++++++++++++++++--------
 indra/newview/llpanelgrouproles.h       |   6 ++
 3 files changed, 97 insertions(+), 27 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 33f5482e50..3078e4275b 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -12145,5 +12145,16 @@
       <key>Value</key>
       <real>300.0</real>
     </map>
+    <key>GroupMembersSortOrder</key>
+    <map>
+      <key>Comment</key>
+      <string>The order by which group members will be sorted (name|donated|online)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>name</string>
+    </map>
 </map>
 </llsd>
diff --git a/indra/newview/llpanelgrouproles.cpp b/indra/newview/llpanelgrouproles.cpp
index 35f898bfa6..0d1d96eae6 100644
--- a/indra/newview/llpanelgrouproles.cpp
+++ b/indra/newview/llpanelgrouproles.cpp
@@ -49,6 +49,7 @@
 #include "llviewertexturelist.h"
 #include "llviewerwindow.h"
 #include "llfocusmgr.h"
+#include "llviewercontrol.h"
 
 #include "roles_constants.h"
 
@@ -742,10 +743,12 @@ LLPanelGroupMembersSubTab::LLPanelGroupMembersSubTab()
 	mHasMatch(FALSE),
 	mNumOwnerAdditions(0)
 {
+	mUdpateSessionID = LLUUID::null;
 }
 
 LLPanelGroupMembersSubTab::~LLPanelGroupMembersSubTab()
 {
+	gSavedSettings.setString("GroupMembersSortOrder", mMembersList->getSortColumnName());
 }
 
 BOOL LLPanelGroupMembersSubTab::postBuildSubTab(LLView* root)
@@ -772,6 +775,17 @@ BOOL LLPanelGroupMembersSubTab::postBuildSubTab(LLView* root)
 	// Show the member's profile on double click.
 	mMembersList->setDoubleClickCallback(onMemberDoubleClick, this);
 	mMembersList->setContextMenu(LLScrollListCtrl::MENU_AVATAR);
+	
+	LLSD row;
+	row["columns"][0]["column"] = "name";
+	row["columns"][1]["column"] = "donated";
+	row["columns"][2]["column"] = "online";
+	mMembersList->addElement(row);
+	std::string order_by = gSavedSettings.getString("GroupMembersSortOrder");
+	if(!order_by.empty())
+	{
+		mMembersList->sortByColumn(order_by, TRUE);
+	}	
 
 	LLButton* button = parent->getChild<LLButton>("member_invite", recurse);
 	if ( button )
@@ -1529,6 +1543,10 @@ void LLPanelGroupMembersSubTab::update(LLGroupChange gc)
 		mMemberProgress = gdatap->mMembers.begin();
 		mPendingMemberUpdate = TRUE;
 		mHasMatch = FALSE;
+		// Generate unique ID for current updateMembers()- see onNameCache for details.
+		// Using unique UUID is perhaps an overkill but this way we are perfectly safe
+		// from coincidences.
+		mUdpateSessionID.generate();
 	}
 	else
 	{
@@ -1556,6 +1574,59 @@ void LLPanelGroupMembersSubTab::update(LLGroupChange gc)
 	}
 }
 
+void LLPanelGroupMembersSubTab::addMemberToList(LLUUID id, LLGroupMemberData* data)
+{
+	LLUIString donated = getString("donation_area");
+	donated.setArg("[AREA]", llformat("%d", data->getContribution()));
+
+	LLSD row;
+	row["id"] = id;
+
+	row["columns"][0]["column"] = "name";
+	// value is filled in by name list control
+
+	row["columns"][1]["column"] = "donated";
+	row["columns"][1]["value"] = donated.getString();
+
+	row["columns"][2]["column"] = "online";
+	row["columns"][2]["value"] = data->getOnlineStatus();
+	row["columns"][2]["font"] = "SANSSERIF_SMALL";
+
+	mMembersList->addElement(row);
+
+	mHasMatch = TRUE;
+}
+
+void LLPanelGroupMembersSubTab::onNameCache(const LLUUID& update_id, const LLUUID& id)
+{
+	// Update ID is used to determine whether member whose id is passed
+	// into onNameCache() was passed after current or previous user-initiated update.
+	// This is needed to avoid probable duplication of members in list after changing filter
+	// or adding of members of another group if gets for their names were called on
+	// previous update. If this id is from get() called from older update,
+	// we do nothing.
+	if (mUdpateSessionID != update_id) return;
+	
+	LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
+		if (!gdatap) 
+	{
+		llwarns << "LLPanelGroupMembersSubTab::updateMembers() -- No group data!" << llendl;
+		return;
+	}
+	
+	std::string fullname;
+	gCacheName->getFullName(id, fullname);
+	if (matchesSearchFilter(fullname))
+	{
+		addMemberToList(id, gdatap->mMembers[id]);
+		if(!mMembersList->getEnabled())
+		{
+			mMembersList->setEnabled(TRUE);
+		}
+	}
+	
+}
+
 void LLPanelGroupMembersSubTab::updateMembers()
 {
 	mPendingMemberUpdate = FALSE;
@@ -1580,12 +1651,13 @@ void LLPanelGroupMembersSubTab::updateMembers()
 
 	//cleanup list only for first iretation
 	if(mMemberProgress == gdatap->mMembers.begin())
+	{
 		mMembersList->deleteAllItems();
+	}
 
 
 	LLGroupMgrGroupData::member_list_t::iterator end = gdatap->mMembers.end();
-	LLUIString donated = getString("donation_area");
-
+	
 	S32 i = 0;
 	for( ; mMemberProgress != end && i<UPDATE_MEMBERS_PER_FRAME; 
 			++mMemberProgress, ++i)
@@ -1593,38 +1665,19 @@ void LLPanelGroupMembersSubTab::updateMembers()
 		if (!mMemberProgress->second)
 			continue;
 		// Do filtering on name if it is already in the cache.
-		bool add_member = true;
-
 		std::string fullname;
 		if (gCacheName->getFullName(mMemberProgress->first, fullname))
 		{
-			if ( !matchesSearchFilter(fullname) )
+			if (matchesSearchFilter(fullname))
 			{
-				add_member = false;
+				addMemberToList(mMemberProgress->first, mMemberProgress->second);
 			}
 		}
-
-		if (add_member)
+		else
 		{
-			donated.setArg("[AREA]", llformat("%d", mMemberProgress->second->getContribution()));
-
-			LLSD row;
-			row["id"] = (*mMemberProgress).first;
-
-			row["columns"][0]["column"] = "name";
-			// value is filled in by name list control
-
-			row["columns"][1]["column"] = "donated";
-			row["columns"][1]["value"] = donated.getString();
-
-			row["columns"][2]["column"] = "online";
-			row["columns"][2]["value"] = mMemberProgress->second->getOnlineStatus();
-			row["columns"][2]["font"] = "SANSSERIF_SMALL";
-
-			LLScrollListItem* member = mMembersList->addElement(row);
-
-			LLUUID id = member->getUUID();
-			mHasMatch = TRUE;
+			// If name is not cached, onNameCache() should be called when it is cached and add this member to list.
+			gCacheName->get(mMemberProgress->first, FALSE, boost::bind(&LLPanelGroupMembersSubTab::onNameCache,
+																	   this, mUdpateSessionID, _1));
 		}
 	}
 
diff --git a/indra/newview/llpanelgrouproles.h b/indra/newview/llpanelgrouproles.h
index 6a773f1ebb..270259c16f 100644
--- a/indra/newview/llpanelgrouproles.h
+++ b/indra/newview/llpanelgrouproles.h
@@ -187,6 +187,9 @@ public:
 
 	virtual void setGroupID(const LLUUID& id);
 
+	void addMemberToList(LLUUID id, LLGroupMemberData* data);
+	void onNameCache(const LLUUID& update_id, const LLUUID& id);
+
 protected:
 	typedef std::map<LLUUID, LLRoleMemberChangeType> role_change_data_map_t;
 	typedef std::map<LLUUID, role_change_data_map_t*> member_role_changes_map_t;
@@ -207,6 +210,9 @@ protected:
 	BOOL mPendingMemberUpdate;
 	BOOL mHasMatch;
 
+	// This id is generated after each user initiated member list update(opening Roles or changing filter)
+	LLUUID mUdpateSessionID;
+
 	member_role_changes_map_t mMemberRoleChangeData;
 	U32 mNumOwnerAdditions;
 
-- 
cgit v1.2.3


From d4018e22446904f25ec1363717df86ba7e48bbdf Mon Sep 17 00:00:00 2001
From: Loren Shih <seraph@lindenlab.com>
Date: Thu, 21 Oct 2010 14:37:51 -0400
Subject: Manual fix for merge compile errors.

---
 indra/newview/llcallfloater.cpp | 1 +
 1 file changed, 1 insertion(+)

(limited to 'indra/newview')

diff --git a/indra/newview/llcallfloater.cpp b/indra/newview/llcallfloater.cpp
index 6f8f0381f1..b2e9564f7d 100644
--- a/indra/newview/llcallfloater.cpp
+++ b/indra/newview/llcallfloater.cpp
@@ -45,6 +45,7 @@
 #include "llspeakers.h"
 #include "lltextutil.h"
 #include "lltransientfloatermgr.h"
+#include "llviewercontrol.h"
 #include "llviewerdisplayname.h"
 #include "llviewerwindow.h"
 #include "llvoicechannel.h"
-- 
cgit v1.2.3


From e7b2c475d898a90c9e1c458cfbffbe15aacc7ad0 Mon Sep 17 00:00:00 2001
From: Loren Shih <seraph@lindenlab.com>
Date: Thu, 21 Oct 2010 14:50:31 -0400
Subject: SH-325 FIXED Add terminal / to SerachURL in viewer settings.xml

Trivial fix to add "/" to the search string.
---
 indra/newview/app_settings/settings.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 33f5482e50..086d73bc00 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -3863,7 +3863,7 @@
       <key>Type</key>
       <string>String</string>
       <key>Value</key>
-      <string>http://search.secondlife.com/viewer/[CATEGORY]?q=[QUERY]&amp;p=[AUTH_TOKEN]&amp;r=[MATURITY]&amp;lang=[LANGUAGE]&amp;g=[GODLIKE]&amp;sid=[SESSION_ID]&amp;rid=[REGION_ID]&amp;pid=[PARCEL_ID]&amp;channel=[CHANNEL]&amp;version=[VERSION]&amp;major=[VERSION_MAJOR]&amp;minor=[VERSION_MINOR]&amp;patch=[VERSION_PATCH]&amp;build=[VERSION_BUILD]</string>
+      <string>http://search.secondlife.com/viewer/[CATEGORY]/?q=[QUERY]&amp;p=[AUTH_TOKEN]&amp;r=[MATURITY]&amp;lang=[LANGUAGE]&amp;g=[GODLIKE]&amp;sid=[SESSION_ID]&amp;rid=[REGION_ID]&amp;pid=[PARCEL_ID]&amp;channel=[CHANNEL]&amp;version=[VERSION]&amp;major=[VERSION_MAJOR]&amp;minor=[VERSION_MINOR]&amp;patch=[VERSION_PATCH]&amp;build=[VERSION_BUILD]</string>
     </map>
     <key>HighResSnapshot</key>
     <map>
-- 
cgit v1.2.3


From e316654bffb552f92320c1e32aed25e0997e12c4 Mon Sep 17 00:00:00 2001
From: Dave Parks <davep@lindenlab.com>
Date: Fri, 22 Oct 2010 16:04:00 -0500
Subject: Disable FBO by default for all settings.

---
 indra/newview/featuretable.txt    | 6 +++---
 indra/newview/featuretable_xp.txt | 6 +++---
 2 files changed, 6 insertions(+), 6 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/featuretable.txt b/indra/newview/featuretable.txt
index b09dd699ba..d69842d5f1 100644
--- a/indra/newview/featuretable.txt
+++ b/indra/newview/featuretable.txt
@@ -1,4 +1,4 @@
-version 23
+version 25
 
 // NOTE: This is mostly identical to featuretable_mac.txt with a few differences
 // Should be combined into one table
@@ -144,7 +144,7 @@ WLSkyDetail					1	48
 RenderDeferred				1	0
 RenderDeferredSSAO			1	0
 RenderShadowDetail			1	0
-RenderUseFBO				1	1
+RenderUseFBO				1	0
 
 //
 // Ultra graphics (REALLY PURTY!)
@@ -171,7 +171,7 @@ WLSkyDetail					1	128
 RenderDeferred				1	0
 RenderDeferredSSAO			1	0
 RenderShadowDetail			1	0
-RenderUseFBO				1	1
+RenderUseFBO				1	0
 
 //
 // Class Unknown Hardware (unknown)
diff --git a/indra/newview/featuretable_xp.txt b/indra/newview/featuretable_xp.txt
index 1e83bc73a5..dae7705971 100644
--- a/indra/newview/featuretable_xp.txt
+++ b/indra/newview/featuretable_xp.txt
@@ -1,4 +1,4 @@
-version 23
+version 25
 
 // NOTE: This is mostly identical to featuretable_mac.txt with a few differences
 // Should be combined into one table
@@ -144,7 +144,7 @@ WLSkyDetail					1	48
 RenderDeferred				1	0
 RenderDeferredSSAO			1	0
 RenderShadowDetail			1	0
-RenderUseFBO				1	1
+RenderUseFBO				1	0
 
 //
 // Ultra graphics (REALLY PURTY!)
@@ -171,7 +171,7 @@ WLSkyDetail					1	128
 RenderDeferred				1	0
 RenderDeferredSSAO			1	0
 RenderShadowDetail			1	0
-RenderUseFBO				1	1
+RenderUseFBO				1	0
 
 //
 // Class Unknown Hardware (unknown)
-- 
cgit v1.2.3


From 40e9566d98452d9a48f6bdb01c407fb2b231a816 Mon Sep 17 00:00:00 2001
From: Dave Parks <davep@lindenlab.com>
Date: Fri, 22 Oct 2010 16:49:32 -0500
Subject: Non-FBO driven fix for anti-aliasing (make applying of FSAA require
 restart when FBO is disabled).

---
 indra/newview/llfloaterhardwaresettings.cpp                |  7 +++++--
 indra/newview/llviewerwindow.cpp                           |  2 +-
 indra/newview/pipeline.cpp                                 |  2 +-
 .../skins/default/xui/en/floater_hardware_settings.xml     | 14 +++++++++++++-
 4 files changed, 20 insertions(+), 5 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloaterhardwaresettings.cpp b/indra/newview/llfloaterhardwaresettings.cpp
index 3cd3c74ee4..e562b00a04 100644
--- a/indra/newview/llfloaterhardwaresettings.cpp
+++ b/indra/newview/llfloaterhardwaresettings.cpp
@@ -104,6 +104,8 @@ void LLFloaterHardwareSettings::refreshEnabledState()
 	getChildView("(brightness, lower is brighter)")->setEnabled(!gPipeline.canUseWindLightShaders());
 	getChildView("fog")->setEnabled(!gPipeline.canUseWindLightShaders());
 	getChildView("fsaa")->setEnabled(gPipeline.canUseAntiAliasing());
+	getChildView("antialiasing restart")->setVisible(!gSavedSettings.getBOOL("RenderUseFBO"));
+
 	/* Enable to reset fsaa value to disabled when feature is not available.
 	if (!gPipeline.canUseAntiAliasing())
 	{
@@ -130,7 +132,8 @@ BOOL LLFloaterHardwareSettings::postBuild()
 void LLFloaterHardwareSettings::apply()
 {
 	// Anisotropic rendering
-	BOOL old_anisotropic = LLImageGL::sGlobalUseAnisotropic;
+	//Do nothing here -- this code is unreliable, and UI now tells users to restart for changes to take affect
+	/*BOOL old_anisotropic = LLImageGL::sGlobalUseAnisotropic;
 	LLImageGL::sGlobalUseAnisotropic = getChild<LLUICtrl>("ani")->getValue();
 
 	U32 fsaa = (U32) getChild<LLUICtrl>("fsaa")->getValue().asInteger();
@@ -151,7 +154,7 @@ void LLFloaterHardwareSettings::apply()
 	else if (old_anisotropic != LLImageGL::sGlobalUseAnisotropic)
 	{
 		gViewerWindow->restartDisplay(logged_in);
-	}
+	}*/
 
 	refresh();
 }
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 2e04463964..17db21836a 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -1360,7 +1360,7 @@ LLViewerWindow::LLViewerWindow(
 		gSavedSettings.getBOOL("DisableVerticalSync"),
 		!gNoRender,
 		ignore_pixel_depth,
-		0); //gSavedSettings.getU32("RenderFSAASamples"));
+		gSavedSettings.getBOOL("RenderUseFBO") ? 0 : gSavedSettings.getU32("RenderFSAASamples")); //don't use window level anti-aliasing if FBOs are enabled
 
 	if (!LLAppViewer::instance()->restoreErrorTrap())
 	{
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index 0c5735cdfc..0782f072dd 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -874,7 +874,7 @@ BOOL LLPipeline::canUseWindLightShadersOnObjects() const
 
 BOOL LLPipeline::canUseAntiAliasing() const
 {
-	return (gSavedSettings.getBOOL("RenderUseFBO"));
+	return TRUE; //(gSavedSettings.getBOOL("RenderUseFBO"));
 }
 
 void LLPipeline::unloadShaders()
diff --git a/indra/newview/skins/default/xui/en/floater_hardware_settings.xml b/indra/newview/skins/default/xui/en/floater_hardware_settings.xml
index 27f8b4bb39..b2c620f435 100644
--- a/indra/newview/skins/default/xui/en/floater_hardware_settings.xml
+++ b/indra/newview/skins/default/xui/en/floater_hardware_settings.xml
@@ -22,7 +22,7 @@
     <check_box
      control_name="RenderAnisotropic"
      height="16"
-     label="Anisotropic Filtering (slower when enabled)"
+     label="Anisotropic Filtering (slower when enabled, requires viewer restart)"
      layout="topleft"
      left_pad="10"
      name="ani"
@@ -71,6 +71,18 @@
          name="16x"
          value="16" />
     </combo_box>
+   <text
+     type="string"
+     length="1"
+     follows="left|top"
+     height="12"
+     layout="topleft"
+     left_pad="10"
+     name="antialiasing restart"
+     top_delta="0"
+     width="188">
+      (requires viewer restart)
+    </text>
     <spinner
      control_name="RenderGamma"
      decimal_digits="2"
-- 
cgit v1.2.3


From ad181dcaac1fe6fd54082240a9892f40462f8724 Mon Sep 17 00:00:00 2001
From: Dave Parks <davep@lindenlab.com>
Date: Thu, 21 Oct 2010 14:24:03 -0500
Subject: Fix for crash when toggling anisotropic filtering.

---
 indra/newview/llfloaterhardwaresettings.cpp | 25 -------------------------
 indra/newview/llviewercontrol.cpp           |  8 ++++++++
 2 files changed, 8 insertions(+), 25 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloaterhardwaresettings.cpp b/indra/newview/llfloaterhardwaresettings.cpp
index e562b00a04..1e91710552 100644
--- a/indra/newview/llfloaterhardwaresettings.cpp
+++ b/indra/newview/llfloaterhardwaresettings.cpp
@@ -131,31 +131,6 @@ BOOL LLFloaterHardwareSettings::postBuild()
 
 void LLFloaterHardwareSettings::apply()
 {
-	// Anisotropic rendering
-	//Do nothing here -- this code is unreliable, and UI now tells users to restart for changes to take affect
-	/*BOOL old_anisotropic = LLImageGL::sGlobalUseAnisotropic;
-	LLImageGL::sGlobalUseAnisotropic = getChild<LLUICtrl>("ani")->getValue();
-
-	U32 fsaa = (U32) getChild<LLUICtrl>("fsaa")->getValue().asInteger();
-	U32 old_fsaa = gSavedSettings.getU32("RenderFSAASamples");
-
-	BOOL logged_in = (LLStartUp::getStartupState() >= STATE_STARTED);
-
-	if (old_fsaa != fsaa)
-	{
-		gSavedSettings.setU32("RenderFSAASamples", fsaa);
-		LLWindow* window = gViewerWindow->getWindow();
-		LLCoordScreen size;
-		window->getSize(&size);
-		gViewerWindow->changeDisplaySettings(size,
-											gSavedSettings.getBOOL("DisableVerticalSync"),
-											logged_in);
-	}
-	else if (old_anisotropic != LLImageGL::sGlobalUseAnisotropic)
-	{
-		gViewerWindow->restartDisplay(logged_in);
-	}*/
-
 	refresh();
 }
 
diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp
index 522b5a7dfa..fbec2a7b9e 100644
--- a/indra/newview/llviewercontrol.cpp
+++ b/indra/newview/llviewercontrol.cpp
@@ -131,6 +131,13 @@ static bool handleReleaseGLBufferChanged(const LLSD& newvalue)
 	return true;
 }
 
+static bool handleAnisotropicChanged(const LLSD& newvalue)
+{
+	LLImageGL::sGlobalUseAnisotropic = newvalue.asBoolean();
+	LLImageGL::dirtyTexOptions();
+	return true;
+}
+
 static bool handleVolumeLODChanged(const LLSD& newvalue)
 {
 	LLVOVolume::sLODFactor = (F32) newvalue.asReal();
@@ -498,6 +505,7 @@ void settings_setup_listeners()
 	gSavedSettings.getControl("RenderSpecularResY")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2));
 	gSavedSettings.getControl("RenderSpecularExponent")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2));
 	gSavedSettings.getControl("RenderFSAASamples")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2));
+	gSavedSettings.getControl("RenderAnisotropic")->getSignal()->connect(boost::bind(&handleAnisotropicChanged, _2));
 	gSavedSettings.getControl("RenderShadowResolutionScale")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2));
 	gSavedSettings.getControl("RenderGlow")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2));
 	gSavedSettings.getControl("RenderGlow")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));
-- 
cgit v1.2.3


From 54da19fdcfa3edadbc58a1f55a3503082e66f16e Mon Sep 17 00:00:00 2001
From: Seth ProductEngine <slitovchuk@productengine.com>
Date: Fri, 22 Oct 2010 02:08:26 +0300
Subject: STORM-426 FIXED Menu button no longer looked pressed while its menu
 is displayed by another control. - LLMenuGL in menu button replaced by
 LLToggleableMenu that handles visibility change upon clicks inside specific
 button rect. - Added visibility change signal to LLToggleableMenu to update
 menu button pressed state. - Added using menu handle in LLMenuButton.

---
 indra/newview/llinspectavatar.cpp                              |  5 +++--
 indra/newview/llinspectobject.cpp                              |  3 ++-
 indra/newview/lloutfitslist.cpp                                |  9 +++++----
 indra/newview/llpanellandmarks.cpp                             |  7 ++++---
 indra/newview/llpanellandmarks.h                               |  5 +++--
 indra/newview/llpanelmaininventory.cpp                         |  3 ++-
 indra/newview/llpanelmaininventory.h                           |  3 ++-
 indra/newview/llpaneloutfitedit.cpp                            |  9 +++++----
 indra/newview/llpaneloutfitedit.h                              |  4 ++--
 indra/newview/llpanelpeople.cpp                                |  9 +++++----
 indra/newview/llpanelteleporthistory.cpp                       |  3 ++-
 indra/newview/llpanelwearing.cpp                               | 10 ++++++----
 indra/newview/skins/default/xui/en/menu_add_wearable_gear.xml  |  4 ++--
 indra/newview/skins/default/xui/en/menu_cof_gear.xml           |  4 ++--
 indra/newview/skins/default/xui/en/menu_gesture_gear.xml       |  4 ++--
 .../newview/skins/default/xui/en/menu_inspect_avatar_gear.xml  |  4 ++--
 .../newview/skins/default/xui/en/menu_inspect_object_gear.xml  |  4 ++--
 indra/newview/skins/default/xui/en/menu_inspect_self_gear.xml  |  4 ++--
 .../skins/default/xui/en/menu_inventory_gear_default.xml       |  4 ++--
 indra/newview/skins/default/xui/en/menu_outfit_gear.xml        |  4 ++--
 .../skins/default/xui/en/menu_people_friends_view_sort.xml     |  5 +++--
 .../skins/default/xui/en/menu_people_groups_view_sort.xml      |  5 +++--
 .../skins/default/xui/en/menu_people_nearby_view_sort.xml      |  5 +++--
 .../skins/default/xui/en/menu_people_recent_view_sort.xml      |  5 +++--
 indra/newview/skins/default/xui/en/menu_places_gear_folder.xml |  4 ++--
 .../newview/skins/default/xui/en/menu_places_gear_landmark.xml |  4 ++--
 .../skins/default/xui/en/menu_teleport_history_gear.xml        |  4 ++--
 indra/newview/skins/default/xui/en/menu_wearing_gear.xml       |  4 ++--
 28 files changed, 77 insertions(+), 61 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llinspectavatar.cpp b/indra/newview/llinspectavatar.cpp
index 29dcb2c4d3..91ede6d221 100644
--- a/indra/newview/llinspectavatar.cpp
+++ b/indra/newview/llinspectavatar.cpp
@@ -53,6 +53,7 @@
 #include "llfloaterreg.h"
 #include "llmenubutton.h"
 #include "lltextbox.h"
+#include "lltoggleablemenu.h"
 #include "lltooltip.h"	// positionViewNearMouse()
 #include "lltrans.h"
 #include "lluictrl.h"
@@ -402,8 +403,8 @@ void LLInspectAvatar::processAvatarData(LLAvatarData* data)
 // if neither the gear menu or self gear menu are open
 void LLInspectAvatar::onMouseLeave(S32 x, S32 y, MASK mask)
 {
-	LLMenuGL* gear_menu = getChild<LLMenuButton>("gear_btn")->getMenu();
-	LLMenuGL* gear_menu_self = getChild<LLMenuButton>("gear_self_btn")->getMenu();
+	LLToggleableMenu* gear_menu = getChild<LLMenuButton>("gear_btn")->getMenu();
+	LLToggleableMenu* gear_menu_self = getChild<LLMenuButton>("gear_self_btn")->getMenu();
 	if ( gear_menu && gear_menu->getVisible() &&
 		 gear_menu_self && gear_menu_self->getVisible() )
 	{
diff --git a/indra/newview/llinspectobject.cpp b/indra/newview/llinspectobject.cpp
index 532ffca4be..ee076f68ea 100644
--- a/indra/newview/llinspectobject.cpp
+++ b/indra/newview/llinspectobject.cpp
@@ -47,6 +47,7 @@
 #include "llsafehandle.h"
 #include "llsidetray.h"
 #include "lltextbox.h"			// for description truncation
+#include "lltoggleablemenu.h"
 #include "lltrans.h"
 #include "llui.h"				// positionViewNearMouse()
 #include "lluictrl.h"
@@ -568,7 +569,7 @@ void LLInspectObject::updateSecureBrowsing()
 // if the gear menu is not open
 void LLInspectObject::onMouseLeave(S32 x, S32 y, MASK mask)
 {
-	LLMenuGL* gear_menu = getChild<LLMenuButton>("gear_btn")->getMenu();
+	LLToggleableMenu* gear_menu = getChild<LLMenuButton>("gear_btn")->getMenu();
 	if ( gear_menu && gear_menu->getVisible() )
 	{
 		return;
diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp
index 33c968bf00..70295259b3 100644
--- a/indra/newview/lloutfitslist.cpp
+++ b/indra/newview/lloutfitslist.cpp
@@ -42,6 +42,7 @@
 #include "llnotificationsutil.h"
 #include "lloutfitobserver.h"
 #include "llsidetray.h"
+#include "lltoggleablemenu.h"
 #include "lltransutil.h"
 #include "llviewermenu.h"
 #include "llvoavatar.h"
@@ -122,7 +123,7 @@ public:
 		enable_registrar.add("Gear.OnEnable", boost::bind(&LLOutfitListGearMenu::onEnable, this, _2));
 		enable_registrar.add("Gear.OnVisible", boost::bind(&LLOutfitListGearMenu::onVisible, this, _2));
 
-		mMenu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>(
+		mMenu = LLUICtrlFactory::getInstance()->createFromFile<LLToggleableMenu>(
 			"menu_outfit_gear.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
 		llassert(mMenu);
 	}
@@ -137,7 +138,7 @@ public:
 		mMenu->arrangeAndClear(); // update menu height
 	}
 
-	LLMenuGL* getMenu() { return mMenu; }
+	LLToggleableMenu* getMenu() { return mMenu; }
 
 private:
 	const LLUUID& getSelectedOutfitID()
@@ -251,8 +252,8 @@ private:
 		return true;
 	}
 
-	LLOutfitsList*	mOutfitList;
-	LLMenuGL*		mMenu;
+	LLOutfitsList*			mOutfitList;
+	LLToggleableMenu*		mMenu;
 };
 
 //////////////////////////////////////////////////////////////////////////
diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp
index e5695f420a..d25b8e0e02 100644
--- a/indra/newview/llpanellandmarks.cpp
+++ b/indra/newview/llpanellandmarks.cpp
@@ -51,6 +51,7 @@
 #include "llplacesinventorybridge.h"
 #include "llplacesinventorypanel.h"
 #include "llsidetray.h"
+#include "lltoggleablemenu.h"
 #include "llviewermenu.h"
 #include "llviewerregion.h"
 
@@ -706,8 +707,8 @@ void LLLandmarksPanel::initListCommandsHandlers()
 	mCommitCallbackRegistrar.add("Places.LandmarksGear.Folding.Action", boost::bind(&LLLandmarksPanel::onFoldingAction, this, _2));
 	mEnableCallbackRegistrar.add("Places.LandmarksGear.Check", boost::bind(&LLLandmarksPanel::isActionChecked, this, _2));
 	mEnableCallbackRegistrar.add("Places.LandmarksGear.Enable", boost::bind(&LLLandmarksPanel::isActionEnabled, this, _2));
-	mGearLandmarkMenu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_places_gear_landmark.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
-	mGearFolderMenu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_places_gear_folder.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
+	mGearLandmarkMenu = LLUICtrlFactory::getInstance()->createFromFile<LLToggleableMenu>("menu_places_gear_landmark.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
+	mGearFolderMenu = LLUICtrlFactory::getInstance()->createFromFile<LLToggleableMenu>("menu_places_gear_folder.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
 	mMenuAdd = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_place_add_button.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
 
 	mListCommands->childSetAction(ADD_BUTTON_NAME, boost::bind(&LLLandmarksPanel::showActionMenu, this, mMenuAdd, ADD_BUTTON_NAME));
@@ -726,7 +727,7 @@ void LLLandmarksPanel::updateListCommands()
 
 void LLLandmarksPanel::onActionsButtonClick()
 {
-	LLMenuGL* menu = mGearFolderMenu;
+	LLToggleableMenu* menu = mGearFolderMenu;
 
 	LLFolderViewItem* cur_item = NULL;
 	if(mCurrentSelectedList)
diff --git a/indra/newview/llpanellandmarks.h b/indra/newview/llpanellandmarks.h
index 28c19d3e5f..8dcbca0440 100644
--- a/indra/newview/llpanellandmarks.h
+++ b/indra/newview/llpanellandmarks.h
@@ -41,6 +41,7 @@ class LLAccordionCtrlTab;
 class LLFolderViewItem;
 class LLMenuButton;
 class LLMenuGL;
+class LLToggleableMenu;
 class LLInventoryPanel;
 class LLPlacesInventoryPanel;
 
@@ -157,8 +158,8 @@ private:
 	LLPlacesInventoryPanel*		mMyInventoryPanel;
 	LLPlacesInventoryPanel*		mLibraryInventoryPanel;
 	LLMenuButton*				mGearButton;
-	LLMenuGL*					mGearLandmarkMenu;
-	LLMenuGL*					mGearFolderMenu;
+	LLToggleableMenu*			mGearLandmarkMenu;
+	LLToggleableMenu*			mGearFolderMenu;
 	LLMenuGL*					mMenuAdd;
 	LLPlacesInventoryPanel*		mCurrentSelectedList;
 	LLInventoryObserver*		mInventoryObserver;
diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp
index cc69dbd9d4..904e3dabcc 100644
--- a/indra/newview/llpanelmaininventory.cpp
+++ b/indra/newview/llpanelmaininventory.cpp
@@ -46,6 +46,7 @@
 #include "llscrollcontainer.h"
 #include "llsdserialize.h"
 #include "llspinctrl.h"
+#include "lltoggleablemenu.h"
 #include "lltooldraganddrop.h"
 #include "llviewermenu.h"
 #include "llviewertexturelist.h"
@@ -915,7 +916,7 @@ void LLPanelMainInventory::initListCommandsHandlers()
 
 	mCommitCallbackRegistrar.add("Inventory.GearDefault.Custom.Action", boost::bind(&LLPanelMainInventory::onCustomAction, this, _2));
 	mEnableCallbackRegistrar.add("Inventory.GearDefault.Enable", boost::bind(&LLPanelMainInventory::isActionEnabled, this, _2));
-	mMenuGearDefault = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_inventory_gear_default.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
+	mMenuGearDefault = LLUICtrlFactory::getInstance()->createFromFile<LLToggleableMenu>("menu_inventory_gear_default.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
 	mGearMenuButton->setMenu(mMenuGearDefault);
 	mMenuAdd = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_inventory_add.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
 
diff --git a/indra/newview/llpanelmaininventory.h b/indra/newview/llpanelmaininventory.h
index f95a99157d..d136e2d32e 100644
--- a/indra/newview/llpanelmaininventory.h
+++ b/indra/newview/llpanelmaininventory.h
@@ -42,6 +42,7 @@ class LLTabContainer;
 class LLFloaterInventoryFinder;
 class LLMenuButton;
 class LLMenuGL;
+class LLToggleableMenu;
 class LLFloater;
 
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -143,7 +144,7 @@ protected:
 	void setUploadCostIfNeeded();
 private:
 	LLDragAndDropButton*		mTrashButton;
-	LLMenuGL*					mMenuGearDefault;
+	LLToggleableMenu*			mMenuGearDefault;
 	LLMenuGL*					mMenuAdd;
 	LLMenuButton*				mGearMenuButton;
 
diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp
index 5638374178..6394239889 100644
--- a/indra/newview/llpaneloutfitedit.cpp
+++ b/indra/newview/llpaneloutfitedit.cpp
@@ -62,6 +62,7 @@
 #include "llsaveoutfitcombobtn.h"
 #include "llscrolllistctrl.h"
 #include "lltextbox.h"
+#include "lltoggleablemenu.h"
 #include "lltrans.h"
 #include "lluictrlfactory.h"
 #include "llsdutil.h"
@@ -152,13 +153,13 @@ std::string LLShopURLDispatcher::resolveURL(LLAssetType::EType asset_type, ESex
 class LLPanelOutfitEditGearMenu
 {
 public:
-	static LLMenuGL* create()
+	static LLToggleableMenu* create()
 	{
 		LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar;
 
 		registrar.add("Wearable.Create", boost::bind(onCreate, _2));
 
-		LLMenuGL* menu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>(
+		LLToggleableMenu* menu = LLUICtrlFactory::getInstance()->createFromFile<LLToggleableMenu>(
 			"menu_cof_gear.xml", LLMenuGL::sMenuContainer, LLViewerMenuHolderGL::child_registry_t::instance());
 		llassert(menu);
 		if (menu)
@@ -219,7 +220,7 @@ private:
 class LLAddWearablesGearMenu : public LLInitClass<LLAddWearablesGearMenu>
 {
 public:
-	static LLMenuGL* create(LLWearableItemsList* flat_list, LLInventoryPanel* inventory_panel)
+	static LLToggleableMenu* create(LLWearableItemsList* flat_list, LLInventoryPanel* inventory_panel)
 	{
 		LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar;
 		LLUICtrl::EnableCallbackRegistry::ScopedRegistrar enable_registrar;
@@ -234,7 +235,7 @@ public:
 		enable_registrar.add("AddWearable.Gear.Check", boost::bind(onCheck, flat_list_handle, inventory_panel_handle, _2));
 		enable_registrar.add("AddWearable.Gear.Visible", boost::bind(onVisible, inventory_panel_handle, _2));
 
-		LLMenuGL* menu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>(
+		LLToggleableMenu* menu = LLUICtrlFactory::getInstance()->createFromFile<LLToggleableMenu>(
 			"menu_add_wearable_gear.xml",
 			LLMenuGL::sMenuContainer, LLViewerMenuHolderGL::child_registry_t::instance());
 
diff --git a/indra/newview/llpaneloutfitedit.h b/indra/newview/llpaneloutfitedit.h
index 963db84503..fd366e9cbc 100644
--- a/indra/newview/llpaneloutfitedit.h
+++ b/indra/newview/llpaneloutfitedit.h
@@ -233,8 +233,8 @@ private:
 	std::vector<LLFilterItem*> mListViewItemTypes;
 
 	LLCOFWearables*		mCOFWearables;
-	LLMenuGL*			mGearMenu;
-	LLMenuGL*			mAddWearablesGearMenu;
+	LLToggleableMenu*	mGearMenu;
+	LLToggleableMenu*	mAddWearablesGearMenu;
 	bool				mInitialized;
 	std::auto_ptr<LLSaveOutfitComboBtn> mSaveComboBtn;
 	LLMenuButton*		mWearablesGearMenuBtn;
diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp
index b79a2d3224..71c812efe2 100644
--- a/indra/newview/llpanelpeople.cpp
+++ b/indra/newview/llpanelpeople.cpp
@@ -35,6 +35,7 @@
 #include "lleventtimer.h"
 #include "llfiltereditor.h"
 #include "lltabcontainer.h"
+#include "lltoggleablemenu.h"
 #include "lluictrlfactory.h"
 
 #include "llpanelpeople.h"
@@ -632,28 +633,28 @@ BOOL LLPanelPeople::postBuild()
 	LLMenuGL* plus_menu  = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_group_plus.xml",  gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
 	mGroupPlusMenuHandle  = plus_menu->getHandle();
 
-	LLMenuGL* nearby_view_sort  = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_people_nearby_view_sort.xml",  gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
+	LLToggleableMenu* nearby_view_sort  = LLUICtrlFactory::getInstance()->createFromFile<LLToggleableMenu>("menu_people_nearby_view_sort.xml",  gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
 	if(nearby_view_sort)
 	{
 		mNearbyViewSortMenuHandle  = nearby_view_sort->getHandle();
 		mNearbyGearButton->setMenu(nearby_view_sort);
 	}
 
-	LLMenuGL* friend_view_sort  = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_people_friends_view_sort.xml",  gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
+	LLToggleableMenu* friend_view_sort  = LLUICtrlFactory::getInstance()->createFromFile<LLToggleableMenu>("menu_people_friends_view_sort.xml",  gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
 	if(friend_view_sort)
 	{
 		mFriendsViewSortMenuHandle  = friend_view_sort->getHandle();
 		mFriendsGearButton->setMenu(friend_view_sort);
 	}
 
-	LLMenuGL* group_view_sort  = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_people_groups_view_sort.xml",  gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
+	LLToggleableMenu* group_view_sort  = LLUICtrlFactory::getInstance()->createFromFile<LLToggleableMenu>("menu_people_groups_view_sort.xml",  gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
 	if(group_view_sort)
 	{
 		mGroupsViewSortMenuHandle  = group_view_sort->getHandle();
 		mGroupsGearButton->setMenu(group_view_sort);
 	}
 
-	LLMenuGL* recent_view_sort  = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_people_recent_view_sort.xml",  gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
+	LLToggleableMenu* recent_view_sort  = LLUICtrlFactory::getInstance()->createFromFile<LLToggleableMenu>("menu_people_recent_view_sort.xml",  gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
 	if(recent_view_sort)
 	{
 		mRecentViewSortMenuHandle  = recent_view_sort->getHandle();
diff --git a/indra/newview/llpanelteleporthistory.cpp b/indra/newview/llpanelteleporthistory.cpp
index 766f93e0a5..fff8ccb912 100644
--- a/indra/newview/llpanelteleporthistory.cpp
+++ b/indra/newview/llpanelteleporthistory.cpp
@@ -41,6 +41,7 @@
 #include "llflatlistview.h"
 #include "llnotificationsutil.h"
 #include "lltextbox.h"
+#include "lltoggleablemenu.h"
 #include "llviewermenu.h"
 #include "lllandmarkactions.h"
 #include "llclipboard.h"
@@ -450,7 +451,7 @@ BOOL LLTeleportHistoryPanel::postBuild()
 
 	mMenuGearButton = getChild<LLMenuButton>("gear_btn");
 
-	LLMenuGL* gear_menu  = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_teleport_history_gear.xml",  gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());;
+	LLToggleableMenu* gear_menu  = LLUICtrlFactory::getInstance()->createFromFile<LLToggleableMenu>("menu_teleport_history_gear.xml",  gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());;
 	if(gear_menu)
 	{
 		mGearMenuHandle  = gear_menu->getHandle();
diff --git a/indra/newview/llpanelwearing.cpp b/indra/newview/llpanelwearing.cpp
index 3b3d0cdce5..911a9e5dda 100644
--- a/indra/newview/llpanelwearing.cpp
+++ b/indra/newview/llpanelwearing.cpp
@@ -28,6 +28,8 @@
 
 #include "llpanelwearing.h"
 
+#include "lltoggleablemenu.h"
+
 #include "llappearancemgr.h"
 #include "llinventoryfunctions.h"
 #include "llinventorymodel.h"
@@ -59,12 +61,12 @@ public:
 
 		enable_registrar.add("Gear.OnEnable", boost::bind(&LLPanelWearing::isActionEnabled, mPanelWearing, _2));
 
-		mMenu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>(
+		mMenu = LLUICtrlFactory::getInstance()->createFromFile<LLToggleableMenu>(
 			"menu_wearing_gear.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
 		llassert(mMenu);
 	}
 
-	LLMenuGL* getMenu() { return mMenu; }
+	LLToggleableMenu* getMenu() { return mMenu; }
 
 private:
 
@@ -79,8 +81,8 @@ private:
 		}
 	}
 
-	LLMenuGL*		mMenu;
-	LLPanelWearing* mPanelWearing;
+	LLToggleableMenu*		mMenu;
+	LLPanelWearing* 		mPanelWearing;
 };
 
 //////////////////////////////////////////////////////////////////////////
diff --git a/indra/newview/skins/default/xui/en/menu_add_wearable_gear.xml b/indra/newview/skins/default/xui/en/menu_add_wearable_gear.xml
index 1925d3396f..5033ea9546 100644
--- a/indra/newview/skins/default/xui/en/menu_add_wearable_gear.xml
+++ b/indra/newview/skins/default/xui/en/menu_add_wearable_gear.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<menu
+<toggleable_menu
  layout="topleft"
  name="Add Wearable Gear Menu">
     <menu_item_check
@@ -38,4 +38,4 @@
          function="AddWearable.Gear.Visible"
          parameter="by_type" />
     </menu_item_check>
-</menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/en/menu_cof_gear.xml b/indra/newview/skins/default/xui/en/menu_cof_gear.xml
index c2a11a64ec..a6e9a40e31 100644
--- a/indra/newview/skins/default/xui/en/menu_cof_gear.xml
+++ b/indra/newview/skins/default/xui/en/menu_cof_gear.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<menu
+<toggleable_menu
  layout="topleft"
  name="Gear COF">
     <menu
@@ -10,4 +10,4 @@
      label="New Body Parts"
      layout="topleft"
      name="COF.Geear.New_Body_Parts" />
-</menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/en/menu_gesture_gear.xml b/indra/newview/skins/default/xui/en/menu_gesture_gear.xml
index 649f0edff7..b08d21e8f4 100644
--- a/indra/newview/skins/default/xui/en/menu_gesture_gear.xml
+++ b/indra/newview/skins/default/xui/en/menu_gesture_gear.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<menu
+<toggleable_menu
  layout="topleft"
  mouse_opaque="false"
  name="menu_gesture_gear"
@@ -62,4 +62,4 @@
          function="Gesture.EnableAction"
          parameter="edit_gesture" />
     </menu_item_call>
-</menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml
index 334decdf58..58d58a6ca9 100644
--- a/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml
+++ b/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<menu
+<toggleable_menu
          create_jump_keys="true"
          layout="topleft"
          mouse_opaque="false"
@@ -124,4 +124,4 @@
     <menu_item_call.on_click
      function="InspectAvatar.Share"/>
   </menu_item_call>
-</menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/en/menu_inspect_object_gear.xml b/indra/newview/skins/default/xui/en/menu_inspect_object_gear.xml
index 76f68c6d4b..f818ebe2d7 100644
--- a/indra/newview/skins/default/xui/en/menu_inspect_object_gear.xml
+++ b/indra/newview/skins/default/xui/en/menu_inspect_object_gear.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<menu
+<toggleable_menu
    create_jump_keys="true"
    layout="topleft"
    mouse_opaque="false"
@@ -136,4 +136,4 @@
     <menu_item_call.on_click
      function="InspectObject.MoreInfo"/>
   </menu_item_call>
-</menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/en/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/en/menu_inspect_self_gear.xml
index 30c2cde552..50ad3f834e 100644
--- a/indra/newview/skins/default/xui/en/menu_inspect_self_gear.xml
+++ b/indra/newview/skins/default/xui/en/menu_inspect_self_gear.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<menu
+<toggleable_menu
          create_jump_keys="true"
          layout="topleft"
          mouse_opaque="false"
@@ -63,4 +63,4 @@
     <menu_item_call.on_visible
      function="IsGodCustomerService"/>
   </menu_item_call>
-</menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml
index c394700081..679d5bc82e 100644
--- a/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml
+++ b/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<menu
+<toggleable_menu
  bottom="806"
  layout="topleft"
  left="0"
@@ -125,4 +125,4 @@
          function="Inventory.GearDefault.Custom.Action"
          parameter="empty_trash" />
     </menu_item_call>
-</menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/en/menu_outfit_gear.xml b/indra/newview/skins/default/xui/en/menu_outfit_gear.xml
index 732b8a788d..5fc25b8f0f 100644
--- a/indra/newview/skins/default/xui/en/menu_outfit_gear.xml
+++ b/indra/newview/skins/default/xui/en/menu_outfit_gear.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<menu
+<toggleable_menu
  layout="topleft"
  visible="false"
  name="Gear Outfit">
@@ -212,4 +212,4 @@
          function="Gear.OnVisible"
          parameter="delete" />
     </menu_item_call>
-</menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/en/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/en/menu_people_friends_view_sort.xml
index 22796f7b68..29eeb93ac1 100644
--- a/indra/newview/skins/default/xui/en/menu_people_friends_view_sort.xml
+++ b/indra/newview/skins/default/xui/en/menu_people_friends_view_sort.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<menu name="menu_group_plus"
+<toggleable_menu
+     name="menu_group_plus"
      left="0" bottom="0" visible="false"
      mouse_opaque="false">
   <menu_item_check
@@ -43,4 +44,4 @@
   <menu_item_call name="show_blocked_list" label="Show Blocked Residents &amp; Objects">
     <menu_item_call.on_click function="SideTray.ShowPanel" parameter="panel_block_list_sidetray" />
   </menu_item_call>
-</menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/en/menu_people_groups_view_sort.xml b/indra/newview/skins/default/xui/en/menu_people_groups_view_sort.xml
index 2efb204ffb..c710fe3b9b 100644
--- a/indra/newview/skins/default/xui/en/menu_people_groups_view_sort.xml
+++ b/indra/newview/skins/default/xui/en/menu_people_groups_view_sort.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<menu name="menu_group_plus"
+<toggleable_menu 
+     name="menu_group_plus"
      left="0" bottom="0" visible="false"
      mouse_opaque="false">
   <menu_item_check
@@ -22,4 +23,4 @@
       <menu_item_call.on_enable
        function="People.Group.Minus.Enable"/>
   </menu_item_call>
-</menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/en/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/en/menu_people_nearby_view_sort.xml
index 69b3831738..f9db64b524 100644
--- a/indra/newview/skins/default/xui/en/menu_people_nearby_view_sort.xml
+++ b/indra/newview/skins/default/xui/en/menu_people_nearby_view_sort.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<menu name="menu_group_plus"
+<toggleable_menu
+     name="menu_group_plus"
      left="0" bottom="0" visible="false"
      mouse_opaque="false">
   <menu_item_check
@@ -45,4 +46,4 @@
   <menu_item_call name="show_blocked_list" label="Show Blocked Residents &amp; Objects">
     <menu_item_call.on_click function="SideTray.ShowPanel" userdata="panel_block_list_sidetray" />
   </menu_item_call>
-</menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/en/menu_people_recent_view_sort.xml b/indra/newview/skins/default/xui/en/menu_people_recent_view_sort.xml
index 5c9555db92..0634e3bd3b 100644
--- a/indra/newview/skins/default/xui/en/menu_people_recent_view_sort.xml
+++ b/indra/newview/skins/default/xui/en/menu_people_recent_view_sort.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<menu name="menu_group_plus"
+<toggleable_menu 
+     name="menu_group_plus"
      left="0" bottom="0" visible="false"
      mouse_opaque="false">
   <menu_item_check
@@ -35,4 +36,4 @@
   <menu_item_call name="show_blocked_list" label="Show Blocked Residents &amp; Objects">
     <menu_item_call.on_click function="SideTray.ShowPanel" userdata="panel_block_list_sidetray" />
   </menu_item_call>
-</menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/en/menu_places_gear_folder.xml b/indra/newview/skins/default/xui/en/menu_places_gear_folder.xml
index 77cc3910fd..6f46165883 100644
--- a/indra/newview/skins/default/xui/en/menu_places_gear_folder.xml
+++ b/indra/newview/skins/default/xui/en/menu_places_gear_folder.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<menu
+<toggleable_menu
  bottom="806"
  layout="topleft"
  left="0"
@@ -145,4 +145,4 @@
          function="Places.LandmarksGear.Folding.Action"
          parameter="sort_by_date" />
     </menu_item_check>
-</menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/en/menu_places_gear_landmark.xml b/indra/newview/skins/default/xui/en/menu_places_gear_landmark.xml
index 4b8bc8132f..121e7cc07a 100644
--- a/indra/newview/skins/default/xui/en/menu_places_gear_landmark.xml
+++ b/indra/newview/skins/default/xui/en/menu_places_gear_landmark.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<menu
+<toggleable_menu
  bottom="806"
  layout="topleft"
  left="0"
@@ -174,4 +174,4 @@
          function="Places.LandmarksGear.Enable"
          parameter="create_pick" />
     </menu_item_call>
-</menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/en/menu_teleport_history_gear.xml b/indra/newview/skins/default/xui/en/menu_teleport_history_gear.xml
index 134b331514..bc7d4fe33b 100644
--- a/indra/newview/skins/default/xui/en/menu_teleport_history_gear.xml
+++ b/indra/newview/skins/default/xui/en/menu_teleport_history_gear.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<menu
+<toggleable_menu
  name="Teleport History Gear Context Menu"
  left="0"
  bottom="0"
@@ -33,4 +33,4 @@
         <menu_item_call.on_click
          function="TeleportHistory.ClearTeleportHistory" />
     </menu_item_call>    
-</menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/en/menu_wearing_gear.xml b/indra/newview/skins/default/xui/en/menu_wearing_gear.xml
index 84ab16c709..0ac2c14253 100644
--- a/indra/newview/skins/default/xui/en/menu_wearing_gear.xml
+++ b/indra/newview/skins/default/xui/en/menu_wearing_gear.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<menu
+<toggleable_menu
  layout="topleft"
  visible="false"
  name="Gear Wearing">
@@ -20,4 +20,4 @@
          function="Gear.OnEnable"
          parameter="take_off" />
     </menu_item_call>
-</menu>
+</toggleable_menu>
-- 
cgit v1.2.3


From 6f4a21531ae7e5d095034f7315501421dd94d124 Mon Sep 17 00:00:00 2001
From: Merov Linden <merov@lindenlab.com>
Date: Thu, 21 Oct 2010 17:12:24 -0700
Subject: STORM-173 : never enable return object if no object selected

---
 indra/newview/llviewermenu.cpp | 6 ++++++
 1 file changed, 6 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index ccf3df827d..dc7c6f17a9 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -4160,6 +4160,12 @@ class LLObjectEnableReturn : public view_listener_t
 {
 	bool handleEvent(const LLSD& userdata)
 	{
+		LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode();
+		if (!node)
+		{
+			// Do not enable if nothing selected
+			return false;
+		}
 #ifdef HACKED_GODLIKE_VIEWER
 		bool new_value = true;
 #else
-- 
cgit v1.2.3


From 9e8ff9be024edb279ba1e22548ee3fc48214fda5 Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Fri, 22 Oct 2010 20:14:13 +0300
Subject: STORM-449 FIXED Updated some notification templates for NL locale to
 display avatar names correctly.

---
 indra/newview/skins/default/xui/nl/notifications.xml | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/nl/notifications.xml b/indra/newview/skins/default/xui/nl/notifications.xml
index a282c70364..b4b56a035f 100644
--- a/indra/newview/skins/default/xui/nl/notifications.xml
+++ b/indra/newview/skins/default/xui/nl/notifications.xml
@@ -2409,10 +2409,10 @@ Wilt u de [SECOND_LIFE] website bezoeken om dit in te stellen?
 		Onderwerp: [SUBJECT], Bericht: [MESSAGE]
 	</notification>
 	<notification name="FriendOnline">
-		[FIRST] [LAST] is Online
+		[NAME] is Online
 	</notification>
 	<notification name="FriendOffline">
-		[FIRST] [LAST] is Offline
+		[NAME] is Offline
 	</notification>
 	<notification name="AddSelfFriend">
 		U kunt uzelf niet als vriend toevoegen.
@@ -2574,7 +2574,7 @@ Indien u streaming media wilt zien op percelen die dit ondersteunen, dient u naa
 		De objecten die uw eigendom zijn op het geselecteerde perceel zijn geretourneerd naar uw inventaris.
 	</notification>
 	<notification name="OtherObjectsReturned">
-		De objecten op het geselecteerde perceel dat het eigendom is van [FIRST] [LAST], zijn geretourneerd naar zijn of haar inventaris.
+		De objecten op het geselecteerde perceel dat het eigendom is van [NAME], zijn geretourneerd naar zijn of haar inventaris.
 	</notification>
 	<notification name="OtherObjectsReturned2">
 		De objecten op het geselecteerde perceel dat het eigendom is van inwoner &apos;[NAME]&apos;, zijn geretourneerd naar hun eigenaar.
@@ -2701,7 +2701,7 @@ Probeer het alstublieft opnieuw over enkele ogenblikken.
 		Geen geldig perceel kon gevonden worden.
 	</notification>
 	<notification name="ObjectGiveItem">
-		Een object genaamd [OBJECTFROMNAME], eigendom van [FIRST] [LAST], heeft u een [OBJECTTYPE] genaamd [OBJECTNAME] gegeven.
+		Een object genaamd &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt;, eigendom van [NAME_SLURL], heeft u een [OBJECTTYPE] genaamd [ITEM_SLURL] gegeven.
 		<form name="form">
 			<button name="Keep" text="Behouden"/>
 			<button name="Discard" text="Afwijzen"/>
@@ -2840,7 +2840,7 @@ Dit verzoek inwilligen?
 		</form>
 	</notification>
 	<notification name="ScriptDialog">
-		[FIRST] [LAST]&apos;s &apos;[TITLE]&apos;
+		[NAME]&apos;s &apos;&lt;nolink&gt;[TITLE]&lt;/nolink&gt;&apos;
 [MESSAGE]
 		<form name="form">
 			<button name="Ignore" text="Negeren"/>
@@ -2941,13 +2941,13 @@ Klik Accepteren om deel te nemen aan dit gesprek of Afwijzen om de uitnodiging a
 		</form>
 	</notification>
 	<notification name="AutoUnmuteByIM">
-		Er is een instant message naar [FIRST] [LAST] gestuurd, waardoor deze automatisch van de negeerlijst is gehaald.
+		Er is een instant message naar [NAME] gestuurd, waardoor deze automatisch van de negeerlijst is gehaald.
 	</notification>
 	<notification name="AutoUnmuteByMoney">
-		Er is geld gegeven aan [FIRST] [LAST], waardoor deze automatisch van de negeerlijst is gehaald.
+		Er is geld gegeven aan [NAME], waardoor deze automatisch van de negeerlijst is gehaald.
 	</notification>
 	<notification name="AutoUnmuteByInventory">
-		Er is inventaris aangeboden aan [FIRST] [LAST], waardoor deze automatisch van de negeerlijst is gehaald.
+		Er is inventaris aangeboden aan [NAME], waardoor deze automatisch van de negeerlijst is gehaald.
 	</notification>
 	<notification name="VoiceInviteGroup">
 		[NAME] doet nu mee met een Voice chat gesprek binnen de groep [GROUP].
-- 
cgit v1.2.3


From 7a597cf4f14e7d4950875c2ecd3221234a98562b Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Fri, 22 Oct 2010 20:47:55 +0300
Subject: STORM-350 FIXED Wrong icon (texture) was displayed for sounds in
 inventory.

By the way, just for consistency changed LINKFOLDER icon from "Inv_LinkItem" "Inv_LinkFolder".
The icons are equal, so this change has no effect.
---
 indra/newview/llinventoryicon.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llinventoryicon.cpp b/indra/newview/llinventoryicon.cpp
index 7216d61e7f..3f4f33e88d 100644
--- a/indra/newview/llinventoryicon.cpp
+++ b/indra/newview/llinventoryicon.cpp
@@ -50,7 +50,7 @@ public:
 LLIconDictionary::LLIconDictionary()
 {
 	addEntry(LLInventoryIcon::ICONNAME_TEXTURE, 				new IconEntry("Inv_Texture"));
-	addEntry(LLInventoryIcon::ICONNAME_SOUND, 					new IconEntry("Inv_Texture"));
+	addEntry(LLInventoryIcon::ICONNAME_SOUND, 					new IconEntry("Inv_Sound"));
 	addEntry(LLInventoryIcon::ICONNAME_CALLINGCARD_ONLINE, 		new IconEntry("Inv_CallingCard"));
 	addEntry(LLInventoryIcon::ICONNAME_CALLINGCARD_OFFLINE, 	new IconEntry("Inv_CallingCard"));
 	addEntry(LLInventoryIcon::ICONNAME_LANDMARK, 				new IconEntry("Inv_Landmark"));
@@ -83,7 +83,7 @@ LLIconDictionary::LLIconDictionary()
 	addEntry(LLInventoryIcon::ICONNAME_GESTURE, 				new IconEntry("Inv_Gesture"));
 
 	addEntry(LLInventoryIcon::ICONNAME_LINKITEM, 				new IconEntry("Inv_LinkItem"));
-	addEntry(LLInventoryIcon::ICONNAME_LINKFOLDER, 				new IconEntry("Inv_LinkItem"));
+	addEntry(LLInventoryIcon::ICONNAME_LINKFOLDER, 				new IconEntry("Inv_LinkFolder"));
 
 	addEntry(LLInventoryIcon::ICONNAME_INVALID, 				new IconEntry("Inv_Invalid"));
 
-- 
cgit v1.2.3


From c16f0ef5ebceaae11ab9108c1bfe012b1c4fd622 Mon Sep 17 00:00:00 2001
From: Dave Parks <davep@lindenlab.com>
Date: Fri, 22 Oct 2010 16:04:00 -0500
Subject: Disable FBO by default for all settings.

---
 indra/newview/featuretable.txt    | 6 +++---
 indra/newview/featuretable_xp.txt | 6 +++---
 2 files changed, 6 insertions(+), 6 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/featuretable.txt b/indra/newview/featuretable.txt
index b09dd699ba..d69842d5f1 100644
--- a/indra/newview/featuretable.txt
+++ b/indra/newview/featuretable.txt
@@ -1,4 +1,4 @@
-version 23
+version 25
 
 // NOTE: This is mostly identical to featuretable_mac.txt with a few differences
 // Should be combined into one table
@@ -144,7 +144,7 @@ WLSkyDetail					1	48
 RenderDeferred				1	0
 RenderDeferredSSAO			1	0
 RenderShadowDetail			1	0
-RenderUseFBO				1	1
+RenderUseFBO				1	0
 
 //
 // Ultra graphics (REALLY PURTY!)
@@ -171,7 +171,7 @@ WLSkyDetail					1	128
 RenderDeferred				1	0
 RenderDeferredSSAO			1	0
 RenderShadowDetail			1	0
-RenderUseFBO				1	1
+RenderUseFBO				1	0
 
 //
 // Class Unknown Hardware (unknown)
diff --git a/indra/newview/featuretable_xp.txt b/indra/newview/featuretable_xp.txt
index 1e83bc73a5..dae7705971 100644
--- a/indra/newview/featuretable_xp.txt
+++ b/indra/newview/featuretable_xp.txt
@@ -1,4 +1,4 @@
-version 23
+version 25
 
 // NOTE: This is mostly identical to featuretable_mac.txt with a few differences
 // Should be combined into one table
@@ -144,7 +144,7 @@ WLSkyDetail					1	48
 RenderDeferred				1	0
 RenderDeferredSSAO			1	0
 RenderShadowDetail			1	0
-RenderUseFBO				1	1
+RenderUseFBO				1	0
 
 //
 // Ultra graphics (REALLY PURTY!)
@@ -171,7 +171,7 @@ WLSkyDetail					1	128
 RenderDeferred				1	0
 RenderDeferredSSAO			1	0
 RenderShadowDetail			1	0
-RenderUseFBO				1	1
+RenderUseFBO				1	0
 
 //
 // Class Unknown Hardware (unknown)
-- 
cgit v1.2.3


From af57ff75dea16ed857c27ebfa288b9881668e9ac Mon Sep 17 00:00:00 2001
From: Dave Parks <davep@lindenlab.com>
Date: Fri, 22 Oct 2010 17:16:44 -0500
Subject: Anisotropic filtering does NOT require a viewer restart.

---
 indra/newview/skins/default/xui/en/floater_hardware_settings.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/floater_hardware_settings.xml b/indra/newview/skins/default/xui/en/floater_hardware_settings.xml
index b2c620f435..0ea42f9757 100644
--- a/indra/newview/skins/default/xui/en/floater_hardware_settings.xml
+++ b/indra/newview/skins/default/xui/en/floater_hardware_settings.xml
@@ -22,7 +22,7 @@
     <check_box
      control_name="RenderAnisotropic"
      height="16"
-     label="Anisotropic Filtering (slower when enabled, requires viewer restart)"
+     label="Anisotropic Filtering (slower when enabled)"
      layout="topleft"
      left_pad="10"
      name="ani"
-- 
cgit v1.2.3


From 25c4f8ff46867ac1e600bf12521740fa8e14722e Mon Sep 17 00:00:00 2001
From: Merov Linden <merov@lindenlab.com>
Date: Fri, 22 Oct 2010 17:06:18 -0700
Subject: STORM-454 : fix height in world map, allow altitude till 4096m,
 display altitude on 4 digits

---
 indra/newview/llfloaterworldmap.cpp                      |  2 +-
 indra/newview/skins/default/xui/en/floater_world_map.xml | 12 +++++++-----
 2 files changed, 8 insertions(+), 6 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp
index 7236894542..ba0eb8a711 100644
--- a/indra/newview/llfloaterworldmap.cpp
+++ b/indra/newview/llfloaterworldmap.cpp
@@ -635,7 +635,7 @@ void LLFloaterWorldMap::updateTeleportCoordsDisplay( const LLVector3d& pos )
 	// convert global specified position to a local one
 	F32 region_local_x = (F32)fmod( pos.mdV[VX], (F64)REGION_WIDTH_METERS );
 	F32 region_local_y = (F32)fmod( pos.mdV[VY], (F64)REGION_WIDTH_METERS );
-	F32 region_local_z = (F32)fmod( pos.mdV[VZ], (F64)REGION_WIDTH_METERS );
+	F32 region_local_z = (F32)llclamp( pos.mdV[VZ], 0.0, (F64)REGION_HEIGHT_METERS );
 
 	// write in the values
 	childSetValue("teleport_coordinate_x", region_local_x );
diff --git a/indra/newview/skins/default/xui/en/floater_world_map.xml b/indra/newview/skins/default/xui/en/floater_world_map.xml
index 20629018e2..34c091b0da 100644
--- a/indra/newview/skins/default/xui/en/floater_world_map.xml
+++ b/indra/newview/skins/default/xui/en/floater_world_map.xml
@@ -541,7 +541,7 @@
       halign="right"
       height="16"
       layout="topleft"
-      left="25"
+      left="15"
       name="events_label"
       top_pad="16"
       width="70">
@@ -574,7 +574,8 @@
         left_delta="47"
         max_val="255"
         min_val="0"
-        name="teleport_coordinate_y" >
+        name="teleport_coordinate_y"
+        width="44" >
         <spinner.commit_callback
           function="WMap.Coordinates" />
       </spinner>
@@ -584,12 +585,13 @@
         follows="right|bottom"
         height="23"
         increment="1"
-        initial_value="128"
+        initial_value="23"
         layout="topleft"
         left_delta="47"
-        max_val="255"
+        max_val="4096"
         min_val="0"
-        name="teleport_coordinate_z">
+        name="teleport_coordinate_z"
+        width="56" >
         <spinner.commit_callback
           function="WMap.Coordinates" />
       </spinner>
-- 
cgit v1.2.3


From cb5d8d1a9295076327f23e5f6d6c91fd0d4580ea Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Fri, 22 Oct 2010 17:41:06 -0700
Subject: DN-181 Chat & IM logs saved in unreadable .llsd instead of .txt

---
 indra/newview/llchathistory.cpp |  47 ++++++++++--
 indra/newview/llimview.cpp      |  30 ++++++--
 indra/newview/lllogchat.cpp     | 157 +++++++++++++++++++++++++++++-----------
 indra/newview/lllogchat.h       |  40 ++++++++--
 indra/newview/llnearbychat.cpp  |  56 ++++++++++----
 5 files changed, 254 insertions(+), 76 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index 378c4358b3..cb5cf4a61d 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -54,6 +54,7 @@
 #include "llviewertexteditor.h"
 #include "llworld.h"
 #include "lluiconstants.h"
+#include "llstring.h"
 
 #include "llviewercontrol.h"
 
@@ -260,7 +261,7 @@ public:
 		if((chat.mFromID.isNull() && chat.mFromName.empty()) || chat.mFromName == SYSTEM_FROM && chat.mFromID.isNull())
 		{
 			mSourceType = CHAT_SOURCE_SYSTEM;
-		}
+		}  
 
 		mUserNameFont = style_params.font();
 		LLTextBox* user_name = getChild<LLTextBox>("user_name");
@@ -268,14 +269,14 @@ public:
 		user_name->setColor(style_params.color());
 
 		if (chat.mFromName.empty()
-			|| mSourceType == CHAT_SOURCE_SYSTEM
-			|| mAvatarID.isNull())
+			|| mSourceType == CHAT_SOURCE_SYSTEM)
 		{
 			mFrom = LLTrans::getString("SECOND_LIFE");
 			user_name->setValue(mFrom);
 			updateMinUserNameWidth();
 		}
 		else if (mSourceType == CHAT_SOURCE_AGENT
+				 && !mAvatarID.isNull()
 				 && chat.mChatStyle != CHAT_STYLE_HISTORY)
 		{
 			// ...from a normal user, lookup the name and fill in later.
@@ -288,7 +289,41 @@ public:
 			LLAvatarNameCache::get(mAvatarID,
 				boost::bind(&LLChatHistoryHeader::onAvatarNameCache, this, _1, _2));
 		}
-		else {
+		else if (chat.mChatStyle == CHAT_STYLE_HISTORY ||
+				 mSourceType == CHAT_SOURCE_AGENT)
+		{
+			//if it's an avatar name with a username add formatting
+			S32 username_start = chat.mFromName.rfind(" (");
+			S32 username_end = chat.mFromName.rfind(')');
+			
+			if (username_start != std::string::npos &&
+				username_end == (chat.mFromName.length() - 1))
+			{
+				mFrom = chat.mFromName.substr(0, username_start);
+				user_name->setValue(mFrom);
+
+				if (gSavedSettings.getBOOL("NameTagShowUsernames"))
+				{
+					std::string username = chat.mFromName.substr(username_start + 2);
+					username = username.substr(0, username.length() - 1);
+					LLStyle::Params style_params_name;
+					LLColor4 userNameColor = LLUIColorTable::instance().getColor("EmphasisColor");
+					style_params_name.color(userNameColor);
+					style_params_name.font.name("SansSerifSmall");
+					style_params_name.font.style("NORMAL");
+					style_params_name.readonly_color(userNameColor);
+					user_name->appendText("  - " + username, FALSE, style_params_name);
+				}
+			}
+			else
+			{
+				mFrom = chat.mFromName;
+				user_name->setValue(mFrom);
+				updateMinUserNameWidth();
+			}
+		}
+		else
+		{
 			// ...from an object, just use name as given
 			mFrom = chat.mFromName;
 			user_name->setValue(mFrom);
@@ -367,7 +402,9 @@ public:
 		user_name->setValue( LLSD(av_name.mDisplayName ) );
 		user_name->setToolTip( av_name.mUsername );
 
-		if (gSavedSettings.getBOOL("NameTagShowUsernames") && LLAvatarNameCache::useDisplayNames())
+		if (gSavedSettings.getBOOL("NameTagShowUsernames") && 
+			LLAvatarNameCache::useDisplayNames() &&
+			!av_name.mIsDisplayNameDefault)
 		{
 			LLStyle::Params style_params_name;
 			LLColor4 userNameColor = LLUIColorTable::instance().getColor("EmphasisColor");
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index c865dcf9a3..ba0dc31005 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -430,8 +430,9 @@ void LLIMModel::LLIMSession::addMessagesFromHistory(const std::list<LLSD>& histo
 		}
 		else
 		{
-			// Legacy chat logs only wrote the legacy name, not the agent_id
-			gCacheName->getUUID(from, from_id);
+			// convert it to a legacy name if we have a complete name
+			std::string legacy_name = gCacheName->buildLegacyName(from);
+ 			gCacheName->getUUID(legacy_name, from_id);
 		}
 
 		std::string timestamp = msg[IM_TIME];
@@ -526,8 +527,15 @@ bool LLIMModel::LLIMSession::isOtherParticipantAvaline()
 
 void LLIMModel::LLIMSession::onAvatarNameCache(const LLUUID& avatar_id, const LLAvatarName& av_name)
 {
-	// if username is empty, display names isn't enabled, use the display name
-	mHistoryFileName = av_name.mUsername.empty() ? av_name.mDisplayName : av_name.mUsername;
+	if (av_name.getLegacyName().empty())
+	{
+		// if display names is off the legacy name will be the display name
+		mHistoryFileName = LLCacheName::cleanFullName(av_name.mDisplayName);
+	}
+	else
+	{  
+		mHistoryFileName = LLCacheName::cleanFullName(av_name.getLegacyName());
+	}
 }
 
 void LLIMModel::LLIMSession::buildHistoryFileName()
@@ -737,8 +745,18 @@ bool LLIMModel::addToHistory(const LLUUID& session_id, const std::string& from,
 bool LLIMModel::logToFile(const std::string& file_name, const std::string& from, const LLUUID& from_id, const std::string& utf8_text)
 {
 	if (gSavedPerAccountSettings.getBOOL("LogInstantMessages"))
-	{
-		LLLogChat::saveHistory(file_name, from, from_id, utf8_text);
+	{	
+		std::string from_name = from;
+
+		LLAvatarName av_name;
+		if (!from_id.isNull() && 
+			LLAvatarNameCache::get(from_id, &av_name) &&
+			!av_name.mIsDisplayNameDefault)
+		{	
+			from_name = av_name.getCompleteName();
+		}
+
+		LLLogChat::saveHistory(file_name, from_name, from_id, utf8_text);
 		return true;
 	}
 	else
diff --git a/indra/newview/lllogchat.cpp b/indra/newview/lllogchat.cpp
index c8fd1e1d9a..8c70b1e973 100644
--- a/indra/newview/lllogchat.cpp
+++ b/indra/newview/lllogchat.cpp
@@ -26,18 +26,13 @@
 
 #include "llviewerprecompiledheaders.h"
 
-#include "lllogchat.h"
-
-// viewer includes
 #include "llagent.h"
 #include "llagentui.h"
+#include "lllogchat.h"
 #include "lltrans.h"
 #include "llviewercontrol.h"
 
-// library includes
-#include "llchat.h"
 #include "llinstantmessage.h"
-#include "llsdserialize.h"
 #include "llsingleton.h" // for LLSingleton
 
 #include <boost/algorithm/string/trim.hpp>
@@ -65,7 +60,6 @@ const std::string IM_TIME("time");
 const std::string IM_TEXT("message");
 const std::string IM_FROM("from");
 const std::string IM_FROM_ID("from_id");
-const std::string IM_SOURCE_TYPE("source_type");
 
 const static std::string IM_SEPARATOR(": ");
 const static std::string NEW_LINE("\n");
@@ -93,7 +87,7 @@ const static boost::regex TIMESTAMP_AND_STUFF("^(\\[\\d{4}/\\d{1,2}/\\d{1,2}\\s+
  *  Regular expression suitable to match names like
  *  "You", "Second Life", "Igor ProductEngine", "Object", "Mega House"
  */
-const static boost::regex NAME_AND_TEXT("(You:|Second Life:|[^\\s:]+\\s*[:]{1}|\\S+\\s+[^\\s:]+[:]{1})?(\\s*)(.*)");
+const static boost::regex NAME_AND_TEXT("([^:]+[:]{1})?(\\s*)(.*)");
 
 //is used to parse complex object names like "Xstreet SL Terminal v2.2.5 st"
 const static std::string NAME_TEXT_DIVIDER(": ");
@@ -190,8 +184,7 @@ std::string LLLogChat::makeLogFileName(std::string filename)
 {
 	filename = cleanFileName(filename);
 	filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_ACCOUNT_CHAT_LOGS,filename);
-	// new files are llsd notation format
-	filename += ".llsd";
+	filename += ".txt";
 	return filename;
 }
 
@@ -240,18 +233,6 @@ void LLLogChat::saveHistory(const std::string& filename,
 			    const std::string& from,
 			    const LLUUID& from_id,
 			    const std::string& line)
-{
-	LLChat chat;
-	chat.mText = line;
-	chat.mFromName = from;
-	chat.mFromID = from_id;
-	// default to being from an agent
-	chat.mSourceType = CHAT_SOURCE_AGENT;
-	saveHistory(filename, chat);
-}
-
-//static
-void LLLogChat::saveHistory(const std::string& filename, const LLChat& chat)
 {
 	std::string tmp_filename = filename;
 	LLStringUtil::trim(tmp_filename);
@@ -273,27 +254,89 @@ void LLLogChat::saveHistory(const std::string& filename, const LLChat& chat)
 	LLSD item;
 
 	if (gSavedPerAccountSettings.getBOOL("LogTimestamp"))
-		 item[IM_TIME] = LLLogChat::timestamp(gSavedPerAccountSettings.getBOOL("LogTimestampDate"));
+		 item["time"] = LLLogChat::timestamp(gSavedPerAccountSettings.getBOOL("LogTimestampDate"));
 
-	item[IM_FROM_ID] = chat.mFromID;
-	item[IM_TEXT] = chat.mText;
-	item[IM_SOURCE_TYPE] = chat.mSourceType;
+	item["from_id"]	= from_id;
+	item["message"]	= line;
 
 	//adding "Second Life:" for all system messages to make chat log history parsing more reliable
-	if (chat.mFromName.empty() && chat.mFromID.isNull())
+	if (from.empty() && from_id.isNull())
 	{
-		item[IM_FROM] = SYSTEM_FROM; 
+		item["from"] = SYSTEM_FROM; 
 	}
 	else
 	{
-		item[IM_FROM] = chat.mFromName;
+		item["from"] = from;
 	}
 
-	file << LLSDOStreamer<LLSDNotationFormatter>(item) << std::endl;
+	file << LLChatLogFormatter(item) << std::endl;
 
 	file.close();
 }
 
+void LLLogChat::loadHistory(const std::string& filename, void (*callback)(ELogLineType, const LLSD&, void*), void* userdata)
+{
+	if(!filename.size())
+	{
+		llwarns << "Filename is Empty!" << llendl;
+		return ;
+	}
+        
+	LLFILE* fptr = LLFile::fopen(makeLogFileName(filename), "r");		/*Flawfinder: ignore*/
+	if (!fptr)
+	{
+		callback(LOG_EMPTY, LLSD(), userdata);
+		return;			//No previous conversation with this name.
+	}
+	else
+	{
+		char buffer[LOG_RECALL_SIZE];		/*Flawfinder: ignore*/
+		char *bptr;
+		S32 len;
+		bool firstline=TRUE;
+
+		if ( fseek(fptr, (LOG_RECALL_SIZE - 1) * -1  , SEEK_END) )		
+		{	//File is smaller than recall size.  Get it all.
+			firstline = FALSE;
+			if ( fseek(fptr, 0, SEEK_SET) )
+			{
+				fclose(fptr);
+				return;
+			}
+		}
+
+		while ( fgets(buffer, LOG_RECALL_SIZE, fptr)  && !feof(fptr) ) 
+		{
+			len = strlen(buffer) - 1;		/*Flawfinder: ignore*/
+			for ( bptr = (buffer + len); (*bptr == '\n' || *bptr == '\r') && bptr>buffer; bptr--)	*bptr='\0';
+			
+			if (!firstline)
+			{
+				LLSD item;
+				std::string line(buffer);
+				std::istringstream iss(line);
+				
+				if (!LLChatLogParser::parse(line, item))
+				{
+					item["message"]	= line;
+					callback(LOG_LINE, item, userdata);
+				}
+				else
+				{
+					callback(LOG_LLSD, item, userdata);
+				}
+			}
+			else
+			{
+				firstline = FALSE;
+			}
+		}
+		callback(LOG_END, LLSD(), userdata);
+		
+		fclose(fptr);
+	}
+}
+
 void append_to_last_message(std::list<LLSD>& messages, const std::string& line)
 {
 	if (!messages.size()) return;
@@ -367,24 +410,52 @@ void LLLogChat::loadAllHistory(const std::string& file_name, std::list<LLSD>& me
 	fclose(fptr);
 }
 
-// static
-bool LLChatLogParser::parse(const std::string& raw, LLSD& im)
+//*TODO mark object's names in a special way so that they will be distinguishable form avatar name 
+//which are more strict by its nature (only firstname and secondname)
+//Example, an object's name can be writen like "Object <actual_object's_name>"
+void LLChatLogFormatter::format(const LLSD& im, std::ostream& ostr) const
 {
-	if (!raw.length()) return false;
+	if (!im.isMap())
+	{
+		llwarning("invalid LLSD type of an instant message", 0);
+		return;
+	}
+
+	if (im[IM_TIME].isDefined())
+{
+		std::string timestamp = im[IM_TIME].asString();
+		boost::trim(timestamp);
+		ostr << '[' << timestamp << ']' << TWO_SPACES;
+	}
 	
-	im = LLSD::emptyMap();
+	//*TODO mark object's names in a special way so that they will be distinguishable form avatar name 
+	//which are more strict by its nature (only firstname and secondname)
+	//Example, an object's name can be writen like "Object <actual_object's_name>"
+	if (im[IM_FROM].isDefined())
+	{
+		std::string from = im[IM_FROM].asString();
+		boost::trim(from);
+		if (from.size())
+		{
+			ostr << from << IM_SEPARATOR;
+		}
+	}
 
-	// In Viewer 2.1 we added UUID to chat/IM logging so we can look up
-	// display names
-	if (raw[0] == '{')
+	if (im[IM_TEXT].isDefined())
 	{
-		// ...this is a viewer 2.1, new-style LLSD notation format log
-		std::istringstream raw_stream(raw);
-		LLPointer<LLSDParser> parser = new LLSDNotationParser();
-		S32 count = parser->parse(raw_stream, im, raw.length());
-		// expect several map items per parsed line
-		return (count != LLSDParser::PARSE_FAILURE);
+		std::string im_text = im[IM_TEXT].asString();
+
+		//multilined text will be saved with prepended spaces
+		boost::replace_all(im_text, NEW_LINE, NEW_LINE_SPACE_PREFIX);
+		ostr << im_text;
 	}
+	}
+
+bool LLChatLogParser::parse(std::string& raw, LLSD& im)
+{
+	if (!raw.length()) return false;
+	
+	im = LLSD::emptyMap();
 
 	//matching a timestamp
 	boost::match_results<std::string::const_iterator> matches;
diff --git a/indra/newview/lllogchat.h b/indra/newview/lllogchat.h
index 8b1cc3484f..6958d56311 100644
--- a/indra/newview/lllogchat.h
+++ b/indra/newview/lllogchat.h
@@ -41,21 +41,48 @@ public:
 	};
 	static std::string timestamp(bool withdate = false);
 	static std::string makeLogFileName(std::string(filename));
-
-	// Log a single line item to the appropriate chat file
-	static void saveHistory(const std::string& filename, const LLChat& chat);
-
-	// Prefer the above version - it saves more metadata about the item
 	static void saveHistory(const std::string& filename,
 				const std::string& from,
 				const LLUUID& from_id,
 				const std::string& line);
 
+	/** @deprecated @see loadAllHistory() */
+	static void loadHistory(const std::string& filename, 
+		                    void (*callback)(ELogLineType, const LLSD&, void*), 
+							void* userdata);
+
 	static void loadAllHistory(const std::string& file_name, std::list<LLSD>& messages);
 private:
 	static std::string cleanFileName(std::string filename);
 };
 
+/**
+ * Formatter for the plain text chat log files
+ */
+class LLChatLogFormatter
+{
+public:
+	LLChatLogFormatter(const LLSD& im) : mIM(im) {}
+	virtual ~LLChatLogFormatter() {};
+
+	friend std::ostream& operator<<(std::ostream& str, const LLChatLogFormatter& formatter)
+	{
+		formatter.format(formatter.mIM, str);
+		return str;
+	}
+
+protected:
+
+	/**
+	 * Format an instant message to a stream
+	 * Timestamps and sender names are required
+	 * New lines of multilined messages are prepended with a space
+	 */
+	void format(const LLSD& im, std::ostream& ostr) const;
+
+	LLSD mIM;
+};
+
 /**
  * Parser for the plain text chat log files
  */
@@ -74,7 +101,7 @@ public:
 	 *
 	 * @return false if failed to parse mandatory data - message text
 	 */
-	static bool parse(const std::string& raw, LLSD& im);
+	static bool parse(std::string& raw, LLSD& im);
 
 protected:
 	LLChatLogParser();
@@ -86,6 +113,5 @@ extern const std::string IM_TIME; //("time");
 extern const std::string IM_TEXT; //("message");
 extern const std::string IM_FROM; //("from");
 extern const std::string IM_FROM_ID; //("from_id");
-extern const std::string IM_SOURCE_TYPE; //("source_type");
 
 #endif
diff --git a/indra/newview/llnearbychat.cpp b/indra/newview/llnearbychat.cpp
index f16cc4cef4..180695e40b 100644
--- a/indra/newview/llnearbychat.cpp
+++ b/indra/newview/llnearbychat.cpp
@@ -46,6 +46,8 @@
 #include "llchathistory.h"
 #include "llstylemap.h"
 
+#include "llavatarnamecache.h"
+
 #include "lldraghandle.h"
 
 #include "llbottomtray.h"
@@ -179,7 +181,21 @@ void	LLNearbyChat::addMessage(const LLChat& chat,bool archive,const LLSD &args)
 
 	if (gSavedPerAccountSettings.getBOOL("LogNearbyChat"))
 	{
-		LLLogChat::saveHistory("chat", chat);
+		std::string from_name = chat.mFromName;
+
+		if (chat.mSourceType == CHAT_SOURCE_AGENT)
+		{
+			// if the chat is coming from an agent, log the complete name
+			LLAvatarName av_name;
+			LLAvatarNameCache::get(chat.mFromID, &av_name);
+
+			if (!av_name.mIsDisplayNameDefault)
+			{
+				from_name = av_name.getCompleteName();
+			}
+		}
+
+		LLLogChat::saveHistory("chat", from_name, chat.mFromID, chat.mText);
 	}
 }
 
@@ -248,11 +264,23 @@ void LLNearbyChat::processChatHistoryStyleUpdate(const LLSD& newvalue)
 		nearby_chat->updateChatHistoryStyle();
 }
 
-bool isTwoWordsName(const std::string& name)
+bool isWordsName(const std::string& name)
 {
-	//checking for a single space
-	S32 pos = name.find(' ', 0);
-	return std::string::npos != pos && name.rfind(' ', name.length()) == pos && 0 != pos && name.length()-1 != pos;
+	// checking to see if it's display name plus username in parentheses 
+	S32 open_paren = name.find(" (", 0);
+	S32 close_paren = name.find(')', 0);
+
+	if (open_paren != std::string::npos &&
+		close_paren == name.length()-1)
+	{
+		return true;
+	}
+	else
+	{
+		//checking for a single space
+		S32 pos = name.find(' ', 0);
+		return std::string::npos != pos && name.rfind(' ', name.length()) == pos && 0 != pos && name.length()-1 != pos;
+	}
 }
 
 void LLNearbyChat::loadHistory()
@@ -275,9 +303,10 @@ void LLNearbyChat::loadHistory()
 			from_id = msg[IM_FROM_ID].asUUID();
 		}
 		else
-		{
-			gCacheName->getUUID(from, from_id);
-		}
+ 		{
+			std::string legacy_name = gCacheName->buildLegacyName(from);
+ 			gCacheName->getUUID(legacy_name, from_id);
+ 		}
 
 		LLChat chat;
 		chat.mFromName = from;
@@ -286,18 +315,15 @@ void LLNearbyChat::loadHistory()
 		chat.mTimeStr = msg[IM_TIME].asString();
 		chat.mChatStyle = CHAT_STYLE_HISTORY;
 
-		if (msg.has(IM_SOURCE_TYPE))
-		{
-			S32 source_type = msg[IM_SOURCE_TYPE].asInteger();
-			chat.mSourceType = (EChatSourceType)source_type;
-		}
-		else if (from_id.isNull() && SYSTEM_FROM == from)
+		chat.mSourceType = CHAT_SOURCE_AGENT;
+		if (from_id.isNull() && SYSTEM_FROM == from)
 		{	
 			chat.mSourceType = CHAT_SOURCE_SYSTEM;
+			
 		}
 		else if (from_id.isNull())
 		{
-			chat.mSourceType = isTwoWordsName(from) ? CHAT_SOURCE_UNKNOWN : CHAT_SOURCE_OBJECT;
+			chat.mSourceType = isWordsName(from) ? CHAT_SOURCE_UNKNOWN : CHAT_SOURCE_OBJECT;
 		}
 
 		addMessage(chat, true, do_not_log);
-- 
cgit v1.2.3


From 9b97fc3f309518155f2b468ea94fc6f373620f2c Mon Sep 17 00:00:00 2001
From: Kyle Ambroff <ambroff@lindenlab.com>
Date: Sat, 23 Oct 2010 18:43:27 -0700
Subject: ER-219: Add an asynchronous api for the region debug console

Add support for a new capability, SimConsoleAsync. This is a replacement for
the deprecated SimConsole capability that provides an asynchronous API. The old
API is still supported, but the simulator will never support both.

For the new API, commands will be sent via HTTP POST to the SimConsoleAsync
capability, same as before. But the resulting output will be pushed to the
viewer view the event-poll, using the newly added SimConsoleResponse LLSD
message.

Will review with Simon or Falcon.
---
 indra/newview/llfloaterregiondebugconsole.cpp | 175 ++++++++++++++++++++------
 indra/newview/llfloaterregiondebugconsole.h   |   8 ++
 indra/newview/llviewerregion.cpp              |   1 +
 3 files changed, 149 insertions(+), 35 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloaterregiondebugconsole.cpp b/indra/newview/llfloaterregiondebugconsole.cpp
index 159dee7631..0e61fb8e0a 100644
--- a/indra/newview/llfloaterregiondebugconsole.cpp
+++ b/indra/newview/llfloaterregiondebugconsole.cpp
@@ -37,34 +37,113 @@
 
 #include "llagent.h"
 #include "llhttpclient.h"
+#include "llhttpnode.h"
 #include "lllineeditor.h"
 #include "lltexteditor.h"
 #include "llviewerregion.h"
 
-class Responder : public LLHTTPClient::Responder {
-public:
-    Responder(LLTextEditor *output) : mOutput(output)
-    {
-    }
-
-    /*virtual*/
-    void error(U32 status, const std::string& reason)
-    {
-    }
-
-    /*virtual*/
-    void result(const LLSD& content)
-    {
-		std::string text = content.asString() + "\n\n> ";
-		mOutput->appendText(text, false);
-    };
-
-    LLTextEditor * mOutput;
-};
+// Two versions of the sim console API are supported.
+//
+// SimConsole capability (deprecated):
+// This is the initial implementation that is supported by some versions of the
+// simulator. It is simple and straight forward, just POST a command and the
+// body of the response has the result. This API is deprecated because it
+// doesn't allow the sim to use any asynchronous API.
+//
+// SimConsoleAsync capability:
+// This capability replaces the original SimConsole capability. It is similar
+// in that the command is POSTed to the SimConsoleAsync cap, but the response
+// comes in through the event poll, which gives the simulator more flexibility
+// and allows it to perform complex operations without blocking any frames.
+//
+// We will assume the SimConsoleAsync capability is available, and fall back to
+// the SimConsole cap if it is not. The simulator will only support one or the
+// other.
+
+namespace
+{
+	// Signal used to notify the floater of responses from the asynchronous
+	// API.
+	typedef boost::signals2::signal<
+		void (const std::string& output)> console_reply_signal_t;
+	console_reply_signal_t sConsoleReplySignal;
+
+	const std::string PROMPT("\n\n> ");
+	const std::string UNABLE_TO_SEND_COMMAND(
+		"ERROR: The last command was not received by the server.");
+	const std::string CONSOLE_UNAVAILABLE(
+		"ERROR: No console available for this region/simulator.");
+	const std::string CONSOLE_NOT_SUPPORTED(
+		"This region does not support the simulator console.");
+
+	// This responder handles the initial response. Unless error() is called
+	// we assume that the simulator has received our request. Error will be
+	// called if this request times out.
+	class AsyncConsoleResponder : public LLHTTPClient::Responder
+	{
+	public:
+		/* virtual */
+		void error(U32 status, const std::string& reason)
+		{
+			sConsoleReplySignal(UNABLE_TO_SEND_COMMAND);
+		}
+	};
+
+	class ConsoleResponder : public LLHTTPClient::Responder
+	{
+	public:
+		ConsoleResponder(LLTextEditor *output) : mOutput(output)
+		{
+		}
+
+		/*virtual*/
+		void error(U32 status, const std::string& reason)
+		{
+			mOutput->appendText(
+				UNABLE_TO_SEND_COMMAND + PROMPT,
+				false);
+		}
+
+		/*virtual*/
+		void result(const LLSD& content)
+		{
+			mOutput->appendText(content.asString() + PROMPT, false);
+		}
+
+		LLTextEditor * mOutput;
+	};
+
+	// This handles responses for console commands sent via the asynchronous
+	// API.
+	class ConsoleResponseNode : public LLHTTPNode
+	{
+	public:
+		/* virtual */
+		void post(
+			LLHTTPNode::ResponsePtr reponse,
+			const LLSD& context,
+			const LLSD& input) const
+		{
+			llinfos << "Received response from the debug console: "
+				<< input << llendl;
+			sConsoleReplySignal(input["body"].asString());
+		}
+	};
+}
 
 LLFloaterRegionDebugConsole::LLFloaterRegionDebugConsole(LLSD const & key)
 : LLFloater(key), mOutput(NULL)
 {
+	mReplySignalConnection = sConsoleReplySignal.connect(
+		boost::bind(
+			&LLFloaterRegionDebugConsole::onReplyReceived,
+			this,
+			_1));
+}
+
+LLFloaterRegionDebugConsole::~LLFloaterRegionDebugConsole()
+{
+	mReplySignalConnection.disconnect();
 }
 
 BOOL LLFloaterRegionDebugConsole::postBuild()
@@ -77,17 +156,21 @@ BOOL LLFloaterRegionDebugConsole::postBuild()
 
 	mOutput = getChild<LLTextEditor>("region_debug_console_output");
 
-	std::string url = gAgent.getRegion()->getCapability("SimConsole");
-	if ( url.size() == 0 )
+	std::string url = gAgent.getRegion()->getCapability("SimConsoleAsync");
+	if (url.empty())
 	{
-		mOutput->appendText("This region does not support the simulator console.\n\n> ", false);
+		// Fall back to see if the old API is supported.
+		url = gAgent.getRegion()->getCapability("SimConsole");
+		if (url.empty())
+		{
+			mOutput->appendText(
+				CONSOLE_NOT_SUPPORTED + PROMPT,
+				false);
+			return TRUE;
+		}
 	}
-	else
-	{
-		mOutput->appendText("> ", false);
-	}
-	
 
+	mOutput->appendText("> ", false);
 	return TRUE;
 }
 
@@ -96,20 +179,42 @@ void LLFloaterRegionDebugConsole::onInput(LLUICtrl* ctrl, const LLSD& param)
 	LLLineEditor* input = static_cast<LLLineEditor*>(ctrl);
 	std::string text = input->getText() + "\n";
 
-
-    std::string url = gAgent.getRegion()->getCapability("SimConsole");
-
-	if ( url.size() > 0 )
+	std::string url = gAgent.getRegion()->getCapability("SimConsoleAsync");
+	if (url.empty())
 	{
-		LLHTTPClient::post(url, LLSD(input->getText()), new ::Responder(mOutput));
+		// Fall back to the old API
+		url = gAgent.getRegion()->getCapability("SimConsole");
+		if (url.empty())
+		{
+			text += CONSOLE_UNAVAILABLE + PROMPT;
+		}
+		else
+		{
+			// Using SimConsole (deprecated)
+			LLHTTPClient::post(
+				url,
+				LLSD(input->getText()),
+				new ConsoleResponder(mOutput));
+		}
 	}
 	else
 	{
-		text += "\nError: No console available for this region/simulator.\n\n> ";
+		// Using SimConsoleAsync
+		LLHTTPClient::post(
+			url,
+			LLSD(input->getText()),
+			new AsyncConsoleResponder);
 	}
 
 	mOutput->appendText(text, false);
-
 	input->clear();
 }
 
+void LLFloaterRegionDebugConsole::onReplyReceived(const std::string& output)
+{
+	mOutput->appendText(output + PROMPT, false);
+}
+
+LLHTTPRegistration<ConsoleResponseNode>
+	gHTTPRegistrationMessageDebugConsoleResponse(
+		"/message/SimConsoleResponse");
diff --git a/indra/newview/llfloaterregiondebugconsole.h b/indra/newview/llfloaterregiondebugconsole.h
index 69d7773fec..4171a4da6b 100644
--- a/indra/newview/llfloaterregiondebugconsole.h
+++ b/indra/newview/llfloaterregiondebugconsole.h
@@ -34,6 +34,8 @@
 #ifndef LL_LLFLOATERREGIONDEBUGCONSOLE_H
 #define LL_LLFLOATERREGIONDEBUGCONSOLE_H
 
+#include <boost/signals2.hpp>
+
 #include "llfloater.h"
 #include "llhttpclient.h"
 
@@ -43,6 +45,7 @@ class LLFloaterRegionDebugConsole : public LLFloater, public LLHTTPClient::Respo
 {
 public:
 	LLFloaterRegionDebugConsole(LLSD const & key);
+	virtual ~LLFloaterRegionDebugConsole();
 
 	// virtual
 	BOOL postBuild();
@@ -50,6 +53,11 @@ public:
 	void onInput(LLUICtrl* ctrl, const LLSD& param);
 
 	LLTextEditor * mOutput;
+
+ private:
+	void onReplyReceived(const std::string& output);
+
+	boost::signals2::connection mReplySignalConnection;
 };
 
 #endif // LL_LLFLOATERREGIONDEBUGCONSOLE_H
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index abae44953b..45a2acfeef 100644
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -1400,6 +1400,7 @@ void LLViewerRegion::setSeedCapability(const std::string& url)
 	capabilityNames.append("ServerReleaseNotes");
 	capabilityNames.append("SetDisplayName");
 	capabilityNames.append("SimConsole");
+	capabilityNames.append("SimConsoleAsync");
 	capabilityNames.append("StartGroupProposal");
 	capabilityNames.append("TextureStats");
 	capabilityNames.append("UntrustedSimulatorMessage");
-- 
cgit v1.2.3


From 6da1e54e6a8b66a2cad7c8c89de279ca5b9ac7dd Mon Sep 17 00:00:00 2001
From: Wolfpup Lowenhar <wolfpup67@earthlink.net>
Date: Mon, 25 Oct 2010 11:43:50 -0400
Subject: Inverting settings and test so that telling other how to turn off the
 messages popping is easier as per discussion with Oz and Boroondas also
 correcting some minor spelling issues

---
 indra/newview/app_settings/settings.xml                    | 12 ++++++------
 indra/newview/llimview.cpp                                 |  4 ++--
 .../skins/default/xui/en/panel_preferences_chat.xml        | 14 +++++++-------
 3 files changed, 15 insertions(+), 15 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 3015dc523a..8ec812d59e 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -2567,27 +2567,27 @@
       <key>Value</key>
       <integer>1</integer>
     </map>
-    <key>DisableGroupToast</key>
+    <key>EnableGroupToast</key>
     <map>
       <key>Comment</key>
-      <string>Disable Incoming Group Toasts</string>
+      <string>Enable Incoming Group Toasts</string>
       <key>Persist</key>
       <integer>1</integer>
       <key>Type</key>
       <string>Boolean</string>
       <key>Value</key>
-      <integer>0</integer>
+      <integer>1</integer>
     </map>
-    <key>DisableIMToast</key>
+    <key>EnableIMToast</key>
     <map>
       <key>Comment</key>
-      <string>Disable Incoming IM Toasts</string>
+      <string>Enable Incoming IM Toasts</string>
       <key>Persist</key>
       <integer>1</integer>
       <key>Type</key>
       <string>Boolean</string>
       <key>Value</key>
-      <integer>0</integer>
+      <integer>1</integer>
     </map>
     <key>DisplayAvatarAgentTarget</key>
     <map>
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index 410a20ffd0..79d524006d 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -134,12 +134,12 @@ void toast_callback(const LLSD& msg){
 	// *NOTE Skip toasting if the user disable it in preferences/debug settings ~Alexandrea
 	LLIMModel::LLIMSession* session = LLIMModel::instance().findIMSession(
 				msg["session_id"]);
-	if (gSavedSettings.getBOOL("DisableGroupToast")
+	if (!gSavedSettings.getBOOL("EnableGroupToast")
 			&& session->isGroupSessionType())
 	{
 		return;
 	}
-	if (gSavedSettings.getBOOL("DisableIMToast")
+	if (!gSavedSettings.getBOOL("EnableIMToast")
 			&& !session->isGroupSessionType())
 	{
 		return;
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml
index e36415832c..77f3405ed9 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml
@@ -394,27 +394,27 @@
      left="280" 
      height="10"
      width="180">
-      Disable incoming notifications:
+      Enable Incoming Messages:
       </text>
     <check_box
-     control_name="DisableGroupToast"
-     name="DisableGroupToast"
+     control_name="EnableGroupToast"
+     name="EnableGroupToast"
      label="Group chats" 
      layout="topleft"
      top_delta="18" 
      left="295" 
      height="20"
-     tool_tip="Checking this will turn off Group Toasts poping up"
+     tool_tip="Checking this will turn on Group Messages popping up"
      width="400" />
     <check_box
-     control_name="DisableIMToast"
-     name="DisableIMToast"
+     control_name="EnableIMToast"
+     name="EnableIMToast"
      label="Im chats" 
      layout="topleft"
      top_delta="22" 
      left="295" 
      height="20"
-     tool_tip="Checking this will turn off IM Chat Toasts poping up"
+     tool_tip="Checking this will turn on IM Chat Messages popping up"
      width="400" />
     <check_box
      control_name="TranslateChat"
-- 
cgit v1.2.3


From 158bfc563b018ba4e0068ff4202f6d2ad1001aa1 Mon Sep 17 00:00:00 2001
From: Andrew Productengine <adyukov@productengine.com>
Date: Mon, 25 Oct 2010 18:56:04 +0300
Subject: STORM-95 FIXED Fixed hanging of client when incorrect WAV file was
 passed.

As Aimee has found: "The data chunk of nexfire.wav has an incorrect length specified in its header which we blindly trust when reading
the file in check_for_invalid_wav_formats() in llvorbisencode.cpp. It causes an overflow of the file position pointer when reading the file which makes
it start over from the beginning, hanging it in an infinite loop."

- To avoid this situation in future, check for chunk size was added, and if it is declared bigger then it may be, function is interrupted and returns error.
---
 indra/newview/skins/default/xui/en/notifications.xml | 8 ++++++++
 1 file changed, 8 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 83cbcb3344..4ee04b44b6 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -1365,6 +1365,14 @@ Could not find &apos;data&apos; chunk in WAV header:
 [FILE]
   </notification>
 
+  <notification
+   icon="alertmodal.tga"
+   name="SoundFileInvalidChunkSize"
+   type="alertmodal">
+Wrong chunk size in WAV file:
+[FILE]
+  </notification>
+
   <notification
    icon="alertmodal.tga"
    name="SoundFileInvalidTooLong"
-- 
cgit v1.2.3


From 7be4f43d1704a5d5318e4fd32ab95a132cd26ea3 Mon Sep 17 00:00:00 2001
From: Kyle Ambroff <ambroff@lindenlab.com>
Date: Mon, 25 Oct 2010 10:08:42 -0700
Subject: Null checks for mOutput for good luck.

---
 indra/newview/llfloaterregiondebugconsole.cpp | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloaterregiondebugconsole.cpp b/indra/newview/llfloaterregiondebugconsole.cpp
index 0e61fb8e0a..b3b7645dd4 100644
--- a/indra/newview/llfloaterregiondebugconsole.cpp
+++ b/indra/newview/llfloaterregiondebugconsole.cpp
@@ -99,15 +99,22 @@ namespace
 		/*virtual*/
 		void error(U32 status, const std::string& reason)
 		{
-			mOutput->appendText(
-				UNABLE_TO_SEND_COMMAND + PROMPT,
-				false);
+			if (mOutput)
+			{
+				mOutput->appendText(
+					UNABLE_TO_SEND_COMMAND + PROMPT,
+					false);
+			}
 		}
 
 		/*virtual*/
 		void result(const LLSD& content)
 		{
-			mOutput->appendText(content.asString() + PROMPT, false);
+			if (mOutput)
+			{
+				mOutput->appendText(
+					content.asString() + PROMPT, false);
+			}
 		}
 
 		LLTextEditor * mOutput;
-- 
cgit v1.2.3


From c0e9594e9d509ba665c3b5a2fe01049b0dbb92fd Mon Sep 17 00:00:00 2001
From: Merov Linden <merov@lindenlab.com>
Date: Mon, 25 Oct 2010 10:27:37 -0700
Subject: STORM-173 : use isEmpty() instead of getFirstRootNode() to check
 selection

---
 indra/newview/llviewermenu.cpp | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index dc7c6f17a9..68935d536b 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -4160,8 +4160,7 @@ class LLObjectEnableReturn : public view_listener_t
 {
 	bool handleEvent(const LLSD& userdata)
 	{
-		LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode();
-		if (!node)
+		if (LLSelectMgr::getInstance()->getSelection()->isEmpty())
 		{
 			// Do not enable if nothing selected
 			return false;
-- 
cgit v1.2.3


From e98eff02ae4894050267a6b302c4887393ff1244 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Mon, 25 Oct 2010 10:31:47 -0700
Subject: DN-181 Chat & IM logs saved in unreadable .llsd instead of .txt -
 fixing saving of p2p logs

---
 indra/newview/llimview.cpp | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index ba0dc31005..349ef8185f 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -527,9 +527,10 @@ bool LLIMModel::LLIMSession::isOtherParticipantAvaline()
 
 void LLIMModel::LLIMSession::onAvatarNameCache(const LLUUID& avatar_id, const LLAvatarName& av_name)
 {
-	if (av_name.getLegacyName().empty())
+	if (av_name.mLegacyFirstName.empty())
 	{
-		// if display names is off the legacy name will be the display name
+		// if mLegacyFirstName is empty it means display names is off and the 
+		// data came from the gCacheName, mDisplayName will be the legacy name
 		mHistoryFileName = LLCacheName::cleanFullName(av_name.mDisplayName);
 	}
 	else
-- 
cgit v1.2.3


From ba0d4ccaf49753bd8c3eca127d41fa7072782473 Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Mon, 25 Oct 2010 21:38:22 +0300
Subject: STORM-341 FIXED Crash on exiting viewer while Outfit Editor is opened
 in detached Appearance SP.

Reason: An inventory observer (LLFilteredWearableListManager) tried to use
a deleted collect functor (LLFilterItem::collector in LLPanelOutfitEdit::mListViewItemTypes).

Fix: De-register (and delete) the observer when the collector gets deleted.
---
 indra/newview/llpaneloutfitedit.cpp | 2 ++
 1 file changed, 2 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp
index 5638374178..63076364bc 100644
--- a/indra/newview/llpaneloutfitedit.cpp
+++ b/indra/newview/llpaneloutfitedit.cpp
@@ -404,6 +404,7 @@ LLPanelOutfitEdit::LLPanelOutfitEdit()
 	mAddWearablesPanel(NULL),
 	mFolderViewFilterCmbBox(NULL),
 	mListViewFilterCmbBox(NULL),
+	mWearableListManager(NULL),
 	mPlusBtn(NULL),
 	mWearablesGearMenuBtn(NULL),
 	mGearMenuBtn(NULL)
@@ -431,6 +432,7 @@ LLPanelOutfitEdit::LLPanelOutfitEdit()
 
 LLPanelOutfitEdit::~LLPanelOutfitEdit()
 {
+	delete mWearableListManager;
 	delete mSavedFolderState;
 
 	delete mCOFDragAndDropObserver;
-- 
cgit v1.2.3


From 80cbe66039a4c01aef1052a450e1a0449c65f26d Mon Sep 17 00:00:00 2001
From: Kent Quirk <q@lindenlab.com>
Date: Mon, 25 Oct 2010 16:06:03 -0400
Subject: apply fixes for STORM-341, not quite a transplant

---
 indra/newview/llpaneloutfitedit.cpp | 2 ++
 1 file changed, 2 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp
index 494db01f77..408d4f29b7 100644
--- a/indra/newview/llpaneloutfitedit.cpp
+++ b/indra/newview/llpaneloutfitedit.cpp
@@ -403,6 +403,7 @@ LLPanelOutfitEdit::LLPanelOutfitEdit()
 	mAddWearablesPanel(NULL),
 	mFolderViewFilterCmbBox(NULL),
 	mListViewFilterCmbBox(NULL),
+	mWearableListManager(NULL),
 	mPlusBtn(NULL)
 {
 	mSavedFolderState = new LLSaveFolderState();
@@ -428,6 +429,7 @@ LLPanelOutfitEdit::LLPanelOutfitEdit()
 
 LLPanelOutfitEdit::~LLPanelOutfitEdit()
 {
+	delete mWearableListManager;
 	delete mSavedFolderState;
 
 	delete mCOFDragAndDropObserver;
-- 
cgit v1.2.3


From 8bef9cc8137dc58b818c60dd1173959fcab40bd8 Mon Sep 17 00:00:00 2001
From: Wolfpup Lowenhar <wolfpup67@earthlink.net>
Date: Tue, 26 Oct 2010 09:32:56 -0400
Subject: Correction to pannel_preferences_chat.xml os it reads 'IM chat'
 instead of Im chat'

---
 indra/newview/skins/default/xui/en/panel_preferences_chat.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml
index 77f3405ed9..45d7633f73 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml
@@ -409,7 +409,7 @@
     <check_box
      control_name="EnableIMToast"
      name="EnableIMToast"
-     label="Im chats" 
+     label="IM chats" 
      layout="topleft"
      top_delta="22" 
      left="295" 
-- 
cgit v1.2.3


From b2a6f4853b550af68a6f4487db00663639e20b38 Mon Sep 17 00:00:00 2001
From: Paul Guslisty <pguslisty@productengine.com>
Date: Tue, 26 Oct 2010 18:15:30 +0300
Subject: STORM-36 FIXED As a User, I want to control how long a chat toast
 appears before it fades. Please add fade time back to Chat preferences.

- Added two spinners to the Chat preferences tab that control NearbyToastLifeTime and NearbyToastFadingTime
- Added callbacks to the LLNearbyChatScreenChannel that update these properties if they were changed

Refactoring of LLToast:
- Removed code that was making toast transparent from LLToast::draw()
- Modified LLToast interface that relates to showing and hiding toast, so that all screen channels can use LLToast universally.
- Replaced in LLScreenChannel calling methods of old interface to new ones.
---
 indra/newview/llnearbychathandler.cpp              |  58 +++++++++--
 indra/newview/llscreenchannel.cpp                  |   8 +-
 indra/newview/lltoast.cpp                          | 110 ++++++++++++++++++---
 indra/newview/lltoast.h                            |  35 ++++---
 .../default/xui/en/panel_preferences_chat.xml      |  34 ++++++-
 5 files changed, 210 insertions(+), 35 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llnearbychathandler.cpp b/indra/newview/llnearbychathandler.cpp
index 47d32e57fb..d2ad78f140 100644
--- a/indra/newview/llnearbychathandler.cpp
+++ b/indra/newview/llnearbychathandler.cpp
@@ -64,6 +64,18 @@ public:
 	LLNearbyChatScreenChannel(const LLUUID& id):LLScreenChannelBase(id) 
 	{
 		mStopProcessing = false;
+
+		LLControlVariable* ctrl = gSavedSettings.getControl("NearbyToastLifeTime").get();
+		if (ctrl)
+		{
+			ctrl->getSignal()->connect(boost::bind(&LLNearbyChatScreenChannel::updateToastsLifetime, this));
+		}
+
+		ctrl = gSavedSettings.getControl("NearbyToastFadingTime").get();
+		if (ctrl)
+		{
+			ctrl->getSignal()->connect(boost::bind(&LLNearbyChatScreenChannel::updateToastFadingTime, this));
+		}
 	}
 
 	void addNotification	(LLSD& notification);
@@ -109,13 +121,26 @@ protected:
 		if (!toast) return;
 		LL_DEBUGS("NearbyChat") << "Pooling toast" << llendl;
 		toast->setVisible(FALSE);
-		toast->stopTimer();
+		toast->stopFading();
 		toast->setIsHidden(true);
+
+		// Nearby chat toasts that are hidden, not destroyed. They are collected to the toast pool, so that
+		// they can be used next time, this is done for performance. But if the toast lifetime was changed
+		// (from preferences floater (STORY-36)) while it was shown (at this moment toast isn't in the pool yet)
+		// changes don't take affect.
+		// So toast's lifetime should be updated each time it's added to the pool. Otherwise viewer would have
+		// to be restarted so that changes take effect.
+		toast->setLifetime(gSavedSettings.getS32("NearbyToastLifeTime"));
+		toast->setFadingTime(gSavedSettings.getS32("NearbyToastFadingTime"));
 		m_toast_pool.push_back(toast->getHandle());
 	}
 
 	void	createOverflowToast(S32 bottom, F32 timer);
 
+	void 	updateToastsLifetime();
+
+	void	updateToastFadingTime();
+
 	create_toast_panel_callback_t m_create_toast_panel_callback_t;
 
 	bool	createPoolToast();
@@ -205,6 +230,27 @@ void LLNearbyChatScreenChannel::onToastFade(LLToast* toast)
 	arrangeToasts();
 }
 
+void LLNearbyChatScreenChannel::updateToastsLifetime()
+{
+	S32 seconds = gSavedSettings.getS32("NearbyToastLifeTime");
+	toast_list_t::iterator it;
+
+	for(it = m_toast_pool.begin(); it != m_toast_pool.end(); ++it)
+	{
+		(*it).get()->setLifetime(seconds);
+	}
+}
+
+void LLNearbyChatScreenChannel::updateToastFadingTime()
+{
+	S32 seconds = gSavedSettings.getS32("NearbyToastFadingTime");
+	toast_list_t::iterator it;
+
+	for(it = m_toast_pool.begin(); it != m_toast_pool.end(); ++it)
+	{
+		(*it).get()->setFadingTime(seconds);
+	}
+}
 
 bool	LLNearbyChatScreenChannel::createPoolToast()
 {
@@ -250,7 +296,7 @@ void LLNearbyChatScreenChannel::addNotification(LLSD& notification)
 			{
 				panel->addMessage(notification);
 				toast->reshapeToPanel();
-				toast->resetTimer();
+				toast->startFading();
 	  
 				arrangeToasts();
 				return;
@@ -295,7 +341,7 @@ void LLNearbyChatScreenChannel::addNotification(LLSD& notification)
 	panel->init(notification);
 
 	toast->reshapeToPanel();
-	toast->resetTimer();
+	toast->startFading();
 	
 	m_active_toasts.push_back(toast->getHandle());
 
@@ -325,9 +371,9 @@ void LLNearbyChatScreenChannel::arrangeToasts()
 
 int sort_toasts_predicate(LLHandle<LLToast> first, LLHandle<LLToast> second)
 {
-	F32 v1 = first.get()->getTimer()->getEventTimer().getElapsedTimeF32();
-	F32 v2 = second.get()->getTimer()->getEventTimer().getElapsedTimeF32();
-	return v1 < v2;
+	F32 v1 = first.get()->getTimeLeftToLive();
+	F32 v2 = second.get()->getTimeLeftToLive();
+	return v1 > v2;
 }
 
 void LLNearbyChatScreenChannel::showToastsBottom()
diff --git a/indra/newview/llscreenchannel.cpp b/indra/newview/llscreenchannel.cpp
index 18c9ac28c1..61f4897ed0 100644
--- a/indra/newview/llscreenchannel.cpp
+++ b/indra/newview/llscreenchannel.cpp
@@ -369,7 +369,7 @@ void LLScreenChannel::loadStoredToastsToChannel()
 	for(it = mStoredToastList.begin(); it != mStoredToastList.end(); ++it)
 	{
 		(*it).toast->setIsHidden(false);
-		(*it).toast->resetTimer();
+		(*it).toast->startFading();
 		mToastList.push_back((*it));
 	}
 
@@ -394,7 +394,7 @@ void LLScreenChannel::loadStoredToastByNotificationIDToChannel(LLUUID id)
 	}
 
 	toast->setIsHidden(false);
-	toast->resetTimer();
+	toast->startFading();
 	mToastList.push_back((*it));
 
 	redrawToasts();
@@ -477,7 +477,7 @@ void LLScreenChannel::modifyToastByNotificationID(LLUUID id, LLPanel* panel)
 		toast->removeChild(old_panel);
 		delete old_panel;
 		toast->insertPanel(panel);
-		toast->resetTimer();
+		toast->startFading();
 		redrawToasts();
 	}
 }
@@ -588,7 +588,7 @@ void LLScreenChannel::showToastsBottom()
 		mHiddenToastsNum = 0;
 		for(; it != mToastList.rend(); it++)
 		{
-			(*it).toast->stopTimer();
+			(*it).toast->stopFading();
 			(*it).toast->setVisible(FALSE);
 			mHiddenToastsNum++;
 		}
diff --git a/indra/newview/lltoast.cpp b/indra/newview/lltoast.cpp
index c3090cb1fc..8176b8c1f9 100644
--- a/indra/newview/lltoast.cpp
+++ b/indra/newview/lltoast.cpp
@@ -35,6 +35,13 @@
 
 using namespace LLNotificationsUI;
 
+//--------------------------------------------------------------------------
+LLToastLifeTimer::LLToastLifeTimer(LLToast* toast, F32 period)
+	: mToast(toast),
+	  LLEventTimer(period)
+{
+}
+
 /*virtual*/
 BOOL LLToastLifeTimer::tick()
 {
@@ -45,6 +52,38 @@ BOOL LLToastLifeTimer::tick()
 	return FALSE;
 }
 
+void LLToastLifeTimer::stop()
+{
+	mEventTimer.stop();
+}
+
+void LLToastLifeTimer::start()
+{
+	mEventTimer.start();
+}
+
+void LLToastLifeTimer::restart()
+{
+	mEventTimer.reset();
+}
+
+BOOL LLToastLifeTimer::getStarted()
+{
+	return mEventTimer.getStarted();
+}
+
+void LLToastLifeTimer::setPeriod(F32 period)
+{
+	mPeriod = period;
+}
+
+F32 LLToastLifeTimer::getRemainingTimeF32()
+{
+	F32 et = mEventTimer.getElapsedTimeF32();
+	if (!getStarted() || et > mPeriod) return 0.0f;
+	return mPeriod - et;
+}
+
 //--------------------------------------------------------------------------
 LLToast::Params::Params() 
 :	can_fade("can_fade", true),
@@ -73,7 +112,8 @@ LLToast::LLToast(const LLToast::Params& p)
 	mIsHidden(false),
 	mHideBtnPressed(false),
 	mIsTip(p.is_tip),
-	mWrapperPanel(NULL)
+	mWrapperPanel(NULL),
+	mIsTransparent(false)
 {
 	mTimer.reset(new LLToastLifeTimer(this, p.lifetime_secs));
 
@@ -143,6 +183,7 @@ LLToast::~LLToast()
 void LLToast::hide()
 {
 	setVisible(FALSE);
+	setTransparentState(false);
 	mTimer->stop();
 	mIsHidden = true;
 	mOnFadeSignal(this); 
@@ -166,6 +207,16 @@ void LLToast::onFocusReceived()
 	}
 }
 
+void LLToast::setLifetime(S32 seconds)
+{
+	mToastLifetime = seconds;
+}
+
+void LLToast::setFadingTime(S32 seconds)
+{
+	mToastFadingTime = seconds;
+}
+
 S32 LLToast::getTopPad()
 {
 	if(mWrapperPanel)
@@ -195,13 +246,46 @@ void LLToast::setCanFade(bool can_fade)
 //--------------------------------------------------------------------------
 void LLToast::expire()
 {
-	// if toast has fade property - hide it
-	if(mCanFade)
+	if (mCanFade)
 	{
-		hide();
+		if (mIsTransparent)
+		{
+			hide();
+		}
+		else
+		{
+			setTransparentState(true);
+			mTimer->restart();
+		}
 	}
 }
 
+void LLToast::setTransparentState(bool transparent)
+{
+	setBackgroundOpaque(!transparent);
+	mIsTransparent = transparent;
+
+	if (transparent)
+	{
+		mTimer->setPeriod(mToastFadingTime);
+	}
+	else
+	{
+		mTimer->setPeriod(mToastLifetime);
+	}
+}
+
+F32 LLToast::getTimeLeftToLive()
+{
+	F32 time_to_live = mTimer->getRemainingTimeF32();
+
+	if (!mIsTransparent)
+	{
+		time_to_live += mToastFadingTime;
+	}
+
+	return time_to_live;
+}
 //--------------------------------------------------------------------------
 
 void LLToast::reshapeToPanel()
@@ -245,13 +329,6 @@ void LLToast::draw()
 			drawChild(mHideBtn);
 		}
 	}
-
-	// if timer started and remaining time <= fading time
-	if (mTimer->getStarted() && (mToastLifetime
-			- mTimer->getEventTimer().getElapsedTimeF32()) <= mToastFadingTime)
-	{
-		setBackgroundOpaque(FALSE);
-	}
 }
 
 //--------------------------------------------------------------------------
@@ -267,6 +344,11 @@ void LLToast::setVisible(BOOL show)
 		return;
 	}
 
+	if (show && getVisible())
+	{
+		return;
+	}
+
 	if(show)
 	{
 		setBackgroundOpaque(TRUE);
@@ -372,7 +454,8 @@ void LLNotificationsUI::LLToast::stopFading()
 {
 	if(mCanFade)
 	{
-		stopTimer();
+		setTransparentState(false);
+		mTimer->stop();
 	}
 }
 
@@ -380,7 +463,8 @@ void LLNotificationsUI::LLToast::startFading()
 {
 	if(mCanFade)
 	{
-		resetTimer();
+		setTransparentState(false);
+		mTimer->start();
 	}
 }
 
diff --git a/indra/newview/lltoast.h b/indra/newview/lltoast.h
index 0a96c092a0..fb534561c9 100644
--- a/indra/newview/lltoast.h
+++ b/indra/newview/lltoast.h
@@ -49,14 +49,16 @@ class LLToast;
 class LLToastLifeTimer: public LLEventTimer
 {
 public:
-	LLToastLifeTimer(LLToast* toast, F32 period) : mToast(toast), LLEventTimer(period){}
+	LLToastLifeTimer(LLToast* toast, F32 period);
 
 	/*virtual*/
 	BOOL tick();
-	void stop() { mEventTimer.stop(); }
-	void start() { mEventTimer.start(); }
-	void restart() {mEventTimer.reset(); }
-	BOOL getStarted() { return mEventTimer.getStarted(); }
+	void stop();
+	void start();
+	void restart();
+	BOOL getStarted();
+	void setPeriod(F32 period);
+	F32 getRemainingTimeF32();
 
 	LLTimer&  getEventTimer() { return mEventTimer;}
 private :
@@ -80,8 +82,14 @@ public:
 		Optional<LLUUID>				notif_id,	 //notification ID
 										session_id;	 //im session ID
 		Optional<LLNotificationPtr>		notification;
-		Optional<F32>					lifetime_secs,
-										fading_time_secs; // Number of seconds while a toast is fading
+
+		//NOTE: Life time of a toast (i.e. period of time from the moment toast was shown
+		//till the moment when toast was hidden) is the sum of lifetime_secs and fading_time_secs.
+
+		Optional<F32>					lifetime_secs, // Number of seconds while a toast is non-transparent
+										fading_time_secs; // Number of seconds while a toast is transparent
+
+
 		Optional<toast_callback_t>		on_delete_toast,
 										on_mouse_enter;
 		Optional<bool>					can_fade,
@@ -125,10 +133,8 @@ public:
 	LLPanel* getPanel() { return mPanel; }
 	// enable/disable Toast's Hide button
 	void setHideButtonEnabled(bool enabled);
-	// 
-	void resetTimer() { mTimer->start(); }
 	//
-	void stopTimer() { mTimer->stop(); }
+	F32 getTimeLeftToLive();
 	//
 	LLToastLifeTimer* getTimer() { return mTimer.get();}
 	//
@@ -144,6 +150,10 @@ public:
 
 	/*virtual*/ void onFocusReceived();
 
+	void setLifetime(S32 seconds);
+
+	void setFadingTime(S32 seconds);
+
 	/**
 	 * Returns padding between floater top and wrapper_panel top.
 	 * This padding should be taken into account when positioning or reshaping toasts
@@ -196,7 +206,9 @@ private:
 
 	void onToastMouseLeave();
 
-	void	expire();
+	void expire();
+
+	void setTransparentState(bool transparent);
 
 	LLUUID				mNotificationID;
 	LLUUID				mSessionID;
@@ -222,6 +234,7 @@ private:
 	bool		mHideBtnPressed;
 	bool		mIsHidden;  // this flag is TRUE when a toast has faded or was hidden with (x) button (EXT-1849)
 	bool		mIsTip;
+	bool		mIsTransparent;
 
 	commit_signal_t mToastMouseEnterSignal;
 	commit_signal_t mToastMouseLeaveSignal;
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml
index 31e160ec33..c009fd2931 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml
@@ -308,6 +308,38 @@
      width="95">
         URLs
     </text>
+    <spinner
+     control_name="NearbyToastLifeTime"
+     decimal_digits="0"
+     follows="left|top"
+     height="23"
+     increment="1"
+     initial_value="23"
+     label="Nearby chat toasts life time:"
+     label_width="190"
+     layout="topleft"
+     left="290"
+     max_val="60"
+     min_val="1"
+     name="nearby_toasts_lifetime"
+     top_pad="33"
+     width="210" />
+    <spinner
+     control_name="NearbyToastFadingTime"
+     decimal_digits="0"
+     follows="left|top"
+     height="23"
+     increment="1"
+     initial_value="3"
+     label="Nearby chat toasts fading time:"
+     label_width="190"
+     layout="topleft"
+     left_delta="00"
+     max_val="60"
+     min_val="0"
+     name="nearby_toasts_fadingtime"
+     top_pad="15"
+     width="210" />
     <check_box
      control_name="PlayTypingAnim"
      height="16"
@@ -316,7 +348,7 @@
      layout="topleft"
      left="30"
      name="play_typing_animation"
-     top_pad="32"
+     top="205"
      width="400" />
     <check_box
      enabled="false"
-- 
cgit v1.2.3


From 24d932aa829d9bfda691463e8079278b951c50ed Mon Sep 17 00:00:00 2001
From: Paul Guslisty <pguslisty@productengine.com>
Date: Tue, 26 Oct 2010 19:20:09 +0300
Subject: STORM-354 FIXED [TRUNCATION] many langs - build tools "Click to:"
 combobox

- Increased width of label and decreased width of checkbox in EN locale

- Removed overrides of width dimensions in EN, ES, NL, FR locales
---
 indra/newview/skins/default/xui/en/floater_tools.xml | 4 ++--
 indra/newview/skins/default/xui/es/floater_tools.xml | 4 ++--
 indra/newview/skins/default/xui/fr/floater_tools.xml | 2 +-
 indra/newview/skins/default/xui/nl/floater_tools.xml | 2 +-
 4 files changed, 6 insertions(+), 6 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml
index 4c508035be..e25cef1ef7 100644
--- a/indra/newview/skins/default/xui/en/floater_tools.xml
+++ b/indra/newview/skins/default/xui/en/floater_tools.xml
@@ -965,7 +965,7 @@
              top_pad="10"
              left="10"
              name="label click action"
-             width="98">
+             width="118">
                 Click to:
             </text>
             <combo_box
@@ -973,7 +973,7 @@
              height="23"
              layout="topleft"
              name="clickaction"
-             width="168"
+             width="148"
              left_pad="0">
                 <combo_box.item
                  label="Touch  (default)"
diff --git a/indra/newview/skins/default/xui/es/floater_tools.xml b/indra/newview/skins/default/xui/es/floater_tools.xml
index 9867f1b575..249e9e0913 100644
--- a/indra/newview/skins/default/xui/es/floater_tools.xml
+++ b/indra/newview/skins/default/xui/es/floater_tools.xml
@@ -186,10 +186,10 @@
 			<button label="Configurar..." label_selected="Configurar..." name="button set group" tool_tip="Elige un grupo con el que compartir los permisos de este objeto"/>
 			<check_box label="Compartir" name="checkbox share with group" tool_tip="Permite que todos los miembros del grupo compartan tus permisos de modificación en este objeto. Debes transferirlo para activar las restricciones según los roles."/>
 			<button label="Transferir" label_selected="Transferir" name="button deed" tool_tip="La transferencia entrega este objeto con los permisos del próximo propietario. Los objetos compartidos por el grupo pueden ser transferidos por un oficial del grupo."/>
-			<text name="label click action" width="180">
+			<text name="label click action">
 				Al tocarlo:
 			</text>
-			<combo_box name="clickaction" width="192">
+			<combo_box name="clickaction">
 				<combo_box.item label="Tocarlo (por defecto)" name="Touch/grab(default)"/>
 				<combo_box.item label="Sentarse en el objeto" name="Sitonobject"/>
 				<combo_box.item label="Comprar el objeto" name="Buyobject"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_tools.xml b/indra/newview/skins/default/xui/fr/floater_tools.xml
index 666aaa8147..8a128c0308 100644
--- a/indra/newview/skins/default/xui/fr/floater_tools.xml
+++ b/indra/newview/skins/default/xui/fr/floater_tools.xml
@@ -189,7 +189,7 @@
 			<text name="label click action">
 				Cliquer pour :
 			</text>
-			<combo_box name="clickaction" width="178">
+			<combo_box name="clickaction">
 				<combo_box.item label="Toucher (par défaut)" name="Touch/grab(default)"/>
 				<combo_box.item label="S&apos;asseoir sur l&apos;objet" name="Sitonobject"/>
 				<combo_box.item label="Acheter l&apos;objet" name="Buyobject"/>
diff --git a/indra/newview/skins/default/xui/nl/floater_tools.xml b/indra/newview/skins/default/xui/nl/floater_tools.xml
index 212cac0a5b..b72e4d4681 100644
--- a/indra/newview/skins/default/xui/nl/floater_tools.xml
+++ b/indra/newview/skins/default/xui/nl/floater_tools.xml
@@ -144,7 +144,7 @@
 			<text name="label click action">
 				Wanneer links-geklikt:
 			</text>
-			<combo_box name="clickaction" width="178">
+			<combo_box name="clickaction">
 				<combo_box.item name="Touch/grab(default)" label="Aanraken/pakken (standaard)"
 				/>
 				<combo_box.item name="Sitonobject" label="Zit op object"
-- 
cgit v1.2.3


From 217dd122947b90be74ab748e1fb3368bee2eb04d Mon Sep 17 00:00:00 2001
From: Paul Guslisty <pguslisty@productengine.com>
Date: Tue, 26 Oct 2010 19:57:49 +0300
Subject: STORM-190 FIXED [TRUNCATION] many langs -- "Next Owner:" in
 floatear_bulk_perms.xml

- Increased width of the floater and spacing between controls for which truncation occurs

- Deleted wrong override for width dimension in JA locale
---
 .../skins/default/xui/en/floater_bulk_perms.xml    | 22 +++++++++++-----------
 .../skins/default/xui/ja/floater_bulk_perms.xml    |  2 +-
 2 files changed, 12 insertions(+), 12 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/floater_bulk_perms.xml b/indra/newview/skins/default/xui/en/floater_bulk_perms.xml
index 457142f11c..4e0cfb0cd4 100644
--- a/indra/newview/skins/default/xui/en/floater_bulk_perms.xml
+++ b/indra/newview/skins/default/xui/en/floater_bulk_perms.xml
@@ -7,7 +7,7 @@
  name="floaterbulkperms"
  help_topic="floaterbulkperms"
  title="EDIT CONTENT PERMISSIONS"
- width="300">
+ width="410">
     <floater.string
      name="nothing_to_modify_text">
         Selection contains no editable contents.
@@ -71,7 +71,7 @@
      control_name="BulkChangeIncludeGestures"
      height="16"
      name="check_gesture"
-     left="65"
+     left="95"
      width="16"
      top="25" />
     <icon
@@ -87,7 +87,7 @@
      height="16"
      layout="topleft"
      name="check_notecard"
-     left="65"
+     left="95"
      width="16"
      top_pad="5" />
     <icon
@@ -102,7 +102,7 @@
      control_name="BulkChangeIncludeObjects"
      height="16"
      name="check_object"
-     left="65"
+     left="95"
      top_pad="5"
      width="16" />
    <icon
@@ -117,7 +117,7 @@
      height="16"
      name="check_script"
      top="25"
-     left="120"
+     left="180"
      width="16"
      />
     <icon
@@ -133,7 +133,7 @@
      height="16"
      name="check_sound"
      top_pad="5"
-     left="120"
+     left="180"
      width="16" />
     <icon
      height="16"
@@ -147,7 +147,7 @@
      height="16"
      name="check_texture"
      top_pad="5"
-     left="120"
+     left="180"
      width="16" />
     <icon
      height="16"
@@ -162,7 +162,7 @@
     layout="topleft"
    name="check_all"
      label="√ All"
-     left="180"
+     left="290"
      top="26"
      width="115">
       <button.commit_callback
@@ -221,7 +221,7 @@
      height="28"
      layout="topleft"
      name="AnyoneLabel"
-     left="104"
+     left="124"
      top="110"
      width="92"
      word_wrap="true">
@@ -243,7 +243,7 @@
      layout="topleft"
      name="NextOwnerLabel"
      top="110"
-     left="189"
+     left="275"
      width="92"
      word_wrap="true">
         Next owner:
@@ -292,7 +292,7 @@
      height="23"
      label="OK"
      layout="topleft"
-     left="95"
+     left="205"
      name="apply"
      top_pad="10"
      width="90">
diff --git a/indra/newview/skins/default/xui/ja/floater_bulk_perms.xml b/indra/newview/skins/default/xui/ja/floater_bulk_perms.xml
index be24960c6e..d8d0164618 100644
--- a/indra/newview/skins/default/xui/ja/floater_bulk_perms.xml
+++ b/indra/newview/skins/default/xui/ja/floater_bulk_perms.xml
@@ -43,7 +43,7 @@
 		全員:
 	</text>
 	<check_box label="コピー" name="everyone_copy"/>
-	<text name="NextOwnerLabel" left="160">
+	<text name="NextOwnerLabel">
 		次の所有者:
 	</text>
 	<check_box label="修正" name="next_owner_modify"/>
-- 
cgit v1.2.3


From ff8f1701eff57c9d836e86970ca951b8c75cb0dd Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Tue, 26 Oct 2010 20:55:31 +0300
Subject: STORM-335 FIXED Made group name clickable in About Land > General
 tab.

Technical notes:
If you set the "enabled" param of a textbox to "false", that will prevent the widget from receiving mouse events.
However, if a text box is initially enabled and then gets disabled with setEnabled(FALSE), it will remain clickable.
This is a long-standing design problem with "enabled" flag being intermixed with "read-only".
I'm working around it by enabling the group name textbox initially, thus making it clickable.
---
 indra/newview/skins/default/xui/en/floater_about_land.xml | 1 -
 1 file changed, 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/floater_about_land.xml b/indra/newview/skins/default/xui/en/floater_about_land.xml
index 89ed16e7c2..3b7a5aa20c 100644
--- a/indra/newview/skins/default/xui/en/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/en/floater_about_land.xml
@@ -255,7 +255,6 @@
             </text>
    <!--TODO: HOOK UP GROUP ICON-->
             <text
-             enabled="false"
              follows="left|top"
              height="16"
              left_pad="2"
-- 
cgit v1.2.3


From 01e5519323415b331fa3202f95d63e3158b199ad Mon Sep 17 00:00:00 2001
From: Merov Linden <merov@lindenlab.com>
Date: Tue, 26 Oct 2010 11:28:39 -0700
Subject: STORM-454 : Tweak the teleport_coordinate_z width to better align in
 world map UI

---
 indra/newview/skins/default/xui/en/floater_world_map.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/floater_world_map.xml b/indra/newview/skins/default/xui/en/floater_world_map.xml
index 34c091b0da..019e7cd032 100644
--- a/indra/newview/skins/default/xui/en/floater_world_map.xml
+++ b/indra/newview/skins/default/xui/en/floater_world_map.xml
@@ -591,7 +591,7 @@
         max_val="4096"
         min_val="0"
         name="teleport_coordinate_z"
-        width="56" >
+        width="55" >
         <spinner.commit_callback
           function="WMap.Coordinates" />
       </spinner>
-- 
cgit v1.2.3


From 60758b214ec1db7f1fe30607dd99d53d8b21b356 Mon Sep 17 00:00:00 2001
From: Dave Parks <davep@lindenlab.com>
Date: Tue, 26 Oct 2010 14:31:20 -0500
Subject: Potential fix for crash in renderBloom.

Reviewed by Seraph.
---
 indra/newview/llviewerdisplay.cpp | 21 ++++++++++++++++-----
 1 file changed, 16 insertions(+), 5 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp
index 26b528f7c0..061c8d4131 100644
--- a/indra/newview/llviewerdisplay.cpp
+++ b/indra/newview/llviewerdisplay.cpp
@@ -218,6 +218,16 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 	LLMemType mt_render(LLMemType::MTYPE_RENDER);
 	LLFastTimer t(FTM_RENDER);
 
+	if (gResizeScreenTexture)
+	{ //skip render on frames where screen texture is resizing
+		gGL.flush();
+		glClear(GL_COLOR_BUFFER_BIT);
+		gViewerWindow->mWindow->swapBuffers();
+		gResizeScreenTexture = FALSE;
+		gPipeline.resizeScreenTexture();
+		return;
+	}
+
 	if (LLPipeline::sRenderFrameTest)
 	{
 		send_agent_pause();
@@ -531,6 +541,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 	gViewerWindow->setup3DViewport();
 
 	gPipeline.resetFrameStats();	// Reset per-frame statistics.
+	
 	if (!gDisconnected)
 	{
 		LLMemType mt_du(LLMemType::MTYPE_DISPLAY_UPDATE);
@@ -641,11 +652,11 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 				LLVertexBuffer::clientCopy(0.016);
 			}
 
-			if (gResizeScreenTexture)
-			{
-				gResizeScreenTexture = FALSE;
-				gPipeline.resizeScreenTexture();
-			}
+			//if (gResizeScreenTexture)
+			//{
+			//	gResizeScreenTexture = FALSE;
+			//	gPipeline.resizeScreenTexture();
+			//}
 
 			gGL.setColorMask(true, true);
 			glClearColor(0,0,0,0);
-- 
cgit v1.2.3


From ffe475e96e9cdd2bb3c66fd3ffeef2b4d64bc33b Mon Sep 17 00:00:00 2001
From: Merov Linden <merov@lindenlab.com>
Date: Tue, 26 Oct 2010 16:08:11 -0700
Subject: STORM-418 : Suppress menu items Save to XML and Load from XML from
 the Develop > XUI menu

---
 indra/newview/llviewermenu.cpp                     | 73 ----------------------
 indra/newview/skins/default/xui/en/menu_viewer.xml | 12 ----
 2 files changed, 85 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 68935d536b..1778eaed68 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -221,8 +221,6 @@ BOOL check_show_xui_names(void *);
 // Debug UI
 
 void handle_buy_currency_test(void*);
-void handle_save_to_xml(void*);
-void handle_load_from_xml(void*);
 
 void handle_god_mode(void*);
 
@@ -1384,37 +1382,6 @@ class LLAdvancedCheckDebugWindowProc : public view_listener_t
 
 // ------------------------------XUI MENU ---------------------------
 
-//////////////////////
-// LOAD UI FROM XML //
-//////////////////////
-
-
-class LLAdvancedLoadUIFromXML : public view_listener_t
-{
-	bool handleEvent(const LLSD& userdata)
-	{
-		handle_load_from_xml(NULL);
-		return true;
-}
-};
-
-
-
-////////////////////
-// SAVE UI TO XML //
-////////////////////
-
-
-class LLAdvancedSaveUIToXML : public view_listener_t
-{
-	bool handleEvent(const LLSD& userdata)
-	{
-		handle_save_to_xml(NULL);
-		return true;
-}
-};
-
-
 class LLAdvancedSendTestIms : public view_listener_t
 {
 	bool handleEvent(const LLSD& userdata)
@@ -7188,44 +7155,6 @@ const LLRect LLViewerMenuHolderGL::getMenuRect() const
 	return LLRect(0, getRect().getHeight() - MENU_BAR_HEIGHT, getRect().getWidth(), STATUS_BAR_HEIGHT);
 }
 
-void handle_save_to_xml(void*)
-{
-	LLFloater* frontmost = gFloaterView->getFrontmost();
-	if (!frontmost)
-	{
-        LLNotificationsUtil::add("NoFrontmostFloater");
-		return;
-	}
-
-	std::string default_name = "floater_";
-	default_name += frontmost->getTitle();
-	default_name += ".xml";
-
-	LLStringUtil::toLower(default_name);
-	LLStringUtil::replaceChar(default_name, ' ', '_');
-	LLStringUtil::replaceChar(default_name, '/', '_');
-	LLStringUtil::replaceChar(default_name, ':', '_');
-	LLStringUtil::replaceChar(default_name, '"', '_');
-
-	LLFilePicker& picker = LLFilePicker::instance();
-	if (picker.getSaveFile(LLFilePicker::FFSAVE_XML, default_name))
-	{
-		std::string filename = picker.getFirstFile();
-		LLUICtrlFactory::getInstance()->saveToXML(frontmost, filename);
-	}
-}
-
-void handle_load_from_xml(void*)
-{
-	LLFilePicker& picker = LLFilePicker::instance();
-	if (picker.getOpenFile(LLFilePicker::FFLOAD_XML))
-	{
-		std::string filename = picker.getFirstFile();
-		LLFloater* floater = new LLFloater(LLSD());
-		floater->buildFromFile(filename);
-	}
-}
-
 void handle_web_browser_test(const LLSD& param)
 {
 	std::string url = param.asString();
@@ -8011,8 +7940,6 @@ void initialize_menus()
 
 	// Advanced > XUI
 	commit.add("Advanced.ReloadColorSettings", boost::bind(&LLUIColorTable::loadFromSettings, LLUIColorTable::getInstance()));
-	view_listener_t::addMenu(new LLAdvancedLoadUIFromXML(), "Advanced.LoadUIFromXML");
-	view_listener_t::addMenu(new LLAdvancedSaveUIToXML(), "Advanced.SaveUIToXML");
 	view_listener_t::addMenu(new LLAdvancedToggleXUINames(), "Advanced.ToggleXUINames");
 	view_listener_t::addMenu(new LLAdvancedCheckXUINames(), "Advanced.CheckXUINames");
 	view_listener_t::addMenu(new LLAdvancedSendTestIms(), "Advanced.SendTestIMs");
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index ce628d93b5..43058a5ee3 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -2761,18 +2761,6 @@
                  function="Floater.Show"
                  parameter="font_test" />
             </menu_item_call>
-            <menu_item_call
-             label="Load from XML"
-             name="Load from XML">
-                <menu_item_call.on_click
-                 function="Advanced.LoadUIFromXML" />
-            </menu_item_call>
-            <menu_item_call
-             label="Save to XML"
-             name="Save to XML">
-                <menu_item_call.on_click
-                 function="Advanced.SaveUIToXML" />
-            </menu_item_call>
             <menu_item_check
              label="Show XUI Names"
              name="Show XUI Names">
-- 
cgit v1.2.3


From 931584d4bfa2bd74baabb55e1212829e69993175 Mon Sep 17 00:00:00 2001
From: Seth ProductEngine <slitovchuk@productengine.com>
Date: Wed, 27 Oct 2010 02:16:59 +0300
Subject: Backed out changeset: 330d0e96d58d STORM-296

---
 indra/newview/llplacesinventorypanel.cpp | 18 ------------------
 indra/newview/llplacesinventorypanel.h   |  6 ------
 2 files changed, 24 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llplacesinventorypanel.cpp b/indra/newview/llplacesinventorypanel.cpp
index 408270a1a0..29e262199e 100644
--- a/indra/newview/llplacesinventorypanel.cpp
+++ b/indra/newview/llplacesinventorypanel.cpp
@@ -205,24 +205,6 @@ BOOL LLPlacesFolderView::handleRightMouseDown(S32 x, S32 y, MASK mask)
 	return LLFolderView::handleRightMouseDown(x, y, mask);
 }
 
-BOOL LLPlacesFolderView::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
-										   EDragAndDropType cargo_type,
-										   void* cargo_data,
-										   EAcceptance* accept,
-										   std::string& tooltip_msg)
-{
-	// Don't accept anything except landmarks and folders to be dropped
-	// in places folder view. See STORM-296.
-	if (cargo_type != DAD_LANDMARK && cargo_type != DAD_CATEGORY)
-	{
-		*accept = ACCEPT_NO;
-		return FALSE;
-	}
-
-	return LLFolderView::handleDragAndDrop(x, y, mask, drop, cargo_type, cargo_data,
-										   accept, tooltip_msg);
-}
-
 void LLPlacesFolderView::setupMenuHandle(LLInventoryType::EType asset_type, LLHandle<LLView> menu_handle)
 {
 	mMenuHandlesByInventoryType[asset_type] = menu_handle;
diff --git a/indra/newview/llplacesinventorypanel.h b/indra/newview/llplacesinventorypanel.h
index a44776d18b..6641871a0b 100644
--- a/indra/newview/llplacesinventorypanel.h
+++ b/indra/newview/llplacesinventorypanel.h
@@ -70,12 +70,6 @@ public:
 	 */
 	/*virtual*/ BOOL handleRightMouseDown( S32 x, S32 y, MASK mask );
 
-	/*virtual*/ BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
-									   EDragAndDropType cargo_type,
-									   void* cargo_data,
-									   EAcceptance* accept,
-									   std::string& tooltip_msg);
-
 	void setupMenuHandle(LLInventoryType::EType asset_type, LLHandle<LLView> menu_handle);
 
 	void setParentLandmarksPanel(LLLandmarksPanel* panel)
-- 
cgit v1.2.3


From 7c89e565b373803b64cabaac3695ac3e93469962 Mon Sep 17 00:00:00 2001
From: Wolfpup Lowenhar <wolfpup67@earthlink.net>
Date: Tue, 26 Oct 2010 20:02:07 -0400
Subject: This is the setting of the core file name date stamp code  and
 settings files for  Chat, Group and IM Logs.

--HG--
branch : storm-102
---
 .../newview/app_settings/settings_per_account.xml  | 12 ++++-
 indra/newview/llfloaterpreference.cpp              |  2 +-
 indra/newview/lllogchat.cpp                        | 62 ++++++++++++++++++++--
 indra/newview/lllogchat.h                          |  5 ++
 .../default/xui/en/panel_preferences_privacy.xml   | 12 ++++-
 5 files changed, 87 insertions(+), 6 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/settings_per_account.xml b/indra/newview/app_settings/settings_per_account.xml
index dc76a4e518..ab702e49e1 100644
--- a/indra/newview/app_settings/settings_per_account.xml
+++ b/indra/newview/app_settings/settings_per_account.xml
@@ -110,7 +110,17 @@
         <key>Value</key>
             <string>00000000-0000-0000-0000-000000000000</string>
     </map>
-
+    <key>LogFileNamewithDate</key>
+      <map>
+        <key>Comment</key>
+        <string>Add Date Stamp to chat and IM Logs with format chat-YYYY-MM-DD and 'IM file name'-YYYY-MM. To view old logs goto ..\Second Life\[login name]</string>
+        <key>Persist</key>
+        <integer>1</integer>
+        <key>Type</key>
+        <string>Boolean</string>
+        <key>Value</key>
+        <integer>1</integer>
+      </map>
     <!-- Settings below are for back compatibility only.
     They are not used in current viewer anymore. But they can't be removed to avoid
     influence on previous versions of the viewer in case of settings are not used or default value
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index 2bea3d37ff..a43f60f0f1 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -1246,7 +1246,7 @@ void LLFloaterPreference::setPersonalInfo(const std::string& visibility, bool im
 	getChildView("show_timestamps_check_im")->setEnabled(TRUE);
 	getChildView("log_path_string")->setEnabled(FALSE);// LineEditor becomes readonly in this case.
 	getChildView("log_path_button")->setEnabled(TRUE);
-	
+	childEnable("logfile_name_datestamp");	
 	std::string display_email(email);
 	getChild<LLUICtrl>("email_address")->setValue(display_email);
 
diff --git a/indra/newview/lllogchat.cpp b/indra/newview/lllogchat.cpp
index 8c70b1e973..0e557cba5d 100644
--- a/indra/newview/lllogchat.cpp
+++ b/indra/newview/lllogchat.cpp
@@ -182,9 +182,25 @@ private:
 //static
 std::string LLLogChat::makeLogFileName(std::string filename)
 {
+    if( gSavedPerAccountSettings.getBOOL("LogFileNamewithDate") )
+	{
+		time_t now;
+		time(&now);
+		char dbuffer[20];		/* Flawfinder: ignore */
+		if (filename == "chat")
+		{
+			strftime(dbuffer, 20, "-%Y-%m-%d", localtime(&now));
+		}
+		else
+		{
+			strftime(dbuffer, 20, "-%Y-%m", localtime(&now));
+		}
+		filename += dbuffer;
+	}
 	filename = cleanFileName(filename);
 	filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_ACCOUNT_CHAT_LOGS,filename);
 	filename += ".txt";
+	LL_INFOS("") << "Current:" << filename << LL_ENDL;/* uncomment if you want to verify step, delete on commit */
 	return filename;
 }
 
@@ -355,9 +371,21 @@ void LLLogChat::loadAllHistory(const std::string& file_name, std::list<LLSD>& me
 		return ;
 	}
 
-	LLFILE* fptr = LLFile::fopen(makeLogFileName(file_name), "r");		/*Flawfinder: ignore*/
-	if (!fptr) return;	//No previous conversation with this name.
-
+	LLFILE* fptr = LLFile::fopen(makeLogFileName(file_name), "r");/*Flawfinder: ignore*/
+	// LL_INFOS("") << "Current:" << file_name << LL_ENDL;/* uncomment if you want to verify step, delete on commit */
+	if (!fptr)
+    {
+		fptr = LLFile::fopen(oldLogFileName(file_name), "r");/*Flawfinder: ignore*/
+        //LL_INFOS("") << "Old    :" << file_name << LL_ENDL;/* uncomment if you want to verify step, delete on commit */
+        if (!fptr)
+        {
+			fptr =LLFile::fopen(ndsLogFileName(file_name), "r");/*Flawfinder:ignore*/
+            //LL_INFOS("") << "Orginal:" << file_name << LL_ENDL;/* uncomment if you want to verify step, delete on commit */
+            if (!fptr) return;      //No previous conversation with this name.
+        }
+	}
+ 
+    LL_INFOS("") << "Reading:" << file_name << LL_ENDL;
 	char buffer[LOG_RECALL_SIZE];		/*Flawfinder: ignore*/
 	char *bptr;
 	S32 len;
@@ -544,3 +572,31 @@ bool LLChatLogParser::parse(std::string& raw, LLSD& im)
 	im[IM_TEXT] = name_and_text[IDX_TEXT];
 	return true;  //parsed name and message text, maybe have a timestamp too
 }
+std::string LLLogChat::oldLogFileName(std::string filename)
+{
+	time_t now;
+    time_t yesterday = time(&now) - 86400;
+	char dbuffer[20];		/* Flawfinder: ignore */
+	if (filename == "chat")
+	{
+		strftime(dbuffer, 20, "-%Y-%m-%d", localtime(&yesterday));
+	}
+	else
+	{
+		strftime(dbuffer, 20, "-%Y-%m", localtime(&yesterday));
+	}
+	filename += dbuffer;
+	filename = cleanFileName(filename);
+	filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_ACCOUNT_CHAT_LOGS,filename);
+	filename += ".txt";
+    //LL_INFOS("") << "Old    :" << filename << LL_ENDL;/* uncomment if you want to verify step, delete on commit */
+	return filename;
+}
+std::string LLLogChat::ndsLogFileName(std::string filename)
+{
+    filename = cleanFileName(filename);
+	filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_ACCOUNT_CHAT_LOGS,filename);
+	filename += ".txt";
+    //LL_INFOS("") << "Original:" << filename << LL_ENDL;/* uncomment if you want to verify step, delete on commit */
+	return filename;
+}
diff --git a/indra/newview/lllogchat.h b/indra/newview/lllogchat.h
index 6958d56311..578fe37227 100644
--- a/indra/newview/lllogchat.h
+++ b/indra/newview/lllogchat.h
@@ -41,6 +41,11 @@ public:
 	};
 	static std::string timestamp(bool withdate = false);
 	static std::string makeLogFileName(std::string(filename));
+	/**
+	*Add functions to get old and non date stamped file names when needed
+	*/
+	static std::string oldLogFileName(std::string(filename));
+	static std::string ndsLogFileName(std::string(filename));
 	static void saveHistory(const std::string& filename,
 				const std::string& from,
 				const LLUUID& from_id,
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
index 4ebd4c76f8..efe08ed885 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
@@ -114,7 +114,17 @@
      name="show_timestamps_check_im"
      top_pad="10"
      width="237" />
-    <text
+	<check_box
+     control_name="LogFileNamewithDate"
+     enabled="false"
+     height="16"
+     label="Add datestamp to log file name."
+     layout="topleft"
+     left_detla="5"
+     name="logfile_name_datestamp"
+     top_pad="10"
+     width="350"/>
+	<text
      type="string"
      length="1"
      follows="left|top"
-- 
cgit v1.2.3


From 8947724baa6d595844daeee2f18c865d1886acc5 Mon Sep 17 00:00:00 2001
From: Kent Quirk <q@lindenlab.com>
Date: Tue, 26 Oct 2010 23:13:36 -0400
Subject: STORM-482; change to allow 1023 characters again in local chat. While
 fixing this, I noticed that a change to XUI meant that many floaters had
 tried to set a limit on text length for line_editor components but it didn't
 take effect because the parameter name was wrong; I changed them to agree.

---
 indra/newview/skins/default/xui/en/alert_line_editor.xml |  2 +-
 .../newview/skins/default/xui/en/floater_about_land.xml  | 10 +++++-----
 .../skins/default/xui/en/floater_buy_currency.xml        |  2 +-
 indra/newview/skins/default/xui/en/floater_god_tools.xml | 16 ++++++++--------
 .../default/xui/en/floater_inventory_item_properties.xml |  6 +++---
 .../skins/default/xui/en/floater_outfit_save_as.xml      |  2 +-
 indra/newview/skins/default/xui/en/floater_pay.xml       |  2 +-
 .../newview/skins/default/xui/en/floater_pay_object.xml  |  2 +-
 .../skins/default/xui/en/floater_post_process.xml        |  2 +-
 indra/newview/skins/default/xui/en/floater_postcard.xml  |  4 ++--
 .../skins/default/xui/en/floater_preview_animation.xml   |  2 +-
 .../skins/default/xui/en/floater_preview_gesture.xml     |  8 ++++----
 .../skins/default/xui/en/floater_preview_notecard.xml    |  2 +-
 .../skins/default/xui/en/floater_preview_sound.xml       |  2 +-
 .../skins/default/xui/en/floater_preview_texture.xml     |  2 +-
 .../skins/default/xui/en/floater_report_abuse.xml        |  4 ++--
 .../skins/default/xui/en/floater_script_preview.xml      |  2 +-
 .../skins/default/xui/en/floater_sound_preview.xml       |  4 ++--
 indra/newview/skins/default/xui/en/floater_tools.xml     |  6 +++---
 .../newview/skins/default/xui/en/floater_ui_preview.xml  |  6 +++---
 .../skins/default/xui/en/panel_edit_classified.xml       |  2 +-
 indra/newview/skins/default/xui/en/panel_edit_pick.xml   |  2 +-
 .../newview/skins/default/xui/en/panel_edit_wearable.xml |  2 +-
 .../skins/default/xui/en/panel_group_info_sidetray.xml   |  2 +-
 .../skins/default/xui/en/panel_group_land_money.xml      |  2 +-
 .../newview/skins/default/xui/en/panel_group_notices.xml |  8 ++++----
 indra/newview/skins/default/xui/en/panel_group_roles.xml |  4 ++--
 .../newview/skins/default/xui/en/panel_landmark_info.xml |  2 +-
 indra/newview/skins/default/xui/en/panel_login.xml       |  4 ++--
 .../skins/default/xui/en/panel_nearby_chat_bar.xml       |  2 +-
 .../skins/default/xui/en/panel_preferences_advanced.xml  |  2 +-
 .../skins/default/xui/en/panel_prim_media_controls.xml   |  2 +-
 .../newview/skins/default/xui/en/sidepanel_item_info.xml |  4 ++--
 .../newview/skins/default/xui/en/sidepanel_task_info.xml |  4 ++--
 34 files changed, 64 insertions(+), 64 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/alert_line_editor.xml b/indra/newview/skins/default/xui/en/alert_line_editor.xml
index 82bf5fc8da..54dbc698c8 100644
--- a/indra/newview/skins/default/xui/en/alert_line_editor.xml
+++ b/indra/newview/skins/default/xui/en/alert_line_editor.xml
@@ -4,7 +4,7 @@
   revert_on_esc="true"
   commit_on_focus_lost="true"
   ignore_tab="true"
-  max_length="254"
+  max_length_bytes="254"
   text_pad_right="0"
   text_pad_left="2"
   mouse_opaque="true"/>
diff --git a/indra/newview/skins/default/xui/en/floater_about_land.xml b/indra/newview/skins/default/xui/en/floater_about_land.xml
index 89ed16e7c2..0a27cc7bc9 100644
--- a/indra/newview/skins/default/xui/en/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/en/floater_about_land.xml
@@ -128,7 +128,7 @@
              height="23"
              layout="topleft"
              left_pad="2"
-             max_length="63"
+             max_length_bytes="63"
              name="Name"
              top_delta="0"
              width="365" />
@@ -1081,7 +1081,7 @@ Leyla Linden               </text>
              follows="left|top"
              height="23"
              layout="topleft"
-             max_length="6"
+             max_length_bytes="6"
              name="clean other time"
              left_pad="0"
              width="46"
@@ -1625,7 +1625,7 @@ Only large parcels can be listed in search.
              height="23"
              layout="topleft"
              left_pad="0"
-             max_length="255"
+             max_length_bytes="255"
              name="media_url"
              select_on_focus="true"
              width="300"
@@ -1666,7 +1666,7 @@ Only large parcels can be listed in search.
              height="20"
              layout="topleft"
              left="110"
-             max_length="255"
+             max_length_bytes="255"
              name="url_description"
              select_on_focus="true"
              tool_tip="Text displayed next to play/load button"
@@ -1821,7 +1821,7 @@ Only large parcels can be listed in search.
              height="23"
              layout="topleft"
              left="100"
-             max_length="255"
+             max_length_bytes="255"
              name="music_url"
              top_delta="0"
              right="-15"
diff --git a/indra/newview/skins/default/xui/en/floater_buy_currency.xml b/indra/newview/skins/default/xui/en/floater_buy_currency.xml
index 637f9f55d4..cd5922a9a2 100644
--- a/indra/newview/skins/default/xui/en/floater_buy_currency.xml
+++ b/indra/newview/skins/default/xui/en/floater_buy_currency.xml
@@ -114,7 +114,7 @@
     </text>
     <line_editor
      type="string"
-     max_length="10"
+     max_length_bytes="10"
      halign="right"
      font="SansSerifMedium"
      select_on_focus="true"
diff --git a/indra/newview/skins/default/xui/en/floater_god_tools.xml b/indra/newview/skins/default/xui/en/floater_god_tools.xml
index dfe3cf4485..e7131e20cb 100644
--- a/indra/newview/skins/default/xui/en/floater_god_tools.xml
+++ b/indra/newview/skins/default/xui/en/floater_god_tools.xml
@@ -73,7 +73,7 @@
              height="20"
              layout="topleft"
              left_pad="0"
-             max_length="63"
+             max_length_bytes="63"
              name="region name"
              top_delta="0"
              width="250">
@@ -236,7 +236,7 @@
              height="16"
              layout="topleft"
              left_delta="108"
-             max_length="10"
+             max_length_bytes="10"
              name="estate"
              top_delta="0"
              width="50" />
@@ -260,7 +260,7 @@
              height="16"
              layout="topleft"
              left_delta="108"
-             max_length="10"
+             max_length_bytes="10"
              name="parentestate"
              tool_tip="This is the parent estate for this region"
              top_delta="0"
@@ -287,7 +287,7 @@
              height="16"
              layout="topleft"
              left_delta="88"
-             max_length="10"
+             max_length_bytes="10"
              name="gridposx"
              tool_tip="This is the grid x position for this region"
              top_delta="0"
@@ -302,7 +302,7 @@
              height="16"
              layout="topleft"
              left_pad="10"
-             max_length="10"
+             max_length_bytes="10"
              name="gridposy"
              tool_tip="This is the grid y position for this region"
              top_delta="0"
@@ -329,7 +329,7 @@
              height="16"
              layout="topleft"
              left_pad="0"
-             max_length="10"
+             max_length_bytes="10"
              name="redirectx"
              width="50">
 			       <line_editor.commit_callback
@@ -342,7 +342,7 @@
              height="16"
              layout="topleft"
              left_pad="10"
-             max_length="10"
+             max_length_bytes="10"
              name="redirecty"
              top_delta="0"
              width="40">
@@ -754,7 +754,7 @@
              height="22"
              layout="topleft"
              left_pad="10"
-             max_length="63"
+             max_length_bytes="63"
              name="parameter"
              top_delta="0"
              width="290" />
diff --git a/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml
index 2ef52bf539..29f09dd0b2 100644
--- a/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml
+++ b/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml
@@ -58,7 +58,7 @@
      height="16"
      layout="topleft"
      left_delta="78"
-     max_length="63"
+     max_length_bytes="63"
      name="LabelItemName"
      top_delta="0"
      width="252" />
@@ -81,7 +81,7 @@
      height="16"
      layout="topleft"
      left_delta="78"
-     max_length="127"
+     max_length_bytes="127"
      name="LabelItemDesc"
      top_delta="0"
      width="252" />
@@ -348,7 +348,7 @@
      height="16"
      layout="topleft"
      left_pad="5"
-     max_length="25"
+     max_length_bytes="25"
      name="EditPrice"
      top_delta="0"
      width="242" /-->
diff --git a/indra/newview/skins/default/xui/en/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/en/floater_outfit_save_as.xml
index 1d73d516d0..068737494f 100644
--- a/indra/newview/skins/default/xui/en/floater_outfit_save_as.xml
+++ b/indra/newview/skins/default/xui/en/floater_outfit_save_as.xml
@@ -50,7 +50,7 @@ as a new Outfit:
      left_delta="0"
      show_text_as_tentative="false"
      top_pad="0"
-     max_length="63"
+     max_length_bytes="63"
      name="name ed"
      width="200">
         [DESC] (new)
diff --git a/indra/newview/skins/default/xui/en/floater_pay.xml b/indra/newview/skins/default/xui/en/floater_pay.xml
index 7ab565313e..41a7134b1d 100644
--- a/indra/newview/skins/default/xui/en/floater_pay.xml
+++ b/indra/newview/skins/default/xui/en/floater_pay.xml
@@ -84,7 +84,7 @@
      top_pad="0"
      layout="topleft"
      left="130"
-     max_length="9"
+     max_length_bytes="9"
      name="amount"
      width="80" />
     <button
diff --git a/indra/newview/skins/default/xui/en/floater_pay_object.xml b/indra/newview/skins/default/xui/en/floater_pay_object.xml
index d8cfed7b09..d3a35c2051 100644
--- a/indra/newview/skins/default/xui/en/floater_pay_object.xml
+++ b/indra/newview/skins/default/xui/en/floater_pay_object.xml
@@ -117,7 +117,7 @@
      top_pad="0"
      layout="topleft"
      left="120"
-     max_length="9"
+     max_length_bytes="9"
      name="amount"
      width="80" />
     <button
diff --git a/indra/newview/skins/default/xui/en/floater_post_process.xml b/indra/newview/skins/default/xui/en/floater_post_process.xml
index 05559adf89..05943a10d3 100644
--- a/indra/newview/skins/default/xui/en/floater_post_process.xml
+++ b/indra/newview/skins/default/xui/en/floater_post_process.xml
@@ -416,7 +416,7 @@
              label="Effect Name"
              layout="topleft"
              left_delta="0"
-             max_length="40"
+             max_length_bytes="40"
              name="PPEffectNameEditor"
              tab_group="1"
              top_pad="22"
diff --git a/indra/newview/skins/default/xui/en/floater_postcard.xml b/indra/newview/skins/default/xui/en/floater_postcard.xml
index 6f78363b25..b4ecedd981 100644
--- a/indra/newview/skins/default/xui/en/floater_postcard.xml
+++ b/indra/newview/skins/default/xui/en/floater_postcard.xml
@@ -78,7 +78,7 @@
      height="20"
      layout="topleft"
      left_delta="108"
-     max_length="100"
+     max_length_bytes="100"
      name="name_form"
      top_delta="-4"
      width="150" />
@@ -99,7 +99,7 @@
      label="Type your subject here."
      layout="topleft"
      left_delta="108"
-     max_length="100"
+     max_length_bytes="100"
      name="subject_form"
      top_delta="-4"
      width="150" />
diff --git a/indra/newview/skins/default/xui/en/floater_preview_animation.xml b/indra/newview/skins/default/xui/en/floater_preview_animation.xml
index 6dc073728b..65efc46c71 100644
--- a/indra/newview/skins/default/xui/en/floater_preview_animation.xml
+++ b/indra/newview/skins/default/xui/en/floater_preview_animation.xml
@@ -32,7 +32,7 @@
      height="19"
      layout="topleft"
      left_delta="95"
-     max_length="127"
+     max_length_bytes="127"
      name="desc"
      top="19"
      width="170" />
diff --git a/indra/newview/skins/default/xui/en/floater_preview_gesture.xml b/indra/newview/skins/default/xui/en/floater_preview_gesture.xml
index 1903401988..a17cf8eea8 100644
--- a/indra/newview/skins/default/xui/en/floater_preview_gesture.xml
+++ b/indra/newview/skins/default/xui/en/floater_preview_gesture.xml
@@ -80,7 +80,7 @@
      height="20"
      layout="topleft"
      left_delta="89"
-     max_length="31"
+     max_length_bytes="31"
      name="trigger_editor"
      top_delta="-4"
      width="175" />
@@ -104,7 +104,7 @@
      height="20"
      layout="topleft"
      left_delta="99"
-     max_length="31"
+     max_length_bytes="31"
      name="replace_editor"
      tool_tip="Replace the trigger word(s) with these words. For example, trigger &apos;hello&apos; replace with &apos;howdy&apos; will turn the chat &apos;I wanted to say hello&apos; into &apos;I wanted to say howdy&apos; as well as playing the gesture"
      top_delta="-4"
@@ -263,7 +263,7 @@
      height="20"
      layout="topleft"
      left_delta="0"
-     max_length="127"
+     max_length_bytes="127"
      name="chat_editor"
      top="330"
      width="100" />
@@ -316,7 +316,7 @@
      height="20"
      layout="topleft"
      left_pad="10"
-     max_length="15"
+     max_length_bytes="15"
      name="wait_time_editor"
      top_delta="1"
      width="50" />
diff --git a/indra/newview/skins/default/xui/en/floater_preview_notecard.xml b/indra/newview/skins/default/xui/en/floater_preview_notecard.xml
index e5a5fab9b9..8c9e1d52b3 100644
--- a/indra/newview/skins/default/xui/en/floater_preview_notecard.xml
+++ b/indra/newview/skins/default/xui/en/floater_preview_notecard.xml
@@ -56,7 +56,7 @@
      height="22"
      layout="topleft"
      left_pad="0"
-     max_length="127"
+     max_length_bytes="127"
      name="desc"
      width="296" />
     <text_editor
diff --git a/indra/newview/skins/default/xui/en/floater_preview_sound.xml b/indra/newview/skins/default/xui/en/floater_preview_sound.xml
index f3be8c4131..62ef4c3097 100644
--- a/indra/newview/skins/default/xui/en/floater_preview_sound.xml
+++ b/indra/newview/skins/default/xui/en/floater_preview_sound.xml
@@ -32,7 +32,7 @@
      height="19"
      layout="topleft"
      left_pad="0"
-     max_length="127"
+     max_length_bytes="127"
      name="desc"
      width="170" />
     <button
diff --git a/indra/newview/skins/default/xui/en/floater_preview_texture.xml b/indra/newview/skins/default/xui/en/floater_preview_texture.xml
index 7fd7eab867..a79d2f63cb 100644
--- a/indra/newview/skins/default/xui/en/floater_preview_texture.xml
+++ b/indra/newview/skins/default/xui/en/floater_preview_texture.xml
@@ -40,7 +40,7 @@
      height="19"
      layout="topleft"
      left_pad="0"
-     max_length="127"
+     max_length_bytes="127"
      name="desc"
      width="190" />
     <text
diff --git a/indra/newview/skins/default/xui/en/floater_report_abuse.xml b/indra/newview/skins/default/xui/en/floater_report_abuse.xml
index 47383c8010..e6d749a3f0 100644
--- a/indra/newview/skins/default/xui/en/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/en/floater_report_abuse.xml
@@ -416,7 +416,7 @@
      height="23"
      layout="topleft"
      left="10"
-     max_length="256"
+     max_length_bytes="256"
      name="abuse_location_edit"
      top_pad="0"
      width="313" />
@@ -441,7 +441,7 @@
      height="23"
      layout="topleft"
      left_delta="0"
-     max_length="64"
+     max_length_bytes="64"
      name="summary_edit"
      top_pad="0"
      width="313" />
diff --git a/indra/newview/skins/default/xui/en/floater_script_preview.xml b/indra/newview/skins/default/xui/en/floater_script_preview.xml
index d0cd00d147..8c03b56040 100644
--- a/indra/newview/skins/default/xui/en/floater_script_preview.xml
+++ b/indra/newview/skins/default/xui/en/floater_script_preview.xml
@@ -55,7 +55,7 @@
      height="19"
      layout="topleft"
      left_delta="80"
-     max_length="127"
+     max_length_bytes="127"
      name="desc"
      top_delta="0"
      width="394" />
diff --git a/indra/newview/skins/default/xui/en/floater_sound_preview.xml b/indra/newview/skins/default/xui/en/floater_sound_preview.xml
index ca54ee6604..af791466b6 100644
--- a/indra/newview/skins/default/xui/en/floater_sound_preview.xml
+++ b/indra/newview/skins/default/xui/en/floater_sound_preview.xml
@@ -27,7 +27,7 @@
      height="19"
      layout="topleft"
      left_delta="0"
-     max_length="63"
+     max_length_bytes="63"
      name="name_form"
      top_pad="0"
      width="280" />
@@ -51,7 +51,7 @@
      height="19"
      layout="topleft"
      left_delta="0"
-     max_length="127"
+     max_length_bytes="127"
      name="description_form"
      top_pad="0"
      width="280" />
diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml
index 4c508035be..d5be64192b 100644
--- a/indra/newview/skins/default/xui/en/floater_tools.xml
+++ b/indra/newview/skins/default/xui/en/floater_tools.xml
@@ -831,7 +831,7 @@
              follows="left|top|right"
              height="19"
              left_pad="0"
-             max_length="63"
+             max_length_bytes="63"
              name="Object Name"
              select_on_focus="true"
              top_delta="0"
@@ -849,7 +849,7 @@
              follows="left|top|right"
              height="19"
              left_pad="0"
-             max_length="127"
+             max_length_bytes="127"
              name="Object Description"
              select_on_focus="true"
              top_delta="0"
@@ -2554,7 +2554,7 @@ even though the user gets a free copy.
              height="16"
              layout="topleft"
              left="10"
-             max_length="63"
+             max_length_bytes="63"
              name="Home Url"
              select_on_focus="true"
              top="134"
diff --git a/indra/newview/skins/default/xui/en/floater_ui_preview.xml b/indra/newview/skins/default/xui/en/floater_ui_preview.xml
index 3b10a57c50..12c4561753 100644
--- a/indra/newview/skins/default/xui/en/floater_ui_preview.xml
+++ b/indra/newview/skins/default/xui/en/floater_ui_preview.xml
@@ -241,7 +241,7 @@
              height="20"
              layout="topleft"
              left_delta="100"
-             max_length="300"
+             max_length_bytes="300"
              name="executable_path_field"
              select_on_focus="true"
              tool_tip="The full path to an editor (executable) to edit floater XML files (quotes not necessary)"
@@ -280,7 +280,7 @@
              height="20"
              layout="topleft"
              left_delta="100"
-             max_length="300"
+             max_length_bytes="300"
              name="executable_args_field"
              select_on_focus="true"
              tool_tip="Command-line arguments to the editor; use &apos;%FILE%&apos; to refer to the target file; &apos;YourProgram.exe FileName.xml&apos; will be run if this field is empty"
@@ -321,7 +321,7 @@
              height="20"
              layout="topleft"
              left_delta="65"
-             max_length="300"
+             max_length_bytes="300"
              name="vlt_diff_path_field"
              select_on_focus="true"
              tool_tip="The full path to an XML D0 or D1 localization difference file generated by the Viewer Localization Toolkit"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_classified.xml b/indra/newview/skins/default/xui/en/panel_edit_classified.xml
index 5934956559..ce0438fbc9 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_classified.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_classified.xml
@@ -119,7 +119,7 @@
          layout="topleft"
          left="10"
          top_pad="2"
-         max_length="30"
+         max_length_bytes="30"
          name="classified_name"
          prevalidate_callback="ascii"
          text_color="black"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_pick.xml b/indra/newview/skins/default/xui/en/panel_edit_pick.xml
index c4b831b71c..a284d3ccc0 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_pick.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_pick.xml
@@ -104,7 +104,7 @@
          layout="topleft"
          left="10"
          top_pad="2"
-         max_length="63"
+         max_length_bytes="63"
          name="pick_name"
          text_color="black"
          width="273" />
diff --git a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml
index b8ef612c6c..b3e9586ee9 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml
@@ -241,7 +241,7 @@
          height="23"
          layout="topleft"
          left="10"
-         max_length="63"
+         max_length_bytes="63"
          name="description"
          prevalidate_callback="ascii"
          select_on_focus="true"
diff --git a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
index 3ded5c6678..0347d2feec 100644
--- a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
@@ -71,7 +71,7 @@ background_visible="true"
      label="Type your new group name here"
      layout="topleft"
      left_delta="10"
-     max_length="35"
+     max_length_bytes="35"
      name="group_name_editor"
      top_delta="5"
      width="270"
diff --git a/indra/newview/skins/default/xui/en/panel_group_land_money.xml b/indra/newview/skins/default/xui/en/panel_group_land_money.xml
index 2e57c85d6f..1270a21710 100644
--- a/indra/newview/skins/default/xui/en/panel_group_land_money.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_land_money.xml
@@ -184,7 +184,7 @@
      height="19"
      layout="topleft"
      left_pad="5"
-     max_length="10"
+     max_length_bytes="10"
      name="your_contribution_line_editor"
      top_delta="0"
      width="80" />
diff --git a/indra/newview/skins/default/xui/en/panel_group_notices.xml b/indra/newview/skins/default/xui/en/panel_group_notices.xml
index 41f2b28004..600b0e3b71 100644
--- a/indra/newview/skins/default/xui/en/panel_group_notices.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_notices.xml
@@ -138,7 +138,7 @@ Maximum 200 per group daily
          height="16"
          layout="topleft"
          left_pad="3"
-         max_length="63"
+         max_length_bytes="63"
          name="create_subject"
          prevalidate_callback="ascii"
          width="220" />
@@ -180,7 +180,7 @@ Maximum 200 per group daily
          enabled="false"
          height="19"
          layout="topleft"
-         max_length="90"
+         max_length_bytes="90"
          mouse_opaque="false"
          name="create_inventory_name"
          top_pad="2"
@@ -307,7 +307,7 @@ Maximum 200 per group daily
          height="20"
          layout="topleft"
          left_pad="3"
-         max_length="63"
+         max_length_bytes="63"
          name="view_subject"
          top_delta="-1"
          visible="false"
@@ -341,7 +341,7 @@ Maximum 200 per group daily
          height="20"
          layout="topleft"
          left="5"
-         max_length="63"
+         max_length_bytes="63"
          mouse_opaque="false"
          name="view_inventory_name"
          top_pad="8"
diff --git a/indra/newview/skins/default/xui/en/panel_group_roles.xml b/indra/newview/skins/default/xui/en/panel_group_roles.xml
index 074e9bf5e5..a7178dc288 100644
--- a/indra/newview/skins/default/xui/en/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_roles.xml
@@ -390,7 +390,7 @@ things in this group. There&apos;s a broad variety of Abilities.
          left="0"
          follows="left|top|right"
          right="-1"
-         max_length="20"
+         max_length_bytes="20"
          name="role_name"
          top_pad="0"
          width="300">
@@ -413,7 +413,7 @@ things in this group. There&apos;s a broad variety of Abilities.
          left="0"
          follows="left|top|right"
          right="-1"
-         max_length="20"
+         max_length_bytes="20"
          name="role_title"
          top_pad="0"
          width="300">
diff --git a/indra/newview/skins/default/xui/en/panel_landmark_info.xml b/indra/newview/skins/default/xui/en/panel_landmark_info.xml
index f8635b9edb..6ee2abc70f 100644
--- a/indra/newview/skins/default/xui/en/panel_landmark_info.xml
+++ b/indra/newview/skins/default/xui/en/panel_landmark_info.xml
@@ -252,7 +252,7 @@
                  height="22"
                  layout="topleft"
                  left="0"
-                 max_length="63"
+                 max_length_bytes="63"
                  name="title_editor"
                  prevalidate_callback="ascii"
                  text_readonly_color="white"
diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml
index a5d730711c..b181ca3bba 100644
--- a/indra/newview/skins/default/xui/en/panel_login.xml
+++ b/indra/newview/skins/default/xui/en/panel_login.xml
@@ -69,7 +69,7 @@ follows="left|bottom"
 height="22"
 label="bobsmith12 or Steller Sunshine"
 left_delta="0"
-max_length="63"
+max_length_bytes="63"
 name="username_edit"
 prevalidate_callback="ascii" 
 select_on_focus="true"
@@ -89,7 +89,7 @@ top="20"
 <line_editor
 follows="left|bottom"
   height="22"
-  max_length="16"
+  max_length_bytes="16"
 name="password_edit"
 select_on_focus="true"
   top_pad="0"
diff --git a/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml
index 55df70eb71..5871eb0654 100644
--- a/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml
@@ -17,7 +17,7 @@
      layout="topleft"
      left_delta="3"
      left="0"
-     max_length="1024"
+     max_length_bytes="1023"
      name="chat_box"
      text_pad_left="5"
      text_pad_right="25"
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
index 7d9bd1bf2a..9d496575c9 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
@@ -280,7 +280,7 @@ Automatic position for:
      enabled_control="EnableVoiceChat"
      height="23"
      left="80"
-     max_length="200"
+     max_length_bytes="200"
      name="modifier_combo"
      label="Push-to-Speak trigger"
      top_pad="5"
diff --git a/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml
index b25fd695c9..273c252474 100644
--- a/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml
+++ b/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml
@@ -319,7 +319,7 @@
 		min_width="90">
 	  <line_editor 
 		  name="media_address_url"
-		  max_length="1024"
+		  max_length_bytes="1023"
 		  follows="top|left|right" 
 		  height="22"
 		  top="0"
diff --git a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
index 8760c911dc..6940d1549b 100644
--- a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
@@ -118,7 +118,7 @@
                  height="20"
                  layout="topleft"
                  left_delta="78"
-                 max_length="63"
+                 max_length_bytes="63"
                  name="LabelItemName"
                  top_delta="0"
                  width="210" />
@@ -141,7 +141,7 @@
                  height="23"
                  layout="topleft"
                  left_delta="78"
-                 max_length="127"
+                 max_length_bytes="127"
                  name="LabelItemDesc"
                  top_delta="-5"
                  width="210" />
diff --git a/indra/newview/skins/default/xui/en/sidepanel_task_info.xml b/indra/newview/skins/default/xui/en/sidepanel_task_info.xml
index a2f7edb167..ca63d2df39 100644
--- a/indra/newview/skins/default/xui/en/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_task_info.xml
@@ -118,7 +118,7 @@
 		     height="20"
 		     layout="topleft"
 	    	 left_delta="78"
-		     max_length="63"
+		     max_length_bytes="63"
              name="Object Name"
 	    	 top_delta="0"
 		     width="225" />
@@ -143,7 +143,7 @@
              name="Object Description"
              select_on_focus="true"
     		 left_delta="78"
-		     max_length="127"
+		     max_length_bytes="127"
 	    	 top_delta="-5"
 	    	 width="225"/>
 	    <text
-- 
cgit v1.2.3


From f9078ce5ccd805c0e18b68fb767eea6b59314bc1 Mon Sep 17 00:00:00 2001
From: Paul Guslisty <pguslisty@productengine.com>
Date: Wed, 27 Oct 2010 11:52:52 +0300
Subject: STORM-400 FIXED Trash button not responding on People > My Friends
 tab

- Corrected wrong button name in XML
---
 indra/newview/skins/default/xui/en/panel_people.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml
index d34c0c29a8..68c423d7dd 100644
--- a/indra/newview/skins/default/xui/en/panel_people.xml
+++ b/indra/newview/skins/default/xui/en/panel_people.xml
@@ -307,7 +307,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
 				           image_unselected="Toolbar_Right_Off"
 				           left="0"
 				           layout="topleft"
-				           name="trash_btn"
+				           name="del_btn"
 				           tool_tip="Remove selected person from your Friends list"
 				           top="0"
 				           width="31"/>
-- 
cgit v1.2.3


From 379f9b824087a44f7ffab0becfafaa29611751be Mon Sep 17 00:00:00 2001
From: Wolfpup Lowenhar <wolfpup67@earthlink.net>
Date: Wed, 27 Oct 2010 11:00:39 -0400
Subject: Made changes to setting names and in pannel_preferences_chat.xml for
 better understanding  as per Esbee's comments in STORM-255

---
 indra/newview/app_settings/settings.xml                    |  8 ++++----
 indra/newview/llimview.cpp                                 |  4 ++--
 .../skins/default/xui/en/panel_preferences_chat.xml        | 14 +++++++-------
 3 files changed, 13 insertions(+), 13 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 8ec812d59e..e5656c0877 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -2567,10 +2567,10 @@
       <key>Value</key>
       <integer>1</integer>
     </map>
-    <key>EnableGroupToast</key>
+    <key>EnableGroupChatPopups</key>
     <map>
       <key>Comment</key>
-      <string>Enable Incoming Group Toasts</string>
+      <string>Enable Incoming Group Chat Popups</string>
       <key>Persist</key>
       <integer>1</integer>
       <key>Type</key>
@@ -2578,10 +2578,10 @@
       <key>Value</key>
       <integer>1</integer>
     </map>
-    <key>EnableIMToast</key>
+    <key>EnableIMChatPopups</key>
     <map>
       <key>Comment</key>
-      <string>Enable Incoming IM Toasts</string>
+      <string>Enable Incoming IM Chat Popups</string>
       <key>Persist</key>
       <integer>1</integer>
       <key>Type</key>
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index 256f2aa842..416e13ed74 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -134,12 +134,12 @@ void toast_callback(const LLSD& msg){
 	// *NOTE Skip toasting if the user disable it in preferences/debug settings ~Alexandrea
 	LLIMModel::LLIMSession* session = LLIMModel::instance().findIMSession(
 				msg["session_id"]);
-	if (!gSavedSettings.getBOOL("EnableGroupToast")
+	if (!gSavedSettings.getBOOL("EnableGroupChatPopups")
 			&& session->isGroupSessionType())
 	{
 		return;
 	}
-	if (!gSavedSettings.getBOOL("EnableIMToast")
+	if (!gSavedSettings.getBOOL("EnableIMChatPopups")
 			&& !session->isGroupSessionType())
 	{
 		return;
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml
index 45d7633f73..e8f36b5298 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml
@@ -394,12 +394,12 @@
      left="280" 
      height="10"
      width="180">
-      Enable Incoming Messages:
+      Enable Incoming Chat popups:
       </text>
     <check_box
-     control_name="EnableGroupToast"
-     name="EnableGroupToast"
-     label="Group chats" 
+     control_name="EnableGroupChatPopups"
+     name="EnableGroupChatPopups"
+     label="Group Chats" 
      layout="topleft"
      top_delta="18" 
      left="295" 
@@ -407,9 +407,9 @@
      tool_tip="Checking this will turn on Group Messages popping up"
      width="400" />
     <check_box
-     control_name="EnableIMToast"
-     name="EnableIMToast"
-     label="IM chats" 
+     control_name="EnableIMChatPopups"
+     name="EnableIMChatPopups"
+     label="IM Chats" 
      layout="topleft"
      top_delta="22" 
      left="295" 
-- 
cgit v1.2.3


From 9c8ce6d6dc4ac09896a14b12d20fb53b22b693b3 Mon Sep 17 00:00:00 2001
From: Seth ProductEngine <slitovchuk@productengine.com>
Date: Wed, 27 Oct 2010 19:01:38 +0300
Subject: STORM-296 FIXED Item types that can be dropped to Favorites and
 Landmarks restricted to landmarks and folders containing landmarks. This
 changes affect all folder views. The previous fix affecting only My Landmarks
 SP (changeset 330d0e96d58d) was reverted.

---
 indra/newview/llinventorybridge.cpp | 87 +++++++++++++++++++++++++++++++++----
 1 file changed, 79 insertions(+), 8 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index b15dcd993a..e672892282 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -1649,10 +1649,12 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
 		const LLUUID &cat_id = inv_cat->getUUID();
 		const LLUUID &trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH, false);
 		const LLUUID &current_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT, false);
+		const LLUUID &landmarks_id = model->findCategoryUUIDForType(LLFolderType::FT_LANDMARK, false);
 		
 		const BOOL move_is_into_trash = (mUUID == trash_id) || model->isObjectDescendentOf(mUUID, trash_id);
 		const BOOL move_is_into_outfit = getCategory() && (getCategory()->getPreferredType() == LLFolderType::FT_OUTFIT);
 		const BOOL move_is_into_current_outfit = (mUUID == current_outfit_id);
+		const BOOL move_is_into_landmarks = (mUUID == landmarks_id) || model->isObjectDescendentOf(mUUID, landmarks_id);
 
 		//--------------------------------------------------------------------------------
 		// Determine if folder can be moved.
@@ -1690,6 +1692,21 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
 				}
 			}
 		}
+		if (move_is_into_landmarks)
+		{
+			for (S32 i=0; i < descendent_items.count(); ++i)
+			{
+				LLViewerInventoryItem* item = descendent_items[i];
+
+				// Don't move anything except landmarks and categories into Landmarks folder.
+				// We use getType() instead of getActua;Type() to allow links to landmarks and folders.
+				if (LLAssetType::AT_LANDMARK != item->getType() && LLAssetType::AT_CATEGORY != item->getType())
+				{
+					is_movable = FALSE;
+					break; // It's generally movable, but not into Landmarks.
+				}
+			}
+		}
 
 		// 
 		//--------------------------------------------------------------------------------
@@ -2661,6 +2678,8 @@ BOOL LLFolderBridge::dragOrDrop(MASK mask, BOOL drop,
 								EDragAndDropType cargo_type,
 								void* cargo_data)
 {
+	LLInventoryItem* inv_item = (LLInventoryItem*)cargo_data;
+
 	//llinfos << "LLFolderBridge::dragOrDrop()" << llendl;
 	BOOL accept = FALSE;
 	switch(cargo_type)
@@ -2676,9 +2695,24 @@ BOOL LLFolderBridge::dragOrDrop(MASK mask, BOOL drop,
 		case DAD_BODYPART:
 		case DAD_ANIMATION:
 		case DAD_GESTURE:
+			accept = dragItemIntoFolder(inv_item, drop);
+			break;
 		case DAD_LINK:
-			accept = dragItemIntoFolder((LLInventoryItem*)cargo_data,
-										drop);
+			// DAD_LINK type might mean one of two asset types: AT_LINK or AT_LINK_FOLDER.
+			// If we have an item of AT_LINK_FOLDER type we should process the linked
+			// category being dragged or dropped into folder.
+			if (inv_item && LLAssetType::AT_LINK_FOLDER == inv_item->getActualType())
+			{
+				LLInventoryCategory* linked_category = gInventory.getCategory(inv_item->getLinkedUUID());
+				if (linked_category)
+				{
+					accept = dragCategoryIntoFolder((LLInventoryCategory*)linked_category, drop);
+				}
+			}
+			else
+			{
+				accept = dragItemIntoFolder(inv_item, drop);
+			}
 			break;
 		case DAD_CATEGORY:
 			if (LLFriendCardsManager::instance().isAnyFriendCategory(mUUID))
@@ -2875,6 +2909,24 @@ static BOOL can_move_to_outfit(LLInventoryItem* inv_item, BOOL move_is_into_curr
 	return TRUE;
 }
 
+// Returns TRUE if item is a landmark or a link to a landmark
+// and can be moved to Favorites or Landmarks folder.
+static BOOL can_move_to_landmarks(LLInventoryItem* inv_item)
+{
+	// Need to get the linked item to know its type because LLInventoryItem::getType()
+	// returns actual type AT_LINK for links, not the asset type of a linked item.
+	if (LLAssetType::AT_LINK == inv_item->getType())
+	{
+		LLInventoryItem* linked_item = gInventory.getItem(inv_item->getLinkedUUID());
+		if (linked_item)
+		{
+			return LLAssetType::AT_LANDMARK == linked_item->getType();
+		}
+	}
+
+	return LLAssetType::AT_LANDMARK == inv_item->getType();
+}
+
 void LLFolderBridge::dropToFavorites(LLInventoryItem* inv_item)
 {
 	// use callback to rearrange favorite landmarks after adding
@@ -2931,9 +2983,12 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
 
 	const LLUUID &current_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT, false);
 	const LLUUID &favorites_id = model->findCategoryUUIDForType(LLFolderType::FT_FAVORITE, false);
+	const LLUUID &landmarks_id = model->findCategoryUUIDForType(LLFolderType::FT_LANDMARK, false);
 
 	const BOOL move_is_into_current_outfit = (mUUID == current_outfit_id);
+	const BOOL move_is_into_favorites = (mUUID == favorites_id);
 	const BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT);
+	const BOOL move_is_into_landmarks = (mUUID == landmarks_id) || model->isObjectDescendentOf(mUUID, landmarks_id);
 
 	LLToolDragAndDrop::ESource source = LLToolDragAndDrop::getInstance()->getSource();
 	BOOL accept = FALSE;
@@ -2944,7 +2999,6 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
 
 		const BOOL move_is_into_trash = (mUUID == trash_id) || model->isObjectDescendentOf(mUUID, trash_id);
 		const BOOL move_is_outof_current_outfit = LLAppearanceMgr::instance().getIsInCOF(inv_item->getUUID());
-		const BOOL folder_allows_reorder = (mUUID == favorites_id);
 
 		//--------------------------------------------------------------------------------
 		// Determine if item can be moved.
@@ -2990,12 +3044,16 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
 
 		if (!is_movable) 
 			accept = FALSE;
-		if ((mUUID == inv_item->getParentUUID()) && !folder_allows_reorder)
+		if ((mUUID == inv_item->getParentUUID()) && !move_is_into_favorites)
 			accept = FALSE;
 		if (move_is_into_current_outfit || move_is_into_outfit)
 		{
 			accept = can_move_to_outfit(inv_item, move_is_into_current_outfit);
 		}
+		else if (move_is_into_favorites || move_is_into_landmarks)
+		{
+			accept = can_move_to_landmarks(inv_item);
+		}
 
 		if(accept && drop)
 		{
@@ -3021,8 +3079,8 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
 			// 
 
 			// REORDER
-			// (only reorder the item)
-			if ((mUUID == inv_item->getParentUUID()) && folder_allows_reorder)
+			// (only reorder the item in Favorites folder)
+			if ((mUUID == inv_item->getParentUUID()) && move_is_into_favorites)
 			{
 				LLInventoryPanel* panel = dynamic_cast<LLInventoryPanel*>(mInventoryPanel.get());
 				LLFolderViewItem* itemp = panel ? panel->getRootFolder()->getDraggingOverItem() : NULL;
@@ -3036,7 +3094,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
 
 			// FAVORITES folder
 			// (copy the item)
-			else if (favorites_id == mUUID)
+			else if (move_is_into_favorites)
 			{
 				dropToFavorites(inv_item);
 			}
@@ -3101,6 +3159,13 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
 		{
 			accept = FALSE;
 		}
+		// Don't allow to move a single item to Favorites or Landmarks
+		// if it is not a landmark or a link to a landmark.
+		else if ((move_is_into_favorites || move_is_into_landmarks)
+				 && !can_move_to_landmarks(inv_item))
+		{
+			accept = FALSE;
+		}
 
 		if(drop && accept)
 		{
@@ -3146,12 +3211,18 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
 			{
 				accept = can_move_to_outfit(inv_item, move_is_into_current_outfit);
 			}
+			// Don't allow to move a single item to Favorites or Landmarks
+			// if it is not a landmark or a link to a landmark.
+			else if (move_is_into_favorites || move_is_into_landmarks)
+			{
+				accept = can_move_to_landmarks(inv_item);
+			}
 
 			if (accept && drop)
 			{
 				// FAVORITES folder
 				// (copy the item)
-				if (favorites_id == mUUID)
+				if (move_is_into_favorites)
 				{
 					dropToFavorites(inv_item);
 				}
-- 
cgit v1.2.3


From ea32129f493712fd8d03d8c3454f78f89f268e61 Mon Sep 17 00:00:00 2001
From: Andrew Productengine <adyukov@productengine.com>
Date: Wed, 27 Oct 2010 19:23:52 +0300
Subject: STORM-452 FIXED Made protective fix for crash in
 LLAgentCamera::resetView().

I managed to reprodcuce the crash once and couldn't reproduce it any time later, so this fix is made judging from line that I found (viewer was in debug mode when it happened)
in call stack after crash. Added check for gMenuHolder against NULL to prevent further crashing. There is no 100% guarantee that this fixes the crash from ticket, but it won't do any harm either.
---
 indra/newview/llagentcamera.cpp | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp
index 68e408d3e4..7c953cd2dc 100644
--- a/indra/newview/llagentcamera.cpp
+++ b/indra/newview/llagentcamera.cpp
@@ -296,8 +296,11 @@ void LLAgentCamera::resetView(BOOL reset_camera, BOOL change_camera)
 			LLSelectMgr::getInstance()->deselectAll();
 		}
 
-		// Hide all popup menus
-		gMenuHolder->hideMenus();
+		if (gMenuHolder != NULL)
+		{
+			// Hide all popup menus
+			gMenuHolder->hideMenus();
+		}
 	}
 
 	if (change_camera && !gSavedSettings.getBOOL("FreezeTime"))
-- 
cgit v1.2.3


From 23a217c66717912b99bc4c54cc8028fb7027e1be Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Wed, 27 Oct 2010 22:54:39 +0300
Subject: STORM-451 FIXED Disabled highlighting URLs in object name inside the
 llGiveInventory discard notification.

Changes:
 * Wrapped object name with <nolink>...</nolink> tags to disable URL parsing.
 * The decline message is now localized as a whole sentence (localizing separate phrases is often inapplicable for some languages).
---
 indra/newview/llviewermessage.cpp              | 15 ++++++++++++---
 indra/newview/skins/default/xui/en/strings.xml |  3 +--
 2 files changed, 13 insertions(+), 5 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 9b1f2e67c6..672213d3e8 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -1511,7 +1511,12 @@ bool LLOfferInfo::inventory_offer_callback(const LLSD& notification, const LLSD&
 		// MUTE falls through to decline
 	case IOR_DECLINE:
 		{
-			log_message = LLTrans::getString("InvOfferYouDecline") + " " + mDesc + " " + LLTrans::getString("InvOfferFrom") + " " + mFromName +".";
+			{
+				LLStringUtil::format_map_t log_message_args;
+				log_message_args["DESC"] = mDesc;
+				log_message_args["NAME"] = mFromName;
+				log_message = LLTrans::getString("InvOfferDecline", log_message_args);
+			}
 			chat.mText = log_message;
 			if( LLMuteList::getInstance()->isMuted(mFromID ) && ! LLMuteList::getInstance()->isLinden(mFromName) )  // muting for SL-42269
 			{
@@ -1710,8 +1715,12 @@ bool LLOfferInfo::inventory_task_offer_callback(const LLSD& notification, const
 			msg->addBinaryDataFast(_PREHASH_BinaryBucket, EMPTY_BINARY_BUCKET, EMPTY_BINARY_BUCKET_SIZE);
 			// send the message
 			msg->sendReliable(mHost);
-			
-			log_message = LLTrans::getString("InvOfferYouDecline") + " " + mDesc + " " + LLTrans::getString("InvOfferFrom") + " " + mFromName +".";
+			{
+				LLStringUtil::format_map_t log_message_args;
+				log_message_args["DESC"] = mDesc;
+				log_message_args["NAME"] = mFromName;
+				log_message = LLTrans::getString("InvOfferDecline", log_message_args);
+			}
 			LLSD args;
 			args["MESSAGE"] = log_message;
 			LLNotificationsUtil::add("SystemMessage", args);
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index 403d976350..5d3f19edcf 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -2242,8 +2242,7 @@ Clears (deletes) the media and all params from the given face.
 	<string name="InvOfferOwnedBy">owned by</string>
 	<string name="InvOfferOwnedByUnknownUser">owned by an unknown user</string>
 	<string name="InvOfferGaveYou">gave you</string>
-	<string name="InvOfferYouDecline">You decline</string>
-	<string name="InvOfferFrom">from</string>
+	<string name="InvOfferDecline">You decline [DESC] from &lt;nolink&gt;[NAME]&lt;/nolink&gt;.</string>
 
 	<!-- group money -->
 	<string name="GroupMoneyTotal">Total</string>
-- 
cgit v1.2.3


From 360ce3d667ecd9ac6c6c8b4a91902997ca7de60a Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Wed, 27 Oct 2010 15:22:39 -0700
Subject: DN-190 Last name resident shown in title of IM Conference Window with
 no Display name

---
 indra/newview/llimview.cpp | 20 ++++++++------------
 indra/newview/llimview.h   |  2 ++
 2 files changed, 10 insertions(+), 12 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index 349ef8185f..02a693b9a0 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -257,21 +257,17 @@ LLIMModel::LLIMSession::LLIMSession(const LLUUID& session_id, const std::string&
 	// history files have consistent (English) names in different locales.
 	if (isAdHocSessionType() && IM_SESSION_INVITE == type)
 	{
-		// Name here has a form of "<Avatar's name> Conference"
-		// Lets update it to localize the "Conference" word. See EXT-8429.
-		S32 separator_index = mName.rfind(" ");
-		std::string name = mName.substr(0, separator_index);
-		++separator_index;
-		std::string conference_word = mName.substr(separator_index, mName.length());
+		LLAvatarNameCache::get(mOtherParticipantID, 
+							   boost::bind(&LLIMModel::LLIMSession::onAdHocNameCache, 
+							   this, _2));
+	}
+}
 
-		// additional check that session name is what we expected
-		if ("Conference" == conference_word)
-		{
+void LLIMModel::LLIMSession::onAdHocNameCache(const LLAvatarName& av_name)
+{
 			LLStringUtil::format_map_t args;
-			args["[AGENT_NAME]"] = name;
+	args["[AGENT_NAME]"] = av_name.getCompleteName();
 			LLTrans::findString(mName, "conference-title-incoming", args);
-		}
-	}
 }
 
 void LLIMModel::LLIMSession::onVoiceChannelStateChanged(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state, const LLVoiceChannel::EDirection& direction)
diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h
index 3da4465862..650d329e18 100644
--- a/indra/newview/llimview.h
+++ b/indra/newview/llimview.h
@@ -100,6 +100,8 @@ public:
 
 		void onAvatarNameCache(const LLUUID& avatar_id, const LLAvatarName& av_name);
 
+		void onAdHocNameCache(const LLAvatarName& av_name);
+
 		//*TODO make private
 		static std::string generateHash(const std::set<LLUUID>& sorted_uuids);
 
-- 
cgit v1.2.3


From be8c9fc21758bcbc1d9f3d565b221310344231bd Mon Sep 17 00:00:00 2001
From: "Mark Palange (Mani)" <palange@lindenlab.com>
Date: Wed, 27 Oct 2010 17:07:31 -0700
Subject: CHOP-122 Initializing Facade service in the viewer. Rev. by Brad.

---
 indra/newview/CMakeLists.txt            |  2 ++
 indra/newview/app_settings/settings.xml | 35 ++++++++++++++++++++++++++++++++-
 indra/newview/llappviewer.cpp           | 25 ++++++++++++++++++++++-
 indra/newview/llappviewer.h             | 11 +++++++++--
 indra/newview/lltranslate.cpp           | 12 +++++------
 5 files changed, 75 insertions(+), 10 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index bf885e5934..63982ba87b 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -64,6 +64,7 @@ include_directories(
     ${LSCRIPT_INCLUDE_DIRS}
     ${LSCRIPT_INCLUDE_DIRS}/lscript_compile
     ${LLLOGIN_INCLUDE_DIRS}
+    ${UPDATER_INCLUDE_DIRS}
     )
 
 set(viewer_SOURCE_FILES
@@ -1679,6 +1680,7 @@ target_link_libraries(${VIEWER_BINARY_NAME}
     ${OPENSSL_LIBRARIES}
     ${CRYPTO_LIBRARIES}
     ${LLLOGIN_LIBRARIES}
+    ${UPDATER_LIBRARIES}
     ${GOOGLE_PERFTOOLS_LIBRARIES}
     )
 
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 086d73bc00..371326c0f5 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -10991,7 +10991,40 @@
       <key>Value</key>
       <integer>15</integer>
     </map>
-	<key>UploadBakedTexOld</key>
+    <key>UpdaterServiceActive</key>
+    <map>
+      <key>Comment</key>
+      <string>Enable or disable the updater service.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+    <key>UpdaterServiceCheckPeriod</key>
+    <map>
+      <key>Comment</key>
+      <string>Default period between update checking.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>U32</string>
+      <key>Value</key>
+      <integer>3600</integer>
+    </map>
+    <key>UpdaterServiceURL</key>
+    <map>
+      <key>Comment</key>
+      <string>Default location for the updater service.</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>http://secondlife.com/app/update</string>
+    </map>
+    <key>UploadBakedTexOld</key>
     <map>
       <key>Comment</key>
       <string>Forces the baked texture pipeline to upload using the old method.</string>
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 931b9fd2f3..e6feaae504 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -83,6 +83,7 @@
 
 #include "llweb.h"
 #include "llsecondlifeurls.h"
+#include "llupdaterservice.h"
 
 // Linden library includes
 #include "llavatarnamecache.h"
@@ -581,7 +582,8 @@ LLAppViewer::LLAppViewer() :
 	mAgentRegionLastAlive(false),
 	mRandomizeFramerate(LLCachedControl<bool>(gSavedSettings,"Randomize Framerate", FALSE)),
 	mPeriodicSlowFrame(LLCachedControl<bool>(gSavedSettings,"Periodic Slow Frame", FALSE)),
-	mFastTimerLogThread(NULL)
+	mFastTimerLogThread(NULL),
+	mUpdater(new LLUpdaterService())
 {
 	if(NULL != sInstance)
 	{
@@ -630,6 +632,9 @@ bool LLAppViewer::init()
 	if (!initConfiguration())
 		return false;
 
+	// Initialize updater service
+	initUpdater();
+
 	// write Google Breakpad minidump files to our log directory
 	std::string logdir = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "");
 	logdir += gDirUtilp->getDirDelimiter();
@@ -2324,6 +2329,24 @@ bool LLAppViewer::initConfiguration()
 	return true; // Config was successful.
 }
 
+void LLAppViewer::initUpdater()
+{
+	// Initialize the updater service.
+	// Generate URL to the udpater service
+	// Get Channel
+	// Get Version
+	std::string url = gSavedSettings.getString("UpdaterServiceURL");
+	std::string channel = gSavedSettings.getString("VersionChannelName");
+	std::string version = LLVersionInfo::getVersion();
+	U32 check_period = gSavedSettings.getU32("UpdaterServiceCheckPeriod");
+
+	mUpdater->setParams(url, channel, version);
+	mUpdater->setCheckPeriod(check_period);
+	if(gSavedSettings.getBOOL("UpdaterServiceActive"))
+	{
+		mUpdater->startChecking();
+	}
+}
 
 void LLAppViewer::checkForCrash(void)
 {
diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h
index fdc3b9ef9e..ea44ade8c6 100644
--- a/indra/newview/llappviewer.h
+++ b/indra/newview/llappviewer.h
@@ -39,7 +39,7 @@ class LLTextureCache;
 class LLImageDecodeThread;
 class LLTextureFetch;
 class LLWatchdogTimeout;
-class LLCommandLineParser;
+class LLUpdaterService;
 
 struct apr_dso_handle_t;
 
@@ -186,7 +186,7 @@ private:
 
 	bool initThreads(); // Initialize viewer threads, return false on failure.
 	bool initConfiguration(); // Initialize settings from the command line/config file.
-
+	void initUpdater(); // Initialize the updater service.
 	bool initCache(); // Initialize local client cache.
 
 
@@ -260,7 +260,13 @@ private:
 
 	std::set<struct apr_dso_handle_t*> mPlugins;
 
+	boost::scoped_ptr<LLUpdaterService> mUpdater;
+
+	//---------------------------------------------
+	//*NOTE: Mani - legacy updater stuff
+	// Still useable?
 public:
+
 	//some information for updater
 	typedef struct
 	{
@@ -270,6 +276,7 @@ public:
 	static LLUpdaterInfo *sUpdaterInfo ;
 
 	void launchUpdater();
+	//---------------------------------------------
 };
 
 // consts from viewer.h
diff --git a/indra/newview/lltranslate.cpp b/indra/newview/lltranslate.cpp
index 050e34ade9..21467a2ab8 100644
--- a/indra/newview/lltranslate.cpp
+++ b/indra/newview/lltranslate.cpp
@@ -36,7 +36,7 @@
 
 #include "llbufferstream.h"
 #include "llui.h"
-#include "llversionviewer.h"
+#include "llversioninfo.h"
 #include "llviewercontrol.h"
 
 #include "jsoncpp/reader.h"
@@ -64,11 +64,11 @@ void LLTranslate::translateMessage(LLHTTPClient::ResponderPtr &result, const std
 	getTranslateUrl(url, from_lang, to_lang, mesg);
 
     std::string user_agent = llformat("%s %d.%d.%d (%d)",
-		LL_CHANNEL,
-		LL_VERSION_MAJOR,
-		LL_VERSION_MINOR,
-		LL_VERSION_PATCH,
-		LL_VERSION_BUILD );
+		LLVersionInfo::getChannel(),
+		LLVersionInfo::getMajor(),
+		LLVersionInfo::getMinor(),
+		LLVersionInfo::getPatch(),
+		LLVersionInfo::getBuild());
 
 	if (!m_Header.size())
 	{
-- 
cgit v1.2.3


From 40979589afc5c91cab977307a1e400315b1c8a8f Mon Sep 17 00:00:00 2001
From: Merov Linden <merov@lindenlab.com>
Date: Wed, 27 Oct 2010 23:15:22 -0700
Subject: STORM-105 : improve decompression perf gathering, allow perf name to
 be passed on the command line, fix crash in analysis phase

---
 indra/newview/app_settings/cmd_line.xml |  2 ++
 indra/newview/llappviewer.cpp           | 52 +++++++++++++++++----------------
 indra/newview/llappviewer.h             |  4 ++-
 indra/newview/llfasttimerview.cpp       | 25 +++++++++++++---
 indra/newview/llviewertexture.cpp       |  6 ++--
 5 files changed, 56 insertions(+), 33 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/cmd_line.xml b/indra/newview/app_settings/cmd_line.xml
index 00d69f805e..5ab07af5aa 100644
--- a/indra/newview/app_settings/cmd_line.xml
+++ b/indra/newview/app_settings/cmd_line.xml
@@ -118,6 +118,8 @@
     <map>
       <key>desc</key>
       <string>Log metrics for benchmarking</string>
+      <key>count</key>
+      <integer>1</integer>
       <key>map-to</key>
       <string>LogMetrics</string>
     </map>
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 974ea6b4ae..cfc38f41b9 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -510,16 +510,10 @@ class LLFastTimerLogThread : public LLThread
 public:
 	std::string mFile;
 
-	LLFastTimerLogThread() : LLThread("fast timer log")
+	LLFastTimerLogThread(std::string& testName) : LLThread("fast timer log")
 	{
-		if(LLFastTimer::sLog)
-		{
-			mFile = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "performance.slp");
-		}
-		if(LLFastTimer::sMetricLog)
-		{
-			mFile = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "metric.slp");
-		}
+		std::string fileName = testName + std::string(".slp");
+		mFile = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, fileName);
 	}
 
 	void run()
@@ -1616,20 +1610,14 @@ bool LLAppViewer::cleanup()
 	{
 		llinfos << "Analyzing performance" << llendl;
 		
-		if(LLFastTimer::sLog)
-		{
-			LLFastTimerView::doAnalysis(
-				gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "performance_baseline.slp"),
-				gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "performance.slp"),
-				gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "performance_report.csv"));
-		}
-		if(LLFastTimer::sMetricLog)
-		{
-			LLFastTimerView::doAnalysis(
-				gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "metric_baseline.slp"),
-				gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "metric.slp"),
-				gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "metric_report.csv"));
-		}
+		std::string baselineName = LLFastTimer::sLogName + "_baseline.slp";
+		std::string currentName  = LLFastTimer::sLogName + ".slp"; 
+		std::string reportName   = LLFastTimer::sLogName + "_report.csv";
+		
+		LLFastTimerView::doAnalysis(
+			gDirUtilp->getExpandedFilename(LL_PATH_LOGS, baselineName),
+			gDirUtilp->getExpandedFilename(LL_PATH_LOGS, currentName),
+			gDirUtilp->getExpandedFilename(LL_PATH_LOGS, reportName));
 	}
 	LLMetricPerformanceTesterBasic::cleanClass() ;
 
@@ -1738,7 +1726,7 @@ bool LLAppViewer::initThreads()
 	if (LLFastTimer::sLog || LLFastTimer::sMetricLog)
 	{
 		LLFastTimer::sLogLock = new LLMutex(NULL);
-		mFastTimerLogThread = new LLFastTimerLogThread();
+		mFastTimerLogThread = new LLFastTimerLogThread(LLFastTimer::sLogName);
 		mFastTimerLogThread->start();
 	}
 
@@ -2080,11 +2068,25 @@ bool LLAppViewer::initConfiguration()
 	if (clp.hasOption("logperformance"))
 	{
 		LLFastTimer::sLog = TRUE;
+		LLFastTimer::sLogName = std::string("performance");
 	}
 	
-	if(clp.hasOption("logmetrics"))
+	if (clp.hasOption("logmetrics"))
 	{
 		LLFastTimer::sMetricLog = TRUE ;
+		// '--logmetrics' can be specified with a named test metric argument so the data gathering is done only on that test
+		// In the absence of argument, every metric is gathered (makes for a rather slow run and hard to decipher report...)
+        std::string testName = clp.getOption("logmetrics")[0];
+		llinfos << "'--logmetrics' argument : " << testName << llendl;
+        if (testName == "")
+        {
+            llwarns << "No '--logmetrics' argument given, will output all metrics." << llendl;
+			LLFastTimer::sLogName = std::string("metric");
+        }
+        else
+        {
+			LLFastTimer::sLogName = testName;
+		}
 	}
 
 	if (clp.hasOption("graphicslevel"))
diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h
index fdc3b9ef9e..6421f3fd6f 100644
--- a/indra/newview/llappviewer.h
+++ b/indra/newview/llappviewer.h
@@ -167,7 +167,7 @@ public:
 	// mute/unmute the system's master audio
 	virtual void setMasterSystemAudioMute(bool mute);
 	virtual bool getMasterSystemAudioMute();
-	
+
 protected:
 	virtual bool initWindow(); // Initialize the viewer's window.
 	virtual bool initLogging(); // Initialize log files, logging system, return false on failure.
@@ -251,7 +251,9 @@ private:
 
 	LLWatchdogTimeout* mMainloopTimeout;
 
+	// For performance and metric gathering
 	LLThread*	mFastTimerLogThread;
+	
 	// for tracking viewer<->region circuit death
 	bool mAgentRegionLastAlive;
 	LLUUID mAgentRegionLastID;
diff --git a/indra/newview/llfasttimerview.cpp b/indra/newview/llfasttimerview.cpp
index 06b145e8c8..5b6a25a041 100644
--- a/indra/newview/llfasttimerview.cpp
+++ b/indra/newview/llfasttimerview.cpp
@@ -1086,14 +1086,22 @@ LLSD LLFastTimerView::analyzePerformanceLogDefault(std::istream& is)
 //static
 void LLFastTimerView::doAnalysisDefault(std::string baseline, std::string target, std::string output)
 {
+	// Open baseline and current target, exit if one is inexistent
+	std::ifstream base_is(baseline.c_str());
+	std::ifstream target_is(target.c_str());
+	if (!base_is.is_open() || !target_is.is_open())
+	{
+		llwarns << "'-analyzeperformance' error : baseline or current target file inexistent" << llendl;
+		base_is.close();
+		target_is.close();
+		return;
+	}
 
 	//analyze baseline
-	std::ifstream base_is(baseline.c_str());
 	LLSD base = analyzePerformanceLogDefault(base_is);
 	base_is.close();
 
 	//analyze current
-	std::ifstream target_is(target.c_str());
 	LLSD current = analyzePerformanceLogDefault(target_is);
 	target_is.close();
 
@@ -1193,13 +1201,22 @@ void LLFastTimerView::doAnalysisMetrics(std::string baseline, std::string target
 		return ;
 	}
 
-	//analyze baseline
+	// Open baseline and current target, exit if one is inexistent
 	std::ifstream base_is(baseline.c_str());
+	std::ifstream target_is(target.c_str());
+	if (!base_is.is_open() || !target_is.is_open())
+	{
+		llwarns << "'-analyzeperformance' error : baseline or current target file inexistent" << llendl;
+		base_is.close();
+		target_is.close();
+		return;
+	}
+
+	//analyze baseline
 	LLSD base = analyzeMetricPerformanceLog(base_is);
 	base_is.close();
 
 	//analyze current
-	std::ifstream target_is(target.c_str());
 	LLSD current = analyzeMetricPerformanceLog(target_is);
 	target_is.close();
 
diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp
index 537ed7f963..3d047bc2ec 100644
--- a/indra/newview/llviewertexture.cpp
+++ b/indra/newview/llviewertexture.cpp
@@ -72,6 +72,7 @@ LLPointer<LLViewerFetchedTexture> LLViewerFetchedTexture::sDefaultImagep = NULL;
 LLPointer<LLViewerFetchedTexture> LLViewerFetchedTexture::sSmokeImagep = NULL;
 LLViewerMediaTexture::media_map_t LLViewerMediaTexture::sMediaMap ;
 LLTexturePipelineTester* LLViewerTextureManager::sTesterp = NULL ;
+const std::string sTesterName("TextureTester");
 
 S32 LLViewerTexture::sImageCount = 0;
 S32 LLViewerTexture::sRawCount = 0;
@@ -341,7 +342,7 @@ void LLViewerTextureManager::init()
 
 	LLViewerTexture::initClass() ;
 
-	if(LLFastTimer::sMetricLog)
+	if (LLFastTimer::sMetricLog && !LLViewerTextureManager::sTesterp && ((LLFastTimer::sLogName == sTesterName) || (LLFastTimer::sLogName == "metric")))
 	{
 		LLViewerTextureManager::sTesterp = new LLTexturePipelineTester() ;
         if (!LLViewerTextureManager::sTesterp->isValid())
@@ -3583,8 +3584,7 @@ F32 LLViewerMediaTexture::getMaxVirtualSize()
 //----------------------------------------------------------------------------------------------
 //start of LLTexturePipelineTester
 //----------------------------------------------------------------------------------------------
-LLTexturePipelineTester::LLTexturePipelineTester() :
-	LLMetricPerformanceTesterWithSession("TextureTester") 
+LLTexturePipelineTester::LLTexturePipelineTester() : LLMetricPerformanceTesterWithSession(sTesterName) 
 {
 	addMetric("TotalBytesLoaded") ;
 	addMetric("TotalBytesLoadedFromCache") ;
-- 
cgit v1.2.3


From 6be708677eee1cad00e618bce7d7e7ba27c7a547 Mon Sep 17 00:00:00 2001
From: Paul Guslisty <pguslisty@productengine.com>
Date: Thu, 28 Oct 2010 12:14:43 +0300
Subject: STORM-459 FIXED Delete outfit confirmation message doesn't appear if
 use context or gear menu on 'My Outfits' tab

Added confirmation dialog before deleting outfit from context menu and gear menu button of My Appearance -> My Outfits

- Deleted method that shows confirmation dialog in LLPanelOutfitsInventory. Moved it to the LLOutfitsList. Now confirmation dialog called before calling LLOutfitsList::removeSelected.

- Replaced native methods of deleting outfit in gear menu and context menu with LLOutfitsList::removeSelected.
---
 indra/newview/lloutfitslist.cpp           | 35 +++++++++++++++++--------------
 indra/newview/lloutfitslist.h             |  2 ++
 indra/newview/llpaneloutfitsinventory.cpp | 10 ---------
 indra/newview/llpaneloutfitsinventory.h   |  1 -
 4 files changed, 21 insertions(+), 27 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp
index 70295259b3..6435126fc0 100644
--- a/indra/newview/lloutfitslist.cpp
+++ b/indra/newview/lloutfitslist.cpp
@@ -115,7 +115,7 @@ public:
 		registrar.add("Gear.Wear", boost::bind(&LLOutfitListGearMenu::onWear, this));
 		registrar.add("Gear.TakeOff", boost::bind(&LLOutfitListGearMenu::onTakeOff, this));
 		registrar.add("Gear.Rename", boost::bind(&LLOutfitListGearMenu::onRename, this));
-		registrar.add("Gear.Delete", boost::bind(&LLOutfitListGearMenu::onDelete, this));
+		registrar.add("Gear.Delete", boost::bind(&LLOutfitsList::removeSelected, mOutfitList));
 		registrar.add("Gear.Create", boost::bind(&LLOutfitListGearMenu::onCreate, this, _2));
 
 		registrar.add("Gear.WearAdd", boost::bind(&LLOutfitListGearMenu::onAdd, this));
@@ -197,15 +197,6 @@ private:
 		}
 	}
 
-	void onDelete()
-	{
-		const LLUUID& selected_outfit_id = getSelectedOutfitID();
-		if (selected_outfit_id.notNull())
-		{
-			remove_category(&gInventory, selected_outfit_id);
-		}
-	}
-
 	void onCreate(const LLSD& data)
 	{
 		LLWearableType::EType type = LLWearableType::typeNameToType(data.asString());
@@ -260,6 +251,12 @@ private:
 
 class LLOutfitContextMenu : public LLListContextMenu
 {
+public:
+
+	LLOutfitContextMenu(LLOutfitsList* outfit_list)
+	:		LLListContextMenu(),
+	 		mOutfitList(outfit_list)
+	{}
 protected:
 	/* virtual */ LLContextMenu* createMenu()
 	{
@@ -275,7 +272,7 @@ protected:
 				boost::bind(&LLAppearanceMgr::takeOffOutfit, &LLAppearanceMgr::instance(), selected_id));
 		registrar.add("Outfit.Edit", boost::bind(editOutfit));
 		registrar.add("Outfit.Rename", boost::bind(renameOutfit, selected_id));
-		registrar.add("Outfit.Delete", boost::bind(deleteOutfit, selected_id));
+		registrar.add("Outfit.Delete", boost::bind(&LLOutfitsList::removeSelected, mOutfitList));
 
 		enable_registrar.add("Outfit.OnEnable", boost::bind(&LLOutfitContextMenu::onEnable, this, _2));
 		enable_registrar.add("Outfit.OnVisible", boost::bind(&LLOutfitContextMenu::onVisible, this, _2));
@@ -338,10 +335,8 @@ protected:
 		LLAppearanceMgr::instance().renameOutfit(outfit_cat_id);
 	}
 
-	static void deleteOutfit(const LLUUID& outfit_cat_id)
-	{
-		remove_category(&gInventory, outfit_cat_id);
-	}
+private:
+	LLOutfitsList*	mOutfitList;
 };
 
 //////////////////////////////////////////////////////////////////////////
@@ -358,7 +353,7 @@ LLOutfitsList::LLOutfitsList()
 	mCategoriesObserver = new LLInventoryCategoriesObserver();
 
 	mGearMenu = new LLOutfitListGearMenu(this);
-	mOutfitMenu = new LLOutfitContextMenu();
+	mOutfitMenu = new LLOutfitContextMenu(this);
 }
 
 LLOutfitsList::~LLOutfitsList()
@@ -635,6 +630,14 @@ void LLOutfitsList::performAction(std::string action)
 
 void LLOutfitsList::removeSelected()
 {
+	LLNotificationsUtil::add("DeleteOutfits", LLSD(), LLSD(), boost::bind(&LLOutfitsList::onOutfitsRemovalConfirmation, this, _1, _2));
+}
+
+void LLOutfitsList::onOutfitsRemovalConfirmation(const LLSD& notification, const LLSD& response)
+{
+	S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+	if (option != 0) return; // canceled
+
 	if (mSelectedOutfitUUID.notNull())
 	{
 		remove_category(&gInventory, mSelectedOutfitUUID);
diff --git a/indra/newview/lloutfitslist.h b/indra/newview/lloutfitslist.h
index 5fecbb83e7..a0598737f1 100644
--- a/indra/newview/lloutfitslist.h
+++ b/indra/newview/lloutfitslist.h
@@ -110,6 +110,8 @@ public:
 
 private:
 
+	void onOutfitsRemovalConfirmation(const LLSD& notification, const LLSD& response);
+
 	/**
 	 * Wrapper for LLCommonUtils::computeDifference. @see LLCommonUtils::computeDifference
 	 */
diff --git a/indra/newview/llpaneloutfitsinventory.cpp b/indra/newview/llpaneloutfitsinventory.cpp
index 4f2cfa2bbc..a90f864ae2 100644
--- a/indra/newview/llpaneloutfitsinventory.cpp
+++ b/indra/newview/llpaneloutfitsinventory.cpp
@@ -258,17 +258,7 @@ void LLPanelOutfitsInventory::updateListCommands()
 
 void LLPanelOutfitsInventory::onTrashButtonClick()
 {
-	LLNotificationsUtil::add("DeleteOutfits", LLSD(), LLSD(), boost::bind(&LLPanelOutfitsInventory::onOutfitsRemovalConfirmation, this, _1, _2));
-}
-
-void LLPanelOutfitsInventory::onOutfitsRemovalConfirmation(const LLSD& notification, const LLSD& response)
-{
-	S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
-	if (option != 0) return; // canceled
-
 	mMyOutfitsPanel->removeSelected();
-	updateListCommands();
-	updateVerbs();
 }
 
 bool LLPanelOutfitsInventory::isActionEnabled(const LLSD& userdata)
diff --git a/indra/newview/llpaneloutfitsinventory.h b/indra/newview/llpaneloutfitsinventory.h
index f1ca1dbfeb..a7917b457c 100644
--- a/indra/newview/llpaneloutfitsinventory.h
+++ b/indra/newview/llpaneloutfitsinventory.h
@@ -89,7 +89,6 @@ protected:
 	void onWearButtonClick();
 	void showGearMenu();
 	void onTrashButtonClick();
-	void onOutfitsRemovalConfirmation(const LLSD& notification, const LLSD& response);
 	bool isActionEnabled(const LLSD& userdata);
 	void setWearablesLoading(bool val);
 	void onWearablesLoaded();
-- 
cgit v1.2.3


From d42b1c3b215e8e30975c287de935830efd1e4d0d Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Thu, 28 Oct 2010 17:57:32 +0300
Subject: STORM-488 FIXED Place profile was opened instead of Object profile if
 used clicked an object SLURL in the plain text nearby chat log.

The reason is the same as in STORM-390: a bug in LLTextBase which leads to ignoring link href specified for a link segment if
the segment contains an URL (and the <nolink>...</nolink> clause is treated as such).

The workaround is to explicitly disallow parsing URLs in a link segment by setting its "is_link" parameter to "true".
---
 indra/newview/llchathistory.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index cb5cf4a61d..87297852c3 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -790,8 +790,9 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL
 				// (don't let object names with hyperlinks override our objectim Url)
 				LLStyle::Params link_params(style_params);
 				link_params.color.control = "HTMLLinkColor";
+				link_params.is_link = true;
 				link_params.link_href = url;
-				mEditor->appendText("<nolink>" + chat.mFromName + "</nolink>"  + delimiter,
+				mEditor->appendText(chat.mFromName + delimiter,
 									false, link_params);
 			}
 			else if ( chat.mFromName != SYSTEM_FROM && chat.mFromID.notNull() && !message_from_log)
-- 
cgit v1.2.3


From bf32cf1a62a8fb0d898977738972d7be14ebe028 Mon Sep 17 00:00:00 2001
From: Andrew Productengine <adyukov@productengine.com>
Date: Thu, 28 Oct 2010 20:16:11 +0300
Subject: STORM-322 ADDITIONAL FIX Fixed a crash that happened when clicking
 "refresh" while names are caching

Refresh caused deletion of group members data (from gdatap->mMembers), so gdatap->mMembers[id] in LLPanelGroupMembersSubTab::onNameCache() was null and when it was passed
into addMemberToList() there when getContribution() was called for it, crash happened.

- Added check against NULL before using member data.
---
 indra/newview/llpanelgrouproles.cpp | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llpanelgrouproles.cpp b/indra/newview/llpanelgrouproles.cpp
index 0d1d96eae6..d1362d7922 100644
--- a/indra/newview/llpanelgrouproles.cpp
+++ b/indra/newview/llpanelgrouproles.cpp
@@ -1576,6 +1576,7 @@ void LLPanelGroupMembersSubTab::update(LLGroupChange gc)
 
 void LLPanelGroupMembersSubTab::addMemberToList(LLUUID id, LLGroupMemberData* data)
 {
+	if (!data) return;
 	LLUIString donated = getString("donation_area");
 	donated.setArg("[AREA]", llformat("%d", data->getContribution()));
 
@@ -1616,9 +1617,12 @@ void LLPanelGroupMembersSubTab::onNameCache(const LLUUID& update_id, const LLUUI
 	
 	std::string fullname;
 	gCacheName->getFullName(id, fullname);
-	if (matchesSearchFilter(fullname))
+
+	LLGroupMemberData* data;
+	// trying to avoid unnecessary hash lookups
+	if (matchesSearchFilter(fullname) && ((data = gdatap->mMembers[id]) != NULL))
 	{
-		addMemberToList(id, gdatap->mMembers[id]);
+		addMemberToList(id, data);
 		if(!mMembersList->getEnabled())
 		{
 			mMembersList->setEnabled(TRUE);
-- 
cgit v1.2.3


From f3d4643b5907dec71183e4f0927c0e5a6fc48c70 Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Thu, 28 Oct 2010 23:03:09 +0300
Subject: STORM-489 FIXED <nolink>'ed text rendered as URL

Changes:
 * Suppressed URLs in object (sender) names of nearby chat messages loaded from history.
 * Fixed text between <nolink>...</nolink> text being rendered as URL
   (hand cursor on hover, context menu, context menu, opening Places SP on click).
---
 indra/newview/llchathistory.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index 87297852c3..3dc6e786d3 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -805,7 +805,7 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL
 			}
 			else
 			{
-				mEditor->appendText(chat.mFromName + delimiter, false, style_params);
+				mEditor->appendText("<nolink>" + chat.mFromName + "</nolink>" + delimiter, false, style_params);
 			}
 		}
 	}
-- 
cgit v1.2.3


From 4fa6500b5107f9d300a6ab7b6f011fb19621b05c Mon Sep 17 00:00:00 2001
From: Oz Linden <oz@lindenlab.com>
Date: Thu, 28 Oct 2010 18:09:09 -0400
Subject: STORM-480 remove unused "wrap" parameter from LLDir::getNetFileInDir

--HG--
branch : storm-102
---
 indra/newview/llappviewer.cpp         |  4 ++--
 indra/newview/llappviewerlinux.cpp    |  3 +--
 indra/newview/llfloateruipreview.cpp  | 12 ++++++------
 indra/newview/llviewermedia.cpp       |  2 +-
 indra/newview/llwaterparammanager.cpp |  4 ++--
 indra/newview/llwlparammanager.cpp    |  4 ++--
 6 files changed, 14 insertions(+), 15 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 931b9fd2f3..b8313f779e 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -2991,7 +2991,7 @@ void LLAppViewer::migrateCacheDirectory()
 			S32 file_count = 0;
 			std::string file_name;
 			std::string mask = delimiter + "*.*";
-			while (gDirUtilp->getNextFileInDir(old_cache_dir, mask, file_name, false))
+			while (gDirUtilp->getNextFileInDir(old_cache_dir, mask, file_name))
 			{
 				if (file_name == "." || file_name == "..") continue;
 				std::string source_path = old_cache_dir + delimiter + file_name;
@@ -3210,7 +3210,7 @@ bool LLAppViewer::initCache()
 		dir = gDirUtilp->getExpandedFilename(LL_PATH_CACHE,"");
 
 		std::string found_file;
-		if (gDirUtilp->getNextFileInDir(dir, mask, found_file, false))
+		if (gDirUtilp->getNextFileInDir(dir, mask, found_file))
 		{
 			old_vfs_data_file = dir + gDirUtilp->getDirDelimiter() + found_file;
 
diff --git a/indra/newview/llappviewerlinux.cpp b/indra/newview/llappviewerlinux.cpp
index 7629265730..898cc1c0ba 100644
--- a/indra/newview/llappviewerlinux.cpp
+++ b/indra/newview/llappviewerlinux.cpp
@@ -504,8 +504,7 @@ std::string LLAppViewerLinux::generateSerialNumber()
 
 	// trawl /dev/disk/by-uuid looking for a good-looking UUID to grab
 	std::string this_name;
-	BOOL wrap = FALSE;
-	while (gDirUtilp->getNextFileInDir(uuiddir, "*", this_name, wrap))
+	while (gDirUtilp->getNextFileInDir(uuiddir, "*", this_name))
 	{
 		if (this_name.length() > best.length() ||
 		    (this_name.length() == best.length() &&
diff --git a/indra/newview/llfloateruipreview.cpp b/indra/newview/llfloateruipreview.cpp
index 5dc8067648..5687b88a1f 100644
--- a/indra/newview/llfloateruipreview.cpp
+++ b/indra/newview/llfloateruipreview.cpp
@@ -480,7 +480,7 @@ BOOL LLFloaterUIPreview::postBuild()
 	mLanguageSelection->removeall();																				// clear out anything temporarily in list from XML
 	while(found)																									// for every directory
 	{
-		if((found = gDirUtilp->getNextFileInDir(xui_dir, "*", language_directory, FALSE)))							// get next directory
+		if((found = gDirUtilp->getNextFileInDir(xui_dir, "*", language_directory)))							// get next directory
 		{
 			std::string full_path = xui_dir + language_directory;
 			if(LLFile::isfile(full_path.c_str()))																	// if it's not a directory, skip it
@@ -634,7 +634,7 @@ void LLFloaterUIPreview::refreshList()
 	BOOL found = TRUE;
 	while(found)				// for every floater file that matches the pattern
 	{
-		if((found = gDirUtilp->getNextFileInDir(getLocalizedDirectory(), "floater_*.xml", name, FALSE)))	// get next file matching pattern
+		if((found = gDirUtilp->getNextFileInDir(getLocalizedDirectory(), "floater_*.xml", name)))	// get next file matching pattern
 		{
 			addFloaterEntry(name.c_str());	// and add it to the list (file name only; localization code takes care of rest of path)
 		}
@@ -642,7 +642,7 @@ void LLFloaterUIPreview::refreshList()
 	found = TRUE;
 	while(found)				// for every inspector file that matches the pattern
 	{
-		if((found = gDirUtilp->getNextFileInDir(getLocalizedDirectory(), "inspect_*.xml", name, FALSE)))	// get next file matching pattern
+		if((found = gDirUtilp->getNextFileInDir(getLocalizedDirectory(), "inspect_*.xml", name)))	// get next file matching pattern
 		{
 			addFloaterEntry(name.c_str());	// and add it to the list (file name only; localization code takes care of rest of path)
 		}
@@ -650,7 +650,7 @@ void LLFloaterUIPreview::refreshList()
 	found = TRUE;
 	while(found)				// for every menu file that matches the pattern
 	{
-		if((found = gDirUtilp->getNextFileInDir(getLocalizedDirectory(), "menu_*.xml", name, FALSE)))	// get next file matching pattern
+		if((found = gDirUtilp->getNextFileInDir(getLocalizedDirectory(), "menu_*.xml", name)))	// get next file matching pattern
 		{
 			addFloaterEntry(name.c_str());	// and add it to the list (file name only; localization code takes care of rest of path)
 		}
@@ -658,7 +658,7 @@ void LLFloaterUIPreview::refreshList()
 	found = TRUE;
 	while(found)				// for every panel file that matches the pattern
 	{
-		if((found = gDirUtilp->getNextFileInDir(getLocalizedDirectory(), "panel_*.xml", name, FALSE)))	// get next file matching pattern
+		if((found = gDirUtilp->getNextFileInDir(getLocalizedDirectory(), "panel_*.xml", name)))	// get next file matching pattern
 		{
 			addFloaterEntry(name.c_str());	// and add it to the list (file name only; localization code takes care of rest of path)
 		}
@@ -667,7 +667,7 @@ void LLFloaterUIPreview::refreshList()
 	found = TRUE;
 	while(found)				// for every sidepanel file that matches the pattern
 	{
-		if((found = gDirUtilp->getNextFileInDir(getLocalizedDirectory(), "sidepanel_*.xml", name, FALSE)))	// get next file matching pattern
+		if((found = gDirUtilp->getNextFileInDir(getLocalizedDirectory(), "sidepanel_*.xml", name)))	// get next file matching pattern
 		{
 			addFloaterEntry(name.c_str());	// and add it to the list (file name only; localization code takes care of rest of path)
 		}
diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp
index 48ab122edf..31cf0acdd7 100644
--- a/indra/newview/llviewermedia.cpp
+++ b/indra/newview/llviewermedia.cpp
@@ -1083,7 +1083,7 @@ void LLViewerMedia::clearAllCookies()
 	}
 	
 	// the hard part: iterate over all user directories and delete the cookie file from each one
-	while(gDirUtilp->getNextFileInDir(base_dir, "*_*", filename, false))
+	while(gDirUtilp->getNextFileInDir(base_dir, "*_*", filename))
 	{
 		target = base_dir;
 		target += filename;
diff --git a/indra/newview/llwaterparammanager.cpp b/indra/newview/llwaterparammanager.cpp
index 7314894c2e..d239347810 100644
--- a/indra/newview/llwaterparammanager.cpp
+++ b/indra/newview/llwaterparammanager.cpp
@@ -89,7 +89,7 @@ void LLWaterParamManager::loadAllPresets(const std::string& file_name)
 	while(found) 
 	{
 		std::string name;
-		found = gDirUtilp->getNextFileInDir(path_name, "*.xml", name, false);
+		found = gDirUtilp->getNextFileInDir(path_name, "*.xml", name);
 		if(found)
 		{
 
@@ -115,7 +115,7 @@ void LLWaterParamManager::loadAllPresets(const std::string& file_name)
 	while(found) 
 	{
 		std::string name;
-		found = gDirUtilp->getNextFileInDir(path_name2, "*.xml", name, false);
+		found = gDirUtilp->getNextFileInDir(path_name2, "*.xml", name);
 		if(found)
 		{
 			name=name.erase(name.length()-4);
diff --git a/indra/newview/llwlparammanager.cpp b/indra/newview/llwlparammanager.cpp
index 9b6047395a..e5f52dfc97 100644
--- a/indra/newview/llwlparammanager.cpp
+++ b/indra/newview/llwlparammanager.cpp
@@ -104,7 +104,7 @@ void LLWLParamManager::loadPresets(const std::string& file_name)
 	while(found) 
 	{
 		std::string name;
-		found = gDirUtilp->getNextFileInDir(path_name, "*.xml", name, false);
+		found = gDirUtilp->getNextFileInDir(path_name, "*.xml", name);
 		if(found)
 		{
 
@@ -130,7 +130,7 @@ void LLWLParamManager::loadPresets(const std::string& file_name)
 	while(found) 
 	{
 		std::string name;
-		found = gDirUtilp->getNextFileInDir(path_name2, "*.xml", name, false);
+		found = gDirUtilp->getNextFileInDir(path_name2, "*.xml", name);
 		if(found)
 		{
 			name=name.erase(name.length()-4);
-- 
cgit v1.2.3


From ca9594af28ce2e1cc8bb333a0fa7384dae718a9a Mon Sep 17 00:00:00 2001
From: "Andrew A. de Laix" <alain@lindenlab.com>
Date: Thu, 28 Oct 2010 16:47:05 -0700
Subject: shell of the update checker; it will just print a message to the log
 depending on the result of the check one time.

---
 indra/newview/llappviewer.cpp | 8 ++++----
 indra/newview/lltranslate.cpp | 2 +-
 2 files changed, 5 insertions(+), 5 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index e6feaae504..06300141be 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -632,9 +632,6 @@ bool LLAppViewer::init()
 	if (!initConfiguration())
 		return false;
 
-	// Initialize updater service
-	initUpdater();
-
 	// write Google Breakpad minidump files to our log directory
 	std::string logdir = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "");
 	logdir += gDirUtilp->getDirDelimiter();
@@ -980,7 +977,10 @@ bool LLAppViewer::mainLoop()
 	gServicePump = new LLPumpIO(gAPRPoolp);
 	LLHTTPClient::setPump(*gServicePump);
 	LLCurl::setCAFile(gDirUtilp->getCAFile());
-
+	
+	// Initialize updater service (now that we have an io pump)
+	initUpdater();
+	
 	// Note: this is where gLocalSpeakerMgr and gActiveSpeakerMgr used to be instantiated.
 
 	LLVoiceChannel::initClass();
diff --git a/indra/newview/lltranslate.cpp b/indra/newview/lltranslate.cpp
index 21467a2ab8..8ccfdb071b 100644
--- a/indra/newview/lltranslate.cpp
+++ b/indra/newview/lltranslate.cpp
@@ -64,7 +64,7 @@ void LLTranslate::translateMessage(LLHTTPClient::ResponderPtr &result, const std
 	getTranslateUrl(url, from_lang, to_lang, mesg);
 
     std::string user_agent = llformat("%s %d.%d.%d (%d)",
-		LLVersionInfo::getChannel(),
+		LLVersionInfo::getChannel().c_str(),
 		LLVersionInfo::getMajor(),
 		LLVersionInfo::getMinor(),
 		LLVersionInfo::getPatch(),
-- 
cgit v1.2.3


From 124c2f21a38563c81ae93681120518a7dd5cf38c Mon Sep 17 00:00:00 2001
From: Seth ProductEngine <slitovchuk@productengine.com>
Date: Fri, 29 Oct 2010 16:21:35 +0300
Subject: STORM-270, STORM-303 FIXED sorting Favorites folder contents after
 re-ordering landmarks in any folder view or in Favorites bar. Previously
 worked only for Favorites accordion is Places SP.

---
 indra/newview/llinventorypanel.cpp | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp
index 50adae09c0..0870b5b8dd 100644
--- a/indra/newview/llinventorypanel.cpp
+++ b/indra/newview/llinventorypanel.cpp
@@ -290,7 +290,10 @@ void LLInventoryPanel::modelChanged(U32 mask)
 		const LLUUID& item_id = (*items_iter);
 		const LLInventoryObject* model_item = model->getObject(item_id);
 		LLFolderViewItem* view_item = mFolderRoot->getItemByID(item_id);
-		LLFolderViewFolder* view_folder = mFolderRoot->getFolderByID(item_id);
+
+		// LLFolderViewFolder is derived from LLFolderViewItem so dynamic_cast from item
+		// to folder is the fast way to get a folder without searching through folders tree.
+		LLFolderViewFolder* view_folder = dynamic_cast<LLFolderViewFolder*>(view_item);
 
 		//////////////////////////////
 		// LABEL Operation
-- 
cgit v1.2.3


From 609f5bd6810ca16a409f209610e6fac972348cba Mon Sep 17 00:00:00 2001
From: "Andrew A. de Laix" <alain@lindenlab.com>
Date: Fri, 29 Oct 2010 11:20:54 -0700
Subject: added periodic retry to look for updates

---
 indra/newview/app_settings/settings.xml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 371326c0f5..5b9bfd0f9c 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -11011,7 +11011,7 @@
       <key>Type</key>
       <string>U32</string>
       <key>Value</key>
-      <integer>3600</integer>
+      <integer>10</integer>
     </map>
     <key>UpdaterServiceURL</key>
     <map>
@@ -11022,7 +11022,7 @@
       <key>Type</key>
       <string>String</string>
       <key>Value</key>
-      <string>http://secondlife.com/app/update</string>
+      <string>http://localhost/agni</string>
     </map>
     <key>UploadBakedTexOld</key>
     <map>
-- 
cgit v1.2.3


From 064a8d079917ecd91bd6b47f5f7f353989594593 Mon Sep 17 00:00:00 2001
From: "Andrew A. de Laix" <alain@lindenlab.com>
Date: Fri, 29 Oct 2010 11:22:07 -0700
Subject: restore 1hr polling frequency

---
 indra/newview/app_settings/settings.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 5b9bfd0f9c..274c7fbeb8 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -11011,7 +11011,7 @@
       <key>Type</key>
       <string>U32</string>
       <key>Value</key>
-      <integer>10</integer>
+      <integer>3600</integer>
     </map>
     <key>UpdaterServiceURL</key>
     <map>
-- 
cgit v1.2.3


From 8a4b7c85c2227a2465bc4fb028496c1908c298d3 Mon Sep 17 00:00:00 2001
From: Seth ProductEngine <slitovchuk@productengine.com>
Date: Fri, 29 Oct 2010 22:31:21 +0300
Subject: STORM-184 FIXED Disabled "Save" command for outfits without name
 (with "No Outfit" in My Appearance SP).

---
 indra/newview/llappearancemgr.cpp | 14 ++++++--------
 1 file changed, 6 insertions(+), 8 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp
index ed5e8ceee3..62074ddcd5 100644
--- a/indra/newview/llappearancemgr.cpp
+++ b/indra/newview/llappearancemgr.cpp
@@ -2204,12 +2204,11 @@ void LLAppearanceMgr::updateIsDirty()
 		base_outfit = catp->getUUID();
 	}
 
-	if(base_outfit.isNull())
-	{
-		// no outfit link found, display "unsaved outfit"
-		mOutfitIsDirty = true;
-	}
-	else
+	// Set dirty to "false" if no base outfit found to disable "Save"
+	// and leave only "Save As" enabled in My Outfits.
+	mOutfitIsDirty = false;
+
+	if (base_outfit.notNull())
 	{
 		LLIsOfAssetType collector = LLIsOfAssetType(LLAssetType::AT_LINK);
 
@@ -2248,8 +2247,6 @@ void LLAppearanceMgr::updateIsDirty()
 				return;
 			}
 		}
-
-		mOutfitIsDirty = false;
 	}
 }
 
@@ -2635,6 +2632,7 @@ void LLAppearanceMgr::dumpItemArray(const LLInventoryModel::item_array_t& items,
 LLAppearanceMgr::LLAppearanceMgr():
 	mAttachmentInvLinkEnabled(false),
 	mOutfitIsDirty(false),
+	mOutfitLocked(false),
 	mIsInUpdateAppearanceFromCOF(false)
 {
 	LLOutfitObserver& outfit_observer = LLOutfitObserver::instance();
-- 
cgit v1.2.3


From 9c5de604cc0bd262be4f73cdc21625b0061a4734 Mon Sep 17 00:00:00 2001
From: Dave Parks <davep@lindenlab.com>
Date: Fri, 29 Oct 2010 14:44:33 -0500
Subject: VWR-21349 Don't enable FBO by default on mac or linux when using
 high/ultra graphics.  Cap samples in LLMultiSampleBuffer to 4 samples to
 avoid using tons of memory when RenderUseFBO is set to TRUE and
 RenderFSAASamples is > 4.  Don't allocate multisample buffers at all when
 RenderUseFBO is FALSE.

---
 indra/newview/featuretable_linux.txt | 4 ++--
 indra/newview/featuretable_mac.txt   | 4 ++--
 indra/newview/pipeline.cpp           | 7 +++----
 3 files changed, 7 insertions(+), 8 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/featuretable_linux.txt b/indra/newview/featuretable_linux.txt
index 4a99280b06..efe29005f2 100644
--- a/indra/newview/featuretable_linux.txt
+++ b/indra/newview/featuretable_linux.txt
@@ -143,7 +143,7 @@ WLSkyDetail					1	48
 RenderDeferred				1	0
 RenderDeferredSSAO			1	0
 RenderShadowDetail			1	0
-RenderUseFBO				1	1
+RenderUseFBO				1	0
 
 //
 // Ultra graphics (REALLY PURTY!)
@@ -170,7 +170,7 @@ WLSkyDetail					1	128
 RenderDeferred				1	0
 RenderDeferredSSAO			1	0
 RenderShadowDetail			1	0
-RenderUseFBO				1	1
+RenderUseFBO				1	0
 
 //
 // Class Unknown Hardware (unknown)
diff --git a/indra/newview/featuretable_mac.txt b/indra/newview/featuretable_mac.txt
index 67cace7268..f030c9f8e5 100644
--- a/indra/newview/featuretable_mac.txt
+++ b/indra/newview/featuretable_mac.txt
@@ -140,7 +140,7 @@ RenderWaterReflections		1	0
 VertexShaderEnable			1	1
 WindLightUseAtmosShaders	1	1
 WLSkyDetail					1	48
-RenderUseFBO				1	1
+RenderUseFBO				1	0
 
 //
 // Ultra graphics (REALLY PURTY!)
@@ -166,7 +166,7 @@ RenderWaterReflections		1	1
 VertexShaderEnable			1	1
 WindLightUseAtmosShaders	1	1
 WLSkyDetail					1	128
-RenderUseFBO				1	1
+RenderUseFBO				1	0
 
 //
 // Class Unknown Hardware (unknown)
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index b467df1308..e6c6c74fce 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -533,7 +533,8 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY)
 	mScreenWidth = resX;
 	mScreenHeight = resY;
 	
-	U32 samples = gSavedSettings.getU32("RenderFSAASamples");
+	//never use more than 4 samples for render targets
+	U32 samples = llmin(gSavedSettings.getU32("RenderFSAASamples"), (U32) 4);
 	U32 res_mod = gSavedSettings.getU32("RenderResolutionDivisor");
 
 	if (res_mod > 1 && res_mod < resX && res_mod < resY)
@@ -554,8 +555,6 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY)
 		mDeferredDepth.allocate(resX, resY, 0, TRUE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE);
 		addDeferredAttachments(mDeferredScreen);
 	
-		// always set viewport to desired size, since allocate resets the viewport
-
 		mScreen.allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE);		
 		mEdgeMap.allocate(resX, resY, GL_ALPHA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE);
 
@@ -598,7 +597,7 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY)
 	}
 	
 
-	if (gGLManager.mHasFramebufferMultisample && samples > 1)
+	if (LLRenderTarget::sUseFBO && gGLManager.mHasFramebufferMultisample && samples > 1)
 	{
 		mSampleBuffer.allocate(resX,resY,GL_RGBA,TRUE,TRUE,LLTexUnit::TT_RECT_TEXTURE,FALSE,samples);
 		if (LLPipeline::sRenderDeferred)
-- 
cgit v1.2.3


From f34683dcdedb4f0ba0799ffb6382960a8a73403d Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Fri, 29 Oct 2010 13:14:34 -0700
Subject: DN-192 [crashhunters] LLVOAvatar::clearNameTag DN-193[crashhunters]
 LLHudNameTag::setLabel

---
 indra/newview/llvoavatar.h | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h
index f4f1235d55..a779a1735c 100644
--- a/indra/newview/llvoavatar.h
+++ b/indra/newview/llvoavatar.h
@@ -33,6 +33,8 @@
 #include <string>
 #include <vector>
 
+#include <boost/signals2.hpp>
+
 #include "imageids.h"			// IMG_INVISIBLE
 #include "llchat.h"
 #include "lldrawpoolalpha.h"
@@ -71,7 +73,8 @@ class LLVOAvatarSkeletonInfo;
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 class LLVOAvatar :
 	public LLViewerObject,
-	public LLCharacter
+	public LLCharacter,
+	public boost::signals2::trackable
 {
 public:
 	friend class LLVOAvatarSelf;
-- 
cgit v1.2.3


From 95c998918646777e0f12b6663c364a93d2c8df3c Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Fri, 29 Oct 2010 14:58:35 -0700
Subject: VWR-23444 FIXED Double clicking x on UI hint crashes Skylight Viewer

---
 indra/newview/llhints.cpp | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llhints.cpp b/indra/newview/llhints.cpp
index 7f6df627e0..3f0deb98cd 100644
--- a/indra/newview/llhints.cpp
+++ b/indra/newview/llhints.cpp
@@ -109,7 +109,14 @@ public:
 
 	/*virtual*/ BOOL postBuild();
 
-	void onClickClose() { hide(); LLNotifications::instance().cancel(mNotification); }
+	void onClickClose() 
+	{ 
+		if (!mHidden) 
+		{
+			hide(); 
+			LLNotifications::instance().cancel(mNotification);
+		}
+	}
 	void draw();
 	void hide() { if(!mHidden) {mHidden = true; mFadeTimer.reset();} }
 
-- 
cgit v1.2.3


From 398b8564e19deacc27a631e4668b00ed4a6ffe12 Mon Sep 17 00:00:00 2001
From: Merov Linden <merov@lindenlab.com>
Date: Fri, 29 Oct 2010 15:42:29 -0700
Subject: STORM-420 : allow teleport when double clicking the minimap if
 doubleclick teleport is on, allow beacon setting if not

---
 indra/newview/llfloatermap.cpp | 30 ++++++++++++++++++++++++++----
 indra/newview/llnetmap.h       |  2 ++
 2 files changed, 28 insertions(+), 4 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloatermap.cpp b/indra/newview/llfloatermap.cpp
index a1d291fea6..8a48265313 100644
--- a/indra/newview/llfloatermap.cpp
+++ b/indra/newview/llfloatermap.cpp
@@ -43,6 +43,8 @@
 #include "lldraghandle.h"
 #include "lltextbox.h"
 #include "llviewermenu.h"
+#include "llfloaterworldmap.h"
+#include "llagent.h"
 
 //
 // Constants
@@ -122,11 +124,31 @@ BOOL LLFloaterMap::postBuild()
 	return TRUE;
 }
 
-BOOL LLFloaterMap::handleDoubleClick( S32 x, S32 y, MASK mask )
+BOOL LLFloaterMap::handleDoubleClick(S32 x, S32 y, MASK mask)
 {
-	// If floater is minimized, minimap should be shown on doubleclick (STORM-299)
-	std::string floater_to_show = this->isMinimized() ? "mini_map" : "world_map";
-	LLFloaterReg::showInstance(floater_to_show);
+	LLVector3d pos_global = mMap->viewPosToGlobal(x, y);
+	
+	// If we're not tracking a beacon already, double-click will set one 
+	if (!LLTracker::isTracking(NULL))
+	{
+		LLFloaterWorldMap* world_map = LLFloaterWorldMap::getInstance();
+		if (world_map)
+		{
+			world_map->trackLocation(pos_global);
+		}
+	}
+	
+	if (gSavedSettings.getBOOL("DoubleClickTeleport"))
+	{
+		// If DoubleClickTeleport is on, double clicking the minimap will teleport there
+		gAgent.teleportViaLocationLookAt(pos_global);
+	}
+	else 
+	{
+		// If floater is minimized, minimap should be shown on doubleclick (STORM-299)
+		std::string floater_to_show = this->isMinimized() ? "mini_map" : "world_map";
+		LLFloaterReg::showInstance(floater_to_show);
+	}
 	return TRUE;
 }
 
diff --git a/indra/newview/llnetmap.h b/indra/newview/llnetmap.h
index 650bce0da4..e053b1c177 100644
--- a/indra/newview/llnetmap.h
+++ b/indra/newview/llnetmap.h
@@ -38,6 +38,7 @@ class LLColor4U;
 class LLCoordGL;
 class LLImageRaw;
 class LLViewerTexture;
+class LLFloaterMap;
 
 class LLNetMap : public LLUICtrl
 {
@@ -55,6 +56,7 @@ public:
 protected:
 	LLNetMap (const Params & p);
 	friend class LLUICtrlFactory;
+	friend class LLFloaterMap;
 
 public:
 	virtual ~LLNetMap();
-- 
cgit v1.2.3


From db56afd656fe978e0a67a29f67bd8434141ffcaa Mon Sep 17 00:00:00 2001
From: Paul Guslisty <pguslisty@productengine.com>
Date: Mon, 1 Nov 2010 15:12:14 +0200
Subject: STORM-288 FIXED New name resets to old if change it on 'Item Profile'
 panel while fetching inventory

Reason: 'item info panel' updated EACH time some inventory object changed

Fix: update 'item info panel' only if changed inventory object is the object for which 'item profile panel' is shown
---
 indra/newview/llsidepaneliteminfo.cpp | 23 ++++++++++++++++++++---
 indra/newview/llsidepaneliteminfo.h   |  2 ++
 2 files changed, 22 insertions(+), 3 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llsidepaneliteminfo.cpp b/indra/newview/llsidepaneliteminfo.cpp
index f9c0fd398e..be797ea937 100644
--- a/indra/newview/llsidepaneliteminfo.cpp
+++ b/indra/newview/llsidepaneliteminfo.cpp
@@ -68,10 +68,22 @@ private:
 
 void LLItemPropertiesObserver::changed(U32 mask)
 {
-	// if there's a change we're interested in.
-	if((mask & (LLInventoryObserver::LABEL | LLInventoryObserver::INTERNAL | LLInventoryObserver::REMOVE)) != 0)
+	const std::set<LLUUID>& mChangedItemIDs = gInventory.getChangedIDs();
+	std::set<LLUUID>::const_iterator it;
+
+	const LLUUID& object_id = mFloater->getObjectID();
+
+	for (it = mChangedItemIDs.begin(); it != mChangedItemIDs.end(); it++)
 	{
-		mFloater->dirty();
+		// set dirty for 'item profile panel' only if changed item is the item for which 'item profile panel' is shown (STORM-288)
+		if (*it == object_id)
+		{
+			// if there's a change we're interested in.
+			if((mask & (LLInventoryObserver::LABEL | LLInventoryObserver::INTERNAL | LLInventoryObserver::REMOVE)) != 0)
+			{
+				mFloater->dirty();
+			}
+		}
 	}
 }
 
@@ -179,6 +191,11 @@ void LLSidepanelItemInfo::setItemID(const LLUUID& item_id)
 	mItemID = item_id;
 }
 
+const LLUUID& LLSidepanelItemInfo::getObjectID() const
+{
+	return mObjectID;
+}
+
 void LLSidepanelItemInfo::reset()
 {
 	LLSidepanelInventorySubpanel::reset();
diff --git a/indra/newview/llsidepaneliteminfo.h b/indra/newview/llsidepaneliteminfo.h
index 10e93dd7de..6416e2cfe4 100644
--- a/indra/newview/llsidepaneliteminfo.h
+++ b/indra/newview/llsidepaneliteminfo.h
@@ -54,6 +54,8 @@ public:
 	void setItemID(const LLUUID& item_id);
 	void setEditMode(BOOL edit);
 
+	const LLUUID& getObjectID() const;
+
 protected:
 	/*virtual*/ void refresh();
 	/*virtual*/ void save();
-- 
cgit v1.2.3


From f4d713ad1259b3a96d296ab75b9bac176f209472 Mon Sep 17 00:00:00 2001
From: Andrew Productengine <adyukov@productengine.com>
Date: Mon, 1 Nov 2010 15:58:26 +0200
Subject: STORM-404 FIXED Fixed crash in LLPanelGroupGeneral::updateMembers().

Crash happened when trying to create new group while other group was still updating. It was caused by invalid iterator mMemberProgress in LLPanelGroupGeneral::updateMembers().
Its usage shouldn't have been reached when member list is cleared and empty thanking to gdatap->isMemberDataComplete() check at the beginning of the function. But when the new group was created while members of other group were still updating this
protection failed: in LLGroupMgr::processGroupMembersReply() for the group being created mMemberDataComplete was set TRUE when group size was zero(because this new group still
had no members). So the check for completness in LLPanelGroupGeneral::updateMembers() was succesfully passed, and further in this method viewer crashed.

- Added check for emptiness of member list into LLPanelGroupGeneral::updateMembers().
---
 indra/newview/llpanelgroupgeneral.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llpanelgroupgeneral.cpp b/indra/newview/llpanelgroupgeneral.cpp
index 80df420a4e..ec340dc258 100644
--- a/indra/newview/llpanelgroupgeneral.cpp
+++ b/indra/newview/llpanelgroupgeneral.cpp
@@ -692,7 +692,8 @@ void LLPanelGroupGeneral::updateMembers()
 	LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
 
 	if (!mListVisibleMembers || !gdatap 
-		|| !gdatap->isMemberDataComplete())
+		|| !gdatap->isMemberDataComplete()
+		|| gdatap->mMembers.empty())
 	{
 		return;
 	}
-- 
cgit v1.2.3


From e095665cca97247fd627339b8d299091b6dcf0cf Mon Sep 17 00:00:00 2001
From: Dave Parks <davep@lindenlab.com>
Date: Mon, 1 Nov 2010 12:30:54 -0500
Subject: SH-281 Fix for snapshots showing interface all the time

---
 indra/newview/llviewerdisplay.cpp | 19 ++++++++++++++++---
 indra/newview/llviewerwindow.cpp  |  9 ++++++---
 2 files changed, 22 insertions(+), 6 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp
index dec9b8d48f..1d5caabebb 100644
--- a/indra/newview/llviewerdisplay.cpp
+++ b/indra/newview/llviewerdisplay.cpp
@@ -221,11 +221,24 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 	if (gResizeScreenTexture)
 	{ //skip render on frames where screen texture is resizing
 		gGL.flush();
-		glClear(GL_COLOR_BUFFER_BIT);
-		gViewerWindow->mWindow->swapBuffers();
+		if (!for_snapshot)
+		{
+			glClear(GL_COLOR_BUFFER_BIT);
+			gViewerWindow->mWindow->swapBuffers();
+		}
+	
 		gResizeScreenTexture = FALSE;
 		gPipeline.resizeScreenTexture();
-		return;
+
+		if (!for_snapshot)
+		{
+			return;
+		}
+	}
+
+	if (LLPipeline::sRenderDeferred)
+	{ //hack to make sky show up in deferred snapshots
+		for_snapshot = FALSE;
 	}
 
 	if (LLPipeline::sRenderFrameTest)
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 040c7523de..ea407c8f29 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -3884,7 +3884,9 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei
 	setCursor(UI_CURSOR_WAIT);
 
 	// Hide all the UI widgets first and draw a frame
-	BOOL prev_draw_ui = gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI);
+	BOOL prev_draw_ui = gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI) ? TRUE : FALSE;
+
+	show_ui = show_ui ? TRUE : FALSE;
 
 	if ( prev_draw_ui != show_ui)
 	{
@@ -4022,12 +4024,13 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei
 
 				if (LLPipeline::sRenderDeferred)
 				{
-					display(do_rebuild, scale_factor, subfield, FALSE);
+					display(do_rebuild, scale_factor, subfield, TRUE);
 				}
 				else
 				{
 					display(do_rebuild, scale_factor, subfield, TRUE);
-					// Required for showing the GUI in snapshots?  See DEV-16350 for details. JC
+					// Required for showing the GUI in snapshots and performing bloom composite overlay
+					// Call even if show_ui is FALSE
 					render_ui(scale_factor, subfield);
 				}
 			}
-- 
cgit v1.2.3


From ea2406b6a50a6f14c253b26a17777ef92115eca8 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Mon, 1 Nov 2010 14:29:54 -0700
Subject: changing duplicate line editor name

---
 indra/newview/skins/default/xui/en/floater_display_name.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/floater_display_name.xml b/indra/newview/skins/default/xui/en/floater_display_name.xml
index 7a3fb9334a..9a9fd32a77 100644
--- a/indra/newview/skins/default/xui/en/floater_display_name.xml
+++ b/indra/newview/skins/default/xui/en/floater_display_name.xml
@@ -63,7 +63,7 @@
        width="300"
        height="20"
       font="SansSerif"
-    name="set_name_label">
+    name="name_confirm_label">
       Type your new name again to confirm:
     </text>
     <line_editor
-- 
cgit v1.2.3


From cace89d2e97a8d71179a272cbeb62630bb4a1331 Mon Sep 17 00:00:00 2001
From: Seth ProductEngine <slitovchuk@productengine.com>
Date: Mon, 1 Nov 2010 23:50:31 +0200
Subject: STORM-283 FIXED adding attachments of type
 LLInventoryType::IT_ATTACHMENT to Current Outfit.

---
 indra/newview/llinventorybridge.cpp | 1 +
 1 file changed, 1 insertion(+)

(limited to 'indra/newview')

diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index e672892282..3db48686e6 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -2896,6 +2896,7 @@ static BOOL can_move_to_outfit(LLInventoryItem* inv_item, BOOL move_is_into_curr
 {
 	if ((inv_item->getInventoryType() != LLInventoryType::IT_WEARABLE) &&
 		(inv_item->getInventoryType() != LLInventoryType::IT_GESTURE) &&
+		(inv_item->getInventoryType() != LLInventoryType::IT_ATTACHMENT) &&
 		(inv_item->getInventoryType() != LLInventoryType::IT_OBJECT))
 	{
 		return FALSE;
-- 
cgit v1.2.3


From f4a99d359c9cadafdddd560e4d404b14069d3e39 Mon Sep 17 00:00:00 2001
From: Seth ProductEngine <slitovchuk@productengine.com>
Date: Mon, 1 Nov 2010 23:52:09 +0200
Subject: STORM-287 FIXED changing currnet outfit with an outfit dragged from
 Library to My Inventory->Current Outfit folder.

---
 indra/newview/llinventorybridge.cpp | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index e672892282..73b99b04a6 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -1643,17 +1643,18 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
 	const BOOL is_agent_inventory = (model->getCategory(inv_cat->getUUID()) != NULL)
 		&& (LLToolDragAndDrop::SOURCE_AGENT == source);
 
+	const LLUUID &current_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT, false);
+	const BOOL move_is_into_current_outfit = (mUUID == current_outfit_id);
+
 	BOOL accept = FALSE;
 	if (is_agent_inventory)
 	{
 		const LLUUID &cat_id = inv_cat->getUUID();
 		const LLUUID &trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH, false);
-		const LLUUID &current_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT, false);
 		const LLUUID &landmarks_id = model->findCategoryUUIDForType(LLFolderType::FT_LANDMARK, false);
 		
 		const BOOL move_is_into_trash = (mUUID == trash_id) || model->isObjectDescendentOf(mUUID, trash_id);
 		const BOOL move_is_into_outfit = getCategory() && (getCategory()->getPreferredType() == LLFolderType::FT_OUTFIT);
-		const BOOL move_is_into_current_outfit = (mUUID == current_outfit_id);
 		const BOOL move_is_into_landmarks = (mUUID == landmarks_id) || model->isObjectDescendentOf(mUUID, landmarks_id);
 
 		//--------------------------------------------------------------------------------
@@ -1794,6 +1795,17 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
 		LLUUID category_id = mUUID;
 		accept = move_inv_category_world_to_agent(object_id, category_id, drop);
 	}
+	else if (LLToolDragAndDrop::SOURCE_LIBRARY == source)
+	{
+		// Accept folders that contain complete outfits.
+		accept = move_is_into_current_outfit && LLAppearanceMgr::instance().getCanMakeFolderIntoOutfit(inv_cat->getUUID());
+
+		if (accept && drop)
+		{
+			LLAppearanceMgr::instance().wearInventoryCategory(inv_cat, true, false);
+		}
+	}
+
 	return accept;
 }
 
-- 
cgit v1.2.3


From 6ab2e44e945ddc085a7b4b5f1524de924419a897 Mon Sep 17 00:00:00 2001
From: "Mark Palange (Mani)" <palange@lindenlab.com>
Date: Mon, 1 Nov 2010 15:18:18 -0700
Subject: VWR-23666 Removed setting VersionChannelName.
 LLVersionInfo::resetChannel() and unit tests. Reviewed by brad.

---
 indra/newview/CMakeLists.txt                 |   1 +
 indra/newview/app_settings/cmd_line.xml      |   3 +-
 indra/newview/app_settings/settings.xml      |  11 ---
 indra/newview/llappviewer.cpp                |  25 +++---
 indra/newview/llcurrencyuimanager.cpp        |   4 +-
 indra/newview/llfloaterabout.cpp             |   4 +-
 indra/newview/lllogininstance.cpp            |   5 +-
 indra/newview/llpanellogin.cpp               |   4 +-
 indra/newview/llversioninfo.cpp              |  37 ++++++++-
 indra/newview/llversioninfo.h                |   7 ++
 indra/newview/llviewercontrol.cpp            |   1 -
 indra/newview/llviewercontrol.h              |   2 -
 indra/newview/llviewermedia.cpp              |   2 +-
 indra/newview/llviewerstats.cpp              |   3 +-
 indra/newview/tests/lllogininstance_test.cpp |   9 ++-
 indra/newview/tests/llversioninfo_test.cpp   | 114 +++++++++++++++++++++++++++
 16 files changed, 189 insertions(+), 43 deletions(-)
 create mode 100644 indra/newview/tests/llversioninfo_test.cpp

(limited to 'indra/newview')

diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 63982ba87b..a488fb1069 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -1858,6 +1858,7 @@ if (LL_TESTS)
     llmediadataclient.cpp
     lllogininstance.cpp
     llviewerhelputil.cpp
+    llversioninfo.cpp
   )
 
   ##################################################
diff --git a/indra/newview/app_settings/cmd_line.xml b/indra/newview/app_settings/cmd_line.xml
index 00d69f805e..a17da8e344 100644
--- a/indra/newview/app_settings/cmd_line.xml
+++ b/indra/newview/app_settings/cmd_line.xml
@@ -361,8 +361,7 @@
     <map>
       <key>count</key>
       <integer>1</integer>
-      <key>map-to</key>
-      <string>VersionChannelName</string>
+      <!-- Special case. Not mapped to a setting. -->
     </map>
 
     <key>loginpage</key>
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 371326c0f5..96d4fb1295 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -11344,17 +11344,6 @@
       <key>Value</key>
       <integer>0</integer>
     </map>
-    <key>VersionChannelName</key>
-    <map>
-      <key>Comment</key>
-      <string>Versioning Channel Name.</string>
-      <key>Persist</key>
-      <integer>0</integer>
-      <key>Type</key>
-      <string>String</string>
-      <key>Value</key>
-      <string>Second Life Release</string>
-    </map>
     <key>VertexShaderEnable</key>
     <map>
       <key>Comment</key>
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index e6feaae504..b122209af8 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -662,11 +662,6 @@ bool LLAppViewer::init()
     initThreads();
     writeSystemInfo();
 
-	// Build a string representing the current version number.
-    gCurrentVersion = llformat("%s %s", 
-							   gSavedSettings.getString("VersionChannelName").c_str(),
-							   LLVersionInfo::getVersion().c_str());
-
 	//////////////////////////////////////////////////////////////////////////////
 	//////////////////////////////////////////////////////////////////////////////
 	//////////////////////////////////////////////////////////////////////////////
@@ -905,7 +900,8 @@ bool LLAppViewer::init()
 	gDebugInfo["GraphicsCard"] = LLFeatureManager::getInstance()->getGPUString();
 
 	// Save the current version to the prefs file
-	gSavedSettings.setString("LastRunVersion", gCurrentVersion);
+	gSavedSettings.setString("LastRunVersion", 
+							 LLVersionInfo::getVersionAndChannel());
 
 	gSimLastTime = gRenderStartTime.getElapsedTimeF32();
 	gSimFrames = (F32)gFrameCount;
@@ -1941,8 +1937,6 @@ bool LLAppViewer::initConfiguration()
 	gSavedSettings.setString("ClientSettingsFile", 
         gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, getSettingsFilename("Default", "Global")));
 
-	gSavedSettings.setString("VersionChannelName", LLVersionInfo::getChannel());
-
 #ifndef	LL_RELEASE_FOR_DOWNLOAD
 	// provide developer build only overrides for these control variables that are not
 	// persisted to settings.xml
@@ -2074,6 +2068,11 @@ bool LLAppViewer::initConfiguration()
         }
     }
 
+    if(clp.hasOption("channel"))
+    {
+		LLVersionInfo::resetChannel(clp.getOption("channel")[0]);
+	}
+	
 
 	// If we have specified crash on startup, set the global so we'll trigger the crash at the right time
 	if(clp.hasOption("crashonstartup"))
@@ -2336,7 +2335,7 @@ void LLAppViewer::initUpdater()
 	// Get Channel
 	// Get Version
 	std::string url = gSavedSettings.getString("UpdaterServiceURL");
-	std::string channel = gSavedSettings.getString("VersionChannelName");
+	std::string channel = LLVersionInfo::getChannel();
 	std::string version = LLVersionInfo::getVersion();
 	U32 check_period = gSavedSettings.getU32("UpdaterServiceCheckPeriod");
 
@@ -2538,7 +2537,7 @@ void LLAppViewer::writeSystemInfo()
 {
 	gDebugInfo["SLLog"] = LLError::logFileName();
 
-	gDebugInfo["ClientInfo"]["Name"] = gSavedSettings.getString("VersionChannelName");
+	gDebugInfo["ClientInfo"]["Name"] = LLVersionInfo::getChannel();
 	gDebugInfo["ClientInfo"]["MajorVersion"] = LLVersionInfo::getMajor();
 	gDebugInfo["ClientInfo"]["MinorVersion"] = LLVersionInfo::getMinor();
 	gDebugInfo["ClientInfo"]["PatchVersion"] = LLVersionInfo::getPatch();
@@ -2636,7 +2635,7 @@ void LLAppViewer::handleViewerCrash()
 	
 	//We already do this in writeSystemInfo(), but we do it again here to make /sure/ we have a version
 	//to check against no matter what
-	gDebugInfo["ClientInfo"]["Name"] = gSavedSettings.getString("VersionChannelName");
+	gDebugInfo["ClientInfo"]["Name"] = LLVersionInfo::getChannel();
 
 	gDebugInfo["ClientInfo"]["MajorVersion"] = LLVersionInfo::getMajor();
 	gDebugInfo["ClientInfo"]["MinorVersion"] = LLVersionInfo::getMinor();
@@ -4363,7 +4362,7 @@ void LLAppViewer::handleLoginComplete()
 	initMainloopTimeout("Mainloop Init");
 
 	// Store some data to DebugInfo in case of a freeze.
-	gDebugInfo["ClientInfo"]["Name"] = gSavedSettings.getString("VersionChannelName");
+	gDebugInfo["ClientInfo"]["Name"] = LLVersionInfo::getChannel();
 
 	gDebugInfo["ClientInfo"]["MajorVersion"] = LLVersionInfo::getMajor();
 	gDebugInfo["ClientInfo"]["MinorVersion"] = LLVersionInfo::getMinor();
@@ -4469,7 +4468,7 @@ void LLAppViewer::launchUpdater()
 	// *TODO change userserver to be grid on both viewer and sim, since
 	// userserver no longer exists.
 	query_map["userserver"] = LLGridManager::getInstance()->getGridLabel();
-	query_map["channel"] = gSavedSettings.getString("VersionChannelName");
+	query_map["channel"] = LLVersionInfo::getChannel();
 	// *TODO constantize this guy
 	// *NOTE: This URL is also used in win_setup/lldownloader.cpp
 	LLURI update_url = LLURI::buildHTTP("secondlife.com", 80, "update.php", query_map);
diff --git a/indra/newview/llcurrencyuimanager.cpp b/indra/newview/llcurrencyuimanager.cpp
index 2b92b228b3..b4a1457f47 100644
--- a/indra/newview/llcurrencyuimanager.cpp
+++ b/indra/newview/llcurrencyuimanager.cpp
@@ -166,7 +166,7 @@ void LLCurrencyUIManager::Impl::updateCurrencyInfo()
 		gAgent.getSecureSessionID().asString());
 	keywordArgs.appendString("language", LLUI::getLanguage());
 	keywordArgs.appendInt("currencyBuy", mUserCurrencyBuy);
-	keywordArgs.appendString("viewerChannel", gSavedSettings.getString("VersionChannelName"));
+	keywordArgs.appendString("viewerChannel", LLVersionInfo::getChannel());
 	keywordArgs.appendInt("viewerMajorVersion", LLVersionInfo::getMajor());
 	keywordArgs.appendInt("viewerMinorVersion", LLVersionInfo::getMinor());
 	keywordArgs.appendInt("viewerPatchVersion", LLVersionInfo::getPatch());
@@ -241,7 +241,7 @@ void LLCurrencyUIManager::Impl::startCurrencyBuy(const std::string& password)
 	{
 		keywordArgs.appendString("password", password);
 	}
-	keywordArgs.appendString("viewerChannel", gSavedSettings.getString("VersionChannelName"));
+	keywordArgs.appendString("viewerChannel", LLVersionInfo::getChannel());
 	keywordArgs.appendInt("viewerMajorVersion", LLVersionInfo::getMajor());
 	keywordArgs.appendInt("viewerMinorVersion", LLVersionInfo::getMinor());
 	keywordArgs.appendInt("viewerPatchVersion", LLVersionInfo::getPatch());
diff --git a/indra/newview/llfloaterabout.cpp b/indra/newview/llfloaterabout.cpp
index 135137069c..8ae3ccbae3 100644
--- a/indra/newview/llfloaterabout.cpp
+++ b/indra/newview/llfloaterabout.cpp
@@ -213,7 +213,7 @@ LLSD LLFloaterAbout::getInfo()
 	info["VIEWER_VERSION_STR"] = LLVersionInfo::getVersion();
 	info["BUILD_DATE"] = __DATE__;
 	info["BUILD_TIME"] = __TIME__;
-	info["CHANNEL"] = gSavedSettings.getString("VersionChannelName");
+	info["CHANNEL"] = LLVersionInfo::getChannel();
 
 	info["VIEWER_RELEASE_NOTES_URL"] = get_viewer_release_notes_url();
 
@@ -291,7 +291,7 @@ static std::string get_viewer_release_notes_url()
 	std::string url = LLTrans::getString("RELEASE_NOTES_BASE_URL");
 	if (! LLStringUtil::endsWith(url, "/"))
 		url += "/";
-	url += gSavedSettings.getString("VersionChannelName") + "/";
+	url += LLVersionInfo::getChannel() + "/";
 	url += LLVersionInfo::getShortVersion();
 	return LLWeb::escapeURL(url);
 }
diff --git a/indra/newview/lllogininstance.cpp b/indra/newview/lllogininstance.cpp
index 029e700c4c..fe84aca147 100644
--- a/indra/newview/lllogininstance.cpp
+++ b/indra/newview/lllogininstance.cpp
@@ -42,6 +42,7 @@
 // newview
 #include "llviewernetwork.h"
 #include "llviewercontrol.h"
+#include "llversioninfo.h"
 #include "llslurl.h"
 #include "llstartup.h"
 #include "llfloaterreg.h"
@@ -181,8 +182,8 @@ void LLLoginInstance::constructAuthParams(LLPointer<LLCredential> user_credentia
 	request_params["read_critical"] = false; // handleTOSResponse
 	request_params["last_exec_event"] = mLastExecEvent;
 	request_params["mac"] = hashed_unique_id_string;
-	request_params["version"] = gCurrentVersion; // Includes channel name
-	request_params["channel"] = gSavedSettings.getString("VersionChannelName");
+	request_params["version"] = LLVersionInfo::getVersionAndChannel(); // Includes channel name
+	request_params["channel"] = LLVersionInfo::getChannel();
 	request_params["id0"] = mSerialNumber;
 
 	mRequestData.clear();
diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp
index 467aefc60f..cf567fb208 100644
--- a/indra/newview/llpanellogin.cpp
+++ b/indra/newview/llpanellogin.cpp
@@ -230,7 +230,7 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
 
 	getChild<LLPanel>("login")->setDefaultBtn("connect_btn");
 
-	std::string channel = gSavedSettings.getString("VersionChannelName");
+	std::string channel = LLVersionInfo::getChannel();
 	std::string version = llformat("%s (%d)",
 								   LLVersionInfo::getShortVersion().c_str(),
 								   LLVersionInfo::getBuild());
@@ -817,7 +817,7 @@ void LLPanelLogin::loadLoginPage()
 								   LLVersionInfo::getShortVersion().c_str(),
 								   LLVersionInfo::getBuild());
 
-	char* curl_channel = curl_escape(gSavedSettings.getString("VersionChannelName").c_str(), 0);
+	char* curl_channel = curl_escape(LLVersionInfo::getChannel().c_str(), 0);
 	char* curl_version = curl_escape(version.c_str(), 0);
 
 	oStr << "&channel=" << curl_channel;
diff --git a/indra/newview/llversioninfo.cpp b/indra/newview/llversioninfo.cpp
index 733d05834a..53994c68f2 100644
--- a/indra/newview/llversioninfo.cpp
+++ b/indra/newview/llversioninfo.cpp
@@ -95,9 +95,42 @@ const std::string &LLVersionInfo::getShortVersion()
 	return version;
 }
 
+namespace
+{
+	/// Storage of the channel name the viewer is using.
+	//  The channel name is set by hardcoded constant, 
+	//  or by calling LLVersionInfo::resetChannel()
+	std::string sWorkingChannelName(LL_CHANNEL);
+
+	// Storage for the "version and channel" string.
+	// This will get reset too.
+	std::string sVersionChannel("");
+}
+
+//static
+const std::string &LLVersionInfo::getVersionAndChannel()
+{
+	if (sVersionChannel.empty())
+	{
+		// cache the version string
+		std::ostringstream stream;
+		stream << LLVersionInfo::getVersion() 
+			   << " "
+			   << LLVersionInfo::getChannel();
+		sVersionChannel = stream.str();
+	}
+
+	return sVersionChannel;
+}
+
 //static
 const std::string &LLVersionInfo::getChannel()
 {
-	static std::string name(LL_CHANNEL);
-	return name;
+	return sWorkingChannelName;
+}
+
+void LLVersionInfo::resetChannel(const std::string& channel)
+{
+	sWorkingChannelName = channel;
+	sVersionChannel.clear(); // Reset version and channel string til next use.
 }
diff --git a/indra/newview/llversioninfo.h b/indra/newview/llversioninfo.h
index e468b6ae4e..36defbcd68 100644
--- a/indra/newview/llversioninfo.h
+++ b/indra/newview/llversioninfo.h
@@ -58,8 +58,15 @@ public:
 	/// return the viewer version as a string like "2.0.0"
 	static const std::string &getShortVersion();
 
+	/// return the viewer version and channel as a string
+	/// like "2.0.0.200030 Second Life Release"
+	static const std::string &getVersionAndChannel();
+
 	/// return the channel name, e.g. "Second Life"
 	static const std::string &getChannel();
+	
+	/// reset the channel name used by the viewer.
+	static void resetChannel(const std::string& channel);
 };
 
 #endif
diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp
index 522b5a7dfa..ebe9f7e275 100644
--- a/indra/newview/llviewercontrol.cpp
+++ b/indra/newview/llviewercontrol.cpp
@@ -82,7 +82,6 @@ LLControlGroup gCrashSettings("CrashSettings");	// saved at end of session
 LLControlGroup gWarningSettings("Warnings"); // persists ignored dialogs/warnings
 
 std::string gLastRunVersion;
-std::string gCurrentVersion;
 
 extern BOOL gResizeScreenTexture;
 extern BOOL gDebugGL;
diff --git a/indra/newview/llviewercontrol.h b/indra/newview/llviewercontrol.h
index 22b48f8906..d7191f5c8d 100644
--- a/indra/newview/llviewercontrol.h
+++ b/indra/newview/llviewercontrol.h
@@ -57,7 +57,5 @@ extern LLControlGroup gCrashSettings;
 
 // Set after settings loaded
 extern std::string gLastRunVersion;
-extern std::string gCurrentVersion;
-
 
 #endif // LL_LLVIEWERCONTROL_H
diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp
index 48ab122edf..13fbce910b 100644
--- a/indra/newview/llviewermedia.cpp
+++ b/indra/newview/llviewermedia.cpp
@@ -492,7 +492,7 @@ std::string LLViewerMedia::getCurrentUserAgent()
 
 	// Just in case we need to check browser differences in A/B test
 	// builds.
-	std::string channel = gSavedSettings.getString("VersionChannelName");
+	std::string channel = LLVersionInfo::getChannel();
 
 	// append our magic version number string to the browser user agent id
 	// See the HTTP 1.0 and 1.1 specifications for allowed formats:
diff --git a/indra/newview/llviewerstats.cpp b/indra/newview/llviewerstats.cpp
index 42266ad233..3b7e44668d 100644
--- a/indra/newview/llviewerstats.cpp
+++ b/indra/newview/llviewerstats.cpp
@@ -48,6 +48,7 @@
 #include "llagent.h"
 #include "llagentcamera.h"
 #include "llviewercontrol.h"
+#include "llversioninfo.h"
 #include "llfloatertools.h"
 #include "lldebugview.h"
 #include "llfasttimerview.h"
@@ -749,7 +750,7 @@ void send_stats()
 
 	// send fps only for time app spends in foreground
 	agent["fps"] = (F32)gForegroundFrameCount / gForegroundTime.getElapsedTimeF32();
-	agent["version"] = gCurrentVersion;
+	agent["version"] = LLVersionInfo::getVersionAndChannel();
 	std::string language = LLUI::getLanguage();
 	agent["language"] = language;
 	
diff --git a/indra/newview/tests/lllogininstance_test.cpp b/indra/newview/tests/lllogininstance_test.cpp
index db50b89620..b902c7ab09 100644
--- a/indra/newview/tests/lllogininstance_test.cpp
+++ b/indra/newview/tests/lllogininstance_test.cpp
@@ -48,6 +48,9 @@ const std::string VIEWERLOGIN_GRIDLABEL("viewerlogin_grid");
 
 const std::string APPVIEWER_SERIALNUMBER("appviewer_serialno");
 
+const std::string VIEWERLOGIN_CHANNEL("invalid_channel");
+const std::string VIEWERLOGIN_VERSION_CHANNEL("invalid_version");
+
 // Link seams.
 
 //-----------------------------------------------------------------------------
@@ -160,7 +163,6 @@ std::string LLGridManager::getAppSLURLBase(const std::string& grid_name)
 //-----------------------------------------------------------------------------
 #include "../llviewercontrol.h"
 LLControlGroup gSavedSettings("Global");
-std::string gCurrentVersion = "invalid_version";
 
 LLControlGroup::LLControlGroup(const std::string& name) :
 	LLInstanceTracker<LLControlGroup, std::string>(name){}
@@ -177,6 +179,10 @@ BOOL LLControlGroup::declareString(const std::string& name, const std::string &i
 #include "lluicolortable.h"
 void LLUIColorTable::saveUserSettings(void)const {}
 
+//-----------------------------------------------------------------------------
+#include "../llversioninfo.h"
+const std::string &LLVersionInfo::getVersionAndChannel() { return VIEWERLOGIN_VERSION_CHANNEL; }
+const std::string &LLVersionInfo::getChannel() { return VIEWERLOGIN_CHANNEL; }
 
 //-----------------------------------------------------------------------------
 #include "llnotifications.h"
@@ -290,7 +296,6 @@ namespace tut
 			gSavedSettings.declareBOOL("UseDebugMenus", FALSE, "", FALSE);
 			gSavedSettings.declareBOOL("ForceMandatoryUpdate", FALSE, "", FALSE);
 			gSavedSettings.declareString("ClientSettingsFile", "test_settings.xml", "", FALSE);
-			gSavedSettings.declareString("VersionChannelName", "test_version_string", "", FALSE);
 			gSavedSettings.declareString("NextLoginLocation", "", "", FALSE);
 			gSavedSettings.declareBOOL("LoginLastLocation", FALSE, "", FALSE);
 
diff --git a/indra/newview/tests/llversioninfo_test.cpp b/indra/newview/tests/llversioninfo_test.cpp
new file mode 100644
index 0000000000..b4f1b0273f
--- /dev/null
+++ b/indra/newview/tests/llversioninfo_test.cpp
@@ -0,0 +1,114 @@
+/** 
+ * @file llversioninfo_test.cpp
+ *
+ * $LicenseInfo:firstyear=2010&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#include "linden_common.h"
+
+#include "../test/lltut.h"
+
+#include "../llversioninfo.h"
+#include "llversionviewer.h"
+
+namespace tut
+{
+    struct versioninfo
+    {
+		versioninfo()
+			: mResetChannel("Reset Channel")
+		{
+			std::ostringstream stream;
+			stream << LL_VERSION_MAJOR << "."
+				   << LL_VERSION_MINOR << "."
+				   << LL_VERSION_PATCH << "."
+				   << LL_VERSION_BUILD;
+			mVersion = stream.str();
+			stream.str("");
+
+			stream << LL_VERSION_MAJOR << "."
+				   << LL_VERSION_MINOR << "."
+				   << LL_VERSION_PATCH;
+			mShortVersion = stream.str();
+			stream.str("");
+
+			stream << mVersion
+				   << " "
+				   << LL_CHANNEL;
+			mVersionAndChannel = stream.str();
+			stream.str("");
+
+			stream << mVersion
+				   << " "
+				   << mResetChannel;
+			mResetVersionAndChannel = stream.str();
+		}
+		std::string mResetChannel;
+		std::string mVersion;
+		std::string mShortVersion;
+		std::string mVersionAndChannel;
+		std::string mResetVersionAndChannel;
+    };
+    
+	typedef test_group<versioninfo> versioninfo_t;
+	typedef versioninfo_t::object versioninfo_object_t;
+	tut::versioninfo_t tut_versioninfo("LLVersionInfo");
+
+	template<> template<>
+	void versioninfo_object_t::test<1>()
+	{
+		ensure_equals("Major version", 
+					  LLVersionInfo::getMajor(), 
+					  LL_VERSION_MAJOR);
+		ensure_equals("Minor version", 
+					  LLVersionInfo::getMinor(), 
+					  LL_VERSION_MINOR);
+		ensure_equals("Patch version", 
+					  LLVersionInfo::getPatch(), 
+					  LL_VERSION_PATCH);
+		ensure_equals("Build version", 
+					  LLVersionInfo::getBuild(), 
+					  LL_VERSION_BUILD);
+		ensure_equals("Channel version", 
+					  LLVersionInfo::getChannel(), 
+					  LL_CHANNEL);
+
+		ensure_equals("Version String", 
+					  LLVersionInfo::getVersion(), 
+					  mVersion);
+		ensure_equals("Short Version String", 
+					  LLVersionInfo::getShortVersion(), 
+					  mShortVersion);
+		ensure_equals("Version and channel String", 
+					  LLVersionInfo::getVersionAndChannel(), 
+					  mVersionAndChannel);
+
+		LLVersionInfo::resetChannel(mResetChannel);
+		ensure_equals("Reset channel version", 
+					  LLVersionInfo::getChannel(), 
+					  mResetChannel);
+
+		ensure_equals("Reset Version and channel String", 
+					  LLVersionInfo::getVersionAndChannel(), 
+					  mResetVersionAndChannel);
+	}
+}
\ No newline at end of file
-- 
cgit v1.2.3


From 9cc290ef8fccdc585027d84ac9cfb864ed933061 Mon Sep 17 00:00:00 2001
From: brad kittenbrink <brad@lindenlab.com>
Date: Mon, 1 Nov 2010 16:49:18 -0700
Subject: Added newline at EOF to satisfy linux gcc

---
 indra/newview/tests/llversioninfo_test.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/tests/llversioninfo_test.cpp b/indra/newview/tests/llversioninfo_test.cpp
index b4f1b0273f..8855a24ead 100644
--- a/indra/newview/tests/llversioninfo_test.cpp
+++ b/indra/newview/tests/llversioninfo_test.cpp
@@ -111,4 +111,4 @@ namespace tut
 					  LLVersionInfo::getVersionAndChannel(), 
 					  mResetVersionAndChannel);
 	}
-}
\ No newline at end of file
+}
-- 
cgit v1.2.3


From 87e2b01fbbab1927a83d305edfc454ac05050742 Mon Sep 17 00:00:00 2001
From: Merov Linden <merov@lindenlab.com>
Date: Mon, 1 Nov 2010 17:28:28 -0700
Subject: STORM-420 : Took Andrew's comment into account, fixing the issue when
 minimap was minimized

---
 indra/newview/llfloatermap.cpp | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloatermap.cpp b/indra/newview/llfloatermap.cpp
index 8a48265313..351b9ac5da 100644
--- a/indra/newview/llfloatermap.cpp
+++ b/indra/newview/llfloatermap.cpp
@@ -126,6 +126,13 @@ BOOL LLFloaterMap::postBuild()
 
 BOOL LLFloaterMap::handleDoubleClick(S32 x, S32 y, MASK mask)
 {
+	// If floater is minimized, minimap should be shown on doubleclick (STORM-299)
+	if (isMinimized())
+	{
+		setMinimized(FALSE);
+		return TRUE;
+	}
+
 	LLVector3d pos_global = mMap->viewPosToGlobal(x, y);
 	
 	// If we're not tracking a beacon already, double-click will set one 
@@ -145,9 +152,7 @@ BOOL LLFloaterMap::handleDoubleClick(S32 x, S32 y, MASK mask)
 	}
 	else 
 	{
-		// If floater is minimized, minimap should be shown on doubleclick (STORM-299)
-		std::string floater_to_show = this->isMinimized() ? "mini_map" : "world_map";
-		LLFloaterReg::showInstance(floater_to_show);
+		LLFloaterReg::showInstance("world_map");
 	}
 	return TRUE;
 }
-- 
cgit v1.2.3


From d3bc9b3e752935bffc5e808fd41a43af45568788 Mon Sep 17 00:00:00 2001
From: Wolfpup Lowenhar <wolfpup67@earthlink.net>
Date: Mon, 1 Nov 2010 22:29:09 -0400
Subject: STORM-255 : Made changes to the tool tips for the check boxes  in
 panel_prefferences_chat.xml

---
 indra/newview/skins/default/xui/en/panel_preferences_chat.xml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml
index 8a20c3cb16..85824c2576 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml
@@ -436,7 +436,7 @@
      top_delta="18" 
      left="295" 
      height="20"
-     tool_tip="Checking this will turn on Group Messages popping up"
+     tool_tip="Check to see popups when a Group Chat message arrives"
      width="400" />
     <check_box
      control_name="EnableIMChatPopups"
@@ -446,7 +446,7 @@
      top_delta="22" 
      left="295" 
      height="20"
-     tool_tip="Checking this will turn on IM Chat Messages popping up"
+     tool_tip="Check to see popups when an instant message arrives"
      width="400" />
     <check_box
      control_name="TranslateChat"
-- 
cgit v1.2.3


From ffc07281ad0525b2f9f4ed2000c5b8dc5df11f79 Mon Sep 17 00:00:00 2001
From: Loren Shih <seraph@lindenlab.com>
Date: Thu, 4 Nov 2010 16:30:59 -0400
Subject: SH-358 FIXED LLPipeline::renderBloom crash on Windows

---
 indra/newview/llviewerdisplay.cpp | 21 ++++++++++++++++-----
 1 file changed, 16 insertions(+), 5 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp
index 6640e32cd2..137704e960 100644
--- a/indra/newview/llviewerdisplay.cpp
+++ b/indra/newview/llviewerdisplay.cpp
@@ -218,6 +218,16 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 	LLMemType mt_render(LLMemType::MTYPE_RENDER);
 	LLFastTimer t(FTM_RENDER);
 
+	if (gResizeScreenTexture)
+	{ //skip render on frames where screen texture is resizing
+		gGL.flush();
+		glClear(GL_COLOR_BUFFER_BIT);
+		gViewerWindow->mWindow->swapBuffers();
+		gResizeScreenTexture = FALSE;
+		gPipeline.resizeScreenTexture();
+		return;
+	}
+
 	if (LLPipeline::sRenderFrameTest)
 	{
 		send_agent_pause();
@@ -531,6 +541,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 	gViewerWindow->setup3DViewport();
 
 	gPipeline.resetFrameStats();	// Reset per-frame statistics.
+	
 	if (!gDisconnected)
 	{
 		LLMemType mt_du(LLMemType::MTYPE_DISPLAY_UPDATE);
@@ -641,11 +652,11 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 				LLVertexBuffer::clientCopy(0.016);
 			}
 
-			if (gResizeScreenTexture)
-			{
-				gResizeScreenTexture = FALSE;
-				gPipeline.resizeScreenTexture();
-			}
+			//if (gResizeScreenTexture)
+			//{
+			//	gResizeScreenTexture = FALSE;
+			//	gPipeline.resizeScreenTexture();
+			//}
 
 			gGL.setColorMask(true, true);
 			glClearColor(0,0,0,0);
-- 
cgit v1.2.3


From c937eb1baed9df8eb99dd8a6bbe7d39075ec08d1 Mon Sep 17 00:00:00 2001
From: Loren Shih <seraph@lindenlab.com>
Date: Thu, 4 Nov 2010 16:34:02 -0400
Subject: VWR-21349 Don't enable FBO by default on mac or linux when using
 high/ultra graphics.  Cap samples in LLMultiSampleBuffer to 4 samples to
 avoid using tons of memory when RenderUseFBO is set to TRUE and
 RenderFSAASamples is > 4.  Don't allocate multisample buffers at all when
 RenderUseFBO is FALSE.

---
 indra/newview/featuretable_linux.txt | 4 ++--
 indra/newview/featuretable_mac.txt   | 4 ++--
 indra/newview/pipeline.cpp           | 7 +++----
 3 files changed, 7 insertions(+), 8 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/featuretable_linux.txt b/indra/newview/featuretable_linux.txt
index 4a99280b06..efe29005f2 100644
--- a/indra/newview/featuretable_linux.txt
+++ b/indra/newview/featuretable_linux.txt
@@ -143,7 +143,7 @@ WLSkyDetail					1	48
 RenderDeferred				1	0
 RenderDeferredSSAO			1	0
 RenderShadowDetail			1	0
-RenderUseFBO				1	1
+RenderUseFBO				1	0
 
 //
 // Ultra graphics (REALLY PURTY!)
@@ -170,7 +170,7 @@ WLSkyDetail					1	128
 RenderDeferred				1	0
 RenderDeferredSSAO			1	0
 RenderShadowDetail			1	0
-RenderUseFBO				1	1
+RenderUseFBO				1	0
 
 //
 // Class Unknown Hardware (unknown)
diff --git a/indra/newview/featuretable_mac.txt b/indra/newview/featuretable_mac.txt
index 67cace7268..f030c9f8e5 100644
--- a/indra/newview/featuretable_mac.txt
+++ b/indra/newview/featuretable_mac.txt
@@ -140,7 +140,7 @@ RenderWaterReflections		1	0
 VertexShaderEnable			1	1
 WindLightUseAtmosShaders	1	1
 WLSkyDetail					1	48
-RenderUseFBO				1	1
+RenderUseFBO				1	0
 
 //
 // Ultra graphics (REALLY PURTY!)
@@ -166,7 +166,7 @@ RenderWaterReflections		1	1
 VertexShaderEnable			1	1
 WindLightUseAtmosShaders	1	1
 WLSkyDetail					1	128
-RenderUseFBO				1	1
+RenderUseFBO				1	0
 
 //
 // Class Unknown Hardware (unknown)
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index 0c5735cdfc..dd69287dbb 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -533,7 +533,8 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY)
 	mScreenWidth = resX;
 	mScreenHeight = resY;
 	
-	U32 samples = gSavedSettings.getU32("RenderFSAASamples");
+	//never use more than 4 samples for render targets
+	U32 samples = llmin(gSavedSettings.getU32("RenderFSAASamples"), (U32) 4);
 	U32 res_mod = gSavedSettings.getU32("RenderResolutionDivisor");
 
 	if (res_mod > 1 && res_mod < resX && res_mod < resY)
@@ -554,8 +555,6 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY)
 		mDeferredDepth.allocate(resX, resY, 0, TRUE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE);
 		addDeferredAttachments(mDeferredScreen);
 	
-		// always set viewport to desired size, since allocate resets the viewport
-
 		mScreen.allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE);		
 		mEdgeMap.allocate(resX, resY, GL_ALPHA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE);
 
@@ -598,7 +597,7 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY)
 	}
 	
 
-	if (gGLManager.mHasFramebufferMultisample && samples > 1)
+	if (LLRenderTarget::sUseFBO && gGLManager.mHasFramebufferMultisample && samples > 1)
 	{
 		mSampleBuffer.allocate(resX,resY,GL_RGBA,TRUE,TRUE,LLTexUnit::TT_RECT_TEXTURE,FALSE,samples);
 		if (LLPipeline::sRenderDeferred)
-- 
cgit v1.2.3


From aad22f9faf045f2412f7c32336cff3886464c157 Mon Sep 17 00:00:00 2001
From: Loren Shih <seraph@lindenlab.com>
Date: Thu, 4 Nov 2010 16:35:24 -0400
Subject: SH-281 Fix for snapshots showing interface all the time

---
 indra/newview/llviewerdisplay.cpp | 19 ++++++++++++++++---
 indra/newview/llviewerwindow.cpp  |  9 ++++++---
 2 files changed, 22 insertions(+), 6 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp
index 137704e960..40583f05bf 100644
--- a/indra/newview/llviewerdisplay.cpp
+++ b/indra/newview/llviewerdisplay.cpp
@@ -221,11 +221,24 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 	if (gResizeScreenTexture)
 	{ //skip render on frames where screen texture is resizing
 		gGL.flush();
-		glClear(GL_COLOR_BUFFER_BIT);
-		gViewerWindow->mWindow->swapBuffers();
+		if (!for_snapshot)
+		{
+			glClear(GL_COLOR_BUFFER_BIT);
+			gViewerWindow->mWindow->swapBuffers();
+		}
+	
 		gResizeScreenTexture = FALSE;
 		gPipeline.resizeScreenTexture();
-		return;
+
+		if (!for_snapshot)
+		{
+			return;
+		}
+	}
+
+	if (LLPipeline::sRenderDeferred)
+	{ //hack to make sky show up in deferred snapshots
+		for_snapshot = FALSE;
 	}
 
 	if (LLPipeline::sRenderFrameTest)
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index a0a3380441..15f82cf568 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -3860,7 +3860,9 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei
 	setCursor(UI_CURSOR_WAIT);
 
 	// Hide all the UI widgets first and draw a frame
-	BOOL prev_draw_ui = gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI);
+	BOOL prev_draw_ui = gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI) ? TRUE : FALSE;
+
+	show_ui = show_ui ? TRUE : FALSE;
 
 	if ( prev_draw_ui != show_ui)
 	{
@@ -3998,12 +4000,13 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei
 
 				if (LLPipeline::sRenderDeferred)
 				{
-					display(do_rebuild, scale_factor, subfield, FALSE);
+					display(do_rebuild, scale_factor, subfield, TRUE);
 				}
 				else
 				{
 					display(do_rebuild, scale_factor, subfield, TRUE);
-					// Required for showing the GUI in snapshots?  See DEV-16350 for details. JC
+					// Required for showing the GUI in snapshots and performing bloom composite overlay
+					// Call even if show_ui is FALSE
 					render_ui(scale_factor, subfield);
 				}
 			}
-- 
cgit v1.2.3


From 7babf5b0da460e404e294a6f2d53a5c61e9c50e2 Mon Sep 17 00:00:00 2001
From: Loren Shih <seraph@lindenlab.com>
Date: Thu, 4 Nov 2010 16:35:46 -0400
Subject: SH-281 Make UI in snapshot off by default.

---
 indra/newview/app_settings/settings.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 33f5482e50..791f2f760f 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -8283,7 +8283,7 @@
       <key>Type</key>
       <string>Boolean</string>
       <key>Value</key>
-      <integer>1</integer>
+      <integer>0</integer>
     </map>
     <key>RenderUIBuffer</key>
     <map>
-- 
cgit v1.2.3


From b827f4d2aa036a2677af6f7f56b47b821c45e922 Mon Sep 17 00:00:00 2001
From: Loren Shih <seraph@lindenlab.com>
Date: Thu, 4 Nov 2010 16:36:37 -0400
Subject: SH-325 FIXED Add terminal / to SearchURL in viewer settings.xml

Trivial fix to add "/" to the search string.
---
 indra/newview/app_settings/settings.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 791f2f760f..cefcb3d9b1 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -3863,7 +3863,7 @@
       <key>Type</key>
       <string>String</string>
       <key>Value</key>
-      <string>http://search.secondlife.com/viewer/[CATEGORY]?q=[QUERY]&amp;p=[AUTH_TOKEN]&amp;r=[MATURITY]&amp;lang=[LANGUAGE]&amp;g=[GODLIKE]&amp;sid=[SESSION_ID]&amp;rid=[REGION_ID]&amp;pid=[PARCEL_ID]&amp;channel=[CHANNEL]&amp;version=[VERSION]&amp;major=[VERSION_MAJOR]&amp;minor=[VERSION_MINOR]&amp;patch=[VERSION_PATCH]&amp;build=[VERSION_BUILD]</string>
+      <string>http://search.secondlife.com/viewer/[CATEGORY]/?q=[QUERY]&amp;p=[AUTH_TOKEN]&amp;r=[MATURITY]&amp;lang=[LANGUAGE]&amp;g=[GODLIKE]&amp;sid=[SESSION_ID]&amp;rid=[REGION_ID]&amp;pid=[PARCEL_ID]&amp;channel=[CHANNEL]&amp;version=[VERSION]&amp;major=[VERSION_MAJOR]&amp;minor=[VERSION_MINOR]&amp;patch=[VERSION_PATCH]&amp;build=[VERSION_BUILD]</string>
     </map>
     <key>HighResSnapshot</key>
     <map>
-- 
cgit v1.2.3


From 0347844b340ed5b64ade2428fec85e5ecb2d478a Mon Sep 17 00:00:00 2001
From: Loren Shih <seraph@lindenlab.com>
Date: Thu, 4 Nov 2010 16:53:14 -0400
Subject: SH-358 FIXED Non-FBO driven fix for anti-aliasing (make applying of
 FSAA require restart when FBO is disabled).

---
 indra/newview/llfloaterhardwaresettings.cpp                |  7 +++++--
 indra/newview/llviewerwindow.cpp                           |  2 +-
 indra/newview/pipeline.cpp                                 |  2 +-
 .../skins/default/xui/en/floater_hardware_settings.xml     | 14 +++++++++++++-
 4 files changed, 20 insertions(+), 5 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloaterhardwaresettings.cpp b/indra/newview/llfloaterhardwaresettings.cpp
index 3cd3c74ee4..e562b00a04 100644
--- a/indra/newview/llfloaterhardwaresettings.cpp
+++ b/indra/newview/llfloaterhardwaresettings.cpp
@@ -104,6 +104,8 @@ void LLFloaterHardwareSettings::refreshEnabledState()
 	getChildView("(brightness, lower is brighter)")->setEnabled(!gPipeline.canUseWindLightShaders());
 	getChildView("fog")->setEnabled(!gPipeline.canUseWindLightShaders());
 	getChildView("fsaa")->setEnabled(gPipeline.canUseAntiAliasing());
+	getChildView("antialiasing restart")->setVisible(!gSavedSettings.getBOOL("RenderUseFBO"));
+
 	/* Enable to reset fsaa value to disabled when feature is not available.
 	if (!gPipeline.canUseAntiAliasing())
 	{
@@ -130,7 +132,8 @@ BOOL LLFloaterHardwareSettings::postBuild()
 void LLFloaterHardwareSettings::apply()
 {
 	// Anisotropic rendering
-	BOOL old_anisotropic = LLImageGL::sGlobalUseAnisotropic;
+	//Do nothing here -- this code is unreliable, and UI now tells users to restart for changes to take affect
+	/*BOOL old_anisotropic = LLImageGL::sGlobalUseAnisotropic;
 	LLImageGL::sGlobalUseAnisotropic = getChild<LLUICtrl>("ani")->getValue();
 
 	U32 fsaa = (U32) getChild<LLUICtrl>("fsaa")->getValue().asInteger();
@@ -151,7 +154,7 @@ void LLFloaterHardwareSettings::apply()
 	else if (old_anisotropic != LLImageGL::sGlobalUseAnisotropic)
 	{
 		gViewerWindow->restartDisplay(logged_in);
-	}
+	}*/
 
 	refresh();
 }
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 15f82cf568..ebcb6e3738 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -1341,7 +1341,7 @@ LLViewerWindow::LLViewerWindow(
 		gSavedSettings.getBOOL("DisableVerticalSync"),
 		!gNoRender,
 		ignore_pixel_depth,
-		0); //gSavedSettings.getU32("RenderFSAASamples"));
+		gSavedSettings.getBOOL("RenderUseFBO") ? 0 : gSavedSettings.getU32("RenderFSAASamples")); //don't use window level anti-aliasing if FBOs are enabled
 
 	if (!LLAppViewer::instance()->restoreErrorTrap())
 	{
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index dd69287dbb..03e6e65788 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -873,7 +873,7 @@ BOOL LLPipeline::canUseWindLightShadersOnObjects() const
 
 BOOL LLPipeline::canUseAntiAliasing() const
 {
-	return (gSavedSettings.getBOOL("RenderUseFBO"));
+	return TRUE; //(gSavedSettings.getBOOL("RenderUseFBO"));
 }
 
 void LLPipeline::unloadShaders()
diff --git a/indra/newview/skins/default/xui/en/floater_hardware_settings.xml b/indra/newview/skins/default/xui/en/floater_hardware_settings.xml
index 27f8b4bb39..b2c620f435 100644
--- a/indra/newview/skins/default/xui/en/floater_hardware_settings.xml
+++ b/indra/newview/skins/default/xui/en/floater_hardware_settings.xml
@@ -22,7 +22,7 @@
     <check_box
      control_name="RenderAnisotropic"
      height="16"
-     label="Anisotropic Filtering (slower when enabled)"
+     label="Anisotropic Filtering (slower when enabled, requires viewer restart)"
      layout="topleft"
      left_pad="10"
      name="ani"
@@ -71,6 +71,18 @@
          name="16x"
          value="16" />
     </combo_box>
+   <text
+     type="string"
+     length="1"
+     follows="left|top"
+     height="12"
+     layout="topleft"
+     left_pad="10"
+     name="antialiasing restart"
+     top_delta="0"
+     width="188">
+      (requires viewer restart)
+    </text>
     <spinner
      control_name="RenderGamma"
      decimal_digits="2"
-- 
cgit v1.2.3


From 54c882713591000383704ccd3c5866a226918eef Mon Sep 17 00:00:00 2001
From: Loren Shih <seraph@lindenlab.com>
Date: Thu, 4 Nov 2010 16:54:20 -0400
Subject: SH-353 FIXED Crash when toggling anisotropic filtering

---
 indra/newview/llfloaterhardwaresettings.cpp | 25 -------------------------
 indra/newview/llviewercontrol.cpp           |  8 ++++++++
 2 files changed, 8 insertions(+), 25 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloaterhardwaresettings.cpp b/indra/newview/llfloaterhardwaresettings.cpp
index e562b00a04..1e91710552 100644
--- a/indra/newview/llfloaterhardwaresettings.cpp
+++ b/indra/newview/llfloaterhardwaresettings.cpp
@@ -131,31 +131,6 @@ BOOL LLFloaterHardwareSettings::postBuild()
 
 void LLFloaterHardwareSettings::apply()
 {
-	// Anisotropic rendering
-	//Do nothing here -- this code is unreliable, and UI now tells users to restart for changes to take affect
-	/*BOOL old_anisotropic = LLImageGL::sGlobalUseAnisotropic;
-	LLImageGL::sGlobalUseAnisotropic = getChild<LLUICtrl>("ani")->getValue();
-
-	U32 fsaa = (U32) getChild<LLUICtrl>("fsaa")->getValue().asInteger();
-	U32 old_fsaa = gSavedSettings.getU32("RenderFSAASamples");
-
-	BOOL logged_in = (LLStartUp::getStartupState() >= STATE_STARTED);
-
-	if (old_fsaa != fsaa)
-	{
-		gSavedSettings.setU32("RenderFSAASamples", fsaa);
-		LLWindow* window = gViewerWindow->getWindow();
-		LLCoordScreen size;
-		window->getSize(&size);
-		gViewerWindow->changeDisplaySettings(size,
-											gSavedSettings.getBOOL("DisableVerticalSync"),
-											logged_in);
-	}
-	else if (old_anisotropic != LLImageGL::sGlobalUseAnisotropic)
-	{
-		gViewerWindow->restartDisplay(logged_in);
-	}*/
-
 	refresh();
 }
 
diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp
index 522b5a7dfa..fbec2a7b9e 100644
--- a/indra/newview/llviewercontrol.cpp
+++ b/indra/newview/llviewercontrol.cpp
@@ -131,6 +131,13 @@ static bool handleReleaseGLBufferChanged(const LLSD& newvalue)
 	return true;
 }
 
+static bool handleAnisotropicChanged(const LLSD& newvalue)
+{
+	LLImageGL::sGlobalUseAnisotropic = newvalue.asBoolean();
+	LLImageGL::dirtyTexOptions();
+	return true;
+}
+
 static bool handleVolumeLODChanged(const LLSD& newvalue)
 {
 	LLVOVolume::sLODFactor = (F32) newvalue.asReal();
@@ -498,6 +505,7 @@ void settings_setup_listeners()
 	gSavedSettings.getControl("RenderSpecularResY")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2));
 	gSavedSettings.getControl("RenderSpecularExponent")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2));
 	gSavedSettings.getControl("RenderFSAASamples")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2));
+	gSavedSettings.getControl("RenderAnisotropic")->getSignal()->connect(boost::bind(&handleAnisotropicChanged, _2));
 	gSavedSettings.getControl("RenderShadowResolutionScale")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2));
 	gSavedSettings.getControl("RenderGlow")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2));
 	gSavedSettings.getControl("RenderGlow")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));
-- 
cgit v1.2.3


From 4a291538adf9f17b2125b3ec76e3b8033bf32bd3 Mon Sep 17 00:00:00 2001
From: Loren Shih <seraph@lindenlab.com>
Date: Thu, 4 Nov 2010 16:55:04 -0400
Subject: SH-353 FIXED Crash when toggling anisotropic filtering

Anisotropic filtering does NOT require a viewer restart.
---
 indra/newview/skins/default/xui/en/floater_hardware_settings.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/floater_hardware_settings.xml b/indra/newview/skins/default/xui/en/floater_hardware_settings.xml
index b2c620f435..0ea42f9757 100644
--- a/indra/newview/skins/default/xui/en/floater_hardware_settings.xml
+++ b/indra/newview/skins/default/xui/en/floater_hardware_settings.xml
@@ -22,7 +22,7 @@
     <check_box
      control_name="RenderAnisotropic"
      height="16"
-     label="Anisotropic Filtering (slower when enabled, requires viewer restart)"
+     label="Anisotropic Filtering (slower when enabled)"
      layout="topleft"
      left_pad="10"
      name="ani"
-- 
cgit v1.2.3


From bf4ca3922c476fbe3ac2cf393845abf22399ab1d Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Tue, 2 Nov 2010 10:47:51 -0700
Subject: DN-141 llGetDisplayName (and other new LSL fucntions) doesn't
 register (highlight in red) as an internal function in the script editor

---
 indra/newview/skins/default/xui/en/strings.xml | 37 ++++++++++++++++++++++++++
 1 file changed, 37 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index bee0e4fde6..7f48d60ab2 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -1793,6 +1793,43 @@ Returns the media params for a particular face on an object, given the desired l
 llClearPrimMedia(integer face)
 Clears (deletes) the media and all params from the given face.
   </string>
+<string name="LSLTipText_llSetLinkPrimitiveParamsFast" translate="false">
+llSetLinkPrimitiveParamsFast(integer linknumber,list rules)
+Set primitive parameters for linknumber based on rules.
+</string>
+<string name="LSLTipText_llGetLinkPrimitiveParams" translate="false">
+llGetLinkPrimitiveParams(integer linknumber,list rules)
+Get primitive parameters for linknumber based on rules.
+</string>
+<string name="LSLTipText_llLinkParticleSystem" translate="false">
+llLinkParticleSystem(integer linknumber,list rules)
+Creates a particle system based on rules.  Empty list removes particle system from object.
+List format is [ rule1, data1, rule2, data2 . . . rulen, datan ].
+</string>
+<string name="LSLTipText_llSetLinkTextureAnim" translate="false">
+llSetLinkTextureAnim(integer link, integer mode, integer face, integer sizex, integer sizey, float start, float length, float rate)
+Animate the texture on the specified prim's face/faces.
+</string>
+<string name="LSLTipText_llGetLinkNumberOfSides" translate="false">
+integer llGetLinkNumberOfSides(integer link)
+Returns the number of sides of the specified linked prim.
+</string>
+<string name="LSLTipText_llGetUsername" translate="false">
+string llGetUsername(key id)
+Returns the single-word username of an avatar, iff the avatar is in the current region, otherwise the empty string.
+</string>
+<string name="LSLTipText_llRequestUsername" translate="false">
+key llRequestUsername(key id)
+Requests single-word username of an avatar.  When data is available the dataserver event will be raised.
+</string>
+<string name="LSLTipText_llGetDisplayName" translate="false">
+string llGetDisplayName(key id)
+Returns the name of an avatar, iff the avatar is in the current simulator, otherwise the empty string.
+</string>
+<string name="LSLTipText_llRequestDisplayName" translate="false">
+key llRequestDisplayName(key id)
+Requests name of an avatar.  When data is available the dataserver event will be raised.
+</string>
 
   <!-- Avatar busy/away mode -->
 	<string name="AvatarSetNotAway">Not Away</string>
-- 
cgit v1.2.3


From 5d7417b40ed8717b3f307ed9e53c249a3a26cf1b Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Tue, 2 Nov 2010 20:26:38 +0200
Subject: STORM-422 FIXED Added command line option "-disablecrashlogger" to
 disable crash logger.

This is a patch originally written by Robin Cornelius.
I made it work with Google Breakpad.
---
 indra/newview/app_settings/cmd_line.xml |  8 ++++++++
 indra/newview/llappviewer.cpp           | 14 ++++++++++++++
 2 files changed, 22 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/cmd_line.xml b/indra/newview/app_settings/cmd_line.xml
index 00d69f805e..ba3b6a42a4 100644
--- a/indra/newview/app_settings/cmd_line.xml
+++ b/indra/newview/app_settings/cmd_line.xml
@@ -391,5 +391,13 @@
       <string>CrashOnStartup</string>
     </map>
 
+    <key>disablecrashlogger</key>
+    <map>
+      <key>desc</key>
+      <string>Disables the crash logger and lets the OS handle crashes</string>
+      <key>map-to</key>
+      <string>DisableCrashLogger</string>
+    </map>
+
   </map>
 </llsd>
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 931b9fd2f3..b17e4d77d5 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -2020,6 +2020,15 @@ bool LLAppViewer::initConfiguration()
 	// - apply command line settings 
 	clp.notify(); 
 
+	// Register the core crash option as soon as we can
+	// if we want gdb post-mortem on cores we need to be up and running
+	// ASAP or we might miss init issue etc.
+	if(clp.hasOption("disablecrashlogger"))
+	{
+		llwarns << "Crashes will be handled by system, stack trace logs and crash logger are both disabled" << llendl;
+		LLAppViewer::instance()->disableCrashlogger();
+	}
+
 	// Handle initialization from settings.
 	// Start up the debugging console before handling other options.
 	if (gSavedSettings.getBOOL("ShowConsoleWindow"))
@@ -2596,6 +2605,11 @@ void LLAppViewer::handleViewerCrash()
 		abort();
 	}
 
+	if (LLApp::isCrashloggerDisabled())
+	{
+		abort();
+	}
+
 	// Returns whether a dialog was shown.
 	// Only do the logic in here once
 	if (pApp->mReportedCrash)
-- 
cgit v1.2.3


From a26386c53a09d47eff092ad89b5684503ee31b9d Mon Sep 17 00:00:00 2001
From: Nat Goodspeed <nat@lindenlab.com>
Date: Wed, 3 Nov 2010 08:43:31 -0400
Subject: For non-Release Linux build, explain why we don't create tarball.

---
 indra/newview/viewer_manifest.py | 3 +++
 1 file changed, 3 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index 6861f02bfb..4b98a11091 100644
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -897,6 +897,9 @@ class LinuxManifest(ViewerManifest):
                         'dir': self.get_build_prefix(),
                         'inst_name': installer_name,
                         'inst_path':self.build_path_of(installer_name)})
+            else:
+                print "Skipping %s.tar.bz2 for non-Release build (%s)" % \
+                      (installer_name, self.args['buildtype'])
         finally:
             self.run_command("mv %(inst)s %(dst)s" % {
                 'dst': self.get_dst_prefix(),
-- 
cgit v1.2.3


From 2f6062e59793c8a5326c1dfac41334bac428faa9 Mon Sep 17 00:00:00 2001
From: Nat Goodspeed <nat@lindenlab.com>
Date: Wed, 3 Nov 2010 11:08:04 -0400
Subject: Remove erroneous 'inline' on LLPanelStandStopFlying::getInstance()
 This is ignored by every compiler except Linux g++ 4.4.3 in Release mode. In
 that case, it literally does cause getInstance() to be inlined, therefore
 llmoveview.o contains no such symbol, therefore the Linux viewer link fails
 in Release mode. But for a method implementation in a .cpp file of a method
 declared in a .h file, 'inline' is just wrong. Removing it fixes Release
 build.

---
 indra/newview/llmoveview.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp
index 6658e1d7e8..d38bb5aa4a 100644
--- a/indra/newview/llmoveview.cpp
+++ b/indra/newview/llmoveview.cpp
@@ -552,7 +552,7 @@ LLPanelStandStopFlying::LLPanelStandStopFlying() :
 }
 
 // static
-inline LLPanelStandStopFlying* LLPanelStandStopFlying::getInstance()
+LLPanelStandStopFlying* LLPanelStandStopFlying::getInstance()
 {
 	static LLPanelStandStopFlying* panel = getStandStopFlyingPanel();
 	return panel;
-- 
cgit v1.2.3


From 89f191cd68c54f1d6f46d7d8d4011df180c9de8d Mon Sep 17 00:00:00 2001
From: Dave Parks <davep@lindenlab.com>
Date: Wed, 3 Nov 2010 12:10:45 -0500
Subject: SH-281 Make UI in snapshot off by default.

---
 indra/newview/app_settings/settings.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 23b6edc321..33c6c939d4 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -8316,7 +8316,7 @@
       <key>Type</key>
       <string>Boolean</string>
       <key>Value</key>
-      <integer>1</integer>
+      <integer>0</integer>
     </map>
     <key>RenderUIBuffer</key>
     <map>
-- 
cgit v1.2.3


From 690889cfccd2f12238849c946b2cb19fe05acabe Mon Sep 17 00:00:00 2001
From: Eli Linden <eli@lindenlab.com>
Date: Wed, 3 Nov 2010 11:25:36 -0700
Subject: CT-633 WIP ES translation for Viewer 2.3, Set19

---
 .../skins/default/xui/es/floater_avatar_picker.xml |   9 +-
 .../newview/skins/default/xui/es/floater_bumps.xml |  10 +-
 .../skins/default/xui/es/floater_buy_object.xml    |  37 +++---
 .../skins/default/xui/es/floater_display_name.xml  |  18 +++
 .../newview/skins/default/xui/es/floater_event.xml |  45 ++-----
 .../skins/default/xui/es/floater_incoming_call.xml |   2 +-
 indra/newview/skins/default/xui/es/floater_pay.xml |   2 +-
 .../skins/default/xui/es/floater_pay_object.xml    |   2 +-
 .../newview/skins/default/xui/es/floater_tools.xml |   4 +-
 .../default/xui/es/floater_voice_controls.xml      |   2 +-
 .../skins/default/xui/es/inspect_avatar.xml        |   5 +
 indra/newview/skins/default/xui/es/menu_viewer.xml |   6 +-
 .../newview/skins/default/xui/es/notifications.xml | 140 +++++++++++++++------
 .../skins/default/xui/es/panel_edit_profile.xml    |  10 +-
 .../default/xui/es/panel_group_land_money.xml      |   1 +
 indra/newview/skins/default/xui/es/panel_login.xml |   4 +-
 .../skins/default/xui/es/panel_place_profile.xml   |   3 +-
 .../default/xui/es/panel_preferences_general.xml   |   8 +-
 .../default/xui/es/panel_preferences_setup.xml     |  10 +-
 .../skins/default/xui/es/panel_profile_view.xml    |   8 +-
 .../newview/skins/default/xui/es/role_actions.xml  |   5 +-
 indra/newview/skins/default/xui/es/strings.xml     |  22 +++-
 22 files changed, 229 insertions(+), 124 deletions(-)
 create mode 100644 indra/newview/skins/default/xui/es/floater_display_name.xml

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/es/floater_avatar_picker.xml b/indra/newview/skins/default/xui/es/floater_avatar_picker.xml
index c83dd3ef3e..49fce5d4ec 100644
--- a/indra/newview/skins/default/xui/es/floater_avatar_picker.xml
+++ b/indra/newview/skins/default/xui/es/floater_avatar_picker.xml
@@ -24,6 +24,10 @@
 				Escribe parte del nombre de la persona:
 			</text>
 			<button label="Ir" label_selected="Ir" name="Find"/>
+			<scroll_list name="SearchResults">
+				<columns label="Nombre" name="name"/>
+				<columns label="Nombre de usuario" name="username"/>
+			</scroll_list>
 		</panel>
 		<panel label="Amigos" name="FriendsPanel">
 			<text name="InstructSelectFriend">
@@ -39,7 +43,10 @@
 				Metros
 			</text>
 			<button font="SansSerifSmall" label="Actualizar la lista" label_selected="Actualizar la lista" left_delta="1" name="Refresh" width="115"/>
-			<scroll_list bottom_delta="-169" height="159" name="NearMe"/>
+			<scroll_list bottom_delta="-169" height="159" name="NearMe">
+				<columns label="Nombre" name="name"/>
+				<columns label="Nombre de usuario" name="username"/>
+			</scroll_list>
 		</panel>
 	</tab_container>
 	<button label="OK" label_selected="OK" name="ok_btn"/>
diff --git a/indra/newview/skins/default/xui/es/floater_bumps.xml b/indra/newview/skins/default/xui/es/floater_bumps.xml
index 6a9c6b1f22..6d4196ca7c 100644
--- a/indra/newview/skins/default/xui/es/floater_bumps.xml
+++ b/indra/newview/skins/default/xui/es/floater_bumps.xml
@@ -4,19 +4,19 @@
 		No se han detectado
 	</floater.string>
 	<floater.string name="bump">
-		[TIME]  [FIRST] [LAST] ha chocado con usted
+		[TIME]  [NAME] ha chocado contigo
 	</floater.string>
 	<floater.string name="llpushobject">
-		[TIME]  [FIRST] [LAST] le ha empujado con un script
+		[TIME]  [NAME] te ha empujado con un script
 	</floater.string>
 	<floater.string name="selected_object_collide">
-		[TIME]  [FIRST] [LAST] ha hecho que un objeto impacte con usted
+		[TIME]  [NAME] te ha golpeado con un script
 	</floater.string>
 	<floater.string name="scripted_object_collide">
-		[TIME]  [FIRST] [LAST] ha hecho que un objeto con script impacte con usted
+		[TIME]  [NAME] te ha golpeado con un objeto con script
 	</floater.string>
 	<floater.string name="physical_object_collide">
-		[TIME]  [FIRST] [LAST] ha hecho que un objeto material impacte con usted
+		[TIME]  [NAME] te ha golpeado con un objeto físico
 	</floater.string>
 	<floater.string name="timeStr">
 		[[hour,datetime,slt]:[min,datetime,slt]]
diff --git a/indra/newview/skins/default/xui/es/floater_buy_object.xml b/indra/newview/skins/default/xui/es/floater_buy_object.xml
index 117d29777f..a774bc6d05 100644
--- a/indra/newview/skins/default/xui/es/floater_buy_object.xml
+++ b/indra/newview/skins/default/xui/es/floater_buy_object.xml
@@ -1,26 +1,29 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater name="contents" title="COMPRAR UNA COPIA DEL OBJETO">
+	<floater.string name="title_buy_text">
+		Comprar
+	</floater.string>
+	<floater.string name="title_buy_copy_text">
+		Comprar una copia de
+	</floater.string>
+	<floater.string name="no_copy_text">
+		(no copiable)
+	</floater.string>
+	<floater.string name="no_modify_text">
+		(no modificable)
+	</floater.string>
+	<floater.string name="no_transfer_text">
+		(no transferible)
+	</floater.string>
 	<text name="contents_text">
 		Contenidos:
 	</text>
 	<text name="buy_text">
-		¿Comprarlo por [AMOUNT] L$ a [NAME]?
+		¿Comprar por [AMOUNT] L$ a:
+	</text>
+	<text name="buy_name_text">
+		[NAME]?
 	</text>
-	<button label="Cancelar" label_selected="Cancelar" name="cancel_btn"/>
 	<button label="Comprar" label_selected="Comprar" name="buy_btn"/>
-	<string name="title_buy_text">
-		Comprar
-	</string>
-	<string name="title_buy_copy_text">
-		Comprar una copia de
-	</string>
-	<string name="no_copy_text">
-		(no copiable)
-	</string>
-	<string name="no_modify_text">
-		(no modificable)
-	</string>
-	<string name="no_transfer_text">
-		(no transferible)
-	</string>
+	<button label="Cancelar" label_selected="Cancelar" name="cancel_btn"/>
 </floater>
diff --git a/indra/newview/skins/default/xui/es/floater_display_name.xml b/indra/newview/skins/default/xui/es/floater_display_name.xml
new file mode 100644
index 0000000000..f1a31a6776
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/floater_display_name.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Display Name" title="CAMBIAR EL NOMBRE MOSTRADO">
+	<text name="info_text">
+		El nombre que le has dado a tu avatar se denomina Nombre mostrado. Puedes cambiarlo una vez a la semana.
+	</text>
+	<text name="lockout_text">
+		No puedes cambiar el nombre mostrado hasta: [TIME].
+	</text>
+	<text name="set_name_label">
+		Nuevo nombre mostrado:
+	</text>
+	<text name="name_confirm_label">
+		Vuelve a escribir tu nombre nuevo para confirmarlo:
+	</text>
+	<button label="Guardar" name="save_btn" tool_tip="Guarda tu nombre nuevo"/>
+	<button label="Reconfigurar" name="reset_btn" tool_tip="Hacer que el nombre mostrado y el nombre de usuario coincidan"/>
+	<button label="Cancelar" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_event.xml b/indra/newview/skins/default/xui/es/floater_event.xml
index 8bca7783ab..d2724bf8b0 100644
--- a/indra/newview/skins/default/xui/es/floater_event.xml
+++ b/indra/newview/skins/default/xui/es/floater_event.xml
@@ -1,40 +1,11 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater
- follows="all"
- height="400"
- can_resize="true"
- help_topic="event_details"
- label="Event"
- layout="topleft"
- name="Event"
- save_rect="true"
- save_visibility="false"
- title="EVENT DETAILS" 
- width="600">
-	<floater.string
-		name="loading_text">
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater can_resize="true" follows="all" height="400" help_topic="event_details" label="Event" layout="topleft" name="Event" save_rect="true" save_visibility="false" title="EVENT DETAILS" width="600">
+	<floater.string name="loading_text">
 		Cargando...
 	</floater.string>
-    <floater.string
-     name="done_text">
-        Done
-    </floater.string>
-  <web_browser
-     trusted_content="true" 
-     follows="left|right|top|bottom"
-     layout="topleft"
-     left="10"
-     name="browser"
-     height="365"
-     width="580"
-     top="0"/>
-	<text
-	 follows="bottom|left"
-	 height="16"
-	 layout="topleft"
-	 left_delta="0"
-	 name="status_text"
-	 top_pad="10"
-	 width="150" />	 
+	<floater.string name="done_text">
+		Hecho
+	</floater.string>
+	<web_browser follows="left|right|top|bottom" height="365" layout="topleft" left="10" name="browser" top="0" trusted_content="true" width="580"/>
+	<text follows="bottom|left" height="16" layout="topleft" left_delta="0" name="status_text" top_pad="10" width="150"/>
 </floater>
-
diff --git a/indra/newview/skins/default/xui/es/floater_incoming_call.xml b/indra/newview/skins/default/xui/es/floater_incoming_call.xml
index 88cfc9575a..b5b756abb6 100644
--- a/indra/newview/skins/default/xui/es/floater_incoming_call.xml
+++ b/indra/newview/skins/default/xui/es/floater_incoming_call.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="incoming call" title="ESTÁ LLAMANDO ALGUIEN DESCONOCIDO">
+<floater name="incoming call" title="Llamada entrante">
 	<floater.string name="lifetime">
 		5
 	</floater.string>
diff --git a/indra/newview/skins/default/xui/es/floater_pay.xml b/indra/newview/skins/default/xui/es/floater_pay.xml
index d4a4e81310..ad9a43ad71 100644
--- a/indra/newview/skins/default/xui/es/floater_pay.xml
+++ b/indra/newview/skins/default/xui/es/floater_pay.xml
@@ -11,7 +11,7 @@
 	</text>
 	<icon name="icon_person" tool_tip="Persona"/>
 	<text left="115" name="payee_name">
-		[FIRST] [LAST]
+		Nombre de prueba demasiado largo para comprobar la función de recorte
 	</text>
 	<button label="1 L$" label_selected="1 L$" name="fastpay 1"/>
 	<button label="5 L$" label_selected="5 L$" name="fastpay 5"/>
diff --git a/indra/newview/skins/default/xui/es/floater_pay_object.xml b/indra/newview/skins/default/xui/es/floater_pay_object.xml
index f29745ea9b..4767f4dfa0 100644
--- a/indra/newview/skins/default/xui/es/floater_pay_object.xml
+++ b/indra/newview/skins/default/xui/es/floater_pay_object.xml
@@ -8,7 +8,7 @@
 	</string>
 	<icon name="icon_person" tool_tip="Persona"/>
 	<text left="120" name="payee_name" width="180">
-		[FIRST] [LAST]
+		Ericacita Moostopolison
 	</text>
 	<text left="5" name="object_name_label" width="110">
 		A través del objeto:
diff --git a/indra/newview/skins/default/xui/es/floater_tools.xml b/indra/newview/skins/default/xui/es/floater_tools.xml
index 9867f1b575..9b25c4bdd1 100644
--- a/indra/newview/skins/default/xui/es/floater_tools.xml
+++ b/indra/newview/skins/default/xui/es/floater_tools.xml
@@ -171,13 +171,13 @@
 				Creador:
 			</text>
 			<text name="Creator Name">
-				Thrax Linden
+				Dª Esbee Linden (esbee.linden)
 			</text>
 			<text name="Owner:">
 				Propietario:
 			</text>
 			<text name="Owner Name">
-				Thrax Linden
+				Dª Erica &quot;Moose&quot; Linden (erica.linden)
 			</text>
 			<text name="Group:">
 				Grupo:
diff --git a/indra/newview/skins/default/xui/es/floater_voice_controls.xml b/indra/newview/skins/default/xui/es/floater_voice_controls.xml
index 6f4782417d..f02855123c 100644
--- a/indra/newview/skins/default/xui/es/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/es/floater_voice_controls.xml
@@ -19,7 +19,7 @@
 		<layout_panel name="my_panel">
 			<text name="user_text" value="Mi avatar:"/>
 		</layout_panel>
-        <layout_panel name="leave_call_panel">
+		<layout_panel name="leave_call_panel">
 			<layout_stack name="voice_effect_and_leave_call_stack">
 				<layout_panel name="leave_call_btn_panel">
 					<button label="Colgar" name="leave_call_btn"/>
diff --git a/indra/newview/skins/default/xui/es/inspect_avatar.xml b/indra/newview/skins/default/xui/es/inspect_avatar.xml
index bff10d9292..119f252db2 100644
--- a/indra/newview/skins/default/xui/es/inspect_avatar.xml
+++ b/indra/newview/skins/default/xui/es/inspect_avatar.xml
@@ -10,6 +10,11 @@
 	<string name="Details">
 		[SL_PROFILE]
 	</string>
+	<text name="user_name_small" value="Grumpity ProductEngine con un nombre demasiado largo"/>
+	<text name="user_slid" value="james.linden"/>
+	<text name="user_details">
+		Ésta es mi descripción de Second Life que, por cierto, me encanta. Pero, por lo que sea, me he enrollado más de la cuenta y la descripción es larguísima.
+	</text>
 	<slider name="volume_slider" tool_tip="Volumen de la voz" value="0.5"/>
 	<button label="Añadir como amigo" name="add_friend_btn"/>
 	<button label="MI" name="im_btn"/>
diff --git a/indra/newview/skins/default/xui/es/menu_viewer.xml b/indra/newview/skins/default/xui/es/menu_viewer.xml
index 4ad631ac10..649c0c2043 100644
--- a/indra/newview/skins/default/xui/es/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/es/menu_viewer.xml
@@ -85,6 +85,7 @@
 			<menu_item_call label="Coger una copia" name="Take Copy"/>
 			<menu_item_call label="Guardar una copia en mi inventario" name="Save Object Back to My Inventory"/>
 			<menu_item_call label="Guardar una copia del objeto en los contenidos de donde salió" name="Save Object Back to Object Contents"/>
+			<menu_item_call label="Devolver objeto" name="Return Object back to Owner"/>
 		</menu>
 		<menu label="Scripts" name="Scripts">
 			<menu_item_call label="Recompilar los scripts (Mono)" name="Mono"/>
@@ -98,6 +99,7 @@
 			<menu_item_check label="Seleccionar sólo mis objetos" name="Select Only My Objects"/>
 			<menu_item_check label="Seleccionar sólo los objetos movibles" name="Select Only Movable Objects"/>
 			<menu_item_check label="Seleccionar marcando los alrededores" name="Select By Surrounding"/>
+			<menu_item_check label="Mostrar detalles de la selección" name="Show Selection Outlines"/>
 			<menu_item_check label="Al seleccionar, mostrar lo oculto" name="Show Hidden Selection"/>
 			<menu_item_check label="Al seleccionar, mostrar el radio de la luz" name="Show Light Radius for Selection"/>
 			<menu_item_check label="Mostrar el rayo indicador" name="Show Selection Beam"/>
@@ -118,6 +120,7 @@
 		<menu_item_call label="Denunciar una infracción" name="Report Abuse"/>
 		<menu_item_call label="Informar de un fallo" name="Report Bug"/>
 		<menu_item_call label="Acerca de [APP_NAME]" name="About Second Life"/>
+		<menu_item_check label="Permitir consejos" name="Enable Hints"/>
 	</menu>
 	<menu label="Avanzado" name="Advanced">
 		<menu_item_call label="Parar mis animaciones" name="Stop Animating My Avatar"/>
@@ -264,7 +267,7 @@
 			<menu_item_call label="Web Browser Test" name="Web Browser Test"/>
 			<menu_item_call label="Print Selected Object Info" name="Print Selected Object Info"/>
 			<menu_item_call label="Memory Stats" name="Memory Stats"/>
-			<menu_item_check label="Double-Click Auto-Pilot" name="Double-Click Auto-Pilot"/>
+			<menu_item_check label="Haz doble clic en Piloto automático" name="Double-ClickAuto-Pilot"/>
 			<menu_item_check label="Teleportar mediante doble clic" name="DoubleClick Teleport"/>
 			<menu_item_check label="Debug Clicks" name="Debug Clicks"/>
 			<menu_item_check label="Debug Mouse Events" name="Debug Mouse Events"/>
@@ -276,6 +279,7 @@
 			<menu_item_call label="Save to XML" name="Save to XML"/>
 			<menu_item_check label="Show XUI Names" name="Show XUI Names"/>
 			<menu_item_call label="Send Test IMs" name="Send Test IMs"/>
+			<menu_item_call label="Eliminar registros de nombres en caché" name="Flush Names Caches"/>
 		</menu>
 		<menu label="Avatar" name="Character">
 			<menu label="Grab Baked Texture" name="Grab Baked Texture">
diff --git a/indra/newview/skins/default/xui/es/notifications.xml b/indra/newview/skins/default/xui/es/notifications.xml
index 6379722553..286af718e3 100644
--- a/indra/newview/skins/default/xui/es/notifications.xml
+++ b/indra/newview/skins/default/xui/es/notifications.xml
@@ -110,7 +110,7 @@ Asegúrate de que tu conexión a Internet está funcionando adecuadamente.
 	</notification>
 	<notification name="GrantModifyRights">
 		Al conceder permisos de modificación a otro Residente, le estás permitiendo cambiar, borrar o tomar CUALQUIER objeto que tengas en el mundo. Sé MUY cuidadoso al conceder este permiso.
-¿Quieres conceder permisos de modificación a [FIRST_NAME] [LAST_NAME]?
+¿Quieres conceder permisos de modificación a [NAME]?
 		<usetemplate name="okcancelbuttons" notext="No" yestext="Sí"/>
 	</notification>
 	<notification name="GrantModifyRightsMultiple">
@@ -119,7 +119,7 @@ Asegúrate de que tu conexión a Internet está funcionando adecuadamente.
 		<usetemplate name="okcancelbuttons" notext="No" yestext="Sí"/>
 	</notification>
 	<notification name="RevokeModifyRights">
-		¿Quieres revocar los derechos de modificación a [FIRST_NAME] [LAST_NAME]?
+		¿Quieres retirar los permisos de modificación a [NAME]?
 		<usetemplate name="okcancelbuttons" notext="No" yestext="Sí"/>
 	</notification>
 	<notification name="RevokeModifyRightsMultiple">
@@ -314,17 +314,17 @@ Se ha superado el límite máximo de [MAX_ATTACHMENTS] objetos. Por favor, quít
 		No puedes vestirte este ítem porque aún no se ha cargado. Por favor, inténtalo de nuevo en un minuto.
 	</notification>
 	<notification name="MustHaveAccountToLogIn">
-		¡Vaya! Algo se quedó en blanco.
-Debes escribir tanto el nombre como el apellido de tu avatar, los dos.
+		Lo sentimos. Se ha quedado algún espacio en blanco.
+Tienes que volver a introducir el nombre de usuario de tu avatar.
 
-Necesitas una cuenta para entrar en [SECOND_LIFE]. ¿Quieres crear una ahora?
+Necesitas una cuenta para acceder a [SECOND_LIFE]. ¿Te gustaría crear una ahora?
 		<url name="url">
 			https://join.secondlife.com/index.php?lang=es-ES
 		</url>
 		<usetemplate name="okcancelbuttons" notext="Volver a intentarlo" yestext="Crear una cuenta nueva"/>
 	</notification>
 	<notification name="InvalidCredentialFormat">
-		Escribe el nombre y apellido de tu avatar en el campo Nombre de usuario e inicia sesión otra vez.
+		Escribe el nombre de usuario o el nombre y el apellido de tu avatar en el campo Nombre de usuario e inicia sesión otra vez.
 	</notification>
 	<notification name="AddClassified">
 		Los anuncios clasificados aparecen durante una semana en la sección &apos;Clasificados&apos; de la búsqueda y en [http://secondlife.com/community/classifieds secondlife.com].
@@ -921,12 +921,6 @@ Generalmente, esto es un fallo pasajero. Por favor, personaliza y guarda el íte
 		No se ha podido comprar terreno para el grupo:
 no tienes el permiso de comprar terreno para el grupo que tienes activado actualmente.
 	</notification>
-	<notification label="Añadir como amigo" name="AddFriend">
-		Los amigos pueden darse permiso para localizarse en el mapa y para saber si el otro está conectado.
-
-¿Ofrecer a [NAME] que sea tu amigo?
-		<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
-	</notification>
 	<notification label="Añadir como amigo" name="AddFriendWithMessage">
 		Los amigos pueden darse permiso para localizarse en el mapa y para saber si el otro está conectado.
 
@@ -970,7 +964,7 @@ no tienes el permiso de comprar terreno para el grupo que tienes activado actual
 		</form>
 	</notification>
 	<notification name="RemoveFromFriends">
-		¿Quieres quitar a [FIRST_NAME] [LAST_NAME] de tu lista de amigos?
+		¿Quieres eliminar a [NAME] de tu lista de amigos?
 		<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
 	</notification>
 	<notification name="RemoveMultipleFromFriends">
@@ -1093,12 +1087,11 @@ Si se vende una parcela transferida, el precio de venta se dividirá a partes ig
 		<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
 	</notification>
 	<notification name="DeedLandToGroupWithContribution">
-		Al transferir esta parcela, se requerirá al grupo que tenga y mantenga el crédito suficiente para uso de terreno.
-La tranferencia incluirá, a la vez, una contribucíon de terreno al grupo de &apos;[FIRST_NAME] [LAST_NAME]&apos;.
-El precio de compra de la parcela no se reembolsa al propietario.
-Si se vende una parcela transferida, el precio de venta se dividirá a partes iguales entre los miembros del grupo.
+		Al transferir esta parcela, el grupo deberá poseer y mantener el número suficiente de créditos de uso de terreno.
+El traspaso incluirá una contribución simultánea de terreno al grupo de &quot;[NAME]&quot;.
+El precio de compra del terreno no se le devolverá al propietario. Si se vende una parcela transferida, el precio de venta se dividirá en partes iguales entre los miembros del grupo.
 
-¿Transferir estos [AREA] m² de terreno al grupo &apos;[GROUP_NAME]&apos;?
+¿Transferir este terreno de [AREA] m² al grupo &apos;[GROUP_NAME]&apos;?
 		<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
 	</notification>
 	<notification name="DisplaySetToSafe">
@@ -1471,6 +1464,46 @@ Se ocultará el chat y los mensajes instantáneos   (éstos recibirán tu Respue
 			<button name="Cancel" text="Cancelar"/>
 		</form>
 	</notification>
+	<notification name="SetDisplayNameSuccess">
+		¡Hola, [DISPLAY_NAME]!
+
+Al igual que en la vida real, normalmente se tarda algún tiempo en aprender nombres nuevos.  Te recomendamos que esperes varios días antes de [http://wiki.secondlife.com/wiki/Setting_your_display_name your name to update] en objetos, scripts, búsquedas, etc.
+	</notification>
+	<notification name="SetDisplayNameBlocked">
+		Lo sentimos. No puedes cambiar tu nombre mostrado. Si crees que se trata de un error, ponte en contacto con soporte.
+	</notification>
+	<notification name="SetDisplayNameFailedLength">
+		Lo sentimos. El nombre es demasiado largo.  Los nombres mostrados pueden tener un máximo de [LENGTH] caracteres.
+
+Prueba con un nombre más corto.
+	</notification>
+	<notification name="SetDisplayNameFailedGeneric">
+		Lo sentimos. No hemos podido configurar tu nombre mostrado.  Vuelve a intentarlo más tarde.
+	</notification>
+	<notification name="SetDisplayNameMismatch">
+		Los nombres mostrados introducidos no coinciden. Vuelve a introducirlos.
+	</notification>
+	<notification name="AgentDisplayNameUpdateThresholdExceeded">
+		Lo sentimos. Tendrás que esperar para poder cambiar tu nombre mostrado.
+
+Consulta http://wiki.secondlife.com/wiki/Setting_your_display_name
+
+Vuelve a intentarlo más tarde.
+	</notification>
+	<notification name="AgentDisplayNameSetBlocked">
+		Lo sentimos. No he mos podido configurar el nombre que has solicitado porque contiene una palabra prohibida.
+ 
+ Prueba con un nombre distinto.
+	</notification>
+	<notification name="AgentDisplayNameSetInvalidUnicode">
+		El nombre mostrado que deseas configurar contiene caracteres no válidos.
+	</notification>
+	<notification name="AgentDisplayNameSetOnlyPunctuation">
+		Tu nombre mostrado debe contener letras y no debe incluir signos de puntuación.
+	</notification>
+	<notification name="DisplayNameUpdate">
+		A [OLD_NAME] ([SLID]) se le conoce ahora como [NEW_NAME].
+	</notification>
 	<notification name="OfferTeleport">
 		¿Ofrecer teleporte a tu posición con este mensaje?
 		<form name="form">
@@ -2038,10 +2071,10 @@ Publícala en una página web para que otros puedan acceder fácilmente a esta p
 		Asunto: [SUBJECT], Mensaje: [MESSAGE]
 	</notification>
 	<notification name="FriendOnline">
-		[FIRST] [LAST] está conectado
+		[NAME] está conectado
 	</notification>
 	<notification name="FriendOffline">
-		[FIRST] [LAST] no está conectado
+		[NAME] está desconectado
 	</notification>
 	<notification name="AddSelfFriend">
 		Aunque eres muy agradable, no puedes añadirte como amigo a ti mismo.
@@ -2108,9 +2141,6 @@ Esto puede influir en tu contraseña.
 	<notification name="CannotRemoveProtectedCategories">
 		No puedes quitar categorías que están protegidas.
 	</notification>
-	<notification name="OfferedCard">
-		Has ofrecido una tarjeta de visita a [FIRST] [LAST]
-	</notification>
 	<notification name="UnableToBuyWhileDownloading">
 		No se puede comprar un objeto mientras se descargan los datos.
 Por favor, vuelve a intentarlo.
@@ -2181,7 +2211,10 @@ Inténtalo seleccionando un trozo más pequeño de terreno.
 	<notification name="SystemMessage">
 		[MESSAGE]
 	</notification>
-	<notification name="PaymentRecived">
+	<notification name="PaymentReceived">
+		[MESSAGE]
+	</notification>
+	<notification name="PaymentSent">
 		[MESSAGE]
 	</notification>
 	<notification name="EventNotification">
@@ -2226,7 +2259,7 @@ Por favor, reinstala el plugin o contacta con el vendedor si sigues teniendo pro
 		Se han devuelto a tu inventario los objetos de los que eras propietario en la parcela seleccionada.
 	</notification>
 	<notification name="OtherObjectsReturned">
-		Se han devuelto a tu inventario los objetos de los que eras propietario en la parcela propiedad de [FIRST] [LAST].
+		Se han devuelto a su inventario los objetos en la parcela de terreno seleccionada propiedad de [NAME].
 	</notification>
 	<notification name="OtherObjectsReturned2">
 		Se han devuelto a su propietario los objetos seleccionados en la parcela de terreno propiedad de &apos;[NAME]&apos;.
@@ -2350,7 +2383,7 @@ Por favor, vuelve a intentarlo en unos momentos.
 		No se ha podido encontrar una parcela válida.
 	</notification>
 	<notification name="ObjectGiveItem">
-		Un objeto de nombre [OBJECTFROMNAME], propiedad de [NAME_SLURL], te ha dado este [OBJECTTYPE]:
+		Un objeto de nombre &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt;, propiedad de [NAME_SLURL], te ha dado este [OBJECTTYPE]:
 [ITEM_SLURL]
 		<form name="form">
 			<button name="Keep" text="Guardar"/>
@@ -2415,9 +2448,9 @@ Por favor, vuelve a intentarlo en unos momentos.
 		Has ofrecido amistad a [TO_NAME]
 	</notification>
 	<notification name="OfferFriendshipNoMessage">
-		[NAME] te está ofreciendo amistad.
+		[NAME_SLURL] está ofreciendo amistad.
 
-(Por defecto, podrás ver si están conectados los demás).
+(De manera predeterminada, podrás ver si están conectados los demás.)
 		<form name="form">
 			<button name="Accept" text="Aceptar"/>
 			<button name="Decline" text="Rehusar"/>
@@ -2452,11 +2485,11 @@ Si permaneces en esta región serás desconectado.
 Si permaneces en esta región serás desconectado.
 	</notification>
 	<notification name="LoadWebPage">
-		¿Cargar la página web [URL]?
+		¿Cargar página web [URL]?
 
 [MESSAGE]
 
-Del objeto: [OBJECTNAME]; propiedad de: [NAME]?
+Del objeto: &lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;, propietario: [NAME]?
 		<form name="form">
 			<button name="Gotopage" text="Cargar"/>
 			<button name="Cancel" text="Cancelar"/>
@@ -2472,10 +2505,10 @@ Del objeto: [OBJECTNAME]; propiedad de: [NAME]?
 		El ítem que quieres vestirte tiene una característica que tu visor no puede leer. Por favor, actualiza tu versión de [APP_NAME] para ponerte este ítem.
 	</notification>
 	<notification name="ScriptQuestion">
-		&apos;[OBJECTNAME]&apos;, un objeto propiedad de &apos;[NAME]&apos;, querría:
+		&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;, un objeto propiedad de &apos;[NAME]&apos;, quiere:
 
 [QUESTIONS]
-¿Estás de acuerdo?
+¿Es correcto?
 		<form name="form">
 			<button name="Yes" text="Sí"/>
 			<button name="No" text="No"/>
@@ -2483,7 +2516,7 @@ Del objeto: [OBJECTNAME]; propiedad de: [NAME]?
 		</form>
 	</notification>
 	<notification name="ScriptQuestionCaution">
-		Un objeto de nombre &apos;[OBJECTNAME]&apos;, propiedad de &apos;[NAME]&apos;, quiere:
+		Un objeto de nombre &apos;&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;&apos;, propiedad de &apos;[NAME]&apos;, quiere:
 
 [QUESTIONS]
 Si no confias en este objeto y en su creador, deberías rehusar esta petición.
@@ -2496,14 +2529,14 @@ Si no confias en este objeto y en su creador, deberías rehusar esta petición.
 		</form>
 	</notification>
 	<notification name="ScriptDialog">
-		&apos;[TITLE]&apos; de [FIRST] [LAST]
+		&apos;&lt;nolink&gt;[TITLE]&lt;/nolink&gt;&apos; de [NAME]
 [MESSAGE]
 		<form name="form">
 			<button name="Ignore" text="Ignorar"/>
 		</form>
 	</notification>
 	<notification name="ScriptDialogGroup">
-		&apos;[TITLE]&apos; de [GROUPNAME]&apos;
+		&apos;&lt;nolink&gt;[TITLE]&lt;/nolink&gt;&apos; de [GROUPNAME]
 [MESSAGE]
 		<form name="form">
 			<button name="Ignore" text="Ignorar"/>
@@ -2539,13 +2572,13 @@ Pulsa Aceptar o Rehusar para coger o no la llamada. Pulsa Ignorar para ignorar a
 		</form>
 	</notification>
 	<notification name="AutoUnmuteByIM">
-		[FIRST] [LAST] ha dejado automáticamente de estar ignorado al enviarle un mensaje instantáneo.
+		[NAME] ha dejado automáticamente de estar ignorado al enviarle un mensaje instantáneo.
 	</notification>
 	<notification name="AutoUnmuteByMoney">
-		[FIRST] [LAST] ha dejado automáticamente de estar ignorado al darle dinero.
+		[NAME] ha dejado automáticamente de estar ignorado al darle dinero.
 	</notification>
 	<notification name="AutoUnmuteByInventory">
-		[FIRST] [LAST] ha dejado automáticamente de estar ignorado al ofrecerle algo del inventario.
+		[NAME] ha dejado automáticamente de estar ignorado al ofrecerle inventario.
 	</notification>
 	<notification name="VoiceInviteGroup">
 		[NAME] ha empezado un chat de voz con el grupo [GROUP].
@@ -2771,6 +2804,37 @@ Si lo haces, todos los residentes que se unan posteriormente a la llamada tambi
 ¿Deseas silenciar a todos?
 		<usetemplate ignoretext="Confirma que deseas silenciar a todos los participantes en una multiconferencia." name="okcancelignore" notext="Cancelar" yestext="OK"/>
 	</notification>
+	<notification label="Chat" name="HintChat">
+		Para unirte a la conversación, escribe en el campo de chat que aparece a continuación.
+	</notification>
+	<notification label="Levantarme" name="HintSit">
+		Para levantarte y salir de la posición de sentado, haz clic en el botón Levantarme.
+	</notification>
+	<notification label="Explora el mundo" name="HintDestinationGuide">
+		La Guía de destinos contiene miles de nuevos lugares por descubrir. Selecciona una ubicación y elige Teleportarme para iniciar la exploración.
+	</notification>
+	<notification label="Panel lateral" name="HintSidePanel">
+		Accede de manera rápida a tu inventario, así como a tu ropa, los perfiles y el resto de la información disponible en el panel lateral.
+	</notification>
+	<notification label="Mover" name="HintMove">
+		Si deseas caminar o correr, abre el panel Mover y utiliza las flechas de dirección para navegar. También puedes utilizar las flechas de dirección del teclado.
+	</notification>
+	<notification label="Nombre mostrado" name="HintDisplayName">
+		Configura y personaliza aquí tu nombre mostrado. Esto se añadirá a tu nombre de usuario personal, que no puedes modificar. Puedes cambiar la manera en que ves los nombres de otras personas en tus preferencias.
+	</notification>
+	<notification label="Inventario" name="HintInventory">
+		Accede a tu inventario para buscar ítems. Los ítems más recientes se pueden encontrar fácilmente en la pestaña Recientes.
+	</notification>
+	<notification label="¡Tienes dólares Linden!" name="HintLindenDollar">
+		Éste es tu saldo actual de L$. Haz clic en Comprar L$ para comprar más dólares Linden.
+	</notification>
+	<notification name="PopupAttempt">
+		Se ha impedido que se abriera una ventana emergente.
+		<form name="form">
+			<ignore name="ignore" text="Permitir todas las ventanas emergentes"/>
+			<button name="open" text="Abrir ventana emergente"/>
+		</form>
+	</notification>
 	<global name="UnsupportedCPU">
 		- La velocidad de tu CPU no cumple los requerimientos mínimos.
 	</global>
diff --git a/indra/newview/skins/default/xui/es/panel_edit_profile.xml b/indra/newview/skins/default/xui/es/panel_edit_profile.xml
index 8da8a9771b..56d03dccc2 100644
--- a/indra/newview/skins/default/xui/es/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/es/panel_edit_profile.xml
@@ -22,6 +22,14 @@
 	<scroll_container name="profile_scroll">
 		<panel name="scroll_content_panel">
 			<panel name="data_panel">
+				<text name="display_name_label" value="Nombre mostrado:"/>
+				<text name="solo_username_label" value="Nombre de usuario:"/>
+				<button name="set_name" tool_tip="Configurar nombre mostrado"/>
+				<text name="solo_user_name" value="Hamilton Hitchings"/>
+				<text name="user_name" value="Hamilton Hitchings"/>
+				<text name="user_name_small" value="Hamilton Hitchings"/>
+				<text name="user_label" value="Nombre de usuario:"/>
+				<text name="user_slid" value="hamilton.linden"/>
 				<panel name="lifes_images_panel">
 					<icon label="" name="2nd_life_edit_icon" tool_tip="Pulsa para elegir una imagen"/>
 				</panel>
@@ -38,7 +46,7 @@
 				<text name="my_account_link" value="[[URL] Ir a mi Panel de Control]"/>
 				<text name="title_partner_text" value="Mi compañero/a:"/>
 				<panel name="partner_data_panel">
-					<name_box initial_value="(obteniendo)" name="partner_text"/>
+					<text initial_value="(obteniendo)" name="partner_text"/>
 				</panel>
 				<text name="partner_edit_link" value="[[URL] Editar]"/>
 			</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_group_land_money.xml b/indra/newview/skins/default/xui/es/panel_group_land_money.xml
index f307126b03..3afb0f5665 100644
--- a/indra/newview/skins/default/xui/es/panel_group_land_money.xml
+++ b/indra/newview/skins/default/xui/es/panel_group_land_money.xml
@@ -24,6 +24,7 @@
 			<scroll_list.columns label="Región" name="location"/>
 			<scroll_list.columns label="Tipo" name="type"/>
 			<scroll_list.columns label="Área" name="area"/>
+			<scroll_list.columns label="Oculto" name="hidden"/>
 		</scroll_list>
 		<text name="total_contributed_land_label">
 			Contribución total:
diff --git a/indra/newview/skins/default/xui/es/panel_login.xml b/indra/newview/skins/default/xui/es/panel_login.xml
index 4b45a6f7b8..49d4881737 100644
--- a/indra/newview/skins/default/xui/es/panel_login.xml
+++ b/indra/newview/skins/default/xui/es/panel_login.xml
@@ -11,7 +11,7 @@
 			<text name="username_text">
 				Nombre de usuario:
 			</text>
-			<line_editor label="Nombre de usuario" name="username_edit" tool_tip="Nombre de usuario de [SECOND_LIFE]"/>
+			<line_editor label="bobsmith12 o Steller Sunshine" name="username_edit" tool_tip="El nombre de usuario que elegiste al registrarte, como bobsmith12 o Steller Sunshine"/>
 			<text name="password_text">
 				Contraseña:
 			</text>
@@ -30,7 +30,7 @@
 				Registrarme
 			</text>
 			<text name="forgot_password_text">
-				¿Olvidaste el nombre o la contraseña?
+				¿Olvidaste el nombre de usuario o la contraseña?
 			</text>
 			<text name="login_help">
 				¿Necesitas ayuda para conectarte?
diff --git a/indra/newview/skins/default/xui/es/panel_place_profile.xml b/indra/newview/skins/default/xui/es/panel_place_profile.xml
index 6fe7895d45..524ba2253b 100644
--- a/indra/newview/skins/default/xui/es/panel_place_profile.xml
+++ b/indra/newview/skins/default/xui/es/panel_place_profile.xml
@@ -76,7 +76,7 @@
 						<text name="region_rating_label" value="Calificación:"/>
 						<text name="region_rating" value="Adulto"/>
 						<text name="region_owner_label" value="Propietario:"/>
-						<text name="region_owner" value="moose Van Moose"/>
+						<text name="region_owner" value="Moose Van Moose: nombre demasiado largo"/>
 						<text name="region_group_label" value="Grupo:"/>
 						<text name="region_group">
 							The Mighty Moose of mooseville soundvillemoose
@@ -89,6 +89,7 @@
 						<text name="estate_name_label" value="Estado:"/>
 						<text name="estate_rating_label" value="Calificación:"/>
 						<text name="estate_owner_label" value="Propietario:"/>
+						<text name="estate_owner" value="Comprobación de la longitud del nombre de un propietario con nombre largo"/>
 						<text name="covenant_label" value="Contrato:"/>
 					</panel>
 				</accordion_tab>
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_general.xml b/indra/newview/skins/default/xui/es/panel_preferences_general.xml
index c609cb74ba..5b8cb77173 100644
--- a/indra/newview/skins/default/xui/es/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/es/panel_preferences_general.xml
@@ -44,9 +44,10 @@
 		<radio_item label="On" name="radio2" value="1"/>
 		<radio_item label="Mostrar brevemente" name="radio3" value="2"/>
 	</radio_group>
-	<check_box label="Ver yo mi nombre" name="show_my_name_checkbox1"/>
-	<check_box initial_value="true" label="Etiquetas de los avatares en pequeño" name="small_avatar_names_checkbox"/>
-	<check_box label="Mostrar las etiquetas de grupo" name="show_all_title_checkbox1"/>
+	<check_box label="Mi nombre" name="show_my_name_checkbox1"/>
+	<check_box label="Nombre de usuario" name="show_slids" tool_tip="Mostrar el nombre de usuario, como bobsmith123"/>
+	<check_box label="Títulos de grupos" name="show_all_title_checkbox1" tool_tip="Mostrar títulos de grupos, como Jefe o Miembro"/>
+	<check_box label="Realzar amigos" name="show_friends" tool_tip="Realzar las etiquetas de los nombres de tus amigos"/>
 	<text name="effects_color_textbox">
 		Mis efectos:
 	</text>
@@ -61,6 +62,7 @@
 		<combo_box.item label="30 minutos" name="item3"/>
 		<combo_box.item label="nunca" name="item4"/>
 	</combo_box>
+	<check_box label="Ver nombres mostrados" name="display_names_check" tool_tip="Comprobar para utilizar nombres mostrados en chat, MI, etiquetas de nombres, etc."/>
 	<text name="text_box3">
 		Respuesta cuando estoy en modo ocupado:
 	</text>
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_setup.xml b/indra/newview/skins/default/xui/es/panel_preferences_setup.xml
index 88f5ba42b5..100951a51e 100644
--- a/indra/newview/skins/default/xui/es/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/es/panel_preferences_setup.xml
@@ -1,6 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="Configurar" name="Input panel">
-	<button bottom_delta="-40" label="Otros dispositivos" name="joystick_setup_button"/>
 	<text name="Mouselook:">
 		Vista subjetiva:
 	</text>
@@ -37,10 +36,11 @@
 		<radio_item label="Usar mi navegador (IE, Firefox, Safari)" name="external" tool_tip="Usa tu navegador por defecto para ayuda, enlaces web, etc. No es aconsejable si estás a pantalla completa." value="1"/>
 		<radio_item label="Usar el navegador incorporado" name="internal" tool_tip="Usa el navegador incorporado para ayuda, enlaces web, etc. Este navegador se abre en una nueva ventana dentro de [APP_NAME]." value=""/>
 	</radio_group>
-	<check_box label="Activar plugins" name="browser_plugins_enabled"/>
-	<check_box label="Aceptar las &apos;cookies&apos;" name="cookies_enabled"/>
-	<check_box label="Activar Javascript" name="browser_javascript_enabled"/>
-	<check_box label="Activar web proxy" name="web_proxy_enabled"/>
+	<check_box initial_value="true" label="Activar plugins" name="browser_plugins_enabled"/>
+	<check_box initial_value="true" label="Aceptar las &apos;cookies&apos;" name="cookies_enabled"/>
+	<check_box initial_value="true" label="Activar Javascript" name="browser_javascript_enabled"/>
+	<check_box initial_value="falso" label="Permitir ventanas emergentes de navegadores de medios" name="media_popup_enabled"/>
+	<check_box initial_value="false" label="Activar web proxy" name="web_proxy_enabled"/>
 	<text name="Proxy location">
 		Localización del proxy:
 	</text>
diff --git a/indra/newview/skins/default/xui/es/panel_profile_view.xml b/indra/newview/skins/default/xui/es/panel_profile_view.xml
index b556346051..a11fc31607 100644
--- a/indra/newview/skins/default/xui/es/panel_profile_view.xml
+++ b/indra/newview/skins/default/xui/es/panel_profile_view.xml
@@ -6,8 +6,14 @@
 	<string name="status_offline">
 		Desconectado/a
 	</string>
-	<text_editor name="user_name" value="(Cargando...)"/>
+	<text name="display_name_label" value="Nombre mostrado:"/>
+	<text name="solo_username_label" value="Nombre de usuario:"/>
 	<text name="status" value="Conectado/a"/>
+	<text name="user_name_small" value="Jack, ¿has visto esto? Es un nombre larguísimo."/>
+	<text name="user_name" value="Jack Linden"/>
+	<button name="copy_to_clipboard" tool_tip="Copiar al portapapeles"/>
+	<text name="user_label" value="Nombre de usuario:"/>
+	<text name="user_slid" value="jack.linden"/>
 	<tab_container name="tabs">
 		<panel label="PERFIL" name="panel_profile"/>
 		<panel label="DESTACADOS" name="panel_picks"/>
diff --git a/indra/newview/skins/default/xui/es/role_actions.xml b/indra/newview/skins/default/xui/es/role_actions.xml
index 14df3d67ca..660293b02c 100644
--- a/indra/newview/skins/default/xui/es/role_actions.xml
+++ b/indra/newview/skins/default/xui/es/role_actions.xml
@@ -39,6 +39,7 @@
 		<action description="Permitir siempre &apos;Crear objetos&apos;" longdescription="Quien tenga un rol con esta capacidad puede crear objetos en una parcela perteneciente al grupo aunque eso esté desactivado en Acerca del terreno &gt; pestaña Opciones." name="land allow create" value="25"/>
 		<action description="Permitir siempre &apos;Crear hitos&apos;" longdescription="Quien tenga un rol con esta capacidad puede crear un hito en una parcela perteneciente al grupo aunque eso esté desactivado en Acerca del terreno &gt; pestaña Opciones." name="land allow landmark" value="26"/>
 		<action description="Permitir &apos;Fijar mi Base aquí&apos; en el terreno del grupo" longdescription="Los miembros que tengan un rol con esta capacidad pueden usar el menú Mundo &gt; Hitos &gt; Fijar aquí mi Base en una parcela transferida al grupo." name="land allow set home" value="28"/>
+		<action description="Permitir &quot;Organización de eventos&quot; en un terreno de grupo" longdescription="Los miembros con un rol que tenga esta capacidad pueden seleccionar parcelas propiedad de un grupo como sede de la organización de eventos." name="land allow host event" value="41"/>
 	</action_set>
 	<action_set description="Estas capacidades incluyen poderes para permitir o restringir el acceso a parcelas pertenecientes al grupo, incluyendo el congelar y expulsar a residentes." name="Parcel Access">
 		<action description="Administrar las listas de acceso a la parcela" longdescription="Administre las listas de acceso a la parcela en Acerca del terreno &gt; pestaña Acceso." name="land manage allowed" value="29"/>
@@ -64,10 +65,6 @@
 		<action description="Enviar aviso" longdescription="Los miembros con un rol que tenga esta capacidad pueden enviar avisos a través de la sección Grupo &gt; Avisos." name="notices send" value="42"/>
 		<action description="Recibir avisos nuevos y ver los anteriores" longdescription="Los miembros con un rol que tenga esta capacidad pueden recibir Avisos y ver los ya enviados en la sección Grupo &gt; Avisos." name="notices receive" value="43"/>
 	</action_set>
-	<action_set description="Estas habilidades incluyen poderes para permitir a los miembros crear propuestas, votarlas, y ver el historial de votaciones." name="Proposals">
-		<action description="Hacer una propuesta" longdescription="Quien tenga un rol con esta capacidad puede crear propuestas para que sean votadas en Información del grupo &gt; pestaña Propuestas." name="proposal start" value="44"/>
-		<action description="Votar en propuestas" longdescription="Quien tenga un rol con esta capacidad puede votar las propuestas en Información del grupo &gt; pestaña Propuestas." name="proposal vote" value="45"/>
-	</action_set>
 	<action_set description="Estas capacidades incluyen poderes para permitir o no el aceso a las sesiones de chat del grupo y al chat de voz del mismo." name="Chat">
 		<action description="Abrir chat de grupo" longdescription="Quien tenga un rol con esta capacidad puede abrir sesiones de chat del grupo, tanto de texto como de voz." name="join group chat" value="16"/>
 		<action description="Abrir chat de voz del grupo" longdescription="Quien tenga un rol con esta capacidad puede abrir sesiones de chat de voz del grupo. NOTA: para acceder al chat de voz debe tenerse la capacidad &apos;Abrir chat de grupo&apos;." name="join voice chat" value="27"/>
diff --git a/indra/newview/skins/default/xui/es/strings.xml b/indra/newview/skins/default/xui/es/strings.xml
index ac12b700ee..a1a7d9e193 100644
--- a/indra/newview/skins/default/xui/es/strings.xml
+++ b/indra/newview/skins/default/xui/es/strings.xml
@@ -194,6 +194,9 @@
 	<string name="TooltipAgentUrl">
 		Pulsa para ver el perfil del Residente
 	</string>
+	<string name="TooltipAgentInspect">
+		Obtén más información acerca de este residente.
+	</string>
 	<string name="TooltipAgentMute">
 		Pulsa para silenciar a este Residente
 	</string>
@@ -741,6 +744,12 @@
 	<string name="Estate / Full Region">
 		Estado /Región completa
 	</string>
+	<string name="Estate / Homestead">
+		Estado / Homestead
+	</string>
+	<string name="Mainland / Homestead">
+		Continente / Homestead
+	</string>
 	<string name="Mainland / Full Region">
 		Continente / Región completa
 	</string>
@@ -3472,7 +3481,7 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE].
 		Usted es el único usuario en esta sesión.
 	</string>
 	<string name="offline_message">
-		[FIRST] [LAST] no está conectado.
+		[NAME] está desconectado.
 	</string>
 	<string name="invite_message">
 		Pulse el botón [BUTTON NAME] para aceptar/conectar este chat de voz.
@@ -3541,7 +3550,10 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE].
 		http://secondlife.com/landing/voicemorphing
 	</string>
 	<string name="paid_you_ldollars">
-		[NAME] te ha pagado [AMOUNT] L$
+		[NAME] te ha pagado [AMOUNT] L$ [REASON].
+	</string>
+	<string name="paid_you_ldollars_no_reason">
+		[NAME] te ha pagado [AMOUNT] L$.
 	</string>
 	<string name="you_paid_ldollars">
 		Has pagado [AMOUNT] L$ a [NAME] por [REASON].
@@ -3555,6 +3567,9 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE].
 	<string name="you_paid_ldollars_no_name">
 		Has pagado [AMOUNT] L$ por [REASON].
 	</string>
+	<string name="for item">
+		para [ITEM]
+	</string>
 	<string name="for a parcel of land">
 		para una parcela de terreno
 	</string>
@@ -3573,6 +3588,9 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE].
 	<string name="to upload">
 		to upload
 	</string>
+	<string name="to publish a classified ad">
+		para publicar un anuncio clasificado
+	</string>
 	<string name="giving">
 		Dando [AMOUNT] L$
 	</string>
-- 
cgit v1.2.3


From b66389df893d1e316a5aabc9523c3f46d6f4c6c8 Mon Sep 17 00:00:00 2001
From: Seth ProductEngine <slitovchuk@productengine.com>
Date: Wed, 3 Nov 2010 22:50:09 +0200
Subject: STORM-536 FIXED scrolling to collapsed accordion tab with keyboard
 arrows in Places SP->My Landmarks. - Fixed scrolling to selected item when a
 folder view receives selection inside an accordion tab while being out of
 visible scrolling area. - Fixed scrolling to collapsed accordion tab when it
 receives selection while being out of visible scrolling area.

---
 indra/newview/llfolderview.cpp | 2 ++
 1 file changed, 2 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp
index c38cd4d090..62ba746a02 100644
--- a/indra/newview/llfolderview.cpp
+++ b/indra/newview/llfolderview.cpp
@@ -2429,6 +2429,7 @@ S32	LLFolderView::notify(const LLSD& info)
 		{
 			setFocus(true);
 			selectFirstItem();
+			scrollToShowSelection();
 			return 1;
 
 		}
@@ -2436,6 +2437,7 @@ S32	LLFolderView::notify(const LLSD& info)
 		{
 			setFocus(true);
 			selectLastItem();
+			scrollToShowSelection();
 			return 1;
 		}
 	}
-- 
cgit v1.2.3


From 0a27fe695e6db2272ea1af02a897b5db33c8b70f Mon Sep 17 00:00:00 2001
From: Seth ProductEngine <slitovchuk@productengine.com>
Date: Wed, 3 Nov 2010 23:28:59 +0200
Subject: STORM-194 FIXED 'Show' button in inventory offer notification to open
 'My Inventory' SP if attachments were offered. Removed the check preventing
 inventory SP from opening when an item of IT_ATTACHMENT type has been
 offered.

---
 indra/newview/llviewermessage.cpp | 1 -
 1 file changed, 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 672213d3e8..598ad7afc6 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -1199,7 +1199,6 @@ void open_inventory_offer(const uuid_vec_t& objects, const std::string& from_nam
 		const BOOL auto_open = 
 			gSavedSettings.getBOOL("ShowInInventory") && // don't open if showininventory is false
 			!(asset_type == LLAssetType::AT_CALLINGCARD) && // don't open if it's a calling card
-			!(item && (item->getInventoryType() == LLInventoryType::IT_ATTACHMENT)) && // don't open if it's an item that's an attachment
 			!from_name.empty(); // don't open if it's not from anyone.
 		LLInventoryPanel *active_panel = LLInventoryPanel::getActiveInventoryPanel(auto_open);
 		if(active_panel)
-- 
cgit v1.2.3


From 65997a1f5bb05dd263063606c00e0633af282784 Mon Sep 17 00:00:00 2001
From: brad kittenbrink <brad@lindenlab.com>
Date: Wed, 3 Nov 2010 14:39:24 -0700
Subject: Added some logging to viewer_manifest.py to attempt to narrow down
 the Mac packaging failures a bit.

---
 indra/newview/viewer_manifest.py | 5 +++++
 1 file changed, 5 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index 4b98a11091..4596938775 100644
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -743,6 +743,11 @@ class DarwinManifest(ViewerManifest):
             devfile = re.search("/dev/disk([0-9]+)[^s]", hdi_output).group(0).strip()
             volpath = re.search('HFS\s+(.+)', hdi_output).group(1).strip()
 
+            if devfile != '/dev/disk1':
+                # adding more debugging info based upon nat's hunches to the
+                # logs to help track down 'SetFile -a V' failures -brad
+                print "WARNING: 'SetFile -a V' command below is probably gonna fail"
+
             # Copy everything in to the mounted .dmg
 
             if self.default_channel() and not self.default_grid():
-- 
cgit v1.2.3


From 7f0de785585876f34366700d43c89514e37b006f Mon Sep 17 00:00:00 2001
From: Andrew Productengine <adyukov@productengine.com>
Date: Thu, 4 Nov 2010 14:24:56 +0200
Subject: STORM-261 FIXED Changed line number color in script editor.

- Changed text_readonly_color in script editor to darker gray, so that line numbers are visible when scrip editor is out of focus.
---
 indra/newview/skins/default/xui/en/panel_script_ed.xml | 1 +
 1 file changed, 1 insertion(+)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_script_ed.xml b/indra/newview/skins/default/xui/en/panel_script_ed.xml
index c5c66c04d5..1e332a40c2 100644
--- a/indra/newview/skins/default/xui/en/panel_script_ed.xml
+++ b/indra/newview/skins/default/xui/en/panel_script_ed.xml
@@ -141,6 +141,7 @@
      layout="topleft"
      max_length="65536"
      name="Script Editor"
+     text_readonly_color="DkGray"
      width="487"
      show_line_numbers="true" 
      word_wrap="true">
-- 
cgit v1.2.3


From d594744d49732fd235694bde41f09cf578fccaf1 Mon Sep 17 00:00:00 2001
From: brad kittenbrink <brad@lindenlab.com>
Date: Thu, 4 Nov 2010 10:52:21 -0700
Subject: Turned inlining on in windows builds (RelWithDebInfo and Release).
 This reduces the number of symbols in the viewer binary by about 30%. Also,
 fixed test errors revealed by inlining being enabled.

---
 indra/newview/tests/llviewerhelputil_test.cpp | 17 +++++++----------
 1 file changed, 7 insertions(+), 10 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/tests/llviewerhelputil_test.cpp b/indra/newview/tests/llviewerhelputil_test.cpp
index a0f1d1c3c3..b425b50c8b 100644
--- a/indra/newview/tests/llviewerhelputil_test.cpp
+++ b/indra/newview/tests/llviewerhelputil_test.cpp
@@ -72,16 +72,13 @@ static void substitute_string(std::string &input, const std::string &search, con
 	}
 }
 
-class LLAgent
-{
-public:
-	LLAgent() {}
-	~LLAgent() {}
-#ifdef __GNUC__
-	__attribute__ ((noinline))
-#endif
-	bool isGodlike() const { return FALSE; }
-};
+#include "../llagent.h"
+LLAgent::LLAgent() : mAgentAccess(gSavedSettings) { }
+LLAgent::~LLAgent() { }
+bool LLAgent::isGodlike() const { return FALSE; }
+LLAgentAccess::LLAgentAccess(LLControlGroup& settings) : mSavedSettings(settings) { }
+LLUIColor::LLUIColor() {}
+
 LLAgent gAgent;
 
 std::string LLWeb::expandURLSubstitutions(const std::string &url,
-- 
cgit v1.2.3


From e0c734a7105060740e5597d4439d882bb3f2bff4 Mon Sep 17 00:00:00 2001
From: brad kittenbrink <brad@lindenlab.com>
Date: Thu, 4 Nov 2010 10:53:11 -0700
Subject: Turned generate_breakpad_symbols target into a noop for non-Release
 builds.

---
 indra/newview/CMakeLists.txt               | 10 +++++++++-
 indra/newview/generate_breakpad_symbols.py | 10 +++++++---
 2 files changed, 16 insertions(+), 4 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index a488fb1069..f18107f673 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -1831,10 +1831,18 @@ if (PACKAGE)
     set(VIEWER_COPY_MANIFEST copy_l_viewer_manifest)
   endif (LINUX)
 
+  if(CMAKE_CONFIGURATION_TYPES)
+      # set LLBUILD_CONFIG to be a shell variable evaluated at build time
+      # reflecting the configuration we are currently building.
+      set(LLBUILD_CONFIG ${CMAKE_CFG_INTDIR})
+  else(CMAKE_CONFIGURATION_TYPES)
+      set(LLBUILD_CONFIG ${CMAKE_BUILD_TYPE})
+  endif(CMAKE_CONFIGURATION_TYPES)
   add_custom_command(OUTPUT "${VIEWER_SYMBOL_FILE}"
     COMMAND "${PYTHON_EXECUTABLE}"
     ARGS
       "${CMAKE_CURRENT_SOURCE_DIR}/generate_breakpad_symbols.py"
+      "${LLBUILD_CONFIG}"
       "${VIEWER_DIST_DIR}"
       "${VIEWER_EXE_GLOBS}"
       "${VIEWER_LIB_GLOB}"
@@ -1843,7 +1851,7 @@ if (PACKAGE)
     DEPENDS generate_breakpad_symbols.py
     VERBATIM
   )
-  add_custom_target(generate_breakpad_symbols ALL DEPENDS "${VIEWER_SYMBOL_FILE}")
+  add_custom_target(generate_breakpad_symbols DEPENDS "${VIEWER_SYMBOL_FILE}")
   add_dependencies(generate_breakpad_symbols "${VIEWER_BINARY_NAME}" "${VIEWER_COPY_MANIFEST}")
   add_dependencies(package generate_breakpad_symbols)
 endif (PACKAGE)
diff --git a/indra/newview/generate_breakpad_symbols.py b/indra/newview/generate_breakpad_symbols.py
index 8f2dfd2348..0e61bee1ef 100644
--- a/indra/newview/generate_breakpad_symbols.py
+++ b/indra/newview/generate_breakpad_symbols.py
@@ -45,8 +45,12 @@ class MissingModuleError(Exception):
         Exception.__init__(self, "Failed to find required modules: %r" % modules)
         self.modules = modules
 
-def main(viewer_dir, viewer_exes, libs_suffix, dump_syms_tool, viewer_symbol_file):
-    print "generate_breakpad_symbols run with args: %s" % str((viewer_dir, viewer_exes, libs_suffix, dump_syms_tool, viewer_symbol_file))
+def main(configuration, viewer_dir, viewer_exes, libs_suffix, dump_syms_tool, viewer_symbol_file):
+    print "generate_breakpad_symbols run with args: %s" % str((configuration, viewer_dir, viewer_exes, libs_suffix, dump_syms_tool, viewer_symbol_file))
+
+    if configuration != "Release":
+        print "skipping breakpad symbol generation for non-release build."
+        return 0
 
     # split up list of viewer_exes
     # "'Second Life' SLPlugin" becomes ['Second Life', 'SLPlugin']
@@ -122,7 +126,7 @@ def main(viewer_dir, viewer_exes, libs_suffix, dump_syms_tool, viewer_symbol_fil
     return 0
 
 if __name__ == "__main__":
-    if len(sys.argv) != 6:
+    if len(sys.argv) != 7:
         usage()
         sys.exit(1)
     sys.exit(main(*sys.argv[1:]))
-- 
cgit v1.2.3


From cb3b02acb15ab8868d89f2a6b5894f8324fd077c Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Thu, 4 Nov 2010 11:49:47 -0700
Subject: DN-132 Top scripts now show complete names

---
 indra/newview/llfloatertopobjects.cpp | 24 +++++++++++++++++++++++-
 indra/newview/llfloatertopobjects.h   |  5 +++++
 2 files changed, 28 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloatertopobjects.cpp b/indra/newview/llfloatertopobjects.cpp
index 2aaf403d5f..e5c4547226 100644
--- a/indra/newview/llfloatertopobjects.cpp
+++ b/indra/newview/llfloatertopobjects.cpp
@@ -147,6 +147,17 @@ void LLFloaterTopObjects::handle_land_reply(LLMessageSystem* msg, void** data)
 
 }
 
+void LLFloaterTopObjects::onAvatarNameCache(const LLUUID& agent_id,
+									   const LLAvatarName& av_name,
+									   LLSD element)
+{	
+	LLScrollListCtrl *list = getChild<LLScrollListCtrl>("objects_list");
+
+	element["columns"][2]["value"] = av_name.getCompleteName();
+
+	list->addElement(element);
+}
+
 void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data)
 {
 	U32 request_flags;
@@ -171,6 +182,7 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data)
 		F32 mono_score = 0.f;
 		bool have_extended_data = false;
 		S32 public_urls = 0;
+		LLUUID owner_id;
 
 		msg->getU32Fast(_PREHASH_ReportData, _PREHASH_TaskLocalID, task_local_id, block);
 		msg->getUUIDFast(_PREHASH_ReportData, _PREHASH_TaskID, task_id, block);
@@ -186,8 +198,10 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data)
 			msg->getU32("DataExtended", "TimeStamp", time_stamp, block);
 			msg->getF32("DataExtended", "MonoScore", mono_score, block);
 			msg->getS32(_PREHASH_ReportData,"PublicURLs",public_urls,block);
+			msg->getUUID("DataExtended","OwnerID",owner_id,block);
 		}
 
+
 		LLSD element;
 
 		element["id"] = task_id;
@@ -238,8 +252,16 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data)
 			columns[6]["font"] = "SANSSERIF";
 		}
 		element["columns"] = columns;
-		list->addElement(element);
 		
+		if (!owner_id.isNull())
+		{
+			LLAvatarNameCache::get(owner_id, boost::bind(&LLFloaterTopObjects::onAvatarNameCache, this, _1, _2, element));
+		}
+		else
+		{
+			list->addElement(element);
+		}
+
 		mObjectListData.append(element);
 		mObjectListIDs.push_back(task_id);
 
diff --git a/indra/newview/llfloatertopobjects.h b/indra/newview/llfloatertopobjects.h
index a608ca20f1..edd91c491f 100644
--- a/indra/newview/llfloatertopobjects.h
+++ b/indra/newview/llfloatertopobjects.h
@@ -29,8 +29,11 @@
 
 #include "llfloater.h"
 
+class LLAvatarName;
 class LLUICtrl;
 
+#include <boost/signals2.hpp>	// boost::signals2::trackable
+
 class LLFloaterTopObjects : public LLFloater
 {
 	friend class LLFloaterReg;
@@ -51,6 +54,8 @@ public:
 
 	static void setMode(U32 mode);
 
+	void onAvatarNameCache(const LLUUID& id, const LLAvatarName& av_name, LLSD element);
+
 private:
 	LLFloaterTopObjects(const LLSD& key);
 	~LLFloaterTopObjects();
-- 
cgit v1.2.3


From 25c5f8aeb338803ce5a1386595877d15e6ce0aed Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Thu, 4 Nov 2010 11:51:02 -0700
Subject: DN-189 ??? Showing in tooltip over profile image in IM history

---
 indra/newview/llchathistory.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index cb5cf4a61d..9153f7325f 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -335,7 +335,7 @@ public:
 		
 		LLAvatarIconCtrl* icon = getChild<LLAvatarIconCtrl>("avatar_icon");
 
-		if(mSourceType != CHAT_SOURCE_AGENT)
+		if(mSourceType != CHAT_SOURCE_AGENT ||	mAvatarID.isNull())
 			icon->setDrawTooltip(false);
 
 		switch (mSourceType)
-- 
cgit v1.2.3


From d5d389f062a042dfe65636f9ece6bc69bbd95065 Mon Sep 17 00:00:00 2001
From: Kyle Ambroff <ambroff@lindenlab.com>
Date: Thu, 4 Nov 2010 12:37:02 -0700
Subject: ER-281: Object cache limit is too low in the viewer

* Bump CacheNumberOfRegionsForObjects up to 20k in the default settings.
* Make LLVOCache *actually* use this setting, with no upper bound.

Reviewed with Kelly.
---
 indra/newview/app_settings/settings.xml |  4 ++--
 indra/newview/llvocache.cpp             | 13 ++++++-------
 2 files changed, 8 insertions(+), 9 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 33f5482e50..b46acfe83e 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -1150,13 +1150,13 @@
     <key>CacheNumberOfRegionsForObjects</key>
     <map>
       <key>Comment</key>
-      <string>Controls number of regions to be cached for objects, ranges from 16 to 128.</string>
+      <string>Controls number of regions to be cached for objects.</string>
       <key>Persist</key>
       <integer>1</integer>
       <key>Type</key>
       <string>U32</string>
       <key>Value</key>
-      <integer>128</integer>
+      <integer>20000</integer>
     </map>
     <key>CacheSize</key>
     <map>
diff --git a/indra/newview/llvocache.cpp b/indra/newview/llvocache.cpp
index 8bdb8e069e..34e9babe2c 100644
--- a/indra/newview/llvocache.cpp
+++ b/indra/newview/llvocache.cpp
@@ -223,7 +223,6 @@ BOOL LLVOCacheEntry::writeToFile(LLAPRFile* apr_file) const
 // Format string used to construct filename for the object cache
 static const char OBJECT_CACHE_FILENAME[] = "objects_%d_%d.slc";
 
-const U32 MAX_NUM_OBJECT_ENTRIES = 128 ;
 const U32 NUM_ENTRIES_TO_PURGE = 16 ;
 const char* object_cache_dirname = "objectcache";
 const char* header_filename = "object.cache";
@@ -291,9 +290,9 @@ void LLVOCache::initCache(ELLPath location, U32 size, U32 cache_version)
 	if (!mReadOnly)
 	{
 		LLFile::mkdir(mObjectCacheDirName);
-	}	
-	mCacheSize = llclamp(size,
-			     MAX_NUM_OBJECT_ENTRIES, NUM_ENTRIES_TO_PURGE);
+	}
+
+	mCacheSize = size;
 
 	mMetaInfo.mVersion = cache_version;
 	readCacheHeader();
@@ -424,7 +423,7 @@ void LLVOCache::readCacheHeader()
 
 		HeaderEntryInfo* entry ;
 		mNumEntries = 0 ;
-		while(mNumEntries < MAX_NUM_OBJECT_ENTRIES)
+		while(mNumEntries < mCacheSize)
 		{
 			entry = new HeaderEntryInfo() ;
 			if(!checkRead(apr_file, entry, sizeof(HeaderEntryInfo)))
@@ -477,10 +476,10 @@ void LLVOCache::writeCacheHeader()
 	}
 
 	mNumEntries = mHeaderEntryQueue.size() ;
-	if(mNumEntries < MAX_NUM_OBJECT_ENTRIES)
+	if(mNumEntries < mCacheSize)
 	{
 		HeaderEntryInfo* entry = new HeaderEntryInfo() ;
-		for(S32 i = mNumEntries ; i < MAX_NUM_OBJECT_ENTRIES ; i++)
+		for(S32 i = mNumEntries ; i < mCacheSize; i++)
 		{
 			//fill the cache with the default entry.
 			if(!checkWrite(apr_file, entry, sizeof(HeaderEntryInfo)))
-- 
cgit v1.2.3


From 0dbf75ab657446b51e6e9795ddccc16bb9f6fd02 Mon Sep 17 00:00:00 2001
From: Kyle Ambroff <ambroff@lindenlab.com>
Date: Thu, 4 Nov 2010 12:37:02 -0700
Subject: ER-281: Object cache limit is too low in the viewer

* Bump CacheNumberOfRegionsForObjects up to 20k in the default settings.
* Make LLVOCache *actually* use this setting, with no upper bound.

Reviewed with Kelly.
---
 indra/newview/app_settings/settings.xml |  4 ++--
 indra/newview/llvocache.cpp             | 13 ++++++-------
 2 files changed, 8 insertions(+), 9 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 7172f0359a..4da2ea2aef 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -1150,13 +1150,13 @@
     <key>CacheNumberOfRegionsForObjects</key>
     <map>
       <key>Comment</key>
-      <string>Controls number of regions to be cached for objects, ranges from 16 to 128.</string>
+      <string>Controls number of regions to be cached for objects.</string>
       <key>Persist</key>
       <integer>1</integer>
       <key>Type</key>
       <string>U32</string>
       <key>Value</key>
-      <integer>128</integer>
+      <integer>20000</integer>
     </map>
     <key>CacheSize</key>
     <map>
diff --git a/indra/newview/llvocache.cpp b/indra/newview/llvocache.cpp
index 8bdb8e069e..34e9babe2c 100644
--- a/indra/newview/llvocache.cpp
+++ b/indra/newview/llvocache.cpp
@@ -223,7 +223,6 @@ BOOL LLVOCacheEntry::writeToFile(LLAPRFile* apr_file) const
 // Format string used to construct filename for the object cache
 static const char OBJECT_CACHE_FILENAME[] = "objects_%d_%d.slc";
 
-const U32 MAX_NUM_OBJECT_ENTRIES = 128 ;
 const U32 NUM_ENTRIES_TO_PURGE = 16 ;
 const char* object_cache_dirname = "objectcache";
 const char* header_filename = "object.cache";
@@ -291,9 +290,9 @@ void LLVOCache::initCache(ELLPath location, U32 size, U32 cache_version)
 	if (!mReadOnly)
 	{
 		LLFile::mkdir(mObjectCacheDirName);
-	}	
-	mCacheSize = llclamp(size,
-			     MAX_NUM_OBJECT_ENTRIES, NUM_ENTRIES_TO_PURGE);
+	}
+
+	mCacheSize = size;
 
 	mMetaInfo.mVersion = cache_version;
 	readCacheHeader();
@@ -424,7 +423,7 @@ void LLVOCache::readCacheHeader()
 
 		HeaderEntryInfo* entry ;
 		mNumEntries = 0 ;
-		while(mNumEntries < MAX_NUM_OBJECT_ENTRIES)
+		while(mNumEntries < mCacheSize)
 		{
 			entry = new HeaderEntryInfo() ;
 			if(!checkRead(apr_file, entry, sizeof(HeaderEntryInfo)))
@@ -477,10 +476,10 @@ void LLVOCache::writeCacheHeader()
 	}
 
 	mNumEntries = mHeaderEntryQueue.size() ;
-	if(mNumEntries < MAX_NUM_OBJECT_ENTRIES)
+	if(mNumEntries < mCacheSize)
 	{
 		HeaderEntryInfo* entry = new HeaderEntryInfo() ;
-		for(S32 i = mNumEntries ; i < MAX_NUM_OBJECT_ENTRIES ; i++)
+		for(S32 i = mNumEntries ; i < mCacheSize; i++)
 		{
 			//fill the cache with the default entry.
 			if(!checkWrite(apr_file, entry, sizeof(HeaderEntryInfo)))
-- 
cgit v1.2.3


From 301d3f86c0f35dfcac3d5de1348bb9196d28a08b Mon Sep 17 00:00:00 2001
From: Eli Linden <eli@lindenlab.com>
Date: Thu, 4 Nov 2010 12:49:30 -0700
Subject: CT-633 WIP PL translation for Viewer 2.3, Set19, new file

---
 .../skins/default/xui/pl/floater_display_name.xml      | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)
 create mode 100644 indra/newview/skins/default/xui/pl/floater_display_name.xml

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/pl/floater_display_name.xml b/indra/newview/skins/default/xui/pl/floater_display_name.xml
new file mode 100644
index 0000000000..ea28e65728
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/floater_display_name.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Display Name" title="ZMIEŃ WYŚWIETLANĄ NAZWĘ">
+	<text name="info_text">
+		Nazwa, którą nadałaś/nadałeś Twojemu awatarowi jest określana jako wyświetlana nazwa. Możesz ją zmieniać raz w tygodniu.
+	</text>
+	<text name="lockout_text">
+		Nie możesz zmienić swojej wyświetlanej nazwy do: [TIME].
+	</text>
+	<text name="set_name_label">
+		Nowa wyświetlana nazwa:
+	</text>
+	<text name="name_confirm_label">
+		Wpisz Twoją nową nazwę aby potwierdzić:
+	</text>
+	<button label="Zapisz" name="save_btn" tool_tip="Zapisz swoją nową wyświetlaną nazwę"/>
+	<button label="Resetuj" name="reset_btn" tool_tip="Uczyń wyświetlaną nazwę taką samą jak nazwa użytkownika"/>
+	<button label="Cofnij" name="cancel_btn"/>
+</floater>
-- 
cgit v1.2.3


From d183c022254a157bb51f1ead19c52ff0a930c9b8 Mon Sep 17 00:00:00 2001
From: Eli Linden <eli@lindenlab.com>
Date: Thu, 4 Nov 2010 12:50:03 -0700
Subject: CT-633 WIP PL translation for Viewer 2.3, Set19

---
 .../skins/default/xui/pl/floater_avatar_picker.xml |   8 ++
 .../newview/skins/default/xui/pl/floater_bumps.xml |  10 +-
 .../skins/default/xui/pl/floater_buy_object.xml    |  37 +++---
 .../newview/skins/default/xui/pl/floater_event.xml |  45 ++-----
 .../skins/default/xui/pl/floater_incoming_call.xml |   2 +-
 indra/newview/skins/default/xui/pl/floater_pay.xml |   2 +-
 .../skins/default/xui/pl/floater_pay_object.xml    |   2 +-
 .../newview/skins/default/xui/pl/floater_tools.xml |   4 +-
 .../default/xui/pl/floater_voice_controls.xml      |   2 +-
 .../skins/default/xui/pl/inspect_avatar.xml        |   5 +
 indra/newview/skins/default/xui/pl/menu_viewer.xml |   6 +-
 .../newview/skins/default/xui/pl/notifications.xml | 136 +++++++++++++++------
 .../skins/default/xui/pl/panel_edit_profile.xml    |  10 +-
 .../default/xui/pl/panel_group_land_money.xml      |   1 +
 indra/newview/skins/default/xui/pl/panel_login.xml |   4 +-
 .../skins/default/xui/pl/panel_place_profile.xml   |   3 +-
 .../default/xui/pl/panel_preferences_general.xml   |   8 +-
 .../default/xui/pl/panel_preferences_setup.xml     |  10 +-
 .../skins/default/xui/pl/panel_profile_view.xml    |   8 +-
 .../newview/skins/default/xui/pl/role_actions.xml  |  91 +++++++-------
 indra/newview/skins/default/xui/pl/strings.xml     |  22 +++-
 21 files changed, 254 insertions(+), 162 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/pl/floater_avatar_picker.xml b/indra/newview/skins/default/xui/pl/floater_avatar_picker.xml
index 0897f59570..da0e947683 100644
--- a/indra/newview/skins/default/xui/pl/floater_avatar_picker.xml
+++ b/indra/newview/skins/default/xui/pl/floater_avatar_picker.xml
@@ -24,6 +24,10 @@
 				Wpisz fragment imienia:
 			</text>
 			<button label="Szukaj" label_selected="Szukaj" name="Find"/>
+			<scroll_list name="SearchResults">
+				<columns label="Imię" name="name"/>
+				<columns label="Nazwa użytkownika" name="username"/>
+			</scroll_list>
 		</panel>
 		<panel label="Znajomi" name="FriendsPanel">
 			<text name="InstructSelectFriend">
@@ -39,6 +43,10 @@
 				Metry
 			</text>
 			<button label="Odśwież" label_selected="Odśwież" name="Refresh"/>
+			<scroll_list name="NearMe">
+				<columns label="Imię" name="name"/>
+				<columns label="Nazwa użytkownika" name="username"/>
+			</scroll_list>
 		</panel>
 	</tab_container>
 	<button label="OK" label_selected="OK" name="ok_btn"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_bumps.xml b/indra/newview/skins/default/xui/pl/floater_bumps.xml
index 1f1b29a83e..c1045ece9a 100644
--- a/indra/newview/skins/default/xui/pl/floater_bumps.xml
+++ b/indra/newview/skins/default/xui/pl/floater_bumps.xml
@@ -4,19 +4,19 @@
 		Brak
 	</floater.string>
 	<floater.string name="bump">
-		[TIME]  [FIRST] [LAST] awatar zderzył się z Tobą
+		[TIME]  [NAME] awatar zderzył się z Tobą
 	</floater.string>
 	<floater.string name="llpushobject">
-		[TIME]  [FIRST] [LAST] awatar popchnął Cię swoim skryptem
+		[TIME]  [NAME] awatar popchnął Cię swoim skryptem
 	</floater.string>
 	<floater.string name="selected_object_collide">
-		[TIME]  [FIRST] [LAST] awatar uderzył Cię swoim obiektem
+		[TIME]  [NAME] awatar uderzył Cię obiektem
 	</floater.string>
 	<floater.string name="scripted_object_collide">
-		[TIME]  [FIRST] [LAST] awatar uderzył Cię swoim skryptowanym obiektem
+		[TIME]  [NAME] watar uderzył Cię skryptowanym obiektem
 	</floater.string>
 	<floater.string name="physical_object_collide">
-		[TIME]  [FIRST] [LAST] awatar uderzył Cię swoim fizycznym obiektem
+		[TIME]  [NAME] awatar uderzył Cię fizycznym obiektem
 	</floater.string>
 	<floater.string name="timeStr">
 		[[hour,datetime,slt]:[min,datetime,slt]]
diff --git a/indra/newview/skins/default/xui/pl/floater_buy_object.xml b/indra/newview/skins/default/xui/pl/floater_buy_object.xml
index 7958ed76a1..85861d9e76 100644
--- a/indra/newview/skins/default/xui/pl/floater_buy_object.xml
+++ b/indra/newview/skins/default/xui/pl/floater_buy_object.xml
@@ -1,26 +1,29 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater name="contents" title="KUP KOPIĘ">
+	<floater.string name="title_buy_text">
+		Kup
+	</floater.string>
+	<floater.string name="title_buy_copy_text">
+		Kup kopię
+	</floater.string>
+	<floater.string name="no_copy_text">
+		(bez prawa kopiowania)
+	</floater.string>
+	<floater.string name="no_modify_text">
+		(bez prawa modyfikacji)
+	</floater.string>
+	<floater.string name="no_transfer_text">
+		(bez prawa transferu)
+	</floater.string>
 	<text name="contents_text">
 		i jej zawartość
 	</text>
 	<text name="buy_text">
-		Kupić za [AMOUNT]L$ od [NAME]?
+		Kup za L$[AMOUNT] od:
+	</text>
+	<text name="buy_name_text">
+		[NAME]?
 	</text>
-	<button label="Anuluj" label_selected="Anuluj" name="cancel_btn"/>
 	<button label="Kup" label_selected="Kup" name="buy_btn"/>
-	<string name="title_buy_text">
-		Kup
-	</string>
-	<string name="title_buy_copy_text">
-		Kup kopię
-	</string>
-	<string name="no_copy_text">
-		(bez prawa kopiowania)
-	</string>
-	<string name="no_modify_text">
-		(bez prawa modyfikacji)
-	</string>
-	<string name="no_transfer_text">
-		(bez prawa transferu)
-	</string>
+	<button label="Anuluj" label_selected="Anuluj" name="cancel_btn"/>
 </floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_event.xml b/indra/newview/skins/default/xui/pl/floater_event.xml
index 6b24720d86..d278114969 100644
--- a/indra/newview/skins/default/xui/pl/floater_event.xml
+++ b/indra/newview/skins/default/xui/pl/floater_event.xml
@@ -1,40 +1,11 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater
- follows="all"
- height="400"
- can_resize="true"
- help_topic="event_details"
- label="Event"
- layout="topleft"
- name="Event"
- save_rect="true"
- save_visibility="false"
- title="EVENT DETAILS" 
- width="600">
-	<floater.string
-		name="loading_text">
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater can_resize="true" follows="all" height="400" help_topic="event_details" label="Event" layout="topleft" name="Event" save_rect="true" save_visibility="false" title="EVENT DETAILS" width="600">
+	<floater.string name="loading_text">
 		Ładowanie...
 	</floater.string>
-    <floater.string
-     name="done_text">
-        Done
-    </floater.string>
-  <web_browser
-     trusted_content="true" 
-     follows="left|right|top|bottom"
-     layout="topleft"
-     left="10"
-     name="browser"
-     height="365"
-     width="580"
-     top="0"/>
-	<text
-	 follows="bottom|left"
-	 height="16"
-	 layout="topleft"
-	 left_delta="0"
-	 name="status_text"
-	 top_pad="10"
-	 width="150" />	 
+	<floater.string name="done_text">
+		Zakończono
+	</floater.string>
+	<web_browser follows="left|right|top|bottom" height="365" layout="topleft" left="10" name="browser" top="0" trusted_content="true" width="580"/>
+	<text follows="bottom|left" height="16" layout="topleft" left_delta="0" name="status_text" top_pad="10" width="150"/>
 </floater>
-
diff --git a/indra/newview/skins/default/xui/pl/floater_incoming_call.xml b/indra/newview/skins/default/xui/pl/floater_incoming_call.xml
index 8de60095df..b06b6d713d 100644
--- a/indra/newview/skins/default/xui/pl/floater_incoming_call.xml
+++ b/indra/newview/skins/default/xui/pl/floater_incoming_call.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="incoming call" title="DZWONI NIEZNANA OSOBA">
+<floater name="incoming call" title="Rozmowa głosowa">
 	<floater.string name="lifetime">
 		5
 	</floater.string>
diff --git a/indra/newview/skins/default/xui/pl/floater_pay.xml b/indra/newview/skins/default/xui/pl/floater_pay.xml
index c9243fda65..38fe5286a4 100644
--- a/indra/newview/skins/default/xui/pl/floater_pay.xml
+++ b/indra/newview/skins/default/xui/pl/floater_pay.xml
@@ -11,7 +11,7 @@
 	</text>
 	<icon name="icon_person" tool_tip="Osoba"/>
 	<text name="payee_name">
-		[FIRST] [LAST]
+		Przetestuj nazwę, która jest bardzo długa aby sprawdzić skracanie.
 	</text>
 	<button label="L$1" label_selected="L$1" name="fastpay 1"/>
 	<button label="L$5" label_selected="L$5" name="fastpay 5"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_pay_object.xml b/indra/newview/skins/default/xui/pl/floater_pay_object.xml
index 19032b3e5d..bf88348c87 100644
--- a/indra/newview/skins/default/xui/pl/floater_pay_object.xml
+++ b/indra/newview/skins/default/xui/pl/floater_pay_object.xml
@@ -8,7 +8,7 @@
 	</string>
 	<icon name="icon_person" tool_tip="Osoba"/>
 	<text left="125" name="payee_name">
-		[FIRST] [LAST]
+		Ericacita Moostopolison
 	</text>
 	<text halign="left" left="5" name="object_name_label" width="95">
 		Poprzez obiekt:
diff --git a/indra/newview/skins/default/xui/pl/floater_tools.xml b/indra/newview/skins/default/xui/pl/floater_tools.xml
index 6efef4161e..8c77df9248 100644
--- a/indra/newview/skins/default/xui/pl/floater_tools.xml
+++ b/indra/newview/skins/default/xui/pl/floater_tools.xml
@@ -174,13 +174,13 @@
 				Twórca:
 			</text>
 			<text name="Creator Name">
-				Thrax Linden
+				Pani Esbee Linden (esbee.linden)
 			</text>
 			<text name="Owner:">
 				Właściciel:
 			</text>
 			<text name="Owner Name">
-				Thrax Linden
+				Pani Erica &quot;Moose&quot; Linden (erica.linden)
 			</text>
 			<text name="Group:">
 				Grupa:
diff --git a/indra/newview/skins/default/xui/pl/floater_voice_controls.xml b/indra/newview/skins/default/xui/pl/floater_voice_controls.xml
index 80200cfb21..2155d56f27 100644
--- a/indra/newview/skins/default/xui/pl/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/pl/floater_voice_controls.xml
@@ -19,7 +19,7 @@
 		<layout_panel name="my_panel">
 			<text name="user_text" value="Mój awatar:"/>
 		</layout_panel>
-        <layout_panel name="leave_call_panel">
+		<layout_panel name="leave_call_panel">
 			<layout_stack name="voice_effect_and_leave_call_stack">
 				<layout_panel name="leave_call_btn_panel">
 					<button label="Zakończ rozmowę" name="leave_call_btn"/>
diff --git a/indra/newview/skins/default/xui/pl/inspect_avatar.xml b/indra/newview/skins/default/xui/pl/inspect_avatar.xml
index 778e500bc0..1db3339352 100644
--- a/indra/newview/skins/default/xui/pl/inspect_avatar.xml
+++ b/indra/newview/skins/default/xui/pl/inspect_avatar.xml
@@ -10,6 +10,11 @@
 	<string name="Details">
 		[SL_PROFILE]
 	</string>
+	<text name="user_name_small" value="Grumpity ProductEngine with a long name"/>
+	<text name="user_slid" value="james.linden"/>
+	<text name="user_details">
+		To jest mój opis w Second Life.
+	</text>
 	<slider name="volume_slider" tool_tip="Poziom głośności" value="0.5"/>
 	<button label="Dodaj znajomość" name="add_friend_btn"/>
 	<button label="IM" name="im_btn"/>
diff --git a/indra/newview/skins/default/xui/pl/menu_viewer.xml b/indra/newview/skins/default/xui/pl/menu_viewer.xml
index 2210b1e483..a359180ffb 100644
--- a/indra/newview/skins/default/xui/pl/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/pl/menu_viewer.xml
@@ -83,6 +83,7 @@
 			<menu_item_call label="Weź kopię" name="Take Copy"/>
 			<menu_item_call label="Zapisz obiekt do Szafy" name="Save Object Back to My Inventory"/>
 			<menu_item_call label="Zapisz do treści obiektu" name="Save Object Back to Object Contents"/>
+			<menu_item_call label="Zwróć obiekt" name="Return Object back to Owner"/>
 		</menu>
 		<menu label="Skrypty" name="Scripts">
 			<menu_item_call label="Zrekompiluj skrypt w selekcji (Mono)" name="Mono"/>
@@ -96,6 +97,7 @@
 			<menu_item_check label="Wybierz tylko moje obiekty" name="Select Only My Objects"/>
 			<menu_item_check label="Wybierz tylko obiekty przesuwalne" name="Select Only Movable Objects"/>
 			<menu_item_check label="Wybierz przez otoczenie" name="Select By Surrounding"/>
+			<menu_item_check label="Pokaż wytyczne selekcji" name="Show Selection Outlines"/>
 			<menu_item_check label="Zobacz ukrytą selekcję" name="Show Hidden Selection"/>
 			<menu_item_check label="Pokaż promień emitera dla selekcji" name="Show Light Radius for Selection"/>
 			<menu_item_check label="Pokaż emiter selekcji" name="Show Selection Beam"/>
@@ -116,6 +118,7 @@
 		<menu_item_call label="Złóż Raport o Nadużyciu" name="Report Abuse"/>
 		<menu_item_call label="Zgłoś błędy klienta" name="Report Bug"/>
 		<menu_item_call label="O [APP_NAME]" name="About Second Life"/>
+		<menu_item_check label="Włącz podpowiedzi" name="Enable Hints"/>
 	</menu>
 	<menu label="Zaawansowane" name="Advanced">
 		<menu_item_call label="Zatrzymaj wszystkie animacje" name="Stop Animating My Avatar"/>
@@ -262,7 +265,7 @@
 			<menu_item_call label="Test przeglądarki internetowej" name="Web Browser Test"/>
 			<menu_item_call label="Drukuj zaznaczone informacje o obiekcie" name="Print Selected Object Info"/>
 			<menu_item_call label="Statystyki pamięci" name="Memory Stats"/>
-			<menu_item_check label="Podwójne kliknięcie - Auto-Pilot" name="Double-Click Auto-Pilot"/>
+			<menu_item_check label="Auto-pilot na podwójne kliknięcie" name="Double-ClickAuto-Pilot"/>
 			<menu_item_check label="Podwójne kliknięcie - Teleportuj" name="DoubleClick Teleport"/>
 			<menu_item_check label="Debugowanie zdarzeń klikania" name="Debug Clicks"/>
 			<menu_item_check label="Debugowanie zdarzeń myszy" name="Debug Mouse Events"/>
@@ -274,6 +277,7 @@
 			<menu_item_call label="Zapisz jako XML" name="Save to XML"/>
 			<menu_item_check label="Pokaż nazwy XUI" name="Show XUI Names"/>
 			<menu_item_call label="Wyślij wiadomość (IM) testową" name="Send Test IMs"/>
+			<menu_item_call label="Wyczyść bufor pamięci nazw" name="Flush Names Caches"/>
 		</menu>
 		<menu label="Awatar" name="Character">
 			<menu label="Przesuń bakowaną teksturę" name="Grab Baked Texture">
diff --git a/indra/newview/skins/default/xui/pl/notifications.xml b/indra/newview/skins/default/xui/pl/notifications.xml
index 36c662394e..7e5ed43475 100644
--- a/indra/newview/skins/default/xui/pl/notifications.xml
+++ b/indra/newview/skins/default/xui/pl/notifications.xml
@@ -111,7 +111,7 @@ Wybierz pojedynczy obiekt i spróbuj jeszcze raz.
 	</notification>
 	<notification name="GrantModifyRights">
 		Udzielenie praw modyfikacji innemu Rezydentowi umożliwia modyfikację, usuwanie lub wzięcie JAKIEGOKOLWIEK z Twoich obiektów. Używaj tej opcji z rozwagą!
-Czy chcesz dać prawa modyfikacji osobie [FIRST_NAME] [LAST_NAME]?
+Czy chcesz udzielić prawa do modyfikacji [NAME]?
 		<usetemplate name="okcancelbuttons" notext="Nie" yestext="Tak"/>
 	</notification>
 	<notification name="GrantModifyRightsMultiple">
@@ -120,7 +120,7 @@ Czy chcesz dać prawa modyfikacji wybranym osobom?
 		<usetemplate name="okcancelbuttons" notext="Nie" yestext="Tak"/>
 	</notification>
 	<notification name="RevokeModifyRights">
-		Czy chcesz odebrać prawa modyfikacji Rezydentowi [FIRST_NAME] [LAST_NAME]?
+		Czy chcesz odebrać prawa do modyfikacji [NAME]?
 		<usetemplate name="okcancelbuttons" notext="Nie" yestext="Tak"/>
 	</notification>
 	<notification name="RevokeModifyRightsMultiple">
@@ -318,12 +318,14 @@ Limit [MAX_ATTACHMENTS] załączników został przekroczony. Proszę najpierw od
 		Nie możesz założyć tego artkułu ponieważ nie załadował się poprawnie. Spróbuj ponownie za kilka minut.
 	</notification>
 	<notification name="MustHaveAccountToLogIn">
-		Musisz mieć konto by móc zalogować się do [SECOND_LIFE].
-Czy chcesz przejść na stronę www.secondlife.com by założyć konto?
+		Oops! Brakuje czegoś.
+Należy wprowadzić nazwę użytkownika.
+
+Potrzebujesz konta aby się zalogować do [SECOND_LIFE]. Czy chcesz utworzyć je teraz?
 		<usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/>
 	</notification>
 	<notification name="InvalidCredentialFormat">
-		Wpisz imię i nazwisko Twojego awatara w pole Użytkownika a następnie zaloguj się ponownie.
+		Należy wprowadzić nazwę użytkownika lub imię oraz nazwisko Twojego awatara w pole nazwy użytkownika a następnie ponownie się zalogować.
 	</notification>
 	<notification name="AddClassified">
 		Ogłoszenia reklamowe ukazują się w zakładce Reklama w wyszukiwarce (Szukaj) oraz na [http://secondlife.com/community/classifieds secondlife.com] przez tydzień.
@@ -897,12 +899,6 @@ Zazwyczaj jest to tymczasowy problem. Możesz kontynuować modyfikacje i zapisa
 		Nie możesz kupić posiadłości dla grupy.
 Nie masz praw kupowania posiadłości dla Twojej aktywnej grupy.
 	</notification>
-	<notification label="Dodaj Znajomość" name="AddFriend">
-		Znajomi mogą pozwalać na odnajdywanie się wzajemnie na mapie i na otrzymywanie notyfikacji o logowaniu do [SECOND_LIFE].
-
-Zaproponować znajomość [NAME]?
-		<usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/>
-	</notification>
 	<notification label="Add Friend" name="AddFriendWithMessage">
 		Znajomi mogą pozwalać na odnajdywanie się wzajemnie na mapie i na otrzymywanie notyfikacji o logowaniu do [SECOND_LIFE].
 
@@ -946,7 +942,7 @@ Zaproponować znajomość [NAME]?
 		</form>
 	</notification>
 	<notification name="RemoveFromFriends">
-		Chcesz usunąć [FIRST_NAME] [LAST_NAME] z listy Twoich znajomych?
+		Czy chcesz usunąć [NAME] z listy znajomych?
 		<usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/>
 	</notification>
 	<notification name="RemoveMultipleFromFriends">
@@ -1065,7 +1061,8 @@ Przekazać tą posiadłość o powierzchni [AREA] m² grupie &apos;[GROUP_NAME]&
 		<usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/>
 	</notification>
 	<notification name="DeedLandToGroupWithContribution">
-		Po przekazaniu tej posiadłości grupa będzia musiała mieć i utrzymywać wystarczający kredyt na używanie posiadłości. Przekazanie będzie zawierać równoczesne przypisanie posiadłości do grupy od &apos;[FIRST_NAME] [LAST_NAME]&apos;.
+		Po przekazaniu tej posiadłości grupa będzia musiała mieć i utrzymywać wystarczający kredyt na używanie posiadłości.
+Przekazanie będzie zawierać równoczesne przypisanie posiadłości do grupy od &apos;[NAME]&apos;.
 Cena zakupu posiadłości nie jest zwracana właścicielowi. Jeżeli przekazana posiadłość zostanie sprzedana, cana sprzedaży zostanie podzielona pomiędzy członków grupy.
 
 Przekazać tą posiadłość o powierzchni [AREA] m² grupie &apos;[GROUP_NAME]&apos;?
@@ -1436,6 +1433,46 @@ Dodatkowo, wszystkie podarowane dla Ciebie obiekty będą automatycznie zapisywa
 			<button name="Cancel" text="Anuluj"/>
 		</form>
 	</notification>
+	<notification name="SetDisplayNameSuccess">
+		Witaj [DISPLAY_NAME]!
+
+Podobnie jak w realnym życiu potrzeba trochę czasu zanim wszyscy dowiedzą się o nowej nazwie. Kolejne kilka dni zajmie [http://wiki.secondlife.com/wiki/Setting_your_display_name aktualizacja nazwy] w obiektach, skryptach, wyszukiwarce, etc.
+	</notification>
+	<notification name="SetDisplayNameBlocked">
+		Przepraszamy, nie można zmienić Twojej wyświetlanej nazwy. Jeśli uważasz ze jest to spowodowane błędem skontaktuj się z obsługą klienta.
+	</notification>
+	<notification name="SetDisplayNameFailedLength">
+		Przepraszamy, ta nazwa jest zbyt długa. Wyświetlana nazwa może mieć maksymalnie [LENGTH] znaków.
+
+Proszę wprowadzić krótszą nazwę.
+	</notification>
+	<notification name="SetDisplayNameFailedGeneric">
+		Przepraszamy, nie można ustawić Twojej wyświetlanej nazwy. Spróbuj ponownie później.
+	</notification>
+	<notification name="SetDisplayNameMismatch">
+		Podana wyświetlana nazwa nie pasuje. Proszę wprowadzić ją ponownie.
+	</notification>
+	<notification name="AgentDisplayNameUpdateThresholdExceeded">
+		Przepraszamy, musisz jeszcze poczekać zanim będzie można zmienić Twoją wyświetlaną nazwę.
+
+Zobacz http://wiki.secondlife.com/wiki/Setting_your_display_name
+
+Proszę spróbować ponownie później.
+	</notification>
+	<notification name="AgentDisplayNameSetBlocked">
+		Przepraszamy, nie można ustawić wskazanej nazwy, ponieważ zawiera zabronione słowa.
+ 
+ Proszę spróbować wprowadzić inną nazwę.
+	</notification>
+	<notification name="AgentDisplayNameSetInvalidUnicode">
+		Wyświetlana nazwa, którą chcesz ustawić zawiera niepoprawne znaki.
+	</notification>
+	<notification name="AgentDisplayNameSetOnlyPunctuation">
+		Twoje wyświetlane imię musi zawierać litery inne niż znaki interpunkcyjne.
+	</notification>
+	<notification name="DisplayNameUpdate">
+		[OLD_NAME] ([SLID]) jest od tej pory znana/znany jako [NEW_NAME].
+	</notification>
 	<notification name="OfferTeleport">
 		Zaproponować teleportację do miejsca Twojego pobytu z tą wiadomością?
 		<form name="form">
@@ -2003,10 +2040,10 @@ Zamieść go na stronie internetowej żeby umożliwić innym łatwy dostęp do t
 		Temat: [SUBJECT], Treść: [MESSAGE]
 	</notification>
 	<notification name="FriendOnline">
-		[FIRST] [LAST] jest w [SECOND_LIFE]
+		[NAME] jest w Second Life
 	</notification>
 	<notification name="FriendOffline">
-		[FIRST] [LAST] opuszcza [SECOND_LIFE]
+		[NAME] opuszcza Second Life
 	</notification>
 	<notification name="AddSelfFriend">
 		Nie możesz dodać siebie do listy znajomych.
@@ -2075,9 +2112,6 @@ Spróbuj jeszcze raz.
 	<notification name="CannotRemoveProtectedCategories">
 		Nie możesz usunąć chronionych kategorii.
 	</notification>
-	<notification name="OfferedCard">
-		[FIRST] [LAST] daje Ci swoją wizytówkę
-	</notification>
 	<notification name="UnableToBuyWhileDownloading">
 		Nie można kupować w trakcie ładowania danych obiektu.
 Spróbuj jeszcze raz.
@@ -2148,7 +2182,10 @@ Spróbuj wybrać mniejszy obszar.
 	<notification name="SystemMessage">
 		[MESSAGE]
 	</notification>
-	<notification name="PaymentRecived">
+	<notification name="PaymentReceived">
+		[MESSAGE]
+	</notification>
+	<notification name="PaymentSent">
 		[MESSAGE]
 	</notification>
 	<notification name="EventNotification">
@@ -2157,7 +2194,7 @@ Spróbuj wybrać mniejszy obszar.
 [NAME]
 [DATE]
 		<form name="form">
-			<button name="Details" text="Opis"/>
+			<button name="Details" text="Szczegóły"/>
 			<button name="Cancel" text="Anuluj"/>
 		</form>
 	</notification>
@@ -2193,7 +2230,7 @@ Zainstaluj proszę wtyczki ponownie lub skontaktuj się z dostawcą jeśli nadal
 		Twoje obiekty z wybranej posiadłości zostały zwrócone do Twojej Szafy.
 	</notification>
 	<notification name="OtherObjectsReturned">
-		Obiekty należące do [FIRST] [LAST] na wybranej posiadłości zostały zwrócone do szafy tej osoby.
+		Obiekty należące do [NAME] na wybranej posiadłości zostały zwrócone do Szafy tej osoby.
 	</notification>
 	<notification name="OtherObjectsReturned2">
 		Obiekty z posiadłości należącej do Rezydenta&apos;[NAME]&apos; zostały zwrócone do właściciela.
@@ -2317,7 +2354,7 @@ Spróbuj ponowanie za kilka minut.
 		Nieważana posiadłość.
 	</notification>
 	<notification name="ObjectGiveItem">
-		Obiekt [OBJECTFROMNAME] należący do [NAME_SLURL] dał Ci [OBJECTTYPE]:
+		Obiekt o nazwie &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt;, należący do [NAME_SLURL] dał Tobie [OBJECTTYPE]:
 [ITEM_SLURL]
 		<form name="form">
 			<button name="Keep" text="Zachowaj"/>
@@ -2382,7 +2419,7 @@ Spróbuj ponowanie za kilka minut.
 		Oferta znajomości dla [TO_NAME]
 	</notification>
 	<notification name="OfferFriendshipNoMessage">
-		[NAME] proponuje Ci znajomość.
+		[NAME_SLURL] proponuje Ci znajomość.
 
 (Z zalożenia będzie widzić swój status online.)
 		<form name="form">
@@ -2423,7 +2460,7 @@ Nastąpi wylogowanie jeżeli zostaniesz w tym regionie.
 
 [MESSAGE]
 
-Obiekt: [OBJECTNAME], właściciel: [NAME]?
+Od obiektu: &lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;, właściciel właściciel: [NAME]?
 		<form name="form">
 			<button name="Gotopage" text="Załaduj"/>
 			<button name="Cancel" text="Anuluj"/>
@@ -2439,10 +2476,10 @@ Obiekt: [OBJECTNAME], właściciel: [NAME]?
 		Obiekt, który chcesz założyć używa narzędzia nieobecnego w wersji klienta, którą używasz. By go założyć ściągnij najnowszą wersję [APP_NAME].
 	</notification>
 	<notification name="ScriptQuestion">
-		&apos;[OBJECTNAME]&apos;, właściciel: &apos;[NAME]&apos;, chciał by:
+		Obiekt &apos;&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;&apos;, którego właścicielem jest &apos;[NAME]&apos;, chciałby:
 
 [QUESTIONS]
-Zgadzasz się?
+Czy się zgadzasz?
 		<form name="form">
 			<button name="Yes" text="Tak"/>
 			<button name="No" text="Nie"/>
@@ -2450,12 +2487,12 @@ Zgadzasz się?
 		</form>
 	</notification>
 	<notification name="ScriptQuestionCaution">
-		Obiekt &apos;[OBJECTNAME]&apos;, należący do &apos;[NAME]&apos; proponuje Ci:
+		Obiekt &apos;&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;&apos;, którego właścicielem jest &apos;[NAME]&apos; chciałby:
 
 [QUESTIONS]
-Jeżeli nie znasz tego obiektu lub kreatora, odmów.
+Jeśli nie ufasz temu obiektowi i jego kreatorowi, odmów.
 
-Zgadzasz się?
+Czy się zgadzasz?
 		<form name="form">
 			<button name="Grant" text="Zaakceptuj"/>
 			<button name="Deny" text="Odmów"/>
@@ -2463,14 +2500,14 @@ Zgadzasz się?
 		</form>
 	</notification>
 	<notification name="ScriptDialog">
-		[FIRST] [LAST]&apos;s &apos;[TITLE]&apos;
+		[NAME]&apos;s &apos;&lt;nolink&gt;[TITLE]&lt;/nolink&gt;&apos;
 [MESSAGE]
 		<form name="form">
 			<button name="Ignore" text="Zignoruj"/>
 		</form>
 	</notification>
 	<notification name="ScriptDialogGroup">
-		[GROUPNAME]&apos;s &apos;[TITLE]&apos;
+		[GROUPNAME]&apos;s &apos;&lt;nolink&gt;[TITLE]&lt;/nolink&gt;&apos;
 [MESSAGE]
 		<form name="form">
 			<button name="Ignore" text="Zignoruj"/>
@@ -2509,13 +2546,13 @@ Wybierz Zablokuj żeby wyciszyć dzwoniącą osób
 		</form>
 	</notification>
 	<notification name="AutoUnmuteByIM">
-		Wiadomość (IM) została wysłana do [FIRST] [LAST] i blokada została automatycznie usunięta.
+		Wysłano [NAME] prywatną wiadomość i ta osoba została automatycznie odblokowana.
 	</notification>
 	<notification name="AutoUnmuteByMoney">
-		Pieniądze zostały przekazane do [FIRST] [LAST] i blokada została automatycznie usunięta.
+		Przekazano [NAME] pieniądze i ta osoba została automatycznie odblokowana.
 	</notification>
 	<notification name="AutoUnmuteByInventory">
-		Oferta z szafy dla [FIRST] [LAST] i blokada została automatycznie usunięta.
+		Zaoferowno [NAME] obiekty i ta osoba została automatycznie odblokowana.
 	</notification>
 	<notification name="VoiceInviteGroup">
 		[NAME] zaczyna rozmowę z grupą [GROUP].
@@ -2741,6 +2778,37 @@ To spowoduje również wyciszenie wszystkich Rezydentów, którzy dołączą pó
 Wyciszyć wszystkich?
 		<usetemplate ignoretext="Potwierdź zanim zostaną wyciszeni wszyscy uczestnicy rozmowy głosowej w grupie" name="okcancelignore" notext="Anuluj" yestext="Ok"/>
 	</notification>
+	<notification label="Czat" name="HintChat">
+		W celu przylączenia się do rozmowy zacznij pisać w poniższym polu czatu.
+	</notification>
+	<notification label="Wstań" name="HintSit">
+		Aby wstać i opuścić pozycję siedzącą, kliknij przycisk Wstań.
+	</notification>
+	<notification label="Odkrywaj Świat" name="HintDestinationGuide">
+		Destination Guide zawiera tysiące nowych miejsc do odkrycia. Wybierz lokalizację i teleportuj się aby rozpocząć zwiedzanie.
+	</notification>
+	<notification label="Schowek" name="HintSidePanel">
+		Schowek umożliwia szybki dostęp do Twojej Szafy, ubrań, profili i innych w panelu bocznym.
+	</notification>
+	<notification label="Ruch" name="HintMove">
+		Aby chodzić lub biegać, otwórz panel ruchu i użyj strzałek do nawigacji. Możesz także używać strzałek z klawiatury.
+	</notification>
+	<notification label="Wyświetlana nazwa" name="HintDisplayName">
+		Ustaw wyświetlaną nazwę, którą możesz zmieniać tutaj. Jest ona dodatkiem do unikatowej nazwy użytkownika, która nie może być zmieniona. Możesz zmienić sposób w jaki widzisz nazwy innych osób w Twoich Ustawieniach.
+	</notification>
+	<notification label="Szafa" name="HintInventory">
+		Sprawdź swoją Szafę aby znaleźć obiekty. Najnowsze obiekty mogą być łatwo odnalezione w zakładce Nowe obiekty.
+	</notification>
+	<notification label="Otrzymano L$!" name="HintLindenDollar">
+		Tutaj znajduje się Twoj bieżący bilans L$. Kliknij Kup aby kupić więcej L$.
+	</notification>
+	<notification name="PopupAttempt">
+		Wyskakujące okienko zostało zablokowane.
+		<form name="form">
+			<ignore name="ignore" text="Zezwól na wyskakujące okienka"/>
+			<button name="open" text="Otwórz wyskakujące okno."/>
+		</form>
+	</notification>
 	<global name="UnsupportedCPU">
 		- Prędkość Twojego CPU nie spełnia minimalnych wymagań.
 	</global>
diff --git a/indra/newview/skins/default/xui/pl/panel_edit_profile.xml b/indra/newview/skins/default/xui/pl/panel_edit_profile.xml
index fdc691cbb9..dad8bca183 100644
--- a/indra/newview/skins/default/xui/pl/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/pl/panel_edit_profile.xml
@@ -22,6 +22,14 @@
 	<scroll_container name="profile_scroll">
 		<panel name="scroll_content_panel">
 			<panel name="data_panel">
+				<text name="display_name_label" value="Wyświetlana nazwa:"/>
+				<text name="solo_username_label" value="Nazwa użytkownika:"/>
+				<button name="set_name" tool_tip="Ustaw wyświetlanią nazwę."/>
+				<text name="solo_user_name" value="Hamilton Hitchings"/>
+				<text name="user_name" value="Hamilton Hitchings"/>
+				<text name="user_name_small" value="Hamilton Hitchings"/>
+				<text name="user_label" value="Nazwa użytkownika:"/>
+				<text name="user_slid" value="hamilton.linden"/>
 				<panel name="lifes_images_panel">
 					<icon label="" name="2nd_life_edit_icon" tool_tip="Kliknij aby wybrać teksturę"/>
 				</panel>
@@ -38,7 +46,7 @@
 				<text name="my_account_link" value="[[URL] idź do dashboard]"/>
 				<text name="title_partner_text" value="Partner:"/>
 				<panel name="partner_data_panel">
-					<name_box initial_value="(wyszukiwanie)" name="partner_text" value="[FIRST] [LAST]"/>
+					<text initial_value="(wyszukiwanie)" name="partner_text" value="[FIRST] [LAST]"/>
 				</panel>
 				<text name="partner_edit_link" value="[[URL] Edytuj]"/>
 			</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_group_land_money.xml b/indra/newview/skins/default/xui/pl/panel_group_land_money.xml
index d29393de2d..aea4e50fd5 100644
--- a/indra/newview/skins/default/xui/pl/panel_group_land_money.xml
+++ b/indra/newview/skins/default/xui/pl/panel_group_land_money.xml
@@ -24,6 +24,7 @@
 			<scroll_list.columns label="Region" name="location"/>
 			<scroll_list.columns label="Typ" name="type"/>
 			<scroll_list.columns label="Obszar" name="area"/>
+			<scroll_list.columns label="Ukryte" name="hidden"/>
 		</scroll_list>
 		<text name="total_contributed_land_label">
 			Kontrybucje:
diff --git a/indra/newview/skins/default/xui/pl/panel_login.xml b/indra/newview/skins/default/xui/pl/panel_login.xml
index b5899f1009..30432c509d 100644
--- a/indra/newview/skins/default/xui/pl/panel_login.xml
+++ b/indra/newview/skins/default/xui/pl/panel_login.xml
@@ -11,7 +11,7 @@
 			<text name="username_text">
 				Użytkownik:
 			</text>
-			<line_editor label="Użytkownik" name="username_edit" tool_tip="[SECOND_LIFE] Użytkownik"/>
+			<line_editor label="bobsmith12 lub Steller Sunshine" name="username_edit" tool_tip="Nazwę użytkownika wybierasz podczas rejestracji, np: like bobsmith12 lub Steller Sunshine"/>
 			<text name="password_text">
 				Hasło:
 			</text>
@@ -31,7 +31,7 @@
 				Utwórz nowe konto
 			</text>
 			<text name="forgot_password_text">
-				Nie pamiętasz hasła?
+				Zapomniałeś swojej nazwy użytkownika lub hasła?
 			</text>
 			<text name="login_help">
 				Potrzebujesz pomocy z logowaniem się?
diff --git a/indra/newview/skins/default/xui/pl/panel_place_profile.xml b/indra/newview/skins/default/xui/pl/panel_place_profile.xml
index 7a71a10034..2a4ffab36c 100644
--- a/indra/newview/skins/default/xui/pl/panel_place_profile.xml
+++ b/indra/newview/skins/default/xui/pl/panel_place_profile.xml
@@ -76,7 +76,7 @@
 						<text name="region_rating_label" value="Rodzaj:"/>
 						<text name="region_rating" value="Adult"/>
 						<text name="region_owner_label" value="Właściciel:"/>
-						<text name="region_owner" value="moose Van Moose"/>
+						<text name="region_owner" value="moose Van Moose extra long name moose"/>
 						<text name="region_group_label" value="Grupa:"/>
 						<text name="region_group">
 							The Mighty Moose of mooseville soundvillemoose
@@ -89,6 +89,7 @@
 						<text name="estate_name_label" value="Majątek:"/>
 						<text name="estate_rating_label" value="Rodzaj:"/>
 						<text name="estate_owner_label" value="Właściciel:"/>
+						<text name="estate_owner" value="Testing owner name length with long name"/>
 						<text name="covenant_label" value="Umowa:"/>
 					</panel>
 				</accordion_tab>
diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_general.xml b/indra/newview/skins/default/xui/pl/panel_preferences_general.xml
index 65ea349aec..00dc84dd7a 100644
--- a/indra/newview/skins/default/xui/pl/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/pl/panel_preferences_general.xml
@@ -44,9 +44,10 @@
 		<radio_item label="Włącz" name="radio2" value="1"/>
 		<radio_item label="Pokaż w skrócie" name="radio3" value="2"/>
 	</radio_group>
-	<check_box label="Wyświetl moje imię:" name="show_my_name_checkbox1"/>
-	<check_box initial_value="true" label="Używaj małych imion awatarów" name="small_avatar_names_checkbox"/>
-	<check_box label="Wyświetl tytuł grupowy" name="show_all_title_checkbox1"/>
+	<check_box label="Wyświetl moje imię" name="show_my_name_checkbox1"/>
+	<check_box label="Nazwy użytkowników" name="show_slids" tool_tip="Pokaż nazwy użytkowników, np. bobsmith123"/>
+	<check_box label="Wyświetl tytuł grupowy" name="show_all_title_checkbox1" tool_tip="Wyświetl tytuł grupowy np. oficer"/>
+	<check_box label="Zaznacz znajomych" name="show_friends" tool_tip="Zaznacz imiona swoich znajomych"/>
 	<text name="effects_color_textbox">
 		Kolor moich efektów:
 	</text>
@@ -61,6 +62,7 @@
 		<combo_box.item label="30 minut" name="item3"/>
 		<combo_box.item label="nigdy" name="item4"/>
 	</combo_box>
+	<check_box label="Pokaż wyświetlane nazwy" name="display_names_check" tool_tip="Pokaż wyświetlane nazwy w czacie, IM, imionach, etc."/>
 	<text name="text_box3">
 		Odpowiedź w trybie pracy:
 	</text>
diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_setup.xml b/indra/newview/skins/default/xui/pl/panel_preferences_setup.xml
index b6578d21ca..24e5c2b824 100644
--- a/indra/newview/skins/default/xui/pl/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/pl/panel_preferences_setup.xml
@@ -1,6 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="Ustawienia" name="Input panel">
-	<button label="Ustawienia joysticka" name="joystick_setup_button"/>
 	<text name="Mouselook:">
 		Widok panoramiczny:
 	</text>
@@ -38,10 +37,11 @@
 		<radio_item label="Użyj zewnętrznej przeglądarki (IE, Firefox, Safari)" name="external" tool_tip="Używaj zewnętrznej przeglądarki. Nie jest to rekomendowane w trybie pełnoekranowym." value="1"/>
 		<radio_item label="Używaj wbudowanej przeglądarki." name="internal" tool_tip="Używaj wbudowanej przeglądarki. Ta przeglądarka otworzy nowe okno w [APP_NAME]." value=""/>
 	</radio_group>
-	<check_box label="Zezwalaj na wtyczki" name="browser_plugins_enabled"/>
-	<check_box label="Akceptuj ciasteczka z Internetu" name="cookies_enabled"/>
-	<check_box label="Zezwalaj na Javascript" name="browser_javascript_enabled"/>
-	<check_box label="Używaj serwera proxy" name="web_proxy_enabled"/>
+	<check_box initial_value="true" label="Zezwalaj na wtyczki" name="browser_plugins_enabled"/>
+	<check_box initial_value="true" label="Akceptuj ciasteczka z Internetu" name="cookies_enabled"/>
+	<check_box initial_value="true" label="Zezwalaj na Javascript" name="browser_javascript_enabled"/>
+	<check_box initial_value="nieprawda" label="Zezwól na wyskakujące okienka przeglądarki mediów" name="media_popup_enabled"/>
+	<check_box initial_value="false" label="Używaj serwera proxy" name="web_proxy_enabled"/>
 	<text name="Proxy location">
 		Lokalizacja proxy:
 	</text>
diff --git a/indra/newview/skins/default/xui/pl/panel_profile_view.xml b/indra/newview/skins/default/xui/pl/panel_profile_view.xml
index 637b278ef2..3590e9222e 100644
--- a/indra/newview/skins/default/xui/pl/panel_profile_view.xml
+++ b/indra/newview/skins/default/xui/pl/panel_profile_view.xml
@@ -6,8 +6,14 @@
 	<string name="status_offline">
 		Nieaktywny
 	</string>
-	<text_editor name="user_name" value="(Ładowanie...)"/>
+	<text name="display_name_label" value="Wyświetlana nazwa:"/>
+	<text name="solo_username_label" value="Nazwa użytkownika:"/>
 	<text name="status" value="Obecnie w SL"/>
+	<text name="user_name_small" value="Jack oh look at me this is a super duper long name"/>
+	<text name="user_name" value="Jack Linden"/>
+	<button name="copy_to_clipboard" tool_tip="Kopiuj do schowka"/>
+	<text name="user_label" value="Nazwa użytkownika:"/>
+	<text name="user_slid" value="jack.linden"/>
 	<tab_container name="tabs">
 		<panel label="PROFIL" name="panel_profile"/>
 		<panel label="ULUBIONE" name="panel_picks"/>
diff --git a/indra/newview/skins/default/xui/pl/role_actions.xml b/indra/newview/skins/default/xui/pl/role_actions.xml
index 53530fff5e..57df2bc70f 100644
--- a/indra/newview/skins/default/xui/pl/role_actions.xml
+++ b/indra/newview/skins/default/xui/pl/role_actions.xml
@@ -1,76 +1,73 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <role_actions>
 	<action_set description="Przywileje pozwajające na dodawanie i usuwanie członków oraz pozwalają nowym członkom na dodawanie się bez zaproszenia." name="Membership">
-		<action description="Zapraszanie do grupy" longdescription="Zapraszanie nowych ludzi do grupy używając przycisku &apos;Zaproś&apos; w sekcji Ról  &gt; Członkowie" name="member invite"/>
-		<action description="Usuwanie z grupy" longdescription="Usuwanie członków z grupy używając &apos;Usuń z Grupy&apos;; pod Członkowie &gt; Członkowie. Właściciel może usunąć każdego za wyjątkiem innego Właściciela. Jeżeli nie jesteś Właścicielem możesz tylko usuwać Członków w Funkcji Każdy i tylko wtedy kiedy nie mają żadnej innej Funkcji. Aby odebrać Członkowi Funkcję musisz mieć Przywilej &apos;Odbieranie Funkcji&apos;." name="member eject"/>
-		<action description="Selekcja opcji &apos;Wolne Zapisy&apos; i wybór &apos;Opłaty Wstępnej&apos;" longdescription="Selekcja opcji &apos;Wolne Zapisy&apos; (pozwala nowym Członkom na dodawanie się bez zaproszenia) i wybór &apos;Opłaty Wstępnej&apos; w Ustawieniach Grupy w sekcji Ogólne." name="member options"/>
+		<action description="Zapraszanie do grupy" longdescription="Zapraszanie nowych ludzi do grupy używając przycisku &apos;Zaproś&apos; w sekcji Ról  &gt; Członkowie" name="member invite" value="1"/>
+		<action description="Usuwanie z grupy" longdescription="Usuwanie członków z grupy używając &apos;Usuń z Grupy&apos;; pod Członkowie &gt; Członkowie. Właściciel może usunąć każdego za wyjątkiem innego Właściciela. Jeżeli nie jesteś Właścicielem możesz tylko usuwać Członków w Funkcji Każdy i tylko wtedy kiedy nie mają żadnej innej Funkcji. Aby odebrać Członkowi Funkcję musisz mieć Przywilej &apos;Odbieranie Funkcji&apos;." name="member eject" value="2"/>
+		<action description="Selekcja opcji &apos;Wolne Zapisy&apos; i wybór &apos;Opłaty Wstępnej&apos;" longdescription="Selekcja opcji &apos;Wolne Zapisy&apos; (pozwala nowym Członkom na dodawanie się bez zaproszenia) i wybór &apos;Opłaty Wstępnej&apos; w Ustawieniach Grupy w sekcji Ogólne." name="member options" value="3"/>
 	</action_set>
 	<action_set description="Przywileje pozwalające na dodawanie, usuwanie i edycję funkcji w grupie, oraz na nadawanie i odbieranie funkcji, oraz na przypisywanie Przywilejów do Funkcji." name="Roles">
-		<action description="Dodawanie funkcji" longdescription="Dodawanie nowych funkcji pod Członkowie &gt; Funkcje." name="role create"/>
-		<action description="Usuwanie funkcji" longdescription="Usuń Funkcje w zakładce Funkcje &gt; Funkcje" name="role delete"/>
-		<action description="Zmiany nazw funkcji, tytułów i opisów i widoczność członków w informacjach o grupie" longdescription="Zmiany nazw Funkcji, Tytułów i Opisów i wybór czy Członkowie z daną Rolą są widoczni Informacji o Grupie w dolnej części sekcji Funkcji &gt; Funkcje po wybraniu Funkcje." name="role properties"/>
-		<action description="Przypisywanie członków do posiadanych funkcji" longdescription="Przypisywanie Członków do Funkcji w sekcji Przypisane Funkcje pod Członkowie &gt; Członkowie. Członek z tym Przywilejem może dodawać Członków do Funkcji które sam już posiada." name="role assign member limited"/>
-		<action description="Przypisywanie członków do wszystkich funkcji" longdescription="Przypisywanie Członków do wszystkich Funkcji w sekcji Przypisane Funkcje pod Członkowie &gt; Członkowie. *UWAGA* Członek w Funkcji z tym Przywilejem może przypisać siebie i innych Członków nie będących Właścicielami do Funkcji dających więcej Przywilejów niż posiadane obecnie potencjalnie dające możliwości zbliżone do możliwości Właściciela. Udzielaj tego Przywileju z rozwagą." name="role assign member"/>
-		<action description="Odbieranie funkcji" longdescription="Odbieranie Funkcji w sekcji Przypisane Funkcje pod Członkowie &gt; Członkowie. Funkcja Właściciela nie może być odebrana." name="role remove member"/>
-		<action description="Dodawanie i usuwanie przywilejów z funkcji" longdescription="Dodawanie i Usuwanie Przywilejów z Funkcji w sekcji Przwileje pod Członkowie &gt; Funkcje. *UWAGA* Członek w Funkcji z tym Przywilejem może przypisać sobie i innym Członkom nie będącym Właścicielami wszystkie Przywileje potencjalnie dające możliwości zbliżone do możliwości Właściciela. Udzielaj tego Przywileju z rozwagą." name="role change actions"/>
+		<action description="Dodawanie funkcji" longdescription="Dodawanie nowych funkcji pod Członkowie &gt; Funkcje." name="role create" value="4"/>
+		<action description="Usuwanie funkcji" longdescription="Usuń Funkcje w zakładce Funkcje &gt; Funkcje" name="role delete" value="5"/>
+		<action description="Zmiany nazw funkcji, tytułów i opisów i widoczność członków w informacjach o grupie" longdescription="Zmiany nazw Funkcji, Tytułów i Opisów i wybór czy Członkowie z daną Rolą są widoczni Informacji o Grupie w dolnej części sekcji Funkcji &gt; Funkcje po wybraniu Funkcje." name="role properties" value="6"/>
+		<action description="Przypisywanie członków do posiadanych funkcji" longdescription="Przypisywanie Członków do Funkcji w sekcji Przypisane Funkcje pod Członkowie &gt; Członkowie. Członek z tym Przywilejem może dodawać Członków do Funkcji które sam już posiada." name="role assign member limited" value="7"/>
+		<action description="Przypisywanie członków do wszystkich funkcji" longdescription="Przypisywanie Członków do wszystkich Funkcji w sekcji Przypisane Funkcje pod Członkowie &gt; Członkowie. *UWAGA* Członek w Funkcji z tym Przywilejem może przypisać siebie i innych Członków nie będących Właścicielami do Funkcji dających więcej Przywilejów niż posiadane obecnie potencjalnie dające możliwości zbliżone do możliwości Właściciela. Udzielaj tego Przywileju z rozwagą." name="role assign member" value="8"/>
+		<action description="Odbieranie funkcji" longdescription="Odbieranie Funkcji w sekcji Przypisane Funkcje pod Członkowie &gt; Członkowie. Funkcja Właściciela nie może być odebrana." name="role remove member" value="9"/>
+		<action description="Dodawanie i usuwanie przywilejów z funkcji" longdescription="Dodawanie i Usuwanie Przywilejów z Funkcji w sekcji Przwileje pod Członkowie &gt; Funkcje. *UWAGA* Członek w Funkcji z tym Przywilejem może przypisać sobie i innym Członkom nie będącym Właścicielami wszystkie Przywileje potencjalnie dające możliwości zbliżone do możliwości Właściciela. Udzielaj tego Przywileju z rozwagą." name="role change actions" value="10"/>
 	</action_set>
 	<action_set description="Przywileje pozwalające na edycję atrybutów Grupy takich jak widoczność w wyszukiwarce, status i insygnia." name="Group Identity">
-		<action description="Zmiany statusu grupy, insygniów, &apos;Widoczność w Wyszukiwarce&apos; i widoczność Członków w Informacjach o Grupie." longdescription="Zmiany Statusu Grupy, Insygniów, i Widoczność w Wyszukiwarce. Dostęp poprzez ustawienia Ogólne." name="group change identity"/>
+		<action description="Zmiany statusu grupy, insygniów, &apos;Widoczność w Wyszukiwarce&apos; i widoczność Członków w Informacjach o Grupie." longdescription="Zmiany Statusu Grupy, Insygniów, i Widoczność w Wyszukiwarce. Dostęp poprzez ustawienia Ogólne." name="group change identity" value="11"/>
 	</action_set>
 	<action_set description="Przywileje pozwalające na przypisywanie, modyfikacje i sprzedaż posiadłości grupy. Aby zobaczyć okno O Posiadłości wybierz grunt prawym klawiszem myszki i wybierz &apos;O Posiadłości&apos; albo wybierz ikonę &apos;i&apos; w głównym menu." name="Parcel Management">
-		<action description="Przypisywanie i kupowanie posiadłości dla grupy" longdescription="Przypisywanie i kupowanie Posiadłości dla Grupy. Dostęp poprzez O Posiadlości &gt; ustawienia Ogólne." name="land deed"/>
-		<action description="Oddawanie posiadłości do Linden Lab" longdescription="Oddawanie Posiadłości do Linden Lab. *UWAGA* Członek w Funkcji z tym Przywilejem może porzucać Posiadlości Grupy poprzez O Posiadlości &gt; ustawienia Ogólne oddając Posiadłości za darmo do Linden Labs! Udzielaj tego Przywileju z rozwagą." name="land release"/>
-		<action description="Sprzedaż posiadłości" longdescription="Sprzedaż Posiadłości. *UWAGA* Członek w Funkcji z tym Przywilejem może sprzedawać Posiadlości Grupy poprzez O Posiadlości &gt; ustawienia Ogólne! Udzielaj tego Przywileju z rozwagą." name="land set sale info"/>
-		<action description="Podział i łączenie posiadłości" longdescription="Podział i Łączenie Posiadłości. Dostęp poprzez wybranie gruntu prawym klawiszem myszki, &apos;Edycja Terenu&apos;, i przesuwanie myszką po gruncie wybierając obszar. Aby podzielić wybierz obszar i naciśnij &apos;Podziel&apos;. Aby połączyć wybierz dwie albo więcej sąsiadujące Posiadłości i naciśnij &apos;Połącz&apos;." name="land divide join"/>
+		<action description="Przypisywanie i kupowanie posiadłości dla grupy" longdescription="Przypisywanie i kupowanie Posiadłości dla Grupy. Dostęp poprzez O Posiadlości &gt; ustawienia Ogólne." name="land deed" value="12"/>
+		<action description="Oddawanie posiadłości do Linden Lab" longdescription="Oddawanie Posiadłości do Linden Lab. *UWAGA* Członek w Funkcji z tym Przywilejem może porzucać Posiadlości Grupy poprzez O Posiadlości &gt; ustawienia Ogólne oddając Posiadłości za darmo do Linden Labs! Udzielaj tego Przywileju z rozwagą." name="land release" value="13"/>
+		<action description="Sprzedaż posiadłości" longdescription="Sprzedaż Posiadłości. *UWAGA* Członek w Funkcji z tym Przywilejem może sprzedawać Posiadlości Grupy poprzez O Posiadlości &gt; ustawienia Ogólne! Udzielaj tego Przywileju z rozwagą." name="land set sale info" value="14"/>
+		<action description="Podział i łączenie posiadłości" longdescription="Podział i Łączenie Posiadłości. Dostęp poprzez wybranie gruntu prawym klawiszem myszki, &apos;Edycja Terenu&apos;, i przesuwanie myszką po gruncie wybierając obszar. Aby podzielić wybierz obszar i naciśnij &apos;Podziel&apos;. Aby połączyć wybierz dwie albo więcej sąsiadujące Posiadłości i naciśnij &apos;Połącz&apos;." name="land divide join" value="15"/>
 	</action_set>
 	<action_set description="Przywileje pozwalające na zmianę nazwy Posiadłości, widoczność w wyszukiwarce, widoczność w wyszukiwarce, wybór miejsce lądowania i zmianę ustawień teleportacji (TP)." name="Parcel Identity">
-		<action description="Selekcja opcji &apos;Pokazuj w szukaniu miejsc&apos; i wybór kategorii" longdescription="Selekcja opcji &apos;Pokazuj w szukaniu miejsc&apos; i wybór kategorii Posiadłości pod O Posiadłości &gt; Opcje." name="land find places"/>
-		<action description="Zmiany nazwy Posiadłości, opisu i selekcja &apos;Widoczność w Wyszukiwarce&apos;" longdescription="Zmiany nazwy Posiadłości, opisu i selekcja &apos;Widoczność w Wyszukiwarce&apos;. Dostęp poprzez O Posiadłości &gt; Opcje." name="land change identity"/>
-		<action description="Wybór miejsca lądowania i ustawienia teleportacji (TP)" longdescription="Na Posiadłości Grupy Członek w Funkcji z tym Przywilejem może wybrać miejsce gdzie teleportujące się osoby będą ladować oraz może ustalić dodatkowe parametry teleportacji (TP).  Dostęp poprzez O Posiadłości &gt; Opcje." name="land set landing point"/>
+		<action description="Selekcja opcji &apos;Pokazuj w szukaniu miejsc&apos; i wybór kategorii" longdescription="Selekcja opcji &apos;Pokazuj w szukaniu miejsc&apos; i wybór kategorii Posiadłości pod O Posiadłości &gt; Opcje." name="land find places" value="17"/>
+		<action description="Zmiany nazwy Posiadłości, opisu i selekcja &apos;Widoczność w Wyszukiwarce&apos;" longdescription="Zmiany nazwy Posiadłości, opisu i selekcja &apos;Widoczność w Wyszukiwarce&apos;. Dostęp poprzez O Posiadłości &gt; Opcje." name="land change identity" value="18"/>
+		<action description="Wybór miejsca lądowania i ustawienia teleportacji (TP)" longdescription="Na Posiadłości Grupy Członek w Funkcji z tym Przywilejem może wybrać miejsce gdzie teleportujące się osoby będą ladować oraz może ustalić dodatkowe parametry teleportacji (TP).  Dostęp poprzez O Posiadłości &gt; Opcje." name="land set landing point" value="19"/>
 	</action_set>
 	<action_set description="Przywileje pozwalające na zmianę opcji Posiadłości takich jak &apos;Tworzenie Obiektów&apos;, &apos;Edycja Terenu&apos; i zmianę ustawień muzyki &amp; mediów." name="Parcel Settings">
-		<action description="Zmiany ustawień muzyki &amp; mediów" longdescription="Zmiany ustawień muzyki &amp; mediów pod O Posiadłości &gt; Media." name="land change media"/>
-		<action description="Selekcja opcji &apos;Edycja Terenu&apos;" longdescription="Selekcja opcji &apos;Edycja Terenu&apos;. *UWAGA* O Posiadłości &gt; Opcje &gt; Edycja Terenu pozwala każdemu na formowanie gruntów Twojej Posiadłości oraz na przemieszczanie roślin z Linden Labs. Udzielaj tego Przywileju z rozwagą. Selekcja opcji Edycji Terenu jest dostępna poprzez O Posiadłości &gt; Opcje." name="land edit"/>
-		<action description="Dodatkowe ustawienia O Posiadłości &gt; Opcje" longdescription="Selekcja opcji &apos;Bezpieczeństwo (brak uszkodzeń)&apos; &apos;Latanie&apos;, opcje dla innych Rezydentów: &apos;Tworzenie Obiektów&apos;; &apos;Edycja Terenu&apos;, &apos;Zapamiętywanie Miejsca (LM)&apos;, i &apos;Skrypty&apos; na Posiadłościach Grupy pod O Posiadłości &gt; Opcje." name="land options"/>
+		<action description="Zmiany ustawień muzyki &amp; mediów" longdescription="Zmiany ustawień muzyki &amp; mediów pod O Posiadłości &gt; Media." name="land change media" value="20"/>
+		<action description="Selekcja opcji &apos;Edycja Terenu&apos;" longdescription="Selekcja opcji &apos;Edycja Terenu&apos;. *UWAGA* O Posiadłości &gt; Opcje &gt; Edycja Terenu pozwala każdemu na formowanie gruntów Twojej Posiadłości oraz na przemieszczanie roślin z Linden Labs. Udzielaj tego Przywileju z rozwagą. Selekcja opcji Edycji Terenu jest dostępna poprzez O Posiadłości &gt; Opcje." name="land edit" value="21"/>
+		<action description="Dodatkowe ustawienia O Posiadłości &gt; Opcje" longdescription="Selekcja opcji &apos;Bezpieczeństwo (brak uszkodzeń)&apos; &apos;Latanie&apos;, opcje dla innych Rezydentów: &apos;Tworzenie Obiektów&apos;; &apos;Edycja Terenu&apos;, &apos;Zapamiętywanie Miejsca (LM)&apos;, i &apos;Skrypty&apos; na Posiadłościach Grupy pod O Posiadłości &gt; Opcje." name="land options" value="22"/>
 	</action_set>
 	<action_set description="Przywileje pozwalające członkom na omijanie ograniczeń na Posiadłościach Grupy." name="Parcel Powers">
-		<action description="Pozwól na edycję terenu" longdescription="Członkowie w Funkcji z tym Przywilejem mogą zawsze edytować teren na Posiadłościach Grupy." name="land allow edit land"/>
-		<action description="Pozwól na latanie" longdescription="Członkowie w Funkcji z tym Przywilejem mogą zawsze latać na Posiadłościach Grupy." name="land allow fly"/>
-		<action description="Pozwól na tworzenie obiektów" longdescription="Członkowie w Funkcji z tym Przywilejem mogą zawsze tworzyć obiekty na Posiadłościach Grupy." name="land allow create"/>
-		<action description="Pozwól na zapamiętywanie miejsc (LM)" longdescription="Członkowie w Funkcji z tym Przywilejem mogą zawsze zapamiętywać miejsca (LM) na Posiadłościach Grupy." name="land allow landmark"/>
-		<action description="Pozwól na wybór Miejsca Startu na posiadłościach grupy" longdescription="Członkowie w Funkcji z tym Przywilejem mogą używać menu Świat &gt; Zapamiętaj Miejsce &gt; Miejsce Startu na Posiadłości przypisanej Grupie." name="land allow set home"/>
+		<action description="Pozwól na edycję terenu" longdescription="Członkowie w Funkcji z tym Przywilejem mogą zawsze edytować teren na Posiadłościach Grupy." name="land allow edit land" value="23"/>
+		<action description="Pozwól na latanie" longdescription="Członkowie w Funkcji z tym Przywilejem mogą zawsze latać na Posiadłościach Grupy." name="land allow fly" value="24"/>
+		<action description="Pozwól na tworzenie obiektów" longdescription="Członkowie w Funkcji z tym Przywilejem mogą zawsze tworzyć obiekty na Posiadłościach Grupy." name="land allow create" value="25"/>
+		<action description="Pozwól na zapamiętywanie miejsc (LM)" longdescription="Członkowie w Funkcji z tym Przywilejem mogą zawsze zapamiętywać miejsca (LM) na Posiadłościach Grupy." name="land allow landmark" value="26"/>
+		<action description="Pozwól na wybór Miejsca Startu na posiadłościach grupy" longdescription="Członkowie w Funkcji z tym Przywilejem mogą używać menu Świat &gt; Zapamiętaj Miejsce &gt; Miejsce Startu na Posiadłości przypisanej Grupie." name="land allow set home" value="28"/>
+		<action description="Pozwól na &quot;Imprezę&quot; na posiadłości grupy." longdescription="Członkowie w funkcji z tym przywilejem mogą wskazać posiadłość grupy jako miejsce imprezy." name="land allow host event" value="41"/>
 	</action_set>
 	<action_set description="Przywileje pozwalające na dawanie i odbieranie dostępu do Posiadłości Grupy zawierające możliwości unieruchomiania i wyrzucania Rezydentów." name="Parcel Access">
-		<action description="Zarządzanie listą dostępu do posiadłości" longdescription="Zarządzanie Listą Dostępu do Posiadłości pod O Posiadłości &gt; Dostęp." name="land manage allowed"/>
-		<action description="Zarządzanie listą usuniętych z posiadłości (Bany)" longdescription="Zarządzanie Listą Dostępu do Posiadłości pod O Posiadłości &gt; Dostęp." name="land manage banned"/>
-		<action description="Selekcja opcji &apos;Wstęp Płatny&apos;" longdescription="Selekcja opcji &apos;Wstęp Płatny&apos;; pod O Posiadłości &gt; Dostęp." name="land manage passes"/>
-		<action description="Wyrzucanie i unieruchamianie Rezydentów na posiadłościach" longdescription="Członkowie w Funkcji z tym Przywilejem mogą wpływać na niepożądanych na Posiadłościach Grupy Rezydentów wybierając ich prawym klawiszem myszki i wybierając &apos;;Wyrzuć&apos; albo &apos;Unieruchom&apos;." name="land admin"/>
+		<action description="Zarządzanie listą dostępu do posiadłości" longdescription="Zarządzanie Listą Dostępu do Posiadłości pod O Posiadłości &gt; Dostęp." name="land manage allowed" value="29"/>
+		<action description="Zarządzanie listą usuniętych z posiadłości (Bany)" longdescription="Zarządzanie Listą Dostępu do Posiadłości pod O Posiadłości &gt; Dostęp." name="land manage banned" value="30"/>
+		<action description="Selekcja opcji &apos;Wstęp Płatny&apos;" longdescription="Selekcja opcji &apos;Wstęp Płatny&apos;; pod O Posiadłości &gt; Dostęp." name="land manage passes" value="31"/>
+		<action description="Wyrzucanie i unieruchamianie Rezydentów na posiadłościach" longdescription="Członkowie w Funkcji z tym Przywilejem mogą wpływać na niepożądanych na Posiadłościach Grupy Rezydentów wybierając ich prawym klawiszem myszki i wybierając &apos;;Wyrzuć&apos; albo &apos;Unieruchom&apos;." name="land admin" value="32"/>
 	</action_set>
 	<action_set description="Przywileje pozwalające na odsyłanie obiektów i przemieszczanie roślin z Linden Lab. Użyteczne przy porządkowaniu i przemieszczaniu roślinności. *UWAGA* Odsyłanie obiektów jest nieodwracalne." name="Parcel Content">
-		<action description="Odsyłanie obiektów należących do grupy" longdescription="Odsyłanie obiektów należących do Grupy pod O Posiadłości &gt; Obiekty." name="land return group owned"/>
-		<action description="Odsyłanie obiektów przypisanych do grupy" longdescription="Odsyłanie obiektów przypisanych do Grupy pod O Posiadłości &gt; Obiekty." name="land return group set"/>
-		<action description="Odsyłanie obiektów nie przypisanych do grupy" longdescription="Odsyłanie obiektów nie przypisanych do Grupy pod O Posiadłości &gt; Obiekty." name="land return non group"/>
-		<action description="Ogrodnictwo używając roślin z Linden Lab" longdescription="Możliwość przemieszczenia roślin z Linden Lab. Obiekty te mogą zostać odnalezione w Twojej Szafie, w folderze Biblioteka &gt; Folderze Obiektów lub mogą zostać stworzone dzięki aktywacji Narzędzi Edycji." name="land gardening"/>
+		<action description="Odsyłanie obiektów należących do grupy" longdescription="Odsyłanie obiektów należących do Grupy pod O Posiadłości &gt; Obiekty." name="land return group owned" value="48"/>
+		<action description="Odsyłanie obiektów przypisanych do grupy" longdescription="Odsyłanie obiektów przypisanych do Grupy pod O Posiadłości &gt; Obiekty." name="land return group set" value="33"/>
+		<action description="Odsyłanie obiektów nie przypisanych do grupy" longdescription="Odsyłanie obiektów nie przypisanych do Grupy pod O Posiadłości &gt; Obiekty." name="land return non group" value="34"/>
+		<action description="Ogrodnictwo używając roślin z Linden Lab" longdescription="Możliwość przemieszczenia roślin z Linden Lab. Obiekty te mogą zostać odnalezione w Twojej Szafie, w folderze Biblioteka &gt; Folderze Obiektów lub mogą zostać stworzone dzięki aktywacji Narzędzi Edycji." name="land gardening" value="35"/>
 	</action_set>
 	<action_set description="Przywileje pozwalające na odsyłanie obiektów i przemieszczenia roślin z Linden Lab. Użyteczne przy porządkowaniu i przemieszczenia roślinności. *UWAGA* Odsyłanie obiektów jest nieodwracalne." name="Object Management">
-		<action description="Przypisywanie obiektów do grupy" longdescription="Przypisywanie obiektów do Grupy w Narzędziach Edycji &gt; Ogólne" name="object deed"/>
-		<action description="Manipulowanie (wklejanie, kopiowanie, modyfikacja) obiektami należącymi do Grupy" longdescription="Manipulowanie (wklejanie, kopiowanie, modyfikacja) obiektami należącymi do Grupy w Narzędziach Edycji &gt; Ogólne" name="object manipulate"/>
-		<action description="Sprzedaż obiektów należących do grupy" longdescription="Sprzedaż obiektów należących do Grupy pod Narzędzia Edycji &gt; Ogólne." name="object set sale"/>
+		<action description="Przypisywanie obiektów do grupy" longdescription="Przypisywanie obiektów do Grupy w Narzędziach Edycji &gt; Ogólne" name="object deed" value="36"/>
+		<action description="Manipulowanie (wklejanie, kopiowanie, modyfikacja) obiektami należącymi do Grupy" longdescription="Manipulowanie (wklejanie, kopiowanie, modyfikacja) obiektami należącymi do Grupy w Narzędziach Edycji &gt; Ogólne" name="object manipulate" value="38"/>
+		<action description="Sprzedaż obiektów należących do grupy" longdescription="Sprzedaż obiektów należących do Grupy pod Narzędzia Edycji &gt; Ogólne." name="object set sale" value="39"/>
 	</action_set>
 	<action_set description="Przywileje pozwalające na wybór opłat grupowych, otrzymywanie dochodu i ograniczanie dostępu do historii konta grupy." name="Accounting">
-		<action description="Opłaty grupowe i dochód grupowy" longdescription="Członkowie w Funkcji z tym Przywilejem będą automatycznie wnosić opłaty grupowe i będą otrzymywać dochód grupowy. Tzn. będą codziennie otrzymywać część dochodu ze sprzedaży Posiadłości Grupy oraz będą partycypować w kosztach ogłoszeń itp." name="accounting accountable"/>
+		<action description="Opłaty grupowe i dochód grupowy" longdescription="Członkowie w Funkcji z tym Przywilejem będą automatycznie wnosić opłaty grupowe i będą otrzymywać dochód grupowy. Tzn. będą codziennie otrzymywać część dochodu ze sprzedaży Posiadłości Grupy oraz będą partycypować w kosztach ogłoszeń itp." name="accounting accountable" value="40"/>
 	</action_set>
 	<action_set description="Przywileje pozwalające na wysyłanie, odbieranie i czytanie Notek Grupy." name="Notices">
-		<action description="Wysyłanie notek" longdescription="Członkowie w Funkcji z tym Przywilejem mogą wysyłać Notki wybierając O Grupie &gt; Notek." name="notices send"/>
-		<action description="Odbieranie notek i dostęp do dawniejszych notek" longdescription="Członkowie w Funkcji z tym Przywilejem mogą odbierać nowe i czytać dawniejsze Notki wybierając O Grupie &gt; Notki." name="notices receive"/>
-	</action_set>
-	<action_set description="Przywileje pozwalające na zgłaszanie Propozycji, głosowanie nad Propozycjami i śledzenie historii głosowania." name="Proposals">
-		<action description="Zgłaszanie propozycji" longdescription="Członkowie w Funkcji z tym Przywilejem mogą zgłaszać Propozycje do głosowania wybierając O Grupie &gt; Propozycje." name="proposal start"/>
-		<action description="Głosowanie nad propozycjami" longdescription="Członkowie w Funkcji z tym Przywilejem mogą głosować nad Propozycjami zgłoszonymi do głosowania wybierając O Grupie &gt; Propozycje." name="proposal vote"/>
+		<action description="Wysyłanie notek" longdescription="Członkowie w Funkcji z tym Przywilejem mogą wysyłać Notki wybierając O Grupie &gt; Notek." name="notices send" value="42"/>
+		<action description="Odbieranie notek i dostęp do dawniejszych notek" longdescription="Członkowie w Funkcji z tym Przywilejem mogą odbierać nowe i czytać dawniejsze Notki wybierając O Grupie &gt; Notki." name="notices receive" value="43"/>
 	</action_set>
 	<action_set description="Przywileje kontrolujące czat i rozmowy grupowe." name="Chat">
-		<action description="Dostęp do czatu grupowego" longdescription="Członkowie w Funkcji z tym Przywilejem mogą uczestniczyć w czacie i rozmowach grupowych." name="join group chat"/>
-		<action description="Dostęp do rozmów grupowych" longdescription="Członkowie w Funkcji z tym Przywilejem mogą uczestniczyć w rozmowach grupowych. UWAGA: Dostęp do Czatu Grupowego jest wymagany dla rozmów grupowych." name="join voice chat"/>
-		<action description="Moderator czatu grupowego" longdescription="Członkowie w Funkcji z tym Przywilejem mogą kontrolować dostęp do czatu i rozmów grupowych." name="moderate group chat"/>
+		<action description="Dostęp do czatu grupowego" longdescription="Członkowie w Funkcji z tym Przywilejem mogą uczestniczyć w czacie i rozmowach grupowych." name="join group chat" value="16"/>
+		<action description="Dostęp do rozmów grupowych" longdescription="Członkowie w Funkcji z tym Przywilejem mogą uczestniczyć w rozmowach grupowych. UWAGA: Dostęp do Czatu Grupowego jest wymagany dla rozmów grupowych." name="join voice chat" value="27"/>
+		<action description="Moderator czatu grupowego" longdescription="Członkowie w Funkcji z tym Przywilejem mogą kontrolować dostęp do czatu i rozmów grupowych." name="moderate group chat" value="37"/>
 	</action_set>
 </role_actions>
diff --git a/indra/newview/skins/default/xui/pl/strings.xml b/indra/newview/skins/default/xui/pl/strings.xml
index c9fe22f3c8..c8d97cc546 100644
--- a/indra/newview/skins/default/xui/pl/strings.xml
+++ b/indra/newview/skins/default/xui/pl/strings.xml
@@ -191,6 +191,9 @@
 	<string name="TooltipAgentUrl">
 		Kliknij aby zobaczyc profil Rezydenta
 	</string>
+	<string name="TooltipAgentInspect">
+		Dowiedz się więcej o tym Rezydencie
+	</string>
 	<string name="TooltipAgentMute">
 		Kliknij aby wyciszyc tego Rezydenta
 	</string>
@@ -738,6 +741,12 @@
 	<string name="Estate / Full Region">
 		Majątek / Region
 	</string>
+	<string name="Estate / Homestead">
+		Estate / Homestead
+	</string>
+	<string name="Mainland / Homestead">
+		Mainland / Homestead
+	</string>
 	<string name="Mainland / Full Region">
 		Mainland / Region
 	</string>
@@ -3469,7 +3478,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		Jesteś jedyną osobą w tej konferencji.
 	</string>
 	<string name="offline_message">
-		[FIRST] [LAST] - ta osoba jest obecnie niedostępna.
+		[NAME] opuszcza Second Life.
 	</string>
 	<string name="invite_message">
 		Kliknij na [BUTTON NAME] przycisk by zaakceptować/dołączyć do tej rozmowy.
@@ -3538,7 +3547,10 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		http://secondlife.com/landing/voicemorphing
 	</string>
 	<string name="paid_you_ldollars">
-		[NAME] zapłacił Ci L$[AMOUNT]
+		[NAME] zapłaciła/zapłacił Tobie [AMOUNT]L$ [REASON].
+	</string>
+	<string name="paid_you_ldollars_no_reason">
+		[NAME] zapłacił/zapłaciła Tobie L$[AMOUNT].
 	</string>
 	<string name="you_paid_ldollars">
 		Zapłacono [NAME] [AMOUNT]L$ [REASON].
@@ -3552,6 +3564,9 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 	<string name="you_paid_ldollars_no_name">
 		Zapłacono [AMOUNT]L$ [REASON].
 	</string>
+	<string name="for item">
+		dla [ITEM]
+	</string>
 	<string name="for a parcel of land">
 		za Posiadłość
 	</string>
@@ -3570,6 +3585,9 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 	<string name="to upload">
 		aby pobrać
 	</string>
+	<string name="to publish a classified ad">
+		publikacja reklamy
+	</string>
 	<string name="giving">
 		Dajesz L$ [AMOUNT]
 	</string>
-- 
cgit v1.2.3


From cfbd641d4659845f925fe8ba32f2c33b9825096b Mon Sep 17 00:00:00 2001
From: Eli Linden <eli@lindenlab.com>
Date: Thu, 4 Nov 2010 12:50:16 -0700
Subject: INTL-5 FIX ES fix for missing translations

---
 indra/newview/skins/default/xui/es/floater_about_land.xml | 10 ++++++++++
 1 file changed, 10 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/es/floater_about_land.xml b/indra/newview/skins/default/xui/es/floater_about_land.xml
index 92831cc21c..06b9ae0c30 100644
--- a/indra/newview/skins/default/xui/es/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/es/floater_about_land.xml
@@ -427,7 +427,17 @@ los media:
 			<check_box label="Media en bucle" name="media_loop" tool_tip="Ejecuta el media en bucle: cuando acaba su ejecución, vuelve a empezar."/>
 		</panel>
 		<panel label="SONIDO" name="land_audio_panel">
+			<text name="MusicURL:">
+				URL de música:
+			</text>
 			<check_box label="Ocultar la URL" name="hide_music_url" tool_tip="Al marcar esta opción se ocultará la URL de la música a quien no esté autorizado a ver la información de esta parcela."/>
+			<text name="Sound:">
+				Sonido:
+			</text>
+			<check_box label="Restringir sonidos de objetos y gestos a esta parcela" name="check sound local"/>
+			<text name="Voice settings:">
+				Voz:
+			</text>
 			<check_box label="Activar la voz" name="parcel_enable_voice_channel"/>
 			<check_box label="Autorizar la voz (establecido por el Estado)" name="parcel_enable_voice_channel_is_estate_disabled"/>
 			<check_box label="Limitar la voz a esta parcela" name="parcel_enable_voice_channel_local"/>
-- 
cgit v1.2.3


From f111e84cf72d7c53f917e40cd28f289594909d62 Mon Sep 17 00:00:00 2001
From: Seth ProductEngine <slitovchuk@productengine.com>
Date: Thu, 4 Nov 2010 21:50:26 +0200
Subject: STORM-189 FIXED truncations in NL locale in Build Tools floater.

---
 indra/newview/skins/default/xui/nl/floater_tools.xml | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/nl/floater_tools.xml b/indra/newview/skins/default/xui/nl/floater_tools.xml
index b72e4d4681..d49ffc2f51 100644
--- a/indra/newview/skins/default/xui/nl/floater_tools.xml
+++ b/indra/newview/skins/default/xui/nl/floater_tools.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="toolbox floater" title="" short_title="BOUWEN" width="288">
+<floater name="toolbox floater" title="" short_title="BOUWEN" height="587">
 	<button label="" label_selected="" name="button focus" tool_tip="Focus"/>
 	<button label="" label_selected="" name="button move" tool_tip="Verplaats"/>
 	<button label="" label_selected="" name="button edit" tool_tip="Bewerk"/>
@@ -25,7 +25,7 @@
 	<text name="text ruler mode">
 		Liniaal:
 	</text>
-	<combo_box name="combobox grid mode" width="78" left_delta="38">
+	<combo_box name="combobox grid mode">
 		<combo_box.item name="World" label="Wereld"
 		/>
 		<combo_box.item name="Local" label="Lokaal"
@@ -81,13 +81,13 @@
 	<text name="Strength:">
 		Sterkte
 	</text>
-	<text name="obj_count" left="134">
+	<text name="obj_count" top_pad="15">
 		Geselecteerde objecten: [COUNT]
 	</text>
-	<text name="prim_count" left="134">
+	<text name="prim_count">
 		primitieven: [COUNT]
 	</text>
-	<tab_container name="Object Info Tabs" tab_max_width="62" tab_min_width="30" width="288">
+	<tab_container name="Object Info Tabs" tab_max_width="62" tab_min_width="30" top="180">
 		<panel label="Algemeen" name="General">
 			<text name="Name:">
 				Naam:
@@ -115,19 +115,19 @@
 			<text name="Group Name Proxy">
 				De Lindens
 			</text>
-			<button label="Instellen..." label_selected="Instellen..." name="button set group"/>
+			<button label="Instellen..." label_selected="Instellen..." name="button set group" left_pad="13"/>
 			<text name="Permissions:">
 				Permissies:
 			</text>
 
-			<check_box label="Deel met groep" name="checkbox share with group" tool_tip="Alle leden van de ingestelde groep toestaan om te delen en uw permissies voor dit object te gebruiken. U moet &apos;Overdragen&apos; om rolbeperkingen in te schakelen."/>
+			<check_box label="Deel met groep" name="checkbox share with group" tool_tip="Alle leden van de ingestelde groep toestaan om te delen en uw permissies voor dit object te gebruiken. U moet &apos;Overdragen&apos; om rolbeperkingen in te schakelen." left="100"/>
 			<string name="text deed continued">
 				Overdragen...
 			</string>
 			<string name="text deed">
 				Overdragen
 			</string>
-			<button label="Overdragen..." label_selected="Overdragen..." name="button deed" tool_tip="Groepgedeelde objecten kunnen door een groepofficier worden overgedragen"/>
+			<button label="Overdragen..." label_selected="Overdragen..." name="button deed" tool_tip="Groepgedeelde objecten kunnen door een groepofficier worden overgedragen" left_pad="19"/>
 			<check_box label="Iedereen mag verplaatsen" name="checkbox allow everyone move"/>
 			<check_box label="Iedereen mag kopiëren" name="checkbox allow everyone copy"/>
 			<check_box label="Toon in zoeken" name="search_check" tool_tip="Laat mensen dit object zien in zoekresultaten"/>
@@ -406,7 +406,7 @@
 			<text name="glow label">
 				Gloed
 			</text>
-			<check_box label="Volledige helderheid" name="checkbox fullbright"/>
+			<check_box label="Volledige helderheid" name="checkbox fullbright" left_delta="-10"/>
 			<text name="tex gen">
 				Mapping
 			</text>
-- 
cgit v1.2.3


From 94a40569aaa7dbf9a9474b465e818eed798bd3fd Mon Sep 17 00:00:00 2001
From: Loren Shih <seraph@lindenlab.com>
Date: Thu, 4 Nov 2010 16:00:19 -0400
Subject: Indentation / formatting changes to panel_preferences_graphics.  No
 functionality change.

---
 .../default/xui/en/panel_preferences_graphics1.xml | 947 ++++++++++-----------
 1 file changed, 473 insertions(+), 474 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
index 7d49a671e6..aae373ed33 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
@@ -163,536 +163,536 @@
      top="76"
      width="485">
 		<text
-		type="string"
-		length="1"
-		follows="left|top"
-		height="12"
-		layout="topleft"
-		left_delta="5"
-		name="ShadersText"
-		top="3"
-		width="128">
+		 type="string"
+		 length="1"
+		 follows="left|top"
+		 height="12"
+		 layout="topleft"
+		 left_delta="5"
+		 name="ShadersText"
+		 top="3"
+		 width="128">
 			Shaders:
 		</text>
 		<check_box
-		control_name="RenderObjectBump"
-		height="16"
-		initial_value="true"
-		label="Bump mapping and shiny"
-		layout="topleft"
-		left_delta="0"
-		name="BumpShiny"
-		top_pad="7"
-		width="256" />
+		 control_name="RenderObjectBump"
+		 height="16"
+		 initial_value="true"
+		 label="Bump mapping and shiny"
+		 layout="topleft"
+		 left_delta="0"
+		 name="BumpShiny"
+		 top_pad="7"
+		 width="256" />
 		<check_box
-		control_name="VertexShaderEnable"
-		height="16"
-		initial_value="true"
-		label="Basic shaders"
-		layout="topleft"
-		left_delta="0"
-		name="BasicShaders"
-		tool_tip="Disabling this option may prevent some graphics card drivers from crashing"
-		top_pad="1"
-		width="315">
+		 control_name="VertexShaderEnable"
+		 height="16"
+		 initial_value="true"
+		 label="Basic shaders"
+		 layout="topleft"
+		 left_delta="0"
+		 name="BasicShaders"
+		 tool_tip="Disabling this option may prevent some graphics card drivers from crashing"
+		 top_pad="1"
+		 width="315">
 			<check_box.commit_callback
-			function="Pref.VertexShaderEnable" />
+		     function="Pref.VertexShaderEnable" />
 		</check_box>
 		<check_box
-		control_name="WindLightUseAtmosShaders"
-		height="16"
-		initial_value="true"
-		label="Atmospheric shaders"
-		layout="topleft"
-		left_delta="0"
-		name="WindLightUseAtmosShaders"
-		top_pad="1"
-		width="256">
+		 control_name="WindLightUseAtmosShaders"
+		 height="16"
+		 initial_value="true"
+		 label="Atmospheric shaders"
+		 layout="topleft"
+		 left_delta="0"
+		 name="WindLightUseAtmosShaders"
+		 top_pad="1"
+		 width="256">
 			<check_box.commit_callback
-			function="Pref.VertexShaderEnable" />
+			 function="Pref.VertexShaderEnable" />
 		</check_box>
 <!-- DISABLED UNTIL WE REALLY WANT TO SUPPORT THIS
-    <check_box
-		control_name="RenderDeferred"
-		height="16"
-		initial_value="true"
-		label="Lighting and Shadows"
-		layout="topleft"
-		left_delta="0"
-		name="UseLightShaders"
-		top_pad="1"
-		width="256">
-      <check_box.commit_callback
-			function="Pref.VertexShaderEnable" />
-    </check_box>
-    <check_box
-		control_name="RenderDeferredSSAO"
-		height="16"
-		initial_value="true"
-		label="Ambient Occlusion"
-		layout="topleft"
-		left_delta="0"
-		name="UseSSAO"
-		top_pad="1"
-		width="256">
-      <check_box.commit_callback
-			function="Pref.VertexShaderEnable" />
-    </check_box>
+    	<check_box
+		 control_name="RenderDeferred"
+		 height="16"
+		 initial_value="true"
+		 label="Lighting and Shadows"
+		 layout="topleft"
+		 left_delta="0"
+		 name="UseLightShaders"
+		 top_pad="1"
+		 width="256">
+         	<check_box.commit_callback
+			 function="Pref.VertexShaderEnable" />
+    	</check_box>
+    	<check_box
+		 control_name="RenderDeferredSSAO"
+		 height="16"
+		 initial_value="true"
+		 label="Ambient Occlusion"
+		 layout="topleft"
+		 left_delta="0"
+		 name="UseSSAO"
+		 top_pad="1"
+		 width="256">
+         	<check_box.commit_callback
+			 function="Pref.VertexShaderEnable" />
+    	</check_box>
 
-     <text
-    type="string"
-    length="1"
-    top_pad="8"
-    follows="top|left"
-    height="23"
-    width="110"
-    word_wrap="true"
-    layout="topleft"
-    left="10"
-    name="shadows_label">
-        Shadows:
-      </text>
-      <combo_box
-      control_name="RenderShadowDetail"
-      height="23"
-      layout="topleft"
-      left="10"
-      top_pad="0" 
-      name="ShadowDetail"
-      width="150">
-        <combo_box.item
-        label="None"
-        name="0"
-        value="0"/>
-        <combo_box.item
-        label="Sun/Moon"
-        name="1"
-        value="1"/>
-        <combo_box.item
-        label="Sun/Moon + Projectors"
-        name="2"
-        value="2"/>
-      </combo_box>
+        <text
+         type="string"
+         length="1"
+         top_pad="8"
+         follows="top|left"
+         height="23"
+         width="110"
+         word_wrap="true"
+         layout="topleft"
+         left="10"
+         name="shadows_label">
+         	Shadows:
+        </text>
+        <combo_box
+         control_name="RenderShadowDetail"
+         height="23"
+         layout="topleft"
+         left="10"
+         top_pad="0" 
+         name="ShadowDetail"
+         width="150">
+           <combo_box.item
+            label="None"
+            name="0"
+            value="0"/>
+           <combo_box.item
+            label="Sun/Moon"
+            name="1"
+            value="1"/>
+           <combo_box.item
+            label="Sun/Moon + Projectors"
+            name="2"
+            value="2"/>
+        </combo_box>
 -->
-      <text
-  type="string"
-  length="1"
-  top_pad="8"
-  follows="top|left"
-  height="23"
-  width="110"
-  word_wrap="true"
-  layout="topleft"
-  left="10"
-  name="reflection_label">
-        Water Reflections:
-      </text>
-      <combo_box
-      control_name="RenderReflectionDetail"
-      height="23"
-      layout="topleft"
-      left_delta="10"
-      top_pad ="0"
-      name="Reflections"
-      width="150">
-        <combo_box.item
-        label="Minimal"
-        name="0"
-        value="0"/>
-        <combo_box.item
-        label="Terrain and trees"
-        name="1"
-        value="1"/>
-        <combo_box.item
-        label="All static objects"
-        name="2"
-        value="2"/>
-        <combo_box.item
-        label="All avatars and objects"
-        name="3"
-        value="3"/>
-        <combo_box.item
-        label="Everything"
-        name="4"
-        value="4"/>
-      </combo_box>
+        <text
+         type="string"
+         length="1"
+         top_pad="8"
+         follows="top|left"
+         height="23"
+         width="110"
+         word_wrap="true"
+         layout="topleft"
+         left="05"
+         name="reflection_label">
+            Water Reflections:
+        </text>
+        <combo_box
+         control_name="RenderReflectionDetail"
+         height="23"
+         layout="topleft"
+         left_delta="10"
+         top_pad ="0"
+         name="Reflections"
+         width="150">
+            <combo_box.item
+             label="Minimal"
+             name="0"
+             value="0"/>
+            <combo_box.item
+             label="Terrain and trees"
+             name="1"
+             value="1"/>
+            <combo_box.item
+             label="All static objects"
+             name="2"
+             value="2"/>
+            <combo_box.item
+             label="All avatars and objects"
+             name="3"
+             value="3"/>
+            <combo_box.item
+             label="Everything"
+             name="4"
+             value="4"/>
+        </combo_box>
     
 		<slider
-		control_name="RenderFarClip"
-		decimal_digits="0"
-		follows="left|top"
-		height="16"
-		increment="8"
-		initial_value="160"
-		label="Draw distance:"
-		label_width="185"
-		layout="topleft"
-		left="200"
-		max_val="512"
-		min_val="64"
-		name="DrawDistance"
-		top="3"
-		width="296" />
+		 control_name="RenderFarClip"
+		 decimal_digits="0"
+		 follows="left|top"
+		 height="16"
+		 increment="8"
+		 initial_value="160"
+		 label="Draw distance:"
+		 label_width="185"
+		 layout="topleft"
+		 left="200"
+		 max_val="512"
+		 min_val="64"
+		 name="DrawDistance"
+		 top="3"
+		 width="296" />
 		<text
-		type="string"
-		length="1"
-		follows="left|top"
-		height="12"
-		layout="topleft"
-		left_delta="291"
-		name="DrawDistanceMeterText2"
-		top_delta="0"
-		width="128">
+		 type="string"
+		 length="1"
+		 follows="left|top"
+		 height="12"
+		 layout="topleft"
+		 left_delta="291"
+		 name="DrawDistanceMeterText2"
+		 top_delta="0"
+		 width="128">
 			m
 		</text>    
 		<slider
-		control_name="RenderMaxPartCount"
-		decimal_digits="0"
-		follows="left|top"
-		height="16"
-		increment="256"
-		initial_value="4096"
-		label="Max. particle count:"
-		label_width="185"
-		layout="topleft"
-		left="200"
-		max_val="8192"
-		name="MaxParticleCount"
-		top_pad="7"
-		width="303" />
-    <slider
-    control_name="RenderAvatarMaxVisible"
-    decimal_digits="0"
-    follows="left|top"
-    height="16"
-    increment="1"
-    initial_value="12"
-    label="Max. # of non-impostor avatars:"
-    label_width="185"
-    layout="topleft"
-    left_delta="0"
-    max_val="65"
-    min_val="1"
-    name="MaxNumberAvatarDrawn"
-    top_pad="4"
-    width="290" />
+		 control_name="RenderMaxPartCount"
+		 decimal_digits="0"
+		 follows="left|top"
+		 height="16"
+		 increment="256"
+		 initial_value="4096"
+		 label="Max. particle count:"
+		 label_width="185"
+		 layout="topleft"
+		 left="200"
+		 max_val="8192"
+		 name="MaxParticleCount"
+		 top_pad="7"
+		 width="303" />
+        <slider
+         control_name="RenderAvatarMaxVisible"
+         decimal_digits="0"
+         follows="left|top"
+         height="16"
+         increment="1"
+         initial_value="12"
+         label="Max. # of non-impostor avatars:"
+         label_width="185"
+         layout="topleft"
+         left_delta="0"
+         max_val="65"
+         min_val="1"
+         name="MaxNumberAvatarDrawn"
+         top_pad="4"
+         width="290" />
 		<slider
-		control_name="RenderGlowResolutionPow"
-		decimal_digits="0"
-		follows="left|top"
-		height="16"
-		increment="1"
-		initial_value="8"
-		label="Post process quality:"
-		label_width="185"
-		layout="topleft"
-		left="200"
-		max_val="9"
-		min_val="8"
-		name="RenderPostProcess"
-		show_text="false"
-		top_pad="4"
-		width="264">
+ 		 control_name="RenderGlowResolutionPow"
+		 decimal_digits="0"
+		 follows="left|top"
+		 height="16"
+		 increment="1"
+		 initial_value="8"
+		 label="Post process quality:"
+		 label_width="185"
+		 layout="topleft"
+		 left="200"
+		 max_val="9"
+		 min_val="8"
+		 name="RenderPostProcess"
+		 show_text="false"
+		 top_pad="4"
+		 width="264">
 			<slider.commit_callback
-			function="Pref.UpdateSliderText"
-			parameter="PostProcessText" />
+			 function="Pref.UpdateSliderText"
+			 parameter="PostProcessText" />
 		</slider>
 		<text
-		type="string"
-		length="1"
-		follows="left|top"
-		height="12"
-		layout="topleft"
-		left_delta="0"
-		name="MeshDetailText"
-		top_pad="5"
-		width="128">
+		 type="string"
+		 length="1"
+		 follows="left|top"
+		 height="12"
+		 layout="topleft"
+		 left_delta="0"
+		 name="MeshDetailText"
+		 top_pad="5"
+		 width="128">
 			Mesh detail:
 		</text>
 		<slider
-		control_name="RenderVolumeLODFactor"
-		follows="left|top"
-		height="16"
-		increment="0.125"
-		initial_value="160"
-		label="  Objects:"
-		label_width="185"
-		layout="topleft"
-		left_delta="0"
-		max_val="2"
-		name="ObjectMeshDetail"
-		show_text="false"
-		top_pad="6"
-		width="264">
+		 control_name="RenderVolumeLODFactor"
+		 follows="left|top"
+		 height="16"
+		 increment="0.125"
+		 initial_value="160"
+		 label="  Objects:"
+		 label_width="185"
+		 layout="topleft"
+		 left_delta="0"
+		 max_val="2"
+		 name="ObjectMeshDetail"
+		 show_text="false"
+		 top_pad="6"
+		 width="264">
 			<slider.commit_callback
-			function="Pref.UpdateSliderText"
-			parameter="ObjectMeshDetailText" />
+			 function="Pref.UpdateSliderText"
+			 parameter="ObjectMeshDetailText" />
 		</slider>
 		<slider
-		control_name="RenderFlexTimeFactor"
-		follows="left|top"
-		height="16"
-		initial_value="160"
-		label="  Flexiprims:"
-		label_width="185"
-		layout="topleft"
-		left_delta="0"
-		name="FlexibleMeshDetail"
-		show_text="false"
-		top_pad="4"
-		width="264">
+		 control_name="RenderFlexTimeFactor"
+		 follows="left|top"
+		 height="16"
+		 initial_value="160"
+		 label="  Flexiprims:"
+		 label_width="185"
+		 layout="topleft"
+		 left_delta="0"
+		 name="FlexibleMeshDetail"
+		 show_text="false"
+		 top_pad="4"
+		 width="264">
 			<slider.commit_callback
-			function="Pref.UpdateSliderText"
-			parameter="FlexibleMeshDetailText" />
+			 function="Pref.UpdateSliderText"
+			 parameter="FlexibleMeshDetailText" />
 		</slider>
         <slider
-        control_name="RenderTreeLODFactor"
-        follows="left|top"
-        height="16"
-        increment="0.125"
-        initial_value="160"
-        label="  Trees:"
-        label_width="185"
-        layout="topleft"
-        left_delta="0"
-        name="TreeMeshDetail"
-        show_text="false"
-        top_pad="4"
-        width="264">
-           <slider.commit_callback
-            function="Pref.UpdateSliderText"
-            parameter="TreeMeshDetailText" />
-        </slider>
+         control_name="RenderTreeLODFactor"
+         follows="left|top"
+         height="16"
+         increment="0.125"
+         initial_value="160"
+         label="  Trees:"
+         label_width="185"
+         layout="topleft"
+         left_delta="0"
+         name="TreeMeshDetail"
+         show_text="false"
+         top_pad="4"
+         width="264">
+            <slider.commit_callback
+             function="Pref.UpdateSliderText"
+             parameter="TreeMeshDetailText" />
+            </slider>
         <slider
-        control_name="RenderAvatarLODFactor"
-        follows="left|top"
-        height="16"
-        increment="0.125"
-        initial_value="160"
-        label="  Avatars:"
-        label_width="185"
-        layout="topleft"
-        left_delta="0"
-        name="AvatarMeshDetail"
-        show_text="false"
-        top_pad="4"
-        width="264">
-           <slider.commit_callback
-            function="Pref.UpdateSliderText"
-            parameter="AvatarMeshDetailText" />
+         control_name="RenderAvatarLODFactor"
+         follows="left|top"
+         height="16"
+         increment="0.125"
+         initial_value="160"
+         label="  Avatars:"
+         label_width="185"
+         layout="topleft"
+         left_delta="0"
+         name="AvatarMeshDetail"
+         show_text="false"
+         top_pad="4"
+         width="264">
+            <slider.commit_callback
+             function="Pref.UpdateSliderText"
+             parameter="AvatarMeshDetailText" />
         </slider>
         <slider
-        control_name="RenderTerrainLODFactor"
-        follows="left|top"
-        height="16"
-        increment="0.125"
-        initial_value="160"
-        label="  Terrain:"
-        label_width="185"
-        layout="topleft"
-        left_delta="0"
-        max_val="2"
-        min_val="1"
-        name="TerrainMeshDetail"
-        show_text="false"
-        top_pad="4"
-        width="264">
-           <slider.commit_callback
-            function="Pref.UpdateSliderText"
-            parameter="TerrainMeshDetailText" />
+         control_name="RenderTerrainLODFactor"
+         follows="left|top"
+         height="16"
+         increment="0.125"
+         initial_value="160"
+         label="  Terrain:"
+         label_width="185"
+         layout="topleft"
+         left_delta="0"
+         max_val="2"
+         min_val="1"
+         name="TerrainMeshDetail"
+         show_text="false"
+         top_pad="4"
+         width="264">
+            <slider.commit_callback
+             function="Pref.UpdateSliderText"
+             parameter="TerrainMeshDetailText" />
         </slider>
         <slider
-        control_name="WLSkyDetail"
-		enabled_control="WindLightUseAtmosShaders"
-        decimal_digits="0"
-        follows="left|top"
-        height="16"
-        increment="8"
-        initial_value="160"
-        label="  Sky:"
-        label_width="185"
-        layout="topleft"
-        left_delta="0"
-        max_val="128"
-        min_val="16"
-        name="SkyMeshDetail"
-        show_text="false"
-        top_pad="4"
-        width="264">
-           <slider.commit_callback
-            function="Pref.UpdateSliderText"
-            parameter="SkyMeshDetailText" />
+         control_name="WLSkyDetail"
+		 enabled_control="WindLightUseAtmosShaders"
+         decimal_digits="0"
+         follows="left|top"
+         height="16"
+         increment="8"
+         initial_value="160"
+         label="  Sky:"
+         label_width="185"
+         layout="topleft"
+         left_delta="0"
+         max_val="128"
+         min_val="16"
+         name="SkyMeshDetail"
+         show_text="false"
+         top_pad="4"
+         width="264">
+            <slider.commit_callback
+             function="Pref.UpdateSliderText"
+             parameter="SkyMeshDetailText" />
         </slider>
         <text
-        type="string"
-        length="1"
-        follows="left|top"
-        height="12"
-        layout="topleft"
-        left="469"
-        name="PostProcessText"
-        top="60"
-        width="128">
-           Low
+         type="string"
+         length="1"
+         follows="left|top"
+         height="12"
+         layout="topleft"
+         left="469"
+         name="PostProcessText"
+         top="60"
+         width="128">
+            Low
         </text>
         <text
-        type="string"
-        length="1"
-        follows="left|top"
-        height="12"
-        layout="topleft"
-        left_delta="0"
-        name="ObjectMeshDetailText"
-        top_pad="26"
-        width="128">
-           Low
+         type="string"
+         length="1"
+         follows="left|top"
+         height="12"
+         layout="topleft"
+         left_delta="0"
+         name="ObjectMeshDetailText"
+         top_pad="26"
+         width="128">
+            Low
         </text>
         <text
-        type="string"
-        length="1"
-        follows="left|top"
-        height="12"
-        layout="topleft"
-        left_delta="0"
-        name="FlexibleMeshDetailText"
-        top_pad="8"
-        width="128">
-           Low
+         type="string"
+         length="1"
+         follows="left|top"
+         height="12"
+         layout="topleft"
+         left_delta="0"
+         name="FlexibleMeshDetailText"
+         top_pad="8"
+         width="128">
+            Low
         </text>
         <text
-        type="string"
-        length="1"
-        follows="left|top"
-        height="12"
-        layout="topleft"
-        left_delta="0"
-        name="TreeMeshDetailText"
-        top_pad="8"
-        width="128">
-           Low
+         type="string"
+         length="1"
+         follows="left|top"
+         height="12"
+         layout="topleft"
+         left_delta="0"
+         name="TreeMeshDetailText"
+         top_pad="8"
+         width="128">
+            Low
         </text>
         <text
-        type="string"
-        length="1"
-        follows="left|top"
-        height="12"
-        layout="topleft"
-        left_delta="0"
-        name="AvatarMeshDetailText"
-        top_pad="8"
-        width="128">
-           Low
+         type="string"
+         length="1"
+         follows="left|top"
+         height="12"
+         layout="topleft"
+         left_delta="0"
+         name="AvatarMeshDetailText"
+         top_pad="8"
+         width="128">
+            Low
         </text>
         <text
-        type="string"
-        length="1"
-        follows="left|top"
-        height="12"
-        layout="topleft"
-        left_delta="0"
-        name="TerrainMeshDetailText"
-        top_pad="8"
-        width="128">
-           Low
+         type="string"
+         length="1"
+         follows="left|top"
+         height="12"
+         layout="topleft"
+         left_delta="0"
+         name="TerrainMeshDetailText"
+         top_pad="8"
+         width="128">
+            Low
         </text>
         <text
-		enabled_control="WindLightUseAtmosShaders"
-        type="string"
-        length="1"
-        follows="left|top"
-        height="12"
-        layout="topleft"
-        left_delta="0"
-        name="SkyMeshDetailText"
-        top_pad="8"
-        width="128">
-           Low
+		 enabled_control="WindLightUseAtmosShaders"
+         type="string"
+         length="1"
+         follows="left|top"
+         height="12"
+         layout="topleft"
+         left_delta="0"
+         name="SkyMeshDetailText"
+         top_pad="8"
+         width="128">
+            Low
         </text>
-      <text
-      type="string"
-      length="1"
-      follows="left|top"
-      height="12"
-      layout="topleft"
-      left_delta="-260"
-      name="AvatarRenderingText"
-        top_pad="18"
-      width="128">
-        Avatar rendering:
+        <text
+         type="string"
+         length="1"
+         follows="left|top"
+         height="12"
+         layout="topleft"
+         left_delta="-260"
+         name="AvatarRenderingText"
+         top_pad="18"
+         width="128">
+            Avatar rendering:
       </text>
       <check_box
-      control_name="RenderUseImpostors"
-      height="16"
-      initial_value="true"
-      label="Avatar impostors"
-      layout="topleft"
-      left_delta="0"
-      name="AvatarImpostors"
-      top_pad="7"
-      width="256" />
+       control_name="RenderUseImpostors"
+       height="16"
+       initial_value="true"
+       label="Avatar impostors"
+       layout="topleft"
+       left_delta="0"
+       name="AvatarImpostors"
+       top_pad="7"
+       width="256" />
       <check_box
-      control_name="RenderAvatarVP"
-      height="16"
-      initial_value="true"
-      label="Hardware skinning"
-      layout="topleft"
-      left_delta="0"
-      name="AvatarVertexProgram"
-      top_pad="1"
-      width="256">
-        <check_box.commit_callback
-        function="Pref.VertexShaderEnable" />
+       control_name="RenderAvatarVP"
+       height="16"
+       initial_value="true"
+       label="Hardware skinning"
+       layout="topleft"
+       left_delta="0"
+       name="AvatarVertexProgram"
+       top_pad="1"
+       width="256">
+          <check_box.commit_callback
+           function="Pref.VertexShaderEnable" />
       </check_box>
       <check_box
-      control_name="RenderAvatarCloth"
-      height="16"
-      initial_value="true"
-      label="Avatar cloth"
-      layout="topleft"
-      left_delta="0"
-      name="AvatarCloth"
-      top_pad="1"
-      width="256" />
-        <text
-        type="string"
-        length="1"
-        follows="left|top"
-        height="12"
-        layout="topleft"
-        left="358"
-        left_pad="-30"
-        name="TerrainDetailText"
-        top="226"
-        width="155">
-           Terrain detail:
-        </text>
-        <radio_group
-        control_name="RenderTerrainDetail"
-        draw_border="false"
-        height="38"
-        layout="topleft"
-        left_delta="0"
-        name="TerrainDetailRadio"
-        top_pad="5"
-        width="70">
-           <radio_item
-            height="16"
-            label="Low"
-            layout="topleft"
-            name="0"
-            top="3"
-            width="50" />
-           <radio_item
-            height="16"
-            label="High"
-            layout="topleft"
-            name="2"
-            top_delta="16"
-            width="50" />
-        </radio_group> -->
+       control_name="RenderAvatarCloth"
+       height="16"
+       initial_value="true"
+       label="Avatar cloth"
+       layout="topleft"
+       left_delta="0"
+       name="AvatarCloth"
+       top_pad="1"
+       width="256" />
+      <text
+       type="string"
+       length="1"
+       follows="left|top"
+       height="12"
+       layout="topleft"
+       left="358"
+       left_pad="-30"
+       name="TerrainDetailText"
+       top="226"
+       width="155">
+          Terrain detail:
+      </text>
+      <radio_group
+       control_name="RenderTerrainDetail"
+       draw_border="false"
+       height="38"
+       layout="topleft"
+       left_delta="0"
+       name="TerrainDetailRadio"
+       top_pad="5"
+       width="70">
+          <radio_item
+           height="16"
+           label="Low"
+           layout="topleft"
+           name="0"
+           top="3"
+           width="50" />
+          <radio_item
+           height="16"
+           label="High"
+           layout="topleft"
+           name="2"
+           top_delta="16"
+           width="50" />
+      </radio_group> -->
 	</panel>
 	
-        <button
+    <button
      follows="left|bottom"
      height="23"
      label="Apply"
@@ -701,8 +701,7 @@
      left="10"
      name="Apply"
      top="383"
-     width="115"
-      >
+     width="115">
         <button.commit_callback
          function="Pref.Apply" />
     </button>
-- 
cgit v1.2.3


From 14c9db3a52cbafa0d057e84657f9df11d7695638 Mon Sep 17 00:00:00 2001
From: Seth ProductEngine <slitovchuk@productengine.com>
Date: Thu, 4 Nov 2010 22:55:05 +0200
Subject: STORM-284 FIXED Disabled "+" sign when user tries to drop a landmark
 to Favorites bar from any location besides My Inventory or Library.

---
 indra/newview/llfavoritesbar.cpp | 3 +++
 1 file changed, 3 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp
index 3981b887ad..a1ba370c26 100644
--- a/indra/newview/llfavoritesbar.cpp
+++ b/indra/newview/llfavoritesbar.cpp
@@ -414,6 +414,9 @@ BOOL LLFavoritesBarCtrl::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
 {
 	*accept = ACCEPT_NO;
 
+	LLToolDragAndDrop::ESource source = LLToolDragAndDrop::getInstance()->getSource();
+	if (LLToolDragAndDrop::SOURCE_AGENT != source && LLToolDragAndDrop::SOURCE_LIBRARY != source) return FALSE;
+
 	switch (cargo_type)
 	{
 
-- 
cgit v1.2.3


From dfeb7abe5f690bbd3a908c84c53bbea20a5adb7c Mon Sep 17 00:00:00 2001
From: "Andrew A. de Laix" <alain@lindenlab.com>
Date: Thu, 4 Nov 2010 14:08:14 -0700
Subject: checker working with v1.0 update protocol.

---
 indra/newview/app_settings/settings.xml | 24 +++++++++++++++++++++++-
 indra/newview/llappviewer.cpp           |  4 +++-
 2 files changed, 26 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 8f5cb7c709..cc0e0a78db 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -11022,7 +11022,29 @@
       <key>Type</key>
       <string>String</string>
       <key>Value</key>
-      <string>http://localhost/agni</string>
+      <string>http://update.secondlife.com</string>
+    </map>
+    <key>UpdaterServicePath</key>
+    <map>
+      <key>Comment</key>
+      <string>Path on the update server host.</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>update</string>
+    </map>
+    <key>UpdaterServiceProtocolVersion</key>
+    <map>
+      <key>Comment</key>
+      <string>The update protocol version to use.</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>v1.0</string>
     </map>
     <key>UploadBakedTexOld</key>
     <map>
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 3a48bc25f1..6bb25969a6 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -2337,9 +2337,11 @@ void LLAppViewer::initUpdater()
 	std::string url = gSavedSettings.getString("UpdaterServiceURL");
 	std::string channel = LLVersionInfo::getChannel();
 	std::string version = LLVersionInfo::getVersion();
+	std::string protocol_version = gSavedSettings.getString("UpdaterServiceProtocolVersion");
+	std::string service_path = gSavedSettings.getString("UpdaterServicePath");
 	U32 check_period = gSavedSettings.getU32("UpdaterServiceCheckPeriod");
 
-	mUpdater->setParams(url, channel, version);
+	mUpdater->setParams(protocol_version, url, service_path, channel, version);
 	mUpdater->setCheckPeriod(check_period);
 	if(gSavedSettings.getBOOL("UpdaterServiceActive"))
 	{
-- 
cgit v1.2.3


From 1d7ef9cda5113af14076bf67417aa657ddb034bf Mon Sep 17 00:00:00 2001
From: Eli Linden <eli@lindenlab.com>
Date: Thu, 4 Nov 2010 15:47:24 -0700
Subject: INTL-6 WIP missing translations ES and PT

---
 indra/newview/skins/default/xui/es/floater_about_land.xml | 13 +++++++++++++
 indra/newview/skins/default/xui/pt/floater_about_land.xml | 13 +++++++++++++
 2 files changed, 26 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/es/floater_about_land.xml b/indra/newview/skins/default/xui/es/floater_about_land.xml
index 06b9ae0c30..be5b5d011c 100644
--- a/indra/newview/skins/default/xui/es/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/es/floater_about_land.xml
@@ -470,7 +470,20 @@ los media:
 			<spinner label="Precio en L$:" name="PriceSpin"/>
 			<spinner label="Horas de acceso:" name="HoursSpin"/>
 			<panel name="Allowed_layout_panel">
+				<text label="Always Allow" name="AllowedText">
+					Residentes autorizados
+				</text>
 				<name_list name="AccessList" tool_tip="([LISTED] listados de un máx. de [MAX])"/>
+				<button label="Añadir" name="add_allowed"/>
+				<button label="Quitar" label_selected="Quitar" name="remove_allowed"/>
+			</panel>
+			<panel name="Banned_layout_panel">
+				<text label="Ban" name="BanCheck">
+					Residentes con el acceso prohibido
+				</text>
+				<name_list name="BannedList" tool_tip="([LISTED] listados de un máx. de [MAX])"/>
+				<button label="Añadir" name="add_banned"/>
+				<button label="Quitar" label_selected="Quitar" name="remove_banned"/>
 			</panel>
 		</panel>
 	</tab_container>
diff --git a/indra/newview/skins/default/xui/pt/floater_about_land.xml b/indra/newview/skins/default/xui/pt/floater_about_land.xml
index a6b255d432..3fb4bc272e 100644
--- a/indra/newview/skins/default/xui/pt/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/pt/floater_about_land.xml
@@ -470,7 +470,20 @@ Mídia:
 			<spinner label="Preço em L$:" name="PriceSpin"/>
 			<spinner label="Horas de acesso:" name="HoursSpin"/>
 			<panel name="Allowed_layout_panel">
+				<text label="Always Allow" name="AllowedText">
+					Residentes permitidos
+				</text>
 				<name_list name="AccessList" tool_tip="(Total [LISTED], máx de [MAX])"/>
+				<button label="Adicionar" name="add_allowed"/>
+				<button label="Tirar" label_selected="Tirar" name="remove_allowed"/>
+			</panel>
+			<panel name="Banned_layout_panel">
+				<text label="Ban" name="BanCheck">
+					Residentes banidos
+				</text>
+				<name_list name="BannedList" tool_tip="(Total [LISTED], máx de [MAX])"/>
+				<button label="Adicionar" name="add_banned"/>
+				<button label="Tirar" label_selected="Tirar" name="remove_banned"/>
 			</panel>
 		</panel>
 	</tab_container>
-- 
cgit v1.2.3


From 3ac4742a22cfd7e34137783ea7abb4170da789a3 Mon Sep 17 00:00:00 2001
From: Eli Linden <eli@lindenlab.com>
Date: Thu, 4 Nov 2010 16:29:23 -0700
Subject: CT-633 WIP FR linguistic

---
 indra/newview/skins/default/xui/fr/panel_edit_profile.xml   | 2 +-
 indra/newview/skins/default/xui/fr/panel_main_inventory.xml | 6 +++---
 indra/newview/skins/default/xui/fr/strings.xml              | 4 ++--
 3 files changed, 6 insertions(+), 6 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/fr/panel_edit_profile.xml b/indra/newview/skins/default/xui/fr/panel_edit_profile.xml
index 9a6401536f..7b15f3187b 100644
--- a/indra/newview/skins/default/xui/fr/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/fr/panel_edit_profile.xml
@@ -55,7 +55,7 @@
 	<panel name="profile_me_buttons_panel">
 		<layout_stack name="bottom_panel_ls">
 			<layout_panel name="save_changes_btn_lp">
-				<button label="Enregistrer les changements" name="save_btn"/>
+				<button label="Enregistrer" name="save_btn"/>
 			</layout_panel>
 			<layout_panel name="show_on_map_btn_lp">
 				<button label="Annuler" name="cancel_btn"/>
diff --git a/indra/newview/skins/default/xui/fr/panel_main_inventory.xml b/indra/newview/skins/default/xui/fr/panel_main_inventory.xml
index f631cf8b85..e4c35d60fe 100644
--- a/indra/newview/skins/default/xui/fr/panel_main_inventory.xml
+++ b/indra/newview/skins/default/xui/fr/panel_main_inventory.xml
@@ -1,13 +1,13 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="Choses" name="main inventory panel">
 	<panel.string name="ItemcountFetching">
-		Récupération de [ITEM_COUNT] objets... [FILTER]
+		Récupération de [ITEM_COUNT] articles... [FILTER]
 	</panel.string>
 	<panel.string name="ItemcountCompleted">
-		[ITEM_COUNT] objets [FILTER]
+		[ITEM_COUNT] articles [FILTER]
 	</panel.string>
 	<text name="ItemcountText">
-		Objets :
+		Articles :
 	</text>
 	<filter_editor label="Filtrer l&apos;inventaire" name="inventory search editor"/>
 	<tab_container name="inventory filter tabs">
diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml
index a7a766f6a6..f607e11997 100644
--- a/indra/newview/skins/default/xui/fr/strings.xml
+++ b/indra/newview/skins/default/xui/fr/strings.xml
@@ -1388,7 +1388,7 @@
 		Personne dont l&apos;âge n&apos;a pas été vérifié
 	</string>
 	<string name="Center 2">
-		Centrer 2
+		Centre 2
 	</string>
 	<string name="Top Right">
 		En haut à droite
@@ -1400,7 +1400,7 @@
 		En haut à gauche
 	</string>
 	<string name="Center">
-		Centrer
+		Centre
 	</string>
 	<string name="Bottom Left">
 		En bas à gauche
-- 
cgit v1.2.3


From 3745f1beb2f55cd4a182a177efbb8e5f1f009cca Mon Sep 17 00:00:00 2001
From: Eli Linden <eli@lindenlab.com>
Date: Thu, 4 Nov 2010 16:39:51 -0700
Subject: c

---
 .../skins/default/xui/fr/floater_avatar_picker.xml |   9 +-
 .../newview/skins/default/xui/fr/floater_bumps.xml |  10 +-
 .../skins/default/xui/fr/floater_buy_object.xml    |  37 +++---
 .../newview/skins/default/xui/fr/floater_event.xml |  45 ++-----
 .../skins/default/xui/fr/floater_incoming_call.xml |   2 +-
 indra/newview/skins/default/xui/fr/floater_pay.xml |   2 +-
 .../skins/default/xui/fr/floater_pay_object.xml    |   2 +-
 .../newview/skins/default/xui/fr/floater_tools.xml |   4 +-
 .../default/xui/fr/floater_voice_controls.xml      |   2 +-
 .../skins/default/xui/fr/inspect_avatar.xml        |   4 +-
 indra/newview/skins/default/xui/fr/menu_viewer.xml |   6 +-
 .../newview/skins/default/xui/fr/notifications.xml | 143 +++++++++++++++------
 .../skins/default/xui/fr/panel_edit_profile.xml    |  10 +-
 .../default/xui/fr/panel_group_land_money.xml      |   1 +
 indra/newview/skins/default/xui/fr/panel_login.xml |   4 +-
 .../skins/default/xui/fr/panel_place_profile.xml   |   3 +-
 .../default/xui/fr/panel_preferences_general.xml   |   8 +-
 .../default/xui/fr/panel_preferences_setup.xml     |   2 +-
 .../skins/default/xui/fr/panel_profile_view.xml    |   8 +-
 .../newview/skins/default/xui/fr/role_actions.xml  |  11 +-
 indra/newview/skins/default/xui/fr/strings.xml     |  22 +++-
 21 files changed, 210 insertions(+), 125 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/fr/floater_avatar_picker.xml b/indra/newview/skins/default/xui/fr/floater_avatar_picker.xml
index 65bb683e4c..74de4ddb1c 100644
--- a/indra/newview/skins/default/xui/fr/floater_avatar_picker.xml
+++ b/indra/newview/skins/default/xui/fr/floater_avatar_picker.xml
@@ -24,6 +24,10 @@
 				Saisissez une partie du nom du résident :
 			</text>
 			<button label="OK" label_selected="OK" name="Find"/>
+			<scroll_list name="SearchResults">
+				<columns label="Nom" name="name"/>
+				<columns label="Nom d&apos;utilisateur" name="username"/>
+			</scroll_list>
 		</panel>
 		<panel label="Amis" name="FriendsPanel">
 			<text name="InstructSelectFriend">
@@ -39,7 +43,10 @@
 				mètres
 			</text>
 			<button font="SansSerifSmall" label="Rafraîchir la liste" label_selected="Rafraîchir la liste" left_delta="10" name="Refresh" width="105"/>
-			<scroll_list bottom_delta="-169" height="159" name="NearMe"/>
+			<scroll_list bottom_delta="-169" height="159" name="NearMe">
+				<columns label="Nom" name="name"/>
+				<columns label="Nom d&apos;utilisateur" name="username"/>
+			</scroll_list>
 		</panel>
 	</tab_container>
 	<button label="OK" label_selected="OK" name="ok_btn"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_bumps.xml b/indra/newview/skins/default/xui/fr/floater_bumps.xml
index 34b33bbd6b..32714ea09c 100644
--- a/indra/newview/skins/default/xui/fr/floater_bumps.xml
+++ b/indra/newview/skins/default/xui/fr/floater_bumps.xml
@@ -4,19 +4,19 @@
 		Aucun détecté
 	</floater.string>
 	<floater.string name="bump">
-		[TIME]  [FIRST] [LAST] est entré en collision avec vous
+		[TIME]  [NAME] est entré en collision avec vous.
 	</floater.string>
 	<floater.string name="llpushobject">
-		[TIME]  [FIRST] [LAST] vous a bousculé avec un script
+		[TIME]  [NAME] vous a bousculé avec un script.
 	</floater.string>
 	<floater.string name="selected_object_collide">
-		[TIME]  [FIRST] [LAST] vous a donné un coup avec un objet
+		[TIME]  [NAME] vous a donné un coup avec un objet.
 	</floater.string>
 	<floater.string name="scripted_object_collide">
-		[TIME]  [FIRST] [LAST] vous a donné un coup avec un objet scripté
+		[TIME]  [NAME] vous a donné un coup avec un objet scripté.
 	</floater.string>
 	<floater.string name="physical_object_collide">
-		[TIME]  [FIRST] [LAST] vous a donné un coup avec un objet physique
+		[TIME]  [NAME] vous a donné un coup avec un objet physique.
 	</floater.string>
 	<floater.string name="timeStr">
 		[[hour,datetime,slt]:[min,datetime,slt]]
diff --git a/indra/newview/skins/default/xui/fr/floater_buy_object.xml b/indra/newview/skins/default/xui/fr/floater_buy_object.xml
index bd29f27cbc..519e741a25 100644
--- a/indra/newview/skins/default/xui/fr/floater_buy_object.xml
+++ b/indra/newview/skins/default/xui/fr/floater_buy_object.xml
@@ -1,26 +1,29 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater name="contents" title="ACHETER UNE COPIE DE L&apos;OBJET">
+	<floater.string name="title_buy_text">
+		Acheter
+	</floater.string>
+	<floater.string name="title_buy_copy_text">
+		Acheter une copie
+	</floater.string>
+	<floater.string name="no_copy_text">
+		(pas de copie)
+	</floater.string>
+	<floater.string name="no_modify_text">
+		(pas de modification)
+	</floater.string>
+	<floater.string name="no_transfer_text">
+		(pas de transfert)
+	</floater.string>
 	<text name="contents_text">
 		Contient :
 	</text>
 	<text name="buy_text">
-		Acheter pour [AMOUNT] L$ à [NAME] ?
+		Acheter pour [AMOUNT] L$ à :
+	</text>
+	<text name="buy_name_text">
+		[NAME] ?
 	</text>
-	<button label="Annuler" label_selected="Annuler" name="cancel_btn"/>
 	<button label="Acheter" label_selected="Acheter" name="buy_btn"/>
-	<string name="title_buy_text">
-		Acheter
-	</string>
-	<string name="title_buy_copy_text">
-		Acheter une copie
-	</string>
-	<string name="no_copy_text">
-		(pas de copie)
-	</string>
-	<string name="no_modify_text">
-		(pas de modification)
-	</string>
-	<string name="no_transfer_text">
-		(pas de transfert)
-	</string>
+	<button label="Annuler" label_selected="Annuler" name="cancel_btn"/>
 </floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_event.xml b/indra/newview/skins/default/xui/fr/floater_event.xml
index 3527d89973..67d70ac003 100644
--- a/indra/newview/skins/default/xui/fr/floater_event.xml
+++ b/indra/newview/skins/default/xui/fr/floater_event.xml
@@ -1,40 +1,11 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater
- follows="all"
- height="400"
- can_resize="true"
- help_topic="event_details"
- label="Event"
- layout="topleft"
- name="Event"
- save_rect="true"
- save_visibility="false"
- title="EVENT DETAILS" 
- width="600">
-	<floater.string
-		name="loading_text">
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater can_resize="true" follows="all" height="400" help_topic="event_details" label="Event" layout="topleft" name="Event" save_rect="true" save_visibility="false" title="EVENT DETAILS" width="600">
+	<floater.string name="loading_text">
 		Chargement...
 	</floater.string>
-    <floater.string
-     name="done_text">
-        Done
-    </floater.string>
-  <web_browser
-     trusted_content="true" 
-     follows="left|right|top|bottom"
-     layout="topleft"
-     left="10"
-     name="browser"
-     height="365"
-     width="580"
-     top="0"/>
-	<text
-	 follows="bottom|left"
-	 height="16"
-	 layout="topleft"
-	 left_delta="0"
-	 name="status_text"
-	 top_pad="10"
-	 width="150" />	 
+	<floater.string name="done_text">
+		Terminé
+	</floater.string>
+	<web_browser follows="left|right|top|bottom" height="365" layout="topleft" left="10" name="browser" top="0" trusted_content="true" width="580"/>
+	<text follows="bottom|left" height="16" layout="topleft" left_delta="0" name="status_text" top_pad="10" width="150"/>
 </floater>
-
diff --git a/indra/newview/skins/default/xui/fr/floater_incoming_call.xml b/indra/newview/skins/default/xui/fr/floater_incoming_call.xml
index 43a7424851..7594eec5f2 100644
--- a/indra/newview/skins/default/xui/fr/floater_incoming_call.xml
+++ b/indra/newview/skins/default/xui/fr/floater_incoming_call.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="incoming call" title="APPEL D&apos;UN(E)INCONNU(E)">
+<floater name="incoming call" title="Appel entrant">
 	<floater.string name="lifetime">
 		5
 	</floater.string>
diff --git a/indra/newview/skins/default/xui/fr/floater_pay.xml b/indra/newview/skins/default/xui/fr/floater_pay.xml
index 06cc7df522..397436876d 100644
--- a/indra/newview/skins/default/xui/fr/floater_pay.xml
+++ b/indra/newview/skins/default/xui/fr/floater_pay.xml
@@ -11,7 +11,7 @@
 	</text>
 	<icon name="icon_person" tool_tip="Résident"/>
 	<text name="payee_name">
-		[FIRST] [LAST]
+		Test Name That Is Extremely Long To Check Clipping
 	</text>
 	<button label="1 L$" label_selected="1 L$" name="fastpay 1"/>
 	<button label="5 L$" label_selected="5 L$" name="fastpay 5"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_pay_object.xml b/indra/newview/skins/default/xui/fr/floater_pay_object.xml
index bb8dee241f..966fa3b8a6 100644
--- a/indra/newview/skins/default/xui/fr/floater_pay_object.xml
+++ b/indra/newview/skins/default/xui/fr/floater_pay_object.xml
@@ -8,7 +8,7 @@
 	</string>
 	<icon name="icon_person" tool_tip="Résident"/>
 	<text left="105" name="payee_name">
-		[FIRST] [LAST]
+		Ericacita Moostopolison
 	</text>
 	<text left="25" name="object_name_label">
 		Via un objet :
diff --git a/indra/newview/skins/default/xui/fr/floater_tools.xml b/indra/newview/skins/default/xui/fr/floater_tools.xml
index 666aaa8147..eeb7b8ffaa 100644
--- a/indra/newview/skins/default/xui/fr/floater_tools.xml
+++ b/indra/newview/skins/default/xui/fr/floater_tools.xml
@@ -171,13 +171,13 @@
 				Créateur :
 			</text>
 			<text name="Creator Name">
-				Esbee Linden
+				Mrs. Esbee Linden (esbee.linden)
 			</text>
 			<text name="Owner:">
 				Propriétaire :
 			</text>
 			<text name="Owner Name">
-				Erica Linden
+				Mrs. Erica &quot;Moose&quot; Linden (erica.linden)
 			</text>
 			<text name="Group:">
 				Groupe :
diff --git a/indra/newview/skins/default/xui/fr/floater_voice_controls.xml b/indra/newview/skins/default/xui/fr/floater_voice_controls.xml
index 8397dc4263..d4f07a0a25 100644
--- a/indra/newview/skins/default/xui/fr/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/fr/floater_voice_controls.xml
@@ -19,7 +19,7 @@
 		<layout_panel name="my_panel">
 			<text name="user_text" value="Mon avatar :"/>
 		</layout_panel>
-        <layout_panel name="leave_call_panel">
+		<layout_panel name="leave_call_panel">
 			<layout_stack name="voice_effect_and_leave_call_stack">
 				<layout_panel name="leave_call_btn_panel">
 					<button label="Quitter l&apos;appel" name="leave_call_btn"/>
diff --git a/indra/newview/skins/default/xui/fr/inspect_avatar.xml b/indra/newview/skins/default/xui/fr/inspect_avatar.xml
index 381a52ed43..f34ca1f8dd 100644
--- a/indra/newview/skins/default/xui/fr/inspect_avatar.xml
+++ b/indra/newview/skins/default/xui/fr/inspect_avatar.xml
@@ -10,10 +10,12 @@
 	<string name="Details">
 		[SL_PROFILE]
 	</string>
+	<text name="user_name_small" value="Grumpity ProductEngine with a long name"/>
 	<text name="user_name" value="Grumpity ProductEngine"/>
+	<text name="user_slid" value="james.linden"/>
 	<text name="user_subtitle" value="11 mois, 3 jours"/>
 	<text name="user_details">
-		C&apos;est ma description second life et je la trouve vraiment géniale.
+		This is my second life description and I really think it is great. But for some reason my description is super extra long because I like to talk a whole lot
 	</text>
 	<slider name="volume_slider" tool_tip="Volume de la voix" value="0.5"/>
 	<button label="Devenir amis" name="add_friend_btn"/>
diff --git a/indra/newview/skins/default/xui/fr/menu_viewer.xml b/indra/newview/skins/default/xui/fr/menu_viewer.xml
index 5f51c61655..4e09a9bec3 100644
--- a/indra/newview/skins/default/xui/fr/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/fr/menu_viewer.xml
@@ -85,6 +85,7 @@
 			<menu_item_call label="Prendre une copie" name="Take Copy"/>
 			<menu_item_call label="Enregistrer dans mon inventaire" name="Save Object Back to My Inventory"/>
 			<menu_item_call label="Enregistrer dans le contenu des objets" name="Save Object Back to Object Contents"/>
+			<menu_item_call label="Renvoi de l&apos;objet" name="Return Object back to Owner"/>
 		</menu>
 		<menu label="Scripts" name="Scripts">
 			<menu_item_call label="Recompiler les scripts (Mono)" name="Mono"/>
@@ -98,6 +99,7 @@
 			<menu_item_check label="Sélectionner mes objets uniquement" name="Select Only My Objects"/>
 			<menu_item_check label="Sélectionner les objets déplaçables uniquement" name="Select Only Movable Objects"/>
 			<menu_item_check label="Sélectionner en entourant" name="Select By Surrounding"/>
+			<menu_item_check label="Afficher les contours de la sélection" name="Show Selection Outlines"/>
 			<menu_item_check label="Afficher la sélection masquée" name="Show Hidden Selection"/>
 			<menu_item_check label="Afficher le rayon lumineux pour la sélection" name="Show Light Radius for Selection"/>
 			<menu_item_check label="Afficher le faisceau de sélection lumineux" name="Show Selection Beam"/>
@@ -118,6 +120,7 @@
 		<menu_item_call label="Signaler une infraction" name="Report Abuse"/>
 		<menu_item_call label="Signaler un bug" name="Report Bug"/>
 		<menu_item_call label="À propos de [APP_NAME]" name="About Second Life"/>
+		<menu_item_check label="Activer les astuces" name="Enable Hints"/>
 	</menu>
 	<menu label="Avancé" name="Advanced">
 		<menu_item_call label="Arrêter mon animation" name="Stop Animating My Avatar"/>
@@ -308,7 +311,7 @@
 			<menu_item_call label="Imprimer les infos sur l&apos;objet sélectionné" name="Print Selected Object Info"/>
 			<menu_item_call label="Imprimer les infos sur l&apos;avatar" name="Print Agent Info"/>
 			<menu_item_call label="Statistiques de mémoire" name="Memory Stats"/>
-			<menu_item_check label="Pilote auto par double-click" name="Double-Click Auto-Pilot"/>
+			<menu_item_check label="Pilotage auto par double-clic" name="Double-ClickAuto-Pilot"/>
 			<menu_item_check label="Téléportation par double-clic" name="DoubleClick Teleport"/>
 			<menu_item_check label="Débogage SelectMgr" name="Debug SelectMgr"/>
 			<menu_item_check label="Débogage clics" name="Debug Clicks"/>
@@ -325,6 +328,7 @@
 			<menu_item_call label="Enregistrer en XML" name="Save to XML"/>
 			<menu_item_check label="Afficher les noms XUI" name="Show XUI Names"/>
 			<menu_item_call label="Envoyer des IM tests" name="Send Test IMs"/>
+			<menu_item_call label="Vider les caches de noms" name="Flush Names Caches"/>
 		</menu>
 		<menu label="Avatar" name="Character">
 			<menu label="Récupérer la texture fixée" name="Grab Baked Texture">
diff --git a/indra/newview/skins/default/xui/fr/notifications.xml b/indra/newview/skins/default/xui/fr/notifications.xml
index 243bad8f8a..89fd9c6fdc 100644
--- a/indra/newview/skins/default/xui/fr/notifications.xml
+++ b/indra/newview/skins/default/xui/fr/notifications.xml
@@ -110,8 +110,8 @@ Veuillez ne sélectionner qu&apos;un seul objet.
 		<usetemplate name="okbutton" yestext="OK"/>
 	</notification>
 	<notification name="GrantModifyRights">
-		Lorsque vous accordez des droits d&apos;édition à un autre résident, vous lui permettez de changer, supprimer ou prendre n&apos;importe lequel de vos objets dans le Monde. Réfléchissez bien avant d&apos;accorder ces droits.
-Souhaitez-vous accorder des droits d&apos;édition à [FIRST_NAME] [LAST_NAME] ?
+		Lorsque vous accordez des droits de modification à un autre résident, vous lui permettez de changer, supprimer ou prendre n&apos;importe lequel de vos objets dans Second Life. Réfléchissez bien avant d&apos;accorder ces droits.
+Voulez-vous vraiment accorder des droits de modification à [NAME] ?
 		<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
 	</notification>
 	<notification name="GrantModifyRightsMultiple">
@@ -120,7 +120,7 @@ Souhaitez-vous accorder des droits d&apos;édition aux résidents sélectionnés
 		<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
 	</notification>
 	<notification name="RevokeModifyRights">
-		Souhaitez-vous retirer les droits d&apos;édition à [FIRST_NAME] [LAST_NAME] ?
+		Voulez-vous retirer les droits de modification à [NAME] ?
 		<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
 	</notification>
 	<notification name="RevokeModifyRightsMultiple">
@@ -316,17 +316,17 @@ La limite de [MAX_ATTACHMENTS] objets joints a été dépassée. Veuillez commen
 		Vous ne pouvez pas porter cet article car il n&apos;a pas encore été chargé. Veuillez réessayer dans une minute.
 	</notification>
 	<notification name="MustHaveAccountToLogIn">
-		Zut ! Vous avez oublié de fournir certaines informations.
-Vous devez saisir le nom et le prénom de votre avatar.
+		Zut ! Vous avez oublié de fournir certaines informations.
+Vous devez saisir le nom d&apos;utilisateur de votre avatar.
 
-Pour entrer dans [SECOND_LIFE], vous devez avoir un compte. Voulez-vous en créer un maintenant ?
+Pour entrer dans [SECOND_LIFE], vous devez disposer d&apos;un compte. Voulez-vous en créer un maintenant ?
 		<url name="url">
 			https://join.secondlife.com/index.php?lang=fr-FR
 		</url>
 		<usetemplate name="okcancelbuttons" notext="Réessayer" yestext="Créer un compte"/>
 	</notification>
 	<notification name="InvalidCredentialFormat">
-		Saisissez à la fois le prénom et le nom de votre avatar dans le champ Nom d&apos;utilisateur, puis connectez-vous.
+		Saisissez soit le nom d&apos;utilisateur soit à la fois le prénom et le nom de votre avatar dans le champ Nom d&apos;utilisateur, puis connectez-vous.
 	</notification>
 	<notification name="AddClassified">
 		Les petites annonces sont publiées à l&apos;onglet Petites annonces de la section Recherche et sur [http://secondlife.com/community/classifieds secondlife.com] pendant une semaine.
@@ -920,12 +920,6 @@ Cette erreur est généralement temporaire. Veuillez modifier et sauvegarder l&a
 		Impossible d&apos;acheter du terrain pour le groupe :
 Vous n&apos;avez pas le droit d&apos;acheter de terrain pour votre groupe.
 	</notification>
-	<notification label="Devenir amis" name="AddFriend">
-		Vous pouvez suivre les déplacements de vos amis sur la carte et voir lorsqu&apos;ils se connectent.
-
-Proposer à [NAME] de devenir votre ami(e) ?
-		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
-	</notification>
 	<notification label="Devenir amis" name="AddFriendWithMessage">
 		Vous pouvez suivre les déplacements de vos amis sur la carte et voir lorsqu&apos;ils se connectent.
 
@@ -969,7 +963,7 @@ Proposer à [NAME] de devenir votre ami(e) ?
 		</form>
 	</notification>
 	<notification name="RemoveFromFriends">
-		Voulez-vous supprimer [FIRST_NAME] [LAST_NAME] de votre liste d&apos;amis ?
+		Voulez-vous supprimer [NAME] de votre liste d&apos;amis ?
 		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
 	</notification>
 	<notification name="RemoveMultipleFromFriends">
@@ -1084,9 +1078,9 @@ Céder ces [AREA] m² de terrain au groupe [GROUP_NAME] ?
 		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
 	</notification>
 	<notification name="DeedLandToGroupWithContribution">
-		Si vous cédez ce terrain, le groupe devra avoir les moyens de le prendre en charge.
-La cession incluera une contribution de terrain simultanée au groupe de [FIRST_NAME] [LAST_NAME].
-Le prix de la vente du terrain n&apos;est pas remboursé par le propriétaire. Si la parcelle que vous cédez se vend, le prix de la vente sera divisé en parts égales parmi les membres du groupe.
+		La cession de cette parcelle requiert que le groupe dispose en permanence d&apos;un crédit suffisant pour payer les frais d&apos;occupation de terrain.
+Elle inclura une contribution simultanée au groupe de la part de [NAME].
+Le prix d&apos;achat du terrain n&apos;est pas remboursé au propriétaire. Si une parcelle cédée est vendue, son prix de vente est redistribué à part égale entre les membres du groupe.
 
 Céder ces [AREA] m² de terrain au groupe [GROUP_NAME] ?
 		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
@@ -1460,6 +1454,46 @@ Les chats et les messages instantanés ne s&apos;afficheront pas. Les messages i
 			<button name="Cancel" text="Annuler"/>
 		</form>
 	</notification>
+	<notification name="SetDisplayNameSuccess">
+		Bonjour [DISPLAY_NAME],
+
+Comme dans la vie réelle, il faut quelque temps aux gens pour qu&apos;ils se familiarisent avec un nouveau nom. Veuillez compter quelques jours avant la [http://wiki.secondlife.com/wiki/Setting_your_display_name mise à jour de votre nom] au niveau des objets, scripts, recherches, etc.
+	</notification>
+	<notification name="SetDisplayNameBlocked">
+		Impossible de changer de nom d&apos;affichage. Si vous pensez qu&apos;il s&apos;agit d&apos;une erreur, contactez l&apos;Assistance.
+	</notification>
+	<notification name="SetDisplayNameFailedLength">
+		Le nom saisi est trop long. Le nombre de caractères maximum est de [LENGTH].
+
+Veuillez essayer avec un nom plus court.
+	</notification>
+	<notification name="SetDisplayNameFailedGeneric">
+		Impossible de définir votre nom d&apos;affichage. Veuillez réessayer ultérieurement.
+	</notification>
+	<notification name="SetDisplayNameMismatch">
+		Non-concordance des noms d&apos;affichage saisis. Effectuez une nouvelle saisie.
+	</notification>
+	<notification name="AgentDisplayNameUpdateThresholdExceeded">
+		Le délai au bout duquel vous pouvez changer de nom d&apos;affichage n&apos;est pas encore écoulé.
+
+Voir http://wiki.secondlife.com/wiki/Setting_your_display_name
+
+Veuillez réessayer ultérieurement.
+	</notification>
+	<notification name="AgentDisplayNameSetBlocked">
+		Impossible de définir le nom demandé car il contient un terme interdit.
+ 
+ Veuillez essayer avec un nom différent.
+	</notification>
+	<notification name="AgentDisplayNameSetInvalidUnicode">
+		Le nom d&apos;affichage que vous souhaitez définir contient des caractères non valides.
+	</notification>
+	<notification name="AgentDisplayNameSetOnlyPunctuation">
+		Votre nom d&apos;affichage doit contenir des lettres autres que des signes de ponctuation.
+	</notification>
+	<notification name="DisplayNameUpdate">
+		[OLD_NAME] ([SLID]) a désormais le nom [NEW_NAME].
+	</notification>
 	<notification name="OfferTeleport">
 		Proposez une téléportation avec le message suivant ?
 		<form name="form">
@@ -2028,10 +2062,10 @@ Liez-la à partir d&apos;une page web pour permettre aux autres résidents d&apo
 		Sujet : [SUBJECT], Message : [MESSAGE]
 	</notification>
 	<notification name="FriendOnline">
-		[FIRST] [LAST] est connecté(e)
+		[NAME] est en ligne
 	</notification>
 	<notification name="FriendOffline">
-		[FIRST] [LAST] est déconnecté(e)
+		[NAME] est hors ligne
 	</notification>
 	<notification name="AddSelfFriend">
 		Même si vous êtes extrêmement sympathique, vous ne pouvez pas devenir ami avec vous-même.
@@ -2099,9 +2133,6 @@ Merci d&apos;essayer à nouveau dans une minute.
 	<notification name="CannotRemoveProtectedCategories">
 		Vous ne pouvez pas supprimer de catégories protégées.
 	</notification>
-	<notification name="OfferedCard">
-		Vous avez offert votre carte de visite à [FIRST] [LAST]
-	</notification>
 	<notification name="UnableToBuyWhileDownloading">
 		Achat impossible durant le chargement de l&apos;objet.
 Merci de réessayer.
@@ -2172,7 +2203,10 @@ Veuillez sélectionner un terrain plus petit.
 	<notification name="SystemMessage">
 		[MESSAGE]
 	</notification>
-	<notification name="PaymentRecived">
+	<notification name="PaymentReceived">
+		[MESSAGE]
+	</notification>
+	<notification name="PaymentSent">
 		[MESSAGE]
 	</notification>
 	<notification name="EventNotification">
@@ -2181,7 +2215,7 @@ Veuillez sélectionner un terrain plus petit.
 [NAME]
 [DATE]
 		<form name="form">
-			<button name="Description" text="Détails"/>
+			<button name="Details" text="Détails"/>
 			<button name="Cancel" text="Annuler"/>
 		</form>
 	</notification>
@@ -2217,7 +2251,7 @@ Si le problème persiste, veuillez réinstaller le plugin ou contacter le vendeu
 		Les objets que vous possédez sur la parcelle de terrain sélectionnée ont été renvoyés dans votre inventaire.
 	</notification>
 	<notification name="OtherObjectsReturned">
-		Les objets que vous possédez sur la parcelle de terrain appartenant à [FIRST] [LAST] ont été renvoyés dans votre inventaire.
+		Les objets de la parcelle de terrain sélectionnée appartenant à [NAME] ont été renvoyés vers son inventaire.
 	</notification>
 	<notification name="OtherObjectsReturned2">
 		Les objets sur la parcelle de terrain sélectionnée appartenant au résident [NAME] ont été rendus à leur propriétaire.
@@ -2344,7 +2378,7 @@ Veuillez réessayer dans quelques minutes.
 		Aucune parcelle valide n&apos;a été trouvée.
 	</notification>
 	<notification name="ObjectGiveItem">
-		Un objet appelé [OBJECTFROMNAME] appartenant à [NAME_SLURL] vous a donné un [OBJECTTYPE] :
+		Un objet nommé &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt; appartenant à [NAME_SLURL] vous a donné un objet de type [OBJECTTYPE] :
 [ITEM_SLURL]
 		<form name="form">
 			<button name="Keep" text="Garder"/>
@@ -2409,9 +2443,9 @@ Veuillez réessayer dans quelques minutes.
 		Vous avez proposé à [TO_NAME] de devenir votre ami(e)
 	</notification>
 	<notification name="OfferFriendshipNoMessage">
-		[NAME] vous demande de devenir son ami.
+		[NAME_SLURL] vous demande de devenir son ami(e).
 
-(Par défaut, vous pourrez voir quand vous êtes tous deux connectés)
+(Par défaut, chacun pourra voir si l&apos;autre est connecté.)
 		<form name="form">
 			<button name="Accept" text="Accepter"/>
 			<button name="Decline" text="Refuser"/>
@@ -2446,11 +2480,11 @@ Si vous restez dans cette région, vous serez déconnecté(e).
 Si vous restez dans cette région, vous serez déconnecté(e).
 	</notification>
 	<notification name="LoadWebPage">
-		Charger cette page web [URL] ?
+		Charger la page Web [URL] ?
 
 [MESSAGE]
 
-Venant de l&apos;objet : [OBJECTNAME], appartenant à : [NAME]?
+Venant de l&apos;objet : &lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;, propriétaire : [NAME] ?
 		<form name="form">
 			<button name="Gotopage" text="Charger"/>
 			<button name="Cancel" text="Annuler"/>
@@ -2466,7 +2500,7 @@ Venant de l&apos;objet : [OBJECTNAME], appartenant à : [NAME]?
 		L&apos;objet que vous essayez de porter utilise une fonctionnalité que le client ne peut lire. Pour porter cet objet, veuillez télécharger une mise à jour de [APP_NAME].
 	</notification>
 	<notification name="ScriptQuestion">
-		&apos;[OBJECTNAME]&apos;, un objet appartenant à &apos;[NAME]&apos;, aimerait :
+		&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;, un objet appartenant à [NAME], aimerait :
 
 [QUESTIONS]
 Acceptez-vous ?
@@ -2477,12 +2511,12 @@ Acceptez-vous ?
 		</form>
 	</notification>
 	<notification name="ScriptQuestionCaution">
-		Un objet appelé [OBJECTNAME], appartenant à [NAME], aimerait :
+		Un objet nommé &lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;, appartenant à [NAME], aimerait :
 
 [QUESTIONS]
-Si vous n&apos;avez pas confiance en cet objet ni en son créateur, vous devriez refuser cette requête.
+Si vous n&apos;avez pas confiance en cet objet ni en son créateur, refusez cette requête.
 
-Accepter cette requête ?
+Accepter cette requête ?
 		<form name="form">
 			<button name="Grant" text="Accepter"/>
 			<button name="Deny" text="Refuser"/>
@@ -2490,14 +2524,14 @@ Accepter cette requête ?
 		</form>
 	</notification>
 	<notification name="ScriptDialog">
-		&apos;[TITLE]&apos; de [FIRST] [LAST]
+		&lt;nolink&gt;[TITLE]&lt;/nolink&gt; de [NAME]
 [MESSAGE]
 		<form name="form">
 			<button name="Ignore" text="Ignorer"/>
 		</form>
 	</notification>
 	<notification name="ScriptDialogGroup">
-		&apos;[TITLE]&apos; de [GROUPNAME]
+		&lt;nolink&gt;[TITLE]&lt;/nolink&gt; de [GROUPNAME]
 [MESSAGE]
 		<form name="form">
 			<button name="Ignore" text="Ignorer"/>
@@ -2534,13 +2568,13 @@ Pour y participer, cliquez sur Accepter. Sinon, cliquez sur Refuser. Pour ignore
 		</form>
 	</notification>
 	<notification name="AutoUnmuteByIM">
-		[FIRST] [LAST] a reçu un message instantané et n&apos;est donc plus ignoré.
+		[NAME] a reçu un message instantané et n&apos;est donc plus ignoré.
 	</notification>
 	<notification name="AutoUnmuteByMoney">
-		[FIRST] [LAST] a reçu de l&apos;argent et n&apos;est donc plus ignoré.
+		[NAME] a reçu de l&apos;argent et n&apos;est donc plus ignoré.
 	</notification>
 	<notification name="AutoUnmuteByInventory">
-		[FIRST] [LAST] a reçu un inventaire et n&apos;est donc plus ignoré.
+		[NAME] a reçu une offre d&apos;inventaire et n&apos;est donc plus ignoré.
 	</notification>
 	<notification name="VoiceInviteGroup">
 		[NAME] a rejoint un chat vocal avec le groupe [GROUP].
@@ -2767,6 +2801,37 @@ ignorés, même si vous quittez l&apos;appel.
 Ignorer les autres ?
 		<usetemplate ignoretext="Confirmer avant d&apos;ignorer les autres lors d&apos;un appel de groupe" name="okcancelignore" notext="Annuler" yestext="Ok"/>
 	</notification>
+	<notification label="Chat" name="HintChat">
+		Pour participer à la conversation, saisissez du texte dans le champ de chat situé en dessous.
+	</notification>
+	<notification label="Se lever" name="HintSit">
+		Pour passer d&apos;une position assise à une position debout, cliquez sur le bouton Me lever.
+	</notification>
+	<notification label="Explorer le monde" name="HintDestinationGuide">
+		Le Guide des destinations comprend des milliers d&apos;endroits nouveaux à découvrir. Sélectionnez-en un, puis cliquez sur Téléporter pour commencer à l&apos;explorer.
+	</notification>
+	<notification label="Panneau latéral" name="HintSidePanel">
+		Obtenir un accès rapide à votre inventaire, à vos habits, à vos profils et bien plus encore dans le panneau latéral.
+	</notification>
+	<notification label="Bouger" name="HintMove">
+		Pour marcher ou courir, cliquez sur le bouton Bouger, puis naviguez à l&apos;aide des flèches directionnelles. Vous pouvez également utiliser les touches fléchées de votre clavier.
+	</notification>
+	<notification label="Nom d&apos;affichage" name="HintDisplayName">
+		Définissez ici votre nom d&apos;affichage personnalisable. Cette fonctionnalité vous est fournie en plus de votre nom d&apos;utilisateur unique qui, lui, ne peut être changé. Vous pouvez modifier l&apos;apparence des noms des autres résidents dans vos préférences.
+	</notification>
+	<notification label="Inventaire" name="HintInventory">
+		Permet de rechercher des articles dans l&apos;inventaire. Pour accéder aux derniers articles ajoutés, cliquez sur l&apos;onglet Récent.
+	</notification>
+	<notification label="Vous possédez des Linden dollars !" name="HintLindenDollar">
+		Votre solde actuel en L$ est celui-ci. Pour y ajouter d&apos;autres Linden dollars, cliquez sur Acheter L$.
+	</notification>
+	<notification name="PopupAttempt">
+		Impossible d&apos;ouvrir une fenêtre popup.
+		<form name="form">
+			<ignore name="ignore" text="Activer toutes les fenêtres popup"/>
+			<button name="open" text="Ouvrir la fenêtre popup"/>
+		</form>
+	</notification>
 	<global name="UnsupportedCPU">
 		- Votre processeur ne remplit pas les conditions minimum requises.
 	</global>
diff --git a/indra/newview/skins/default/xui/fr/panel_edit_profile.xml b/indra/newview/skins/default/xui/fr/panel_edit_profile.xml
index 7b15f3187b..30799caf1f 100644
--- a/indra/newview/skins/default/xui/fr/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/fr/panel_edit_profile.xml
@@ -26,6 +26,14 @@
 	<scroll_container name="profile_scroll">
 		<panel name="scroll_content_panel">
 			<panel name="data_panel">
+				<text name="display_name_label" value="Nom d&apos;affichage :"/>
+				<text name="solo_username_label" value="Nom d&apos;utilisateur :"/>
+				<button name="set_name" tool_tip="Définir un nom d&apos;affichage"/>
+				<text name="solo_user_name" value="Hamilton Hitchings"/>
+				<text name="user_name" value="Hamilton Hitchings"/>
+				<text name="user_name_small" value="Hamilton Hitchings"/>
+				<text name="user_label" value="Nom d&apos;utilisateur :"/>
+				<text name="user_slid" value="hamilton.linden"/>
 				<panel name="lifes_images_panel">
 					<panel name="second_life_image_panel">
 						<text name="second_life_photo_title_text" value="[SECOND_LIFE]:"/>
@@ -46,7 +54,7 @@
 				<text name="my_account_link" value="[[URL] Accéder à ma Page d&apos;accueil]"/>
 				<text name="title_partner_text" value="Mon partenaire :"/>
 				<panel name="partner_data_panel">
-					<name_box initial_value="(récupération en cours)" name="partner_text" value="[FIRST] [LAST]"/>
+					<text initial_value="(récupération en cours)" name="partner_text" value="[FIRST] [LAST]"/>
 				</panel>
 				<text name="partner_edit_link" value="[[URL] Modifier]"/>
 			</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_group_land_money.xml b/indra/newview/skins/default/xui/fr/panel_group_land_money.xml
index dcc27a9be4..4011d1b8c7 100644
--- a/indra/newview/skins/default/xui/fr/panel_group_land_money.xml
+++ b/indra/newview/skins/default/xui/fr/panel_group_land_money.xml
@@ -24,6 +24,7 @@
 			<scroll_list.columns label="Région" name="location"/>
 			<scroll_list.columns label="Type" name="type"/>
 			<scroll_list.columns label="Surf." name="area"/>
+			<scroll_list.columns label="Masquage" name="hidden"/>
 		</scroll_list>
 		<text name="total_contributed_land_label">
 			Total des contributions :
diff --git a/indra/newview/skins/default/xui/fr/panel_login.xml b/indra/newview/skins/default/xui/fr/panel_login.xml
index b3ab2f4f90..b667780180 100644
--- a/indra/newview/skins/default/xui/fr/panel_login.xml
+++ b/indra/newview/skins/default/xui/fr/panel_login.xml
@@ -11,7 +11,7 @@
 			<text name="username_text">
 				Nom d&apos;utilisateur :
 			</text>
-			<line_editor label="Nom d&apos;utilisateur" name="username_edit" tool_tip="Nom d&apos;utilisateur [SECOND_LIFE]"/>
+			<line_editor label="bobsmith12 ou Steller Sunshine" name="username_edit" tool_tip="Nom d&apos;utilisateur que vous avez choisi lors de votre inscription (par exemple, bobsmith12 ou Steller Sunshine)."/>
 			<text name="password_text">
 				Mot de passe :
 			</text>
@@ -31,7 +31,7 @@
 				S&apos;inscrire
 			</text>
 			<text name="forgot_password_text">
-				Nom ou mot de passe oublié ?
+				Nom d&apos;utilisateur ou mot de passe oublié ?
 			</text>
 			<text name="login_help">
 				Besoin d&apos;aide ?
diff --git a/indra/newview/skins/default/xui/fr/panel_place_profile.xml b/indra/newview/skins/default/xui/fr/panel_place_profile.xml
index 731e045019..3c2c1b9d37 100644
--- a/indra/newview/skins/default/xui/fr/panel_place_profile.xml
+++ b/indra/newview/skins/default/xui/fr/panel_place_profile.xml
@@ -80,7 +80,7 @@
 						<text name="region_rating_label" value="Catégorie :"/>
 						<text name="region_rating" value="Adulte"/>
 						<text name="region_owner_label" value="Propriétaire :"/>
-						<text name="region_owner" value="orignal Van Orignal"/>
+						<text name="region_owner" value="moose Van Moose extra long name moose"/>
 						<text name="region_group_label" value="Groupe :"/>
 						<text name="region_group">
 							Le puissant orignal d’Orignalville
@@ -93,6 +93,7 @@
 						<text name="estate_name_label" value="Domaine :"/>
 						<text name="estate_rating_label" value="Catégorie :"/>
 						<text name="estate_owner_label" value="Propriétaire :"/>
+						<text name="estate_owner" value="Testing owner name length with long name"/>
 						<text name="covenant_label" value="Règlement :"/>
 					</panel>
 				</accordion_tab>
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_general.xml b/indra/newview/skins/default/xui/fr/panel_preferences_general.xml
index 20d5f754ce..30389a0ef9 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_general.xml
@@ -44,9 +44,10 @@
 		<radio_item label="Activé" name="radio2" value="1"/>
 		<radio_item label="Afficher brièvement" name="radio3" value="2"/>
 	</radio_group>
-	<check_box label="Montrer mon nom" name="show_my_name_checkbox1"/>
-	<check_box initial_value="true" label="Affichage en petit" name="small_avatar_names_checkbox"/>
-	<check_box label="Afficher les titres de groupe" name="show_all_title_checkbox1"/>
+	<check_box label="Mon nom" name="show_my_name_checkbox1"/>
+	<check_box label="Noms d&apos;utilisateur" name="show_slids" tool_tip="Afficher le nom d&apos;utilisateur, comme bobsmith123."/>
+	<check_box label="Titres de groupe" name="show_all_title_checkbox1" tool_tip="Afficher les titres de groupe, comme Officier ou Membre."/>
+	<check_box label="Mettre mes amis en surbrillance" name="show_friends" tool_tip="Mettre en surbrillance l&apos;affichage des noms de vos amis."/>
 	<text name="effects_color_textbox">
 		Mes effets :
 	</text>
@@ -61,6 +62,7 @@
 		<combo_box.item label="30 minutes" name="item3"/>
 		<combo_box.item label="Jamais" name="item4"/>
 	</combo_box>
+	<check_box label="Voir les noms d&apos;affichage" name="display_names_check" tool_tip="Cocher pour utiliser les noms d&apos;affichage dans les chats, les IM, l&apos;affichage des noms, etc."/>
 	<text name="text_box3">
 		Réponse si occupé(e) :
 	</text>
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml b/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml
index eae49e7810..c1cec7537e 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml
@@ -1,6 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="Configuration" name="Input panel">
-	<button label="Autres accessoires" name="joystick_setup_button" width="175"/>
 	<text name="Mouselook:">
 		Vue subjective :
 	</text>
@@ -40,6 +39,7 @@
 	<check_box initial_value="true" label="Activer les plugins" name="browser_plugins_enabled"/>
 	<check_box initial_value="true" label="Accepter les cookies" name="cookies_enabled"/>
 	<check_box initial_value="true" label="Activer Javascript" name="browser_javascript_enabled"/>
+	<check_box initial_value="false" label="Activer les fenêtres popup de navigateur de médias" name="media_popup_enabled"/>
 	<check_box initial_value="false" label="Activer le proxy Web" name="web_proxy_enabled"/>
 	<text name="Proxy location">
 		Emplacement du proxy :
diff --git a/indra/newview/skins/default/xui/fr/panel_profile_view.xml b/indra/newview/skins/default/xui/fr/panel_profile_view.xml
index 8f57dd89c7..0447618420 100644
--- a/indra/newview/skins/default/xui/fr/panel_profile_view.xml
+++ b/indra/newview/skins/default/xui/fr/panel_profile_view.xml
@@ -6,8 +6,14 @@
 	<string name="status_offline">
 		Hors ligne
 	</string>
-	<text_editor name="user_name" value="(en cours de chargement...)"/>
+	<text name="display_name_label" value="Nom d&apos;affichage :"/>
+	<text name="solo_username_label" value="Nom d&apos;utilisateur :"/>
 	<text name="status" value="En ligne"/>
+	<text name="user_name_small" value="Jack oh look at me this is a super duper long name"/>
+	<text name="user_name" value="Jack Linden"/>
+	<button name="copy_to_clipboard" tool_tip="Copier dans le presse-papiers"/>
+	<text name="user_label" value="Nom d&apos;utilisateur :"/>
+	<text name="user_slid" value="jack.linden"/>
 	<tab_container name="tabs">
 		<panel label="PROFIL" name="panel_profile"/>
 		<panel label="FAVORIS" name="panel_picks"/>
diff --git a/indra/newview/skins/default/xui/fr/role_actions.xml b/indra/newview/skins/default/xui/fr/role_actions.xml
index d731fa6896..7187de8760 100644
--- a/indra/newview/skins/default/xui/fr/role_actions.xml
+++ b/indra/newview/skins/default/xui/fr/role_actions.xml
@@ -39,6 +39,7 @@
 		<action description="Toujours autoriser à créer des objets" longdescription="Vous pouvez créer des objets sur une parcelle du groupe, même si l&apos;option est désactivée à partir du menu À propos du terrain &gt; Options." name="land allow create" value="25"/>
 		<action description="Toujours autoriser à créer des repères" longdescription="Vous pouvez créer un repère sur une parcelle du groupe, même si l&apos;option est désactivée à partir du menu À propos du terrain &gt; Options." name="land allow landmark" value="26"/>
 		<action description="Autoriser à définir un domicile sur le terrain du groupe" longdescription="Un membre dans un rôle avec ce pouvoir peut utiliser le menu Monde &gt; Repères &gt; Définir le domicile ici sur une parcelle cédée à ce groupe." name="land allow set home" value="28"/>
+		<action description="Autoriser la réception d&apos;événements sur les terrains du groupe" longdescription="Les membres dont le rôle possède ce pouvoir peuvent sélectionner les parcelles détenues par le groupe comme lieu de réception lors d&apos;un événement." name="land allow host event" value="41"/>
 	</action_set>
 	<action_set description="Ces pouvoirs permettent d&apos;autoriser ou d&apos;interdire l&apos;accès à des parcelles du groupe et de figer ou d&apos;expulser des résidents." name="Parcel Access">
 		<action description="Gérer la liste d&apos;accès à la parcelle" longdescription="Gérez la liste des résidents autorisés sur la parcelle à partir du menu À propos du terrain &gt; Accès." name="land manage allowed" value="29"/>
@@ -64,13 +65,9 @@
 		<action description="Envoyer des notices" longdescription="Les membres dans un rôle avec ce pouvoir peuvent envoyer des notices par le biais de la section Groupe &gt; Notices." name="notices send" value="42"/>
 		<action description="Recevoir et consulter les notices" longdescription="Les membres dans un rôle avec ce pouvoir peuvent recevoir des notices et consulter les anciennes notices par le biais de la section Groupe &gt; Notices." name="notices receive" value="43"/>
 	</action_set>
-	<action_set description="Ces pouvoirs permettent de créer de nouvelles propositions, de voter et de consulter l&apos;historique des votes." name="Proposals">
-		<action description="Créer des propositions" longdescription="Ces pouvoirs permettent de créer des propositions et de les soumettre au vote, à partir du menu Profil du groupe &gt; Propositions." name="proposal start" value="44"/>
-		<action description="Voter les propositions" longdescription="Votez les propositions à partir du menu Profil du groupe &gt; Propositions." name="proposal vote" value="45"/>
-	</action_set>
 	<action_set description="Ces pouvoirs vous permettent de gérer l&apos;accès aux sessions de chat écrit ou vocal du groupe." name="Chat">
-		<action description="Participer aux chats" longdescription="Participez aux chats du groupe." name="join group chat"/>
-		<action description="Participer au chat vocal" longdescription="Participez au chat vocal du groupe. Remarque : vous devez au préalable avoir le pouvoir de participer aux chats." name="join voice chat"/>
-		<action description="Modérer les chats" longdescription="Contrôlez l&apos;accès et la participation aux chats de groupe écrits et vocaux." name="moderate group chat"/>
+		<action description="Participer aux chats" longdescription="Participez aux chats du groupe." name="join group chat" value="16"/>
+		<action description="Participer au chat vocal" longdescription="Participez au chat vocal du groupe. Remarque : vous devez au préalable avoir le pouvoir de participer aux chats." name="join voice chat" value="27"/>
+		<action description="Modérer les chats" longdescription="Contrôlez l&apos;accès et la participation aux chats de groupe écrits et vocaux." name="moderate group chat" value="37"/>
 	</action_set>
 </role_actions>
diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml
index f607e11997..8e6238738b 100644
--- a/indra/newview/skins/default/xui/fr/strings.xml
+++ b/indra/newview/skins/default/xui/fr/strings.xml
@@ -206,6 +206,9 @@
 	<string name="TooltipAgentUrl">
 		Cliquez pour afficher le profil de ce résident
 	</string>
+	<string name="TooltipAgentInspect">
+		En savoir plus sur ce résident
+	</string>
 	<string name="TooltipAgentMute">
 		Cliquer pour ignorer ce résident
 	</string>
@@ -762,6 +765,12 @@
 	<string name="Estate / Full Region">
 		Domaine / Région entière
 	</string>
+	<string name="Estate / Homestead">
+		Domaine / Homestead
+	</string>
+	<string name="Mainland / Homestead">
+		Continent / Homestead
+	</string>
 	<string name="Mainland / Full Region">
 		Continent / Région entière
 	</string>
@@ -3574,7 +3583,7 @@ Si ce message persiste, veuillez aller sur la page [SUPPORT_SITE].
 		Vous êtes le seul participant à cette session.
 	</string>
 	<string name="offline_message">
-		[FIRST] [LAST] est déconnecté(e).
+		[NAME] est hors ligne.
 	</string>
 	<string name="invite_message">
 		Pour accepter ce chat vocal/vous connecter, cliquez sur le bouton [BUTTON NAME].
@@ -3643,7 +3652,10 @@ Si ce message persiste, veuillez aller sur la page [SUPPORT_SITE].
 		http://secondlife.com/landing/voicemorphing
 	</string>
 	<string name="paid_you_ldollars">
-		[NAME] vous a payé [AMOUNT] L$
+		[NAME] vous a payé [AMOUNT] L$ [REASON].
+	</string>
+	<string name="paid_you_ldollars_no_reason">
+		[NAME] vous a payé [AMOUNT] L$.
 	</string>
 	<string name="you_paid_ldollars">
 		Vous avez payé à [AMOUNT] L$ [REASON].
@@ -3657,6 +3669,9 @@ Si ce message persiste, veuillez aller sur la page [SUPPORT_SITE].
 	<string name="you_paid_ldollars_no_name">
 		Vous avez payé à [AMOUNT] L$ [REASON].
 	</string>
+	<string name="for item">
+		pour l&apos;article suivant : [ITEM]
+	</string>
 	<string name="for a parcel of land">
 		pour une parcelle de terrain
 	</string>
@@ -3675,6 +3690,9 @@ Si ce message persiste, veuillez aller sur la page [SUPPORT_SITE].
 	<string name="to upload">
 		pour charger
 	</string>
+	<string name="to publish a classified ad">
+		pour publier une petite annonce
+	</string>
 	<string name="giving">
 		Donner [AMOUNT] L$
 	</string>
-- 
cgit v1.2.3


From bd705e314eafb6926d669036441ea33f7d4083be Mon Sep 17 00:00:00 2001
From: Eli Linden <eli@lindenlab.com>
Date: Thu, 4 Nov 2010 16:40:21 -0700
Subject: CT-633 WIP FR translation for Viewer 2.3, Set19, new file

---
 .../skins/default/xui/fr/floater_display_name.xml      | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)
 create mode 100644 indra/newview/skins/default/xui/fr/floater_display_name.xml

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/fr/floater_display_name.xml b/indra/newview/skins/default/xui/fr/floater_display_name.xml
new file mode 100644
index 0000000000..eebe7abf2c
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/floater_display_name.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Display Name" title="MODIFICATION DU NOM D&apos;AFFICHAGE">
+	<text name="info_text">
+		Le nom que vous donnez à votre avatar s&apos;appelle le nom d&apos;affichage. Vous pouvez en changer une fois par semaine.
+	</text>
+	<text name="lockout_text">
+		Vous ne pouvez pas changer de nom d&apos;affichage jusqu&apos;au : [TIME].
+	</text>
+	<text name="set_name_label">
+		Nouveau nom d&apos;affichage :
+	</text>
+	<text name="name_confirm_label">
+		Saisir à nouveau le nom pour confirmer :
+	</text>
+	<button label="Enregistrer" name="save_btn" tool_tip="Enregistrer le nouveau nom d&apos;affichage."/>
+	<button label="Réinitialiser" name="reset_btn" tool_tip="Définir le nom d&apos;affichage sur le nom d&apos;utilisateur."/>
+	<button label="Annuler" name="cancel_btn"/>
+</floater>
-- 
cgit v1.2.3


From 9377b7d41bf93151dc667e4c45714144093a4555 Mon Sep 17 00:00:00 2001
From: Eli Linden <eli@lindenlab.com>
Date: Thu, 4 Nov 2010 17:09:04 -0700
Subject: CT-633 WIP FR linguistic

---
 indra/newview/skins/default/xui/fr/panel_people.xml | 2 +-
 indra/newview/skins/default/xui/fr/strings.xml      | 6 +++---
 2 files changed, 4 insertions(+), 4 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/fr/panel_people.xml b/indra/newview/skins/default/xui/fr/panel_people.xml
index 76edc316c2..0ca4208282 100644
--- a/indra/newview/skins/default/xui/fr/panel_people.xml
+++ b/indra/newview/skins/default/xui/fr/panel_people.xml
@@ -68,7 +68,7 @@ Pour rechercher des résidents avec qui passer du temps, utilisez [secondlife://
 				<button label="IM" name="im_btn" tool_tip="Ouvrir une session IM"/>
 			</layout_panel>
 			<layout_panel name="chat_btn_lp">
-				<button label="Appeler" name="call_btn" tool_tip="Appeler ce résident"/>
+				<button label="Appel" name="call_btn" tool_tip="Appeler ce résident"/>
 			</layout_panel>
 			<layout_panel name="chat_btn_lp">
 				<button label="Partager" name="share_btn" tool_tip="Partager un article de l&apos;inventaire"/>
diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml
index 8e6238738b..20f007a54e 100644
--- a/indra/newview/skins/default/xui/fr/strings.xml
+++ b/indra/newview/skins/default/xui/fr/strings.xml
@@ -249,7 +249,7 @@
 		Cliquez pour voir cet emplacement sur la carte
 	</string>
 	<string name="TooltipSLAPP">
-		Cliquez pour exécuter la commande secondlife:// command
+		Cliquez pour exécuter la commande secondlife://
 	</string>
 	<string name="CurrentURL" value=" URL actuelle : [CurrentURL]"/>
 	<string name="SLurlLabelTeleport">
@@ -1036,10 +1036,10 @@
 		Appuyez sur ESC pour quitter la vue subjective
 	</string>
 	<string name="InventoryNoMatchingItems">
-		Vous n&apos;avez pas trouvé ce que vous cherchiez ? Essayez [secondlife:///app/search/all/Rechercher [SEARCH_TERM]].
+		Vous n&apos;avez pas trouvé ce que vous cherchiez ? Essayez [secondlife:///app/search/all/ Rechercher [SEARCH_TERM]].
 	</string>
 	<string name="PlacesNoMatchingItems">
-		Vous n&apos;avez pas trouvé ce que vous cherchiez ? Essayez [secondlife:///app/search/places/Rechercher [SEARCH_TERM]].
+		Vous n&apos;avez pas trouvé ce que vous cherchiez ? Essayez [secondlife:///app/search/places/ Rechercher [SEARCH_TERM]].
 	</string>
 	<string name="FavoritesNoMatchingItems">
 		Faites glisser un repère ici pour l&apos;ajouter à vos Favoris.
-- 
cgit v1.2.3


From ab42f31608a2abc0982119d6aebdb0972d41427f Mon Sep 17 00:00:00 2001
From: Loren Shih <seraph@lindenlab.com>
Date: Fri, 5 Nov 2010 14:30:09 -0400
Subject: SH-410 Opaque Water Project version 2.0 First implementation with UI
 changes.

---
 indra/newview/app_settings/settings.xml            |  11 +++
 indra/newview/featuretable.txt                     |   5 +
 indra/newview/featuretable_mac.txt                 |   5 +
 indra/newview/featuretable_xp.txt                  |   5 +
 indra/newview/lldrawpoolwater.cpp                  | 102 ++++++++++++++++++++-
 indra/newview/lldrawpoolwater.h                    |   4 +
 indra/newview/llviewercontrol.cpp                  |  14 +++
 indra/newview/llvowater.cpp                        |  18 +++-
 .../default/xui/en/panel_preferences_graphics1.xml |  18 +++-
 9 files changed, 169 insertions(+), 13 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 3f23fee865..7b3f50e4e2 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -8318,6 +8318,17 @@
       <key>Value</key>
       <real>1.0</real>
     </map>
+	<key>RenderTransparentWater</key>
+	<map>
+	  <key>Comment</key>
+	  <string>Render water as transparent.  Setting to false renders water as opaque with a simple texture applied.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+	</map>
     <key>RenderTreeLODFactor</key>
     <map>
       <key>Comment</key>
diff --git a/indra/newview/featuretable.txt b/indra/newview/featuretable.txt
index d69842d5f1..a95abd7dd1 100644
--- a/indra/newview/featuretable.txt
+++ b/indra/newview/featuretable.txt
@@ -42,6 +42,7 @@ RenderObjectBump			1	1
 RenderReflectionDetail		1	4
 RenderTerrainDetail			1	1
 RenderTerrainLODFactor		1	2.0
+RenderTransparentWater		1	1
 RenderTreeLODFactor			1	1.0
 RenderUseImpostors			1	1
 RenderVBOEnable				1	1
@@ -80,6 +81,7 @@ RenderObjectBump			1	0
 RenderReflectionDetail		1	0
 RenderTerrainDetail			1	0
 RenderTerrainLODFactor		1	1
+RenderTransparentWater		1	0
 RenderTreeLODFactor			1	0
 RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	0.5
@@ -108,6 +110,7 @@ RenderObjectBump			1	1
 RenderReflectionDetail		1	0
 RenderTerrainDetail			1	1
 RenderTerrainLODFactor		1	1.0
+RenderTransparentWater		1	1
 RenderTreeLODFactor			1	0.5
 RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	1.125
@@ -135,6 +138,7 @@ RenderObjectBump			1	1
 RenderReflectionDetail		1	2
 RenderTerrainDetail			1	1
 RenderTerrainLODFactor		1	2.0
+RenderTransparentWater		1	1
 RenderTreeLODFactor			1	0.5
 RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	1.125
@@ -162,6 +166,7 @@ RenderObjectBump			1	1
 RenderReflectionDetail		1	4
 RenderTerrainDetail			1	1
 RenderTerrainLODFactor		1	2.0
+RenderTransparentWater		1	1
 RenderTreeLODFactor			1	1.0
 RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	2.0
diff --git a/indra/newview/featuretable_mac.txt b/indra/newview/featuretable_mac.txt
index f030c9f8e5..6dabef53a8 100644
--- a/indra/newview/featuretable_mac.txt
+++ b/indra/newview/featuretable_mac.txt
@@ -43,6 +43,7 @@ RenderObjectBump				1	1
 RenderReflectionDetail			1	3
 RenderTerrainDetail				1	1
 RenderTerrainLODFactor			1	2.0
+RenderTransparentWater			1	1
 RenderTreeLODFactor				1	1.0
 RenderUseImpostors				1	1
 RenderVBOEnable					1	1
@@ -80,6 +81,7 @@ RenderObjectBump			1	0
 RenderReflectionDetail		1	0
 RenderTerrainDetail			1	0
 RenderTerrainLODFactor		1	1
+RenderTransparentWater		1	0
 RenderTreeLODFactor			1	0
 RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	0.5
@@ -107,6 +109,7 @@ RenderObjectBump			1	1
 RenderReflectionDetail		1	0
 RenderTerrainDetail			1	1
 RenderTerrainLODFactor		1	1.0
+RenderTransparentWater		1	1
 RenderTreeLODFactor			1	0.5
 RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	1.125
@@ -133,6 +136,7 @@ RenderObjectBump			1	1
 RenderReflectionDetail		1	2
 RenderTerrainDetail			1	1
 RenderTerrainLODFactor		1	2.0
+RenderTransparentWater		1	1
 RenderTreeLODFactor			1	0.5
 RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	1.125
@@ -159,6 +163,7 @@ RenderObjectBump			1	1
 RenderReflectionDetail		1	3
 RenderTerrainDetail			1	1
 RenderTerrainLODFactor		1	2.0
+RenderTransparentWater		1	1
 RenderTreeLODFactor			1	1.0
 RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	2.0
diff --git a/indra/newview/featuretable_xp.txt b/indra/newview/featuretable_xp.txt
index dae7705971..a09ba17c62 100644
--- a/indra/newview/featuretable_xp.txt
+++ b/indra/newview/featuretable_xp.txt
@@ -42,6 +42,7 @@ RenderObjectBump			1	1
 RenderReflectionDetail		1	4
 RenderTerrainDetail			1	1
 RenderTerrainLODFactor		1	2.0
+RenderTransparentWater		1	1
 RenderTreeLODFactor			1	1.0
 RenderUseImpostors			1	1
 RenderVBOEnable				1	1
@@ -80,6 +81,7 @@ RenderObjectBump			1	0
 RenderReflectionDetail		1	0
 RenderTerrainDetail			1	0
 RenderTerrainLODFactor		1	1
+RenderTransparentWater		1	0
 RenderTreeLODFactor			1	0
 RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	0.5
@@ -108,6 +110,7 @@ RenderObjectBump			1	1
 RenderReflectionDetail		1	0
 RenderTerrainDetail			1	1
 RenderTerrainLODFactor		1	1.0
+RenderTransparentWater		1	1
 RenderTreeLODFactor			1	0.5
 RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	1.125
@@ -135,6 +138,7 @@ RenderObjectBump			1	1
 RenderReflectionDetail		1	2
 RenderTerrainDetail			1	1
 RenderTerrainLODFactor		1	2.0
+RenderTransparentWater		1	1
 RenderTreeLODFactor			1	0.5
 RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	1.125
@@ -162,6 +166,7 @@ RenderObjectBump			1	1
 RenderReflectionDetail		1	4
 RenderTerrainDetail			1	1
 RenderTerrainLODFactor		1	2.0
+RenderTransparentWater		1	1
 RenderTreeLODFactor			1	1.0
 RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	2.0
diff --git a/indra/newview/lldrawpoolwater.cpp b/indra/newview/lldrawpoolwater.cpp
index 6126908231..f6b3ec7764 100644
--- a/indra/newview/lldrawpoolwater.cpp
+++ b/indra/newview/lldrawpoolwater.cpp
@@ -48,7 +48,8 @@
 #include "llviewershadermgr.h"
 #include "llwaterparammanager.h"
 
-const LLUUID WATER_TEST("2bfd3884-7e27-69b9-ba3a-3e673f680004");
+const LLUUID TRANSPARENT_WATER_TEXTURE("2bfd3884-7e27-69b9-ba3a-3e673f680004");
+const LLUUID OPAQUE_WATER_TEXTURE("43c32285-d658-1793-c123-bf86315de055");
 
 static float sTime;
 
@@ -71,10 +72,14 @@ LLDrawPoolWater::LLDrawPoolWater() :
 	gGL.getTexUnit(0)->bind(mHBTex[1]);
 	mHBTex[1]->setAddressMode(LLTexUnit::TAM_CLAMP);
 
-	mWaterImagep = LLViewerTextureManager::getFetchedTexture(WATER_TEST);
-	mWaterImagep->setNoDelete() ;
+
+	mWaterImagep = LLViewerTextureManager::getFetchedTexture(TRANSPARENT_WATER_TEXTURE);
+	llassert(mWaterImagep);
+	mWaterImagep->setNoDelete();
+	mOpaqueWaterImagep = LLViewerTextureManager::getFetchedTexture(OPAQUE_WATER_TEXTURE);
+	llassert(mOpaqueWaterImagep);
 	mWaterNormp = LLViewerTextureManager::getFetchedTexture(DEFAULT_WATER_NORMAL);
-	mWaterNormp->setNoDelete() ;
+	mWaterNormp->setNoDelete();
 
 	restoreGL();
 }
@@ -161,6 +166,14 @@ void LLDrawPoolWater::render(S32 pass)
 
 	std::sort(mDrawFace.begin(), mDrawFace.end(), LLFace::CompareDistanceGreater());
 
+	// See if we are rendering water as opaque or not
+	if (!gSavedSettings.getBOOL("RenderTransparentWater"))
+	{
+		// render water for low end hardware
+		renderOpaqueLegacyWater();
+		return;
+	}
+
 	LLGLEnable blend(GL_BLEND);
 
 	if ((mVertexShaderLevel > 0) && !sSkipScreenCopy)
@@ -314,6 +327,87 @@ void LLDrawPoolWater::render(S32 pass)
 	gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
 }
 
+// for low end hardware
+void LLDrawPoolWater::renderOpaqueLegacyWater()
+{
+	LLVOSky *voskyp = gSky.mVOSkyp;
+
+	stop_glerror();
+
+	// Depth sorting and write to depth buffer
+	// since this is opaque, we should see nothing
+	// behind the water.  No blending because
+	// of no transparency.  And no face culling so
+	// that the underside of the water is also opaque.
+	LLGLDepthTest gls_depth(GL_TRUE, GL_TRUE);
+	LLGLDisable no_cull(GL_CULL_FACE);
+	LLGLDisable no_blend(GL_BLEND);
+
+	gPipeline.disableLights();
+
+	mOpaqueWaterImagep->addTextureStats(1024.f*1024.f);
+
+	// Activate the texture binding and bind one
+	// texture since all images will have the same texture
+	gGL.getTexUnit(0)->activate();
+	gGL.getTexUnit(0)->enable(LLTexUnit::TT_TEXTURE);
+	gGL.getTexUnit(0)->bind(mOpaqueWaterImagep);
+
+	// Automatically generate texture coords for water texture
+	glEnable(GL_TEXTURE_GEN_S); //texture unit 0
+	glEnable(GL_TEXTURE_GEN_T); //texture unit 0
+	glTexGenf(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
+	glTexGenf(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
+
+	// Use the fact that we know all water faces are the same size
+	// to save some computation
+
+	// Slowly move texture coordinates over time so the watter appears
+	// to be moving.
+	F32 movement_period_secs = 50.f;
+
+	F32 offset = fmod(gFrameTimeSeconds, movement_period_secs);
+
+	if (movement_period_secs != 0)
+	{
+	 	offset /= movement_period_secs;
+	}
+	else
+	{
+		offset = 0;
+	}
+
+	F32 tp0[4] = { 16.f / 256.f, 0.0f, 0.0f, offset };
+	F32 tp1[4] = { 0.0f, 16.f / 256.f, 0.0f, offset };
+
+	glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0);
+	glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1);
+
+	glColor3f(1.f, 1.f, 1.f);
+
+	for (std::vector<LLFace*>::iterator iter = mDrawFace.begin();
+		 iter != mDrawFace.end(); iter++)
+	{
+		LLFace *face = *iter;
+		if (voskyp->isReflFace(face))
+		{
+			continue;
+		}
+
+		face->renderIndexed();
+	}
+
+	stop_glerror();
+
+	// Reset the settings back to expected values
+	glDisable(GL_TEXTURE_GEN_S); //texture unit 0
+	glDisable(GL_TEXTURE_GEN_T); //texture unit 0
+
+	gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
+	gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
+}
+
+
 void LLDrawPoolWater::renderReflection(LLFace* face)
 {
 	LLVOSky *voskyp = gSky.mVOSkyp;
diff --git a/indra/newview/lldrawpoolwater.h b/indra/newview/lldrawpoolwater.h
index 3ab4bc5e2c..dff1830129 100644
--- a/indra/newview/lldrawpoolwater.h
+++ b/indra/newview/lldrawpoolwater.h
@@ -39,6 +39,7 @@ class LLDrawPoolWater: public LLFacePool
 protected:
 	LLPointer<LLViewerTexture> mHBTex[2];
 	LLPointer<LLViewerTexture> mWaterImagep;
+	LLPointer<LLViewerTexture> mOpaqueWaterImagep;
 	LLPointer<LLViewerTexture> mWaterNormp;
 
 public:
@@ -81,6 +82,9 @@ public:
 
 	void renderReflection(LLFace* face);
 	void shade();
+
+protected:
+	void renderOpaqueLegacyWater();
 };
 
 void cgErrorCallback();
diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp
index fbec2a7b9e..117e49d67f 100644
--- a/indra/newview/llviewercontrol.cpp
+++ b/indra/newview/llviewercontrol.cpp
@@ -117,10 +117,23 @@ static bool handleSetShaderChanged(const LLSD& newvalue)
 	gBumpImageList.destroyGL();
 	gBumpImageList.restoreGL();
 
+	// Changing shader also changes the terrain detail to high, reflect that change here
+	if (newvalue.asBoolean())
+	{
+		// shaders enabled, set terrain detail to high
+		gSavedSettings.setS32("RenderTerrainDetail", 1);
+	}
+	// else, leave terrain detail as is
 	LLViewerShaderMgr::instance()->setShaders();
 	return true;
 }
 
+bool handleRenderTransparentWaterChanged(const LLSD& newvalue)
+{
+	LLWorld::getInstance()->updateWaterObjects();
+	return true;
+}
+
 static bool handleReleaseGLBufferChanged(const LLSD& newvalue)
 {
 	if (gPipeline.isInit())
@@ -637,6 +650,7 @@ void settings_setup_listeners()
 	gSavedSettings.getControl("ShowMiniLocationPanel")->getSignal()->connect(boost::bind(&toggle_show_mini_location_panel, _2));
 	gSavedSettings.getControl("ShowObjectRenderingCost")->getSignal()->connect(boost::bind(&toggle_show_object_render_cost, _2));
 	gSavedSettings.getControl("ForceShowGrid")->getSignal()->connect(boost::bind(&handleForceShowGrid, _2));
+	gSavedSettings.getControl("RenderTransparentWater")->getSignal()->connect(boost::bind(&handleRenderTransparentWaterChanged, _2));
 }
 
 #if TEST_CACHED_CONTROL
diff --git a/indra/newview/llvowater.cpp b/indra/newview/llvowater.cpp
index 9280eb8fa4..71f08ec36d 100644
--- a/indra/newview/llvowater.cpp
+++ b/indra/newview/llvowater.cpp
@@ -60,8 +60,10 @@ const U32 WIDTH			= (N_RES * WAVE_STEP); //128.f //64		// width of wave tile, in
 const F32 WAVE_STEP_INV	= (1. / WAVE_STEP);
 
 
-LLVOWater::LLVOWater(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp)
-:	LLStaticViewerObject(id, pcode, regionp),
+LLVOWater::LLVOWater(const LLUUID &id, 
+					 const LLPCode pcode, 
+					 LLViewerRegion *regionp) :
+	LLStaticViewerObject(id, pcode, regionp),
 	mRenderType(LLPipeline::RENDER_TYPE_WATER)
 {
 	// Terrain must draw during selection passes so it can block objects behind it.
@@ -153,11 +155,17 @@ BOOL LLVOWater::updateGeometry(LLDrawable *drawable)
 	LLStrider<U16> indicesp;
 	U16 index_offset;
 
-	S32 size = 16;
 
-	S32 num_quads = size*size;	
-	face->setSize(4*num_quads, 6*num_quads);
+	// A quad is 4 vertices and 6 indices (making 2 triangles)
+	static const unsigned int vertices_per_quad = 4;
+	static const unsigned int indices_per_quad = 6;
 
+	const S32 size = gSavedSettings.getBOOL("RenderTransparentWater") ? 16 : 1;
+
+	const S32 num_quads = size * size;
+	face->setSize(vertices_per_quad * num_quads,
+				  indices_per_quad * num_quads);
+	
 	if (face->mVertexBuffer.isNull())
 	{
 		face->mVertexBuffer = new LLVertexBuffer(LLDrawPoolWater::VERTEX_DATA_MASK, GL_DYNAMIC_DRAW_ARB);
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
index aae373ed33..3ceee60927 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
@@ -174,6 +174,16 @@
 		 width="128">
 			Shaders:
 		</text>
+		<check_box
+		 control_name="RenderTransparentWater"
+		 height="16"
+		 initial_value="true"
+		 label="Transparent Water"
+		 layout="topleft"
+		 left_delta="0"
+		 name="BumpShiny"
+		 top_pad="7"
+		 width="256" />
 		<check_box
 		 control_name="RenderObjectBump"
 		 height="16"
@@ -182,7 +192,7 @@
 		 layout="topleft"
 		 left_delta="0"
 		 name="BumpShiny"
-		 top_pad="7"
+		 top_pad="1"
 		 width="256" />
 		<check_box
 		 control_name="VertexShaderEnable"
@@ -279,7 +289,7 @@
          length="1"
          top_pad="8"
          follows="top|left"
-         height="23"
+         height="12"
          width="110"
          word_wrap="true"
          layout="topleft"
@@ -289,10 +299,10 @@
         </text>
         <combo_box
          control_name="RenderReflectionDetail"
-         height="23"
+         height="18"
          layout="topleft"
          left_delta="10"
-         top_pad ="0"
+         top_pad ="3"
          name="Reflections"
          width="150">
             <combo_box.item
-- 
cgit v1.2.3


From fdbc78b0bcd2fe2caec61a2161dc64c9d46a0c3b Mon Sep 17 00:00:00 2001
From: "Christian Goetze (CG)" <cg@lindenlab.com>
Date: Fri, 5 Nov 2010 17:59:50 -0700
Subject: Fix type mismatch in loop variable.

---
 indra/newview/llvocache.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llvocache.cpp b/indra/newview/llvocache.cpp
index 34e9babe2c..b1c6ea26cc 100644
--- a/indra/newview/llvocache.cpp
+++ b/indra/newview/llvocache.cpp
@@ -479,7 +479,7 @@ void LLVOCache::writeCacheHeader()
 	if(mNumEntries < mCacheSize)
 	{
 		HeaderEntryInfo* entry = new HeaderEntryInfo() ;
-		for(S32 i = mNumEntries ; i < mCacheSize; i++)
+		for(U32 i = mNumEntries ; i < mCacheSize; i++)
 		{
 			//fill the cache with the default entry.
 			if(!checkWrite(apr_file, entry, sizeof(HeaderEntryInfo)))
-- 
cgit v1.2.3


From 85509457c6dc6a0f3e56fa3d24ae872e1878c04f Mon Sep 17 00:00:00 2001
From: Merov Linden <merov@lindenlab.com>
Date: Fri, 5 Nov 2010 18:40:08 -0700
Subject: STORM-105 : Take Vadim code review into account, code clean up

---
 indra/newview/llappviewer.cpp     | 30 ++++++++++++++---------------
 indra/newview/llappviewer.h       |  4 ++--
 indra/newview/llfasttimerview.cpp | 12 ++++++------
 indra/newview/llfasttimerview.h   |  2 +-
 indra/newview/llviewertexture.cpp | 40 ++++++++++++++++++++++-----------------
 indra/newview/llviewertexture.h   |  1 +
 6 files changed, 48 insertions(+), 41 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 6db9807861..5b69fd80af 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -510,10 +510,10 @@ class LLFastTimerLogThread : public LLThread
 public:
 	std::string mFile;
 
-	LLFastTimerLogThread(std::string& testName) : LLThread("fast timer log")
+	LLFastTimerLogThread(std::string& test_name) : LLThread("fast timer log")
 	{
-		std::string fileName = testName + std::string(".slp");
-		mFile = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, fileName);
+		std::string file_name = test_name + std::string(".slp");
+		mFile = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, file_name);
 	}
 
 	void run()
@@ -1303,7 +1303,7 @@ bool LLAppViewer::cleanup()
 {
 	// workaround for DEV-35406 crash on shutdown
 	LLEventPumps::instance().reset();
-    
+
 	// remove any old breakpad minidump files from the log directory
 	if (! isError())
 	{
@@ -1641,7 +1641,7 @@ bool LLAppViewer::cleanup()
 		std::string baselineName = LLFastTimer::sLogName + "_baseline.slp";
 		std::string currentName  = LLFastTimer::sLogName + ".slp"; 
 		std::string reportName   = LLFastTimer::sLogName + "_report.csv";
-		
+
 		LLFastTimerView::doAnalysis(
 			gDirUtilp->getExpandedFilename(LL_PATH_LOGS, baselineName),
 			gDirUtilp->getExpandedFilename(LL_PATH_LOGS, currentName),
@@ -2113,16 +2113,16 @@ bool LLAppViewer::initConfiguration()
 		LLFastTimer::sMetricLog = TRUE ;
 		// '--logmetrics' can be specified with a named test metric argument so the data gathering is done only on that test
 		// In the absence of argument, every metric is gathered (makes for a rather slow run and hard to decipher report...)
-        std::string testName = clp.getOption("logmetrics")[0];
-		llinfos << "'--logmetrics' argument : " << testName << llendl;
-        if (testName == "")
-        {
-            llwarns << "No '--logmetrics' argument given, will output all metrics." << llendl;
+		std::string test_name = clp.getOption("logmetrics")[0];
+		llinfos << "'--logmetrics' argument : " << test_name << llendl;
+		if (test_name == "")
+		{
+			llwarns << "No '--logmetrics' argument given, will output all metrics." << llendl;
 			LLFastTimer::sLogName = std::string("metric");
-        }
-        else
-        {
-			LLFastTimer::sLogName = testName;
+		}
+		else
+		{
+			LLFastTimer::sLogName = test_name;
 		}
 	}
 
@@ -2164,7 +2164,7 @@ bool LLAppViewer::initConfiguration()
 	{
 		LLFastTimerView::sAnalyzePerformance = TRUE;
 	}
-    
+
 	if (clp.hasOption("replaysession"))
 	{
 		LLAgentPilot::sReplaySession = TRUE;
diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h
index 3bdc6325c1..a14ab4362f 100644
--- a/indra/newview/llappviewer.h
+++ b/indra/newview/llappviewer.h
@@ -167,7 +167,7 @@ public:
 	// mute/unmute the system's master audio
 	virtual void setMasterSystemAudioMute(bool mute);
 	virtual bool getMasterSystemAudioMute();
-
+	
 protected:
 	virtual bool initWindow(); // Initialize the viewer's window.
 	virtual bool initLogging(); // Initialize log files, logging system, return false on failure.
@@ -253,7 +253,7 @@ private:
 
 	// For performance and metric gathering
 	LLThread*	mFastTimerLogThread;
-	
+
 	// for tracking viewer<->region circuit death
 	bool mAgentRegionLastAlive;
 	LLUUID mAgentRegionLastID;
diff --git a/indra/newview/llfasttimerview.cpp b/indra/newview/llfasttimerview.cpp
index 5b6a25a041..92a3b9b2f5 100644
--- a/indra/newview/llfasttimerview.cpp
+++ b/indra/newview/llfasttimerview.cpp
@@ -1184,12 +1184,12 @@ void LLFastTimerView::outputAllMetrics()
 {
 	if (LLMetricPerformanceTesterBasic::hasMetricPerformanceTesters())
 	{
-        for (LLMetricPerformanceTesterBasic::name_tester_map_t::iterator iter = LLMetricPerformanceTesterBasic::sTesterMap.begin(); 
-            iter != LLMetricPerformanceTesterBasic::sTesterMap.end(); ++iter)
-        {
-            LLMetricPerformanceTesterBasic* tester = ((LLMetricPerformanceTesterBasic*)iter->second);	
-            tester->outputTestResults();
-        }
+		for (LLMetricPerformanceTesterBasic::name_tester_map_t::iterator iter = LLMetricPerformanceTesterBasic::sTesterMap.begin(); 
+			iter != LLMetricPerformanceTesterBasic::sTesterMap.end(); ++iter)
+		{
+			LLMetricPerformanceTesterBasic* tester = ((LLMetricPerformanceTesterBasic*)iter->second);	
+			tester->outputTestResults();
+		}
 	}
 }
 
diff --git a/indra/newview/llfasttimerview.h b/indra/newview/llfasttimerview.h
index 1d844454c8..1a54a53f09 100644
--- a/indra/newview/llfasttimerview.h
+++ b/indra/newview/llfasttimerview.h
@@ -37,7 +37,7 @@ public:
 	
 	static BOOL sAnalyzePerformance;
 
-    static void outputAllMetrics();
+	static void outputAllMetrics();
 	static void doAnalysis(std::string baseline, std::string target, std::string output);
 
 private:
diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp
index aba52cda4f..2b27f308df 100644
--- a/indra/newview/llviewertexture.cpp
+++ b/indra/newview/llviewertexture.cpp
@@ -288,6 +288,12 @@ LLViewerFetchedTexture* LLViewerTextureManager::getFetchedTextureFromUrl(const s
 	return gTextureList.getImageFromUrl(url, usemipmaps, boost_priority, texture_type, internal_format, primary_format, force_id) ;
 }
 
+//static
+bool LLViewerTextureManager::perfStatsEnabled() 
+{
+	return (sTesterp != NULL);
+}
+
 LLViewerFetchedTexture* LLViewerTextureManager::getFetchedTextureFromHost(const LLUUID& image_id, LLHost host) 
 {
 	return gTextureList.getImageFromHost(image_id, host) ;
@@ -342,14 +348,14 @@ void LLViewerTextureManager::init()
 
 	LLViewerTexture::initClass() ;
 
-	if (LLFastTimer::sMetricLog && !LLViewerTextureManager::sTesterp && ((LLFastTimer::sLogName == sTesterName) || (LLFastTimer::sLogName == "metric")))
+	if (LLFastTimer::sMetricLog && !perfStatsEnabled() && ((LLFastTimer::sLogName == sTesterName) || (LLFastTimer::sLogName == "metric")))
 	{
-		LLViewerTextureManager::sTesterp = new LLTexturePipelineTester() ;
-        if (!LLViewerTextureManager::sTesterp->isValid())
-        {
-            delete LLViewerTextureManager::sTesterp;
-            LLViewerTextureManager::sTesterp = NULL;
-        }
+		sTesterp = new LLTexturePipelineTester() ;
+		if (!sTesterp->isValid())
+		{
+			delete sTesterp;
+			sTesterp = NULL;
+		}
 	}
 }
 
@@ -414,7 +420,7 @@ void LLViewerTexture::updateClass(const F32 velocity, const F32 angular_velocity
 {
 	sCurrentTime = gFrameTimeSeconds ;
 
-	if(LLViewerTextureManager::sTesterp)
+	if (LLViewerTextureManager::perfStatsEnabled())
 	{
 		LLViewerTextureManager::sTesterp->update() ;
 	}
@@ -609,7 +615,7 @@ bool LLViewerTexture::bindDefaultImage(S32 stage)
 	//check if there is cached raw image and switch to it if possible
 	switchToCachedImage() ;
 
-	if(LLViewerTextureManager::sTesterp)
+	if (LLViewerTextureManager::perfStatsEnabled())
 	{
 		LLViewerTextureManager::sTesterp->updateGrayTextureBinding() ;
 	}
@@ -1072,7 +1078,7 @@ BOOL LLViewerTexture::isLargeImage()
 //virtual 
 void LLViewerTexture::updateBindStatsForTester()
 {
-	if(LLViewerTextureManager::sTesterp)
+	if (LLViewerTextureManager::perfStatsEnabled())
 	{
 		LLViewerTextureManager::sTesterp->updateTextureBindingStats(this) ;
 	}
@@ -1855,7 +1861,7 @@ bool LLViewerFetchedTexture::updateFetch()
 		// We may have data ready regardless of whether or not we are finished (e.g. waiting on write)
 		if (mRawImage.notNull())
 		{
-			if(LLViewerTextureManager::sTesterp)
+			if (LLViewerTextureManager::perfStatsEnabled())
 			{
 				mIsFetched = TRUE ;
 				LLViewerTextureManager::sTesterp->updateTextureLoadingStats(this, mRawImage, LLAppViewer::getTextureFetch()->isFromLocalCache(mID)) ;
@@ -3082,7 +3088,7 @@ void LLViewerLODTexture::scaleDown()
 	{		
 		switchToCachedImage() ;	
 
-		if(LLViewerTextureManager::sTesterp)
+		if (LLViewerTextureManager::perfStatsEnabled())
 		{
 			LLViewerTextureManager::sTesterp->setStablizingTime() ;
 		}
@@ -3621,7 +3627,7 @@ LLTexturePipelineTester::LLTexturePipelineTester() : LLMetricPerformanceTesterWi
 
 LLTexturePipelineTester::~LLTexturePipelineTester()
 {
-	LLViewerTextureManager::sTesterp = NULL ;
+	LLViewerTextureManager::sTesterp = NULL;
 }
 
 void LLTexturePipelineTester::update()
@@ -3687,7 +3693,7 @@ void LLTexturePipelineTester::reset()
 //virtual 
 void LLTexturePipelineTester::outputTestRecord(LLSD *sd) 
 {	
-    std::string currentLabel = getCurrentLabelName();
+	std::string currentLabel = getCurrentLabelName();
 	(*sd)[currentLabel]["TotalBytesLoaded"]              = (LLSD::Integer)mTotalBytesLoaded ;
 	(*sd)[currentLabel]["TotalBytesLoadedFromCache"]     = (LLSD::Integer)mTotalBytesLoadedFromCache ;
 	(*sd)[currentLabel]["TotalBytesLoadedForLargeImage"] = (LLSD::Integer)mTotalBytesLoadedForLargeImage ;
@@ -3874,7 +3880,7 @@ LLMetricPerformanceTesterWithSession::LLTestSession* LLTexturePipelineTester::lo
 	sessionp->mInstantPerformanceList[sessionp->mInstantPerformanceListCounter].mTime = 0.f ;
 	
 	//load a session
-    std::string currentLabel = getCurrentLabelName();
+	std::string currentLabel = getCurrentLabelName();
 	BOOL in_log = (*log).has(currentLabel) ;
 	while (in_log)
 	{
@@ -3945,9 +3951,9 @@ LLMetricPerformanceTesterWithSession::LLTestSession* LLTexturePipelineTester::lo
 			sessionp->mInstantPerformanceList[sessionp->mInstantPerformanceListCounter].mAveragePercentageBytesUsedPerSecond = 0.f ;
 			sessionp->mInstantPerformanceList[sessionp->mInstantPerformanceListCounter].mTime = 0.f ;
 		}
-        // Next label
+		// Next label
 		incrementCurrentCount() ;
-        currentLabel = getCurrentLabelName();
+		currentLabel = getCurrentLabelName();
 		in_log = (*log).has(currentLabel) ;
 	}
 
diff --git a/indra/newview/llviewertexture.h b/indra/newview/llviewertexture.h
index b5636bbdc7..88d449e061 100644
--- a/indra/newview/llviewertexture.h
+++ b/indra/newview/llviewertexture.h
@@ -676,6 +676,7 @@ private:
 public:
     //texture pipeline tester
 	static LLTexturePipelineTester* sTesterp ;
+	static bool perfStatsEnabled();
 
 	//returns NULL if tex is not a LLViewerFetchedTexture nor derived from LLViewerFetchedTexture.
 	static LLViewerFetchedTexture*    staticCastToFetchedTexture(LLTexture* tex, BOOL report_error = FALSE) ;
-- 
cgit v1.2.3


From 669cf170ceae2609202fb948d388b7492f8eb90a Mon Sep 17 00:00:00 2001
From: Wolfpup Lowenhar <wolfpup67@earthlink.net>
Date: Mon, 8 Nov 2010 09:31:35 -0500
Subject: STORM-102: STORM-143: Refactored the STORM-103 code to pull the
 proper plain test log no  matter when it was generated or if it has the date
 stamp in the name of the log or not.

--HG--
branch : storm-102
---
 .../newview/app_settings/settings_per_account.xml  |  2 +-
 indra/newview/lllogchat.cpp                        | 67 +++++++++++-----------
 indra/newview/lllogchat.h                          |  1 -
 3 files changed, 33 insertions(+), 37 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/settings_per_account.xml b/indra/newview/app_settings/settings_per_account.xml
index ab702e49e1..705c73cbf7 100644
--- a/indra/newview/app_settings/settings_per_account.xml
+++ b/indra/newview/app_settings/settings_per_account.xml
@@ -119,7 +119,7 @@
         <key>Type</key>
         <string>Boolean</string>
         <key>Value</key>
-        <integer>1</integer>
+        <integer>0</integer>
       </map>
     <!-- Settings below are for back compatibility only.
     They are not used in current viewer anymore. But they can't be removed to avoid
diff --git a/indra/newview/lllogchat.cpp b/indra/newview/lllogchat.cpp
index 0e557cba5d..4f80472330 100644
--- a/indra/newview/lllogchat.cpp
+++ b/indra/newview/lllogchat.cpp
@@ -200,7 +200,7 @@ std::string LLLogChat::makeLogFileName(std::string filename)
 	filename = cleanFileName(filename);
 	filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_ACCOUNT_CHAT_LOGS,filename);
 	filename += ".txt";
-	LL_INFOS("") << "Current:" << filename << LL_ENDL;/* uncomment if you want to verify step, delete on commit */
+	//LL_INFOS("") << "Current:" << filename << LL_ENDL;/* uncomment if you want to verify step, delete on commit */
 	return filename;
 }
 
@@ -370,22 +370,19 @@ void LLLogChat::loadAllHistory(const std::string& file_name, std::list<LLSD>& me
 		llwarns << "Session name is Empty!" << llendl;
 		return ;
 	}
-
+	LL_INFOS("") << "Loading:" << file_name << LL_ENDL;/* uncomment if you want to verify step, delete on commit */
+	LL_INFOS("") << "Current:" << makeLogFileName(file_name) << LL_ENDL;/* uncomment if you want to verify step, delete on commit */
 	LLFILE* fptr = LLFile::fopen(makeLogFileName(file_name), "r");/*Flawfinder: ignore*/
-	// LL_INFOS("") << "Current:" << file_name << LL_ENDL;/* uncomment if you want to verify step, delete on commit */
 	if (!fptr)
     {
 		fptr = LLFile::fopen(oldLogFileName(file_name), "r");/*Flawfinder: ignore*/
-        //LL_INFOS("") << "Old    :" << file_name << LL_ENDL;/* uncomment if you want to verify step, delete on commit */
         if (!fptr)
         {
-			fptr =LLFile::fopen(ndsLogFileName(file_name), "r");/*Flawfinder:ignore*/
-            //LL_INFOS("") << "Orginal:" << file_name << LL_ENDL;/* uncomment if you want to verify step, delete on commit */
-            if (!fptr) return;      //No previous conversation with this name.
+			if (!fptr) return;      //No previous conversation with this name.
         }
 	}
  
-    LL_INFOS("") << "Reading:" << file_name << LL_ENDL;
+    //LL_INFOS("") << "Reading:" << file_name << LL_ENDL;
 	char buffer[LOG_RECALL_SIZE];		/*Flawfinder: ignore*/
 	char *bptr;
 	S32 len;
@@ -572,31 +569,31 @@ bool LLChatLogParser::parse(std::string& raw, LLSD& im)
 	im[IM_TEXT] = name_and_text[IDX_TEXT];
 	return true;  //parsed name and message text, maybe have a timestamp too
 }
-std::string LLLogChat::oldLogFileName(std::string filename)
-{
-	time_t now;
-    time_t yesterday = time(&now) - 86400;
-	char dbuffer[20];		/* Flawfinder: ignore */
-	if (filename == "chat")
-	{
-		strftime(dbuffer, 20, "-%Y-%m-%d", localtime(&yesterday));
-	}
-	else
-	{
-		strftime(dbuffer, 20, "-%Y-%m", localtime(&yesterday));
-	}
-	filename += dbuffer;
-	filename = cleanFileName(filename);
-	filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_ACCOUNT_CHAT_LOGS,filename);
-	filename += ".txt";
-    //LL_INFOS("") << "Old    :" << filename << LL_ENDL;/* uncomment if you want to verify step, delete on commit */
-	return filename;
-}
-std::string LLLogChat::ndsLogFileName(std::string filename)
-{
-    filename = cleanFileName(filename);
-	filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_ACCOUNT_CHAT_LOGS,filename);
-	filename += ".txt";
-    //LL_INFOS("") << "Original:" << filename << LL_ENDL;/* uncomment if you want to verify step, delete on commit */
-	return filename;
+std::string LLLogChat::oldLogFileName(std::string filename)
+{
+    std::string scanResult;
+	std::string directory = gDirUtilp->getPerAccountChatLogsDir();/* get Users log directory */
+	directory += gDirUtilp->getDirDelimiter();/* add final OS dependent delimiter */
+	std::string pattern = (cleanFileName(filename)+(( filename == "chat" ) ? "-???\?-?\?-??.txt" : "-???\?-??.txt"));/* create search pattern*/
+	LL_INFOS("") << "Checking:" << directory << " for " << pattern << LL_ENDL;/* uncomment if you want to verify step, delete on commit */
+	std::vector<std::string> allfiles;
+
+    while (gDirUtilp->getNextFileInDir(directory, pattern, scanResult))
+    {
+		//LL_INFOS("") << "Found   :" << scanResult << LL_ENDL;
+        allfiles.push_back(scanResult);
+    }
+
+    if (allfiles.size() == 0)  // if no result from date search, return generic filename
+    {
+        scanResult = directory + filename + ".txt";
+    }
+    else 
+    {
+        std::sort(allfiles.begin(), allfiles.end());
+        scanResult = directory + allfiles.back();
+        // thisfile is now the most recent version of the file.
+    }
+	LL_INFOS("") << "Reading:" << scanResult << LL_ENDL;
+    return scanResult;
 }
diff --git a/indra/newview/lllogchat.h b/indra/newview/lllogchat.h
index 578fe37227..27752452c9 100644
--- a/indra/newview/lllogchat.h
+++ b/indra/newview/lllogchat.h
@@ -45,7 +45,6 @@ public:
 	*Add functions to get old and non date stamped file names when needed
 	*/
 	static std::string oldLogFileName(std::string(filename));
-	static std::string ndsLogFileName(std::string(filename));
 	static void saveHistory(const std::string& filename,
 				const std::string& from,
 				const LLUUID& from_id,
-- 
cgit v1.2.3


From 3fa059409aad9d7b5aedb4ed112cb52da6990ac4 Mon Sep 17 00:00:00 2001
From: Bill Curtis <bill.curtis@gmail.com>
Date: Mon, 8 Nov 2010 10:54:58 -0800
Subject: changes to read max-agent-groups from login.cgi response

---
 indra/newview/llagent.cpp         | 3 ++-
 indra/newview/llfloatergroups.cpp | 5 +++--
 indra/newview/lllogininstance.cpp | 1 +
 indra/newview/llstartup.cpp       | 6 +++++-
 indra/newview/llstartup.h         | 1 +
 indra/newview/llviewermessage.cpp | 2 +-
 6 files changed, 13 insertions(+), 5 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index b202cb5098..9350e50305 100644
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -58,6 +58,7 @@
 #include "llsidetray.h"
 #include "llsky.h"
 #include "llsmoothstep.h"
+#include "llstartup.h"
 #include "llstatusbar.h"
 #include "llteleportflags.h"
 #include "lltool.h"
@@ -2427,7 +2428,7 @@ BOOL LLAgent::setUserGroupFlags(const LLUUID& group_id, BOOL accept_notices, BOO
 
 BOOL LLAgent::canJoinGroups() const
 {
-	return mGroups.count() < MAX_AGENT_GROUPS;
+	return mGroups.count() < gMaxAgentGroups;
 }
 
 LLQuaternion LLAgent::getHeadRotation()
diff --git a/indra/newview/llfloatergroups.cpp b/indra/newview/llfloatergroups.cpp
index 3cd2154531..679c932995 100644
--- a/indra/newview/llfloatergroups.cpp
+++ b/indra/newview/llfloatergroups.cpp
@@ -41,6 +41,7 @@
 #include "llbutton.h"
 #include "llgroupactions.h"
 #include "llscrolllistctrl.h"
+#include "llstartup.h"
 #include "lltextbox.h"
 #include "lluictrlfactory.h"
 #include "lltrans.h"
@@ -171,7 +172,7 @@ void LLPanelGroups::reset()
 		group_list->operateOnAll(LLCtrlListInterface::OP_DELETE);
 	}
 	getChild<LLUICtrl>("groupcount")->setTextArg("[COUNT]", llformat("%d",gAgent.mGroups.count()));
-	getChild<LLUICtrl>("groupcount")->setTextArg("[MAX]", llformat("%d",MAX_AGENT_GROUPS));
+	getChild<LLUICtrl>("groupcount")->setTextArg("[MAX]", llformat("%d",gMaxAgentGroups));
 
 	init_group_list(getChild<LLScrollListCtrl>("group list"), gAgent.getGroupID());
 	enableButtons();
@@ -182,7 +183,7 @@ BOOL LLPanelGroups::postBuild()
 	childSetCommitCallback("group list", onGroupList, this);
 
 	getChild<LLUICtrl>("groupcount")->setTextArg("[COUNT]", llformat("%d",gAgent.mGroups.count()));
-	getChild<LLUICtrl>("groupcount")->setTextArg("[MAX]", llformat("%d",MAX_AGENT_GROUPS));
+	getChild<LLUICtrl>("groupcount")->setTextArg("[MAX]", llformat("%d",gMaxAgentGroups));
 
 	LLScrollListCtrl *list = getChild<LLScrollListCtrl>("group list");
 	if (list)
diff --git a/indra/newview/lllogininstance.cpp b/indra/newview/lllogininstance.cpp
index 7b2f5984a7..9461bfbc32 100644
--- a/indra/newview/lllogininstance.cpp
+++ b/indra/newview/lllogininstance.cpp
@@ -146,6 +146,7 @@ void LLLoginInstance::constructAuthParams(LLPointer<LLCredential> user_credentia
 	requested_options.append("newuser-config");
 	requested_options.append("ui-config");
 #endif
+	requested_options.append("max-agent-groups");	
 	requested_options.append("map-server-url");	
 	requested_options.append("voice-config");
 	requested_options.append("tutorial_setting");
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 975d1f9f32..5781398faa 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -198,6 +198,7 @@
 // exported globals
 //
 bool gAgentMovementCompleted = false;
+S32  gMaxAgentGroups;
 
 std::string SCREEN_HOME_FILENAME = "screen_home.bmp";
 std::string SCREEN_LAST_FILENAME = "screen_last.bmp";
@@ -2944,7 +2945,7 @@ bool process_login_success_response()
 	text = response["circuit_code"].asString();
 	if(!text.empty())
 	{
-		gMessageSystem->mOurCircuitCode = strtoul(text.c_str(), NULL, 10);
+		gMessageSystem->mOurCircuitCode = strtoult(ext.c_str(), NULL, 10);
 	}
 	std::string sim_ip_str = response["sim_ip"];
 	std::string sim_port_str = response["sim_port"];
@@ -3148,6 +3149,9 @@ bool process_login_success_response()
 		LLViewerMedia::openIDSetup(openid_url, openid_token);
 	}
 
+	std::string max_agent_groups(response["max-agent-groups"]);
+	gMaxAgentGroups = atoi(max_agent_groups.c_str());
+	
 	bool success = false;
 	// JC: gesture loading done below, when we have an asset system
 	// in place.  Don't delete/clear gUserCredentials until then.
diff --git a/indra/newview/llstartup.h b/indra/newview/llstartup.h
index e79aa0dbee..41f6f1b7ee 100644
--- a/indra/newview/llstartup.h
+++ b/indra/newview/llstartup.h
@@ -70,6 +70,7 @@ typedef enum {
 
 // exported symbols
 extern bool gAgentMovementCompleted;
+extern S32  gMaxAgentGroups;
 extern LLPointer<LLViewerTexture> gStartTexture;
 
 class LLStartUp
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index c35173a7d4..14e0d49088 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -633,7 +633,7 @@ bool join_group_response(const LLSD& notification, const LLSD& response)
 	if(option == 0 && !group_id.isNull())
 	{
 		// check for promotion or demotion.
-		S32 max_groups = MAX_AGENT_GROUPS;
+		S32 max_groups = gMaxAgentGroups;
 		if(gAgent.isInGroup(group_id)) ++max_groups;
 
 		if(gAgent.mGroups.count() < max_groups)
-- 
cgit v1.2.3


From 926c5b82873d22121ecab04f3d8bcf9d057a9002 Mon Sep 17 00:00:00 2001
From: Eli Linden <eli@lindenlab.com>
Date: Mon, 8 Nov 2010 12:57:16 -0800
Subject: CT-633 WIP DE translation for Delta Set19 for Viewer 2.3

---
 .../skins/default/xui/de/floater_avatar_picker.xml |  28 ++---
 .../newview/skins/default/xui/de/floater_bumps.xml |  10 +-
 .../skins/default/xui/de/floater_buy_object.xml    |  37 +++---
 .../newview/skins/default/xui/de/floater_event.xml |  45 ++-----
 .../skins/default/xui/de/floater_incoming_call.xml |   2 +-
 indra/newview/skins/default/xui/de/floater_pay.xml |   2 +-
 .../skins/default/xui/de/floater_pay_object.xml    |   2 +-
 .../newview/skins/default/xui/de/floater_tools.xml |   4 +-
 .../default/xui/de/floater_voice_controls.xml      |   2 +-
 .../skins/default/xui/de/inspect_avatar.xml        |   4 +-
 indra/newview/skins/default/xui/de/menu_viewer.xml |   6 +-
 .../newview/skins/default/xui/de/notifications.xml | 136 +++++++++++++++------
 .../skins/default/xui/de/panel_edit_profile.xml    |  10 +-
 .../default/xui/de/panel_group_land_money.xml      |   1 +
 indra/newview/skins/default/xui/de/panel_login.xml |   4 +-
 .../skins/default/xui/de/panel_place_profile.xml   |   3 +-
 .../default/xui/de/panel_preferences_general.xml   |   8 +-
 .../default/xui/de/panel_preferences_setup.xml     |   2 +-
 .../skins/default/xui/de/panel_profile_view.xml    |   8 +-
 .../newview/skins/default/xui/de/role_actions.xml  |  91 +++++++-------
 indra/newview/skins/default/xui/de/strings.xml     |  22 +++-
 21 files changed, 247 insertions(+), 180 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/de/floater_avatar_picker.xml b/indra/newview/skins/default/xui/de/floater_avatar_picker.xml
index 6eb99f8b42..f66b87b76c 100644
--- a/indra/newview/skins/default/xui/de/floater_avatar_picker.xml
+++ b/indra/newview/skins/default/xui/de/floater_avatar_picker.xml
@@ -26,7 +26,10 @@ Person ein:
 			</text>
 			<line_editor bottom_delta="-76" name="Edit" top_pad="16"/>
 			<button label="Los" label_selected="Los" name="Find" top="70"/>
-			<scroll_list top="80" height="54" name="SearchResults"/>
+			<scroll_list height="54" name="SearchResults" top="80">
+				<columns label="Name" name="name"/>
+				<columns label="Benutzername" name="username"/>
+			</scroll_list>
 		</panel>
 		<panel label="Freunde" name="FriendsPanel">
 			<text name="InstructSelectFriend">
@@ -41,24 +44,11 @@ Person ein:
 			<text name="meters">
 				Meter
 			</text>
-            <button
-             follows="top|left"
-             layout="topleft"
-             left_pad="0"
-             height="28"
-             width="28"
-             name="Refresh"
-             image_overlay="Refresh_Off" />
-            <scroll_list
-             follows="all"
-             height="100"
-             border="false"
-             layout="topleft"
-             left="0"
-             name="NearMe"
-             sort_column="0"
-             top="50"
-             width="132" />
+			<button follows="top|left" height="28" image_overlay="Refresh_Off" layout="topleft" left_pad="0" name="Refresh" width="28"/>
+			<scroll_list border="false" follows="all" height="100" layout="topleft" left="0" name="NearMe" sort_column="0" top="50" width="132">
+				<columns label="Name" name="name"/>
+				<columns label="Benutzername" name="username"/>
+			</scroll_list>
 		</panel>
 	</tab_container>
 	<button label="OK" label_selected="OK" name="ok_btn"/>
diff --git a/indra/newview/skins/default/xui/de/floater_bumps.xml b/indra/newview/skins/default/xui/de/floater_bumps.xml
index dafca44fa3..5d02511ab1 100644
--- a/indra/newview/skins/default/xui/de/floater_bumps.xml
+++ b/indra/newview/skins/default/xui/de/floater_bumps.xml
@@ -4,19 +4,19 @@
 		Nicht erkannt
 	</floater.string>
 	<floater.string name="bump">
-		[TIME]  [FIRST] [LAST] hat Sie gestoßen
+		[TIME]  [NAME] hat Sie gestoßen
 	</floater.string>
 	<floater.string name="llpushobject">
-		[TIME]  [FIRST] [LAST] hat Sie mit einem Skript gestoßen
+		[TIME]  [NAME] hat Sie mit einem Skript gestoßen
 	</floater.string>
 	<floater.string name="selected_object_collide">
-		[TIME]  [FIRST] [LAST] hat Sie mit einem Objekt getroffen
+		[TIME]  [NAME] hat Sie mit einem Objekt getroffen
 	</floater.string>
 	<floater.string name="scripted_object_collide">
-		[TIME]  [FIRST] [LAST] hat Sie mit einem Skript-Objekt getroffen
+		[TIME]  [NAME] hat Sie mit einem Skript-Objekt getroffen
 	</floater.string>
 	<floater.string name="physical_object_collide">
-		[TIME]  [FIRST] [LAST] hat Sie mit einem physischen Objekt getroffen
+		[TIME]  [NAME] hat Sie mit einem physischen Objekt getroffen
 	</floater.string>
 	<floater.string name="timeStr">
 		[[hour,datetime,slt]:[min,datetime,slt]]
diff --git a/indra/newview/skins/default/xui/de/floater_buy_object.xml b/indra/newview/skins/default/xui/de/floater_buy_object.xml
index c697014b04..29b49f57b3 100644
--- a/indra/newview/skins/default/xui/de/floater_buy_object.xml
+++ b/indra/newview/skins/default/xui/de/floater_buy_object.xml
@@ -1,26 +1,29 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater name="contents" title="KOPIE DES OBJEKTES KAUFEN">
-	<text name="contents_text">
-		Inhalt:
-	</text>
-	<text name="buy_text">
-		[AMOUNT] L$ von [NAME] kaufen?
-	</text>
-	<button label="Abbrechen" label_selected="Abbrechen" name="cancel_btn"/>
-	<button label="Kaufen" label_selected="Kaufen" name="buy_btn"/>
-	<text name="title_buy_text">
+	<floater.string name="title_buy_text">
 		Kaufen
-	</text>
-	<string name="title_buy_copy_text">
+	</floater.string>
+	<floater.string name="title_buy_copy_text">
 		Kopie kaufen von
-	</string>
-	<text name="no_copy_text">
+	</floater.string>
+	<floater.string name="no_copy_text">
 		(kein Kopieren)
-	</text>
-	<text name="no_modify_text">
+	</floater.string>
+	<floater.string name="no_modify_text">
 		(kein Bearbeiten)
-	</text>
-	<text name="no_transfer_text">
+	</floater.string>
+	<floater.string name="no_transfer_text">
 		(kein Transferieren)
+	</floater.string>
+	<text name="contents_text">
+		Inhalt:
+	</text>
+	<text name="buy_text">
+		[AMOUNT] L$ kaufen von:
+	</text>
+	<text name="buy_name_text">
+		[NAME]?
 	</text>
+	<button label="Kaufen" label_selected="Kaufen" name="buy_btn"/>
+	<button label="Abbrechen" label_selected="Abbrechen" name="cancel_btn"/>
 </floater>
diff --git a/indra/newview/skins/default/xui/de/floater_event.xml b/indra/newview/skins/default/xui/de/floater_event.xml
index 87fb580aba..5b3267d7c9 100644
--- a/indra/newview/skins/default/xui/de/floater_event.xml
+++ b/indra/newview/skins/default/xui/de/floater_event.xml
@@ -1,40 +1,11 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater
- follows="all"
- height="400"
- can_resize="true"
- help_topic="event_details"
- label="Event"
- layout="topleft"
- name="Event"
- save_rect="true"
- save_visibility="false"
- title="EVENT DETAILS" 
- width="600">
-	<floater.string
-		name="loading_text">
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater can_resize="true" follows="all" height="400" help_topic="event_details" label="Event" layout="topleft" name="Event" save_rect="true" save_visibility="false" title="EVENT DETAILS" width="600">
+	<floater.string name="loading_text">
 		Wird geladen...
 	</floater.string>
-    <floater.string
-     name="done_text">
-        Done
-    </floater.string>
-  <web_browser
-     trusted_content="true" 
-     follows="left|right|top|bottom"
-     layout="topleft"
-     left="10"
-     name="browser"
-     height="365"
-     width="580"
-     top="0"/>
-	<text
-	 follows="bottom|left"
-	 height="16"
-	 layout="topleft"
-	 left_delta="0"
-	 name="status_text"
-	 top_pad="10"
-	 width="150" />	 
+	<floater.string name="done_text">
+		Fertig
+	</floater.string>
+	<web_browser follows="left|right|top|bottom" height="365" layout="topleft" left="10" name="browser" top="0" trusted_content="true" width="580"/>
+	<text follows="bottom|left" height="16" layout="topleft" left_delta="0" name="status_text" top_pad="10" width="150"/>
 </floater>
-
diff --git a/indra/newview/skins/default/xui/de/floater_incoming_call.xml b/indra/newview/skins/default/xui/de/floater_incoming_call.xml
index 0312f7dfe9..213d9f54f5 100644
--- a/indra/newview/skins/default/xui/de/floater_incoming_call.xml
+++ b/indra/newview/skins/default/xui/de/floater_incoming_call.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="incoming call" title="ANRUF VON UNBEKANNT">
+<floater name="incoming call" title="Eingehender Anruf">
 	<floater.string name="lifetime">
 		5
 	</floater.string>
diff --git a/indra/newview/skins/default/xui/de/floater_pay.xml b/indra/newview/skins/default/xui/de/floater_pay.xml
index ec3c45dccf..a0a622ecbc 100644
--- a/indra/newview/skins/default/xui/de/floater_pay.xml
+++ b/indra/newview/skins/default/xui/de/floater_pay.xml
@@ -11,7 +11,7 @@
 	</text>
 	<icon name="icon_person" tool_tip="Person"/>
 	<text left="130" name="payee_name">
-		[FIRST] [LAST]
+		Extrem langen Namen testen, um zu prüfen, ob er abgeschnitten wird
 	</text>
 	<button label="1 L$" label_selected="1 L$" name="fastpay 1"/>
 	<button label="5 L$" label_selected="5 L$" name="fastpay 5"/>
diff --git a/indra/newview/skins/default/xui/de/floater_pay_object.xml b/indra/newview/skins/default/xui/de/floater_pay_object.xml
index 59494cc100..7159bbadb3 100644
--- a/indra/newview/skins/default/xui/de/floater_pay_object.xml
+++ b/indra/newview/skins/default/xui/de/floater_pay_object.xml
@@ -8,7 +8,7 @@
 	</string>
 	<icon name="icon_person" tool_tip="Person"/>
 	<text left="128" name="payee_name" width="168">
-		[FIRST] [LAST]
+		Ericacita Moostopolison
 	</text>
 	<text halign="left" name="object_name_label">
 		Über Objekt:
diff --git a/indra/newview/skins/default/xui/de/floater_tools.xml b/indra/newview/skins/default/xui/de/floater_tools.xml
index fe4c505cee..2d30814974 100644
--- a/indra/newview/skins/default/xui/de/floater_tools.xml
+++ b/indra/newview/skins/default/xui/de/floater_tools.xml
@@ -171,13 +171,13 @@
 				Ersteller:
 			</text>
 			<text name="Creator Name">
-				Esbee Linden
+				Frau Esbee Linden (esbee.linden)
 			</text>
 			<text name="Owner:">
 				Eigentümer:
 			</text>
 			<text name="Owner Name">
-				Erica Linden
+				Frau Erica &quot;Elch&quot; Linden (erica.linden)
 			</text>
 			<text name="Group:">
 				Gruppe:
diff --git a/indra/newview/skins/default/xui/de/floater_voice_controls.xml b/indra/newview/skins/default/xui/de/floater_voice_controls.xml
index 22f2fd93ab..c97852b6e7 100644
--- a/indra/newview/skins/default/xui/de/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/de/floater_voice_controls.xml
@@ -19,7 +19,7 @@
 		<layout_panel name="my_panel">
 			<text name="user_text" value="Mein Avatar:"/>
 		</layout_panel>
-        <layout_panel name="leave_call_panel">
+		<layout_panel name="leave_call_panel">
 			<layout_stack name="voice_effect_and_leave_call_stack">
 				<layout_panel name="leave_call_btn_panel">
 					<button label="Anruf beenden" name="leave_call_btn"/>
diff --git a/indra/newview/skins/default/xui/de/inspect_avatar.xml b/indra/newview/skins/default/xui/de/inspect_avatar.xml
index a0bd24a69f..92d9bc37c4 100644
--- a/indra/newview/skins/default/xui/de/inspect_avatar.xml
+++ b/indra/newview/skins/default/xui/de/inspect_avatar.xml
@@ -10,10 +10,12 @@
 	<string name="Details">
 		[SL_PROFILE]
 	</string>
+	<text name="user_name_small" value="Launische Produktengine mit langem Namen"/>
 	<text name="user_name" value="Grumpity ProductEngine"/>
+	<text name="user_slid" value="james.linden"/>
 	<text name="user_subtitle" value="11 Monate und 3 Tage alt"/>
 	<text name="user_details">
-		Dies ist meine Beschreibung und ich finde sie wirklich gut!
+		Dies ist meine Second Life-Beschreibung und ich finde sie wirklich gut! Meine Beschreibung ist deshalb so lang, weil ich gerne rede.
 	</text>
 	<slider name="volume_slider" tool_tip="Lautstärke" value="0.5"/>
 	<button label="Freund hinzufügen" name="add_friend_btn" width="110"/>
diff --git a/indra/newview/skins/default/xui/de/menu_viewer.xml b/indra/newview/skins/default/xui/de/menu_viewer.xml
index bb9a4c8354..489990608f 100644
--- a/indra/newview/skins/default/xui/de/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/de/menu_viewer.xml
@@ -85,6 +85,7 @@
 			<menu_item_call label="Kopie nehmen" name="Take Copy"/>
 			<menu_item_call label="Objekt wieder in meinem Inventar speichern" name="Save Object Back to My Inventory"/>
 			<menu_item_call label="Wieder in Objektinhalt speichern" name="Save Object Back to Object Contents"/>
+			<menu_item_call label="Objekt zurückgeben" name="Return Object back to Owner"/>
 		</menu>
 		<menu label="Skripts" name="Scripts">
 			<menu_item_call label="Skripts rekompilieren (Mono)" name="Mono"/>
@@ -98,6 +99,7 @@
 			<menu_item_check label="Nur meine Objekte auswählen" name="Select Only My Objects"/>
 			<menu_item_check label="Nur bewegliche Objekte auswählen" name="Select Only Movable Objects"/>
 			<menu_item_check label="Nach Umgebung auswählen" name="Select By Surrounding"/>
+			<menu_item_check label="Auswahlumrandung anzeigen" name="Show Selection Outlines"/>
 			<menu_item_check label="Ausgeblendete Auswahl anzeigen" name="Show Hidden Selection"/>
 			<menu_item_check label="Lichtradius für Auswahl anzeigen" name="Show Light Radius for Selection"/>
 			<menu_item_check label="Auswahlstrahl anzeigen" name="Show Selection Beam"/>
@@ -118,6 +120,7 @@
 		<menu_item_call label="Missbrauch melden" name="Report Abuse"/>
 		<menu_item_call label="Fehler melden" name="Report Bug"/>
 		<menu_item_call label="INFO ÜBER [APP_NAME]" name="About Second Life"/>
+		<menu_item_check label="Hinweise aktivieren" name="Enable Hints"/>
 	</menu>
 	<menu label="Erweitert" name="Advanced">
 		<menu_item_call label="Animation meines Avatars stoppen" name="Stop Animating My Avatar"/>
@@ -309,7 +312,7 @@
 			<menu_item_call label="Ausgewählte Objektinfo drucken" name="Print Selected Object Info"/>
 			<menu_item_call label="Agent-Info drucken" name="Print Agent Info"/>
 			<menu_item_call label="Speicher-Stats" name="Memory Stats"/>
-			<menu_item_check label="Doppelklicken: Auto-Pilot" name="Double-Click Auto-Pilot"/>
+			<menu_item_check label="Doppelklicken: Auto-Pilot" name="Double-ClickAuto-Pilot"/>
 			<menu_item_check label="Doppelklicken: Teleport" name="DoubleClick Teleport"/>
 			<menu_item_check label="Fehler in SelectMgr beseitigen" name="Debug SelectMgr"/>
 			<menu_item_check label="Fehler in Klicks beseitigen" name="Debug Clicks"/>
@@ -326,6 +329,7 @@
 			<menu_item_call label="Als XML speichern" name="Save to XML"/>
 			<menu_item_check label="XUI-Namen anzeigen" name="Show XUI Names"/>
 			<menu_item_call label="Test-IMs senden" name="Send Test IMs"/>
+			<menu_item_call label="Namen-Cache leeren" name="Flush Names Caches"/>
 		</menu>
 		<menu label="Avatar" name="Character">
 			<menu label="Geladene Textur nehmen" name="Grab Baked Texture">
diff --git a/indra/newview/skins/default/xui/de/notifications.xml b/indra/newview/skins/default/xui/de/notifications.xml
index c518c193a0..c2ca0c2fb0 100644
--- a/indra/newview/skins/default/xui/de/notifications.xml
+++ b/indra/newview/skins/default/xui/de/notifications.xml
@@ -110,8 +110,8 @@ Wählen Sie ein einzelnes Objekt aus und versuchen Sie es erneut.
 		<usetemplate name="okbutton" yestext="Ja"/>
 	</notification>
 	<notification name="GrantModifyRights">
-		Wenn Sie einem anderen Einwohner die Erlaubnis zum Bearbeiten erteilen, dann kann dieser JEDES Objekt, das Sie inworld besitzen, verändern, löschen oder nehmen. Seien Sie SEHR vorsichtig, wenn Sie diese Erlaubnis gewähren!
-Möchten Sie [FIRST_NAME] [LAST_NAME] die Erlaubnis zum Bearbeiten gewähren?
+		Wenn Sie einem anderen Einwohner Änderungsrechte gewähren, dann kann dieser JEDES Objekt, das Sie inworld besitzen, ändern, löschen oder an sich nehmen. Seien Sie daher beim Gewähren dieser Rechte sehr vorsichtig!
+Möchten Sie [NAME] Änderungsrechte gewähren?
 		<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
 	</notification>
 	<notification name="GrantModifyRightsMultiple">
@@ -120,7 +120,7 @@ Möchten Sie den ausgewählten Einwohnern Änderungsrechte gewähren?
 		<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
 	</notification>
 	<notification name="RevokeModifyRights">
-		Möchten Sie [FIRST_NAME] [LAST_NAME] die Änderungsrechte entziehen?
+		Möchten Sie [NAME] die Änderungsrechte entziehen?
 		<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
 	</notification>
 	<notification name="RevokeModifyRightsMultiple">
@@ -324,17 +324,17 @@ Der Outfit-Ordner enthält keine Kleidung, Körperteile oder Anhänge.
 		Sie können das Objekt nicht anziehen, weil es noch nicht geladen wurde. Warten Sie kurz und versuchen Sie es dann noch einmal.
 	</notification>
 	<notification name="MustHaveAccountToLogIn">
-		Hoppla! Da fehlt noch etwas.
-Geben Sie bitte den Vor- und den Nachnamen Ihres Avatars ein.
+		Sue haben ein Feld leer gelassen.
+Sie müssen den Benutzernamen Ihres Avatars eingeben.
 
-Sie benötigen ein Benutzerkonto, um [SECOND_LIFE] betreten zu können. Möchten Sie jetzt ein Benutzerkonto anlegen?
+Sie benötigen ein Konto, um [SECOND_LIFE] betreten zu können. Möchten Sie jetzt ein Konto erstellen?
 		<url name="url">
 			https://join.secondlife.com/index.php?lang=de-DE
 		</url>
 		<usetemplate name="okcancelbuttons" notext="Erneut versuchen" yestext="Neues Benutzerkonto anlegen"/>
 	</notification>
 	<notification name="InvalidCredentialFormat">
-		Sie müssen den Vor- und Nachnamen Ihres Avatars in das Feld Benutzername eingeben, und sich dann erneut anmelden.
+		Sie müssen entweder den Benutzernamen oder den Vor- und Nachnamen Ihres Avatars in das Feld „Benutzername“ eingeben und die Anmeldung dann erneut versuchen.
 	</notification>
 	<notification name="AddClassified">
 		Anzeigen werden im Suchverzeichnis im Abschnitt „Anzeigen&quot; und auf [http://secondlife.com/community/classifieds secondlife.com] für eine Woche angezeigt.
@@ -932,12 +932,6 @@ Dies ist ein temporärer Fehler. Bitte passen Sie das Kleidungsstück in einigen
 		Landkauf für Gruppe nicht möglich:
 Sie sind nicht berechtigt, Land für die aktive Gruppe zu kaufen.
 	</notification>
-	<notification label="Freund hinzufügen" name="AddFriend">
-		Freunde können sich gegenseitig die Berechtigung erteilen, sich auf der Karte zu sehen und den Online-Status anzuzeigen.
-
-[NAME] Freundschaft anbieten?
-		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
-	</notification>
 	<notification label="Freund hinzufügen" name="AddFriendWithMessage">
 		Freunde können sich gegenseitig die Berechtigung erteilen, sich auf der Karte zu sehen und den Online-Status anzuzeigen.
 
@@ -981,7 +975,7 @@ Sie sind nicht berechtigt, Land für die aktive Gruppe zu kaufen.
 		</form>
 	</notification>
 	<notification name="RemoveFromFriends">
-		Möchten Sie [FIRST_NAME] [LAST_NAME] aus Ihrer Freundesliste entfernen?
+		Möchten Sie [NAME] aus Ihrer Freundesliste entfernen?
 		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
 	</notification>
 	<notification name="RemoveMultipleFromFriends">
@@ -1104,11 +1098,10 @@ Der Gruppe „[GROUP_NAME]“
 	</notification>
 	<notification name="DeedLandToGroupWithContribution">
 		Die Schenkung dieser Parzelle setzt voraus, dass die Gruppe über ausreichende Landnutzungsrechte verfügt.
-Die Schenkung beinhaltet eine Landübertragung an die Gruppe von „[FIRST_NAME] [LAST_NAME]“.
+Die Schenkung beinhaltet eine Landübertragung an die Gruppe von „[NAME]“.
 Dem Eigentümer wird der Kaufpreis für das Land nicht rückerstattet. Bei Verkauf der übertragenen Parzelle wird der Erlös zwischen den Gruppenmitgliedern aufgeteilt.
 
-Der Gruppe „[GROUP_NAME]“
- [AREA] m² Land schenken?
+Der Gruppe „[GROUP_NAME]“ [AREA] m² an Land schenken?
 		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
 	</notification>
 	<notification name="DisplaySetToSafe">
@@ -1479,6 +1472,46 @@ Chat und Instant Messages werden ausgeblendet. Instant Messages (Sofortnachricht
 			<button name="Cancel" text="Abbrechen"/>
 		</form>
 	</notification>
+	<notification name="SetDisplayNameSuccess">
+		Hallo [DISPLAY_NAME],
+
+wir bitten Sie um Geduld, während Ihr Name im System geändert wird. Es kann einige Tage dauern, bis Ihr [http://wiki.secondlife.com/wiki/Setting_your_display_name neuer Name] in Objekten, Skripts, Suchen usw. erscheint.
+	</notification>
+	<notification name="SetDisplayNameBlocked">
+		Ihr Anzeigename kann leider nicht geändert werden. Wenn Sie der Ansicht sind, dass Sie diese Meldung fälschlicherweise erhalten haben, wenden Sie sich bitte an unseren Support.
+	</notification>
+	<notification name="SetDisplayNameFailedLength">
+		Dieser Name ist leider zu lang. Anzeigenamen können maximal [LENGTH] Zeichen enthalten.
+
+Wählen Sie einen kürzeren Namen.
+	</notification>
+	<notification name="SetDisplayNameFailedGeneric">
+		Ihr Anzeigename konnte leider nicht festgelegt werden. Versuchen Sie es später erneut.
+	</notification>
+	<notification name="SetDisplayNameMismatch">
+		Die eingegebenen Anzeigenamen stimmen nicht überein. Wiederholen Sie die Eingabe.
+	</notification>
+	<notification name="AgentDisplayNameUpdateThresholdExceeded">
+		Sie müssen leider noch ein bisschen warten, bevor Sie Ihren Anzeigenamen ändern können.
+
+Weitere Informationen finden Sie unter http://wiki.secondlife.com/wiki/Setting_your_display_name.
+
+Versuchen Sie es später erneut.
+	</notification>
+	<notification name="AgentDisplayNameSetBlocked">
+		Der angeforderte Name enthält ein unzulässiges Wort und konnte deshalb nicht festgelegt werden.
+ 
+ Versuchen Sie einen anderen Namen.
+	</notification>
+	<notification name="AgentDisplayNameSetInvalidUnicode">
+		Der gewünschte Anzeigename enthält ungültige Zeichen.
+	</notification>
+	<notification name="AgentDisplayNameSetOnlyPunctuation">
+		Ihr Anzeigenamen muss Buchstaben enthalten und kann nicht ausschließlich aus Satzzeichen bestehen.
+	</notification>
+	<notification name="DisplayNameUpdate">
+		[OLD_NAME] ([OLD_NAME] ([SLID]) hat einen neuen Namen: [NEW_NAME].
+	</notification>
 	<notification name="OfferTeleport">
 		Teleport an Ihre Position mit der folgenden Meldung anbieten?
 		<form name="form">
@@ -2047,10 +2080,10 @@ Von einer Webseite zu diesem Formular linken, um anderen leichten Zugang zu dies
 		Betreff: [SUBJECT], Nachricht: [MESSAGE]
 	</notification>
 	<notification name="FriendOnline">
-		[FIRST] [LAST] ist online
+		[NAME] ist online
 	</notification>
 	<notification name="FriendOffline">
-		[FIRST] [LAST] ist offline
+		[NAME] ist offline
 	</notification>
 	<notification name="AddSelfFriend">
 		Obwohl Sie ein sehr netter Mensch sind, können Sie sich nicht selbst als Freund hinzufügen.
@@ -2117,9 +2150,6 @@ Dies kann die Eingabe Ihres Passworts beeinflussen.
 	<notification name="CannotRemoveProtectedCategories">
 		Geschützte Kategorien können nicht entfernt werden.
 	</notification>
-	<notification name="OfferedCard">
-		Sie haben [FIRST] [LAST] eine Visitenkarte angeboten.
-	</notification>
 	<notification name="UnableToBuyWhileDownloading">
 		Kauf nicht möglich. Objektdaten werden noch geladen.
 Bitte versuchen Sie es erneut.
@@ -2190,7 +2220,10 @@ Wählen Sie eine kleinere Landfläche.
 	<notification name="SystemMessage">
 		[MESSAGE]
 	</notification>
-	<notification name="PaymentRecived">
+	<notification name="PaymentReceived">
+		[MESSAGE]
+	</notification>
+	<notification name="PaymentSent">
 		[MESSAGE]
 	</notification>
 	<notification name="EventNotification">
@@ -2199,7 +2232,7 @@ Wählen Sie eine kleinere Landfläche.
 [NAME]
 [DATE]
 		<form name="form">
-			<button name="Details" text="Beschreibung"/>
+			<button name="Details" text="Details"/>
 			<button name="Cancel" text="Abbrechen"/>
 		</form>
 	</notification>
@@ -2235,7 +2268,7 @@ Bitte installieren Sie das Plugin erneut. Falls weiterhin Problem auftreten, kon
 		Ihre Objekte auf der ausgewählten Parzelle wurden in Ihr Inventar transferiert.
 	</notification>
 	<notification name="OtherObjectsReturned">
-		Die Objekte von [FIRST] [LAST] auf dieser Parzelle wurden in das Inventar dieser Person transferiert.
+		Alle Objekte auf der ausgewählten Parzelle, die Einwohner „[NAME]“ gehören, wurden an ihren Eigentümer zurückgegeben.
 	</notification>
 	<notification name="OtherObjectsReturned2">
 		Alle Objekte auf der ausgewählten Parzelle, die Einwohner &apos;[NAME]&apos; gehören, wurden an ihren Eigentümern zurückgegeben.
@@ -2362,7 +2395,7 @@ Versuchen Sie es in einigen Minuten erneut.
 		Es konnte keine gültige Parzelle gefunden werden.
 	</notification>
 	<notification name="ObjectGiveItem">
-		Ein Objekt namens [OBJECTFROMNAME] von [NAME_SLURL] hat Ihnen folgendes übergeben [OBJECTTYPE]:
+		Ein Objekt namens &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt;, das [NAME_SLURL] gehört, hat Ihnen folgende/n/s [OBJECTTYPE] übergeben:
 [ITEM_SLURL]
 		<form name="form">
 			<button name="Keep" text="Behalten"/>
@@ -2427,9 +2460,9 @@ Versuchen Sie es in einigen Minuten erneut.
 		Sie haben [TO_NAME] die Freundschaft angeboten.
 	</notification>
 	<notification name="OfferFriendshipNoMessage">
-		[NAME] bietet Ihnen die Freundschaft an.
+		[NAME_SLURL] bietet die Freundschaft an.
 
-(Sie werden dadurch den gegenseitigen Online-Status sehen können.)
+(Standardmäßig können Sie gegenseitig ihren Online-Status sehen.)
 		<form name="form">
 			<button name="Accept" text="Akzeptieren"/>
 			<button name="Decline" text="Ablehnen"/>
@@ -2468,7 +2501,7 @@ Wenn Sie in dieser Region bleiben, werden Sie abgemeldet.
 
 [MESSAGE]
 
-Von Objekt: [OBJECTNAME], Eigentümer: [NAME]?
+Von Objekt: &lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;, Eigentümer: [NAME]?
 		<form name="form">
 			<button name="Gotopage" text="Zur Seite"/>
 			<button name="Cancel" text="Abbrechen"/>
@@ -2484,7 +2517,7 @@ Von Objekt: [OBJECTNAME], Eigentümer: [NAME]?
 		Dieser Artikel verwendet eine Funktion, die Ihr Viewer nicht unterstützt. Bitte aktualisieren Sie Ihre Version von [APP_NAME], um dieses Objekt anziehen zu können.
 	</notification>
 	<notification name="ScriptQuestion">
-		Das Objekt „[OBJECTNAME]“, Eigentum von „[NAME]“, möchte:
+		Das Objekt „&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;“, das „[NAME]“ gehört, stellt folgende Anfrage:
 
 [QUESTIONS]
 Ist das OK?
@@ -2495,7 +2528,7 @@ Ist das OK?
 		</form>
 	</notification>
 	<notification name="ScriptQuestionCaution">
-		Ein Objekt namens „[OBJECTNAME]“ des Eigentümers „[NAME]“ möchte:
+		Das Objekt „&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;“, das „[NAME]“ gehört, stellt folgende Anfrage:
 
 [QUESTIONS]
 Wenn Sie diesem Objekt und seinem Ersteller nicht vertrauen, sollten Sie diese Anfrage ablehnen.
@@ -2508,14 +2541,14 @@ Anfrage gestatten?
 		</form>
 	</notification>
 	<notification name="ScriptDialog">
-		[FIRST] [LAST]s „[TITLE]“
+		„&lt;nolink&gt;[TITLE]&lt;/nolink&gt;“ von [NAME]
 [MESSAGE]
 		<form name="form">
 			<button name="Ignore" text="Ignorieren"/>
 		</form>
 	</notification>
 	<notification name="ScriptDialogGroup">
-		[GROUPNAME]s „[TITLE]“
+		„&lt;nolink&gt;[TITLE]&lt;/nolink&gt;“ von [GROUPNAME]
 [MESSAGE]
 		<form name="form">
 			<button name="Ignore" text="Ignorieren"/>
@@ -2553,13 +2586,13 @@ Klicken Sie auf  &apos;Akzeptieren &apos;, um dem Gespräch beizutreten, oder au
 		</form>
 	</notification>
 	<notification name="AutoUnmuteByIM">
-		[FIRST] [LAST] hat eine Benachrichtigung erhalten und wird nicht länger ignoriert.
+		[NAME] hat eine Instant Message erhalten und wird nicht länger ignoriert.
 	</notification>
 	<notification name="AutoUnmuteByMoney">
-		[FIRST] [LAST] wurde bezahlt und wird nicht länger ignoriert.
+		[NAME] hat Geld erhalten und wird nicht länger ignoriert.
 	</notification>
 	<notification name="AutoUnmuteByInventory">
-		[FIRST] [LAST] wurde Inventar angeboten und wird nicht länger ignoriert.
+		[NAME] wurde ein Inventarobjekt angeboten und wird nicht länger ignoriert.
 	</notification>
 	<notification name="VoiceInviteGroup">
 		[NAME] ist einem Voice-Chat mit der Gruppe [GROUP] beigetreten.
@@ -2786,6 +2819,37 @@ auch dann stummgeschaltet werden, wenn Sie den Anruf verlassen haben.
 Alle stummschalten?
 		<usetemplate ignoretext="Bestätigen, bevor alle Teilnehmer in einem Gruppengespräch stummgeschaltet werden." name="okcancelignore" notext="Abbrechen" yestext="OK"/>
 	</notification>
+	<notification label="Chat" name="HintChat">
+		Um mitzureden, geben Sie Text in das Chat-Feld unten ein.
+	</notification>
+	<notification label="Stehen" name="HintSit">
+		Um aufzustehen, klicken Sie auf die Schaltfläche „Stehen“.
+	</notification>
+	<notification label="Welt erkunden" name="HintDestinationGuide">
+		Im Reiseführer finden Sie Tausende von interessanten Orten. Wählen Sie einfach einen Ort aus und klicken Sie auf „Teleportieren“.
+	</notification>
+	<notification label="Seitenleiste" name="HintSidePanel">
+		In der Seitenleiste können Sie schnell auf Ihr Inventar, Ihre Outfits, Ihre Profile u. ä. zugreifen.
+	</notification>
+	<notification label="Bewegen" name="HintMove">
+		Um zu gehen oder zu rennen, öffnen Sie das Bedienfeld „Bewegen“ und klicken Sie auf die Pfeile. Sie können auch die Pfeiltasten auf Ihrer Tastatur verwenden.
+	</notification>
+	<notification label="Anzeigename" name="HintDisplayName">
+		Hier können Sie Ihren anpassbaren Anzeigenamen festlegen. Der Anzeigename unterscheidet sich von Ihrem eindeutigen Benutzernamen, der nicht geändert werden kann. In den Einstellungen können Sie festlegen, welcher Name von anderen Einwohnern angezeigt wird.
+	</notification>
+	<notification label="Inventar" name="HintInventory">
+		In Ihrem Inventar befinden sich verschiedene Objekte. Die neuesten Objekte finden Sie in der Registerkarte „Aktuell“.
+	</notification>
+	<notification label="Sie haben Linden-Dollar!" name="HintLindenDollar">
+		Hier wird Ihr aktueller L$-Kontostand angezeigt. Klicken Sie auf „L$ kaufen“, um mehr Linden-Dollar zu kaufen.
+	</notification>
+	<notification name="PopupAttempt">
+		Ein Popup konnte nicht geöffnet werden.
+		<form name="form">
+			<ignore name="ignore" text="Alle Popups aktivieren"/>
+			<button name="open" text="Popup-Fenster öffnen"/>
+		</form>
+	</notification>
 	<global name="UnsupportedCPU">
 		- Ihre CPU-Geschwindigkeit entspricht nicht den Mindestanforderungen.
 	</global>
diff --git a/indra/newview/skins/default/xui/de/panel_edit_profile.xml b/indra/newview/skins/default/xui/de/panel_edit_profile.xml
index b689856f8c..7f6054dd60 100644
--- a/indra/newview/skins/default/xui/de/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/de/panel_edit_profile.xml
@@ -26,6 +26,14 @@
 	<scroll_container name="profile_scroll">
 		<panel name="scroll_content_panel">
 			<panel name="data_panel">
+				<text name="display_name_label" value="Anzeigename:"/>
+				<text name="solo_username_label" value="Benutzername:"/>
+				<button name="set_name" tool_tip="Anzeigenamen festlegen"/>
+				<text name="solo_user_name" value="Hamilton Hitchings"/>
+				<text name="user_name" value="Hamilton Hitchings"/>
+				<text name="user_name_small" value="Hamilton Hitchings"/>
+				<text name="user_label" value="Benutzername:"/>
+				<text name="user_slid" value="hamilton.linden"/>
 				<panel name="lifes_images_panel">
 					<panel name="second_life_image_panel">
 						<text name="second_life_photo_title_text" value="[SECOND_LIFE]:"/>
@@ -46,7 +54,7 @@
 				<text name="my_account_link" value="[[URL] Meine Startseite aufrufen]"/>
 				<text name="title_partner_text" value="Mein Partner:"/>
 				<panel name="partner_data_panel">
-					<name_box initial_value="(wird in Datenbank gesucht)" name="partner_text" value="[FIRST] [LAST]"/>
+					<text initial_value="(wird in Datenbank gesucht)" name="partner_text" value="[FIRST] [LAST]"/>
 				</panel>
 				<text name="partner_edit_link" value="[[URL] bearbeiten]"/>
 			</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_group_land_money.xml b/indra/newview/skins/default/xui/de/panel_group_land_money.xml
index 125bf1436e..d9d237be2e 100644
--- a/indra/newview/skins/default/xui/de/panel_group_land_money.xml
+++ b/indra/newview/skins/default/xui/de/panel_group_land_money.xml
@@ -24,6 +24,7 @@
 			<scroll_list.columns label="Region" name="location"/>
 			<scroll_list.columns label="Typ" name="type"/>
 			<scroll_list.columns label="Gebiet" name="area"/>
+			<scroll_list.columns label="Ausgeblendet" name="hidden"/>
 		</scroll_list>
 		<text name="total_contributed_land_label">
 			Gesamtbeitrag:
diff --git a/indra/newview/skins/default/xui/de/panel_login.xml b/indra/newview/skins/default/xui/de/panel_login.xml
index b373be4382..0fc4fa7117 100644
--- a/indra/newview/skins/default/xui/de/panel_login.xml
+++ b/indra/newview/skins/default/xui/de/panel_login.xml
@@ -11,7 +11,7 @@
 			<text name="username_text">
 				Benutzername:
 			</text>
-			<line_editor label="Benutzername" name="username_edit" tool_tip="[SECOND_LIFE]-Benutzername"/>
+			<line_editor label="berndschmidt12 oder Liebe Sonne" name="username_edit" tool_tip="Bei der Registrierung gewählter Benutzername wie „berndschmidt12“ oder „Liebe Sonne“"/>
 			<text name="password_text">
 				Kennwort:
 			</text>
@@ -31,7 +31,7 @@
 				Registrieren
 			</text>
 			<text name="forgot_password_text">
-				Namen oder Kennwort vergessen?
+				Benutzernamen oder Kennwort vergessen?
 			</text>
 			<text name="login_help">
 				Sie brauchen Hilfe?
diff --git a/indra/newview/skins/default/xui/de/panel_place_profile.xml b/indra/newview/skins/default/xui/de/panel_place_profile.xml
index 9d1a582b7c..555fa56d57 100644
--- a/indra/newview/skins/default/xui/de/panel_place_profile.xml
+++ b/indra/newview/skins/default/xui/de/panel_place_profile.xml
@@ -80,7 +80,7 @@
 						<text name="region_rating_label" value="Einstufung:"/>
 						<text name="region_rating" value="Adult"/>
 						<text name="region_owner_label" value="Eigentümer:"/>
-						<text name="region_owner" value="moose Van Moose"/>
+						<text name="region_owner" value="Elch von Elch extra langer Name Elch"/>
 						<text name="region_group_label" value="Gruppe:"/>
 						<text name="region_group">
 							The Mighty Moose of mooseville soundvillemoose
@@ -93,6 +93,7 @@
 						<text name="estate_name_label" value="Grundbesitz:"/>
 						<text name="estate_rating_label" value="Einstufung:"/>
 						<text name="estate_owner_label" value="Eigentümer:"/>
+						<text name="estate_owner" value="Länge des Eigentümernamens mit langem Namen testen"/>
 						<text name="covenant_label" value="Vertrag:"/>
 					</panel>
 				</accordion_tab>
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_general.xml b/indra/newview/skins/default/xui/de/panel_preferences_general.xml
index b59a779853..8492d36bc7 100644
--- a/indra/newview/skins/default/xui/de/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_general.xml
@@ -44,9 +44,10 @@
 		<radio_item label="An" name="radio2" value="1"/>
 		<radio_item label="Kurz anzeigen" name="radio3" value="2"/>
 	</radio_group>
-	<check_box label="Meinen Namen anzeigen" name="show_my_name_checkbox1"/>
-	<check_box initial_value="true" label="Kleine Avatarnamen" name="small_avatar_names_checkbox"/>
-	<check_box label="Gruppentitel anzeigen" name="show_all_title_checkbox1"/>
+	<check_box label="Mein Name" name="show_my_name_checkbox1"/>
+	<check_box label="Benutzernamen" name="show_slids" tool_tip="Benutzernamen wie berndschmidt123 anzeigen"/>
+	<check_box label="Gruppentitel" name="show_all_title_checkbox1" tool_tip="Gruppentitel wie „Vorstand“ oder „Mitglied“"/>
+	<check_box label="Freunde hervorheben" name="show_friends" tool_tip="Avatarnamen Ihrer Freunde hervorheben"/>
 	<text name="effects_color_textbox">
 		Meine Effekte:
 	</text>
@@ -61,6 +62,7 @@
 		<combo_box.item label="30 Minuten" name="item3"/>
 		<combo_box.item label="nie" name="item4"/>
 	</combo_box>
+	<check_box label="Anzeigenamen anzeigen" name="display_names_check" tool_tip="Aktivieren Sie diese Option, um Anzeigenamen in Chat, IM, Avatarnamen usw. zu verwenden."/>
 	<text name="text_box3">
 		Antwort, wenn im „Beschäftigt“-Modus:
 	</text>
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_setup.xml b/indra/newview/skins/default/xui/de/panel_preferences_setup.xml
index 02c6fb0606..140b1ce7a4 100644
--- a/indra/newview/skins/default/xui/de/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_setup.xml
@@ -1,6 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="Hardware/Internet" name="Input panel">
-	<button label="Andere Geräte" name="joystick_setup_button"/>
 	<text name="Mouselook:">
 		Mouselook:
 	</text>
@@ -40,6 +39,7 @@
 	<check_box initial_value="true" label="Plugins aktivieren" name="browser_plugins_enabled"/>
 	<check_box initial_value="true" label="Cookies annehmen" name="cookies_enabled"/>
 	<check_box initial_value="true" label="Javascript aktivieren" name="browser_javascript_enabled"/>
+	<check_box initial_value="false" label="Medienbrowser-Popups aktivieren" name="media_popup_enabled"/>
 	<check_box initial_value="false" label="Web-Proxy aktivieren" name="web_proxy_enabled"/>
 	<text name="Proxy location">
 		Proxy-Standort:
diff --git a/indra/newview/skins/default/xui/de/panel_profile_view.xml b/indra/newview/skins/default/xui/de/panel_profile_view.xml
index f02457dd80..b44c128000 100644
--- a/indra/newview/skins/default/xui/de/panel_profile_view.xml
+++ b/indra/newview/skins/default/xui/de/panel_profile_view.xml
@@ -6,8 +6,14 @@
 	<string name="status_offline">
 		Offline
 	</string>
-	<text_editor name="user_name" value="(wird geladen...)"/>
+	<text name="display_name_label" value="Anzeigename:"/>
+	<text name="solo_username_label" value="Benutzername:"/>
 	<text name="status" value="Online"/>
+	<text name="user_name_small" value="Dieser Name ist ein ganz außerordentlich langer Name"/>
+	<text name="user_name" value="Jack Linden"/>
+	<button name="copy_to_clipboard" tool_tip="In Zwischenablage kopieren"/>
+	<text name="user_label" value="Benutzername:"/>
+	<text name="user_slid" value="jack.linden"/>
 	<tab_container name="tabs" tab_min_width="60">
 		<panel label="PROFIL" name="panel_profile"/>
 		<panel label="AUSWAHL" name="panel_picks"/>
diff --git a/indra/newview/skins/default/xui/de/role_actions.xml b/indra/newview/skins/default/xui/de/role_actions.xml
index b20fcabc82..5d9dcacd51 100644
--- a/indra/newview/skins/default/xui/de/role_actions.xml
+++ b/indra/newview/skins/default/xui/de/role_actions.xml
@@ -1,76 +1,73 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <role_actions>
 	<action_set description="Diese Fähigkeiten ermöglichen das Hinzufügen und Entfernen von Mitgliedern sowie den Beitritt ohne Einladung." name="Membership">
-		<action description="Personen in diese Gruppe einladen" longdescription="Leute in diese Gruppe mit der Schaltfläche „Einladen“ im Abschnitt „Rollen“ &gt; Registerkarte „Mitglieder“ in die Gruppe einladen." name="member invite"/>
-		<action description="Mitglieder aus dieser Gruppe werfen" longdescription="Leute aus dieser Gruppe mit der Schaltfläche „Hinauswerfen“ im Abschnitt „Rollen“ &gt; Registerkarte „Mitglieder“ aus der Gruppe werfen. Ein Eigentümer kann jeden, außer einen anderen Eigentümer, ausschließen. Wenn Sie kein Eigentümer sind, können Sie ein Mitglied nur dann aus der Gruppe werfen, wenn es die Rolle Jeder inne hat, jedoch KEINE andere Rolle. Um Mitgliedern Rollen entziehen zu können, müssen Sie über die Fähigkeit „Mitgliedern Rollen entziehen“ verfügen." name="member eject"/>
-		<action description="„Registrierung offen“ aktivieren/deaktivieren und „Beitrittsgebühr“ ändern." longdescription="„Registrierung offen“ aktivieren, um damit neue Mitglieder ohne Einladung beitreten können, und die „Beitrittsgebühr“ im Abschnitt „Allgemein“ ändern." name="member options"/>
+		<action description="Personen in diese Gruppe einladen" longdescription="Leute in diese Gruppe mit der Schaltfläche „Einladen“ im Abschnitt „Rollen“ &gt; Registerkarte „Mitglieder“ in die Gruppe einladen." name="member invite" value="1"/>
+		<action description="Mitglieder aus dieser Gruppe werfen" longdescription="Leute aus dieser Gruppe mit der Schaltfläche „Hinauswerfen“ im Abschnitt „Rollen“ &gt; Registerkarte „Mitglieder“ aus der Gruppe werfen. Ein Eigentümer kann jeden, außer einen anderen Eigentümer, ausschließen. Wenn Sie kein Eigentümer sind, können Sie ein Mitglied nur dann aus der Gruppe werfen, wenn es die Rolle Jeder inne hat, jedoch KEINE andere Rolle. Um Mitgliedern Rollen entziehen zu können, müssen Sie über die Fähigkeit „Mitgliedern Rollen entziehen“ verfügen." name="member eject" value="2"/>
+		<action description="„Registrierung offen“ aktivieren/deaktivieren und „Beitrittsgebühr“ ändern." longdescription="„Registrierung offen“ aktivieren, um damit neue Mitglieder ohne Einladung beitreten können, und die „Beitrittsgebühr“ im Abschnitt „Allgemein“ ändern." name="member options" value="3"/>
 	</action_set>
 	<action_set description="Diese Fähigkeiten ermöglichen das Hinzufügen, Entfernen und Ändern von Gruppenrollen, das Zuweisen und Entfernen von Rollen und das Zuweisen von Fähigkeiten zu Rollen." name="Roles">
-		<action description="Neue Rollen erstellen" longdescription="Neue Rollen im Abschnitt „Rollen“ &gt; Registerkarte „Rollen“ erstellen." name="role create"/>
-		<action description="Rollen löschen" longdescription="Neue Rollen im Abschnitt „Rollen“ &gt; Registerkarte „Rollen“ löschen." name="role delete"/>
-		<action description="Rollennamen, Titel, Beschreibungen und ob die Rolleninhaber öffentlich bekannt sein sollen, ändern." longdescription="Rollennamen, Titel, Beschreibungen und ob die Rolleninhaber öffentlich bekannt sein sollen, ändern. Dies wird im unteren Bereich des Abschnitts „Rollen“ &gt; Registerkarte „Rollen“ eingestellt, nachdem eine Rolle ausgewählt wurde." name="role properties"/>
-		<action description="Mitgliedern nur eigene Rollen zuweisen" longdescription="In der Liste „Rollen“ (Abschnitt „Rollen“ &gt; Registerkarte „Mitglieder“) können Mitgliedern Rollen zugewiesen werden. Ein Mitglied mit dieser Fähigkeit kann anderen Mitgliedern nur die eigenen Rollen zuweisen." name="role assign member limited"/>
-		<action description="Mitgliedern beliebige Rolle zuweisen" longdescription="Sie können Mitglieder jede beliebige Rolle der Liste „Rollen“ (Abschnitt „Rollen“ &gt; Registerkarte „Mitglieder“) zuweisen. *WARNUNG* Jedes Mitglied in einer Rolle mit dieser Fähigkeit kann sich selbst und jedem anderen Mitglied (außer dem Eigentümer) Rollen mit weitreichenden Fähigkeiten zuweisen und damit fast Eigentümerrechte erreichen. Überlegen Sie sich gut, wem Sie diese Fähigkeit verleihen." name="role assign member"/>
-		<action description="Mitgliedern Rollen entziehen" longdescription="In der Liste „Rollen“ (Abschnitt „Rollen“ &gt; Registerkarte „Mitglieder“) können Mitgliedern Rollen abgenommen werden. Eigentümer können nicht entfernt werden." name="role remove member"/>
-		<action description="Rollenfähigkeiten zuweisen und entfernen" longdescription="Fähigkeiten für jede Rolle können in der Liste „Zulässige Fähigkeiten&quot; (Abschnitt „Rollen&quot; &gt; Registerkarte „Rollen“) zugewiesen und auch entzogen werden. *WARNUNG* Jedes Mitglied in einer Rolle mit dieser Fähigkeit kann sich selbst und jedem anderen Mitglied (außer dem Eigentümer) alle Fähigkeiten zuweisen und damit fast Eigentümerrechte erreichen. Überlegen Sie sich gut, wem Sie diese Fähigkeit verleihen." name="role change actions"/>
+		<action description="Neue Rollen erstellen" longdescription="Neue Rollen im Abschnitt „Rollen“ &gt; Registerkarte „Rollen“ erstellen." name="role create" value="4"/>
+		<action description="Rollen löschen" longdescription="Neue Rollen im Abschnitt „Rollen“ &gt; Registerkarte „Rollen“ löschen." name="role delete" value="5"/>
+		<action description="Rollennamen, Titel, Beschreibungen und ob die Rolleninhaber öffentlich bekannt sein sollen, ändern." longdescription="Rollennamen, Titel, Beschreibungen und ob die Rolleninhaber öffentlich bekannt sein sollen, ändern. Dies wird im unteren Bereich des Abschnitts „Rollen“ &gt; Registerkarte „Rollen“ eingestellt, nachdem eine Rolle ausgewählt wurde." name="role properties" value="6"/>
+		<action description="Mitgliedern nur eigene Rollen zuweisen" longdescription="In der Liste „Rollen“ (Abschnitt „Rollen“ &gt; Registerkarte „Mitglieder“) können Mitgliedern Rollen zugewiesen werden. Ein Mitglied mit dieser Fähigkeit kann anderen Mitgliedern nur die eigenen Rollen zuweisen." name="role assign member limited" value="7"/>
+		<action description="Mitgliedern beliebige Rolle zuweisen" longdescription="Sie können Mitglieder jede beliebige Rolle der Liste „Rollen“ (Abschnitt „Rollen“ &gt; Registerkarte „Mitglieder“) zuweisen. *WARNUNG* Jedes Mitglied in einer Rolle mit dieser Fähigkeit kann sich selbst und jedem anderen Mitglied (außer dem Eigentümer) Rollen mit weitreichenden Fähigkeiten zuweisen und damit fast Eigentümerrechte erreichen. Überlegen Sie sich gut, wem Sie diese Fähigkeit verleihen." name="role assign member" value="8"/>
+		<action description="Mitgliedern Rollen entziehen" longdescription="In der Liste „Rollen“ (Abschnitt „Rollen“ &gt; Registerkarte „Mitglieder“) können Mitgliedern Rollen abgenommen werden. Eigentümer können nicht entfernt werden." name="role remove member" value="9"/>
+		<action description="Rollenfähigkeiten zuweisen und entfernen" longdescription="Fähigkeiten für jede Rolle können in der Liste „Zulässige Fähigkeiten&quot; (Abschnitt „Rollen&quot; &gt; Registerkarte „Rollen“) zugewiesen und auch entzogen werden. *WARNUNG* Jedes Mitglied in einer Rolle mit dieser Fähigkeit kann sich selbst und jedem anderen Mitglied (außer dem Eigentümer) alle Fähigkeiten zuweisen und damit fast Eigentümerrechte erreichen. Überlegen Sie sich gut, wem Sie diese Fähigkeit verleihen." name="role change actions" value="10"/>
 	</action_set>
 	<action_set description="Diese Fähigkeiten ermöglichen es, die Gruppenidentität zu ändern, z. B. öffentliche Sichtbarkeit, Charta und Insignien." name="Group Identity">
-		<action description="Charta, Insignien und „Im Web veröffentlichen“ ändern und festlegen, welche Mitglieder in der Gruppeninfo öffentlich sichtbar sind." longdescription="Charta, Insignien und „In Suche anzeigen&quot; ändern. Diese Einstellungen werden im Abschnitt „Allgemein&quot; vorgenommen." name="group change identity"/>
+		<action description="Charta, Insignien und „Im Web veröffentlichen“ ändern und festlegen, welche Mitglieder in der Gruppeninfo öffentlich sichtbar sind." longdescription="Charta, Insignien und „In Suche anzeigen&quot; ändern. Diese Einstellungen werden im Abschnitt „Allgemein&quot; vorgenommen." name="group change identity" value="11"/>
 	</action_set>
 	<action_set description="Diese Fähigkeiten ermöglichen es, gruppeneigenes Land zu übertragen, zu bearbeiten und zu verkaufen. Klicken Sie mit rechts auf den Boden und wählen Sie „Land-Info...“ oder klicken Sie in der Navigationsleiste auf das Symbol „i&quot;." name="Parcel Management">
-		<action description="Land übertragen und für Gruppe kaufen" longdescription="Land übertragen und für Gruppe kaufen. Diese Einstellung finden Sie unter „Land-Info“ &gt; „Allgemein“." name="land deed"/>
-		<action description="Land Governor Linden überlassen" longdescription="Land Governor Linden überlassen. *WARNUNG* Jedes Mitglied in einer Rolle mit dieser Fähigkeit kann gruppeneigenes Land unter „Land-Info“ &gt; „Allgemein“ aufgeben und es ohne Verkauf in das Eigentum von Linden zurückführen! Überlegen Sie sich, wem Sie diese Fähigkeit verleihen." name="land release"/>
-		<action description="Land.zu.verkaufen-Info einstellen" longdescription="Land zu verkaufen-Info einstellen. *WARNUNG* Mitglieder in einer Rolle mit dieser Fähigkeit können gruppeneigenes Land jederzeit unter „Land-Info“ &gt; „Allgemein“ verkaufen! Überlegen Sie sich, wem Sie diese Fähigkeit verleihen." name="land set sale info"/>
-		<action description="Parzellen teilen und zusammenlegen" longdescription="Parzellen teilen und zusammenlegen. Klicken Sie dazu mit rechts auf den Boden, wählen sie „Terrain bearbeiten“ und ziehen Sie die Maus auf das Land, um eine Auswahl zu treffen. Zum Teilen treffen Sie eine Auswahl und klicken auf „Unterteilen“. Zum Zusammenlegen von zwei oder mehr angrenzenden Parzellen klicken Sie auf „Zusammenlegen“." name="land divide join"/>
+		<action description="Land übertragen und für Gruppe kaufen" longdescription="Land übertragen und für Gruppe kaufen. Diese Einstellung finden Sie unter „Land-Info“ &gt; „Allgemein“." name="land deed" value="12"/>
+		<action description="Land Governor Linden überlassen" longdescription="Land Governor Linden überlassen. *WARNUNG* Jedes Mitglied in einer Rolle mit dieser Fähigkeit kann gruppeneigenes Land unter „Land-Info“ &gt; „Allgemein“ aufgeben und es ohne Verkauf in das Eigentum von Linden zurückführen! Überlegen Sie sich, wem Sie diese Fähigkeit verleihen." name="land release" value="13"/>
+		<action description="Land.zu.verkaufen-Info einstellen" longdescription="Land zu verkaufen-Info einstellen. *WARNUNG* Mitglieder in einer Rolle mit dieser Fähigkeit können gruppeneigenes Land jederzeit unter „Land-Info“ &gt; „Allgemein“ verkaufen! Überlegen Sie sich, wem Sie diese Fähigkeit verleihen." name="land set sale info" value="14"/>
+		<action description="Parzellen teilen und zusammenlegen" longdescription="Parzellen teilen und zusammenlegen. Klicken Sie dazu mit rechts auf den Boden, wählen sie „Terrain bearbeiten“ und ziehen Sie die Maus auf das Land, um eine Auswahl zu treffen. Zum Teilen treffen Sie eine Auswahl und klicken auf „Unterteilen“. Zum Zusammenlegen von zwei oder mehr angrenzenden Parzellen klicken Sie auf „Zusammenlegen“." name="land divide join" value="15"/>
 	</action_set>
 	<action_set description="Diese Fähigkeiten ermöglichen es, den Parzellennamen und die Veröffentlichungseinstellungen sowie die Anzeige des Suchverzeichnisses, den Landepunkt und die TP-Routenoptionen festzulegen." name="Parcel Identity">
-		<action description="„Ort in Suche anzeigen&quot; ein-/ausschalten und Kategorie festlegen." longdescription="Auf der Registerkarte „Optionen“ unter „Land-Info“ können Sie „Ort in Suche anzeigen“ ein- und ausschalten und die Parzellenkategorie festlegen." name="land find places"/>
-		<action description="Parzellenname, Beschreibung und Einstellung für „Ort in Suche anzeigen&quot; ändern" longdescription="Parzellenname, Beschreibung und Einstellung für „Ort in Suche anzeigen&quot; ändern Diese Einstellungen finden Sie unter „Land-Info“ &gt; Registerkarte „Optionen“." name="land change identity"/>
-		<action description="Landepunkt und Teleport-Route festlegen" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können auf einer gruppeneigenen Parzelle einen Landepunkt für ankommende Teleports und Teleport-Routen festlegen. Diese Einstellungen finden Sie unter „Land-Info“ &gt; „Optionen“." name="land set landing point"/>
+		<action description="„Ort in Suche anzeigen&quot; ein-/ausschalten und Kategorie festlegen." longdescription="Auf der Registerkarte „Optionen“ unter „Land-Info“ können Sie „Ort in Suche anzeigen“ ein- und ausschalten und die Parzellenkategorie festlegen." name="land find places" value="17"/>
+		<action description="Parzellenname, Beschreibung und Einstellung für „Ort in Suche anzeigen&quot; ändern" longdescription="Parzellenname, Beschreibung und Einstellung für „Ort in Suche anzeigen&quot; ändern Diese Einstellungen finden Sie unter „Land-Info“ &gt; Registerkarte „Optionen“." name="land change identity" value="18"/>
+		<action description="Landepunkt und Teleport-Route festlegen" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können auf einer gruppeneigenen Parzelle einen Landepunkt für ankommende Teleports und Teleport-Routen festlegen. Diese Einstellungen finden Sie unter „Land-Info“ &gt; „Optionen“." name="land set landing point" value="19"/>
 	</action_set>
 	<action_set description="Diese Fähigkeiten ermöglichen es, Parzellenoptionen wie „Objekte erstellen“, „Terrain bearbeiten“ sowie Musik- und Medieneinstellungen zu ändern." name="Parcel Settings">
-		<action description="Musik- und Medieneinstellungen ändern" longdescription="Die Einstellungen für Streaming-Musik und Filme finden Sie unter „Land-Info“ &gt; „Medien“." name="land change media"/>
-		<action description="„Terrain bearbeiten“ ein/aus" longdescription="„Terrain bearbeiten“ ein/aus. *WARNUNG* „Land-Info“ &gt; „Optionen“ &gt; „Terrain bearbeiten“ ermöglicht jedem das Terraformen Ihres Grundbesitzes und das Setzen und Verschieben von Linden-Pflanzen. Überlegen Sie sich, wem Sie diese Fähigkeit verleihen. Diese Einstellung finden Sie unter „Land-Info“ &gt; „Optionen“." name="land edit"/>
-		<action description="„Land-Info“-Optionen einstellen" longdescription="„Sicher (kein Schaden)“ und „Fliegen“ ein- und ausschalten und Einwohnern folgende Aktionen erlauben: „Terrain bearbeiten“, „Bauen“, „Landmarken erstellen“ und „Skripts ausführen“ auf gruppeneigenem Land in „Land-Info“ &gt; Registerkarte „Optionen“." name="land options"/>
+		<action description="Musik- und Medieneinstellungen ändern" longdescription="Die Einstellungen für Streaming-Musik und Filme finden Sie unter „Land-Info“ &gt; „Medien“." name="land change media" value="20"/>
+		<action description="„Terrain bearbeiten“ ein/aus" longdescription="„Terrain bearbeiten“ ein/aus. *WARNUNG* „Land-Info“ &gt; „Optionen“ &gt; „Terrain bearbeiten“ ermöglicht jedem das Terraformen Ihres Grundbesitzes und das Setzen und Verschieben von Linden-Pflanzen. Überlegen Sie sich, wem Sie diese Fähigkeit verleihen. Diese Einstellung finden Sie unter „Land-Info“ &gt; „Optionen“." name="land edit" value="21"/>
+		<action description="„Land-Info“-Optionen einstellen" longdescription="„Sicher (kein Schaden)“ und „Fliegen“ ein- und ausschalten und Einwohnern folgende Aktionen erlauben: „Terrain bearbeiten“, „Bauen“, „Landmarken erstellen“ und „Skripts ausführen“ auf gruppeneigenem Land in „Land-Info“ &gt; Registerkarte „Optionen“." name="land options" value="22"/>
 	</action_set>
 	<action_set description="Diese Fähigkeiten ermöglichen es, Mitgliedern das Umgehen von Restriktionen auf gruppeneigenen Parzellen zu erlauben." name="Parcel Powers">
-		<action description="„Terrain bearbeiten“ zulassen" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können auf einer gruppeneigenen Parzelle das Terrain bearbeiten, selbst wenn diese Option unter „Land-Info“ &gt; „Optionen“ deaktiviert ist." name="land allow edit land"/>
-		<action description="„Fliegen“ zulassen" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können auf einer gruppeneigenen Parzelle fliegen, selbst wenn diese Option unter „Land-Info“ &gt; „Optionen“ deaktiviert ist." name="land allow fly"/>
-		<action description="„Objekte erstellen“ zulassen" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können auf einer gruppeneigenen Parzelle Objekte erstellen, selbst wenn diese Option unter „Land-Info“ &gt; „Optionen“ deaktiviert ist." name="land allow create"/>
-		<action description="„Landmarke erstellen“ zulassen" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können für eine gruppeneigene Parzelle eine Landmarke erstellen, selbst wenn diese Option unter „Land-Info“ &gt; „Optionen“ deaktiviert ist." name="land allow landmark"/>
-		<action description="„Hier als Zuhause wählen“ auf Gruppenland zulassen" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können auf einer an diese Gruppe übertragenen Parzelle die Funktion „Welt“ &gt; „Landmarken“ &gt; „Hier als Zuhause wählen“ verwenden." name="land allow set home"/>
+		<action description="„Terrain bearbeiten“ zulassen" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können auf einer gruppeneigenen Parzelle das Terrain bearbeiten, selbst wenn diese Option unter „Land-Info“ &gt; „Optionen“ deaktiviert ist." name="land allow edit land" value="23"/>
+		<action description="„Fliegen“ zulassen" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können auf einer gruppeneigenen Parzelle fliegen, selbst wenn diese Option unter „Land-Info“ &gt; „Optionen“ deaktiviert ist." name="land allow fly" value="24"/>
+		<action description="„Objekte erstellen“ zulassen" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können auf einer gruppeneigenen Parzelle Objekte erstellen, selbst wenn diese Option unter „Land-Info“ &gt; „Optionen“ deaktiviert ist." name="land allow create" value="25"/>
+		<action description="„Landmarke erstellen“ zulassen" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können für eine gruppeneigene Parzelle eine Landmarke erstellen, selbst wenn diese Option unter „Land-Info“ &gt; „Optionen“ deaktiviert ist." name="land allow landmark" value="26"/>
+		<action description="„Hier als Zuhause wählen“ auf Gruppenland zulassen" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können auf einer an diese Gruppe übertragenen Parzelle die Funktion „Welt“ &gt; „Landmarken“ &gt; „Hier als Zuhause wählen“ verwenden." name="land allow set home" value="28"/>
+		<action description="Veranstaltung von Events auf Gruppenland zulassen" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können Parzellen im Gruppenbesitz als Veranstaltungsorte für Events auswählen." name="land allow host event" value="41"/>
 	</action_set>
 	<action_set description="Diese Fähigkeiten ermöglichen es, den Zugang auf gruppeneigenen Parzellen zu steuern. Dazu gehört das Einfrieren und Ausschließen von Einwohnern." name="Parcel Access">
-		<action description="Parzellen-Zugangslisten verwalten" longdescription="Parzellen-Zugangslisten bearbeiten Sie unter „Land-Info“ &gt; „Zugang“." name="land manage allowed"/>
-		<action description="Parzellen-Bannlisten verwalten" longdescription="Bannlisten für Parzellen bearbeiten Sie unter „Land-Info“ &gt; Registerkarte „Zugang“." name="land manage banned"/>
-		<action description="Parzelleneinstellungen für „Pässe verkaufen“ ändern" longdescription="Die Parzellen-Einstellungen für „Pässe verkaufen“ ändern Sie unter „Land-Info“ &gt; Registerkarte „Zugang“." name="land manage passes"/>
-		<action description="Einwohner aus Parzellen werfen und einfrieren" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können gegen unerwünschte Einwohner auf einer gruppeneigenen Parzelle Maßnahmen ergreifen. Klicken Sie den Einwohner mit rechts an und wählen Sie „Hinauswerfen“ oder „Einfrieren“." name="land admin"/>
+		<action description="Parzellen-Zugangslisten verwalten" longdescription="Parzellen-Zugangslisten bearbeiten Sie unter „Land-Info“ &gt; „Zugang“." name="land manage allowed" value="29"/>
+		<action description="Parzellen-Bannlisten verwalten" longdescription="Bannlisten für Parzellen bearbeiten Sie unter „Land-Info“ &gt; Registerkarte „Zugang“." name="land manage banned" value="30"/>
+		<action description="Parzelleneinstellungen für „Pässe verkaufen“ ändern" longdescription="Die Parzellen-Einstellungen für „Pässe verkaufen“ ändern Sie unter „Land-Info“ &gt; Registerkarte „Zugang“." name="land manage passes" value="31"/>
+		<action description="Einwohner aus Parzellen werfen und einfrieren" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können gegen unerwünschte Einwohner auf einer gruppeneigenen Parzelle Maßnahmen ergreifen. Klicken Sie den Einwohner mit rechts an und wählen Sie „Hinauswerfen“ oder „Einfrieren“." name="land admin" value="32"/>
 	</action_set>
 	<action_set description="Diese Fähigkeiten ermöglichen es, Mitgliedern das Zurückgeben von Objekten sowie das Platzieren und Verschieben von Linden-Pflanzen zu erlauben. Mitglieder können den Grundbesitz aufräumen und an der Landschaftsgestaltung mitwirken. Aber Vorsicht: Zurückgegebene Objekte können nicht mehr zurückgeholt werden." name="Parcel Content">
-		<action description="Gruppeneigene Objekte zurückgeben" longdescription="Gruppeneigene Objekte auf gruppeneigenen Parzellen können Sie unter „Land-Info“ &gt; „Objekte“ zurückgeben." name="land return group owned"/>
-		<action description="Gruppenobjekte zurückgeben" longdescription="Gruppenobjekte auf gruppeneigenen Parzellen können Sie unter „Land-Info“ &gt; „Objekte“ zurückgeben." name="land return group set"/>
-		<action description="Gruppenfremde Objekte zurückgeben" longdescription="Objekte von gruppenfremden Personen auf gruppeneigenen Parzellen können Sie unter „Land-Info“ &gt; „Objekte“ zurückgeben." name="land return non group"/>
-		<action description="Landschaftsgestaltung mit Linden-Pflanzen" longdescription="Die Fähigkeit zur Landschaftsgestaltung ermöglicht das Platzieren und Verschieben von Linden-Bäumen, -Pflanzen und -Gräsern. Diese Objekte finden Sie im Bibliotheksordner des Inventars unter Objekte. Sie lassen sich auch mit der Menü Erstellen erzeugen." name="land gardening"/>
+		<action description="Gruppeneigene Objekte zurückgeben" longdescription="Gruppeneigene Objekte auf gruppeneigenen Parzellen können Sie unter „Land-Info“ &gt; „Objekte“ zurückgeben." name="land return group owned" value="48"/>
+		<action description="Gruppenobjekte zurückgeben" longdescription="Gruppenobjekte auf gruppeneigenen Parzellen können Sie unter „Land-Info“ &gt; „Objekte“ zurückgeben." name="land return group set" value="33"/>
+		<action description="Gruppenfremde Objekte zurückgeben" longdescription="Objekte von gruppenfremden Personen auf gruppeneigenen Parzellen können Sie unter „Land-Info“ &gt; „Objekte“ zurückgeben." name="land return non group" value="34"/>
+		<action description="Landschaftsgestaltung mit Linden-Pflanzen" longdescription="Die Fähigkeit zur Landschaftsgestaltung ermöglicht das Platzieren und Verschieben von Linden-Bäumen, -Pflanzen und -Gräsern. Diese Objekte finden Sie im Bibliotheksordner des Inventars unter Objekte. Sie lassen sich auch mit der Menü Erstellen erzeugen." name="land gardening" value="35"/>
 	</action_set>
 	<action_set description="Diese Fähigkeiten ermöglichen es, gruppeneigene Objekte zu übertragen, zu bearbeiten und zu verkaufen. Änderungen werden im Werkzeug Bearbeiten auf der Registerkarte Allgemein vorgenommen. Klicken Sie mit rechts auf ein Objekt und wählen Sie  &apos;Bearbeiten &apos;, um seine Einstellungen anzuzeigen." name="Object Management">
-		<action description="Objekte an Gruppe übertragen" longdescription="Objekte an eine Gruppe übertragen können Sie im Werkzeug „Bearbeiten“ auf der Registerkarte „Allgemein“." name="object deed"/>
-		<action description="Gruppeneigene Objekte manipulieren (verschieben, kopieren, bearbeiten)" longdescription="Gruppeneigene Objekte lassen sich im Werkzeug „Bearbeiten“ auf der Registerkarte „Allgemein“ manipulieren (verschieben, kopieren, bearbeiten)." name="object manipulate"/>
-		<action description="Gruppeneigene Objekte zum Verkauf freigeben" longdescription="Gruppeneigene Objekte zum Verkauf freigeben, können Sie im Werkzeug „Bearbeiten“ auf der Registerkarte „Allgemein“." name="object set sale"/>
+		<action description="Objekte an Gruppe übertragen" longdescription="Objekte an eine Gruppe übertragen können Sie im Werkzeug „Bearbeiten“ auf der Registerkarte „Allgemein“." name="object deed" value="36"/>
+		<action description="Gruppeneigene Objekte manipulieren (verschieben, kopieren, bearbeiten)" longdescription="Gruppeneigene Objekte lassen sich im Werkzeug „Bearbeiten“ auf der Registerkarte „Allgemein“ manipulieren (verschieben, kopieren, bearbeiten)." name="object manipulate" value="38"/>
+		<action description="Gruppeneigene Objekte zum Verkauf freigeben" longdescription="Gruppeneigene Objekte zum Verkauf freigeben, können Sie im Werkzeug „Bearbeiten“ auf der Registerkarte „Allgemein“." name="object set sale" value="39"/>
 	</action_set>
 	<action_set description="Diese Fähigkeiten ermöglichen es, Gruppenschulden und Gruppendividenden zu aktivieren und den Zugriff auf das Gruppenkonto zu beschränken." name="Accounting">
-		<action description="Gruppenschulden zahlen und Gruppendividende erhalten" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit zahlen automatisch Gruppenschulden und erhalten Gruppendividenden. D. h. sie erhalten einen Anteil an Verkäufen von gruppeneigenem Land, der täglich verrechnet wird. Außerdem zahlen Sie automatisch für anfallende Kosten wie Parzellenlisten-Gebühren." name="accounting accountable"/>
+		<action description="Gruppenschulden zahlen und Gruppendividende erhalten" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit zahlen automatisch Gruppenschulden und erhalten Gruppendividenden. D. h. sie erhalten einen Anteil an Verkäufen von gruppeneigenem Land, der täglich verrechnet wird. Außerdem zahlen Sie automatisch für anfallende Kosten wie Parzellenlisten-Gebühren." name="accounting accountable" value="40"/>
 	</action_set>
 	<action_set description="Diese Fähigkeiten ermöglichen es, Mitgliedern das Senden, Empfangen und Anzeigen von Gruppennachrichten zu erlauben." name="Notices">
-		<action description="Mitteilungen senden" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können Mitteilungen im Abschnitt Gruppe &gt; Mitteilungen senden." name="notices send"/>
-		<action description="Mitteilungen erhalten und ältere Mitteilungen anzeigen" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können Mitteilungen erhalten und im Abschnitt Gruppe &gt; Mitteilungen ältere Mitteilungen anzeigen." name="notices receive"/>
-	</action_set>
-	<action_set description="Diese Fähigkeiten ermöglichen es, Mitgliedern das Erstellen von Anfragen, das Abstimmen über Anfragen und das Anzeigen des Abstimmprotokolls zu erlauben." name="Proposals">
-		<action description="Neue Anfragen" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können Anfragen stellen, über die auf der Registerkarte „Anfragen“ in der Gruppeninfo abgestimmt werden kann." name="proposal start"/>
-		<action description="Über Anfragen abstimmen" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können in der Gruppeninfo unter „Anfragen“ über Anfragen abstimmen." name="proposal vote"/>
+		<action description="Mitteilungen senden" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können Mitteilungen im Abschnitt Gruppe &gt; Mitteilungen senden." name="notices send" value="42"/>
+		<action description="Mitteilungen erhalten und ältere Mitteilungen anzeigen" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können Mitteilungen erhalten und im Abschnitt Gruppe &gt; Mitteilungen ältere Mitteilungen anzeigen." name="notices receive" value="43"/>
 	</action_set>
 	<action_set description="Diese Fähigkeiten ermöglichen es, den Zugang zu Gruppen-Chat und Gruppen-Voice-Chat zu steuern." name="Chat">
-		<action description="Gruppen-Chat beitreten" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können Gruppen-Chat und Gruppen-Voice-Chat beitreten." name="join group chat"/>
-		<action description="Gruppen-Voice-Chat beitreten" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können Gruppen-Voice-Chat beitreten. HINWEIS: Sie benötigen die Fähigkeit „Gruppen-Chat beitreten“, um Zugang zu dieser Voice-Chat-Sitzung zu erhalten." name="join voice chat"/>
-		<action description="Gruppen-Chat moderieren" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können den Zugang zu und die Teilnahme an Gruppen-Chat- und Voice-Chat-Sitzungen steuern." name="moderate group chat"/>
+		<action description="Gruppen-Chat beitreten" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können Gruppen-Chat und Gruppen-Voice-Chat beitreten." name="join group chat" value="16"/>
+		<action description="Gruppen-Voice-Chat beitreten" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können Gruppen-Voice-Chat beitreten. HINWEIS: Sie benötigen die Fähigkeit „Gruppen-Chat beitreten“, um Zugang zu dieser Voice-Chat-Sitzung zu erhalten." name="join voice chat" value="27"/>
+		<action description="Gruppen-Chat moderieren" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können den Zugang zu und die Teilnahme an Gruppen-Chat- und Voice-Chat-Sitzungen steuern." name="moderate group chat" value="37"/>
 	</action_set>
 </role_actions>
diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml
index ae2991df45..5949c433fd 100644
--- a/indra/newview/skins/default/xui/de/strings.xml
+++ b/indra/newview/skins/default/xui/de/strings.xml
@@ -206,6 +206,9 @@
 	<string name="TooltipAgentUrl">
 		Anklicken, um das Profil dieses Einwohners anzuzeigen
 	</string>
+	<string name="TooltipAgentInspect">
+		Mehr über diesen Einwohner
+	</string>
 	<string name="TooltipAgentMute">
 		Klicken, um diesen Einwohner stummzuschalten
 	</string>
@@ -762,6 +765,12 @@
 	<string name="Estate / Full Region">
 		Grundstück / Vollständige Region
 	</string>
+	<string name="Estate / Homestead">
+		Grundbesitz/Homestead
+	</string>
+	<string name="Mainland / Homestead">
+		Mainland/Homestead
+	</string>
 	<string name="Mainland / Full Region">
 		Mainland / Vollständige Region
 	</string>
@@ -3574,7 +3583,7 @@ Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_
 		Sie sind der einzige Benutzer in dieser Sitzung.
 	</string>
 	<string name="offline_message">
-		[FIRST] [LAST] ist offline.
+		[NAME] ist offline.
 	</string>
 	<string name="invite_message">
 		Klicken Sie auf [BUTTON NAME], um eine Verbindung zu diesem Voice-Chat herzustellen.
@@ -3643,7 +3652,10 @@ Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_
 		http://secondlife.com/landing/voicemorphing
 	</string>
 	<string name="paid_you_ldollars">
-		[NAME] hat Ihnen [AMOUNT] L$ bezahlt.
+		[NAME] hat Ihnen [REASON] [AMOUNT] L$ bezahlt.
+	</string>
+	<string name="paid_you_ldollars_no_reason">
+		[NAME] hat Ihnen [AMOUNT] L$ bezahlt.
 	</string>
 	<string name="you_paid_ldollars">
 		Sie haben [REASON] [AMOUNT] L$ an [NAME] bezahlt.
@@ -3657,6 +3669,9 @@ Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_
 	<string name="you_paid_ldollars_no_name">
 		Sie haben [REASON] [AMOUNT] L$ bezahlt.
 	</string>
+	<string name="for item">
+		für [ITEM]
+	</string>
 	<string name="for a parcel of land">
 		für eine Landparzelle
 	</string>
@@ -3675,6 +3690,9 @@ Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_
 	<string name="to upload">
 		fürs Hochladen
 	</string>
+	<string name="to publish a classified ad">
+		um eine Anzeige aufzugeben
+	</string>
 	<string name="giving">
 		[AMOUNT] L$ werden bezahlt
 	</string>
-- 
cgit v1.2.3


From 9814b8f450ce7462381f9a32480ca50bfe56e774 Mon Sep 17 00:00:00 2001
From: Eli Linden <eli@lindenlab.com>
Date: Mon, 8 Nov 2010 13:17:10 -0800
Subject: CT-633 WIP PT translation for Delta Set19 for Viewer 2.3

---
 .../skins/default/xui/pt/floater_avatar_picker.xml |   9 +-
 .../newview/skins/default/xui/pt/floater_bumps.xml |  10 +-
 .../skins/default/xui/pt/floater_buy_object.xml    |  37 +++---
 .../newview/skins/default/xui/pt/floater_event.xml |  45 ++-----
 .../skins/default/xui/pt/floater_incoming_call.xml |   2 +-
 indra/newview/skins/default/xui/pt/floater_pay.xml |   2 +-
 .../skins/default/xui/pt/floater_pay_object.xml    |   2 +-
 .../newview/skins/default/xui/pt/floater_tools.xml |   4 +-
 .../default/xui/pt/floater_voice_controls.xml      |   2 +-
 .../skins/default/xui/pt/inspect_avatar.xml        |   5 +
 indra/newview/skins/default/xui/pt/menu_viewer.xml |   6 +-
 .../newview/skins/default/xui/pt/notifications.xml | 146 +++++++++++++++------
 .../skins/default/xui/pt/panel_edit_profile.xml    |  10 +-
 .../default/xui/pt/panel_group_land_money.xml      |   1 +
 indra/newview/skins/default/xui/pt/panel_login.xml |   2 +-
 .../skins/default/xui/pt/panel_place_profile.xml   |   3 +-
 .../default/xui/pt/panel_preferences_general.xml   |   8 +-
 .../default/xui/pt/panel_preferences_setup.xml     |   2 +-
 .../skins/default/xui/pt/panel_profile_view.xml    |   8 +-
 .../newview/skins/default/xui/pt/role_actions.xml  |  85 ++++++------
 indra/newview/skins/default/xui/pt/strings.xml     |  20 ++-
 21 files changed, 249 insertions(+), 160 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/pt/floater_avatar_picker.xml b/indra/newview/skins/default/xui/pt/floater_avatar_picker.xml
index a2e6f7945a..2b65952676 100644
--- a/indra/newview/skins/default/xui/pt/floater_avatar_picker.xml
+++ b/indra/newview/skins/default/xui/pt/floater_avatar_picker.xml
@@ -24,6 +24,10 @@
 				Digite parte do nome de alguém:
 			</text>
 			<button label="OK" label_selected="OK" name="Find"/>
+			<scroll_list name="SearchResults">
+				<columns label="Nome" name="name"/>
+				<columns label="Nome de usuário" name="username"/>
+			</scroll_list>
 		</panel>
 		<panel label="Amigos" name="FriendsPanel">
 			<text name="InstructSelectFriend">
@@ -39,7 +43,10 @@
 				Metros
 			</text>
 			<button font="SansSerifSmall" label="Atualizar Lista" label_selected="Atualizar Lista" left_delta="1" name="Refresh" width="115"/>
-			<scroll_list bottom_delta="-169" height="159" name="NearMe"/>
+			<scroll_list bottom_delta="-169" height="159" name="NearMe">
+				<columns label="Nome" name="name"/>
+				<columns label="Nome de usuário" name="username"/>
+			</scroll_list>
 		</panel>
 	</tab_container>
 	<button label="OK" label_selected="OK" name="ok_btn"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_bumps.xml b/indra/newview/skins/default/xui/pt/floater_bumps.xml
index 5e656f4730..475d36c119 100644
--- a/indra/newview/skins/default/xui/pt/floater_bumps.xml
+++ b/indra/newview/skins/default/xui/pt/floater_bumps.xml
@@ -4,19 +4,19 @@
 		Nada detectado
 	</floater.string>
 	<floater.string name="bump">
-		[TIME]  [FIRST] [LAST] conflitou com você
+		[TIME]  [NAME] empurrou você
 	</floater.string>
 	<floater.string name="llpushobject">
-		[TIME]  [FIRST] [LAST] empurrou você com um script
+		[TIME]  [NAME] empurrou você usando um script
 	</floater.string>
 	<floater.string name="selected_object_collide">
-		[TIME]  [FIRST] [LAST] o atingiu com um objeto
+		[TIME]  [NAME] empurrou você com um objeto
 	</floater.string>
 	<floater.string name="scripted_object_collide">
-		[TIME]  [FIRST] [LAST] o atingiu com um objeto programado
+		[TIME]  [NAME] empurrou você com um objeto com script
 	</floater.string>
 	<floater.string name="physical_object_collide">
-		[TIME]  [FIRST] [LAST] o atingiu com um objeto físico
+		[TIME]  [NAME] empurrou você com um objeto 3D
 	</floater.string>
 	<floater.string name="timeStr">
 		[[hour,datetime,slt]:[min,datetime,slt]]
diff --git a/indra/newview/skins/default/xui/pt/floater_buy_object.xml b/indra/newview/skins/default/xui/pt/floater_buy_object.xml
index d71eb04cc4..c465197c9a 100644
--- a/indra/newview/skins/default/xui/pt/floater_buy_object.xml
+++ b/indra/newview/skins/default/xui/pt/floater_buy_object.xml
@@ -1,26 +1,29 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater name="contents" title="COMPRAR CÓPIA DO OBJETO">
+	<floater.string name="title_buy_text">
+		Comprar
+	</floater.string>
+	<floater.string name="title_buy_copy_text">
+		Comprar uma cópia de
+	</floater.string>
+	<floater.string name="no_copy_text">
+		(sem copiar)
+	</floater.string>
+	<floater.string name="no_modify_text">
+		(sem modificar)
+	</floater.string>
+	<floater.string name="no_transfer_text">
+		(sem transferir)
+	</floater.string>
 	<text name="contents_text">
 		Contém:
 	</text>
 	<text name="buy_text">
-		Comprar por L$[AMOUNT] de(a) [NAME]?
+		Comprar por L$[AMOUNT] de:
+	</text>
+	<text name="buy_name_text">
+		[NAME]?
 	</text>
-	<button label="Cancelar" label_selected="Cancelar" name="cancel_btn"/>
 	<button label="Comprar" label_selected="Comprar" name="buy_btn"/>
-	<string name="title_buy_text">
-		Comprar
-	</string>
-	<string name="title_buy_copy_text">
-		Comprar uma cópia de
-	</string>
-	<string name="no_copy_text">
-		(sem copiar)
-	</string>
-	<string name="no_modify_text">
-		(sem modificar)
-	</string>
-	<string name="no_transfer_text">
-		(sem transferir)
-	</string>
+	<button label="Cancelar" label_selected="Cancelar" name="cancel_btn"/>
 </floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_event.xml b/indra/newview/skins/default/xui/pt/floater_event.xml
index df4fe9a6a8..a8dc3f96d7 100644
--- a/indra/newview/skins/default/xui/pt/floater_event.xml
+++ b/indra/newview/skins/default/xui/pt/floater_event.xml
@@ -1,40 +1,11 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater
- follows="all"
- height="400"
- can_resize="true"
- help_topic="event_details"
- label="Event"
- layout="topleft"
- name="Event"
- save_rect="true"
- save_visibility="false"
- title="EVENT DETAILS" 
- width="600">
-	<floater.string
-		name="loading_text">
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater can_resize="true" follows="all" height="400" help_topic="event_details" label="Event" layout="topleft" name="Event" save_rect="true" save_visibility="false" title="EVENT DETAILS" width="600">
+	<floater.string name="loading_text">
 		Carregando...
 	</floater.string>
-    <floater.string
-     name="done_text">
-        Done
-    </floater.string>
-  <web_browser
-     trusted_content="true" 
-     follows="left|right|top|bottom"
-     layout="topleft"
-     left="10"
-     name="browser"
-     height="365"
-     width="580"
-     top="0"/>
-	<text
-	 follows="bottom|left"
-	 height="16"
-	 layout="topleft"
-	 left_delta="0"
-	 name="status_text"
-	 top_pad="10"
-	 width="150" />	 
+	<floater.string name="done_text">
+		Pronto
+	</floater.string>
+	<web_browser follows="left|right|top|bottom" height="365" layout="topleft" left="10" name="browser" top="0" trusted_content="true" width="580"/>
+	<text follows="bottom|left" height="16" layout="topleft" left_delta="0" name="status_text" top_pad="10" width="150"/>
 </floater>
-
diff --git a/indra/newview/skins/default/xui/pt/floater_incoming_call.xml b/indra/newview/skins/default/xui/pt/floater_incoming_call.xml
index 4b9553adfe..6344258fa0 100644
--- a/indra/newview/skins/default/xui/pt/floater_incoming_call.xml
+++ b/indra/newview/skins/default/xui/pt/floater_incoming_call.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="incoming call" title="LIGAÇÃO DE DESCONHECIDO">
+<floater name="incoming call" title="Ligação para você">
 	<floater.string name="lifetime">
 		5
 	</floater.string>
diff --git a/indra/newview/skins/default/xui/pt/floater_pay.xml b/indra/newview/skins/default/xui/pt/floater_pay.xml
index 81c861687f..26d5710c4a 100644
--- a/indra/newview/skins/default/xui/pt/floater_pay.xml
+++ b/indra/newview/skins/default/xui/pt/floater_pay.xml
@@ -11,7 +11,7 @@
 	</text>
 	<icon name="icon_person" tool_tip="Pessoa"/>
 	<text left="115" name="payee_name">
-		[FIRST] [LAST]
+		Test Name That Is Extremely Long To Check Clipping
 	</text>
 	<button label="L$1" label_selected="L$1" left="112" name="fastpay 1"/>
 	<button label="L$5" label_selected="L$5" name="fastpay 5"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_pay_object.xml b/indra/newview/skins/default/xui/pt/floater_pay_object.xml
index 464afd7f18..a5579f03bf 100644
--- a/indra/newview/skins/default/xui/pt/floater_pay_object.xml
+++ b/indra/newview/skins/default/xui/pt/floater_pay_object.xml
@@ -8,7 +8,7 @@
 	</string>
 	<icon name="icon_person" tool_tip="Pessoa"/>
 	<text left="105" name="payee_name">
-		[FIRST] [LAST]
+		Ericacita Moostopolison
 	</text>
 	<text halign="left" left="5" name="object_name_label" width="95">
 		Via objeto:
diff --git a/indra/newview/skins/default/xui/pt/floater_tools.xml b/indra/newview/skins/default/xui/pt/floater_tools.xml
index 14e00fa7ae..2925e286ed 100644
--- a/indra/newview/skins/default/xui/pt/floater_tools.xml
+++ b/indra/newview/skins/default/xui/pt/floater_tools.xml
@@ -171,13 +171,13 @@
 				Criador:
 			</text>
 			<text name="Creator Name">
-				Thrax Linden
+				Mrs. Esbee Linden (esbee.linden)
 			</text>
 			<text name="Owner:">
 				Proprietário:
 			</text>
 			<text name="Owner Name">
-				Thrax Linden
+				Mrs. Erica &quot;Moose&quot; Linden (erica.linden)
 			</text>
 			<text name="Group:">
 				Grupo:
diff --git a/indra/newview/skins/default/xui/pt/floater_voice_controls.xml b/indra/newview/skins/default/xui/pt/floater_voice_controls.xml
index 2337ee3074..fed60c9afa 100644
--- a/indra/newview/skins/default/xui/pt/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/pt/floater_voice_controls.xml
@@ -19,7 +19,7 @@
 		<layout_panel name="my_panel">
 			<text name="user_text" value="Meu avatar:"/>
 		</layout_panel>
-        <layout_panel name="leave_call_panel">
+		<layout_panel name="leave_call_panel">
 			<layout_stack name="voice_effect_and_leave_call_stack">
 				<layout_panel name="leave_call_btn_panel">
 					<button label="Desligar" name="leave_call_btn"/>
diff --git a/indra/newview/skins/default/xui/pt/inspect_avatar.xml b/indra/newview/skins/default/xui/pt/inspect_avatar.xml
index a74ea15be0..a95d5ff31a 100644
--- a/indra/newview/skins/default/xui/pt/inspect_avatar.xml
+++ b/indra/newview/skins/default/xui/pt/inspect_avatar.xml
@@ -10,6 +10,11 @@
 	<string name="Details">
 		[PERFIL_SL]
 	</string>
+	<text name="user_name_small" value="Grumpity ProductEngine with a long name"/>
+	<text name="user_slid" value="james.linden"/>
+	<text name="user_details">
+		This is my second life description and I really think it is great. But for some reason my description is super extra long because I like to talk a whole lot
+	</text>
 	<slider name="volume_slider" tool_tip="Volume de Voz" value="0.5"/>
 	<button label="Adicionar amigo" name="add_friend_btn"/>
 	<button label="MI" name="im_btn"/>
diff --git a/indra/newview/skins/default/xui/pt/menu_viewer.xml b/indra/newview/skins/default/xui/pt/menu_viewer.xml
index 90adb3fdb5..dc0e2ffb64 100644
--- a/indra/newview/skins/default/xui/pt/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/pt/menu_viewer.xml
@@ -85,6 +85,7 @@
 			<menu_item_call label="Pegar uma cópia" name="Take Copy"/>
 			<menu_item_call label="Salvar no meu inventário" name="Save Object Back to My Inventory"/>
 			<menu_item_call label="Save Back to Object Contents" name="Save Object Back to Object Contents"/>
+			<menu_item_call label="Devolver objeto" name="Return Object back to Owner"/>
 		</menu>
 		<menu label="Scripts" name="Scripts">
 			<menu_item_call label="Recompilar scripts (LSL)" name="Mono"/>
@@ -98,6 +99,7 @@
 			<menu_item_check label="Só selecionar meus objetos" name="Select Only My Objects"/>
 			<menu_item_check label="Só selecionar objetos móveis" name="Select Only Movable Objects"/>
 			<menu_item_check label="Selecionar contornando" name="Select By Surrounding"/>
+			<menu_item_check label="Mostrar contornos da seleção" name="Show Selection Outlines"/>
 			<menu_item_check label="Mostrar seleção oculta" name="Show Hidden Selection"/>
 			<menu_item_check label="Mostrar alcance de luz da seleção" name="Show Light Radius for Selection"/>
 			<menu_item_check label="Mostrar raio de seleção" name="Show Selection Beam"/>
@@ -118,6 +120,7 @@
 		<menu_item_call label="Denunciar abuso" name="Report Abuse"/>
 		<menu_item_call label="Relatar bug" name="Report Bug"/>
 		<menu_item_call label="Sobre [APP_NAME]" name="About Second Life"/>
+		<menu_item_check label="Ativar dicas" name="Enable Hints"/>
 	</menu>
 	<menu label="Avançado" name="Advanced">
 		<menu_item_call label="Parar minha animação" name="Stop Animating My Avatar"/>
@@ -264,7 +267,7 @@
 			<menu_item_call label="Teste de navegador web" name="Web Browser Test"/>
 			<menu_item_call label="Print Selected Object Info" name="Print Selected Object Info"/>
 			<menu_item_call label="Dados de memória" name="Memory Stats"/>
-			<menu_item_check label="Trajeto c/ dois cliques" name="Double-Click Auto-Pilot"/>
+			<menu_item_check label="Trajeto c/ dois cliques" name="Double-ClickAuto-Pilot"/>
 			<menu_item_check label="Teletransportar c/ dois cliques" name="DoubleClick Teleport"/>
 			<menu_item_check label="Debug Clicks" name="Debug Clicks"/>
 			<menu_item_check label="Debug Mouse Events" name="Debug Mouse Events"/>
@@ -276,6 +279,7 @@
 			<menu_item_call label="Salvar para XML" name="Save to XML"/>
 			<menu_item_check label="Mostrar nomes XUI" name="Show XUI Names"/>
 			<menu_item_call label="Enviar MIs de teste" name="Send Test IMs"/>
+			<menu_item_call label="Limpar cache de nomes" name="Flush Names Caches"/>
 		</menu>
 		<menu label="Avatar" name="Character">
 			<menu label="Grab Baked Texture" name="Grab Baked Texture">
diff --git a/indra/newview/skins/default/xui/pt/notifications.xml b/indra/newview/skins/default/xui/pt/notifications.xml
index 9a7c9579e2..466a24742d 100644
--- a/indra/newview/skins/default/xui/pt/notifications.xml
+++ b/indra/newview/skins/default/xui/pt/notifications.xml
@@ -109,8 +109,8 @@ Por favor, selecione apenas um objeto e tente novamente.
 		<usetemplate name="okbutton" yestext="OK"/>
 	</notification>
 	<notification name="GrantModifyRights">
-		Conceder direitos de modificação a outros residentes vai autorizá-los a mudar, apagar ou pegar TODOS os seus objetos. Seja MUITO cuidadoso ao conceder esta autorização. 
-Deseja modificar os direitos de modificação de [FIRST_NAME] [LAST_NAME]?
+		Conceder direitos de modificação a outros residentes vai autorizá-los a mudar, apagar ou pegar TODOS os seus objetos. Seja MUITO cuidadoso ao conceder esta autorização.
+Deseja dar direitos de modificação a [NAME]?
 		<usetemplate name="okcancelbuttons" notext="Não" yestext="Sim"/>
 	</notification>
 	<notification name="GrantModifyRightsMultiple">
@@ -119,7 +119,7 @@ Deseja conceder direitos de modificação para os residentes selecionados?
 		<usetemplate name="okcancelbuttons" notext="Não" yestext="Sim"/>
 	</notification>
 	<notification name="RevokeModifyRights">
-		Você deseja cancelar os direitos de edição de [FIRST_NAME] [LAST_NAME]?
+		Deseja revogar os direitos de modificação de [NAME]?
 		<usetemplate name="okcancelbuttons" notext="Não" yestext="Sim"/>
 	</notification>
 	<notification name="RevokeModifyRightsMultiple">
@@ -314,17 +314,17 @@ Ele ultrapassa o limite de anexos, de [MAX_ATTACHMENTS] objetos. Remova um objet
 		Você não pode vestir este item porque ele ainda não carregou. Tente novamente em um minuto.
 	</notification>
 	<notification name="MustHaveAccountToLogIn">
-		Oops! Alguma coisa foi deixada em branco.
-Você precisa entrar com ambos os Nome e Sobrenome do seu avatar.
+		Opa! Alguma coisa ficou em branco.
+Digite o nome de usuário de seu avatar.
 
-Você precisa de uma conta para entrar no [SECOND_LIFE]. Você gostaria de abrir uma conta agora?
+É preciso ter uma conta para entrar no [SECOND_LIFE]. Deseja criar uma conta agora?
 		<url name="url">
 			https://join.secondlife.com/index.php?lang=pt-BR
 		</url>
 		<usetemplate name="okcancelbuttons" notext="Tentar novamente" yestext="Abrir conta"/>
 	</notification>
 	<notification name="InvalidCredentialFormat">
-		Digite o nome e sobrenome do seu avatar no campo Nome de usuário, depois faça o login novamente.
+		Digite o nome de usuário ou o nome e sobrenome do seu avatar no campo Nome de usuário, depois entre em sua conta novamente.
 	</notification>
 	<notification name="AddClassified">
 		Os anúncios serão publicados na seção &apos;Classificados&apos; das buscas e em [http://secondlife.com/community/classifieds secondlife.com] durante uma semana.
@@ -913,12 +913,6 @@ Em geral, essa é uma falha técnica temporária.  Personalize e volte a salvar
 		Não é possível comprar o terreno para o grupo:
 Você não tem permissão para comprar o terreno para o seu grupo ativado.
 	</notification>
-	<notification label="Adicionar amigo" name="AddFriend">
-		Amigos podem dar permissões de rastrear um ao outro pelo mapa e receber atualizações de status online.
-
-Oferecer amizade para [NAME]?
-		<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Oferecer"/>
-	</notification>
 	<notification label="Adicionar amigo" name="AddFriendWithMessage">
 		Amigos podem dar permissões de rastrear um ao outro pelo mapa e receber atualizações de status online.
 
@@ -962,7 +956,7 @@ Oferecer amizade para [NAME]?
 		</form>
 	</notification>
 	<notification name="RemoveFromFriends">
-		Você quer remover [FIRST_NAME] [LAST_NAME] da sua lista de amigos?
+		Remover [NAME] da sua lista de amigos?
 		<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Remover"/>
 	</notification>
 	<notification name="RemoveMultipleFromFriends">
@@ -1078,10 +1072,11 @@ Doar [AREA] m² ao grupo &apos;[GROUP_NAME]&apos;?
 		<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
 	</notification>
 	<notification name="DeedLandToGroupWithContribution">
-		No ato da doação deste lote, o grupo deverá ter e manter créditos suficientes para ter o terreno. A doação inclui uma contribuição simultânea para o grupo de &apos;[FIRST_NAME] [LAST_NAME]&apos;.
-O preço de aquisição dos terrenos não é restituído ao proprietário. Se uma parcela doada for vendida, o preço de venda é dividido igualmente entre os membros do grupo.
+		Ao transferir este terreno, o grupo precisa ter e manter créditos de uso de terrenos suficientes.
+A doação inclui uma contribuição de terreno ao grupo de parte de &apos;[NAME]&apos;.
+O preço pago pelo terreno não será reembolsado ao proprietário. Se um terreno doado for vendido, a receita da venda será dividida igualmente entre os membros do grupo.
 
-Doar [AREA] m² para o grupo &apos;[GROUP_NAME]&apos;?
+Doar este terreno de [AREA] m² para o grupo &apos;[GROUP_NAME]&apos;?
 		<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
 	</notification>
 	<notification name="DisplaySetToSafe">
@@ -1450,6 +1445,46 @@ O bate-papo e MIs não serão exibidos.  MIs enviadas para você receberão sua
 			<button name="Cancel" text="Cancelar"/>
 		</form>
 	</notification>
+	<notification name="SetDisplayNameSuccess">
+		Olá, [DISPLAY_NAME]!
+
+Assim como na vida real, leva um tempo para todos aprenderem um novo nome.  Aguarde alguns dias para [http://wiki.secondlife.com/wiki/Setting_your_display_name your name to update] aparecer em objetos, scripts, nos resultados de buscas, etc.
+	</notification>
+	<notification name="SetDisplayNameBlocked">
+		Infelizmente não é possível modificar seu nome de tela. Se você acredita que houve algum equívoco, entre em contato com o suporte.
+	</notification>
+	<notification name="SetDisplayNameFailedLength">
+		Desculpe, este nome é longo demais.  O limite de caracteres para nomes de tela é [LENGTH].
+
+Selecione um nome mais curto.
+	</notification>
+	<notification name="SetDisplayNameFailedGeneric">
+		Infelizmente não foi possível definir seu nome de tela.  Por favor volte mais tarde.
+	</notification>
+	<notification name="SetDisplayNameMismatch">
+		Os nomes de tela fornecidos não são iguais. Digite novamente.
+	</notification>
+	<notification name="AgentDisplayNameUpdateThresholdExceeded">
+		Falta mais um tempinho para você poder mudar seu nome de tela.
+
+Consulte a página http://wiki.secondlife.com/wiki/Setting_your_display_name
+
+Por favor volte mais tarde.
+	</notification>
+	<notification name="AgentDisplayNameSetBlocked">
+		Infelizmente não foi possível definir o nome solicitado. Ele contém uma palavra banida.
+ 
+ Selecione um nome diferente.
+	</notification>
+	<notification name="AgentDisplayNameSetInvalidUnicode">
+		O nome de tela desejado contém caracteres inválidos.
+	</notification>
+	<notification name="AgentDisplayNameSetOnlyPunctuation">
+		Seu nome de tela não pode ser formado exclusivamente de caracteres de pontuação.
+	</notification>
+	<notification name="DisplayNameUpdate">
+		[OLD_NAME] ([SLID]) adotou o nome [NEW_NAME].
+	</notification>
 	<notification name="OfferTeleport">
 		Oferecer um teletransporte para sua localização com qual mensagem?
 		<form name="form">
@@ -2018,10 +2053,10 @@ Inclua um link para facilitar o acesso para visitantes. Teste o link na barra de
 		Assunto: [SUBJECT], Mensagem: [MESSAGE]
 	</notification>
 	<notification name="FriendOnline">
-		[FIRST] [LAST] está Online
+		[NAME] está online
 	</notification>
 	<notification name="FriendOffline">
-		[FIRST] [LAST] está Offline
+		[NAME] está offline
 	</notification>
 	<notification name="AddSelfFriend">
 		Você é o máximo! Mesmo assim, não dá para adicionar a si mesmo(a) como amigo(a).
@@ -2088,9 +2123,6 @@ Ela pode afetar a digitação da senha.
 	<notification name="CannotRemoveProtectedCategories">
 		Você não pode remover categorias protegidas.
 	</notification>
-	<notification name="OfferedCard">
-		Você ofereceu um cartão de visita a [FIRST] [LAST]
-	</notification>
 	<notification name="UnableToBuyWhileDownloading">
 		Impossível comprar o objeto enquanto ele está sendo carregado.
 Por favor, tente novamente.
@@ -2160,7 +2192,10 @@ Selecione o residente da lista e clique em &apos;MI&apos; na parte de baixo do p
 	<notification name="SystemMessage">
 		[MESSAGE]
 	</notification>
-	<notification name="PaymentRecived">
+	<notification name="PaymentReceived">
+		[MESSAGE]
+	</notification>
+	<notification name="PaymentSent">
 		[MESSAGE]
 	</notification>
 	<notification name="EventNotification">
@@ -2169,7 +2204,7 @@ Selecione o residente da lista e clique em &apos;MI&apos; na parte de baixo do p
 [NAME]
 [DATE]
 		<form name="form">
-			<button name="Details" text="Descrição"/>
+			<button name="Details" text="Detalhes"/>
 			<button name="Cancel" text="Cancelar"/>
 		</form>
 	</notification>
@@ -2203,7 +2238,7 @@ Instale o plugin novamente ou contate o fabricante se o problema persistir.
 		Os objetos que lhe pertencem no lote selecionado do terreno, voltaram ao seu inventário.
 	</notification>
 	<notification name="OtherObjectsReturned">
-		Os objetos no lote selecionado de terra que pertence a [FIRST] [LAST], voltaram ao seu inventário.
+		Os objetos no terreno selecionado, do residente [NAME], foram devolvidos ao inventário dele(a).
 	</notification>
 	<notification name="OtherObjectsReturned2">
 		Os objetos no lote selecionado, do residente [NAME], foram devolidos ao proprietãrio.
@@ -2327,7 +2362,7 @@ Por favor, tente novamente em alguns instantes.
 		Nenhum lote válido foi encontrado.
 	</notification>
 	<notification name="ObjectGiveItem">
-		Um objeto chamado [OBJECTFROMNAME] de [NAME_SLURL] lhe deu [OBJECTTYPE]:
+		Um objeto chamado &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt;, de [NAME_SLURL], lhe deu este(a) [OBJECTTYPE]:
 [ITEM_SLURL]
 		<form name="form">
 			<button name="Keep" text="Segure"/>
@@ -2392,9 +2427,9 @@ Cada um pode ver o status do outro (definição padrão).
 		Você convidou [TO_NAME] para ser seu amigo(a)
 	</notification>
 	<notification name="OfferFriendshipNoMessage">
-		[NAME] está lhe oferecendo sua amizade.
+		[NAME_SLURL] quer a sua amizade.
 
-(Por definição vocês serão capazes de ver um ao outro online)
+Cada um pode ver o status do outro (definição padrão).
 		<form name="form">
 			<button name="Accept" text="Aceitar"/>
 			<button name="Decline" text="Recusar"/>
@@ -2429,11 +2464,11 @@ Se permanecer aqui, você será desconectado.
 Se permanecer aqui, você será desconectado.
 	</notification>
 	<notification name="LoadWebPage">
-		Carregar página da web [URL]?
+		Carregar a página [URL]?
 
 [MESSAGE]
 
-Do objeto: [OBJECTNAME], dono: [NAME]?
+Do objeto: &lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;, de: [NAME]?
 		<form name="form">
 			<button name="Gotopage" text="Carregar"/>
 			<button name="Cancel" text="Cancelar"/>
@@ -2449,10 +2484,10 @@ Do objeto: [OBJECTNAME], dono: [NAME]?
 		O item que você está tentando usar tem um recurso que seu Visualizador não consegue ler.  Atualize o [APP_NAME] para poder vestir esse item.
 	</notification>
 	<notification name="ScriptQuestion">
-		&apos;[OBJECTNAME]&apos;, um objeto pertencente a  &apos;[NAME]&apos;, gostaria de:
+		&apos;&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;&apos;, pertencente a &apos;[NAME]&apos;, gostaria de:
 
 [QUESTIONS]
-Está OK?
+OK?
 		<form name="form">
 			<button name="Yes" text="Sim"/>
 			<button name="No" text="Não"/>
@@ -2460,12 +2495,12 @@ Está OK?
 		</form>
 	</notification>
 	<notification name="ScriptQuestionCaution">
-		Um objeto chamado &apos;[OBJECTNAME]&apos;, de &apos;[NAME]&apos; gostaria de:
+		Um objeto chamado &apos;&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;&apos;&apos;, de &apos;[NAME]&apos;, gostaria de:
 
 [QUESTIONS]
-Se você não confia nos objetos deste autor, recuse-o. 
+Se você não confia nos objetos deste autor, recuse-o.
 
-Deixar?
+Deseja aceitar?
 		<form name="form">
 			<button name="Grant" text="Autorizar"/>
 			<button name="Deny" text="Negar"/>
@@ -2473,14 +2508,14 @@ Deixar?
 		</form>
 	</notification>
 	<notification name="ScriptDialog">
-		[FIRST] [LAST]&apos;s &apos;[TITLE]&apos;
+		&apos;&lt;nolink&gt;[TITLE]&lt;/nolink&gt;&apos; de [NAME]
 [MESSAGE]
 		<form name="form">
 			<button name="Ignore" text="Ignorar"/>
 		</form>
 	</notification>
 	<notification name="ScriptDialogGroup">
-		[GROUPNAME]&apos;s &apos;[TITLE]&apos;
+		&lt;nolink&gt;[TITLE]&lt;/nolink&gt;&apos; de [GROUPNAME]&apos;
 [MESSAGE]
 		<form name="form">
 			<button name="Ignore" text="Ignorar"/>
@@ -2517,13 +2552,13 @@ Clique em Aceitar para atender ou em Recusar para recusar este convite.  Clique
 		</form>
 	</notification>
 	<notification name="AutoUnmuteByIM">
-		[FIRST] [LAST] recebeu uma MI e foi desbloqueado(a) automaticamente.
+		[FIRST] recebeu uma MI e foi desbloqueado(a) automaticamente.
 	</notification>
 	<notification name="AutoUnmuteByMoney">
-		[FIRST] [LAST] recebeu dinheiro e foi desbloqueado(a) automaticamente.
+		[FIRST] recebeu dinheiro e foi desbloqueado(a) automaticamente.
 	</notification>
 	<notification name="AutoUnmuteByInventory">
-		[FIRST] [LAST] recebeu dinheiro e foi desbloqueado(a) automaticamente.
+		[FIRST] recebeu dinheiro e foi desbloqueado(a) automaticamente.
 	</notification>
 	<notification name="VoiceInviteGroup">
 		[NAME] atendeu uma ligação de bate-papo de voz com o grupo [GROUP].  
@@ -2750,6 +2785,37 @@ Todos os demais residentes que entrarem na ligação mais tarde também serão s
 Silenciar todos?
 		<usetemplate ignoretext="Confirmar antes de silenciar todos os participantes em ligações de grupo." name="okcancelignore" notext="Cancelar" yestext="OK"/>
 	</notification>
+	<notification label="Bate-papo" name="HintChat">
+		Para entrar em uma conversa, comece a escrever no campo de bate-papo abaixo.
+	</notification>
+	<notification label="Levantar-se" name="HintSit">
+		Para se levantar quando estiver sentado, clique em Levantar-se
+	</notification>
+	<notification label="Explore o mundo" name="HintDestinationGuide">
+		O Guia de Destinos traz milhares de lugares novos para você explorar e conhecer. Selecione um lugar, clique em Teletransportar e comece suas descobertas.
+	</notification>
+	<notification label="Painel lateral" name="HintSidePanel">
+		Acesse rapidamente seu inventário, roupas, looks, perfis e mais no painel lateral.
+	</notification>
+	<notification label="Movimentar" name="HintMove">
+		Para andar ou correr, clique no botão Movimentar e use as setas para controlar a direção.  Ou use as setas do teclado.
+	</notification>
+	<notification label="Nome de tela" name="HintDisplayName">
+		Defina seu nome de tela personalizável. O nome de tele é separado do seu nome de usuário, que não pode ser modificado. Você pode mudar a visualização dos nomes de outras pessoas nas suas preferências.
+	</notification>
+	<notification label="Inventário" name="HintInventory">
+		Você encontrará seus pertences no inventário.  Os itens mais novos também ficam na guia Itens recentes.
+	</notification>
+	<notification label="Você tem dólares Linden!" name="HintLindenDollar">
+		Seu saldo de L$ está aqui.  Clique em Comprar L$ para trocar mais dólares Linden.
+	</notification>
+	<notification name="PopupAttempt">
+		Um pop-up foi bloqueado.
+		<form name="form">
+			<ignore name="ignore" text="Ativar todos os pop-ups"/>
+			<button name="open" text="Abrir pop-up"/>
+		</form>
+	</notification>
 	<global name="UnsupportedCPU">
 		- A velocidade da sua CPU não suporta os requisitos mínimos exigidos.
 	</global>
diff --git a/indra/newview/skins/default/xui/pt/panel_edit_profile.xml b/indra/newview/skins/default/xui/pt/panel_edit_profile.xml
index e82c03845b..4066842b25 100644
--- a/indra/newview/skins/default/xui/pt/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/pt/panel_edit_profile.xml
@@ -22,6 +22,14 @@
 	<scroll_container name="profile_scroll">
 		<panel name="scroll_content_panel">
 			<panel name="data_panel">
+				<text name="display_name_label" value="Nome de tela:"/>
+				<text name="solo_username_label" value="Nome de usuário:"/>
+				<button name="set_name" tool_tip="Definir nome de tela"/>
+				<text name="solo_user_name" value="Hamilton Hitchings"/>
+				<text name="user_name" value="Hamilton Hitchings"/>
+				<text name="user_name_small" value="Hamilton Hitchings"/>
+				<text name="user_label" value="Nome de usuário:"/>
+				<text name="user_slid" value="hamilton.linden"/>
 				<panel name="lifes_images_panel">
 					<icon label="" name="2nd_life_edit_icon" tool_tip="Selecione uma imagem"/>
 				</panel>
@@ -38,7 +46,7 @@
 				<text name="my_account_link" value="[[URL] Abrir meu painel]"/>
 				<text name="title_partner_text" value="Parceiro(a):"/>
 				<panel name="partner_data_panel">
-					<name_box initial_value="(pesquisando)" name="partner_text"/>
+					<text initial_value="(pesquisando)" name="partner_text"/>
 				</panel>
 				<text name="partner_edit_link" value="[[URL] Editar]"/>
 			</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_group_land_money.xml b/indra/newview/skins/default/xui/pt/panel_group_land_money.xml
index e57a85a726..2346fe7f4f 100644
--- a/indra/newview/skins/default/xui/pt/panel_group_land_money.xml
+++ b/indra/newview/skins/default/xui/pt/panel_group_land_money.xml
@@ -24,6 +24,7 @@
 			<scroll_list.columns label="Região" name="location"/>
 			<scroll_list.columns label="Tipo" name="type"/>
 			<scroll_list.columns label="Área:" name="area"/>
+			<scroll_list.columns label="Oculto" name="hidden"/>
 		</scroll_list>
 		<text name="total_contributed_land_label">
 			Total contribuído:
diff --git a/indra/newview/skins/default/xui/pt/panel_login.xml b/indra/newview/skins/default/xui/pt/panel_login.xml
index 94a885960a..9c8650e75e 100644
--- a/indra/newview/skins/default/xui/pt/panel_login.xml
+++ b/indra/newview/skins/default/xui/pt/panel_login.xml
@@ -11,7 +11,7 @@
 			<text name="username_text">
 				Nome de usuário:
 			</text>
-			<line_editor label="Nome de usuário" name="username_edit" tool_tip="[SECOND_LIFE] Nome de usuário"/>
+			<line_editor label="zecazc12 or Magia Solar" name="username_edit" tool_tip="O nome de usuário que você escolheu ao fazer seu cadastro, como zecazc12 or Magia Solar"/>
 			<text name="password_text">
 				Senha:
 			</text>
diff --git a/indra/newview/skins/default/xui/pt/panel_place_profile.xml b/indra/newview/skins/default/xui/pt/panel_place_profile.xml
index af6c9ea346..7fc07483c0 100644
--- a/indra/newview/skins/default/xui/pt/panel_place_profile.xml
+++ b/indra/newview/skins/default/xui/pt/panel_place_profile.xml
@@ -76,7 +76,7 @@
 						<text name="region_rating_label" value="Classificação:"/>
 						<text name="region_rating" value="Adulto"/>
 						<text name="region_owner_label" value="Proprietário:"/>
-						<text name="region_owner" value="moose Van Moose"/>
+						<text name="region_owner" value="moose Van Moose extra long name moose"/>
 						<text name="region_group_label" value="Grupo:"/>
 						<text name="region_group">
 							The Mighty Moose of mooseville soundvillemoose
@@ -89,6 +89,7 @@
 						<text name="estate_name_label" value="Propriedade:"/>
 						<text name="estate_rating_label" value="Classificação:"/>
 						<text name="estate_owner_label" value="Proprietário:"/>
+						<text name="estate_owner" value="Testing owner name length with long name"/>
 						<text name="covenant_label" value="Contrato:"/>
 					</panel>
 				</accordion_tab>
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_general.xml b/indra/newview/skins/default/xui/pt/panel_preferences_general.xml
index aefee32d44..ea618d097d 100644
--- a/indra/newview/skins/default/xui/pt/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/pt/panel_preferences_general.xml
@@ -44,9 +44,10 @@
 		<radio_item label="Ligar" name="radio2" value="1"/>
 		<radio_item label="Brevemente" name="radio3" value="2"/>
 	</radio_group>
-	<check_box label="Mostrar meu nome" name="show_my_name_checkbox1"/>
-	<check_box initial_value="true" label="Nome curto" name="small_avatar_names_checkbox"/>
-	<check_box label="Mostrar cargo" name="show_all_title_checkbox1"/>
+	<check_box label="Meu nome" name="show_my_name_checkbox1"/>
+	<check_box label="Nomes de usuário" name="show_slids" tool_tip="Mostrar nome de usuário, como zecazc123"/>
+	<check_box label="Cargos do grupo" name="show_all_title_checkbox1" tool_tip="Mostrar os títulos de cargos, como membro ou diretor"/>
+	<check_box label="Realçar amigos" name="show_friends" tool_tip="Realçar nomes de tela de amigos"/>
 	<text name="effects_color_textbox">
 		Meus efeitos:
 	</text>
@@ -61,6 +62,7 @@
 		<combo_box.item label="30 minutos" name="item3"/>
 		<combo_box.item label="(nunca)" name="item4"/>
 	</combo_box>
+	<check_box label="Ver nomes de tela" name="display_names_check" tool_tip="Usar nome de tela no bate-papo, MI, etc."/>
 	<text name="text_box3">
 		Mensagem do modo ocupado:
 	</text>
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_setup.xml b/indra/newview/skins/default/xui/pt/panel_preferences_setup.xml
index 5266f646b7..deb8573ba3 100644
--- a/indra/newview/skins/default/xui/pt/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/pt/panel_preferences_setup.xml
@@ -1,6 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="Configurações" name="Input panel">
-	<button bottom_delta="-40" label="Outros dispositivos" name="joystick_setup_button" width="165"/>
 	<text name="Mouselook:">
 		Visão subjetiva:
 	</text>
@@ -40,6 +39,7 @@
 	<check_box initial_value="true" label="Habilitar plugins" name="browser_plugins_enabled"/>
 	<check_box initial_value="true" label="Aceitar cookies" name="cookies_enabled"/>
 	<check_box initial_value="true" label="Habilitar Javascript" name="browser_javascript_enabled"/>
+	<check_box initial_value="falso" label="Ativar pop-ups no navegador de mídia" name="media_popup_enabled"/>
 	<check_box initial_value="false" label="Ativar web proxy" name="web_proxy_enabled"/>
 	<text name="Proxy location">
 		Localização do proxy:
diff --git a/indra/newview/skins/default/xui/pt/panel_profile_view.xml b/indra/newview/skins/default/xui/pt/panel_profile_view.xml
index 62a16c6fbe..d3ec9b82bc 100644
--- a/indra/newview/skins/default/xui/pt/panel_profile_view.xml
+++ b/indra/newview/skins/default/xui/pt/panel_profile_view.xml
@@ -6,8 +6,14 @@
 	<string name="status_offline">
 		Desconectado
 	</string>
-	<text_editor name="user_name" value="Carregando..."/>
+	<text name="display_name_label" value="Nome de tela:"/>
+	<text name="solo_username_label" value="Nome de usuário:"/>
 	<text name="status" value="Conectado"/>
+	<text name="user_name_small" value="Jack oh look at me this is a super duper long name"/>
+	<text name="user_name" value="Jack Linden"/>
+	<button name="copy_to_clipboard" tool_tip="Copiar para área de transferência"/>
+	<text name="user_label" value="Nome de usuário:"/>
+	<text name="user_slid" value="jack.linden"/>
 	<tab_container name="tabs">
 		<panel label="PERFIL" name="panel_profile"/>
 		<panel label="DESTAQUES" name="panel_picks"/>
diff --git a/indra/newview/skins/default/xui/pt/role_actions.xml b/indra/newview/skins/default/xui/pt/role_actions.xml
index 88fd4b3ca8..21b085431e 100644
--- a/indra/newview/skins/default/xui/pt/role_actions.xml
+++ b/indra/newview/skins/default/xui/pt/role_actions.xml
@@ -1,71 +1,68 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <role_actions>
 	<action_set description="Esta habilidades incluem poderes de adicionar ou remover membros do grupo e permitir que novos membros se juntem sem um convite." name="Membership">
-		<action description="Convidar pessoas para este grupo" longdescription="Em Membros &gt; Cargos, use o botão &apos;Convidar&apos; para convidar pessoas para entrar no grupo." name="member invite"/>
-		<action description="Expulsar membros deste grupo" longdescription="Em Membros &gt; Cargos, use o botão &apos;Ejetar&apos; para tirar pessoas do grupo. Proprietários podem expulsar qualquer pessoa, menos outro proprietário. Se você não é Proprietário, um membro só pode ser expulso se tiver cargo &apos;Todos&apos; e nenhum outro cargo.  Para destituir um membro de seu cargo, você precisa ter a função &apos;Destituir membro com cargo&apos;." name="member eject"/>
-		<action description="Alterna entre &apos;Inscrições abertas&apos; e &apos;Taxa de associação&apos;." longdescription="Ative &apos;Inscrições abertas&apos; para que novos membros entrem no grupo sem convite, mude a &apos;Taxa de associação&apos; na seção Geral." name="member options"/>
+		<action description="Convidar pessoas para este grupo" longdescription="Em Membros &gt; Cargos, use o botão &apos;Convidar&apos; para convidar pessoas para entrar no grupo." name="member invite" value="1"/>
+		<action description="Expulsar membros deste grupo" longdescription="Em Membros &gt; Cargos, use o botão &apos;Ejetar&apos; para tirar pessoas do grupo. Proprietários podem expulsar qualquer pessoa, menos outro proprietário. Se você não é Proprietário, um membro só pode ser expulso se tiver cargo &apos;Todos&apos; e nenhum outro cargo.  Para destituir um membro de seu cargo, você precisa ter a função &apos;Destituir membro com cargo&apos;." name="member eject" value="2"/>
+		<action description="Alterna entre &apos;Inscrições abertas&apos; e &apos;Taxa de associação&apos;." longdescription="Ative &apos;Inscrições abertas&apos; para que novos membros entrem no grupo sem convite, mude a &apos;Taxa de associação&apos; na seção Geral." name="member options" value="3"/>
 	</action_set>
 	<action_set description="Estas habilidades incluem poderes de adicionar, remover e mudar funções do grupo; adicionar e remover membros em funções e designar habilidades a funções." name="Roles">
-		<action description="Criar novas funções" longdescription="Crie novos cargos na guia Cargos." name="role create"/>
-		<action description="Apagar funções" longdescription="Exclua cargos na guia Cargos." name="role delete"/>
-		<action description="Modificar o nome, título e a descrição de cargos, e se o acesso a essas informações é público ou não" longdescription="Modificar o nome, título e a descrição de cargos, e se o acesso a essas informações é público ou não.  Essas configurações ficam na guia Cargos, depois da seleção do cargo." name="role properties"/>
-		<action description="Designar membros para a função do designador" longdescription="Na lista Cargos desempenhados, distribua os cargos aos membros (em Cargos &gt; guia Membros). Membros exercendo esta função devem exercer um cargo para poder adicionar outros membros ao mesmo cargo." name="role assign member limited"/>
-		<action description="Designar membros para qualquer função" longdescription="Designe cargos aos membros na lista Cargos desempenhados (Cargos &gt; guia Membros). *ATENÇÃO* Qualquer membro exercendo um cargo com esta função pode se designar -- ou designar outros membros não-proprietários -- a cargos com mais poder do que têm. Ou seja, membros com essa função podem assumir poderes quase iguais aos do proprietário.  Pense bem antes de dar esta função a alguém." name="role assign member"/>
-		<action description="Remover membros das funções" longdescription="Use a lista Cargos desempenhados para destituir membros de seus cargos (Cargos &gt; guia Membros). Proprietários não podem ser destituídos." name="role remove member"/>
-		<action description="Determinar e remover habilidades em funções" longdescription="Use a lista Funções autorizadas para adicionar e tirar as funções de cada cargo (Cargos &gt; guia Cargos). *ATENÇÃO* Qualquer membro exercendo um cargo com esta função pode dar a sim mesmo -- ou a outros membros não-proprietários -- todas as funções. Membros excercendo todas as funções podem assumir poderes quase iguais aos do proprietário.  Pense bem antes de dar esta função a alguém." name="role change actions"/>
+		<action description="Criar novas funções" longdescription="Crie novos cargos na guia Cargos." name="role create" value="4"/>
+		<action description="Apagar funções" longdescription="Exclua cargos na guia Cargos." name="role delete" value="5"/>
+		<action description="Modificar o nome, título e a descrição de cargos, e se o acesso a essas informações é público ou não" longdescription="Modificar o nome, título e a descrição de cargos, e se o acesso a essas informações é público ou não.  Essas configurações ficam na guia Cargos, depois da seleção do cargo." name="role properties" value="6"/>
+		<action description="Designar membros para a função do designador" longdescription="Na lista Cargos desempenhados, distribua os cargos aos membros (em Cargos &gt; guia Membros). Membros exercendo esta função devem exercer um cargo para poder adicionar outros membros ao mesmo cargo." name="role assign member limited" value="7"/>
+		<action description="Designar membros para qualquer função" longdescription="Designe cargos aos membros na lista Cargos desempenhados (Cargos &gt; guia Membros). *ATENÇÃO* Qualquer membro exercendo um cargo com esta função pode se designar -- ou designar outros membros não-proprietários -- a cargos com mais poder do que têm. Ou seja, membros com essa função podem assumir poderes quase iguais aos do proprietário.  Pense bem antes de dar esta função a alguém." name="role assign member" value="8"/>
+		<action description="Remover membros das funções" longdescription="Use a lista Cargos desempenhados para destituir membros de seus cargos (Cargos &gt; guia Membros). Proprietários não podem ser destituídos." name="role remove member" value="9"/>
+		<action description="Determinar e remover habilidades em funções" longdescription="Use a lista Funções autorizadas para adicionar e tirar as funções de cada cargo (Cargos &gt; guia Cargos). *ATENÇÃO* Qualquer membro exercendo um cargo com esta função pode dar a sim mesmo -- ou a outros membros não-proprietários -- todas as funções. Membros excercendo todas as funções podem assumir poderes quase iguais aos do proprietário.  Pense bem antes de dar esta função a alguém." name="role change actions" value="10"/>
 	</action_set>
 	<action_set description="Estas habilidade incluem poderes para modificar esta identidade de grupo, como mudar a visibilidade pública, apresentação e insígnia." name="Group Identity">
-		<action description="Mudar apresentação, insígnia, &apos;Publicar na web&apos;, e quais membros estão publicamente visíveis em Informações do Grupo." longdescription="Modificar o estatuto, símbolo e exibição nos resultados de busca.  Use a seção Geral." name="group change identity"/>
+		<action description="Mudar apresentação, insígnia, &apos;Publicar na web&apos;, e quais membros estão publicamente visíveis em Informações do Grupo." longdescription="Modificar o estatuto, símbolo e exibição nos resultados de busca.  Use a seção Geral." name="group change identity" value="11"/>
 	</action_set>
 	<action_set description="Estas funções incluem poderes de transferir, vender e modificar os terrenos do grupo.  Para acessar a janela &apos;Sobre terrenos&apos;, clique no chão com o botão direito e selecione  &apos;Sobre terrenos&apos;. Ou clique no ícone &apos;i&apos; da barra de navegação." name="Parcel Management">
-		<action description="Transferir e comprar terreno para o grupo" longdescription="Transfere e compre terreno para o grupo. É feito em Sobre o terreno &gt; aba Geral." name="land deed"/>
-		<action description="Abandonar terreno para Governador Linden" longdescription="Abandone terreno para Governador Linden. *AVISO* Qualquer membro em uma função com esta habilidade pode abandonar o terreno pertencente ao grupo em Sobre o terreno &gt; aba Geral, revertendo à posse Linden sem uma venda! Certifique-se de saber o que está fazendo antes de designar esta habilidade." name="land release"/>
-		<action description="Definir terreno para informação de venda" longdescription="Defina informações de venda para terreno. *AVISO* Qualquer membro em uma função com esta habilidade pode vender terrenos pertencentes ao grupo em Sobre o terreno &gt; aba Geral como quiser! Certifique-se de sabe o que está fazendo antes de designar esta habilidade." name="land set sale info"/>
-		<action description="Subdividir e unir parcelas" longdescription="Juntar ou dividir lotes.  Clique no chão com o botão direito, selecione &apos;Editar terreno&apos; e arraste o mouse sobre o terreno para ver as opções.  Para dividir um terreno, selecione a área a ser dividida e clique em &apos;Dividir&apos;.  Para juntar terrenos, selecione dois ou mais lotes adjacentes e clique em &apos;Juntar&apos;." name="land divide join"/>
+		<action description="Transferir e comprar terreno para o grupo" longdescription="Transfere e compre terreno para o grupo. É feito em Sobre o terreno &gt; aba Geral." name="land deed" value="12"/>
+		<action description="Abandonar terreno para Governador Linden" longdescription="Abandone terreno para Governador Linden. *AVISO* Qualquer membro em uma função com esta habilidade pode abandonar o terreno pertencente ao grupo em Sobre o terreno &gt; aba Geral, revertendo à posse Linden sem uma venda! Certifique-se de saber o que está fazendo antes de designar esta habilidade." name="land release" value="13"/>
+		<action description="Definir terreno para informação de venda" longdescription="Defina informações de venda para terreno. *AVISO* Qualquer membro em uma função com esta habilidade pode vender terrenos pertencentes ao grupo em Sobre o terreno &gt; aba Geral como quiser! Certifique-se de sabe o que está fazendo antes de designar esta habilidade." name="land set sale info" value="14"/>
+		<action description="Subdividir e unir parcelas" longdescription="Juntar ou dividir lotes.  Clique no chão com o botão direito, selecione &apos;Editar terreno&apos; e arraste o mouse sobre o terreno para ver as opções.  Para dividir um terreno, selecione a área a ser dividida e clique em &apos;Dividir&apos;.  Para juntar terrenos, selecione dois ou mais lotes adjacentes e clique em &apos;Juntar&apos;." name="land divide join" value="15"/>
 	</action_set>
 	<action_set description="Estas habilidades incluem poderes para mudar o nome da parcelas e configurações de publicação, visibilidade da busca de diretório e ponto de aterrissagem &amp; opções de rota de TP." name="Parcel Identity">
-		<action description="Alternar &apos;Exibir nos resultados de busca&apos; e selecionar a categoria" longdescription="Alterne entre &apos;Exibir nos resultados de busca&apos; ou não, e selecione a categoria do terreno em &apos;Sobre o terreno&apos;." name="land find places"/>
-		<action description="Mude o nome, a descrição e a exibição do terreno nos resultados de busca." longdescription="Mude o nome, a descrição e a exibição do terreno nos resultados de busca.  Veja essas opções em Sobre o terreno &gt; guia Opções." name="land change identity"/>
-		<action description="Definir ponto de aterrissagem e rota de teletransporte" longdescription="Em uma parcela pertencente ao grupo, membros em uma função com esta habilidade podem definir um ponto de aterrissagem para especificar onde os teletransportes chegam e também definir a rota do teletransporte para um maior controle. É feito em Sobre o terreno &gt; aba Opções." name="land set landing point"/>
+		<action description="Alternar &apos;Exibir nos resultados de busca&apos; e selecionar a categoria" longdescription="Alterne entre &apos;Exibir nos resultados de busca&apos; ou não, e selecione a categoria do terreno em &apos;Sobre o terreno&apos;." name="land find places" value="17"/>
+		<action description="Mude o nome, a descrição e a exibição do terreno nos resultados de busca." longdescription="Mude o nome, a descrição e a exibição do terreno nos resultados de busca.  Veja essas opções em Sobre o terreno &gt; guia Opções." name="land change identity" value="18"/>
+		<action description="Definir ponto de aterrissagem e rota de teletransporte" longdescription="Em uma parcela pertencente ao grupo, membros em uma função com esta habilidade podem definir um ponto de aterrissagem para especificar onde os teletransportes chegam e também definir a rota do teletransporte para um maior controle. É feito em Sobre o terreno &gt; aba Opções." name="land set landing point" value="19"/>
 	</action_set>
 	<action_set description="Estas habilidade incluem poderes que afetam opções de parcela, como &apos;Criar objetos&apos;, &apos;Editar terreno&apos; e música &amp; configurações de mídia." name="Parcel Settings">
-		<action description="Mudar música &amp; configurações de mídia" longdescription="Mude streaming de música e configurações de vídeo em Sobre o terreno &gt; aba Mídia." name="land change media"/>
-		<action description="Ativar/desativar &apos;Editar terreno&apos;" longdescription="Ative/desative &apos;Editar terreno&apos;. *AVISO* Sobre o terreno &gt; aba Opções &gt; Editar terreno permite a qualquer um alterar as formas de seu terreno, substituir e mover plantas Linden. Certifique-se de saber o que está fazendo antes de desginar esta habilidade. A edição de terreno é ativada/desativada em Sobre o terreno &gt; aba Opções." name="land edit"/>
-		<action description="Ativar/desativar variados Sobre o Terreno &gt; Opções de configuração" longdescription="Alterna as opções &apos;Seguro (zero danos)&apos;, &apos;Voar&apos; e autorizar outros residentes a:  &apos;Editar terreno&apos;, &apos;Contruir&apos;, &apos;Criar marcos&apos; e &apos;Executar scripts&apos; nos terrenos do grupo. Clique em Sobre o terreno &gt; guia Opções." name="land options"/>
+		<action description="Mudar música &amp; configurações de mídia" longdescription="Mude streaming de música e configurações de vídeo em Sobre o terreno &gt; aba Mídia." name="land change media" value="20"/>
+		<action description="Ativar/desativar &apos;Editar terreno&apos;" longdescription="Ative/desative &apos;Editar terreno&apos;. *AVISO* Sobre o terreno &gt; aba Opções &gt; Editar terreno permite a qualquer um alterar as formas de seu terreno, substituir e mover plantas Linden. Certifique-se de saber o que está fazendo antes de desginar esta habilidade. A edição de terreno é ativada/desativada em Sobre o terreno &gt; aba Opções." name="land edit" value="21"/>
+		<action description="Ativar/desativar variados Sobre o Terreno &gt; Opções de configuração" longdescription="Alterna as opções &apos;Seguro (zero danos)&apos;, &apos;Voar&apos; e autorizar outros residentes a:  &apos;Editar terreno&apos;, &apos;Contruir&apos;, &apos;Criar marcos&apos; e &apos;Executar scripts&apos; nos terrenos do grupo. Clique em Sobre o terreno &gt; guia Opções." name="land options" value="22"/>
 	</action_set>
 	<action_set description="Estas habilidades incluem poderes que permitem a membros ultrapassar restrições em parcelas pertencentes ao grupo." name="Parcel Powers">
-		<action description="Sempre permitir &apos;Editar terreno&apos;" longdescription="Membros em uma função com esta habilidade podem editar terreno em uma parcela pertencente ao grupo, mesmo se estiver desativada em Sobre o terreno &gt; aba Opções." name="land allow edit land"/>
-		<action description="Sempre permitir &apos;Voar&apos;" longdescription="Membros em uma função com esta habilidade podem voar sobre uma parcela pertencente ao grupo, mesmo se estiver desativada em Sobre o terreno &gt; aba Opções." name="land allow fly"/>
-		<action description="Sempre permitir &apos;Criar objetos&apos;" longdescription="Membros em uma função com esta habilidade podem criar objetos em uma parcela pertencente ao grupo, mesmo se estiver desativada em Sobre o terreno &gt; aba Opções." name="land allow create"/>
-		<action description="Sempre permitir &apos;Criar ponto de referência&apos;" longdescription="Membros em uma função com esta habilidade podem colocar um ponto de referência uma parcela pertencente ao grupo, mesmo se estiver desativada em Sobre o terreno &gt; aba Opções." name="land allow landmark"/>
-		<action description="Permitir &apos;Colocar casa aqui&apos; no terreno do grupo" longdescription="Membros exercendo cargos com esta função podem selecionar no menu Mundo &gt; Marcos &gt; Definir como casa em lotes doados ao grupo." name="land allow set home"/>
+		<action description="Sempre permitir &apos;Editar terreno&apos;" longdescription="Membros em uma função com esta habilidade podem editar terreno em uma parcela pertencente ao grupo, mesmo se estiver desativada em Sobre o terreno &gt; aba Opções." name="land allow edit land" value="23"/>
+		<action description="Sempre permitir &apos;Voar&apos;" longdescription="Membros em uma função com esta habilidade podem voar sobre uma parcela pertencente ao grupo, mesmo se estiver desativada em Sobre o terreno &gt; aba Opções." name="land allow fly" value="24"/>
+		<action description="Sempre permitir &apos;Criar objetos&apos;" longdescription="Membros em uma função com esta habilidade podem criar objetos em uma parcela pertencente ao grupo, mesmo se estiver desativada em Sobre o terreno &gt; aba Opções." name="land allow create" value="25"/>
+		<action description="Sempre permitir &apos;Criar ponto de referência&apos;" longdescription="Membros em uma função com esta habilidade podem colocar um ponto de referência uma parcela pertencente ao grupo, mesmo se estiver desativada em Sobre o terreno &gt; aba Opções." name="land allow landmark" value="26"/>
+		<action description="Permitir &apos;Colocar casa aqui&apos; no terreno do grupo" longdescription="Membros exercendo cargos com esta função podem selecionar no menu Mundo &gt; Marcos &gt; Definir como casa em lotes doados ao grupo." name="land allow set home" value="28"/>
+		<action description="Permitir a &apos;Organização de eventos&apos; que usam terrenos do grupo" longdescription="Membros que exercem cargos com esta função podem usar terrenos do grupo para eventos que estão organizando." name="land allow host event" value="41"/>
 	</action_set>
 	<action_set description="Estas habilidades incluem poderes de permitir ou restringir acesso a parcelas pertencentes ao grupo, incluindo congelar e expulsar residentes." name="Parcel Access">
-		<action description="Gerenciar listas de acesso à parcela" longdescription="Gerencie a lista de acesso à parcela em Sobre o terreno &gt; aba Acesso." name="land manage allowed"/>
-		<action description="Gerenciar lista de banidos da parcela" longdescription="Administre as listas de acesso e bloqueio em Sobre o terreno &gt; guia Acesso." name="land manage banned"/>
-		<action description="Modificar as opções &apos;Vender passes para&apos;" longdescription="Mude as opções &apos;Vender passes para&apos; em Sobre o terreno &gt; guia Acesso." name="land manage passes"/>
-		<action description="Expulsar e congelar residentes nas parcelas" longdescription="Membros exercendo cargos com esta função podem lidar com residentes problemáticos nos terrenos do grupo. Clique no residente com o botão direito, depois selecione &apos;Ejetar&apos; ou &apos;Congelar&apos;." name="land admin"/>
+		<action description="Gerenciar listas de acesso à parcela" longdescription="Gerencie a lista de acesso à parcela em Sobre o terreno &gt; aba Acesso." name="land manage allowed" value="29"/>
+		<action description="Gerenciar lista de banidos da parcela" longdescription="Administre as listas de acesso e bloqueio em Sobre o terreno &gt; guia Acesso." name="land manage banned" value="30"/>
+		<action description="Modificar as opções &apos;Vender passes para&apos;" longdescription="Mude as opções &apos;Vender passes para&apos; em Sobre o terreno &gt; guia Acesso." name="land manage passes" value="31"/>
+		<action description="Expulsar e congelar residentes nas parcelas" longdescription="Membros exercendo cargos com esta função podem lidar com residentes problemáticos nos terrenos do grupo. Clique no residente com o botão direito, depois selecione &apos;Ejetar&apos; ou &apos;Congelar&apos;." name="land admin" value="32"/>
 	</action_set>
 	<action_set description="Estas habilidades incluem poderes de permitir a membros retornar objetos e colocar e mover plantas Linden. Útil para que membros organizem a paisagem, porém deve ser usado com cuidado, devido a não ser possível desfazer a mudança dos objetos." name="Parcel Content">
-		<action description="Retornar objetos que pertencem ao grupo" longdescription="Retorne objetos em parcelas pertencentes ao grupo que pertencem ao grupo em Sobre o terreno &gt; aba Objetos." name="land return group owned"/>
-		<action description="Retornar objetos definidos para o grupo" longdescription="Retorne objetos em parcelas pertencentes ao grupo que em Sobre o terrreno &gt; aba Objetos." name="land return group set"/>
-		<action description="Retornar objetos que não pertencem ao grupo" longdescription="Retorne objetos nas parcelas pertencentes a um grupo que estão sem grupo em em Sobre o terreno &gt; aba Objetos." name="land return non group"/>
-		<action description="Ajardinar usando plantas Linden" longdescription="Função de paisagismo: poder de plantar e mudar árvores, plantas e grama Linden.  A pasta Biblioteca &gt; Objetos do inventário contém material de paisagismo. Use o menu Construir para criar suas próprias plantas." name="land gardening"/>
+		<action description="Retornar objetos que pertencem ao grupo" longdescription="Retorne objetos em parcelas pertencentes ao grupo que pertencem ao grupo em Sobre o terreno &gt; aba Objetos." name="land return group owned" value="48"/>
+		<action description="Retornar objetos definidos para o grupo" longdescription="Retorne objetos em parcelas pertencentes ao grupo que em Sobre o terrreno &gt; aba Objetos." name="land return group set" value="33"/>
+		<action description="Retornar objetos que não pertencem ao grupo" longdescription="Retorne objetos nas parcelas pertencentes a um grupo que estão sem grupo em em Sobre o terreno &gt; aba Objetos." name="land return non group" value="34"/>
+		<action description="Ajardinar usando plantas Linden" longdescription="Função de paisagismo: poder de plantar e mudar árvores, plantas e grama Linden.  A pasta Biblioteca &gt; Objetos do inventário contém material de paisagismo. Use o menu Construir para criar suas próprias plantas." name="land gardening" value="35"/>
 	</action_set>
 	<action_set description="Estas funções incluem poderes de transferir, vender e modificar os objetos do grupo.  Essas opções ficam nas Ferramentas de contrução &gt; guia Geral.  Clique em um objeto com o botão direito e selecione Editar para ver as configurações do objeto." name="Object Management">
-		<action description="Transferir objetos para o grupo" longdescription="Transfira objetos para o grupo em Ferramentas de construção &gt; guia Geral." name="object deed"/>
-		<action description="Manipular (mover, copiar, modificar) objetos do grupo" longdescription="Manipule (transportar, copiar, modificar) objetos do grupo nas Ferramentas de construção &gt; guia Geral." name="object manipulate"/>
-		<action description="Definir objetos pertencentes ao grupo para venda" longdescription="Ponha objetos do grupo à venda nas Ferramentas de construção &gt; guia Geral." name="object set sale"/>
+		<action description="Transferir objetos para o grupo" longdescription="Transfira objetos para o grupo em Ferramentas de construção &gt; guia Geral." name="object deed" value="36"/>
+		<action description="Manipular (mover, copiar, modificar) objetos do grupo" longdescription="Manipule (transportar, copiar, modificar) objetos do grupo nas Ferramentas de construção &gt; guia Geral." name="object manipulate" value="38"/>
+		<action description="Definir objetos pertencentes ao grupo para venda" longdescription="Ponha objetos do grupo à venda nas Ferramentas de construção &gt; guia Geral." name="object set sale" value="39"/>
 	</action_set>
 	<action_set description="Estas habilidades incluem poderes que requerem que membros paguem dívidas e recebam dividendos do grupo, e restringem acesso ao histórico de conta do grupo." name="Accounting">
-		<action description="Pagar débitos e receber dividendos do grupo" longdescription="Members in a Role with this Ability will automatically pay group liabilities and receive group dividends. This means they will receive a portion of group-owned land sales which are distributed daily, as well as contribute towards things like parcel listing fees. " name="accounting accountable"/>
+		<action description="Pagar débitos e receber dividendos do grupo" longdescription="Members in a Role with this Ability will automatically pay group liabilities and receive group dividends. This means they will receive a portion of group-owned land sales which are distributed daily, as well as contribute towards things like parcel listing fees. " name="accounting accountable" value="40"/>
 	</action_set>
 	<action_set description="Estas habilidade incluem poderes de permitir enviar, receber e ver avisos de grupo." name="Notices">
-		<action description="Enviar aviso" longdescription="Membros que exercem cargos com esta função podem enviar avisos na seção Avisos." name="notices send"/>
-		<action description="Receber novos avisos e ver os anteriores" longdescription="Membros que exercem cargos com esta função podem receber e ler avisos antigos na seção Avisos." name="notices receive"/>
-	</action_set>
-	<action_set description="Estas habilidades incluem poderes de permitir a membros definir e votar em propostas e ver histórico de votação." name="Proposals">
-		<action description="Criar proposta" longdescription="Membros em uma função com esta habilidade podem criar proposta para serem votadas em Informações de grupo &gt; aba Propostas." name="proposal start"/>
-		<action description="Votar em propostas" longdescription="Membros em uma função com esta habilidade podem votar em propostas em Informações de grupo &gt; aba Propostas." name="proposal vote"/>
+		<action description="Enviar aviso" longdescription="Membros que exercem cargos com esta função podem enviar avisos na seção Avisos." name="notices send" value="42"/>
+		<action description="Receber novos avisos e ver os anteriores" longdescription="Membros que exercem cargos com esta função podem receber e ler avisos antigos na seção Avisos." name="notices receive" value="43"/>
 	</action_set>
 </role_actions>
diff --git a/indra/newview/skins/default/xui/pt/strings.xml b/indra/newview/skins/default/xui/pt/strings.xml
index 2247b0a76b..8adf7f3a18 100644
--- a/indra/newview/skins/default/xui/pt/strings.xml
+++ b/indra/newview/skins/default/xui/pt/strings.xml
@@ -194,6 +194,9 @@
 	<string name="TooltipAgentUrl">
 		Clique para ver o perfil deste residente
 	</string>
+	<string name="TooltipAgentInspect">
+		Saiba mais sobre este residente
+	</string>
 	<string name="TooltipAgentMute">
 		Clique para silenciar este residente
 	</string>
@@ -741,6 +744,12 @@
 	<string name="Estate / Full Region">
 		Propriedadade / Região inteira:
 	</string>
+	<string name="Estate / Homestead">
+		Imóvel / Homestead
+	</string>
+	<string name="Mainland / Homestead">
+		Continente / Homestead
+	</string>
 	<string name="Mainland / Full Region">
 		Continente / Região inteira:
 	</string>
@@ -3471,7 +3480,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
 		Você é o único usuário desta sessão.
 	</string>
 	<string name="offline_message">
-		[FIRST] [LAST] está offline.
+		[NAME] está offline.
 	</string>
 	<string name="invite_message">
 		Clique no botão [BUTTON NAME] para aceitar/ conectar a este bate-papo em voz.
@@ -3540,6 +3549,9 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
 		http://secondlife.com/landing/voicemorphing
 	</string>
 	<string name="paid_you_ldollars">
+		[NAME] lhe pagou L$ [AMOUNT] [REASON].
+	</string>
+	<string name="paid_you_ldollars_no_reason">
 		[NAME] lhe pagou L$ [AMOUNT]
 	</string>
 	<string name="you_paid_ldollars">
@@ -3554,6 +3566,9 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
 	<string name="you_paid_ldollars_no_name">
 		You pagou L$[AMOUNT] por [REASON].
 	</string>
+	<string name="for item">
+		por [ITEM]
+	</string>
 	<string name="for a parcel of land">
 		por uma parcela
 	</string>
@@ -3572,6 +3587,9 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
 	<string name="to upload">
 		para carregar
 	</string>
+	<string name="to publish a classified ad">
+		para publicar um anúncio
+	</string>
 	<string name="giving">
 		Dando L$ [AMOUNT]
 	</string>
-- 
cgit v1.2.3


From 451d115c1009ded2b2d74efefbe0611c62343eed Mon Sep 17 00:00:00 2001
From: Eli Linden <eli@lindenlab.com>
Date: Mon, 8 Nov 2010 13:17:32 -0800
Subject: CT-633 WIP PT DE translation for Delta Set19, new files, for Viewer
 2.3

---
 .../skins/default/xui/de/floater_display_name.xml      | 18 ++++++++++++++++++
 .../skins/default/xui/pt/floater_display_name.xml      | 18 ++++++++++++++++++
 2 files changed, 36 insertions(+)
 create mode 100644 indra/newview/skins/default/xui/de/floater_display_name.xml
 create mode 100644 indra/newview/skins/default/xui/pt/floater_display_name.xml

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/de/floater_display_name.xml b/indra/newview/skins/default/xui/de/floater_display_name.xml
new file mode 100644
index 0000000000..4c2914fccb
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_display_name.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Display Name" title="ANZEIGENAMEN ÄNDERN">
+	<text name="info_text">
+		Der Anzeigename ist der Name, den Sie Ihrem Avatar geben. Sie können ihn einmal pro Woche ändern.
+	</text>
+	<text name="lockout_text">
+		Sie können Ihren Anzeigenamen erst wieder zu diesem Zeitpunkt ändern: [TIME].
+	</text>
+	<text name="set_name_label">
+		Neuer Anzeigename:
+	</text>
+	<text name="name_confirm_label">
+		Geben Sie den neuen Namen zur Bestätigung noch einmal ein:
+	</text>
+	<button label="Speichern" name="save_btn" tool_tip="Speichern Sie Ihren neuen Anzeigenamen"/>
+	<button label="Zurücksetzen" name="reset_btn" tool_tip="Benutzernamen als Anzeigenamen verwenden"/>
+	<button label="Abbrechen" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_display_name.xml b/indra/newview/skins/default/xui/pt/floater_display_name.xml
new file mode 100644
index 0000000000..8daa40cc23
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_display_name.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Display Name" title="MUDAR NOME DE TELA">
+	<text name="info_text">
+		O nome que você selecionou para o seu avatar é denominado nome de tela. Você pode mudar seu nome de tela uma vez por semana.
+	</text>
+	<text name="lockout_text">
+		Você poderá mudar seu nome de tela depois de: [TIME].
+	</text>
+	<text name="set_name_label">
+		Novo nome de tela:
+	</text>
+	<text name="name_confirm_label">
+		Digite seu novo nome novamente para confirmá-lo:
+	</text>
+	<button label="Salvar" name="save_btn" tool_tip="Salvar o novo nome de tela"/>
+	<button label="Redefinir" name="reset_btn" tool_tip="Usar o mesmo nome como nome de tela e de usuário"/>
+	<button label="Cancelar" name="cancel_btn"/>
+</floater>
-- 
cgit v1.2.3


From 024e5ff23542cf0604b73901311bb4d024957b1c Mon Sep 17 00:00:00 2001
From: Seth ProductEngine <slitovchuk@productengine.com>
Date: Tue, 9 Nov 2010 00:55:44 +0200
Subject: STORM-559 FIXED crash upon quitting the viewer while an outfit is
 being saved.

---
 indra/newview/llappearancemgr.cpp | 6 ++++++
 1 file changed, 6 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp
index 62074ddcd5..4e0bfb2e22 100644
--- a/indra/newview/llappearancemgr.cpp
+++ b/indra/newview/llappearancemgr.cpp
@@ -2437,6 +2437,12 @@ public:
 
 	virtual ~LLShowCreatedOutfit()
 	{
+		if (!LLApp::isRunning())
+		{
+			llwarns << "called during shutdown, skipping" << llendl;
+			return;
+		}
+
 		LLSD key;
 		
 		//EXT-7727. For new accounts LLShowCreatedOutfit is created during login process
-- 
cgit v1.2.3


From 9f6e4d907ec4781f1b82bb71e2028b39860e7df8 Mon Sep 17 00:00:00 2001
From: Seth ProductEngine <slitovchuk@productengine.com>
Date: Tue, 9 Nov 2010 01:10:08 +0200
Subject: STORM-577 FIXED Increased classified description maximum length to
 256 characters.

---
 indra/newview/skins/default/xui/en/panel_edit_classified.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_edit_classified.xml b/indra/newview/skins/default/xui/en/panel_edit_classified.xml
index ce0438fbc9..f60c1e62ac 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_classified.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_classified.xml
@@ -147,7 +147,7 @@
          layout="topleft"
          left="10"
          top_pad="2"
-         max_length="64"
+         max_length="256"
          name="classified_desc"
          text_color="black"
          word_wrap="true" />
-- 
cgit v1.2.3


From 197f09f1ea7c634d619a3d87d65f6e929611c511 Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Mon, 8 Nov 2010 15:40:27 -0800
Subject: EXP-421 FIX Notifications tab in Preferences not working properly
 reverted to old sense where ignore setting of notifications has meaning
 true=show false=ignore reviewed by Callum

---
 indra/newview/skins/default/xui/en/notifications.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 83cbcb3344..9f98823c01 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -6532,7 +6532,7 @@ Mute everyone?
     <form name="form">
       <ignore name="ignore"
               control="MediaEnablePopups"
-              invert_control="false"
+              invert_control="true"
               text="Enable all pop-ups"/>
       <button default="true"
               index="0"
-- 
cgit v1.2.3


From 0836d1b1ae861ee7a226ba342166148a31cc5bdd Mon Sep 17 00:00:00 2001
From: brad kittenbrink <brad@lindenlab.com>
Date: Mon, 8 Nov 2010 15:51:39 -0800
Subject: Fix for linux link errors in teamcity.

---
 indra/newview/CMakeLists.txt | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index f18107f673..ff099710f1 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -1643,7 +1643,14 @@ if (WINDOWS)
     endif (PACKAGE)
 endif (WINDOWS)
 
+# *NOTE - this list is very sensitive to ordering, test carefully on all
+# platforms if you change the releative order of the entries here.
+# In particular, cmake 2.6.4 (when buidling with linux/makefile generators)
+# appears to sometimes de-duplicate redundantly listed dependencies improperly.
+# To work around this, higher level modules should be listed before the modules
+# that they depend upon. -brad
 target_link_libraries(${VIEWER_BINARY_NAME}
+    ${UPDATER_LIBRARIES}
     ${LLAUDIO_LIBRARIES}
     ${LLCHARACTER_LIBRARIES}
     ${LLIMAGE_LIBRARIES}
@@ -1680,7 +1687,6 @@ target_link_libraries(${VIEWER_BINARY_NAME}
     ${OPENSSL_LIBRARIES}
     ${CRYPTO_LIBRARIES}
     ${LLLOGIN_LIBRARIES}
-    ${UPDATER_LIBRARIES}
     ${GOOGLE_PERFTOOLS_LIBRARIES}
     )
 
-- 
cgit v1.2.3


From b90614a6e7a217271766231b70b26c13cd7a670f Mon Sep 17 00:00:00 2001
From: Dave SIMmONs <simon@lindenlab.com>
Date: Mon, 8 Nov 2010 16:34:14 -0800
Subject: ER-290 : New motion prediction in the viewer has avatars settle a bit
 too deeply underground when the simulator is paused, also no angular velocity
 damping. Put Z limit on AVs, but not regular objects nor stopping rotation. 
 Reviewed by Kelly.

---
 indra/newview/llviewerobject.cpp | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp
index ded7fa0b67..1804fac1b3 100644
--- a/indra/newview/llviewerobject.cpp
+++ b/indra/newview/llviewerobject.cpp
@@ -2222,6 +2222,10 @@ void LLViewerObject::interpolateLinearMotion(const F64 & time, const F32 & dt)
 						{	// Past the time limit, so stop the object
 							phase_out = 0.0;
 							//llinfos << "Motion phase out to zero" << llendl;
+
+							// Kill angular motion as well.  Note - not adding this due to paranoia
+							// about stopping rotation for llTargetOmega objects and not having it restart
+							// setAngularVelocity(LLVector3::zero);
 						}
 						else if (mLastInterpUpdateSecs - mLastMessageUpdateSecs > sPhaseOutUpdateInterpolationTime)
 						{	// Last update was already phased out a bit
@@ -2253,7 +2257,18 @@ void LLViewerObject::interpolateLinearMotion(const F64 & time, const F32 & dt)
 
 		// Clamp interpolated position to minimum underground and maximum region height
 		LLVector3d new_pos_global = mRegionp->getPosGlobalFromRegion(new_pos);
-		F32 min_height = LLWorld::getInstance()->getMinAllowedZ(this, new_pos_global);
+		F32 min_height;
+		if (isAvatar())
+		{	// Make a better guess about AVs not going underground
+			min_height = LLWorld::getInstance()->resolveLandHeightGlobal(new_pos_global);
+			min_height += (0.5f * getScale().mV[VZ]);
+		}
+		else
+		{	// This will put the object underground, but we can't tell if it will stop 
+			// at ground level or not
+			min_height = LLWorld::getInstance()->getMinAllowedZ(this, new_pos_global);
+		}
+
 		new_pos.mV[VZ] = llmax(min_height, new_pos.mV[VZ]);
 		new_pos.mV[VZ] = llmin(LLWorld::getInstance()->getRegionMaxHeight(), new_pos.mV[VZ]);
 
-- 
cgit v1.2.3


From 8cce8827e01dab6bfcd3e94e56b6041f8f487c76 Mon Sep 17 00:00:00 2001
From: brad kittenbrink <brad@lindenlab.com>
Date: Mon, 8 Nov 2010 17:12:43 -0800
Subject: Fix for breakpad symbol files failing to be generated on linux.

---
 indra/newview/CMakeLists.txt               | 8 ++++----
 indra/newview/generate_breakpad_symbols.py | 3 ++-
 2 files changed, 6 insertions(+), 5 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index ff099710f1..a9d1fd9064 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -1837,13 +1837,13 @@ if (PACKAGE)
     set(VIEWER_COPY_MANIFEST copy_l_viewer_manifest)
   endif (LINUX)
 
-  if(CMAKE_CONFIGURATION_TYPES)
+  if(CMAKE_CFG_INTDIR STREQUAL ".")
+      set(LLBUILD_CONFIG ${CMAKE_BUILD_TYPE})
+  else(CMAKE_CFG_INTDIR STREQUAL ".")
       # set LLBUILD_CONFIG to be a shell variable evaluated at build time
       # reflecting the configuration we are currently building.
       set(LLBUILD_CONFIG ${CMAKE_CFG_INTDIR})
-  else(CMAKE_CONFIGURATION_TYPES)
-      set(LLBUILD_CONFIG ${CMAKE_BUILD_TYPE})
-  endif(CMAKE_CONFIGURATION_TYPES)
+  endif(CMAKE_CFG_INTDIR STREQUAL ".")
   add_custom_command(OUTPUT "${VIEWER_SYMBOL_FILE}"
     COMMAND "${PYTHON_EXECUTABLE}"
     ARGS
diff --git a/indra/newview/generate_breakpad_symbols.py b/indra/newview/generate_breakpad_symbols.py
index 0e61bee1ef..4fd04d780e 100644
--- a/indra/newview/generate_breakpad_symbols.py
+++ b/indra/newview/generate_breakpad_symbols.py
@@ -31,6 +31,7 @@ import fnmatch
 import itertools
 import operator
 import os
+import re
 import sys
 import shlex
 import subprocess
@@ -48,7 +49,7 @@ class MissingModuleError(Exception):
 def main(configuration, viewer_dir, viewer_exes, libs_suffix, dump_syms_tool, viewer_symbol_file):
     print "generate_breakpad_symbols run with args: %s" % str((configuration, viewer_dir, viewer_exes, libs_suffix, dump_syms_tool, viewer_symbol_file))
 
-    if configuration != "Release":
+    if not re.match("release", configuration, re.IGNORECASE):
         print "skipping breakpad symbol generation for non-release build."
         return 0
 
-- 
cgit v1.2.3


From b5df1d2abcef04ee5f491a7414189f4e82faaa1e Mon Sep 17 00:00:00 2001
From: Merov Linden <merov@lindenlab.com>
Date: Mon, 8 Nov 2010 17:16:31 -0800
Subject: STORM-105 : takes Vadim's comments into account, clean up use of
 static globals and magic strings, enforce naming conventions

---
 indra/newview/llappviewer.cpp     | 16 ++++++++--------
 indra/newview/llviewertexture.cpp | 33 ++++++++++++++++-----------------
 indra/newview/llviewertexture.h   |  1 -
 3 files changed, 24 insertions(+), 26 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 5b69fd80af..bf0f948a6d 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -1638,14 +1638,14 @@ bool LLAppViewer::cleanup()
 	{
 		llinfos << "Analyzing performance" << llendl;
 		
-		std::string baselineName = LLFastTimer::sLogName + "_baseline.slp";
-		std::string currentName  = LLFastTimer::sLogName + ".slp"; 
-		std::string reportName   = LLFastTimer::sLogName + "_report.csv";
+		std::string baseline_name = LLFastTimer::sLogName + "_baseline.slp";
+		std::string current_name  = LLFastTimer::sLogName + ".slp"; 
+		std::string report_name   = LLFastTimer::sLogName + "_report.csv";
 
 		LLFastTimerView::doAnalysis(
-			gDirUtilp->getExpandedFilename(LL_PATH_LOGS, baselineName),
-			gDirUtilp->getExpandedFilename(LL_PATH_LOGS, currentName),
-			gDirUtilp->getExpandedFilename(LL_PATH_LOGS, reportName));
+			gDirUtilp->getExpandedFilename(LL_PATH_LOGS, baseline_name),
+			gDirUtilp->getExpandedFilename(LL_PATH_LOGS, current_name),
+			gDirUtilp->getExpandedFilename(LL_PATH_LOGS, report_name));
 	}
 	LLMetricPerformanceTesterBasic::cleanClass() ;
 
@@ -2117,8 +2117,8 @@ bool LLAppViewer::initConfiguration()
 		llinfos << "'--logmetrics' argument : " << test_name << llendl;
 		if (test_name == "")
 		{
-			llwarns << "No '--logmetrics' argument given, will output all metrics." << llendl;
-			LLFastTimer::sLogName = std::string("metric");
+			llwarns << "No '--logmetrics' argument given, will output all metrics to " << DEFAULT_METRIC_NAME << llendl;
+			LLFastTimer::sLogName = DEFAULT_METRIC_NAME;
 		}
 		else
 		{
diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp
index 2b27f308df..6160510c0e 100644
--- a/indra/newview/llviewertexture.cpp
+++ b/indra/newview/llviewertexture.cpp
@@ -288,12 +288,6 @@ LLViewerFetchedTexture* LLViewerTextureManager::getFetchedTextureFromUrl(const s
 	return gTextureList.getImageFromUrl(url, usemipmaps, boost_priority, texture_type, internal_format, primary_format, force_id) ;
 }
 
-//static
-bool LLViewerTextureManager::perfStatsEnabled() 
-{
-	return (sTesterp != NULL);
-}
-
 LLViewerFetchedTexture* LLViewerTextureManager::getFetchedTextureFromHost(const LLUUID& image_id, LLHost host) 
 {
 	return gTextureList.getImageFromHost(image_id, host) ;
@@ -348,7 +342,7 @@ void LLViewerTextureManager::init()
 
 	LLViewerTexture::initClass() ;
 
-	if (LLFastTimer::sMetricLog && !perfStatsEnabled() && ((LLFastTimer::sLogName == sTesterName) || (LLFastTimer::sLogName == "metric")))
+	if (LLMetricPerformanceTesterBasic::isMetricLogRequested(sTesterName) && !LLMetricPerformanceTesterBasic::getTester(sTesterName))
 	{
 		sTesterp = new LLTexturePipelineTester() ;
 		if (!sTesterp->isValid())
@@ -420,9 +414,10 @@ void LLViewerTexture::updateClass(const F32 velocity, const F32 angular_velocity
 {
 	sCurrentTime = gFrameTimeSeconds ;
 
-	if (LLViewerTextureManager::perfStatsEnabled())
+	LLTexturePipelineTester* tester = (LLTexturePipelineTester*)LLMetricPerformanceTesterBasic::getTester(sTesterName);
+	if (tester)
 	{
-		LLViewerTextureManager::sTesterp->update() ;
+		tester->update() ;
 	}
 	LLViewerMediaTexture::updateClass() ;
 
@@ -615,9 +610,10 @@ bool LLViewerTexture::bindDefaultImage(S32 stage)
 	//check if there is cached raw image and switch to it if possible
 	switchToCachedImage() ;
 
-	if (LLViewerTextureManager::perfStatsEnabled())
+	LLTexturePipelineTester* tester = (LLTexturePipelineTester*)LLMetricPerformanceTesterBasic::getTester(sTesterName);
+	if (tester)
 	{
-		LLViewerTextureManager::sTesterp->updateGrayTextureBinding() ;
+		tester->updateGrayTextureBinding() ;
 	}
 	return res;
 }
@@ -1078,9 +1074,10 @@ BOOL LLViewerTexture::isLargeImage()
 //virtual 
 void LLViewerTexture::updateBindStatsForTester()
 {
-	if (LLViewerTextureManager::perfStatsEnabled())
+	LLTexturePipelineTester* tester = (LLTexturePipelineTester*)LLMetricPerformanceTesterBasic::getTester(sTesterName);
+	if (tester)
 	{
-		LLViewerTextureManager::sTesterp->updateTextureBindingStats(this) ;
+		tester->updateTextureBindingStats(this) ;
 	}
 }
 
@@ -1861,10 +1858,11 @@ bool LLViewerFetchedTexture::updateFetch()
 		// We may have data ready regardless of whether or not we are finished (e.g. waiting on write)
 		if (mRawImage.notNull())
 		{
-			if (LLViewerTextureManager::perfStatsEnabled())
+			LLTexturePipelineTester* tester = (LLTexturePipelineTester*)LLMetricPerformanceTesterBasic::getTester(sTesterName);
+			if (tester)
 			{
 				mIsFetched = TRUE ;
-				LLViewerTextureManager::sTesterp->updateTextureLoadingStats(this, mRawImage, LLAppViewer::getTextureFetch()->isFromLocalCache(mID)) ;
+				tester->updateTextureLoadingStats(this, mRawImage, LLAppViewer::getTextureFetch()->isFromLocalCache(mID)) ;
 			}
 			mRawDiscardLevel = fetch_discard;
 			if ((mRawImage->getDataSize() > 0 && mRawDiscardLevel >= 0) &&
@@ -3088,9 +3086,10 @@ void LLViewerLODTexture::scaleDown()
 	{		
 		switchToCachedImage() ;	
 
-		if (LLViewerTextureManager::perfStatsEnabled())
+		LLTexturePipelineTester* tester = (LLTexturePipelineTester*)LLMetricPerformanceTesterBasic::getTester(sTesterName);
+		if (tester)
 		{
-			LLViewerTextureManager::sTesterp->setStablizingTime() ;
+			tester->setStablizingTime() ;
 		}
 	}
 }
diff --git a/indra/newview/llviewertexture.h b/indra/newview/llviewertexture.h
index 88d449e061..b5636bbdc7 100644
--- a/indra/newview/llviewertexture.h
+++ b/indra/newview/llviewertexture.h
@@ -676,7 +676,6 @@ private:
 public:
     //texture pipeline tester
 	static LLTexturePipelineTester* sTesterp ;
-	static bool perfStatsEnabled();
 
 	//returns NULL if tex is not a LLViewerFetchedTexture nor derived from LLViewerFetchedTexture.
 	static LLViewerFetchedTexture*    staticCastToFetchedTexture(LLTexture* tex, BOOL report_error = FALSE) ;
-- 
cgit v1.2.3


From 8daea83c98d57e7c063bf9287b1e9c0cd720d337 Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Mon, 8 Nov 2010 19:27:24 -0800
Subject: EXP-421 FIX Notifications tab in Preferences not working properly
 fixed logic so that ignore consistently means *don't show* the notification
 the ignore settings still store "show the notification if true" values

---
 indra/newview/llfloaterpreference.cpp | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index 2bea3d37ff..5becd8f990 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -803,7 +803,7 @@ void LLFloaterPreference::buildPopupLists()
 		
 		LLScrollListItem* item = NULL;
 		
-		bool show_popup = formp->getIgnored();
+		bool show_popup = !formp->getIgnored();
 		if (!show_popup)
 		{
 			if (ignore == LLNotificationForm::IGNORE_WITH_LAST_RESPONSE)
@@ -1155,7 +1155,7 @@ void LLFloaterPreference::onClickDisablePopup()
 	for (itor = items.begin(); itor != items.end(); ++itor)
 	{
 		LLNotificationTemplatePtr templatep = LLNotifications::instance().getTemplate(*(std::string*)((*itor)->getUserdata()));
-		templatep->mForm->setIgnored(false);
+		templatep->mForm->setIgnored(true);
 	}
 	
 	buildPopupLists();
@@ -1169,7 +1169,7 @@ void LLFloaterPreference::resetAllIgnored()
 	{
 		if (iter->second->mForm->getIgnoreType() != LLNotificationForm::IGNORE_NO)
 		{
-			iter->second->mForm->setIgnored(true);
+			iter->second->mForm->setIgnored(false);
 		}
 	}
 }
@@ -1182,7 +1182,7 @@ void LLFloaterPreference::setAllIgnored()
 	{
 		if (iter->second->mForm->getIgnoreType() != LLNotificationForm::IGNORE_NO)
 		{
-			iter->second->mForm->setIgnored(false);
+			iter->second->mForm->setIgnored(true);
 		}
 	}
 }
-- 
cgit v1.2.3


From 00bd5906a69d3b0723645c3252721d7d6a808b70 Mon Sep 17 00:00:00 2001
From: Paul Guslisty <pguslisty@productengine.com>
Date: Tue, 9 Nov 2010 18:54:00 +0200
Subject: STORM-535 FIXED PLEASE allow adjustable transparency of "Nearby Chat"
 window, Chat History and Chat "Toasts" in Viewer 2.0!

- Added to the settings.xml values of transparency for active and inactive floaters

- Added three members to the LLFloater. These members store current transparency of floater, transparency of active and inactive floaters.

- Added callbacks that update transparency value of active and inactive floater. Also in these callbacks value of current floater transparency updated.

- In panel preferences advanced added two spinners: transparency of active floaters and inactive ones. See screenshot.
---
 indra/newview/app_settings/settings.xml            | 22 ++++++++++++
 .../default/xui/en/panel_preferences_advanced.xml  | 40 ++++++++++++++++++++--
 2 files changed, 60 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 097fdfbb99..ebd93b5987 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -35,6 +35,17 @@
       <key>Value</key>
       <integer>0</integer>
     </map>
+    <key>ActiveFloaterTransparency</key>
+    <map>
+      <key>Comment</key>
+      <string>Transparency of active floaters (floaters that have focus)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.95</real>
+    </map>
     <key>AdvanceSnapshot</key>
     <map>
       <key>Comment</key>
@@ -3986,6 +3997,17 @@
       <key>Value</key>
       <integer>1</integer>
     </map>
+    <key>InactiveFloaterTransparency</key>
+    <map>
+      <key>Comment</key>
+      <string>Transparency of inactive floaters (floaters that have no focus)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.5</real>
+    </map>
     <key>InBandwidth</key>
     <map>
       <key>Comment</key>
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
index 9d496575c9..006d7895b2 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
@@ -17,6 +17,42 @@
      name="middle_mouse">
         Middle Mouse
     </panel.string>
+    <slider
+     can_edit_text="false"
+     control_name="ActiveFloaterTransparency"
+     decimal_digits="2"
+     follows="left|top"
+     height="16"
+     increment="0.01"
+     initial_value="0.8"
+     layout="topleft"
+     label_width="120"
+     label="Active floater opacity:"
+     left="240"
+     max_val="1.00"
+     min_val="0.00"
+     name="active"
+     show_text="true"
+     top="75"
+     width="290" />
+    <slider
+     can_edit_text="false"
+     control_name="InactiveFloaterTransparency"
+     decimal_digits="2"
+     follows="left|top"
+     height="16"
+     increment="0.01"
+     initial_value="0.5"
+     layout="topleft"
+     label_width="120"
+     label="Inctive floater opacity:"
+     left="240"
+     max_val="1.00"
+     min_val="0.00"
+     name="active"
+     show_text="true"
+     top_pad="15"
+     width="290" />
          <icon
 	 follows="left|top"
 	 height="18"
@@ -70,7 +106,7 @@
      height="10"
      left="80"
      name="heading2"
-     width="270"
+     width="240"
      top_pad="5">
 Automatic position for:
 	</text>
@@ -207,7 +243,7 @@ Automatic position for:
    left="80"
    name="UI Size:"
    top_pad="25"
-   width="300">
+   width="160">
     UI size
   </text>
   <slider
-- 
cgit v1.2.3


From cc3e288e9ab21bad3f836928c49fd4619b38ea43 Mon Sep 17 00:00:00 2001
From: Dave Parks <davep@lindenlab.com>
Date: Tue, 9 Nov 2010 11:31:21 -0600
Subject: SH-412 Only blank screen if the actual window resized, fixes blinking
 on snapshot etc.

---
 indra/newview/llviewerdisplay.cpp | 32 +++++++++++++-------------------
 indra/newview/llviewerdisplay.h   |  1 +
 indra/newview/llviewerwindow.cpp  |  3 +++
 3 files changed, 17 insertions(+), 19 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp
index 1d5caabebb..ddb11829df 100644
--- a/indra/newview/llviewerdisplay.cpp
+++ b/indra/newview/llviewerdisplay.cpp
@@ -95,6 +95,7 @@ BOOL gForceRenderLandFence = FALSE;
 BOOL gDisplaySwapBuffers = FALSE;
 BOOL gDepthDirty = FALSE;
 BOOL gResizeScreenTexture = FALSE;
+BOOL gWindowResized = FALSE;
 BOOL gSnapshot = FALSE;
 
 U32 gRecentFrameCount = 0; // number of 'recent' frames
@@ -218,22 +219,15 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 	LLMemType mt_render(LLMemType::MTYPE_RENDER);
 	LLFastTimer t(FTM_RENDER);
 
-	if (gResizeScreenTexture)
-	{ //skip render on frames where screen texture is resizing
+	if (gWindowResized)
+	{ //skip render on frames where window has been resized
 		gGL.flush();
-		if (!for_snapshot)
-		{
-			glClear(GL_COLOR_BUFFER_BIT);
-			gViewerWindow->mWindow->swapBuffers();
-		}
-	
-		gResizeScreenTexture = FALSE;
+		glClear(GL_COLOR_BUFFER_BIT);
+		gViewerWindow->mWindow->swapBuffers();
 		gPipeline.resizeScreenTexture();
-
-		if (!for_snapshot)
-		{
-			return;
-		}
+		gResizeScreenTexture = FALSE;
+		gWindowResized = FALSE;
+		return;
 	}
 
 	if (LLPipeline::sRenderDeferred)
@@ -666,11 +660,11 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 				LLVertexBuffer::clientCopy(0.016);
 			}
 
-			//if (gResizeScreenTexture)
-			//{
-			//	gResizeScreenTexture = FALSE;
-			//	gPipeline.resizeScreenTexture();
-			//}
+			if (gResizeScreenTexture)
+			{
+				gResizeScreenTexture = FALSE;
+				gPipeline.resizeScreenTexture();
+			}
 
 			gGL.setColorMask(true, true);
 			glClearColor(0,0,0,0);
diff --git a/indra/newview/llviewerdisplay.h b/indra/newview/llviewerdisplay.h
index c6e86751e8..f6467d7f93 100644
--- a/indra/newview/llviewerdisplay.h
+++ b/indra/newview/llviewerdisplay.h
@@ -40,5 +40,6 @@ extern BOOL	gTeleportDisplay;
 extern LLFrameTimer	gTeleportDisplayTimer;
 extern BOOL			gForceRenderLandFence;
 extern BOOL gResizeScreenTexture;
+extern BOOL gWindowResized;
 
 #endif // LL_LLVIEWERDISPLAY_H
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index ea407c8f29..fda6f316e6 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -1863,6 +1863,8 @@ void LLViewerWindow::reshape(S32 width, S32 height)
 			return;
 		}
 
+		gWindowResized = TRUE;
+
 		// update our window rectangle
 		mWindowRectRaw.mRight = mWindowRectRaw.mLeft + width;
 		mWindowRectRaw.mTop = mWindowRectRaw.mBottom + height;
@@ -4439,6 +4441,7 @@ void LLViewerWindow::restoreGL(const std::string& progress_message)
 		LLVOAvatar::restoreGL();
 		
 		gResizeScreenTexture = TRUE;
+		gWindowResized = TRUE;
 
 		if (isAgentAvatarValid() && !gAgentAvatarp->isUsingBakedTextures())
 		{
-- 
cgit v1.2.3


From 3b31df090ba35e02d7cd85c435236afe143b02a9 Mon Sep 17 00:00:00 2001
From: Paul Guslisty <pguslisty@productengine.com>
Date: Tue, 9 Nov 2010 19:50:12 +0200
Subject: STORM-569 FIXED Add a Preference to enable Viewer UI Hints

- Added checkbox to the floater Preferences->panel General to Enable\Disable UI Hints
---
 indra/newview/skins/default/xui/en/panel_preferences_general.xml | 9 +++++++++
 1 file changed, 9 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_preferences_general.xml b/indra/newview/skins/default/xui/en/panel_preferences_general.xml
index 392d50fc42..67abec0f0e 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_general.xml
@@ -379,6 +379,15 @@ name="display_names_check"
 width="237"
 tool_tip="Check to use display names in chat, IM, name tags, etc."
 top_pad="20"/>
+  <check_box
+	control_name="EnableUIHints"
+	follows="top|left"
+	height="14"
+	label="Enable Viewer UI Hints"
+	layout="topleft"
+	left_pad="30"
+	name="viewer_hints_check"
+	width="237"/>
     <text
      type="string"
      length="1"
-- 
cgit v1.2.3


From 31e0c9122ecaa8aed1c5449acc3cb773441d6858 Mon Sep 17 00:00:00 2001
From: Bill Curtis <bill.curtis@gmail.com>
Date: Tue, 9 Nov 2010 10:25:11 -0800
Subject: fixing transposed characters

---
 indra/newview/llstartup.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 5781398faa..ac320ba761 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -2945,7 +2945,7 @@ bool process_login_success_response()
 	text = response["circuit_code"].asString();
 	if(!text.empty())
 	{
-		gMessageSystem->mOurCircuitCode = strtoult(ext.c_str(), NULL, 10);
+		gMessageSystem->mOurCircuitCode = strtoul(text.c_str(), NULL, 10);
 	}
 	std::string sim_ip_str = response["sim_ip"];
 	std::string sim_port_str = response["sim_port"];
-- 
cgit v1.2.3


From fdf616c59d87219e2d5ad6e12687cf2793cfba1e Mon Sep 17 00:00:00 2001
From: "Andrew A. de Laix" <alain@lindenlab.com>
Date: Tue, 9 Nov 2010 11:23:32 -0800
Subject: beginnings of the update installer (with simple install script for
 darwin).

---
 indra/newview/viewer_manifest.py | 4 ++++
 1 file changed, 4 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index 4596938775..f95697adb6 100644
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -575,6 +575,10 @@ class DarwinManifest(ViewerManifest):
             # most everything goes in the Resources directory
             if self.prefix(src="", dst="Resources"):
                 super(DarwinManifest, self).construct()
+		
+                if self.prefix(src="../viewer_components/updater", dst=""):
+                    self.path("update_install")
+                    self.end_prefix()
 
                 if self.prefix("cursors_mac"):
                     self.path("*.tif")
-- 
cgit v1.2.3


From dc59b268dc8f462b2b47de9cc6e2fa4473f7eeb9 Mon Sep 17 00:00:00 2001
From: Kent Quirk <q@lindenlab.com>
Date: Tue, 9 Nov 2010 15:18:41 -0500
Subject: SH-412 -- fix the way that redraws happen to eliminate flickering on
 resize -- patch from davep and seraph, I'm just applying it.

---
 indra/newview/llviewerdisplay.cpp | 32 +++++++++++++-------------------
 indra/newview/llviewerdisplay.h   |  1 +
 indra/newview/llviewerwindow.cpp  |  3 +++
 3 files changed, 17 insertions(+), 19 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp
index 40583f05bf..dbb3f9a7d0 100644
--- a/indra/newview/llviewerdisplay.cpp
+++ b/indra/newview/llviewerdisplay.cpp
@@ -95,6 +95,7 @@ BOOL gForceRenderLandFence = FALSE;
 BOOL gDisplaySwapBuffers = FALSE;
 BOOL gDepthDirty = FALSE;
 BOOL gResizeScreenTexture = FALSE;
+BOOL gWindowResized = FALSE;
 BOOL gSnapshot = FALSE;
 
 U32 gRecentFrameCount = 0; // number of 'recent' frames
@@ -218,22 +219,15 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 	LLMemType mt_render(LLMemType::MTYPE_RENDER);
 	LLFastTimer t(FTM_RENDER);
 
-	if (gResizeScreenTexture)
-	{ //skip render on frames where screen texture is resizing
+	if (gWindowResized)
+	{ //skip render on frames where window has been resized
 		gGL.flush();
-		if (!for_snapshot)
-		{
-			glClear(GL_COLOR_BUFFER_BIT);
-			gViewerWindow->mWindow->swapBuffers();
-		}
-	
-		gResizeScreenTexture = FALSE;
+		glClear(GL_COLOR_BUFFER_BIT);
+		gViewerWindow->mWindow->swapBuffers();
 		gPipeline.resizeScreenTexture();
-
-		if (!for_snapshot)
-		{
-			return;
-		}
+		gResizeScreenTexture = FALSE;
+		gWindowResized = FALSE;
+		return;
 	}
 
 	if (LLPipeline::sRenderDeferred)
@@ -665,11 +659,11 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 				LLVertexBuffer::clientCopy(0.016);
 			}
 
-			//if (gResizeScreenTexture)
-			//{
-			//	gResizeScreenTexture = FALSE;
-			//	gPipeline.resizeScreenTexture();
-			//}
+			if (gResizeScreenTexture)
+			{
+				gResizeScreenTexture = FALSE;
+				gPipeline.resizeScreenTexture();
+			}
 
 			gGL.setColorMask(true, true);
 			glClearColor(0,0,0,0);
diff --git a/indra/newview/llviewerdisplay.h b/indra/newview/llviewerdisplay.h
index c6e86751e8..f6467d7f93 100644
--- a/indra/newview/llviewerdisplay.h
+++ b/indra/newview/llviewerdisplay.h
@@ -40,5 +40,6 @@ extern BOOL	gTeleportDisplay;
 extern LLFrameTimer	gTeleportDisplayTimer;
 extern BOOL			gForceRenderLandFence;
 extern BOOL gResizeScreenTexture;
+extern BOOL gWindowResized;
 
 #endif // LL_LLVIEWERDISPLAY_H
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index ebcb6e3738..761df557f5 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -1839,6 +1839,8 @@ void LLViewerWindow::reshape(S32 width, S32 height)
 			return;
 		}
 
+		gWindowResized = TRUE;
+
 		// update our window rectangle
 		mWindowRectRaw.mRight = mWindowRectRaw.mLeft + width;
 		mWindowRectRaw.mTop = mWindowRectRaw.mBottom + height;
@@ -4415,6 +4417,7 @@ void LLViewerWindow::restoreGL(const std::string& progress_message)
 		LLVOAvatar::restoreGL();
 		
 		gResizeScreenTexture = TRUE;
+		gWindowResized = TRUE;
 
 		if (isAgentAvatarValid() && !gAgentAvatarp->isUsingBakedTextures())
 		{
-- 
cgit v1.2.3


From 9ae2891a3afefcbf0c72cadaef203426cb0e5954 Mon Sep 17 00:00:00 2001
From: "Andrew A. de Laix" <alain@lindenlab.com>
Date: Tue, 9 Nov 2010 15:04:44 -0800
Subject: start of a thread safe queue

---
 indra/newview/CMakeLists.txt         |  2 +
 indra/newview/llappviewer.cpp        |  5 +++
 indra/newview/llmainlooprepeater.cpp | 82 ++++++++++++++++++++++++++++++++++++
 indra/newview/llmainlooprepeater.h   | 65 ++++++++++++++++++++++++++++
 4 files changed, 154 insertions(+)
 create mode 100644 indra/newview/llmainlooprepeater.cpp
 create mode 100644 indra/newview/llmainlooprepeater.h

(limited to 'indra/newview')

diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index a9d1fd9064..36cfa615f0 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -283,6 +283,7 @@ set(viewer_SOURCE_FILES
     llloginhandler.cpp
     lllogininstance.cpp
     llmachineid.cpp
+    llmainlooprepeater.cpp
     llmanip.cpp
     llmaniprotate.cpp
     llmanipscale.cpp
@@ -815,6 +816,7 @@ set(viewer_HEADER_FILES
     llloginhandler.h
     lllogininstance.h
     llmachineid.h
+    llmainlooprepeater.h
     llmanip.h
     llmaniprotate.h
     llmanipscale.h
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index c0ec15f436..438f8668ae 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -197,6 +197,8 @@
 #include "llsecapi.h"
 #include "llmachineid.h"
 
+#include "llmainlooprepeater.h"
+
 // *FIX: These extern globals should be cleaned up.
 // The globals either represent state/config/resource-storage of either 
 // this app, or another 'component' of the viewer. App globals should be 
@@ -801,6 +803,9 @@ bool LLAppViewer::init()
 		return 1;
 	}
 	
+	// Initialize the repeater service.
+	LLMainLoopRepeater::getInstance()->start();
+	
 	//
 	// Initialize the window
 	//
diff --git a/indra/newview/llmainlooprepeater.cpp b/indra/newview/llmainlooprepeater.cpp
new file mode 100644
index 0000000000..c2eba97641
--- /dev/null
+++ b/indra/newview/llmainlooprepeater.cpp
@@ -0,0 +1,82 @@
+/** 
+ * @file llmachineid.cpp
+ * @brief retrieves unique machine ids
+ *
+ * $LicenseInfo:firstyear=2009&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+#include "llapr.h"
+#include "llevents.h"
+#include "llmainlooprepeater.h"
+
+
+
+// LLMainLoopRepeater
+//-----------------------------------------------------------------------------
+
+
+LLMainLoopRepeater::LLMainLoopRepeater(void):
+	mQueue(gAPRPoolp, 1024)
+{
+	; // No op.
+}
+
+
+void LLMainLoopRepeater::start(void)
+{
+	mMainLoopConnection = LLEventPumps::instance().
+		obtain("mainloop").listen("stupid name here", boost::bind(&LLMainLoopRepeater::onMainLoop, this, _1));
+	mRepeaterConnection = LLEventPumps::instance().
+		obtain("mainlooprepeater").listen("other stupid name here", boost::bind(&LLMainLoopRepeater::onMessage, this, _1));
+}
+
+
+void LLMainLoopRepeater::stop(void)
+{
+	mMainLoopConnection.release();
+	mRepeaterConnection.release();
+}
+
+
+bool LLMainLoopRepeater::onMainLoop(LLSD const &)
+{
+	LLSD message;
+	while(mQueue.tryPopBack(message)) {
+		std::string pump = message["pump"].asString();
+		if(pump.length() == 0 ) continue; // No pump.
+		LLEventPumps::instance().obtain(pump).post(message["payload"]);
+	}
+	return false;
+}
+
+
+bool LLMainLoopRepeater::onMessage(LLSD const & event)
+{
+	try {
+		mQueue.pushFront(event);
+	} catch(LLThreadSafeQueueError & e) {
+		llwarns << "could not repeat message (" << e.what() << ")" << 
+			event.asString() << LL_ENDL;
+	}
+	return false;
+}
diff --git a/indra/newview/llmainlooprepeater.h b/indra/newview/llmainlooprepeater.h
new file mode 100644
index 0000000000..96b83b4916
--- /dev/null
+++ b/indra/newview/llmainlooprepeater.h
@@ -0,0 +1,65 @@
+/** 
+ * @file llmainlooprepeater.h
+ * @brief a service for repeating messages on the main loop.
+ *
+ * $LicenseInfo:firstyear=2010&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLMAINLOOPREPEATER_H
+#define LL_LLMAINLOOPREPEATER_H
+
+
+#include "llsd.h"
+#include "llthreadsafequeue.h"
+
+
+//
+// A service which creates the pump 'mainlooprepeater' to which any thread can
+// post a message that will be re-posted on the main loop.
+//
+// The posted message should contain two map elements: pump and payload.  The
+// pump value is a string naming the pump to which the message should be
+// re-posted.  The payload value is what will be posted to the designated pump.
+//
+class LLMainLoopRepeater:
+	public LLSingleton<LLMainLoopRepeater>
+{
+public:
+	LLMainLoopRepeater(void);
+	
+	// Start the repeater service.
+	void start(void);
+	
+	// Stop the repeater service.
+	void stop(void);
+	
+private:
+	LLTempBoundListener mMainLoopConnection;
+	LLTempBoundListener mRepeaterConnection;
+	LLThreadSafeQueue<LLSD> mQueue;
+	
+	bool onMainLoop(LLSD const &);
+	bool onMessage(LLSD const & event);
+};
+
+
+#endif
-- 
cgit v1.2.3


From d99ce25401f03f39e8bfa1bd0e29c431049c03ce Mon Sep 17 00:00:00 2001
From: Andrew Productengine <adyukov@productengine.com>
Date: Wed, 10 Nov 2010 13:37:31 +0200
Subject: STORM-566 FIXED Added new tabs to preferences floater.

Their panels are currently empty and will be filled in later tasks.
---
 .../skins/default/xui/en/floater_preferences.xml   | 28 ++++++++++++++++------
 .../default/xui/en/panel_preferences_colors.xml    | 12 ++++++++++
 .../default/xui/en/panel_preferences_move.xml      | 12 ++++++++++
 3 files changed, 45 insertions(+), 7 deletions(-)
 create mode 100644 indra/newview/skins/default/xui/en/panel_preferences_colors.xml
 create mode 100644 indra/newview/skins/default/xui/en/panel_preferences_move.xml

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/floater_preferences.xml b/indra/newview/skins/default/xui/en/floater_preferences.xml
index 50d0011338..36108442f3 100644
--- a/indra/newview/skins/default/xui/en/floater_preferences.xml
+++ b/indra/newview/skins/default/xui/en/floater_preferences.xml
@@ -63,13 +63,6 @@
          layout="topleft"
          help_topic="preferences_display_tab"
          name="display" />
-        <panel
-		 class="panel_preference"
-         filename="panel_preferences_privacy.xml"
-         label="Privacy"
-         layout="topleft"
-         help_topic="preferences_im_tab"
-         name="im" />
         <panel
 		 class="panel_preference"
          filename="panel_preferences_sound.xml"
@@ -84,6 +77,13 @@
          layout="topleft"
          help_topic="preferences_chat_tab"
          name="chat" />
+        <panel
+		 class="panel_preference"
+         filename="panel_preferences_move.xml"
+         label="Move &amp; View"
+         layout="topleft"
+         help_topic="preferences_move_tab"
+         name="audio" />
         <panel
 		 class="panel_preference"
          filename="panel_preferences_alerts.xml"
@@ -91,6 +91,20 @@
          layout="topleft"
          help_topic="preferences_msgs_tab"
          name="msgs" />
+        <panel
+		 class="panel_preference"
+         filename="panel_preferences_colors.xml"
+         label="Colors"
+         layout="topleft"
+         help_topic="preferences_im_tab"
+         name="colors" />
+        <panel
+		 class="panel_preference"
+         filename="panel_preferences_privacy.xml"
+         label="Privacy"
+         layout="topleft"
+         help_topic="preferences_im_tab"
+         name="im" />
         <panel
 		 class="panel_preference"
          filename="panel_preferences_setup.xml"
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_colors.xml b/indra/newview/skins/default/xui/en/panel_preferences_colors.xml
new file mode 100644
index 0000000000..0061c1f229
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_preferences_colors.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ border="true"
+ follows="left|top|right|bottom"
+ height="408"
+ label="Colors"
+ layout="topleft"
+ left="102"
+ name="colors_panel"
+ top="1"
+ width="517">
+</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_move.xml b/indra/newview/skins/default/xui/en/panel_preferences_move.xml
new file mode 100644
index 0000000000..2d6dddfc8c
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_preferences_move.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ border="true"
+ follows="left|top|right|bottom"
+ height="408"
+ label="Move"
+ layout="topleft"
+ left="102"
+ name="move_panel"
+ top="1"
+ width="517">
+</panel>
-- 
cgit v1.2.3


From 2e7779e66cdb638803202fcb5a7b0e30d7c5fafc Mon Sep 17 00:00:00 2001
From: Paul Guslisty <pguslisty@productengine.com>
Date: Wed, 10 Nov 2010 16:23:26 +0200
Subject: STORM-572 FIXED Move "Bubble Chat" preference from Advanced to Chat

- Moved checkbox "Bubble Chat" from Advanced to Chat panel of Preferences floater
---
 .../skins/default/xui/en/panel_preferences_advanced.xml      | 12 +-----------
 .../newview/skins/default/xui/en/panel_preferences_chat.xml  | 12 +++++++++++-
 2 files changed, 12 insertions(+), 12 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
index 9d496575c9..e17d4768d4 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
@@ -155,17 +155,7 @@ Automatic position for:
      left_delta="0"
      name="enable_lip_sync"
      width="237"
-     top_pad="0" />
-        <check_box
-     control_name="UseChatBubbles"
-     follows="left|top"
-     height="16"
-     label="Bubble chat"
-     layout="topleft"
-     left="78"
-     top_pad="6"
-     name="bubble_text_chat"
-     width="150" />
+     top_pad="0" />        
     <slider
      control_name="ChatBubbleOpacity"
      follows="left|top"
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml
index 85824c2576..4ed81394fe 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml
@@ -448,6 +448,16 @@
      height="20"
      tool_tip="Check to see popups when an instant message arrives"
      width="400" />
+    <check_box
+     control_name="UseChatBubbles"
+     follows="left|top"
+     height="16"
+     label="Bubble Chat"
+     layout="topleft"
+     left="30"
+     top_pad="4"
+     name="bubble_text_chat"
+     width="150" />
     <check_box
      control_name="TranslateChat"
      enabled="true"
@@ -456,7 +466,7 @@
      layout="topleft"
      left="30"
      name="translate_chat_checkbox"
-     bottom_delta="40"
+     bottom_delta="20"
      width="400" />
     <text
      bottom_delta="30"
-- 
cgit v1.2.3


From 79ba890f0c2e189dac01c0e13ca0c839359d56f4 Mon Sep 17 00:00:00 2001
From: Andrew Productengine <adyukov@productengine.com>
Date: Wed, 10 Nov 2010 17:55:57 +0200
Subject: STORM-592 FIXED Added xml attribute that allows to customize color
 swatch label height.

This height was uncustomizable even by explicitly changing height of textbox in xml (i.e. writing caption_text.height = "value"), because it anyway received hardcoded value in LLColorSwatchCtrl's constructor.

- Added new label_height optional attribute to color swatch and used it in code.

P.S. Removing unused space in all color swatches in viewer should be done in some separate issue.
---
 indra/newview/llcolorswatch.cpp | 14 +++++++++-----
 indra/newview/llcolorswatch.h   |  2 ++
 2 files changed, 11 insertions(+), 5 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llcolorswatch.cpp b/indra/newview/llcolorswatch.cpp
index c9a526a3be..e7634ff0f4 100644
--- a/indra/newview/llcolorswatch.cpp
+++ b/indra/newview/llcolorswatch.cpp
@@ -53,6 +53,7 @@ LLColorSwatchCtrl::Params::Params()
 	alpha_background_image("alpha_background_image"),
 	border_color("border_color"),
     label_width("label_width", -1),
+	label_height("label_height", -1),
 	caption_text("caption_text"),
 	border("border")
 {
@@ -68,17 +69,20 @@ LLColorSwatchCtrl::LLColorSwatchCtrl(const Params& p)
 	mOnCancelCallback(p.cancel_callback()),
 	mOnSelectCallback(p.select_callback()),
 	mBorderColor(p.border_color()),
-	mLabelWidth(p.label_width)
+	mLabelWidth(p.label_width),
+	mLabelHeight(p.label_height)
 {	
 	LLTextBox::Params tp = p.caption_text;
+	// use custom label height if it is provided
+	mLabelHeight = mLabelHeight != -1 ? mLabelHeight : BTN_HEIGHT_SMALL;
 	// label_width is specified, not -1
 	if(mLabelWidth!= -1)
 	{
-		tp.rect(LLRect( 0, BTN_HEIGHT_SMALL, mLabelWidth, 0 ));
+		tp.rect(LLRect( 0, mLabelHeight, mLabelWidth, 0 ));
 	}
 	else
 	{
-		tp.rect(LLRect( 0, BTN_HEIGHT_SMALL, getRect().getWidth(), 0 ));
+		tp.rect(LLRect( 0, mLabelHeight, getRect().getWidth(), 0 ));
 	}
 	
 	tp.initial_value(p.label());
@@ -88,7 +92,7 @@ LLColorSwatchCtrl::LLColorSwatchCtrl(const Params& p)
 	LLRect border_rect = getLocalRect();
 	border_rect.mTop -= 1;
 	border_rect.mRight -=1;
-	border_rect.mBottom += BTN_HEIGHT_SMALL;
+	border_rect.mBottom += mLabelHeight;
 
 	LLViewBorder::Params params = p.border;
 	params.rect(border_rect);
@@ -194,7 +198,7 @@ void LLColorSwatchCtrl::draw()
 	F32 alpha = getDrawContext().mAlpha;
 	mBorder->setKeyboardFocusHighlight(hasFocus());
 	// Draw border
-	LLRect border( 0, getRect().getHeight(), getRect().getWidth(), BTN_HEIGHT_SMALL );
+	LLRect border( 0, getRect().getHeight(), getRect().getWidth(), mLabelHeight );
 	gl_rect_2d( border, mBorderColor.get(), FALSE );
 
 	LLRect interior = border;
diff --git a/indra/newview/llcolorswatch.h b/indra/newview/llcolorswatch.h
index a4ce1ca099..cd859ea128 100644
--- a/indra/newview/llcolorswatch.h
+++ b/indra/newview/llcolorswatch.h
@@ -61,6 +61,7 @@ public:
 		Optional<commit_callback_t> 	select_callback;
 		Optional<LLUIColor>				border_color;
 		Optional<S32>					label_width;
+		Optional<S32>					label_height;
 		
 		Optional<LLTextBox::Params>		caption_text;
 		Optional<LLViewBorder::Params>	border;
@@ -112,6 +113,7 @@ protected:
 	commit_callback_t mOnCancelCallback;
 	commit_callback_t mOnSelectCallback;
 	S32             mLabelWidth;
+	S32             mLabelHeight;
 
 	LLPointer<LLUIImage> mAlphaGradientImage;
 	std::string		mFallbackImageName;
-- 
cgit v1.2.3


From 3138b5de864d791e9fd2f535dcf0e3c0c69ad43a Mon Sep 17 00:00:00 2001
From: Paul Guslisty <pguslisty@productengine.com>
Date: Wed, 10 Nov 2010 18:23:33 +0200
Subject: STORM-570 FIXED Layout cleanup in the General tab of Preferences

- Adjusted vertical padding between all controls

- Set position and order of checkboxes between "Name tags" radio group and "Away timeout" checkbox according to the specification

- Deleted "My effects" color swatch
---
 .../default/xui/en/panel_preferences_general.xml   | 131 ++++++++-------------
 1 file changed, 51 insertions(+), 80 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_preferences_general.xml b/indra/newview/skins/default/xui/en/panel_preferences_general.xml
index 67abec0f0e..997d9c7104 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_general.xml
@@ -106,7 +106,7 @@
      height="15"
      layout="topleft"
      left="30"
-     top_pad="14"
+     top_pad="10"
      name="maturity_desired_prompt"
      width="200">
         I want to access content rated:
@@ -177,7 +177,7 @@
      layout="topleft"
      left="30"
      name="start_location_textbox"
-     top_pad="15"
+     top_pad="10"
      width="394">
         Start location:
     </text>
@@ -216,7 +216,7 @@
     layout="topleft"
     left="30"
     name="name_tags_textbox"
-    top_pad="14"
+    top_pad="10"
     width="400">
        Name tags:
    </text>
@@ -224,8 +224,8 @@
      control_name="AvatarNameTagMode"
      height="20"
      layout="topleft"
-     left="50"
-     top_pad="5" 
+     left="35"
+     top_pad="0" 
      name="Name_Tag_Preference">
         <radio_item
          label="Off"
@@ -261,9 +261,9 @@
      height="16"
      label="My name"
      layout="topleft"
-     left="70"
+     left="35"
      name="show_my_name_checkbox1"
-	 top_pad="0"
+	 top_pad="10"
      width="100" />
    <check_box
      control_name="NameTagShowUsernames"
@@ -271,7 +271,7 @@
      height="16"
      label="Usernames"
      layout="topleft"
-     left_pad="70"
+     left_pad="50"
      name="show_slids"
      tool_tip="Show username, like bobsmith123"
      top_delta="0" />
@@ -281,72 +281,63 @@
      height="16"
      label="Group titles"
      layout="topleft"
-     left="70"
+     left="35"
      width="100" 
      name="show_all_title_checkbox1"
 	 tool_tip="Show group titles, like Officer or Member"
-     top_pad="5" />
-
-   <check_box
-    control_name="NameTagShowFriends"
+     top_pad="3" />
+    <check_box
+     control_name="NameTagShowFriends"
 	 enabled_control="AvatarNameTagMode"
      height="16"
-    label="Highlight friends"
+     label="Highlight friends"
      layout="topleft"
-    left_pad="70"
-    name="show_friends"
-    tool_tip="Highlight the name tags of your friends"
-    top_delta="0" />
-
+     left_pad="50"
+     name="show_friends"
+     tool_tip="Highlight the name tags of your friends"/>     
+    <check_box
+	 control_name="UseDisplayNames"
+	 follows="top|left"
+	 height="16"
+	 label="View Display Names"
+	 layout="topleft"
+	 left="35"
+	 name="display_names_check"
+	 width="237"
+	 tool_tip="Check to use display names in chat, IM, name tags, etc."
+	 top_pad="3"/>
+	 
+	<check_box
+	 control_name="EnableUIHints"
+	 follows="top|left"
+	 height="16"
+	 label="Enable Viewer UI Hints"
+	 layout="topleft"
+	 left="30"
+	 name="viewer_hints_check"
+	 top_pad="7"
+	 width="237"/>
     <text
      type="string"
      length="1"
      follows="left|top"
-     height="15"
+     height="13"
      layout="topleft"
      left="30"
-     name="effects_color_textbox"
-     top_pad="9"
-     width="200">
-        My effects:
-    </text>
-    <text
-      type="string"
-      length="1"
-      follows="left|top"
-      height="13"
-      layout="topleft"
-      left_pad="5"
-      name="title_afk_text"
-      top_delta="0" 
-      width="190">
-    Away timeout:
+     name="title_afk_text"
+     top_pad="10" 
+     width="190">
+    	Away timeout:
     </text>
-    <color_swatch
-	 can_apply_immediately="true"
-     follows="left|top"
-     height="50"
-     layout="topleft"
-     left="50"
-     name="effect_color_swatch"
-     tool_tip="Click to open Color Picker"
-     width="38">
-		<color_swatch.init_callback
-		 function="Pref.getUIColor"
-		 parameter="EffectColor" />
-		<color_swatch.commit_callback
-		 function="Pref.applyUIColor"
-		 parameter="EffectColor" />
-	</color_swatch>
   <combo_box
-            height="23"
-            layout="topleft"
-            control_name="AFKTimeout"
-            left_pad="160"
-            label="Away timeout:"
-            top_delta="0"
-            name="afk"
-            width="130">
+     height="23"
+     layout="topleft"
+     control_name="AFKTimeout"
+     left="30"
+     label="Away timeout:"
+     top_pad="0"
+     name="afk"
+     width="130">
     <combo_box.item
      label="2 minutes"
      name="item0"
@@ -368,26 +359,6 @@
      name="item4"
      value="0" />
   </combo_box>
-  <check_box
-control_name="UseDisplayNames"
-follows="top|left"
-height="14"
-label="View Display Names"
-layout="topleft"
-left="30"
-name="display_names_check"
-width="237"
-tool_tip="Check to use display names in chat, IM, name tags, etc."
-top_pad="20"/>
-  <check_box
-	control_name="EnableUIHints"
-	follows="top|left"
-	height="14"
-	label="Enable Viewer UI Hints"
-	layout="topleft"
-	left_pad="30"
-	name="viewer_hints_check"
-	width="237"/>
     <text
      type="string"
      length="1"
-- 
cgit v1.2.3


From c6062e05e67a4b7260198db519f520e1d2f8f843 Mon Sep 17 00:00:00 2001
From: Andrew Productengine <adyukov@productengine.com>
Date: Wed, 10 Nov 2010 19:35:35 +0200
Subject: STORM-583 FIXED Moved colors-related preferences to the new Colors
 tab.

- Copied "My effects" from General.
- Copied "Font colors" from Chat.
- Copied "Bubble Chat" color and opacity slider from Advanced.
- Fixed color swatches moved to this tab using attribute introduced in STORM-592 fix. Now only colored area is clickable.

Controls weren't removed from places they were before- it will be (or already was) done in "layout cleanup" subtasks of STORM-31.
---
 .../default/xui/en/panel_preferences_colors.xml    | 321 +++++++++++++++++++++
 1 file changed, 321 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_preferences_colors.xml b/indra/newview/skins/default/xui/en/panel_preferences_colors.xml
index 0061c1f229..2b524629e7 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_colors.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_colors.xml
@@ -9,4 +9,325 @@
  name="colors_panel"
  top="1"
  width="517">
+  <text
+   type="string"
+   length="1"
+   follows="left|top"
+   height="15"
+   layout="topleft"
+   left="30"
+   name="effects_color_textbox"
+   top_pad="15"
+   width="200">
+    My effects (selection beam):
+  </text>
+  <color_swatch
+	 can_apply_immediately="true"
+     follows="left|top"
+     height="24"
+     label_height="0"
+     layout="topleft"
+     left="40"
+     name="effect_color_swatch"
+     tool_tip="Click to open Color Picker"
+     width="44">
+    <color_swatch.init_callback
+		 function="Pref.getUIColor"
+		 parameter="EffectColor" />
+    <color_swatch.commit_callback
+		 function="Pref.applyUIColor"
+		 parameter="EffectColor" />
+    <color_swatch.caption_text
+    height="0" />
+  </color_swatch>
+  <text
+   follows="left|top"
+   layout="topleft"
+   left="30"
+   height="12"
+   name="font_colors"
+   top_pad="20"
+   width="120"
+   >
+    Chat font colors:
+  </text>
+  <color_swatch
+   can_apply_immediately="true"
+   follows="left|top"
+   height="24"
+   label_height="0"
+   layout="topleft"
+   left="40"
+   name="user"
+   top_pad="10"
+   width="44" >
+    <color_swatch.init_callback
+		 function="Pref.getUIColor"
+		 parameter="UserChatColor" />
+    <color_swatch.commit_callback
+		 function="Pref.applyUIColor"
+		 parameter="UserChatColor" />
+  </color_swatch>
+  <text
+   type="string"
+   length="1"
+   follows="left|top"
+   height="10"
+   layout="topleft"
+   left_pad="5"
+   mouse_opaque="false"
+   name="text_box1"
+   top_delta="5"
+   width="95">
+    Me
+  </text>
+  <color_swatch
+   can_apply_immediately="true"
+   follows="left|top"
+   height="24"
+   label_height="0"
+   layout="topleft"
+   left="190"
+   name="agent"
+   top_pad="-15"
+   width="44" >
+    <color_swatch.init_callback
+		 function="Pref.getUIColor"
+		 parameter="AgentChatColor" />
+    <color_swatch.commit_callback
+		 function="Pref.applyUIColor"
+		 parameter="AgentChatColor" />
+  </color_swatch>
+  <text
+   type="string"
+   length="1"
+   follows="left|top"
+   height="10"
+   layout="topleft"
+   left_pad="5"
+   mouse_opaque="false"
+   name="text_box2"
+   top_delta="5"
+   width="95">
+    Others
+  </text>
+  <color_swatch
+   can_apply_immediately="true"
+   color="LtGray"
+   follows="left|top"
+   height="24"
+   label_height="0"
+   label_width="60"
+   layout="topleft"
+   left="360"
+   name="im"
+   top_pad="-15"
+   width="44">
+    <color_swatch.init_callback
+		 function="Pref.getUIColor"
+		 parameter="IMChatColor" />
+    <color_swatch.commit_callback
+		 function="Pref.applyUIColor"
+		 parameter="IMChatColor" />
+  </color_swatch>
+  <text
+     type="string"
+     length="1"
+     follows="left|top"
+     height="10"
+     layout="topleft"
+     left_pad="5"
+     mouse_opaque="false"
+     name="text_box3"
+     top_delta="5"
+     width="95">
+    IM
+  </text>
+  <color_swatch
+   can_apply_immediately="true"
+   color="LtGray"
+   follows="left|top"
+   height="24"
+   label_height="0"
+   label_width="44"
+   layout="topleft"
+   left="40"
+   name="system"
+   top_pad="22"
+   width="44" >
+    <color_swatch.init_callback
+		 function="Pref.getUIColor"
+		 parameter="SystemChatColor" />
+    <color_swatch.commit_callback
+		 function="Pref.applyUIColor"
+		 parameter="SystemChatColor" />
+  </color_swatch>
+  <text
+   type="string"
+   length="1"
+   follows="left|top"
+   height="10"
+   layout="topleft"
+   left_pad="5"
+   mouse_opaque="false"
+   name="text_box4"
+   top_delta="5"
+   width="95">
+    System
+  </text>
+  <color_swatch
+   can_apply_immediately="true"
+   color="Red"
+   follows="left|top"
+   height="24"
+   label_height="0"
+   layout="topleft"
+   left="190"
+   name="script_error"
+   top_pad="-15"
+   width="44">
+    <color_swatch.init_callback
+		 function="Pref.getUIColor"
+		 parameter="ScriptErrorColor" />
+    <color_swatch.commit_callback
+		 function="Pref.applyUIColor"
+		 parameter="ScriptErrorColor" />
+  </color_swatch>
+  <text
+   type="string"
+   length="1"
+   follows="left|top"
+   height="10"
+   layout="topleft"
+   left_pad="5"
+   mouse_opaque="false"
+   name="text_box5"
+   top_delta="5"
+   width="95">
+    Errors
+  </text>
+  <color_swatch
+   can_apply_immediately="true"
+   color="EmphasisColor_35"
+   follows="left|top"
+   height="24"
+   label_height="0"
+   layout="topleft"
+   left="360"
+   name="objects"
+   top_pad="-15"
+   width="44" >
+    <color_swatch.init_callback
+		 function="Pref.getUIColor"
+		 parameter="ObjectChatColor" />
+    <color_swatch.commit_callback
+		 function="Pref.applyUIColor"
+		 parameter="ObjectChatColor" />
+  </color_swatch>
+  <text
+   type="string"
+   length="1"
+   follows="left|top"
+   height="10"
+   layout="topleft"
+   left_pad="5"
+   mouse_opaque="false"
+   name="text_box6"
+   top_delta="5"
+   width="95">
+    Objects
+  </text>
+  <color_swatch
+   can_apply_immediately="true"
+   color="LtYellow"
+   follows="left|top"
+   height="24"
+   label_height="0"
+   layout="topleft"
+   left="40"
+   name="owner"
+   top_pad="22"
+   width="44" >
+    <color_swatch.init_callback
+		 function="Pref.getUIColor"
+		 parameter="llOwnerSayChatColor" />
+    <color_swatch.commit_callback
+		 function="Pref.applyUIColor"
+		 parameter="llOwnerSayChatColor" />
+  </color_swatch>
+  <text
+   type="string"
+   length="1"
+   follows="left|top"
+   height="10"
+   layout="topleft"
+   left_pad="5"
+   mouse_opaque="false"
+   name="text_box7"
+   top_delta="5"
+   width="95">
+    Owner
+  </text>
+  <color_swatch
+   can_apply_immediately="true"
+   color="EmphasisColor"
+   follows="left|top"
+   height="24"
+   label_height="0"
+   layout="topleft"
+   left="190"
+   name="links"
+   top_pad="-15"
+   width="44" >
+    <color_swatch.init_callback
+		 function="Pref.getUIColor"
+		 parameter="HTMLLinkColor" />
+    <color_swatch.commit_callback
+		 function="Pref.applyUIColor"
+		 parameter="HTMLLinkColor" />
+  </color_swatch>
+  <text
+   follows="left|top"
+   layout="topleft"
+   left="30"
+   height="12"
+   name="bubble_chat"
+   top_pad="20"
+   width="120"
+   >
+    Bubble chat:
+  </text>
+  <color_swatch
+   can_apply_immediately="true"
+   color="0 0 0 1"
+   control_name="BackgroundChatColor"
+   follows="left|top"
+   height="24"
+   label_height="0"
+   layout="topleft"
+   left_delta="10"
+   top_pad="5"
+   name="background"
+   tool_tip="Choose color for bubble chat"
+   width="44">
+   <color_swatch.init_callback
+    function="Pref.getUIColor"
+    parameter="BackgroundChatColor" />
+   <color_swatch.commit_callback
+    function="Pref.applyUIColor"
+    parameter="BackgroundChatColor" />
+  </color_swatch>
+  <slider
+   control_name="ChatBubbleOpacity"
+   follows="left|top"
+   height="16"
+   increment="0.05"
+   initial_value="1"
+   label="Opacity"
+   layout="topleft"
+   left_pad="15"
+   label_width="56"
+   name="bubble_chat_opacity"
+   top_delta = "6"
+   width="347" />
 </panel>
-- 
cgit v1.2.3


From c65a221a6dbc41f712ade69397672617857323cd Mon Sep 17 00:00:00 2001
From: Andrew Productengine <adyukov@productengine.com>
Date: Wed, 10 Nov 2010 19:50:58 +0200
Subject: STORM-583 ADDITIONAL_FIX Added missing "URLs" label to "Colors" tab.

---
 .../skins/default/xui/en/panel_preferences_colors.xml     | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_preferences_colors.xml b/indra/newview/skins/default/xui/en/panel_preferences_colors.xml
index 2b524629e7..06e8ee80b5 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_colors.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_colors.xml
@@ -286,13 +286,26 @@
 		 function="Pref.applyUIColor"
 		 parameter="HTMLLinkColor" />
   </color_swatch>
+  <text
+   type="string"
+   length="1"
+   follows="left|top"
+   height="10"
+   layout="topleft"
+   left_pad="5"
+   mouse_opaque="false"
+   name="text_box9"
+   top_delta="5"
+   width="95">
+    URLs
+  </text>
   <text
    follows="left|top"
    layout="topleft"
    left="30"
    height="12"
    name="bubble_chat"
-   top_pad="20"
+   top_pad="28"
    width="120"
    >
     Bubble chat:
-- 
cgit v1.2.3


From e2008b366977530e631646c46077bef397f10a5d Mon Sep 17 00:00:00 2001
From: Paul Guslisty <pguslisty@productengine.com>
Date: Wed, 10 Nov 2010 20:17:31 +0200
Subject: STORM-575 FIXED Layout cleanup in the Chat tab of Preferences

- Deleted color swatchers

- Repositioned rest controls according to the specification
---
 .../default/xui/en/panel_preferences_chat.xml      | 365 ++++-----------------
 1 file changed, 56 insertions(+), 309 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml
index 4ed81394fe..a1082d9c32 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml
@@ -23,7 +23,7 @@
      height="30"
      layout="topleft"
      left="40"
-	   control_name="ChatFontSize"
+	 control_name="ChatFontSize"
      name="chat_font_size"
      top_pad="0"
      width="440">
@@ -55,291 +55,7 @@
          top_delta="0"
          width="125" />
     </radio_group>
-
-    <text
-      follows="left|top"
-      layout="topleft"
-      left="30"
-      height="12"
-      name="font_colors" 
-      top_pad="10" 
-      width="120"
-      >
-    Font colors:
-    </text>  
-  
-    <color_swatch
-     can_apply_immediately="true"
-     follows="left|top"
-     height="47"
-     layout="topleft"
-     left="40"
-     name="user"
-     top_pad="10"
-     width="44" >
-		<color_swatch.init_callback
-		 function="Pref.getUIColor"
-		 parameter="UserChatColor" />
-		<color_swatch.commit_callback
-		 function="Pref.applyUIColor"
-		 parameter="UserChatColor" />
-	</color_swatch>
-    <text
-     type="string"
-     length="1"
-     follows="left|top"
-     height="10"
-     layout="topleft"
-     left_pad="5"
-     mouse_opaque="false"
-     name="text_box1"
-     top_delta="5"
-     width="95">
-        Me
-    </text>
-    <color_swatch
-     can_apply_immediately="true"
-     follows="left|top"
-     height="47"
-     layout="topleft"
-     left="190"
-     name="agent"
-     top_pad="-15"
-     width="44" >
-		<color_swatch.init_callback
-		 function="Pref.getUIColor"
-		 parameter="AgentChatColor" />
-		<color_swatch.commit_callback
-		 function="Pref.applyUIColor"
-		 parameter="AgentChatColor" />
-	</color_swatch>
-    <text
-     type="string"
-     length="1"
-     follows="left|top"
-     height="10"
-     layout="topleft"
-     left_pad="5"
-     mouse_opaque="false"
-     name="text_box2"
-     top_delta="5"
-     width="95">
-        Others
-    </text>
-    <color_swatch
-     can_apply_immediately="true"
-     color="LtGray"
-     follows="left|top"
-     height="47"
-     label_width="60"
-     layout="topleft"
-     left="360"
-     name="im"
-     top_pad="-15"
-     width="44">
-		<color_swatch.init_callback
-		 function="Pref.getUIColor"
-		 parameter="IMChatColor" />
-		<color_swatch.commit_callback
-		 function="Pref.applyUIColor"
-		 parameter="IMChatColor" />
-	</color_swatch>
-	<text
-     type="string"
-     length="1"
-     follows="left|top"
-     height="10"
-     layout="topleft"
-     left_pad="5"
-     mouse_opaque="false"
-     name="text_box3"
-     top_delta="5"
-     width="95">
-        IM
-    </text>
-    <color_swatch
-     can_apply_immediately="true"
-     color="LtGray"
-     follows="left|top"
-     height="47"
-     label_width="44"
-     layout="topleft"
-     left="40"
-     name="system"
-     top_pad="22"
-     width="44" >
-		<color_swatch.init_callback
-		 function="Pref.getUIColor"
-		 parameter="SystemChatColor" />
-		<color_swatch.commit_callback
-		 function="Pref.applyUIColor"
-		 parameter="SystemChatColor" />
-	</color_swatch>
-    <text
-     type="string"
-     length="1"
-     follows="left|top"
-     height="10"
-     layout="topleft"
-     left_pad="5"
-     mouse_opaque="false"
-     name="text_box4"
-     top_delta="5"
-     width="95">
-        System
-    </text>
-    <color_swatch
-     can_apply_immediately="true"
-     color="Red"
-     follows="left|top"
-     height="47"
-     layout="topleft"
-     left="190"
-     name="script_error"
-     top_pad="-15"
-     width="44">
-		<color_swatch.init_callback
-		 function="Pref.getUIColor"
-		 parameter="ScriptErrorColor" />
-		<color_swatch.commit_callback
-		 function="Pref.applyUIColor"
-		 parameter="ScriptErrorColor" />
-	</color_swatch>
-    <text
-     type="string"
-     length="1"
-     follows="left|top"
-     height="10"
-     layout="topleft"
-     left_pad="5"
-     mouse_opaque="false"
-     name="text_box5"
-     top_delta="5"
-     width="95">
-        Errors
-    </text>
-    <color_swatch
-     can_apply_immediately="true"
-     color="EmphasisColor_35"
-     follows="left|top"
-     height="47"
-     layout="topleft"
-     left="360"
-     name="objects"
-     top_pad="-15"
-     width="44" >
-		<color_swatch.init_callback
-		 function="Pref.getUIColor"
-		 parameter="ObjectChatColor" />
-		<color_swatch.commit_callback
-		 function="Pref.applyUIColor"
-		 parameter="ObjectChatColor" />
-	</color_swatch>
-    <text
-     type="string"
-     length="1"
-     follows="left|top"
-     height="10"
-     layout="topleft"
-     left_pad="5"
-     mouse_opaque="false"
-     name="text_box6"
-     top_delta="5"
-     width="95">
-        Objects
-    </text>
-    <color_swatch
-     can_apply_immediately="true"
-     color="LtYellow"
-     follows="left|top"
-     height="47"
-     layout="topleft"
-     left="40"
-     name="owner"
-     top_pad="22"
-     width="44" >
-		<color_swatch.init_callback
-		 function="Pref.getUIColor"
-		 parameter="llOwnerSayChatColor" />
-		<color_swatch.commit_callback
-		 function="Pref.applyUIColor"
-		 parameter="llOwnerSayChatColor" />
-	</color_swatch>
-    <text
-     type="string"
-     length="1"
-     follows="left|top"
-     height="10"
-     layout="topleft"
-     left_pad="5"
-     mouse_opaque="false"
-     name="text_box7"
-     top_delta="5"
-     width="95">
-        Owner
-    </text>
-    <color_swatch
-     can_apply_immediately="true"
-     color="EmphasisColor"
-     follows="left|top"
-     height="47"
-     layout="topleft"
-     left="190"
-     name="links"
-     top_pad="-15"
-     width="44" >
-		<color_swatch.init_callback
-		 function="Pref.getUIColor"
-		 parameter="HTMLLinkColor" />
-		<color_swatch.commit_callback
-		 function="Pref.applyUIColor"
-		 parameter="HTMLLinkColor" />
-	</color_swatch>
-    <text
-     type="string"
-     length="1"
-     follows="left|top"
-     height="10"
-     layout="topleft"
-     left_pad="5"
-     mouse_opaque="false"
-     name="text_box9"
-     top_delta="5"
-     width="95">
-        URLs
-    </text>
-    <spinner
-     control_name="NearbyToastLifeTime"
-     decimal_digits="0"
-     follows="left|top"
-     height="23"
-     increment="1"
-     initial_value="23"
-     label="Nearby chat toasts life time:"
-     label_width="190"
-     layout="topleft"
-     left="290"
-     max_val="60"
-     min_val="1"
-     name="nearby_toasts_lifetime"
-     top_pad="33"
-     width="210" />
-    <spinner
-     control_name="NearbyToastFadingTime"
-     decimal_digits="0"
-     follows="left|top"
-     height="23"
-     increment="1"
-     initial_value="3"
-     label="Nearby chat toasts fading time:"
-     label_width="190"
-     layout="topleft"
-     left_delta="00"
-     max_val="60"
-     min_val="0"
-     name="nearby_toasts_fadingtime"
-     top_pad="15"
-     width="210" />
+    
     <check_box
      control_name="PlayTypingAnim"
      height="16"
@@ -348,7 +64,7 @@
      layout="topleft"
      left="30"
      name="play_typing_animation"
-     top="205"
+     top_pad="10"
      width="400" />
     <check_box
      enabled="false"
@@ -368,6 +84,16 @@
      name="plain_text_chat_history"
      top_pad="5"
      width="400" />
+    <check_box
+     control_name="UseChatBubbles"
+     follows="left|top"
+     height="16"
+     label="Bubble Chat"
+     layout="topleft"
+     left_delta="0"
+     top_pad="5"
+     name="bubble_text_chat"
+     width="150" />     
     <text
      name="show_ims_in_label"
      follows="left|top"
@@ -375,7 +101,7 @@
      left="30"
      height="20"
      width="170"
-     top_pad="7">
+     top_pad="15">
      Show IMs in:
     </text>
     <text
@@ -385,9 +111,8 @@
      top_delta="0" 
      left="170" 
   	 height="20"
-	   width="130"
-     text_color="White_25"
-	  >
+	 width="130"
+     text_color="White_25">
       (requires restart)
       </text>
     <radio_group
@@ -401,7 +126,7 @@
      width="150">
      <radio_item
       height="16"
-      label="Separate windows"
+      label="Separate Windows"
       layout="topleft"
       left="0"
       name="radio"
@@ -422,19 +147,19 @@
      name="disable_toast_label"
      follows="left|top"
      layout="topleft"
-     top_delta="-22" 
-     left="280" 
+     top_pad="20" 
+     left="30" 
      height="10"
      width="180">
-      Enable Incoming Chat popups:
+      Enable incoming chat popups:
       </text>
     <check_box
      control_name="EnableGroupChatPopups"
      name="EnableGroupChatPopups"
      label="Group Chats" 
      layout="topleft"
-     top_delta="18" 
-     left="295" 
+     top_pad="5" 
+     left_delta="10" 
      height="20"
      tool_tip="Check to see popups when a Group Chat message arrives"
      width="400" />
@@ -443,21 +168,43 @@
      name="EnableIMChatPopups"
      label="IM Chats" 
      layout="topleft"
-     top_delta="22" 
-     left="295" 
-     height="20"
+     top_pad="5"
+     height="16"
      tool_tip="Check to see popups when an instant message arrives"
      width="400" />
-    <check_box
-     control_name="UseChatBubbles"
+    <spinner
+     control_name="NearbyToastLifeTime"
+     decimal_digits="0"
      follows="left|top"
-     height="16"
-     label="Bubble Chat"
+     height="23"
+     increment="1"
+     initial_value="23"
+     label="Nearby chat toasts life time:"
+     label_width="190"
      layout="topleft"
-     left="30"
-     top_pad="4"
-     name="bubble_text_chat"
-     width="150" />
+     left="45"
+     max_val="60"
+     min_val="1"
+     name="nearby_toasts_lifetime"
+     top_pad="10"
+     width="230" />
+    <spinner
+     control_name="NearbyToastFadingTime"
+     decimal_digits="0"
+     follows="left|top"
+     height="23"
+     increment="1"
+     initial_value="3"
+     label="Nearby chat toasts fading time:"
+     label_width="190"
+     layout="topleft"
+     left_delta="0"
+     max_val="60"
+     min_val="0"
+     name="nearby_toasts_fadingtime"
+     top_pad="3"
+     width="230" />
+    
     <check_box
      control_name="TranslateChat"
      enabled="true"
@@ -466,7 +213,7 @@
      layout="topleft"
      left="30"
      name="translate_chat_checkbox"
-     bottom_delta="20"
+     bottom_delta="30"
      width="400" />
     <text
      bottom_delta="30"
-- 
cgit v1.2.3


From b7afbcbc97ed06dd6845d3850633f2eda494940c Mon Sep 17 00:00:00 2001
From: Seth ProductEngine <slitovchuk@productengine.com>
Date: Thu, 11 Nov 2010 00:17:59 +0200
Subject: STORM-578 FIXED SLURL to object or user name in nearby chat toast now
 uses the font color selected in Preferences->Chat. Removed unused
 "ChatToastAgentNameColor" setting from colors.xml.

---
 indra/newview/llchatitemscontainerctrl.cpp | 3 +--
 indra/newview/skins/default/colors.xml     | 3 ---
 2 files changed, 1 insertion(+), 5 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llchatitemscontainerctrl.cpp b/indra/newview/llchatitemscontainerctrl.cpp
index d353c809ca..3afddc1145 100644
--- a/indra/newview/llchatitemscontainerctrl.cpp
+++ b/indra/newview/llchatitemscontainerctrl.cpp
@@ -213,7 +213,6 @@ void LLNearbyChatToastPanel::init(LLSD& notification)
 		{
 			LLStyle::Params style_params_name;
 
-			LLColor4 userNameColor = LLUIColorTable::instance().getColor("ChatToastAgentNameColor");
 			std::string href;
 
 			if (mSourceType == CHAT_SOURCE_AGENT)
@@ -225,7 +224,7 @@ void LLNearbyChatToastPanel::init(LLSD& notification)
 				href = LLSLURL("object", mFromID, "inspect").getSLURLString();
 			}
 
-			style_params_name.color(userNameColor);
+			style_params_name.color(textColor);
 
 			std::string font_name = LLFontGL::nameFromFont(messageFont);
 			std::string font_style_size = LLFontGL::sizeFromFont(messageFont);
diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml
index ddd2ff196b..f8660419b4 100644
--- a/indra/newview/skins/default/colors.xml
+++ b/indra/newview/skins/default/colors.xml
@@ -766,9 +766,6 @@
     <color
      name="SysWellItemSelected"
      value="0.3 0.3 0.3 1.0" />
-    <color
-     name="ChatToastAgentNameColor"
-     reference="EmphasisColor" />
     <color
     name="ColorSwatchBorderColor"
     value="0.45098 0.517647 0.607843 1"/>
-- 
cgit v1.2.3


From b2e84d739b4f5c00b497e57e892fc10d78af8b76 Mon Sep 17 00:00:00 2001
From: "Mark Palange (Mani)" <palange@lindenlab.com>
Date: Wed, 10 Nov 2010 14:26:14 -0800
Subject: CHOP-151 Adding startup updater flow to drive update installation and
 resume.

---
 indra/newview/llappviewer.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 6bb25969a6..335998767c 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -2341,7 +2341,7 @@ void LLAppViewer::initUpdater()
 	std::string service_path = gSavedSettings.getString("UpdaterServicePath");
 	U32 check_period = gSavedSettings.getU32("UpdaterServiceCheckPeriod");
 
-	mUpdater->setParams(protocol_version, url, service_path, channel, version);
+	mUpdater->initialize(protocol_version, url, service_path, channel, version);
 	mUpdater->setCheckPeriod(check_period);
 	if(gSavedSettings.getBOOL("UpdaterServiceActive"))
 	{
-- 
cgit v1.2.3


From 32704455db3ca81e602f6b881ea21036015ba8dd Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Wed, 10 Nov 2010 14:44:29 -0800
Subject: Backed out changeset: 994c6639b393

---
 indra/newview/llfloatertopobjects.cpp | 24 +-----------------------
 indra/newview/llfloatertopobjects.h   |  5 -----
 2 files changed, 1 insertion(+), 28 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloatertopobjects.cpp b/indra/newview/llfloatertopobjects.cpp
index e5c4547226..2aaf403d5f 100644
--- a/indra/newview/llfloatertopobjects.cpp
+++ b/indra/newview/llfloatertopobjects.cpp
@@ -147,17 +147,6 @@ void LLFloaterTopObjects::handle_land_reply(LLMessageSystem* msg, void** data)
 
 }
 
-void LLFloaterTopObjects::onAvatarNameCache(const LLUUID& agent_id,
-									   const LLAvatarName& av_name,
-									   LLSD element)
-{	
-	LLScrollListCtrl *list = getChild<LLScrollListCtrl>("objects_list");
-
-	element["columns"][2]["value"] = av_name.getCompleteName();
-
-	list->addElement(element);
-}
-
 void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data)
 {
 	U32 request_flags;
@@ -182,7 +171,6 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data)
 		F32 mono_score = 0.f;
 		bool have_extended_data = false;
 		S32 public_urls = 0;
-		LLUUID owner_id;
 
 		msg->getU32Fast(_PREHASH_ReportData, _PREHASH_TaskLocalID, task_local_id, block);
 		msg->getUUIDFast(_PREHASH_ReportData, _PREHASH_TaskID, task_id, block);
@@ -198,10 +186,8 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data)
 			msg->getU32("DataExtended", "TimeStamp", time_stamp, block);
 			msg->getF32("DataExtended", "MonoScore", mono_score, block);
 			msg->getS32(_PREHASH_ReportData,"PublicURLs",public_urls,block);
-			msg->getUUID("DataExtended","OwnerID",owner_id,block);
 		}
 
-
 		LLSD element;
 
 		element["id"] = task_id;
@@ -252,16 +238,8 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data)
 			columns[6]["font"] = "SANSSERIF";
 		}
 		element["columns"] = columns;
+		list->addElement(element);
 		
-		if (!owner_id.isNull())
-		{
-			LLAvatarNameCache::get(owner_id, boost::bind(&LLFloaterTopObjects::onAvatarNameCache, this, _1, _2, element));
-		}
-		else
-		{
-			list->addElement(element);
-		}
-
 		mObjectListData.append(element);
 		mObjectListIDs.push_back(task_id);
 
diff --git a/indra/newview/llfloatertopobjects.h b/indra/newview/llfloatertopobjects.h
index edd91c491f..a608ca20f1 100644
--- a/indra/newview/llfloatertopobjects.h
+++ b/indra/newview/llfloatertopobjects.h
@@ -29,11 +29,8 @@
 
 #include "llfloater.h"
 
-class LLAvatarName;
 class LLUICtrl;
 
-#include <boost/signals2.hpp>	// boost::signals2::trackable
-
 class LLFloaterTopObjects : public LLFloater
 {
 	friend class LLFloaterReg;
@@ -54,8 +51,6 @@ public:
 
 	static void setMode(U32 mode);
 
-	void onAvatarNameCache(const LLUUID& id, const LLAvatarName& av_name, LLSD element);
-
 private:
 	LLFloaterTopObjects(const LLSD& key);
 	~LLFloaterTopObjects();
-- 
cgit v1.2.3


From 210c0f28e9a351890bb352d6b331708b2b2d75b4 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Wed, 10 Nov 2010 15:21:09 -0800
Subject: DN-203 [crashhunters] LLIMModel::LLIMSession::onAvatarNameCach

---
 indra/newview/llimview.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h
index 650d329e18..3f72d66bfb 100644
--- a/indra/newview/llimview.h
+++ b/indra/newview/llimview.h
@@ -62,7 +62,7 @@ class LLIMModel :  public LLSingleton<LLIMModel>
 {
 public:
 
-	struct LLIMSession
+	struct LLIMSession : public boost::signals2::trackable
 	{
 		typedef enum e_session_type
 		{   // for now we have 4 predefined types for a session
-- 
cgit v1.2.3


From ee8df375449e97476408417ec6dea0d6a8853d73 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Wed, 10 Nov 2010 15:22:49 -0800
Subject: fixing group invite name scrubbing to work with server changes

---
 indra/newview/llviewermessage.cpp | 9 ---------
 1 file changed, 9 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 598ad7afc6..0ca30d5f3d 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -2509,15 +2509,6 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
 				invite_bucket = (struct invite_bucket_t*) &binary_bucket[0];
 				S32 membership_fee = ntohl(invite_bucket->membership_fee);
 
-				// IDEVO Clean up legacy name "Resident" in message constructed in
-				// lldatagroups.cpp
-				U32 pos = message.find(" has invited you to join a group.\n");
-				if (pos != std::string::npos)
-				{
-					// use cleaned-up name from above
-					message = name + message.substr(pos);
-				}
-
 				LLSD payload;
 				payload["transaction_id"] = session_id;
 				payload["group_id"] = from_id;
-- 
cgit v1.2.3


From 94680419e968bcc385e5da2254c9ebb29a4dae44 Mon Sep 17 00:00:00 2001
From: Dave SIMmONs <simon@lindenlab.com>
Date: Wed, 10 Nov 2010 18:14:42 -0800
Subject: ER-301 : increase allowable bandwidth.  Bumped up to 3 mbps.

---
 indra/newview/llviewerthrottle.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewerthrottle.cpp b/indra/newview/llviewerthrottle.cpp
index b614ccdbc2..5147272122 100644
--- a/indra/newview/llviewerthrottle.cpp
+++ b/indra/newview/llviewerthrottle.cpp
@@ -46,7 +46,7 @@ const F32 MAX_FRACTIONAL = 1.5f;
 const F32 MIN_FRACTIONAL = 0.2f;
 
 const F32 MIN_BANDWIDTH = 50.f;
-const F32 MAX_BANDWIDTH = 1500.f;
+const F32 MAX_BANDWIDTH = 3000.f;
 const F32 STEP_FRACTIONAL = 0.1f;
 const F32 TIGHTEN_THROTTLE_THRESHOLD = 3.0f; // packet loss % per s
 const F32 EASE_THROTTLE_THRESHOLD = 0.5f; // packet loss % per s
-- 
cgit v1.2.3


From 41517715844c986aab169502c94f39a9f507eb55 Mon Sep 17 00:00:00 2001
From: "Mark Palange (Mani)" <palange@lindenlab.com>
Date: Wed, 10 Nov 2010 19:21:03 -0800
Subject: CHOP-151 Hooked up app exit callback, cleaned up early exit. Rev. by
 Brad

---
 indra/newview/llappviewer.cpp | 66 +++++++++++++++++++++++++++++--------------
 1 file changed, 45 insertions(+), 21 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 10c03954bc..c06f0c18e8 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -661,6 +661,14 @@ bool LLAppViewer::init()
     initThreads();
     writeSystemInfo();
 
+	// Initialize updater service (now that we have an io pump)
+	initUpdater();
+	if(isQuitting())
+	{
+		// Early out here because updater set the quitting flag.
+		return true;
+	}
+
 	//////////////////////////////////////////////////////////////////////////////
 	//////////////////////////////////////////////////////////////////////////////
 	//////////////////////////////////////////////////////////////////////////////
@@ -979,9 +987,6 @@ bool LLAppViewer::mainLoop()
 	LLHTTPClient::setPump(*gServicePump);
 	LLCurl::setCAFile(gDirUtilp->getCAFile());
 	
-	// Initialize updater service (now that we have an io pump)
-	initUpdater();
-	
 	// Note: this is where gLocalSpeakerMgr and gActiveSpeakerMgr used to be instantiated.
 
 	LLVoiceChannel::initClass();
@@ -1364,11 +1369,14 @@ bool LLAppViewer::cleanup()
 	llinfos << "Cleaning Up" << llendflush;
 
 	// Must clean up texture references before viewer window is destroyed.
-	LLHUDManager::getInstance()->updateEffects();
-	LLHUDObject::updateAll();
-	LLHUDManager::getInstance()->cleanupEffects();
-	LLHUDObject::cleanupHUDObjects();
-	llinfos << "HUD Objects cleaned up" << llendflush;
+	if(LLHUDManager::instanceExists())
+	{
+		LLHUDManager::getInstance()->updateEffects();
+		LLHUDObject::updateAll();
+		LLHUDManager::getInstance()->cleanupEffects();
+		LLHUDObject::cleanupHUDObjects();
+		llinfos << "HUD Objects cleaned up" << llendflush;
+	}
 
 	LLKeyframeDataCache::clear();
 	
@@ -1380,8 +1388,10 @@ bool LLAppViewer::cleanup()
 	// Note: this is where gWorldMap used to be deleted.
 
 	// Note: this is where gHUDManager used to be deleted.
-	LLHUDManager::getInstance()->shutdownClass();
-	
+	if(LLHUDManager::instanceExists())
+	{
+		LLHUDManager::getInstance()->shutdownClass();
+	}
 
 	delete gAssetStorage;
 	gAssetStorage = NULL;
@@ -1683,7 +1693,10 @@ bool LLAppViewer::cleanup()
 
 #ifndef LL_RELEASE_FOR_DOWNLOAD
 	llinfos << "Auditing VFS" << llendl;
-	gVFS->audit();
+	if(gVFS)
+	{
+		gVFS->audit();
+	}
 #endif
 
 	llinfos << "Misc Cleanup" << llendflush;
@@ -2383,8 +2396,13 @@ void LLAppViewer::initUpdater()
 	std::string service_path = gSavedSettings.getString("UpdaterServicePath");
 	U32 check_period = gSavedSettings.getU32("UpdaterServiceCheckPeriod");
 
-	mUpdater->initialize(protocol_version, url, service_path, channel, version);
-	mUpdater->setCheckPeriod(check_period);
+	mUpdater->setAppExitCallback(boost::bind(&LLAppViewer::forceQuit, this));
+	mUpdater->initialize(protocol_version, 
+						 url, 
+						 service_path, 
+						 channel, 
+						 version);
+ 	mUpdater->setCheckPeriod(check_period);
 	if(gSavedSettings.getBOOL("UpdaterServiceActive"))
 	{
 		mUpdater->startChecking();
@@ -2550,15 +2568,18 @@ void LLAppViewer::cleanupSavedSettings()
 
 	// save window position if not maximized
 	// as we don't track it in callbacks
-	BOOL maximized = gViewerWindow->mWindow->getMaximized();
-	if (!maximized)
+	if(NULL != gViewerWindow)
 	{
-		LLCoordScreen window_pos;
-
-		if (gViewerWindow->mWindow->getPosition(&window_pos))
+		BOOL maximized = gViewerWindow->mWindow->getMaximized();
+		if (!maximized)
 		{
-			gSavedSettings.setS32("WindowX", window_pos.mX);
-			gSavedSettings.setS32("WindowY", window_pos.mY);
+			LLCoordScreen window_pos;
+
+			if (gViewerWindow->mWindow->getPosition(&window_pos))
+			{
+				gSavedSettings.setS32("WindowX", window_pos.mX);
+				gSavedSettings.setS32("WindowY", window_pos.mY);
+			}
 		}
 	}
 
@@ -4297,7 +4318,10 @@ void LLAppViewer::disconnectViewer()
 
 	// This is where we used to call gObjectList.destroy() and then delete gWorldp.
 	// Now we just ask the LLWorld singleton to cleanly shut down.
-	LLWorld::getInstance()->destroyClass();
+	if(LLWorld::instanceExists())
+	{
+		LLWorld::getInstance()->destroyClass();
+	}
 
 	// call all self-registered classes
 	LLDestroyClassList::instance().fireCallbacks();
-- 
cgit v1.2.3


From fd145f10b263628c42afcb452950b54735dbdde0 Mon Sep 17 00:00:00 2001
From: Paul Guslisty <pguslisty@productengine.com>
Date: Thu, 11 Nov 2010 13:59:03 +0200
Subject: STORM-570 ADDITIONAL FIX Layout cleanup in the General tab of
 Preferences

- Decreased vertical padding between controls to insert radio group

- Added "Pressing letter keys:" radio group.

For now these radio buttons are not working, they are just a stub for a future functionality.
---
 .../default/xui/en/panel_preferences_general.xml   | 59 ++++++++++++++++++----
 1 file changed, 49 insertions(+), 10 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_preferences_general.xml b/indra/newview/skins/default/xui/en/panel_preferences_general.xml
index 997d9c7104..a660b5d785 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_general.xml
@@ -106,7 +106,7 @@
      height="15"
      layout="topleft"
      left="30"
-     top_pad="10"
+     top_pad="8"
      name="maturity_desired_prompt"
      width="200">
         I want to access content rated:
@@ -177,7 +177,7 @@
      layout="topleft"
      left="30"
      name="start_location_textbox"
-     top_pad="10"
+     top_pad="8"
      width="394">
         Start location:
     </text>
@@ -263,7 +263,7 @@
      layout="topleft"
      left="35"
      name="show_my_name_checkbox1"
-	 top_pad="10"
+	 top_pad="2"
      width="100" />
    <check_box
      control_name="NameTagShowUsernames"
@@ -313,10 +313,49 @@
 	 height="16"
 	 label="Enable Viewer UI Hints"
 	 layout="topleft"
-	 left="30"
+	 left="27"
 	 name="viewer_hints_check"
-	 top_pad="7"
+	 top_pad="5"
 	 width="237"/>
+	 
+	<text
+	 type="string"
+	 length="1"
+	 follows="left|top"
+	 height="15"
+	 layout="topleft"
+	 left="30"
+	 name="inworld_typing_rg_label"
+	 top_pad="6"
+	 width="400">
+       Pressing letter keys:
+   </text>
+   <radio_group
+     height="20"
+     layout="topleft"
+     left="35"
+     top_pad="0" 
+     name="inworld_typing_preference">
+        <radio_item
+         label="Starts local chat"
+         name="radio_button1"
+         top_delta="20" 
+         layout="topleft"
+         height="16" 
+         left="0" 
+         value="0"
+         width="150" />
+        <radio_item
+         label="Affects movement (i.e. WASD)"
+         left_pad="0"
+         layout="topleft"
+         top_delta="0" 
+         height="16" 
+         name="radio_button2"
+         value="1"
+         width="75" />
+    </radio_group>
+    
     <text
      type="string"
      length="1"
@@ -325,7 +364,7 @@
      layout="topleft"
      left="30"
      name="title_afk_text"
-     top_pad="10" 
+     top_pad="4" 
      width="190">
     	Away timeout:
     </text>
@@ -335,7 +374,7 @@
      control_name="AFKTimeout"
      left="30"
      label="Away timeout:"
-     top_pad="0"
+     top_pad="2"
      name="afk"
      width="130">
     <combo_box.item
@@ -368,7 +407,7 @@
      left="30"
      mouse_opaque="false"
      name="text_box3"
-     top_pad="10"
+     top_pad="5"
      width="240">
        Busy mode response:
     </text>
@@ -379,11 +418,11 @@
       use_ellipses="false"
      commit_on_focus_lost = "true"
      follows="left|top"
-     height="42"
+     height="29"
      layout="topleft"
      left="50"
      name="busy_response"
-     width="450"
+     width="470"
      word_wrap="true">
        log_in_to_change
     </text_editor>
-- 
cgit v1.2.3


From 608d58c1149cf597b1fcf8f0b37f39f6cbc108f2 Mon Sep 17 00:00:00 2001
From: Paul Guslisty <pguslisty@productengine.com>
Date: Thu, 11 Nov 2010 14:51:05 +0200
Subject: STORM-585 FIXED Layout cleanup in the Privacy tab in Preferences

- Increased vertical paddings between checkbox groups

- Changed label of IM checkbox group from "Logs:" to "Chat Logs:"

- Changed label of checkbox from "Add timestamp" to "Add timestamp to each line in chat log"

- Added checkbox "Add datestamp to log file name". For now this checkbox is not working, it's just a stub for a future functionality.

- Added descriptive text for the "Block List" button
---
 .../default/xui/en/panel_preferences_privacy.xml   | 35 ++++++++++++++++++----
 1 file changed, 29 insertions(+), 6 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
index 4ebd4c76f8..b396eba0b4 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
@@ -47,7 +47,7 @@
      layout="topleft"
      left="30"
      name="online_visibility"
-     top_pad="20"
+     top_pad="30"
      width="350" />
     <check_box
      enabled_control="EnableVoiceChat"
@@ -78,9 +78,9 @@
      left="30"
      mouse_opaque="false"
      name="Logs:"
-     top_pad="10"
+     top_pad="30"
      width="350">
-        Logs:
+        Chat Logs:
     </text>
     <check_box
 	 enabled="false"
@@ -108,12 +108,21 @@
      control_name="LogTimestamp"
 	 enabled="false"
      height="16"
-     label="Add timestamp"
+     label="Add timestamp to each line in chat log"
      layout="topleft"
      left_delta="0"
      name="show_timestamps_check_im"
      top_pad="10"
      width="237" />
+    <check_box
+	 enabled="false"
+     height="16"
+     label="Add datestamp to log file name"
+     layout="topleft"
+     left_delta="0"
+     name="show_datestamps_check_im"
+     top_pad="10"
+     width="237" />
     <text
      type="string"
      length="1"
@@ -123,7 +132,7 @@
      left_delta="0"
      mouse_opaque="false"
      name="log_path_desc"
-     top_pad="5"
+     top_pad="30"
      width="128">
         Location of logs:
     </text>    
@@ -160,11 +169,25 @@
      layout="topleft"
      left="30"
      name="block_list"
-     top_pad="20"
+     top_pad="35"
      width="145">
         <!--<button.commit_callback
          function="SideTray.ShowPanel"-->
       <button.commit_callback
          function="Pref.BlockList"/>
     </button>
+    <text
+     type="string"
+     length="1"
+     follows="left|top"
+     height="10"
+     layout="topleft"
+     left_pad="10"
+     mouse_opaque="false"
+     name="cache_size_label_l"
+     top_delta="3"
+     text_color="LtGray_50"
+     width="300">
+       (People and/or Objects you have blocked)
+    </text>
     </panel>
-- 
cgit v1.2.3


From 5894a6a593a0a948815d925dabfb2a4bc78e9d3f Mon Sep 17 00:00:00 2001
From: Andrew Productengine <adyukov@productengine.com>
Date: Thu, 11 Nov 2010 14:59:51 +0200
Subject: STORM-582 FIXED Moved movement and camera control preferences from
 Advanced to the new Move & View tab.

In addition to moving existing controls, created stub checkbox and radiobuttons for double-click behavior. Logic will be hooked up to them in STORM-576.
---
 .../default/xui/en/panel_preferences_move.xml      | 194 +++++++++++++++++++++
 1 file changed, 194 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_preferences_move.xml b/indra/newview/skins/default/xui/en/panel_preferences_move.xml
index 2d6dddfc8c..ec80efe188 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_move.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_move.xml
@@ -9,4 +9,198 @@
  name="move_panel"
  top="1"
  width="517">
+  <icon
+     follows="left|top"
+     height="18"
+     image_name="Cam_FreeCam_Off"
+     layout="topleft"
+     name="camera_icon"
+     mouse_opaque="false"
+     visible="true"
+     width="18"
+     left="30"
+     top="10"/>
+  <slider
+   can_edit_text="true"
+   control_name="CameraAngle"
+   decimal_digits="2"
+   follows="left|top"
+   height="16"
+   increment="0.025"
+   initial_value="1.57"
+   layout="topleft"
+   label_width="100"
+   label="View angle"
+   left_pad="30"
+   max_val="2.97"
+   min_val="0.17"
+   name="camera_fov"
+   show_text="false"
+   width="240" />
+  <slider
+   can_edit_text="true"
+   control_name="CameraOffsetScale"
+   decimal_digits="2"
+   follows="left|top"
+   height="16"
+   increment="0.025"
+   initial_value="1"
+   layout="topleft"
+   label="Distance"
+   left_delta="0"
+   label_width="100"
+   max_val="3"
+   min_val="0.5"
+   name="camera_offset_scale"
+   show_text="false"
+   width="240"
+   top_pad="5"/>
+  <text
+  follows="left|top"
+  type="string"
+  length="1"
+  height="10"
+  left="80"
+  name="heading2"
+  width="270"
+  top_pad="5">
+    Automatic position for:
+  </text>
+  <check_box
+     control_name="EditCameraMovement"
+     height="20"
+     follows="left|top"
+     label="Build/Edit"
+     layout="topleft"
+     left_delta="30"
+     name="edit_camera_movement"
+     tool_tip="Use automatic camera positioning when entering and exiting edit mode"
+     width="280"
+     top_pad="5" />
+  <check_box
+   control_name="AppearanceCameraMovement"
+   follows="left|top"
+   height="16"
+   label="Appearance"
+   layout="topleft"
+   name="appearance_camera_movement"
+   tool_tip="Use automatic camera positioning while in edit mode"
+   width="242" />
+  <check_box
+   control_name="SidebarCameraMovement"
+   follows="left|top"
+   height="16"
+   initial_value="true"
+   label="Sidebar"
+   layout="topleft"
+   name="appearance_sidebar_positioning"
+   tool_tip="Use automatic camera positioning for sidebar"
+   width="242" />
+  <icon
+	 follows="left|top"
+	 height="18"
+	 image_name="Move_Walk_Off"
+   layout="topleft"
+	 name="avatar_icon"
+	 mouse_opaque="false"
+	 visible="true"
+	 width="18"
+   top_pad="2"
+   left="30" />
+  <check_box
+   control_name="FirstPersonAvatarVisible"
+   follows="left|top"
+   height="20"
+   label="Show me in Mouselook"
+   layout="topleft"
+   left_pad="30"
+   name="first_person_avatar_visible"
+   width="256" />
+  <text
+   type="string"
+   length="1"
+   follows="left|top"
+   height="10"
+   layout="topleft"
+   left_delta="3"
+   name=" Mouse Sensitivity"
+   top_pad="10"
+   width="160">
+    Mouselook mouse sensitivity:
+  </text>
+  <slider
+   control_name="MouseSensitivity"
+   follows="left|top"
+   height="15"
+   initial_value="2"
+   layout="topleft"
+   show_text="false"
+   left_pad="5"
+   max_val="15"
+   name="mouse_sensitivity"
+   top_delta="-1"
+   width="145" />
+  <check_box
+   control_name="InvertMouse"
+   height="16"
+   label="Invert"
+   layout="topleft"
+   left_pad="2"
+   name="invert_mouse"
+   top_delta="0"
+   width="128" />
+  <check_box
+   control_name="ArrowKeysAlwaysMove"
+   follows="left|top"
+   height="20"
+   label="Arrow keys always move me"
+   layout="topleft"
+   left="78"
+   name="arrow_keys_move_avatar_check"
+   width="237"
+   top_pad="1"/>
+  <check_box
+   control_name="AllowTapTapHoldRun"
+   follows="left|top"
+   height="20"
+   label="Tap-tap-hold to run"
+   layout="topleft"
+   left_delta="0"
+   name="tap_tap_hold_to_run"
+   width="237"
+   top_pad="0"/>
+  <check_box
+   follows="left|top"
+   height="20"
+   label="Double-Click to:"
+   layout="topleft"
+   left_delta="0"
+   name="double_click_chkbox"
+   width="237"
+   top_pad="0"/>
+  <radio_group
+     height="20"
+     layout="topleft"
+     left_delta="17"
+     top_pad="2"
+     name="double_click_action">
+    <radio_item
+     height="16"
+     label="Teleport"
+     layout="topleft"
+     left="0"
+     name="radio_teleport"
+     top_delta="20"
+     value="0"
+     width="100" />
+    <radio_item
+     height="16"
+     label="Auto-pilot"
+     left_pad="0"
+     layout="topleft"
+     name="radio_autopilot"
+     top_delta="0"
+     value="1"
+     width="75" />
+  </radio_group>
 </panel>
-- 
cgit v1.2.3


From d358feff7ad732b28d8e914e44cdb08761207346 Mon Sep 17 00:00:00 2001
From: Paul Guslisty <pguslisty@productengine.com>
Date: Thu, 11 Nov 2010 15:06:51 +0200
Subject: STORM-586 FIXED Layout cleanup in the Setup tab of Preferences

- Deleted Mouselook settings

- Increased vertical padding between "Cache size" and "Cache location" controls
---
 .../default/xui/en/panel_preferences_setup.xml     | 49 +---------------------
 1 file changed, 2 insertions(+), 47 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_preferences_setup.xml b/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
index 140d16e37f..14aa38c5d3 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
@@ -9,51 +9,6 @@
  name="Input panel"
  top="1"
  width="517">
-  <text
-   type="string"
-   length="1"
-   follows="left|top"
-   height="10"
-   layout="topleft"
-   left="30"
-   name="Mouselook:"
-   top="10"
-   width="300">
-    Mouselook:
-  </text>
-  <text
-   type="string"
-   length="1"
-   follows="left|top"
-   height="10"
-   layout="topleft"
-   left_delta="50"
-   name=" Mouse Sensitivity"
-   top_pad="10"
-   width="150">
-    Mouse sensitivity
-  </text>
-  <slider
-   control_name="MouseSensitivity"
-   follows="left|top"
-   height="15"
-   initial_value="2"
-   layout="topleft"
-   show_text="false"
-   left_delta="150"
-   max_val="15"
-   name="mouse_sensitivity"
-   top_delta="0"
-   width="145" />
-  <check_box
-   control_name="InvertMouse"
-   height="16"
-   label="Invert"
-   layout="topleft"
-   left_pad="2"
-   name="invert_mouse"
-   top_delta="0"
-   width="128" />
   <text
      type="string"
      length="1"
@@ -63,7 +18,7 @@
      left="30"
      name="Network:"
      mouse_opaque="false"
-     top_pad="4"
+     top="10"
      width="300">
     Network:
   </text>
@@ -187,7 +142,7 @@
    layout="topleft"
    left="80"
    name="Cache location"
-   top_delta="20"
+   top_delta="40"
    width="300">
     Cache location:
   </text>
-- 
cgit v1.2.3


From 5821631c2e3527d248d6190e342e241acdc38dd7 Mon Sep 17 00:00:00 2001
From: Andrew Productengine <adyukov@productengine.com>
Date: Thu, 11 Nov 2010 15:15:04 +0200
Subject: STORM-583 ADDITIONAL_FIX Fixed top_pad of topmost control in "Colors"
 so that it is consistent with other preferences tab.

---
 indra/newview/skins/default/xui/en/panel_preferences_colors.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_preferences_colors.xml b/indra/newview/skins/default/xui/en/panel_preferences_colors.xml
index 06e8ee80b5..036730a646 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_colors.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_colors.xml
@@ -17,7 +17,7 @@
    layout="topleft"
    left="30"
    name="effects_color_textbox"
-   top_pad="15"
+   top_pad="10"
    width="200">
     My effects (selection beam):
   </text>
-- 
cgit v1.2.3


From 51e38dff76fce7f0fe5b665f8707931435e2ff99 Mon Sep 17 00:00:00 2001
From: Paul Guslisty <pguslisty@productengine.com>
Date: Thu, 11 Nov 2010 16:45:35 +0200
Subject: STORM-587 FIXED Layout cleanup in the Advanced tab of Preferences

- According to the specification deleted all controls except:
    1. "UI Size" slider
    2. "Show script errors in" radio group

- According to the specification:
    1. "Allow Multiple Viewer" checkbox
    2. "Show Grid Selection at login" checkbox
    3. "Show Advanced Manu" checkbox
    4. "Show Developer Menu" checkbox
---
 .../default/xui/en/panel_preferences_advanced.xml  | 259 +++------------------
 1 file changed, 32 insertions(+), 227 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
index e17d4768d4..6f4beea43a 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
@@ -17,188 +17,17 @@
      name="middle_mouse">
         Middle Mouse
     </panel.string>
-         <icon
-	 follows="left|top"
-	 height="18"
-	 image_name="Cam_FreeCam_Off"
-         layout="topleft"
-	 name="camera_icon"
-	 mouse_opaque="false"
-	 visible="true"
-	 width="18"
-         left="30"
-         top="10"/>
-    <slider
-     can_edit_text="true"
-     control_name="CameraAngle"
-     decimal_digits="2"
-     follows="left|top"
-     height="16"
-     increment="0.025"
-     initial_value="1.57"
-     layout="topleft"
-     label_width="100"
-     label="View angle"
-     left_pad="30"
-     max_val="2.97"
-     min_val="0.17"
-     name="camera_fov"
-     show_text="false"
-     width="240" />
-    <slider
-     can_edit_text="true"
-     control_name="CameraOffsetScale"
-     decimal_digits="2"
-     follows="left|top"
-     height="16"
-     increment="0.025"
-     initial_value="1"
-     layout="topleft"
-     label="Distance"
-     left_delta="0"
-     label_width="100"
-     max_val="3"
-     min_val="0.5"
-     name="camera_offset_scale"
-     show_text="false"
-     width="240"
-     top_pad="5"/>
-     <text
-     follows="left|top"
-     type="string"
-     length="1"
-     height="10"
-     left="80"
-     name="heading2"
-     width="270"
-     top_pad="5">
-Automatic position for:
-	</text>
-        <check_box
-     control_name="EditCameraMovement"
-     height="20"
-     follows="left|top"
-     label="Build/Edit"
-     layout="topleft"
-     left_delta="30"
-     name="edit_camera_movement"
-     tool_tip="Use automatic camera positioning when entering and exiting edit mode"
-     width="280"
-     top_pad="5" />
-    <check_box
-     control_name="AppearanceCameraMovement"
-     follows="left|top"
-     height="16"
-     label="Appearance"
-     layout="topleft"
-     name="appearance_camera_movement"
-     tool_tip="Use automatic camera positioning while in edit mode"
-     width="242" />
-    <check_box
-     control_name="SidebarCameraMovement"
-     follows="left|top"
-     height="16"
-     initial_value="true"
-     label="Sidebar"
-     layout="topleft"
-     name="appearance_sidebar_positioning"
-     tool_tip="Use automatic camera positioning for sidebar"
-     width="242" />
-     	<icon
-	 follows="left|top"
-	 height="18"
-	 image_name="Move_Walk_Off"
-         layout="topleft"
-	 name="avatar_icon"
-	 mouse_opaque="false"
-	 visible="true"
-	 width="18"
-         top_pad="2"
-         left="30"
-         />
-    <check_box
-     control_name="FirstPersonAvatarVisible"
-     follows="left|top"
-     height="20"
-     label="Show me in Mouselook"
-     layout="topleft"
-     left_pad="30"
-     name="first_person_avatar_visible"
-     width="256" />
-   
-    <check_box
-     control_name="ArrowKeysAlwaysMove"
-     follows="left|top"
-     height="20"
-     label="Arrow keys always move me"
-     layout="topleft"
-     left_delta="0"
-     name="arrow_keys_move_avatar_check"
-     width="237"
-     top_pad="0"/>
-    <check_box
-     control_name="AllowTapTapHoldRun"
-     follows="left|top"
-     height="20"
-     label="Tap-tap-hold to run"
-     layout="topleft"
-     left_delta="0"
-     name="tap_tap_hold_to_run"
-     width="237"
-     top_pad="0"/>
-    <check_box
-     control_name="LipSyncEnabled"
-     follows="left|top"
-     height="20"
-     label="Move avatar lips when speaking"
-     layout="topleft"
-     left_delta="0"
-     name="enable_lip_sync"
-     width="237"
-     top_pad="0" />        
-    <slider
-     control_name="ChatBubbleOpacity"
-     follows="left|top"
-     height="16"
-     increment="0.05"
-     initial_value="1"
-     label="Opacity"
-     layout="topleft"
-     left="80"
-     label_width="156"
-     name="bubble_chat_opacity"
-     top_pad = "10"
-     width="347" />
-    <color_swatch
-     can_apply_immediately="true"
-     color="0 0 0 1"
-     control_name="BackgroundChatColor"
-     follows="left|top"
-     height="50"
-     layout="topleft"
-     left_pad="30"
-     top="190"
-     name="background"
-     tool_tip="Choose color for bubble chat"
-     width="38">
-        <color_swatch.init_callback
-		     function="Pref.getUIColor"
-		     parameter="BackgroundChatColor" />
-		    <color_swatch.commit_callback
-		     function="Pref.applyUIColor"
-		     parameter="BackgroundChatColor" />
-    </color_swatch>
   <text
    type="string"
    length="1"
    follows="left|top"
    height="12"
    layout="topleft"
-   left="80"
+   left="33"
    name="UI Size:"
    top_pad="25"
-   width="300">
-    UI size
+   width="100">
+    UI size:
   </text>
   <slider
    control_name="UIScaleFactor"
@@ -213,7 +42,7 @@ Automatic position for:
    min_val="0.75"
    name="ui_scale_slider"
    top_pad="-14"
-   width="180" />
+   width="250" />
     <check_box
      control_name="ShowScriptErrors"
      follows="left|top"
@@ -252,65 +81,41 @@ Automatic position for:
          top_delta="0"
          width="315" />
     </radio_group>
-     <check_box
+
+    <check_box
      follows="top|left"
-     enabled_control="EnableVoiceChat"
-     control_name="PushToTalkToggle"
      height="15"
-     label="Toggle speak on/off when I press:"
+     label="Allow Multiple Viewer"
      layout="topleft"
      left="30"
      name="push_to_talk_toggle_check"
-     width="237"
-     tool_tip="When in toggle mode, press and release the trigger key ONCE to switch your microphone on or off. When not in toggle mode, the microphone broadcasts your voice only while the trigger is being held down."/>
-    <line_editor
+     top_pad="20"
+     width="237"/>
+    <check_box
      follows="top|left"
-     control_name="PushToTalkButton"
-     enabled="false"
-     enabled_control="EnableVoiceChat"
-     height="23"
-     left="80"
-     max_length_bytes="200"
-     name="modifier_combo"
-     label="Push-to-Speak trigger"
+     height="15"
+     label="Show Grid Selection at login"
+     layout="topleft"
+     left="30"
+     name="push_to_talk_toggle_check"
      top_pad="5"
-     width="200" />
-    <button
-     layout="topleft" 
+     width="237"/>
+    <check_box
      follows="top|left"
-     enabled_control="EnableVoiceChat"
-     height="23"
-     label="Set Key"
-     left_pad="5"
-     name="set_voice_hotkey_button"
-     width="100">
-          <button.commit_callback
-          function="Pref.VoiceSetKey" />
-    </button>
-  <button
-   enabled_control="EnableVoiceChat"
+     height="15"
+     label="Show Advanced Manu"
+     layout="topleft"
+     left="30"
+     name="push_to_talk_toggle_check"
+     top_pad="5"
+     width="237"/>
+    <check_box
      follows="top|left"
-     halign="center"
-     height="23"
-     image_overlay="Refresh_Off"
-   layout="topleft" 
-     tool_tip="Reset to Middle Mouse Button"
-     mouse_opaque="true"
-     name="set_voice_middlemouse_button"
-     left_pad="5"
-     width="25">
-          <button.commit_callback
-          function="Pref.VoiceSetMiddleMouse" />
-    </button>
-  <button
- height="23"
- label="Other Devices"
- left="30"
- name="joystick_setup_button"
- top_pad="27"
- width="155">
-    <button.commit_callback
-     function="Floater.Show"
-     parameter="pref_joystick" />
-  </button>
+     height="15"
+     label="Show Developer Menu"
+     layout="topleft"
+     left="30"
+     name="push_to_talk_toggle_check"
+     top_pad="5"
+     width="237"/>
 </panel>
-- 
cgit v1.2.3


From 2287f7612ce0e2cbc439c4ce048edcb2df3b3d40 Mon Sep 17 00:00:00 2001
From: Paul Guslisty <pguslisty@productengine.com>
Date: Thu, 11 Nov 2010 18:49:55 +0200
Subject: STORM-587 ADDITIONAL FIX Layout cleanup in the Advanced tab of
 Preferences

- Temporary restored controls:
    1. "Move avatar lips when speaking" checkbox
    2. "Toggle speak on/off when I press:" checkbox
    3. "Push-to-Speak trigger" lineeditor
    4. "set_voice_hotkey_button" button
    5. "set_voice_middlemouse_button" button

They should be moved to the Sound&Media panel of floater Preferences. But the specification for the Sound&Media panel is not ready yet.
As specification will be ready, these controls will be moved to the Sound&Media panel.
---
 .../default/xui/en/panel_preferences_advanced.xml  | 64 +++++++++++++++++++++-
 1 file changed, 63 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
index 6f4beea43a..6a9ea5afb6 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
@@ -103,7 +103,7 @@
     <check_box
      follows="top|left"
      height="15"
-     label="Show Advanced Manu"
+     label="Show Advanced Menu"
      layout="topleft"
      left="30"
      name="push_to_talk_toggle_check"
@@ -118,4 +118,66 @@
      name="push_to_talk_toggle_check"
      top_pad="5"
      width="237"/>
+     
+    <check_box
+     control_name="LipSyncEnabled"
+     follows="left|top"
+     height="20"
+     label="Move avatar lips when speaking"
+     layout="topleft"
+     left_delta="0"
+     name="enable_lip_sync"
+     width="237"
+     top_pad="130" />
+     
+     <check_box
+     follows="top|left"
+     enabled_control="EnableVoiceChat"
+     control_name="PushToTalkToggle"
+     height="15"
+     label="Toggle speak on/off when I press:"
+     layout="topleft"
+     left="30"
+     name="push_to_talk_toggle_check"
+     width="237"
+     tool_tip="When in toggle mode, press and release the trigger key ONCE to switch your microphone on or off. When not in toggle mode, the microphone broadcasts your voice only while the trigger is being held down."/>
+    <line_editor
+     follows="top|left"
+     control_name="PushToTalkButton"
+     enabled="false"
+     enabled_control="EnableVoiceChat"
+     height="23"
+     left="80"
+     max_length_bytes="200"
+     name="modifier_combo"
+     label="Push-to-Speak trigger"
+     top_pad="5"
+     width="200" />
+    <button
+     layout="topleft" 
+     follows="top|left"
+     enabled_control="EnableVoiceChat"
+     height="23"
+     label="Set Key"
+     left_pad="5"
+     name="set_voice_hotkey_button"
+     width="100">
+          <button.commit_callback
+          function="Pref.VoiceSetKey" />
+    </button>
+  <button
+     enabled_control="EnableVoiceChat"
+     follows="top|left"
+     halign="center"
+     height="23"
+     image_overlay="Refresh_Off"
+     layout="topleft" 
+     tool_tip="Reset to Middle Mouse Button"
+     mouse_opaque="true"
+     name="set_voice_middlemouse_button"
+     left_pad="5"
+     width="25">
+          <button.commit_callback
+          function="Pref.VoiceSetMiddleMouse" />
+    </button>
 </panel>
-- 
cgit v1.2.3


From 6e15957d909787ba612004903f04335a593b5348 Mon Sep 17 00:00:00 2001
From: "Andrew A. de Laix" <alain@lindenlab.com>
Date: Thu, 11 Nov 2010 09:40:30 -0800
Subject: run install script on successful download

---
 indra/newview/viewer_manifest.py | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index f95697adb6..0073641ed4 100644
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -571,14 +571,16 @@ class DarwinManifest(ViewerManifest):
 
             # copy additional libs in <bundle>/Contents/MacOS/
             self.path("../../libraries/universal-darwin/lib_release/libndofdev.dylib", dst="MacOS/libndofdev.dylib")
+			
+					
+            if self.prefix(src="../viewer_components/updater", dst="MacOS"):
+                self.path("update_install")
+                self.end_prefix()
+
 
             # most everything goes in the Resources directory
             if self.prefix(src="", dst="Resources"):
                 super(DarwinManifest, self).construct()
-		
-                if self.prefix(src="../viewer_components/updater", dst=""):
-                    self.path("update_install")
-                    self.end_prefix()
 
                 if self.prefix("cursors_mac"):
                     self.path("*.tif")
-- 
cgit v1.2.3


From 4e22d63352dd65085cfbba9c22070271ecdd4bcf Mon Sep 17 00:00:00 2001
From: "Andrew A. de Laix" <alain@lindenlab.com>
Date: Thu, 11 Nov 2010 11:05:46 -0800
Subject: Add very basic windows install script.

---
 indra/newview/viewer_manifest.py | 4 ++++
 1 file changed, 4 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index 0073641ed4..55d64fd3a6 100644
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -251,6 +251,10 @@ class WindowsManifest(ViewerManifest):
         if self.prefix(src=os.path.join(os.pardir, 'sharedlibs', self.args['configuration']),
                        dst=""):
 
+            if self.prefix(src="../../viewer_components/updater", dst=""):
+                self.path("update_install.bat")
+                self.end_prefix()
+
             self.enable_crt_manifest_check()
 
             # Get kdu dll, continue if missing.
-- 
cgit v1.2.3


From 7a7f89db6d9c5e6b2c6c89ea39c0302907a0442b Mon Sep 17 00:00:00 2001
From: "Andrew A. de Laix" <alain@lindenlab.com>
Date: Thu, 11 Nov 2010 11:46:24 -0800
Subject: fix termination issues with thread safe queue in main loop repeater
 service.

---
 indra/newview/llappviewer.cpp        |  4 +++-
 indra/newview/llmainlooprepeater.cpp | 12 +++++++++---
 indra/newview/llmainlooprepeater.h   |  2 +-
 3 files changed, 13 insertions(+), 5 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index c06f0c18e8..76d518b610 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -812,7 +812,7 @@ bool LLAppViewer::init()
 	}
 	
 	// Initialize the repeater service.
-	LLMainLoopRepeater::getInstance()->start();
+	LLMainLoopRepeater::instance().start();
 	
 	//
 	// Initialize the window
@@ -1737,6 +1737,8 @@ bool LLAppViewer::cleanup()
 		llinfos << "File launched." << llendflush;
 	}
 
+	LLMainLoopRepeater::instance().stop();
+
 	ll_close_fail_log();
 
     llinfos << "Goodbye!" << llendflush;
diff --git a/indra/newview/llmainlooprepeater.cpp b/indra/newview/llmainlooprepeater.cpp
index c2eba97641..ddc925a73b 100644
--- a/indra/newview/llmainlooprepeater.cpp
+++ b/indra/newview/llmainlooprepeater.cpp
@@ -36,7 +36,7 @@
 
 
 LLMainLoopRepeater::LLMainLoopRepeater(void):
-	mQueue(gAPRPoolp, 1024)
+	mQueue(0)
 {
 	; // No op.
 }
@@ -44,6 +44,9 @@ LLMainLoopRepeater::LLMainLoopRepeater(void):
 
 void LLMainLoopRepeater::start(void)
 {
+	if(mQueue != 0) return;
+
+	mQueue = new LLThreadSafeQueue<LLSD>(gAPRPoolp, 1024);
 	mMainLoopConnection = LLEventPumps::instance().
 		obtain("mainloop").listen("stupid name here", boost::bind(&LLMainLoopRepeater::onMainLoop, this, _1));
 	mRepeaterConnection = LLEventPumps::instance().
@@ -55,13 +58,16 @@ void LLMainLoopRepeater::stop(void)
 {
 	mMainLoopConnection.release();
 	mRepeaterConnection.release();
+
+	delete mQueue;
+	mQueue = 0;
 }
 
 
 bool LLMainLoopRepeater::onMainLoop(LLSD const &)
 {
 	LLSD message;
-	while(mQueue.tryPopBack(message)) {
+	while(mQueue->tryPopBack(message)) {
 		std::string pump = message["pump"].asString();
 		if(pump.length() == 0 ) continue; // No pump.
 		LLEventPumps::instance().obtain(pump).post(message["payload"]);
@@ -73,7 +79,7 @@ bool LLMainLoopRepeater::onMainLoop(LLSD const &)
 bool LLMainLoopRepeater::onMessage(LLSD const & event)
 {
 	try {
-		mQueue.pushFront(event);
+		mQueue->pushFront(event);
 	} catch(LLThreadSafeQueueError & e) {
 		llwarns << "could not repeat message (" << e.what() << ")" << 
 			event.asString() << LL_ENDL;
diff --git a/indra/newview/llmainlooprepeater.h b/indra/newview/llmainlooprepeater.h
index 96b83b4916..f84c0ca94c 100644
--- a/indra/newview/llmainlooprepeater.h
+++ b/indra/newview/llmainlooprepeater.h
@@ -55,7 +55,7 @@ public:
 private:
 	LLTempBoundListener mMainLoopConnection;
 	LLTempBoundListener mRepeaterConnection;
-	LLThreadSafeQueue<LLSD> mQueue;
+	LLThreadSafeQueue<LLSD> * mQueue;
 	
 	bool onMainLoop(LLSD const &);
 	bool onMessage(LLSD const & event);
-- 
cgit v1.2.3


From bfa393f933ccf11105daf5258f373efc764b736f Mon Sep 17 00:00:00 2001
From: "Mark Palange (Mani)" <palange@lindenlab.com>
Date: Thu, 11 Nov 2010 19:05:05 -0800
Subject: CHOP-178 Add a non-interactive moe to the windows installer. Rev by
 Brad

---
 .../installers/windows/installer_template.nsi      | 55 +++++++++++++++-------
 1 file changed, 39 insertions(+), 16 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/installers/windows/installer_template.nsi b/indra/newview/installers/windows/installer_template.nsi
index d5712f80cf..4e8ed807ee 100644
--- a/indra/newview/installers/windows/installer_template.nsi
+++ b/indra/newview/installers/windows/installer_template.nsi
@@ -85,6 +85,8 @@ AutoCloseWindow true					; after all files install, close window
 InstallDir "$PROGRAMFILES\${INSTNAME}"
 InstallDirRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" ""
 DirText $(DirectoryChooseTitle) $(DirectoryChooseSetup)
+Page directory dirPre
+Page instfiles
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;; Variables
@@ -95,6 +97,8 @@ Var INSTFLAGS
 Var INSTSHORTCUT
 Var COMMANDLINE         ; command line passed to this installer, set in .onInit
 Var SHORTCUT_LANG_PARAM ; "--set InstallLanguage de", passes language to viewer
+Var SKIP_DIALOGS        ; set from command line in  .onInit. autoinstall 
+                        ; GUI and the defaults.
 
 ;;; Function definitions should go before file includes, because calls to
 ;;; DLLs like LangDLL trigger an implicit file include, so if that call is at
@@ -110,6 +114,9 @@ Var SHORTCUT_LANG_PARAM ; "--set InstallLanguage de", passes language to viewer
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 Function .onInstSuccess
     Push $R0	# Option value, unused
+
+    StrCmp $SKIP_DIALOGS "true" label_launch 
+
     ${GetOptions} $COMMANDLINE "/AUTOSTART" $R0
     # If parameter was there (no error) just launch
     # Otherwise ask
@@ -128,6 +135,13 @@ label_no_launch:
 	Pop $R0
 FunctionEnd
 
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Pre-directory page callback
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function dirPre
+    StrCmp $SKIP_DIALOGS "true" 0 +2
+	Abort
+FunctionEnd    
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ; Make sure we're not on Windows 98 / ME
@@ -145,7 +159,8 @@ Function CheckWindowsVersion
 	StrCmp $R0 "NT" win_ver_bad
 	Return
 win_ver_bad:
-	MessageBox MB_YESNO $(CheckWindowsVersionMB) IDNO win_ver_abort
+	StrCmp $SKIP_DIALOGS "true" +2 ; If skip_dialogs is set just install
+            MessageBox MB_YESNO $(CheckWindowsVersionMB) IDNO win_ver_abort
 	Return
 win_ver_abort:
 	Quit
@@ -184,13 +199,13 @@ FunctionEnd
 ; If it has, allow user to bail out of install process.
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 Function CheckIfAlreadyCurrent
-  Push $0
-	ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Version"
-    StrCmp $0 ${VERSION_LONG} 0 DONE
-	MessageBox MB_OKCANCEL $(CheckIfCurrentMB) /SD IDOK IDOK DONE
+    Push $0
+    ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Version"
+    StrCmp $0 ${VERSION_LONG} 0 continue_install
+    StrCmp $SKIP_DIALOGS "true" continue_install
+    MessageBox MB_OKCANCEL $(CheckIfCurrentMB) /SD IDOK IDOK continue_install
     Quit
-
-  DONE:
+continue_install:
     Pop $0
     Return
 FunctionEnd
@@ -203,7 +218,9 @@ Function CloseSecondLife
   Push $0
   FindWindow $0 "Second Life" ""
   IntCmp $0 0 DONE
-  MessageBox MB_OKCANCEL $(CloseSecondLifeInstMB) IDOK CLOSE IDCANCEL CANCEL_INSTALL
+  
+  StrCmp $SKIP_DIALOGS "true" CLOSE
+    MessageBox MB_OKCANCEL $(CloseSecondLifeInstMB) IDOK CLOSE IDCANCEL CANCEL_INSTALL
 
   CANCEL_INSTALL:
     Quit
@@ -659,23 +676,29 @@ FunctionEnd
 Function .onInit
     Push $0
     ${GetParameters} $COMMANDLINE              ; get our command line
+
+    ${GetOptions} $COMMANDLINE "/SKIP_DIALOGS" $0   
+    IfErrors +2 0 ; If error jump past setting SKIP_DIALOGS
+        StrCpy $SKIP_DIALOGS "true"
+
     ${GetOptions} $COMMANDLINE "/LANGID=" $0   ; /LANGID=1033 implies US English
     ; If no language (error), then proceed
-    IfErrors lbl_check_silent
+    IfErrors lbl_configure_default_lang
     ; No error means we got a language, so use it
     StrCpy $LANGUAGE $0
     Goto lbl_return
 
-lbl_check_silent:
-    ; For silent installs, no language prompt, use default
-    IfSilent lbl_return
-    
-	; If we currently have a version of SL installed, default to the language of that install
+lbl_configure_default_lang:
+    ; If we currently have a version of SL installed, default to the language of that install
     ; Otherwise don't change $LANGUAGE and it will default to the OS UI language.
-	ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" "InstallerLanguage"
-    IfErrors lbl_build_menu
+    ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" "InstallerLanguage"
+    IfErrors +2 0 ; If error skip the copy instruction 
 	StrCpy $LANGUAGE $0
 
+    ; For silent installs, no language prompt, use default
+    IfSilent lbl_return
+    StrCmp $SKIP_DIALOGS "true" lbl_return
+  
 lbl_build_menu:
 	Push ""
     # Use separate file so labels can be UTF-16 but we can still merge changes
-- 
cgit v1.2.3


From 4077e6bb52f73a3ccd7f560788fc2fda21d7d9e7 Mon Sep 17 00:00:00 2001
From: Wolfpup Lowenhar <wolfpup67@earthlink.net>
Date: Thu, 11 Nov 2010 22:50:14 -0500
Subject: STORM-102 : STORM-143 :Made needed changes to code to improve
 searching for previous logs  and also changed the name used for P2P IM log
 file names. The latter change is going to  temporarely break personal content
 for those that are saving conversation logs as P2P IM  logs will now be
 useinf the user name and not the legacy name.

---
 indra/newview/llimview.cpp  |  5 +++--
 indra/newview/lllogchat.cpp | 53 +++++++++++++++++++++++----------------------
 2 files changed, 30 insertions(+), 28 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index 857c27be63..14a29b7e0f 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -537,7 +537,8 @@ bool LLIMModel::LLIMSession::isOtherParticipantAvaline()
 
 void LLIMModel::LLIMSession::onAvatarNameCache(const LLUUID& avatar_id, const LLAvatarName& av_name)
 {
-	if (av_name.mLegacyFirstName.empty())
+	mHistoryFileName = av_name.mUsername;
+	/*if (av_name.mLegacyFirstName.empty())
 	{
 		// if mLegacyFirstName is empty it means display names is off and the 
 		// data came from the gCacheName, mDisplayName will be the legacy name
@@ -546,7 +547,7 @@ void LLIMModel::LLIMSession::onAvatarNameCache(const LLUUID& avatar_id, const LL
 	else
 	{  
 		mHistoryFileName = LLCacheName::cleanFullName(av_name.getLegacyName());
-	}
+	}*/
 }
 
 void LLIMModel::LLIMSession::buildHistoryFileName()
diff --git a/indra/newview/lllogchat.cpp b/indra/newview/lllogchat.cpp
index 4f80472330..2fb5ba82ba 100644
--- a/indra/newview/lllogchat.cpp
+++ b/indra/newview/lllogchat.cpp
@@ -206,7 +206,7 @@ std::string LLLogChat::makeLogFileName(std::string filename)
 
 std::string LLLogChat::cleanFileName(std::string filename)
 {
-	std::string invalidChars = "\"\'\\/?*:<>|";
+	std::string invalidChars = "\"\'\\/?*:.<>|";
 	std::string::size_type position = filename.find_first_of(invalidChars);
 	while (position != filename.npos)
 	{
@@ -370,8 +370,8 @@ void LLLogChat::loadAllHistory(const std::string& file_name, std::list<LLSD>& me
 		llwarns << "Session name is Empty!" << llendl;
 		return ;
 	}
-	LL_INFOS("") << "Loading:" << file_name << LL_ENDL;/* uncomment if you want to verify step, delete on commit */
-	LL_INFOS("") << "Current:" << makeLogFileName(file_name) << LL_ENDL;/* uncomment if you want to verify step, delete on commit */
+	//LL_INFOS("") << "Loading:" << file_name << LL_ENDL;/* uncomment if you want to verify step, delete on commit */
+	//LL_INFOS("") << "Current:" << makeLogFileName(file_name) << LL_ENDL;/* uncomment if you want to verify step, delete on commit */
 	LLFILE* fptr = LLFile::fopen(makeLogFileName(file_name), "r");/*Flawfinder: ignore*/
 	if (!fptr)
     {
@@ -569,31 +569,32 @@ bool LLChatLogParser::parse(std::string& raw, LLSD& im)
 	im[IM_TEXT] = name_and_text[IDX_TEXT];
 	return true;  //parsed name and message text, maybe have a timestamp too
 }
-std::string LLLogChat::oldLogFileName(std::string filename)
-{
+std::string LLLogChat::oldLogFileName(std::string filename)
+{
     std::string scanResult;
 	std::string directory = gDirUtilp->getPerAccountChatLogsDir();/* get Users log directory */
 	directory += gDirUtilp->getDirDelimiter();/* add final OS dependent delimiter */
-	std::string pattern = (cleanFileName(filename)+(( filename == "chat" ) ? "-???\?-?\?-??.txt" : "-???\?-??.txt"));/* create search pattern*/
-	LL_INFOS("") << "Checking:" << directory << " for " << pattern << LL_ENDL;/* uncomment if you want to verify step, delete on commit */
-	std::vector<std::string> allfiles;
-
-    while (gDirUtilp->getNextFileInDir(directory, pattern, scanResult))
+	filename=cleanFileName(filename);/* lest make shure the file name has no invalad charecters befor making the pattern */
+	std::string pattern = (filename+(( filename == "chat" ) ? "-???\?-?\?-??.txt" : "-???\?-??.txt"));/* create search pattern*/
+	//LL_INFOS("") << "Checking:" << directory << " for " << pattern << LL_ENDL;/* uncomment if you want to verify step, delete on commit */
+	std::vector<std::string> allfiles;
+
+    while (gDirUtilp->getNextFileInDir(directory, pattern, scanResult))
+    {
+		//LL_INFOS("") << "Found   :" << scanResult << LL_ENDL;
+        allfiles.push_back(scanResult);
+    }
+
+    if (allfiles.size() == 0)  // if no result from date search, return generic filename
+    {
+        scanResult = directory + filename + ".txt";
+    }
+    else 
     {
-		//LL_INFOS("") << "Found   :" << scanResult << LL_ENDL;
-        allfiles.push_back(scanResult);
-    }
-
-    if (allfiles.size() == 0)  // if no result from date search, return generic filename
-    {
-        scanResult = directory + filename + ".txt";
-    }
-    else 
-    {
-        std::sort(allfiles.begin(), allfiles.end());
-        scanResult = directory + allfiles.back();
-        // thisfile is now the most recent version of the file.
-    }
-	LL_INFOS("") << "Reading:" << scanResult << LL_ENDL;
-    return scanResult;
+        std::sort(allfiles.begin(), allfiles.end());
+        scanResult = directory + allfiles.back();
+        // thisfile is now the most recent version of the file.
+    }
+	//LL_INFOS("") << "Reading:" << scanResult << LL_ENDL;/* uncomment if you want to verify step, delete on commit */
+    return scanResult;
 }
-- 
cgit v1.2.3


From 5c18ab7aceabc01fdcf01e86e364621241132966 Mon Sep 17 00:00:00 2001
From: Paul Guslisty <pguslisty@productengine.com>
Date: Fri, 12 Nov 2010 15:35:42 +0200
Subject: STORM-587 ADDITIONAL FIX Layout cleanup in the Advanced tab of
 Preferences

- Removed controls:
    1. "Move avatar lips when speaking" checkbox
    2. "Toggle speak on/off when I press:" checkbox
    3. "Push-to-Speak trigger" lineeditor
    4. "set_voice_hotkey_button" button
    5. "set_voice_middlemouse_button" button

- Set proper names for checkboxes

According to the specification these controls are in the Sound&Media panel now.
---
 .../default/xui/en/panel_preferences_advanced.xml  | 70 ++--------------------
 1 file changed, 4 insertions(+), 66 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
index 6a9ea5afb6..c1fb0243b7 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
@@ -88,7 +88,7 @@
      label="Allow Multiple Viewer"
      layout="topleft"
      left="30"
-     name="push_to_talk_toggle_check"
+     name="allow_multiple_viewer_check"
      top_pad="20"
      width="237"/>
     <check_box
@@ -97,7 +97,7 @@
      label="Show Grid Selection at login"
      layout="topleft"
      left="30"
-     name="push_to_talk_toggle_check"
+     name="show_grid_selection_check"
      top_pad="5"
      width="237"/>
     <check_box
@@ -106,7 +106,7 @@
      label="Show Advanced Menu"
      layout="topleft"
      left="30"
-     name="push_to_talk_toggle_check"
+     name="show_advanced_menu_check"
      top_pad="5"
      width="237"/>
     <check_box
@@ -115,69 +115,7 @@
      label="Show Developer Menu"
      layout="topleft"
      left="30"
-     name="push_to_talk_toggle_check"
+     name="show_develop_menu_check"
      top_pad="5"
      width="237"/>
-     
-    <check_box
-     control_name="LipSyncEnabled"
-     follows="left|top"
-     height="20"
-     label="Move avatar lips when speaking"
-     layout="topleft"
-     left_delta="0"
-     name="enable_lip_sync"
-     width="237"
-     top_pad="130" />
-     
-     <check_box
-     follows="top|left"
-     enabled_control="EnableVoiceChat"
-     control_name="PushToTalkToggle"
-     height="15"
-     label="Toggle speak on/off when I press:"
-     layout="topleft"
-     left="30"
-     name="push_to_talk_toggle_check"
-     width="237"
-     tool_tip="When in toggle mode, press and release the trigger key ONCE to switch your microphone on or off. When not in toggle mode, the microphone broadcasts your voice only while the trigger is being held down."/>
-    <line_editor
-     follows="top|left"
-     control_name="PushToTalkButton"
-     enabled="false"
-     enabled_control="EnableVoiceChat"
-     height="23"
-     left="80"
-     max_length_bytes="200"
-     name="modifier_combo"
-     label="Push-to-Speak trigger"
-     top_pad="5"
-     width="200" />
-    <button
-     layout="topleft" 
-     follows="top|left"
-     enabled_control="EnableVoiceChat"
-     height="23"
-     label="Set Key"
-     left_pad="5"
-     name="set_voice_hotkey_button"
-     width="100">
-          <button.commit_callback
-          function="Pref.VoiceSetKey" />
-    </button>
-  <button
-     enabled_control="EnableVoiceChat"
-     follows="top|left"
-     halign="center"
-     height="23"
-     image_overlay="Refresh_Off"
-     layout="topleft" 
-     tool_tip="Reset to Middle Mouse Button"
-     mouse_opaque="true"
-     name="set_voice_middlemouse_button"
-     left_pad="5"
-     width="25">
-          <button.commit_callback
-          function="Pref.VoiceSetMiddleMouse" />
-    </button>
 </panel>
-- 
cgit v1.2.3


From 2632565bbced3002eb9912270b1f7303c48a0b44 Mon Sep 17 00:00:00 2001
From: Wolfpup Lowenhar <wolfpup67@earthlink.net>
Date: Fri, 12 Nov 2010 09:09:41 -0500
Subject: STORM-102 : STORM-143 :Removed unneeded code in llimview.

---
 indra/newview/llimview.cpp | 10 ----------
 1 file changed, 10 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index 14a29b7e0f..cc48226052 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -538,16 +538,6 @@ bool LLIMModel::LLIMSession::isOtherParticipantAvaline()
 void LLIMModel::LLIMSession::onAvatarNameCache(const LLUUID& avatar_id, const LLAvatarName& av_name)
 {
 	mHistoryFileName = av_name.mUsername;
-	/*if (av_name.mLegacyFirstName.empty())
-	{
-		// if mLegacyFirstName is empty it means display names is off and the 
-		// data came from the gCacheName, mDisplayName will be the legacy name
-		mHistoryFileName = LLCacheName::cleanFullName(av_name.mDisplayName);
-	}
-	else
-	{  
-		mHistoryFileName = LLCacheName::cleanFullName(av_name.getLegacyName());
-	}*/
 }
 
 void LLIMModel::LLIMSession::buildHistoryFileName()
-- 
cgit v1.2.3


From ef46e7037ca59224dfcdf3745e165ee97b086a69 Mon Sep 17 00:00:00 2001
From: Seth ProductEngine <slitovchuk@productengine.com>
Date: Fri, 12 Nov 2010 17:28:44 +0200
Subject: STORM-579 FIXED resident SLURL font color to match Chat preferences
 for plain text Nearby Chat log

---
 indra/newview/llchathistory.cpp | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index 0f7e9313a9..271ee0c4a4 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -798,9 +798,14 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL
 			else if ( chat.mFromName != SYSTEM_FROM && chat.mFromID.notNull() && !message_from_log)
 			{
 				LLStyle::Params link_params(style_params);
-				link_params.overwriteFrom(LLStyleMap::instance().lookupAgent(chat.mFromID));
+
+				// Setting is_link = true for agent SLURL to avoid applying default style to it.
+				// See LLTextBase::appendTextImpl().
+				link_params.is_link = true;
+				link_params.link_href = LLSLURL("agent", chat.mFromID, "inspect").getSLURLString();
+
 				// Add link to avatar's inspector and delimiter to message.
-				mEditor->appendText(link_params.link_href, false, style_params);
+				mEditor->appendText(chat.mFromName, false, link_params);
 				mEditor->appendText(delimiter, false, style_params);
 			}
 			else
-- 
cgit v1.2.3


From 29a36c21db57729ff86785745c90ffbf93875edb Mon Sep 17 00:00:00 2001
From: Andrew Productengine <adyukov@productengine.com>
Date: Fri, 12 Nov 2010 18:18:44 +0200
Subject: STORM-571 FIXED Moved voice prefs from advanced to Sound&Media and
 changed layout accordingly.

This changeset also covers STORM-572 (note that design in this fix differs a little from the one proposed in there because there was not enough space to make it that way).
---
 .../default/xui/en/panel_preferences_advanced.xml  |   4 -
 .../default/xui/en/panel_preferences_sound.xml     | 140 +++++++++++++++------
 2 files changed, 104 insertions(+), 40 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
index c1fb0243b7..15d1222d00 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
@@ -13,10 +13,6 @@
      name="aspect_ratio_text">
         [NUM]:[DEN]
     </panel.string>
-    <panel.string
-     name="middle_mouse">
-        Middle Mouse
-    </panel.string>
   <text
    type="string"
    length="1"
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml
index aa760edad3..8ade41f587 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml
@@ -9,6 +9,10 @@
  name="Preference Media panel"
  top="1"
  width="517">
+    <panel.string
+     name="middle_mouse">
+     Middle Mouse
+    </panel.string>
     <slider
      control_name="AudioLevelMaster"
      follows="left|top"
@@ -66,7 +70,7 @@
 		name="UI Volume"
 		show_text="false"
 		slider_label.halign="right"
-		top_pad="7"
+		top_pad="5"
 		volume="true"
 		width="300">
 	  <slider.commit_callback
@@ -100,7 +104,7 @@
      name="Wind Volume"
      show_text="false"
      slider_label.halign="right"
-     top_pad="7"
+     top_pad="5"
      volume="true"
      width="300">
         <slider.commit_callback
@@ -168,7 +172,7 @@
      name="Music Volume"
      slider_label.halign="right"
      show_text="false"
-     top_pad="7"
+     top_pad="5"
      volume="true"
      width="300">
         <slider.commit_callback
@@ -211,7 +215,7 @@
 		name="Media Volume"
 		show_text="false"
 		slider_label.halign="right"
-		top_pad="7"
+		top_pad="5"
 		volume="true"
 		width="300">
 	  <slider.commit_callback
@@ -253,7 +257,7 @@
 		label_width="120"
 		layout="topleft"
 		left="0"
-		top_delta="20"
+		top_pad="5"
 		name="Voice Volume"
 		show_text="false"
 		slider_label.halign="right"
@@ -307,7 +311,18 @@
 		height="15"
 		tool_tip="Uncheck this to hide media attached to other avatars nearby"
 		label="Play media attached to other avatars"
-		left="25"/>
+		left="25"
+    width="230"/>
+  <check_box
+     control_name="LipSyncEnabled"
+     follows="left|top"
+     height="20"
+     label="Move avatar lips when speaking"
+     layout="topleft"
+     left_pad="0"
+     name="enable_lip_sync"
+     width="237"
+     top_delta="-4" />
 
     <text
      type="string"
@@ -317,8 +332,8 @@
      layout="topleft"
      left="25"
      name="voice_chat_settings"
-     width="200"
-     top="210">
+     width="180"
+     top_pad="10">
 	  Voice Chat Settings
     </text>
     <text
@@ -329,7 +344,7 @@
 	   left="80"
 	   top_delta="16"
      name="Listen from"
-     width="142">
+     width="102">
         Listen from:
     </text>
 	<icon
@@ -341,43 +356,96 @@
 		mouse_opaque="false"
 		visible="true"
 		width="18"
-		left_pad="0"
+		left_pad="-4"
 		top_delta="-5"/>
 	<icon
 		follows="left|top"
 		height="18"
 		image_name="Move_Walk_Off"
 		layout="topleft"
+    left_pad="130" 
 		name="avatar_icon"
 		mouse_opaque="false"
 		visible="true"
 		width="18"
-		top_delta="20" />
+		top_delta="0" />
    <radio_group
      enabled_control="EnableVoiceChat"
      control_name="VoiceEarLocation"
      draw_border="false"
      follows="left|top"
      layout="topleft"
-     left_pad="2"
+     left_delta="-128"
      width="221"
-     height="38"
+     height="20"
      name="ear_location">
     <radio_item
-     height="16"
+     height="19"
      label="Camera position"
      follows="left|top"
      layout="topleft"
      name="0"
      width="200"/>
     <radio_item
-     height="16"
+     height="19"
      follows="left|top"
      label="Avatar position"
      layout="topleft"
+     left_pad="-54"
      name="1"
+     top_delta ="0" 
      width="200" />
    </radio_group>
+ <check_box
+  follows="top|left"
+  enabled_control="EnableVoiceChat"
+  control_name="PushToTalkToggle"
+  height="15"
+  label="Toggle speak on/off when I press:"
+  layout="topleft"
+  left="30"
+  name="push_to_talk_toggle_check"
+  width="237"
+  tool_tip="When in toggle mode, press and release the trigger key ONCE to switch your microphone on or off. When not in toggle mode, the microphone broadcasts your voice only while the trigger is being held down."/>
+  <line_editor
+   follows="top|left"
+   control_name="PushToTalkButton"
+   enabled="false"
+   enabled_control="EnableVoiceChat"
+   height="23"
+   left="80"
+   max_length_bytes="200"
+   name="modifier_combo"
+   label="Push-to-Speak trigger"
+   top_pad="3"
+   width="200" />
+  <button
+   layout="topleft"
+   follows="top|left"
+   enabled_control="EnableVoiceChat"
+   height="23"
+   label="Set Key"
+   left_pad="5"
+   name="set_voice_hotkey_button"
+   width="100">
+    <button.commit_callback
+    function="Pref.VoiceSetKey" />
+  </button>
+  <button
+     enabled_control="EnableVoiceChat"
+     follows="top|left"
+     halign="center"
+     height="23"
+     image_overlay="Refresh_Off"
+     layout="topleft"
+     tool_tip="Reset to Middle Mouse Button"
+     mouse_opaque="true"
+     name="set_voice_middlemouse_button"
+     left_pad="5"
+     width="25">
+    <button.commit_callback
+    function="Pref.VoiceSetMiddleMouse" />
+  </button>
   <button
    control_name="ShowDeviceSettings"
    follows="left|top"
@@ -385,8 +453,8 @@
    is_toggle="true"
    label="Input/Output devices"
    layout="topleft"
-   left="80"
-   top_pad="5"
+   left="20"
+   top_pad="8"
    name="device_settings_btn"
    width="190">
   </button>
@@ -396,14 +464,14 @@
      visiblity_control="ShowDeviceSettings"
      border="false"
      follows="top|left"
-     height="120"
+     height="100"
      label="Device Settings"
      layout="topleft"
-     left="0"
+     left_delta="-2"
      name="device_settings_panel"
      class="panel_voice_device_settings"
-     width="501"
-     top="285">
+     width="470"
+     top_pad="0">
       <panel.string
         name="default_text">
         Default
@@ -419,7 +487,7 @@
       <icon
              height="18"
              image_name="Microphone_On"
-             left="80"
+             left_delta="4"
              name="microphone_icon"
              mouse_opaque="false"
              top="7"
@@ -434,17 +502,17 @@
      layout="topleft"
      left_pad="3"
      name="Input"
-     width="200">
+     width="70">
         Input
     </text>
     <combo_box
      height="23"
      control_name="VoiceInputAudioDevice"
      layout="topleft"
-     left="165"
+     left_pad="0"
      max_chars="128"
      name="voice_input_device"
-     top_pad="-2"
+     top_delta="-5"
      width="200" />
    <text
      type="string"
@@ -452,9 +520,9 @@
      follows="left|top"
      height="16"
      layout="topleft"
-     left="165"
+     left_delta="-70"
      name="My volume label"
-     top_pad="5"
+     top_pad="4"
      width="200">
         My volume:
     </text>
@@ -465,11 +533,11 @@
      increment="0.025"
      initial_value="1.0"
      layout="topleft"
-     left="160"
+     left_delta="-6"
      max_val="2"
      name="mic_volume_slider"
      tool_tip="Change the volume using this slider"
-     top_pad="-2"
+     top_pad="-1"
      width="220" />
     <text
      type="string"
@@ -480,7 +548,7 @@
      layout="topleft"
      left_pad="5"
      name="wait_text"
-     top_delta="0"
+     top_delta="-1"
      width="110">
         Please wait
     </text>
@@ -489,7 +557,7 @@
      layout="topleft"
      left_delta="0"
      name="bar0"
-     top_delta="0"
+     top_delta="-2"
      width="20" />
     <locate
      height="20"
@@ -522,10 +590,10 @@
           <icon
              height="18"
              image_name="Parcel_Voice_Light"
-             left="80"
+             left="5"
              name="speaker_icon"
              mouse_opaque="false"
-             top_pad="-8"
+             top_pad="3"
              visible="true"
              width="22" />
     <text
@@ -537,17 +605,17 @@
      layout="topleft"
      left_pad="0"
      name="Output"
-     width="200">
+     width="70">
         Output
     </text>
     <combo_box
      control_name="VoiceOutputAudioDevice"
      height="23"
      layout="topleft"
-     left="165"
+     left_pad="0"
      max_chars="128"
      name="voice_output_device"
-     top_pad="-2"
+     top_delta="-3"
      width="200" />
     </panel>
     </panel>
-- 
cgit v1.2.3


From e3677f9ee2223cc13d12456e1eee4f7f9a90c474 Mon Sep 17 00:00:00 2001
From: Dave SIMmONs <simon@lindenlab.com>
Date: Fri, 12 Nov 2010 12:18:18 -0800
Subject: Revert change for ER-301 to make merging easier.  We'll get this in
 another pass

---
 indra/newview/llviewerthrottle.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewerthrottle.cpp b/indra/newview/llviewerthrottle.cpp
index 5147272122..b614ccdbc2 100644
--- a/indra/newview/llviewerthrottle.cpp
+++ b/indra/newview/llviewerthrottle.cpp
@@ -46,7 +46,7 @@ const F32 MAX_FRACTIONAL = 1.5f;
 const F32 MIN_FRACTIONAL = 0.2f;
 
 const F32 MIN_BANDWIDTH = 50.f;
-const F32 MAX_BANDWIDTH = 3000.f;
+const F32 MAX_BANDWIDTH = 1500.f;
 const F32 STEP_FRACTIONAL = 0.1f;
 const F32 TIGHTEN_THROTTLE_THRESHOLD = 3.0f; // packet loss % per s
 const F32 EASE_THROTTLE_THRESHOLD = 0.5f; // packet loss % per s
-- 
cgit v1.2.3


From b2fcba25c8dd04318420af30f877b0984a524055 Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Sat, 13 Nov 2010 00:53:29 +0200
Subject: STORM-52 FIXED Made it possible to use an external script editor.

The editor can be specified:
* via "ExternalEditor" setting in settings.xml
* via LL_SCRIPT_EDITOR variable

Removed obsolete XUIEditor setting in favor of the new one.
---
 indra/newview/CMakeLists.txt                       |   2 +
 indra/newview/app_settings/settings.xml            |   4 +-
 indra/newview/llexternaleditor.cpp                 | 192 +++++++++++++++++
 indra/newview/llexternaleditor.h                   |  91 ++++++++
 indra/newview/llfloateruipreview.cpp               | 210 ++++--------------
 indra/newview/llpreviewscript.cpp                  | 235 ++++++++++++++++-----
 indra/newview/llpreviewscript.h                    |  15 +-
 .../skins/default/xui/en/panel_script_ed.xml       |   9 +
 8 files changed, 530 insertions(+), 228 deletions(-)
 create mode 100644 indra/newview/llexternaleditor.cpp
 create mode 100644 indra/newview/llexternaleditor.h

(limited to 'indra/newview')

diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 09622d3af5..d44b0ce679 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -143,6 +143,7 @@ set(viewer_SOURCE_FILES
     lleventnotifier.cpp
     lleventpoll.cpp
     llexpandabletextbox.cpp
+    llexternaleditor.cpp
     llface.cpp
     llfasttimerview.cpp
     llfavoritesbar.cpp
@@ -674,6 +675,7 @@ set(viewer_HEADER_FILES
     lleventnotifier.h
     lleventpoll.h
     llexpandabletextbox.h
+    llexternaleditor.h
     llface.h
     llfasttimerview.h
     llfavoritesbar.h
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index ebd93b5987..a5d9bd0f4f 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -11883,10 +11883,10 @@
       <key>Value</key>
       <real>150000.0</real>
     </map>
-    <key>XUIEditor</key>
+    <key>ExternalEditor</key>
     <map>
       <key>Comment</key>
-      <string>Path to program used to edit XUI files</string>
+      <string>Path to program used to edit LSL scripts and XUI files, e.g.: /usr/bin/gedit --new-window "%s"</string>
       <key>Persist</key>
       <integer>1</integer>
       <key>Type</key>
diff --git a/indra/newview/llexternaleditor.cpp b/indra/newview/llexternaleditor.cpp
new file mode 100644
index 0000000000..54968841ab
--- /dev/null
+++ b/indra/newview/llexternaleditor.cpp
@@ -0,0 +1,192 @@
+/** 
+ * @file llexternaleditor.cpp
+ * @brief A convenient class to run external editor.
+ *
+ * $LicenseInfo:firstyear=2010&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+#include "llexternaleditor.h"
+
+#include "llui.h"
+
+// static
+const std::string LLExternalEditor::sFilenameMarker = "%s";
+
+// static
+const std::string LLExternalEditor::sSetting = "ExternalEditor";
+
+bool LLExternalEditor::setCommand(const std::string& env_var, const std::string& override)
+{
+	std::string cmd = findCommand(env_var, override);
+	if (cmd.empty())
+	{
+		llwarns << "Empty editor command" << llendl;
+		return false;
+	}
+
+	// Add the filename marker if missing.
+	if (cmd.find(sFilenameMarker) == std::string::npos)
+	{
+		cmd += " \"" + sFilenameMarker + "\"";
+		llinfos << "Adding the filename marker (" << sFilenameMarker << ")" << llendl;
+	}
+
+	string_vec_t tokens;
+	if (tokenize(tokens, cmd) < 2) // 2 = bin + at least one arg (%s)
+	{
+		llwarns << "Error parsing editor command" << llendl;
+		return false;
+	}
+
+	// Check executable for existence.
+	std::string bin_path = tokens[0];
+	if (!LLFile::isfile(bin_path))
+	{
+		llwarns << "Editor binary [" << bin_path << "] not found" << llendl;
+		return false;
+	}
+
+	// Save command.
+	mProcess.setExecutable(bin_path);
+	mArgs.clear();
+	for (size_t i = 1; i < tokens.size(); ++i)
+	{
+		if (i > 1) mArgs += " ";
+		mArgs += "\"" + tokens[i] + "\"";
+	}
+	llinfos << "Setting command [" << bin_path << " " << mArgs << "]" << llendl;
+
+	return true;
+}
+
+bool LLExternalEditor::run(const std::string& file_path)
+{
+	std::string args = mArgs;
+	if (mProcess.getExecutable().empty() || args.empty())
+	{
+		llwarns << "Editor command not set" << llendl;
+		return false;
+	}
+
+	// Substitute the filename marker in the command with the actual passed file name.
+	LLStringUtil::replaceString(args, sFilenameMarker, file_path);
+
+	// Split command into separate tokens.
+	string_vec_t tokens;
+	tokenize(tokens, args);
+
+	// Set process arguments taken from the command.
+	mProcess.clearArguments();
+	for (string_vec_t::const_iterator arg_it = tokens.begin(); arg_it != tokens.end(); ++arg_it)
+	{
+		mProcess.addArgument(*arg_it);
+	}
+
+	// Run the editor.
+	llinfos << "Running editor command [" << mProcess.getExecutable() + " " + args << "]" << llendl;
+	int result = mProcess.launch();
+	if (result == 0)
+	{
+		// Prevent killing the process in destructor (will add it to the zombies list).
+		mProcess.orphan();
+	}
+
+	return result == 0;
+}
+
+// static
+size_t LLExternalEditor::tokenize(string_vec_t& tokens, const std::string& str)
+{
+	tokens.clear();
+
+	// Split the argument string into separate strings for each argument
+	typedef boost::tokenizer< boost::char_separator<char> > tokenizer;
+	boost::char_separator<char> sep("", "\" ", boost::drop_empty_tokens);
+
+	tokenizer tokens_list(str, sep);
+	tokenizer::iterator token_iter;
+	BOOL inside_quotes = FALSE;
+	BOOL last_was_space = FALSE;
+	for (token_iter = tokens_list.begin(); token_iter != tokens_list.end(); ++token_iter)
+	{
+		if (!strncmp("\"",(*token_iter).c_str(),2))
+		{
+			inside_quotes = !inside_quotes;
+		}
+		else if (!strncmp(" ",(*token_iter).c_str(),2))
+		{
+			if(inside_quotes)
+			{
+				tokens.back().append(std::string(" "));
+				last_was_space = TRUE;
+			}
+		}
+		else
+		{
+			std::string to_push = *token_iter;
+			if (last_was_space)
+			{
+				tokens.back().append(to_push);
+				last_was_space = FALSE;
+			}
+			else
+			{
+				tokens.push_back(to_push);
+			}
+		}
+	}
+
+	return tokens.size();
+}
+
+// static
+std::string LLExternalEditor::findCommand(
+	const std::string& env_var,
+	const std::string& override)
+{
+	std::string cmd;
+
+	// Get executable path.
+	if (!override.empty())	// try the supplied override first
+	{
+		cmd = override;
+		llinfos << "Using override" << llendl;
+	}
+	else if (!LLUI::sSettingGroups["config"]->getString(sSetting).empty())
+	{
+		cmd = LLUI::sSettingGroups["config"]->getString(sSetting);
+		llinfos << "Using setting" << llendl;
+	}
+	else					// otherwise use the path specified by the environment variable
+	{
+		char* env_var_val = getenv(env_var.c_str());
+		if (env_var_val)
+		{
+			cmd = env_var_val;
+			llinfos << "Using env var " << env_var << llendl;
+		}
+	}
+
+	llinfos << "Found command [" << cmd << "]" << llendl;
+	return cmd;
+}
diff --git a/indra/newview/llexternaleditor.h b/indra/newview/llexternaleditor.h
new file mode 100644
index 0000000000..6ea210d5e2
--- /dev/null
+++ b/indra/newview/llexternaleditor.h
@@ -0,0 +1,91 @@
+/** 
+ * @file llexternaleditor.h
+ * @brief A convenient class to run external editor.
+ *
+ * $LicenseInfo:firstyear=2010&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLEXTERNALEDITOR_H
+#define LL_LLEXTERNALEDITOR_H
+
+#include <llprocesslauncher.h>
+
+/**
+ * Usage:
+ *  LLExternalEditor ed;
+ *  ed.setCommand("MY_EXTERNAL_EDITOR_VAR");
+ *  ed.run("/path/to/file1");
+ *  ed.run("/other/path/to/file2");
+ */
+class LLExternalEditor
+{
+	typedef std::vector<std::string> string_vec_t;
+
+public:
+
+	/**
+	 * Set editor command.
+	 *
+	 * @param env_var			Environment variable of the same purpose.
+	 * @param override			Optional override.
+	 *
+	 * First tries the override, then a predefined setting (sSetting),
+	 * then the environment variable.
+	 *
+	 * @return Command if found, empty string otherwise.
+	 *
+	 * @see sSetting
+	 */
+	bool setCommand(const std::string& env_var, const std::string& override = LLStringUtil::null);
+
+	/**
+	 * Run the editor with the given file.
+	 *
+	 * @param file_path File to edit.
+	 * @return true on success, false on error.
+	 */
+	bool run(const std::string& file_path);
+
+private:
+
+	static std::string findCommand(
+		const std::string& env_var,
+		const std::string& override);
+
+	static size_t tokenize(string_vec_t& tokens, const std::string& str);
+
+	/**
+	 * Filename placeholder that gets replaced with an actual file name.
+	 */
+	static const std::string sFilenameMarker;
+
+	/**
+	 * Setting that can specify the editor command.
+	 */
+	static const std::string sSetting;
+
+
+	std::string			mArgs;
+	LLProcessLauncher	mProcess;
+};
+
+#endif // LL_LLEXTERNALEDITOR_H
diff --git a/indra/newview/llfloateruipreview.cpp b/indra/newview/llfloateruipreview.cpp
index 5dc8067648..d3a2f144d9 100644
--- a/indra/newview/llfloateruipreview.cpp
+++ b/indra/newview/llfloateruipreview.cpp
@@ -36,6 +36,7 @@
 
 // Internal utility
 #include "lleventtimer.h"
+#include "llexternaleditor.h"
 #include "llrender.h"
 #include "llsdutil.h"
 #include "llxmltree.h"
@@ -160,6 +161,8 @@ public:
 	DiffMap mDiffsMap;							// map, of filename to pair of list of changed element paths and list of errors
 
 private:
+	LLExternalEditor mExternalEditor;
+
 	// XUI elements for this floater
 	LLScrollListCtrl*			mFileList;							// scroll list control for file list
 	LLLineEditor*				mEditorPathTextBox;					// text field for path to editor executable
@@ -185,7 +188,7 @@ private:
 	std::string					mSavedDiffPath;						// stored diff file path so closing this floater doesn't reset it
 
 	// Internal functionality
-	static void popupAndPrintWarning(std::string& warning);			// pop up a warning
+	static void popupAndPrintWarning(const std::string& warning);	// pop up a warning
 	std::string getLocalizedDirectory();							// build and return the path to the XUI directory for the currently-selected localization
 	void scanDiffFile(LLXmlTreeNode* file_node);					// scan a given XML node for diff entries and highlight them in its associated file
 	void highlightChangedElements();								// look up the list of elements to highlight and highlight them in the current floater
@@ -597,7 +600,7 @@ void LLFloaterUIPreview::onClose(bool app_quitting)
 
 // Error handling (to avoid code repetition)
 // *TODO: this is currently unlocalized.  Add to alerts/notifications.xml, someday, maybe.
-void LLFloaterUIPreview::popupAndPrintWarning(std::string& warning)
+void LLFloaterUIPreview::popupAndPrintWarning(const std::string& warning)
 {
 	llwarns << warning << llendl;
 	LLSD args;
@@ -998,190 +1001,55 @@ void LLFloaterUIPreview::displayFloater(BOOL click, S32 ID, bool save)
 // Respond to button click to edit currently-selected floater
 void LLFloaterUIPreview::onClickEditFloater()
 {
-	std::string file_name = mFileList->getSelectedItemLabel(1);	// get the file name of the currently-selected floater
-	if(std::string("") == file_name)										// if no item is selected
-	{
-		return;															// ignore click
-	}
-	std::string path = getLocalizedDirectory() + file_name;
-
-	// stat file to see if it exists (some localized versions may not have it there are no diffs, and then we try to open an nonexistent file)
-	llstat dummy;
-	if(LLFile::stat(path.c_str(), &dummy))								// if the file does not exist
-	{
-		std::string warning = "No file for this floater exists in the selected localization.  Opening the EN version instead.";
-		popupAndPrintWarning(warning);
-
-		path = get_xui_dir() + mDelim + "en" + mDelim + file_name; // open the en version instead, by default
-	}
-
-	// get executable path
-	const char* exe_path_char;
-	std::string path_in_textfield = mEditorPathTextBox->getText();
-	if(std::string("") != path_in_textfield)	// if the text field is not emtpy, use its path
-	{
-		exe_path_char = path_in_textfield.c_str();
-	}
-	else if (!LLUI::sSettingGroups["config"]->getString("XUIEditor").empty())
-	{
-		exe_path_char = LLUI::sSettingGroups["config"]->getString("XUIEditor").c_str();
-	}
-	else									// otherwise use the path specified by the environment variable
+	// Determine file to edit.
+	std::string file_path;
 	{
-		exe_path_char = getenv("LL_XUI_EDITOR");
-	}
-
-	// error check executable path
-	if(NULL == exe_path_char)
-	{
-		std::string warning = "Select an editor by setting the environment variable LL_XUI_EDITOR or specifying its path in the \"Editor Path\" field.";
-		popupAndPrintWarning(warning);
-		return;
-	}
-	std::string exe_path = exe_path_char;	// do this after error check, otherwise internal strlen call fails on bad char*
-
-	// remove any quotes; they're added back in later where necessary
-	int found_at;
-	while((found_at = exe_path.find("\"")) != -1 || (found_at = exe_path.find("'")) != -1)
-	{
-		exe_path.erase(found_at,1);
-	}
-
-	llstat s;
-	if(!LLFile::stat(exe_path.c_str(), &s)) // If the executable exists
-	{
-		// build paths and arguments
-		std::string quote = std::string("\"");
-		std::string args;
-		std::string custom_args = mEditorArgsTextBox->getText();
-		int position_of_file = custom_args.find(std::string("%FILE%"), 0);	// prepare to replace %FILE% with actual file path
-		std::string first_part_of_args = "";
-		std::string second_part_of_args = "";
-		if(-1 == position_of_file)	// default: Executable.exe File.xml
-		{
-			args = quote + path + quote;			// execute the command Program.exe "File.xml"
-		}
-		else						// use advanced command-line arguments, e.g. "Program.exe -safe File.xml" -windowed for "-safe %FILE% -windowed"
+		std::string file_name = mFileList->getSelectedItemLabel(1);	// get the file name of the currently-selected floater
+		if (file_name.empty())					// if no item is selected
 		{
-			first_part_of_args = custom_args.substr(0,position_of_file);											// get part of args before file name
-			second_part_of_args = custom_args.substr(position_of_file+6,custom_args.length());						// get part of args after file name
-			custom_args = first_part_of_args + std::string("\"") + path + std::string("\"") + second_part_of_args;	// replace %FILE% with "<file path>" and put back together
-			args = custom_args;																						// and save in the variable that is actually used
+			llwarns << "No file selected" << llendl;
+			return;															// ignore click
 		}
+		file_path = getLocalizedDirectory() + file_name;
 
-		// find directory in which executable resides by taking everything after last slash
-		int last_slash_position = exe_path.find_last_of(mDelim);
-		if(-1 == last_slash_position)
-		{
-			std::string warning = std::string("Unable to find a valid path to the specified executable for XUI XML editing: ") + exe_path;
-			popupAndPrintWarning(warning);
-			return;
-		}
-        std::string exe_dir = exe_path.substr(0,last_slash_position); // strip executable off, e.g. get "C:\Program Files\TextPad 5" (with or without trailing slash)
-
-#if LL_WINDOWS
-		PROCESS_INFORMATION pinfo;
-		STARTUPINFOA sinfo;
-		memset(&sinfo, 0, sizeof(sinfo));
-		memset(&pinfo, 0, sizeof(pinfo));
-
-		std::string exe_name = exe_path.substr(last_slash_position+1);
-		args = quote + exe_name + quote + std::string(" ") + args;				// and prepend the executable name, so we get 'Program.exe "Arg1"'
-
-		char *args2 = new char[args.size() + 1];	// Windows requires that the second parameter to CreateProcessA be a writable (non-const) string...
-		strcpy(args2, args.c_str());
-
-		// we don't want the current directory to be the executable directory, since the file path is now relative. By using
-		// NULL for the current directory instead of exe_dir.c_str(), the path to the target file will work. 
-		if(!CreateProcessA(exe_path.c_str(), args2, NULL, NULL, FALSE, 0, NULL, NULL, &sinfo, &pinfo))
-		{
-			// DWORD dwErr = GetLastError();
-			std::string warning = "Creating editor process failed!";
-			popupAndPrintWarning(warning);
-		}
-		else
+		// stat file to see if it exists (some localized versions may not have it there are no diffs, and then we try to open an nonexistent file)
+		llstat dummy;
+		if(LLFile::stat(file_path.c_str(), &dummy))								// if the file does not exist
 		{
-			// foo = pinfo.dwProcessId; // get your pid here if you want to use it later on
-			// sGatewayHandle = pinfo.hProcess;
-			CloseHandle(pinfo.hThread); // stops leaks - nothing else
+			popupAndPrintWarning("No file for this floater exists in the selected localization.  Opening the EN version instead.");
+			file_path = get_xui_dir() + mDelim + "en" + mDelim + file_name; // open the en version instead, by default
 		}
+	}
 
-		delete[] args2;
-#else	// if !LL_WINDOWS
-		// This code was copied from the code to run SLVoice, with some modification; should work in UNIX (Mac/Darwin or Linux)
+	// Set the editor command.
+	std::string cmd_override;
+	{
+		std::string bin = mEditorPathTextBox->getText();
+		if (!bin.empty())
 		{
-			std::vector<std::string> arglist;
-			arglist.push_back(exe_path.c_str());
-
-			// Split the argument string into separate strings for each argument
-			typedef boost::tokenizer< boost::char_separator<char> > tokenizer;
-			boost::char_separator<char> sep("","\" ", boost::drop_empty_tokens);
-
-			tokenizer tokens(args, sep);
-			tokenizer::iterator token_iter;
-			BOOL inside_quotes = FALSE;
-			BOOL last_was_space = FALSE;
-			for(token_iter = tokens.begin(); token_iter != tokens.end(); ++token_iter)
-			{
-				if(!strncmp("\"",(*token_iter).c_str(),2))
-				{
-					inside_quotes = !inside_quotes;
-				}
-				else if(!strncmp(" ",(*token_iter).c_str(),2))
-				{
-					if(inside_quotes)
-					{
-						arglist.back().append(std::string(" "));
-						last_was_space = TRUE;
-					}
-				}
-				else
-				{
-					std::string to_push = *token_iter;
-					if(last_was_space)
-					{
-						arglist.back().append(to_push);
-						last_was_space = FALSE;
-					}
-					else
-					{
-						arglist.push_back(to_push);
-					}
-				}
-			}
-			
-			// create an argv vector for the child process
-			char **fakeargv = new char*[arglist.size() + 1];
-			int i;
-			for(i=0; i < arglist.size(); i++)
-				fakeargv[i] = const_cast<char*>(arglist[i].c_str());
-
-			fakeargv[i] = NULL;
-
-			fflush(NULL); // flush all buffers before the child inherits them
-			pid_t id = vfork();
-			if(id == 0)
+			// surround command with double quotes for the case if the path contains spaces
+			if (bin.find("\"") == std::string::npos)
 			{
-				// child
-				execv(exe_path.c_str(), fakeargv);
-
-				// If we reach this point, the exec failed.
-				// Use _exit() instead of exit() per the vfork man page.
-				std::string warning = "Creating editor process failed (vfork/execv)!";
-				popupAndPrintWarning(warning);
-				_exit(0);
+				bin = "\"" + bin + "\"";
 			}
 
-			// parent
-			delete[] fakeargv;
-			// sGatewayPID = id;
+			std::string args = mEditorArgsTextBox->getText();
+			cmd_override = bin + " " + args;
 		}
-#endif	// LL_WINDOWS
 	}
-	else
+	if (!mExternalEditor.setCommand("LL_XUI_EDITOR", cmd_override))
 	{
-		std::string warning = "Unable to find path to external XML editor for XUI preview tool";
+		std::string warning = "Select an editor by setting the environment variable LL_XUI_EDITOR "
+			"or the ExternalEditor setting or specifying its path in the \"Editor Path\" field.";
 		popupAndPrintWarning(warning);
+		return;
+	}
+
+	// Run the editor.
+	if (!mExternalEditor.run(file_path))
+	{
+		popupAndPrintWarning("Failed to run editor");
+		return;
 	}
 }
 
diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp
index cf2ea38288..330e809c53 100644
--- a/indra/newview/llpreviewscript.cpp
+++ b/indra/newview/llpreviewscript.cpp
@@ -34,11 +34,13 @@
 #include "llcheckboxctrl.h"
 #include "llcombobox.h"
 #include "lldir.h"
+#include "llexternaleditor.h"
 #include "llfloaterreg.h"
 #include "llinventorydefines.h"
 #include "llinventorymodel.h"
 #include "llkeyboard.h"
 #include "lllineeditor.h"
+#include "lllivefile.h"
 #include "llhelp.h"
 #include "llnotificationsutil.h"
 #include "llresmgr.h"
@@ -115,6 +117,54 @@ static bool have_script_upload_cap(LLUUID& object_id)
 	return object && (! object->getRegion()->getCapability("UpdateScriptTask").empty());
 }
 
+/// ---------------------------------------------------------------------------
+/// LLLiveLSLFile
+/// ---------------------------------------------------------------------------
+class LLLiveLSLFile : public LLLiveFile
+{
+public:
+	LLLiveLSLFile(std::string file_path, LLLiveLSLEditor* parent);
+	~LLLiveLSLFile();
+
+	void ignoreNextUpdate() { mIgnoreNextUpdate = true; }
+
+protected:
+	/*virtual*/ bool loadFile();
+
+	LLLiveLSLEditor*	mParent;
+	bool				mIgnoreNextUpdate;
+};
+
+LLLiveLSLFile::LLLiveLSLFile(std::string file_path, LLLiveLSLEditor* parent)
+:	mParent(parent)
+,	mIgnoreNextUpdate(false)
+,	LLLiveFile(file_path, 1.0)
+{
+}
+
+LLLiveLSLFile::~LLLiveLSLFile()
+{
+	LLFile::remove(filename());
+}
+
+bool LLLiveLSLFile::loadFile()
+{
+	if (mIgnoreNextUpdate)
+	{
+		mIgnoreNextUpdate = false;
+		return true;
+	}
+
+	if (!mParent->loadScriptText(filename()))
+	{
+		return false;
+	}
+
+	// Disable sync to avoid recursive load->save->load calls.
+	mParent->saveIfNeeded(false);
+	return true;
+}
+
 /// ---------------------------------------------------------------------------
 /// LLFloaterScriptSearch
 /// ---------------------------------------------------------------------------
@@ -281,6 +331,7 @@ LLScriptEdCore::LLScriptEdCore(
 	const LLHandle<LLFloater>& floater_handle,
 	void (*load_callback)(void*),
 	void (*save_callback)(void*, BOOL),
+	void (*edit_callback)(void*),
 	void (*search_replace_callback) (void* userdata),
 	void* userdata,
 	S32 bottom_pad)
@@ -290,6 +341,7 @@ LLScriptEdCore::LLScriptEdCore(
 	mEditor( NULL ),
 	mLoadCallback( load_callback ),
 	mSaveCallback( save_callback ),
+	mEditCallback( edit_callback ),
 	mSearchReplaceCallback( search_replace_callback ),
 	mUserdata( userdata ),
 	mForceClose( FALSE ),
@@ -329,6 +381,7 @@ BOOL LLScriptEdCore::postBuild()
 
 	childSetCommitCallback("lsl errors", &LLScriptEdCore::onErrorList, this);
 	childSetAction("Save_btn", boost::bind(&LLScriptEdCore::doSave,this,FALSE));
+	childSetAction("Edit_btn", boost::bind(&LLScriptEdCore::onEditButtonClick, this));
 
 	initMenu();
 
@@ -809,6 +862,13 @@ void LLScriptEdCore::doSave( BOOL close_after_save )
 	}
 }
 
+void LLScriptEdCore::onEditButtonClick()
+{
+	if (mEditCallback)
+	{
+		mEditCallback(mUserdata);
+	}
+}
 
 void LLScriptEdCore::onBtnUndoChanges()
 {
@@ -949,6 +1009,7 @@ void* LLPreviewLSL::createScriptEdPanel(void* userdata)
 								   self->getHandle(),
 								   LLPreviewLSL::onLoad,
 								   LLPreviewLSL::onSave,
+								   NULL, // no edit callback
 								   LLPreviewLSL::onSearchReplace,
 								   self,
 								   0);
@@ -1417,6 +1478,7 @@ void* LLLiveLSLEditor::createScriptEdPanel(void* userdata)
 								   self->getHandle(),
 								   &LLLiveLSLEditor::onLoad,
 								   &LLLiveLSLEditor::onSave,
+								   &LLLiveLSLEditor::onEdit,
 								   &LLLiveLSLEditor::onSearchReplace,
 								   self,
 								   0);
@@ -1433,6 +1495,7 @@ LLLiveLSLEditor::LLLiveLSLEditor(const LLSD& key) :
 	mCloseAfterSave(FALSE),
 	mPendingUploads(0),
 	mIsModifiable(FALSE),
+	mLiveFile(NULL),
 	mIsNew(false)
 {
 	mFactoryMap["script ed panel"] = LLCallbackMap(LLLiveLSLEditor::createScriptEdPanel, this);
@@ -1458,6 +1521,7 @@ BOOL LLLiveLSLEditor::postBuild()
 
 LLLiveLSLEditor::~LLLiveLSLEditor()
 {
+	delete mLiveFile;
 }
 
 // virtual
@@ -1639,38 +1703,39 @@ void LLLiveLSLEditor::onLoadComplete(LLVFS *vfs, const LLUUID& asset_id,
 	delete xored_id;
 }
 
-// unused
-// void LLLiveLSLEditor::loadScriptText(const std::string& filename)
-// {
-// 	if(!filename)
-// 	{
-// 		llerrs << "Filename is Empty!" << llendl;
-// 		return;
-// 	}
-// 	LLFILE* file = LLFile::fopen(filename, "rb");		/*Flawfinder: ignore*/
-// 	if(file)
-// 	{
-// 		// read in the whole file
-// 		fseek(file, 0L, SEEK_END);
-// 		long file_length = ftell(file);
-// 		fseek(file, 0L, SEEK_SET);
-// 		char* buffer = new char[file_length+1];
-// 		size_t nread = fread(buffer, 1, file_length, file);
-// 		if (nread < (size_t) file_length)
-// 		{
-// 			llwarns << "Short read" << llendl;
-// 		}
-// 		buffer[nread] = '\0';
-// 		fclose(file);
-// 		mScriptEd->mEditor->setText(LLStringExplicit(buffer));
-// 		mScriptEd->mEditor->makePristine();
-// 		delete[] buffer;
-// 	}
-// 	else
-// 	{
-// 		llwarns << "Error opening " << filename << llendl;
-// 	}
-// }
+ bool LLLiveLSLEditor::loadScriptText(const std::string& filename)
+ {
+ 	if (filename.empty())
+ 	{
+ 		llwarns << "Empty file name" << llendl;
+ 		return false;
+ 	}
+
+ 	LLFILE* file = LLFile::fopen(filename, "rb");		/*Flawfinder: ignore*/
+ 	if (!file)
+ 	{
+ 		llwarns << "Error opening " << filename << llendl;
+ 		return false;
+ 	}
+
+ 	// read in the whole file
+	fseek(file, 0L, SEEK_END);
+	size_t file_length = (size_t) ftell(file);
+	fseek(file, 0L, SEEK_SET);
+	char* buffer = new char[file_length+1];
+	size_t nread = fread(buffer, 1, file_length, file);
+	if (nread < file_length)
+	{
+		llwarns << "Short read" << llendl;
+	}
+	buffer[nread] = '\0';
+	fclose(file);
+	mScriptEd->mEditor->setText(LLStringExplicit(buffer));
+	//mScriptEd->mEditor->makePristine();
+	delete[] buffer;
+
+	return true;
+ }
 
 void LLLiveLSLEditor::loadScriptText(LLVFS *vfs, const LLUUID &uuid, LLAssetType::EType type)
 {
@@ -1825,9 +1890,8 @@ LLLiveLSLSaveData::LLLiveLSLSaveData(const LLUUID& id,
 	mItem = new LLViewerInventoryItem(item);
 }
 
-void LLLiveLSLEditor::saveIfNeeded()
+void LLLiveLSLEditor::saveIfNeeded(bool sync)
 {
-	llinfos << "LLLiveLSLEditor::saveIfNeeded()" << llendl;
 	LLViewerObject* object = gObjectList.findObject(mObjectUUID);
 	if(!object)
 	{
@@ -1877,9 +1941,74 @@ void LLLiveLSLEditor::saveIfNeeded()
 	mItem->setAssetUUID(asset_id);
 	mItem->setTransactionID(tid);
 
-	// write out the data, and store it in the asset database
+	writeToFile(filename);
+
+	if (sync)
+	{
+		// Sync with external ed2itor.
+		std::string tmp_file = getTmpFileName();
+		llstat s;
+		if (LLFile::stat(tmp_file, &s) == 0) // file exists
+		{
+			if (mLiveFile) mLiveFile->ignoreNextUpdate();
+			writeToFile(tmp_file);
+		}
+	}
+	
+	// save it out to asset server
+	std::string url = object->getRegion()->getCapability("UpdateScriptTask");
+	getWindow()->incBusyCount();
+	mPendingUploads++;
+	BOOL is_running = getChild<LLCheckBoxCtrl>( "running")->get();
+	if (!url.empty())
+	{
+		uploadAssetViaCaps(url, filename, mObjectUUID, mItemUUID, is_running);
+	}
+	else if (gAssetStorage)
+	{
+		uploadAssetLegacy(filename, object, tid, is_running);
+	}
+}
+
+void LLLiveLSLEditor::openExternalEditor()
+{
+	LLViewerObject* object = gObjectList.findObject(mObjectUUID);
+	if(!object)
+	{
+		LLNotificationsUtil::add("SaveScriptFailObjectNotFound");
+		return;
+	}
+
+	delete mLiveFile; // deletes file
+
+	// Save the script to a temporary file.
+	std::string filename = getTmpFileName();
+	writeToFile(filename);
+
+	// Start watching file changes.
+	mLiveFile = new LLLiveLSLFile(filename, this);
+	mLiveFile->addToEventTimer();
+
+	// Open it in external editor.
+	{
+		LLExternalEditor ed;
+
+		if (!ed.setCommand("LL_SCRIPT_EDITOR"))
+		{
+			std::string msg = "Select an editor by setting the environment variable LL_SCRIPT_EDITOR "
+				"or the ExternalEditor setting"; // *TODO: localize
+			LLNotificationsUtil::add("GenericAlert", LLSD().with("MESSAGE", msg));
+			return;
+		}
+
+		ed.run(filename);
+	}
+}
+
+bool LLLiveLSLEditor::writeToFile(const std::string& filename)
+{
 	LLFILE* fp = LLFile::fopen(filename, "wb");
-	if(!fp)
+	if (!fp)
 	{
 		llwarns << "Unable to write to " << filename << llendl;
 
@@ -1887,33 +2016,25 @@ void LLLiveLSLEditor::saveIfNeeded()
 		row["columns"][0]["value"] = "Error writing to local file. Is your hard drive full?";
 		row["columns"][0]["font"] = "SANSSERIF_SMALL";
 		mScriptEd->mErrorList->addElement(row);
-		return;
+		return false;
 	}
+
 	std::string utf8text = mScriptEd->mEditor->getText();
 
 	// Special case for a completely empty script - stuff in one space so it can store properly.  See SL-46889
-	if ( utf8text.size() == 0 )
+	if (utf8text.size() == 0)
 	{
 		utf8text = " ";
 	}
 
 	fputs(utf8text.c_str(), fp);
 	fclose(fp);
-	fp = NULL;
-	
-	// save it out to asset server
-	std::string url = object->getRegion()->getCapability("UpdateScriptTask");
-	getWindow()->incBusyCount();
-	mPendingUploads++;
-	BOOL is_running = getChild<LLCheckBoxCtrl>( "running")->get();
-	if (!url.empty())
-	{
-		uploadAssetViaCaps(url, filename, mObjectUUID, mItemUUID, is_running);
-	}
-	else if (gAssetStorage)
-	{
-		uploadAssetLegacy(filename, object, tid, is_running);
-	}
+	return true;
+}
+
+std::string LLLiveLSLEditor::getTmpFileName()
+{
+	return std::string(LLFile::tmpdir()) + "sl_script_" + mObjectUUID.asString() + ".lsl";
 }
 
 void LLLiveLSLEditor::uploadAssetViaCaps(const std::string& url,
@@ -2138,6 +2259,14 @@ void LLLiveLSLEditor::onSave(void* userdata, BOOL close_after_save)
 	self->saveIfNeeded();
 }
 
+
+// static
+void LLLiveLSLEditor::onEdit(void* userdata)
+{
+	LLLiveLSLEditor* self = (LLLiveLSLEditor*)userdata;
+	self->openExternalEditor();
+}
+
 // static
 void LLLiveLSLEditor::processScriptRunningReply(LLMessageSystem* msg, void**)
 {
diff --git a/indra/newview/llpreviewscript.h b/indra/newview/llpreviewscript.h
index f4b31e5962..d35c6b8528 100644
--- a/indra/newview/llpreviewscript.h
+++ b/indra/newview/llpreviewscript.h
@@ -35,6 +35,7 @@
 #include "lliconctrl.h"
 #include "llframetimer.h"
 
+class LLLiveLSLFile;
 class LLMessageSystem;
 class LLTextEditor;
 class LLButton;
@@ -62,6 +63,7 @@ public:
 		const LLHandle<LLFloater>& floater_handle,
 		void (*load_callback)(void* userdata),
 		void (*save_callback)(void* userdata, BOOL close_after_save),
+		void (*edit_callback)(void*),
 		void (*search_replace_callback)(void* userdata),
 		void* userdata,
 		S32 bottom_pad = 0);	// pad below bottom row of buttons
@@ -80,6 +82,8 @@ public:
 	bool			handleSaveChangesDialog(const LLSD& notification, const LLSD& response);
 	bool			handleReloadFromServerDialog(const LLSD& notification, const LLSD& response);
 
+	void			onEditButtonClick();
+
 	static void		onCheckLock(LLUICtrl*, void*);
 	static void		onHelpComboCommit(LLUICtrl* ctrl, void* userdata);
 	static void		onClickBack(void* userdata);
@@ -114,6 +118,7 @@ private:
 	LLTextEditor*	mEditor;
 	void			(*mLoadCallback)(void* userdata);
 	void			(*mSaveCallback)(void* userdata, BOOL close_after_save);
+	void			(*mEditCallback)(void* userdata);
 	void			(*mSearchReplaceCallback) (void* userdata);
 	void*			mUserdata;
 	LLComboBox		*mFunctions;
@@ -179,6 +184,7 @@ protected:
 // Used to view and edit an LSL that is attached to an object.
 class LLLiveLSLEditor : public LLPreview
 {
+	friend class LLLiveLSLFile;
 public: 
 	LLLiveLSLEditor(const LLSD& key);
 	~LLLiveLSLEditor();
@@ -202,7 +208,10 @@ private:
 
 	virtual void loadAsset();
 	void loadAsset(BOOL is_new);
-	void saveIfNeeded();
+	void saveIfNeeded(bool sync = true);
+	void openExternalEditor();
+	std::string getTmpFileName();
+	bool writeToFile(const std::string& filename);
 	void uploadAssetViaCaps(const std::string& url,
 							const std::string& filename, 
 							const LLUUID& task_id,
@@ -218,6 +227,7 @@ private:
 	static void onSearchReplace(void* userdata);
 	static void onLoad(void* userdata);
 	static void onSave(void* userdata, BOOL close_after_save);
+	static void onEdit(void* userdata);
 
 	static void onLoadComplete(LLVFS *vfs, const LLUUID& asset_uuid,
 							   LLAssetType::EType type,
@@ -227,7 +237,7 @@ private:
 	static void onRunningCheckboxClicked(LLUICtrl*, void* userdata);
 	static void onReset(void* userdata);
 
-// 	void loadScriptText(const std::string& filename); // unused
+ 	bool loadScriptText(const std::string& filename);
 	void loadScriptText(LLVFS *vfs, const LLUUID &uuid, LLAssetType::EType type);
 
 	static void onErrorList(LLUICtrl*, void* user_data);
@@ -253,6 +263,7 @@ private:
 	
 	LLCheckBoxCtrl*	mMonoCheckbox;
 	BOOL mIsModifiable;
+	LLLiveLSLFile*		mLiveFile;
 };
 
 #endif  // LL_LLPREVIEWSCRIPT_H
diff --git a/indra/newview/skins/default/xui/en/panel_script_ed.xml b/indra/newview/skins/default/xui/en/panel_script_ed.xml
index 1e332a40c2..a041c9b229 100644
--- a/indra/newview/skins/default/xui/en/panel_script_ed.xml
+++ b/indra/newview/skins/default/xui/en/panel_script_ed.xml
@@ -179,4 +179,13 @@
      right="487"
      name="Save_btn"
      width="81" />
+    <button
+     follows="right|bottom"
+     height="23"
+     label="Edit..."
+     layout="topleft"
+     top_pad="-23"
+     right="400"
+     name="Edit_btn"
+     width="81" />
 </panel>
-- 
cgit v1.2.3


From e8e1d7e629b9a4a65cde766ed81334140a749428 Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Mon, 15 Nov 2010 21:38:12 +0200
Subject: STORM-318 FIXED The Advanced menu shortcut was broken under Linux.

Reason: The old shortcut (Ctrl+Alt+D) was eaten by some window managers.

Changes:
- Changed the shortcut to Ctrl+Alt+Shift+D.
- Moved the appropriate menu item from "Advanced > Shortcuts" to "World > Show"
  (so that it's not in the menu it triggers) and made it visible.
  The old shortcut is still available but marked as legacy.

Submitting on behalf of Boroondas Gupte.
---
 indra/newview/skins/default/xui/en/menu_viewer.xml | 42 ++++++++++++----------
 1 file changed, 24 insertions(+), 18 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index b36cf13f1b..796b15551a 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -359,6 +359,18 @@
             <menu_item_check.on_check
                control="NavBarShowParcelProperties" />
           </menu_item_check>
+          <menu_item_separator />
+          <menu_item_check
+             label="Advanced Menu"
+             name="Show Advanced Menu"
+             shortcut="control|alt|shift|D">
+            <on_check
+               function="CheckControl"
+               parameter="UseDebugMenus" />
+            <on_click
+               function="ToggleControl"
+               parameter="UseDebugMenus" />
+          </menu_item_check>
         </menu>
 
         <menu_item_separator/>
@@ -1526,6 +1538,18 @@
                 <menu_item_call.on_click
                  function="View.DefaultUISize" />
             </menu_item_call>
+            <!-- This second, alternative shortcut for Show Advanced Menu is for backward compatibility.  The main shortcut has been changed so it's Linux-friendly, where the old shortcut is typically eaten by the window manager. -->
+            <menu_item_check
+               label="Show Advanced Menu - legacy shortcut"
+               name="Show Advanced Menu - legacy shortcut"
+               shortcut="control|alt|D">
+              <on_check
+                 function="CheckControl"
+                 parameter="UseDebugMenus" />
+              <on_click
+                 function="ToggleControl"
+                 parameter="UseDebugMenus" />
+            </menu_item_check>
 
             <menu_item_separator/>
 
@@ -1693,23 +1717,6 @@
                 <menu_item_call.on_click
                  function="View.ZoomOut" />
             </menu_item_call>
-            <menu_item_separator
-             visible="false"/>
-            <!-- Made invisible to avoid a dissonance: menu item toggles the menu where it is located. EXT-8069.
-              Can't be removed, to keep shortcut workable.
-            -->
-            <menu_item_check
-             label="Show Advanced Menu"
-             name="Show Advanced Menu"
-             shortcut="control|alt|D"
-             visible="false">
-                <on_check
-                 function="CheckControl"
-                 parameter="UseDebugMenus" />
-                <on_click
-                 function="ToggleControl"
-                 parameter="UseDebugMenus" />
-        </menu_item_check>
         </menu> <!--Shortcuts-->
 
         <menu_item_separator/>
@@ -1732,7 +1739,6 @@
              function="ToggleControl"
              parameter="QAMode" />
         </menu_item_check>
-    
     </menu>
     <menu
      create_jump_keys="true"
-- 
cgit v1.2.3


From 128ec0ceaa6efdf24f05c51075853584c3d5acbc Mon Sep 17 00:00:00 2001
From: Seth ProductEngine <slitovchuk@productengine.com>
Date: Mon, 15 Nov 2010 23:01:17 +0200
Subject: STORM-580 FIXED Removed "IM" font color setting as unused.

---
 indra/newview/llimfloater.cpp                      |  2 --
 indra/newview/skins/default/colors.xml             |  3 --
 .../default/xui/en/panel_preferences_colors.xml    | 41 +++-------------------
 3 files changed, 5 insertions(+), 41 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp
index e000abda2a..bdc0dfa7e2 100644
--- a/indra/newview/llimfloater.cpp
+++ b/indra/newview/llimfloater.cpp
@@ -680,8 +680,6 @@ void LLIMFloater::updateMessages()
 
 	if (messages.size())
 	{
-//		LLUIColor chat_color = LLUIColorTable::instance().getColor("IMChatColor");
-
 		LLSD chat_args;
 		chat_args["use_plain_text_chat_history"] = use_plain_text_chat_history;
 
diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml
index f8660419b4..aeea2306f7 100644
--- a/indra/newview/skins/default/colors.xml
+++ b/indra/newview/skins/default/colors.xml
@@ -399,9 +399,6 @@
     <color
      name="HighlightParentColor"
      value="0.67 0.83 0.96 1" />
-    <color
-     name="IMChatColor"
-     reference="LtGray" />
     <color
      name="IMHistoryBgColor"
      reference="Unused?" />
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_colors.xml b/indra/newview/skins/default/xui/en/panel_preferences_colors.xml
index 036730a646..c867afe778 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_colors.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_colors.xml
@@ -113,22 +113,22 @@
   </text>
   <color_swatch
    can_apply_immediately="true"
-   color="LtGray"
+   color="EmphasisColor_35"
    follows="left|top"
    height="24"
    label_height="0"
    label_width="60"
    layout="topleft"
    left="360"
-   name="im"
+   name="objects"
    top_pad="-15"
    width="44">
     <color_swatch.init_callback
 		 function="Pref.getUIColor"
-		 parameter="IMChatColor" />
+		 parameter="ObjectChatColor" />
     <color_swatch.commit_callback
 		 function="Pref.applyUIColor"
-		 parameter="IMChatColor" />
+		 parameter="ObjectChatColor" />
   </color_swatch>
   <text
      type="string"
@@ -141,7 +141,7 @@
      name="text_box3"
      top_delta="5"
      width="95">
-    IM
+    Objects
   </text>
   <color_swatch
    can_apply_immediately="true"
@@ -206,37 +206,6 @@
    width="95">
     Errors
   </text>
-  <color_swatch
-   can_apply_immediately="true"
-   color="EmphasisColor_35"
-   follows="left|top"
-   height="24"
-   label_height="0"
-   layout="topleft"
-   left="360"
-   name="objects"
-   top_pad="-15"
-   width="44" >
-    <color_swatch.init_callback
-		 function="Pref.getUIColor"
-		 parameter="ObjectChatColor" />
-    <color_swatch.commit_callback
-		 function="Pref.applyUIColor"
-		 parameter="ObjectChatColor" />
-  </color_swatch>
-  <text
-   type="string"
-   length="1"
-   follows="left|top"
-   height="10"
-   layout="topleft"
-   left_pad="5"
-   mouse_opaque="false"
-   name="text_box6"
-   top_delta="5"
-   width="95">
-    Objects
-  </text>
   <color_swatch
    can_apply_immediately="true"
    color="LtYellow"
-- 
cgit v1.2.3


From 10998b137ea919e6da05abcc7ad7ea528ad267af Mon Sep 17 00:00:00 2001
From: Wolfpup Lowenhar <wolfpup67@earthlink.net>
Date: Tue, 16 Nov 2010 13:33:56 -0500
Subject: STORM-535 : STORM-544 : Addition of Floater Opacity controls to
 pannel_prefferences_color.xml  after loss during cleanup of preferences.

---
 .../default/xui/en/panel_preferences_colors.xml    | 57 ++++++++++++++++++++--
 1 file changed, 52 insertions(+), 5 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_preferences_colors.xml b/indra/newview/skins/default/xui/en/panel_preferences_colors.xml
index 036730a646..f3a5409e41 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_colors.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_colors.xml
@@ -305,7 +305,7 @@
    left="30"
    height="12"
    name="bubble_chat"
-   top_pad="28"
+   top_pad="20"
    width="120"
    >
     Bubble chat:
@@ -336,11 +336,58 @@
    height="16"
    increment="0.05"
    initial_value="1"
-   label="Opacity"
+   label="Opacity:"
    layout="topleft"
-   left_pad="15"
-   label_width="56"
+   left_pad="10"
+   label_width="70"
    name="bubble_chat_opacity"
    top_delta = "6"
-   width="347" />
+   width="378" />
+  <text
+   follows="left|top"
+   layout="topleft"
+   left="30"
+   height="12"
+   name="bubble_chat"
+   top_pad="15"
+   width="120"
+   >
+    Floater Opacity:
+  </text>
+ <slider
+   can_edit_text="false"
+   control_name="ActiveFloaterTransparency"
+   decimal_digits="2"
+   follows="left|top"
+   height="16"
+   increment="0.01"
+   initial_value="0.8"
+   layout="topleft"
+   label_width="115"
+   label="Active :"
+   left="50"
+   max_val="1.00"
+   min_val="0.00"
+   name="active"
+   show_text="true"
+   top_pad="5"
+   width="415" />
+  <slider
+   can_edit_text="false"
+   control_name="InactiveFloaterTransparency"
+   decimal_digits="2"
+   follows="left|top"
+   height="16"
+   increment="0.01"
+   initial_value="0.5"
+   layout="topleft"
+   label_width="115"
+   label="Inctive :"
+   left="50"
+   max_val="1.00"
+   min_val="0.00"
+   name="active"
+   show_text="true"
+   top_pad="5"
+   width="415" />
 </panel>
-- 
cgit v1.2.3


From d0de833d947b219eabae01abbb5750ad05e5e305 Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Tue, 16 Nov 2010 23:26:08 +0200
Subject: STORM-563 FIXED Updated all localized XUI strings and notifications
 templates to use display names.

Previously name substitutions were broken, so "[FIRST] [LAST]" was displayed instead of avatar name.
Some of the affected notifications:
* avatar went online/offline notification
* object return notification
* calling card offer
* script dialog
* auto-unmute notification.
See the diff for more details.

The fixes apply to all locales but English (which is already correct).

Besides, I fixed calling card offer notification to display avatar name correctly. It was broken even in English.
---
 indra/newview/llviewermessage.cpp                  |  1 +
 .../newview/skins/default/xui/da/floater_bumps.xml | 10 ++---
 indra/newview/skins/default/xui/da/floater_pay.xml |  2 +-
 .../skins/default/xui/da/floater_pay_object.xml    |  2 +-
 .../newview/skins/default/xui/da/notifications.xml | 19 ++++-----
 indra/newview/skins/default/xui/da/strings.xml     |  2 +-
 .../newview/skins/default/xui/de/notifications.xml |  2 +-
 .../skins/default/xui/de/panel_edit_profile.xml    |  2 +-
 .../newview/skins/default/xui/en/notifications.xml |  2 +-
 indra/newview/skins/default/xui/es/floater_im.xml  | 45 ----------------------
 .../newview/skins/default/xui/es/notifications.xml |  2 +-
 .../newview/skins/default/xui/fr/notifications.xml |  2 +-
 .../skins/default/xui/fr/panel_edit_profile.xml    |  2 +-
 .../newview/skins/default/xui/it/floater_bumps.xml | 10 ++---
 indra/newview/skins/default/xui/it/floater_pay.xml |  2 +-
 .../skins/default/xui/it/floater_pay_object.xml    |  2 +-
 .../newview/skins/default/xui/it/notifications.xml | 19 ++++-----
 indra/newview/skins/default/xui/it/strings.xml     |  2 +-
 .../newview/skins/default/xui/ja/floater_bumps.xml | 10 ++---
 indra/newview/skins/default/xui/ja/floater_pay.xml |  2 +-
 .../skins/default/xui/ja/floater_pay_object.xml    |  2 +-
 .../newview/skins/default/xui/ja/notifications.xml | 19 ++++-----
 .../skins/default/xui/ja/panel_edit_profile.xml    |  2 +-
 indra/newview/skins/default/xui/ja/strings.xml     |  2 +-
 .../newview/skins/default/xui/nl/floater_bumps.xml | 10 ++---
 indra/newview/skins/default/xui/nl/floater_pay.xml |  2 +-
 .../skins/default/xui/nl/floater_pay_object.xml    |  2 +-
 .../newview/skins/default/xui/nl/notifications.xml |  5 +--
 .../skins/default/xui/nl/panel_edit_profile.xml    |  2 +-
 indra/newview/skins/default/xui/nl/strings.xml     |  2 +-
 .../newview/skins/default/xui/pl/notifications.xml |  2 +-
 .../skins/default/xui/pl/panel_edit_profile.xml    |  2 +-
 indra/newview/skins/default/xui/pt/floater_im.xml  | 45 ----------------------
 .../newview/skins/default/xui/pt/notifications.xml |  8 ++--
 34 files changed, 72 insertions(+), 173 deletions(-)
 delete mode 100644 indra/newview/skins/default/xui/es/floater_im.xml
 delete mode 100644 indra/newview/skins/default/xui/pt/floater_im.xml

(limited to 'indra/newview')

diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 7c0fc681a4..1f54940b25 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -3031,6 +3031,7 @@ void process_offer_callingcard(LLMessageSystem* msg, void**)
 		}
 		else
 		{
+			args["NAME"] = source_name;
 			LLNotificationsUtil::add("OfferCallingCard", args, payload);
 		}
 	}
diff --git a/indra/newview/skins/default/xui/da/floater_bumps.xml b/indra/newview/skins/default/xui/da/floater_bumps.xml
index d22de6e7f1..1db2e93fd2 100644
--- a/indra/newview/skins/default/xui/da/floater_bumps.xml
+++ b/indra/newview/skins/default/xui/da/floater_bumps.xml
@@ -4,19 +4,19 @@
 		Ingen registreret
 	</floater.string>
 	<floater.string name="bump">
-		[TIME]  [FIRST] [LAST] ramte dig
+		[TIME]  [NAME] ramte dig
 	</floater.string>
 	<floater.string name="llpushobject">
-		[TIME]  [FIRST] [LAST] skubbede dig med et script
+		[TIME]  [NAME] skubbede dig med et script
 	</floater.string>
 	<floater.string name="selected_object_collide">
-		[TIME]  [FIRST] [LAST] ramte dig med et objekt
+		[TIME]  [NAME] ramte dig med et objekt
 	</floater.string>
 	<floater.string name="scripted_object_collide">
-		[TIME]  [FIRST] [LAST] ramte dig med et scriptet objekt
+		[TIME]  [NAME] ramte dig med et scriptet objekt
 	</floater.string>
 	<floater.string name="physical_object_collide">
-		[TIME]  [FIRST] [LAST] ramte dig med et fysisk objekt
+		[TIME]  [NAME] ramte dig med et fysisk objekt
 	</floater.string>
 	<floater.string name="timeStr">
 		[[hour,datetime,slt]:[min,datetime,slt]]
diff --git a/indra/newview/skins/default/xui/da/floater_pay.xml b/indra/newview/skins/default/xui/da/floater_pay.xml
index b2cdc0bfe7..5ebdd3f084 100644
--- a/indra/newview/skins/default/xui/da/floater_pay.xml
+++ b/indra/newview/skins/default/xui/da/floater_pay.xml
@@ -11,7 +11,7 @@
 	</text>
 	<icon name="icon_person" tool_tip="Person"/>
 	<text name="payee_name">
-		[FIRST] [LAST]
+		Test Name That Is Extremely Long To Check Clipping
 	</text>
 	<button label="L$1" label_selected="L$1" name="fastpay 1"/>
 	<button label="L$5" label_selected="L$5" name="fastpay 5"/>
diff --git a/indra/newview/skins/default/xui/da/floater_pay_object.xml b/indra/newview/skins/default/xui/da/floater_pay_object.xml
index 368d678681..260b257c33 100644
--- a/indra/newview/skins/default/xui/da/floater_pay_object.xml
+++ b/indra/newview/skins/default/xui/da/floater_pay_object.xml
@@ -8,7 +8,7 @@
 	</string>
 	<icon name="icon_person" tool_tip="Person"/>
 	<text name="payee_name">
-		[FIRST] [LAST]
+		Ericacita Moostopolison
 	</text>
 	<text name="object_name_label">
 		Via objekt:
diff --git a/indra/newview/skins/default/xui/da/notifications.xml b/indra/newview/skins/default/xui/da/notifications.xml
index 917b7cc21e..a8849861cf 100644
--- a/indra/newview/skins/default/xui/da/notifications.xml
+++ b/indra/newview/skins/default/xui/da/notifications.xml
@@ -931,10 +931,10 @@ Henvis til dette fra en hjemmeside for at give andre nem adgang til denne lokati
 		Erstattet manglende tøj/kropsdele med standard.
 	</notification>
 	<notification name="FriendOnline">
-		[FIRST] [LAST] er Online
+		[NAME] er Online
 	</notification>
 	<notification name="FriendOffline">
-		[FIRST] [LAST] er Offline
+		[NAME] er Offline
 	</notification>
 	<notification name="AddSelfFriend">
 		Selvom du nok er meget sød, kan du ikke tilføje dig selv som ven.
@@ -1002,9 +1002,6 @@ Prøv venligst igen.
 	<notification name="CannotRemoveProtectedCategories">
 		Du kan ikke fjerne beskyttede kategorier.
 	</notification>
-	<notification name="OfferedCard">
-		Du har tilbudt et visitkort til [FIRST] [LAST]
-	</notification>
 	<notification name="UnableToBuyWhileDownloading">
 		Ikke muligt at købe, imens genstandens data hentes.
 Prøv venligst igen.
@@ -1120,7 +1117,7 @@ Prøv venligst at geninstallere plugin eller kontakt leverandøren hvis probleme
 		De genstande du ejer på det valgte stykke land er blevet returneret til din beholdning.
 	</notification>
 	<notification name="OtherObjectsReturned">
-		Genstandene på det valgte stykke land der er ejet af [FIRST] [LAST] er blevet returneret til hans eller hendes beholdning.
+		Genstandene på det valgte stykke land der er ejet af [NAME] er blevet returneret til hans eller hendes beholdning.
 	</notification>
 	<notification name="OtherObjectsReturned2">
 		Objekterne i den valgte parcel, ejet af beboeren &apos;[NAME]&apos;, er blevet returneret til deres ejer.
@@ -1321,7 +1318,7 @@ Prøv igen om lidt.
 		Tilbud om venskab afvist.
 	</notification>
 	<notification name="OfferCallingCard">
-		[FIRST] [LAST] tilbyder dig et visitkort.
+		[NAME] tilbyder dig et visitkort.
 Dette vil lave et bogmørke i din beholding, så du hurtigt kan sende en IM til denne beboer.
 		<form name="form">
 			<button name="Accept" text="Acceptér"/>
@@ -1380,7 +1377,7 @@ Tillad denne anmodning?
 		</form>
 	</notification>
 	<notification name="ScriptDialog">
-		[FIRST] [LAST]&apos;s &apos;[TITLE]&apos;
+		[NAME]&apos;s &apos;&lt;nolink&gt;[TITLE]&lt;/nolink&gt;&apos;
 [MESSAGE]
 		<form name="form">
 			<button name="Ignore" text="Ignorér"/>
@@ -1424,13 +1421,13 @@ Klik på Acceptér for at deltage eller Afvis for at afvise invitationen. Klik p
 		</form>
 	</notification>
 	<notification name="AutoUnmuteByIM">
-		[FIRST] [LAST] fik tilsendt en personlig besked og er dermed automatisk ikke mere blokeret.
+		[NAME] fik tilsendt en personlig besked og er dermed automatisk ikke mere blokeret.
 	</notification>
 	<notification name="AutoUnmuteByMoney">
-		[FIRST] [LAST] blev givet penge og er dermed automatisk ikke mere blokeret.
+		[NAME] blev givet penge og er dermed automatisk ikke mere blokeret.
 	</notification>
 	<notification name="AutoUnmuteByInventory">
-		[FIRST] [LAST] blev tilbudt en genstand og er dermed automatisk ikke mere blokeret.
+		[NAME] blev tilbudt en genstand og er dermed automatisk ikke mere blokeret.
 	</notification>
 	<notification name="VoiceInviteGroup">
 		[NAME] har has sluttet sig til stemme-chaten i gruppen [GROUP].
diff --git a/indra/newview/skins/default/xui/da/strings.xml b/indra/newview/skins/default/xui/da/strings.xml
index afd933c7fa..1c583f2e95 100644
--- a/indra/newview/skins/default/xui/da/strings.xml
+++ b/indra/newview/skins/default/xui/da/strings.xml
@@ -3469,7 +3469,7 @@ Hvis du bliver ved med at modtage denne besked, kontakt venligst [SUPPORT_SITE].
 		Du er den eneste deltager i denne samtale
 	</string>
 	<string name="offline_message">
-		[FIRST] [LAST] er ikke logget på.
+		[NAME] er ikke logget på.
 	</string>
 	<string name="invite_message">
 		Tryk på [BUTTON NAME] knappen for at acceptére/tilslutte til denne stemme chat.
diff --git a/indra/newview/skins/default/xui/de/notifications.xml b/indra/newview/skins/default/xui/de/notifications.xml
index c2ca0c2fb0..a904604b62 100644
--- a/indra/newview/skins/default/xui/de/notifications.xml
+++ b/indra/newview/skins/default/xui/de/notifications.xml
@@ -2481,7 +2481,7 @@ Versuchen Sie es in einigen Minuten erneut.
 		Ihr Freundschaftsangebot wurde abgelehnt.
 	</notification>
 	<notification name="OfferCallingCard">
-		[FIRST] [LAST] bietet Ihnen ihre/seine Visitenkarte an.
+		[NAME] bietet Ihnen ihre/seine Visitenkarte an.
 Ihrem Inventar wird ein Lesezeichen erstellt, damit Sie diesem Einwohner einfach eine IM schicken können.
 		<form name="form">
 			<button name="Accept" text="Akzeptieren"/>
diff --git a/indra/newview/skins/default/xui/de/panel_edit_profile.xml b/indra/newview/skins/default/xui/de/panel_edit_profile.xml
index 7f6054dd60..be124050e8 100644
--- a/indra/newview/skins/default/xui/de/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/de/panel_edit_profile.xml
@@ -54,7 +54,7 @@
 				<text name="my_account_link" value="[[URL] Meine Startseite aufrufen]"/>
 				<text name="title_partner_text" value="Mein Partner:"/>
 				<panel name="partner_data_panel">
-					<text initial_value="(wird in Datenbank gesucht)" name="partner_text" value="[FIRST] [LAST]"/>
+					<text initial_value="(wird in Datenbank gesucht)" name="partner_text"/>
 				</panel>
 				<text name="partner_edit_link" value="[[URL] bearbeiten]"/>
 			</panel>
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index a0fd0a13cc..1247e4724e 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -5539,7 +5539,7 @@ Friendship offer declined.
    name="OfferCallingCard"
    persist="true"
    type="notify">
-[FIRST] [LAST] is offering their calling card.
+[NAME] is offering their calling card.
 This will add a bookmark in your inventory so you can quickly IM this Resident.
     <form name="form">
       <button
diff --git a/indra/newview/skins/default/xui/es/floater_im.xml b/indra/newview/skins/default/xui/es/floater_im.xml
deleted file mode 100644
index 3850b94fd6..0000000000
--- a/indra/newview/skins/default/xui/es/floater_im.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<multi_floater name="im_floater" title="Mensaje Instantáneo">
-	<string name="only_user_message">
-		Eres el único Residente en esta sesión.
-	</string>
-	<string name="offline_message">
-		[FIRST] [LAST] no está conectado.
-	</string>
-	<string name="invite_message">
-		Pulse el botón [BUTTON NAME] para aceptar/conectar este chat de voz.
-	</string>
-	<string name="muted_message">
-		Has ignorado a este Residente. Enviándole un mensaje, automáticamente dejarás de ignorarle.
-	</string>
-	<string name="generic_request_error">
-		Error al hacer lo solicitado; por favor, inténtelo más tarde.
-	</string>
-	<string name="insufficient_perms_error">
-		Usted no tiene permisos suficientes.
-	</string>
-	<string name="session_does_not_exist_error">
-		La sesión ya acabó
-	</string>
-	<string name="no_ability_error">
-		Usted no tiene esa capacidad.
-	</string>
-	<string name="not_a_mod_error">
-		Usted no es un moderador de la sesión.
-	</string>
-	<string name="muted_error">
-		Un moderador del grupo le ha desactivado el chat de texto.
-	</string>
-	<string name="add_session_event">
-		No es posible añadir Residentes a la sesión de chat con [RECIPIENT].
-	</string>
-	<string name="message_session_event">
-		No se ha podido enviar su mensaje a la sesión de chat con [RECIPIENT].
-	</string>
-	<string name="removed_from_group">
-		Ha sido eliminado del grupo.
-	</string>
-	<string name="close_on_no_ability">
-		Usted ya no tendrá más la capacidad de estar en la sesión de chat.
-	</string>
-</multi_floater>
diff --git a/indra/newview/skins/default/xui/es/notifications.xml b/indra/newview/skins/default/xui/es/notifications.xml
index 286af718e3..6c5fe6a9eb 100644
--- a/indra/newview/skins/default/xui/es/notifications.xml
+++ b/indra/newview/skins/default/xui/es/notifications.xml
@@ -2469,7 +2469,7 @@ Por favor, vuelve a intentarlo en unos momentos.
 		Rehusado el ofrecimiento de amistad.
 	</notification>
 	<notification name="OfferCallingCard">
-		[FIRST] [LAST] te está ofreciendo su tarjeta de visita.
+		[NAME] te está ofreciendo su tarjeta de visita.
 Esto añadirá un marcador en tu inventario para que puedas enviarle rápidamente un MI.
 		<form name="form">
 			<button name="Accept" text="Aceptar"/>
diff --git a/indra/newview/skins/default/xui/fr/notifications.xml b/indra/newview/skins/default/xui/fr/notifications.xml
index 89fd9c6fdc..341cc9830d 100644
--- a/indra/newview/skins/default/xui/fr/notifications.xml
+++ b/indra/newview/skins/default/xui/fr/notifications.xml
@@ -2464,7 +2464,7 @@ Veuillez réessayer dans quelques minutes.
 		Amitié refusée.
 	</notification>
 	<notification name="OfferCallingCard">
-		[FIRST] [LAST] vous offre sa carte de visite.
+		[NAME] vous offre sa carte de visite.
 Cela ajoute un marque-page dans votre inventaire, ce qui vous permet d&apos;envoyer rapidement un IM à ce résident.
 		<form name="form">
 			<button name="Accept" text="Accepter"/>
diff --git a/indra/newview/skins/default/xui/fr/panel_edit_profile.xml b/indra/newview/skins/default/xui/fr/panel_edit_profile.xml
index 30799caf1f..ef65d2fe24 100644
--- a/indra/newview/skins/default/xui/fr/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/fr/panel_edit_profile.xml
@@ -54,7 +54,7 @@
 				<text name="my_account_link" value="[[URL] Accéder à ma Page d&apos;accueil]"/>
 				<text name="title_partner_text" value="Mon partenaire :"/>
 				<panel name="partner_data_panel">
-					<text initial_value="(récupération en cours)" name="partner_text" value="[FIRST] [LAST]"/>
+					<text initial_value="(récupération en cours)" name="partner_text"/>
 				</panel>
 				<text name="partner_edit_link" value="[[URL] Modifier]"/>
 			</panel>
diff --git a/indra/newview/skins/default/xui/it/floater_bumps.xml b/indra/newview/skins/default/xui/it/floater_bumps.xml
index d9dd3f26d7..6de2fea67f 100644
--- a/indra/newview/skins/default/xui/it/floater_bumps.xml
+++ b/indra/newview/skins/default/xui/it/floater_bumps.xml
@@ -4,19 +4,19 @@
 		Nessuno rilevato
 	</floater.string>
 	<floater.string name="bump">
-		[TIME]  [FIRST] [LAST] ti ha urtato
+		[TIME]  [NAME] ti ha urtato
 	</floater.string>
 	<floater.string name="llpushobject">
-		[TIME]  [FIRST] [LAST] ti ha spinto per mezzo di uno script
+		[TIME]  [NAME] ti ha spinto per mezzo di uno script
 	</floater.string>
 	<floater.string name="selected_object_collide">
-		[TIME]  [FIRST] [LAST] ti ha colpito con un oggetto
+		[TIME]  [NAME] ti ha colpito con un oggetto
 	</floater.string>
 	<floater.string name="scripted_object_collide">
-		[TIME]  [FIRST] [LAST] ti ha colpito con un oggetto scriptato
+		[TIME]  [NAME] ti ha colpito con un oggetto scriptato
 	</floater.string>
 	<floater.string name="physical_object_collide">
-		[TIME]  [FIRST] [LAST] ti ha colpito con un oggetto fisico
+		[TIME]  [NAME] ti ha colpito con un oggetto fisico
 	</floater.string>
 	<floater.string name="timeStr">
 		[[hour,datetime,slt]:[min,datetime,slt]]
diff --git a/indra/newview/skins/default/xui/it/floater_pay.xml b/indra/newview/skins/default/xui/it/floater_pay.xml
index c1ea8ec9c8..6389cbfbf7 100644
--- a/indra/newview/skins/default/xui/it/floater_pay.xml
+++ b/indra/newview/skins/default/xui/it/floater_pay.xml
@@ -11,7 +11,7 @@
 	</text>
 	<icon name="icon_person" tool_tip="Persona"/>
 	<text left="115" name="payee_name">
-		[FIRST] [LAST]
+		Test Name That Is Extremely Long To Check Clipping
 	</text>
 	<button label="1 L$" label_selected="1 L$" left="118" name="fastpay 1" width="80"/>
 	<button label="5 L$" label_selected="5 L$" left="210" name="fastpay 5"/>
diff --git a/indra/newview/skins/default/xui/it/floater_pay_object.xml b/indra/newview/skins/default/xui/it/floater_pay_object.xml
index 37f549b5da..8805f3208e 100644
--- a/indra/newview/skins/default/xui/it/floater_pay_object.xml
+++ b/indra/newview/skins/default/xui/it/floater_pay_object.xml
@@ -8,7 +8,7 @@
 	</string>
 	<icon name="icon_person" tool_tip="Persona"/>
 	<text left="120" name="payee_name">
-		[FIRST] [LAST]
+		Ericacita Moostopolison
 	</text>
 	<text halign="left" left="5" name="object_name_label" width="110">
 		Mediante l&apos;oggetto:
diff --git a/indra/newview/skins/default/xui/it/notifications.xml b/indra/newview/skins/default/xui/it/notifications.xml
index ffd27d55e8..32483881b2 100644
--- a/indra/newview/skins/default/xui/it/notifications.xml
+++ b/indra/newview/skins/default/xui/it/notifications.xml
@@ -2035,10 +2035,10 @@ Inseriscilo in una pagina web per dare ad altri un accesso facile a questa ubica
 		Oggetto: [SUBJECT], Messaggio: [MESSAGE]
 	</notification>
 	<notification name="FriendOnline">
-		[FIRST] [LAST] è Online
+		[NAME] è Online
 	</notification>
 	<notification name="FriendOffline">
-		[FIRST] [LAST] è Offline
+		[NAME] è Offline
 	</notification>
 	<notification name="AddSelfFriend">
 		Anche se sei molto simpatico, non puoi aggiungere te stesso all&apos;elenco degli amici.
@@ -2105,9 +2105,6 @@ Questo potrebbe incidere sulla tua password.
 	<notification name="CannotRemoveProtectedCategories">
 		Non è possibile rimuovere le categorie protette.
 	</notification>
-	<notification name="OfferedCard">
-		Hai offerto un biglietto da visita a [FIRST] [LAST]
-	</notification>
 	<notification name="UnableToBuyWhileDownloading">
 		Impossibile acquistare l&apos;oggetto durante il download dei dati.
 Riprova.
@@ -2223,7 +2220,7 @@ Reinstalla il plugin o contatta il venditore se continui ad avere questi problem
 		Gli oggetti che possiedi sul terreno selezionato ti sono stati restituiti nell&apos;inventario.
 	</notification>
 	<notification name="OtherObjectsReturned">
-		Gli oggetti selezionati sul terreno che è di proprietà di [FIRST] [LAST] sono stati restituiti nel suo inventario.
+		Gli oggetti selezionati sul terreno che è di proprietà di [NAME] sono stati restituiti nel suo inventario.
 	</notification>
 	<notification name="OtherObjectsReturned2">
 		Sono stati restituiti al proprietario gli oggetti selezionati sul lotto nella terra di proprietà del residente &apos;[NAME]&apos;.
@@ -2433,7 +2430,7 @@ Riprova tra qualche istante.
 		Offerta di amicizia rifiutata.
 	</notification>
 	<notification name="OfferCallingCard">
-		[FIRST] [LAST] ti offre il suo biglietto da visita.
+		[NAME] ti offre il suo biglietto da visita.
 Questo sarà aggiunto nel tuo inventario come segnalibro per consentirti di inviare rapidamente messaggi IM a questo residente.
 		<form name="form">
 			<button name="Accept" text="Accetta"/>
@@ -2493,7 +2490,7 @@ Concedi questa richiesta?
 		</form>
 	</notification>
 	<notification name="ScriptDialog">
-		[FIRST] [LAST] &apos;[TITLE]&apos;
+		[NAME] &apos;&lt;nolink&gt;[TITLE]&lt;/nolink&gt;&apos;
 [MESSAGE]
 		<form name="form">
 			<button name="Ignore" text="Ignora"/>
@@ -2537,13 +2534,13 @@ Clicca su Accetta per unirti alla chiamata oppure su Declina to declinare l&apos
 		</form>
 	</notification>
 	<notification name="AutoUnmuteByIM">
-		[FIRST] [LAST] ha ricevuto un IM ed è stato automaticamente sbloccato.
+		[NAME] ha ricevuto un IM ed è stato automaticamente sbloccato.
 	</notification>
 	<notification name="AutoUnmuteByMoney">
-		[FIRST] [LAST] ha ricevuto del denaro e pertanto è stato automaticamente sbloccato.
+		[NAME] ha ricevuto del denaro e pertanto è stato automaticamente sbloccato.
 	</notification>
 	<notification name="AutoUnmuteByInventory">
-		A [FIRST] [LAST] è stato offerto un elemento dell&apos;Inventario e pertanto è stato automaticamente sbloccato.
+		A [NAME] è stato offerto un elemento dell&apos;Inventario e pertanto è stato automaticamente sbloccato.
 	</notification>
 	<notification name="VoiceInviteGroup">
 		[NAME] si è aggiunto alla chiamata in chat vocale con il gruppo [GROUP].
diff --git a/indra/newview/skins/default/xui/it/strings.xml b/indra/newview/skins/default/xui/it/strings.xml
index 9dbfc2b79c..dfe635182e 100644
--- a/indra/newview/skins/default/xui/it/strings.xml
+++ b/indra/newview/skins/default/xui/it/strings.xml
@@ -3478,7 +3478,7 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
 		Sei l&apos;unico utente di questa sessione.
 	</string>
 	<string name="offline_message">
-		[FIRST] [LAST] è offline.
+		[NAME] è offline.
 	</string>
 	<string name="invite_message">
 		Clicca il tasto [BUTTON NAME] per accettare/connetterti a questa voice chat.
diff --git a/indra/newview/skins/default/xui/ja/floater_bumps.xml b/indra/newview/skins/default/xui/ja/floater_bumps.xml
index 8a1e19b852..c7e4dd348f 100644
--- a/indra/newview/skins/default/xui/ja/floater_bumps.xml
+++ b/indra/newview/skins/default/xui/ja/floater_bumps.xml
@@ -4,19 +4,19 @@
 		検出なし
 	</floater.string>
 	<floater.string name="bump">
-		[TIME]  [FIRST] [LAST]が、あなたにぶつかりました。
+		[TIME]  [NAME]が、あなたにぶつかりました。
 	</floater.string>
 	<floater.string name="llpushobject">
-		[TIME]  [FIRST] [LAST]が、スクリプトであなたをプッシュしました。
+		[TIME]  [NAME]が、スクリプトであなたをプッシュしました。
 	</floater.string>
 	<floater.string name="selected_object_collide">
-		[TIME]  [FIRST] [LAST]が、オブジェクトをあなたに当てました。
+		[TIME]  [NAME]が、オブジェクトをあなたに当てました。
 	</floater.string>
 	<floater.string name="scripted_object_collide">
-		[TIME]  [FIRST] [LAST]が、スクリプト・オブジェクトをあなたに当てました。
+		[TIME]  [NAME]が、スクリプト・オブジェクトをあなたに当てました。
 	</floater.string>
 	<floater.string name="physical_object_collide">
-		[TIME]  [FIRST] [LAST]が、物理オブジェクトをあなたに当てました。
+		[TIME]  [NAME]が、物理オブジェクトをあなたに当てました。
 	</floater.string>
 	<floater.string name="timeStr">
 		[[hour,datetime,slt]:[min,datetime,slt]]
diff --git a/indra/newview/skins/default/xui/ja/floater_pay.xml b/indra/newview/skins/default/xui/ja/floater_pay.xml
index 39bc37bc6c..83a3c641f9 100644
--- a/indra/newview/skins/default/xui/ja/floater_pay.xml
+++ b/indra/newview/skins/default/xui/ja/floater_pay.xml
@@ -11,7 +11,7 @@
 	</text>
 	<icon name="icon_person" tool_tip="住人"/>
 	<text name="payee_name">
-		[FIRST] [LAST]
+		Test Name That Is Extremely Long To Check Clipping
 	</text>
 	<button label="L$1" label_selected="L$1" name="fastpay 1"/>
 	<button label="L$5" label_selected="L$5" name="fastpay 5"/>
diff --git a/indra/newview/skins/default/xui/ja/floater_pay_object.xml b/indra/newview/skins/default/xui/ja/floater_pay_object.xml
index ffd57ab67b..637ad496ef 100644
--- a/indra/newview/skins/default/xui/ja/floater_pay_object.xml
+++ b/indra/newview/skins/default/xui/ja/floater_pay_object.xml
@@ -8,7 +8,7 @@
 	</string>
 	<icon name="icon_person" tool_tip="住人"/>
 	<text name="payee_name">
-		[FIRST] [LAST]
+		Ericacita Moostopolison
 	</text>
 	<text name="object_name_label">
 		オブジェクトを介して:
diff --git a/indra/newview/skins/default/xui/ja/notifications.xml b/indra/newview/skins/default/xui/ja/notifications.xml
index 93d6644902..c0af0e03ff 100644
--- a/indra/newview/skins/default/xui/ja/notifications.xml
+++ b/indra/newview/skins/default/xui/ja/notifications.xml
@@ -2082,10 +2082,10 @@ Web ページにリンクすると、他人がこの場所に簡単にアクセ
 		件名: [SUBJECT]、メッセージ: [MESSAGE]
 	</notification>
 	<notification name="FriendOnline">
-		[FIRST] [LAST] はオンラインです
+		[NAME] はオンラインです
 	</notification>
 	<notification name="FriendOffline">
-		[FIRST] [LAST] はオフラインです
+		[NAME] はオフラインです
 	</notification>
 	<notification name="AddSelfFriend">
 		残念ながら自分自身をフレンド登録することはできません。
@@ -2153,9 +2153,6 @@ Web ページにリンクすると、他人がこの場所に簡単にアクセ
 	<notification name="CannotRemoveProtectedCategories">
 		保護されたカテゴリは削除できません。
 	</notification>
-	<notification name="OfferedCard">
-		[FIRST] [LAST] にコーリングカードを送りました。
-	</notification>
 	<notification name="UnableToBuyWhileDownloading">
 		オブジェクトデータのダウンロード中は購入できません。
 もう一度お試しください。
@@ -2273,7 +2270,7 @@ Web ページにリンクすると、他人がこの場所に簡単にアクセ
 	</notification>
 	<notification name="OtherObjectsReturned">
 		選択した土地の区画上にあった
- [FIRST] [LAST]
+ [NAME]
  が所有するオブジェクトは、すべて所有者の「持ち物」に返却されました。
 	</notification>
 	<notification name="OtherObjectsReturned2">
@@ -2488,7 +2485,7 @@ Web ページにリンクすると、他人がこの場所に簡単にアクセ
 		フレンドの登録依頼が拒否されました。
 	</notification>
 	<notification name="OfferCallingCard">
-		[FIRST] [LAST] がコーリングカードを渡そうとしています。
+		[NAME] がコーリングカードを渡そうとしています。
 あなたの「持ち物」にブックマークが追加され、この住人に素早く IM を送ることができます。
 		<form name="form">
 			<button name="Accept" text="受け入れる"/>
@@ -2548,7 +2545,7 @@ Web ページにリンクすると、他人がこの場所に簡単にアクセ
 		</form>
 	</notification>
 	<notification name="ScriptDialog">
-		[FIRST] [LAST] の「 [TITLE] 」
+		[NAME] の「 &lt;nolink&gt;[TITLE]&lt;/nolink&gt; 」
 [MESSAGE]
 		<form name="form">
 			<button name="Ignore" text="無視する"/>
@@ -2592,13 +2589,13 @@ M キーを押して変更します。
 		</form>
 	</notification>
 	<notification name="AutoUnmuteByIM">
-		[FIRST] [LAST] はインスタントメッセージを受け取り、自動的にブロックが解除されました。
+		[NAME] はインスタントメッセージを受け取り、自動的にブロックが解除されました。
 	</notification>
 	<notification name="AutoUnmuteByMoney">
-		[FIRST] [LAST] はお金を受け取り、自動的にブロックが解除されました。
+		[NAME] はお金を受け取り、自動的にブロックが解除されました。
 	</notification>
 	<notification name="AutoUnmuteByInventory">
-		[FIRST] [LAST] はアイテムを受け取り、自動的にブロックが解除されました。
+		[NAME] はアイテムを受け取り、自動的にブロックが解除されました。
 	</notification>
 	<notification name="VoiceInviteGroup">
 		[NAME] は [GROUP] のボイスチャットコールに参加しました。
diff --git a/indra/newview/skins/default/xui/ja/panel_edit_profile.xml b/indra/newview/skins/default/xui/ja/panel_edit_profile.xml
index 2aba4edc0d..334cf54a4d 100644
--- a/indra/newview/skins/default/xui/ja/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/ja/panel_edit_profile.xml
@@ -46,7 +46,7 @@
 				<text name="my_account_link" value="[[URL] マイアカウントに移動]"/>
 				<text name="title_partner_text" value="マイパートナー:"/>
 				<panel name="partner_data_panel">
-					<name_box initial_value="(取得中)" name="partner_text" value="[FIRST] [LAST]"/>
+					<name_box initial_value="(取得中)" name="partner_text"/>
 				</panel>
 				<text name="partner_edit_link" value="[[URL] 編集]" width="100"/>
 			</panel>
diff --git a/indra/newview/skins/default/xui/ja/strings.xml b/indra/newview/skins/default/xui/ja/strings.xml
index 92bbedaee5..187f21257a 100644
--- a/indra/newview/skins/default/xui/ja/strings.xml
+++ b/indra/newview/skins/default/xui/ja/strings.xml
@@ -3574,7 +3574,7 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ
 		このセッションにいるユーザーはあなただけです。
 	</string>
 	<string name="offline_message">
-		[FIRST] [LAST] はオフラインです。
+		[NAME] はオフラインです。
 	</string>
 	<string name="invite_message">
 		このボイスチャットに応答・接続する場合は、[BUTTON NAME] をクリックしてください。
diff --git a/indra/newview/skins/default/xui/nl/floater_bumps.xml b/indra/newview/skins/default/xui/nl/floater_bumps.xml
index df9a99d62e..516b59658d 100644
--- a/indra/newview/skins/default/xui/nl/floater_bumps.xml
+++ b/indra/newview/skins/default/xui/nl/floater_bumps.xml
@@ -4,18 +4,18 @@
 		Geen gedetecteerd
 	</string>
 	<string name="bump">
-		[TIME]  [FIRST] [LAST] botste tegen u aan
+		[TIME]  [NAME] botste tegen u aan
 	</string>
 	<string name="llpushobject">
-		[TIME]  [FIRST] [LAST] duwde u met een script
+		[TIME]  [NAME] duwde u met een script
 	</string>
 	<string name="selected_object_collide">
-		[TIME]  [FIRST] [LAST] raakte u met een object
+		[TIME]  [NAME] raakte u met een object
 	</string>
 	<string name="scripted_object_collide">
-		[TIME]  [FIRST] [LAST] raakte u met een gescript object
+		[TIME]  [NAME] raakte u met een gescript object
 	</string>
 	<string name="physical_object_collide">
-		[TIME]  [FIRST] [LAST] raakte u met een fysiek object
+		[TIME]  [NAME] raakte u met een fysiek object
 	</string>
 </floater>
diff --git a/indra/newview/skins/default/xui/nl/floater_pay.xml b/indra/newview/skins/default/xui/nl/floater_pay.xml
index 4018ebdc93..f2b34d78d7 100644
--- a/indra/newview/skins/default/xui/nl/floater_pay.xml
+++ b/indra/newview/skins/default/xui/nl/floater_pay.xml
@@ -10,7 +10,7 @@
 		Betaal inwoner:
 	</text>
 	<text name="payee_name" left="110">
-		[FIRST] [LAST]
+		Test Name That Is Extremely Long To Check Clipping
 	</text>
 	<text name="fastpay text">
 		Snel betalen:
diff --git a/indra/newview/skins/default/xui/nl/floater_pay_object.xml b/indra/newview/skins/default/xui/nl/floater_pay_object.xml
index d3826648f2..11fa6d4a44 100644
--- a/indra/newview/skins/default/xui/nl/floater_pay_object.xml
+++ b/indra/newview/skins/default/xui/nl/floater_pay_object.xml
@@ -7,7 +7,7 @@
 		Betaal inwoner:
 	</text>
 	<text name="payee_name" left="100" width="200">
-		[FIRST] [LAST]
+		Ericacita Moostopolison
 	</text>
 	<text name="object_name_label" left="5" width="90" halign="left">
 		Via object:
diff --git a/indra/newview/skins/default/xui/nl/notifications.xml b/indra/newview/skins/default/xui/nl/notifications.xml
index b4b56a035f..be0c17d2ff 100644
--- a/indra/newview/skins/default/xui/nl/notifications.xml
+++ b/indra/newview/skins/default/xui/nl/notifications.xml
@@ -2478,9 +2478,6 @@ Wilt u de [SECOND_LIFE] website bezoeken om dit in te stellen?
 	<notification name="CannotRemoveProtectedCategories">
 		U kunt geen beschermde categorieën verwijderen.
 	</notification>
-	<notification name="OfferedCard">
-		U heeft een visitekaartje aangeboden aan [FIRST] [LAST]
-	</notification>
 	<notification name="UnableToBuyWhileDownloading">
 		Niet mogelijk te kopen terwijl objectdata wordt gedownload. Probeer het alstublieft opnieuw.
 	</notification>
@@ -2780,7 +2777,7 @@ Probeer het alstublieft opnieuw over enkele ogenblikken.
 		[NAME] heeft uw vriendschapsaanbod afgewezen.
 	</notification>
 	<notification name="OfferCallingCard">
-		[FIRST] [LAST] biedt zijn/haar visitekaartje aan.
+		[NAME] biedt zijn/haar visitekaartje aan.
 Dit zal een bladwijzer in uw inventaris toevoegen zodat u deze inwoner snel kunt een IM kunt sturen.
 		<form name="form">
 			<button name="Accept" text="Accepteren"/>
diff --git a/indra/newview/skins/default/xui/nl/panel_edit_profile.xml b/indra/newview/skins/default/xui/nl/panel_edit_profile.xml
index 172395e20a..fffdb9e8df 100644
--- a/indra/newview/skins/default/xui/nl/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/nl/panel_edit_profile.xml
@@ -35,7 +35,7 @@
       </panel>
         <text name="title_partner_text" value="Partner:"/>
         <panel name="partner_data_panel">
-            <text name="partner_text" value="[FIRST] [LAST]"/>
+            <text name="partner_text"/>
          </panel>
       <text name="text_box3">
 	Antwoord bij Niet Storen:
diff --git a/indra/newview/skins/default/xui/nl/strings.xml b/indra/newview/skins/default/xui/nl/strings.xml
index 844945913f..07265d2716 100644
--- a/indra/newview/skins/default/xui/nl/strings.xml
+++ b/indra/newview/skins/default/xui/nl/strings.xml
@@ -3211,7 +3211,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
 		U bent de enige gebruiker in deze sessie.
 	</string>
 	<string name="offline_message">
-		[FIRST] [LAST] is offline.
+		[NAME] is offline.
 	</string>
 	<string name="invite_message">
 		Klik de [BUTTON NAME] knop om deze voicechat te accepteren/verbinden.
diff --git a/indra/newview/skins/default/xui/pl/notifications.xml b/indra/newview/skins/default/xui/pl/notifications.xml
index 7e5ed43475..8151c7eb93 100644
--- a/indra/newview/skins/default/xui/pl/notifications.xml
+++ b/indra/newview/skins/default/xui/pl/notifications.xml
@@ -2440,7 +2440,7 @@ Spróbuj ponowanie za kilka minut.
 		Propozycja znajomości została odrzucona.
 	</notification>
 	<notification name="OfferCallingCard">
-		[FIRST] [LAST] daje Tobie swoją wizytówkę.
+		[NAME] daje Tobie swoją wizytówkę.
 Wizytówka będzie znajdowała się w Szafie i umożliwi szybkie wysłanie IM do tego Rezydenta.
 		<form name="form">
 			<button name="Accept" text="Zaakceptuj"/>
diff --git a/indra/newview/skins/default/xui/pl/panel_edit_profile.xml b/indra/newview/skins/default/xui/pl/panel_edit_profile.xml
index dad8bca183..c409666ec9 100644
--- a/indra/newview/skins/default/xui/pl/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/pl/panel_edit_profile.xml
@@ -46,7 +46,7 @@
 				<text name="my_account_link" value="[[URL] idź do dashboard]"/>
 				<text name="title_partner_text" value="Partner:"/>
 				<panel name="partner_data_panel">
-					<text initial_value="(wyszukiwanie)" name="partner_text" value="[FIRST] [LAST]"/>
+					<text initial_value="(wyszukiwanie)" name="partner_text"/>
 				</panel>
 				<text name="partner_edit_link" value="[[URL] Edytuj]"/>
 			</panel>
diff --git a/indra/newview/skins/default/xui/pt/floater_im.xml b/indra/newview/skins/default/xui/pt/floater_im.xml
deleted file mode 100644
index c81d0dd7ef..0000000000
--- a/indra/newview/skins/default/xui/pt/floater_im.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<multi_floater name="im_floater" title="Mensagem Instantânea">
-	<string name="only_user_message">
-		Você é o único residente nesta sessão
-	</string>
-	<string name="offline_message">
-		[FIRST] [LAST] está offline.
-	</string>
-	<string name="invite_message">
-		Clique no botão [BUTTON NAME] para aceitar/ conectar a este bate-papo em voz.
-	</string>
-	<string name="muted_message">
-		Você bloqueou este residente.  Se quiser retirar o bloqueio, basta enviar uma mensagem.
-	</string>
-	<string name="generic_request_error">
-		Erro na requisição, por favor, tente novamente.
-	</string>
-	<string name="insufficient_perms_error">
-		Você não tem permissões suficientes.
-	</string>
-	<string name="session_does_not_exist_error">
-		A sessão deixou de existir
-	</string>
-	<string name="no_ability_error">
-		Você não possui esta habilidade.
-	</string>
-	<string name="not_a_mod_error">
-		Você não é um moderador de sessão.
-	</string>
-	<string name="muted_error">
-		Um moderador do grupo desabilitou seu bate-papo em texto.
-	</string>
-	<string name="add_session_event">
-		Não foi possível adicionar residentes ao bate-papo com [RECIPIENT].
-	</string>
-	<string name="message_session_event">
-		Não foi possível enviar sua mensagem na sessão de bate- papo com [RECIPIENT].
-	</string>
-	<string name="removed_from_group">
-		Você foi removido do grupo.
-	</string>
-	<string name="close_on_no_ability">
-		Você não possui mais a habilidade de estar na sessão de bate-papo.
-	</string>
-</multi_floater>
diff --git a/indra/newview/skins/default/xui/pt/notifications.xml b/indra/newview/skins/default/xui/pt/notifications.xml
index 466a24742d..76399e966c 100644
--- a/indra/newview/skins/default/xui/pt/notifications.xml
+++ b/indra/newview/skins/default/xui/pt/notifications.xml
@@ -2448,7 +2448,7 @@ Cada um pode ver o status do outro (definição padrão).
 		Oferta de amizada aceita.
 	</notification>
 	<notification name="OfferCallingCard">
-		[FIRST] [LAST] estão te oferecendo um cartão de visita.
+		[NAME] estão te oferecendo um cartão de visita.
 Ele colocará um item de inventário, para você possa contatá-lo facilmente.
 		<form name="form">
 			<button name="Accept" text="Aceitar"/>
@@ -2552,13 +2552,13 @@ Clique em Aceitar para atender ou em Recusar para recusar este convite.  Clique
 		</form>
 	</notification>
 	<notification name="AutoUnmuteByIM">
-		[FIRST] recebeu uma MI e foi desbloqueado(a) automaticamente.
+		[NAME] recebeu uma MI e foi desbloqueado(a) automaticamente.
 	</notification>
 	<notification name="AutoUnmuteByMoney">
-		[FIRST] recebeu dinheiro e foi desbloqueado(a) automaticamente.
+		[NAME] recebeu dinheiro e foi desbloqueado(a) automaticamente.
 	</notification>
 	<notification name="AutoUnmuteByInventory">
-		[FIRST] recebeu dinheiro e foi desbloqueado(a) automaticamente.
+		[NAME] recebeu dinheiro e foi desbloqueado(a) automaticamente.
 	</notification>
 	<notification name="VoiceInviteGroup">
 		[NAME] atendeu uma ligação de bate-papo de voz com o grupo [GROUP].  
-- 
cgit v1.2.3


From 13b77e3622de18ac8d06fdfffceb08990eb908f9 Mon Sep 17 00:00:00 2001
From: "Mark Palange (Mani)" <palange@lindenlab.com>
Date: Tue, 16 Nov 2010 16:21:17 -0800
Subject: CHOP-179 Linux install uses linux-updater. Rev. by Alain

---
 indra/newview/viewer_manifest.py | 13 +++++--------
 1 file changed, 5 insertions(+), 8 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index 55d64fd3a6..5d35778e3e 100644
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -247,13 +247,12 @@ class WindowsManifest(ViewerManifest):
         
         self.disable_manifest_check()
 
+        self.path("../viewer_components/updater/scripts/windows/update_install.bat")
+
         # Get shared libs from the shared libs staging directory
         if self.prefix(src=os.path.join(os.pardir, 'sharedlibs', self.args['configuration']),
                        dst=""):
 
-            if self.prefix(src="../../viewer_components/updater", dst=""):
-                self.path("update_install.bat")
-                self.end_prefix()
 
             self.enable_crt_manifest_check()
 
@@ -575,12 +574,8 @@ class DarwinManifest(ViewerManifest):
 
             # copy additional libs in <bundle>/Contents/MacOS/
             self.path("../../libraries/universal-darwin/lib_release/libndofdev.dylib", dst="MacOS/libndofdev.dylib")
-			
-					
-            if self.prefix(src="../viewer_components/updater", dst="MacOS"):
-                self.path("update_install")
-                self.end_prefix()
 
+            self.path("../viewer_components/updater/scripts/darwin/update_install", "MacOS/update_install")
 
             # most everything goes in the Resources directory
             if self.prefix(src="", dst="Resources"):
@@ -857,6 +852,8 @@ class LinuxManifest(ViewerManifest):
             # recurse
             self.end_prefix("res-sdl")
 
+        self.path("../viewer_components/updater/scripts/linux/update_install", "bin/update_install")
+
         # plugins
         if self.prefix(src="", dst="bin/llplugin"):
             self.path("../media_plugins/webkit/libmedia_plugin_webkit.so", "libmedia_plugin_webkit.so")
-- 
cgit v1.2.3


From 00ada8dccd50cf04e5ea16f200ce3c6bfbee5023 Mon Sep 17 00:00:00 2001
From: Paul Guslisty <pguslisty@productengine.com>
Date: Wed, 17 Nov 2010 15:09:08 +0200
Subject: STORM-588 FIXED Add a Preference that allows users to run multiple
 Viewer instances

- Added a control_name for the "AllowMultipleViewers" checkbox
---
 indra/newview/skins/default/xui/en/panel_preferences_advanced.xml | 1 +
 1 file changed, 1 insertion(+)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
index 15d1222d00..dd01683c51 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
@@ -79,6 +79,7 @@
     </radio_group>
 
     <check_box
+     control_name="AllowMultipleViewers"
      follows="top|left"
      height="15"
      label="Allow Multiple Viewer"
-- 
cgit v1.2.3


From 7e9572fab5643f52a44f06249109f7e77b656e3b Mon Sep 17 00:00:00 2001
From: Paul Guslisty <pguslisty@productengine.com>
Date: Wed, 17 Nov 2010 15:21:58 +0200
Subject: STORM-589 FIXED Add a Preference that allows users to display the
 grid selection drop-down on the login screen

- Added a control_name for the "Show Grid Selection at login" checkbox
---
 indra/newview/skins/default/xui/en/panel_preferences_advanced.xml | 1 +
 1 file changed, 1 insertion(+)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
index 15d1222d00..cfc7a0d5ae 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
@@ -88,6 +88,7 @@
      top_pad="20"
      width="237"/>
     <check_box
+     control_name="ForceShowGrid"
      follows="top|left"
      height="15"
      label="Show Grid Selection at login"
-- 
cgit v1.2.3


From 14b2b796abf4e2f1538ca337f675166a22478868 Mon Sep 17 00:00:00 2001
From: Paul Guslisty <pguslisty@productengine.com>
Date: Wed, 17 Nov 2010 15:31:23 +0200
Subject: STORM-590 FIXED Add Preferences to enable the display of the Advanced
 and Development menus

- Added control_names for the "Show Advanced Menu" and "QAMode" checkboxes
---
 indra/newview/skins/default/xui/en/panel_preferences_advanced.xml | 2 ++
 1 file changed, 2 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
index 15d1222d00..ae9711418e 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
@@ -97,6 +97,7 @@
      top_pad="5"
      width="237"/>
     <check_box
+     control_name="UseDebugMenus"
      follows="top|left"
      height="15"
      label="Show Advanced Menu"
@@ -106,6 +107,7 @@
      top_pad="5"
      width="237"/>
     <check_box
+     control_name="QAMode"
      follows="top|left"
      height="15"
      label="Show Developer Menu"
-- 
cgit v1.2.3


From 9053aa7d1cb53445f7c7e8d929e3850807b52228 Mon Sep 17 00:00:00 2001
From: Dave SIMmONs <simon@lindenlab.com>
Date: Wed, 17 Nov 2010 11:05:03 -0800
Subject: ER-301 : increase allowable bandwidth.  Bumped up to 3 mbps.

---
 indra/newview/llviewerthrottle.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewerthrottle.cpp b/indra/newview/llviewerthrottle.cpp
index b614ccdbc2..5147272122 100644
--- a/indra/newview/llviewerthrottle.cpp
+++ b/indra/newview/llviewerthrottle.cpp
@@ -46,7 +46,7 @@ const F32 MAX_FRACTIONAL = 1.5f;
 const F32 MIN_FRACTIONAL = 0.2f;
 
 const F32 MIN_BANDWIDTH = 50.f;
-const F32 MAX_BANDWIDTH = 1500.f;
+const F32 MAX_BANDWIDTH = 3000.f;
 const F32 STEP_FRACTIONAL = 0.1f;
 const F32 TIGHTEN_THROTTLE_THRESHOLD = 3.0f; // packet loss % per s
 const F32 EASE_THROTTLE_THRESHOLD = 0.5f; // packet loss % per s
-- 
cgit v1.2.3


From fa2aeb07f8474cfd5d61d5347dfcc28bd8f7f257 Mon Sep 17 00:00:00 2001
From: Seth ProductEngine <slitovchuk@productengine.com>
Date: Wed, 17 Nov 2010 21:40:04 +0200
Subject: STORM-316 FIXED Added an item to inventory gear menu to control "Sort
 System Folders to Top" option (was always "true"). Changed inventory gear
 menu sort items - now they have check marks on the left. Made inventory sort
 options persist across sessions.

---
 indra/newview/llpanelmaininventory.cpp             | 47 ++++++++++++++++++++--
 indra/newview/llpanelmaininventory.h               |  1 +
 .../default/xui/en/menu_inventory_gear_default.xml | 25 ++++++++++--
 3 files changed, 66 insertions(+), 7 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp
index 904e3dabcc..17433a557b 100644
--- a/indra/newview/llpanelmaininventory.cpp
+++ b/indra/newview/llpanelmaininventory.cpp
@@ -329,15 +329,23 @@ void LLPanelMainInventory::setSortBy(const LLSD& userdata)
 	if (sort_field == "name")
 	{
 		U32 order = getActivePanel()->getSortOrder();
-		getActivePanel()->setSortOrder( order & ~LLInventoryFilter::SO_DATE );
-			
+		order &= ~LLInventoryFilter::SO_DATE;
+
+		getActivePanel()->setSortOrder( order );
+
+		gSavedSettings.setU32("InventorySortOrder", order);
+
 		gSavedSettings.setBOOL("Inventory.SortByName", TRUE );
 		gSavedSettings.setBOOL("Inventory.SortByDate", FALSE );
 	}
 	else if (sort_field == "date")
 	{
 		U32 order = getActivePanel()->getSortOrder();
-		getActivePanel()->setSortOrder( order | LLInventoryFilter::SO_DATE );
+		order |= LLInventoryFilter::SO_DATE;
+
+		getActivePanel()->setSortOrder( order );
+
+		gSavedSettings.setU32("InventorySortOrder", order);
 
 		gSavedSettings.setBOOL("Inventory.SortByName", FALSE );
 		gSavedSettings.setBOOL("Inventory.SortByDate", TRUE );
@@ -375,6 +383,8 @@ void LLPanelMainInventory::setSortBy(const LLSD& userdata)
 			gSavedSettings.setBOOL("Inventory.SystemFoldersToTop", TRUE );
 		}
 		getActivePanel()->setSortOrder( order );
+
+		gSavedSettings.setU32("InventorySortOrder", order);
 	}
 }
 
@@ -915,6 +925,7 @@ void LLPanelMainInventory::initListCommandsHandlers()
 			));
 
 	mCommitCallbackRegistrar.add("Inventory.GearDefault.Custom.Action", boost::bind(&LLPanelMainInventory::onCustomAction, this, _2));
+	mEnableCallbackRegistrar.add("Inventory.GearDefault.Check", boost::bind(&LLPanelMainInventory::isActionChecked, this, _2));
 	mEnableCallbackRegistrar.add("Inventory.GearDefault.Enable", boost::bind(&LLPanelMainInventory::isActionEnabled, this, _2));
 	mMenuGearDefault = LLUICtrlFactory::getInstance()->createFromFile<LLToggleableMenu>("menu_inventory_gear_default.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
 	mGearMenuButton->setMenu(mMenuGearDefault);
@@ -1000,6 +1011,11 @@ void LLPanelMainInventory::onCustomAction(const LLSD& userdata)
 		const LLSD arg = "date";
 		setSortBy(arg);
 	}
+	if (command_name == "sort_system_folders_to_top")
+	{
+		const LLSD arg = "systemfolderstotop";
+		setSortBy(arg);
+	}
 	if (command_name == "show_filters")
 	{
 		toggleFindOptions();
@@ -1173,6 +1189,31 @@ BOOL LLPanelMainInventory::isActionEnabled(const LLSD& userdata)
 	return TRUE;
 }
 
+BOOL LLPanelMainInventory::isActionChecked(const LLSD& userdata)
+{
+	const std::string command_name = userdata.asString();
+
+	if (command_name == "sort_by_name")
+	{
+		U32 order = getActivePanel()->getSortOrder();
+		return ~order & LLInventoryFilter::SO_DATE;
+	}
+
+	if (command_name == "sort_by_recent")
+	{
+		U32 order = getActivePanel()->getSortOrder();
+		return order & LLInventoryFilter::SO_DATE;
+	}
+
+	if (command_name == "sort_system_folders_to_top")
+	{
+		U32 order = getActivePanel()->getSortOrder();
+		return order & LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP;
+	}
+
+	return FALSE;
+}
+
 bool LLPanelMainInventory::handleDragAndDropToTrash(BOOL drop, EDragAndDropType cargo_type, EAcceptance* accept)
 {
 	*accept = ACCEPT_NO;
diff --git a/indra/newview/llpanelmaininventory.h b/indra/newview/llpanelmaininventory.h
index d136e2d32e..c2b78ff9ea 100644
--- a/indra/newview/llpanelmaininventory.h
+++ b/indra/newview/llpanelmaininventory.h
@@ -136,6 +136,7 @@ protected:
 	void onTrashButtonClick();
 	void onClipboardAction(const LLSD& userdata);
 	BOOL isActionEnabled(const LLSD& command_name);
+	BOOL isActionChecked(const LLSD& userdata);
 	void onCustomAction(const LLSD& command_name);
 	bool handleDragAndDropToTrash(BOOL drop, EDragAndDropType cargo_type, EAcceptance* accept);
 	/**
diff --git a/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml
index 679d5bc82e..7fa4cd840a 100644
--- a/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml
+++ b/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml
@@ -16,22 +16,39 @@
     </menu_item_call>
     <menu_item_separator
      layout="topleft" />
-    <menu_item_call
+    <menu_item_check
      label="Sort by Name"
      layout="topleft"
      name="sort_by_name">
         <on_click
          function="Inventory.GearDefault.Custom.Action"
          parameter="sort_by_name" />
-    </menu_item_call>
-    <menu_item_call
+        <on_check
+         function="Inventory.GearDefault.Check"
+         parameter="sort_by_name" />
+    </menu_item_check>
+    <menu_item_check
      label="Sort by Most Recent"
      layout="topleft"
      name="sort_by_recent">
         <on_click
          function="Inventory.GearDefault.Custom.Action"
          parameter="sort_by_recent" />
-    </menu_item_call>
+        <on_check
+         function="Inventory.GearDefault.Check"
+         parameter="sort_by_recent" />         
+    </menu_item_check>
+    <menu_item_check
+     label="Sort System Folders to Top"
+     layout="topleft"
+     name="sort_system_folders_to_top">
+        <on_click
+         function="Inventory.GearDefault.Custom.Action"
+         parameter="sort_system_folders_to_top" />
+        <on_check
+         function="Inventory.GearDefault.Check"
+         parameter="sort_system_folders_to_top" />
+    </menu_item_check>
     <menu_item_separator
      layout="topleft" />
     <menu_item_call
-- 
cgit v1.2.3


From 81edfefcaff44cc66918199c39fa1dc54adc1eb5 Mon Sep 17 00:00:00 2001
From: Andrew Productengine <adyukov@productengine.com>
Date: Wed, 17 Nov 2010 22:10:37 +0200
Subject: STORM-582 ADDITIONAL_FIX Added missing button to Move&View
 preferences tab.

---
 .../newview/skins/default/xui/en/panel_preferences_move.xml | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_preferences_move.xml b/indra/newview/skins/default/xui/en/panel_preferences_move.xml
index ec80efe188..c893a92e7c 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_move.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_move.xml
@@ -203,4 +203,15 @@
      value="1"
      width="75" />
   </radio_group>
-</panel>
+  <button
+   height="23"
+   label="Other Devices"
+   left="30"
+   name="joystick_setup_button"
+   top="30"
+   width="155">
+    <button.commit_callback
+     function="Floater.Show"
+     parameter="pref_joystick" />
+  </button>
+</panel>
\ No newline at end of file
-- 
cgit v1.2.3


From c61d89f61d0b696e6e73105ed7be7580bf1b3437 Mon Sep 17 00:00:00 2001
From: "Mark Palange (Mani)" <palange@lindenlab.com>
Date: Wed, 17 Nov 2010 12:24:37 -0800
Subject: CHOP-203 Fixed linux release bug - exclude update_install from symbol
 strippage

---
 indra/newview/viewer_manifest.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index 5d35778e3e..4e5d6271df 100644
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -882,7 +882,7 @@ class LinuxManifest(ViewerManifest):
 
         if self.args['buildtype'].lower() == 'release' and self.is_packaging_viewer():
             print "* Going strip-crazy on the packaged binaries, since this is a RELEASE build"
-            self.run_command("find %(d)r/bin %(d)r/lib -type f | xargs --no-run-if-empty strip -S" % {'d': self.get_dst_prefix()} ) # makes some small assumptions about our packaged dir structure
+            self.run_command("find %(d)r/bin %(d)r/lib -type f \\! -name update_install | xargs --no-run-if-empty strip -S" % {'d': self.get_dst_prefix()} ) # makes some small assumptions about our packaged dir structure
 
         # Fix access permissions
         self.run_command("""
-- 
cgit v1.2.3


From 5c35547ade48123cb571714de42ffe42b232480d Mon Sep 17 00:00:00 2001
From: "Mark Palange (Mani)" <palange@lindenlab.com>
Date: Wed, 17 Nov 2010 16:50:38 -0800
Subject: CHOP-135 Added Pref UI to Setup panel. Rev. by Brad

---
 .../default/xui/en/panel_preferences_setup.xml     | 26 +++++++++++++++++-----
 1 file changed, 21 insertions(+), 5 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_preferences_setup.xml b/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
index 140d16e37f..79013e7e27 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
@@ -29,7 +29,7 @@
    layout="topleft"
    left_delta="50"
    name=" Mouse Sensitivity"
-   top_pad="10"
+   top_pad="5"
    width="150">
     Mouse sensitivity
   </text>
@@ -76,7 +76,7 @@
    left_delta="50"
    name="Maximum bandwidth"
    mouse_opaque="false"
-   top_pad="10"
+   top_pad="5"
    width="200">
     Maximum bandwidth
   </text>
@@ -115,7 +115,7 @@
    layout="topleft"
    left="77"
    name="connection_port_enabled"
-   top_pad="20"
+   top_pad="10"
    width="256">
     <check_box.commit_callback
      function="Notification.Show"
@@ -147,7 +147,7 @@
    left="80"
    mouse_opaque="false"
    name="cache_size_label_l"
-   top_pad="20"
+   top_pad="10"
    width="200">
     Cache size
   </text>
@@ -239,7 +239,7 @@
          layout="topleft"
          left="30"
          name="Web:"
-         top_pad="5"
+         top_pad="10"
          width="300">
     Web:
   </text>
@@ -386,4 +386,20 @@
    name="web_proxy_port"
    top_delta="0"
    width="145" />
+
+  <check_box
+    top_delta="2"
+    enabled="true"
+    follows="left|top"
+    height="18"
+    initial_value="true"
+    control_name="UpdaterServiceActive"
+    label="Automatically download and install [APP_NAME] updates"
+    left="30"
+    mouse_opaque="true"
+    name="updater_service_active"
+    radio_style="false"
+    width="400"
+    top_pad="10"/>
+
 </panel>
-- 
cgit v1.2.3


From 098fa21c4f812b94348c0631c29babff68968d3d Mon Sep 17 00:00:00 2001
From: brad kittenbrink <brad@lindenlab.com>
Date: Wed, 17 Nov 2010 17:06:21 -0800
Subject: Work on CHOP-135: Hooking up setting UpdaterServiceActive to
 functionality. Paired with Mani. Toggling the setting now calls
 LLUpdaterService::startChecking() and LLUpdaterService::stopChecking(), which
 enable and disable the service.

---
 indra/newview/llviewercontrol.cpp | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp
index f579c433e1..f65811598f 100644
--- a/indra/newview/llviewercontrol.cpp
+++ b/indra/newview/llviewercontrol.cpp
@@ -70,6 +70,7 @@
 #include "llpaneloutfitsinventory.h"
 #include "llpanellogin.h"
 #include "llpaneltopinfobar.h"
+#include "llupdaterservice.h"
 
 #ifdef TOGGLE_HACKED_GODLIKE_VIEWER
 BOOL 				gHackGodmode = FALSE;
@@ -488,6 +489,18 @@ bool toggle_show_object_render_cost(const LLSD& newvalue)
 	return true;
 }
 
+void toggle_updater_service_active(LLControlVariable* control, const LLSD& new_value)
+{
+    if(new_value.asBoolean())
+    {
+        LLUpdaterService().startChecking();
+    }
+    else
+    {
+        LLUpdaterService().stopChecking();
+    }
+}
+
 ////////////////////////////////////////////////////////////////////////////
 
 void settings_setup_listeners()
@@ -635,6 +648,7 @@ void settings_setup_listeners()
 	gSavedSettings.getControl("ShowNavbarFavoritesPanel")->getSignal()->connect(boost::bind(&toggle_show_favorites_panel, _2));
 	gSavedSettings.getControl("ShowMiniLocationPanel")->getSignal()->connect(boost::bind(&toggle_show_mini_location_panel, _2));
 	gSavedSettings.getControl("ShowObjectRenderingCost")->getSignal()->connect(boost::bind(&toggle_show_object_render_cost, _2));
+	gSavedSettings.getControl("UpdaterServiceActive")->getSignal()->connect(&toggle_updater_service_active);
 	gSavedSettings.getControl("ForceShowGrid")->getSignal()->connect(boost::bind(&handleForceShowGrid, _2));
 }
 
-- 
cgit v1.2.3


From 86260988e332c2ff750f680ada13560c2c97fa5d Mon Sep 17 00:00:00 2001
From: Andrew Productengine <adyukov@productengine.com>
Date: Thu, 18 Nov 2010 13:14:06 +0200
Subject: STORM-576 FIXED Hooked up code to preference that allows users to
 enable double-click to teleport or use auto-pilot.

- Added dirty flag that is set true when user changes checkbox or chooses one of radiobuttons connected to double-click action. No change of user settings happens on this commit, because user may press cancel or close floater. If user presses OK, and flag is true, user changes are applied to settings.
If user clicks cancel or closes floater, controls are reverted to the state they were before changes, using settings to determine it.

- Removed double-click action menu items and code that handled them to avoid functionality duplication and synchronization problems.
---
 indra/newview/llfloaterpreference.cpp              | 81 +++++++++++++++++++++-
 indra/newview/llfloaterpreference.h                | 11 +++
 indra/newview/llviewermenu.cpp                     | 10 ---
 indra/newview/skins/default/xui/en/menu_viewer.xml | 20 ------
 .../default/xui/en/panel_preferences_move.xml      |  9 ++-
 5 files changed, 97 insertions(+), 34 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index c105f023c7..ac940f4f77 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -282,7 +282,8 @@ std::string LLFloaterPreference::sSkin = "";
 LLFloaterPreference::LLFloaterPreference(const LLSD& key)
 	: LLFloater(key),
 	mGotPersonalInfo(false),
-	mOriginalIMViaEmail(false)
+	mOriginalIMViaEmail(false),
+	mDoubleClickActionDirty(false)
 {
 	//Build Floater is now Called from 	LLFloaterReg::add("preferences", "floater_preferences.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPreference>);
 	
@@ -320,6 +321,8 @@ LLFloaterPreference::LLFloaterPreference(const LLSD& key)
 	mCommitCallbackRegistrar.add("Pref.getUIColor",				boost::bind(&LLFloaterPreference::getUIColor, this ,_1, _2));
 	mCommitCallbackRegistrar.add("Pref.MaturitySettings",		boost::bind(&LLFloaterPreference::onChangeMaturity, this));
 	mCommitCallbackRegistrar.add("Pref.BlockList",				boost::bind(&LLFloaterPreference::onClickBlockList, this));
+	mCommitCallbackRegistrar.add("Pref.CommitDoubleClickChekbox",	boost::bind(&LLFloaterPreference::onDoubleClickCheckBox, this, _1));
+	mCommitCallbackRegistrar.add("Pref.CommitRadioDoubleClick",	boost::bind(&LLFloaterPreference::onDoubleClickRadio, this));
 
 	sSkin = gSavedSettings.getString("SkinCurrent");
 	
@@ -342,6 +345,8 @@ BOOL LLFloaterPreference::postBuild()
 	if (!tabcontainer->selectTab(gSavedSettings.getS32("LastPrefTab")))
 		tabcontainer->selectFirstTab();
 
+	updateDoubleClickControls();
+
 	getChild<LLUICtrl>("cache_location")->setEnabled(FALSE); // make it read-only but selectable (STORM-227)
 	std::string cache_location = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "");
 	setCacheLocation(cache_location);
@@ -475,6 +480,12 @@ void LLFloaterPreference::apply()
 			gAgent.sendAgentUpdateUserInfo(new_im_via_email,mDirectoryVisibility);
 		}
 	}
+
+	if (mDoubleClickActionDirty)
+	{
+		updateDoubleClickSettings();
+		mDoubleClickActionDirty = false;
+	}
 }
 
 void LLFloaterPreference::cancel()
@@ -501,6 +512,12 @@ void LLFloaterPreference::cancel()
 	
 	// reverts any changes to current skin
 	gSavedSettings.setString("SkinCurrent", sSkin);
+
+	if (mDoubleClickActionDirty)
+	{
+		updateDoubleClickControls();
+		mDoubleClickActionDirty = false;
+	}
 }
 
 void LLFloaterPreference::onOpen(const LLSD& key)
@@ -1318,6 +1335,68 @@ void LLFloaterPreference::onClickBlockList()
 	}
 }
 
+void LLFloaterPreference::onDoubleClickCheckBox(LLUICtrl* ctrl)
+{
+	if (!ctrl) return;
+	mDoubleClickActionDirty = true;
+	LLRadioGroup* radio_double_click_action = getChild<LLRadioGroup>("double_click_action");
+	if (!radio_double_click_action) return;
+	// select default value("teleport") in radio-group.
+	radio_double_click_action->setSelectedIndex(0);
+	// set radio-group enabled depending on state of checkbox
+	radio_double_click_action->setEnabled(ctrl->getValue());
+}
+
+void LLFloaterPreference::onDoubleClickRadio()
+{
+	mDoubleClickActionDirty = true;
+}
+
+void LLFloaterPreference::updateDoubleClickSettings()
+{
+	LLCheckBoxCtrl* double_click_action_cb = getChild<LLCheckBoxCtrl>("double_click_chkbox");
+	if (!double_click_action_cb) return;
+	bool enable = double_click_action_cb->getValue().asBoolean();
+
+	LLRadioGroup* radio_double_click_action = getChild<LLRadioGroup>("double_click_action");
+	if (!radio_double_click_action) return;
+	
+	// enable double click radio-group depending on state of checkbox
+	radio_double_click_action->setEnabled(enable);
+	
+	if (!enable)
+	{
+		// set double click action settings values to false if checkbox was unchecked
+		gSavedSettings.setBOOL("DoubleClickAutoPilot", false);
+		gSavedSettings.setBOOL("DoubleClickTeleport", false);
+	}
+	else
+	{
+		std::string selected = radio_double_click_action->getValue().asString();
+		bool teleport_selected = selected == "radio_teleport";
+		// set double click action settings values depending on chosen radio-button
+		gSavedSettings.setBOOL( "DoubleClickTeleport", teleport_selected );
+		gSavedSettings.setBOOL( "DoubleClickAutoPilot", !teleport_selected );
+	}
+}
+
+void LLFloaterPreference::updateDoubleClickControls()
+{
+	// check is one of double-click actions settings enabled
+	bool double_click_action_enabled = gSavedSettings.getBOOL("DoubleClickAutoPilot") || gSavedSettings.getBOOL("DoubleClickTeleport");
+	LLCheckBoxCtrl* double_click_action_cb = getChild<LLCheckBoxCtrl>("double_click_chkbox");
+	if (double_click_action_cb)
+	{
+		// check checkbox if one of double-click actions settings enabled, uncheck otherwise
+		double_click_action_cb->setValue(double_click_action_enabled);
+	}
+	LLRadioGroup* double_click_action_radio = getChild<LLRadioGroup>("double_click_action");
+	if (!double_click_action_radio) return;
+	// set radio-group enabled if one of double-click actions settings enabled
+	double_click_action_radio->setEnabled(double_click_action_enabled);
+	// select button in radio-group depending on setting
+	double_click_action_radio->setSelectedIndex(gSavedSettings.getBOOL("DoubleClickAutoPilot"));
+}
 
 void LLFloaterPreference::applyUIColor(LLUICtrl* ctrl, const LLSD& param)
 {
diff --git a/indra/newview/llfloaterpreference.h b/indra/newview/llfloaterpreference.h
index e99731b92e..46f50d9a4d 100644
--- a/indra/newview/llfloaterpreference.h
+++ b/indra/newview/llfloaterpreference.h
@@ -95,6 +95,14 @@ protected:
 	void setHardwareDefaults();
 	// callback for when client turns on shaders
 	void onVertexShaderEnable();
+	// callback for changing double click action checkbox
+	void onDoubleClickCheckBox(LLUICtrl* ctrl);
+	// callback for selecting double click action radio-button
+	void onDoubleClickRadio();
+	// updates double-click action settings depending on controls from preferences
+	void updateDoubleClickSettings();
+	// updates double-click action controls depending on values from settings.xml
+	void updateDoubleClickControls();
 	
 	// This function squirrels away the current values of the controls so that
 	// cancel() can restore them.	
@@ -145,6 +153,9 @@ public:
 	static void refreshSkin(void* data);
 private:
 	static std::string sSkin;
+	// set true if state of double-click action checkbox or radio-group was changed by user
+	// (reset back to false on apply or cancel)
+	bool mDoubleClickActionDirty;
 	bool mGotPersonalInfo;
 	bool mOriginalIMViaEmail;
 	
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 2874a6ec79..54fe34e738 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -6500,16 +6500,6 @@ class LLToggleControl : public view_listener_t
 		std::string control_name = userdata.asString();
 		BOOL checked = gSavedSettings.getBOOL( control_name );
 		gSavedSettings.setBOOL( control_name, !checked );
-
-        // Doubleclick actions - there can be only one
-        if ((control_name == "DoubleClickAutoPilot") && !checked)
-        {
-			gSavedSettings.setBOOL( "DoubleClickTeleport", FALSE );
-        }
-        else if ((control_name == "DoubleClickTeleport") && !checked)
-        {
-			gSavedSettings.setBOOL( "DoubleClickAutoPilot", FALSE );
-        }
 		return true;
 	}
 };
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index 9fcf952bf0..f74b6ba7b5 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -2660,26 +2660,6 @@
                 <menu_item_call.on_click
                  function="Advanced.PrintTextureMemoryStats" />
             </menu_item_call>
-            <menu_item_check
-             label="Double-ClickAuto-Pilot"
-             name="Double-ClickAuto-Pilot">
-                <menu_item_check.on_check
-                 function="CheckControl"
-                 parameter="DoubleClickAutoPilot" />
-                <menu_item_check.on_click
-                 function="ToggleControl"
-                 parameter="DoubleClickAutoPilot" />
-            </menu_item_check>
-            <menu_item_check
-             label="Double-Click Teleport"
-             name="DoubleClick Teleport">
-                <menu_item_check.on_check
-                 function="CheckControl"
-                 parameter="DoubleClickTeleport" />
-                <menu_item_check.on_click
-                 function="ToggleControl"
-                 parameter="DoubleClickTeleport" />
-            </menu_item_check>
             <menu_item_check
              label="Region Debug Console"
              name="Region Debug Console"
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_move.xml b/indra/newview/skins/default/xui/en/panel_preferences_move.xml
index c893a92e7c..d2fc6ea09a 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_move.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_move.xml
@@ -177,7 +177,10 @@
    left_delta="0"
    name="double_click_chkbox"
    width="237"
-   top_pad="0"/>
+   top_pad="0">
+   <check_box.commit_callback
+    function="Pref.CommitDoubleClickChekbox"/>
+  </check_box>
   <radio_group
      height="20"
      layout="topleft"
@@ -191,7 +194,6 @@
      left="0"
      name="radio_teleport"
      top_delta="20"
-     value="0"
      width="100" />
     <radio_item
      height="16"
@@ -200,8 +202,9 @@
      layout="topleft"
      name="radio_autopilot"
      top_delta="0"
-     value="1"
      width="75" />
+    <radio_group.commit_callback
+	     function="Pref.CommitRadioDoubleClick"/>
   </radio_group>
   <button
    height="23"
-- 
cgit v1.2.3


From 80364035a10ad28473002d80e575e14e041ac089 Mon Sep 17 00:00:00 2001
From: Loren Shih <seraph@lindenlab.com>
Date: Thu, 18 Nov 2010 11:14:57 -0500
Subject: SH-410 Opaque Water Project version 2.0

Added opaque water default settings to Linux featuretable.
---
 indra/newview/featuretable_linux.txt | 5 +++++
 1 file changed, 5 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/featuretable_linux.txt b/indra/newview/featuretable_linux.txt
index efe29005f2..a52b32355d 100644
--- a/indra/newview/featuretable_linux.txt
+++ b/indra/newview/featuretable_linux.txt
@@ -42,6 +42,7 @@ RenderObjectBump			1	1
 RenderReflectionDetail		1	4
 RenderTerrainDetail			1	1
 RenderTerrainLODFactor		1	2.0
+RenderTransparentWater		1	1
 RenderTreeLODFactor			1	1.0
 RenderUseImpostors			1	1
 RenderVBOEnable				1	1
@@ -79,6 +80,7 @@ RenderObjectBump			1	0
 RenderReflectionDetail		1	0
 RenderTerrainDetail			1	0
 RenderTerrainLODFactor		1	1
+RenderTransparentWater		1	0
 RenderTreeLODFactor			1	0
 RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	0.5
@@ -107,6 +109,7 @@ RenderObjectBump			1	1
 RenderReflectionDetail		1	0
 RenderTerrainDetail			1	1
 RenderTerrainLODFactor		1	1.0
+RenderTransparentWater		1	1
 RenderTreeLODFactor			1	0.5
 RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	1.125
@@ -134,6 +137,7 @@ RenderObjectBump			1	1
 RenderReflectionDetail		1	2
 RenderTerrainDetail			1	1
 RenderTerrainLODFactor		1	2.0
+RenderTransparentWater		1	1
 RenderTreeLODFactor			1	0.5
 RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	1.125
@@ -161,6 +165,7 @@ RenderObjectBump			1	1
 RenderReflectionDetail		1	4
 RenderTerrainDetail			1	1
 RenderTerrainLODFactor		1	2.0
+RenderTransparentWater		1	1
 RenderTreeLODFactor			1	1.0
 RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	2.0
-- 
cgit v1.2.3


From c5e5af4219b650db50ec72ee6a7174aad9439671 Mon Sep 17 00:00:00 2001
From: Bill Curtis <bill.curtis@gmail.com>
Date: Thu, 18 Nov 2010 10:37:45 -0800
Subject: added logging and default value for max-agent-groups

---
 indra/newview/llstartup.cpp | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index ac320ba761..711240293e 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -3149,9 +3149,18 @@ bool process_login_success_response()
 		LLViewerMedia::openIDSetup(openid_url, openid_token);
 	}
 
-	std::string max_agent_groups(response["max-agent-groups"]);
-	gMaxAgentGroups = atoi(max_agent_groups.c_str());
-	
+	if(response.has("max-agent-grid")) {		
+		std::string max_agent_groups(response["max-agent-groups"]);
+		gMaxAgentGroups = atoi(max_agent_groups.c_str());
+		LL_INFOS("LLStartup") << "gMaxAgentGroups read from login.cgi: "
+							  << gMaxAgentGroups << LL_ENDL;
+	}
+	else {
+		gMaxAgentGroups = DEFAULT_MAX_AGENT_GROUPS;
+		LL_INFOS("LLStartup") << "using gMaxAgentGroups default: "
+							  << gMaxAgentGroups << LL_ENDL;
+	}
+		
 	bool success = false;
 	// JC: gesture loading done below, when we have an asset system
 	// in place.  Don't delete/clear gUserCredentials until then.
-- 
cgit v1.2.3


From 9bebbfbac5b852062baa0ccb049034ff3ab945b8 Mon Sep 17 00:00:00 2001
From: Jonathan Yap <none@none>
Date: Thu, 18 Nov 2010 13:54:28 -0500
Subject: Viewer 2.4 (as of 18 Nov 2010) with STORM-616 (Me/Movement) merged
 in.

---
 indra/newview/skins/default/xui/en/menu_viewer.xml | 72 +++++++++++++---------
 1 file changed, 43 insertions(+), 29 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index 9fcf952bf0..e4cee1f774 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -94,6 +94,49 @@
              function="Floater.Toggle"
              parameter="voice_effect" />
         </menu_item_check>
+		<menu
+		 create_jump_keys="true"
+		 label="Movement"
+		 name="Movement"
+		 tear_off="true">
+            <menu_item_call
+             label="Sit Down"
+             layout="topleft"
+		     shortcut="control|alt|S"
+             name="Sit Down Here">
+                <menu_item_call.on_click
+                 function="Self.SitDown"
+                 parameter="" />
+                <menu_item_call.on_enable
+                 function="Self.EnableSitDown" />
+            </menu_item_call>
+            <menu_item_check
+             label="Always Run"
+             name="Always Run"
+             shortcut="control|R">
+                <menu_item_check.on_check
+                 function="World.CheckAlwaysRun" />
+                <menu_item_check.on_click
+                 function="World.AlwaysRun" />
+            </menu_item_check>
+            <menu_item_check
+             label="Fly"
+             name="Fly"
+             shortcut="Home">
+                <menu_item_check.on_check
+                 function="Agent.getFlying" />
+                <menu_item_check.on_click
+                 function="Agent.toggleFlying" />
+                <menu_item_check.on_enable
+                 function="Agent.enableFlying" />
+            </menu_item_check>
+            <menu_item_call
+             label="Stop Animating Me"
+             name="Stop Animating My Avatar">
+                 <menu_item_call.on_click
+                  function="Tools.StopAllAnimations" />
+            </menu_item_call>
+		</menu>
         <menu
          create_jump_keys="true"
          label="My Status"
@@ -995,12 +1038,6 @@
      name="Advanced"
      tear_off="true"
      visible="false">
-        <menu_item_call
-         label="Stop Animating Me"
-         name="Stop Animating My Avatar">
-            <menu_item_call.on_click
-             function="Tools.StopAllAnimations" />
-        </menu_item_call>
         <menu_item_call
          label="Rebake Textures"
          name="Rebake Texture"
@@ -1553,29 +1590,6 @@
 
             <menu_item_separator/>
 
-            <menu_item_check
-             label="Always Run"
-             name="Always Run"
-             shortcut="control|R">
-                <menu_item_check.on_check
-                 function="World.CheckAlwaysRun" />
-                <menu_item_check.on_click
-                 function="World.AlwaysRun" />
-            </menu_item_check>
-            <menu_item_check
-             label="Fly"
-             name="Fly"
-             shortcut="Home">
-                <menu_item_check.on_check
-                 function="Agent.getFlying" />
-                <menu_item_check.on_click
-                 function="Agent.toggleFlying" />
-                <menu_item_check.on_enable
-                 function="Agent.enableFlying" />
-            </menu_item_check>
-
-            <menu_item_separator/>
-
             <menu_item_call
              label="Close Window"
              name="Close Window"
-- 
cgit v1.2.3


From cf3ded4491751231056b220525970e125d813e6a Mon Sep 17 00:00:00 2001
From: brad kittenbrink <brad@lindenlab.com>
Date: Thu, 18 Nov 2010 12:15:49 -0800
Subject: First draft of CHOP-106 downloaded update ready notification.
 Reviewed by mani.

---
 indra/newview/llappviewer.cpp                        | 14 ++++++++++++++
 indra/newview/llmainlooprepeater.cpp                 |  4 ++--
 indra/newview/skins/default/xui/en/notifications.xml |  8 ++++++++
 3 files changed, 24 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 76d518b610..0c6c77566f 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -2385,6 +2385,17 @@ bool LLAppViewer::initConfiguration()
 	return true; // Config was successful.
 }
 
+namespace {
+    // *TODO - decide if there's a better place for this function.
+    // do we need a file llupdaterui.cpp or something? -brad
+    bool notify_update(LLSD const & evt)
+    {
+        LLNotificationsUtil::add("DownloadBackground");
+        // let others also handle this event by default
+        return false;
+    }
+};
+
 void LLAppViewer::initUpdater()
 {
 	// Initialize the updater service.
@@ -2409,6 +2420,9 @@ void LLAppViewer::initUpdater()
 	{
 		mUpdater->startChecking();
 	}
+
+    LLEventPump & updater_pump = LLEventPumps::instance().obtain(LLUpdaterService::pumpName());
+    updater_pump.listen("notify_update", notify_update);
 }
 
 void LLAppViewer::checkForCrash(void)
diff --git a/indra/newview/llmainlooprepeater.cpp b/indra/newview/llmainlooprepeater.cpp
index ddc925a73b..5c020e6d98 100644
--- a/indra/newview/llmainlooprepeater.cpp
+++ b/indra/newview/llmainlooprepeater.cpp
@@ -48,9 +48,9 @@ void LLMainLoopRepeater::start(void)
 
 	mQueue = new LLThreadSafeQueue<LLSD>(gAPRPoolp, 1024);
 	mMainLoopConnection = LLEventPumps::instance().
-		obtain("mainloop").listen("stupid name here", boost::bind(&LLMainLoopRepeater::onMainLoop, this, _1));
+		obtain("mainloop").listen(LLEventPump::inventName(), boost::bind(&LLMainLoopRepeater::onMainLoop, this, _1));
 	mRepeaterConnection = LLEventPumps::instance().
-		obtain("mainlooprepeater").listen("other stupid name here", boost::bind(&LLMainLoopRepeater::onMessage, this, _1));
+		obtain("mainlooprepeater").listen(LLEventPump::inventName(), boost::bind(&LLMainLoopRepeater::onMessage, this, _1));
 }
 
 
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 1f747ab997..40d5f75de2 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -2869,6 +2869,14 @@ Download to your Applications folder?
      yestext="Download"/>
   </notification>
 
+  <notification
+   icon="notifytip.tga"
+   name="DownloadBackground"
+   type="notifytip">
+An updated version of [APP_NAME] has been downloaded.
+It will be applied the next time you restart [APP_NAME]
+  </notification>
+
   <notification
    icon="alertmodal.tga"
    name="DeedObjectToGroup"
-- 
cgit v1.2.3


From f0a0831954475a2f49fe7473046f0ba657fb2405 Mon Sep 17 00:00:00 2001
From: Andrew Productengine <adyukov@productengine.com>
Date: Thu, 18 Nov 2010 23:09:05 +0200
Subject: STORM-560 FIXED Implemented preference that allows users to select
 default behavior when pressing letter keys.

- Added check to LLViewerWindow::handleKey() that gives focus to nearby chat if "Pressing letter keys starts local chat" option is selected, key is not special (and no modifier key is held except Shift), camera is not in mouselook and no view currently has keyboard focus.
- The choice of what should happen when letter keys are pressed is saved in new setting added in this fix- "LetterKeysFocusChatBar".
---
 indra/newview/app_settings/settings.xml                    | 11 +++++++++++
 indra/newview/llviewerwindow.cpp                           | 14 ++++++++++++++
 .../skins/default/xui/en/panel_preferences_general.xml     |  9 +++++----
 3 files changed, 30 insertions(+), 4 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 561456c9d6..51e3b4e7c8 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -1365,6 +1365,17 @@
       <key>Value</key>
       <integer>1</integer>
     </map>
+    <key>LetterKeysFocusChatBar</key>
+    <map>
+      <key>Comment</key>
+      <string>When printable characters keys (possibly with Shift held) are pressed, the chatbar takes focus</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
     <key>ChatBubbleOpacity</key>
     <map>
       <key>Comment</key>
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 743def4a0c..a7790243ed 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -2266,6 +2266,20 @@ BOOL LLViewerWindow::handleKey(KEY key, MASK mask)
 		return TRUE;
 	}
 
+	// If "Pressing letter keys starts local chat" option is selected, we are not in mouselook, 
+	// no view has keyboard focus, this is a printable character key (and no modifier key is 
+	// pressed except shift), then give focus to nearby chat (STORM-560)
+	if ( gSavedSettings.getS32("LetterKeysFocusChatBar") && !gAgentCamera.cameraMouselook() && 
+		!keyboard_focus && key < 0x80 && (mask == MASK_NONE || mask == MASK_SHIFT) )
+	{
+		LLLineEditor* chat_editor = LLBottomTray::instanceExists() ? LLBottomTray::getInstance()->getNearbyChatBar()->getChatBox() : NULL;
+		if (chat_editor)
+		{
+			// passing NULL here, character will be added later when it is handled by character handler.
+			LLBottomTray::getInstance()->getNearbyChatBar()->startChat(NULL);
+			return TRUE;
+		}
+	}
 
 	// give menus a chance to handle unmodified accelerator keys
 	if ((gMenuBarView && gMenuBarView->handleAcceleratorKey(key, mask))
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_general.xml b/indra/newview/skins/default/xui/en/panel_preferences_general.xml
index a660b5d785..36f8f99178 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_general.xml
@@ -331,6 +331,7 @@
        Pressing letter keys:
    </text>
    <radio_group
+     control_name="LetterKeysFocusChatBar" 
      height="20"
      layout="topleft"
      left="35"
@@ -338,12 +339,12 @@
      name="inworld_typing_preference">
         <radio_item
          label="Starts local chat"
-         name="radio_button1"
+         name="radio_start_chat"
          top_delta="20" 
          layout="topleft"
          height="16" 
          left="0" 
-         value="0"
+         value="1"
          width="150" />
         <radio_item
          label="Affects movement (i.e. WASD)"
@@ -351,8 +352,8 @@
          layout="topleft"
          top_delta="0" 
          height="16" 
-         name="radio_button2"
-         value="1"
+         name="radio_move"
+         value="0"
          width="75" />
     </radio_group>
     
-- 
cgit v1.2.3


From 7aa12f01171cab4dd69aaa0fd1062f434b9b47d6 Mon Sep 17 00:00:00 2001
From: Seth ProductEngine <slitovchuk@productengine.com>
Date: Thu, 18 Nov 2010 23:24:01 +0200
Subject: STORM-189 FIXED insufficient spacing between controls and truncations
 in IT, NL, PL and PT locales in Build Tools floater.

---
 indra/newview/skins/default/xui/en/floater_tools.xml | 16 ++++++++--------
 indra/newview/skins/default/xui/it/floater_tools.xml |  2 +-
 indra/newview/skins/default/xui/nl/floater_tools.xml | 12 ++++++------
 indra/newview/skins/default/xui/pl/floater_tools.xml |  2 +-
 indra/newview/skins/default/xui/pt/floater_tools.xml |  2 +-
 5 files changed, 17 insertions(+), 17 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml
index f361cb7f8e..e70e1eb61b 100644
--- a/indra/newview/skins/default/xui/en/floater_tools.xml
+++ b/indra/newview/skins/default/xui/en/floater_tools.xml
@@ -160,7 +160,7 @@
      layout="topleft"
      left="10"
       height="70"
-      top="54"
+      top="59"
      name="focus_radio_group">
         <radio_item
          top_pad="6"
@@ -197,7 +197,7 @@
    <radio_group
       left="10"
       height="70"
-      top="54"
+      top="59"
      layout="topleft"
      name="move_radio_group">
         <radio_item
@@ -931,7 +931,7 @@
 			 height="23"
 			 image_overlay="Edit_Wrench"
 			 layout="topleft"
-			 left_pad="3"
+			 left_pad="13"
 			 name="button set group"
 			 tab_stop="false"
 			 tool_tip="Choose a group to share this object's permissions"
@@ -944,7 +944,7 @@
              name="checkbox share with group"
              tool_tip="Allow all members of the set group to share your modify permissions for this object. You must Deed to enable role restrictions."
              top_pad="10"
-             left="106"
+             left="100"
              width="87" />
             <button
              follows="top|left"
@@ -953,7 +953,7 @@
              label_selected="Deed"
              layout="topleft"
              name="button deed"
-             left_pad="3"
+             left_pad="19"
              tool_tip="Deeding gives this item away with next owner permissions. Group shared objects can be deeded by a group officer."
              width="80" />
             <text
@@ -974,7 +974,7 @@
              layout="topleft"
              name="clickaction"
              width="148"
-             left_pad="0">
+             left_pad="10">
                 <combo_box.item
                  label="Touch  (default)"
                  name="Touch/grab(default)"
@@ -1009,7 +1009,7 @@
              width="100" />
 <!-- NEW SALE TYPE COMBO BOX -->
       <combo_box
-            left_pad="0"
+            left_pad="10"
             layout="topleft"
             follows="left|top"
             allow_text_entry="false"
@@ -1041,7 +1041,7 @@ even though the user gets a free copy.
         decimal_digits="0"
         increment="1"
         top_pad="8"
-        left="108"
+        left="118"
         control_name="Edit Cost"
         name="Edit Cost"
         label="Price: L$"
diff --git a/indra/newview/skins/default/xui/it/floater_tools.xml b/indra/newview/skins/default/xui/it/floater_tools.xml
index fbe611407e..a8c985cb12 100644
--- a/indra/newview/skins/default/xui/it/floater_tools.xml
+++ b/indra/newview/skins/default/xui/it/floater_tools.xml
@@ -283,7 +283,7 @@
 				<combo_box.item label="Plastica" name="Plastic"/>
 				<combo_box.item label="Gomma" name="Rubber"/>
 			</combo_box>
-			<text name="text cut">
+			<text name="text cut" left_delta="-10" width="170">
 				Riduci una sezione (inizio/fine)
 			</text>
 			<spinner label="I" name="cut begin"/>
diff --git a/indra/newview/skins/default/xui/nl/floater_tools.xml b/indra/newview/skins/default/xui/nl/floater_tools.xml
index d49ffc2f51..4ffe675831 100644
--- a/indra/newview/skins/default/xui/nl/floater_tools.xml
+++ b/indra/newview/skins/default/xui/nl/floater_tools.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="toolbox floater" title="" short_title="BOUWEN" height="587">
+<floater name="toolbox floater" title="" short_title="BOUWEN" height="592">
 	<button label="" label_selected="" name="button focus" tool_tip="Focus"/>
 	<button label="" label_selected="" name="button move" tool_tip="Verplaats"/>
 	<button label="" label_selected="" name="button edit" tool_tip="Bewerk"/>
@@ -81,13 +81,13 @@
 	<text name="Strength:">
 		Sterkte
 	</text>
-	<text name="obj_count" top_pad="15">
+	<text name="obj_count" top_pad="20">
 		Geselecteerde objecten: [COUNT]
 	</text>
 	<text name="prim_count">
 		primitieven: [COUNT]
 	</text>
-	<tab_container name="Object Info Tabs" tab_max_width="62" tab_min_width="30" top="180">
+	<tab_container name="Object Info Tabs" tab_max_width="62" tab_min_width="30" top="185">
 		<panel label="Algemeen" name="General">
 			<text name="Name:">
 				Naam:
@@ -115,19 +115,19 @@
 			<text name="Group Name Proxy">
 				De Lindens
 			</text>
-			<button label="Instellen..." label_selected="Instellen..." name="button set group" left_pad="13"/>
+			<button label="Instellen..." label_selected="Instellen..." name="button set group"/>
 			<text name="Permissions:">
 				Permissies:
 			</text>
 
-			<check_box label="Deel met groep" name="checkbox share with group" tool_tip="Alle leden van de ingestelde groep toestaan om te delen en uw permissies voor dit object te gebruiken. U moet &apos;Overdragen&apos; om rolbeperkingen in te schakelen." left="100"/>
+			<check_box label="Deel met groep" name="checkbox share with group" tool_tip="Alle leden van de ingestelde groep toestaan om te delen en uw permissies voor dit object te gebruiken. U moet &apos;Overdragen&apos; om rolbeperkingen in te schakelen."/>
 			<string name="text deed continued">
 				Overdragen...
 			</string>
 			<string name="text deed">
 				Overdragen
 			</string>
-			<button label="Overdragen..." label_selected="Overdragen..." name="button deed" tool_tip="Groepgedeelde objecten kunnen door een groepofficier worden overgedragen" left_pad="19"/>
+			<button label="Overdragen..." label_selected="Overdragen..." name="button deed" tool_tip="Groepgedeelde objecten kunnen door een groepofficier worden overgedragen"/>
 			<check_box label="Iedereen mag verplaatsen" name="checkbox allow everyone move"/>
 			<check_box label="Iedereen mag kopiëren" name="checkbox allow everyone copy"/>
 			<check_box label="Toon in zoeken" name="search_check" tool_tip="Laat mensen dit object zien in zoekresultaten"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_tools.xml b/indra/newview/skins/default/xui/pl/floater_tools.xml
index 8c77df9248..7c1ced0eae 100644
--- a/indra/newview/skins/default/xui/pl/floater_tools.xml
+++ b/indra/newview/skins/default/xui/pl/floater_tools.xml
@@ -307,7 +307,7 @@
 				<combo_box.item label="Kwadrat" name="Square"/>
 				<combo_box.item label="Trójkąt" name="Triangle"/>
 			</combo_box>
-			<text name="text twist">
+			<text name="text twist" left_delta="-5" width="160">
 				Skręcenie (początek/koniec)
 			</text>
 			<spinner label="P" name="Twist Begin"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_tools.xml b/indra/newview/skins/default/xui/pt/floater_tools.xml
index 2925e286ed..bd5fbf80d1 100644
--- a/indra/newview/skins/default/xui/pt/floater_tools.xml
+++ b/indra/newview/skins/default/xui/pt/floater_tools.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="toolbox floater" short_title="BUILD TOOLS" title="" width="288">
+<floater name="toolbox floater" short_title="BUILD TOOLS" title="">
 	<floater.string name="status_rotate">
 		Arrastar as faixas coloridas para girar o objeto
 	</floater.string>
-- 
cgit v1.2.3


From 3625a0f2362d2285d925052aedc69d27713e416d Mon Sep 17 00:00:00 2001
From: "Andrew A. de Laix" <alain@lindenlab.com>
Date: Thu, 18 Nov 2010 13:25:44 -0800
Subject: inform user on failed install--needs proper user dialog ;-)

---
 indra/newview/llappviewer.cpp                        | 16 ++++++++++++++--
 indra/newview/skins/default/xui/en/notifications.xml | 10 ++++++++++
 2 files changed, 24 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 0c6c77566f..93fd75f74b 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -2390,8 +2390,20 @@ namespace {
     // do we need a file llupdaterui.cpp or something? -brad
     bool notify_update(LLSD const & evt)
     {
-        LLNotificationsUtil::add("DownloadBackground");
-        // let others also handle this event by default
+		switch (evt["type"].asInteger())
+		{
+			case LLUpdaterService::DOWNLOAD_COMPLETE:
+				LLNotificationsUtil::add("DownloadBackground");
+				break;
+			case LLUpdaterService::INSTALL_ERROR:
+				LLNotificationsUtil::add("FailedUpdateInstall");
+				break;
+			default:
+				llinfos << "unhandled update event " << evt << llendl;
+				break;
+		}
+
+		// let others also handle this event by default
         return false;
     }
 };
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 40d5f75de2..a342db8442 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -2869,6 +2869,16 @@ Download to your Applications folder?
      yestext="Download"/>
   </notification>
 
+  <notification
+   icon="alertmodal.tga"
+   name="FailedUpdateInstall"
+   type="alertmodal">
+Gadzooks, I failed to install the latest update.
+Get thee to the interwebs and install it thyself.
+    <usetemplate
+     name="okbutton"
+     yestext="OK"/>
+  </notification>
   <notification
    icon="notifytip.tga"
    name="DownloadBackground"
-- 
cgit v1.2.3


From cbacbdd883699ea171309a1fda38ce0d2bf76b8c Mon Sep 17 00:00:00 2001
From: eli_linden <eli@lindenlab.com>
Date: Thu, 18 Nov 2010 14:12:50 -0800
Subject: CT-633 WIP FR linguistic

---
 indra/newview/skins/default/xui/fr/menu_inspect_avatar_gear.xml | 2 +-
 indra/newview/skins/default/xui/fr/panel_main_inventory.xml     | 2 +-
 indra/newview/skins/default/xui/fr/strings.xml                  | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/fr/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/fr/menu_inspect_avatar_gear.xml
index 8bda133a0b..17254ff325 100644
--- a/indra/newview/skins/default/xui/fr/menu_inspect_avatar_gear.xml
+++ b/indra/newview/skins/default/xui/fr/menu_inspect_avatar_gear.xml
@@ -3,7 +3,7 @@
 	<menu_item_call label="Voir le profil" name="view_profile"/>
 	<menu_item_call label="Devenir amis" name="add_friend"/>
 	<menu_item_call label="IM" name="im"/>
-	<menu_item_call label="Appeler" name="call"/>
+	<menu_item_call label="Appel" name="call"/>
 	<menu_item_call label="Téléporter" name="teleport"/>
 	<menu_item_call label="Inviter dans le groupe" name="invite_to_group"/>
 	<menu_item_call label="Ignorer" name="block"/>
diff --git a/indra/newview/skins/default/xui/fr/panel_main_inventory.xml b/indra/newview/skins/default/xui/fr/panel_main_inventory.xml
index e4c35d60fe..3e7225d8ac 100644
--- a/indra/newview/skins/default/xui/fr/panel_main_inventory.xml
+++ b/indra/newview/skins/default/xui/fr/panel_main_inventory.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="Choses" name="main inventory panel">
 	<panel.string name="ItemcountFetching">
-		Récupération de [ITEM_COUNT] articles... [FILTER]
+		Récupération : [ITEM_COUNT] articles... [FILTER]
 	</panel.string>
 	<panel.string name="ItemcountCompleted">
 		[ITEM_COUNT] articles [FILTER]
diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml
index d6c701dc90..8b958119eb 100644
--- a/indra/newview/skins/default/xui/fr/strings.xml
+++ b/indra/newview/skins/default/xui/fr/strings.xml
@@ -1089,7 +1089,7 @@
 	<string name="Textures" value=" Textures,"/>
 	<string name="Snapshots" value=" Photos,"/>
 	<string name="No Filters" value="Non "/>
-	<string name="Since Logoff" value=" - Depuis la déconnexion"/>
+	<string name="Since Logoff" value=" depuis la déconnexion"/>
 	<string name="InvFolder My Inventory">
 		Mon inventaire
 	</string>
-- 
cgit v1.2.3


From 0e52564f0a36365c2ce5f5263d15778394741fde Mon Sep 17 00:00:00 2001
From: brad kittenbrink <brad@lindenlab.com>
Date: Thu, 18 Nov 2010 15:11:42 -0800
Subject: Fix for mac build error.

---
 indra/newview/llappviewer.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 0c6c77566f..548bebcfa9 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -2422,7 +2422,7 @@ void LLAppViewer::initUpdater()
 	}
 
     LLEventPump & updater_pump = LLEventPumps::instance().obtain(LLUpdaterService::pumpName());
-    updater_pump.listen("notify_update", notify_update);
+    updater_pump.listen("notify_update", &notify_update);
 }
 
 void LLAppViewer::checkForCrash(void)
-- 
cgit v1.2.3


From 3eb3198248395922a1dfe277399e1a3cd235f952 Mon Sep 17 00:00:00 2001
From: Wolfpup Lowenhar <wolfpup67@earthlink.net>
Date: Thu, 18 Nov 2010 18:30:00 -0500
Subject: STORM-654 : Person to Person chat logs are not created if Display
 Names are off Modified code in indicated changeset to correct problem after
 consulting with  Leyla Linden who sugested the orginal change. This fix will
 convert the Legacy  name to a user name id not useing Display Names.

---
 indra/newview/llimview.cpp | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index cc48226052..3578c98622 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -537,7 +537,15 @@ bool LLIMModel::LLIMSession::isOtherParticipantAvaline()
 
 void LLIMModel::LLIMSession::onAvatarNameCache(const LLUUID& avatar_id, const LLAvatarName& av_name)
 {
-	mHistoryFileName = av_name.mUsername;
+	if (av_name.mUsername.empty())
+	{
+		// display names is off, use mDisplayName which will be the legacy name
+		mHistoryFileName = LLCacheName::buildUsername(av_name.mDisplayName);
+	}
+	else
+	{  
+		mHistoryFileName = av_name.mUsername;
+	}
 }
 
 void LLIMModel::LLIMSession::buildHistoryFileName()
-- 
cgit v1.2.3


From c893c55d8a1328a134c956b70e6fef7fd7053d47 Mon Sep 17 00:00:00 2001
From: "Mark Palange (Mani)" <palange@lindenlab.com>
Date: Thu, 18 Nov 2010 17:03:01 -0800
Subject: Fixing bugs discovered in merge with viewer development

---
 indra/newview/llspeakbutton.cpp              | 7 +++++--
 indra/newview/llspeakingindicatormanager.cpp | 5 ++++-
 2 files changed, 9 insertions(+), 3 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llspeakbutton.cpp b/indra/newview/llspeakbutton.cpp
index 3dce66f394..c76ecae4a2 100644
--- a/indra/newview/llspeakbutton.cpp
+++ b/indra/newview/llspeakbutton.cpp
@@ -134,8 +134,11 @@ LLSpeakButton::LLSpeakButton(const Params& p)
 
 LLSpeakButton::~LLSpeakButton()
 {
-	LLTransientFloaterMgr::getInstance()->removeControlView(mSpeakBtn);
-	LLTransientFloaterMgr::getInstance()->removeControlView(mShowBtn);
+	if(LLTransientFloaterMgr::instanceExists())
+	{
+		LLTransientFloaterMgr::getInstance()->removeControlView(mSpeakBtn);
+		LLTransientFloaterMgr::getInstance()->removeControlView(mShowBtn);
+	}
 }
 
 void LLSpeakButton::setSpeakToolTip(const std::string& msg)
diff --git a/indra/newview/llspeakingindicatormanager.cpp b/indra/newview/llspeakingindicatormanager.cpp
index ede1d6bebe..9b38bf22ff 100644
--- a/indra/newview/llspeakingindicatormanager.cpp
+++ b/indra/newview/llspeakingindicatormanager.cpp
@@ -308,7 +308,10 @@ void LLSpeakingIndicatorManager::registerSpeakingIndicator(const LLUUID& speaker
 
 void LLSpeakingIndicatorManager::unregisterSpeakingIndicator(const LLUUID& speaker_id, const LLSpeakingIndicator* const speaking_indicator)
 {
-	SpeakingIndicatorManager::instance().unregisterSpeakingIndicator(speaker_id, speaking_indicator);
+	if(SpeakingIndicatorManager::instanceExists())
+	{
+		SpeakingIndicatorManager::instance().unregisterSpeakingIndicator(speaker_id, speaking_indicator);
+	}
 }
 
 // EOF
-- 
cgit v1.2.3


From 8c2026d6b71f133deafa6b0e19baf69632a2510a Mon Sep 17 00:00:00 2001
From: "Mark Palange (Mani)" <palange@lindenlab.com>
Date: Thu, 18 Nov 2010 21:57:27 -0800
Subject: CHOP-135 Bug fixes.

---
 indra/newview/llappviewer.cpp           | 3 ++-
 indra/newview/llchiclet.cpp             | 8 +++++---
 indra/newview/lltransientfloatermgr.cpp | 5 ++++-
 3 files changed, 11 insertions(+), 5 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 1fd8b02530..b6f52e3e15 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -2433,7 +2433,8 @@ void LLAppViewer::initUpdater()
  	mUpdater->setCheckPeriod(check_period);
 	if(gSavedSettings.getBOOL("UpdaterServiceActive"))
 	{
-		mUpdater->startChecking();
+		bool install_if_ready = true;
+		mUpdater->startChecking(install_if_ready);
 	}
 
     LLEventPump & updater_pump = LLEventPumps::instance().obtain(LLUpdaterService::pumpName());
diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp
index 8f385160e9..885d553524 100644
--- a/indra/newview/llchiclet.cpp
+++ b/indra/newview/llchiclet.cpp
@@ -1092,9 +1092,11 @@ LLChicletPanel::LLChicletPanel(const Params&p)
 
 LLChicletPanel::~LLChicletPanel()
 {
-	LLTransientFloaterMgr::getInstance()->removeControlView(mLeftScrollButton);
-	LLTransientFloaterMgr::getInstance()->removeControlView(mRightScrollButton);
-
+	if(LLTransientFloaterMgr::instanceExists())
+	{
+		LLTransientFloaterMgr::getInstance()->removeControlView(mLeftScrollButton);
+		LLTransientFloaterMgr::getInstance()->removeControlView(mRightScrollButton);
+	}
 }
 
 void im_chiclet_callback(LLChicletPanel* panel, const LLSD& data){
diff --git a/indra/newview/lltransientfloatermgr.cpp b/indra/newview/lltransientfloatermgr.cpp
index 78dd602f39..6deab96b45 100644
--- a/indra/newview/lltransientfloatermgr.cpp
+++ b/indra/newview/lltransientfloatermgr.cpp
@@ -36,8 +36,11 @@
 
 LLTransientFloaterMgr::LLTransientFloaterMgr()
 {
-	gViewerWindow->getRootView()->addMouseDownCallback(boost::bind(
+	if(gViewerWindow)
+	{
+		gViewerWindow->getRootView()->addMouseDownCallback(boost::bind(
 			&LLTransientFloaterMgr::leftMouseClickCallback, this, _1, _2, _3));
+	}
 
 	mGroupControls.insert(std::pair<ETransientGroup, std::set<LLView*> >(GLOBAL, std::set<LLView*>()));
 	mGroupControls.insert(std::pair<ETransientGroup, std::set<LLView*> >(DOCKED, std::set<LLView*>()));
-- 
cgit v1.2.3


From edd1db29563555e4bdc38ffded4f499d65058c3a Mon Sep 17 00:00:00 2001
From: Andrew Productengine <adyukov@productengine.com>
Date: Fri, 19 Nov 2010 14:41:01 +0200
Subject: STORM-572 ADDITIONAL_FIX Fixed overlappings in Sound & Media tab of
 Preferences.

Changed xml to fix overlappings in Spanish locale and make panel closer to spec.
---
 .../default/xui/en/panel_preferences_sound.xml     | 55 +++++++++++-----------
 1 file changed, 28 insertions(+), 27 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml
index 8ade41f587..da366f30ae 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml
@@ -70,7 +70,7 @@
 		name="UI Volume"
 		show_text="false"
 		slider_label.halign="right"
-		top_pad="5"
+		top_pad="4"
 		volume="true"
 		width="300">
 	  <slider.commit_callback
@@ -104,7 +104,7 @@
      name="Wind Volume"
      show_text="false"
      slider_label.halign="right"
-     top_pad="5"
+     top_pad="4"
      volume="true"
      width="300">
         <slider.commit_callback
@@ -138,7 +138,7 @@
      left="0"
      name="SFX Volume"
      show_text="false"
-     top_pad="7"
+     top_pad="4"
      volume="true"
      width="300">
         <slider.commit_callback
@@ -172,7 +172,7 @@
      name="Music Volume"
      slider_label.halign="right"
      show_text="false"
-     top_pad="5"
+     top_pad="4"
      volume="true"
      width="300">
         <slider.commit_callback
@@ -215,7 +215,7 @@
 		name="Media Volume"
 		show_text="false"
 		slider_label.halign="right"
-		top_pad="5"
+		top_pad="4"
 		volume="true"
 		width="300">
 	  <slider.commit_callback
@@ -257,7 +257,7 @@
 		label_width="120"
 		layout="topleft"
 		left="0"
-		top_pad="5"
+		top_pad="4"
 		name="Voice Volume"
 		show_text="false"
 		slider_label.halign="right"
@@ -301,9 +301,9 @@
 		height="15"
 		tool_tip="Check this to let media auto-play if it wants"
 		label="Allow Media to auto-play"
-		top_pad="5"
+		top_pad="1"
 		left="25"/>
-	<check_box
+ 	<check_box
 		name="media_show_on_others_btn"
 		control_name="MediaShowOnOthers"
 		value="true"
@@ -313,16 +313,6 @@
 		label="Play media attached to other avatars"
 		left="25"
     width="230"/>
-  <check_box
-     control_name="LipSyncEnabled"
-     follows="left|top"
-     height="20"
-     label="Move avatar lips when speaking"
-     layout="topleft"
-     left_pad="0"
-     name="enable_lip_sync"
-     width="237"
-     top_delta="-4" />
 
     <text
      type="string"
@@ -333,7 +323,7 @@
      left="25"
      name="voice_chat_settings"
      width="180"
-     top_pad="10">
+     top_pad="7">
 	  Voice Chat Settings
     </text>
     <text
@@ -341,10 +331,10 @@
      length="1"
      follows="left|top"
      layout="topleft"
-	   left="80"
+	   left="46"
 	   top_delta="16"
      name="Listen from"
-     width="102">
+     width="112">
         Listen from:
     </text>
 	<icon
@@ -363,7 +353,7 @@
 		height="18"
 		image_name="Move_Walk_Off"
 		layout="topleft"
-    left_pad="130" 
+    left_pad="170" 
 		name="avatar_icon"
 		mouse_opaque="false"
 		visible="true"
@@ -375,7 +365,7 @@
      draw_border="false"
      follows="left|top"
      layout="topleft"
-     left_delta="-128"
+     left_delta="-168"
      width="221"
      height="20"
      name="ear_location">
@@ -391,11 +381,21 @@
      follows="left|top"
      label="Avatar position"
      layout="topleft"
-     left_pad="-54"
+     left_pad="-16"
      name="1"
      top_delta ="0" 
      width="200" />
    </radio_group>
+  <check_box
+   control_name="LipSyncEnabled"
+   follows="left|top"
+   height="15"
+   label="Move avatar lips when speaking"
+   layout="topleft"
+   left="44"
+   name="enable_lip_sync"
+   top_pad="5" 
+   width="237"/>
  <check_box
   follows="top|left"
   enabled_control="EnableVoiceChat"
@@ -403,10 +403,11 @@
   height="15"
   label="Toggle speak on/off when I press:"
   layout="topleft"
-  left="30"
+  left="44"
   name="push_to_talk_toggle_check"
   width="237"
-  tool_tip="When in toggle mode, press and release the trigger key ONCE to switch your microphone on or off. When not in toggle mode, the microphone broadcasts your voice only while the trigger is being held down."/>
+  tool_tip="When in toggle mode, press and release the trigger key ONCE to switch your microphone on or off. When not in toggle mode, the microphone broadcasts your voice only while the trigger is being held down."
+  top_pad="3"/>
   <line_editor
    follows="top|left"
    control_name="PushToTalkButton"
@@ -454,7 +455,7 @@
    label="Input/Output devices"
    layout="topleft"
    left="20"
-   top_pad="8"
+   top_pad="6"
    name="device_settings_btn"
    width="190">
   </button>
-- 
cgit v1.2.3


From c68d6c794c8f6654ad83bf56977886c8d30c599f Mon Sep 17 00:00:00 2001
From: Seth ProductEngine <slitovchuk@productengine.com>
Date: Fri, 19 Nov 2010 16:50:10 +0200
Subject: STORM-584 FIXED color setting to apply to bubble chat text.

---
 indra/newview/llhudnametag.cpp | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llhudnametag.cpp b/indra/newview/llhudnametag.cpp
index fc758569e4..c099a3964b 100644
--- a/indra/newview/llhudnametag.cpp
+++ b/indra/newview/llhudnametag.cpp
@@ -87,7 +87,6 @@ LLHUDNameTag::LLHUDNameTag(const U8 type)
 	mZCompare(TRUE),
 	mVisibleOffScreen(FALSE),
 	mOffscreen(FALSE),
-	mColor(1.f, 1.f, 1.f, 1.f),
 //	mScale(),
 	mWidth(0.f),
 	mHeight(0.f),
@@ -109,6 +108,8 @@ LLHUDNameTag::LLHUDNameTag(const U8 type)
 {
 	LLPointer<LLHUDNameTag> ptr(this);
 	sTextObjects.insert(ptr);
+
+	mColor = LLUIColorTable::instance().getColor("BackgroundChatColor");
 }
 
 LLHUDNameTag::~LLHUDNameTag()
@@ -256,6 +257,7 @@ void LLHUDNameTag::renderText(BOOL for_select)
 	
 	LLColor4 shadow_color(0.f, 0.f, 0.f, 1.f);
 	F32 alpha_factor = 1.f;
+	mColor = LLUIColorTable::instance().getColor("BackgroundChatColor");
 	LLColor4 text_color = mColor;
 	if (mDoFade)
 	{
@@ -521,7 +523,6 @@ void LLHUDNameTag::renderText(BOOL for_select)
 				x_offset += 1;
 			}
 
-			text_color = segment_iter->mColor;
 			text_color.mV[VALPHA] *= alpha_factor;
 
 			hud_render_text(segment_iter->getText(), render_position, *fontp, style, shadow, x_offset, y_offset, text_color, FALSE);
-- 
cgit v1.2.3


From dba05505ee0d5ad23cd7b2fab44271b3487b2712 Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Mon, 22 Nov 2010 17:18:59 +0200
Subject: STORM-517 FIXED Warn user that language change will only take effect
 after restarting viewer.

The warning is shown only once (until the preferences floater is reopened).
---
 indra/newview/llfloaterpreference.cpp                | 18 ++++++++++++++++++
 indra/newview/llfloaterpreference.h                  |  2 ++
 indra/newview/skins/default/xui/en/notifications.xml |  7 +++++++
 3 files changed, 27 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index ac940f4f77..6a7b5171b5 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -283,6 +283,7 @@ LLFloaterPreference::LLFloaterPreference(const LLSD& key)
 	: LLFloater(key),
 	mGotPersonalInfo(false),
 	mOriginalIMViaEmail(false),
+	mLanguageChanged(false),
 	mDoubleClickActionDirty(false)
 {
 	//Build Floater is now Called from 	LLFloaterReg::add("preferences", "floater_preferences.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPreference>);
@@ -351,6 +352,8 @@ BOOL LLFloaterPreference::postBuild()
 	std::string cache_location = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "");
 	setCacheLocation(cache_location);
 
+	getChild<LLComboBox>("language_combobox")->setCommitCallback(boost::bind(&LLFloaterPreference::onLanguageChange, this));
+
 	// if floater is opened before login set default localized busy message
 	if (LLStartUp::getStartupState() < STATE_STARTED)
 	{
@@ -570,6 +573,9 @@ void LLFloaterPreference::onOpen(const LLSD& key)
 		getChildView("maturity_desired_combobox")->setVisible( false);
 	}
 
+	// Forget previous language changes.
+	mLanguageChanged = false;
+
 	// Display selected maturity icons.
 	onChangeMaturity();
 	
@@ -727,6 +733,18 @@ void LLFloaterPreference::onClickBrowserClearCache()
 	LLNotificationsUtil::add("ConfirmClearBrowserCache", LLSD(), LLSD(), callback_clear_browser_cache);
 }
 
+// Called when user changes language via the combobox.
+void LLFloaterPreference::onLanguageChange()
+{
+	// Let the user know that the change will only take effect after restart.
+	// Do it only once so that we're not too irritating.
+	if (!mLanguageChanged)
+	{
+		LLNotificationsUtil::add("ChangeLanguage");
+		mLanguageChanged = true;
+	}
+}
+
 void LLFloaterPreference::onClickSetCache()
 {
 	std::string cur_name(gSavedSettings.getString("CacheLocation"));
diff --git a/indra/newview/llfloaterpreference.h b/indra/newview/llfloaterpreference.h
index 46f50d9a4d..bb871e7e25 100644
--- a/indra/newview/llfloaterpreference.h
+++ b/indra/newview/llfloaterpreference.h
@@ -83,6 +83,7 @@ protected:
 	void		onBtnApply();
 
 	void		onClickBrowserClearCache();
+	void		onLanguageChange();
 
 	// set value of "BusyResponseChanged" in account settings depending on whether busy response
 	// string differs from default after user changes.
@@ -158,6 +159,7 @@ private:
 	bool mDoubleClickActionDirty;
 	bool mGotPersonalInfo;
 	bool mOriginalIMViaEmail;
+	bool mLanguageChanged;
 	
 	bool mOriginalHideOnlineStatus;
 	std::string mDirectoryVisibility;
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 9536bf2cf7..60b876d163 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -907,6 +907,13 @@ Port settings take effect after you restart [APP_NAME].
 The new skin will appear after you restart [APP_NAME].
   </notification>
 
+  <notification
+   icon="alertmodal.tga"
+   name="ChangeLanguage"
+   type="alertmodal">
+Changing language will take effect after you restart [APP_NAME].
+  </notification>
+
   <notification
    icon="alertmodal.tga"
    name="GoToAuctionPage"
-- 
cgit v1.2.3


From daee0b0e850983b4b8d145ff81c9edcd9fa85bda Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Fri, 19 Nov 2010 23:20:40 +0200
Subject: STORM-456 FIXED Removed an extra space from a Polish string.

---
 indra/newview/skins/default/xui/pl/strings.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/pl/strings.xml b/indra/newview/skins/default/xui/pl/strings.xml
index 59daa26bf0..ea8bdd75b9 100644
--- a/indra/newview/skins/default/xui/pl/strings.xml
+++ b/indra/newview/skins/default/xui/pl/strings.xml
@@ -3469,7 +3469,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
 		Rozmowa głosowa zakończona
 	</string>
 	<string name="conference-title-incoming">
-		Konferencja z  [AGENT_NAME]
+		Konferencja z [AGENT_NAME]
 	</string>
 	<string name="no_session_message">
 		(Sesja IM wygasła)
-- 
cgit v1.2.3


From e7e974d6c9e8b548fe2542f767c99dc27bc7cf8f Mon Sep 17 00:00:00 2001
From: Seth ProductEngine <slitovchuk@productengine.com>
Date: Tue, 23 Nov 2010 20:08:50 +0200
Subject: STORM-378 FIXED Added playing snapshot animation and sound when
 snapshot floater is open or refreshed and a snapshot is actually taken.
 Removed animation upon saving and sending a snapshot.

---
 indra/newview/llfloaterpostcard.cpp |  4 +---
 indra/newview/llfloatersnapshot.cpp | 11 ++++-------
 indra/newview/llviewermenufile.cpp  |  2 --
 3 files changed, 5 insertions(+), 12 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloaterpostcard.cpp b/indra/newview/llfloaterpostcard.cpp
index e8e9f76912..220d33016a 100644
--- a/indra/newview/llfloaterpostcard.cpp
+++ b/indra/newview/llfloaterpostcard.cpp
@@ -361,9 +361,7 @@ void LLFloaterPostcard::sendPostcard()
 	{
 		gAssetStorage->storeAssetData(mTransactionID, LLAssetType::AT_IMAGE_JPEG, &uploadCallback, (void *)this, FALSE);
 	}
-	
-	// give user feedback of the event
-	gViewerWindow->playSnapshotAnimAndSound();
+
 	LLUploadDialog::modalUploadDialog(getString("upload_message"));
 
 	// don't destroy the window until the upload is done
diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp
index 51ee38bd65..d55272c558 100644
--- a/indra/newview/llfloatersnapshot.cpp
+++ b/indra/newview/llfloatersnapshot.cpp
@@ -1004,7 +1004,6 @@ void LLSnapshotLivePreview::saveTexture()
 				    LLFloaterPerms::getEveryonePerms(),
 				    "Snapshot : " + pos_string,
 				    callback, expected_upload_cost, userdata);
-		gViewerWindow->playSnapshotAnimAndSound();
 	}
 	else
 	{
@@ -1026,10 +1025,6 @@ BOOL LLSnapshotLivePreview::saveLocal()
 	mDataSize = 0;
 	updateSnapshot(FALSE, FALSE);
 
-	if(success)
-	{
-		gViewerWindow->playSnapshotAnimAndSound();
-	}
 	return success;
 }
 
@@ -1049,8 +1044,6 @@ void LLSnapshotLivePreview::saveWeb()
 
 	LLLandmarkActions::getRegionNameAndCoordsFromPosGlobal(gAgentCamera.getCameraPositionGlobal(),
 		boost::bind(&LLSnapshotLivePreview::regionNameCallback, this, jpg, metadata, _1, _2, _3, _4));
-
-	gViewerWindow->playSnapshotAnimAndSound();
 }
 
 void LLSnapshotLivePreview::regionNameCallback(LLImageJPEG* snapshot, LLSD& metadata, const std::string& name, S32 x, S32 y, S32 z)
@@ -1540,6 +1533,8 @@ void LLFloaterSnapshot::Impl::onClickNewSnapshot(void* data)
 	if (previewp && view)
 	{
 		previewp->updateSnapshot(TRUE);
+
+		gViewerWindow->playSnapshotAnimAndSound();
 	}
 }
 
@@ -2209,6 +2204,8 @@ void LLFloaterSnapshot::onOpen(const LLSD& key)
 	gSnapshotFloaterView->setEnabled(TRUE);
 	gSnapshotFloaterView->setVisible(TRUE);
 	gSnapshotFloaterView->adjustToFitScreen(this, FALSE);
+
+	gViewerWindow->playSnapshotAnimAndSound();
 }
 
 void LLFloaterSnapshot::onClose(bool app_quitting)
diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp
index 237aa39e6e..048691696b 100644
--- a/indra/newview/llviewermenufile.cpp
+++ b/indra/newview/llviewermenufile.cpp
@@ -404,8 +404,6 @@ class LLFileTakeSnapshotToDisk : public view_listener_t
 									   gSavedSettings.getBOOL("RenderUIInSnapshot"),
 									   FALSE))
 		{
-			gViewerWindow->playSnapshotAnimAndSound();
-			
 			LLPointer<LLImageFormatted> formatted;
 			switch(LLFloaterSnapshot::ESnapshotFormat(gSavedSettings.getS32("SnapshotFormat")))
 			{
-- 
cgit v1.2.3


From b12a2d2fd9fc4aaaf45ef893c86fd1d5f6d37372 Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Fri, 19 Nov 2010 21:16:01 +0200
Subject: STORM-432 FIXED Disabled manual resizing of the bottom panel in the
 People/Friends tab.

---
 indra/newview/skins/default/xui/en/panel_people.xml | 4 ++++
 1 file changed, 4 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml
index 68c423d7dd..6a8bf87bc5 100644
--- a/indra/newview/skins/default/xui/en/panel_people.xml
+++ b/indra/newview/skins/default/xui/en/panel_people.xml
@@ -241,6 +241,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
 				       height="25"
 				       layout="topleft"
 				       name="options_gear_btn_panel"
+				       user_resize="false"
 				       width="32">
 				          <menu_button
 				           follows="bottom|left"
@@ -261,6 +262,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
 				       height="25"
 				       layout="topleft"
 				       name="add_btn_panel"
+				       user_resize="false"
 				       width="32">
 				          <button
 				           follows="bottom|left"
@@ -281,6 +283,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
 				       height="25"
 				       layout="topleft"
 				       name="dummy_panel"
+				       user_resize="false"
 				       width="212">
 				          <icon
 				           follows="bottom|left|right"
@@ -297,6 +300,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
 				       height="25"
 				       layout="topleft"
 				       name="trash_btn_panel"
+				       user_resize="false"
 				       width="31">
 				          <dnd_button
 				           follows="bottom|left"
-- 
cgit v1.2.3


From 8d21105a8c2b6bff98b4f3b91a614a4710d4b7ea Mon Sep 17 00:00:00 2001
From: "Andrew A. de Laix" <alain@lindenlab.com>
Date: Fri, 19 Nov 2010 12:04:01 -0800
Subject: dull boring notification message.

---
 indra/newview/skins/default/xui/en/notifications.xml | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 0663583543..9536bf2cf7 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -2873,8 +2873,9 @@ Download to your Applications folder?
    icon="alertmodal.tga"
    name="FailedUpdateInstall"
    type="alertmodal">
-Gadzooks, I failed to install the latest update.
-Get thee to the interwebs and install it thyself.
+An error occurred installing the viewer update.
+Please download and install the latest viewer from
+http://secondlife.com/download.
     <usetemplate
      name="okbutton"
      yestext="OK"/>
-- 
cgit v1.2.3


From daae74e569c0f0bc4ea822ac4127c1d8c21aa91f Mon Sep 17 00:00:00 2001
From: Jonathan Yap <none@none>
Date: Fri, 19 Nov 2010 15:35:24 -0500
Subject: Changed Sit Down shortcut definition and reordered menu slightly.

---
 indra/newview/llviewermenu.cpp                     |  6 +++---
 indra/newview/skins/default/xui/en/menu_viewer.xml | 20 ++++++++++----------
 2 files changed, 13 insertions(+), 13 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 2874a6ec79..8d060fdbc8 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -7805,6 +7805,9 @@ void initialize_menus()
 	view_listener_t::addMenu(new LLViewCheckRenderType(), "View.CheckRenderType");
 	view_listener_t::addMenu(new LLViewCheckHUDAttachments(), "View.CheckHUDAttachments");
 
+	// Me > Movement
+	view_listener_t::addMenu(new LLAdvancedAgentFlyingInfo(), "Agent.getFlying");
+	
 	// World menu
 	commit.add("World.Chat", boost::bind(&handle_chat, (void*)NULL));
 	view_listener_t::addMenu(new LLWorldAlwaysRun(), "World.AlwaysRun");
@@ -7878,9 +7881,6 @@ void initialize_menus()
 
 	// Advanced Other Settings	
 	view_listener_t::addMenu(new LLAdvancedClearGroupCache(), "Advanced.ClearGroupCache");
-
-	// Advanced > Shortcuts
-	view_listener_t::addMenu(new LLAdvancedAgentFlyingInfo(), "Agent.getFlying");
 	
 	// Advanced > Render > Types
 	view_listener_t::addMenu(new LLAdvancedToggleRenderType(), "Advanced.ToggleRenderType");
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index e4cee1f774..9273ef217b 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -102,7 +102,7 @@
             <menu_item_call
              label="Sit Down"
              layout="topleft"
-		     shortcut="control|alt|S"
+		     shortcut="alt|shift|S"
              name="Sit Down Here">
                 <menu_item_call.on_click
                  function="Self.SitDown"
@@ -110,15 +110,6 @@
                 <menu_item_call.on_enable
                  function="Self.EnableSitDown" />
             </menu_item_call>
-            <menu_item_check
-             label="Always Run"
-             name="Always Run"
-             shortcut="control|R">
-                <menu_item_check.on_check
-                 function="World.CheckAlwaysRun" />
-                <menu_item_check.on_click
-                 function="World.AlwaysRun" />
-            </menu_item_check>
             <menu_item_check
              label="Fly"
              name="Fly"
@@ -130,6 +121,15 @@
                 <menu_item_check.on_enable
                  function="Agent.enableFlying" />
             </menu_item_check>
+            <menu_item_check
+             label="Always Run"
+             name="Always Run"
+             shortcut="control|R">
+                <menu_item_check.on_check
+                 function="World.CheckAlwaysRun" />
+                <menu_item_check.on_click
+                 function="World.AlwaysRun" />
+            </menu_item_check>
             <menu_item_call
              label="Stop Animating Me"
              name="Stop Animating My Avatar">
-- 
cgit v1.2.3


From cb8b30864f08947a23379eabcac63c2ceee62f7c Mon Sep 17 00:00:00 2001
From: Bill Curtis <bill.curtis@gmail.com>
Date: Fri, 19 Nov 2010 14:01:30 -0800
Subject: fixed typo

---
 indra/newview/llstartup.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 711240293e..50465de0e8 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -3149,7 +3149,7 @@ bool process_login_success_response()
 		LLViewerMedia::openIDSetup(openid_url, openid_token);
 	}
 
-	if(response.has("max-agent-grid")) {		
+	if(response.has("max-agent-groups")) {		
 		std::string max_agent_groups(response["max-agent-groups"]);
 		gMaxAgentGroups = atoi(max_agent_groups.c_str());
 		LL_INFOS("LLStartup") << "gMaxAgentGroups read from login.cgi: "
-- 
cgit v1.2.3


From a062c73ff418ee57e393effb09f494818bc63d6c Mon Sep 17 00:00:00 2001
From: brad kittenbrink <brad@lindenlab.com>
Date: Fri, 19 Nov 2010 15:54:03 -0800
Subject: Fix for windows installer missing update_install.bat.  Paired with
 mani.

---
 indra/newview/viewer_manifest.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index 4e5d6271df..54bf3a5918 100644
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -247,7 +247,7 @@ class WindowsManifest(ViewerManifest):
         
         self.disable_manifest_check()
 
-        self.path("../viewer_components/updater/scripts/windows/update_install.bat")
+        self.path(src="../viewer_components/updater/scripts/windows/update_install.bat", dst="")
 
         # Get shared libs from the shared libs staging directory
         if self.prefix(src=os.path.join(os.pardir, 'sharedlibs', self.args['configuration']),
-- 
cgit v1.2.3


From b48dad17260a7f5fbfc4d0548b4386d62efc2e5e Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Fri, 19 Nov 2010 16:12:26 -0800
Subject: DN-199 Modify LLGetDisplayName tooltip

---
 indra/newview/skins/default/xui/en/strings.xml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index 1ec0d34d9a..51fba470cb 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -1823,8 +1823,8 @@ key llRequestUsername(key id)
 Requests single-word username of an avatar.  When data is available the dataserver event will be raised.
 </string>
 <string name="LSLTipText_llGetDisplayName" translate="false">
-string llGetDisplayName(key id)
-Returns the name of an avatar, iff the avatar is in the current simulator, otherwise the empty string.
+  string llGetDisplayName(key id)
+  Returns the name of an avatar, iff the avatar is in the current simulator, and the name has been cached, otherwise the same as llGetUsername.  Use llRequestDisplayName if you absolutely must have the display name.
 </string>
 <string name="LSLTipText_llRequestDisplayName" translate="false">
 key llRequestDisplayName(key id)
-- 
cgit v1.2.3


From 870773ec17b032164f5dd6711969a6e60778a53b Mon Sep 17 00:00:00 2001
From: brad kittenbrink <brad@lindenlab.com>
Date: Fri, 19 Nov 2010 17:44:59 -0800
Subject: Fix for viewer_manifest.py failure on windows.

---
 indra/newview/viewer_manifest.py | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index 54bf3a5918..1bc118139f 100644
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -247,13 +247,12 @@ class WindowsManifest(ViewerManifest):
         
         self.disable_manifest_check()
 
-        self.path(src="../viewer_components/updater/scripts/windows/update_install.bat", dst="")
+        self.path(src="../viewer_components/updater/scripts/windows/update_install.bat", dst="update_install.bat")
 
         # Get shared libs from the shared libs staging directory
         if self.prefix(src=os.path.join(os.pardir, 'sharedlibs', self.args['configuration']),
                        dst=""):
 
-
             self.enable_crt_manifest_check()
 
             # Get kdu dll, continue if missing.
-- 
cgit v1.2.3


From fbfe7418e567b79c60cc873a8882d9be97e3bb0a Mon Sep 17 00:00:00 2001
From: Jonathan Yap <none@none>
Date: Sat, 20 Nov 2010 07:25:09 -0500
Subject: Moved Enable Hints to 2nd line of Help menu

---
 indra/newview/skins/default/xui/en/menu_viewer.xml | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index 27ab7c4fbd..907f68dc06 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -990,6 +990,14 @@
              function="ShowHelp"
              parameter="f1_help" />
         </menu_item_call>
+        <menu_item_check
+         label="Enable Hints"
+         name="Enable Hints">
+          <on_check
+            control="EnableUIHints"/>
+          <on_click
+            function="ToggleUIHints"/>
+        </menu_item_check>
 <!--        <menu_item_call
          label="Tutorial"
          name="Tutorial">
@@ -1023,14 +1031,6 @@
              function="Floater.Show"
              parameter="sl_about" />
         </menu_item_call>
-        <menu_item_check
-         label="Enable Hints"
-         name="Enable Hints">
-          <on_check
-            control="EnableUIHints"/>
-          <on_click
-            function="ToggleUIHints"/>
-        </menu_item_check>
     </menu>
     <menu
      create_jump_keys="true"
-- 
cgit v1.2.3


From abf406e3d5f957d66618afaf02f54d0d686bda67 Mon Sep 17 00:00:00 2001
From: Wolfpup Lowenhar <wolfpup67@earthlink.net>
Date: Tue, 23 Nov 2010 20:55:18 -0500
Subject: STORM-674: corrected duplicate name tags in
 pannel_preferences_color.xml

---
 indra/newview/skins/default/xui/en/panel_preferences_colors.xml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_preferences_colors.xml b/indra/newview/skins/default/xui/en/panel_preferences_colors.xml
index 6dc419a96c..0c75399764 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_colors.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_colors.xml
@@ -317,7 +317,7 @@
    layout="topleft"
    left="30"
    height="12"
-   name="bubble_chat"
+   name="floater_opacity"
    top_pad="15"
    width="120"
    >
@@ -355,7 +355,7 @@
    left="50"
    max_val="1.00"
    min_val="0.00"
-   name="active"
+   name="inactive"
    show_text="true"
    top_pad="5"
    width="415" />
-- 
cgit v1.2.3


From 90f496b3028241afb62ab6db3cdf4dc8ef3abe0e Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Mon, 22 Nov 2010 16:09:33 +0200
Subject: STORM-461 FIXED Hide sidebar tab buttons in mouselook mode.

---
 indra/newview/llagent.cpp    | 7 -------
 indra/newview/llsidetray.cpp | 3 ++-
 2 files changed, 2 insertions(+), 8 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index 3a45c79ec3..001a6a8851 100644
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -56,7 +56,6 @@
 #include "llparcel.h"
 #include "llrendersphere.h"
 #include "llsdutil.h"
-#include "llsidetray.h"
 #include "llsky.h"
 #include "llsmoothstep.h"
 #include "llstartup.h"
@@ -1727,9 +1726,6 @@ void LLAgent::endAnimationUpdateUI()
 
 		LLBottomTray::getInstance()->onMouselookModeOut();
 
-		LLSideTray::getInstance()->getButtonsPanel()->setVisible(TRUE);
-		LLSideTray::getInstance()->updateSidetrayVisibility();
-
 		LLPanelStandStopFlying::getInstance()->setVisible(TRUE);
 
 		LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset);
@@ -1829,9 +1825,6 @@ void LLAgent::endAnimationUpdateUI()
 
 		LLBottomTray::getInstance()->onMouselookModeIn();
 
-		LLSideTray::getInstance()->getButtonsPanel()->setVisible(FALSE);
-		LLSideTray::getInstance()->updateSidetrayVisibility();
-
 		LLPanelStandStopFlying::getInstance()->setVisible(FALSE);
 
 		// clear out camera lag effect
diff --git a/indra/newview/llsidetray.cpp b/indra/newview/llsidetray.cpp
index 81b2fc0ae0..a4f855f279 100644
--- a/indra/newview/llsidetray.cpp
+++ b/indra/newview/llsidetray.cpp
@@ -1028,7 +1028,8 @@ void LLSideTray::arrange()
 	}
 
 	// The tab buttons should be shown only if there is at least one non-detached tab.
-	mButtonsPanel->setVisible(hasTabs());
+	// Also hide them in mouse-look mode.
+	mButtonsPanel->setVisible(hasTabs() && !gAgentCamera.cameraMouselook());
 }
 
 // Detach those tabs that were detached when the viewer exited last time.
-- 
cgit v1.2.3


From 2e47e4f303b9b4d9222cbf6310e0a887468e3109 Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Mon, 22 Nov 2010 16:10:58 +0200
Subject: Moved some public LLSideTray methods to protected section.

---
 indra/newview/llsidetray.h | 29 +++++++++++++----------------
 1 file changed, 13 insertions(+), 16 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llsidetray.h b/indra/newview/llsidetray.h
index 4c23a1920b..3c572dde95 100644
--- a/indra/newview/llsidetray.h
+++ b/indra/newview/llsidetray.h
@@ -40,6 +40,8 @@ class LLSideTray : public LLPanel, private LLDestroyClass<LLSideTray>
 {
 	friend class LLUICtrlFactory;
 	friend class LLDestroyClass<LLSideTray>;
+	friend class LLSideTrayTab;
+	friend class LLSideTrayButton;
 public:
 
 	LOG_CLASS(LLSideTray);
@@ -125,11 +127,6 @@ public:
 		return panel;
 	}
 
-	/*
-	 * get currently active tab
-	 */
-    const LLSideTrayTab*	getActiveTab() const { return mActiveTab; }
-
 	/*
      * collapse SideBar, hiding visible tab and moving tab buttons
      * to the right corner of the screen
@@ -163,32 +160,28 @@ public:
 
     virtual BOOL postBuild();
 
-	void		onTabButtonClick(std::string name);
-	void		onToggleCollapse();
-
-	bool		addChild		(LLView* view, S32 tab_group);
-	bool		removeTab		(LLSideTrayTab* tab); // Used to detach tabs temporarily
-	bool		addTab			(LLSideTrayTab* tab); // Used to re-attach tabs
-
 	BOOL		handleMouseDown	(S32 x, S32 y, MASK mask);
 	
 	void		reshape			(S32 width, S32 height, BOOL called_from_parent = TRUE);
 
-	void		processTriState ();
-	
+
 	void		updateSidetrayVisibility();
 
 	commit_signal_t& getCollapseSignal() { return mCollapseSignal; }
 
 	void		handleLoginComplete();
 
-	LLSideTrayTab* getTab		(const std::string& name);
-
 	bool 		isTabAttached	(const std::string& name);
 
 protected:
+	bool		addChild		(LLView* view, S32 tab_group);
+	bool		removeTab		(LLSideTrayTab* tab); // Used to detach tabs temporarily
+	bool		addTab			(LLSideTrayTab* tab); // Used to re-attach tabs
 	bool		hasTabs			();
 
+	const LLSideTrayTab*	getActiveTab() const { return mActiveTab; }
+	LLSideTrayTab* 			getTab(const std::string& name);
+
 	void		createButtons	();
 
 	LLButton*	createButton	(const std::string& name,const std::string& image,const std::string& tooltip,
@@ -196,11 +189,15 @@ protected:
 	void		arrange			();
 	void		detachTabs		();
 	void		reflectCollapseChange();
+	void		processTriState ();
 
 	void		toggleTabButton	(LLSideTrayTab* tab);
 
 	LLPanel*	openChildPanel	(LLSideTrayTab* tab, const std::string& panel_name, const LLSD& params);
 
+	void		onTabButtonClick(std::string name);
+	void		onToggleCollapse();
+
 private:
 	// Implementation of LLDestroyClass<LLSideTray>
 	static void destroyClass()
-- 
cgit v1.2.3


From 2333cb9cfd3edcf3481bf328129dfd8714afefc7 Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Mon, 22 Nov 2010 18:41:06 +0200
Subject: STORM-500 FIXED Fixed resizing of "Edit Alpha" and "Edit Tattoo"
 panels.

---
 .../skins/default/xui/en/panel_edit_alpha.xml      | 24 ++++++++++++++++------
 .../skins/default/xui/en/panel_edit_tattoo.xml     |  2 +-
 2 files changed, 19 insertions(+), 7 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_edit_alpha.xml b/indra/newview/skins/default/xui/en/panel_edit_alpha.xml
index 7bcd4962d2..813aa5d7a9 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_alpha.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_alpha.xml
@@ -8,6 +8,17 @@
 	 name="edit_alpha_panel"
 	 top_pad="10"
 	 width="333" >
+   <scroll_container
+    color="DkGray2"
+    follows="all"
+    height="400"
+    layout="topleft"
+    left="10"
+    top_pad="0"
+    name="avatar_alpha_color_panel_scroll"
+    reserve_scroll_corner="false"
+    opaque="true"
+    width="313">
    <panel
       border="false"
       bg_alpha_color="DkGray2"
@@ -16,14 +27,14 @@
       background_opaque="true"
       follows="top|left|right"
       height="400" 
-      left="10" 
+      left="0" 
       layout="topleft" 
       name="avatar_alpha_color_panel"
       top="0"
       width="313" >
        <check_box
         control_name="LowerAlphaTextureInvisible"
-        follows="left"
+        follows="left|top"
         height="16"
         layout="topleft"
         left="5"
@@ -48,7 +59,7 @@
 
        <check_box
         control_name="UpperAlphaTextureInvisible"
-        follows="left"
+        follows="left|top"
         height="16"
         layout="topleft"
         left_pad="20"
@@ -73,7 +84,7 @@
 
        <check_box
         control_name="HeadAlphaTextureInvisible"
-        follows="left"
+        follows="left|top"
         height="16"
         layout="topleft"
         left="5"
@@ -98,7 +109,7 @@
 
        <check_box
         control_name="Eye AlphaTextureInvisible"
-        follows="left"
+        follows="left|top"
         height="16"
         layout="topleft"
         left_pad="20"
@@ -123,7 +134,7 @@
 
        <check_box
         control_name="HairAlphaTextureInvisible"
-        follows="left"
+        follows="left|top"
         height="16"
         layout="topleft"
         left="5"
@@ -147,5 +158,6 @@
        </texture_picker>
 
 	 </panel>
+	 </scroll_container>
 </panel>
 
diff --git a/indra/newview/skins/default/xui/en/panel_edit_tattoo.xml b/indra/newview/skins/default/xui/en/panel_edit_tattoo.xml
index 23a08344ea..97f1a1a658 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_tattoo.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_tattoo.xml
@@ -14,7 +14,7 @@
       bg_opaque_color="DkGray2"
       background_visible="true"
       background_opaque="true"
-	  follows="top|left|right"
+	  follows="all"
 	  height="400" 
 	  left="10" 
 	  layout="topleft" 
-- 
cgit v1.2.3


From c1bea989c78ca5c4844eafe5d0f8ecdd77c69995 Mon Sep 17 00:00:00 2001
From: Seth ProductEngine <slitovchuk@productengine.com>
Date: Tue, 23 Nov 2010 00:06:24 +0200
Subject: STORM-479 FIXED Changed Teleport History SP text color to match the
 default Landmarks and Inventory items color.

---
 indra/newview/llpanelteleporthistory.cpp | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llpanelteleporthistory.cpp b/indra/newview/llpanelteleporthistory.cpp
index fff8ccb912..9b35e78134 100644
--- a/indra/newview/llpanelteleporthistory.cpp
+++ b/indra/newview/llpanelteleporthistory.cpp
@@ -181,9 +181,11 @@ void LLTeleportHistoryFlatItem::setRegionName(const std::string& name)
 
 void LLTeleportHistoryFlatItem::updateTitle()
 {
+	static LLUIColor sFgColor = LLUIColorTable::instance().getColor("MenuItemEnabledColor", LLColor4U(255, 255, 255));
+
 	LLTextUtil::textboxSetHighlightedVal(
 		mTitle,
-		LLStyle::Params(),
+		LLStyle::Params().color(sFgColor),
 		mRegionName,
 		mHighlight);
 }
-- 
cgit v1.2.3


From 023af775d552709dd8f6f8ee77aeb939510aaed2 Mon Sep 17 00:00:00 2001
From: brad kittenbrink <brad@lindenlab.com>
Date: Mon, 22 Nov 2010 19:06:49 -0800
Subject: Added failing unit test which I believe should exercise CHOP-220
 crash.

---
 indra/newview/CMakeLists.txt                       |   1 +
 indra/newview/llagent.h                            |   1 +
 indra/newview/tests/llremoteparcelrequest_test.cpp | 130 +++++++++++++++++++++
 3 files changed, 132 insertions(+)
 create mode 100644 indra/newview/tests/llremoteparcelrequest_test.cpp

(limited to 'indra/newview')

diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index fa49c1ac4c..679637caf6 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -1877,6 +1877,7 @@ if (LL_TESTS)
     lldateutil.cpp
     llmediadataclient.cpp
     lllogininstance.cpp
+    llremoteparcelrequest.cpp
     llviewerhelputil.cpp
     llversioninfo.cpp
   )
diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h
index 6c598d5d71..aebebad96a 100644
--- a/indra/newview/llagent.h
+++ b/indra/newview/llagent.h
@@ -33,6 +33,7 @@
 #include "llagentconstants.h"
 #include "llagentdata.h" 			// gAgentID, gAgentSessionID
 #include "llcharacter.h" 			// LLAnimPauseRequest
+#include "llcoordframe.h"			// for mFrameAgent
 #include "llpointer.h"
 #include "lluicolor.h"
 #include "llvoavatardefines.h"
diff --git a/indra/newview/tests/llremoteparcelrequest_test.cpp b/indra/newview/tests/llremoteparcelrequest_test.cpp
new file mode 100644
index 0000000000..6f9be3df68
--- /dev/null
+++ b/indra/newview/tests/llremoteparcelrequest_test.cpp
@@ -0,0 +1,130 @@
+/** 
+ * @file llremoteparcelrequest_test.cpp
+ * @author Brad Kittenbrink <brad@lindenlab.com>
+ *
+ * $LicenseInfo:firstyear=2010&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#include "linden_common.h"
+
+#include "../test/lltut.h"
+
+#include "../llremoteparcelrequest.h"
+
+#include "../llagent.h"
+#include "message.h"
+
+namespace {
+	LLControlGroup s_saved_settings("dummy_settings");
+}
+
+LLCurl::Responder::Responder() { }
+LLCurl::Responder::~Responder() { }
+void LLCurl::Responder::error(U32,std::string const &) { }
+void LLCurl::Responder::result(LLSD const &) { }
+void LLCurl::Responder::errorWithContent(U32 status,std::string const &,LLSD const &) { }
+void LLCurl::Responder::completedRaw(U32 status, std::string const &, LLChannelDescriptors const &,boost::shared_ptr<LLBufferArray> const &) { }
+void LLCurl::Responder::completed(U32 status, std::string const &, LLSD const &) { }
+void LLCurl::Responder::completedHeader(U32 status, std::string const &, LLSD const &) { }
+void LLMessageSystem::getF32(char const *,char const *,F32 &,S32) { }
+void LLMessageSystem::getU8(char const *,char const *,U8 &,S32) { }
+void LLMessageSystem::getS32(char const *,char const *,S32 &,S32) { }
+void LLMessageSystem::getString(char const *,char const *, std::string &,S32) { }
+void LLMessageSystem::getUUID(char const *,char const *, LLUUID &,S32) { }
+void LLMessageSystem::nextBlock(char const *) { }
+void LLMessageSystem::addUUID(char const *,LLUUID const &) { }
+void LLMessageSystem::addUUIDFast(char const *,LLUUID const &) { }
+void LLMessageSystem::nextBlockFast(char const *) { }
+void LLMessageSystem::newMessage(char const *) { }
+LLMessageSystem * gMessageSystem;
+char * _PREHASH_AgentID;
+char * _PREHASH_AgentData;
+LLAgent gAgent;
+LLAgent::LLAgent() : mAgentAccess(s_saved_settings) { }
+LLAgent::~LLAgent() { }
+void LLAgent::sendReliableMessage(void) { }
+LLUUID gAgentSessionID;
+LLUUID gAgentID;
+LLUIColor::LLUIColor(void) { }
+LLAgentAccess::LLAgentAccess(LLControlGroup & settings) : mSavedSettings(settings) { }
+LLControlGroup::LLControlGroup(std::string const & name) : LLInstanceTracker<LLControlGroup, std::string>(name) { }
+LLControlGroup::~LLControlGroup(void) { }
+
+namespace tut
+{
+	struct TestObserver : public LLRemoteParcelInfoObserver {
+		TestObserver() : mProcessed(false) { }
+
+		virtual void processParcelInfo(const LLParcelData& parcel_data)
+		{
+			mProcessed = true;
+		}
+
+		virtual void setParcelID(const LLUUID& parcel_id) { }
+
+		virtual void setErrorStatus(U32 status, const std::string& reason) { }
+
+		bool mProcessed;
+	};
+
+    struct RemoteParcelRequestData
+    {
+		RemoteParcelRequestData()
+		{
+		}
+    };
+    
+	typedef test_group<RemoteParcelRequestData> remoteparcelrequest_t;
+	typedef remoteparcelrequest_t::object remoteparcelrequest_object_t;
+	tut::remoteparcelrequest_t tut_remoteparcelrequest("LLRemoteParcelRequest");
+
+	template<> template<>
+	void remoteparcelrequest_object_t::test<1>()
+	{
+		set_test_name("observer pointer");
+
+		boost::scoped_ptr<TestObserver> observer(new TestObserver());
+
+		LLRemoteParcelInfoProcessor & processor = LLRemoteParcelInfoProcessor::instance();
+		processor.addObserver(LLUUID(), observer.get());
+
+		processor.processParcelInfoReply(gMessageSystem, NULL);
+
+		ensure(observer->mProcessed);
+	}
+
+	template<> template<>
+	void remoteparcelrequest_object_t::test<2>()
+	{
+		set_test_name("CHOP-220: dangling observer pointer");
+
+		LLRemoteParcelInfoObserver * observer = new TestObserver();
+
+		LLRemoteParcelInfoProcessor & processor = LLRemoteParcelInfoProcessor::instance();
+		processor.addObserver(LLUUID(), observer);
+
+		delete observer;
+		observer = NULL;
+
+		processor.processParcelInfoReply(gMessageSystem, NULL);
+	}
+}
-- 
cgit v1.2.3


From 7db4d2b88f24ae5fe6051968d6d4c3ba9aadf817 Mon Sep 17 00:00:00 2001
From: brad kittenbrink <brad@lindenlab.com>
Date: Mon, 22 Nov 2010 19:07:17 -0800
Subject: Fix for CHOP-220.  Reviewed by mani.

---
 indra/newview/llpanellandmarks.cpp      |  3 --
 indra/newview/llpanelpick.cpp           |  3 --
 indra/newview/llpanelplaceinfo.cpp      |  4 ---
 indra/newview/llremoteparcelrequest.cpp | 53 ++++++++++++++++++++-------------
 indra/newview/llremoteparcelrequest.h   |  2 +-
 5 files changed, 34 insertions(+), 31 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp
index d25b8e0e02..e8c8273a9d 100644
--- a/indra/newview/llpanellandmarks.cpp
+++ b/indra/newview/llpanellandmarks.cpp
@@ -520,9 +520,6 @@ void LLLandmarksPanel::setParcelID(const LLUUID& parcel_id)
 {
 	if (!parcel_id.isNull())
 	{
-        //ext-4655, defensive. remove now incase this gets called twice without a remove
-        LLRemoteParcelInfoProcessor::getInstance()->removeObserver(parcel_id, this);
-        
 		LLRemoteParcelInfoProcessor::getInstance()->addObserver(parcel_id, this);
 		LLRemoteParcelInfoProcessor::getInstance()->sendParcelInfoRequest(parcel_id);
 	}
diff --git a/indra/newview/llpanelpick.cpp b/indra/newview/llpanelpick.cpp
index 271728220c..44cca21a76 100644
--- a/indra/newview/llpanelpick.cpp
+++ b/indra/newview/llpanelpick.cpp
@@ -204,9 +204,6 @@ void LLPanelPickInfo::sendParcelInfoRequest()
 {
 	if (mParcelId != mRequestedId)
 	{
-        //ext-4655, remove now incase this gets called twice without a remove
-        LLRemoteParcelInfoProcessor::getInstance()->removeObserver(mRequestedId, this);
-        
 		LLRemoteParcelInfoProcessor::getInstance()->addObserver(mParcelId, this);
 		LLRemoteParcelInfoProcessor::getInstance()->sendParcelInfoRequest(mParcelId);
 
diff --git a/indra/newview/llpanelplaceinfo.cpp b/indra/newview/llpanelplaceinfo.cpp
index 9cbb512e70..4ae0c0eb12 100644
--- a/indra/newview/llpanelplaceinfo.cpp
+++ b/indra/newview/llpanelplaceinfo.cpp
@@ -128,10 +128,6 @@ void LLPanelPlaceInfo::sendParcelInfoRequest()
 {
 	if (mParcelID != mRequestedID)
 	{
-        //ext-4655, defensive. remove now incase this gets called twice without a remove
-        //as panel never closes its ok atm (but wrong :) 
-        LLRemoteParcelInfoProcessor::getInstance()->removeObserver(mRequestedID, this);
-
 		LLRemoteParcelInfoProcessor::getInstance()->addObserver(mParcelID, this);
 		LLRemoteParcelInfoProcessor::getInstance()->sendParcelInfoRequest(mParcelID);
 
diff --git a/indra/newview/llremoteparcelrequest.cpp b/indra/newview/llremoteparcelrequest.cpp
index d63a48647d..10d4452ed2 100644
--- a/indra/newview/llremoteparcelrequest.cpp
+++ b/indra/newview/llremoteparcelrequest.cpp
@@ -77,23 +77,19 @@ void LLRemoteParcelRequestResponder::error(U32 status, const std::string& reason
 
 void LLRemoteParcelInfoProcessor::addObserver(const LLUUID& parcel_id, LLRemoteParcelInfoObserver* observer)
 {
-	// Check if the observer is already in observers list for this UUID
 	observer_multimap_t::iterator it;
+	observer_multimap_t::iterator end = mObservers.upper_bound(parcel_id);
 
-	it = mObservers.find(parcel_id);
-	while (it != mObservers.end())
+	// Check if the observer is already in observers list for this UUID
+	for(it = mObservers.find(parcel_id); it != end; ++it)
 	{
-		if (it->second == observer)
+		if (it->second.get() == observer)
 		{
 			return;
 		}
-		else
-		{
-			++it;
-		}
 	}
 
-	mObservers.insert(std::pair<LLUUID, LLRemoteParcelInfoObserver*>(parcel_id, observer));
+	mObservers.insert(std::make_pair(parcel_id, observer->getObserverHandle()));
 }
 
 void LLRemoteParcelInfoProcessor::removeObserver(const LLUUID& parcel_id, LLRemoteParcelInfoObserver* observer)
@@ -104,19 +100,15 @@ void LLRemoteParcelInfoProcessor::removeObserver(const LLUUID& parcel_id, LLRemo
 	}
 
 	observer_multimap_t::iterator it;
+	observer_multimap_t::iterator end = mObservers.upper_bound(parcel_id);
 
-	it = mObservers.find(parcel_id);
-	while (it != mObservers.end())
+	for(it = mObservers.find(parcel_id); it != end; ++it)
 	{
-		if (it->second == observer)
+		if (it->second.get() == observer)
 		{
 			mObservers.erase(it);
 			break;
 		}
-		else
-		{
-			++it;
-		}
 	}
 }
 
@@ -141,13 +133,34 @@ void LLRemoteParcelInfoProcessor::processParcelInfoReply(LLMessageSystem* msg, v
 	msg->getS32		("Data", "SalePrice", parcel_data.sale_price);
 	msg->getS32		("Data", "AuctionID", parcel_data.auction_id);
 
-	LLRemoteParcelInfoProcessor::observer_multimap_t observers = LLRemoteParcelInfoProcessor::getInstance()->mObservers;
+	LLRemoteParcelInfoProcessor::observer_multimap_t & observers = LLRemoteParcelInfoProcessor::getInstance()->mObservers;
+
+	typedef std::vector<observer_multimap_t::iterator> deadlist_t;
+	deadlist_t dead_iters;
 
-	observer_multimap_t::iterator oi = observers.find(parcel_data.parcel_id);
+	observer_multimap_t::iterator oi;
 	observer_multimap_t::iterator end = observers.upper_bound(parcel_data.parcel_id);
-	for (; oi != end; ++oi)
+
+	for (oi = observers.find(parcel_data.parcel_id); oi != end; ++oi)
+	{
+		LLRemoteParcelInfoObserver * observer = oi->second.get();
+		if(observer)
+		{
+			observer->processParcelInfo(parcel_data);
+		}
+		else
+		{
+			// the handle points to an expired observer, so don't keep it
+			// around anymore
+			dead_iters.push_back(oi);
+		}
+	}
+
+	deadlist_t::iterator i;
+	deadlist_t::iterator end_dead = dead_iters.end();
+	for(i = dead_iters.begin(); i != end_dead; ++i)
 	{
-		oi->second->processParcelInfo(parcel_data);
+		observers.erase(*i);
 	}
 }
 
diff --git a/indra/newview/llremoteparcelrequest.h b/indra/newview/llremoteparcelrequest.h
index a6c62995a9..74cf1616df 100644
--- a/indra/newview/llremoteparcelrequest.h
+++ b/indra/newview/llremoteparcelrequest.h
@@ -98,7 +98,7 @@ public:
 	static void processParcelInfoReply(LLMessageSystem* msg, void**);
 
 private:
-	typedef std::multimap<LLUUID, LLRemoteParcelInfoObserver*> observer_multimap_t;
+	typedef std::multimap<LLUUID, LLHandle<LLRemoteParcelInfoObserver> > observer_multimap_t;
 	observer_multimap_t mObservers;
 };
 
-- 
cgit v1.2.3


From 7233506624dc4c315c883b6e9e1f5a3f1d373132 Mon Sep 17 00:00:00 2001
From: brad kittenbrink <brad@lindenlab.com>
Date: Mon, 22 Nov 2010 19:51:47 -0800
Subject: Minor improvement to CHOP-220 unit test.

---
 indra/newview/tests/llremoteparcelrequest_test.cpp | 212 +++++++++++----------
 1 file changed, 108 insertions(+), 104 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/tests/llremoteparcelrequest_test.cpp b/indra/newview/tests/llremoteparcelrequest_test.cpp
index 6f9be3df68..a6c1f69c82 100644
--- a/indra/newview/tests/llremoteparcelrequest_test.cpp
+++ b/indra/newview/tests/llremoteparcelrequest_test.cpp
@@ -1,44 +1,45 @@
-/** 
- * @file llremoteparcelrequest_test.cpp
- * @author Brad Kittenbrink <brad@lindenlab.com>
- *
- * $LicenseInfo:firstyear=2010&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- * 
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- * 
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
- * $/LicenseInfo$
- */
-
-#include "linden_common.h"
-
-#include "../test/lltut.h"
-
-#include "../llremoteparcelrequest.h"
-
-#include "../llagent.h"
-#include "message.h"
-
-namespace {
-	LLControlGroup s_saved_settings("dummy_settings");
-}
-
-LLCurl::Responder::Responder() { }
-LLCurl::Responder::~Responder() { }
+/** 
+ * @file llremoteparcelrequest_test.cpp
+ * @author Brad Kittenbrink <brad@lindenlab.com>
+ *
+ * $LicenseInfo:firstyear=2010&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#include "linden_common.h"
+
+#include "../test/lltut.h"
+
+#include "../llremoteparcelrequest.h"
+
+#include "../llagent.h"
+#include "message.h"
+
+namespace {
+	LLControlGroup s_saved_settings("dummy_settings");
+	const LLUUID TEST_PARCEL_ID("11111111-1111-1111-1111-111111111111");
+}
+
+LLCurl::Responder::Responder() { }
+LLCurl::Responder::~Responder() { }
 void LLCurl::Responder::error(U32,std::string const &) { }
 void LLCurl::Responder::result(LLSD const &) { }
 void LLCurl::Responder::errorWithContent(U32 status,std::string const &,LLSD const &) { }
@@ -49,7 +50,10 @@ void LLMessageSystem::getF32(char const *,char const *,F32 &,S32) { }
 void LLMessageSystem::getU8(char const *,char const *,U8 &,S32) { }
 void LLMessageSystem::getS32(char const *,char const *,S32 &,S32) { }
 void LLMessageSystem::getString(char const *,char const *, std::string &,S32) { }
-void LLMessageSystem::getUUID(char const *,char const *, LLUUID &,S32) { }
+void LLMessageSystem::getUUID(char const *,char const *, LLUUID & out_id,S32)
+{
+	out_id = TEST_PARCEL_ID;
+}
 void LLMessageSystem::nextBlock(char const *) { }
 void LLMessageSystem::addUUID(char const *,LLUUID const &) { }
 void LLMessageSystem::addUUIDFast(char const *,LLUUID const &) { }
@@ -63,68 +67,68 @@ LLAgent::LLAgent() : mAgentAccess(s_saved_settings) { }
 LLAgent::~LLAgent() { }
 void LLAgent::sendReliableMessage(void) { }
 LLUUID gAgentSessionID;
-LLUUID gAgentID;
+LLUUID gAgentID;
 LLUIColor::LLUIColor(void) { }
 LLAgentAccess::LLAgentAccess(LLControlGroup & settings) : mSavedSettings(settings) { }
 LLControlGroup::LLControlGroup(std::string const & name) : LLInstanceTracker<LLControlGroup, std::string>(name) { }
-LLControlGroup::~LLControlGroup(void) { }
-
-namespace tut
-{
-	struct TestObserver : public LLRemoteParcelInfoObserver {
-		TestObserver() : mProcessed(false) { }
-
-		virtual void processParcelInfo(const LLParcelData& parcel_data)
-		{
-			mProcessed = true;
-		}
-
-		virtual void setParcelID(const LLUUID& parcel_id) { }
-
-		virtual void setErrorStatus(U32 status, const std::string& reason) { }
-
-		bool mProcessed;
-	};
-
-    struct RemoteParcelRequestData
-    {
-		RemoteParcelRequestData()
-		{
-		}
-    };
-    
-	typedef test_group<RemoteParcelRequestData> remoteparcelrequest_t;
-	typedef remoteparcelrequest_t::object remoteparcelrequest_object_t;
-	tut::remoteparcelrequest_t tut_remoteparcelrequest("LLRemoteParcelRequest");
-
-	template<> template<>
-	void remoteparcelrequest_object_t::test<1>()
-	{
-		set_test_name("observer pointer");
-
-		boost::scoped_ptr<TestObserver> observer(new TestObserver());
-
-		LLRemoteParcelInfoProcessor & processor = LLRemoteParcelInfoProcessor::instance();
-		processor.addObserver(LLUUID(), observer.get());
-
-		processor.processParcelInfoReply(gMessageSystem, NULL);
-
-		ensure(observer->mProcessed);
-	}
-
-	template<> template<>
-	void remoteparcelrequest_object_t::test<2>()
-	{
-		set_test_name("CHOP-220: dangling observer pointer");
-
-		LLRemoteParcelInfoObserver * observer = new TestObserver();
-
-		LLRemoteParcelInfoProcessor & processor = LLRemoteParcelInfoProcessor::instance();
-		processor.addObserver(LLUUID(), observer);
-
-		delete observer;
-		observer = NULL;
-
-		processor.processParcelInfoReply(gMessageSystem, NULL);
-	}
-}
+LLControlGroup::~LLControlGroup(void) { }
+
+namespace tut
+{
+	struct TestObserver : public LLRemoteParcelInfoObserver {
+		TestObserver() : mProcessed(false) { }
+
+		virtual void processParcelInfo(const LLParcelData& parcel_data)
+		{
+			mProcessed = true;
+		}
+
+		virtual void setParcelID(const LLUUID& parcel_id) { }
+
+		virtual void setErrorStatus(U32 status, const std::string& reason) { }
+
+		bool mProcessed;
+	};
+
+    struct RemoteParcelRequestData
+    {
+		RemoteParcelRequestData()
+		{
+		}
+    };
+    
+	typedef test_group<RemoteParcelRequestData> remoteparcelrequest_t;
+	typedef remoteparcelrequest_t::object remoteparcelrequest_object_t;
+	tut::remoteparcelrequest_t tut_remoteparcelrequest("LLRemoteParcelRequest");
+
+	template<> template<>
+	void remoteparcelrequest_object_t::test<1>()
+	{
+		set_test_name("observer pointer");
+
+		boost::scoped_ptr<TestObserver> observer(new TestObserver());
+
+		LLRemoteParcelInfoProcessor & processor = LLRemoteParcelInfoProcessor::instance();
+		processor.addObserver(LLUUID(TEST_PARCEL_ID), observer.get());
+
+		processor.processParcelInfoReply(gMessageSystem, NULL);
+
+		ensure(observer->mProcessed);
+	}
+
+	template<> template<>
+	void remoteparcelrequest_object_t::test<2>()
+	{
+		set_test_name("CHOP-220: dangling observer pointer");
+
+		LLRemoteParcelInfoObserver * observer = new TestObserver();
+
+		LLRemoteParcelInfoProcessor & processor = LLRemoteParcelInfoProcessor::instance();
+		processor.addObserver(LLUUID(TEST_PARCEL_ID), observer);
+
+		delete observer;
+		observer = NULL;
+
+		processor.processParcelInfoReply(gMessageSystem, NULL);
+	}
+}
-- 
cgit v1.2.3


From 5b80dbff3a48cd1d001f1d36ac08690c085adb97 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Tue, 23 Nov 2010 11:21:59 -0800
Subject: DN-211 Conference call dialog shows Conference with ??? (???) in
 title header with view display names on and off

---
 indra/newview/llimview.cpp | 24 +++++++++++++++++++++---
 1 file changed, 21 insertions(+), 3 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index 3578c98622..eb2d590590 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -279,9 +279,27 @@ LLIMModel::LLIMSession::LLIMSession(const LLUUID& session_id, const std::string&
 
 void LLIMModel::LLIMSession::onAdHocNameCache(const LLAvatarName& av_name)
 {
-			LLStringUtil::format_map_t args;
-	args["[AGENT_NAME]"] = av_name.getCompleteName();
-			LLTrans::findString(mName, "conference-title-incoming", args);
+	if (av_name.mIsDummy)
+	{
+		S32 separator_index = mName.rfind(" ");
+		std::string name = mName.substr(0, separator_index);
+		++separator_index;
+		std::string conference_word = mName.substr(separator_index, mName.length());
+
+		// additional check that session name is what we expected
+		if ("Conference" == conference_word)
+		{
+			LLStringUtil::format_map_t args;
+			args["[AGENT_NAME]"] = name;
+			LLTrans::findString(mName, "conference-title-incoming", args);
+		}
+	}
+	else
+	{
+		LLStringUtil::format_map_t args;
+		args["[AGENT_NAME]"] = av_name.getCompleteName();
+		LLTrans::findString(mName, "conference-title-incoming", args);
+	}
 }
 
 void LLIMModel::LLIMSession::onVoiceChannelStateChanged(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state, const LLVoiceChannel::EDirection& direction)
-- 
cgit v1.2.3


From 975f745b19a9869fd34ffb5599e294ef86120976 Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Tue, 23 Nov 2010 22:19:08 +0200
Subject: STORM-556 FIXED Don't reset search filter when docking the People SP.

As a side effect, the filter will not be reset when switching to People from another SP,
but this is consistent with all other sidepanels
(e.g. switching to Places doesn't reset its seach filter as well).
---
 indra/newview/llpanelpeople.cpp | 3 ---
 1 file changed, 3 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp
index 71c812efe2..9e9bc5fc1a 100644
--- a/indra/newview/llpanelpeople.cpp
+++ b/indra/newview/llpanelpeople.cpp
@@ -1367,9 +1367,6 @@ void LLPanelPeople::onMoreButtonClicked()
 void	LLPanelPeople::onOpen(const LLSD& key)
 {
 	std::string tab_name = key["people_panel_tab_name"];
-	mFilterEditor -> clear();
-	onFilterEdit("");
-	
 	if (!tab_name.empty())
 		mTabContainer->selectTabByName(tab_name);
 }
-- 
cgit v1.2.3


From 379c3858773e9079fbe9b0838b5f7625b5821718 Mon Sep 17 00:00:00 2001
From: Wolfpup Lowenhar <wolfpup67@earthlink.net>
Date: Tue, 23 Nov 2010 17:32:00 -0500
Subject: STORM-102: this is to correct a minor issue with ad-hoc conferences
 so that they do not  get date stamped at all since each one is defined as a
 unique conversation.

---
 indra/newview/llimview.cpp  |  7 ++++++-
 indra/newview/lllogchat.cpp | 46 +++++++++++++++++++++++++++++++++------------
 2 files changed, 40 insertions(+), 13 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index 3578c98622..2f40f51763 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -555,7 +555,12 @@ void LLIMModel::LLIMSession::buildHistoryFileName()
 	//ad-hoc requires sophisticated chat history saving schemes
 	if (isAdHoc())
 	{
-		//in case of outgoing ad-hoc sessions
+		/* in case of outgoing ad-hoc sessions we need to make specilized names
+		* if this naming system is ever changed then the filtering definitions in 
+		* lllogchat.cpp need to be change acordingly so that the filtering for the
+		* date stamp code introduced in STORM-102 will work properly and not add
+		* a date stamp to the Ad-hoc conferences.
+		*/
 		if (mInitialTargetIDs.size())
 		{
 			std::set<LLUUID> sorted_uuids(mInitialTargetIDs.begin(), mInitialTargetIDs.end());
diff --git a/indra/newview/lllogchat.cpp b/indra/newview/lllogchat.cpp
index 2fb5ba82ba..0121bbb1ed 100644
--- a/indra/newview/lllogchat.cpp
+++ b/indra/newview/lllogchat.cpp
@@ -89,6 +89,16 @@ const static boost::regex TIMESTAMP_AND_STUFF("^(\\[\\d{4}/\\d{1,2}/\\d{1,2}\\s+
  */
 const static boost::regex NAME_AND_TEXT("([^:]+[:]{1})?(\\s*)(.*)");
 
+/**
+ * These are recognizers for matching the names of ad-hoc conferences when generating the log file name
+ * On invited side, an ad-hoc is named like "<first name> <last name> Conference 2010/11/19 03:43 f0f4"
+ * On initiating side, an ad-hoc is named like Ad-hoc Conference hash<hash>"
+ * If the naming system for ad-hoc conferences are change in LLIMModel::LLIMSession::buildHistoryFileName()
+ * then these definition need to be adjusted as well.
+ */
+const static boost::regex INBOUND_CONFERENCE("^[a-zA-Z]{1,31} [a-zA-Z]{1,31} Conference [0-9]{4}/[0-9]{2}/[0-9]{2} [0-9]{2}:[0-9]{2} [0-9a-f]{4}");
+const static boost::regex OUTBOUND_CONFERENCE("^Ad-hoc Conference hash[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}");
+
 //is used to parse complex object names like "Xstreet SL Terminal v2.2.5 st"
 const static std::string NAME_TEXT_DIVIDER(": ");
 
@@ -182,25 +192,37 @@ private:
 //static
 std::string LLLogChat::makeLogFileName(std::string filename)
 {
-    if( gSavedPerAccountSettings.getBOOL("LogFileNamewithDate") )
+	/**
+	* Testing for in bound and out bound ad-hoc file names
+	* if it is then skip date stamping.
+	**/
+	//LL_INFOS("") << "Befor:" << filename << LL_ENDL;/* uncomment if you want to verify step, delete on commit */
+    boost::match_results<std::string::const_iterator> matches;
+	bool inboundConf = boost::regex_match(filename, matches, INBOUND_CONFERENCE);
+	bool outboundConf = boost::regex_match(filename, matches, OUTBOUND_CONFERENCE);
+	if (!(inboundConf || outboundConf))
 	{
-		time_t now;
-		time(&now);
-		char dbuffer[20];		/* Flawfinder: ignore */
-		if (filename == "chat")
+		if( gSavedPerAccountSettings.getBOOL("LogFileNamewithDate") )
 		{
-			strftime(dbuffer, 20, "-%Y-%m-%d", localtime(&now));
-		}
-		else
-		{
-			strftime(dbuffer, 20, "-%Y-%m", localtime(&now));
+			time_t now;
+			time(&now);
+			char dbuffer[20];		/* Flawfinder: ignore */
+			if (filename == "chat")
+			{
+				strftime(dbuffer, 20, "-%Y-%m-%d", localtime(&now));
+			}
+			else
+			{
+				strftime(dbuffer, 20, "-%Y-%m", localtime(&now));
+			}
+			filename += dbuffer;
 		}
-		filename += dbuffer;
 	}
+	//LL_INFOS("") << "After:" << filename << LL_ENDL;/* uncomment if you want to verify step, delete on commit */
 	filename = cleanFileName(filename);
 	filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_ACCOUNT_CHAT_LOGS,filename);
 	filename += ".txt";
-	//LL_INFOS("") << "Current:" << filename << LL_ENDL;/* uncomment if you want to verify step, delete on commit */
+	//LL_INFOS("") << "Full:" << filename << LL_ENDL;/* uncomment if you want to verify step, delete on commit */
 	return filename;
 }
 
-- 
cgit v1.2.3


From f3705df98291599f399bb5393144145ed6e0aaa3 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Tue, 23 Nov 2010 16:03:27 -0800
Subject: (DN-211) Conference call dialog shows Conference with ??? (???) in
 title header with view display names on and off Inbox X

---
 indra/newview/llimview.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index eb2d590590..2922a4d654 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -2183,7 +2183,7 @@ void LLIncomingCallDialog::processCallResponse(S32 response)
 						LLAvatarName av_name;
 						if (LLAvatarNameCache::get(caller_id, &av_name))
 						{
-							correct_session_name = av_name.mDisplayName + " (" + av_name.mUsername + ")";
+							correct_session_name = av_name.getCompleteName();
 							correct_session_name.append(ADHOC_NAME_SUFFIX); 
 						}
 					}
-- 
cgit v1.2.3


From 4952afae6413455cff00ed2d1ca8c49b2dd4823c Mon Sep 17 00:00:00 2001
From: eli_linden <eli@lindenlab.com>
Date: Tue, 23 Nov 2010 17:02:21 -0800
Subject: CT-633 FIX DA translation for set19, for Viewer 2.4

---
 .../skins/default/xui/da/floater_avatar_picker.xml |   8 ++
 .../newview/skins/default/xui/da/floater_bumps.xml |   4 +-
 .../skins/default/xui/da/floater_buy_object.xml    |  37 +++---
 .../newview/skins/default/xui/da/floater_event.xml |  45 ++-----
 .../skins/default/xui/da/floater_incoming_call.xml |   2 +-
 indra/newview/skins/default/xui/da/floater_pay.xml |   2 +-
 .../newview/skins/default/xui/da/floater_tools.xml |   4 +-
 .../default/xui/da/floater_voice_controls.xml      |   4 +-
 .../skins/default/xui/da/inspect_avatar.xml        |   5 +
 indra/newview/skins/default/xui/da/menu_viewer.xml |   6 +-
 .../newview/skins/default/xui/da/notifications.xml | 147 ++++++++++++++++-----
 .../skins/default/xui/da/panel_edit_profile.xml    |  10 +-
 .../default/xui/da/panel_group_land_money.xml      |   1 +
 indra/newview/skins/default/xui/da/panel_login.xml |   4 +-
 .../skins/default/xui/da/panel_place_profile.xml   |   3 +-
 .../default/xui/da/panel_preferences_general.xml   |   8 +-
 .../default/xui/da/panel_preferences_setup.xml     |  10 +-
 .../skins/default/xui/da/panel_profile_view.xml    |   8 +-
 .../newview/skins/default/xui/da/role_actions.xml  |  91 ++++++-------
 indra/newview/skins/default/xui/da/strings.xml     |  22 ++-
 20 files changed, 264 insertions(+), 157 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/da/floater_avatar_picker.xml b/indra/newview/skins/default/xui/da/floater_avatar_picker.xml
index a337da9b51..e97089f61e 100644
--- a/indra/newview/skins/default/xui/da/floater_avatar_picker.xml
+++ b/indra/newview/skins/default/xui/da/floater_avatar_picker.xml
@@ -24,6 +24,10 @@
 				Indtast en del af beboerens navn:
 			</text>
 			<button label="Find" label_selected="Find" name="Find"/>
+			<scroll_list name="SearchResults">
+				<columns label="Navn" name="name"/>
+				<columns label="Brugernavn" name="username"/>
+			</scroll_list>
 		</panel>
 		<panel label="Venner" name="FriendsPanel">
 			<text name="InstructSelectFriend">
@@ -39,6 +43,10 @@
 				meter
 			</text>
 			<button label="Gentegn liste" label_selected="Gentegn liste" name="Refresh"/>
+			<scroll_list name="NearMe">
+				<columns label="Navn" name="name"/>
+				<columns label="Brugernavn" name="username"/>
+			</scroll_list>
 		</panel>
 	</tab_container>
 	<button label="OK" label_selected="OK" name="ok_btn"/>
diff --git a/indra/newview/skins/default/xui/da/floater_bumps.xml b/indra/newview/skins/default/xui/da/floater_bumps.xml
index 1db2e93fd2..6b265832cd 100644
--- a/indra/newview/skins/default/xui/da/floater_bumps.xml
+++ b/indra/newview/skins/default/xui/da/floater_bumps.xml
@@ -4,10 +4,10 @@
 		Ingen registreret
 	</floater.string>
 	<floater.string name="bump">
-		[TIME]  [NAME] ramte dig
+		[TIME]  [NAME] puffede til dig
 	</floater.string>
 	<floater.string name="llpushobject">
-		[TIME]  [NAME] skubbede dig med et script
+		[TIME]  [NAME] skubbede til dig via et script
 	</floater.string>
 	<floater.string name="selected_object_collide">
 		[TIME]  [NAME] ramte dig med et objekt
diff --git a/indra/newview/skins/default/xui/da/floater_buy_object.xml b/indra/newview/skins/default/xui/da/floater_buy_object.xml
index f9e18dcf65..7eb4787139 100644
--- a/indra/newview/skins/default/xui/da/floater_buy_object.xml
+++ b/indra/newview/skins/default/xui/da/floater_buy_object.xml
@@ -1,26 +1,29 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater name="contents" title="KØB KOPI AF OBJEKT">
+	<floater.string name="title_buy_text">
+		Køb
+	</floater.string>
+	<floater.string name="title_buy_copy_text">
+		Køb en kopi af
+	</floater.string>
+	<floater.string name="no_copy_text">
+		(kopiér ej)
+	</floater.string>
+	<floater.string name="no_modify_text">
+		(ændre ej)
+	</floater.string>
+	<floater.string name="no_transfer_text">
+		(videregiv ej)
+	</floater.string>
 	<text name="contents_text">
 		Indeholder:
 	</text>
 	<text name="buy_text">
-		Køb for L$[AMOUNT] fra [NAME]?
+		Køb for L$[AMOUNT] af:
+	</text>
+	<text name="buy_name_text">
+		[NAME]?
 	</text>
-	<button label="Annullér" label_selected="Annullér" name="cancel_btn"/>
 	<button label="Køb" label_selected="Køb" name="buy_btn"/>
-	<string name="title_buy_text">
-		Køb
-	</string>
-	<string name="title_buy_copy_text">
-		Køb en kopi af
-	</string>
-	<string name="no_copy_text">
-		(kopiér ej)
-	</string>
-	<string name="no_modify_text">
-		(ændre ej)
-	</string>
-	<string name="no_transfer_text">
-		(videregiv ej)
-	</string>
+	<button label="Annullér" label_selected="Annullér" name="cancel_btn"/>
 </floater>
diff --git a/indra/newview/skins/default/xui/da/floater_event.xml b/indra/newview/skins/default/xui/da/floater_event.xml
index 58f2e555dd..a9eddaaf8d 100644
--- a/indra/newview/skins/default/xui/da/floater_event.xml
+++ b/indra/newview/skins/default/xui/da/floater_event.xml
@@ -1,40 +1,11 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater
- follows="all"
- height="400"
- can_resize="true"
- help_topic="event_details"
- label="Event"
- layout="topleft"
- name="Event"
- save_rect="true"
- save_visibility="false"
- title="EVENT DETAILS" 
- width="600">
-	<floater.string
-		name="loading_text">
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater can_resize="true" follows="all" height="400" help_topic="event_details" label="Event" layout="topleft" name="Event" save_rect="true" save_visibility="false" title="EVENT DETAILS" width="600">
+	<floater.string name="loading_text">
 		Henter...
 	</floater.string>
-    <floater.string
-     name="done_text">
-        Done
-    </floater.string>
-  <web_browser
-     trusted_content="true" 
-     follows="left|right|top|bottom"
-     layout="topleft"
-     left="10"
-     name="browser"
-     height="365"
-     width="580"
-     top="0"/>
-	<text
-	 follows="bottom|left"
-	 height="16"
-	 layout="topleft"
-	 left_delta="0"
-	 name="status_text"
-	 top_pad="10"
-	 width="150" />	 
+	<floater.string name="done_text">
+		Færdig
+	</floater.string>
+	<web_browser follows="left|right|top|bottom" height="365" layout="topleft" left="10" name="browser" top="0" trusted_content="true" width="580"/>
+	<text follows="bottom|left" height="16" layout="topleft" left_delta="0" name="status_text" top_pad="10" width="150"/>
 </floater>
-
diff --git a/indra/newview/skins/default/xui/da/floater_incoming_call.xml b/indra/newview/skins/default/xui/da/floater_incoming_call.xml
index 7a3c3e466a..dd8cb6f97a 100644
--- a/indra/newview/skins/default/xui/da/floater_incoming_call.xml
+++ b/indra/newview/skins/default/xui/da/floater_incoming_call.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="incoming call" title="UKENDT PERSON KALDER OP">
+<floater name="incoming call" title="Indgående opkald">
 	<floater.string name="lifetime">
 		5
 	</floater.string>
diff --git a/indra/newview/skins/default/xui/da/floater_pay.xml b/indra/newview/skins/default/xui/da/floater_pay.xml
index 5ebdd3f084..96ec106803 100644
--- a/indra/newview/skins/default/xui/da/floater_pay.xml
+++ b/indra/newview/skins/default/xui/da/floater_pay.xml
@@ -11,7 +11,7 @@
 	</text>
 	<icon name="icon_person" tool_tip="Person"/>
 	<text name="payee_name">
-		Test Name That Is Extremely Long To Check Clipping
+		Test navn der er meget lang for at checke afkortning
 	</text>
 	<button label="L$1" label_selected="L$1" name="fastpay 1"/>
 	<button label="L$5" label_selected="L$5" name="fastpay 5"/>
diff --git a/indra/newview/skins/default/xui/da/floater_tools.xml b/indra/newview/skins/default/xui/da/floater_tools.xml
index 6fda088b51..781adcd50b 100644
--- a/indra/newview/skins/default/xui/da/floater_tools.xml
+++ b/indra/newview/skins/default/xui/da/floater_tools.xml
@@ -168,13 +168,13 @@
 				Skaber:
 			</text>
 			<text name="Creator Name">
-				Thrax Linden
+				Mrs. Esbee Linden (esbee.linden)
 			</text>
 			<text name="Owner:">
 				Ejer:
 			</text>
 			<text name="Owner Name">
-				Thrax Linden
+				Mrs. Erica &quot;Moose&quot; Linden (erica.linden)
 			</text>
 			<text name="Group:">
 				Gruppe:
diff --git a/indra/newview/skins/default/xui/da/floater_voice_controls.xml b/indra/newview/skins/default/xui/da/floater_voice_controls.xml
index 4c956f13a7..69de696bf5 100644
--- a/indra/newview/skins/default/xui/da/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/da/floater_voice_controls.xml
@@ -19,10 +19,10 @@
 		<layout_panel name="my_panel">
 			<text name="user_text" value="Min avatar:"/>
 		</layout_panel>
-        <layout_panel name="leave_call_panel">
+		<layout_panel name="leave_call_panel">
 			<layout_stack name="voice_effect_and_leave_call_stack">
 				<layout_panel name="leave_call_btn_panel">
-					<button label="Forlad opkald" name="leave_call_btn"/>
+					<button label="Forlad samtale" name="leave_call_btn"/>
 				</layout_panel>
 			</layout_stack>
 		</layout_panel>
diff --git a/indra/newview/skins/default/xui/da/inspect_avatar.xml b/indra/newview/skins/default/xui/da/inspect_avatar.xml
index d4bc0813e5..f581210e1b 100644
--- a/indra/newview/skins/default/xui/da/inspect_avatar.xml
+++ b/indra/newview/skins/default/xui/da/inspect_avatar.xml
@@ -10,6 +10,11 @@
 	<string name="Details">
 		[SL_PROFILE]
 	</string>
+	<text name="user_name_small" value="Grumpity ProductEngine med et langt navn"/>
+	<text name="user_slid" value="james.linden"/>
+	<text name="user_details">
+		Dette er min second life beskrivelse og jeg synes den er rigtig god. Men af en eller ande grund er min beskrivelse meget lang fordi jeg taler en hel masse
+	</text>
 	<slider name="volume_slider" tool_tip="Stemme lydstyrke" value="0.5"/>
 	<button label="Tilføj ven" name="add_friend_btn"/>
 	<button label="IM" name="im_btn"/>
diff --git a/indra/newview/skins/default/xui/da/menu_viewer.xml b/indra/newview/skins/default/xui/da/menu_viewer.xml
index 73986372ce..cfc60c8f84 100644
--- a/indra/newview/skins/default/xui/da/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/da/menu_viewer.xml
@@ -83,6 +83,7 @@
 			<menu_item_call label="Tag kopi" name="Take Copy"/>
 			<menu_item_call label="Opdatér ændringer til beholdning" name="Save Object Back to My Inventory"/>
 			<menu_item_call label="Opdater ændringer i indhold til objekt" name="Save Object Back to Object Contents"/>
+			<menu_item_call label="Returnér objekt" name="Return Object back to Owner"/>
 		</menu>
 		<menu label="Scripts" name="Scripts">
 			<menu_item_call label="Genoversæt scripts (Mono)" name="Mono"/>
@@ -96,6 +97,7 @@
 			<menu_item_check label="Vælg kun egne objekter" name="Select Only My Objects"/>
 			<menu_item_check label="Vis kun flytbare objekter" name="Select Only Movable Objects"/>
 			<menu_item_check label="Vælg ved at omkrandse" name="Select By Surrounding"/>
+			<menu_item_check label="Vis selektions afgrænsning" name="Show Selection Outlines"/>
 			<menu_item_check label="Vis skjulte objekter" name="Show Hidden Selection"/>
 			<menu_item_check label="Vis lys-radius for valgte" name="Show Light Radius for Selection"/>
 			<menu_item_check label="Vis pejlelys for valgte" name="Show Selection Beam"/>
@@ -116,6 +118,7 @@
 		<menu_item_call label="Rapporter misbrug" name="Report Abuse"/>
 		<menu_item_call label="Rapportér fejl" name="Report Bug"/>
 		<menu_item_call label="Om [APP_NAME]" name="About Second Life"/>
+		<menu_item_check label="Aktiver tips" name="Enable Hints"/>
 	</menu>
 	<menu label="Avanceret" name="Advanced">
 		<menu_item_call label="Stop animering af min avatar" name="Stop Animating My Avatar"/>
@@ -262,7 +265,7 @@
 			<menu_item_call label="Test web browser" name="Web Browser Test"/>
 			<menu_item_call label="Print info om valgt objekt" name="Print Selected Object Info"/>
 			<menu_item_call label="Hukommelse statistik" name="Memory Stats"/>
-			<menu_item_check label="Dobbeltklik for auto-pilot" name="Double-Click Auto-Pilot"/>
+			<menu_item_check label="Dobbelt-klink Auto-pilot" name="Double-ClickAuto-Pilot"/>
 			<menu_item_check label="Dobeltklik for at teleportere" name="DoubleClick Teleport"/>
 			<menu_item_check label="Debug klik" name="Debug Clicks"/>
 			<menu_item_check label="Debug muse-hændelser" name="Debug Mouse Events"/>
@@ -274,6 +277,7 @@
 			<menu_item_call label="Gem til XML" name="Save to XML"/>
 			<menu_item_check label="Vis XUI navne" name="Show XUI Names"/>
 			<menu_item_call label="Send testbeskeder (IM)" name="Send Test IMs"/>
+			<menu_item_call label="Skriv navne-cache til disk" name="Flush Names Caches"/>
 		</menu>
 		<menu label="Avatar" name="Character">
 			<menu label="Grab Baked Texture" name="Grab Baked Texture">
diff --git a/indra/newview/skins/default/xui/da/notifications.xml b/indra/newview/skins/default/xui/da/notifications.xml
index a8849861cf..1ad0d06ca1 100644
--- a/indra/newview/skins/default/xui/da/notifications.xml
+++ b/indra/newview/skins/default/xui/da/notifications.xml
@@ -110,8 +110,8 @@ Vælg kun en genstand, og prøv igen.
 		<usetemplate name="okbutton" yestext="OK"/>
 	</notification>
 	<notification name="GrantModifyRights">
-		At give redigerings rettigheder til en anden beboer, giver dem mulighed for at ændre, slette eller tage ALLE genstande, du måtte have i verden. Vær MEGET forsigtig når uddeler denne tilladelse.
-Ønsker du at ændre rettigheder for [FIRST_NAME] [LAST_NAME]?
+		Tildeling af ændre-rettigheder til andre beboere, tillader dem at ændre, slette eller tage ETHVERT objekt du måtte have. Vær MEGET forsigtig ved tildeling af denne rettighed.
+Ønsker du at give ændre-rettgheder til [NAME]?
 		<usetemplate name="okcancelbuttons" notext="Nej" yestext="Ja"/>
 	</notification>
 	<notification name="GrantModifyRightsMultiple">
@@ -120,7 +120,7 @@ Vælg kun en genstand, og prøv igen.
 		<usetemplate name="okcancelbuttons" notext="Nej" yestext="Ja"/>
 	</notification>
 	<notification name="RevokeModifyRights">
-		Vil du tilbagekalde rettighederne for [FIRST_NAME] [LAST_NAME]?
+		Ønsker du at tilbagekalder ændre-rettigheder for [NAME]?
 		<usetemplate name="okcancelbuttons" notext="Nej" yestext="Ja"/>
 	</notification>
 	<notification name="RevokeModifyRightsMultiple">
@@ -202,14 +202,14 @@ Hvis media kun skal vises på en overflade, vælg &apos;Vælg overflade&apos; og
 Overskrider vedhæftnings begrænsning på [MAX_ATTACHMENTS] objekter. Tag venligst en anden vedhæftning af først.
 	</notification>
 	<notification name="MustHaveAccountToLogIn">
-		Ups! Noget var tomt.
-Du skal skrive både fornavn og efternavn på din figur.
+		Ups. Noget mangler at blive udfyldt.
+Du skal indtaste brugernavnet for din avatar.
 
-Du har brug for en konto for at logge ind i [SECOND_LIFE]. Vil du oprette en nu?
+Du skal bruge en konto for at benytte [SECOND_LIFE]. Ønsker du at oprette en konto nu?
 		<usetemplate name="okcancelbuttons" notext="Prøv igen" yestext="Lav ny konto"/>
 	</notification>
 	<notification name="InvalidCredentialFormat">
-		Du skal indtaste både fornavn og efternavn i din avatars brugernavn felt og derefter logge på igen.
+		Du skal indtaste enten dit brugernavn eller både dit fornavn og efternavn for din avatar i brugernavn feltet, derefter log på igen.
 	</notification>
 	<notification name="AddClassified">
 		Annoncer vil vises i &apos;Annoncer&apos; sektionen i søge biblioteket og på [http://secondlife.com/community/classifieds secondlife.com] i en uge.
@@ -390,13 +390,6 @@ Dette er typisk en midlertidig fejl. Venligst rediger og gem igen om et par minu
             [MESSAGE]
 		<usetemplate name="okcancelbuttons" notext="Afslut" yestext="Se PB &amp; Chat"/>
 	</notification>
-	<notification label="Tilføj ven" name="AddFriend">
-		Venner kan give tilladelse til at følge hinanden
-på Verdenskortet eller modtage status opdateringer.
-
-Tilbyd venskab til [NAME]?
-		<usetemplate name="okcancelbuttons" notext="Annullér" yestext="OK"/>
-	</notification>
 	<notification label="Tilføj ven" name="AddFriendWithMessage">
 		Venner kan give tilladelse til at følge hinanden
 på Verdenskortet eller modtage status opdateringer.
@@ -440,12 +433,22 @@ Tilbyd venskab til [NAME]?
 			<button name="Cancel" text="Annullér"/>
 		</form>
 	</notification>
+	<notification name="RemoveFromFriends">
+		Ønsker du at fjerne [NAME] fra din venneliste?
+	</notification>
 	<notification name="ConfirmItemDeleteHasLinks">
 		Mindst en af genstandene har lænkede genstande der peger på den. Hvis du sletter denne genstand, vil lænkninger ikke virke mere.  Det anbefales kraftigt at fjerne lænkninger først.
 
 Er du sikker på at du vil slette disse genstande?
 		<usetemplate name="okcancelbuttons" notext="Annullér" yestext="OK"/>
 	</notification>
+	<notification name="DeedLandToGroupWithContribution">
+		Ved at dedikere denne parcel, vil gruppen skulle have og vedblive med at have nok kreditter til brug af land.
+Dedikeringen vil inkludere samtidige bidrag til gruppen fra &apos;[NAME]&apos;.
+Købsprisen for dette land er ikke refunderet til ejeren. Hvis en dedikeret parvel sælges, vil salgsprisen blive delt ligeligt mellem gruppe medlemmerne.
+
+Dediker disse [AREA] m² land til gruppen &apos;[GROUP_NAME]&apos;?
+	</notification>
 	<notification name="ErrorMessage">
 		<usetemplate name="okbutton" yestext="OK"/>
 	</notification>
@@ -651,6 +654,46 @@ Chat og personlige beskeder vil blive skjult. Personlige beskeder vil få din &a
 	<notification name="UnFreezeUser">
 		Fjern frysning af beboeren med hvilken besked?
 	</notification>
+	<notification name="SetDisplayNameSuccess">
+		Hej [DISPLAY_NAME]!
+
+Præcist som i virkeligheden tager det et stykke tid at vænne sig til et nyt navn. Det kan tage flere dage for [http://wiki.secondlife.com/wiki/Setting_your_display_name your name to update] i objekter, scripts, søgninger m.v.
+	</notification>
+	<notification name="SetDisplayNameBlocked">
+		Beklager, du kan ikke ændre dit visningsnavn. Hvis du mener dette skyldes en fejl, kontakt venligst support.
+	</notification>
+	<notification name="SetDisplayNameFailedLength">
+		Beklager, mavnet er for langt. Visningsnavne kan ikke indholde mere end [LENGTH] karakterer.
+
+Prøv venligst med et kortere navn.
+	</notification>
+	<notification name="SetDisplayNameFailedGeneric">
+		Beklager, vi kunne ikke sætte dit visningsnavn.  Prøv venligst igen senere.
+	</notification>
+	<notification name="SetDisplayNameMismatch">
+		Visningsnavnene du angav matcher ikke. Prøv at taste ind igen.
+	</notification>
+	<notification name="AgentDisplayNameUpdateThresholdExceeded">
+		Beklager, du er nødt til at vente længere, inden du kan ændre visningsnavn.
+
+Se mere under http://wiki.secondlife.com/wiki/Setting_your_display_name
+
+Prøv venligst igen senere.
+	</notification>
+	<notification name="AgentDisplayNameSetBlocked">
+		Beklager, vi kunne ikke sætte dit valgte navn da det indholder et ikke tilladt ord.
+
+ Prøv med et andet navn.
+	</notification>
+	<notification name="AgentDisplayNameSetInvalidUnicode">
+		Visningsnavnet du prøver at angive indeholder ugyldige karakterer.
+	</notification>
+	<notification name="AgentDisplayNameSetOnlyPunctuation">
+		Dit vinsningsnavn skal indeholde andre bogstaver end tegnsætningstegn.
+	</notification>
+	<notification name="DisplayNameUpdate">
+		[OLD_NAME] ([SLID]) er nu kendt som [NEW_NAME].
+	</notification>
 	<notification name="OfferTeleport">
 		<form name="form">
 			<input name="message">
@@ -931,10 +974,10 @@ Henvis til dette fra en hjemmeside for at give andre nem adgang til denne lokati
 		Erstattet manglende tøj/kropsdele med standard.
 	</notification>
 	<notification name="FriendOnline">
-		[NAME] er Online
+		[NAME] er logget på
 	</notification>
 	<notification name="FriendOffline">
-		[NAME] er Offline
+		[NAME] er logget af
 	</notification>
 	<notification name="AddSelfFriend">
 		Selvom du nok er meget sød, kan du ikke tilføje dig selv som ven.
@@ -1073,7 +1116,10 @@ Prøv at vælge mindre stykker land.
 	<notification name="SystemMessage">
 		[MESSAGE]
 	</notification>
-	<notification name="PaymentRecived">
+	<notification name="PaymentReceived">
+		[MESSAGE]
+	</notification>
+	<notification name="PaymentSent">
 		[MESSAGE]
 	</notification>
 	<notification name="EventNotification">
@@ -1082,7 +1128,7 @@ Prøv at vælge mindre stykker land.
 [NAME]
 [DATE]
 		<form name="form">
-			<button name="Details" text="Beskrivelse"/>
+			<button name="Details" text="Detaljer"/>
 			<button name="Cancel" text="Annullér"/>
 		</form>
 	</notification>
@@ -1117,7 +1163,7 @@ Prøv venligst at geninstallere plugin eller kontakt leverandøren hvis probleme
 		De genstande du ejer på det valgte stykke land er blevet returneret til din beholdning.
 	</notification>
 	<notification name="OtherObjectsReturned">
-		Genstandene på det valgte stykke land der er ejet af [NAME] er blevet returneret til hans eller hendes beholdning.
+		Objekterne på den valgte parcel, ejet af [NAME], er blevet returneret til vedkommendes beholdning.
 	</notification>
 	<notification name="OtherObjectsReturned2">
 		Objekterne i den valgte parcel, ejet af beboeren &apos;[NAME]&apos;, er blevet returneret til deres ejer.
@@ -1241,7 +1287,7 @@ Prøv igen om lidt.
 		No valid parcel could be found.
 	</notification>
 	<notification name="ObjectGiveItem">
-		Et objekt med navnet [OBJECTFROMNAME] ejet af [NAME_SLURL] har givet dig denne/dette [OBJECTTYPE]:
+		Et object med navnet &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt; ejet af [NAME_SLURL] har givet dig denne [OBJECTTYPE]:
 [ITEM_SLURL]
 		<form name="form">
 			<button name="Keep" text="Behold"/>
@@ -1305,6 +1351,11 @@ Prøv igen om lidt.
 	<notification name="FriendshipOffered">
 		Du har tilbudt venskab til [TO_NAME]
 	</notification>
+	<notification name="OfferFriendshipNoMessage">
+		[NAME_SLURL] tilbyder venskab.
+
+(Som udgangspunkt, vil du være i stand til at se den andens online status)
+	</notification>
 	<notification name="FriendshipAccepted">
 		[NAME] accepterede dit tilbud om venskab.
 	</notification>
@@ -1334,11 +1385,11 @@ Hvis du ikke forlader regionen, vil du blive logget af.
 Hvis du ikke forlader regionen, vil du blive logget af.
 	</notification>
 	<notification name="LoadWebPage">
-		Indlæs internetside [URL]?
+		Indlæas websiden [URL]?
 
 [MESSAGE]
 
-Fra genstand: [OBJECTNAME], ejer: [NAME]?
+Fra objekt: &lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;, ejer: [NAME]?
 		<form name="form">
 			<button name="Gotopage" text="Gå til side"/>
 			<button name="Cancel" text="Afbryd"/>
@@ -1354,9 +1405,10 @@ Fra genstand: [OBJECTNAME], ejer: [NAME]?
 		Den genstand du prøver at tage på benytter en funktion din klient ikke kan forstå. Upgradér venligst din version af [APP_NAME] for at kunne tage denne genstand på.
 	</notification>
 	<notification name="ScriptQuestion">
-		&apos;[OBJECTNAME]&apos;, en genstand, ejet af &apos;[NAME]&apos;, vil gerne:
- [QUESTIONS]
-Er det iorden?
+		&apos;&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;&apos;, et objekt ved ejet af &apos;[NAME]&apos;, ønsker at:
+
+[QUESTIONS]
+Er dette OK?
 		<form name="form">
 			<button name="Yes" text="Ja"/>
 			<button name="No" text="Nej"/>
@@ -1364,12 +1416,12 @@ Er det iorden?
 		</form>
 	</notification>
 	<notification name="ScriptQuestionCaution">
-		Et objekt med navnet &apos;[OBJECTNAME]&apos;, ejet af &apos;[NAME]&apos;, ønsker at:
+		Et objeckt med navn &apos;&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;&apos;, ejet af  &apos;[NAME]&apos; ønsker at:
 
 [QUESTIONS]
-Hvis du ikke stoler på dette objekt og dets skaber, bør du afvise denne forespørgsel.
+Hvis du ikke stoler på dette objekt og dets skaber, bør du afvise dette ønske.
 
-Tillad denne anmodning?
+Opfyld dette ønske?
 		<form name="form">
 			<button name="Grant" text="Imødekom"/>
 			<button name="Deny" text="Afvis"/>
@@ -1384,7 +1436,7 @@ Tillad denne anmodning?
 		</form>
 	</notification>
 	<notification name="ScriptDialogGroup">
-		[GROUPNAME]&apos;s &apos;[TITLE]&apos;
+		[GROUPNAME]&apos;s &apos;&lt;nolink&gt;[TITLE]&lt;/nolink&gt;&apos;
 [MESSAGE]
 		<form name="form">
 			<button name="Ignore" text="Ignorér"/>
@@ -1421,13 +1473,13 @@ Klik på Acceptér for at deltage eller Afvis for at afvise invitationen. Klik p
 		</form>
 	</notification>
 	<notification name="AutoUnmuteByIM">
-		[NAME] fik tilsendt en personlig besked og er dermed automatisk ikke mere blokeret.
+		[NAME] har fået sendt en besked og blokering er derfor automatisk blevet fjernet.
 	</notification>
 	<notification name="AutoUnmuteByMoney">
-		[NAME] blev givet penge og er dermed automatisk ikke mere blokeret.
+		[NAME] har fået givet penge og blokering er derfor automatisk blevet fjernet.
 	</notification>
 	<notification name="AutoUnmuteByInventory">
-		[NAME] blev tilbudt en genstand og er dermed automatisk ikke mere blokeret.
+		[NAME] er blevet tilbud noget fra beholdning og blokering er derfor automatisk blevet fjernet.
 	</notification>
 	<notification name="VoiceInviteGroup">
 		[NAME] har has sluttet sig til stemme-chaten i gruppen [GROUP].
@@ -1655,6 +1707,37 @@ vil have lyden slukket - selv efter de har forladt kaldet.
 Sluk for alles lyd?
 		<usetemplate ignoretext="Bekræft før jeg slukker for alle deltageres lyd i gruppe-kald" name="okcancelignore" notext="Annullér" yestext="Ok"/>
 	</notification>
+	<notification label="Chat" name="HintChat">
+		For at deltage i samtalen tast tekst ind i chat feltet nedenfor.
+	</notification>
+	<notification label="Stå op" name="HintSit">
+		For at rejse dig op og forlad siddeposition, tryk på &quot;Stå op&quot; knappen.
+	</notification>
+	<notification label="Undersøg verden" name="HintDestinationGuide">
+		Destinationsguiden indeholder tusinder af nye steder der kan opleves. Vælg venligst et sted og vælg Teleport for at komme derhen.
+	</notification>
+	<notification label="Side panel" name="HintSidePanel">
+		Få hurtig tilgang til din beholdning, sæt, profiler og andet i dette side panel.
+	</notification>
+	<notification label="Flyt" name="HintMove">
+		For at gå eller løbe, åben Flyt panelet for neden og brug pilene til at navigere. Du kan også bruge pile-tasterne på dit tastatur.
+	</notification>
+	<notification label="Visningsnavn" name="HintDisplayName">
+		Angiv dit konfigurérbare visningsnavn her. Dette er i tillæg til dit unikke brugernavn, som ikke kan ændres. Du kan ændre hvordan du ser andre beboeres navne i dine indstillinger.
+	</notification>
+	<notification label="Beholdning" name="HintInventory">
+		Undersøg din beholdning for at finde ting. Nyeste genstand findes lettes under fanen &quot;Nye ting&quot;
+	</notification>
+	<notification label="Der er kommet Linden Dollars" name="HintLindenDollar">
+		Her er din nuværende balance af L$. Klik på Køb L$ for at købe flere Linden dollars.
+	</notification>
+	<notification name="PopupAttempt">
+		En pop-up blev hindret i at blive vist.
+		<form name="form">
+			<ignore name="ignore" text="Tillad alle pop-ups"/>
+			<button name="open" text="Åben pop-up vindue"/>
+		</form>
+	</notification>
 	<global name="UnsupportedGLRequirements">
 		Det ser ikke ud til at din hardware opfylder minimumskravene til [APP_NAME]. [APP_NAME] kræver et OpenGL grafikkort som understøter &apos;multitexture&apos;. Check eventuelt om du har de nyeste drivere for grafikkortet, og de nyeste service-packs og patches til dit operativsystem.
 
diff --git a/indra/newview/skins/default/xui/da/panel_edit_profile.xml b/indra/newview/skins/default/xui/da/panel_edit_profile.xml
index 27a6000419..80b20f15e9 100644
--- a/indra/newview/skins/default/xui/da/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/da/panel_edit_profile.xml
@@ -23,6 +23,14 @@
 	<scroll_container name="profile_scroll">
 		<panel name="scroll_content_panel">
 			<panel name="data_panel">
+				<text name="display_name_label" value="Visningsnavn:"/>
+				<text name="solo_username_label" value="Bugernavn:"/>
+				<button name="set_name" tool_tip="Sæt visningsnavn"/>
+				<text name="solo_user_name" value="Hamilton Hitchings"/>
+				<text name="user_name" value="Hamilton Hitchings"/>
+				<text name="user_name_small" value="Hamilton Hitchings"/>
+				<text name="user_label" value="Brugernavn:"/>
+				<text name="user_slid" value="hamilton.linden"/>
 				<panel name="lifes_images_panel">
 					<icon label="" name="2nd_life_edit_icon" tool_tip="Klik for at vælge et billede"/>
 				</panel>
@@ -39,7 +47,7 @@
 				<text name="my_account_link" value="[[URL] Go to My Dashboard]"/>
 				<text name="title_partner_text" value="Min partner:"/>
 				<panel name="partner_data_panel">
-					<name_box initial_value="(henter)" name="partner_text"/>
+					<text initial_value="(henter)" name="partner_text"/>
 				</panel>
 				<text name="partner_edit_link" value="[[URL] Edit]"/>
 			</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_group_land_money.xml b/indra/newview/skins/default/xui/da/panel_group_land_money.xml
index efad4d0c34..49d415e515 100644
--- a/indra/newview/skins/default/xui/da/panel_group_land_money.xml
+++ b/indra/newview/skins/default/xui/da/panel_group_land_money.xml
@@ -24,6 +24,7 @@
 			<scroll_list.columns label="Region" name="location"/>
 			<scroll_list.columns label="Type" name="type"/>
 			<scroll_list.columns label="Areal" name="area"/>
+			<scroll_list.columns label="Skjult" name="hidden"/>
 		</scroll_list>
 		<text name="total_contributed_land_label">
 			Totalt bidrag:
diff --git a/indra/newview/skins/default/xui/da/panel_login.xml b/indra/newview/skins/default/xui/da/panel_login.xml
index d4bf9a7d78..268f138185 100644
--- a/indra/newview/skins/default/xui/da/panel_login.xml
+++ b/indra/newview/skins/default/xui/da/panel_login.xml
@@ -14,7 +14,7 @@
 			<text name="username_text">
 				Brugernavn:
 			</text>
-			<line_editor label="Brugernavn" name="username_edit" tool_tip="[SECOND_LIFE] Brugernavn"/>
+			<line_editor label="bobsmith12 eller Steller Sunshine" name="username_edit" tool_tip="Det brugernavn du valgte da du registrerede, som f.eks. bobsmith12 eller Steller Sunshine"/>
 			<text name="password_text">
 				Password:
 			</text>
@@ -34,7 +34,7 @@
 				Opret bruger
 			</text>
 			<text name="forgot_password_text">
-				Glemt navn eller password?
+				Har du glemt brugernavn eller password?
 			</text>
 			<text name="login_help">
 				Hjælp til login
diff --git a/indra/newview/skins/default/xui/da/panel_place_profile.xml b/indra/newview/skins/default/xui/da/panel_place_profile.xml
index 05ef22328f..8dd0fb2d21 100644
--- a/indra/newview/skins/default/xui/da/panel_place_profile.xml
+++ b/indra/newview/skins/default/xui/da/panel_place_profile.xml
@@ -76,7 +76,7 @@
 						<text name="region_rating_label" value="Rating:"/>
 						<text name="region_rating" value="Voksent"/>
 						<text name="region_owner_label" value="Ejer:"/>
-						<text name="region_owner" value="moose Van Moose"/>
+						<text name="region_owner" value="moose Van Moose extra long name moose"/>
 						<text name="region_group_label" value="Gruppe:"/>
 						<text name="region_group">
 							The Mighty Moose of mooseville soundvillemoose
@@ -89,6 +89,7 @@
 						<text name="estate_name_label" value="Estate:"/>
 						<text name="estate_rating_label" value="Rating:"/>
 						<text name="estate_owner_label" value="Ejer:"/>
+						<text name="estate_owner" value="Tester brugernavn længde med langt navn"/>
 						<text name="covenant_label" value="Regler:"/>
 					</panel>
 				</accordion_tab>
diff --git a/indra/newview/skins/default/xui/da/panel_preferences_general.xml b/indra/newview/skins/default/xui/da/panel_preferences_general.xml
index 6a85cf4aae..9c0cb583af 100644
--- a/indra/newview/skins/default/xui/da/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/da/panel_preferences_general.xml
@@ -42,9 +42,10 @@
 		<radio_item label="Vis" name="radio2" value="1"/>
 		<radio_item label="Vis et øjeblik" name="radio3" value="2"/>
 	</radio_group>
-	<check_box label="Vis mit navn" name="show_my_name_checkbox1"/>
-	<check_box initial_value="true" label="Små avatar navne" name="small_avatar_names_checkbox"/>
-	<check_box label="Gruppetitler" name="show_all_title_checkbox1"/>
+	<check_box label="Mit navn" name="show_my_name_checkbox1"/>
+	<check_box label="Brugernavne" name="show_slids" tool_tip="Vis brugernavne, som bobsmith123"/>
+	<check_box label="Gruppe titler" name="show_all_title_checkbox1" tool_tip="Vis hgruppetitler, som f.eks. administrator eller medlem"/>
+	<check_box label="Fremhæv venner" name="show_friends" tool_tip="Fremhæv navne-tags for dine venner"/>
 	<text name="effects_color_textbox">
 		Farve til mine effekter:
 	</text>
@@ -59,6 +60,7 @@
 		<combo_box.item label="30 minutter" name="item3"/>
 		<combo_box.item label="aldrig" name="item4"/>
 	</combo_box>
+	<check_box label="Vis visningsnavne" name="display_names_check" tool_tip="Vælg for at bruge visningsnavne i chat, IM, navne-tags m.v."/>
 	<text name="text_box3">
 		Optaget autosvar:
 	</text>
diff --git a/indra/newview/skins/default/xui/da/panel_preferences_setup.xml b/indra/newview/skins/default/xui/da/panel_preferences_setup.xml
index 38bc9c0a2a..553d21d597 100644
--- a/indra/newview/skins/default/xui/da/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/da/panel_preferences_setup.xml
@@ -1,6 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="Opsætning" name="Input panel">
-	<button label="Andre enheder" name="joystick_setup_button"/>
 	<text name="Mouselook:">
 		Første person:
 	</text>
@@ -37,10 +36,11 @@
 		<radio_item label="Benyt min browser(IE, Firefox, Safari)" name="external" tool_tip="Brug systemets standard web browser til hjælp, web links, m.v. Ikke anbefalet hvis du kører i fuld-skærm." value="1"/>
 		<radio_item label="Benyt den indbyggede browser" name="internal" tool_tip="Brug den indbyggede web browser til hjælp, web links m.v. Denne browser åbner et nyt vindue i [APP_NAME]." value=""/>
 	</radio_group>
-	<check_box label="Aktivér plugins" name="browser_plugins_enabled"/>
-	<check_box label="Acceptér cookies" name="cookies_enabled"/>
-	<check_box label="Aktivér Javascript" name="browser_javascript_enabled"/>
-	<check_box label="Aktivér web proxy" name="web_proxy_enabled"/>
+	<check_box initial_value="true" label="Aktivér plugins" name="browser_plugins_enabled"/>
+	<check_box initial_value="true" label="Acceptér cookies" name="cookies_enabled"/>
+	<check_box initial_value="true" label="Aktivér Javascript" name="browser_javascript_enabled"/>
+	<check_box initial_value="fra" label="Tilad media browser pop-ups" name="media_popup_enabled"/>
+	<check_box initial_value="false" label="Aktivér web proxy" name="web_proxy_enabled"/>
 	<text name="Proxy location">
 		Proxy placering:
 	</text>
diff --git a/indra/newview/skins/default/xui/da/panel_profile_view.xml b/indra/newview/skins/default/xui/da/panel_profile_view.xml
index 23b9d3ba83..5e0a51eb28 100644
--- a/indra/newview/skins/default/xui/da/panel_profile_view.xml
+++ b/indra/newview/skins/default/xui/da/panel_profile_view.xml
@@ -6,8 +6,14 @@
 	<string name="status_offline">
 		Offline
 	</string>
-	<text_editor name="user_name" value="(Henter...)"/>
+	<text name="display_name_label" value="Visningsnavn:"/>
+	<text name="solo_username_label" value="Brugernavn:"/>
 	<text name="status" value="Online"/>
+	<text name="user_name_small" value="Se på mig med dette enormt ekstremt super lange navn"/>
+	<text name="user_name" value="Jack Linden"/>
+	<button name="copy_to_clipboard" tool_tip="Kopiér til udskriftsholder"/>
+	<text name="user_label" value="Brugernavn:"/>
+	<text name="user_slid" value="jack.linden"/>
 	<tab_container name="tabs">
 		<panel label="PROFIL" name="panel_profile"/>
 		<panel label="FAVORITTER" name="panel_picks"/>
diff --git a/indra/newview/skins/default/xui/da/role_actions.xml b/indra/newview/skins/default/xui/da/role_actions.xml
index 5ec90a759a..7e581200a5 100644
--- a/indra/newview/skins/default/xui/da/role_actions.xml
+++ b/indra/newview/skins/default/xui/da/role_actions.xml
@@ -1,76 +1,73 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <role_actions>
 	<action_set description="Disse rettigheder inkluderer adgang til at tilføje og fjerne gruppe medlemmer og tillade nye medlemmer at melde sig ind uden invitation" name="Membership">
-		<action description="Invitér personer til denne gruppe" longdescription="Invitér personer til denne gruppe via &apos;Invitér ny person...&apos; knappen i fanen: medlemmer &amp; roller &gt; underfanen: medlemmer" name="member invite"/>
-		<action description="Fjern medlemmer fra denne gruppe" longdescription="Fjern medlemmer i denne gruppe via &apos;Fjern fra gruppe&apos; knappen i fanen: medlemmer &amp; roller &gt; underfanen: medlemmer. En ejer kan fjerne alle undtagen en anden ejer. Hvis du ikke er en ejer, kan et medlem kun fjernes fra gruppen hvis, og kun hvis, medlemmet kun findes i Alle rollen, og ikke i andre roller. for at fjerne medlemmer fra roller, skal du have rettigheden &apos;Fjern medlemmer fra roller" name="member eject"/>
-		<action description="Åben eller luk for &apos;fri tilmelding&apos; og ændre &apos;tilmeldingsgebyr&apos;" longdescription="Åben for &apos;fri tilmelding&apos; så alle kan blive medlem af gruppen, eller luk for &apos;fri tilmelding&apos; så kun inveterede kan blive medlem. ændre &apos;tilmeldingsgebyr&apos; i gruppe opsætningsbilledet sektionen i Generelt fanen" name="member options"/>
+		<action description="Invitér personer til denne gruppe" longdescription="Invitér personer til denne gruppe via &apos;Invitér ny person...&apos; knappen i fanen: medlemmer &amp; roller &gt; underfanen: medlemmer" name="member invite" value="1"/>
+		<action description="Fjern medlemmer fra denne gruppe" longdescription="Fjern medlemmer i denne gruppe via &apos;Fjern fra gruppe&apos; knappen i fanen: medlemmer &amp; roller &gt; underfanen: medlemmer. En ejer kan fjerne alle undtagen en anden ejer. Hvis du ikke er en ejer, kan et medlem kun fjernes fra gruppen hvis, og kun hvis, medlemmet kun findes i Alle rollen, og ikke i andre roller. for at fjerne medlemmer fra roller, skal du have rettigheden &apos;Fjern medlemmer fra roller" name="member eject" value="2"/>
+		<action description="Åben eller luk for &apos;fri tilmelding&apos; og ændre &apos;tilmeldingsgebyr&apos;" longdescription="Åben for &apos;fri tilmelding&apos; så alle kan blive medlem af gruppen, eller luk for &apos;fri tilmelding&apos; så kun inveterede kan blive medlem. ændre &apos;tilmeldingsgebyr&apos; i gruppe opsætningsbilledet sektionen i Generelt fanen" name="member options" value="3"/>
 	</action_set>
 	<action_set description="Disse rettigheder inkluderer adgang til at tilføje, fjerne og ændre gruppe-roller, tilføje og fjerne medlemmer i roller, og give rettigheder til roller" name="Roles">
-		<action description="Opret nye roller" longdescription="Opret nye roller i fanen: Medlemmer &amp; roller &gt; under-fanen: Roller." name="role create"/>
-		<action description="Slet roller" longdescription="Slet roller i roller i fanen: Medlemmer &amp; roller &gt; under-fanen: Roller." name="role delete"/>
-		<action description="Ændre rolle navne, titler, beskrivelser og angivelse af om rollemedlemmer kan ses af andre udenfor gruppen" longdescription="Ændre rolle navne, titler, beskrivelser og angivelse af om rollemedlemmer kan ses af andre udenfor gruppen. Dette håndteres i bunden af fanen:: Medlemmer &amp; roller &gt; under-fanen: Roller efter at have valgt en rolle." name="role properties"/>
-		<action description="Tildel andre samme roller som dig selv" longdescription="Tildel andre medlemmer til roller i Tildelte roller sektionen på fanen: Medlemmer &amp; roller &gt; under-fanen: Medlemmer. Et medlem med denne rettighed kan kun tildele andre medlemmer en rolle som tildeleren allerede selv har." name="role assign member limited"/>
-		<action description="Tildele medlemmer enhver rolle" longdescription="Tildel andre medlemmer til en hvilken som helst rolle i Tildelte roller sektionen på fanen: Medlemmer &amp; roller &gt; under-fanen: Medlemmer. *ADVARSEL* Ethvert medlem i en rolle med denne rettighed kan tildele sig selv - og enhver anden - roller som giver dem flere rettigheder end de havde tidligere, og dermed potentielt få næsten samme magt som ejer. Vær sikker på at vide hvad du ør inden du tildeler denne rettighed." name="role assign member"/>
-		<action description="Fjern medlemmer fra roller" longdescription="Fjern medlemmer fra roller i in Tildelte roller sektionen på fanen: Medlemmer &amp; roller &gt; under-fanen: Medlemmer. Ejere kan ikke fjernes." name="role remove member"/>
-		<action description="Tildel og fjern rettigheder for roller" longdescription="Tildel og fjern rettigheder for roller i tilladte rettigheder sektionen på fanen: Medlemmer &amp; roller &gt; under-fanen: Roller. *ADVARSEL* Ethvert medlem i en rolle med denne rettighed kan tildele sig selv - og enhver anden - rettigheder som giver dem flere rettigheder end de havde tidligere, og dermed potentielt få næsten samme magt som ejer. Vær sikker på at vide hvad du gør inden du tildeler denne rettighed." name="role change actions"/>
+		<action description="Opret nye roller" longdescription="Opret nye roller i fanen: Medlemmer &amp; roller &gt; under-fanen: Roller." name="role create" value="4"/>
+		<action description="Slet roller" longdescription="Slet roller i roller i fanen: Medlemmer &amp; roller &gt; under-fanen: Roller." name="role delete" value="5"/>
+		<action description="Ændre rolle navne, titler, beskrivelser og angivelse af om rollemedlemmer kan ses af andre udenfor gruppen" longdescription="Ændre rolle navne, titler, beskrivelser og angivelse af om rollemedlemmer kan ses af andre udenfor gruppen. Dette håndteres i bunden af fanen:: Medlemmer &amp; roller &gt; under-fanen: Roller efter at have valgt en rolle." name="role properties" value="6"/>
+		<action description="Tildel andre samme roller som dig selv" longdescription="Tildel andre medlemmer til roller i Tildelte roller sektionen på fanen: Medlemmer &amp; roller &gt; under-fanen: Medlemmer. Et medlem med denne rettighed kan kun tildele andre medlemmer en rolle som tildeleren allerede selv har." name="role assign member limited" value="7"/>
+		<action description="Tildele medlemmer enhver rolle" longdescription="Tildel andre medlemmer til en hvilken som helst rolle i Tildelte roller sektionen på fanen: Medlemmer &amp; roller &gt; under-fanen: Medlemmer. *ADVARSEL* Ethvert medlem i en rolle med denne rettighed kan tildele sig selv - og enhver anden - roller som giver dem flere rettigheder end de havde tidligere, og dermed potentielt få næsten samme magt som ejer. Vær sikker på at vide hvad du ør inden du tildeler denne rettighed." name="role assign member" value="8"/>
+		<action description="Fjern medlemmer fra roller" longdescription="Fjern medlemmer fra roller i in Tildelte roller sektionen på fanen: Medlemmer &amp; roller &gt; under-fanen: Medlemmer. Ejere kan ikke fjernes." name="role remove member" value="9"/>
+		<action description="Tildel og fjern rettigheder for roller" longdescription="Tildel og fjern rettigheder for roller i tilladte rettigheder sektionen på fanen: Medlemmer &amp; roller &gt; under-fanen: Roller. *ADVARSEL* Ethvert medlem i en rolle med denne rettighed kan tildele sig selv - og enhver anden - rettigheder som giver dem flere rettigheder end de havde tidligere, og dermed potentielt få næsten samme magt som ejer. Vær sikker på at vide hvad du gør inden du tildeler denne rettighed." name="role change actions" value="10"/>
 	</action_set>
 	<action_set description="Disse rettigheder inkluderer adgang til at ændre denne gruppes identitetsoplysninger, som f.eks. om gruppen kan ses af andre, gruppens fundats og billede." name="Group Identity">
-		<action description="Ændre fundats, billede og &apos;Vis i søgning&apos;" longdescription="Ændre fundats og &apos;Vis i søgning&apos;. Dette gøres under fanen Generelt." name="group change identity"/>
+		<action description="Ændre fundats, billede og &apos;Vis i søgning&apos;" longdescription="Ændre fundats og &apos;Vis i søgning&apos;. Dette gøres under fanen Generelt." name="group change identity" value="11"/>
 	</action_set>
 	<action_set description="Disse rettigheder inkluderer adgang til dedikere, ændre og sælge land fra denne gruppes besiddelser. For at åbne &apos;Om land...&apos; vinduet, højre-klik på jorden og vælg &apos;Om land...&apos;, eller klik på &apos;Om land...&apos; i &apos;Verden&apos; menuen." name="Parcel Management">
-		<action description="Dedikér eller køb land til gruppen" longdescription="Dedikér eller køb land til gruppen. Dette gøres i fanen Generelt i &apos;Om land...&apos;." name="land deed"/>
-		<action description="Forlad land og overgiv det til guvernør Linden" longdescription="Forlad land og overgiv det til guvernør Linden. *ADVARSEL* Ethvert medlem med en rolle med denne rettighed kan overdrage gruppe-ejet land via fanen Generelt i &apos;Om land...&apos; til Lindens ejerskab uden salg! Vær sikker på at vide hvad du ør inden du tildeler denne rettighed." name="land release"/>
-		<action description="Sæt land til salg" longdescription="Sæt land til salg. *ADVARSEL* Ethvert medlem med en rolle med denne rettighed kan sælge gruppe-ejet land via fanen Generelt i &apos;Om land...&apos;! Vær sikker på at vide hvad du ør inden du tildeler denne rettighed." name="land set sale info"/>
-		<action description="Opdel og saml parceller" longdescription="Opdel og saml parceller. Dette gøres ved at højreklikke på jorden og vælge &apos;Redigér terræn&apos;" name="land divide join"/>
+		<action description="Dedikér eller køb land til gruppen" longdescription="Dedikér eller køb land til gruppen. Dette gøres i fanen Generelt i &apos;Om land...&apos;." name="land deed" value="12"/>
+		<action description="Forlad land og overgiv det til guvernør Linden" longdescription="Forlad land og overgiv det til guvernør Linden. *ADVARSEL* Ethvert medlem med en rolle med denne rettighed kan overdrage gruppe-ejet land via fanen Generelt i &apos;Om land...&apos; til Lindens ejerskab uden salg! Vær sikker på at vide hvad du ør inden du tildeler denne rettighed." name="land release" value="13"/>
+		<action description="Sæt land til salg" longdescription="Sæt land til salg. *ADVARSEL* Ethvert medlem med en rolle med denne rettighed kan sælge gruppe-ejet land via fanen Generelt i &apos;Om land...&apos;! Vær sikker på at vide hvad du ør inden du tildeler denne rettighed." name="land set sale info" value="14"/>
+		<action description="Opdel og saml parceller" longdescription="Opdel og saml parceller. Dette gøres ved at højreklikke på jorden og vælge &apos;Redigér terræn&apos;" name="land divide join" value="15"/>
 	</action_set>
 	<action_set description="Disse rettigheder inkluderer adgang til at ændre parcel navn og en række parametre om f.eks. landingspunkt, teleports m.v.." name="Parcel Identity">
-		<action description="Angive om sted skal vises i &apos;vis i Søg steder&apos; og angivelse af kategori" longdescription="Angive om sted skal vises i &apos;vis i Søg steder&apos; og angivelse af kategori i &apos;Om land...&apos; &gt; Indstillinger fanen." name="land find places"/>
-		<action description="Ændre parcel navn, beskrivelse, og &apos;Vis i Søg&apos; opsætning" longdescription="Ændre parcel navn, beskrivelse, og &apos;Vis i Søg&apos; opsætning. Dette håndteres i &apos;Om land...&apos;&gt; Opsætning fanen." name="land change identity"/>
-		<action description="Sæt landingspunkt og teleport muligheder" longdescription="På en gruppe-ejet parcel kan medlemmer, med en rolle med denne rettighed, sætte landingspunktet og dermed angive hvor indkommende teleporte skal ankomme og desuden angive dealjer om teleporte. Dette håndteres i &apos;Om land...&apos;&gt; Opsætning fanen." name="land set landing point"/>
+		<action description="Angive om sted skal vises i &apos;vis i Søg steder&apos; og angivelse af kategori" longdescription="Angive om sted skal vises i &apos;vis i Søg steder&apos; og angivelse af kategori i &apos;Om land...&apos; &gt; Indstillinger fanen." name="land find places" value="17"/>
+		<action description="Ændre parcel navn, beskrivelse, og &apos;Vis i Søg&apos; opsætning" longdescription="Ændre parcel navn, beskrivelse, og &apos;Vis i Søg&apos; opsætning. Dette håndteres i &apos;Om land...&apos;&gt; Opsætning fanen." name="land change identity" value="18"/>
+		<action description="Sæt landingspunkt og teleport muligheder" longdescription="På en gruppe-ejet parcel kan medlemmer, med en rolle med denne rettighed, sætte landingspunktet og dermed angive hvor indkommende teleporte skal ankomme og desuden angive dealjer om teleporte. Dette håndteres i &apos;Om land...&apos;&gt; Opsætning fanen." name="land set landing point" value="19"/>
 	</action_set>
 	<action_set description="Disse rettigheder inkluderer adgang til at opsætte parcel indstillinger som f.eks. &apos;Lave objekter&apos;, &apos;Redigere terræn&apos;, samt musik og media indstillinger." name="Parcel Settings">
-		<action description="Ændre musik og media indstillinger" longdescription="Ændre oplysninger om streaming musik og film i &apos;Om land...&apos; &gt; Media fanen." name="land change media"/>
-		<action description="Ændre rettighed til &apos;Redigere terræn&apos;" longdescription="Ændre rettighed til &apos;Redigere terræn&apos;. *ADVARSEL*: Redigere terræn&apos; kan give alle og enhver ret til at ændre terræn og opsætte og flytte Linden planter. Vær sikker på at vide hvad du ør inden du tildeler denne rettighed." name="land edit"/>
-		<action description="Ændre diverse andre indstillinger i &apos;Om land...&apos;&gt; indstillinger fanen" longdescription="Giv adgang til at ændre &apos;Sikker (ingen skade)&apos;, &apos;Flyve&apos;, og tillad andre beboere at: &apos;Lave objekter&apos;, &apos;Redigere terræn&apos;, &apos;Lave landemærker&apos;, og &apos;Køre scripts&apos; på gruppe-ejet land via About Land &gt; Indstillinger fanen." name="land options"/>
+		<action description="Ændre musik og media indstillinger" longdescription="Ændre oplysninger om streaming musik og film i &apos;Om land...&apos; &gt; Media fanen." name="land change media" value="20"/>
+		<action description="Ændre rettighed til &apos;Redigere terræn&apos;" longdescription="Ændre rettighed til &apos;Redigere terræn&apos;. *ADVARSEL*: Redigere terræn&apos; kan give alle og enhver ret til at ændre terræn og opsætte og flytte Linden planter. Vær sikker på at vide hvad du ør inden du tildeler denne rettighed." name="land edit" value="21"/>
+		<action description="Ændre diverse andre indstillinger i &apos;Om land...&apos;&gt; indstillinger fanen" longdescription="Giv adgang til at ændre &apos;Sikker (ingen skade)&apos;, &apos;Flyve&apos;, og tillad andre beboere at: &apos;Lave objekter&apos;, &apos;Redigere terræn&apos;, &apos;Lave landemærker&apos;, og &apos;Køre scripts&apos; på gruppe-ejet land via About Land &gt; Indstillinger fanen." name="land options" value="22"/>
 	</action_set>
 	<action_set description="Disse rettigheder inkluderer adgang til at medlemmer kan omgå restriktioner på gruppe-ejede parceller." name="Parcel Powers">
-		<action description="Tillad altid &apos;Rediger Terræn&apos;" longdescription="Medlemmer med denne rolle har adgang til at redigere terræn på gruppe-ejede parceller, også selvom denne mulighed ikke er aktiveret på &apos;Om land...&apos; &gt; Indstillinger fanen." name="land allow edit land"/>
-		<action description="Tillad altid at &apos;Flyve&apos;" longdescription="Medlemmer med denne rolle har adgang til at flyve på gruppe-ejede parceller, også selvom denne mulighed ikke er aktiveret på &apos;Om land...&apos; &gt; Indstillinger fanen." name="land allow fly"/>
-		<action description="Tillad altid &apos;Lave objekter&apos;" longdescription="Medlemmer med denne rolle har adgang til at lave nye objekter på gruppe-ejede parceller, også selvom denne mulighed ikke er aktiveret på &apos;Om land...&apos; &gt; Indstillinger fanen." name="land allow create"/>
-		<action description="Tillad altid at &apos;Lave landemærker&apos;" longdescription="Medlemmer med denne rolle har adgang til at lave landemærker på gruppe-ejede parceller, også selvom denne mulighed ikke er aktiveret på &apos;Om land...&apos; &gt; Indstillinger fanen." name="land allow landmark"/>
-		<action description="Tillad altid &apos;sæt til hjem&apos; på gruppe-ejet land" longdescription="Medlemmer med denne rolle har adgang til at benytte &apos;Verden&apos; menuen og vælge &apos;sæt til hjem&apos; på en parcel der er dedikeret til gruppen." name="land allow set home"/>
+		<action description="Tillad altid &apos;Rediger Terræn&apos;" longdescription="Medlemmer med denne rolle har adgang til at redigere terræn på gruppe-ejede parceller, også selvom denne mulighed ikke er aktiveret på &apos;Om land...&apos; &gt; Indstillinger fanen." name="land allow edit land" value="23"/>
+		<action description="Tillad altid at &apos;Flyve&apos;" longdescription="Medlemmer med denne rolle har adgang til at flyve på gruppe-ejede parceller, også selvom denne mulighed ikke er aktiveret på &apos;Om land...&apos; &gt; Indstillinger fanen." name="land allow fly" value="24"/>
+		<action description="Tillad altid &apos;Lave objekter&apos;" longdescription="Medlemmer med denne rolle har adgang til at lave nye objekter på gruppe-ejede parceller, også selvom denne mulighed ikke er aktiveret på &apos;Om land...&apos; &gt; Indstillinger fanen." name="land allow create" value="25"/>
+		<action description="Tillad altid at &apos;Lave landemærker&apos;" longdescription="Medlemmer med denne rolle har adgang til at lave landemærker på gruppe-ejede parceller, også selvom denne mulighed ikke er aktiveret på &apos;Om land...&apos; &gt; Indstillinger fanen." name="land allow landmark" value="26"/>
+		<action description="Tillad altid &apos;sæt til hjem&apos; på gruppe-ejet land" longdescription="Medlemmer med denne rolle har adgang til at benytte &apos;Verden&apos; menuen og vælge &apos;sæt til hjem&apos; på en parcel der er dedikeret til gruppen." name="land allow set home" value="28"/>
+		<action description="Tillad &apos;Event Hosting&apos; på gruppe ejet land" longdescription="Medlemmer med denne rolle kan vælge gruppe ejede parceller som sted når der afholdes et event." name="land allow host event" value="41"/>
 	</action_set>
 	<action_set description="Disse rettigheder inkluderer adgang til at medlemmer kan tillade eller forbyde adgang til gruppe-ejede parceller, inkluderende at &apos;fryse&apos; og udsmide beboere." name="Parcel Access">
-		<action description="Administrér adgangsregler for parceller" longdescription="Administrér adgangsregler for parceller i &apos;Om land&apos; &gt; &apos;Adgang&apos; fanen." name="land manage allowed"/>
-		<action description="Administrér liste med blokerede beboere på parceller" longdescription="Administrér liste med blokerede beboere på parceller i &apos;Om land&apos; &gt; &apos;Adgang&apos; fanen." name="land manage banned"/>
-		<action description="Ændre indstillinger for at &apos;Sælge adgang til&apos; parceller" longdescription="Ændre indstillinger for at &apos;Sælge adgang til&apos; parceller i &apos;Om land&apos; &gt; &apos;Adgang&apos; fanen." name="land manage passes"/>
-		<action description="Adgang til at smide beboere ud og &apos;fryse&apos; beboere på parceller" longdescription="Medlemmer med denne rolle kan håndtere beboere som ikke er velkomne på gruppe-ejet parceller ved at højreklikke på dem, vælge Mere&gt;, og vælge &apos;Smid ud...&apos; eller &apos;Frys...&apos;." name="land admin"/>
+		<action description="Administrér adgangsregler for parceller" longdescription="Administrér adgangsregler for parceller i &apos;Om land&apos; &gt; &apos;Adgang&apos; fanen." name="land manage allowed" value="29"/>
+		<action description="Administrér liste med blokerede beboere på parceller" longdescription="Administrér liste med blokerede beboere på parceller i &apos;Om land&apos; &gt; &apos;Adgang&apos; fanen." name="land manage banned" value="30"/>
+		<action description="Ændre indstillinger for at &apos;Sælge adgang til&apos; parceller" longdescription="Ændre indstillinger for at &apos;Sælge adgang til&apos; parceller i &apos;Om land&apos; &gt; &apos;Adgang&apos; fanen." name="land manage passes" value="31"/>
+		<action description="Adgang til at smide beboere ud og &apos;fryse&apos; beboere på parceller" longdescription="Medlemmer med denne rolle kan håndtere beboere som ikke er velkomne på gruppe-ejet parceller ved at højreklikke på dem, vælge Mere&gt;, og vælge &apos;Smid ud...&apos; eller &apos;Frys...&apos;." name="land admin" value="32"/>
 	</action_set>
 	<action_set description="Disse rettigheder inkluderer mulighed til at tillade beboere at returnere objekter og placere og flytte Linden planter. Dette er brugbart for at medlemmer kan holde orden og tilpasse landskabet. Denne mulighed skal benyttes med varsomhed, da der ikke er mulighed for at fortryde returnering af objekter og ændringer i landskabet." name="Parcel Content">
-		<action description="Returnere objekter ejet af gruppen" longdescription="Returne objekter på gruppe-ejede parceller der er ejet af gruppen. Dette håndteres i &apos;Om land...&apos;&gt; &apos;Objekter&apos; fanen." name="land return group owned"/>
-		<action description="Returnere objekter der er sat til &apos;gruppe&apos;" longdescription="Returnere objekter på gruppe-ejede parceller, der er &apos;sat til gruppe&apos; i &apos;Om land...&apos;&gt; &apos;Objekter&apos; fanen." name="land return group set"/>
-		<action description="Returnere objekter der ikke er ejet af andre" longdescription="Returnere objekter på gruppe-ejede parceller, der er &apos;Ejet af andre&apos; i &apos;Om land...&apos;&gt; &apos;Objekter&apos; fanen." name="land return non group"/>
-		<action description="Ændre landskab med Linden planter" longdescription="Disse rettigheder inkluderer mulighed til at tillade beboere at returnere objekter og placere og flytte Linden planter. Dette er brugbart for at medlemmer kan holde orden og tilpasse landskabet. Denne mulighed skal benyttes med varsomhed, da der ikke er mulighed for at fortryde returnering af objekter og ændringer i landskabet." name="land gardening"/>
+		<action description="Returnere objekter ejet af gruppen" longdescription="Returne objekter på gruppe-ejede parceller der er ejet af gruppen. Dette håndteres i &apos;Om land...&apos;&gt; &apos;Objekter&apos; fanen." name="land return group owned" value="48"/>
+		<action description="Returnere objekter der er sat til &apos;gruppe&apos;" longdescription="Returnere objekter på gruppe-ejede parceller, der er &apos;sat til gruppe&apos; i &apos;Om land...&apos;&gt; &apos;Objekter&apos; fanen." name="land return group set" value="33"/>
+		<action description="Returnere objekter der ikke er ejet af andre" longdescription="Returnere objekter på gruppe-ejede parceller, der er &apos;Ejet af andre&apos; i &apos;Om land...&apos;&gt; &apos;Objekter&apos; fanen." name="land return non group" value="34"/>
+		<action description="Ændre landskab med Linden planter" longdescription="Disse rettigheder inkluderer mulighed til at tillade beboere at returnere objekter og placere og flytte Linden planter. Dette er brugbart for at medlemmer kan holde orden og tilpasse landskabet. Denne mulighed skal benyttes med varsomhed, da der ikke er mulighed for at fortryde returnering af objekter og ændringer i landskabet." name="land gardening" value="35"/>
 	</action_set>
 	<action_set description="Disse rettigheder inkluderer mulighed til at dedikere, ændre og sælge gruppe-ejede objekter. Disse ændringer sker i &apos;Rediger&apos;&gt; &apos;Generelt&apos; fanen." name="Object Management">
-		<action description="Dediker objekter til gruppe" longdescription="Dediker objekter til gruppe i &apos;Rediger&apos;&gt; &apos;Generelt&apos; fanen." name="object deed"/>
-		<action description="Manipulér (flyt, kopiér, ændre) gruppe-ejede objekter" longdescription="Manipulér (flyt, kopiér, ændre) gruppe-ejede objekter i &apos;Rediger&apos;&gt; &apos;Generelt&apos; fanen." name="object manipulate"/>
-		<action description="Sæt gruppe-ejede objekter til salg" longdescription="Sæt gruppe-ejede objekter til salg i &apos;Rediger&apos;&gt; &apos;Generelt&apos; fanen." name="object set sale"/>
+		<action description="Dediker objekter til gruppe" longdescription="Dediker objekter til gruppe i &apos;Rediger&apos;&gt; &apos;Generelt&apos; fanen." name="object deed" value="36"/>
+		<action description="Manipulér (flyt, kopiér, ændre) gruppe-ejede objekter" longdescription="Manipulér (flyt, kopiér, ændre) gruppe-ejede objekter i &apos;Rediger&apos;&gt; &apos;Generelt&apos; fanen." name="object manipulate" value="38"/>
+		<action description="Sæt gruppe-ejede objekter til salg" longdescription="Sæt gruppe-ejede objekter til salg i &apos;Rediger&apos;&gt; &apos;Generelt&apos; fanen." name="object set sale" value="39"/>
 	</action_set>
 	<action_set description="Disse rettigheder inkluderer mulighed til at håndtere betalinger for gruppen og styre adgang til gruppens kontobevægelser." name="Accounting">
-		<action description="Betale gruppe regninger og modtage gruppe udbytte" longdescription="Medlemmer med denne rolle vil automatisk betale gruppe regninger og modtage gruppe udbytte. Det betyder at de vil modtager en andel af indtægter fra salg af gruppe-ejet land og bidrage til betaling af gruppe-relaterede betalinger, som f.eks. betaling for at paceller vises i lister. " name="accounting accountable"/>
+		<action description="Betale gruppe regninger og modtage gruppe udbytte" longdescription="Medlemmer med denne rolle vil automatisk betale gruppe regninger og modtage gruppe udbytte. Det betyder at de vil modtager en andel af indtægter fra salg af gruppe-ejet land og bidrage til betaling af gruppe-relaterede betalinger, som f.eks. betaling for at paceller vises i lister. " name="accounting accountable" value="40"/>
 	</action_set>
 	<action_set description="Disse rettigheder inkluderer adgang til at kunne sende, modtage og se gruppe beskeder." name="Notices">
-		<action description="Send beskeder" longdescription="Medlemmer med denne rolle kan sende beskeder i &apos;Beskeder&apos; fanen." name="notices send"/>
-		<action description="Modtage og se tidligere beskeder" longdescription="Medlemmer med denne rolle kan modtage og se tidligere beskeder i &apos;Beskeder&apos; fanen." name="notices receive"/>
-	</action_set>
-	<action_set description="Disse rettigheder inkluderer adgang til at kunne oprette forslag, stemme på forslag og se historik med forslag." name="Proposals">
-		<action description="Opret forslag" longdescription="Medlemmer med denne rolle kan oprette forslag som der kan stemmes om i &apos;Forslag&apos; fanen." name="proposal start"/>
-		<action description="Stem på forslag" longdescription="Medlemmer med denne rolle kan stemme på forslag i &apos;Forslag&apos; fanen." name="proposal vote"/>
+		<action description="Send beskeder" longdescription="Medlemmer med denne rolle kan sende beskeder i &apos;Beskeder&apos; fanen." name="notices send" value="42"/>
+		<action description="Modtage og se tidligere beskeder" longdescription="Medlemmer med denne rolle kan modtage og se tidligere beskeder i &apos;Beskeder&apos; fanen." name="notices receive" value="43"/>
 	</action_set>
 	<action_set description="Disse rettigheder styrer hvem der kan deltage i gruppe-chat og gruppe stemme-chat." name="Chat">
-		<action description="Deltage i gruppe-chat" longdescription="Medlemmer med denne rolle kan deltage i gruppe-chat sessioner" name="join group chat"/>
-		<action description="Deltag i gruppe stemme-chat" longdescription="Medlemmer med denne rolle kan deltage i gruppe stemme-chat sessioner.  BEMÆRK: Medlemmet skal også have rollen &apos;Deltage i gruppe-chat&apos; for at denne rolle har effekt." name="join voice chat"/>
-		<action description="Styr gruppe-chat" longdescription="Medlemmer med denne rolle kan kontrollere adgang og deltagelse i gruppe-chat og gruppe stemme-chat sessioner." name="moderate group chat"/>
+		<action description="Deltage i gruppe-chat" longdescription="Medlemmer med denne rolle kan deltage i gruppe-chat sessioner" name="join group chat" value="16"/>
+		<action description="Deltag i gruppe stemme-chat" longdescription="Medlemmer med denne rolle kan deltage i gruppe stemme-chat sessioner.  BEMÆRK: Medlemmet skal også have rollen &apos;Deltage i gruppe-chat&apos; for at denne rolle har effekt." name="join voice chat" value="27"/>
+		<action description="Styr gruppe-chat" longdescription="Medlemmer med denne rolle kan kontrollere adgang og deltagelse i gruppe-chat og gruppe stemme-chat sessioner." name="moderate group chat" value="37"/>
 	</action_set>
 </role_actions>
diff --git a/indra/newview/skins/default/xui/da/strings.xml b/indra/newview/skins/default/xui/da/strings.xml
index 1c583f2e95..198d8eea0e 100644
--- a/indra/newview/skins/default/xui/da/strings.xml
+++ b/indra/newview/skins/default/xui/da/strings.xml
@@ -191,6 +191,9 @@
 	<string name="TooltipAgentUrl">
 		Klik for at se beboers profil
 	</string>
+	<string name="TooltipAgentInspect">
+		Lær mere om denne beboer
+	</string>
 	<string name="TooltipAgentMute">
 		Klik for at slukke for denne beboer
 	</string>
@@ -738,6 +741,12 @@
 	<string name="Estate / Full Region">
 		Estate / Hel region
 	</string>
+	<string name="Estate / Homestead">
+		Estate / Homestead
+	</string>
+	<string name="Mainland / Homestead">
+		Mainland / Homestead
+	</string>
 	<string name="Mainland / Full Region">
 		Mainland / Hel region
 	</string>
@@ -3469,7 +3478,7 @@ Hvis du bliver ved med at modtage denne besked, kontakt venligst [SUPPORT_SITE].
 		Du er den eneste deltager i denne samtale
 	</string>
 	<string name="offline_message">
-		[NAME] er ikke logget på.
+		[NAME] er logget af.
 	</string>
 	<string name="invite_message">
 		Tryk på [BUTTON NAME] knappen for at acceptére/tilslutte til denne stemme chat.
@@ -3538,7 +3547,10 @@ Hvis du bliver ved med at modtage denne besked, kontakt venligst [SUPPORT_SITE].
 		http://secondlife.com/landing/voicemorphing
 	</string>
 	<string name="paid_you_ldollars">
-		[NAME] betalte dig L$[AMOUNT]
+		[NAME] betalte dig L$[AMOUNT] [REASON].
+	</string>
+	<string name="paid_you_ldollars_no_reason">
+		[NAME] betalte dig L$[AMOUNT].
 	</string>
 	<string name="you_paid_ldollars">
 		Du betalte [NAME] L$[AMOUNT] [REASON].
@@ -3552,6 +3564,9 @@ Hvis du bliver ved med at modtage denne besked, kontakt venligst [SUPPORT_SITE].
 	<string name="you_paid_ldollars_no_name">
 		Du betalte L$[AMOUNT] [REASON].
 	</string>
+	<string name="for item">
+		til [ITEM]
+	</string>
 	<string name="for a parcel of land">
 		for en parcel land
 	</string>
@@ -3570,6 +3585,9 @@ Hvis du bliver ved med at modtage denne besked, kontakt venligst [SUPPORT_SITE].
 	<string name="to upload">
 		for at uploade
 	</string>
+	<string name="to publish a classified ad">
+		til offentliggørelse af annonce
+	</string>
 	<string name="giving">
 		Giver L$ [AMOUNT]
 	</string>
-- 
cgit v1.2.3


From f2cb59b29580cb29027267f5318e7486df33a844 Mon Sep 17 00:00:00 2001
From: eli_linden <eli@lindenlab.com>
Date: Tue, 23 Nov 2010 17:02:36 -0800
Subject: CT-633 FIX DA translation (new file) for set19, for Viewer 2.4

---
 .../skins/default/xui/da/floater_display_name.xml      | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)
 create mode 100644 indra/newview/skins/default/xui/da/floater_display_name.xml

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/da/floater_display_name.xml b/indra/newview/skins/default/xui/da/floater_display_name.xml
new file mode 100644
index 0000000000..e848006d8b
--- /dev/null
+++ b/indra/newview/skins/default/xui/da/floater_display_name.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Display Name" title="ÆNDRE VISNINGSNAVN">
+	<text name="info_text">
+		Det navn du giver din avatar kaldes dit visningsnavn. Du kan ændre dette en gang om ugen.
+	</text>
+	<text name="lockout_text">
+		Du kan ikke ændre dit visningsnavn før: [TIME].
+	</text>
+	<text name="set_name_label">
+		Nyt visningsnavn:
+	</text>
+	<text name="name_confirm_label">
+		Indtast dit nye navn igen for at bekræfte:
+	</text>
+	<button label="Gem" name="save_btn" tool_tip="Gem dit nye visningsnavn"/>
+	<button label="Nulstil" name="reset_btn" tool_tip="Omdøb visningsnavn til samme som brugernavn"/>
+	<button label="Annullér" name="cancel_btn"/>
+</floater>
-- 
cgit v1.2.3


From d8b426ee31ed7d37478f536bb1dfe9cc937b892b Mon Sep 17 00:00:00 2001
From: eli_linden <eli@lindenlab.com>
Date: Tue, 23 Nov 2010 18:51:26 -0800
Subject: STORM-531 WIP temp fix, pending Danish translation

---
 indra/newview/skins/default/xui/da/notifications.xml | 1 +
 1 file changed, 1 insertion(+)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/da/notifications.xml b/indra/newview/skins/default/xui/da/notifications.xml
index 1ad0d06ca1..1ca5fff2ca 100644
--- a/indra/newview/skins/default/xui/da/notifications.xml
+++ b/indra/newview/skins/default/xui/da/notifications.xml
@@ -849,6 +849,7 @@ For at få adgang til voksen regioner, skal beboere være alders-checket, enten
 		<usetemplate ignoretext="Start min browser for at se min konto historik" name="okcancelignore" notext="Cancel" yestext="Go to page"/>
 	</notification>
 	<notification name="ConfirmQuit">
+		Are you sure you want to quit?
 		<usetemplate ignoretext="Bekræft før jeg afslutter" name="okcancelignore" notext="Afslut ikke" yestext="Quit"/>
 	</notification>
 	<notification name="DeleteItems">
-- 
cgit v1.2.3


From 46d1323f4923aa2ddc894dd87eff53ccccb15760 Mon Sep 17 00:00:00 2001
From: Andrew Productengine <adyukov@productengine.com>
Date: Wed, 24 Nov 2010 18:32:28 +0200
Subject: STORM-671 FIXED Renamed "Move & View" panel to avoid name
 duplication.

---
 indra/newview/skins/default/xui/en/floater_preferences.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/floater_preferences.xml b/indra/newview/skins/default/xui/en/floater_preferences.xml
index 36108442f3..8eee8f44b5 100644
--- a/indra/newview/skins/default/xui/en/floater_preferences.xml
+++ b/indra/newview/skins/default/xui/en/floater_preferences.xml
@@ -83,7 +83,7 @@
          label="Move &amp; View"
          layout="topleft"
          help_topic="preferences_move_tab"
-         name="audio" />
+         name="move" />
         <panel
 		 class="panel_preference"
          filename="panel_preferences_alerts.xml"
-- 
cgit v1.2.3


From 552ddf4be4a5b906fb65b477cfba68da54bb8ec2 Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Wed, 24 Nov 2010 18:56:21 +0200
Subject: STORM-666 FIXED Menu spawned by the overflow button had invalid
 position in Place Profile and Avatar Profile panels.

Changes:
* Changed the button class from LLButton to LLMenuButton to avoid duplicating menu positioning logic.
* Enabled LLMenuButton to support aligning menu to the top right corner of the button.
---
 indra/newview/llpanelavatar.cpp                    | 22 +++-------------------
 indra/newview/llpanelavatar.h                      |  4 ----
 indra/newview/llpanelplaces.cpp                    | 16 ++++------------
 indra/newview/llpanelplaces.h                      |  3 ++-
 .../newview/skins/default/xui/da/panel_places.xml  |  2 +-
 .../newview/skins/default/xui/da/panel_profile.xml |  2 +-
 .../newview/skins/default/xui/de/panel_places.xml  |  2 +-
 .../newview/skins/default/xui/de/panel_profile.xml |  2 +-
 .../newview/skins/default/xui/en/panel_places.xml  |  2 +-
 .../newview/skins/default/xui/en/panel_profile.xml |  2 +-
 .../newview/skins/default/xui/es/panel_places.xml  |  2 +-
 .../newview/skins/default/xui/es/panel_profile.xml |  2 +-
 .../newview/skins/default/xui/fr/panel_places.xml  |  2 +-
 .../newview/skins/default/xui/fr/panel_profile.xml |  2 +-
 .../newview/skins/default/xui/it/panel_places.xml  |  2 +-
 .../newview/skins/default/xui/it/panel_profile.xml |  2 +-
 .../newview/skins/default/xui/ja/panel_places.xml  |  2 +-
 .../newview/skins/default/xui/ja/panel_profile.xml |  2 +-
 .../newview/skins/default/xui/pl/panel_places.xml  |  2 +-
 .../newview/skins/default/xui/pl/panel_profile.xml |  2 +-
 .../newview/skins/default/xui/pt/panel_places.xml  |  2 +-
 .../newview/skins/default/xui/pt/panel_profile.xml |  2 +-
 22 files changed, 27 insertions(+), 54 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llpanelavatar.cpp b/indra/newview/llpanelavatar.cpp
index 57180f63b5..1249d5d856 100644
--- a/indra/newview/llpanelavatar.cpp
+++ b/indra/newview/llpanelavatar.cpp
@@ -34,6 +34,7 @@
 #include "llcombobox.h"
 #include "lldateutil.h"			// ageFromDate()
 #include "llimview.h"
+#include "llmenubutton.h"
 #include "llnotificationsutil.h"
 #include "lltexteditor.h"
 #include "lltexturectrl.h"
@@ -479,7 +480,6 @@ BOOL LLPanelAvatarProfile::postBuild()
 	childSetCommitCallback("im",(boost::bind(&LLPanelAvatarProfile::onIMButtonClick,this)),NULL);
 	childSetCommitCallback("call",(boost::bind(&LLPanelAvatarProfile::onCallButtonClick,this)),NULL);
 	childSetCommitCallback("teleport",(boost::bind(&LLPanelAvatarProfile::onTeleportButtonClick,this)),NULL);
-	childSetCommitCallback("overflow_btn", boost::bind(&LLPanelAvatarProfile::onOverflowButtonClicked, this), NULL);
 	childSetCommitCallback("share",(boost::bind(&LLPanelAvatarProfile::onShareButtonClick,this)),NULL);
 	childSetCommitCallback("show_on_map_btn", (boost::bind(
 			&LLPanelAvatarProfile::onMapButtonClick, this)), NULL);
@@ -500,7 +500,8 @@ BOOL LLPanelAvatarProfile::postBuild()
 	enable.add("Profile.EnableBlock", boost::bind(&LLPanelAvatarProfile::enableBlock, this));
 	enable.add("Profile.EnableUnblock", boost::bind(&LLPanelAvatarProfile::enableUnblock, this));
 
-	mProfileMenu = LLUICtrlFactory::getInstance()->createFromFile<LLToggleableMenu>("menu_profile_overflow.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
+	LLToggleableMenu* profile_menu = LLUICtrlFactory::getInstance()->createFromFile<LLToggleableMenu>("menu_profile_overflow.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
+	getChild<LLMenuButton>("overflow_btn")->setMenu(profile_menu, LLMenuButton::MP_TOP_RIGHT);
 
 	LLVoiceClient::getInstance()->addObserver((LLVoiceClientStatusObserver*)this);
 
@@ -752,23 +753,6 @@ void LLPanelAvatarProfile::onShareButtonClick()
 	//*TODO not implemented
 }
 
-void LLPanelAvatarProfile::onOverflowButtonClicked()
-{
-	if (!mProfileMenu->toggleVisibility())
-		return;
-
-	LLView* btn = getChild<LLView>("overflow_btn");
-
-	if (mProfileMenu->getButtonRect().isEmpty())
-	{
-		mProfileMenu->setButtonRect(btn);
-	}
-	mProfileMenu->updateParent(LLMenuGL::sMenuContainer);
-
-	LLRect rect = btn->getRect();
-	LLMenuGL::showPopup(this, mProfileMenu, rect.mRight, rect.mTop);
-}
-
 LLPanelAvatarProfile::~LLPanelAvatarProfile()
 {
 	if(getAvatarId().notNull())
diff --git a/indra/newview/llpanelavatar.h b/indra/newview/llpanelavatar.h
index 11c7716322..71d9d0a95a 100644
--- a/indra/newview/llpanelavatar.h
+++ b/indra/newview/llpanelavatar.h
@@ -34,7 +34,6 @@
 
 class LLComboBox;
 class LLLineEditor;
-class LLToggleableMenu;
 
 enum EOnlineStatus
 {
@@ -207,14 +206,11 @@ protected:
 	void onCallButtonClick();
 	void onTeleportButtonClick();
 	void onShareButtonClick();
-	void onOverflowButtonClicked();
 
 private:
 
 	typedef std::map< std::string,LLUUID>	group_map_t;
 	group_map_t 			mGroups;
-
-	LLToggleableMenu*		mProfileMenu;
 };
 
 /**
diff --git a/indra/newview/llpanelplaces.cpp b/indra/newview/llpanelplaces.cpp
index f0e60386b6..c524fd7059 100644
--- a/indra/newview/llpanelplaces.cpp
+++ b/indra/newview/llpanelplaces.cpp
@@ -39,6 +39,7 @@
 #include "llfiltereditor.h"
 #include "llfirstuse.h"
 #include "llfloaterreg.h"
+#include "llmenubutton.h"
 #include "llnotificationsutil.h"
 #include "lltabcontainer.h"
 #include "lltexteditor.h"
@@ -282,8 +283,8 @@ BOOL LLPanelPlaces::postBuild()
 	mCloseBtn = getChild<LLButton>("close_btn");
 	mCloseBtn->setClickedCallback(boost::bind(&LLPanelPlaces::onBackButtonClicked, this));
 
-	mOverflowBtn = getChild<LLButton>("overflow_btn");
-	mOverflowBtn->setClickedCallback(boost::bind(&LLPanelPlaces::onOverflowButtonClicked, this));
+	mOverflowBtn = getChild<LLMenuButton>("overflow_btn");
+	mOverflowBtn->setMouseDownCallback(boost::bind(&LLPanelPlaces::onOverflowButtonClicked, this));
 
 	mPlaceInfoBtn = getChild<LLButton>("profile_btn");
 	mPlaceInfoBtn->setClickedCallback(boost::bind(&LLPanelPlaces::onProfileButtonClicked, this));
@@ -783,16 +784,7 @@ void LLPanelPlaces::onOverflowButtonClicked()
 		return;
 	}
 
-	if (!menu->toggleVisibility())
-		return;
-
-	if (menu->getButtonRect().isEmpty())
-	{
-		menu->setButtonRect(mOverflowBtn);
-	}
-	menu->updateParent(LLMenuGL::sMenuContainer);
-	LLRect rect = mOverflowBtn->getRect();
-	LLMenuGL::showPopup(this, menu, rect.mRight, rect.mTop);
+	mOverflowBtn->setMenu(menu, LLMenuButton::MP_TOP_RIGHT);
 }
 
 void LLPanelPlaces::onProfileButtonClicked()
diff --git a/indra/newview/llpanelplaces.h b/indra/newview/llpanelplaces.h
index c3b2ab806f..5523122a0f 100644
--- a/indra/newview/llpanelplaces.h
+++ b/indra/newview/llpanelplaces.h
@@ -47,6 +47,7 @@ class LLPlacesParcelObserver;
 class LLRemoteParcelInfoObserver;
 class LLTabContainer;
 class LLToggleableMenu;
+class LLMenuButton;
 
 typedef std::pair<LLUUID, std::string>	folder_pair_t;
 
@@ -123,7 +124,7 @@ private:
 	LLButton*					mSaveBtn;
 	LLButton*					mCancelBtn;
 	LLButton*					mCloseBtn;
-	LLButton*					mOverflowBtn;
+	LLMenuButton*				mOverflowBtn;
 	LLButton*					mPlaceInfoBtn;
 
 	LLPlacesInventoryObserver*	mInventoryObserver;
diff --git a/indra/newview/skins/default/xui/da/panel_places.xml b/indra/newview/skins/default/xui/da/panel_places.xml
index ca3d7c71bb..fe8ca69f34 100644
--- a/indra/newview/skins/default/xui/da/panel_places.xml
+++ b/indra/newview/skins/default/xui/da/panel_places.xml
@@ -21,7 +21,7 @@
 						<button label="Redigér" name="edit_btn" tool_tip="Redigér landemærke information"/>
 					</layout_panel>
 					<layout_panel name="overflow_btn_lp">
-						<button label="▼" name="overflow_btn" tool_tip="Vis flere valg"/>
+						<menu_button label="▼" name="overflow_btn" tool_tip="Vis flere valg"/>
 					</layout_panel>
 				</layout_stack>
 				<layout_stack name="bottom_bar_ls3">
diff --git a/indra/newview/skins/default/xui/da/panel_profile.xml b/indra/newview/skins/default/xui/da/panel_profile.xml
index b2d1e9791a..b8b99a9c21 100644
--- a/indra/newview/skins/default/xui/da/panel_profile.xml
+++ b/indra/newview/skins/default/xui/da/panel_profile.xml
@@ -42,7 +42,7 @@
 					<button label="Teleportér" name="teleport" tool_tip="Tilbyd teleport"/>
 				</layout_panel>
 				<layout_panel name="overflow_btn_lp">
-					<button label="▼" name="overflow_btn" tool_tip="Betal eller del beholdning med denne beboer"/>
+					<menu_button label="▼" name="overflow_btn" tool_tip="Betal eller del beholdning med denne beboer"/>
 				</layout_panel>
 			</layout_stack>
 		</layout_panel>
diff --git a/indra/newview/skins/default/xui/de/panel_places.xml b/indra/newview/skins/default/xui/de/panel_places.xml
index 0e85829a0b..36c77d4fe1 100644
--- a/indra/newview/skins/default/xui/de/panel_places.xml
+++ b/indra/newview/skins/default/xui/de/panel_places.xml
@@ -21,7 +21,7 @@
 						<button label="Bearbeiten" name="edit_btn" tool_tip="Landmarken-Info bearbeiten"/>
 					</layout_panel>
 					<layout_panel name="overflow_btn_lp">
-						<button label="▼" name="overflow_btn" tool_tip="Zusätzliche Optionen anzeigen"/>
+						<menu_button label="▼" name="overflow_btn" tool_tip="Zusätzliche Optionen anzeigen"/>
 					</layout_panel>
 				</layout_stack>
 				<layout_stack name="bottom_bar_ls3">
diff --git a/indra/newview/skins/default/xui/de/panel_profile.xml b/indra/newview/skins/default/xui/de/panel_profile.xml
index 40fa2f922a..938631f65d 100644
--- a/indra/newview/skins/default/xui/de/panel_profile.xml
+++ b/indra/newview/skins/default/xui/de/panel_profile.xml
@@ -57,7 +57,7 @@
 					<button label="Teleportieren" name="teleport" tool_tip="Teleport anbieten"/>
 				</layout_panel>
 				<layout_panel name="overflow_btn_lp">
-					<button label="▼" name="overflow_btn" tool_tip="Dem Einwohner Geld geben oder Inventar an den Einwohner schicken"/>
+					<menu_button label="▼" name="overflow_btn" tool_tip="Dem Einwohner Geld geben oder Inventar an den Einwohner schicken"/>
 				</layout_panel>
 			</layout_stack>
 		</layout_panel>
diff --git a/indra/newview/skins/default/xui/en/panel_places.xml b/indra/newview/skins/default/xui/en/panel_places.xml
index 21314703b0..d9c357f277 100644
--- a/indra/newview/skins/default/xui/en/panel_places.xml
+++ b/indra/newview/skins/default/xui/en/panel_places.xml
@@ -211,7 +211,7 @@ background_visible="true"
 				    user_resize="false" 
 				    auto_resize="true"
 					width="24">
-						<button
+						<menu_button
 				         follows="bottom|left|right"
 				         height="23"
 				         label="▼"
diff --git a/indra/newview/skins/default/xui/en/panel_profile.xml b/indra/newview/skins/default/xui/en/panel_profile.xml
index efc37c2127..7caf425058 100644
--- a/indra/newview/skins/default/xui/en/panel_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_profile.xml
@@ -432,7 +432,7 @@
 			    user_resize="false" 
 			    auto_resize="false"
 				width="24">
-					<button
+					<menu_button
 			         follows="bottom|left|right"
 			         height="23"
 			         label="▼"
diff --git a/indra/newview/skins/default/xui/es/panel_places.xml b/indra/newview/skins/default/xui/es/panel_places.xml
index 2e349c7fe2..4c90a7e6b4 100644
--- a/indra/newview/skins/default/xui/es/panel_places.xml
+++ b/indra/newview/skins/default/xui/es/panel_places.xml
@@ -21,7 +21,7 @@
 						<button label="Editar" name="edit_btn" tool_tip="Editar la información del hito"/>
 					</layout_panel>
 					<layout_panel name="overflow_btn_lp">
-						<button label="▼" name="overflow_btn" tool_tip="Ver más opciones"/>
+						<menu_button label="▼" name="overflow_btn" tool_tip="Ver más opciones"/>
 					</layout_panel>
 				</layout_stack>
 				<layout_stack name="bottom_bar_ls3">
diff --git a/indra/newview/skins/default/xui/es/panel_profile.xml b/indra/newview/skins/default/xui/es/panel_profile.xml
index 5cfe83cd61..339a1f236b 100644
--- a/indra/newview/skins/default/xui/es/panel_profile.xml
+++ b/indra/newview/skins/default/xui/es/panel_profile.xml
@@ -53,7 +53,7 @@
 					<button label="Teleporte" name="teleport" tool_tip="Ofrecer teleporte"/>
 				</layout_panel>
 				<layout_panel name="overflow_btn_lp">
-					<button label="▼" name="overflow_btn" tool_tip="Pagar dinero al Residente o compartir algo del inventario con él"/>
+					<menu_button label="▼" name="overflow_btn" tool_tip="Pagar dinero al Residente o compartir algo del inventario con él"/>
 				</layout_panel>
 			</layout_stack>
 		</layout_panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_places.xml b/indra/newview/skins/default/xui/fr/panel_places.xml
index 7f3601b90d..e252c224f8 100644
--- a/indra/newview/skins/default/xui/fr/panel_places.xml
+++ b/indra/newview/skins/default/xui/fr/panel_places.xml
@@ -21,7 +21,7 @@
 						<button label="Modifier" name="edit_btn" tool_tip="Modifier les informations du repère"/>
 					</layout_panel>
 					<layout_panel name="overflow_btn_lp">
-						<button label="▼" name="overflow_btn" tool_tip="Afficher d&apos;autres options"/>
+						<menu_button label="▼" name="overflow_btn" tool_tip="Afficher d&apos;autres options"/>
 					</layout_panel>
 				</layout_stack>
 				<layout_stack name="bottom_bar_ls3">
diff --git a/indra/newview/skins/default/xui/fr/panel_profile.xml b/indra/newview/skins/default/xui/fr/panel_profile.xml
index 4606f5a0c6..6b611923af 100644
--- a/indra/newview/skins/default/xui/fr/panel_profile.xml
+++ b/indra/newview/skins/default/xui/fr/panel_profile.xml
@@ -57,7 +57,7 @@
 					<button label="Téléporter" name="teleport" tool_tip="Proposer une téléportation"/>
 				</layout_panel>
 				<layout_panel name="overflow_btn_lp">
-					<button label="▼" name="overflow_btn" tool_tip="Payer le résident ou partager l&apos;inventaire avec lui"/>
+					<menu_button label="▼" name="overflow_btn" tool_tip="Payer le résident ou partager l&apos;inventaire avec lui"/>
 				</layout_panel>
 			</layout_stack>
 		</layout_panel>
diff --git a/indra/newview/skins/default/xui/it/panel_places.xml b/indra/newview/skins/default/xui/it/panel_places.xml
index e33f8190eb..61830f186f 100644
--- a/indra/newview/skins/default/xui/it/panel_places.xml
+++ b/indra/newview/skins/default/xui/it/panel_places.xml
@@ -21,7 +21,7 @@
 						<button label="Modifica" name="edit_btn" tool_tip="Modifica le informazioni del punto di riferimento"/>
 					</layout_panel>
 					<layout_panel name="overflow_btn_lp">
-						<button label="▼" name="overflow_btn" tool_tip="Mostra ulteriori opzioni"/>
+						<menu_button label="▼" name="overflow_btn" tool_tip="Mostra ulteriori opzioni"/>
 					</layout_panel>
 				</layout_stack>
 				<layout_stack name="bottom_bar_ls3">
diff --git a/indra/newview/skins/default/xui/it/panel_profile.xml b/indra/newview/skins/default/xui/it/panel_profile.xml
index 8a8d8f5846..c11adeda3d 100644
--- a/indra/newview/skins/default/xui/it/panel_profile.xml
+++ b/indra/newview/skins/default/xui/it/panel_profile.xml
@@ -53,7 +53,7 @@
 					<button label="Teleport" name="teleport" tool_tip="Offri teleport"/>
 				</layout_panel>
 				<layout_panel name="overflow_btn_lp">
-					<button label="▼" name="overflow_btn" tool_tip="Paga del denaro o condividi qualcosa dall&apos;inventario con il residente"/>
+					<menu_button label="▼" name="overflow_btn" tool_tip="Paga del denaro o condividi qualcosa dall&apos;inventario con il residente"/>
 				</layout_panel>
 			</layout_stack>
 		</layout_panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_places.xml b/indra/newview/skins/default/xui/ja/panel_places.xml
index 3e364c9b3a..e19b86e552 100644
--- a/indra/newview/skins/default/xui/ja/panel_places.xml
+++ b/indra/newview/skins/default/xui/ja/panel_places.xml
@@ -21,7 +21,7 @@
 						<button label="編集" name="edit_btn" tool_tip="ランドマークの情報を編集します"/>
 					</layout_panel>
 					<layout_panel name="overflow_btn_lp">
-						<button label="▼" name="overflow_btn" tool_tip="オプションを表示します"/>
+						<menu_button label="▼" name="overflow_btn" tool_tip="オプションを表示します"/>
 					</layout_panel>
 				</layout_stack>
 				<layout_stack name="bottom_bar_ls3">
diff --git a/indra/newview/skins/default/xui/ja/panel_profile.xml b/indra/newview/skins/default/xui/ja/panel_profile.xml
index 860020c87c..c2ffd74ec0 100644
--- a/indra/newview/skins/default/xui/ja/panel_profile.xml
+++ b/indra/newview/skins/default/xui/ja/panel_profile.xml
@@ -57,7 +57,7 @@
 					<button label="テレポート" name="teleport" tool_tip="テレポートを送ります"/>
 				</layout_panel>
 				<layout_panel name="overflow_btn_lp">
-					<button label="▼" name="overflow_btn" tool_tip="住人にお金を渡すか持ち物を共有します"/>
+					<menu_button label="▼" name="overflow_btn" tool_tip="住人にお金を渡すか持ち物を共有します"/>
 				</layout_panel>
 			</layout_stack>
 		</layout_panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_places.xml b/indra/newview/skins/default/xui/pl/panel_places.xml
index e0a0cfd96a..34c105225d 100644
--- a/indra/newview/skins/default/xui/pl/panel_places.xml
+++ b/indra/newview/skins/default/xui/pl/panel_places.xml
@@ -21,7 +21,7 @@
 						<button label="Edytuj" name="edit_btn" tool_tip="Edytuj informacje landmarka"/>
 					</layout_panel>
 					<layout_panel name="overflow_btn_lp">
-						<button label="▼" name="overflow_btn" tool_tip="Pokaż opcje dodatkowe"/>
+						<menu_button label="▼" name="overflow_btn" tool_tip="Pokaż opcje dodatkowe"/>
 					</layout_panel>
 				</layout_stack>
 				<layout_stack name="bottom_bar_ls3">
diff --git a/indra/newview/skins/default/xui/pl/panel_profile.xml b/indra/newview/skins/default/xui/pl/panel_profile.xml
index f4a5699f8d..4152c00386 100644
--- a/indra/newview/skins/default/xui/pl/panel_profile.xml
+++ b/indra/newview/skins/default/xui/pl/panel_profile.xml
@@ -42,7 +42,7 @@
 					<button label="Teleportuj" name="teleport" tool_tip="Teleportuj"/>
 				</layout_panel>
 				<layout_panel name="overflow_btn_lp">
-					<button label="▼" name="overflow_btn" tool_tip="Zapłać lub udostępnij obiekt Rezydentowi"/>
+					<menu_button label="▼" name="overflow_btn" tool_tip="Zapłać lub udostępnij obiekt Rezydentowi"/>
 				</layout_panel>
 			</layout_stack>
 		</layout_panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_places.xml b/indra/newview/skins/default/xui/pt/panel_places.xml
index 2e443bc057..828ef3e469 100644
--- a/indra/newview/skins/default/xui/pt/panel_places.xml
+++ b/indra/newview/skins/default/xui/pt/panel_places.xml
@@ -21,7 +21,7 @@
 						<button label="Editar" name="edit_btn" tool_tip="Editar dados do marco"/>
 					</layout_panel>
 					<layout_panel name="overflow_btn_lp">
-						<button label="▼" name="overflow_btn" tool_tip="Mostrar opções adicionais"/>
+						<menu_button label="▼" name="overflow_btn" tool_tip="Mostrar opções adicionais"/>
 					</layout_panel>
 				</layout_stack>
 				<layout_stack name="bottom_bar_ls3">
diff --git a/indra/newview/skins/default/xui/pt/panel_profile.xml b/indra/newview/skins/default/xui/pt/panel_profile.xml
index e4200ae5da..f984ed6a7b 100644
--- a/indra/newview/skins/default/xui/pt/panel_profile.xml
+++ b/indra/newview/skins/default/xui/pt/panel_profile.xml
@@ -53,7 +53,7 @@
 					<button label="Teletransportar" name="teleport" tool_tip="Oferecer teletransporte"/>
 				</layout_panel>
 				<layout_panel name="overflow_btn_lp">
-					<button label="▼" name="overflow_btn" tool_tip="Pagar ou compartilhar inventário com o residente"/>
+					<menu_button label="▼" name="overflow_btn" tool_tip="Pagar ou compartilhar inventário com o residente"/>
 				</layout_panel>
 			</layout_stack>
 		</layout_panel>
-- 
cgit v1.2.3


From abcb3a7306f95f66aadb3db2fa8cd4000bc0a8e5 Mon Sep 17 00:00:00 2001
From: Andrew Productengine <adyukov@productengine.com>
Date: Wed, 24 Nov 2010 19:01:01 +0200
Subject: STORM-375 FIXED Fixed resetting of opened accordion on
 minimizing/unminimizing Appearance floater.

The floater on minimization behaved the way consistent with Appearance panel in sidetray on visibility change.

- To let LLSidepanelAppearance::updateToVisibility() determine whether to reset state or not, "reset_accordion" field was added to LLSD that it passed to it. It's value is
different depending on where updateToVisibility() was called from. "visible" field was added to store boolean value that was passed before fix without name, but now can't be used that way.
---
 indra/newview/llsidepanelappearance.cpp | 9 ++++++---
 indra/newview/llsidetray.cpp            | 6 +++++-
 2 files changed, 11 insertions(+), 4 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp
index 1999f14828..b316171604 100644
--- a/indra/newview/llsidepanelappearance.cpp
+++ b/indra/newview/llsidepanelappearance.cpp
@@ -183,12 +183,15 @@ void LLSidepanelAppearance::onOpen(const LLSD& key)
 
 void LLSidepanelAppearance::onVisibilityChange(const LLSD &new_visibility)
 {
-	updateToVisibility(new_visibility);
+	LLSD visibility;
+	visibility["visible"] = new_visibility.asBoolean();
+	visibility["reset_accordion"] = true;
+	updateToVisibility(visibility);
 }
 
 void LLSidepanelAppearance::updateToVisibility(const LLSD &new_visibility)
 {
-	if (new_visibility.asBoolean())
+	if (new_visibility["visible"].asBoolean())
 	{
 		bool is_outfit_edit_visible = mOutfitEdit && mOutfitEdit->getVisible();
 		bool is_wearable_edit_visible = mEditWearable && mEditWearable->getVisible();
@@ -209,7 +212,7 @@ void LLSidepanelAppearance::updateToVisibility(const LLSD &new_visibility)
 				}
 			}
 
-			if (is_outfit_edit_visible)
+			if (is_outfit_edit_visible && new_visibility["reset_accordion"].asBoolean())
 			{
 				mOutfitEdit->resetAccordionState();
 			}
diff --git a/indra/newview/llsidetray.cpp b/indra/newview/llsidetray.cpp
index a4f855f279..2905e369f1 100644
--- a/indra/newview/llsidetray.cpp
+++ b/indra/newview/llsidetray.cpp
@@ -298,7 +298,11 @@ static void on_minimize(LLSidepanelAppearance* panel, LLSD minimized)
 {
 	if (!panel) return;
 	bool visible = !minimized.asBoolean();
-	panel->updateToVisibility(LLSD(visible));	
+	LLSD visibility;
+	visibility["visible"] = visible;
+	// Do not reset accordion state on minimize (STORM-375)
+	visibility["reset_accordion"] = false;
+	panel->updateToVisibility(visibility);
 }
 
 void LLSideTrayTab::undock(LLFloater* floater_tab)
-- 
cgit v1.2.3


From e997a09343ad2a1f082b63c3bce83f9cd9566637 Mon Sep 17 00:00:00 2001
From: Paul Guslisty <pguslisty@productengine.com>
Date: Wed, 24 Nov 2010 19:12:02 +0200
Subject: STORM-593 FIXED Make transparent texteditor and lineeditor

Reason: If some child of transparent LLFloater has a visible non-transparent background then this part of floater is non-transparent. As a result floater became partially transparent.

Solution: When transparent floater changes focus, iterate through its children and set corresponding (corresponding to whether control in active or in inactive floater see STORM-535) transparency value.

- Added method LLUICtrl::getCurrentTransparency. This method calculates transparency level of a control. Calculated value should be used as an alpha chennel value in case we want this control to be transparent. For now this method is used by LLFloater to adjust transparency of its children.

- Added calculating of transparecny level for: LLLineEditor, LLTextBase, LLinventoryListItem, LLScrollContainer, LLScrollListCtrl, LLAccrodionCtrlTab.

- Added method LLFlaoter::updateChildrenTransparency which updates transparency value of its children
---
 indra/newview/llinventorylistitem.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llinventorylistitem.cpp b/indra/newview/llinventorylistitem.cpp
index 225d0288a9..3e0849a795 100644
--- a/indra/newview/llinventorylistitem.cpp
+++ b/indra/newview/llinventorylistitem.cpp
@@ -97,7 +97,8 @@ void LLPanelInventoryListItemBase::draw()
 		LLRect separator_rect = getLocalRect();
 		separator_rect.mTop = separator_rect.mBottom;
 		separator_rect.mBottom -= mSeparatorImage->getHeight();
-		mSeparatorImage->draw(separator_rect);
+		F32 alpha = getCurrentTransparency();
+		mSeparatorImage->draw(separator_rect, UI_VERTEX_COLOR % alpha);
 	}
 	
 	LLPanel::draw();
-- 
cgit v1.2.3


From d18e4c68843d524e871ffb24427a9df52dce1243 Mon Sep 17 00:00:00 2001
From: Leyla Farazha <leyla@lindenlab.com>
Date: Wed, 24 Nov 2010 10:26:21 -0800
Subject: DN-207: "Investigate why &quot;unknown&quot; is appearing in My
 Friends list"

---
 indra/newview/skins/default/xui/en/panel_avatar_list_item.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml
index 6f3629cc8f..4b21ffa1f9 100644
--- a/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml
+++ b/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml
@@ -62,7 +62,7 @@
      name="avatar_name"
      top="6"
      use_ellipses="true"
-     value="Unknown"
+     value="(loading)"
      width="180" />
     <text
      follows="right"
-- 
cgit v1.2.3


From f2194ee5f6ae305b4eaa379168aefecf0aed477a Mon Sep 17 00:00:00 2001
From: eli_linden <eli@lindenlab.com>
Date: Wed, 24 Nov 2010 11:22:57 -0800
Subject: STORM-531 FIX Danish translation

---
 indra/newview/skins/default/xui/da/notifications.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/da/notifications.xml b/indra/newview/skins/default/xui/da/notifications.xml
index 1ca5fff2ca..63c06ec27e 100644
--- a/indra/newview/skins/default/xui/da/notifications.xml
+++ b/indra/newview/skins/default/xui/da/notifications.xml
@@ -849,7 +849,7 @@ For at få adgang til voksen regioner, skal beboere være alders-checket, enten
 		<usetemplate ignoretext="Start min browser for at se min konto historik" name="okcancelignore" notext="Cancel" yestext="Go to page"/>
 	</notification>
 	<notification name="ConfirmQuit">
-		Are you sure you want to quit?
+		Er du sikker på at du vil afslutte?
 		<usetemplate ignoretext="Bekræft før jeg afslutter" name="okcancelignore" notext="Afslut ikke" yestext="Quit"/>
 	</notification>
 	<notification name="DeleteItems">
-- 
cgit v1.2.3


From fa24e07065a048ef4f4dd29c733b6acbb7337336 Mon Sep 17 00:00:00 2001
From: Seth ProductEngine <slitovchuk@productengine.com>
Date: Wed, 24 Nov 2010 22:30:36 +0200
Subject: STORM-667 FIXED Default name tag color changed to white to increase
 contrast with default dark background.

---
 indra/newview/skins/default/colors.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml
index aeea2306f7..be94b40065 100644
--- a/indra/newview/skins/default/colors.xml
+++ b/indra/newview/skins/default/colors.xml
@@ -140,7 +140,7 @@
      reference="AvatarListItemIconOfflineColor" />
     <color
      name="BackgroundChatColor"
-     reference="DkGray_66" />
+     reference="White" />
     <color
      name="ButtonBorderColor"
      reference="Unused?" />
-- 
cgit v1.2.3


From 2b39cf6c2d732c13517072c7c928588cdc41a3d1 Mon Sep 17 00:00:00 2001
From: Andrew Productengine <adyukov@productengine.com>
Date: Thu, 25 Nov 2010 17:51:33 +0200
Subject: STORM-344 FIXED Fixed Speak button label shrinking when bottom bar
 has enough space for displaying full Speak label.

Bug was caused by counting only width added by last resize as usable for Speak button extending, so widening viewer window by few pixels many times when Speak is shrink would never let it expand regardless of available space.

- Added check for possible chiclet panel shrinking width- cause spare space goes to it when extending. If there is enough space to give from chiclets to Speak, Speak is extended.
---
 indra/newview/llbottomtray.cpp | 21 +++++++++++++++++----
 1 file changed, 17 insertions(+), 4 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp
index 29c2b7565e..6ccb5aaf54 100644
--- a/indra/newview/llbottomtray.cpp
+++ b/indra/newview/llbottomtray.cpp
@@ -1365,20 +1365,33 @@ void LLBottomTray::processExtendButtons(S32& available_width)
 		processExtendButton(*it, available_width);
 	}
 
+	const S32 chiclet_panel_width = mChicletPanel->getParent()->getRect().getWidth();
+	static const S32 chiclet_panel_min_width = mChicletPanel->getMinWidth();
+	const S32 available_width_chiclet = chiclet_panel_width - chiclet_panel_min_width;
+
 	// then try to extend Speak button
-	if (available_width > 0)
+	if (available_width > 0 || available_width_chiclet > 0)
 	{
 		S32 panel_max_width = mObjectDefaultWidthMap[RS_BUTTON_SPEAK];
 		S32 panel_width = mSpeakPanel->getRect().getWidth();
 		S32 possible_extend_width = panel_max_width - panel_width;
-		if (possible_extend_width >= 0 && possible_extend_width <= available_width)  // HACK: this button doesn't change size so possible_extend_width will be 0
+
+		if (possible_extend_width >= 0 && possible_extend_width <= available_width + available_width_chiclet)  // HACK: this button doesn't change size so possible_extend_width will be 0
 		{
 			mSpeakBtn->setLabelVisible(true);
 			mSpeakPanel->reshape(panel_max_width, mSpeakPanel->getRect().getHeight());
 			log(mSpeakBtn, "speak button is extended");
 
-			available_width -= possible_extend_width;
-
+			if( available_width > possible_extend_width)
+			{
+				available_width -= possible_extend_width;
+			}
+			else
+			{
+				S32 required_width = possible_extend_width - available_width;
+				available_width = 0;
+				mChicletPanel->getParent()->reshape(mChicletPanel->getParent()->getRect().getWidth() - required_width, mChicletPanel->getParent()->getRect().getHeight());
+			}
 			lldebugs << "Extending Speak button panel: " << mSpeakPanel->getName()
 				<< ", extended width: " << possible_extend_width
 				<< ", rest width to process: " << available_width
-- 
cgit v1.2.3


From 6a3efddaf6e1254c25c2640d9abc055ca661f24d Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Thu, 25 Nov 2010 20:20:11 +0200
Subject: STORM-676 FIXED Made color swatch control transparent if the floater
 it resides in is transparent.

---
 indra/newview/llcolorswatch.cpp | 30 ++++++++++++++++++++----------
 1 file changed, 20 insertions(+), 10 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llcolorswatch.cpp b/indra/newview/llcolorswatch.cpp
index e7634ff0f4..2bb54d3fe6 100644
--- a/indra/newview/llcolorswatch.cpp
+++ b/indra/newview/llcolorswatch.cpp
@@ -195,7 +195,7 @@ BOOL LLColorSwatchCtrl::handleMouseUp(S32 x, S32 y, MASK mask)
 // assumes GL state is set for 2D
 void LLColorSwatchCtrl::draw()
 {
-	F32 alpha = getDrawContext().mAlpha;
+	F32 alpha = getCurrentTransparency();
 	mBorder->setKeyboardFocusHighlight(hasFocus());
 	// Draw border
 	LLRect border( 0, getRect().getHeight(), getRect().getWidth(), mLabelHeight );
@@ -207,19 +207,29 @@ void LLColorSwatchCtrl::draw()
 	// Check state
 	if ( mValid )
 	{
+		if (!mColor.isOpaque())
+		{
+			// Draw checker board.
+			gl_rect_2d_checkerboard(interior, alpha);
+		}
+
 		// Draw the color swatch
-		gl_rect_2d_checkerboard( interior );
-		gl_rect_2d(interior, mColor, TRUE);
-		LLColor4 opaque_color = mColor;
-		opaque_color.mV[VALPHA] = 1.f;
-		gGL.color4fv(opaque_color.mV);
-		if (mAlphaGradientImage.notNull())
+		gl_rect_2d(interior, mColor % alpha, TRUE);
+
+		if (!mColor.isOpaque())
 		{
-			gGL.pushMatrix();
+			// Draw semi-transparent center area in filled with mColor.
+			LLColor4 opaque_color = mColor;
+			opaque_color.mV[VALPHA] = alpha;
+			gGL.color4fv(opaque_color.mV);
+			if (mAlphaGradientImage.notNull())
 			{
-				mAlphaGradientImage->draw(interior, mColor);
+				gGL.pushMatrix();
+				{
+					mAlphaGradientImage->draw(interior, mColor % alpha);
+				}
+				gGL.popMatrix();
 			}
-			gGL.popMatrix();
 		}
 	}
 	else
-- 
cgit v1.2.3


From d1549c18b0d126ae3fcc28449901a90214111676 Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Thu, 25 Nov 2010 23:19:12 +0200
Subject: STORM-676 ADDITIONAL FIX Added transparency support to the color
 picker floater.

---
 indra/newview/llfloatercolorpicker.cpp | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloatercolorpicker.cpp b/indra/newview/llfloatercolorpicker.cpp
index 69f1774ff8..998c22f42d 100644
--- a/indra/newview/llfloatercolorpicker.cpp
+++ b/indra/newview/llfloatercolorpicker.cpp
@@ -533,8 +533,10 @@ void LLFloaterColorPicker::draw()
 	// base floater stuff
 	LLFloater::draw ();
 
+	const F32 alpha = mCurrentTransparency; // mCurrentTransparency gets updated in LLFloater::draw()
+
 	// draw image for RGB area (not really RGB but you'll see what I mean...
-	gl_draw_image ( mRGBViewerImageLeft, mRGBViewerImageTop - mRGBViewerImageHeight, mRGBImage, LLColor4::white );
+	gl_draw_image ( mRGBViewerImageLeft, mRGBViewerImageTop - mRGBViewerImageHeight, mRGBImage, LLColor4::white % alpha);
 
 	// update 'cursor' into RGB Section
 	S32 xPos = ( S32 ) ( ( F32 )mRGBViewerImageWidth * getCurH () ) - 8;
@@ -556,7 +558,7 @@ void LLFloaterColorPicker::draw()
 				 mRGBViewerImageTop - mRGBViewerImageHeight,
 				 mRGBViewerImageLeft + mRGBViewerImageWidth + 1,
 				 mRGBViewerImageTop,
-				 LLColor4 ( 0.0f, 0.0f, 0.0f, 1.0f ),
+				 LLColor4 ( 0.0f, 0.0f, 0.0f, alpha ),
 				 FALSE );
 
 	// draw luminance slider
@@ -569,7 +571,7 @@ void LLFloaterColorPicker::draw()
 			mLumRegionTop - mLumRegionHeight + y, 
 				mLumRegionLeft + mLumRegionWidth, 
 					mLumRegionTop - mLumRegionHeight + y - 1, 
-						LLColor4 ( rValSlider, gValSlider, bValSlider, 1.0f ) );
+						LLColor4 ( rValSlider, gValSlider, bValSlider, alpha ) );
 	}
 
 
@@ -594,7 +596,7 @@ void LLFloaterColorPicker::draw()
 				 mSwatchRegionTop - mSwatchRegionHeight,
 				 mSwatchRegionLeft + mSwatchRegionWidth,
 				 mSwatchRegionTop,
-				 LLColor4 ( getCurR (), getCurG (), getCurB (), 1.0f ),
+				 LLColor4 ( getCurR (), getCurG (), getCurB (), alpha ),
 				 TRUE );
 
 	// draw selected color swatch outline
@@ -648,7 +650,7 @@ void LLFloaterColorPicker::drawPalette ()
 			// draw palette entry color
 			if ( mPalette [ curEntry ] )
 			{
-				gl_rect_2d ( x1 + 2, y1 - 2, x2 - 2, y2 + 2, *mPalette [ curEntry++ ], TRUE );
+				gl_rect_2d ( x1 + 2, y1 - 2, x2 - 2, y2 + 2, *mPalette [ curEntry++ ] % mCurrentTransparency, TRUE );
 				gl_rect_2d ( x1 + 1, y1 - 1, x2 - 1, y2 + 1, LLColor4 ( 0.0f, 0.0f, 0.0f, 1.0f ), FALSE );
 			}
 		}
-- 
cgit v1.2.3


From 393514f3dc35e005d7359acaa79cb36ea19b7d59 Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Thu, 25 Nov 2010 23:26:55 +0200
Subject: STORM-677 FIXED Made texture picker control transparent if the
 floater it resides in is transparent.

Also added transparency support to the texture picker floater.
---
 indra/newview/lltexturectrl.cpp | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp
index 328298bda4..759f68b321 100644
--- a/indra/newview/lltexturectrl.cpp
+++ b/indra/newview/lltexturectrl.cpp
@@ -564,25 +564,26 @@ void LLFloaterTexturePicker::draw()
 		LLRect interior = border;
 		interior.stretch( -1 ); 
 
+		const F32 alpha = mCurrentTransparency; // mCurrentTransparency gets updated in LLFloater::draw()
 		if( mTexturep )
 		{
 			if( mTexturep->getComponents() == 4 )
 			{
-				gl_rect_2d_checkerboard( interior );
+				gl_rect_2d_checkerboard( interior, alpha );
 			}
 
-			gl_draw_scaled_image( interior.mLeft, interior.mBottom, interior.getWidth(), interior.getHeight(), mTexturep );
+			gl_draw_scaled_image( interior.mLeft, interior.mBottom, interior.getWidth(), interior.getHeight(), mTexturep, UI_VERTEX_COLOR % alpha );
 
 			// Pump the priority
 			mTexturep->addTextureStats( (F32)(interior.getWidth() * interior.getHeight()) );
 		}
 		else if (!mFallbackImage.isNull())
 		{
-			mFallbackImage->draw(interior);
+			mFallbackImage->draw(interior, UI_VERTEX_COLOR % alpha);
 		}
 		else
 		{
-			gl_rect_2d( interior, LLColor4::grey, TRUE );
+			gl_rect_2d( interior, LLColor4::grey % alpha, TRUE );
 
 			// Draw X
 			gl_draw_x(interior, LLColor4::black );
@@ -1263,23 +1264,24 @@ void LLTextureCtrl::draw()
 	LLRect interior = border;
 	interior.stretch( -1 ); 
 
+	const F32 alpha = getCurrentTransparency();
 	if( mTexturep )
 	{
 		if( mTexturep->getComponents() == 4 )
 		{
-			gl_rect_2d_checkerboard( interior );
+			gl_rect_2d_checkerboard( interior, alpha );
 		}
 		
-		gl_draw_scaled_image( interior.mLeft, interior.mBottom, interior.getWidth(), interior.getHeight(), mTexturep);
+		gl_draw_scaled_image( interior.mLeft, interior.mBottom, interior.getWidth(), interior.getHeight(), mTexturep, UI_VERTEX_COLOR % alpha);
 		mTexturep->addTextureStats( (F32)(interior.getWidth() * interior.getHeight()) );
 	}
 	else if (!mFallbackImage.isNull())
 	{
-		mFallbackImage->draw(interior);
+		mFallbackImage->draw(interior, UI_VERTEX_COLOR % alpha);
 	}
 	else
 	{
-		gl_rect_2d( interior, LLColor4::grey, TRUE );
+		gl_rect_2d( interior, LLColor4::grey % alpha, TRUE );
 
 		// Draw X
 		gl_draw_x( interior, LLColor4::black );
-- 
cgit v1.2.3


From 37116479d299f23a289e39accc3899d6ea977203 Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Fri, 26 Nov 2010 18:14:26 +0200
Subject: STORM-557 FIXED Update the "add/remove friend" buttons in the
 nearby/recent people panels whenever our friend list changes.

---
 indra/newview/llpanelpeople.cpp | 36 +++++++++++++++++++++++++++++++-----
 indra/newview/llpanelpeople.h   |  1 +
 2 files changed, 32 insertions(+), 5 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp
index 71c812efe2..f4abb45319 100644
--- a/indra/newview/llpanelpeople.cpp
+++ b/indra/newview/llpanelpeople.cpp
@@ -231,7 +231,7 @@ public:
 	virtual void setActive(bool) {}
 
 protected:
-	void updateList()
+	void update()
 	{
 		mCallback();
 	}
@@ -239,6 +239,30 @@ protected:
 	callback_t		mCallback;
 };
 
+/**
+ * Update buttons on changes in our friend relations (STORM-557).
+ */
+class LLButtonsUpdater : public LLPanelPeople::Updater, public LLFriendObserver
+{
+public:
+	LLButtonsUpdater(callback_t cb)
+	:	LLPanelPeople::Updater(cb)
+	{
+		LLAvatarTracker::instance().addObserver(this);
+	}
+
+	~LLButtonsUpdater()
+	{
+		LLAvatarTracker::instance().removeObserver(this);
+	}
+
+	/*virtual*/ void changed(U32 mask)
+	{
+		(void) mask;
+		update();
+	}
+};
+
 class LLAvatarListUpdater : public LLPanelPeople::Updater, public LLEventTimer
 {
 public:
@@ -306,7 +330,7 @@ public:
 
 		if (mMask & (LLFriendObserver::ADD | LLFriendObserver::REMOVE | LLFriendObserver::ONLINE))
 		{
-			updateList();
+			update();
 		}
 
 		// Stop updates.
@@ -421,7 +445,7 @@ public:
 		if (val)
 		{
 			// update immediately and start regular updates
-			updateList();
+			update();
 			mEventTimer.start(); 
 		}
 		else
@@ -433,7 +457,7 @@ public:
 
 	/*virtual*/ BOOL tick()
 	{
-		updateList();
+		update();
 		return FALSE;
 	}
 private:
@@ -450,7 +474,7 @@ public:
 	LLRecentListUpdater(callback_t cb)
 	:	LLAvatarListUpdater(cb, 0)
 	{
-		LLRecentPeople::instance().setChangedCallback(boost::bind(&LLRecentListUpdater::updateList, this));
+		LLRecentPeople::instance().setChangedCallback(boost::bind(&LLRecentListUpdater::update, this));
 	}
 };
 
@@ -475,11 +499,13 @@ LLPanelPeople::LLPanelPeople()
 	mFriendListUpdater = new LLFriendListUpdater(boost::bind(&LLPanelPeople::updateFriendList,	this));
 	mNearbyListUpdater = new LLNearbyListUpdater(boost::bind(&LLPanelPeople::updateNearbyList,	this));
 	mRecentListUpdater = new LLRecentListUpdater(boost::bind(&LLPanelPeople::updateRecentList,	this));
+	mButtonsUpdater = new LLButtonsUpdater(boost::bind(&LLPanelPeople::updateButtons, this));
 	mCommitCallbackRegistrar.add("People.addFriend", boost::bind(&LLPanelPeople::onAddFriendButtonClicked, this));
 }
 
 LLPanelPeople::~LLPanelPeople()
 {
+	delete mButtonsUpdater;
 	delete mNearbyListUpdater;
 	delete mFriendListUpdater;
 	delete mRecentListUpdater;
diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h
index 4412aed062..b496bb3779 100644
--- a/indra/newview/llpanelpeople.h
+++ b/indra/newview/llpanelpeople.h
@@ -152,6 +152,7 @@ private:
 	Updater*				mFriendListUpdater;
 	Updater*				mNearbyListUpdater;
 	Updater*				mRecentListUpdater;
+	Updater*				mButtonsUpdater;
 
 	LLMenuButton*			mNearbyGearButton;
 	LLMenuButton*			mFriendsGearButton;
-- 
cgit v1.2.3


From 7a674fc9b3634454b1c542b029c57f08df88425c Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Mon, 29 Nov 2010 16:18:03 +0200
Subject: STORM-698 FIXED Icon control can now respect floater transparency (if
 its "use_draw_context_alpha" param set to false).

---
 indra/newview/skins/default/xui/en/widgets/avatar_icon.xml | 4 +++-
 indra/newview/skins/default/xui/en/widgets/icon.xml        | 1 +
 2 files changed, 4 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/widgets/avatar_icon.xml b/indra/newview/skins/default/xui/en/widgets/avatar_icon.xml
index a35e2c3663..a1e32e44de 100644
--- a/indra/newview/skins/default/xui/en/widgets/avatar_icon.xml
+++ b/indra/newview/skins/default/xui/en/widgets/avatar_icon.xml
@@ -1,4 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 
-<avatar_icon default_icon_name="Generic_Person_Large">
+<avatar_icon
+    default_icon_name="Generic_Person_Large"
+    use_draw_context_alpha="false">
 </avatar_icon>
diff --git a/indra/newview/skins/default/xui/en/widgets/icon.xml b/indra/newview/skins/default/xui/en/widgets/icon.xml
index adb743a628..cf8edfcedb 100644
--- a/indra/newview/skins/default/xui/en/widgets/icon.xml
+++ b/indra/newview/skins/default/xui/en/widgets/icon.xml
@@ -3,5 +3,6 @@
       tab_stop="false"
       mouse_opaque="false"
       name="icon"
+      use_draw_context_alpha="true"
       follows="left|top">
 </icon>
-- 
cgit v1.2.3


From bca2162c4fac7f80f6137f4a8bae9bc7740eb8e1 Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Mon, 29 Nov 2010 16:42:05 +0200
Subject: STORM-685 FIXED Made the "Buy L$" floater respect transparency
 settings.

Enabled the floater's background icons obey floater transparency.
---
 indra/newview/skins/default/xui/en/floater_buy_currency.xml | 2 ++
 1 file changed, 2 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/floater_buy_currency.xml b/indra/newview/skins/default/xui/en/floater_buy_currency.xml
index cd5922a9a2..49deb9b025 100644
--- a/indra/newview/skins/default/xui/en/floater_buy_currency.xml
+++ b/indra/newview/skins/default/xui/en/floater_buy_currency.xml
@@ -20,6 +20,7 @@
      left="0"
      name="normal_background"
      top="17"
+     use_draw_context_alpha="false"
      width="350" />
    <text
      type="string"
@@ -292,6 +293,7 @@ Re-enter amount to see the latest exchange rate.
      left="0"
      name="error_background"
      top="15"
+     use_draw_context_alpha="false"
      width="350"/>
     <text
      type="string"
-- 
cgit v1.2.3


From 2f0919b175444221783942ce6f49e2e04a725227 Mon Sep 17 00:00:00 2001
From: Paul Guslisty <pguslisty@productengine.com>
Date: Mon, 29 Nov 2010 16:48:58 +0200
Subject: STORM-688 FIXED Sidebar becomes semitransparent if dock
 semitransparent side panel back to the Sidebar

- Before docking the tab back to the sidetray, set floater's children to non-transparent state

- After detaching tab from the sidetray there is no need to set manually floater's children transparency. It happens automatically when floater gets focus.
---
 indra/newview/llsidetray.cpp | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llsidetray.cpp b/indra/newview/llsidetray.cpp
index a4f855f279..526f3d1e77 100644
--- a/indra/newview/llsidetray.cpp
+++ b/indra/newview/llsidetray.cpp
@@ -118,7 +118,7 @@ public:
 protected:
 	LLSideTrayTab(const Params& params);
 	
-	void			dock();
+	void			dock(LLFloater* floater_tab);
 	void			undock(LLFloater* floater_tab);
 
 	LLSideTray*		getSideTray();
@@ -259,7 +259,7 @@ void LLSideTrayTab::toggleTabDocked()
 
 	if (docking)
 	{
-		dock();
+		dock(floater_tab);
 	}
 	else
 	{
@@ -271,11 +271,14 @@ void LLSideTrayTab::toggleTabDocked()
 	LLFloaterReg::toggleInstance("side_bar_tab", tab_name);
 }
 
-void LLSideTrayTab::dock()
+void LLSideTrayTab::dock(LLFloater* floater_tab)
 {
 	LLSideTray* side_tray = getSideTray();
 	if (!side_tray) return;
 
+	// Before docking the tab, reset its (and its children's) transparency to default (STORM-688).
+	floater_tab->updateChildrenTransparency(TT_DEFAULT);
+
 	if (!side_tray->addTab(this))
 	{
 		llwarns << "Failed to add tab " << getName() << " to side tray" << llendl;
-- 
cgit v1.2.3


From 85c75c9ce3b68a82d5f891ef21ea10ddf012ecc4 Mon Sep 17 00:00:00 2001
From: Paul Guslisty <pguslisty@productengine.com>
Date: Mon, 29 Nov 2010 20:04:26 +0200
Subject: STORM-689 FIXED "Back" but is opaque in all of the undocked side
 panels

- Added parameter to the button that defines which transparency value should be used: value of drawing context or transparency value of a its parent (in our case this parent is floater)
---
 indra/newview/skins/default/xui/en/panel_classified_info.xml     | 3 ++-
 indra/newview/skins/default/xui/en/panel_edit_classified.xml     | 3 ++-
 indra/newview/skins/default/xui/en/panel_edit_pick.xml           | 3 ++-
 indra/newview/skins/default/xui/en/panel_edit_wearable.xml       | 3 ++-
 indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml | 3 ++-
 indra/newview/skins/default/xui/en/panel_landmark_info.xml       | 3 ++-
 indra/newview/skins/default/xui/en/panel_outfit_edit.xml         | 3 ++-
 indra/newview/skins/default/xui/en/panel_pick_info.xml           | 3 ++-
 indra/newview/skins/default/xui/en/panel_place_profile.xml       | 3 ++-
 indra/newview/skins/default/xui/en/panel_profile_view.xml        | 3 ++-
 indra/newview/skins/default/xui/en/sidepanel_item_info.xml       | 3 ++-
 indra/newview/skins/default/xui/en/sidepanel_task_info.xml       | 3 ++-
 indra/newview/skins/default/xui/en/widgets/button.xml            | 3 ++-
 13 files changed, 26 insertions(+), 13 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_classified_info.xml b/indra/newview/skins/default/xui/en/panel_classified_info.xml
index 0fb7691ee7..6c8d994bc6 100644
--- a/indra/newview/skins/default/xui/en/panel_classified_info.xml
+++ b/indra/newview/skins/default/xui/en/panel_classified_info.xml
@@ -49,7 +49,8 @@
      left="10"
      tab_stop="false"
      top="2"
-     width="30" />
+     width="30"
+     use_draw_context_alpha="false" />
     <text
      follows="top|left|right"
      font="SansSerifHugeBold"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_classified.xml b/indra/newview/skins/default/xui/en/panel_edit_classified.xml
index f60c1e62ac..e512d63f9e 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_classified.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_classified.xml
@@ -33,7 +33,8 @@
      left="10"
      tab_stop="false"
      top="2"
-     width="30" />
+     width="30"
+     use_draw_context_alpha="false" />
    <text
      type="string"
      length="1"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_pick.xml b/indra/newview/skins/default/xui/en/panel_edit_pick.xml
index a284d3ccc0..a028e3ab9f 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_pick.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_pick.xml
@@ -27,7 +27,8 @@
      left="10"
      tab_stop="false"
      top="2"
-     width="30" />
+     width="30"
+     use_draw_context_alpha="false" />
    <text
      type="string"
      length="1"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml
index b3e9586ee9..ac8917d272 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml
@@ -147,7 +147,8 @@
      pad_left="24"
      tool_tip="Return to Edit Outfit"
      top="3"
-     width="30" />
+     width="30"
+     use_draw_context_alpha="false" />
     <text
      follows="top|left|right"
      font="SansSerifHugeBold"
diff --git a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
index 0347d2feec..ec3f3b48bc 100644
--- a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
@@ -45,7 +45,8 @@ background_visible="true"
      left="7"
      tab_stop="false"
      top="2"
-     width="30" />
+     width="30"
+     use_draw_context_alpha="false" />
     <text_editor
      allow_scroll="false"
      bg_visible="false"
diff --git a/indra/newview/skins/default/xui/en/panel_landmark_info.xml b/indra/newview/skins/default/xui/en/panel_landmark_info.xml
index 6ee2abc70f..d2088594dd 100644
--- a/indra/newview/skins/default/xui/en/panel_landmark_info.xml
+++ b/indra/newview/skins/default/xui/en/panel_landmark_info.xml
@@ -68,7 +68,8 @@
      tool_tip="Back"
      tab_stop="false"
      top="4"
-     width="30" />
+     width="30"
+     use_draw_context_alpha="false" />
     <text
      follows="top|left|right"
      font="SansSerifHugeBold"
diff --git a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml
index f4dee9cd55..e1cd78bad8 100644
--- a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml
+++ b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml
@@ -70,7 +70,8 @@
      left="5"
      tab_stop="false"
      top="1"
-     width="30" />
+     width="30"
+     use_draw_context_alpha="false" />
     <text
      follows="top|left|right"
      font="SansSerifHugeBold"
diff --git a/indra/newview/skins/default/xui/en/panel_pick_info.xml b/indra/newview/skins/default/xui/en/panel_pick_info.xml
index 0496c86215..7daa52b2d9 100644
--- a/indra/newview/skins/default/xui/en/panel_pick_info.xml
+++ b/indra/newview/skins/default/xui/en/panel_pick_info.xml
@@ -21,7 +21,8 @@
      left="10"
      tab_stop="false"
      top="2"
-     width="30" />
+     width="30"
+     use_draw_context_alpha="false" />
     <text
      follows="top|left|right"
      font="SansSerifHugeBold"
diff --git a/indra/newview/skins/default/xui/en/panel_place_profile.xml b/indra/newview/skins/default/xui/en/panel_place_profile.xml
index 8036411d2b..7e89860c60 100644
--- a/indra/newview/skins/default/xui/en/panel_place_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_place_profile.xml
@@ -165,7 +165,8 @@
      tool_tip="Back"
      tab_stop="false"
      top="4"
-     width="30" />
+     width="30"
+     use_draw_context_alpha="false" />
     <text
      follows="top|left|right"
      font="SansSerifHugeBold"
diff --git a/indra/newview/skins/default/xui/en/panel_profile_view.xml b/indra/newview/skins/default/xui/en/panel_profile_view.xml
index 97229c413c..c553a3aba0 100644
--- a/indra/newview/skins/default/xui/en/panel_profile_view.xml
+++ b/indra/newview/skins/default/xui/en/panel_profile_view.xml
@@ -27,7 +27,8 @@
    left="10"
    tab_stop="false"
    top="2"
-   width="30" />
+   width="30"
+   use_draw_context_alpha="false" />
   <text
    top="10"
    follows="top|left"
diff --git a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
index 6940d1549b..54a312bd59 100644
--- a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
@@ -56,7 +56,8 @@
      name="back_btn"
      tab_stop="false"
      top="2"
-     width="30" />
+     width="30"
+     use_draw_context_alpha="false" />
     <text
      follows="top|left|right"
      font="SansSerifHugeBold"
diff --git a/indra/newview/skins/default/xui/en/sidepanel_task_info.xml b/indra/newview/skins/default/xui/en/sidepanel_task_info.xml
index ca63d2df39..afaf41d073 100644
--- a/indra/newview/skins/default/xui/en/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_task_info.xml
@@ -65,7 +65,8 @@
      name="back_btn"
      tab_stop="false"
      top="0"
-     width="30" />
+     width="30"
+     use_draw_context_alpha="false" />
         <text
      follows="top|left|right"
      font="SansSerifHuge"
diff --git a/indra/newview/skins/default/xui/en/widgets/button.xml b/indra/newview/skins/default/xui/en/widgets/button.xml
index 2d0a1728d5..1746a045cf 100644
--- a/indra/newview/skins/default/xui/en/widgets/button.xml
+++ b/indra/newview/skins/default/xui/en/widgets/button.xml
@@ -24,5 +24,6 @@
         halign="center"
         pad_bottom="3" 
         height="23"
-        scale_image="true">
+        scale_image="true"
+        use_draw_context_alpha="true">
 </button>
-- 
cgit v1.2.3


From 76ba60db0b01316022c9af7ef996f84d5141485d Mon Sep 17 00:00:00 2001
From: brad kittenbrink <brad@lindenlab.com>
Date: Mon, 29 Nov 2010 15:19:52 -0800
Subject: Better fix for CHOP-223. Comments on the mercurial bug tracker
 indicate that this bug is likely to recur, so we work around it in
 viewer_manifest.py now. http://mercurial.selenic.com/bts/issue1802

---
 indra/newview/viewer_manifest.py | 11 +++++++++++
 1 file changed, 11 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index 1bc118139f..9a99c17f30 100644
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -711,6 +711,11 @@ class DarwinManifest(ViewerManifest):
             self.run_command('strip -S %(viewer_binary)r' %
                              { 'viewer_binary' : self.dst_path_of('Contents/MacOS/Second Life')})
 
+    def copy_finish(self):
+        # Force executable permissions to be set for scripts
+        # see CHOP-223 and http://mercurial.selenic.com/bts/issue1802
+        for script in 'MacOS/update_install':
+            self.run_command("chmod +x %r" % os.path.join(self.get_dst_prefix(), script))
 
     def package_finish(self):
         channel_standin = 'Second Life Viewer 2'  # hah, our default channel is not usable on its own
@@ -866,6 +871,12 @@ class LinuxManifest(ViewerManifest):
 
         self.path("featuretable_linux.txt")
 
+    def copy_finish(self):
+        # Force executable permissions to be set for scripts
+        # see CHOP-223 and http://mercurial.selenic.com/bts/issue1802
+        for script in 'secondlife', 'bin/update_install':
+            self.run_command("chmod +x %r" % os.path.join(self.get_dst_prefix(), script))
+
     def package_finish(self):
         if 'installer_name' in self.args:
             installer_name = self.args['installer_name']
-- 
cgit v1.2.3


From 7c287011f9474be8c57374768950e40386e1b0ec Mon Sep 17 00:00:00 2001
From: brad kittenbrink <brad@lindenlab.com>
Date: Mon, 29 Nov 2010 15:49:48 -0800
Subject: CHOP-223 fix for mac build breakage introduced in the last change.

---
 indra/newview/viewer_manifest.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index 9a99c17f30..ea62760f31 100644
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -714,7 +714,7 @@ class DarwinManifest(ViewerManifest):
     def copy_finish(self):
         # Force executable permissions to be set for scripts
         # see CHOP-223 and http://mercurial.selenic.com/bts/issue1802
-        for script in 'MacOS/update_install':
+        for script in 'MacOS/update_install',:
             self.run_command("chmod +x %r" % os.path.join(self.get_dst_prefix(), script))
 
     def package_finish(self):
-- 
cgit v1.2.3


From ee981dd58103f7ee332ff264031b4cca0c85e759 Mon Sep 17 00:00:00 2001
From: brad kittenbrink <brad@lindenlab.com>
Date: Mon, 29 Nov 2010 16:22:20 -0800
Subject: CHOP-223 fix for more mac build breakage from the previous changes.

---
 indra/newview/viewer_manifest.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index ea62760f31..6c77f8ec38 100644
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -714,7 +714,7 @@ class DarwinManifest(ViewerManifest):
     def copy_finish(self):
         # Force executable permissions to be set for scripts
         # see CHOP-223 and http://mercurial.selenic.com/bts/issue1802
-        for script in 'MacOS/update_install',:
+        for script in 'Contents/MacOS/update_install',:
             self.run_command("chmod +x %r" % os.path.join(self.get_dst_prefix(), script))
 
     def package_finish(self):
-- 
cgit v1.2.3


From ece58a9dc0682968b425b5f316078ddb4dba8020 Mon Sep 17 00:00:00 2001
From: Merov Linden <merov@lindenlab.com>
Date: Mon, 29 Nov 2010 16:22:24 -0800
Subject: STORM-672 : Fix duplicated name in Pref panel

---
 indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
index 3ceee60927..6573822d1a 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
@@ -181,7 +181,7 @@
 		 label="Transparent Water"
 		 layout="topleft"
 		 left_delta="0"
-		 name="BumpShiny"
+		 name="TransparentWater"
 		 top_pad="7"
 		 width="256" />
 		<check_box
-- 
cgit v1.2.3


From 05b7ee4a9bb762f484156f1bf3dfa602030f7942 Mon Sep 17 00:00:00 2001
From: brad kittenbrink <brad@lindenlab.com>
Date: Mon, 29 Nov 2010 17:00:28 -0800
Subject: Fix UpdaterServiceURL setting default.  update.secondlife.com
 requires https access.

---
 indra/newview/app_settings/settings.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 0f946b0f0b..7dbb375a20 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -11121,7 +11121,7 @@
       <key>Type</key>
       <string>String</string>
       <key>Value</key>
-      <string>http://update.secondlife.com</string>
+      <string>https://update.secondlife.com</string>
     </map>
     <key>UpdaterServicePath</key>
     <map>
-- 
cgit v1.2.3


From 7fedfda82504a8881b7d19d6c6f00fba849e615f Mon Sep 17 00:00:00 2001
From: Andrew Productengine <adyukov@productengine.com>
Date: Tue, 30 Nov 2010 13:26:06 +0200
Subject: STORM-673 FIXED Renamed block list label in privacy panel to avoid
 name duplication.

---
 indra/newview/skins/default/xui/en/panel_preferences_privacy.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
index 2ddb81559f..626122c0b0 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
@@ -185,7 +185,7 @@
      layout="topleft"
      left_pad="10"
      mouse_opaque="false"
-     name="cache_size_label_l"
+     name="block_list_label"
      top_delta="3"
      text_color="LtGray_50"
      width="300">
-- 
cgit v1.2.3


From 4d8fd22fd85429c4f77f8a2d277f4c225fc0fea0 Mon Sep 17 00:00:00 2001
From: Paul Guslisty <pguslisty@productengine.com>
Date: Tue, 30 Nov 2010 13:27:36 +0200
Subject: STORM-697 FIXED Nearby Chat window is semitransparent even if
 inactive opacity is 1

- Deleted custom images of floater to use default
---
 indra/newview/skins/default/xui/en/floater_nearby_chat.xml | 3 ---
 1 file changed, 3 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/floater_nearby_chat.xml b/indra/newview/skins/default/xui/en/floater_nearby_chat.xml
index 4c5113aa55..ab966dbb0e 100644
--- a/indra/newview/skins/default/xui/en/floater_nearby_chat.xml
+++ b/indra/newview/skins/default/xui/en/floater_nearby_chat.xml
@@ -2,9 +2,6 @@
 <floater
  border_visible="false"
  border="false"
- bg_opaque_image="Window_Foreground" 
- bg_alpha_image="Window_Background" 
- bg_alpha_image_overlay="DkGray_66" 
  legacy_header_height="18"
  can_minimize="true"
  can_tear_off="false"
-- 
cgit v1.2.3


From d3dbdf6f51ae9cada4a5a450387c0688ccbe07a1 Mon Sep 17 00:00:00 2001
From: Paul Guslisty <pguslisty@productengine.com>
Date: Tue, 30 Nov 2010 16:36:03 +0200
Subject: STORM-696 FIXED Event Details floater doesn't follow opacity settings

- Deleted unnecessary draw() method that didn't call base LLFloater::draw() method.
---
 indra/newview/llfloaterevent.cpp | 5 -----
 indra/newview/llfloaterevent.h   | 1 -
 2 files changed, 6 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloaterevent.cpp b/indra/newview/llfloaterevent.cpp
index 0b5ac8e798..a6dafda3e6 100644
--- a/indra/newview/llfloaterevent.cpp
+++ b/indra/newview/llfloaterevent.cpp
@@ -117,8 +117,3 @@ void LLFloaterEvent::setEventID(const U32 event_id)
 		
 	}
 }
-
-void LLFloaterEvent::draw()
-{
-	LLPanel::draw();
-}
diff --git a/indra/newview/llfloaterevent.h b/indra/newview/llfloaterevent.h
index b1963309da..ed90055d95 100644
--- a/indra/newview/llfloaterevent.h
+++ b/indra/newview/llfloaterevent.h
@@ -43,7 +43,6 @@ public:
 	/*virtual*/ ~LLFloaterEvent();
 
 	/*virtual*/ BOOL postBuild();
-	/*virtual*/ void draw();
 
 	void setEventID(const U32 event_id);
 
-- 
cgit v1.2.3


From e67e5cbc404d61efa4d5b3a454f55ecc194af43d Mon Sep 17 00:00:00 2001
From: Loren Shih <seraph@lindenlab.com>
Date: Tue, 30 Nov 2010 10:54:36 -0500
Subject: SH-435 FIXED Crash on login from infinite loop in LLVOAvatarSelf

Added additional check to prevent infinite loop.
Blind fix since we have no repro.
---
 indra/newview/llvoavatarself.cpp | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp
index 0250627d1b..5f9e343907 100644
--- a/indra/newview/llvoavatarself.cpp
+++ b/indra/newview/llvoavatarself.cpp
@@ -783,11 +783,19 @@ void LLVOAvatarSelf::removeMissingBakedTextures()
 	for (U32 i = 0; i < mBakedTextureDatas.size(); i++)
 	{
 		const S32 te = mBakedTextureDatas[i].mTextureIndex;
-		LLViewerTexture* tex = getTEImage(te) ;
+		const LLViewerTexture* tex = getTEImage(te);
+
+		// Replace with default if we can't find the asset, assuming the
+		// default is actually valid (which it should be unless something
+		// is seriously wrong).
 		if (!tex || tex->isMissingAsset())
 		{
-			setTEImage(te, LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT_AVATAR));
-			removed = TRUE;
+			LLViewerTexture *imagep = LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT_AVATAR);
+			if (imagep)
+			{
+				setTEImage(te, imagep);
+				removed = TRUE;
+			}
 		}
 	}
 
@@ -823,7 +831,6 @@ void LLVOAvatarSelf::updateRegion(LLViewerRegion *regionp)
 		//	<< llendl;
 	}
 
-
 	if (!regionp || (regionp->getHandle() != mLastRegionHandle))
 	{
 		if (mLastRegionHandle != 0)
-- 
cgit v1.2.3


From 23031612745c7f1094a77252b24039333420b8c5 Mon Sep 17 00:00:00 2001
From: Seth ProductEngine <slitovchuk@productengine.com>
Date: Tue, 30 Nov 2010 22:40:02 +0200
Subject: STORM-584 FIXED Chat font colors for "Me" and "Others" used for the
 bubble chat text. Bubble chat color picker now sets the background color for
 the name tag and bubble chat. Label for the color picker changed to "Bubble
 chat background" Removed unused "BackgroundChatColor" setting, using
 "NameTagBackground" instead.

---
 indra/newview/llvoavatar.cpp                                   |  2 +-
 indra/newview/skins/default/colors.xml                         |  3 ---
 .../newview/skins/default/xui/en/panel_preferences_colors.xml  | 10 +++++-----
 3 files changed, 6 insertions(+), 9 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 7ae1f672e8..f4dec9294f 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -3024,7 +3024,7 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
 				std::deque<LLChat>::iterator chat_iter = mChats.begin();
 				mNameText->clearString();
 
-		LLColor4 new_chat = LLUIColorTable::instance().getColor( "NameTagChat" );
+				LLColor4 new_chat = LLUIColorTable::instance().getColor( isSelf() ? "UserChatColor" : "AgentChatColor" );
 				LLColor4 normal_chat = lerp(new_chat, LLColor4(0.8f, 0.8f, 0.8f, 1.f), 0.7f);
 				LLColor4 old_chat = lerp(normal_chat, LLColor4(0.6f, 0.6f, 0.6f, 1.f), 0.7f);
 				if (mTyping && mChats.size() >= MAX_BUBBLE_CHAT_UTTERANCES) 
diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml
index be94b40065..62441fd984 100644
--- a/indra/newview/skins/default/colors.xml
+++ b/indra/newview/skins/default/colors.xml
@@ -138,9 +138,6 @@
     <color
      name="AvatarListItemIconVoiceLeftColor"
      reference="AvatarListItemIconOfflineColor" />
-    <color
-     name="BackgroundChatColor"
-     reference="White" />
     <color
      name="ButtonBorderColor"
      reference="Unused?" />
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_colors.xml b/indra/newview/skins/default/xui/en/panel_preferences_colors.xml
index 0c75399764..acc10ce50a 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_colors.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_colors.xml
@@ -275,14 +275,14 @@
    height="12"
    name="bubble_chat"
    top_pad="20"
-   width="120"
+   width="140"
    >
-    Bubble chat:
+    Bubble chat background:
   </text>
   <color_swatch
    can_apply_immediately="true"
    color="0 0 0 1"
-   control_name="BackgroundChatColor"
+   control_name="NameTagBackground"
    follows="left|top"
    height="24"
    label_height="0"
@@ -294,10 +294,10 @@
    width="44">
    <color_swatch.init_callback
     function="Pref.getUIColor"
-    parameter="BackgroundChatColor" />
+    parameter="NameTagBackground" />
    <color_swatch.commit_callback
     function="Pref.applyUIColor"
-    parameter="BackgroundChatColor" />
+    parameter="NameTagBackground" />
   </color_swatch>
   <slider
    control_name="ChatBubbleOpacity"
-- 
cgit v1.2.3


From a2439b74df5adaed8127aac9fff94e88e15e51a9 Mon Sep 17 00:00:00 2001
From: Seth ProductEngine <slitovchuk@productengine.com>
Date: Tue, 30 Nov 2010 22:43:57 +0200
Subject: STORM-667 FIXED Backed out changeset: 67c66befd75c. Restored white
 color for name tag text.

---
 indra/newview/llhudnametag.cpp | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llhudnametag.cpp b/indra/newview/llhudnametag.cpp
index c099a3964b..fc758569e4 100644
--- a/indra/newview/llhudnametag.cpp
+++ b/indra/newview/llhudnametag.cpp
@@ -87,6 +87,7 @@ LLHUDNameTag::LLHUDNameTag(const U8 type)
 	mZCompare(TRUE),
 	mVisibleOffScreen(FALSE),
 	mOffscreen(FALSE),
+	mColor(1.f, 1.f, 1.f, 1.f),
 //	mScale(),
 	mWidth(0.f),
 	mHeight(0.f),
@@ -108,8 +109,6 @@ LLHUDNameTag::LLHUDNameTag(const U8 type)
 {
 	LLPointer<LLHUDNameTag> ptr(this);
 	sTextObjects.insert(ptr);
-
-	mColor = LLUIColorTable::instance().getColor("BackgroundChatColor");
 }
 
 LLHUDNameTag::~LLHUDNameTag()
@@ -257,7 +256,6 @@ void LLHUDNameTag::renderText(BOOL for_select)
 	
 	LLColor4 shadow_color(0.f, 0.f, 0.f, 1.f);
 	F32 alpha_factor = 1.f;
-	mColor = LLUIColorTable::instance().getColor("BackgroundChatColor");
 	LLColor4 text_color = mColor;
 	if (mDoFade)
 	{
@@ -523,6 +521,7 @@ void LLHUDNameTag::renderText(BOOL for_select)
 				x_offset += 1;
 			}
 
+			text_color = segment_iter->mColor;
 			text_color.mV[VALPHA] *= alpha_factor;
 
 			hud_render_text(segment_iter->getText(), render_position, *fontp, style, shadow, x_offset, y_offset, text_color, FALSE);
-- 
cgit v1.2.3


From 3c4cf5a309612d2a999453b282cad0aab7764083 Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Wed, 1 Dec 2010 15:46:57 +0200
Subject: STORM-677 ADDITIONAL_FIX Force textures inside texture picker to be
 100% opaque while the control is in a focused floater.

Besides, made LLFloater handle opacity more like other controls do.
---
 indra/newview/llnearbychat.cpp  | 13 +++++++++++++
 indra/newview/llnearbychat.h    |  1 +
 indra/newview/llsidetray.cpp    |  2 +-
 indra/newview/lltexturectrl.cpp |  6 ++++--
 4 files changed, 19 insertions(+), 3 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llnearbychat.cpp b/indra/newview/llnearbychat.cpp
index 180695e40b..572eeb8fc7 100644
--- a/indra/newview/llnearbychat.cpp
+++ b/indra/newview/llnearbychat.cpp
@@ -365,3 +365,16 @@ BOOL	LLNearbyChat::handleMouseDown(S32 x, S32 y, MASK mask)
 		mChatHistory->setFocus(TRUE);
 	return LLDockableFloater::handleMouseDown(x, y, mask);
 }
+
+void LLNearbyChat::draw()
+{
+	// *HACK: Update transparency type depending on whether our children have focus.
+	// This is needed because this floater is chrome and thus cannot accept focus, so
+	// the transparency type setting code from LLFloater::setFocus() isn't reached.
+	if (getTransparencyType() != TT_DEFAULT)
+	{
+		setTransparencyType(hasFocus() ? TT_ACTIVE : TT_INACTIVE);
+	}
+
+	LLDockableFloater::draw();
+}
diff --git a/indra/newview/llnearbychat.h b/indra/newview/llnearbychat.h
index 1e62910385..2ea79797f8 100644
--- a/indra/newview/llnearbychat.h
+++ b/indra/newview/llnearbychat.h
@@ -48,6 +48,7 @@ public:
 	bool	onNearbyChatCheckContextMenuItem(const LLSD& userdata);
 
 	virtual BOOL	handleMouseDown(S32 x, S32 y, MASK mask);
+	virtual void	draw();
 
 	// focus overrides
 	/*virtual*/ void	onFocusLost();
diff --git a/indra/newview/llsidetray.cpp b/indra/newview/llsidetray.cpp
index 526f3d1e77..3f8aeaf400 100644
--- a/indra/newview/llsidetray.cpp
+++ b/indra/newview/llsidetray.cpp
@@ -277,7 +277,7 @@ void LLSideTrayTab::dock(LLFloater* floater_tab)
 	if (!side_tray) return;
 
 	// Before docking the tab, reset its (and its children's) transparency to default (STORM-688).
-	floater_tab->updateChildrenTransparency(TT_DEFAULT);
+	floater_tab->updateTransparency(TT_DEFAULT);
 
 	if (!side_tray->addTab(this))
 	{
diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp
index 759f68b321..56e9739350 100644
--- a/indra/newview/lltexturectrl.cpp
+++ b/indra/newview/lltexturectrl.cpp
@@ -564,7 +564,8 @@ void LLFloaterTexturePicker::draw()
 		LLRect interior = border;
 		interior.stretch( -1 ); 
 
-		const F32 alpha = mCurrentTransparency; // mCurrentTransparency gets updated in LLFloater::draw()
+		// If the floater is focused, don't apply its alpha to the texture (STORM-677).
+		const F32 alpha = getTransparencyType() == TT_ACTIVE ? 1.0f : getCurrentTransparency();
 		if( mTexturep )
 		{
 			if( mTexturep->getComponents() == 4 )
@@ -1264,7 +1265,8 @@ void LLTextureCtrl::draw()
 	LLRect interior = border;
 	interior.stretch( -1 ); 
 
-	const F32 alpha = getCurrentTransparency();
+	// If we're in a focused floater, don't apply the floater's alpha to the texture (STORM-677).
+	const F32 alpha = getTransparencyType() == TT_ACTIVE ? 1.0f : getCurrentTransparency();
 	if( mTexturep )
 	{
 		if( mTexturep->getComponents() == 4 )
-- 
cgit v1.2.3


From 77061c1939565cbc977344744c2aac9788e5b250 Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Wed, 1 Dec 2010 16:01:52 +0200
Subject: STORM-676 ADDITIONAL_FIX Force color swatch to be 100% opaque while
 it's in a focused floater.

---
 indra/newview/llcolorswatch.cpp        |  4 +++-
 indra/newview/llfloatercolorpicker.cpp | 11 +++++++++--
 indra/newview/llfloatercolorpicker.h   |  1 +
 3 files changed, 13 insertions(+), 3 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llcolorswatch.cpp b/indra/newview/llcolorswatch.cpp
index 2bb54d3fe6..4a1ba6f1b5 100644
--- a/indra/newview/llcolorswatch.cpp
+++ b/indra/newview/llcolorswatch.cpp
@@ -195,7 +195,9 @@ BOOL LLColorSwatchCtrl::handleMouseUp(S32 x, S32 y, MASK mask)
 // assumes GL state is set for 2D
 void LLColorSwatchCtrl::draw()
 {
-	F32 alpha = getCurrentTransparency();
+	// If we're in a focused floater, don't apply the floater's alpha to the color swatch (STORM-676).
+	F32 alpha = getTransparencyType() == TT_ACTIVE ? 1.0f : getCurrentTransparency();
+
 	mBorder->setKeyboardFocusHighlight(hasFocus());
 	// Draw border
 	LLRect border( 0, getRect().getHeight(), getRect().getWidth(), mLabelHeight );
diff --git a/indra/newview/llfloatercolorpicker.cpp b/indra/newview/llfloatercolorpicker.cpp
index 998c22f42d..659e52271a 100644
--- a/indra/newview/llfloatercolorpicker.cpp
+++ b/indra/newview/llfloatercolorpicker.cpp
@@ -472,6 +472,12 @@ void LLFloaterColorPicker::onMouseCaptureLost()
 	setMouseDownInLumRegion(FALSE);
 }
 
+F32 LLFloaterColorPicker::getSwatchTransparency()
+{
+	// If the floater is focused, don't apply its alpha to the color swatch (STORM-676).
+	return getTransparencyType() == TT_ACTIVE ? 1.f : LLFloater::getCurrentTransparency();
+}
+
 //////////////////////////////////////////////////////////////////////////////
 //
 void LLFloaterColorPicker::draw()
@@ -533,7 +539,7 @@ void LLFloaterColorPicker::draw()
 	// base floater stuff
 	LLFloater::draw ();
 
-	const F32 alpha = mCurrentTransparency; // mCurrentTransparency gets updated in LLFloater::draw()
+	const F32 alpha = getSwatchTransparency();
 
 	// draw image for RGB area (not really RGB but you'll see what I mean...
 	gl_draw_image ( mRGBViewerImageLeft, mRGBViewerImageTop - mRGBViewerImageHeight, mRGBImage, LLColor4::white % alpha);
@@ -636,6 +642,7 @@ const LLColor4& LLFloaterColorPicker::getComplimentaryColor ( const LLColor4& ba
 void LLFloaterColorPicker::drawPalette ()
 {
 	S32 curEntry = 0;
+	const F32 alpha = getSwatchTransparency();
 
 	for ( S32 y = 0; y < numPaletteRows; ++y )
 	{
@@ -650,7 +657,7 @@ void LLFloaterColorPicker::drawPalette ()
 			// draw palette entry color
 			if ( mPalette [ curEntry ] )
 			{
-				gl_rect_2d ( x1 + 2, y1 - 2, x2 - 2, y2 + 2, *mPalette [ curEntry++ ] % mCurrentTransparency, TRUE );
+				gl_rect_2d ( x1 + 2, y1 - 2, x2 - 2, y2 + 2, *mPalette [ curEntry++ ] % alpha, TRUE );
 				gl_rect_2d ( x1 + 1, y1 - 1, x2 - 1, y2 + 1, LLColor4 ( 0.0f, 0.0f, 0.0f, 1.0f ), FALSE );
 			}
 		}
diff --git a/indra/newview/llfloatercolorpicker.h b/indra/newview/llfloatercolorpicker.h
index 110fa43b9c..8e387c4f7c 100644
--- a/indra/newview/llfloatercolorpicker.h
+++ b/indra/newview/llfloatercolorpicker.h
@@ -55,6 +55,7 @@ class LLFloaterColorPicker
 		virtual BOOL handleMouseUp ( S32 x, S32 y, MASK mask );
 		virtual BOOL handleHover ( S32 x, S32 y, MASK mask );
 		virtual void onMouseCaptureLost();
+		virtual F32  getSwatchTransparency();
 
 		// implicit methods
 		void createUI ();
-- 
cgit v1.2.3


From ae6127514e4e17839a1e528bd69bd2d8e96364c0 Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Wed, 1 Dec 2010 16:44:13 +0200
Subject: STORM-432 ADDITIONAL FIX  Disabled manual resizing of the bottom
 panel in the inventory SP.

---
 indra/newview/skins/default/xui/en/panel_main_inventory.xml | 4 ++++
 1 file changed, 4 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_main_inventory.xml b/indra/newview/skins/default/xui/en/panel_main_inventory.xml
index 2b6e082542..96633cb5b4 100644
--- a/indra/newview/skins/default/xui/en/panel_main_inventory.xml
+++ b/indra/newview/skins/default/xui/en/panel_main_inventory.xml
@@ -118,6 +118,7 @@
        height="25"
        layout="topleft"
        name="options_gear_btn_panel"
+       user_resize="false"
        width="32">
           <menu_button
            follows="bottom|left"
@@ -138,6 +139,7 @@
        height="25"
        layout="topleft"
        name="add_btn_panel"
+       user_resize="false"
        width="32">
           <button
            follows="bottom|left"
@@ -158,6 +160,7 @@
        height="25"
        layout="topleft"
        name="dummy_panel"
+       user_resize="false"
        width="212">
           <icon
            follows="bottom|left|right"
@@ -174,6 +177,7 @@
        height="25"
        layout="topleft"
        name="trash_btn_panel"
+       user_resize="false"
        width="31">
           <dnd_button
            follows="bottom|left"
-- 
cgit v1.2.3


From f6fba382fb06a592767a237f2fe8313a221ef6ad Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Wed, 1 Dec 2010 16:50:12 +0200
Subject: STORM-687 FIXED Applied floater transparency to snapshot preview
 texture (unless the floater is focused, see STORM-676 to know why).

---
 indra/newview/llfloaterpostcard.cpp | 6 ++++--
 indra/newview/llfloatersnapshot.cpp | 4 +++-
 2 files changed, 7 insertions(+), 3 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloaterpostcard.cpp b/indra/newview/llfloaterpostcard.cpp
index 220d33016a..f0c9d52ccd 100644
--- a/indra/newview/llfloaterpostcard.cpp
+++ b/indra/newview/llfloaterpostcard.cpp
@@ -128,6 +128,8 @@ void LLFloaterPostcard::draw()
 
 	if(!isMinimized() && mViewerImage.notNull() && mJPEGImage.notNull()) 
 	{
+		// Force the texture to be 100% opaque when the floater is focused.
+		F32 alpha = getTransparencyType() == TT_ACTIVE ? 1.0f : getCurrentTransparency();
 		LLRect rect(getRect());
 
 		// first set the max extents of our preview
@@ -149,7 +151,7 @@ void LLFloaterPostcard::draw()
 		}
 		{
 			gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
-			gl_rect_2d(rect, LLColor4(0.f, 0.f, 0.f, 1.f));
+			gl_rect_2d(rect, LLColor4(0.f, 0.f, 0.f, 1.f) % alpha);
 			rect.stretch(-1);
 		}
 		{
@@ -164,7 +166,7 @@ void LLFloaterPostcard::draw()
 								 rect.getWidth(),
 								 rect.getHeight(),
 								 mViewerImage.get(), 
-								 LLColor4::white);
+								 LLColor4::white % alpha);
 		}
 		glMatrixMode(GL_TEXTURE);
 		glPopMatrix();
diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp
index d55272c558..cad54cd158 100644
--- a/indra/newview/llfloatersnapshot.cpp
+++ b/indra/newview/llfloatersnapshot.cpp
@@ -2184,9 +2184,11 @@ void LLFloaterSnapshot::draw()
 			S32 offset_y = thumbnail_rect.mBottom + (thumbnail_rect.getHeight() - previewp->getThumbnailHeight()) / 2 ;
 
 			glMatrixMode(GL_MODELVIEW);
+			// Apply floater transparency to the texture unless the floater is focused.
+			F32 alpha = getTransparencyType() == TT_ACTIVE ? 1.0f : getCurrentTransparency();
 			gl_draw_scaled_image(offset_x, offset_y, 
 					previewp->getThumbnailWidth(), previewp->getThumbnailHeight(), 
-					previewp->getThumbnailImage(), LLColor4::white);	
+					previewp->getThumbnailImage(), LLColor4::white % alpha);
 
 			previewp->drawPreviewRect(offset_x, offset_y) ;
 		}
-- 
cgit v1.2.3


From c51608633ddfdcf9a053fff37461059398ed4500 Mon Sep 17 00:00:00 2001
From: "Mark Palange (Mani)" <palange@lindenlab.com>
Date: Wed, 1 Dec 2010 16:02:43 -0800
Subject: CHOP-238 Fix to bug introduced by
 http://hg.secondlife.com/viewer-beta/changeset/4072bd5389b2 Reviewed by Brad

---
 indra/newview/llappviewer.cpp                |  2 +-
 indra/newview/lllogininstance.cpp            |  2 +-
 indra/newview/llversioninfo.cpp              |  6 +++---
 indra/newview/llversioninfo.h                |  4 ++--
 indra/newview/llviewerstats.cpp              |  2 +-
 indra/newview/tests/lllogininstance_test.cpp |  2 +-
 indra/newview/tests/llversioninfo_test.cpp   | 12 ++++++------
 7 files changed, 15 insertions(+), 15 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index b6f52e3e15..6c07974f69 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -906,7 +906,7 @@ bool LLAppViewer::init()
 
 	// Save the current version to the prefs file
 	gSavedSettings.setString("LastRunVersion", 
-							 LLVersionInfo::getVersionAndChannel());
+							 LLVersionInfo::getChannelAndVersion());
 
 	gSimLastTime = gRenderStartTime.getElapsedTimeF32();
 	gSimFrames = (F32)gFrameCount;
diff --git a/indra/newview/lllogininstance.cpp b/indra/newview/lllogininstance.cpp
index 83a8134580..52ce932241 100644
--- a/indra/newview/lllogininstance.cpp
+++ b/indra/newview/lllogininstance.cpp
@@ -183,7 +183,7 @@ void LLLoginInstance::constructAuthParams(LLPointer<LLCredential> user_credentia
 	request_params["read_critical"] = false; // handleTOSResponse
 	request_params["last_exec_event"] = mLastExecEvent;
 	request_params["mac"] = hashed_unique_id_string;
-	request_params["version"] = LLVersionInfo::getVersionAndChannel(); // Includes channel name
+	request_params["version"] = LLVersionInfo::getChannelAndVersion(); // Includes channel name
 	request_params["channel"] = LLVersionInfo::getChannel();
 	request_params["id0"] = mSerialNumber;
 
diff --git a/indra/newview/llversioninfo.cpp b/indra/newview/llversioninfo.cpp
index 53994c68f2..673d0c24cf 100644
--- a/indra/newview/llversioninfo.cpp
+++ b/indra/newview/llversioninfo.cpp
@@ -108,15 +108,15 @@ namespace
 }
 
 //static
-const std::string &LLVersionInfo::getVersionAndChannel()
+const std::string &LLVersionInfo::getChannelAndVersion()
 {
 	if (sVersionChannel.empty())
 	{
 		// cache the version string
 		std::ostringstream stream;
-		stream << LLVersionInfo::getVersion() 
+		stream << LLVersionInfo::getChannel()
 			   << " "
-			   << LLVersionInfo::getChannel();
+			   << LLVersionInfo::getVersion();
 		sVersionChannel = stream.str();
 	}
 
diff --git a/indra/newview/llversioninfo.h b/indra/newview/llversioninfo.h
index 36defbcd68..6f64544f3b 100644
--- a/indra/newview/llversioninfo.h
+++ b/indra/newview/llversioninfo.h
@@ -59,8 +59,8 @@ public:
 	static const std::string &getShortVersion();
 
 	/// return the viewer version and channel as a string
-	/// like "2.0.0.200030 Second Life Release"
-	static const std::string &getVersionAndChannel();
+	/// like "Second Life Release 2.0.0.200030"
+	static const std::string &getChannelAndVersion();
 
 	/// return the channel name, e.g. "Second Life"
 	static const std::string &getChannel();
diff --git a/indra/newview/llviewerstats.cpp b/indra/newview/llviewerstats.cpp
index 402f00c5e7..546ee9a334 100644
--- a/indra/newview/llviewerstats.cpp
+++ b/indra/newview/llviewerstats.cpp
@@ -750,7 +750,7 @@ void send_stats()
 
 	// send fps only for time app spends in foreground
 	agent["fps"] = (F32)gForegroundFrameCount / gForegroundTime.getElapsedTimeF32();
-	agent["version"] = LLVersionInfo::getVersionAndChannel();
+	agent["version"] = LLVersionInfo::getChannelAndVersion();
 	std::string language = LLUI::getLanguage();
 	agent["language"] = language;
 	
diff --git a/indra/newview/tests/lllogininstance_test.cpp b/indra/newview/tests/lllogininstance_test.cpp
index b902c7ab09..309e9e9ee3 100644
--- a/indra/newview/tests/lllogininstance_test.cpp
+++ b/indra/newview/tests/lllogininstance_test.cpp
@@ -181,7 +181,7 @@ void LLUIColorTable::saveUserSettings(void)const {}
 
 //-----------------------------------------------------------------------------
 #include "../llversioninfo.h"
-const std::string &LLVersionInfo::getVersionAndChannel() { return VIEWERLOGIN_VERSION_CHANNEL; }
+const std::string &LLVersionInfo::getChannelAndVersion() { return VIEWERLOGIN_VERSION_CHANNEL; }
 const std::string &LLVersionInfo::getChannel() { return VIEWERLOGIN_CHANNEL; }
 
 //-----------------------------------------------------------------------------
diff --git a/indra/newview/tests/llversioninfo_test.cpp b/indra/newview/tests/llversioninfo_test.cpp
index 8855a24ead..398d8f16ed 100644
--- a/indra/newview/tests/llversioninfo_test.cpp
+++ b/indra/newview/tests/llversioninfo_test.cpp
@@ -51,15 +51,15 @@ namespace tut
 			mShortVersion = stream.str();
 			stream.str("");
 
-			stream << mVersion
+			stream << LL_CHANNEL
 				   << " "
-				   << LL_CHANNEL;
+				   << mVersion;
 			mVersionAndChannel = stream.str();
 			stream.str("");
 
-			stream << mVersion
+			stream << mResetChannel
 				   << " "
-				   << mResetChannel;
+				   << mVersion;
 			mResetVersionAndChannel = stream.str();
 		}
 		std::string mResetChannel;
@@ -99,7 +99,7 @@ namespace tut
 					  LLVersionInfo::getShortVersion(), 
 					  mShortVersion);
 		ensure_equals("Version and channel String", 
-					  LLVersionInfo::getVersionAndChannel(), 
+					  LLVersionInfo::getChannelAndVersion(), 
 					  mVersionAndChannel);
 
 		LLVersionInfo::resetChannel(mResetChannel);
@@ -108,7 +108,7 @@ namespace tut
 					  mResetChannel);
 
 		ensure_equals("Reset Version and channel String", 
-					  LLVersionInfo::getVersionAndChannel(), 
+					  LLVersionInfo::getChannelAndVersion(), 
 					  mResetVersionAndChannel);
 	}
 }
-- 
cgit v1.2.3


From c6302cfbc750171ef536426d40e966e43e3aedc9 Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Thu, 2 Dec 2010 09:58:04 +0200
Subject: STORM-432 ADDITIONAL FIX  Disabled manual resizing of the bottom
 panel in the Places SP.

---
 indra/newview/skins/default/xui/en/panel_landmarks.xml | 4 ++++
 1 file changed, 4 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_landmarks.xml b/indra/newview/skins/default/xui/en/panel_landmarks.xml
index 2a5933e3e9..23d8cb11ca 100644
--- a/indra/newview/skins/default/xui/en/panel_landmarks.xml
+++ b/indra/newview/skins/default/xui/en/panel_landmarks.xml
@@ -114,6 +114,7 @@
 		       height="25"
 		       layout="topleft"
 		       name="options_gear_btn_panel"
+		       user_resize="false"
 		       width="32">
 		          <menu_button
 		           follows="bottom|left"
@@ -134,6 +135,7 @@
 		       height="25"
 		       layout="topleft"
 		       name="add_btn_panel"
+		       user_resize="false"
 		       width="32">
 		          <button
 		           follows="bottom|left"
@@ -154,6 +156,7 @@
 		       height="25"
 		       layout="topleft"
 		       name="dummy_panel"
+		       user_resize="false"
 		       width="212">
 		          <icon
 		           follows="bottom|left|right"
@@ -170,6 +173,7 @@
 		       height="25"
 		       layout="topleft"
 		       name="trash_btn_panel"
+		       user_resize="false"
 		       width="31">
 		          <dnd_button
 		           follows="bottom|left"
-- 
cgit v1.2.3


From 673b3f0502fdfd4deb6f15b3fc9cba198bd326d9 Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Thu, 2 Dec 2010 14:50:23 +0200
Subject: STORM-718 FIXED Typo in Preferences -> Color.

Besides, removed redundant space before colon.
---
 indra/newview/skins/default/xui/en/panel_preferences_colors.xml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_preferences_colors.xml b/indra/newview/skins/default/xui/en/panel_preferences_colors.xml
index 0c75399764..7a64744e4e 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_colors.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_colors.xml
@@ -333,7 +333,7 @@
    initial_value="0.8"
    layout="topleft"
    label_width="115"
-   label="Active :"
+   label="Active:"
    left="50"
    max_val="1.00"
    min_val="0.00"
@@ -351,7 +351,7 @@
    initial_value="0.5"
    layout="topleft"
    label_width="115"
-   label="Inctive :"
+   label="Inactive:"
    left="50"
    max_val="1.00"
    min_val="0.00"
-- 
cgit v1.2.3


From 039c0466f9759d7b966d8faf60945b3924d017a8 Mon Sep 17 00:00:00 2001
From: "Mark Palange (Mani)" <palange@lindenlab.com>
Date: Thu, 2 Dec 2010 11:40:54 -0800
Subject: CHOP-240 Fix for incorrect use of std:multimap iterators. Rev. by
 Alain.

---
 indra/newview/llremoteparcelrequest.cpp | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llremoteparcelrequest.cpp b/indra/newview/llremoteparcelrequest.cpp
index 10d4452ed2..0dff087553 100644
--- a/indra/newview/llremoteparcelrequest.cpp
+++ b/indra/newview/llremoteparcelrequest.cpp
@@ -78,10 +78,11 @@ void LLRemoteParcelRequestResponder::error(U32 status, const std::string& reason
 void LLRemoteParcelInfoProcessor::addObserver(const LLUUID& parcel_id, LLRemoteParcelInfoObserver* observer)
 {
 	observer_multimap_t::iterator it;
+	observer_multimap_t::iterator start = mObservers.lower_bound(parcel_id);
 	observer_multimap_t::iterator end = mObservers.upper_bound(parcel_id);
 
 	// Check if the observer is already in observers list for this UUID
-	for(it = mObservers.find(parcel_id); it != end; ++it)
+	for(it = start; it != end; ++it)
 	{
 		if (it->second.get() == observer)
 		{
@@ -100,9 +101,10 @@ void LLRemoteParcelInfoProcessor::removeObserver(const LLUUID& parcel_id, LLRemo
 	}
 
 	observer_multimap_t::iterator it;
+	observer_multimap_t::iterator start = mObservers.lower_bound(parcel_id);
 	observer_multimap_t::iterator end = mObservers.upper_bound(parcel_id);
 
-	for(it = mObservers.find(parcel_id); it != end; ++it)
+	for(it = start; it != end; ++it)
 	{
 		if (it->second.get() == observer)
 		{
@@ -139,9 +141,10 @@ void LLRemoteParcelInfoProcessor::processParcelInfoReply(LLMessageSystem* msg, v
 	deadlist_t dead_iters;
 
 	observer_multimap_t::iterator oi;
+	observer_multimap_t::iterator start = observers.lower_bound(parcel_data.parcel_id);
 	observer_multimap_t::iterator end = observers.upper_bound(parcel_data.parcel_id);
 
-	for (oi = observers.find(parcel_data.parcel_id); oi != end; ++oi)
+	for (oi = start; oi != end; ++oi)
 	{
 		LLRemoteParcelInfoObserver * observer = oi->second.get();
 		if(observer)
-- 
cgit v1.2.3


From 9e67a2d71030db4e2f54084e141d36a44ebbb37c Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Fri, 3 Dec 2010 12:02:41 +0200
Subject: STORM-544 ADDITIONAL FIX Set default transparency for inactive
 floaters to 65%.

---
 indra/newview/app_settings/settings.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 0f946b0f0b..bf8e1f47f6 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -4017,7 +4017,7 @@
       <key>Type</key>
       <string>F32</string>
       <key>Value</key>
-      <real>0.5</real>
+      <real>0.65</real>
     </map>
     <key>InBandwidth</key>
     <map>
-- 
cgit v1.2.3


From 50b6114862ee105b084975bcc8c455f0a1d411d8 Mon Sep 17 00:00:00 2001
From: Jonathan Yap <none@none>
Date: Fri, 3 Dec 2010 07:30:19 -0500
Subject: Tiny change to panel_login.xml so Start Location preferences work
 under all circumstances

---
 indra/newview/skins/default/xui/en/panel_login.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml
index b181ca3bba..89feba7c3c 100644
--- a/indra/newview/skins/default/xui/en/panel_login.xml
+++ b/indra/newview/skins/default/xui/en/panel_login.xml
@@ -127,7 +127,7 @@ top="20"
  </text>
 <combo_box
 allow_text_entry="true"
-control_name="LoginLocation"
+control_name="NextLoginLocation"
   follows="left|bottom"
   height="23"
 max_chars="128"
-- 
cgit v1.2.3


From 7ed0938226d377e4945e9eea65ef4e4856716fbd Mon Sep 17 00:00:00 2001
From: Seth ProductEngine <slitovchuk@productengine.com>
Date: Fri, 3 Dec 2010 20:45:53 +0200
Subject: STORM-579 FIXED SLURLs color for residents and objects names in plain
 text chat match the user setting for "URLs" in the Color tab in Prefs. Avatar
 names SLURLs now use the user color setting for "URLs" everywhere across the
 viewer.

---
 indra/newview/llchathistory.cpp | 14 ++++++--------
 1 file changed, 6 insertions(+), 8 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index 271ee0c4a4..6e778de2d8 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -789,24 +789,22 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL
 				// set the link for the object name to be the objectim SLapp
 				// (don't let object names with hyperlinks override our objectim Url)
 				LLStyle::Params link_params(style_params);
-				link_params.color.control = "HTMLLinkColor";
+				LLColor4 link_color = LLUIColorTable::instance().getColor("HTMLLinkColor");
+				link_params.color = link_color;
+				link_params.readonly_color = link_color;
 				link_params.is_link = true;
 				link_params.link_href = url;
+
 				mEditor->appendText(chat.mFromName + delimiter,
 									false, link_params);
 			}
 			else if ( chat.mFromName != SYSTEM_FROM && chat.mFromID.notNull() && !message_from_log)
 			{
 				LLStyle::Params link_params(style_params);
-
-				// Setting is_link = true for agent SLURL to avoid applying default style to it.
-				// See LLTextBase::appendTextImpl().
-				link_params.is_link = true;
-				link_params.link_href = LLSLURL("agent", chat.mFromID, "inspect").getSLURLString();
+				link_params.overwriteFrom(LLStyleMap::instance().lookupAgent(chat.mFromID));
 
 				// Add link to avatar's inspector and delimiter to message.
-				mEditor->appendText(chat.mFromName, false, link_params);
-				mEditor->appendText(delimiter, false, style_params);
+				mEditor->appendText(std::string(link_params.link_href) + delimiter, false, link_params);
 			}
 			else
 			{
-- 
cgit v1.2.3


From 894db03cfd4fc1720c643db14652a16d86d1ab90 Mon Sep 17 00:00:00 2001
From: Seth ProductEngine <slitovchuk@productengine.com>
Date: Fri, 3 Dec 2010 23:01:10 +0200
Subject: STORM-378 ADDITIONAL FIX Fixed playing snapshot animation and sound
 when a snapshot is refreshed.

---
 indra/newview/llfloatersnapshot.cpp | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp
index d55272c558..05f8f9268d 100644
--- a/indra/newview/llfloatersnapshot.cpp
+++ b/indra/newview/llfloatersnapshot.cpp
@@ -908,6 +908,8 @@ BOOL LLSnapshotLivePreview::onIdle( void* snapshot_preview )
 			previewp->mPosTakenGlobal = gAgentCamera.getCameraPositionGlobal();
 			previewp->mShineCountdown = 4; // wait a few frames to avoid animation glitch due to readback this frame
 		}
+
+		gViewerWindow->playSnapshotAnimAndSound();
 	}
 	previewp->getWindow()->decBusyCount();
 	// only show fullscreen preview when in freeze frame mode
@@ -1533,8 +1535,6 @@ void LLFloaterSnapshot::Impl::onClickNewSnapshot(void* data)
 	if (previewp && view)
 	{
 		previewp->updateSnapshot(TRUE);
-
-		gViewerWindow->playSnapshotAnimAndSound();
 	}
 }
 
@@ -2204,8 +2204,6 @@ void LLFloaterSnapshot::onOpen(const LLSD& key)
 	gSnapshotFloaterView->setEnabled(TRUE);
 	gSnapshotFloaterView->setVisible(TRUE);
 	gSnapshotFloaterView->adjustToFitScreen(this, FALSE);
-
-	gViewerWindow->playSnapshotAnimAndSound();
 }
 
 void LLFloaterSnapshot::onClose(bool app_quitting)
-- 
cgit v1.2.3


From d0ec374e15c5a5a8edf59441d8b8350daeb8285b Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Sat, 4 Dec 2010 12:15:47 +0200
Subject: STORM-717 WIP Cleanup: removed unused on_mouse_enter callback from
 LLToast.

---
 indra/newview/lltoast.cpp | 5 -----
 indra/newview/lltoast.h   | 4 +---
 2 files changed, 1 insertion(+), 8 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/lltoast.cpp b/indra/newview/lltoast.cpp
index 8176b8c1f9..8916469e67 100644
--- a/indra/newview/lltoast.cpp
+++ b/indra/newview/lltoast.cpp
@@ -141,10 +141,6 @@ LLToast::LLToast(const LLToast::Params& p)
 	// init callbacks if present
 	if(!p.on_delete_toast().empty())
 		mOnDeleteToastSignal.connect(p.on_delete_toast());
-
-	// *TODO: This signal doesn't seem to be used at all.
-	if(!p.on_mouse_enter().empty())
-		mOnMouseEnterSignal.connect(p.on_mouse_enter());
 }
 
 void LLToast::reshape(S32 width, S32 height, BOOL called_from_parent)
@@ -402,7 +398,6 @@ void LLToast::onToastMouseEnter()
 		{
 			mHideBtn->setVisible(TRUE);
 		}
-		mOnMouseEnterSignal(this);
 		mToastMouseEnterSignal(this, getValue());
 	}
 }
diff --git a/indra/newview/lltoast.h b/indra/newview/lltoast.h
index fb534561c9..f88c628631 100644
--- a/indra/newview/lltoast.h
+++ b/indra/newview/lltoast.h
@@ -90,8 +90,7 @@ public:
 										fading_time_secs; // Number of seconds while a toast is transparent
 
 
-		Optional<toast_callback_t>		on_delete_toast,
-										on_mouse_enter;
+		Optional<toast_callback_t>		on_delete_toast;
 		Optional<bool>					can_fade,
 										can_be_stored,
 										enable_hide_btn,
@@ -182,7 +181,6 @@ public:
 
 	// Registers signals/callbacks for events
 	toast_signal_t mOnFadeSignal;
-	toast_signal_t mOnMouseEnterSignal;
 	toast_signal_t mOnDeleteToastSignal;
 	toast_signal_t mOnToastDestroyedSignal;
 	boost::signals2::connection setOnFadeCallback(toast_callback_t cb) { return mOnFadeSignal.connect(cb); }
-- 
cgit v1.2.3


From b9fa0e9bbe0db5ecdfb5fbdd88474e0d3bb8eed2 Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Sat, 4 Dec 2010 13:07:51 +0200
Subject: STORM-717 FIXED Made nearby chat toasts respect transparency
 settings:

* Normally toasts are as opaque as specified by "inactive floater opacity" setting.
* When mouse is hovering a toast, the toast uses "active floater opacity" setting.
* Fading toasts have 1/2 of "inactive floater opacity".
---
 indra/newview/llnearbychathandler.cpp | 39 +++++++++++++++++++++++++++++++++++
 indra/newview/lltoast.h               |  8 ++++---
 2 files changed, 44 insertions(+), 3 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llnearbychathandler.cpp b/indra/newview/llnearbychathandler.cpp
index d2ad78f140..dfbbaa0941 100644
--- a/indra/newview/llnearbychathandler.cpp
+++ b/indra/newview/llnearbychathandler.cpp
@@ -165,11 +165,20 @@ public:
 	:	LLToast(p),
 	 	mNearbyChatScreenChannelp(nc_channelp)
 	{
+		updateTransparency();
+		setMouseEnterCallback(boost::bind(&LLNearbyChatToast::updateTransparency, this));
+		setMouseLeaveCallback(boost::bind(&LLNearbyChatToast::updateTransparency, this));
 	}
 
 	/*virtual*/ void onClose(bool app_quitting);
+	/*virtual*/ void setBackgroundOpaque(BOOL b);
+
+protected:
+	/*virtual*/ void setTransparentState(bool transparent);
 
 private:
+	void updateTransparency();
+
 	LLNearbyChatScreenChannel*	mNearbyChatScreenChannelp;
 };
 
@@ -597,4 +606,34 @@ void LLNearbyChatToast::onClose(bool app_quitting)
 	mNearbyChatScreenChannelp->onToastDestroyed(this, app_quitting);
 }
 
+// virtual
+void LLNearbyChatToast::setBackgroundOpaque(BOOL b)
+{
+	// We don't want background changes: transparency is handled differently.
+	LLToast::setBackgroundOpaque(TRUE);
+}
+
+// virtual
+void LLNearbyChatToast::setTransparentState(bool transparent)
+{
+	LLToast::setTransparentState(transparent);
+	updateTransparency();
+}
+
+void LLNearbyChatToast::updateTransparency()
+{
+	ETypeTransparency transparency_type;
+
+	if (isHovered())
+	{
+		transparency_type = TT_ACTIVE;
+	}
+	else
+	{
+		transparency_type = getTransparentState() ? TT_FADING : TT_INACTIVE;
+	}
+
+	LLFloater::updateTransparency(transparency_type);
+}
+
 // EOF
diff --git a/indra/newview/lltoast.h b/indra/newview/lltoast.h
index f88c628631..d23e858c5c 100644
--- a/indra/newview/lltoast.h
+++ b/indra/newview/lltoast.h
@@ -141,7 +141,7 @@ public:
 	//
 	virtual void setVisible(BOOL show);
 
-	/*virtual*/ void setBackgroundOpaque(BOOL b);
+	virtual void setBackgroundOpaque(BOOL b);
 	//
 	virtual void hide();
 
@@ -198,6 +198,10 @@ public:
 
 	LLHandle<LLToast> getHandle() { mHandle.bind(this); return mHandle; }
 
+	bool			getTransparentState() const { return mIsTransparent; }
+	virtual void	setTransparentState(bool transparent);
+
+
 private:
 
 	void onToastMouseEnter();
@@ -206,8 +210,6 @@ private:
 
 	void expire();
 
-	void setTransparentState(bool transparent);
-
 	LLUUID				mNotificationID;
 	LLUUID				mSessionID;
 	LLNotificationPtr	mNotification;
-- 
cgit v1.2.3


From 8acc2ec9f633168a3c04ac7aa112c1b12218d7cc Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Mon, 6 Dec 2010 15:01:36 +0200
Subject: STORM-690 FIXED Underlying panels were visible in undocked
 sidepanels.

By the way, fixed losing focus when switching between panels in Me and Places SP (which made the floater semi-transparent).
---
 indra/newview/llpanellandmarkinfo.cpp |  6 ++++++
 indra/newview/llpanelpicks.cpp        |  2 +-
 indra/newview/llpanelprofile.cpp      | 16 ++++++++++++++++
 3 files changed, 23 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llpanellandmarkinfo.cpp b/indra/newview/llpanellandmarkinfo.cpp
index 87acd83b23..c57746ec00 100644
--- a/indra/newview/llpanellandmarkinfo.cpp
+++ b/indra/newview/llpanellandmarkinfo.cpp
@@ -180,6 +180,9 @@ void LLPanelLandmarkInfo::setInfoType(EInfoType type)
 
 	populateFoldersList();
 
+	// Prevent the floater from losing focus (if the sidepanel is undocked).
+	setFocus(TRUE);
+
 	LLPanelPlaceInfo::setInfoType(type);
 }
 
@@ -330,6 +333,9 @@ void LLPanelLandmarkInfo::toggleLandmarkEditMode(BOOL enabled)
 		// when it was enabled/disabled we set the text once again.
 		mNotesEditor->setText(mNotesEditor->getText());
 	}
+
+	// Prevent the floater from losing focus (if the sidepanel is undocked).
+	setFocus(TRUE);
 }
 
 const std::string& LLPanelLandmarkInfo::getLandmarkTitle() const
diff --git a/indra/newview/llpanelpicks.cpp b/indra/newview/llpanelpicks.cpp
index ccef563544..4f4b828cca 100644
--- a/indra/newview/llpanelpicks.cpp
+++ b/indra/newview/llpanelpicks.cpp
@@ -781,7 +781,7 @@ void LLPanelPicks::showAccordion(const std::string& name, bool show)
 
 void LLPanelPicks::onPanelPickClose(LLPanel* panel)
 {
-	panel->setVisible(FALSE);
+	getProfilePanel()->closePanel(panel);
 }
 
 void LLPanelPicks::onPanelPickSave(LLPanel* panel)
diff --git a/indra/newview/llpanelprofile.cpp b/indra/newview/llpanelprofile.cpp
index 4e63563979..6038ab20d8 100644
--- a/indra/newview/llpanelprofile.cpp
+++ b/indra/newview/llpanelprofile.cpp
@@ -217,6 +217,10 @@ void LLPanelProfile::setAllChildrenVisible(BOOL visible)
 
 void LLPanelProfile::openPanel(LLPanel* panel, const LLSD& params)
 {
+	// Hide currently visible panel (STORM-690).
+	setAllChildrenVisible(FALSE);
+
+	// Add the panel or bring it to front.
 	if (panel->getParent() != this)
 	{
 		addChild(panel);
@@ -243,6 +247,18 @@ void LLPanelProfile::closePanel(LLPanel* panel)
 	if (panel->getParent() == this) 
 	{
 		removeChild(panel);
+
+		// Make the underlying panel visible.
+		const child_list_t* child_list = getChildList();
+		if (child_list->size() > 0)
+		{
+			child_list->front()->setVisible(TRUE);
+			child_list->front()->setFocus(TRUE); // prevent losing focus by the floater
+		}
+		else
+		{
+			llwarns << "No underlying panel to make visible." << llendl;
+		}
 	}
 }
 
-- 
cgit v1.2.3


From 37c65e371d15bce250a2df3cc7c1a1cd235ec2fa Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Mon, 6 Dec 2010 16:14:50 +0200
Subject: STORM-690 ADDITIONAL FIX Hide "Loading..." text that can be seen
 under transparent Avatar Picks accordion.

---
 indra/newview/llpanelpicks.cpp | 13 +++++++++----
 indra/newview/llpanelpicks.h   |  1 +
 2 files changed, 10 insertions(+), 4 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llpanelpicks.cpp b/indra/newview/llpanelpicks.cpp
index 4f4b828cca..15e826ac2c 100644
--- a/indra/newview/llpanelpicks.cpp
+++ b/indra/newview/llpanelpicks.cpp
@@ -212,7 +212,8 @@ void LLPanelPicks::updateData()
 		mNoPicks = false;
 		mNoClassifieds = false;
 
-		getChild<LLUICtrl>("picks_panel_text")->setValue(LLTrans::getString("PicksClassifiedsLoadingText"));
+		mNoItemsLabel->setValue(LLTrans::getString("PicksClassifiedsLoadingText"));
+		mNoItemsLabel->setVisible(TRUE);
 
 		mPicksList->clear();
 		LLAvatarPropertiesProcessor::getInstance()->sendAvatarPicksRequest(getAvatarId());
@@ -314,15 +315,17 @@ void LLPanelPicks::processProperties(void* data, EAvatarProcessorType type)
 		mNoClassifieds = !mClassifiedsList->size();
 	}
 
-	if (mNoPicks && mNoClassifieds)
+	bool no_data = mNoPicks && mNoClassifieds;
+	mNoItemsLabel->setVisible(no_data);
+	if (no_data)
 	{
 		if(getAvatarId() == gAgentID)
 		{
-			getChild<LLUICtrl>("picks_panel_text")->setValue(LLTrans::getString("NoPicksClassifiedsText"));
+			mNoItemsLabel->setValue(LLTrans::getString("NoPicksClassifiedsText"));
 		}
 		else
 		{
-			getChild<LLUICtrl>("picks_panel_text")->setValue(LLTrans::getString("NoAvatarPicksClassifiedsText"));
+			mNoItemsLabel->setValue(LLTrans::getString("NoAvatarPicksClassifiedsText"));
 		}
 	}
 }
@@ -359,6 +362,8 @@ BOOL LLPanelPicks::postBuild()
 	mPicksList->setNoItemsCommentText(getString("no_picks"));
 	mClassifiedsList->setNoItemsCommentText(getString("no_classifieds"));
 
+	mNoItemsLabel = getChild<LLUICtrl>("picks_panel_text");
+
 	childSetAction(XML_BTN_NEW, boost::bind(&LLPanelPicks::onClickPlusBtn, this));
 	childSetAction(XML_BTN_DELETE, boost::bind(&LLPanelPicks::onClickDelete, this));
 	childSetAction(XML_BTN_TELEPORT, boost::bind(&LLPanelPicks::onClickTeleport, this));
diff --git a/indra/newview/llpanelpicks.h b/indra/newview/llpanelpicks.h
index 526ba48dcb..a02ed81bb0 100644
--- a/indra/newview/llpanelpicks.h
+++ b/indra/newview/llpanelpicks.h
@@ -149,6 +149,7 @@ private:
 	LLPanelClassifiedInfo* mPanelClassifiedInfo;
 	LLPanelPickEdit* mPanelPickEdit;
 	LLToggleableMenu* mPlusMenu;
+	LLUICtrl* mNoItemsLabel;
 
 	// <classified_id, edit_panel>
 	typedef std::map<LLUUID, LLPanelClassifiedEdit*> panel_classified_edit_map_t;
-- 
cgit v1.2.3


From e03e3257ab2405149c85277e7259dbc2b361dcb0 Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Mon, 6 Dec 2010 19:19:31 +0200
Subject: STORM-730 FIXED Made Movement Controls, Camera Controls and Nearby
 Voice floaters use active floater transparency.

---
 indra/newview/llcallfloater.cpp   | 12 ++++++++++++
 indra/newview/llcallfloater.h     |  1 +
 indra/newview/llfloatercamera.cpp |  1 +
 indra/newview/llmoveview.cpp      |  1 +
 4 files changed, 15 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/llcallfloater.cpp b/indra/newview/llcallfloater.cpp
index b2e9564f7d..328c326278 100644
--- a/indra/newview/llcallfloater.cpp
+++ b/indra/newview/llcallfloater.cpp
@@ -167,6 +167,7 @@ BOOL LLCallFloater::postBuild()
 	//chrome="true" hides floater caption 
 	if (mDragHandle)
 		mDragHandle->setTitleVisible(TRUE);
+	updateTransparency(TT_ACTIVE); // force using active floater transparency (STORM-730)
 	
 	updateSession();
 
@@ -205,6 +206,17 @@ void LLCallFloater::draw()
 	LLTransientDockableFloater::draw();
 }
 
+// virtual
+void LLCallFloater::setFocus( BOOL b )
+{
+	LLTransientDockableFloater::setFocus(b);
+
+	// Force using active floater transparency (STORM-730).
+	// We have to override setFocus() for LLCallFloater because selecting an item
+	// of the voice morphing combobox causes the floater to lose focus and thus become transparent.
+	updateTransparency(TT_ACTIVE);
+}
+
 // virtual
 void LLCallFloater::onParticipantsChanged()
 {
diff --git a/indra/newview/llcallfloater.h b/indra/newview/llcallfloater.h
index 3bc7043353..00a3f76e56 100644
--- a/indra/newview/llcallfloater.h
+++ b/indra/newview/llcallfloater.h
@@ -64,6 +64,7 @@ public:
 	/*virtual*/ BOOL postBuild();
 	/*virtual*/ void onOpen(const LLSD& key);
 	/*virtual*/ void draw();
+	/*virtual*/ void setFocus( BOOL b );
 
 	/**
 	 * Is called by LLVoiceClient::notifyParticipantObservers when voice participant list is changed.
diff --git a/indra/newview/llfloatercamera.cpp b/indra/newview/llfloatercamera.cpp
index ad24c6534a..90a9879949 100644
--- a/indra/newview/llfloatercamera.cpp
+++ b/indra/newview/llfloatercamera.cpp
@@ -343,6 +343,7 @@ BOOL LLFloaterCamera::postBuild()
 {
 	setIsChrome(TRUE);
 	setTitleVisible(TRUE); // restore title visibility after chrome applying
+	updateTransparency(TT_ACTIVE); // force using active floater transparency (STORM-730)
 
 	mRotate = getChild<LLJoystickCameraRotate>(ORBIT);
 	mZoom = findChild<LLPanelCameraZoom>(ZOOM);
diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp
index d38bb5aa4a..89d551f129 100644
--- a/indra/newview/llmoveview.cpp
+++ b/indra/newview/llmoveview.cpp
@@ -94,6 +94,7 @@ BOOL LLFloaterMove::postBuild()
 {
 	setIsChrome(TRUE);
 	setTitleVisible(TRUE); // restore title visibility after chrome applying
+	updateTransparency(TT_ACTIVE); // force using active floater transparency (STORM-730)
 	
 	LLDockableFloater::postBuild();
 	
-- 
cgit v1.2.3