From bab6e11eef151345c7a8cfb1459fd53006fbd522 Mon Sep 17 00:00:00 2001
From: Monroe Linden <monroe@lindenlab.com>
Date: Tue, 3 Aug 2010 16:43:23 -0700
Subject: New Mac build of llqtwebkit, to fix a problem with named link targets
 and onClickLinkHref events.

Built from the following:

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

diff --git a/install.xml b/install.xml
index 3795fc3757..766f272c70 100644
--- a/install.xml
+++ b/install.xml
@@ -981,9 +981,9 @@ anguage Infrstructure (CLI) international standard</string>
           <key>darwin</key>
           <map>
             <key>md5sum</key>
-            <string>becffca6bd8dcb239de284ea2a8b485b</string>
+            <string>e207ddad01ae1cbe0caae7cb80824e8b</string>
             <key>url</key>
-            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-4.6+cookies-darwin-20100617.tar.bz2</uri>
+            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-4.6-darwin-20100803.tar.bz2</uri>
           </map>
           <key>linux</key>
           <map>
-- 
cgit v1.2.3


From 5062351a0a2a95c3cbca27297b57afddc23d7a4f Mon Sep 17 00:00:00 2001
From: Richard Nelson <none@none>
Date: Wed, 4 Aug 2010 19:01:18 -0700
Subject: deprecated ADD_SORTED due to n^2 behavior, set the sort order on the
 scroll list instead

---
 indra/llcommon/stdenums.h                          |  4 ++--
 indra/llui/llscrolllistctrl.cpp                    | 23 +++++-----------------
 indra/newview/llfloatergroups.cpp                  |  7 ++++---
 indra/newview/llfloaterland.cpp                    |  4 ++--
 indra/newview/llfloaterlandholdings.cpp            |  9 ++++-----
 indra/newview/llfloatermediabrowser.cpp            |  3 ++-
 indra/newview/llfloaterpreference.cpp              |  6 ++----
 indra/newview/llfloaterscriptlimits.cpp            |  2 +-
 indra/newview/llpanelgroupgeneral.cpp              |  2 +-
 indra/newview/llpanelgrouplandmoney.cpp            |  2 +-
 indra/newview/llpanelgrouproles.cpp                |  2 +-
 indra/newview/llpanellogin.cpp                     |  3 ++-
 indra/newview/llpanelprimmediacontrols.cpp         |  2 +-
 .../default/xui/en/panel_group_land_money.xml      |  2 ++
 .../default/xui/en/panel_preferences_alerts.xml    |  4 ++++
 .../xui/en/panel_script_limits_region_memory.xml   |  2 ++
 16 files changed, 36 insertions(+), 41 deletions(-)

diff --git a/indra/llcommon/stdenums.h b/indra/llcommon/stdenums.h
index 1a5678dde1..e0565204d4 100644
--- a/indra/llcommon/stdenums.h
+++ b/indra/llcommon/stdenums.h
@@ -119,8 +119,8 @@ enum EObjectPropertiesExtraID
 enum EAddPosition
 {
 	ADD_TOP,
-	ADD_SORTED,
-	ADD_BOTTOM
+	ADD_BOTTOM,
+	ADD_DEFAULT
 };
 
 enum LLGroupChange
diff --git a/indra/llui/llscrolllistctrl.cpp b/indra/llui/llscrolllistctrl.cpp
index d4d161f2c9..9ab2cfef4b 100644
--- a/indra/llui/llscrolllistctrl.cpp
+++ b/indra/llui/llscrolllistctrl.cpp
@@ -541,23 +541,7 @@ BOOL LLScrollListCtrl::addItem( LLScrollListItem* item, EAddPosition pos, BOOL r
 			setNeedsSort();
 			break;
 	
-		case ADD_SORTED:
-			{
-				// sort by column 0, in ascending order
-				std::vector<sort_column_t> single_sort_column;
-				single_sort_column.push_back(std::make_pair(0, TRUE));
-
-				mItemList.push_back(item);
-				std::stable_sort(
-					mItemList.begin(), 
-					mItemList.end(), 
-					SortScrollListItem(single_sort_column,mSortCallback));
-				
-				// ADD_SORTED just sorts by first column...
-				// this might not match user sort criteria, so flag list as being in unsorted state
-				setNeedsSort();
-				break;
-			}	
+		case ADD_DEFAULT:
 		case ADD_BOTTOM:
 			mItemList.push_back(item);
 			setNeedsSort();
@@ -2762,9 +2746,10 @@ LLScrollListColumn* LLScrollListCtrl::getColumn(const std::string& name)
 	return NULL;
 }
 
-
+LLFastTimer::DeclareTimer FTM_ADD_SCROLLLIST_ELEMENT("Add Scroll List Item");
 LLScrollListItem* LLScrollListCtrl::addElement(const LLSD& element, EAddPosition pos, void* userdata)
 {
+	LLFastTimer _(FTM_ADD_SCROLLLIST_ELEMENT);
 	LLScrollListItem::Params item_params;
 	LLParamSDParser::instance().readSD(element, item_params);
 	item_params.userdata = userdata;
@@ -2773,12 +2758,14 @@ LLScrollListItem* LLScrollListCtrl::addElement(const LLSD& element, EAddPosition
 
 LLScrollListItem* LLScrollListCtrl::addRow(const LLScrollListItem::Params& item_p, EAddPosition pos)
 {
+	LLFastTimer _(FTM_ADD_SCROLLLIST_ELEMENT);
 	LLScrollListItem *new_item = new LLScrollListItem(item_p);
 	return addRow(new_item, item_p, pos);
 }
 
 LLScrollListItem* LLScrollListCtrl::addRow(LLScrollListItem *new_item, const LLScrollListItem::Params& item_p, EAddPosition pos)
 {
+	LLFastTimer _(FTM_ADD_SCROLLLIST_ELEMENT);
 	if (!item_p.validateBlock() || !new_item) return NULL;
 	new_item->setNumColumns(mColumns.size());
 
diff --git a/indra/newview/llfloatergroups.cpp b/indra/newview/llfloatergroups.cpp
index 0bd8215e5c..8558345efa 100644
--- a/indra/newview/llfloatergroups.cpp
+++ b/indra/newview/llfloatergroups.cpp
@@ -347,11 +347,10 @@ void LLPanelGroups::onGroupList(LLUICtrl* ctrl, void* userdata)
 	if(self) self->enableButtons();
 }
 
-void init_group_list(LLScrollListCtrl* ctrl, const LLUUID& highlight_id, U64 powers_mask)
+void init_group_list(LLScrollListCtrl* group_list, const LLUUID& highlight_id, U64 powers_mask)
 {
 	S32 count = gAgent.mGroups.count();
 	LLUUID id;
-	LLCtrlListInterface *group_list = ctrl->getListInterface();
 	if (!group_list) return;
 
 	group_list->operateOnAll(LLCtrlListInterface::OP_DELETE);
@@ -375,10 +374,12 @@ void init_group_list(LLScrollListCtrl* ctrl, const LLUUID& highlight_id, U64 pow
 			element["columns"][0]["font"]["name"] = "SANSSERIF";
 			element["columns"][0]["font"]["style"] = style;
 
-			group_list->addElement(element, ADD_SORTED);
+			group_list->addElement(element);
 		}
 	}
 
+	group_list->sortOnce(0, TRUE);
+
 	// add "none" to list at top
 	{
 		std::string style = "NORMAL";
diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp
index 625b443abc..19e28720ae 100644
--- a/indra/newview/llfloaterland.cpp
+++ b/indra/newview/llfloaterland.cpp
@@ -2440,7 +2440,7 @@ void LLPanelLandAccess::refresh()
 					suffix.append(" " + parent_floater->getString("Remaining") + ")");
 				}
 				if (mListAccess)
-					mListAccess->addNameItem(entry.mID, ADD_SORTED, TRUE, suffix);
+					mListAccess->addNameItem(entry.mID, ADD_DEFAULT, TRUE, suffix);
 			}
 		}
 		
@@ -2481,7 +2481,7 @@ void LLPanelLandAccess::refresh()
 					}
 					suffix.append(" " + parent_floater->getString("Remaining") + ")");
 				}
-				mListBanned->addNameItem(entry.mID, ADD_SORTED, TRUE, suffix);
+				mListBanned->addNameItem(entry.mID, ADD_DEFAULT, TRUE, suffix);
 			}
 		}
 		
diff --git a/indra/newview/llfloaterlandholdings.cpp b/indra/newview/llfloaterlandholdings.cpp
index 3c8ee6eb9e..12d27b8790 100644
--- a/indra/newview/llfloaterlandholdings.cpp
+++ b/indra/newview/llfloaterlandholdings.cpp
@@ -75,10 +75,9 @@ BOOL LLFloaterLandHoldings::postBuild()
 	childSetAction("Show on Map", onClickMap, this);
 
 	// Grant list
-	getChild<LLScrollListCtrl>("grant list")->setDoubleClickCallback(onGrantList, this);
-
-	LLCtrlListInterface *list = childGetListInterface("grant list");
-	if (!list) return TRUE;
+	LLScrollListCtrl* grant_list = getChild<LLScrollListCtrl>("grant list");
+	grant_list->sortByColumnIndex(0, TRUE);
+	grant_list->setDoubleClickCallback(onGrantList, this);
 
 	S32 count = gAgent.mGroups.count();
 	for(S32 i = 0; i < count; ++i)
@@ -97,7 +96,7 @@ BOOL LLFloaterLandHoldings::postBuild()
 		element["columns"][1]["value"] = areastr;
 		element["columns"][1]["font"] = "SANSSERIF";
 
-		list->addElement(element, ADD_SORTED);
+		grant_list->addElement(element);
 	}
 	
 	center();
diff --git a/indra/newview/llfloatermediabrowser.cpp b/indra/newview/llfloatermediabrowser.cpp
index 5405de2f9a..d01488b6b1 100644
--- a/indra/newview/llfloatermediabrowser.cpp
+++ b/indra/newview/llfloatermediabrowser.cpp
@@ -105,6 +105,7 @@ BOOL LLFloaterMediaBrowser::postBuild()
 
 	mAddressCombo = getChild<LLComboBox>("address");
 	mAddressCombo->setCommitCallback(onEnterAddress, this);
+	mAddressCombo->sortByName();
 
 	childSetAction("back", onClickBack, this);
 	childSetAction("forward", onClickForward, this);
@@ -185,7 +186,7 @@ void LLFloaterMediaBrowser::setCurrentURL(const std::string& url)
 	if (mCurrentURL != "about:blank")
 	{
 		mAddressCombo->remove(mCurrentURL);
-		mAddressCombo->add(mCurrentURL, ADD_SORTED);
+		mAddressCombo->add(mCurrentURL);
 		mAddressCombo->selectByValue(mCurrentURL);
 
 		// Serialize url history
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index 7791c037d3..a4b45e04f2 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -826,13 +826,11 @@ void LLFloaterPreference::buildPopupLists()
 				row["columns"][1]["font"] = "SANSSERIF_SMALL";
 				row["columns"][1]["width"] = 360;
 			}
-			item = disabled_popups.addElement(row,
-											  ADD_SORTED);
+			item = disabled_popups.addElement(row);
 		}
 		else
 		{
-			item = enabled_popups.addElement(row,
-											 ADD_SORTED);
+			item = enabled_popups.addElement(row);
 		}
 		
 		if (item)
diff --git a/indra/newview/llfloaterscriptlimits.cpp b/indra/newview/llfloaterscriptlimits.cpp
index e0f646349e..e827e19f82 100644
--- a/indra/newview/llfloaterscriptlimits.cpp
+++ b/indra/newview/llfloaterscriptlimits.cpp
@@ -741,7 +741,7 @@ void LLPanelScriptLimitsRegionMemory::setRegionDetails(LLSD content)
 			}
 			element["columns"][5]["font"] = "SANSSERIF";
 
-			list->addElement(element, ADD_SORTED);
+			list->addElement(element);
 			
 			element["owner_id"] = owner_id;
 			element["local_id"] = local_id;
diff --git a/indra/newview/llpanelgroupgeneral.cpp b/indra/newview/llpanelgroupgeneral.cpp
index 2302772803..155e000bb8 100644
--- a/indra/newview/llpanelgroupgeneral.cpp
+++ b/indra/newview/llpanelgroupgeneral.cpp
@@ -746,7 +746,7 @@ void LLPanelGroupGeneral::updateMembers()
 		sSDTime += sd_timer.getElapsedTimeF32();
 
 		element_timer.reset();
-		LLScrollListItem* member_row = mListVisibleMembers->addElement(row);//, ADD_SORTED);
+		LLScrollListItem* member_row = mListVisibleMembers->addElement(row);
 		
 		if ( member->isOwner() )
 		{
diff --git a/indra/newview/llpanelgrouplandmoney.cpp b/indra/newview/llpanelgrouplandmoney.cpp
index 1404cfcea2..16d5f8140d 100644
--- a/indra/newview/llpanelgrouplandmoney.cpp
+++ b/indra/newview/llpanelgrouplandmoney.cpp
@@ -528,7 +528,7 @@ void LLPanelGroupLandMoney::impl::processGroupLand(LLMessageSystem* msg)
 			row["columns"][4]["column"] = "hidden";
 			row["columns"][4]["value"] = hidden;
 			
-			mGroupParcelsp->addElement(row, ADD_SORTED);
+			mGroupParcelsp->addElement(row);
 		}
 	}
 }
diff --git a/indra/newview/llpanelgrouproles.cpp b/indra/newview/llpanelgrouproles.cpp
index 7a28d10baf..efc797cfe9 100644
--- a/indra/newview/llpanelgrouproles.cpp
+++ b/indra/newview/llpanelgrouproles.cpp
@@ -1631,7 +1631,7 @@ void LLPanelGroupMembersSubTab::updateMembers()
 			row["columns"][2]["value"] = mMemberProgress->second->getOnlineStatus();
 			row["columns"][2]["font"] = "SANSSERIF_SMALL";
 
-			LLScrollListItem* member = mMembersList->addElement(row);//, ADD_SORTED);
+			LLScrollListItem* member = mMembersList->addElement(row);
 
 			LLUUID id = member->getUUID();
 			mHasMatch = TRUE;
diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp
index 4b23e63f12..58ed01896a 100644
--- a/indra/newview/llpanellogin.cpp
+++ b/indra/newview/llpanellogin.cpp
@@ -1110,9 +1110,10 @@ void LLPanelLogin::updateServerCombo()
 	{
 		if (!grid_choice->first.empty())
 		{
-			server_choice_combo->add(grid_choice->second, grid_choice->first, ADD_SORTED);
+			server_choice_combo->add(grid_choice->second, grid_choice->first);
 		}
 	}
+	server_choice_combo->sortByName();
 	
 	server_choice_combo->addSeparator(ADD_TOP);
 	
diff --git a/indra/newview/llpanelprimmediacontrols.cpp b/indra/newview/llpanelprimmediacontrols.cpp
index 0648d99685..81e805974f 100644
--- a/indra/newview/llpanelprimmediacontrols.cpp
+++ b/indra/newview/llpanelprimmediacontrols.cpp
@@ -1171,7 +1171,7 @@ void LLPanelPrimMediaControls::setCurrentURL()
 //	if (media_address_combo && mCurrentURL != "about:blank")
 //	{
 //		media_address_combo->remove(mCurrentURL);
-//		media_address_combo->add(mCurrentURL, ADD_SORTED);
+//		media_address_combo->add(mCurrentURL);
 //		media_address_combo->selectByValue(mCurrentURL);
 //	}
 #else   // USE_COMBO_BOX_FOR_MEDIA_URL
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..1e1d2d18ca 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
@@ -60,6 +60,8 @@
      left="0"
      right="-1"
      top="0"
+     sort_column="0"
+     sort_ascending="true"
      name="group_parcel_list"
      width="313">
         <scroll_list.columns
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml
index 516457dd93..559df5bec9 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml
@@ -57,6 +57,8 @@
      left="10"
      multi_select="true"
      name="enabled_popups"
+     sort_column="0"
+     sort_ascending="true" 
      width="495" />
 	 <button
 	 enabled_control="FirstSelectedDisabledPopups"
@@ -103,6 +105,8 @@
      height="140"
      layout="topleft"
      left="10"
+     sort_column="0"
+     sort_ascending="true"
      multi_select="true"
      name="disabled_popups"
      width="495" />
diff --git a/indra/newview/skins/default/xui/en/panel_script_limits_region_memory.xml b/indra/newview/skins/default/xui/en/panel_script_limits_region_memory.xml
index 9dff00fa0b..c5e8bf5803 100644
--- a/indra/newview/skins/default/xui/en/panel_script_limits_region_memory.xml
+++ b/indra/newview/skins/default/xui/en/panel_script_limits_region_memory.xml
@@ -79,6 +79,8 @@
      layout="topleft"
      left_delta="0"
      multi_select="true"
+     sort_column="0"
+     sort_ascending="true"
      name="scripts_list"
      top_delta="16"
      width="460">
-- 
cgit v1.2.3


From 932f248553328c2c8d4a2fde9f7c5859c1965024 Mon Sep 17 00:00:00 2001
From: Richard Nelson <none@none>
Date: Wed, 4 Aug 2010 19:01:28 -0700
Subject: optimized font lookups

---
 indra/llrender/llfontgl.cpp | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)

diff --git a/indra/llrender/llfontgl.cpp b/indra/llrender/llfontgl.cpp
index d6c062fc5e..849318ccee 100644
--- a/indra/llrender/llfontgl.cpp
+++ b/indra/llrender/llfontgl.cpp
@@ -983,37 +983,43 @@ LLFontGL::VAlign LLFontGL::vAlignFromName(const std::string& name)
 //static
 LLFontGL* LLFontGL::getFontMonospace()
 {
-	return getFont(LLFontDescriptor("Monospace","Monospace",0));
+	static LLFontGL* fontp = getFont(LLFontDescriptor("Monospace","Monospace",0));
+	return fontp;
 }
 
 //static
 LLFontGL* LLFontGL::getFontSansSerifSmall()
 {
-	return getFont(LLFontDescriptor("SansSerif","Small",0));
+	static LLFontGL* fontp = getFont(LLFontDescriptor("SansSerif","Small",0));
+	return fontp;
 }
 
 //static
 LLFontGL* LLFontGL::getFontSansSerif()
 {
-	return getFont(LLFontDescriptor("SansSerif","Medium",0));
+	static LLFontGL* fontp = getFont(LLFontDescriptor("SansSerif","Medium",0));
+	return fontp;
 }
 
 //static
 LLFontGL* LLFontGL::getFontSansSerifBig()
 {
-	return getFont(LLFontDescriptor("SansSerif","Large",0));
+	static LLFontGL* fontp = getFont(LLFontDescriptor("SansSerif","Large",0));
+	return fontp;
 }
 
 //static 
 LLFontGL* LLFontGL::getFontSansSerifHuge()
 {
-	return getFont(LLFontDescriptor("SansSerif","Huge",0));
+	static LLFontGL* fontp = getFont(LLFontDescriptor("SansSerif","Large",0));
+	return fontp;
 }
 
 //static 
 LLFontGL* LLFontGL::getFontSansSerifBold()
 {
-	return getFont(LLFontDescriptor("SansSerif","Medium",BOLD));
+	static LLFontGL* fontp = getFont(LLFontDescriptor("SansSerif","Medium",BOLD));
+	return fontp;
 }
 
 //static
-- 
cgit v1.2.3


From b3bf2d79330c3238aae8e916f6d483fbcac4b0c2 Mon Sep 17 00:00:00 2001
From: Richard Nelson <none@none>
Date: Wed, 4 Aug 2010 19:01:44 -0700
Subject: optimized LLUIString construction

---
 indra/llui/lluistring.cpp | 19 ++++++++++++++-----
 indra/llui/lluistring.h   |  9 +++++----
 2 files changed, 19 insertions(+), 9 deletions(-)

diff --git a/indra/llui/lluistring.cpp b/indra/llui/lluistring.cpp
index ac9e71665f..385292e792 100644
--- a/indra/llui/lluistring.cpp
+++ b/indra/llui/lluistring.cpp
@@ -40,7 +40,7 @@ LLFastTimer::DeclareTimer FTM_UI_STRING("UI String");
 
 LLUIString::LLUIString(const std::string& instring, const LLStringUtil::format_map_t& args)
 :	mOrig(instring),
-	mArgs(args)
+	mArgs(new LLStringUtil::format_map_t(args))
 {
 	dirty();
 }
@@ -54,7 +54,7 @@ void LLUIString::assign(const std::string& s)
 void LLUIString::setArgList(const LLStringUtil::format_map_t& args)
 
 {
-	mArgs = args;
+	getArgs() = args;
 	dirty();
 }
 
@@ -74,7 +74,7 @@ void LLUIString::setArgs(const LLSD& sd)
 
 void LLUIString::setArg(const std::string& key, const std::string& replacement)
 {
-	mArgs[key] = replacement;
+	getArgs()[key] = replacement;
 	dirty();
 }
 
@@ -135,14 +135,14 @@ void LLUIString::updateResult() const
 	mResult = mOrig;
 	
 	// get the defailt args + local args
-	if (mArgs.empty())
+	if (!mArgs || mArgs->empty())
 	{
 		LLStringUtil::format(mResult, LLTrans::getDefaultArgs());
 	}
 	else
 	{
 		LLStringUtil::format_map_t combined_args = LLTrans::getDefaultArgs();
-		combined_args.insert(mArgs.begin(), mArgs.end());
+		combined_args.insert(mArgs->begin(), mArgs->end());
 		LLStringUtil::format(mResult, combined_args);
 	}
 }
@@ -153,3 +153,12 @@ void LLUIString::updateWResult() const
 
 	mWResult = utf8str_to_wstring(getUpdatedResult());
 }
+
+LLStringUtil::format_map_t& LLUIString::getArgs()
+{
+	if (!mArgs)
+	{
+		mArgs = new LLStringUtil::format_map_t;
+	}
+	return *mArgs;
+}
\ No newline at end of file
diff --git a/indra/llui/lluistring.h b/indra/llui/lluistring.h
index 32cfc0d9cd..3f91856e26 100644
--- a/indra/llui/lluistring.h
+++ b/indra/llui/lluistring.h
@@ -64,9 +64,9 @@ class LLUIString
 public:
 	// These methods all perform appropriate argument substitution
 	// and modify mOrig where appropriate
-        LLUIString() : mNeedsResult(false), mNeedsWResult(false) {}
+        LLUIString() : mArgs(NULL), mNeedsResult(false), mNeedsWResult(false) {}
 	LLUIString(const std::string& instring, const LLStringUtil::format_map_t& args);
-	LLUIString(const std::string& instring) { assign(instring); }
+	LLUIString(const std::string& instring) : mArgs(NULL) { assign(instring); }
 
 	void assign(const std::string& instring);
 	LLUIString& operator=(const std::string& s) { assign(s); return *this; }
@@ -86,7 +86,7 @@ public:
 	S32 length() const { return getUpdatedWResult().size(); }
 
 	void clear();
-	void clearArgs() { mArgs.clear(); }
+	void clearArgs() { if (mArgs) mArgs->clear(); }
 	
 	// These utility functions are included for text editing.
 	// They do not affect mOrig and do not perform argument substitution
@@ -105,11 +105,12 @@ private:
 	// do actual work of updating strings (non-inlined)
 	void updateResult() const;
 	void updateWResult() const;
+	LLStringUtil::format_map_t& getArgs();
 	
 	std::string mOrig;
 	mutable std::string mResult;
 	mutable LLWString mWResult; // for displaying
-	LLStringUtil::format_map_t mArgs;
+	LLStringUtil::format_map_t* mArgs;
 
 	// controls lazy evaluation
 	mutable bool	mNeedsResult;
-- 
cgit v1.2.3


From f92a411c023e2178814c27216b4d4c36fcb5d784 Mon Sep 17 00:00:00 2001
From: Richard Nelson <none@none>
Date: Wed, 4 Aug 2010 19:01:55 -0700
Subject: updated comment on boost lib

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

diff --git a/install.xml b/install.xml
index 3795fc3757..f7562e16e2 100644
--- a/install.xml
+++ b/install.xml
@@ -185,7 +185,7 @@
         <key>copyright</key>
         <string>various</string>
         <key>description</key>
-        <string>A set of portable C++ libraries which provide a wide set of functionality. Used primarily for tokenization. </string>
+        <string>A set of portable C++ libraries which provide a wide set of functionality. </string>
         <key>license</key>
         <string>boost</string>
         <key>packages</key>
-- 
cgit v1.2.3


From b2028085fdfddfd5a7ac0f52d9f34b84457b3b98 Mon Sep 17 00:00:00 2001
From: Richard Nelson <none@none>
Date: Wed, 4 Aug 2010 19:02:30 -0700
Subject: first pass at faster XUI parsing (no recursion support yet) also made
 LLSD->param block parsing faster

---
 indra/llui/llsdparam.cpp       | 116 +++++++---
 indra/llui/llsdparam.h         |  12 +-
 indra/llui/lluictrlfactory.cpp |   7 +-
 indra/llxuixml/llinitparam.h   |  13 +-
 indra/llxuixml/llxuiparser.cpp | 511 ++++++++++++++++++++++++++++++++++++-----
 indra/llxuixml/llxuiparser.h   |  86 +++++--
 6 files changed, 636 insertions(+), 109 deletions(-)

diff --git a/indra/llui/llsdparam.cpp b/indra/llui/llsdparam.cpp
index 4bb45a3065..7d37127584 100644
--- a/indra/llui/llsdparam.cpp
+++ b/indra/llui/llsdparam.cpp
@@ -43,33 +43,16 @@ LLParamSDParser::LLParamSDParser()
 {
 	using boost::bind;
 
-	registerParserFuncs<S32>(bind(&LLParamSDParser::readTypedValue<S32>, this, _1, &LLSD::asInteger),
-							bind(&LLParamSDParser::writeTypedValue<S32>, this, _1, _2));
-	registerParserFuncs<U32>(bind(&LLParamSDParser::readTypedValue<U32>, this, _1, &LLSD::asInteger),
-							bind(&LLParamSDParser::writeU32Param, this, _1, _2));
-	registerParserFuncs<F32>(bind(&LLParamSDParser::readTypedValue<F32>, this, _1, &LLSD::asReal),
-							bind(&LLParamSDParser::writeTypedValue<F32>, this, _1, _2));
-	registerParserFuncs<F64>(bind(&LLParamSDParser::readTypedValue<F64>, this, _1, &LLSD::asReal),
-							bind(&LLParamSDParser::writeTypedValue<F64>, this, _1, _2));
-	registerParserFuncs<bool>(bind(&LLParamSDParser::readTypedValue<F32>, this, _1, &LLSD::asBoolean),
-							bind(&LLParamSDParser::writeTypedValue<F32>, this, _1, _2));
-	registerParserFuncs<std::string>(bind(&LLParamSDParser::readTypedValue<std::string>, this, _1, &LLSD::asString),
-							bind(&LLParamSDParser::writeTypedValue<std::string>, this, _1, _2));
-	registerParserFuncs<LLUUID>(bind(&LLParamSDParser::readTypedValue<LLUUID>, this, _1, &LLSD::asUUID),
-							bind(&LLParamSDParser::writeTypedValue<LLUUID>, this, _1, _2));
-	registerParserFuncs<LLDate>(bind(&LLParamSDParser::readTypedValue<LLDate>, this, _1, &LLSD::asDate),
-							bind(&LLParamSDParser::writeTypedValue<LLDate>, this, _1, _2));
-	registerParserFuncs<LLURI>(bind(&LLParamSDParser::readTypedValue<LLURI>, this, _1, &LLSD::asURI),
-							bind(&LLParamSDParser::writeTypedValue<LLURI>, this, _1, _2));
-	registerParserFuncs<LLSD>(bind(&LLParamSDParser::readSDParam, this, _1),
-							bind(&LLParamSDParser::writeTypedValue<LLSD>, this, _1, _2));
-}
-
-bool LLParamSDParser::readSDParam(void* value_ptr)
-{
-	if (!mCurReadSD) return false;
-	*((LLSD*)value_ptr) = *mCurReadSD;
-	return true;
+	registerParserFuncs<S32>(readS32, bind(&LLParamSDParser::writeTypedValue<S32>, this, _1, _2));
+	registerParserFuncs<U32>(readU32, bind(&LLParamSDParser::writeU32Param, this, _1, _2));
+	registerParserFuncs<F32>(readF32, bind(&LLParamSDParser::writeTypedValue<F32>, this, _1, _2));
+	registerParserFuncs<F64>(readF64, bind(&LLParamSDParser::writeTypedValue<F64>, this, _1, _2));
+	registerParserFuncs<bool>(readBool, bind(&LLParamSDParser::writeTypedValue<F32>, this, _1, _2));
+	registerParserFuncs<std::string>(readString, bind(&LLParamSDParser::writeTypedValue<std::string>, this, _1, _2));
+	registerParserFuncs<LLUUID>(readUUID, bind(&LLParamSDParser::writeTypedValue<LLUUID>, this, _1, _2));
+	registerParserFuncs<LLDate>(readDate, bind(&LLParamSDParser::writeTypedValue<LLDate>, this, _1, _2));
+	registerParserFuncs<LLURI>(readURI, bind(&LLParamSDParser::writeTypedValue<LLURI>, this, _1, _2));
+	registerParserFuncs<LLSD>(readSD, bind(&LLParamSDParser::writeTypedValue<LLSD>, this, _1, _2));
 }
 
 // special case handling of U32 due to ambiguous LLSD::assign overload
@@ -148,3 +131,82 @@ LLSD* LLParamSDParser::getSDWriteNode(const parser_t::name_stack_t& name_stack)
 	return mWriteSD;
 }
 
+bool LLParamSDParser::readS32(Parser& parser, void* val_ptr)
+{
+	LLParamSDParser& self = static_cast<LLParamSDParser&>(parser);
+
+    *((S32*)val_ptr) = self.mCurReadSD->asInteger();
+    return true;
+}
+
+bool LLParamSDParser::readU32(Parser& parser, void* val_ptr)
+{
+	LLParamSDParser& self = static_cast<LLParamSDParser&>(parser);
+
+    *((U32*)val_ptr) = self.mCurReadSD->asInteger();
+    return true;
+}
+
+bool LLParamSDParser::readF32(Parser& parser, void* val_ptr)
+{
+	LLParamSDParser& self = static_cast<LLParamSDParser&>(parser);
+
+    *((F32*)val_ptr) = self.mCurReadSD->asReal();
+    return true;
+}
+
+bool LLParamSDParser::readF64(Parser& parser, void* val_ptr)
+{
+	LLParamSDParser& self = static_cast<LLParamSDParser&>(parser);
+
+    *((F64*)val_ptr) = self.mCurReadSD->asReal();
+    return true;
+}
+
+bool LLParamSDParser::readBool(Parser& parser, void* val_ptr)
+{
+	LLParamSDParser& self = static_cast<LLParamSDParser&>(parser);
+
+    *((bool*)val_ptr) = self.mCurReadSD->asBoolean();
+    return true;
+}
+
+bool LLParamSDParser::readString(Parser& parser, void* val_ptr)
+{
+	LLParamSDParser& self = static_cast<LLParamSDParser&>(parser);
+
+	*((std::string*)val_ptr) = self.mCurReadSD->asString();
+    return true;
+}
+
+bool LLParamSDParser::readUUID(Parser& parser, void* val_ptr)
+{
+	LLParamSDParser& self = static_cast<LLParamSDParser&>(parser);
+
+	*((LLUUID*)val_ptr) = self.mCurReadSD->asUUID();
+    return true;
+}
+
+bool LLParamSDParser::readDate(Parser& parser, void* val_ptr)
+{
+	LLParamSDParser& self = static_cast<LLParamSDParser&>(parser);
+
+	*((LLDate*)val_ptr) = self.mCurReadSD->asDate();
+    return true;
+}
+
+bool LLParamSDParser::readURI(Parser& parser, void* val_ptr)
+{
+	LLParamSDParser& self = static_cast<LLParamSDParser&>(parser);
+
+	*((LLURI*)val_ptr) = self.mCurReadSD->asURI();
+    return true;
+}
+
+bool LLParamSDParser::readSD(Parser& parser, void* val_ptr)
+{
+	LLParamSDParser& self = static_cast<LLParamSDParser&>(parser);
+
+	*((LLSD*)val_ptr) = *self.mCurReadSD;
+    return true;
+}
diff --git a/indra/llui/llsdparam.h b/indra/llui/llsdparam.h
index 12f28f876f..71b0a45630 100644
--- a/indra/llui/llsdparam.h
+++ b/indra/llui/llsdparam.h
@@ -79,9 +79,19 @@ private:
 
 	LLSD* getSDWriteNode(const parser_t::name_stack_t& name_stack);
 
-	bool readSDParam(void* value_ptr);
 	bool writeU32Param(const void* value_ptr, const parser_t::name_stack_t& name_stack);
 
+	static bool readS32(Parser& parser, void* val_ptr);
+	static bool readU32(Parser& parser, void* val_ptr);
+	static bool readF32(Parser& parser, void* val_ptr);
+	static bool readF64(Parser& parser, void* val_ptr);
+	static bool readBool(Parser& parser, void* val_ptr);
+	static bool readString(Parser& parser, void* val_ptr);
+	static bool readUUID(Parser& parser, void* val_ptr);
+	static bool readDate(Parser& parser, void* val_ptr);
+	static bool readURI(Parser& parser, void* val_ptr);
+	static bool readSD(Parser& parser, void* val_ptr);
+
 	Parser::name_stack_t	mNameStack;
 	const LLSD*				mCurReadSD;
 	LLSD*					mWriteSD;
diff --git a/indra/llui/lluictrlfactory.cpp b/indra/llui/lluictrlfactory.cpp
index a46d961709..6ad104c1f4 100644
--- a/indra/llui/lluictrlfactory.cpp
+++ b/indra/llui/lluictrlfactory.cpp
@@ -99,10 +99,11 @@ void LLUICtrlFactory::loadWidgetTemplate(const std::string& widget_tag, LLInitPa
 	std::string filename = std::string("widgets") + gDirUtilp->getDirDelimiter() + widget_tag + ".xml";
 	LLXMLNodePtr root_node;
 
-	if (LLUICtrlFactory::getLayeredXMLNode(filename, root_node))
+	std::string full_filename = gDirUtilp->findSkinnedFilename(LLUI::getXUIPaths().front(), filename);
+	if (!full_filename.empty())
 	{
-		LLUICtrlFactory::instance().pushFileName(filename);
-		LLXUIParser::instance().readXUI(root_node, block, filename);
+		LLUICtrlFactory::instance().pushFileName(full_filename);
+		LLFastXUIParser::instance().readXUI(full_filename, block);
 		LLUICtrlFactory::instance().popFileName();
 	}
 }
diff --git a/indra/llxuixml/llinitparam.h b/indra/llxuixml/llinitparam.h
index b645c4be7c..1cc7d06b73 100644
--- a/indra/llxuixml/llinitparam.h
+++ b/indra/llxuixml/llinitparam.h
@@ -40,6 +40,7 @@ f * @file llinitparam.h
 #include <boost/function.hpp>
 #include <boost/bind.hpp>
 #include <boost/type_traits/is_convertible.hpp>
+#include <boost/unordered_map.hpp>
 #include "llregistry.h"
 #include "llmemory.h"
 
@@ -202,13 +203,13 @@ namespace LLInitParam
 		typedef std::pair<name_stack_t::const_iterator, name_stack_t::const_iterator>	name_stack_range_t;
 		typedef std::vector<std::string>							possible_values_t;
 
-		typedef boost::function<bool (void*)>															parser_read_func_t;
+		typedef bool (*parser_read_func_t)(Parser& parser, void* output);
 		typedef boost::function<bool (const void*, const name_stack_t&)>								parser_write_func_t;
 		typedef boost::function<void (const name_stack_t&, S32, S32, const possible_values_t*)>	parser_inspect_func_t;
 
-		typedef std::map<const std::type_info*, parser_read_func_t, CompareTypeID>		parser_read_func_map_t;
-		typedef std::map<const std::type_info*, parser_write_func_t, CompareTypeID>		parser_write_func_map_t;
-		typedef std::map<const std::type_info*, parser_inspect_func_t, CompareTypeID>	parser_inspect_func_map_t;
+		typedef boost::unordered_map<const void*, parser_read_func_t>		parser_read_func_map_t;
+		typedef boost::unordered_map<const void*, parser_write_func_t>		parser_write_func_map_t;
+		typedef boost::unordered_map<const void*, parser_inspect_func_t>	parser_inspect_func_map_t;
 
 		Parser()
 		:	mParseSilently(false),
@@ -221,7 +222,7 @@ namespace LLInitParam
 		    parser_read_func_map_t::iterator found_it = mParserReadFuncs.find(&typeid(T));
 		    if (found_it != mParserReadFuncs.end())
 		    {
-			    return found_it->second((void*)&param);
+			    return found_it->second(*this, (void*)&param);
 		    }
 		    return false;
 	    }
@@ -386,7 +387,7 @@ namespace LLInitParam
 		void aggregateBlockData(BlockDescriptor& src_block_data);
 
 	public:
-		typedef std::map<const std::string, ParamDescriptor*> param_map_t; // references param descriptors stored in mAllParams
+		typedef boost::unordered_map<const std::string, ParamDescriptor*> param_map_t; // references param descriptors stored in mAllParams
 		typedef std::vector<ParamDescriptor*> param_list_t; 
 
 		typedef std::list<ParamDescriptor> all_params_list_t;// references param descriptors stored in mAllParams
diff --git a/indra/llxuixml/llxuiparser.cpp b/indra/llxuixml/llxuiparser.cpp
index dbc20a5a1e..00128c978a 100644
--- a/indra/llxuixml/llxuiparser.cpp
+++ b/indra/llxuixml/llxuiparser.cpp
@@ -35,11 +35,16 @@
 #include "llxuiparser.h"
 
 #include "llxmlnode.h"
+#include "expat/expat.h"
 #include <fstream>
 #include <boost/tokenizer.hpp>
+//#include <boost/spirit/include/qi.hpp>
+#include <boost/spirit/include/classic_core.hpp>
 
 #include "lluicolor.h"
 
+using namespace BOOST_SPIRIT_CLASSIC_NS;
+
 const S32 MAX_STRING_ATTRIBUTE_SIZE = 40;
 
 //
@@ -370,34 +375,20 @@ LLXUIParser::LLXUIParser()
 :	mLastWriteGeneration(-1),
 	mCurReadDepth(0)
 {
-	registerParserFuncs<bool>(boost::bind(&LLXUIParser::readBoolValue, this, _1),
-								boost::bind(&LLXUIParser::writeBoolValue, this, _1, _2));
-	registerParserFuncs<std::string>(boost::bind(&LLXUIParser::readStringValue, this, _1),
-								boost::bind(&LLXUIParser::writeStringValue, this, _1, _2));
-	registerParserFuncs<U8>(boost::bind(&LLXUIParser::readU8Value, this, _1),
-								boost::bind(&LLXUIParser::writeU8Value, this, _1, _2));
-	registerParserFuncs<S8>(boost::bind(&LLXUIParser::readS8Value, this, _1),
-								boost::bind(&LLXUIParser::writeS8Value, this, _1, _2));
-	registerParserFuncs<U16>(boost::bind(&LLXUIParser::readU16Value, this, _1),
-								boost::bind(&LLXUIParser::writeU16Value, this, _1, _2));
-	registerParserFuncs<S16>(boost::bind(&LLXUIParser::readS16Value, this, _1),
-								boost::bind(&LLXUIParser::writeS16Value, this, _1, _2));
-	registerParserFuncs<U32>(boost::bind(&LLXUIParser::readU32Value, this, _1),
-								boost::bind(&LLXUIParser::writeU32Value, this, _1, _2));
-	registerParserFuncs<S32>(boost::bind(&LLXUIParser::readS32Value, this, _1),
-								boost::bind(&LLXUIParser::writeS32Value, this, _1, _2));
-	registerParserFuncs<F32>(boost::bind(&LLXUIParser::readF32Value, this, _1),
-								boost::bind(&LLXUIParser::writeF32Value, this, _1, _2));
-	registerParserFuncs<F64>(boost::bind(&LLXUIParser::readF64Value, this, _1),
-								boost::bind(&LLXUIParser::writeF64Value, this, _1, _2));
-	registerParserFuncs<LLColor4>(boost::bind(&LLXUIParser::readColor4Value, this, _1),
-								boost::bind(&LLXUIParser::writeColor4Value, this, _1, _2));
-	registerParserFuncs<LLUIColor>(boost::bind(&LLXUIParser::readUIColorValue, this, _1),
-								boost::bind(&LLXUIParser::writeUIColorValue, this, _1, _2));
-	registerParserFuncs<LLUUID>(boost::bind(&LLXUIParser::readUUIDValue, this, _1),
-								boost::bind(&LLXUIParser::writeUUIDValue, this, _1, _2));
-	registerParserFuncs<LLSD>(boost::bind(&LLXUIParser::readSDValue, this, _1),
-								boost::bind(&LLXUIParser::writeSDValue, this, _1, _2));
+	registerParserFuncs<bool>(readBoolValue, boost::bind(&LLXUIParser::writeBoolValue, this, _1, _2));
+	registerParserFuncs<std::string>(readStringValue, boost::bind(&LLXUIParser::writeStringValue, this, _1, _2));
+	registerParserFuncs<U8>(readU8Value, boost::bind(&LLXUIParser::writeU8Value, this, _1, _2));
+	registerParserFuncs<S8>(readS8Value, boost::bind(&LLXUIParser::writeS8Value, this, _1, _2));
+	registerParserFuncs<U16>(readU16Value, boost::bind(&LLXUIParser::writeU16Value, this, _1, _2));
+	registerParserFuncs<S16>(readS16Value, boost::bind(&LLXUIParser::writeS16Value, this, _1, _2));
+	registerParserFuncs<U32>(readU32Value, boost::bind(&LLXUIParser::writeU32Value, this, _1, _2));
+	registerParserFuncs<S32>(readS32Value, boost::bind(&LLXUIParser::writeS32Value, this, _1, _2));
+	registerParserFuncs<F32>(readF32Value, boost::bind(&LLXUIParser::writeF32Value, this, _1, _2));
+	registerParserFuncs<F64>(readF64Value, boost::bind(&LLXUIParser::writeF64Value, this, _1, _2));
+	registerParserFuncs<LLColor4>(readColor4Value, boost::bind(&LLXUIParser::writeColor4Value, this, _1, _2));
+	registerParserFuncs<LLUIColor>(readUIColorValue, boost::bind(&LLXUIParser::writeUIColorValue, this, _1, _2));
+	registerParserFuncs<LLUUID>(readUUIDValue, boost::bind(&LLXUIParser::writeUUIDValue, this, _1, _2));
+	registerParserFuncs<LLSD>(readSDValue, boost::bind(&LLXUIParser::writeSDValue, this, _1, _2));
 }
 
 static LLFastTimer::DeclareTimer FTM_PARSE_XUI("XUI Parsing");
@@ -621,10 +612,11 @@ LLXMLNodePtr LLXUIParser::getNode(const name_stack_t& stack)
 }
 
 
-bool LLXUIParser::readBoolValue(void* val_ptr)
+bool LLXUIParser::readBoolValue(Parser& parser, void* val_ptr)
 {
 	S32 value;
-	bool success = mCurReadNode->getBoolValue(1, &value);
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
+	bool success = self.mCurReadNode->getBoolValue(1, &value);
 	*((bool*)val_ptr) = (value != FALSE);
 	return success;
 }
@@ -640,9 +632,10 @@ bool LLXUIParser::writeBoolValue(const void* val_ptr, const name_stack_t& stack)
 	return false;
 }
 
-bool LLXUIParser::readStringValue(void* val_ptr)
+bool LLXUIParser::readStringValue(Parser& parser, void* val_ptr)
 {
-	*((std::string*)val_ptr) = mCurReadNode->getSanitizedValue();
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
+	*((std::string*)val_ptr) = self.mCurReadNode->getSanitizedValue();
 	return true;
 }
 
@@ -677,9 +670,10 @@ bool LLXUIParser::writeStringValue(const void* val_ptr, const name_stack_t& stac
 	return false;
 }
 
-bool LLXUIParser::readU8Value(void* val_ptr)
+bool LLXUIParser::readU8Value(Parser& parser, void* val_ptr)
 {
-	return mCurReadNode->getByteValue(1, (U8*)val_ptr);
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
+	return self.mCurReadNode->getByteValue(1, (U8*)val_ptr);
 }
 
 bool LLXUIParser::writeU8Value(const void* val_ptr, const name_stack_t& stack)
@@ -693,10 +687,11 @@ bool LLXUIParser::writeU8Value(const void* val_ptr, const name_stack_t& stack)
 	return false;
 }
 
-bool LLXUIParser::readS8Value(void* val_ptr)
+bool LLXUIParser::readS8Value(Parser& parser, void* val_ptr)
 {
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
 	S32 value;
-	if(mCurReadNode->getIntValue(1, &value))
+	if(self.mCurReadNode->getIntValue(1, &value))
 	{
 		*((S8*)val_ptr) = value;
 		return true;
@@ -715,10 +710,11 @@ bool LLXUIParser::writeS8Value(const void* val_ptr, const name_stack_t& stack)
 	return false;
 }
 
-bool LLXUIParser::readU16Value(void* val_ptr)
+bool LLXUIParser::readU16Value(Parser& parser, void* val_ptr)
 {
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
 	U32 value;
-	if(mCurReadNode->getUnsignedValue(1, &value))
+	if(self.mCurReadNode->getUnsignedValue(1, &value))
 	{
 		*((U16*)val_ptr) = value;
 		return true;
@@ -737,10 +733,11 @@ bool LLXUIParser::writeU16Value(const void* val_ptr, const name_stack_t& stack)
 	return false;
 }
 
-bool LLXUIParser::readS16Value(void* val_ptr)
+bool LLXUIParser::readS16Value(Parser& parser, void* val_ptr)
 {
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
 	S32 value;
-	if(mCurReadNode->getIntValue(1, &value))
+	if(self.mCurReadNode->getIntValue(1, &value))
 	{
 		*((S16*)val_ptr) = value;
 		return true;
@@ -759,9 +756,10 @@ bool LLXUIParser::writeS16Value(const void* val_ptr, const name_stack_t& stack)
 	return false;
 }
 
-bool LLXUIParser::readU32Value(void* val_ptr)
+bool LLXUIParser::readU32Value(Parser& parser, void* val_ptr)
 {
-	return mCurReadNode->getUnsignedValue(1, (U32*)val_ptr);
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
+	return self.mCurReadNode->getUnsignedValue(1, (U32*)val_ptr);
 }
 
 bool LLXUIParser::writeU32Value(const void* val_ptr, const name_stack_t& stack)
@@ -775,9 +773,10 @@ bool LLXUIParser::writeU32Value(const void* val_ptr, const name_stack_t& stack)
 	return false;
 }
 
-bool LLXUIParser::readS32Value(void* val_ptr)
+bool LLXUIParser::readS32Value(Parser& parser, void* val_ptr)
 {
-	return mCurReadNode->getIntValue(1, (S32*)val_ptr);
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
+	return self.mCurReadNode->getIntValue(1, (S32*)val_ptr);
 }
 
 bool LLXUIParser::writeS32Value(const void* val_ptr, const name_stack_t& stack)
@@ -791,9 +790,10 @@ bool LLXUIParser::writeS32Value(const void* val_ptr, const name_stack_t& stack)
 	return false;
 }
 
-bool LLXUIParser::readF32Value(void* val_ptr)
+bool LLXUIParser::readF32Value(Parser& parser, void* val_ptr)
 {
-	return mCurReadNode->getFloatValue(1, (F32*)val_ptr);
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
+	return self.mCurReadNode->getFloatValue(1, (F32*)val_ptr);
 }
 
 bool LLXUIParser::writeF32Value(const void* val_ptr, const name_stack_t& stack)
@@ -807,9 +807,10 @@ bool LLXUIParser::writeF32Value(const void* val_ptr, const name_stack_t& stack)
 	return false;
 }
 
-bool LLXUIParser::readF64Value(void* val_ptr)
+bool LLXUIParser::readF64Value(Parser& parser, void* val_ptr)
 {
-	return mCurReadNode->getDoubleValue(1, (F64*)val_ptr);
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
+	return self.mCurReadNode->getDoubleValue(1, (F64*)val_ptr);
 }
 
 bool LLXUIParser::writeF64Value(const void* val_ptr, const name_stack_t& stack)
@@ -823,10 +824,11 @@ bool LLXUIParser::writeF64Value(const void* val_ptr, const name_stack_t& stack)
 	return false;
 }
 
-bool LLXUIParser::readColor4Value(void* val_ptr)
+bool LLXUIParser::readColor4Value(Parser& parser, void* val_ptr)
 {
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
 	LLColor4* colorp = (LLColor4*)val_ptr;
-	if(mCurReadNode->getFloatValue(4, colorp->mV) >= 3)
+	if(self.mCurReadNode->getFloatValue(4, colorp->mV) >= 3)
 	{
 		return true;
 	}
@@ -846,11 +848,12 @@ bool LLXUIParser::writeColor4Value(const void* val_ptr, const name_stack_t& stac
 	return false;
 }
 
-bool LLXUIParser::readUIColorValue(void* val_ptr)
+bool LLXUIParser::readUIColorValue(Parser& parser, void* val_ptr)
 {
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
 	LLUIColor* param = (LLUIColor*)val_ptr;
 	LLColor4 color;
-	bool success =  mCurReadNode->getFloatValue(4, color.mV) >= 3;
+	bool success =  self.mCurReadNode->getFloatValue(4, color.mV) >= 3;
 	if (success)
 	{
 		param->set(color);
@@ -874,11 +877,12 @@ bool LLXUIParser::writeUIColorValue(const void* val_ptr, const name_stack_t& sta
 	return false;
 }
 
-bool LLXUIParser::readUUIDValue(void* val_ptr)
+bool LLXUIParser::readUUIDValue(Parser& parser, void* val_ptr)
 {
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
 	LLUUID temp_id;
 	// LLUUID::set is destructive, so use temporary value
-	if (temp_id.set(mCurReadNode->getSanitizedValue()))
+	if (temp_id.set(self.mCurReadNode->getSanitizedValue()))
 	{
 		*(LLUUID*)(val_ptr) = temp_id;
 		return true;
@@ -897,9 +901,10 @@ bool LLXUIParser::writeUUIDValue(const void* val_ptr, const name_stack_t& stack)
 	return false;
 }
 
-bool LLXUIParser::readSDValue(void* val_ptr)
+bool LLXUIParser::readSDValue(Parser& parser, void* val_ptr)
 {
-	*((LLSD*)val_ptr) = LLSD(mCurReadNode->getSanitizedValue());
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
+	*((LLSD*)val_ptr) = LLSD(self.mCurReadNode->getSanitizedValue());
 	return true;
 }
 
@@ -968,3 +973,397 @@ void LLXUIParser::parserError(const std::string& message)
 	Parser::parserError(message);
 #endif
 }
+
+
+//
+// LLFastXUIParser
+//
+
+struct ScopedFile
+{
+	ScopedFile( const std::string& filename, const char* accessmode )
+	{
+		mFile = LLFile::fopen(filename, accessmode);
+	}
+
+	~ScopedFile()
+	{
+		fclose(mFile);
+		mFile = NULL;
+	}
+
+	S32 getRemainingBytes()
+	{
+		if (!isOpen()) return 0;
+
+		S32 cur_pos = ftell(mFile);
+		fseek(mFile, 0L, SEEK_END);
+		S32 file_size = ftell(mFile);
+		fseek(mFile, cur_pos, SEEK_SET);
+		return file_size - cur_pos;
+	}
+
+	bool isOpen() { return mFile != NULL; }
+
+	LLFILE* mFile;
+};
+
+LLFastXUIParser::LLFastXUIParser()
+:	mLastWriteGeneration(-1),
+	mCurReadDepth(0)
+{
+	registerParserFuncs<bool>(readBoolValue, NULL);
+	registerParserFuncs<std::string>(readStringValue, NULL);
+	registerParserFuncs<U8>(readU8Value, NULL);
+	registerParserFuncs<S8>(readS8Value, NULL);
+	registerParserFuncs<U16>(readU16Value, NULL);
+	registerParserFuncs<S16>(readS16Value, NULL);
+	registerParserFuncs<U32>(readU32Value, NULL);
+	registerParserFuncs<S32>(readS32Value, NULL);
+	registerParserFuncs<F32>(readF32Value, NULL);
+	registerParserFuncs<F64>(readF64Value, NULL);
+	registerParserFuncs<LLColor4>(readColor4Value, NULL);
+	registerParserFuncs<LLUIColor>(readUIColorValue, NULL);
+	registerParserFuncs<LLUUID>(readUUIDValue, NULL);
+	registerParserFuncs<LLSD>(readSDValue, NULL);
+}
+
+LLFastXUIParser::~LLFastXUIParser()
+{
+}
+
+
+bool LLFastXUIParser::readXUI(const std::string& filename, LLInitParam::BaseBlock& block, bool silent)
+{
+	LLFastTimer timer(FTM_PARSE_XUI);
+
+	mParser = XML_ParserCreate(NULL);
+	XML_SetUserData(mParser, this);
+	XML_SetElementHandler(					mParser,	startElementHandler, endElementHandler);
+	XML_SetCharacterDataHandler(			mParser,	characterDataHandler);
+
+	mBlock = &block;
+	mNameStack.clear();
+	mCurFileName = filename;
+	mCurReadDepth = 0;
+	setParseSilently(silent);
+
+	ScopedFile file(filename, "rb");
+	if( !file.isOpen() )
+	{
+		LL_WARNS("ReadXUI") << "Unable to open file " << filename << LL_ENDL;
+		return false;
+	}
+
+	S32 bytes_read = 0;
+	
+	S32 buffer_size = file.getRemainingBytes();
+	void* buffer = XML_GetBuffer(mParser, buffer_size);
+	if( !buffer ) 
+	{
+		LL_WARNS("ReadXUI") << "Unable to allocate XML buffer while reading file " << filename << LL_ENDL;
+		XML_ParserFree( mParser );
+		return false;
+	}
+
+	bytes_read = (S32)fread(buffer, 1, buffer_size, file.mFile);
+	if( bytes_read <= 0 )
+	{
+		LL_WARNS("ReadXUI") << "Error while reading file  " << filename << LL_ENDL;
+		XML_ParserFree( mParser );
+		return false;
+	}
+	
+	if( !XML_ParseBuffer(mParser, bytes_read, TRUE ) )
+	{
+		LL_WARNS("ReadXUI") << "Error while parsing file  " << filename << LL_ENDL;
+		XML_ParserFree( mParser );
+		return false;
+	}
+
+	XML_ParserFree( mParser );
+	return true;
+}
+
+void LLFastXUIParser::startElementHandler(void *userData, const char *name, const char **atts)
+{
+	LLFastXUIParser* self = reinterpret_cast<LLFastXUIParser*>(userData);
+	self->startElement(name, atts);
+}
+
+void LLFastXUIParser::endElementHandler(void *userData, const char *name)
+{
+	LLFastXUIParser* self = reinterpret_cast<LLFastXUIParser*>(userData);
+	self->endElement(name);
+}
+
+void LLFastXUIParser::characterDataHandler(void *userData, const char *s, int len)
+{
+	LLFastXUIParser* self = reinterpret_cast<LLFastXUIParser*>(userData);
+	self->characterData(s, len);
+}
+
+void LLFastXUIParser::startElement(const char *name, const char **atts)
+{
+	typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
+	boost::char_separator<char> sep(".");
+
+	mCurReadDepth++;
+	S32 num_tokens_pushed = 0;
+	std::string child_name(name);
+
+	if (mCurReadDepth > 1)
+	{
+		// for non "dotted" child nodes	check to see if child node maps to another widget type
+		// and if not, treat as a child element of the current node
+		// e.g. <button><rect left="10"/></button> will interpret <rect> as "button.rect"
+		// since there is no widget named "rect"
+		if (child_name.find(".") == std::string::npos) 
+		{
+			mNameStack.push_back(std::make_pair(child_name, newParseGeneration()));
+			num_tokens_pushed++;
+		}
+		else
+		{
+			// parse out "dotted" name into individual tokens
+			tokenizer name_tokens(child_name, sep);
+
+			tokenizer::iterator name_token_it = name_tokens.begin();
+			if(name_token_it == name_tokens.end()) 
+			{
+				return;
+			}
+
+			// check for proper nesting
+			if(!mScope.empty() && *name_token_it != mScope.back())
+			{
+				return;
+			}
+
+			// now ignore first token
+			++name_token_it; 
+
+			// copy remaining tokens on to our running token list
+			for(tokenizer::iterator token_to_push = name_token_it; token_to_push != name_tokens.end(); ++token_to_push)
+			{
+				mNameStack.push_back(std::make_pair(*token_to_push, newParseGeneration()));
+				num_tokens_pushed++;
+			}
+			mScope.push_back(mNameStack.back().first);
+		}
+	}
+	else
+	{
+		mScope.push_back(name);
+	}
+
+	mTokenSizeStack.push_back(num_tokens_pushed);
+	readAttributes(atts);
+}
+
+bool LLFastXUIParser::readAttributes(const char **atts)
+{
+	typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
+	boost::char_separator<char> sep(".");
+
+	bool any_parsed = false;
+	for(S32 i = 0; atts[i] && atts[i+1]; i += 2 )
+	{
+		std::string attribute_name(atts[i]);
+		mCurAttributeValueBegin = atts[i+1];
+		
+		S32 num_tokens_pushed = 0;
+		tokenizer name_tokens(attribute_name, sep);
+		// copy remaining tokens on to our running token list
+		for(tokenizer::iterator token_to_push = name_tokens.begin(); token_to_push != name_tokens.end(); ++token_to_push)
+		{
+			mNameStack.push_back(std::make_pair(*token_to_push, newParseGeneration()));
+			num_tokens_pushed++;
+		}
+
+		// child nodes are not necessarily valid attributes, so don't complain once we've recursed
+		bool silent = mCurReadDepth > 1;
+		any_parsed |= mBlock->submitValue(mNameStack, *this, silent);
+		
+		while(num_tokens_pushed-- > 0)
+		{
+			mNameStack.pop_back();
+		}
+	}
+	return any_parsed;
+}
+
+
+void LLFastXUIParser::endElement(const char *name)
+{
+	mCurReadDepth--;
+	S32 num_tokens_to_pop = mTokenSizeStack.back();
+	mTokenSizeStack.pop_back();
+	while(num_tokens_to_pop-- > 0)
+	{
+		mNameStack.pop_back();
+	}
+	mScope.pop_back();
+}
+
+void LLFastXUIParser::characterData(const char *s, int len)
+{
+}
+
+
+/*virtual*/ std::string LLFastXUIParser::getCurrentElementName()
+{
+	std::string full_name;
+	for (name_stack_t::iterator it = mNameStack.begin();	
+		it != mNameStack.end();
+		++it)
+	{
+		full_name += it->first + "."; // build up dotted names: "button.param.nestedparam."
+	}
+
+	return full_name;
+}
+
+const S32 LINE_NUMBER_HERE = 0;
+
+void LLFastXUIParser::parserWarning(const std::string& message)
+{
+#ifdef LL_WINDOWS
+	// use Visual Studo friendly formatting of output message for easy access to originating xml
+	llutf16string utf16str = utf8str_to_utf16str(llformat("%s(%d):\t%s", mCurFileName.c_str(), LINE_NUMBER_HERE, message.c_str()).c_str());
+	utf16str += '\n';
+	OutputDebugString(utf16str.c_str());
+#else
+	Parser::parserWarning(message);
+#endif
+}
+
+void LLFastXUIParser::parserError(const std::string& message)
+{
+#ifdef LL_WINDOWS
+	llutf16string utf16str = utf8str_to_utf16str(llformat("%s(%d):\t%s", mCurFileName.c_str(), LINE_NUMBER_HERE, message.c_str()).c_str());
+	utf16str += '\n';
+	OutputDebugString(utf16str.c_str());
+#else
+	Parser::parserError(message);
+#endif
+}
+
+bool LLFastXUIParser::readBoolValue(Parser& parser, void* val_ptr)
+{
+	LLFastXUIParser& self = static_cast<LLFastXUIParser&>(parser);
+	if (!strcmp(self.mCurAttributeValueBegin, "true")) 
+	{
+		*((bool*)val_ptr) = true;
+		return true;
+	}
+	else if (!strcmp(self.mCurAttributeValueBegin, "false"))
+	{
+		*((bool*)val_ptr) = false;
+		return true;
+	}
+
+	return false;
+}
+
+bool LLFastXUIParser::readStringValue(Parser& parser, void* val_ptr)
+{
+	LLFastXUIParser& self = static_cast<LLFastXUIParser&>(parser);
+	*((std::string*)val_ptr) = self.mCurAttributeValueBegin;
+	return true;
+}
+
+bool LLFastXUIParser::readU8Value(Parser& parser, void* val_ptr)
+{
+	LLFastXUIParser& self = static_cast<LLFastXUIParser&>(parser);
+	return parse(self.mCurAttributeValueBegin, uint_p[assign_a(*(U8*)val_ptr)]).full;
+}
+
+bool LLFastXUIParser::readS8Value(Parser& parser, void* val_ptr)
+{
+	LLFastXUIParser& self = static_cast<LLFastXUIParser&>(parser);
+	return parse(self.mCurAttributeValueBegin, int_p[assign_a(*(S8*)val_ptr)]).full;
+}
+
+bool LLFastXUIParser::readU16Value(Parser& parser, void* val_ptr)
+{
+	LLFastXUIParser& self = static_cast<LLFastXUIParser&>(parser);
+	return parse(self.mCurAttributeValueBegin, uint_p[assign_a(*(U16*)val_ptr)]).full;
+}
+
+bool LLFastXUIParser::readS16Value(Parser& parser, void* val_ptr)
+{
+	LLFastXUIParser& self = static_cast<LLFastXUIParser&>(parser);
+	return parse(self.mCurAttributeValueBegin, int_p[assign_a(*(S16*)val_ptr)]).full;
+}
+
+bool LLFastXUIParser::readU32Value(Parser& parser, void* val_ptr)
+{
+	LLFastXUIParser& self = static_cast<LLFastXUIParser&>(parser);
+	return parse(self.mCurAttributeValueBegin, uint_p[assign_a(*(U32*)val_ptr)]).full;
+}
+
+bool LLFastXUIParser::readS32Value(Parser& parser, void* val_ptr)
+{
+	LLFastXUIParser& self = static_cast<LLFastXUIParser&>(parser);
+	return parse(self.mCurAttributeValueBegin, int_p[assign_a(*(S32*)val_ptr)]).full;
+}
+
+bool LLFastXUIParser::readF32Value(Parser& parser, void* val_ptr)
+{
+	LLFastXUIParser& self = static_cast<LLFastXUIParser&>(parser);
+	return parse(self.mCurAttributeValueBegin, real_p[assign_a(*(F32*)val_ptr)]).full;
+}
+
+bool LLFastXUIParser::readF64Value(Parser& parser, void* val_ptr)
+{
+	LLFastXUIParser& self = static_cast<LLFastXUIParser&>(parser);
+	return parse(self.mCurAttributeValueBegin, real_p[assign_a(*(F64*)val_ptr)]).full;
+}
+	
+bool LLFastXUIParser::readColor4Value(Parser& parser, void* val_ptr)
+{
+	LLFastXUIParser& self = static_cast<LLFastXUIParser&>(parser);
+	LLColor4 value;
+
+	if (parse(self.mCurAttributeValueBegin, real_p[assign_a(value.mV[0])] >> real_p[assign_a(value.mV[1])] >> real_p[assign_a(value.mV[2])] >> real_p[assign_a(value.mV[3])], space_p).full)
+	{
+		*(LLColor4*)(val_ptr) = value;
+		return true;
+	}
+	return false;
+}
+
+bool LLFastXUIParser::readUIColorValue(Parser& parser, void* val_ptr)
+{
+	LLFastXUIParser& self = static_cast<LLFastXUIParser&>(parser);
+	LLColor4 value;
+	LLUIColor* colorp = (LLUIColor*)val_ptr;
+
+	if (parse(self.mCurAttributeValueBegin, real_p[assign_a(value.mV[0])] >> real_p[assign_a(value.mV[1])] >> real_p[assign_a(value.mV[2])] >> real_p[assign_a(value.mV[3])], space_p).full)
+	{
+		colorp->set(value);
+		return true;
+	}
+	return false;
+}
+
+bool LLFastXUIParser::readUUIDValue(Parser& parser, void* val_ptr)
+{
+	LLFastXUIParser& self = static_cast<LLFastXUIParser&>(parser);
+	LLUUID temp_id;
+	// LLUUID::set is destructive, so use temporary value
+	if (temp_id.set(self.mCurAttributeValueBegin))
+	{
+		*(LLUUID*)(val_ptr) = temp_id;
+		return true;
+	}
+	return false;
+}
+
+bool LLFastXUIParser::readSDValue(Parser& parser, void* val_ptr)
+{
+	LLFastXUIParser& self = static_cast<LLFastXUIParser&>(parser);
+	*((LLSD*)val_ptr) = LLSD(self.mCurAttributeValueBegin);
+	return true;
+}
\ No newline at end of file
diff --git a/indra/llxuixml/llxuiparser.h b/indra/llxuixml/llxuiparser.h
index 884f4f7578..4deb083e1c 100644
--- a/indra/llxuixml/llxuiparser.h
+++ b/indra/llxuixml/llxuiparser.h
@@ -120,26 +120,24 @@ public:
 	void writeXUI(LLXMLNodePtr node, const LLInitParam::BaseBlock& block, const LLInitParam::BaseBlock* diff_block = NULL);
 
 private:
-	typedef std::list<std::pair<std::string, bool> >	token_list_t;
-
 	bool readXUIImpl(LLXMLNodePtr node, const std::string& scope, LLInitParam::BaseBlock& block);
 	bool readAttributes(LLXMLNodePtr nodep, LLInitParam::BaseBlock& block);
 
 	//reader helper functions
-	bool readBoolValue(void* val_ptr);
-	bool readStringValue(void* val_ptr);
-	bool readU8Value(void* val_ptr);
-	bool readS8Value(void* val_ptr);
-	bool readU16Value(void* val_ptr);
-	bool readS16Value(void* val_ptr);
-	bool readU32Value(void* val_ptr);
-	bool readS32Value(void* val_ptr);
-	bool readF32Value(void* val_ptr);
-	bool readF64Value(void* val_ptr);
-	bool readColor4Value(void* val_ptr);
-	bool readUIColorValue(void* val_ptr);
-	bool readUUIDValue(void* val_ptr);
-	bool readSDValue(void* val_ptr);
+	static bool readBoolValue(Parser& parser, void* val_ptr);
+	static bool readStringValue(Parser& parser, void* val_ptr);
+	static bool readU8Value(Parser& parser, void* val_ptr);
+	static bool readS8Value(Parser& parser, void* val_ptr);
+	static bool readU16Value(Parser& parser, void* val_ptr);
+	static bool readS16Value(Parser& parser, void* val_ptr);
+	static bool readU32Value(Parser& parser, void* val_ptr);
+	static bool readS32Value(Parser& parser, void* val_ptr);
+	static bool readF32Value(Parser& parser, void* val_ptr);
+	static bool readF64Value(Parser& parser, void* val_ptr);
+	static bool readColor4Value(Parser& parser, void* val_ptr);
+	static bool readUIColorValue(Parser& parser, void* val_ptr);
+	static bool readUUIDValue(Parser& parser, void* val_ptr);
+	static bool readSDValue(Parser& parser, void* val_ptr);
 
 	//writer helper functions
 	bool writeBoolValue(const void* val_ptr, const name_stack_t&);
@@ -173,5 +171,61 @@ private:
 	std::string						mCurFileName;
 };
 
+class LLFastXUIParser : public LLInitParam::Parser, public LLSingleton<LLFastXUIParser>
+{
+LOG_CLASS(LLFastXUIParser);
+
+protected:
+	LLFastXUIParser();
+	virtual ~LLFastXUIParser();
+	friend class LLSingleton<LLFastXUIParser>;
+public:
+	typedef LLInitParam::Parser::name_stack_t name_stack_t;
+
+	/*virtual*/ std::string getCurrentElementName();
+	/*virtual*/ void parserWarning(const std::string& message);
+	/*virtual*/ void parserError(const std::string& message);
+
+	bool readXUI(const std::string& filename, LLInitParam::BaseBlock& block, bool silent=false);
+
+private:
+	//reader helper functions
+	static bool readBoolValue(Parser&, void* val_ptr);
+	static bool readStringValue(Parser&, void* val_ptr);
+	static bool readU8Value(Parser&, void* val_ptr);
+	static bool readS8Value(Parser&, void* val_ptr);
+	static bool readU16Value(Parser&, void* val_ptr);
+	static bool readS16Value(Parser&, void* val_ptr);
+	static bool readU32Value(Parser&, void* val_ptr);
+	static bool readS32Value(Parser&, void* val_ptr);
+	static bool readF32Value(Parser&, void* val_ptr);
+	static bool readF64Value(Parser&, void* val_ptr);
+	static bool readColor4Value(Parser&, void* val_ptr);
+	static bool readUIColorValue(Parser&, void* val_ptr);
+	static bool readUUIDValue(Parser&, void* val_ptr);
+	static bool readSDValue(Parser&, void* val_ptr);
+
+private:
+	static void startElementHandler(void *userData, const char *name, const char **atts);
+	static void endElementHandler(void *userData, const char *name);
+	static void characterDataHandler(void *userData, const char *s, int len);
+
+	void startElement(const char *name, const char **atts);
+	void endElement(const char *name);
+	void characterData(const char *s, int len);
+	bool readAttributes(const char **atts);
+
+	LLInitParam::BaseBlock*			mBlock;
+	Parser::name_stack_t			mNameStack;
+	struct XML_ParserStruct*		mParser;
+	S32								mLastWriteGeneration;
+	LLXMLNodePtr					mLastWrittenChild;
+	S32								mCurReadDepth;
+	std::string						mCurFileName;
+	const char*						mCurAttributeValueBegin;
+	std::vector<S32>				mTokenSizeStack;
+	std::vector<std::string>		mScope;
+};
+
 
 #endif //LLXUIPARSER_H
-- 
cgit v1.2.3


From d042dd9598a91e7bdfa39ce580f935bb744f8970 Mon Sep 17 00:00:00 2001
From: Monroe Linden <monroe@lindenlab.com>
Date: Thu, 5 Aug 2010 11:01:59 -0700
Subject: Yet another new Mac build of llqtwebkit.

Built from the following:

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

diff --git a/install.xml b/install.xml
index 766f272c70..2ecc165f0a 100644
--- a/install.xml
+++ b/install.xml
@@ -981,9 +981,9 @@ anguage Infrstructure (CLI) international standard</string>
           <key>darwin</key>
           <map>
             <key>md5sum</key>
-            <string>e207ddad01ae1cbe0caae7cb80824e8b</string>
+            <string>093c977ef0ef2396cc235b3620329a87</string>
             <key>url</key>
-            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-4.6-darwin-20100803.tar.bz2</uri>
+            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-4.6-darwin-20100805.tar.bz2</uri>
           </map>
           <key>linux</key>
           <map>
-- 
cgit v1.2.3


From d4668787addf870fca0dc1cbf03c756584838261 Mon Sep 17 00:00:00 2001
From: Monroe Linden <monroe@lindenlab.com>
Date: Thu, 5 Aug 2010 11:16:13 -0700
Subject: Allow targeted links in the embedded browser to open multiple media
 browser windows.

Added an optional "target" parameter" to LLWeb::loadURL and loadInternal.

Made LLViewerMediaImpl::handleMediaEvent pass the target attribute of clicked links through.

Set floater_media_browser.xml to allow multiple instances.

Added LLFloaterMediaBrowser::create() and made LLFloaterMediaBrowser assume the incoming tag is the window's target, not the URL.

Reviewed by Richard at http://codereview.lindenlab.com/2641050
---
 indra/newview/llfloatermediabrowser.cpp            | 30 +++++++++++++++++-----
 indra/newview/llfloatermediabrowser.h              |  3 ++-
 indra/newview/llviewermedia.cpp                    | 17 ++++--------
 indra/newview/llweb.cpp                            | 10 ++++----
 indra/newview/llweb.h                              |  9 ++++---
 .../skins/default/xui/en/floater_media_browser.xml |  2 +-
 6 files changed, 43 insertions(+), 28 deletions(-)

diff --git a/indra/newview/llfloatermediabrowser.cpp b/indra/newview/llfloatermediabrowser.cpp
index 5405de2f9a..c38ef0c014 100644
--- a/indra/newview/llfloatermediabrowser.cpp
+++ b/indra/newview/llfloatermediabrowser.cpp
@@ -63,6 +63,30 @@ LLFloaterMediaBrowser::LLFloaterMediaBrowser(const LLSD& key)
 
 }
 
+//static 
+void LLFloaterMediaBrowser::create(const std::string &url, const std::string& target)
+{
+	std::string tag = target;
+	
+	if(target.empty() || target == "_blank")
+	{
+		// create a unique tag for this instance
+		LLUUID id;
+		id.generate();
+		tag = id.asString();
+	}
+	
+	// TODO: Figure out whether we need to close an existing instance and/or warn the user about the number of instances they have open
+	
+	LLFloaterMediaBrowser *browser = dynamic_cast<LLFloaterMediaBrowser*> (LLFloaterReg::showInstance("media_browser", tag));
+	llassert(browser);
+	if(browser)
+	{
+		// tell the browser instance to load the specified URL
+		browser->openMedia(url);
+	}
+}
+
 void LLFloaterMediaBrowser::draw()
 {
 	getChildView("go")->setEnabled(!mAddressCombo->getValue().asString().empty());
@@ -197,12 +221,6 @@ void LLFloaterMediaBrowser::setCurrentURL(const std::string& url)
 	getChildView("reload")->setEnabled(TRUE);
 }
 
-void LLFloaterMediaBrowser::onOpen(const LLSD& media_url)
-{
-	LLFloater::onOpen(media_url);
-	openMedia(media_url.asString());
-}
-
 //static 
 void LLFloaterMediaBrowser::onEnterAddress(LLUICtrl* ctrl, void* user_data)
 {
diff --git a/indra/newview/llfloatermediabrowser.h b/indra/newview/llfloatermediabrowser.h
index c315f9e797..1645ed4613 100644
--- a/indra/newview/llfloatermediabrowser.h
+++ b/indra/newview/llfloatermediabrowser.h
@@ -47,10 +47,11 @@ class LLFloaterMediaBrowser :
 public:
 	LLFloaterMediaBrowser(const LLSD& key);
 
+	static void create(const std::string &url, const std::string& target);
+	
 	/*virtual*/ BOOL postBuild();
 	/*virtual*/ void onClose(bool app_quitting);
 	/*virtual*/ void draw();
-	/*virtual*/ void onOpen(const LLSD& key);
 
 	// inherited from LLViewerMediaObserver
 	/*virtual*/ void handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event);
diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp
index 77f7740449..7a17bfeb46 100644
--- a/indra/newview/llviewermedia.cpp
+++ b/indra/newview/llviewermedia.cpp
@@ -2826,25 +2826,18 @@ void LLViewerMediaImpl::handleMediaEvent(LLPluginClassMedia* plugin, LLPluginCla
 			LL_DEBUGS("Media") <<  "Media event:  MEDIA_EVENT_CLICK_LINK_HREF, target is \"" << plugin->getClickTarget() << "\", uri is " << plugin->getClickURL() << LL_ENDL;
 			// retrieve the event parameters
 			std::string url = plugin->getClickURL();
+			std::string target = plugin->getClickTarget();
 			U32 target_type = plugin->getClickTargetType();
-			
+
 			switch (target_type)
 			{
-			case LLPluginClassMedia::TARGET_EXTERNAL:
-				// force url to external browser
-				LLWeb::loadURLExternal(url);
-				break;
-			case LLPluginClassMedia::TARGET_BLANK:
-				// open in SL media browser or external browser based on user pref
-				LLWeb::loadURL(url);
-				break;
 			case LLPluginClassMedia::TARGET_NONE:
 				// ignore this click and let media plugin handle it
 				break;
-			case LLPluginClassMedia::TARGET_OTHER:
-				LL_WARNS("LinkTarget") << "Unsupported link target type" << LL_ENDL;
+			default:
+				// loadURL now handles distinguishing between _blank, _external, and other named targets.
+				LLWeb::loadURL(url, target);
 				break;
-			default: break;
 			}
 		};
 		break;
diff --git a/indra/newview/llweb.cpp b/indra/newview/llweb.cpp
index 5c9633c036..b61109d490 100644
--- a/indra/newview/llweb.cpp
+++ b/indra/newview/llweb.cpp
@@ -84,23 +84,23 @@ void LLWeb::initClass()
 
 
 // static
-void LLWeb::loadURL(const std::string& url)
+void LLWeb::loadURL(const std::string& url, const std::string& target)
 {
-	if (gSavedSettings.getBOOL("UseExternalBrowser"))
+	if (gSavedSettings.getBOOL("UseExternalBrowser") || (target == "_external"))
 	{
 		loadURLExternal(url);
 	}
 	else
 	{
-		loadURLInternal(url);
+		loadURLInternal(url, target);
 	}
 }
 
 
 // static
-void LLWeb::loadURLInternal(const std::string &url)
+void LLWeb::loadURLInternal(const std::string &url, const std::string& target)
 {
-	LLFloaterReg::showInstance("media_browser", url);
+	LLFloaterMediaBrowser::create(url, target);
 }
 
 
diff --git a/indra/newview/llweb.h b/indra/newview/llweb.h
index 1119b80bb4..20c7391dbf 100644
--- a/indra/newview/llweb.h
+++ b/indra/newview/llweb.h
@@ -49,11 +49,14 @@ public:
 	static void initClass();
 	
 	/// Load the given url in the user's preferred web browser
-	static void loadURL(const std::string& url);
+	static void loadURL(const std::string& url, const std::string& target);
+	static void loadURL(const std::string& url) { loadURL(url, LLStringUtil::null); }
 	/// Load the given url in the user's preferred web browser	
-	static void loadURL(const char* url) { loadURL( ll_safe_string(url) ); }
+	static void loadURL(const char* url, const std::string& target) { loadURL( ll_safe_string(url), target); }
+	static void loadURL(const char* url) { loadURL( ll_safe_string(url), LLStringUtil::null ); }
 	/// Load the given url in the Second Life internal web browser
-	static void loadURLInternal(const std::string &url);
+	static void loadURLInternal(const std::string &url, const std::string& target);
+	static void loadURLInternal(const std::string &url) { loadURLInternal(url, LLStringUtil::null); }
 	/// Load the given url in the operating system's web browser, async if we want to return immediately
 	/// before browser has spawned
 	static void loadURLExternal(const std::string& url);
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..18f3b9ab06 100644
--- a/indra/newview/skins/default/xui/en/floater_media_browser.xml
+++ b/indra/newview/skins/default/xui/en/floater_media_browser.xml
@@ -9,7 +9,7 @@
  name="floater_about"
  help_topic="floater_about"
  save_rect="true"
- single_instance="true"
+ auto_tile="true"
  title="MEDIA BROWSER"
  width="820">
     <floater.string
-- 
cgit v1.2.3


From 52936c4ffe97172a5d4926e252f2a25515c47895 Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Thu, 5 Aug 2010 13:15:22 -0700
Subject: reverted unportable use of typeinfo* as hash key

---
 indra/llxuixml/llinitparam.h | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/indra/llxuixml/llinitparam.h b/indra/llxuixml/llinitparam.h
index 1cc7d06b73..9890bacea4 100644
--- a/indra/llxuixml/llinitparam.h
+++ b/indra/llxuixml/llinitparam.h
@@ -207,9 +207,9 @@ namespace LLInitParam
 		typedef boost::function<bool (const void*, const name_stack_t&)>								parser_write_func_t;
 		typedef boost::function<void (const name_stack_t&, S32, S32, const possible_values_t*)>	parser_inspect_func_t;
 
-		typedef boost::unordered_map<const void*, parser_read_func_t>		parser_read_func_map_t;
-		typedef boost::unordered_map<const void*, parser_write_func_t>		parser_write_func_map_t;
-		typedef boost::unordered_map<const void*, parser_inspect_func_t>	parser_inspect_func_map_t;
+		typedef std::map<const std::type_info*, parser_read_func_t, CompareTypeID>		parser_read_func_map_t;
+		typedef std::map<const std::type_info*, parser_write_func_t, CompareTypeID>		parser_write_func_map_t;
+		typedef std::map<const std::type_info*, parser_inspect_func_t, CompareTypeID>	parser_inspect_func_map_t;
 
 		Parser()
 		:	mParseSilently(false),
-- 
cgit v1.2.3


From d26e380a06b343bc46010922de46e9664831e3b4 Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Thu, 5 Aug 2010 13:19:19 -0700
Subject: added newlines at end to make Linux builds happy

---
 indra/llui/lluistring.cpp      | 2 +-
 indra/llxuixml/llxuiparser.cpp | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/indra/llui/lluistring.cpp b/indra/llui/lluistring.cpp
index 385292e792..e343df0063 100644
--- a/indra/llui/lluistring.cpp
+++ b/indra/llui/lluistring.cpp
@@ -161,4 +161,4 @@ LLStringUtil::format_map_t& LLUIString::getArgs()
 		mArgs = new LLStringUtil::format_map_t;
 	}
 	return *mArgs;
-}
\ No newline at end of file
+}
diff --git a/indra/llxuixml/llxuiparser.cpp b/indra/llxuixml/llxuiparser.cpp
index 00128c978a..16571a9969 100644
--- a/indra/llxuixml/llxuiparser.cpp
+++ b/indra/llxuixml/llxuiparser.cpp
@@ -1366,4 +1366,4 @@ bool LLFastXUIParser::readSDValue(Parser& parser, void* val_ptr)
 	LLFastXUIParser& self = static_cast<LLFastXUIParser&>(parser);
 	*((LLSD*)val_ptr) = LLSD(self.mCurAttributeValueBegin);
 	return true;
-}
\ No newline at end of file
+}
-- 
cgit v1.2.3


From a974ed98d04d05d9c682e85d3b25cf591d2b58c0 Mon Sep 17 00:00:00 2001
From: Monroe Linden <monroe@lindenlab.com>
Date: Thu, 5 Aug 2010 14:18:55 -0700
Subject: Fix for a crash on startup.

Richard sent me the diff for this one, just pushing it on his behalf.
---
 indra/llxuixml/llxuiparser.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/indra/llxuixml/llxuiparser.cpp b/indra/llxuixml/llxuiparser.cpp
index 16571a9969..fe85ac41cc 100644
--- a/indra/llxuixml/llxuiparser.cpp
+++ b/indra/llxuixml/llxuiparser.cpp
@@ -1122,6 +1122,7 @@ void LLFastXUIParser::startElement(const char *name, const char **atts)
 		{
 			mNameStack.push_back(std::make_pair(child_name, newParseGeneration()));
 			num_tokens_pushed++;
+			mScope.push_back(child_name);
 		}
 		else
 		{
@@ -1154,7 +1155,7 @@ void LLFastXUIParser::startElement(const char *name, const char **atts)
 	}
 	else
 	{
-		mScope.push_back(name);
+		mScope.push_back(child_name);
 	}
 
 	mTokenSizeStack.push_back(num_tokens_pushed);
-- 
cgit v1.2.3


From 60a313a687c5380c4a6d1a451936c85db07b681a Mon Sep 17 00:00:00 2001
From: Richard Nelson <none@none>
Date: Fri, 6 Aug 2010 11:02:37 -0700
Subject: speed up population of region scripts list

---
 indra/newview/llfloaterscriptlimits.cpp | 62 ++++++++++++++++++---------------
 1 file changed, 34 insertions(+), 28 deletions(-)

diff --git a/indra/newview/llfloaterscriptlimits.cpp b/indra/newview/llfloaterscriptlimits.cpp
index e827e19f82..a77fc4710a 100644
--- a/indra/newview/llfloaterscriptlimits.cpp
+++ b/indra/newview/llfloaterscriptlimits.cpp
@@ -712,38 +712,44 @@ void LLPanelScriptLimitsRegionMemory::setRegionDetails(LLSD content)
 				}
 			}
 
-			LLSD element;
+			LLScrollListItem::Params item_params;
+			item_params.value = task_id;
 
-			element["id"] = task_id;
-			element["columns"][0]["column"] = "size";
-			element["columns"][0]["value"] = llformat("%d", size);
-			element["columns"][0]["font"] = "SANSSERIF";
-			element["columns"][1]["column"] = "urls";
-			element["columns"][1]["value"] = llformat("%d", urls);
-			element["columns"][1]["font"] = "SANSSERIF";
-			element["columns"][2]["column"] = "name";
-			element["columns"][2]["value"] = name_buf;
-			element["columns"][2]["font"] = "SANSSERIF";
-			element["columns"][3]["column"] = "owner";
-			element["columns"][3]["value"] = owner_buf;
-			element["columns"][3]["font"] = "SANSSERIF";
-			element["columns"][4]["column"] = "parcel";
-			element["columns"][4]["value"] = parcel_name;
-			element["columns"][4]["font"] = "SANSSERIF";
-			element["columns"][5]["column"] = "location";
-			if(has_locations)
-			{
-				element["columns"][5]["value"] = llformat("<%0.1f,%0.1f,%0.1f>", location_x, location_y, location_z);
-			}
-			else
-			{
-				element["columns"][5]["value"] = "";
-			}
-			element["columns"][5]["font"] = "SANSSERIF";
+			LLScrollListCell::Params cell_params;
+			cell_params.font = LLFontGL::getFontSansSerif();
 
-			list->addElement(element);
+			cell_params.column = "size";
+			cell_params.value = size;
+			item_params.columns.add(cell_params);
+
+			cell_params.column = "urls";
+			cell_params.value = urls;
+			item_params.columns.add(cell_params);
+
+			cell_params.column = "name";
+			cell_params.value = name_buf;
+			item_params.columns.add(cell_params);
+
+			cell_params.column = "owner";
+			cell_params.value = owner_buf;
+			item_params.columns.add(cell_params);
+
+			cell_params.column = "parcel";
+			cell_params.value = parcel_name;
+			item_params.columns.add(cell_params);
+
+			cell_params.column = "location";
+			cell_params.value = has_locations
+				? llformat("<%0.1f,%0.1f,%0.1f>", location_x, location_y, location_z)
+				: "";
+			item_params.columns.add(cell_params);
+
+			list->addRow(item_params);
 			
+			LLSD element;
 			element["owner_id"] = owner_id;
+
+			element["id"] = task_id;
 			element["local_id"] = local_id;
 			mObjectListItems.push_back(element);
 		}
-- 
cgit v1.2.3


From 9609b2c81c1efc43c152e379ca56191c7295973a Mon Sep 17 00:00:00 2001
From: Richard Nelson <none@none>
Date: Fri, 6 Aug 2010 11:03:15 -0700
Subject: renamed LLFastXUIParser to LLSimpleXUIParser and added support for
 parsing xml node text contents

---
 indra/llui/lluictrlfactory.cpp |   2 +-
 indra/llxuixml/llxuiparser.cpp | 108 ++++++++++++++++++++++-------------------
 indra/llxuixml/llxuiparser.h   |  23 +++++++--
 3 files changed, 78 insertions(+), 55 deletions(-)

diff --git a/indra/llui/lluictrlfactory.cpp b/indra/llui/lluictrlfactory.cpp
index 6ad104c1f4..c5bd6c7fce 100644
--- a/indra/llui/lluictrlfactory.cpp
+++ b/indra/llui/lluictrlfactory.cpp
@@ -103,7 +103,7 @@ void LLUICtrlFactory::loadWidgetTemplate(const std::string& widget_tag, LLInitPa
 	if (!full_filename.empty())
 	{
 		LLUICtrlFactory::instance().pushFileName(full_filename);
-		LLFastXUIParser::instance().readXUI(full_filename, block);
+		LLSimpleXUIParser::instance().readXUI(full_filename, block);
 		LLUICtrlFactory::instance().popFileName();
 	}
 }
diff --git a/indra/llxuixml/llxuiparser.cpp b/indra/llxuixml/llxuiparser.cpp
index 00128c978a..e010b4c125 100644
--- a/indra/llxuixml/llxuiparser.cpp
+++ b/indra/llxuixml/llxuiparser.cpp
@@ -976,7 +976,7 @@ void LLXUIParser::parserError(const std::string& message)
 
 
 //
-// LLFastXUIParser
+// LLSimpleXUIParser
 //
 
 struct ScopedFile
@@ -1008,7 +1008,7 @@ struct ScopedFile
 	LLFILE* mFile;
 };
 
-LLFastXUIParser::LLFastXUIParser()
+LLSimpleXUIParser::LLSimpleXUIParser()
 :	mLastWriteGeneration(-1),
 	mCurReadDepth(0)
 {
@@ -1028,19 +1028,19 @@ LLFastXUIParser::LLFastXUIParser()
 	registerParserFuncs<LLSD>(readSDValue, NULL);
 }
 
-LLFastXUIParser::~LLFastXUIParser()
+LLSimpleXUIParser::~LLSimpleXUIParser()
 {
 }
 
 
-bool LLFastXUIParser::readXUI(const std::string& filename, LLInitParam::BaseBlock& block, bool silent)
+bool LLSimpleXUIParser::readXUI(const std::string& filename, LLInitParam::BaseBlock& block, bool silent)
 {
 	LLFastTimer timer(FTM_PARSE_XUI);
 
 	mParser = XML_ParserCreate(NULL);
 	XML_SetUserData(mParser, this);
-	XML_SetElementHandler(					mParser,	startElementHandler, endElementHandler);
-	XML_SetCharacterDataHandler(			mParser,	characterDataHandler);
+	XML_SetElementHandler(			mParser,	startElementHandler, endElementHandler);
+	XML_SetCharacterDataHandler(	mParser,	characterDataHandler);
 
 	mBlock = &block;
 	mNameStack.clear();
@@ -1085,25 +1085,25 @@ bool LLFastXUIParser::readXUI(const std::string& filename, LLInitParam::BaseBloc
 	return true;
 }
 
-void LLFastXUIParser::startElementHandler(void *userData, const char *name, const char **atts)
+void LLSimpleXUIParser::startElementHandler(void *userData, const char *name, const char **atts)
 {
-	LLFastXUIParser* self = reinterpret_cast<LLFastXUIParser*>(userData);
+	LLSimpleXUIParser* self = reinterpret_cast<LLSimpleXUIParser*>(userData);
 	self->startElement(name, atts);
 }
 
-void LLFastXUIParser::endElementHandler(void *userData, const char *name)
+void LLSimpleXUIParser::endElementHandler(void *userData, const char *name)
 {
-	LLFastXUIParser* self = reinterpret_cast<LLFastXUIParser*>(userData);
+	LLSimpleXUIParser* self = reinterpret_cast<LLSimpleXUIParser*>(userData);
 	self->endElement(name);
 }
 
-void LLFastXUIParser::characterDataHandler(void *userData, const char *s, int len)
+void LLSimpleXUIParser::characterDataHandler(void *userData, const char *s, int len)
 {
-	LLFastXUIParser* self = reinterpret_cast<LLFastXUIParser*>(userData);
+	LLSimpleXUIParser* self = reinterpret_cast<LLSimpleXUIParser*>(userData);
 	self->characterData(s, len);
 }
 
-void LLFastXUIParser::startElement(const char *name, const char **atts)
+void LLSimpleXUIParser::startElement(const char *name, const char **atts)
 {
 	typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
 	boost::char_separator<char> sep(".");
@@ -1122,6 +1122,7 @@ void LLFastXUIParser::startElement(const char *name, const char **atts)
 		{
 			mNameStack.push_back(std::make_pair(child_name, newParseGeneration()));
 			num_tokens_pushed++;
+			mScope.push_back(child_name);
 		}
 		else
 		{
@@ -1154,14 +1155,14 @@ void LLFastXUIParser::startElement(const char *name, const char **atts)
 	}
 	else
 	{
-		mScope.push_back(name);
+		mScope.push_back(child_name);
 	}
 
 	mTokenSizeStack.push_back(num_tokens_pushed);
 	readAttributes(atts);
 }
 
-bool LLFastXUIParser::readAttributes(const char **atts)
+bool LLSimpleXUIParser::readAttributes(const char **atts)
 {
 	typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
 	boost::char_separator<char> sep(".");
@@ -1194,8 +1195,16 @@ bool LLFastXUIParser::readAttributes(const char **atts)
 }
 
 
-void LLFastXUIParser::endElement(const char *name)
+void LLSimpleXUIParser::endElement(const char *name)
 {
+	if (!mTextContents.empty())
+	{
+		mNameStack.push_back(std::make_pair(std::string("value"), newParseGeneration()));
+		mCurAttributeValueBegin = mTextContents.c_str();
+		mBlock->submitValue(mNameStack, *this);
+		mNameStack.pop_back();
+		mTextContents.clear();
+	}
 	mCurReadDepth--;
 	S32 num_tokens_to_pop = mTokenSizeStack.back();
 	mTokenSizeStack.pop_back();
@@ -1206,12 +1215,13 @@ void LLFastXUIParser::endElement(const char *name)
 	mScope.pop_back();
 }
 
-void LLFastXUIParser::characterData(const char *s, int len)
+void LLSimpleXUIParser::characterData(const char *s, int len)
 {
+	mTextContents += std::string(s, len);
 }
 
 
-/*virtual*/ std::string LLFastXUIParser::getCurrentElementName()
+/*virtual*/ std::string LLSimpleXUIParser::getCurrentElementName()
 {
 	std::string full_name;
 	for (name_stack_t::iterator it = mNameStack.begin();	
@@ -1226,7 +1236,7 @@ void LLFastXUIParser::characterData(const char *s, int len)
 
 const S32 LINE_NUMBER_HERE = 0;
 
-void LLFastXUIParser::parserWarning(const std::string& message)
+void LLSimpleXUIParser::parserWarning(const std::string& message)
 {
 #ifdef LL_WINDOWS
 	// use Visual Studo friendly formatting of output message for easy access to originating xml
@@ -1238,7 +1248,7 @@ void LLFastXUIParser::parserWarning(const std::string& message)
 #endif
 }
 
-void LLFastXUIParser::parserError(const std::string& message)
+void LLSimpleXUIParser::parserError(const std::string& message)
 {
 #ifdef LL_WINDOWS
 	llutf16string utf16str = utf8str_to_utf16str(llformat("%s(%d):\t%s", mCurFileName.c_str(), LINE_NUMBER_HERE, message.c_str()).c_str());
@@ -1249,9 +1259,9 @@ void LLFastXUIParser::parserError(const std::string& message)
 #endif
 }
 
-bool LLFastXUIParser::readBoolValue(Parser& parser, void* val_ptr)
+bool LLSimpleXUIParser::readBoolValue(Parser& parser, void* val_ptr)
 {
-	LLFastXUIParser& self = static_cast<LLFastXUIParser&>(parser);
+	LLSimpleXUIParser& self = static_cast<LLSimpleXUIParser&>(parser);
 	if (!strcmp(self.mCurAttributeValueBegin, "true")) 
 	{
 		*((bool*)val_ptr) = true;
@@ -1266,64 +1276,64 @@ bool LLFastXUIParser::readBoolValue(Parser& parser, void* val_ptr)
 	return false;
 }
 
-bool LLFastXUIParser::readStringValue(Parser& parser, void* val_ptr)
+bool LLSimpleXUIParser::readStringValue(Parser& parser, void* val_ptr)
 {
-	LLFastXUIParser& self = static_cast<LLFastXUIParser&>(parser);
+	LLSimpleXUIParser& self = static_cast<LLSimpleXUIParser&>(parser);
 	*((std::string*)val_ptr) = self.mCurAttributeValueBegin;
 	return true;
 }
 
-bool LLFastXUIParser::readU8Value(Parser& parser, void* val_ptr)
+bool LLSimpleXUIParser::readU8Value(Parser& parser, void* val_ptr)
 {
-	LLFastXUIParser& self = static_cast<LLFastXUIParser&>(parser);
+	LLSimpleXUIParser& self = static_cast<LLSimpleXUIParser&>(parser);
 	return parse(self.mCurAttributeValueBegin, uint_p[assign_a(*(U8*)val_ptr)]).full;
 }
 
-bool LLFastXUIParser::readS8Value(Parser& parser, void* val_ptr)
+bool LLSimpleXUIParser::readS8Value(Parser& parser, void* val_ptr)
 {
-	LLFastXUIParser& self = static_cast<LLFastXUIParser&>(parser);
+	LLSimpleXUIParser& self = static_cast<LLSimpleXUIParser&>(parser);
 	return parse(self.mCurAttributeValueBegin, int_p[assign_a(*(S8*)val_ptr)]).full;
 }
 
-bool LLFastXUIParser::readU16Value(Parser& parser, void* val_ptr)
+bool LLSimpleXUIParser::readU16Value(Parser& parser, void* val_ptr)
 {
-	LLFastXUIParser& self = static_cast<LLFastXUIParser&>(parser);
+	LLSimpleXUIParser& self = static_cast<LLSimpleXUIParser&>(parser);
 	return parse(self.mCurAttributeValueBegin, uint_p[assign_a(*(U16*)val_ptr)]).full;
 }
 
-bool LLFastXUIParser::readS16Value(Parser& parser, void* val_ptr)
+bool LLSimpleXUIParser::readS16Value(Parser& parser, void* val_ptr)
 {
-	LLFastXUIParser& self = static_cast<LLFastXUIParser&>(parser);
+	LLSimpleXUIParser& self = static_cast<LLSimpleXUIParser&>(parser);
 	return parse(self.mCurAttributeValueBegin, int_p[assign_a(*(S16*)val_ptr)]).full;
 }
 
-bool LLFastXUIParser::readU32Value(Parser& parser, void* val_ptr)
+bool LLSimpleXUIParser::readU32Value(Parser& parser, void* val_ptr)
 {
-	LLFastXUIParser& self = static_cast<LLFastXUIParser&>(parser);
+	LLSimpleXUIParser& self = static_cast<LLSimpleXUIParser&>(parser);
 	return parse(self.mCurAttributeValueBegin, uint_p[assign_a(*(U32*)val_ptr)]).full;
 }
 
-bool LLFastXUIParser::readS32Value(Parser& parser, void* val_ptr)
+bool LLSimpleXUIParser::readS32Value(Parser& parser, void* val_ptr)
 {
-	LLFastXUIParser& self = static_cast<LLFastXUIParser&>(parser);
+	LLSimpleXUIParser& self = static_cast<LLSimpleXUIParser&>(parser);
 	return parse(self.mCurAttributeValueBegin, int_p[assign_a(*(S32*)val_ptr)]).full;
 }
 
-bool LLFastXUIParser::readF32Value(Parser& parser, void* val_ptr)
+bool LLSimpleXUIParser::readF32Value(Parser& parser, void* val_ptr)
 {
-	LLFastXUIParser& self = static_cast<LLFastXUIParser&>(parser);
+	LLSimpleXUIParser& self = static_cast<LLSimpleXUIParser&>(parser);
 	return parse(self.mCurAttributeValueBegin, real_p[assign_a(*(F32*)val_ptr)]).full;
 }
 
-bool LLFastXUIParser::readF64Value(Parser& parser, void* val_ptr)
+bool LLSimpleXUIParser::readF64Value(Parser& parser, void* val_ptr)
 {
-	LLFastXUIParser& self = static_cast<LLFastXUIParser&>(parser);
+	LLSimpleXUIParser& self = static_cast<LLSimpleXUIParser&>(parser);
 	return parse(self.mCurAttributeValueBegin, real_p[assign_a(*(F64*)val_ptr)]).full;
 }
 	
-bool LLFastXUIParser::readColor4Value(Parser& parser, void* val_ptr)
+bool LLSimpleXUIParser::readColor4Value(Parser& parser, void* val_ptr)
 {
-	LLFastXUIParser& self = static_cast<LLFastXUIParser&>(parser);
+	LLSimpleXUIParser& self = static_cast<LLSimpleXUIParser&>(parser);
 	LLColor4 value;
 
 	if (parse(self.mCurAttributeValueBegin, real_p[assign_a(value.mV[0])] >> real_p[assign_a(value.mV[1])] >> real_p[assign_a(value.mV[2])] >> real_p[assign_a(value.mV[3])], space_p).full)
@@ -1334,9 +1344,9 @@ bool LLFastXUIParser::readColor4Value(Parser& parser, void* val_ptr)
 	return false;
 }
 
-bool LLFastXUIParser::readUIColorValue(Parser& parser, void* val_ptr)
+bool LLSimpleXUIParser::readUIColorValue(Parser& parser, void* val_ptr)
 {
-	LLFastXUIParser& self = static_cast<LLFastXUIParser&>(parser);
+	LLSimpleXUIParser& self = static_cast<LLSimpleXUIParser&>(parser);
 	LLColor4 value;
 	LLUIColor* colorp = (LLUIColor*)val_ptr;
 
@@ -1348,12 +1358,12 @@ bool LLFastXUIParser::readUIColorValue(Parser& parser, void* val_ptr)
 	return false;
 }
 
-bool LLFastXUIParser::readUUIDValue(Parser& parser, void* val_ptr)
+bool LLSimpleXUIParser::readUUIDValue(Parser& parser, void* val_ptr)
 {
-	LLFastXUIParser& self = static_cast<LLFastXUIParser&>(parser);
+	LLSimpleXUIParser& self = static_cast<LLSimpleXUIParser&>(parser);
 	LLUUID temp_id;
 	// LLUUID::set is destructive, so use temporary value
-	if (temp_id.set(self.mCurAttributeValueBegin))
+	if (temp_id.set(std::string(self.mCurAttributeValueBegin)))
 	{
 		*(LLUUID*)(val_ptr) = temp_id;
 		return true;
@@ -1361,9 +1371,9 @@ bool LLFastXUIParser::readUUIDValue(Parser& parser, void* val_ptr)
 	return false;
 }
 
-bool LLFastXUIParser::readSDValue(Parser& parser, void* val_ptr)
+bool LLSimpleXUIParser::readSDValue(Parser& parser, void* val_ptr)
 {
-	LLFastXUIParser& self = static_cast<LLFastXUIParser&>(parser);
+	LLSimpleXUIParser& self = static_cast<LLSimpleXUIParser&>(parser);
 	*((LLSD*)val_ptr) = LLSD(self.mCurAttributeValueBegin);
 	return true;
 }
\ No newline at end of file
diff --git a/indra/llxuixml/llxuiparser.h b/indra/llxuixml/llxuiparser.h
index 4deb083e1c..eb7147f49e 100644
--- a/indra/llxuixml/llxuiparser.h
+++ b/indra/llxuixml/llxuiparser.h
@@ -171,14 +171,25 @@ private:
 	std::string						mCurFileName;
 };
 
-class LLFastXUIParser : public LLInitParam::Parser, public LLSingleton<LLFastXUIParser>
+// LLSimpleXUIParser is a streamlined SAX-based XUI parser that does not support localization 
+// or parsing of a tree of independent param blocks, such as child widgets.
+// Use this for reading non-localized files that only need a single param block as a result.
+//
+// NOTE: In order to support nested block parsing, we need callbacks for start element that
+// push new blocks contexts on the mScope stack.
+// NOTE: To support localization without building a DOM, we need to enforce consistent 
+// ordering of child elements from base file to localized diff file.  Then we can use a pair
+// of coroutines to perform matching of xml nodes during parsing.  Not sure if the overhead
+// of coroutines would offset the gain from SAX parsing
+
+class LLSimpleXUIParser : public LLInitParam::Parser, public LLSingleton<LLSimpleXUIParser>
 {
-LOG_CLASS(LLFastXUIParser);
+LOG_CLASS(LLSimpleXUIParser);
 
 protected:
-	LLFastXUIParser();
-	virtual ~LLFastXUIParser();
-	friend class LLSingleton<LLFastXUIParser>;
+	LLSimpleXUIParser();
+	virtual ~LLSimpleXUIParser();
+	friend class LLSingleton<LLSimpleXUIParser>;
 public:
 	typedef LLInitParam::Parser::name_stack_t name_stack_t;
 
@@ -187,6 +198,7 @@ public:
 	/*virtual*/ void parserError(const std::string& message);
 
 	bool readXUI(const std::string& filename, LLInitParam::BaseBlock& block, bool silent=false);
+	void setBlock(LLInitParam::BaseBlock* block);
 
 private:
 	//reader helper functions
@@ -222,6 +234,7 @@ private:
 	LLXMLNodePtr					mLastWrittenChild;
 	S32								mCurReadDepth;
 	std::string						mCurFileName;
+	std::string						mTextContents;
 	const char*						mCurAttributeValueBegin;
 	std::vector<S32>				mTokenSizeStack;
 	std::vector<std::string>		mScope;
-- 
cgit v1.2.3


From 5866710be7b64999ec82c5cd5e2d47d81fdeb918 Mon Sep 17 00:00:00 2001
From: Richard Nelson <none@none>
Date: Fri, 6 Aug 2010 11:03:28 -0700
Subject: fixed crash on entering build mode

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

diff --git a/indra/llrender/llrender.cpp b/indra/llrender/llrender.cpp
index 64238b2008..eb2c54198d 100644
--- a/indra/llrender/llrender.cpp
+++ b/indra/llrender/llrender.cpp
@@ -901,7 +901,7 @@ LLVector3 LLRender::getUITranslation()
 {
 	if (mUIOffset.empty())
 	{
-		llerrs << "UI offset stack empty." << llendl;
+		return LLVector3::zero;
 	}
 	return mUIOffset.back();
 }
@@ -910,7 +910,7 @@ LLVector3 LLRender::getUIScale()
 {
 	if (mUIScale.empty())
 	{
-		llerrs << "UI scale stack empty." << llendl;
+		return LLVector3(1.f, 1.f, 1.f);
 	}
 	return mUIScale.back();
 }
-- 
cgit v1.2.3


From 7b41819377ec1c6ffc835a0a05a1acf571f46aad Mon Sep 17 00:00:00 2001
From: Richard Nelson <none@none>
Date: Fri, 6 Aug 2010 11:49:43 -0700
Subject: removed spurious parsing of empty text contents

---
 indra/llxuixml/llxuiparser.cpp | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/indra/llxuixml/llxuiparser.cpp b/indra/llxuixml/llxuiparser.cpp
index e010b4c125..b3cb71cd61 100644
--- a/indra/llxuixml/llxuiparser.cpp
+++ b/indra/llxuixml/llxuiparser.cpp
@@ -1199,11 +1199,15 @@ void LLSimpleXUIParser::endElement(const char *name)
 {
 	if (!mTextContents.empty())
 	{
-		mNameStack.push_back(std::make_pair(std::string("value"), newParseGeneration()));
-		mCurAttributeValueBegin = mTextContents.c_str();
-		mBlock->submitValue(mNameStack, *this);
-		mNameStack.pop_back();
-		mTextContents.clear();
+		LLStringUtil::trim(mTextContents);
+		if (!mTextContents.empty())
+		{
+			mNameStack.push_back(std::make_pair(std::string("value"), newParseGeneration()));
+			mCurAttributeValueBegin = mTextContents.c_str();
+			mBlock->submitValue(mNameStack, *this, false);
+			mNameStack.pop_back();
+			mTextContents.clear();
+		}
 	}
 	mCurReadDepth--;
 	S32 num_tokens_to_pop = mTokenSizeStack.back();
-- 
cgit v1.2.3


From 71a45d8f9df0686be078f15dcbfb29f4893865ff Mon Sep 17 00:00:00 2001
From: Richard Nelson <none@none>
Date: Fri, 6 Aug 2010 14:44:26 -0700
Subject: fixes for right click fast timer export

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

diff --git a/indra/newview/llfasttimerview.cpp b/indra/newview/llfasttimerview.cpp
index 8bc3b5a75f..ec772c2295 100644
--- a/indra/newview/llfasttimerview.cpp
+++ b/indra/newview/llfasttimerview.cpp
@@ -123,7 +123,7 @@ BOOL LLFastTimerView::handleRightMouseDown(S32 x, S32 y, MASK mask)
 	{
 		S32 bar_idx = MAX_VISIBLE_HISTORY - ((y - mBarRect.mBottom) * (MAX_VISIBLE_HISTORY + 2) / mBarRect.getHeight());
 		bar_idx = llclamp(bar_idx, 0, MAX_VISIBLE_HISTORY);
-		mPrintStats = bar_idx;
+		mPrintStats = LLFastTimer::NamedTimer::HISTORY_NUM - mScrollIndex - bar_idx;
 	}
 	return FALSE;
 }
@@ -953,7 +953,7 @@ void LLFastTimerView::draw()
 			{
 				legend_stat += ", ";
 			}
-			first = true;
+			first = false;
 			legend_stat += idp->getName();
 
 			if (idp->getCollapsed())
@@ -980,8 +980,7 @@ void LLFastTimerView::draw()
 			U64 ticks;
 			if (mPrintStats > 0)
 			{
-				S32 hidx = (mPrintStats - 1) - mScrollIndex;
-				ticks = idp->getHistoricalCount(hidx);
+				ticks = idp->getHistoricalCount(mPrintStats);
 			}
 			else
 			{
-- 
cgit v1.2.3


From a11a8c4027eb949c8a33951b9e8c7475e59a2eeb Mon Sep 17 00:00:00 2001
From: Richard Nelson <none@none>
Date: Fri, 6 Aug 2010 15:49:38 -0700
Subject: double click to expand all timers in LLFastTimerView

---
 indra/newview/llfasttimerview.cpp | 11 +++++++++++
 indra/newview/llfasttimerview.h   |  1 +
 2 files changed, 12 insertions(+)

diff --git a/indra/newview/llfasttimerview.cpp b/indra/newview/llfasttimerview.cpp
index ec772c2295..696ac4e6fa 100644
--- a/indra/newview/llfasttimerview.cpp
+++ b/indra/newview/llfasttimerview.cpp
@@ -140,6 +140,17 @@ LLFastTimer::NamedTimer* LLFastTimerView::getLegendID(S32 y)
 	return NULL;
 }
 
+BOOL LLFastTimerView::handleDoubleClick(S32 x, S32 y, MASK mask)
+{
+	for(timer_tree_iterator_t it = begin_timer_tree(LLFastTimer::NamedTimer::getRootNamedTimer());
+		it != end_timer_tree();
+		++it)
+	{
+		(*it)->setCollapsed(false);
+	}
+	return TRUE;
+}
+
 BOOL LLFastTimerView::handleMouseDown(S32 x, S32 y, MASK mask)
 {
 
diff --git a/indra/newview/llfasttimerview.h b/indra/newview/llfasttimerview.h
index ac06990913..6f64248f78 100644
--- a/indra/newview/llfasttimerview.h
+++ b/indra/newview/llfasttimerview.h
@@ -54,6 +54,7 @@ private:
 public:
 
 	virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
+	virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
 	virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
 	virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
 	virtual BOOL handleHover(S32 x, S32 y, MASK mask);
-- 
cgit v1.2.3


From c90a90407c30415bf9700d3b037a0b8918e261d3 Mon Sep 17 00:00:00 2001
From: callum <none@none>
Date: Mon, 9 Aug 2010 17:09:01 -0700
Subject: Added references to new Windows build of LLQtWebKit that contains
 Monroe's popup window changes.

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

diff --git a/install.xml b/install.xml
index 28f13553d7..a3f5b5c7bc 100644
--- a/install.xml
+++ b/install.xml
@@ -995,9 +995,9 @@ anguage Infrstructure (CLI) international standard</string>
           <key>windows</key>
           <map>
             <key>md5sum</key>
-            <string>df1bdd683128e060d60e435f65d8f7e8</string>
+            <string>1591dab02d6135c204a7a31bf72d8ac1</string>
             <key>url</key>
-            <uri>http://viewer-source-downloads.s3.amazonaws.com/install_pkgs/llqtwebkit-windows-qt4.6-20100617.tar.bz2</uri>
+            <uri>http://viewer-source-downloads.s3.amazonaws.com/install_pkgs/llqtwebkit-windows-qt4.6-20100809.tar.bz2</uri>
           </map>
         </map>
       </map>
-- 
cgit v1.2.3


From 879d15903608b26f6b10f499d150bb72a65fa966 Mon Sep 17 00:00:00 2001
From: Monroe Linden <monroe@lindenlab.com>
Date: Mon, 9 Aug 2010 17:40:17 -0700
Subject: Limit the number of media browser windows the viewer will open at
 once.

The limit is controlled by the debug setting MediaBrowserWindowLimit.

When opening a new window would take us over the limit, the least recently opened window will be closed first.
---
 indra/newview/app_settings/settings.xml | 11 +++++++++++
 indra/newview/llfloatermediabrowser.cpp | 26 +++++++++++++++++++++++++-
 indra/newview/llfloatermediabrowser.h   |  1 +
 3 files changed, 37 insertions(+), 1 deletion(-)

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 4c52fb015f..3326319e2d 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -6425,6 +6425,17 @@
         <key>Value</key>
             <real>1.0</real>
         </map>
+    <key>MediaBrowserWindowLimit</key>
+    <map>
+      <key>Comment</key>
+      <string>Maximum number of media brower windows that can be open at once (0 for no limit)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>5</integer>
+    </map>
   <key>MediaRollOffRate</key>
   <map>
     <key>Comment</key>
diff --git a/indra/newview/llfloatermediabrowser.cpp b/indra/newview/llfloatermediabrowser.cpp
index 268a0e0b93..2fc5bd72de 100644
--- a/indra/newview/llfloatermediabrowser.cpp
+++ b/indra/newview/llfloatermediabrowser.cpp
@@ -76,8 +76,32 @@ void LLFloaterMediaBrowser::create(const std::string &url, const std::string& ta
 		tag = id.asString();
 	}
 	
-	// TODO: Figure out whether we need to close an existing instance and/or warn the user about the number of instances they have open
+	S32 browser_window_limit = gSavedSettings.getS32("MediaBrowserWindowLimit");
 	
+	if(LLFloaterReg::findInstance("media_browser", tag) != NULL)
+	{
+		// There's already a media browser for this tag, so we won't be opening a new window.
+	}
+	else if(browser_window_limit != 0)
+	{
+		// showInstance will open a new window.  Figure out how many media browsers are already open, 
+		// and close the least recently opened one if this will put us over the limit.
+		
+		LLFloaterReg::const_instance_list_t &instances = LLFloaterReg::getFloaterList("media_browser");
+		lldebugs << "total instance count is " << instances.size() << llendl;
+		
+		for(LLFloaterReg::const_instance_list_t::const_iterator iter = instances.begin(); iter != instances.end(); iter++)
+		{
+			lldebugs << "    " << (*iter)->getKey() << llendl;
+		}
+		
+		if(instances.size() >= browser_window_limit)
+		{
+			// Destroy the least recently opened instance
+			(*instances.begin())->closeFloater();
+		}
+	}
+
 	LLFloaterMediaBrowser *browser = dynamic_cast<LLFloaterMediaBrowser*> (LLFloaterReg::showInstance("media_browser", tag));
 	llassert(browser);
 	if(browser)
diff --git a/indra/newview/llfloatermediabrowser.h b/indra/newview/llfloatermediabrowser.h
index 1645ed4613..4255d814c0 100644
--- a/indra/newview/llfloatermediabrowser.h
+++ b/indra/newview/llfloatermediabrowser.h
@@ -45,6 +45,7 @@ class LLFloaterMediaBrowser :
 	public LLViewerMediaObserver
 {
 public:
+    LOG_CLASS(LLFloaterMediaBrowser);
 	LLFloaterMediaBrowser(const LLSD& key);
 
 	static void create(const std::string &url, const std::string& target);
-- 
cgit v1.2.3


From 010ef13f560ca97807537484781acb332f48b8e2 Mon Sep 17 00:00:00 2001
From: callum <none@none>
Date: Tue, 10 Aug 2010 09:58:56 -0700
Subject: Fix for unsigned/sighed warning that breaks Windows build.

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

diff --git a/indra/newview/llfloatermediabrowser.cpp b/indra/newview/llfloatermediabrowser.cpp
index 2fc5bd72de..90147ff650 100644
--- a/indra/newview/llfloatermediabrowser.cpp
+++ b/indra/newview/llfloatermediabrowser.cpp
@@ -95,7 +95,7 @@ void LLFloaterMediaBrowser::create(const std::string &url, const std::string& ta
 			lldebugs << "    " << (*iter)->getKey() << llendl;
 		}
 		
-		if(instances.size() >= browser_window_limit)
+		if(instances.size() >= (size_t)browser_window_limit)
 		{
 			// Destroy the least recently opened instance
 			(*instances.begin())->closeFloater();
-- 
cgit v1.2.3


From 4e8c33e7252d38d00b5606e1960aa520c75e0227 Mon Sep 17 00:00:00 2001
From: Monroe Linden <monroe@lindenlab.com>
Date: Tue, 10 Aug 2010 13:04:01 -0700
Subject: Added support for targeted links opening new windows to
 llmediaplugintest.

---
 indra/test_apps/llplugintest/llmediaplugintest.cpp | 76 +++++++++++++++++++---
 indra/test_apps/llplugintest/llmediaplugintest.h   |  6 +-
 2 files changed, 72 insertions(+), 10 deletions(-)

diff --git a/indra/test_apps/llplugintest/llmediaplugintest.cpp b/indra/test_apps/llplugintest/llmediaplugintest.cpp
index 7a544debb2..166905c37c 100644
--- a/indra/test_apps/llplugintest/llmediaplugintest.cpp
+++ b/indra/test_apps/llplugintest/llmediaplugintest.cpp
@@ -959,6 +959,23 @@ mediaPanel*  LLMediaPluginTest::findMediaPanel( LLPluginClassMedia* source )
 	return result;
 }
 
+////////////////////////////////////////////////////////////////////////////////
+//
+mediaPanel* LLMediaPluginTest::findMediaPanel( const std::string &target_name )
+{
+	mediaPanel *result = NULL;
+
+	for( int panel = 0; panel < (int)mMediaPanels.size(); ++panel )
+	{
+		if ( mMediaPanels[ panel ]->mTarget == target_name )
+		{
+			result = mMediaPanels[ panel ];
+		}
+	}
+
+	return result;
+}
+
 ////////////////////////////////////////////////////////////////////////////////
 //
 void LLMediaPluginTest::navigateToNewURI( std::string uri )
@@ -1571,7 +1588,7 @@ std::string LLMediaPluginTest::pluginNameFromMimeType( std::string& mime_type )
 
 ////////////////////////////////////////////////////////////////////////////////
 //
-void LLMediaPluginTest::addMediaPanel( std::string url )
+mediaPanel* LLMediaPluginTest::addMediaPanel( std::string url )
 {
 	// Get the plugin filename using the URL
 	std::string mime_type = mimeTypeFromUrl( url );
@@ -1603,7 +1620,7 @@ void LLMediaPluginTest::addMediaPanel( std::string url )
 	if (NULL == getcwd( cwd, FILENAME_MAX - 1 ))
 	{
 		std::cerr << "Couldn't get cwd - probably too long - failing to init." << std::endl;
-		return;
+		return NULL;
 	}
 	std::string user_data_path = std::string( cwd ) + "/";
 #endif
@@ -1673,6 +1690,8 @@ void LLMediaPluginTest::addMediaPanel( std::string url )
 
 		std::cout << "Adding new media panel for " << url << "(" << media_width << "x" << media_height << ") with index " << panel->mId << " - total panels = " << mMediaPanels.size() << std::endl;
 	}
+	
+	return panel;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -1778,15 +1797,15 @@ void LLMediaPluginTest::updateMediaPanel( mediaPanel* panel )
 
 ////////////////////////////////////////////////////////////////////////////////
 //
-void LLMediaPluginTest::replaceMediaPanel( mediaPanel* panel, std::string url )
+mediaPanel* LLMediaPluginTest::replaceMediaPanel( mediaPanel* panel, std::string url )
 {
 	// no media panels so we can't change anything - have to add
 	if ( mMediaPanels.size() == 0 )
-		return;
+		return NULL;
 
 	// sanity check
 	if ( ! panel )
-		return;
+		return NULL;
 
 	int index;
 	for(index = 0; index < (int)mMediaPanels.size(); index++)
@@ -1798,7 +1817,7 @@ void LLMediaPluginTest::replaceMediaPanel( mediaPanel* panel, std::string url )
 	if(index >= (int)mMediaPanels.size())
 	{
 		// panel isn't in mMediaPanels
-		return;
+		return NULL;
 	}
 
 	std::cout << "Replacing media panel with index " << panel->mId << std::endl;
@@ -1840,7 +1859,7 @@ void LLMediaPluginTest::replaceMediaPanel( mediaPanel* panel, std::string url )
 	if (NULL == getcwd( cwd, FILENAME_MAX - 1 ))
 	{
 		std::cerr << "Couldn't get cwd - probably too long - failing to init." << std::endl;
-		return;
+		return NULL;
 	}
 	std::string user_data_path = std::string( cwd ) + "/";
 #endif
@@ -1880,6 +1899,8 @@ void LLMediaPluginTest::replaceMediaPanel( mediaPanel* panel, std::string url )
 	// load and start the URL
 	panel->mMediaSource->loadURI( url );
 	panel->mMediaSource->start();
+	
+	return panel;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -2139,7 +2160,46 @@ void LLMediaPluginTest::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent e
 		break;
 
 		case MEDIA_EVENT_CLICK_LINK_HREF:
-			std::cerr <<  "Media event:  MEDIA_EVENT_CLICK_LINK_HREF, uri is " << self->getClickURL() << std::endl;
+		{
+			std::cerr <<  "Media event:  MEDIA_EVENT_CLICK_LINK_HREF, uri is " << self->getClickURL() << ", target is " << self->getClickTarget() << std::endl;
+			// retrieve the event parameters
+			std::string url = self->getClickURL();
+			std::string target = self->getClickTarget();
+			U32 target_type = self->getClickTargetType();
+
+			switch (target_type)
+			{
+				case LLPluginClassMedia::TARGET_NONE:
+					// ignore this click
+				break;
+				
+				case LLPluginClassMedia::TARGET_EXTERNAL:
+					// this should open in an external browser, but since this is a test app we don't care.
+				break;
+				
+				case LLPluginClassMedia::TARGET_BLANK:
+					// Create a new panel with the specified URL.
+					addMediaPanel(url);
+				break;
+
+				case LLPluginClassMedia::TARGET_OTHER:
+					mediaPanel *target_panel = findMediaPanel(target);
+					if(target_panel)
+					{
+						target_panel = replaceMediaPanel(target_panel, url);
+					}
+					else
+					{
+						target_panel = addMediaPanel(url);
+					}
+
+					if(target_panel)
+					{
+						target_panel->mTarget = target;
+					}
+				break;
+			}
+		}
 		break;
 
 		case MEDIA_EVENT_CLICK_LINK_NOFOLLOW:
diff --git a/indra/test_apps/llplugintest/llmediaplugintest.h b/indra/test_apps/llplugintest/llmediaplugintest.h
index 5d08e42148..ecd6cbfc4f 100644
--- a/indra/test_apps/llplugintest/llmediaplugintest.h
+++ b/indra/test_apps/llplugintest/llmediaplugintest.h
@@ -56,6 +56,7 @@ struct mediaPanel
 		int mId;
 		std::string mStartUrl;
 		std::string mMimeType;
+		std::string mTarget;
 		LLPluginClassMedia *mMediaSource;
 		int mMediaWidth;
 		int mMediaHeight;
@@ -96,16 +97,17 @@ class LLMediaPluginTest : public LLPluginClassMediaOwner
 		void draw( int draw_type );
 		void windowPosToTexturePos( int window_x, int window_y, int& media_x, int& media_y, int& id );
 
-		void addMediaPanel( std::string url );
+		mediaPanel* addMediaPanel( std::string url );
 		void updateMediaPanel( mediaPanel* panel );
 		void remMediaPanel( mediaPanel* panel );
-		void replaceMediaPanel( mediaPanel* panel, std::string url );
+		mediaPanel* replaceMediaPanel( mediaPanel* panel, std::string url );
 		void getRandomMediaSize( int& width, int& height, std::string mime_type );
 		void navigateToNewURI( std::string uri );
         void initUrlHistory( std::string uri );
 		void selectPanelById( int id );
 		void selectPanel( mediaPanel* panel );
 		mediaPanel* findMediaPanel( LLPluginClassMedia* panel );
+		mediaPanel* findMediaPanel( const std::string &target_name );
 		void makePickTexture( int id, GLuint* texture_handle, unsigned char** texture_pixels );
 		void makeChrome();
 		void resetView();
-- 
cgit v1.2.3


From 9327ef1ea0107df45c4e2066b379206a51a36c25 Mon Sep 17 00:00:00 2001
From: Richard Nelson <none@none>
Date: Wed, 11 Aug 2010 15:00:12 -0700
Subject: cleaned up LLFirstUse and added ignorable_dialogs to project xml

---
 indra/newview/CMakeLists.txt                     |   1 +
 indra/newview/app_settings/ignorable_dialogs.xml | 176 ----------------------
 indra/newview/llfirstuse.cpp                     | 180 +----------------------
 indra/newview/llfirstuse.h                       |  28 +---
 4 files changed, 4 insertions(+), 381 deletions(-)

diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 64bcf12b06..3e0aa587b1 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -1300,6 +1300,7 @@ set(viewer_APPSETTINGS_FILES
     app_settings/cmd_line.xml
     app_settings/grass.xml
     app_settings/high_graphics.xml
+    app_settings/ignorable_dialogs.xml
     app_settings/keys.ini
     app_settings/keywords.ini
     app_settings/logcontrol.xml
diff --git a/indra/newview/app_settings/ignorable_dialogs.xml b/indra/newview/app_settings/ignorable_dialogs.xml
index d0e1f62a84..f11e6b015e 100644
--- a/indra/newview/app_settings/ignorable_dialogs.xml
+++ b/indra/newview/app_settings/ignorable_dialogs.xml
@@ -1,138 +1,6 @@
 <?xml version="1.0" ?>
 <llsd>
 <map>
-    <key>FirstAppearance</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables FirstAppearance warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-    <key>FirstAttach</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables FirstAttach warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-    <key>FirstBalanceDecrease</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables FirstBalanceDecrease warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-    <key>FirstBalanceIncrease</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables FirstBalanceIncrease warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-    <key>FirstBuild</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables FirstBuild warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-    <key>FirstDebugMenus</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables FirstDebugMenus warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-    <key>FirstFlexible</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables FirstFlexible warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-    <key>FirstGoTo</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables FirstGoTo warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-    <key>FirstInventory</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables FirstInventory warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-    <key>FirstLeftClickNoHit</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables FirstLeftClickNoHit warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-    <key>FirstMap</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables FirstMap warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-    <key>FirstMedia</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables FirstMedia warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
     <key>FirstOverrideKeys</key>
     <map>
       <key>Comment</key>
@@ -155,50 +23,6 @@
       <key>Value</key>
       <integer>1</integer>
     </map>
-    <key>FirstSculptedPrim</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables FirstSculptedPrim warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-    <key>FirstSit</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables FirstSit warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-    <key>FirstTeleport</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables FirstTeleport warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-    <key>FirstVoice</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables FirstVoice warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
     <key>AboutDirectX9</key>
     <map>
       <key>Comment</key>
diff --git a/indra/newview/llfirstuse.cpp b/indra/newview/llfirstuse.cpp
index b3fdf60b11..7f74b18fd0 100644
--- a/indra/newview/llfirstuse.cpp
+++ b/indra/newview/llfirstuse.cpp
@@ -45,7 +45,7 @@
 #include "llappviewer.h"
 #include "lltracker.h"
 
-/*
+
 // static
 std::set<std::string> LLFirstUse::sConfigVariables;
 
@@ -76,107 +76,7 @@ void LLFirstUse::resetFirstUse()
 		gWarningSettings.setBOOL(*iter, TRUE);
 	}
 }
-*/
-/*
-
-// Called whenever the viewer detects that your balance went up
-void LLFirstUse::useBalanceIncrease(S32 delta)
-{
-	if (gWarningSettings.getBOOL("FirstBalanceIncrease"))
-	{
-		gWarningSettings.setBOOL("FirstBalanceIncrease", FALSE);
-
-		LLSD args;
-		args["AMOUNT"] = llformat("%d",delta);
-		LLNotificationsUtil::add("FirstBalanceIncrease", args);
-	}
-}
-
-
-// Called whenever the viewer detects your balance went down
-void LLFirstUse::useBalanceDecrease(S32 delta)
-{
-	if (gWarningSettings.getBOOL("FirstBalanceDecrease"))
-	{
-		gWarningSettings.setBOOL("FirstBalanceDecrease", FALSE);
-
-		LLSD args;
-		args["AMOUNT"] = llformat("%d",-delta);
-		LLNotificationsUtil::add("FirstBalanceDecrease", args);
-	}
-}
-
-
-// static
-void LLFirstUse::useSit()
-{
-	// Our orientation island uses sitting to teach vehicle driving
-	// so just never show this message. JC
-	//if (gWarningSettings.getBOOL("FirstSit"))
-	//{
-	//	gWarningSettings.setBOOL("FirstSit", FALSE);
-        //
-	//	LLNotificationsUtil::add("FirstSit");
-	//}
-}
-
-// static
-void LLFirstUse::useMap()
-{
-	if (gWarningSettings.getBOOL("FirstMap"))
-	{
-		gWarningSettings.setBOOL("FirstMap", FALSE);
-
-		LLNotificationsUtil::add("FirstMap");
-	}
-}
-
-// static
-void LLFirstUse::useGoTo()
-{
-	// nothing for now JC
-}
-
-// static
-void LLFirstUse::useBuild()
-{
-	if (gWarningSettings.getBOOL("FirstBuild"))
-	{
-		gWarningSettings.setBOOL("FirstBuild", FALSE);
-
-		LLNotificationsUtil::add("FirstBuild");
-	}
-}
- 
- */
-/*
-// static
-void LLFirstUse::useLeftClickNoHit()
-{ 
-	if (gWarningSettings.getBOOL("FirstLeftClickNoHit"))
-	{
-		gWarningSettings.setBOOL("FirstLeftClickNoHit", FALSE);
-
-		LLNotificationsUtil::add("FirstLeftClickNoHit");
-	}
-}
-*/
-/*
-// static
-void LLFirstUse::useTeleport()
-{
-	if (gWarningSettings.getBOOL("FirstTeleport"))
-	{
-		LLVector3d teleportDestination = LLTracker::getTrackedPositionGlobal();
-		if(teleportDestination != LLVector3d::zero)
-		{
-			gWarningSettings.setBOOL("FirstTeleport", FALSE);
 
-		        LLNotificationsUtil::add("FirstTeleport");
-		}
-	}
-}
-*/
 // static
 void LLFirstUse::useOverrideKeys()
 {
@@ -192,36 +92,6 @@ void LLFirstUse::useOverrideKeys()
 		}
 	}
 }
-/*
-// static
-void LLFirstUse::useAttach()
-{
-	// nothing for now
-}
-
-// static
-void LLFirstUse::useAppearance()
-{
-	if (gWarningSettings.getBOOL("FirstAppearance"))
-	{
-		gWarningSettings.setBOOL("FirstAppearance", FALSE);
-
-		LLNotificationsUtil::add("FirstAppearance");
-	}
-}
-
-// static
-void LLFirstUse::useInventory()
-{
-	if (gWarningSettings.getBOOL("FirstInventory"))
-	{
-		gWarningSettings.setBOOL("FirstInventory", FALSE);
-
-		LLNotificationsUtil::add("FirstInventory");
-	}
-}
-
-*/
 
 // static
 void LLFirstUse::useSandbox()
@@ -236,51 +106,3 @@ void LLFirstUse::useSandbox()
 		LLNotificationsUtil::add("FirstSandbox", args);
 	}
 }
-/*
-// static
-void LLFirstUse::useFlexible()
-{
-	if (gWarningSettings.getBOOL("FirstFlexible"))
-	{
-		gWarningSettings.setBOOL("FirstFlexible", FALSE);
-
-		LLNotificationsUtil::add("FirstFlexible");
-	}
-}
-
-// static
-void LLFirstUse::useDebugMenus()
-{
-	if (gWarningSettings.getBOOL("FirstDebugMenus"))
-	{
-		gWarningSettings.setBOOL("FirstDebugMenus", FALSE);
-
-		LLNotificationsUtil::add("FirstDebugMenus");
-	}
-}
-
-// static
-void LLFirstUse::useSculptedPrim()
-{
-	if (gWarningSettings.getBOOL("FirstSculptedPrim"))
-	{
-		gWarningSettings.setBOOL("FirstSculptedPrim", FALSE);
-
-		LLNotificationsUtil::add("FirstSculptedPrim");
-		
-	}
-}
-
-// static 
-void LLFirstUse::useMedia()
-{
-	if (gWarningSettings.getBOOL("FirstMedia"))
-	{
-		gWarningSettings.setBOOL("FirstMedia", FALSE);
-
-		// Popup removed as a short-term fix for EXT-1643.
-		// Ultimately, the plan is to kill all First Use dialogs
-		//LLNotificationsUtil::add("FirstMedia");
-	}
-}
-*/
diff --git a/indra/newview/llfirstuse.h b/indra/newview/llfirstuse.h
index 3c7551f6cb..20ddef04d7 100644
--- a/indra/newview/llfirstuse.h
+++ b/indra/newview/llfirstuse.h
@@ -79,43 +79,19 @@ object or from inventory.
 class LLFirstUse
 {
 public:
-/*	
+
 	// Add a config variable to be reset on resetFirstUse()
 	static void addConfigVariable(const std::string& var);
 	
 	// Sets all controls back to show the dialogs.
 	static void disableFirstUse();
 	static void resetFirstUse();
-
-	// These methods are called each time the appropriate action is
-	// taken.  The functions themselves handle only showing the dialog
-	// the first time, or subsequent times if the user wishes.
-	static void useBalanceIncrease(S32 delta);
-	static void useBalanceDecrease(S32 delta);
-	static void useSit();
-	static void useMap();
-	static void useGoTo();
-	static void useBuild();
-//	static void useLeftClickNoHit();
-	static void useTeleport();
-*/ 
 	static void useOverrideKeys();
-/*	
-	static void useAttach();
-	static void useAppearance();
-	static void useInventory();
- */
+
 	static void useSandbox();
 	
-/*
-	static void useFlexible();
-	static void useDebugMenus();
-	static void useSculptedPrim();
-	static void useMedia();
-	
 protected:
 	static std::set<std::string> sConfigVariables;
-*/
 };
 
 #endif
-- 
cgit v1.2.3


From be50a053ed4ae7d0b15fc20f1c6ca0973c56ffd9 Mon Sep 17 00:00:00 2001
From: Richard Nelson <none@none>
Date: Thu, 12 Aug 2010 09:46:45 -0700
Subject: first pass at hints

---
 indra/newview/CMakeLists.txt                       |   3 ++
 indra/newview/app_settings/ignorable_dialogs.xml   |  34 +++++++++++++++++++++
 indra/newview/llbottomtray.cpp                     |   4 ++-
 indra/newview/llchatbar.cpp                        |   4 +++
 indra/newview/llfirstuse.cpp                       |  33 ++++++++++++++++++++
 indra/newview/llfirstuse.h                         |   4 +++
 indra/newview/llmoveview.cpp                       |   7 +++++
 indra/newview/llnearbychathandler.cpp              |   6 +++-
 indra/newview/llnotificationhandler.h              |  14 +++++++++
 indra/newview/llnotificationmanager.cpp            |   2 ++
 indra/newview/llsidetray.cpp                       |   2 ++
 indra/newview/llviewermessage.cpp                  |   3 ++
 indra/newview/llviewerwindow.cpp                   |   1 +
 indra/newview/llviewerwindow.h                     |   2 ++
 indra/newview/skins/default/textures/textures.xml  |   8 ++++-
 .../default/textures/windows/hint_arrow_down.png   | Bin 0 -> 3239 bytes
 .../default/textures/windows/hint_arrow_left.png   | Bin 0 -> 3163 bytes
 .../default/textures/windows/hint_arrow_right.png  | Bin 0 -> 3155 bytes
 .../default/textures/windows/hint_arrow_up.png     | Bin 0 -> 3248 bytes
 .../default/textures/windows/hint_background.png   | Bin 0 -> 3930 bytes
 indra/newview/skins/default/xui/en/main_view.xml   |   7 +++++
 .../newview/skins/default/xui/en/notifications.xml |  24 +++++++++++++++
 22 files changed, 155 insertions(+), 3 deletions(-)
 create mode 100644 indra/newview/skins/default/textures/windows/hint_arrow_down.png
 create mode 100644 indra/newview/skins/default/textures/windows/hint_arrow_left.png
 create mode 100644 indra/newview/skins/default/textures/windows/hint_arrow_right.png
 create mode 100644 indra/newview/skins/default/textures/windows/hint_arrow_up.png
 create mode 100644 indra/newview/skins/default/textures/windows/hint_background.png

diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 3e0aa587b1..7d70b2a49b 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -230,6 +230,7 @@ set(viewer_SOURCE_FILES
     llgroupiconctrl.cpp
     llgrouplist.cpp
     llgroupmgr.cpp
+    llhints.cpp
     llhomelocationresponder.cpp
     llhudeffect.cpp
     llhudeffectbeam.cpp
@@ -300,6 +301,7 @@ set(viewer_SOURCE_FILES
     llnotificationalerthandler.cpp
     llnotificationgrouphandler.cpp
     llnotificationhandlerutil.cpp
+    llnotificationhinthandler.cpp
     llnotificationmanager.cpp
     llnotificationofferhandler.cpp
     llnotificationscripthandler.cpp
@@ -754,6 +756,7 @@ set(viewer_HEADER_FILES
     llgroupiconctrl.h
     llgrouplist.h
     llgroupmgr.h
+    llhints.h
     llhomelocationresponder.h
     llhudeffect.h
     llhudeffectbeam.h
diff --git a/indra/newview/app_settings/ignorable_dialogs.xml b/indra/newview/app_settings/ignorable_dialogs.xml
index f11e6b015e..a0b9e33aa9 100644
--- a/indra/newview/app_settings/ignorable_dialogs.xml
+++ b/indra/newview/app_settings/ignorable_dialogs.xml
@@ -1,6 +1,28 @@
 <?xml version="1.0" ?>
 <llsd>
 <map>
+    <key>FirstInventoryOffer</key>
+    <map>
+      <key>Comment</key>
+      <string>Shows hint when a person or object offers you an inventory item</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+    <key>FirstOtherChatBeforeUser</key>
+    <map>
+      <key>Comment</key>
+      <string>Shows hint when someone else chats first</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>FirstOverrideKeys</key>
     <map>
       <key>Comment</key>
@@ -23,6 +45,18 @@
       <key>Value</key>
       <integer>1</integer>
     </map>
+
+    <key>FirstSit</key>
+    <map>
+      <key>Comment</key>
+      <string>Shows hint when someone sits 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>AboutDirectX9</key>
     <map>
       <key>Comment</key>
diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp
index 0e5e8d0fe7..7d4c0be3fa 100644
--- a/indra/newview/llbottomtray.cpp
+++ b/indra/newview/llbottomtray.cpp
@@ -47,6 +47,7 @@
 #include "llagentcamera.h"
 #include "llchiclet.h"
 #include "llfloatercamera.h"
+#include "llhints.h"
 #include "llimfloater.h" // for LLIMFloater
 #include "llnearbychatbar.h"
 #include "llspeakbutton.h"
@@ -474,8 +475,9 @@ BOOL LLBottomTray::postBuild()
 	mBottomTrayContextMenu =  LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_bottomtray.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
 	gMenuHolder->addChild(mBottomTrayContextMenu);
 
-
 	mNearbyChatBar = getChild<LLNearbyChatBar>("chat_bar");
+	LLHints::registerHintTarget("nearby_chat_bar", mNearbyChatBar->LLView::getHandle());
+
 	mToolbarStack = getChild<LLLayoutStack>("toolbar_stack");
 	mMovementButton = getChild<LLButton>("movement_btn");
 	mCamButton = getChild<LLButton>("camera_btn");
diff --git a/indra/newview/llchatbar.cpp b/indra/newview/llchatbar.cpp
index 73fbe78298..96001a07a0 100644
--- a/indra/newview/llchatbar.cpp
+++ b/indra/newview/llchatbar.cpp
@@ -571,6 +571,10 @@ void LLChatBar::sendChatFromViewer(const std::string &utf8text, EChatType type,
 
 void LLChatBar::sendChatFromViewer(const LLWString &wtext, EChatType type, BOOL animate)
 {
+	// as soon as we say something, we no longer care about teaching the user
+	// how to chat
+	gWarningSettings.setBOOL("FirstOtherChatBeforeUser", FALSE);
+	
 	// Look for "/20 foo" channel chats.
 	S32 channel = 0;
 	LLWString out_text = stripChannelNumber(wtext, &channel);
diff --git a/indra/newview/llfirstuse.cpp b/indra/newview/llfirstuse.cpp
index 7f74b18fd0..8906525676 100644
--- a/indra/newview/llfirstuse.cpp
+++ b/indra/newview/llfirstuse.cpp
@@ -93,6 +93,39 @@ void LLFirstUse::useOverrideKeys()
 	}
 }
 
+// static
+void LLFirstUse::otherAvatarChat()
+{
+	if (gWarningSettings.getBOOL("FirstOtherChatBeforeUser"))
+	{
+		gWarningSettings.setBOOL("FirstOtherChatBeforeUser", FALSE);
+
+		LLNotificationsUtil::add("HintChat", LLSD(), LLSD().with("target", "nearby_chat_bar").with("direction", "top"));
+	}
+}
+
+// static
+void LLFirstUse::sit()
+{
+	if (gWarningSettings.getBOOL("FirstSit"))
+	{
+		gWarningSettings.setBOOL("FirstSit", FALSE);
+
+		LLNotificationsUtil::add("HintSit", LLSD(), LLSD().with("target", "stand_btn").with("direction", "top"));
+	}
+}
+
+// static
+void LLFirstUse::inventoryOffer()
+{
+	if (gWarningSettings.getBOOL("FirstInventoryOffer"))
+	{
+		gWarningSettings.setBOOL("FirstInventoryOffer", FALSE);
+
+		LLNotificationsUtil::add("HintInventory", LLSD(), LLSD().with("target", "inventory_btn").with("direction", "left"));
+	}
+}
+
 // static
 void LLFirstUse::useSandbox()
 {
diff --git a/indra/newview/llfirstuse.h b/indra/newview/llfirstuse.h
index 20ddef04d7..ca7290fe17 100644
--- a/indra/newview/llfirstuse.h
+++ b/indra/newview/llfirstuse.h
@@ -86,7 +86,11 @@ public:
 	// Sets all controls back to show the dialogs.
 	static void disableFirstUse();
 	static void resetFirstUse();
+
 	static void useOverrideKeys();
+	static void otherAvatarChat();
+	static void sit();
+	static void inventoryOffer();
 
 	static void useSandbox();
 	
diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp
index fc41137686..19615def93 100644
--- a/indra/newview/llmoveview.cpp
+++ b/indra/newview/llmoveview.cpp
@@ -45,7 +45,9 @@
 #include "llvoavatarself.h" // to check gAgentAvatarp->isSitting()
 #include "llbottomtray.h"
 #include "llbutton.h"
+#include "llfirstuse.h"
 #include "llfloaterreg.h"
+#include "llhints.h"
 #include "lljoystickbutton.h"
 #include "lluictrlfactory.h"
 #include "llviewerwindow.h"
@@ -566,6 +568,10 @@ void LLPanelStandStopFlying::setStandStopFlyingMode(EStandStopFlyingMode mode)
 {
 	LLPanelStandStopFlying* panel = getInstance();
 
+	if (mode == SSFM_STAND)
+	{
+		LLFirstUse::sit();
+	}
 	panel->mStandButton->setVisible(SSFM_STAND == mode);
 	panel->mStopFlyingButton->setVisible(SSFM_STOP_FLYING == mode);
 
@@ -596,6 +602,7 @@ BOOL LLPanelStandStopFlying::postBuild()
 	mStandButton->setCommitCallback(boost::bind(&LLPanelStandStopFlying::onStandButtonClick, this));
 	mStandButton->setCommitCallback(boost::bind(&LLFloaterMove::enableInstance, TRUE));
 	mStandButton->setVisible(FALSE);
+	LLHints::registerHintTarget("stand_btn", mStandButton->getHandle());
 	
 	mStopFlyingButton = getChild<LLButton>("stop_fly_btn");
 	//mStopFlyingButton->setCommitCallback(boost::bind(&LLFloaterMove::setFlyingMode, FALSE));
diff --git a/indra/newview/llnearbychathandler.cpp b/indra/newview/llnearbychathandler.cpp
index 1fadb126e4..31a59146d6 100644
--- a/indra/newview/llnearbychathandler.cpp
+++ b/indra/newview/llnearbychathandler.cpp
@@ -37,6 +37,7 @@
 
 #include "llbottomtray.h"
 #include "llchatitemscontainerctrl.h"
+#include "llfirstuse.h"
 #include "llfloaterscriptdebug.h"
 #include "llnearbychat.h"
 #include "llrecentpeople.h"
@@ -347,7 +348,10 @@ void LLNearbyChatHandler::processChat(const LLChat& chat_msg, const LLSD &args)
 	if(chat_msg.mMuted == TRUE)
 		return;
 	if(chat_msg.mSourceType == CHAT_SOURCE_AGENT && chat_msg.mFromID.notNull())
-         LLRecentPeople::instance().add(chat_msg.mFromID);
+	{
+        LLRecentPeople::instance().add(chat_msg.mFromID);
+	 	LLFirstUse::otherAvatarChat();
+	}
 
 	if(chat_msg.mText.empty())
 		return;//don't process empty messages
diff --git a/indra/newview/llnotificationhandler.h b/indra/newview/llnotificationhandler.h
index 99a1fedcf3..7b8f530178 100644
--- a/indra/newview/llnotificationhandler.h
+++ b/indra/newview/llnotificationhandler.h
@@ -269,6 +269,20 @@ protected:
 	void onRejectToast(LLUUID& id);
 };
 
+/**
+ * Handler for UI hints.
+ */
+class LLHintHandler : public LLSingleton<LLHintHandler>
+{
+public:
+	LLHintHandler();
+	virtual ~LLHintHandler();
+
+	// base interface functions
+	virtual bool processNotification(const LLSD& notify);
+};
+
+
 class LLHandlerUtil
 {
 public:
diff --git a/indra/newview/llnotificationmanager.cpp b/indra/newview/llnotificationmanager.cpp
index 4401bb953f..86496c9d02 100644
--- a/indra/newview/llnotificationmanager.cpp
+++ b/indra/newview/llnotificationmanager.cpp
@@ -66,6 +66,7 @@ void LLNotificationManager::init()
 	LLNotificationChannel::buildChannel("AlertModal", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "alertmodal"));
 	LLNotificationChannel::buildChannel("IM Notifications", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "notifytoast"));
 	LLNotificationChannel::buildChannel("Offer", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "offer"));
+	LLNotificationChannel::buildChannel("Hints", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "hint"));
   
 	LLNotifications::instance().getChannel("Notifications")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1));
 	LLNotifications::instance().getChannel("NotificationTips")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1));
@@ -74,6 +75,7 @@ void LLNotificationManager::init()
 	LLNotifications::instance().getChannel("AlertModal")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1));
 	LLNotifications::instance().getChannel("IM Notifications")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1));
 	LLNotifications::instance().getChannel("Offer")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1));
+	LLNotifications::instance().getChannel("Hints")->connectChanged(boost::bind(&LLHintHandler::processNotification, LLHintHandler::getInstance(), _1));
 
 	mNotifyHandlers["notify"] = boost::shared_ptr<LLEventHandler>(new LLScriptHandler(NT_NOTIFY, LLSD()));
 	mNotifyHandlers["notifytip"] =  boost::shared_ptr<LLEventHandler>(new LLTipHandler(NT_NOTIFY, LLSD()));
diff --git a/indra/newview/llsidetray.cpp b/indra/newview/llsidetray.cpp
index 7104f3934d..066b694618 100644
--- a/indra/newview/llsidetray.cpp
+++ b/indra/newview/llsidetray.cpp
@@ -37,6 +37,7 @@
 #include "llagentcamera.h"
 #include "llappviewer.h"
 #include "llbottomtray.h"
+#include "llhints.h"
 #include "llsidetray.h"
 #include "llviewerwindow.h"
 #include "llaccordionctrl.h"
@@ -430,6 +431,7 @@ void	LLSideTray::createButtons	()
 			mTabButtons[name] = button;
 		}
 	}
+	LLHints::registerHintTarget("inventory_btn", mTabButtons["sidebar_inventory"]->getHandle());
 }
 
 void		LLSideTray::processTriState ()
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index a04c919310..9bb734a3d3 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -56,6 +56,7 @@
 #include "llagentcamera.h"
 #include "llcallingcard.h"
 #include "llbuycurrencyhtml.h"
+#include "llfirstuse.h"
 #include "llfloaterbuyland.h"
 #include "llfloaterland.h"
 #include "llfloaterregioninfo.h"
@@ -1763,6 +1764,8 @@ void inventory_offer_handler(LLOfferInfo* info)
 		return;
 	}
 
+	LLFirstUse::inventoryOffer();
+
 	// Avoid the Accept/Discard dialog if the user so desires. JC
 	if (gSavedSettings.getBOOL("AutoAcceptNewInventory")
 		&& (info->mType == LLAssetType::AT_NOTECARD
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index b36af7d95b..566f4b45ba 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -1529,6 +1529,7 @@ void LLViewerWindow::initBase()
 	mNonSideTrayView = main_view->getChildView("non_side_tray_view")->getHandle();
 	mFloaterViewHolder = main_view->getChildView("floater_view_holder")->getHandle();
 	mPopupView = main_view->getChild<LLPopupView>("popup_holder");
+	mHintHolder = main_view->getChild<LLView>("hint_holder")->getHandle();
 
 	// Constrain floaters to inside the menu and status bar regions.
 	gFloaterView = main_view->getChild<LLFloaterView>("Floater View");
diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h
index 1e0200a075..cd1ee8a5fd 100644
--- a/indra/newview/llviewerwindow.h
+++ b/indra/newview/llviewerwindow.h
@@ -294,6 +294,7 @@ public:
 	void			updateWorldViewRect(bool use_full_window=false);
 	LLView*			getNonSideTrayView() { return mNonSideTrayView.get(); }
 	LLView*			getFloaterViewHolder() { return mFloaterViewHolder.get(); }
+	LLView*			getHintHolder() { return mHintHolder.get(); }
 	BOOL			handleKey(KEY key, MASK mask);
 	void			handleScrollWheel	(S32 clicks);
 
@@ -453,6 +454,7 @@ protected:
 	LLHandle<LLView> mWorldViewPlaceholder;	// widget that spans the portion of screen dedicated to rendering the 3d world
 	LLHandle<LLView> mNonSideTrayView;		// parent of world view + bottom bar, etc...everything but the side tray
 	LLHandle<LLView> mFloaterViewHolder;	// container for floater_view
+	LLHandle<LLView> mHintHolder;			// container for hints
 	LLPopupView*	mPopupView;			// container for transient popups
 	
 	class LLDebugText* mDebugText; // Internal class for debug text
diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index 082b37d80b..9fbbfb1d2b 100644
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -645,5 +645,11 @@ with the same filename but different name
   <texture name="buy_off" file_name="widgets/buy_off.png" preload="true" scale.left="2" scale.top="15" scale.right="67" scale.bottom="4"/>
   <texture name="buy_over" file_name="widgets/buy_over.png" preload="true" scale.left="2" scale.top="15" scale.right="67" scale.bottom="4"/>
   <texture name="buy_press" file_name="widgets/buy_press.png" preload="true" scale.left="2" scale.top="15" scale.right="67" scale.bottom="4"/>
-  
+
+  <texture name="hint_background" file_name="windows/hint_background.png" preload="false" scale.left="8" scale.top="70" scale.right="195" scale.bottom="11"/>
+  <texture name="hint_arrow_left" file_name="windows/hint_arrow_left.png" preload="false"/>
+  <texture name="hint_arrow_right" file_name="windows/hint_arrow_right.png" preload="false"/>
+  <texture name="hint_arrow_up" file_name="windows/hint_arrow_up.png" preload="false"/>
+  <texture name="hint_arrow_down" file_name="windows/hint_arrow_down.png" preload="false"/>
+
 </textures>
diff --git a/indra/newview/skins/default/textures/windows/hint_arrow_down.png b/indra/newview/skins/default/textures/windows/hint_arrow_down.png
new file mode 100644
index 0000000000..11ab3c2d0c
Binary files /dev/null and b/indra/newview/skins/default/textures/windows/hint_arrow_down.png differ
diff --git a/indra/newview/skins/default/textures/windows/hint_arrow_left.png b/indra/newview/skins/default/textures/windows/hint_arrow_left.png
new file mode 100644
index 0000000000..e5c597a550
Binary files /dev/null and b/indra/newview/skins/default/textures/windows/hint_arrow_left.png differ
diff --git a/indra/newview/skins/default/textures/windows/hint_arrow_right.png b/indra/newview/skins/default/textures/windows/hint_arrow_right.png
new file mode 100644
index 0000000000..3f89187e13
Binary files /dev/null and b/indra/newview/skins/default/textures/windows/hint_arrow_right.png differ
diff --git a/indra/newview/skins/default/textures/windows/hint_arrow_up.png b/indra/newview/skins/default/textures/windows/hint_arrow_up.png
new file mode 100644
index 0000000000..1050097efb
Binary files /dev/null and b/indra/newview/skins/default/textures/windows/hint_arrow_up.png differ
diff --git a/indra/newview/skins/default/textures/windows/hint_background.png b/indra/newview/skins/default/textures/windows/hint_background.png
new file mode 100644
index 0000000000..0839a95205
Binary files /dev/null and b/indra/newview/skins/default/textures/windows/hint_background.png differ
diff --git a/indra/newview/skins/default/xui/en/main_view.xml b/indra/newview/skins/default/xui/en/main_view.xml
index a1ca910cbb..0bf5717de8 100644
--- a/indra/newview/skins/default/xui/en/main_view.xml
+++ b/indra/newview/skins/default/xui/en/main_view.xml
@@ -208,6 +208,13 @@
           bottom="-1"
           height="11" />
   </panel>
+  <view top="0"
+        left="0"
+        width="1024"
+        height="768"
+        name="hint_holder"
+        mouse_opaque="false"
+        follows="all"/>
   <menu_holder top="0"
                follows="all"
                height="768"
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 95ee374e39..962e3ac582 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -6376,6 +6376,30 @@ Mute everyone?
     <unique/>
   </notification>
 
+  <notification
+  name="HintChat"
+  label="Hint for Chatting"
+  type="hint">
+    Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam
+    <!--<unique/>-->
+  </notification>
+
+  <notification
+  name="HintSit"
+  label="Hint for Sitting"
+  type="hint">
+    Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam
+    <!--<unique/>-->
+  </notification>
+
+  <notification
+  name="HintInventory"
+  label="Hint for Inventory"
+  type="hint">
+    Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam
+    <!--<unique/>-->
+  </notification>
+
   <global name="UnsupportedCPU">
 - Your CPU speed does not meet the minimum requirements.
   </global>
-- 
cgit v1.2.3


From e16c1f6fdd300f284f0b39b76b4e82f7366b5cdb Mon Sep 17 00:00:00 2001
From: Richard Nelson <none@none>
Date: Thu, 12 Aug 2010 10:08:39 -0700
Subject: forgot some files

---
 indra/newview/llhints.cpp | 250 ++++++++++++++++++++++++++++++++++++++++++++++
 indra/newview/llhints.h   |  51 ++++++++++
 2 files changed, 301 insertions(+)
 create mode 100644 indra/newview/llhints.cpp
 create mode 100644 indra/newview/llhints.h

diff --git a/indra/newview/llhints.cpp b/indra/newview/llhints.cpp
new file mode 100644
index 0000000000..a8c3183301
--- /dev/null
+++ b/indra/newview/llhints.cpp
@@ -0,0 +1,250 @@
+/**
+ * @file llhints.cpp
+ * @brief Hint popups for displaying context sensitive help in a UI overlay
+ *
+ * $LicenseInfo:firstyear=2000&license=viewergpl$
+ *
+ * Copyright (c) 2000-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" // must be first include
+
+#include "llhints.h"
+
+#include "llbutton.h"
+#include "lltextbox.h"
+#include "llviewerwindow.h"
+#include "llsdparam.h"
+
+class LLHintPopup : public LLPanel
+{
+public:
+
+	typedef enum e_popup_direction
+	{
+		LEFT,
+		TOP,
+		RIGHT,
+		BOTTOM
+	} EPopupDirection;
+
+	struct PopupDirections : public LLInitParam::TypeValuesHelper<LLHintPopup::EPopupDirection, PopupDirections>
+	{
+		static void declareValues()
+		{
+			declare("left", LLHintPopup::LEFT);
+			declare("right", LLHintPopup::RIGHT);
+			declare("top", LLHintPopup::TOP);
+			declare("bottom", LLHintPopup::BOTTOM);
+		}
+	};
+
+	struct Params : public LLInitParam::Block<Params, LLPanel::Params>
+	{
+		Mandatory<LLNotificationPtr>	notification;
+		Optional<std::string>			target;
+		Optional<EPopupDirection, PopupDirections>	direction;
+		Optional<S32>					distance;
+		Optional<LLUIImage*>			left_arrow,
+										up_arrow,
+										right_arrow,
+										down_arrow;									
+
+		Params()
+		:	direction("direction", TOP),
+			distance("distance", 24),
+			target("target"),
+			left_arrow("left_arrow", LLUI::getUIImage("hint_arrow_left")),
+			up_arrow("up_arrow", LLUI::getUIImage("hint_arrow_up")),
+			right_arrow("right_arrow", LLUI::getUIImage("hint_arrow_right")),
+			down_arrow("down_arrow", LLUI::getUIImage("hint_arrow_down"))
+		{}
+	};
+
+	LLHintPopup(const Params&);
+
+	void setHintTarget(LLHandle<LLView> target) { mTarget = target; }
+	/*virtual*/ BOOL postBuild();
+
+	void onClickClose() { hide(); }
+	void draw();
+	void hide() { die(); }
+
+private:
+	LLNotificationPtr	mNotification;
+	LLHandle<LLView>	mTarget;
+	EPopupDirection		mDirection;
+	S32					mDistance;
+	LLUIImagePtr		mArrowLeft,
+						mArrowUp,
+						mArrowRight,
+						mArrowDown;
+};
+
+
+
+
+LLHintPopup::LLHintPopup(const LLHintPopup::Params& p)
+:	mNotification(p.notification),
+	mDirection(p.direction),
+	mDistance(p.distance),
+	mTarget(LLHints::getHintTarget(p.target)),
+	mArrowLeft(p.left_arrow),
+	mArrowUp(p.up_arrow),
+	mArrowRight(p.right_arrow),
+	mArrowDown(p.down_arrow),
+	LLPanel(p)
+{
+	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_hint.xml");
+}
+
+BOOL LLHintPopup::postBuild()
+{
+	LLTextBox& hint_text = getChildRef<LLTextBox>("hint_text");
+	hint_text.setText(mNotification->getMessage());
+	
+	getChild<LLButton>("close")->setClickedCallback(boost::bind(&LLHintPopup::onClickClose, this));
+	getChild<LLTextBox>("hint_title")->setText(mNotification->getLabel());
+
+	LLRect text_bounds = hint_text.getTextBoundingRect();
+	S32 delta_height = text_bounds.getHeight() - hint_text.getRect().getHeight();
+	reshape(getRect().getWidth(), getRect().getHeight() + delta_height);
+	return TRUE;
+}
+
+void LLHintPopup::draw()
+{
+	LLView* targetp = mTarget.get();
+	if (!targetp || !targetp->isInVisibleChain()) 
+	{
+		hide();
+	}
+	else
+	{
+		LLRect target_rect;
+		targetp->localRectToOtherView(targetp->getLocalRect(), &target_rect, getParent());
+
+		LLRect my_local_rect = getLocalRect();
+		LLRect my_rect = getRect();
+		LLRect arrow_rect;
+		LLUIImagePtr arrow_imagep;
+
+		const S32 OVERLAP = 5;
+
+		switch(mDirection)
+		{
+		case LEFT:
+			my_rect.setCenterAndSize(	target_rect.mLeft - (my_rect.getWidth() / 2 + mDistance), 
+										target_rect.getCenterY(), 
+										my_rect.getWidth(), 
+										my_rect.getHeight());
+			arrow_rect.setCenterAndSize(my_local_rect.mRight + mArrowRight->getWidth() / 2 - OVERLAP,
+										my_local_rect.getCenterY(),
+										mArrowRight->getWidth(), 
+										mArrowRight->getHeight());
+			arrow_imagep = mArrowRight;
+			break;
+		case TOP:
+			my_rect.setCenterAndSize(	target_rect.getCenterX(), 
+										target_rect.mTop + (my_rect.getHeight() / 2 + mDistance), 
+										my_rect.getWidth(), 
+										my_rect.getHeight());
+			arrow_rect.setCenterAndSize(my_local_rect.getCenterX(),
+										my_local_rect.mBottom - mArrowDown->getHeight() / 2 + OVERLAP,
+										mArrowDown->getWidth(), 
+										mArrowDown->getHeight());
+			arrow_imagep = mArrowDown;
+			break;
+		case RIGHT:
+			my_rect.setCenterAndSize(	target_rect.getCenterX(), 
+										target_rect.mTop - (my_rect.getHeight() / 2 + mDistance), 
+										my_rect.getWidth(), 
+										my_rect.getHeight());
+			arrow_rect.setCenterAndSize(my_local_rect.mLeft - mArrowLeft->getWidth() / 2 + OVERLAP,
+										my_local_rect.getCenterY(),
+										mArrowLeft->getWidth(), 
+										mArrowLeft->getHeight());
+			arrow_imagep = mArrowLeft;
+			break;
+		case BOTTOM:
+			my_rect.setCenterAndSize(	target_rect.mLeft + (my_rect.getWidth() / 2 + mDistance), 
+										target_rect.getCenterY(), 
+										my_rect.getWidth(), 
+										my_rect.getHeight());
+			arrow_rect.setCenterAndSize(my_local_rect.getCenterX(),
+										my_local_rect.mTop + mArrowUp->getHeight() / 2 - OVERLAP,
+										mArrowUp->getWidth(), 
+										mArrowUp->getHeight());
+			arrow_imagep = mArrowUp;
+			break;
+		}
+		setShape(my_rect);
+		LLPanel::draw();
+
+		arrow_imagep->draw(arrow_rect);
+	}
+}
+
+
+LLRegistry<std::string, LLHandle<LLView> > LLHints::sTargetRegistry;
+
+//static
+void LLHints::show(LLNotificationPtr hint)
+{
+	LLHintPopup::Params p;
+	LLParamSDParser::instance().readSD(hint->getPayload(), p);
+
+	p.notification = hint;
+
+	LLHintPopup* popup = new LLHintPopup(p);
+	LLView* hint_holder = gViewerWindow->getHintHolder();
+	if (hint_holder)
+	{
+		hint_holder->addChild(popup);
+		popup->centerWithin(hint_holder->getLocalRect());
+	}
+}
+
+//static
+void LLHints::registerHintTarget(const std::string& name, LLHandle<LLView> target)
+{
+	sTargetRegistry.defaultRegistrar().add(name, target);
+}
+
+//static 
+LLHandle<LLView> LLHints::getHintTarget(const std::string& name)
+{
+	LLHandle<LLView>* handlep = sTargetRegistry.getValue(name);
+	if (handlep) 
+	{
+		return *handlep;
+	}
+	else
+	{
+		return LLHandle<LLView>();
+	}
+}
diff --git a/indra/newview/llhints.h b/indra/newview/llhints.h
new file mode 100644
index 0000000000..b5255db95b
--- /dev/null
+++ b/indra/newview/llhints.h
@@ -0,0 +1,51 @@
+/**
+ * @file llhints.h
+ * @brief Hint popups for displaying context sensitive help in a UI overlay
+ *
+ * $LicenseInfo:firstyear=2000&license=viewergpl$
+ *
+ * Copyright (c) 2000-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_LLHINTS_H
+#define LL_LLHINTS_H
+
+#include "llpanel.h"
+#include "llnotifications.h"
+
+
+class LLHints
+{
+public:
+	static void show(LLNotificationPtr hint);
+	static void registerHintTarget(const std::string& name, LLHandle<LLView> target);
+	static LLHandle<LLView> getHintTarget(const std::string& name);
+private:
+	static LLRegistry<std::string, LLHandle<LLView> > sTargetRegistry;
+};
+
+
+#endif
\ No newline at end of file
-- 
cgit v1.2.3


From 73f1f43b8bd9ae1c3bc7f96d652c30d772da113b Mon Sep 17 00:00:00 2001
From: Richard Nelson <none@none>
Date: Thu, 12 Aug 2010 10:11:30 -0700
Subject: forgot another file

---
 indra/newview/llnotificationhinthandler.cpp | 58 +++++++++++++++++++++++++++++
 1 file changed, 58 insertions(+)
 create mode 100644 indra/newview/llnotificationhinthandler.cpp

diff --git a/indra/newview/llnotificationhinthandler.cpp b/indra/newview/llnotificationhinthandler.cpp
new file mode 100644
index 0000000000..f5c0330b2a
--- /dev/null
+++ b/indra/newview/llnotificationhinthandler.cpp
@@ -0,0 +1,58 @@
+/**
+ * @file llnotificationhinthandler.cpp
+ * @brief Notification Handler Class for UI Hints
+ *
+ * $LicenseInfo:firstyear=2000&license=viewergpl$
+ *
+ * Copyright (c) 2000-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" // must be first include
+
+#include "llnotificationhandler.h"
+#include "llhints.h"
+#include "llnotifications.h"
+
+using namespace LLNotificationsUI;
+
+LLHintHandler::LLHintHandler()
+{
+}
+
+LLHintHandler::~LLHintHandler()
+{
+}
+
+bool LLHintHandler::processNotification(const LLSD& notify)
+{
+	if (notify["sigtype"].asString() == "add" || notify["sigtype"].asString() == "load")
+	{
+		LLNotificationPtr notification = LLNotifications::instance().find(notify["id"].asUUID());
+		LLHints::show(notification);
+	}
+	return false;
+}
-- 
cgit v1.2.3


From 657e462b6a46bee09fe91e84ea37763db79c868c Mon Sep 17 00:00:00 2001
From: Richard Nelson <none@none>
Date: Thu, 12 Aug 2010 12:19:04 -0700
Subject: forgot yet another file

---
 indra/newview/skins/default/xui/en/panel_hint.xml | 34 +++++++++++++++++++++++
 1 file changed, 34 insertions(+)
 create mode 100644 indra/newview/skins/default/xui/en/panel_hint.xml

diff --git a/indra/newview/skins/default/xui/en/panel_hint.xml b/indra/newview/skins/default/xui/en/panel_hint.xml
new file mode 100644
index 0000000000..7cb8f58c37
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_hint.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ name="hint"
+ width="205"
+ height="100"
+ background_opaque="true"
+ background_visible="true"
+ layout="topleft" 
+ bg_opaque_image="hint_background">
+  <text name="hint_title"
+        font="SansSerifMedium" 
+        left="8"
+        right="180"
+        top="8"
+        bottom="20"
+        follows="left|right|top"
+        text_color="White"
+        wrap="false"/>
+  <text name="hint_text"
+        left="8"
+        right="197"
+        top="26"
+        bottom="90"
+        follows="all" 
+        text_color="White"
+        wrap="true"/>
+  <button right="197" 
+          top="8"
+          width="16" 
+          height="16"
+          name="close" 
+          image_unselected="Icon_Close_Foreground"
+          image_selected="Icon_Close_Press"/>
+</panel>
-- 
cgit v1.2.3


From bd897431e14aff091d5f45425816ddec4b2538c7 Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Thu, 12 Aug 2010 12:20:38 -0700
Subject: remaining hints defined

---
 indra/newview/app_settings/ignorable_dialogs.xml   | 48 +++++++++++-
 indra/newview/llbottomtray.cpp                     |  5 +-
 indra/newview/llfirstuse.cpp                       | 88 ++++++++++++++--------
 indra/newview/llfirstuse.h                         | 16 +++-
 indra/newview/llhints.cpp                          | 40 ++++++----
 indra/newview/llhints.h                            |  3 +
 indra/newview/llnotificationhinthandler.cpp        | 10 ++-
 indra/newview/llsidepanelinventory.cpp             |  3 +
 indra/newview/llsidetray.cpp                       |  2 +
 indra/newview/llstatusbar.cpp                      |  3 +
 .../newview/skins/default/xui/en/notifications.xml | 31 +++++++-
 11 files changed, 189 insertions(+), 60 deletions(-)

diff --git a/indra/newview/app_settings/ignorable_dialogs.xml b/indra/newview/app_settings/ignorable_dialogs.xml
index a0b9e33aa9..0720ccee49 100644
--- a/indra/newview/app_settings/ignorable_dialogs.xml
+++ b/indra/newview/app_settings/ignorable_dialogs.xml
@@ -4,7 +4,7 @@
     <key>FirstInventoryOffer</key>
     <map>
       <key>Comment</key>
-      <string>Shows hint when a person or object offers you an inventory item</string>
+      <string>Shows hint when a person or object offers resident an inventory item</string>
       <key>Persist</key>
       <integer>1</integer>
       <key>Type</key>
@@ -12,7 +12,51 @@
       <key>Value</key>
       <integer>1</integer>
     </map>
-    <key>FirstOtherChatBeforeUser</key>
+  <key>FirstNotUseDestinationGuide</key>
+  <map>
+    <key>Comment</key>
+    <string>Shows hint when resident doesn't activate destination guide</string>
+    <key>Persist</key>
+    <integer>1</integer>
+    <key>Type</key>
+    <string>Boolean</string>
+    <key>Value</key>
+    <integer>1</integer>
+  </map>
+  <key>FirstNotUseSidePanel</key>
+  <map>
+    <key>Comment</key>
+    <string>Shows hint when resident doesn't activate side panel</string>
+    <key>Persist</key>
+    <integer>1</integer>
+    <key>Type</key>
+    <string>Boolean</string>
+    <key>Value</key>
+    <integer>1</integer>
+  </map>
+  <key>FirstNotMoving</key>
+  <map>
+    <key>Comment</key>
+    <string>Shows hint when resident doesn't move</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>
+    <string>Shows hint when resident receives linden dollars</string>
+    <key>Persist</key>
+    <integer>1</integer>
+    <key>Type</key>
+    <string>Boolean</string>
+    <key>Value</key>
+    <integer>1</integer>
+  </map>
+  <key>FirstOtherChatBeforeUser</key>
     <map>
       <key>Comment</key>
       <string>Shows hint when someone else chats first</string>
diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp
index 7d4c0be3fa..e0b605a724 100644
--- a/indra/newview/llbottomtray.cpp
+++ b/indra/newview/llbottomtray.cpp
@@ -69,10 +69,6 @@ template class LLBottomTray* LLSingleton<class LLBottomTray>::getInstance();
 namespace
 {
 	const std::string& PANEL_CHICLET_NAME	= "chiclet_list_panel";
-	const std::string& PANEL_CHATBAR_NAME	= "chat_bar";
-	const std::string& PANEL_MOVEMENT_NAME	= "movement_panel";
-	const std::string& PANEL_CAMERA_NAME	= "cam_panel";
-	const std::string& PANEL_GESTURE_NAME	= "gesture_panel";
 
 	S32 get_panel_min_width(LLLayoutStack* stack, LLView* panel)
 	{
@@ -480,6 +476,7 @@ BOOL LLBottomTray::postBuild()
 
 	mToolbarStack = getChild<LLLayoutStack>("toolbar_stack");
 	mMovementButton = getChild<LLButton>("movement_btn");
+	LLHints::registerHintTarget("move_btn", mMovementButton->getHandle());
 	mCamButton = getChild<LLButton>("camera_btn");
 	setRightMouseDownCallback(boost::bind(&LLBottomTray::showBottomTrayContextMenu,this, _2, _3,_4));
 
diff --git a/indra/newview/llfirstuse.cpp b/indra/newview/llfirstuse.cpp
index 8906525676..d2dff49904 100644
--- a/indra/newview/llfirstuse.cpp
+++ b/indra/newview/llfirstuse.cpp
@@ -36,7 +36,7 @@
 
 // library includes
 #include "indra_constants.h"
-#include "llnotificationsutil.h"
+#include "llnotifications.h"
 
 // viewer includes
 #include "llagent.h"	// for gAgent.inPrelude()
@@ -48,6 +48,7 @@
 
 // static
 std::set<std::string> LLFirstUse::sConfigVariables;
+std::map<std::string, LLNotificationPtr> LLFirstUse::sNotifications;
 
 // static
 void LLFirstUse::addConfigVariable(const std::string& var)
@@ -84,58 +85,79 @@ void LLFirstUse::useOverrideKeys()
 	// so don't show this message until you get off OI. JC
 	if (!gAgent.inPrelude())
 	{
-		if (gWarningSettings.getBOOL("FirstOverrideKeys"))
-		{
-			gWarningSettings.setBOOL("FirstOverrideKeys", FALSE);
-
-			LLNotificationsUtil::add("FirstOverrideKeys");
-		}
+		firstUseNotification("FirstOverrideKeys", true, "FirstOverrideKeys");
 	}
 }
 
 // static
-void LLFirstUse::otherAvatarChat()
+void LLFirstUse::otherAvatarChat(bool enable)
 {
-	if (gWarningSettings.getBOOL("FirstOtherChatBeforeUser"))
-	{
-		gWarningSettings.setBOOL("FirstOtherChatBeforeUser", FALSE);
+	firstUseNotification("FirstOtherChatBeforeUser", enable, "HintChat", LLSD(), LLSD().with("target", "nearby_chat_bar").with("direction", "top"));
+}
 
-		LLNotificationsUtil::add("HintChat", LLSD(), LLSD().with("target", "nearby_chat_bar").with("direction", "top"));
-	}
+// static
+void LLFirstUse::sit(bool enable)
+{
+	firstUseNotification("FirstSit", enable, "HintSit", LLSD(), LLSD().with("target", "stand_btn").with("direction", "top"));
 }
 
 // static
-void LLFirstUse::sit()
+void LLFirstUse::inventoryOffer(bool enable)
 {
-	if (gWarningSettings.getBOOL("FirstSit"))
-	{
-		gWarningSettings.setBOOL("FirstSit", FALSE);
+	firstUseNotification("FirstInventoryOffer", enable, "HintInventory", LLSD(), LLSD().with("target", "inventory_btn").with("direction", "left"));
+}
 
-		LLNotificationsUtil::add("HintSit", LLSD(), LLSD().with("target", "stand_btn").with("direction", "top"));
-	}
+// static
+void LLFirstUse::useSandbox()
+{
+	firstUseNotification("FirstSandbox", true, "FirstSandbox", LLSD().with("HOURS", SANDBOX_CLEAN_FREQ).with("TIME", SANDBOX_FIRST_CLEAN_HOUR));
 }
 
 // static
-void LLFirstUse::inventoryOffer()
+void LLFirstUse::notUsingDestinationGuide(bool enable)
 {
-	if (gWarningSettings.getBOOL("FirstInventoryOffer"))
-	{
-		gWarningSettings.setBOOL("FirstInventoryOffer", FALSE);
+	firstUseNotification("FirstNotUseDestinationGuide", enable, "HintDestinationGuide", LLSD(), LLSD().with("target", "dest_guide_btn").with("direction", "left"));
+}
 
-		LLNotificationsUtil::add("HintInventory", LLSD(), LLSD().with("target", "inventory_btn").with("direction", "left"));
-	}
+// static
+void LLFirstUse::notUsingSidePanel(bool enable)
+{
+	firstUseNotification("FirstNotUseSidePanel", enable, "HintSidePanel", LLSD(), LLSD().with("target", "side_panel_btn").with("direction", "left"));
 }
 
 // static
-void LLFirstUse::useSandbox()
+void LLFirstUse::notMoving(bool enable)
 {
-	if (gWarningSettings.getBOOL("FirstSandbox"))
-	{
-		gWarningSettings.setBOOL("FirstSandbox", FALSE);
+	firstUseNotification("FirstNotMoving", enable, "HintMove", LLSD(), LLSD().with("target", "move_btn").with("direction", "top"));
+}
+
+// static
+void LLFirstUse::receiveLindens(bool enable)
+{
+	firstUseNotification("FirstReceiveLindens", enable, "HintLindenDollar", LLSD(), LLSD().with("target", "linden_balance").with("direction", "bottom"));
+}
+
+
+//static 
+void LLFirstUse::firstUseNotification(const std::string& control_var, bool enable, const std::string& notification_name, LLSD args, LLSD payload)
+{
+	LLNotificationPtr notif = sNotifications[notification_name];
 
-		LLSD args;
-		args["HOURS"] = llformat("%d",SANDBOX_CLEAN_FREQ);
-		args["TIME"] = llformat("%d",SANDBOX_FIRST_CLEAN_HOUR);
-		LLNotificationsUtil::add("FirstSandbox", args);
+	if (enable)
+	{
+		if (!notif && gWarningSettings.getBOOL(control_var))
+		{ // create new notification
+			sNotifications[notification_name] = LLNotifications::instance().add(LLNotification::Params().name(notification_name).substitutions(args).payload(payload));
+			gWarningSettings.setBOOL(control_var, FALSE);
+		}
+	}	
+	else
+	{ // want to hide notification
+		if (notif)
+		{ // cancel existing notification
+			LLNotifications::instance().cancel(notif);
+			sNotifications.erase(notification_name);
+		}
 	}
+
 }
diff --git a/indra/newview/llfirstuse.h b/indra/newview/llfirstuse.h
index ca7290fe17..abf7d9836e 100644
--- a/indra/newview/llfirstuse.h
+++ b/indra/newview/llfirstuse.h
@@ -76,6 +76,9 @@ object or from inventory.
 14. First time you create/edit a sculpted prim.
 */
 
+class LLNotification;
+
+
 class LLFirstUse
 {
 public:
@@ -88,14 +91,19 @@ public:
 	static void resetFirstUse();
 
 	static void useOverrideKeys();
-	static void otherAvatarChat();
-	static void sit();
-	static void inventoryOffer();
-
+	static void otherAvatarChat(bool enable = true);
+	static void sit(bool enable = true);
+	static void notUsingDestinationGuide(bool enable = true);
+	static void notUsingSidePanel(bool enable = true);
+	static void notMoving(bool enable = true);
+	static void inventoryOffer(bool enable = true);
+	static void receiveLindens(bool enable = true);
 	static void useSandbox();
 	
 protected:
+	static void firstUseNotification(const std::string& control_var, bool enable, const std::string& notification_name, LLSD args = LLSD(), LLSD payload = LLSD());
 	static std::set<std::string> sConfigVariables;
+	static std::map<std::string, boost::shared_ptr<LLNotification> > sNotifications;
 };
 
 #endif
diff --git a/indra/newview/llhints.cpp b/indra/newview/llhints.cpp
index a8c3183301..2f3504efed 100644
--- a/indra/newview/llhints.cpp
+++ b/indra/newview/llhints.cpp
@@ -149,7 +149,7 @@ void LLHintPopup::draw()
 		targetp->localRectToOtherView(targetp->getLocalRect(), &target_rect, getParent());
 
 		LLRect my_local_rect = getLocalRect();
-		LLRect my_rect = getRect();
+		LLRect my_rect;
 		LLRect arrow_rect;
 		LLUIImagePtr arrow_imagep;
 
@@ -158,10 +158,10 @@ void LLHintPopup::draw()
 		switch(mDirection)
 		{
 		case LEFT:
-			my_rect.setCenterAndSize(	target_rect.mLeft - (my_rect.getWidth() / 2 + mDistance), 
+			my_rect.setCenterAndSize(	target_rect.mLeft - (my_local_rect.getWidth() / 2 + mDistance), 
 										target_rect.getCenterY(), 
-										my_rect.getWidth(), 
-										my_rect.getHeight());
+										my_local_rect.getWidth(), 
+										my_local_rect.getHeight());
 			arrow_rect.setCenterAndSize(my_local_rect.mRight + mArrowRight->getWidth() / 2 - OVERLAP,
 										my_local_rect.getCenterY(),
 										mArrowRight->getWidth(), 
@@ -170,9 +170,9 @@ void LLHintPopup::draw()
 			break;
 		case TOP:
 			my_rect.setCenterAndSize(	target_rect.getCenterX(), 
-										target_rect.mTop + (my_rect.getHeight() / 2 + mDistance), 
-										my_rect.getWidth(), 
-										my_rect.getHeight());
+										target_rect.mTop + (my_local_rect.getHeight() / 2 + mDistance), 
+										my_local_rect.getWidth(), 
+										my_local_rect.getHeight());
 			arrow_rect.setCenterAndSize(my_local_rect.getCenterX(),
 										my_local_rect.mBottom - mArrowDown->getHeight() / 2 + OVERLAP,
 										mArrowDown->getWidth(), 
@@ -181,9 +181,9 @@ void LLHintPopup::draw()
 			break;
 		case RIGHT:
 			my_rect.setCenterAndSize(	target_rect.getCenterX(), 
-										target_rect.mTop - (my_rect.getHeight() / 2 + mDistance), 
-										my_rect.getWidth(), 
-										my_rect.getHeight());
+										target_rect.mTop - (my_local_rect.getHeight() / 2 + mDistance), 
+										my_local_rect.getWidth(), 
+										my_local_rect.getHeight());
 			arrow_rect.setCenterAndSize(my_local_rect.mLeft - mArrowLeft->getWidth() / 2 + OVERLAP,
 										my_local_rect.getCenterY(),
 										mArrowLeft->getWidth(), 
@@ -191,10 +191,10 @@ void LLHintPopup::draw()
 			arrow_imagep = mArrowLeft;
 			break;
 		case BOTTOM:
-			my_rect.setCenterAndSize(	target_rect.mLeft + (my_rect.getWidth() / 2 + mDistance), 
+			my_rect.setCenterAndSize(	target_rect.mLeft + (my_local_rect.getWidth() / 2 + mDistance), 
 										target_rect.getCenterY(), 
-										my_rect.getWidth(), 
-										my_rect.getHeight());
+										my_local_rect.getWidth(), 
+										my_local_rect.getHeight());
 			arrow_rect.setCenterAndSize(my_local_rect.getCenterX(),
 										my_local_rect.mTop + mArrowUp->getHeight() / 2 - OVERLAP,
 										mArrowUp->getWidth(), 
@@ -211,6 +211,7 @@ void LLHintPopup::draw()
 
 
 LLRegistry<std::string, LLHandle<LLView> > LLHints::sTargetRegistry;
+std::map<LLNotificationPtr, class LLHintPopup*> LLHints::sHints;
 
 //static
 void LLHints::show(LLNotificationPtr hint)
@@ -221,6 +222,9 @@ void LLHints::show(LLNotificationPtr hint)
 	p.notification = hint;
 
 	LLHintPopup* popup = new LLHintPopup(p);
+	
+	sHints[hint] = popup;
+
 	LLView* hint_holder = gViewerWindow->getHintHolder();
 	if (hint_holder)
 	{
@@ -229,6 +233,16 @@ void LLHints::show(LLNotificationPtr hint)
 	}
 }
 
+void LLHints::hide(LLNotificationPtr hint)
+{
+	hint_map_t::iterator found_it = sHints.find(hint);
+	if (found_it != sHints.end())
+	{
+		found_it->second->hide();
+		sHints.erase(found_it);
+	}
+}
+
 //static
 void LLHints::registerHintTarget(const std::string& name, LLHandle<LLView> target)
 {
diff --git a/indra/newview/llhints.h b/indra/newview/llhints.h
index b5255db95b..4ecdc9937c 100644
--- a/indra/newview/llhints.h
+++ b/indra/newview/llhints.h
@@ -41,10 +41,13 @@ class LLHints
 {
 public:
 	static void show(LLNotificationPtr hint);
+	static void hide(LLNotificationPtr hint);
 	static void registerHintTarget(const std::string& name, LLHandle<LLView> target);
 	static LLHandle<LLView> getHintTarget(const std::string& name);
 private:
 	static LLRegistry<std::string, LLHandle<LLView> > sTargetRegistry;
+	typedef std::map<LLNotificationPtr, class LLHintPopup*> hint_map_t;
+	static hint_map_t sHints;
 };
 
 
diff --git a/indra/newview/llnotificationhinthandler.cpp b/indra/newview/llnotificationhinthandler.cpp
index f5c0330b2a..a9460821b0 100644
--- a/indra/newview/llnotificationhinthandler.cpp
+++ b/indra/newview/llnotificationhinthandler.cpp
@@ -49,10 +49,16 @@ LLHintHandler::~LLHintHandler()
 
 bool LLHintHandler::processNotification(const LLSD& notify)
 {
-	if (notify["sigtype"].asString() == "add" || notify["sigtype"].asString() == "load")
+	LLNotificationPtr notification = LLNotifications::instance().find(notify["id"].asUUID());
+
+	std::string sigtype = notify["sigtype"].asString();
+	if (sigtype == "add" || sigtype == "load")
 	{
-		LLNotificationPtr notification = LLNotifications::instance().find(notify["id"].asUUID());
 		LLHints::show(notification);
 	}
+	else if (sigtype == "delete")
+	{
+		LLHints::hide(notification);
+	}
 	return false;
 }
diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp
index 0951586dd5..7eda4fad20 100644
--- a/indra/newview/llsidepanelinventory.cpp
+++ b/indra/newview/llsidepanelinventory.cpp
@@ -36,6 +36,7 @@
 #include "llappearancemgr.h"
 #include "llavataractions.h"
 #include "llbutton.h"
+#include "llfirstuse.h"
 #include "llinventorybridge.h"
 #include "llinventoryfunctions.h"
 #include "llinventorypanel.h"
@@ -148,6 +149,8 @@ void LLSidepanelInventory::onOpen(const LLSD& key)
 			mTaskPanel->setObjectSelection(LLSelectMgr::getInstance()->getSelection());
 		showTaskInfoPanel();
 	}
+
+	LLFirstUse::inventoryOffer(false);
 }
 
 void LLSidepanelInventory::onInfoButtonClicked()
diff --git a/indra/newview/llsidetray.cpp b/indra/newview/llsidetray.cpp
index 066b694618..7e8dc2747b 100644
--- a/indra/newview/llsidetray.cpp
+++ b/indra/newview/llsidetray.cpp
@@ -423,6 +423,7 @@ void	LLSideTray::createButtons	()
 		{
 			mCollapseButton = createButton("",sidebar_tab->mImage,sidebar_tab->getTabTitle(),
 				boost::bind(&LLSideTray::onToggleCollapse, this));
+			LLHints::registerHintTarget("side_panel_btn", mCollapseButton->getHandle());
 		}
 		else
 		{
@@ -432,6 +433,7 @@ void	LLSideTray::createButtons	()
 		}
 	}
 	LLHints::registerHintTarget("inventory_btn", mTabButtons["sidebar_inventory"]->getHandle());
+	LLHints::registerHintTarget("dest_guide_btn", mTabButtons["sidebar_places"]->getHandle());
 }
 
 void		LLSideTray::processTriState ()
diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp
index a6bb4d4d5f..46d148c088 100644
--- a/indra/newview/llstatusbar.cpp
+++ b/indra/newview/llstatusbar.cpp
@@ -47,6 +47,7 @@
 #include "llpanelvolumepulldown.h"
 #include "llfloaterregioninfo.h"
 #include "llfloaterscriptdebug.h"
+#include "llhints.h"
 #include "llhudicon.h"
 #include "llnavigationbar.h"
 #include "llkeyboard.h"
@@ -191,6 +192,8 @@ BOOL LLStatusBar::postBuild()
 	mMediaToggle->setClickedCallback( &LLStatusBar::onClickMediaToggle, this );
 	mMediaToggle->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterNearbyMedia, this));
 
+	LLHints::registerHintTarget("linden_balance", getChild<LLView>("balance_bg")->getHandle());
+
 	gSavedSettings.getControl("MuteAudio")->getSignal()->connect(boost::bind(&LLStatusBar::onVolumeChanged, this, _2));
 
 	// Adding Net Stat Graph
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index d7684e434e..8db89a7622 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -6389,12 +6389,33 @@ Mute everyone?
   label="Hint for Chatting"
   type="hint">
     Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam
-    <!--<unique/>-->
   </notification>
 
   <notification
   name="HintSit"
   label="Hint for Sitting"
+  type="hint">
+    Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam
+  </notification>
+  
+  <notification
+  name="HintDestinationGuide"
+  label="Hint for Destination Guide"
+  type="hint">
+    Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam
+  </notification>
+  
+  <notification
+    name="HintSidePanel"
+    label="Hint for Side Panel"
+    type="hint">
+    Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam
+    <!--<unique/>-->
+  </notification>
+
+  <notification
+  name="HintMove"
+  label="Hint for Movement"
   type="hint">
     Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam
     <!--<unique/>-->
@@ -6405,7 +6426,13 @@ Mute everyone?
   label="Hint for Inventory"
   type="hint">
     Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam
-    <!--<unique/>-->
+  </notification>
+
+  <notification
+  name="HintLindenDollar"
+  label="Hint for L$"
+  type="hint">
+    Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam
   </notification>
 
   <global name="UnsupportedCPU">
-- 
cgit v1.2.3


From 2c999688c4c792630865bd97c2b45ff886d9a26c Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Thu, 12 Aug 2010 15:18:25 -0700
Subject: added remaining hints and fade in/fade out behavior

---
 indra/newview/app_settings/settings.xml            | 33 ++++++++++++
 indra/newview/llagent.cpp                          | 21 ++++++++
 indra/newview/llagent.h                            |  1 +
 indra/newview/llappviewer.cpp                      |  3 ++
 indra/newview/llappviewer.h                        |  1 +
 indra/newview/llfirstuse.cpp                       |  8 +--
 indra/newview/llfirstuse.h                         |  2 +-
 indra/newview/llhints.cpp                          | 62 +++++++++++++++++-----
 indra/newview/llmoveview.cpp                       |  2 +
 indra/newview/llnearbychatbar.cpp                  |  2 +
 indra/newview/llnearbychathandler.cpp              |  5 +-
 indra/newview/llpanelplaces.cpp                    |  3 ++
 indra/newview/llsidepanelinventory.cpp             |  4 +-
 indra/newview/llsidetray.cpp                       |  2 +
 indra/newview/llstatusbar.cpp                      |  7 +++
 indra/newview/llviewerwindow.cpp                   | 13 +++++
 .../newview/skins/default/xui/en/notifications.xml | 28 +++++-----
 indra/newview/skins/default/xui/en/panel_hint.xml  |  1 +
 18 files changed, 164 insertions(+), 34 deletions(-)

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 3326319e2d..12fb8741ca 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -11947,5 +11947,38 @@
       <key>Value</key>
       <integer>10</integer>
     </map>
+    <key>NotMovingHintTimeout</key>
+    <map>
+      <key>Comment</key>
+      <string>Number of seconds to wait for resident to move before displaying move hint.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>120.0</real>
+    </map>
+    <key>DestinationGuideHintTimeout</key>
+    <map>
+      <key>Comment</key>
+      <string>Number of seconds to wait before telling resident about destination guide.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>600.0</real>
+    </map>
+    <key>SidePanelHintTimeout</key>
+    <map>
+      <key>Comment</key>
+      <string>Number of seconds to wait before telling resident about side panel.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>300.0</real>
+    </map>
 </map>
 </llsd>
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index e85d108bb2..0ff88f7451 100644
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -44,6 +44,7 @@
 #include "llcallingcard.h"
 #include "llchannelmanager.h"
 #include "llconsole.h"
+#include "llfirstuse.h"
 #include "llfloatercamera.h"
 #include "llfloaterreg.h"
 #include "llfloatertools.h"
@@ -306,6 +307,9 @@ void LLAgent::ageChat()
 //-----------------------------------------------------------------------------
 void LLAgent::moveAt(S32 direction, bool reset)
 {
+	mMoveTimer.reset();
+	LLFirstUse::notMoving(false);
+
 	// age chat timer so it fades more quickly when you are intentionally moving
 	ageChat();
 
@@ -331,6 +335,9 @@ void LLAgent::moveAt(S32 direction, bool reset)
 //-----------------------------------------------------------------------------
 void LLAgent::moveAtNudge(S32 direction)
 {
+	mMoveTimer.reset();
+	LLFirstUse::notMoving(false);
+
 	// age chat timer so it fades more quickly when you are intentionally moving
 	ageChat();
 
@@ -353,6 +360,9 @@ void LLAgent::moveAtNudge(S32 direction)
 //-----------------------------------------------------------------------------
 void LLAgent::moveLeft(S32 direction)
 {
+	mMoveTimer.reset();
+	LLFirstUse::notMoving(false);
+
 	// age chat timer so it fades more quickly when you are intentionally moving
 	ageChat();
 
@@ -375,6 +385,9 @@ void LLAgent::moveLeft(S32 direction)
 //-----------------------------------------------------------------------------
 void LLAgent::moveLeftNudge(S32 direction)
 {
+	mMoveTimer.reset();
+	LLFirstUse::notMoving(false);
+
 	// age chat timer so it fades more quickly when you are intentionally moving
 	ageChat();
 
@@ -397,6 +410,9 @@ void LLAgent::moveLeftNudge(S32 direction)
 //-----------------------------------------------------------------------------
 void LLAgent::moveUp(S32 direction)
 {
+	mMoveTimer.reset();
+	LLFirstUse::notMoving(false);
+
 	// age chat timer so it fades more quickly when you are intentionally moving
 	ageChat();
 
@@ -1534,6 +1550,11 @@ void LLAgent::propagate(const F32 dt)
 //-----------------------------------------------------------------------------
 void LLAgent::updateAgentPosition(const F32 dt, const F32 yaw_radians, const S32 mouse_x, const S32 mouse_y)
 {
+	if (mMoveTimer.getElapsedTimeF32() > gSavedSettings.getF32("NotMovingHintTimeout"))
+	{
+		LLFirstUse::notMoving();
+	}
+
 	propagate(dt);
 
 	// static S32 cameraUpdateCount = 0;
diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h
index 32f9b00135..0185f874f9 100644
--- a/indra/newview/llagent.h
+++ b/indra/newview/llagent.h
@@ -270,6 +270,7 @@ public:
 private:
 	LLFrameTimer	mFidgetTimer;
 	LLFrameTimer	mFocusObjectFadeTimer;
+	LLFrameTimer	mMoveTimer;
 	F32				mNextFidgetTime;
 	S32				mCurrentFidget;
 
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index d222d94ec6..768be116f6 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -268,6 +268,7 @@ const F64 FRAME_STALL_THRESHOLD = 1.0;
 
 LLTimer gRenderStartTime;
 LLFrameTimer gForegroundTime;
+LLFrameTimer gLoggedInTime;
 LLTimer gLogoutTimer;
 static const F32 LOGOUT_REQUEST_TIME = 6.f;  // this will be cut short by the LogoutReply msg.
 F32 gLogoutMaxTime = LOGOUT_REQUEST_TIME;
@@ -597,6 +598,7 @@ LLAppViewer::LLAppViewer() :
 
 	setupErrorHandling();
 	sInstance = this;
+	gLoggedInTime.stop();
 }
 
 LLAppViewer::~LLAppViewer()
@@ -4281,6 +4283,7 @@ void LLAppViewer::pingMainloopTimeout(const std::string& state, F32 secs)
 
 void LLAppViewer::handleLoginComplete()
 {
+	gLoggedInTime.start();
 	initMainloopTimeout("Mainloop Init");
 
 	// Store some data to DebugInfo in case of a freeze.
diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h
index 0b862a92a1..e5e27dc908 100644
--- a/indra/newview/llappviewer.h
+++ b/indra/newview/llappviewer.h
@@ -313,6 +313,7 @@ extern U32 		gFrameStalls;
 
 extern LLTimer gRenderStartTime;
 extern LLFrameTimer gForegroundTime;
+extern LLFrameTimer gLoggedInTime;
 
 extern F32 gLogoutMaxTime;
 extern LLTimer gLogoutTimer;
diff --git a/indra/newview/llfirstuse.cpp b/indra/newview/llfirstuse.cpp
index d2dff49904..4708087846 100644
--- a/indra/newview/llfirstuse.cpp
+++ b/indra/newview/llfirstuse.cpp
@@ -90,7 +90,7 @@ void LLFirstUse::useOverrideKeys()
 }
 
 // static
-void LLFirstUse::otherAvatarChat(bool enable)
+void LLFirstUse::otherAvatarChatFirst(bool enable)
 {
 	firstUseNotification("FirstOtherChatBeforeUser", enable, "HintChat", LLSD(), LLSD().with("target", "nearby_chat_bar").with("direction", "top"));
 }
@@ -116,13 +116,15 @@ void LLFirstUse::useSandbox()
 // static
 void LLFirstUse::notUsingDestinationGuide(bool enable)
 {
-	firstUseNotification("FirstNotUseDestinationGuide", enable, "HintDestinationGuide", LLSD(), LLSD().with("target", "dest_guide_btn").with("direction", "left"));
+	// not doing this yet
+	//firstUseNotification("FirstNotUseDestinationGuide", enable, "HintDestinationGuide", LLSD(), LLSD().with("target", "dest_guide_btn").with("direction", "left"));
 }
 
 // static
 void LLFirstUse::notUsingSidePanel(bool enable)
 {
-	firstUseNotification("FirstNotUseSidePanel", enable, "HintSidePanel", LLSD(), LLSD().with("target", "side_panel_btn").with("direction", "left"));
+	// not doing this yet
+	//firstUseNotification("FirstNotUseSidePanel", enable, "HintSidePanel", LLSD(), LLSD().with("target", "side_panel_btn").with("direction", "left"));
 }
 
 // static
diff --git a/indra/newview/llfirstuse.h b/indra/newview/llfirstuse.h
index abf7d9836e..48943cd9ab 100644
--- a/indra/newview/llfirstuse.h
+++ b/indra/newview/llfirstuse.h
@@ -91,7 +91,7 @@ public:
 	static void resetFirstUse();
 
 	static void useOverrideKeys();
-	static void otherAvatarChat(bool enable = true);
+	static void otherAvatarChatFirst(bool enable = true);
 	static void sit(bool enable = true);
 	static void notUsingDestinationGuide(bool enable = true);
 	static void notUsingSidePanel(bool enable = true);
diff --git a/indra/newview/llhints.cpp b/indra/newview/llhints.cpp
index 2f3504efed..66799535c1 100644
--- a/indra/newview/llhints.cpp
+++ b/indra/newview/llhints.cpp
@@ -72,7 +72,13 @@ public:
 		Optional<LLUIImage*>			left_arrow,
 										up_arrow,
 										right_arrow,
-										down_arrow;									
+										down_arrow;	
+		Optional<S32>					left_arrow_offset,
+										up_arrow_offset,
+										right_arrow_offset,
+										down_arrow_offset;
+		Optional<F32>					fade_in_time,
+										fade_out_time;
 
 		Params()
 		:	direction("direction", TOP),
@@ -81,7 +87,13 @@ public:
 			left_arrow("left_arrow", LLUI::getUIImage("hint_arrow_left")),
 			up_arrow("up_arrow", LLUI::getUIImage("hint_arrow_up")),
 			right_arrow("right_arrow", LLUI::getUIImage("hint_arrow_right")),
-			down_arrow("down_arrow", LLUI::getUIImage("hint_arrow_down"))
+			down_arrow("down_arrow", LLUI::getUIImage("hint_arrow_down")),
+			left_arrow_offset("left_arrow_offset", 3),
+			up_arrow_offset("up_arrow_offset", -2),
+			right_arrow_offset("right_arrow_offset", -3),
+			down_arrow_offset("down_arrow_offset", 5),
+			fade_in_time("fade_in_time", 0.2f),
+			fade_out_time("fade_out_time", 0.5f)
 		{}
 	};
 
@@ -92,7 +104,7 @@ public:
 
 	void onClickClose() { hide(); }
 	void draw();
-	void hide() { die(); }
+	void hide() { mHidden = true; mFadeTimer.reset(); }
 
 private:
 	LLNotificationPtr	mNotification;
@@ -103,6 +115,14 @@ private:
 						mArrowUp,
 						mArrowRight,
 						mArrowDown;
+	S32					mArrowLeftOffset,
+						mArrowUpOffset,
+						mArrowRightOffset,
+						mArrowDownOffset;
+	LLFrameTimer		mFadeTimer;
+	F32					mFadeInTime,
+						mFadeOutTime;
+	bool				mHidden;
 };
 
 
@@ -117,6 +137,13 @@ LLHintPopup::LLHintPopup(const LLHintPopup::Params& p)
 	mArrowUp(p.up_arrow),
 	mArrowRight(p.right_arrow),
 	mArrowDown(p.down_arrow),
+	mArrowLeftOffset(p.left_arrow_offset),
+	mArrowUpOffset(p.up_arrow_offset),
+	mArrowRightOffset(p.right_arrow_offset),
+	mArrowDownOffset(p.down_arrow_offset),
+	mHidden(false),
+	mFadeInTime(p.fade_in_time),
+	mFadeOutTime(p.fade_out_time),
 	LLPanel(p)
 {
 	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_hint.xml");
@@ -138,6 +165,17 @@ BOOL LLHintPopup::postBuild()
 
 void LLHintPopup::draw()
 {
+	F32 alpha = 1.f;
+	if (mHidden)
+	{
+		alpha = clamp_rescale(mFadeTimer.getElapsedTimeF32(), 0.f, mFadeOutTime, 1.f, 0.f);
+	}
+	else
+	{
+		alpha = clamp_rescale(mFadeTimer.getElapsedTimeF32(), 0.f, mFadeInTime, 0.f, 1.f);
+	}
+	LLViewDrawContext context(alpha);
+
 	LLView* targetp = mTarget.get();
 	if (!targetp || !targetp->isInVisibleChain()) 
 	{
@@ -153,8 +191,6 @@ void LLHintPopup::draw()
 		LLRect arrow_rect;
 		LLUIImagePtr arrow_imagep;
 
-		const S32 OVERLAP = 5;
-
 		switch(mDirection)
 		{
 		case LEFT:
@@ -162,7 +198,7 @@ void LLHintPopup::draw()
 										target_rect.getCenterY(), 
 										my_local_rect.getWidth(), 
 										my_local_rect.getHeight());
-			arrow_rect.setCenterAndSize(my_local_rect.mRight + mArrowRight->getWidth() / 2 - OVERLAP,
+			arrow_rect.setCenterAndSize(my_local_rect.mRight + mArrowRight->getWidth() / 2 + mArrowRightOffset,
 										my_local_rect.getCenterY(),
 										mArrowRight->getWidth(), 
 										mArrowRight->getHeight());
@@ -174,7 +210,7 @@ void LLHintPopup::draw()
 										my_local_rect.getWidth(), 
 										my_local_rect.getHeight());
 			arrow_rect.setCenterAndSize(my_local_rect.getCenterX(),
-										my_local_rect.mBottom - mArrowDown->getHeight() / 2 + OVERLAP,
+										my_local_rect.mBottom - mArrowDown->getHeight() / 2 + mArrowDownOffset,
 										mArrowDown->getWidth(), 
 										mArrowDown->getHeight());
 			arrow_imagep = mArrowDown;
@@ -184,19 +220,19 @@ void LLHintPopup::draw()
 										target_rect.mTop - (my_local_rect.getHeight() / 2 + mDistance), 
 										my_local_rect.getWidth(), 
 										my_local_rect.getHeight());
-			arrow_rect.setCenterAndSize(my_local_rect.mLeft - mArrowLeft->getWidth() / 2 + OVERLAP,
+			arrow_rect.setCenterAndSize(my_local_rect.mLeft - mArrowLeft->getWidth() / 2 + mArrowLeftOffset,
 										my_local_rect.getCenterY(),
 										mArrowLeft->getWidth(), 
 										mArrowLeft->getHeight());
 			arrow_imagep = mArrowLeft;
 			break;
 		case BOTTOM:
-			my_rect.setCenterAndSize(	target_rect.mLeft + (my_local_rect.getWidth() / 2 + mDistance), 
-										target_rect.getCenterY(), 
+			my_rect.setCenterAndSize(	target_rect.getCenterX(), 
+										target_rect.mBottom - (my_local_rect.getHeight() / 2 + mDistance),
 										my_local_rect.getWidth(), 
 										my_local_rect.getHeight());
 			arrow_rect.setCenterAndSize(my_local_rect.getCenterX(),
-										my_local_rect.mTop + mArrowUp->getHeight() / 2 - OVERLAP,
+										my_local_rect.mTop + mArrowUp->getHeight() / 2 + mArrowUpOffset,
 										mArrowUp->getWidth(), 
 										mArrowUp->getHeight());
 			arrow_imagep = mArrowUp;
@@ -205,7 +241,7 @@ void LLHintPopup::draw()
 		setShape(my_rect);
 		LLPanel::draw();
 
-		arrow_imagep->draw(arrow_rect);
+		arrow_imagep->draw(arrow_rect, LLColor4(1.f, 1.f, 1.f, alpha));
 	}
 }
 
@@ -217,7 +253,7 @@ std::map<LLNotificationPtr, class LLHintPopup*> LLHints::sHints;
 void LLHints::show(LLNotificationPtr hint)
 {
 	LLHintPopup::Params p;
-	LLParamSDParser::instance().readSD(hint->getPayload(), p);
+	LLParamSDParser::instance().readSD(hint->getPayload(), p);
 
 	p.notification = hint;
 
diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp
index 19615def93..148a5786cb 100644
--- a/indra/newview/llmoveview.cpp
+++ b/indra/newview/llmoveview.cpp
@@ -169,6 +169,7 @@ void LLFloaterMove::setVisible(BOOL visible)
 
 	if (visible)
 	{
+		LLFirstUse::notMoving(false);
 		// Attach the Stand/Stop Flying panel.
 		LLPanelStandStopFlying* ssf_panel = LLPanelStandStopFlying::getInstance();
 		ssf_panel->reparent(this);
@@ -571,6 +572,7 @@ void LLPanelStandStopFlying::setStandStopFlyingMode(EStandStopFlyingMode mode)
 	if (mode == SSFM_STAND)
 	{
 		LLFirstUse::sit();
+		LLFirstUse::notMoving(false);
 	}
 	panel->mStandButton->setVisible(SSFM_STAND == mode);
 	panel->mStopFlyingButton->setVisible(SSFM_STOP_FLYING == mode);
diff --git a/indra/newview/llnearbychatbar.cpp b/indra/newview/llnearbychatbar.cpp
index 6cfd810c10..41a19a54a8 100644
--- a/indra/newview/llnearbychatbar.cpp
+++ b/indra/newview/llnearbychatbar.cpp
@@ -38,6 +38,7 @@
 #include "llfloaterreg.h"
 #include "lltrans.h"
 
+#include "llfirstuse.h"
 #include "llnearbychatbar.h"
 #include "llbottomtray.h"
 #include "llagent.h"
@@ -490,6 +491,7 @@ BOOL LLNearbyChatBar::matchChatTypeTrigger(const std::string& in_str, std::strin
 
 void LLNearbyChatBar::onChatBoxKeystroke(LLLineEditor* caller, void* userdata)
 {
+	LLFirstUse::otherAvatarChatFirst(false);
 
 	LLNearbyChatBar* self = (LLNearbyChatBar *)userdata;
 
diff --git a/indra/newview/llnearbychathandler.cpp b/indra/newview/llnearbychathandler.cpp
index 31a59146d6..4011552112 100644
--- a/indra/newview/llnearbychathandler.cpp
+++ b/indra/newview/llnearbychathandler.cpp
@@ -350,7 +350,10 @@ void LLNearbyChatHandler::processChat(const LLChat& chat_msg, const LLSD &args)
 	if(chat_msg.mSourceType == CHAT_SOURCE_AGENT && chat_msg.mFromID.notNull())
 	{
         LLRecentPeople::instance().add(chat_msg.mFromID);
-	 	LLFirstUse::otherAvatarChat();
+		if (chat_msg.mFromID != gAgentID)
+		{
+	 		LLFirstUse::otherAvatarChatFirst();
+		}
 	}
 
 	if(chat_msg.mText.empty())
diff --git a/indra/newview/llpanelplaces.cpp b/indra/newview/llpanelplaces.cpp
index abf2b94b09..c8a9176d92 100644
--- a/indra/newview/llpanelplaces.cpp
+++ b/indra/newview/llpanelplaces.cpp
@@ -42,6 +42,7 @@
 
 #include "llcombobox.h"
 #include "llfiltereditor.h"
+#include "llfirstuse.h"
 #include "llfloaterreg.h"
 #include "llnotificationsutil.h"
 #include "lltabcontainer.h"
@@ -351,6 +352,8 @@ BOOL LLPanelPlaces::postBuild()
 
 void LLPanelPlaces::onOpen(const LLSD& key)
 {
+	LLFirstUse::notUsingDestinationGuide(false);
+
 	if (!mPlaceProfile || !mLandmarkInfo)
 		return;
 
diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp
index 7eda4fad20..f9189bfb22 100644
--- a/indra/newview/llsidepanelinventory.cpp
+++ b/indra/newview/llsidepanelinventory.cpp
@@ -129,6 +129,8 @@ BOOL LLSidepanelInventory::postBuild()
 
 void LLSidepanelInventory::onOpen(const LLSD& key)
 {
+	LLFirstUse::inventoryOffer(false);
+
 	if(key.size() == 0)
 		return;
 
@@ -149,8 +151,6 @@ void LLSidepanelInventory::onOpen(const LLSD& key)
 			mTaskPanel->setObjectSelection(LLSelectMgr::getInstance()->getSelection());
 		showTaskInfoPanel();
 	}
-
-	LLFirstUse::inventoryOffer(false);
 }
 
 void LLSidepanelInventory::onInfoButtonClicked()
diff --git a/indra/newview/llsidetray.cpp b/indra/newview/llsidetray.cpp
index 7e8dc2747b..7cfc774883 100644
--- a/indra/newview/llsidetray.cpp
+++ b/indra/newview/llsidetray.cpp
@@ -37,6 +37,7 @@
 #include "llagentcamera.h"
 #include "llappviewer.h"
 #include "llbottomtray.h"
+#include "llfirstuse.h"
 #include "llhints.h"
 #include "llsidetray.h"
 #include "llviewerwindow.h"
@@ -470,6 +471,7 @@ void		LLSideTray::onTabButtonClick(string name)
 
 void		LLSideTray::onToggleCollapse()
 {
+	LLFirstUse::notUsingSidePanel(false);
 	if(mCollapsed)
 	{
 		expandSideBar();
diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp
index 46d148c088..6a081a573e 100644
--- a/indra/newview/llstatusbar.cpp
+++ b/indra/newview/llstatusbar.cpp
@@ -39,6 +39,7 @@
 #include "llagentcamera.h"
 #include "llbutton.h"
 #include "llcommandhandler.h"
+#include "llfirstuse.h"
 #include "llviewercontrol.h"
 #include "llfloaterbuycurrency.h"
 #include "llbuycurrencyhtml.h"
@@ -341,6 +342,11 @@ void LLStatusBar::creditBalance(S32 credit)
 
 void LLStatusBar::setBalance(S32 balance)
 {
+	if (balance > getBalance() && getBalance() != 0)
+	{
+		LLFirstUse::receiveLindens();
+	}
+
 	std::string money_str = LLResMgr::getInstance()->getMonetaryString( balance );
 
 	LLTextBox* balance_box = getChild<LLTextBox>("balance");
@@ -463,6 +469,7 @@ void LLStatusBar::onClickBuyCurrency()
 	// open a currency floater - actual one open depends on 
 	// value specified in settings.xml
 	LLBuyCurrencyHTML::openCurrencyFloater();
+	LLFirstUse::receiveLindens(false);
 }
 
 void LLStatusBar::onMouseEnterVolume()
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 566f4b45ba..cfb8b077e5 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -102,6 +102,7 @@
 #include "llface.h"
 #include "llfeaturemanager.h"
 #include "llfilepicker.h"
+#include "llfirstuse.h"
 #include "llfloater.h"
 #include "llfloaterbuildoptions.h"
 #include "llfloaterbuyland.h"
@@ -2423,6 +2424,18 @@ void LLViewerWindow::updateUI()
 
 	static std::string last_handle_msg;
 
+	if (gLoggedInTime.getStarted())
+	{
+		if (gLoggedInTime.getElapsedTimeF32() > gSavedSettings.getF32("DestinationGuideHintTimeout"))
+		{
+			LLFirstUse::notUsingDestinationGuide();
+		}
+		if (gLoggedInTime.getElapsedTimeF32() > gSavedSettings.getF32("SidePanelHintTimeout"))
+		{
+			LLFirstUse::notUsingSidePanel();
+		}
+	}
+
 	LLConsole::updateClass();
 
 	// animate layout stacks so we have up to date rect for world view
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 8db89a7622..a2d06f77a9 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -6386,53 +6386,53 @@ Mute everyone?
 
   <notification
   name="HintChat"
-  label="Hint for Chatting"
+  label="Chat"
   type="hint">
-    Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam
+    To join the conversation, type into the chat field below.
   </notification>
 
   <notification
   name="HintSit"
-  label="Hint for Sitting"
+  label="Stand"
   type="hint">
-    Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam
+    To stand up and exit the sitting position, click the Stand button.
   </notification>
   
   <notification
   name="HintDestinationGuide"
-  label="Hint for Destination Guide"
+  label="Explore the World"
   type="hint">
-    Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam
+    The Destination Guide contains thousands of new places to discover. Select a location and choose Teleport to start exploring.
   </notification>
   
   <notification
     name="HintSidePanel"
-    label="Hint for Side Panel"
+    label="Side Panel"
     type="hint">
-    Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam
+    Get quick access to your inventory, outfits, profiles and more in the side panel.
     <!--<unique/>-->
   </notification>
 
   <notification
   name="HintMove"
-  label="Hint for Movement"
+  label="Move"
   type="hint">
-    Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam
+    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.
     <!--<unique/>-->
   </notification>
 
   <notification
   name="HintInventory"
-  label="Hint for Inventory"
+  label="Inventory"
   type="hint">
-    Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam
+    Check your inventory to find items. Newest items can be easily found in the Recent tab.
   </notification>
 
   <notification
   name="HintLindenDollar"
-  label="Hint for L$"
+  label="You've got Linden Dollars!"
   type="hint">
-    Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam
+    Here's your current balance of L$. Click Buy L$ to purchase more Linden Dollars.
   </notification>
 
   <global name="UnsupportedCPU">
diff --git a/indra/newview/skins/default/xui/en/panel_hint.xml b/indra/newview/skins/default/xui/en/panel_hint.xml
index 7cb8f58c37..54ea08e5d4 100644
--- a/indra/newview/skins/default/xui/en/panel_hint.xml
+++ b/indra/newview/skins/default/xui/en/panel_hint.xml
@@ -29,6 +29,7 @@
           width="16" 
           height="16"
           name="close" 
+          follows="right|top" 
           image_unselected="Icon_Close_Foreground"
           image_selected="Icon_Close_Press"/>
 </panel>
-- 
cgit v1.2.3


From e5cfdd1cb8fdab09ef160967b55a75b06e4b2373 Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Thu, 12 Aug 2010 15:26:53 -0700
Subject: fixed move hint always showing up immediately

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

diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index 0ff88f7451..aade16cc7b 100644
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -233,8 +233,9 @@ LLAgent::LLAgent() :
 		mControlsTakenPassedOnCount[i] = 0;
 	}
 
-
 	mListener.reset(new LLAgentListener(*this));
+
+	mMoveTimer.stop();
 }
 
 // Requires gSavedSettings to be initialized.
@@ -243,6 +244,8 @@ LLAgent::LLAgent() :
 //-----------------------------------------------------------------------------
 void LLAgent::init()
 {
+	mMoveTimer.start();
+
 	gSavedSettings.declareBOOL("SlowMotionAnimation", FALSE, "Declared in code", FALSE);
 	gSavedSettings.getControl("SlowMotionAnimation")->getSignal()->connect(boost::bind(&handleSlowMotionAnimation, _2));
 	
@@ -1550,7 +1553,7 @@ void LLAgent::propagate(const F32 dt)
 //-----------------------------------------------------------------------------
 void LLAgent::updateAgentPosition(const F32 dt, const F32 yaw_radians, const S32 mouse_x, const S32 mouse_y)
 {
-	if (mMoveTimer.getElapsedTimeF32() > gSavedSettings.getF32("NotMovingHintTimeout"))
+	if (mMoveTimer.getStarted() && mMoveTimer.getElapsedTimeF32() > gSavedSettings.getF32("NotMovingHintTimeout"))
 	{
 		LLFirstUse::notMoving();
 	}
-- 
cgit v1.2.3


From 2696bb058290ebfb261f0f43130a9a3d72253041 Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Thu, 12 Aug 2010 15:27:37 -0700
Subject: added newline at end

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

diff --git a/indra/newview/llhints.h b/indra/newview/llhints.h
index 4ecdc9937c..d2580df012 100644
--- a/indra/newview/llhints.h
+++ b/indra/newview/llhints.h
@@ -51,4 +51,4 @@ private:
 };
 
 
-#endif
\ No newline at end of file
+#endif
-- 
cgit v1.2.3


From 187c229aca41a2a26caf05bd7d8d6c0d6a378699 Mon Sep 17 00:00:00 2001
From: Richard Nelson <none@none>
Date: Fri, 13 Aug 2010 12:21:28 -0700
Subject: fix for hints reappearing even after criteria passed

---
 indra/newview/llagent.cpp    | 1 +
 indra/newview/llfirstuse.cpp | 1 +
 2 files changed, 2 insertions(+)

diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index aade16cc7b..70bda3893e 100644
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -1556,6 +1556,7 @@ void LLAgent::updateAgentPosition(const F32 dt, const F32 yaw_radians, const S32
 	if (mMoveTimer.getStarted() && mMoveTimer.getElapsedTimeF32() > gSavedSettings.getF32("NotMovingHintTimeout"))
 	{
 		LLFirstUse::notMoving();
+		mMoveTimer.stop();
 	}
 
 	propagate(dt);
diff --git a/indra/newview/llfirstuse.cpp b/indra/newview/llfirstuse.cpp
index 4708087846..15de138c95 100644
--- a/indra/newview/llfirstuse.cpp
+++ b/indra/newview/llfirstuse.cpp
@@ -160,6 +160,7 @@ void LLFirstUse::firstUseNotification(const std::string& control_var, bool enabl
 			LLNotifications::instance().cancel(notif);
 			sNotifications.erase(notification_name);
 		}
+		gWarningSettings.setBOOL(control_var, FALSE);
 	}
 
 }
-- 
cgit v1.2.3


From 4ef75f35c195a4e2657a0e01d6b92cd40e6779f5 Mon Sep 17 00:00:00 2001
From: Richard Nelson <none@none>
Date: Fri, 13 Aug 2010 12:56:28 -0700
Subject: stopped hints from appearing temporarily when retriggered

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

diff --git a/indra/newview/llhints.cpp b/indra/newview/llhints.cpp
index 66799535c1..14a9871a7d 100644
--- a/indra/newview/llhints.cpp
+++ b/indra/newview/llhints.cpp
@@ -104,7 +104,7 @@ public:
 
 	void onClickClose() { hide(); }
 	void draw();
-	void hide() { mHidden = true; mFadeTimer.reset(); }
+	void hide() { if(!mHidden) {mHidden = true; mFadeTimer.reset();} }
 
 private:
 	LLNotificationPtr	mNotification;
@@ -169,6 +169,10 @@ void LLHintPopup::draw()
 	if (mHidden)
 	{
 		alpha = clamp_rescale(mFadeTimer.getElapsedTimeF32(), 0.f, mFadeOutTime, 1.f, 0.f);
+		if (alpha == 0.f)
+		{
+			die();
+		}
 	}
 	else
 	{
-- 
cgit v1.2.3


From 014a4f3dc9dbe2eef7e463267d264d981e173835 Mon Sep 17 00:00:00 2001
From: Richard Nelson <none@none>
Date: Fri, 13 Aug 2010 13:31:17 -0700
Subject: fixed progress view z ordering hacks DEV-52665 FIX Inventory and Chat
 hints shown during login before viewer fully loads on load up screen

---
 indra/newview/llprogressview.cpp                 |  5 -----
 indra/newview/llstartup.cpp                      |  7 -------
 indra/newview/llviewerwindow.cpp                 |  8 --------
 indra/newview/llviewerwindow.h                   |  1 -
 indra/newview/skins/default/xui/en/main_view.xml | 18 +++++++++---------
 5 files changed, 9 insertions(+), 30 deletions(-)

diff --git a/indra/newview/llprogressview.cpp b/indra/newview/llprogressview.cpp
index 9b5e38d0aa..c4bf65e06d 100644
--- a/indra/newview/llprogressview.cpp
+++ b/indra/newview/llprogressview.cpp
@@ -134,15 +134,10 @@ void LLProgressView::setVisible(BOOL visible)
 	if (getVisible() && !visible)
 	{
 		mFadeTimer.start();
-		// hiding progress view, so show menu bars
-		LLUI::getRootView()->getChildView("menu_bar_holder")->setVisible(TRUE);
 	}
 	// showing progress view
 	else if (!getVisible() && visible)
 	{
-		// showing progress view, so hide menu bars
-		LLUI::getRootView()->getChildView("menu_bar_holder")->setVisible(FALSE);
-		
 		setFocus(TRUE);
 		mFadeTimer.stop();
 		mProgressTimer.start();
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 2475870b17..f6f70f5a43 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -800,10 +800,6 @@ bool idle_startup()
 
 	if (STATE_LOGIN_CLEANUP == LLStartUp::getStartupState())
 	{
-		// Move the progress view in front of the UI immediately when login is performed
-		// this allows not to see main menu after Alt+Tab was pressed while login. EXT-744.
-		gViewerWindow->moveProgressViewToFront();
-
 		//reset the values that could have come in from a slurl
 		// DEV-42215: Make sure they're not empty -- gUserCredential
 		// might already have been set from gSavedSettings, and it's too bad
@@ -1257,9 +1253,6 @@ bool idle_startup()
 
 		if (!gNoRender)
 		{
-			// Move the progress view in front of the UI
-			gViewerWindow->moveProgressViewToFront();
-
 			// direct logging to the debug console's line buffer
 			LLError::logToFixedBuffer(gDebugView->mDebugConsolep);
 			
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index cfb8b077e5..d8c7eabefb 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -4250,14 +4250,6 @@ BOOL LLViewerWindow::getShowProgress() const
 	return (mProgressView && mProgressView->getVisible());
 }
 
-void LLViewerWindow::moveProgressViewToFront()
-{
-	if( mProgressView && mRootView )
-	{
-		mRootView->sendChildToFront(mProgressView);
-	}
-}
-
 void LLViewerWindow::setProgressString(const std::string& string)
 {
 	if (mProgressView)
diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h
index cd1ee8a5fd..02f63661ee 100644
--- a/indra/newview/llviewerwindow.h
+++ b/indra/newview/llviewerwindow.h
@@ -277,7 +277,6 @@ public:
 													
 	void			setShowProgress(const BOOL show);
 	BOOL			getShowProgress() const;
-	void			moveProgressViewToFront();
 	void			setProgressString(const std::string& string);
 	void			setProgressPercent(const F32 percent);
 	void			setProgressMessage(const std::string& msg);
diff --git a/indra/newview/skins/default/xui/en/main_view.xml b/indra/newview/skins/default/xui/en/main_view.xml
index 0bf5717de8..01ee8264e6 100644
--- a/indra/newview/skins/default/xui/en/main_view.xml
+++ b/indra/newview/skins/default/xui/en/main_view.xml
@@ -184,15 +184,6 @@
                            visible="false"
                            width="1024"/>
   </panel>
-  <panel top="0"
-         follows="all"
-         height="768"
-         mouse_opaque="true"
-         name="progress_view"
-         filename="panel_progress.xml"
-         class="progress_view"
-         width="1024"
-         visible="false"/>
   <panel top="0"
          follows="all"
          height="768"
@@ -215,6 +206,15 @@
         name="hint_holder"
         mouse_opaque="false"
         follows="all"/>
+  <panel top="0"
+         follows="all"
+         height="768"
+         mouse_opaque="true"
+         name="progress_view"
+         filename="panel_progress.xml"
+         class="progress_view"
+         width="1024"
+         visible="false"/>
   <menu_holder top="0"
                follows="all"
                height="768"
-- 
cgit v1.2.3


From e427c671f036de1addf90fa9a2ed09035b099392 Mon Sep 17 00:00:00 2001
From: Richard Nelson <none@none>
Date: Fri, 13 Aug 2010 16:00:14 -0700
Subject: fixed fast timer average frame time rollover error

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

diff --git a/indra/llcommon/llfasttimer_class.cpp b/indra/llcommon/llfasttimer_class.cpp
index dfbae09864..e9ac709254 100644
--- a/indra/llcommon/llfasttimer_class.cpp
+++ b/indra/llcommon/llfasttimer_class.cpp
@@ -474,9 +474,9 @@ void LLFastTimer::NamedTimer::accumulateTimings()
 			int hidx = cur_frame % HISTORY_NUM;
 
 			timerp->mCountHistory[hidx] = timerp->mTotalTimeCounter;
-			timerp->mCountAverage = (timerp->mCountAverage * cur_frame + timerp->mTotalTimeCounter) / (cur_frame+1);
+			timerp->mCountAverage = ((U64)timerp->mCountAverage * cur_frame + timerp->mTotalTimeCounter) / (cur_frame+1);
 			timerp->mCallHistory[hidx] = timerp->getFrameState().mCalls;
-			timerp->mCallAverage = (timerp->mCallAverage * cur_frame + timerp->getFrameState().mCalls) / (cur_frame+1);
+			timerp->mCallAverage = ((U64)timerp->mCallAverage * cur_frame + timerp->getFrameState().mCalls) / (cur_frame+1);
 		}
 	}
 }
-- 
cgit v1.2.3


From 720b29b1b42fb16ecff835bc1a103bc66499ab94 Mon Sep 17 00:00:00 2001
From: Richard Nelson <none@none>
Date: Mon, 16 Aug 2010 14:58:31 -0700
Subject: added ability to replace existing entries in a LLRegistry

---
 indra/llxuixml/llregistry.h | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/indra/llxuixml/llregistry.h b/indra/llxuixml/llregistry.h
index 2c04d8c419..53d4ac8e34 100644
--- a/indra/llxuixml/llregistry.h
+++ b/indra/llxuixml/llregistry.h
@@ -76,6 +76,11 @@ public:
 			mMap.erase(key);
 		}
 
+		void replace(ref_const_key_t key, ref_const_value_t value)
+		{
+			mMap[key] = value;
+		}
+
 		typename registry_map_t::const_iterator beginItems() const
 		{
 			return mMap.begin();
-- 
cgit v1.2.3


From 1fe2cb24f4288840fd682cae8274c193d66a1886 Mon Sep 17 00:00:00 2001
From: Richard Nelson <none@none>
Date: Mon, 16 Aug 2010 14:59:06 -0700
Subject: fixed slicing problem with paramblocks where block descriptors are
 invalid after copying a derived block type to a base block value.

---
 indra/llxuixml/llinitparam.cpp |  5 +----
 indra/llxuixml/llinitparam.h   | 13 +++++++++----
 2 files changed, 10 insertions(+), 8 deletions(-)

diff --git a/indra/llxuixml/llinitparam.cpp b/indra/llxuixml/llinitparam.cpp
index 8d6aa405e2..99191d2dbe 100644
--- a/indra/llxuixml/llinitparam.cpp
+++ b/indra/llxuixml/llinitparam.cpp
@@ -84,8 +84,7 @@ namespace LLInitParam
 	// BaseBlock
 	//
 	BaseBlock::BaseBlock()
-	:	mChangeVersion(0),
-		mBlockDescriptor(NULL)
+	:	mChangeVersion(0)
 	{}
 
 	BaseBlock::~BaseBlock()
@@ -94,8 +93,6 @@ namespace LLInitParam
 	// called by each derived class in least to most derived order
 	void BaseBlock::init(BlockDescriptor& descriptor, BlockDescriptor& base_descriptor, size_t block_size)
 	{
-		mBlockDescriptor = &descriptor;
-
 		descriptor.mCurrentBlockPtr = this;
 		descriptor.mMaxParamOffset = block_size;
 
diff --git a/indra/llxuixml/llinitparam.h b/indra/llxuixml/llinitparam.h
index 9890bacea4..5461ad9d05 100644
--- a/indra/llxuixml/llinitparam.h
+++ b/indra/llxuixml/llinitparam.h
@@ -480,8 +480,8 @@ namespace LLInitParam
 		bool serializeBlock(Parser& p, Parser::name_stack_t name_stack = Parser::name_stack_t(), const BaseBlock* diff_block = NULL) const;
 		bool inspectBlock(Parser& p, Parser::name_stack_t name_stack = Parser::name_stack_t()) const;
 
-		const BlockDescriptor& mostDerivedBlockDescriptor() const { return *mBlockDescriptor; }
-		BlockDescriptor& mostDerivedBlockDescriptor() { return *mBlockDescriptor; }
+		virtual const BlockDescriptor& mostDerivedBlockDescriptor() const { return selfBlockDescriptor(); }
+		virtual BlockDescriptor& mostDerivedBlockDescriptor() { return selfBlockDescriptor(); }
 
 		// take all provided params from other and apply to self
 		bool overwriteFrom(const BaseBlock& other)
@@ -506,8 +506,6 @@ namespace LLInitParam
 		// can be updated in getters
 		mutable S32				mChangeVersion;
 
-		BlockDescriptor*		mBlockDescriptor;	// most derived block descriptor
-
 		static BlockDescriptor& selfBlockDescriptor()
 		{
 			static BlockDescriptor sBlockDescriptor;
@@ -1313,6 +1311,9 @@ namespace LLInitParam
 			BaseBlock::setLastChangedParam(last_param, user_provided);
 		}
 
+		virtual const BlockDescriptor& mostDerivedBlockDescriptor() const { return selfBlockDescriptor(); }
+		virtual BlockDescriptor& mostDerivedBlockDescriptor() { return selfBlockDescriptor(); }
+
 	protected:
 		Choice()
 		:	mCurChoice(0)
@@ -1422,6 +1423,10 @@ namespace LLInitParam
 		{
 			return BaseBlock::merge(selfBlockDescriptor(), other, false);
 		}
+
+		virtual const BlockDescriptor& mostDerivedBlockDescriptor() const { return selfBlockDescriptor(); }
+		virtual BlockDescriptor& mostDerivedBlockDescriptor() { return selfBlockDescriptor(); }
+
 	protected:
 		Block()
 		{
-- 
cgit v1.2.3


From 94e406157d0b133d51b5dbb95aab296b46eae10e Mon Sep 17 00:00:00 2001
From: Richard Nelson <none@none>
Date: Mon, 16 Aug 2010 14:59:29 -0700
Subject: added ability to cancel all notifications with a given name

---
 indra/llui/llnotifications.cpp | 15 +++++++++++++++
 indra/llui/llnotifications.h   |  1 +
 2 files changed, 16 insertions(+)

diff --git a/indra/llui/llnotifications.cpp b/indra/llui/llnotifications.cpp
index 7fa3c2cf65..2da8f1eb1b 100644
--- a/indra/llui/llnotifications.cpp
+++ b/indra/llui/llnotifications.cpp
@@ -1423,6 +1423,21 @@ void LLNotifications::cancel(LLNotificationPtr pNotif)
 	updateItem(LLSD().with("sigtype", "delete").with("id", pNotif->id()), pNotif);
 }
 
+void LLNotifications::cancelByName(const std::string& name)
+{
+	for (LLNotificationSet::iterator it=mItems.begin(), end_it = mItems.end(), next_it = it;
+		it != end_it;
+		it = next_it, ++next_it)
+	{
+		LLNotificationPtr pNotif = *it;
+		if (pNotif->getName() == name)
+		{
+			pNotif->cancel();
+			updateItem(LLSD().with("sigtype", "delete").with("id", pNotif->id()), pNotif);
+		}
+	}
+}
+
 void LLNotifications::update(const LLNotificationPtr pNotif)
 {
 	LLNotificationSet::iterator it=mItems.find(pNotif);
diff --git a/indra/llui/llnotifications.h b/indra/llui/llnotifications.h
index 1cdd744a68..fcf988222d 100644
--- a/indra/llui/llnotifications.h
+++ b/indra/llui/llnotifications.h
@@ -900,6 +900,7 @@ public:
 
 	void add(const LLNotificationPtr pNotif);
 	void cancel(LLNotificationPtr pNotif);
+	void cancelByName(const std::string& name);
 	void update(const LLNotificationPtr pNotif);
 
 	LLNotificationPtr find(LLUUID uuid);
-- 
cgit v1.2.3


From c20bd2dfee1068d5a23eef9a10d21c2035c0b324 Mon Sep 17 00:00:00 2001
From: Richard Nelson <none@none>
Date: Mon, 16 Aug 2010 15:00:51 -0700
Subject: cleaned up LLUICtrlFactory... removed redundant functionality moved
 buildPanel to LLPanel

---
 indra/llui/llaccordionctrl.cpp                    |   2 +-
 indra/llui/llpanel.cpp                            | 101 +++++++++++++-
 indra/llui/llpanel.h                              |  62 ++++++++-
 indra/llui/lltextbase.h                           |   1 +
 indra/llui/lluictrlfactory.cpp                    | 152 ++--------------------
 indra/llui/lluictrlfactory.h                      | 120 ++---------------
 indra/llui/llview.cpp                             |   4 +-
 indra/newview/llagent.cpp                         |  11 +-
 indra/newview/llagent.h                           |   8 --
 indra/newview/llappviewer.cpp                     |   8 +-
 indra/newview/llavatarlist.cpp                    |   2 +-
 indra/newview/llavatarlistitem.cpp                |   2 +-
 indra/newview/llbottomtray.cpp                    |   9 +-
 indra/newview/llcallfloater.cpp                   |   2 +-
 indra/newview/llchathistory.cpp                   |   4 +-
 indra/newview/llchatitemscontainerctrl.cpp        |   2 +-
 indra/newview/llfloatercamera.cpp                 |   2 +-
 indra/newview/llfloaterinventory.cpp              |   2 +-
 indra/newview/llfloaternotificationsconsole.cpp   |   2 +-
 indra/newview/llfloaterregioninfo.cpp             |  12 +-
 indra/newview/llfloaterscriptlimits.cpp           |   4 +-
 indra/newview/llfloateruipreview.cpp              |   4 +-
 indra/newview/llgrouplist.cpp                     |   2 +-
 indra/newview/llhudview.cpp                       |   2 +-
 indra/newview/llimfloatercontainer.cpp            |   8 +-
 indra/newview/llinventorylistitem.cpp             |   8 +-
 indra/newview/llmoveview.cpp                      |   4 +-
 indra/newview/llnavigationbar.cpp                 |   2 +-
 indra/newview/llnearbychathandler.cpp             | 120 ++++++++++-------
 indra/newview/llpanelavatartag.cpp                |   2 +-
 indra/newview/llpanelclassified.cpp               |   4 +-
 indra/newview/llpanelgenerictip.cpp               |   2 +-
 indra/newview/llpanelgroupinvite.cpp              |   2 +-
 indra/newview/llpanellandmarks.cpp                |   2 +-
 indra/newview/llpanellogin.cpp                    |   2 +-
 indra/newview/llpanelme.cpp                       |   2 +-
 indra/newview/llpanelmediasettingsgeneral.cpp     |   2 +-
 indra/newview/llpanelmediasettingspermissions.cpp |   2 +-
 indra/newview/llpanelmediasettingssecurity.cpp    |   2 +-
 indra/newview/llpanelnearbymedia.cpp              |   2 +-
 indra/newview/llpanelonlinestatus.cpp             |   2 +-
 indra/newview/llpaneloutfitedit.cpp               |   2 +-
 indra/newview/llpaneloutfitsinventory.cpp         |   4 +-
 indra/newview/llpanelpick.cpp                     |   4 +-
 indra/newview/llpanelpicks.cpp                    |   4 +-
 indra/newview/llpanelplaces.cpp                   |   6 +-
 indra/newview/llpanelprimmediacontrols.cpp        |   2 +-
 indra/newview/llpanelprofile.cpp                  |   4 +-
 indra/newview/llpanelprofileview.cpp              |   2 +-
 indra/newview/llpanelteleporthistory.cpp          |   4 +-
 indra/newview/llpaneltopinfobar.cpp               |   2 +-
 indra/newview/llpanelvolumepulldown.cpp           |   2 +-
 indra/newview/llscrollingpanelparam.cpp           |   2 +-
 indra/newview/llsidepanelinventory.cpp            |  16 +--
 indra/newview/llstatusbar.cpp                     |   2 +-
 indra/newview/llsyswellitem.cpp                   |   2 +-
 indra/newview/llsyswellwindow.cpp                 |   4 +-
 indra/newview/lltoast.h                           |   4 +
 indra/newview/lltoastgroupnotifypanel.cpp         |   2 +-
 indra/newview/lltoastimpanel.cpp                  |   2 +-
 indra/newview/lltoastnotifypanel.cpp              |   2 +-
 indra/newview/llviewerwindow.cpp                  |   6 +-
 62 files changed, 351 insertions(+), 415 deletions(-)

diff --git a/indra/llui/llaccordionctrl.cpp b/indra/llui/llaccordionctrl.cpp
index c3ef734823..9337626c8e 100644
--- a/indra/llui/llaccordionctrl.cpp
+++ b/indra/llui/llaccordionctrl.cpp
@@ -89,7 +89,7 @@ LLAccordionCtrl::LLAccordionCtrl() : LLPanel()
 
 	mSingleExpansion = false;
 	mFitParent = false;
-	LLUICtrlFactory::getInstance()->buildPanel(this, "accordion_parent.xml");	
+	buildPanel(this, "accordion_parent.xml");	
 }
 
 //---------------------------------------------------------------------------------
diff --git a/indra/llui/llpanel.cpp b/indra/llui/llpanel.cpp
index 0f769bd6dc..bfca0bd45e 100644
--- a/indra/llui/llpanel.cpp
+++ b/indra/llui/llpanel.cpp
@@ -41,6 +41,7 @@
 #include "llfontgl.h"
 #include "llrect.h"
 #include "llerror.h"
+#include "lldir.h"
 #include "lltimer.h"
 
 #include "llaccordionctrltab.h"
@@ -58,6 +59,8 @@
 #include "lltabcontainer.h"
 
 static LLDefaultChildRegistry::Register<LLPanel> r1("panel", &LLPanel::fromXML);
+LLPanel::factory_stack_t	LLPanel::sFactoryStack;
+
 
 // Compiler optimization, generate extern template
 template class LLPanel* LLView::getChild<class LLPanel>(
@@ -400,7 +403,7 @@ LLView* LLPanel::fromXML(LLXMLNodePtr node, LLView* parent, LLXMLNodePtr output_
 
 		if (!panelp)
 		{
-			panelp = LLUICtrlFactory::getInstance()->createFactoryPanel(name);
+			panelp = createFactoryPanel(name);
 			llassert(panelp);
 			
 			if (!panelp)
@@ -413,20 +416,20 @@ LLView* LLPanel::fromXML(LLXMLNodePtr node, LLView* parent, LLXMLNodePtr output_
 	// factory panels may have registered their own factory maps
 	if (!panelp->getFactoryMap().empty())
 	{
-		LLUICtrlFactory::instance().pushFactoryFunctions(&panelp->getFactoryMap());
+		sFactoryStack.push_back(&panelp->getFactoryMap());
 	}
 	// for local registry callbacks; define in constructor, referenced in XUI or postBuild
 	panelp->mCommitCallbackRegistrar.pushScope(); 
 	panelp->mEnableCallbackRegistrar.pushScope();
 
-	panelp->initPanelXML(node, parent, output_node);
+	panelp->initPanelXML(node, parent, output_node, LLUICtrlFactory::getDefaultParams<LLPanel>());
 	
 	panelp->mCommitCallbackRegistrar.popScope();
 	panelp->mEnableCallbackRegistrar.popScope();
 
 	if (!panelp->getFactoryMap().empty())
 	{
-		LLUICtrlFactory::instance().popFactoryFunctions();
+		sFactoryStack.pop_back();
 	}
 
 	return panelp;
@@ -493,11 +496,9 @@ static LLFastTimer::DeclareTimer FTM_PANEL_SETUP("Panel Setup");
 static LLFastTimer::DeclareTimer FTM_EXTERNAL_PANEL_LOAD("Load Extern Panel Reference");
 static LLFastTimer::DeclareTimer FTM_PANEL_POSTBUILD("Panel PostBuild");
 
-BOOL LLPanel::initPanelXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr output_node)
+BOOL LLPanel::initPanelXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr output_node, const LLPanel::Params& default_params)
 {
-	const LLPanel::Params& default_params(LLUICtrlFactory::getDefaultParams<LLPanel>());
 	Params params(default_params);
-
 	{
 		LLFastTimer timer(FTM_PANEL_SETUP);
 
@@ -965,3 +966,89 @@ boost::signals2::connection LLPanel::setVisibleCallback( const commit_signal_t::
 
 	return mVisibleSignal->connect(cb);
 }
+
+static LLFastTimer::DeclareTimer FTM_BUILD_PANELS("Build Panels");
+
+//-----------------------------------------------------------------------------
+// buildPanel()
+//-----------------------------------------------------------------------------
+BOOL LLPanel::buildPanel(LLPanel* panelp, const std::string& filename, LLXMLNodePtr output_node, const LLPanel::Params& default_params)
+{
+	LLFastTimer timer(FTM_BUILD_PANELS);
+	BOOL didPost = FALSE;
+	LLXMLNodePtr root;
+
+	//if exporting, only load the language being exported, 
+	//instead of layering localized version on top of english
+	if (output_node)
+	{	
+		if (!LLUICtrlFactory::getLocalizedXMLNode(filename, root))
+		{
+			llwarns << "Couldn't parse panel from: " << LLUI::getLocalizedSkinPath() + gDirUtilp->getDirDelimiter() + filename  << llendl;
+			return didPost;
+		}
+	}
+	else if (!LLUICtrlFactory::getLayeredXMLNode(filename, root))
+	{
+		llwarns << "Couldn't parse panel from: " << LLUI::getSkinPath() + gDirUtilp->getDirDelimiter() + filename << llendl;
+		return didPost;
+	}
+
+	// root must be called panel
+	if( !root->hasName("panel" ) )
+	{
+		llwarns << "Root node should be named panel in : " << filename << llendl;
+		return didPost;
+	}
+
+	lldebugs << "Building panel " << filename << llendl;
+
+	LLUICtrlFactory::instance().pushFileName(filename);
+	{
+		if (!panelp->getFactoryMap().empty())
+		{
+			sFactoryStack.push_back(&panelp->getFactoryMap());
+		}
+		
+		 // for local registry callbacks; define in constructor, referenced in XUI or postBuild
+		panelp->getCommitCallbackRegistrar().pushScope();
+		panelp->getEnableCallbackRegistrar().pushScope();
+		
+		didPost = panelp->initPanelXML(root, NULL, output_node, default_params);
+
+		panelp->getCommitCallbackRegistrar().popScope();
+		panelp->getEnableCallbackRegistrar().popScope();
+		
+		panelp->setXMLFilename(filename);
+
+		if (!panelp->getFactoryMap().empty())
+		{
+			sFactoryStack.pop_back();
+		}
+	}
+	LLUICtrlFactory::instance().popFileName();
+	return didPost;
+}
+
+//-----------------------------------------------------------------------------
+// createFactoryPanel()
+//-----------------------------------------------------------------------------
+LLPanel* LLPanel::createFactoryPanel(const std::string& name)
+{
+	std::deque<const LLCallbackMap::map_t*>::iterator itor;
+	for (itor = sFactoryStack.begin(); itor != sFactoryStack.end(); ++itor)
+	{
+		const LLCallbackMap::map_t* factory_map = *itor;
+
+		// Look up this panel's name in the map.
+		LLCallbackMap::map_const_iter_t iter = factory_map->find( name );
+		if (iter != factory_map->end())
+		{
+			// Use the factory to create the panel, instead of using a default LLPanel.
+			LLPanel *ret = (LLPanel*) iter->second.mCallback( iter->second.mData );
+			return ret;
+		}
+	}
+	LLPanel::Params panel_p;
+	return LLUICtrlFactory::create<LLPanel>(panel_p);
+}
\ No newline at end of file
diff --git a/indra/llui/llpanel.h b/indra/llui/llpanel.h
index 784054cd86..6fc8ca204f 100644
--- a/indra/llui/llpanel.h
+++ b/indra/llui/llpanel.h
@@ -110,7 +110,10 @@ protected:
 	LLPanel(const LLPanel::Params& params = getDefaultParams());
 	
 public:
-// 	LLPanel(const std::string& name, const LLRect& rect = LLRect(), BOOL bordered = TRUE);
+	static 	BOOL buildPanel(LLPanel* panelp, const std::string &filename, LLXMLNodePtr output_node = NULL, const LLPanel::Params&default_params = getDefaultParams());
+
+	static LLPanel* createFactoryPanel(const std::string& name);
+
 	/*virtual*/ ~LLPanel();
 
 	// LLView interface
@@ -163,7 +166,7 @@ public:
 	EnableCallbackRegistry::ScopedRegistrar& getEnableCallbackRegistrar() { return mEnableCallbackRegistrar; }
 	
 	void initFromParams(const Params& p);
-	BOOL initPanelXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr output_node = NULL);
+	BOOL initPanelXML(	LLXMLNodePtr node, LLView *parent, LLXMLNodePtr output_node, const LLPanel::Params& default_params);
 	
 	bool hasString(const std::string& name);
 	std::string getString(const std::string& name, const LLStringUtil::format_map_t& args) const;
@@ -283,6 +286,8 @@ private:
 	// for setting the xml filename when building panel in context dependent cases
 	std::string		mXMLFilename;
 
+	typedef std::deque<const LLCallbackMap::map_t*> factory_stack_t;
+	static factory_stack_t	sFactoryStack;
 }; // end class LLPanel
 
 // Build time optimization, generate once in .cpp file
@@ -291,4 +296,57 @@ extern template class LLPanel* LLView::getChild<class LLPanel>(
 	const std::string& name, BOOL recurse) const;
 #endif
 
+typedef boost::function<LLPanel* (void)> LLPanelClassCreatorFunc;
+
+// local static instance for registering a particular panel class
+
+class LLRegisterPanelClass
+:	public LLSingleton< LLRegisterPanelClass >
+{
+public:
+	// reigister with either the provided builder, or the generic templated builder
+	void addPanelClass(const std::string& tag,LLPanelClassCreatorFunc func)
+	{
+		mPanelClassesNames[tag] = func;
+	}
+
+	LLPanel* createPanelClass(const std::string& tag)
+	{
+		param_name_map_t::iterator iT =  mPanelClassesNames.find(tag);
+		if(iT == mPanelClassesNames.end())
+			return 0;
+		return iT->second();
+	}
+	template<typename T>
+	static T* defaultPanelClassBuilder()
+	{
+		T* pT = new T();
+		return pT;
+	}
+
+private:
+	typedef std::map< std::string, LLPanelClassCreatorFunc> param_name_map_t;
+	
+	param_name_map_t mPanelClassesNames;
+};
+
+
+// local static instance for registering a particular panel class
+template<typename T>
+class LLRegisterPanelClassWrapper
+:	public LLRegisterPanelClass
+{
+public:
+	// reigister with either the provided builder, or the generic templated builder
+	LLRegisterPanelClassWrapper(const std::string& tag);
+};
+
+
+template<typename T>
+LLRegisterPanelClassWrapper<T>::LLRegisterPanelClassWrapper(const std::string& tag) 
+{
+	LLRegisterPanelClass::instance().addPanelClass(tag,&LLRegisterPanelClass::defaultPanelClassBuilder<T>);
+}
+
+
 #endif
diff --git a/indra/llui/lltextbase.h b/indra/llui/lltextbase.h
index db010d1cf6..2314ece6df 100644
--- a/indra/llui/lltextbase.h
+++ b/indra/llui/lltextbase.h
@@ -241,6 +241,7 @@ class LLTextBase
 public:
 	friend class LLTextSegment;
 	friend class LLNormalTextSegment;
+	friend class LLUICtrlFactory;
 
 	struct LineSpacingParams : public LLInitParam::Choice<LineSpacingParams>
 	{
diff --git a/indra/llui/lluictrlfactory.cpp b/indra/llui/lluictrlfactory.cpp
index c5bd6c7fce..913c8bdb7d 100644
--- a/indra/llui/lluictrlfactory.cpp
+++ b/indra/llui/lluictrlfactory.cpp
@@ -218,7 +218,7 @@ bool LLUICtrlFactory::buildFloater(LLFloater* floaterp, const std::string& filen
 	{
 		if (!floaterp->getFactoryMap().empty())
 		{
-			mFactoryStack.push_front(&floaterp->getFactoryMap());
+			LLPanel::sFactoryStack.push_front(&floaterp->getFactoryMap());
 		}
 
 		 // for local registry callbacks; define in constructor, referenced in XUI or postBuild
@@ -234,7 +234,7 @@ bool LLUICtrlFactory::buildFloater(LLFloater* floaterp, const std::string& filen
 		
 		if (!floaterp->getFactoryMap().empty())
 		{
-			mFactoryStack.pop_front();
+			LLPanel::sFactoryStack.pop_front();
 		}
 	}
 	popFileName();
@@ -250,69 +250,6 @@ S32 LLUICtrlFactory::saveToXML(LLView* viewp, const std::string& filename)
 	return 0;
 }
 
-static LLFastTimer::DeclareTimer FTM_BUILD_PANELS("Build Panels");
-
-//-----------------------------------------------------------------------------
-// buildPanel()
-//-----------------------------------------------------------------------------
-BOOL LLUICtrlFactory::buildPanel(LLPanel* panelp, const std::string& filename, LLXMLNodePtr output_node)
-{
-	LLFastTimer timer(FTM_BUILD_PANELS);
-	BOOL didPost = FALSE;
-	LLXMLNodePtr root;
-
-	//if exporting, only load the language being exported, 
-	//instead of layering localized version on top of english
-	if (output_node)
-	{	
-		if (!LLUICtrlFactory::getLocalizedXMLNode(filename, root))
-		{
-			llwarns << "Couldn't parse panel from: " << LLUI::getLocalizedSkinPath() + gDirUtilp->getDirDelimiter() + filename  << llendl;
-			return didPost;
-		}
-	}
-	else if (!LLUICtrlFactory::getLayeredXMLNode(filename, root))
-	{
-		llwarns << "Couldn't parse panel from: " << LLUI::getSkinPath() + gDirUtilp->getDirDelimiter() + filename << llendl;
-		return didPost;
-	}
-
-	// root must be called panel
-	if( !root->hasName("panel" ) )
-	{
-		llwarns << "Root node should be named panel in : " << filename << llendl;
-		return didPost;
-	}
-
-	lldebugs << "Building panel " << filename << llendl;
-
-	pushFileName(filename);
-	{
-		if (!panelp->getFactoryMap().empty())
-		{
-			mFactoryStack.push_front(&panelp->getFactoryMap());
-		}
-		
-		 // for local registry callbacks; define in constructor, referenced in XUI or postBuild
-		panelp->getCommitCallbackRegistrar().pushScope();
-		panelp->getEnableCallbackRegistrar().pushScope();
-		
-		didPost = panelp->initPanelXML(root, NULL, output_node);
-
-		panelp->getCommitCallbackRegistrar().popScope();
-		panelp->getEnableCallbackRegistrar().popScope();
-		
-		panelp->setXMLFilename(filename);
-
-		if (!panelp->getFactoryMap().empty())
-		{
-			mFactoryStack.pop_front();
-		}
-	}
-	popFileName();
-	return didPost;
-}
-
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 
@@ -344,29 +281,6 @@ LLView *LLUICtrlFactory::createFromXML(LLXMLNodePtr node, LLView* parent, const
 	return view;
 }
 
-//-----------------------------------------------------------------------------
-// createFactoryPanel()
-//-----------------------------------------------------------------------------
-LLPanel* LLUICtrlFactory::createFactoryPanel(const std::string& name)
-{
-	std::deque<const LLCallbackMap::map_t*>::iterator itor;
-	for (itor = mFactoryStack.begin(); itor != mFactoryStack.end(); ++itor)
-	{
-		const LLCallbackMap::map_t* factory_map = *itor;
-
-		// Look up this panel's name in the map.
-		LLCallbackMap::map_const_iter_t iter = factory_map->find( name );
-		if (iter != factory_map->end())
-		{
-			// Use the factory to create the panel, instead of using a default LLPanel.
-			LLPanel *ret = (LLPanel*) iter->second.mCallback( iter->second.mData );
-			return ret;
-		}
-	}
-	LLPanel::Params panel_p;
-	return create<LLPanel>(panel_p);
-}
-
 std::string LLUICtrlFactory::getCurFileName() 
 { 
 	return mFileNames.empty() ? "" : gDirUtilp->getWorkingDir() + gDirUtilp->getDirDelimiter() + mFileNames.back(); 
@@ -383,36 +297,6 @@ void LLUICtrlFactory::popFileName()
 	mFileNames.pop_back(); 
 }
 
-
-//-----------------------------------------------------------------------------
-
-//static
-BOOL LLUICtrlFactory::getAttributeColor(LLXMLNodePtr node, const std::string& name, LLColor4& color)
-{
-	std::string colorstring;
-	BOOL res = node->getAttributeString(name.c_str(), colorstring);
-	if (res)
-	{
-		if (LLUIColorTable::instance().colorExists(colorstring))
-		{
-			color.setVec(LLUIColorTable::instance().getColor(colorstring));
-		}
-		else
-		{
-			res = FALSE;
-		}
-	}
-	if (!res)
-	{
-		res = LLColor4::parseColor(colorstring, &color);
-	}	
-	if (!res)
-	{
-		res = node->getAttributeColor(name.c_str(), color);
-	}
-	return res;
-}
-
 //static
 void LLUICtrlFactory::setCtrlParent(LLView* view, LLView* parent, S32 tab_group)
 {
@@ -428,28 +312,22 @@ std::string LLUICtrlFactory::findSkinnedFilename(const std::string& filename)
 	return gDirUtilp->findSkinnedFilename(LLUI::getSkinPath(), filename);
 }
 
-void LLUICtrlFactory::pushFactoryFunctions(const LLCallbackMap::map_t* map)
-{
-	mFactoryStack.push_back(map);
-}
-
-void LLUICtrlFactory::popFactoryFunctions()
-{
-	if (!mFactoryStack.empty())
-	{
-		mFactoryStack.pop_back();
-	}
-}
-
 //static 
 void LLUICtrlFactory::copyName(LLXMLNodePtr src, LLXMLNodePtr dest)
 {
 	dest->setName(src->getName()->mString);
 }
 
+template<typename T>
+const LLInitParam::BaseBlock& get_empty_param_block()
+{
+	static typename T::Params params;
+	return params;
+}
+
 // adds a widget and its param block to various registries
 //static 
-void LLUICtrlFactory::registerWidget(const std::type_info* widget_type, const std::type_info* param_block_type, dummy_widget_creator_func_t creator_func, const std::string& tag)
+void LLUICtrlFactory::registerWidget(const std::type_info* widget_type, const std::type_info* param_block_type, const std::string& tag)
 {
 	// associate parameter block type with template .xml file
 	std::string* existing_tag = LLWidgetNameRegistry::instance().getValue(param_block_type);
@@ -469,17 +347,9 @@ void LLUICtrlFactory::registerWidget(const std::type_info* widget_type, const st
 		}
 	}
 	LLWidgetNameRegistry::instance().defaultRegistrar().add(param_block_type, tag);
-	// associate widget type with factory function
-	LLDefaultWidgetRegistry::instance().defaultRegistrar().add(widget_type, creator_func);
 	//FIXME: comment this in when working on schema generation
 	//LLWidgetTypeRegistry::instance().defaultRegistrar().add(tag, widget_type);
-	//LLDefaultParamBlockRegistry::instance().defaultRegistrar().add(widget_type, &getEmptyParamBlock<T>);
-}
-
-//static
-dummy_widget_creator_func_t* LLUICtrlFactory::getDefaultWidgetFunc(const std::type_info* widget_type)
-{
-	return LLDefaultWidgetRegistry::instance().getValue(widget_type);
+	//LLDefaultParamBlockRegistry::instance().defaultRegistrar().add(widget_type, &get_empty_param_block<T>);
 }
 
 //static 
diff --git a/indra/llui/lluictrlfactory.h b/indra/llui/lluictrlfactory.h
index dc43b311a7..c4d3aa38d8 100644
--- a/indra/llui/lluictrlfactory.h
+++ b/indra/llui/lluictrlfactory.h
@@ -33,24 +33,14 @@
 #ifndef LLUICTRLFACTORY_H
 #define LLUICTRLFACTORY_H
 
-#include "llcallbackmap.h"
+#include "llfasttimer.h"
 #include "llinitparam.h"
 #include "llregistry.h"
-#include "v4color.h"
-#include "llfasttimer.h"
-
 #include "llxuiparser.h"
 
-#include <boost/function.hpp>
-#include <iosfwd>
-#include <stack>
-#include <set>
-
-class LLPanel;
 class LLFloater;
 class LLView;
 
-
 // sort functor for typeid maps
 struct LLCompareTypeID
 {
@@ -91,12 +81,6 @@ class LLWidgetNameRegistry
 :	public LLRegistrySingleton<const std::type_info*, std::string, LLWidgetNameRegistry , LLCompareTypeID>
 {};
 
-// lookup factory functions for default widget instances by widget type
-typedef LLView* (*dummy_widget_creator_func_t)(const std::string&);
-class LLDefaultWidgetRegistry
-:	public LLRegistrySingleton<const std::type_info*, dummy_widget_creator_func_t, LLDefaultWidgetRegistry, LLCompareTypeID>
-{};
-
 // lookup function for generating empty param block by widget type
 // this is used for schema generation
 //typedef const LLInitParam::BaseBlock& (*empty_param_block_func_t)();
@@ -164,23 +148,16 @@ public:
 	}
 
 	bool buildFloater(LLFloater* floaterp, const std::string &filename, LLXMLNodePtr output_node);
-	BOOL buildPanel(LLPanel* panelp, const std::string &filename, LLXMLNodePtr output_node = NULL);
 
 	// Does what you want for LLFloaters and LLPanels
 	// Returns 0 on success
 	S32 saveToXML(LLView* viewp, const std::string& filename);
 
+	// filename tracking for debugging info
 	std::string getCurFileName();
 	void pushFileName(const std::string& name);
 	void popFileName();
 
-	static BOOL getAttributeColor(LLXMLNodePtr node, const std::string& name, LLColor4& color);
-
-	LLPanel* createFactoryPanel(const std::string& name);
-
-	void pushFactoryFunctions(const LLCallbackMap::map_t* map);
-	void popFactoryFunctions();
-
 	template<typename T>
 	static T* createWidget(const typename T::Params& params, LLView* parent = NULL)
 	{
@@ -192,12 +169,10 @@ public:
 			//return NULL;
 		}
 
-		{
-			LLFastTimer timer(FTM_WIDGET_CONSTRUCTION);
+		{ LLFastTimer _(FTM_WIDGET_CONSTRUCTION);
 			widget = new T(params);	
 		}
-		{
-			LLFastTimer timer(FTM_INIT_FROM_PARAMS);
+		{ LLFastTimer _(FTM_INIT_FROM_PARAMS);
 			widget->initFromParams(params);
 		}
 
@@ -272,17 +247,9 @@ fail:
 	template<class T>
 	static T* getDefaultWidget(const std::string& name)
 	{
-		dummy_widget_creator_func_t* dummy_func = getDefaultWidgetFunc(&typeid(T));
-		return dummy_func ? dynamic_cast<T*>((*dummy_func)(name)) : NULL;
-	}
-
-	template <class T> 
-	static LLView* createDefaultWidget(const std::string& name) 
-	{
-		typename T::Params params;
-		params.name(name);
-		
-		return create<T>(params);
+		T::Params widget_params;
+		widget_params.name = name;
+		return create<T>(widget_params);
 	}
 
 	static void copyName(LLXMLNodePtr src, LLXMLNodePtr dest);
@@ -335,12 +302,9 @@ fail:
 	static void loadWidgetTemplate(const std::string& widget_tag, LLInitParam::BaseBlock& block);
 
 	// helper function for adding widget type info to various registries
-	static void registerWidget(const std::type_info* widget_type, const std::type_info* param_block_type, dummy_widget_creator_func_t creator_func, const std::string& tag);
+	static void registerWidget(const std::type_info* widget_type, const std::type_info* param_block_type, const std::string& tag);
 
 private:
-	// return default widget instance factory func for a given type
-	static dummy_widget_creator_func_t* getDefaultWidgetFunc(const std::type_info* widget_type);
-
 	static const std::string* getWidgetTag(const std::type_info* widget_type);
 
 	// this exists to get around dependency on llview
@@ -349,20 +313,10 @@ private:
 	// Avoid directly using LLUI and LLDir in the template code
 	static std::string findSkinnedFilename(const std::string& filename);
 
-	typedef std::deque<const LLCallbackMap::map_t*> factory_stack_t;
-	factory_stack_t					mFactoryStack;
-
-	LLPanel*		mDummyPanel;
+	class LLPanel*		mDummyPanel;
 	std::vector<std::string>	mFileNames;
 };
 
-template<typename T>
-const LLInitParam::BaseBlock& getEmptyParamBlock()
-{
-	static typename T::Params params;
-	return params;
-}
-
 // this is here to make gcc happy with reference to LLUICtrlFactory
 template<typename DERIVED>
 template<typename T> 
@@ -370,7 +324,7 @@ LLChildRegistry<DERIVED>::Register<T>::Register(const char* tag, LLWidgetCreator
 :	LLChildRegistry<DERIVED>::StaticRegistrar(tag, func.empty() ? (LLWidgetCreatorFunc)&LLUICtrlFactory::defaultBuilder<T> : func)
 {
 	// add this widget to various registries
-	LLUICtrlFactory::instance().registerWidget(&typeid(T), &typeid(typename T::Params), &LLUICtrlFactory::createDefaultWidget<T>, tag);
+	LLUICtrlFactory::instance().registerWidget(&typeid(T), &typeid(typename T::Params), tag);
 	
 	// since registry_t depends on T, do this in line here
 	// TODO: uncomment this for schema generation
@@ -378,58 +332,4 @@ LLChildRegistry<DERIVED>::Register<T>::Register(const char* tag, LLWidgetCreator
 	//LLChildRegistryRegistry::instance().defaultRegistrar().add(&typeid(T), registry_t::instance());
 }
 
-
-typedef boost::function<LLPanel* (void)> LLPanelClassCreatorFunc;
-
-// local static instance for registering a particular panel class
-
-class LLRegisterPanelClass
-:	public LLSingleton< LLRegisterPanelClass >
-{
-public:
-	// reigister with either the provided builder, or the generic templated builder
-	void addPanelClass(const std::string& tag,LLPanelClassCreatorFunc func)
-	{
-		mPanelClassesNames[tag] = func;
-	}
-
-	LLPanel* createPanelClass(const std::string& tag)
-	{
-		param_name_map_t::iterator iT =  mPanelClassesNames.find(tag);
-		if(iT == mPanelClassesNames.end())
-			return 0;
-		return iT->second();
-	}
-	template<typename T>
-	static T* defaultPanelClassBuilder()
-	{
-		T* pT = new T();
-		return pT;
-	}
-
-private:
-	typedef std::map< std::string, LLPanelClassCreatorFunc> param_name_map_t;
-	
-	param_name_map_t mPanelClassesNames;
-};
-
-
-// local static instance for registering a particular panel class
-template<typename T>
-class LLRegisterPanelClassWrapper
-:	public LLRegisterPanelClass
-{
-public:
-	// reigister with either the provided builder, or the generic templated builder
-	LLRegisterPanelClassWrapper(const std::string& tag);
-};
-
-
-template<typename T>
-LLRegisterPanelClassWrapper<T>::LLRegisterPanelClassWrapper(const std::string& tag) 
-{
-	LLRegisterPanelClass::instance().addPanelClass(tag,&LLRegisterPanelClass::defaultPanelClassBuilder<T>);
-}
-
-
 #endif //LLUICTRLFACTORY_H
diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp
index 4d3708302b..3ee4a85de0 100644
--- a/indra/llui/llview.cpp
+++ b/indra/llui/llview.cpp
@@ -1698,7 +1698,9 @@ LLView* LLView::getChildView(const std::string& name, BOOL recurse) const
 		child = getDefaultWidget<LLView>(name);
 		if (!child)
 		{
-			 child = LLUICtrlFactory::createDefaultWidget<LLView>(name);
+			LLView::Params view_params;
+			view_params.name = name;
+			child = LLUICtrlFactory::create<LLView>(view_params);
 		}
 	}
 	return child;
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index 70bda3893e..54ab928522 100644
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -200,8 +200,6 @@ LLAgent::LLAgent() :
 	mbFlagsDirty(FALSE),
 	mbFlagsNeedReset(FALSE),
 
-	mbJump(FALSE),
-
 	mAutoPilot(FALSE),
 	mAutoPilotFlyOnStop(FALSE),
 	mAutoPilotTargetGlobal(),
@@ -561,6 +559,9 @@ void LLAgent::toggleFlying()
 {
 	BOOL fly = !gAgent.getFlying();
 
+	gAgent.mMoveTimer.reset();
+	LLFirstUse::notMoving(false);
+
 	gAgent.setFlying( fly );
 	gAgentCamera.resetView();
 }
@@ -2987,12 +2988,6 @@ void LLAgent::processScriptControlChange(LLMessageSystem *msg, void **)
 					total_count++;
 				}
 			}
-		
-			// Any control taken?  If so, might be first time.
-			//if (total_count > 0)
-			//{
-				//LLFirstUse::useOverrideKeys();
-			//}
 		}
 		else
 		{
diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h
index 0185f874f9..6485cd8fd8 100644
--- a/indra/newview/llagent.h
+++ b/indra/newview/llagent.h
@@ -363,14 +363,6 @@ public:
 private:
 	BOOL			mIsBusy;
 
-	//--------------------------------------------------------------------
-	// Jump
-	//--------------------------------------------------------------------
-public:
-	BOOL			getJump() const	{ return mbJump; }
-private:
-	BOOL 			mbJump;
-
 	//--------------------------------------------------------------------
 	// Grab
 	//--------------------------------------------------------------------
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 768be116f6..8e448d53ee 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -367,19 +367,19 @@ bool	create_text_segment_icon_from_url_match(LLUrlMatch* match,LLTextBase* base)
 
 	if(gAgent.isInGroup(match_id, TRUE))
 	{
-		LLGroupIconCtrl::Params icon_params = LLUICtrlFactory::instance().getDefaultParams<LLGroupIconCtrl>();
+		LLGroupIconCtrl::Params icon_params;
 		icon_params.group_id = match_id;
 		icon_params.rect = LLRect(0, 16, 16, 0);
 		icon_params.visible = true;
-		icon = LLUICtrlFactory::instance().createWidget<LLGroupIconCtrl>(icon_params);
+		icon = LLUICtrlFactory::instance().create<LLGroupIconCtrl>(icon_params);
 	}
 	else
 	{
-		LLAvatarIconCtrl::Params icon_params = LLUICtrlFactory::instance().getDefaultParams<LLAvatarIconCtrl>();
+		LLAvatarIconCtrl::Params icon_params;
 		icon_params.avatar_id = match_id;
 		icon_params.rect = LLRect(0, 16, 16, 0);
 		icon_params.visible = true;
-		icon = LLUICtrlFactory::instance().createWidget<LLAvatarIconCtrl>(icon_params);
+		icon = LLUICtrlFactory::instance().create<LLAvatarIconCtrl>(icon_params);
 	}
 
 	LLInlineViewSegment::Params params;
diff --git a/indra/newview/llavatarlist.cpp b/indra/newview/llavatarlist.cpp
index 57e186b6a8..f448816f76 100644
--- a/indra/newview/llavatarlist.cpp
+++ b/indra/newview/llavatarlist.cpp
@@ -498,7 +498,7 @@ LLAvalineListItem::LLAvalineListItem(bool hide_number/* = true*/) : LLAvatarList
 , mIsHideNumber(hide_number)
 {
 	// should not use buildPanel from the base class to ensure LLAvalineListItem::postBuild is called.
-	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_avatar_list_item.xml");
+	buildPanel(this, "panel_avatar_list_item.xml");
 }
 
 BOOL LLAvalineListItem::postBuild()
diff --git a/indra/newview/llavatarlistitem.cpp b/indra/newview/llavatarlistitem.cpp
index eead0c9b3e..18a5d74527 100644
--- a/indra/newview/llavatarlistitem.cpp
+++ b/indra/newview/llavatarlistitem.cpp
@@ -75,7 +75,7 @@ LLAvatarListItem::LLAvatarListItem(bool not_from_ui_factory/* = true*/)
 {
 	if (not_from_ui_factory)
 	{
-		LLUICtrlFactory::getInstance()->buildPanel(this, "panel_avatar_list_item.xml");
+		buildPanel(this, "panel_avatar_list_item.xml");
 	}
 	// *NOTE: mantipov: do not use any member here. They can be uninitialized here in case instance
 	// is created from the UICtrlFactory
diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp
index e0b605a724..310b406bfd 100644
--- a/indra/newview/llbottomtray.cpp
+++ b/indra/newview/llbottomtray.cpp
@@ -112,14 +112,14 @@ public:
 		  mGesturePanel(NULL)
 	{
 		mFactoryMap["chat_bar"] = LLCallbackMap(LLBottomTray::createNearbyChatBar, NULL);
-		LLUICtrlFactory::getInstance()->buildPanel(this, "panel_bottomtray_lite.xml");
+		buildPanel(this, "panel_bottomtray_lite.xml");
 		// Necessary for focus movement among child controls
 		setFocusRoot(TRUE);
 	}
 
 	BOOL postBuild()
 	{
-		mNearbyChatBar = getChild<LLNearbyChatBar>("chat_bar");
+		mNearbyChatBar = findChild<LLNearbyChatBar>("chat_bar");
 		mGesturePanel = getChild<LLPanel>("gesture_panel");
 
 		// Hide "show_nearby_chat" button 
@@ -163,7 +163,7 @@ LLBottomTray::LLBottomTray(const LLSD&)
 
 	mFactoryMap["chat_bar"] = LLCallbackMap(LLBottomTray::createNearbyChatBar, NULL);
 
-	LLUICtrlFactory::getInstance()->buildPanel(this,"panel_bottomtray.xml");
+	buildPanel(this,"panel_bottomtray.xml");
 
 	LLUICtrl::CommitCallbackRegistry::defaultRegistrar().add("CameraPresets.ChangeView", boost::bind(&LLFloaterCamera::onClickCameraItem, _2));
 
@@ -471,8 +471,7 @@ BOOL LLBottomTray::postBuild()
 	mBottomTrayContextMenu =  LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_bottomtray.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
 	gMenuHolder->addChild(mBottomTrayContextMenu);
 
-	mNearbyChatBar = getChild<LLNearbyChatBar>("chat_bar");
-	LLHints::registerHintTarget("nearby_chat_bar", mNearbyChatBar->LLView::getHandle());
+	mNearbyChatBar = findChild<LLNearbyChatBar>("chat_bar");
 
 	mToolbarStack = getChild<LLLayoutStack>("toolbar_stack");
 	mMovementButton = getChild<LLButton>("movement_btn");
diff --git a/indra/newview/llcallfloater.cpp b/indra/newview/llcallfloater.cpp
index a03fe79512..00a343c99c 100644
--- a/indra/newview/llcallfloater.cpp
+++ b/indra/newview/llcallfloater.cpp
@@ -147,7 +147,7 @@ BOOL LLCallFloater::postBuild()
 
 	childSetAction("leave_call_btn", boost::bind(&LLCallFloater::leaveCall, this));
 
-	mNonAvatarCaller = getChild<LLNonAvatarCaller>("non_avatar_caller");
+	mNonAvatarCaller = findChild<LLNonAvatarCaller>("non_avatar_caller");
 	mNonAvatarCaller->setVisible(FALSE);
 
 	LLView *anchor_panel = LLBottomTray::getInstance()->getChild<LLView>("speak_flyout_btn");
diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index 7204e6c39c..b6788b7739 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -107,7 +107,7 @@ public:
 	static LLChatHistoryHeader* createInstance(const std::string& file_name)
 	{
 		LLChatHistoryHeader* pInstance = new LLChatHistoryHeader;
-		LLUICtrlFactory::getInstance()->buildPanel(pInstance, file_name);	
+		buildPanel(pInstance, file_name);	
 		return pInstance;
 	}
 
@@ -402,7 +402,7 @@ protected:
 			return;
 		}
 
-		LLTextBase* name = getChild<LLTextBase>("user_name");
+		LLTextBox* name = getChild<LLTextBox>("user_name");
 		LLRect sticky_rect = name->getRect();
 		S32 icon_x = llmin(sticky_rect.mLeft + name->getTextBoundingRect().getWidth() + 7, sticky_rect.mRight - 3);
 		sInfoCtrl->setOrigin(icon_x, sticky_rect.getCenterY() - sInfoCtrl->getRect().getHeight() / 2 ) ;
diff --git a/indra/newview/llchatitemscontainerctrl.cpp b/indra/newview/llchatitemscontainerctrl.cpp
index 35a244c461..ed4803f87a 100644
--- a/indra/newview/llchatitemscontainerctrl.cpp
+++ b/indra/newview/llchatitemscontainerctrl.cpp
@@ -57,7 +57,7 @@ static const S32 msg_height_pad = 5;
 LLNearbyChatToastPanel* LLNearbyChatToastPanel::createInstance()
 {
 	LLNearbyChatToastPanel* item = new LLNearbyChatToastPanel();
-	LLUICtrlFactory::getInstance()->buildPanel(item, "panel_chat_item.xml");
+	buildPanel(item, "panel_chat_item.xml");
 	item->setFollows(FOLLOWS_NONE);
 	return item;
 }
diff --git a/indra/newview/llfloatercamera.cpp b/indra/newview/llfloatercamera.cpp
index f181872faa..73715e4726 100644
--- a/indra/newview/llfloatercamera.cpp
+++ b/indra/newview/llfloatercamera.cpp
@@ -351,7 +351,7 @@ BOOL LLFloaterCamera::postBuild()
 	setTitleVisible(TRUE); // restore title visibility after chrome applying
 
 	mRotate = getChild<LLJoystickCameraRotate>(ORBIT);
-	mZoom = getChild<LLPanelCameraZoom>(ZOOM);
+	mZoom = findChild<LLPanelCameraZoom>(ZOOM);
 	mTrack = getChild<LLJoystickCameraTrack>(PAN);
 
 	assignButton2Mode(CAMERA_CTRL_MODE_MODES,			"avatarview_btn");
diff --git a/indra/newview/llfloaterinventory.cpp b/indra/newview/llfloaterinventory.cpp
index 4bffd41d29..1e15b86762 100644
--- a/indra/newview/llfloaterinventory.cpp
+++ b/indra/newview/llfloaterinventory.cpp
@@ -60,7 +60,7 @@ LLFloaterInventory::~LLFloaterInventory()
 
 BOOL LLFloaterInventory::postBuild()
 {
-	mPanelMainInventory = getChild<LLPanelMainInventory>("Inventory Panel");
+	mPanelMainInventory = findChild<LLPanelMainInventory>("Inventory Panel");
 	return TRUE;
 }
 
diff --git a/indra/newview/llfloaternotificationsconsole.cpp b/indra/newview/llfloaternotificationsconsole.cpp
index 105d7f9201..9e3422c2b2 100644
--- a/indra/newview/llfloaternotificationsconsole.cpp
+++ b/indra/newview/llfloaternotificationsconsole.cpp
@@ -65,7 +65,7 @@ LLNotificationChannelPanel::LLNotificationChannelPanel(const std::string& channe
 	mChannelRejectsPtr = LLNotificationChannelPtr(
 		LLNotificationChannel::buildChannel(channel_name + "rejects", mChannelPtr->getParentChannelName(),
 											!boost::bind(mChannelPtr->getFilter(), _1)));
-	LLUICtrlFactory::instance().buildPanel(this, "panel_notifications_channel.xml");
+	buildPanel(this, "panel_notifications_channel.xml");
 }
 
 BOOL LLNotificationChannelPanel::postBuild()
diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp
index 8af4955f92..a8af80b952 100644
--- a/indra/newview/llfloaterregioninfo.cpp
+++ b/indra/newview/llfloaterregioninfo.cpp
@@ -180,32 +180,32 @@ BOOL LLFloaterRegionInfo::postBuild()
 	mInfoPanels.push_back(panel);
 	panel->getCommitCallbackRegistrar().add("RegionInfo.ManageTelehub",	boost::bind(&LLPanelRegionInfo::onClickManageTelehub, panel));
 	
-	LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_general.xml");
+	buildPanel(panel, "panel_region_general.xml");
 	mTab->addTabPanel(LLTabContainer::TabPanelParams().panel(panel).select_tab(true));
 
 	panel = new LLPanelRegionDebugInfo;
 	mInfoPanels.push_back(panel);
-	LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_debug.xml");
+	buildPanel(panel, "panel_region_debug.xml");
 	mTab->addTabPanel(panel);
 
 	panel = new LLPanelRegionTextureInfo;
 	mInfoPanels.push_back(panel);
-	LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_texture.xml");
+	buildPanel(panel, "panel_region_texture.xml");
 	mTab->addTabPanel(panel);
 
 	panel = new LLPanelRegionTerrainInfo;
 	mInfoPanels.push_back(panel);
-	LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_terrain.xml");
+	buildPanel(panel, "panel_region_terrain.xml");
 	mTab->addTabPanel(panel);
 
 	panel = new LLPanelEstateInfo;
 	mInfoPanels.push_back(panel);
-	LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_estate.xml");
+	buildPanel(panel, "panel_region_estate.xml");
 	mTab->addTabPanel(panel);
 
 	panel = new LLPanelEstateCovenant;
 	mInfoPanels.push_back(panel);
-	LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_covenant.xml");
+	buildPanel(panel, "panel_region_covenant.xml");
 	mTab->addTabPanel(panel);
 
 	gMessageSystem->setHandlerFunc(
diff --git a/indra/newview/llfloaterscriptlimits.cpp b/indra/newview/llfloaterscriptlimits.cpp
index a77fc4710a..a6f3acd18d 100644
--- a/indra/newview/llfloaterscriptlimits.cpp
+++ b/indra/newview/llfloaterscriptlimits.cpp
@@ -121,7 +121,7 @@ BOOL LLFloaterScriptLimits::postBuild()
 		LLPanelScriptLimitsRegionMemory* panel_memory;
 		panel_memory = new LLPanelScriptLimitsRegionMemory;
 		mInfoPanels.push_back(panel_memory);
-		LLUICtrlFactory::getInstance()->buildPanel(panel_memory, "panel_script_limits_region_memory.xml");
+		buildPanel(panel_memory, "panel_script_limits_region_memory.xml");
 		mTab->addTabPanel(panel_memory);
 	}
 	
@@ -130,7 +130,7 @@ BOOL LLFloaterScriptLimits::postBuild()
 	{
 		LLPanelScriptLimitsAttachment* panel_attachments = new LLPanelScriptLimitsAttachment;
 		mInfoPanels.push_back(panel_attachments);
-		LLUICtrlFactory::getInstance()->buildPanel(panel_attachments, "panel_script_limits_my_avatar.xml");
+		buildPanel(panel_attachments, "panel_script_limits_my_avatar.xml");
 		mTab->addTabPanel(panel_attachments);
 	}
 	
diff --git a/indra/newview/llfloateruipreview.cpp b/indra/newview/llfloateruipreview.cpp
index 41f4580495..d32f809457 100644
--- a/indra/newview/llfloateruipreview.cpp
+++ b/indra/newview/llfloateruipreview.cpp
@@ -891,7 +891,7 @@ void LLFloaterUIPreview::displayFloater(BOOL click, S32 ID, bool save)
 		if (save)
 		{
 			LLXMLNodePtr panel_write = new LLXMLNode();
-			LLUICtrlFactory::getInstance()->buildPanel(panel, path, panel_write);		// build it
+			buildPanel(panel, path, panel_write);		// build it
 			
 			if (!panel_write->isNull())
 			{
@@ -905,7 +905,7 @@ void LLFloaterUIPreview::displayFloater(BOOL click, S32 ID, bool save)
 		}
 		else
 		{
-			LLUICtrlFactory::getInstance()->buildPanel(panel, path);		// build it
+			buildPanel(panel, path);		// build it
 			LLRect new_size = panel->getRect();								// get its rectangle
 			panel->setOrigin(0,0);											// reset its origin point so it's not offset by -left or other XUI attributes
 			(*floaterp)->setTitle(path);									// use the file name as its title, since panels have no guaranteed meaningful name attribute
diff --git a/indra/newview/llgrouplist.cpp b/indra/newview/llgrouplist.cpp
index 125936b9c7..af931810a2 100644
--- a/indra/newview/llgrouplist.cpp
+++ b/indra/newview/llgrouplist.cpp
@@ -289,7 +289,7 @@ mGroupNameBox(NULL),
 mInfoBtn(NULL),
 mGroupID(LLUUID::null)
 {
-	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_group_list_item.xml");
+	buildPanel(this, "panel_group_list_item.xml");
 
 	// Remember group icon width including its padding from the name text box,
 	// so that we can hide and show the icon again later.
diff --git a/indra/newview/llhudview.cpp b/indra/newview/llhudview.cpp
index 261d9f1df7..beb3b4340a 100644
--- a/indra/newview/llhudview.cpp
+++ b/indra/newview/llhudview.cpp
@@ -56,7 +56,7 @@ const S32 HUD_ARROW_SIZE = 32;
 
 LLHUDView::LLHUDView(const LLRect& r)
 {
-	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_hud.xml");
+	buildPanel(this, "panel_hud.xml");
 	setShape(r, true);
 }
 
diff --git a/indra/newview/llimfloatercontainer.cpp b/indra/newview/llimfloatercontainer.cpp
index 9eb11a6ac4..8a84c7a9c9 100644
--- a/indra/newview/llimfloatercontainer.cpp
+++ b/indra/newview/llimfloatercontainer.cpp
@@ -100,9 +100,9 @@ void LLIMFloaterContainer::addFloater(LLFloater* floaterp,
 
 	if(gAgent.isInGroup(session_id, TRUE))
 	{
-		LLGroupIconCtrl::Params icon_params = LLUICtrlFactory::instance().getDefaultParams<LLGroupIconCtrl>();
+		LLGroupIconCtrl::Params icon_params;
 		icon_params.group_id = session_id;
-		icon = LLUICtrlFactory::instance().createWidget<LLGroupIconCtrl>(icon_params);
+		icon = LLUICtrlFactory::instance().create<LLGroupIconCtrl>(icon_params);
 
 		mSessions[session_id] = floaterp;
 		floaterp->mCloseSignal.connect(boost::bind(&LLIMFloaterContainer::onCloseFloater, this, session_id));
@@ -111,9 +111,9 @@ void LLIMFloaterContainer::addFloater(LLFloater* floaterp,
 	{
 		LLUUID avatar_id = LLIMModel::getInstance()->getOtherParticipantID(session_id);
 
-		LLAvatarIconCtrl::Params icon_params = LLUICtrlFactory::instance().getDefaultParams<LLAvatarIconCtrl>();
+		LLAvatarIconCtrl::Params icon_params;
 		icon_params.avatar_id = avatar_id;
-		icon = LLUICtrlFactory::instance().createWidget<LLAvatarIconCtrl>(icon_params);
+		icon = LLUICtrlFactory::instance().create<LLAvatarIconCtrl>(icon_params);
 
 		mSessions[session_id] = floaterp;
 		floaterp->mCloseSignal.connect(boost::bind(&LLIMFloaterContainer::onCloseFloater, this, session_id));
diff --git a/indra/newview/llinventorylistitem.cpp b/indra/newview/llinventorylistitem.cpp
index b1f5b3be2f..b3d658b0cf 100644
--- a/indra/newview/llinventorylistitem.cpp
+++ b/indra/newview/llinventorylistitem.cpp
@@ -307,7 +307,9 @@ LLPanelInventoryListItemBase::LLPanelInventoryListItemBase(LLViewerInventoryItem
 	}
 	else
 	{
-		mIconCtrl = dynamic_cast<LLIconCtrl*>(LLUICtrlFactory::createDefaultWidget<LLIconCtrl>("item_icon"));
+		LLIconCtrl::Params icon_params;
+		icon_params.name = "item_icon";
+		mIconCtrl = LLUICtrlFactory::create<LLIconCtrl>(icon_params);
 	}
 
 	LLTextBox::Params text_params(params.item_name);
@@ -320,7 +322,9 @@ LLPanelInventoryListItemBase::LLPanelInventoryListItemBase(LLViewerInventoryItem
 	}
 	else
 	{
-		mTitleCtrl = dynamic_cast<LLTextBox*>(LLUICtrlFactory::createDefaultWidget<LLTextBox>("item_title"));
+		LLTextBox::Params text_aprams;
+		text_params.name = "item_title";
+		mTitleCtrl = LLUICtrlFactory::create<LLTextBox>(text_params);
 	}
 }
 
diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp
index 148a5786cb..680f937e83 100644
--- a/indra/newview/llmoveview.cpp
+++ b/indra/newview/llmoveview.cpp
@@ -703,7 +703,7 @@ void LLPanelStandStopFlying::reparent(LLFloaterMove* move_view)
 LLPanelStandStopFlying* LLPanelStandStopFlying::getStandStopFlyingPanel()
 {
 	LLPanelStandStopFlying* panel = new LLPanelStandStopFlying();
-	LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_stand_stop_flying.xml");
+	buildPanel(panel, "panel_stand_stop_flying.xml");
 
 	panel->setVisible(FALSE);
 	//LLUI::getRootView()->addChild(panel);
@@ -716,6 +716,8 @@ LLPanelStandStopFlying* LLPanelStandStopFlying::getStandStopFlyingPanel()
 
 void LLPanelStandStopFlying::onStandButtonClick()
 {
+	LLFirstUse::sit(false);
+
 	LLSelectMgr::getInstance()->deselectAllForStandingUp();
 	gAgent.setControlFlags(AGENT_CONTROL_STAND_UP);
 
diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp
index 18ef3e19ee..e53103237c 100644
--- a/indra/newview/llnavigationbar.cpp
+++ b/indra/newview/llnavigationbar.cpp
@@ -278,7 +278,7 @@ LLNavigationBar::LLNavigationBar()
 	mPurgeTPHistoryItems(false),
 	mSaveToLocationHistory(false)
 {
-	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_navigation_bar.xml");
+	buildPanel(this, "panel_navigation_bar.xml");
 
 	// set a listener function for LoginComplete event
 	LLAppViewer::instance()->setOnLoginCompletedCallback(boost::bind(&LLNavigationBar::handleLoginComplete, this));
diff --git a/indra/newview/llnearbychathandler.cpp b/indra/newview/llnearbychathandler.cpp
index 4011552112..024929430c 100644
--- a/indra/newview/llnearbychathandler.cpp
+++ b/indra/newview/llnearbychathandler.cpp
@@ -39,6 +39,7 @@
 #include "llchatitemscontainerctrl.h"
 #include "llfirstuse.h"
 #include "llfloaterscriptdebug.h"
+#include "llhints.h"
 #include "llnearbychat.h"
 #include "llrecentpeople.h"
 
@@ -62,7 +63,13 @@ LLToastPanelBase* createToastPanel()
 class LLNearbyChatScreenChannel: public LLScreenChannelBase
 {
 public:
-	LLNearbyChatScreenChannel(const LLUUID& id):LLScreenChannelBase(id) { mStopProcessing = false;};
+	typedef std::vector<LLHandle<LLToast> > toast_vec_t;
+	typedef std::list<LLHandle<LLToast> > toast_list_t;
+
+	LLNearbyChatScreenChannel(const LLUUID& id):LLScreenChannelBase(id) 
+	{
+		mStopProcessing = false;
+	}
 
 	void addNotification	(LLSD& notification);
 	void arrangeToasts		();
@@ -82,15 +89,12 @@ public:
 	}
 
 	// hide all toasts from screen, but not remove them from a channel
-	virtual void		hideToastsFromScreen() 
-	{
-	};
 	// removes all toasts from a channel
 	virtual void		removeToastsFromChannel() 
 	{
-		for(std::vector<LLToast*>::iterator it = m_active_toasts.begin(); it != m_active_toasts.end(); ++it)
+		for(toast_vec_t::iterator it = m_active_toasts.begin(); it != m_active_toasts.end(); ++it)
 		{
-			addToToastPool((*it));
+			addToToastPool(it->get());
 		}
 		m_active_toasts.clear();
 	};
@@ -105,10 +109,11 @@ public:
 protected:
 	void	addToToastPool(LLToast* toast)
 	{
+		if (!toast) return;
 		toast->setVisible(FALSE);
 		toast->stopTimer();
 		toast->setIsHidden(true);
-		m_toast_pool.push_back(toast);
+		m_toast_pool.push_back(toast->getHandle());
 	}
 
 	void	createOverflowToast(S32 bottom, F32 timer);
@@ -117,8 +122,8 @@ protected:
 
 	bool	createPoolToast();
 	
-	std::vector<LLToast*> m_active_toasts;
-	std::list<LLToast*> m_toast_pool;
+	toast_vec_t m_active_toasts;
+	toast_list_t m_toast_pool;
 
 	bool	mStopProcessing;
 };
@@ -139,7 +144,7 @@ void LLNearbyChatScreenChannel::onToastFade(LLToast* toast)
 	if(!toast)
 		return;
 
-	std::vector<LLToast*>::iterator pos = std::find(m_active_toasts.begin(),m_active_toasts.end(),toast);
+	toast_vec_t::iterator pos = std::find(m_active_toasts.begin(),m_active_toasts.end(),toast->getHandle());
 	if(pos!=m_active_toasts.end())
 		m_active_toasts.erase(pos);
 
@@ -166,7 +171,7 @@ bool	LLNearbyChatScreenChannel::createPoolToast()
 	toast->setOnFadeCallback(boost::bind(&LLNearbyChatScreenChannel::onToastFade, this, _1));
 	toast->setOnToastDestroyedCallback(boost::bind(&LLNearbyChatScreenChannel::onToastDestroyed, this, _1));
 	
-	m_toast_pool.push_back(toast);
+	m_toast_pool.push_back(toast->getHandle());
 	return true;
 }
 
@@ -184,17 +189,20 @@ void LLNearbyChatScreenChannel::addNotification(LLSD& notification)
 	{
 		LLUUID fromID = notification["from_id"].asUUID();		// agent id or object id
 		std::string from = notification["from"].asString();
-		LLToast* toast = m_active_toasts[0];
-		LLNearbyChatToastPanel* panel = dynamic_cast<LLNearbyChatToastPanel*>(toast->getPanel());
-
-		if(panel && panel->messageID() == fromID && panel->getFromName() == from && panel->canAddText())
+		LLToast* toast = m_active_toasts[0].get();
+		if (toast)
 		{
-			panel->addMessage(notification);
-			toast->reshapeToPanel();
-			toast->resetTimer();
-	
-			arrangeToasts();
-			return;
+			LLNearbyChatToastPanel* panel = dynamic_cast<LLNearbyChatToastPanel*>(toast->getPanel());
+
+			if(panel && panel->messageID() == fromID && panel->getFromName() == from && panel->canAddText())
+			{
+				panel->addMessage(notification);
+				toast->reshapeToPanel();
+				toast->resetTimer();
+		
+				arrangeToasts();
+				return;
+			}
 		}
 	}
 	
@@ -222,7 +230,7 @@ void LLNearbyChatScreenChannel::addNotification(LLSD& notification)
 
 	//take 1st element from pool, (re)initialize it, put it in active toasts
 
-	LLToast* toast = m_toast_pool.back();
+	LLToast* toast = m_toast_pool.back().get();
 
 	m_toast_pool.pop_back();
 
@@ -235,25 +243,36 @@ void LLNearbyChatScreenChannel::addNotification(LLSD& notification)
 	toast->reshapeToPanel();
 	toast->resetTimer();
 	
-	m_active_toasts.push_back(toast);
+	m_active_toasts.push_back(toast->getHandle());
 
 	arrangeToasts();
 }
 
 void LLNearbyChatScreenChannel::arrangeToasts()
 {
-	if(m_active_toasts.size() == 0 || isHovering())
-		return;
-
-	hideToastsFromScreen();
+	if(!isHovering())
+	{
+		showToastsBottom();
+	}
 
-	showToastsBottom();
+	if (m_active_toasts.empty())
+	{
+		LLHints::registerHintTarget("incoming_chat", LLHandle<LLView>());
+	}
+	else
+	{
+		LLToast* toast = m_active_toasts.front().get();
+		if (toast)
+		{
+			LLHints::registerHintTarget("incoming_chat", m_active_toasts.front().get()->LLView::getHandle());
+		}
+	}
 }
 
-int sort_toasts_predicate(LLToast* first,LLToast* second)
+int sort_toasts_predicate(LLHandle<LLToast> first, LLHandle<LLToast> second)
 {
-	F32 v1 = first->getTimer()->getEventTimer().getElapsedTimeF32();
-	F32 v2 = second->getTimer()->getEventTimer().getElapsedTimeF32();
+	F32 v1 = first.get()->getTimer()->getEventTimer().getElapsedTimeF32();
+	F32 v2 = second.get()->getTimer()->getEventTimer().getElapsedTimeF32();
 	return v1 < v2;
 }
 
@@ -271,20 +290,22 @@ void LLNearbyChatScreenChannel::showToastsBottom()
 
 	//calc max visible item and hide other toasts.
 
-	for(std::vector<LLToast*>::iterator it = m_active_toasts.begin(); it != m_active_toasts.end(); ++it)
+	for(toast_vec_t::iterator it = m_active_toasts.begin(); it != m_active_toasts.end(); ++it)
 	{
-		S32 toast_top = bottom + (*it)->getRect().getHeight() + margin;
+		LLToast* toast = it->get();
+		if (!toast) continue;
+
+		S32 toast_top = bottom + toast->getRect().getHeight() + margin;
 
 		if(toast_top > gFloaterView->getRect().getHeight())
 		{
 			while(it!=m_active_toasts.end())
 			{
-				addToToastPool((*it));
+				addToToastPool(it->get());
 				it=m_active_toasts.erase(it);
 			}
 			break;
 		}
-		LLToast* toast = (*it);
 
 		toast_rect = toast->getRect();
 		toast_rect.setLeftTopAndSize(getRect().mLeft , bottom + toast_rect.getHeight(), toast_rect.getWidth() ,toast_rect.getHeight());
@@ -295,13 +316,16 @@ void LLNearbyChatScreenChannel::showToastsBottom()
 	
 	// use reverse order to provide correct z-order and avoid toast blinking
 	
-	for(std::vector<LLToast*>::reverse_iterator it = m_active_toasts.rbegin(); it != m_active_toasts.rend(); ++it)
+	for(toast_vec_t::reverse_iterator it = m_active_toasts.rbegin(); it != m_active_toasts.rend(); ++it)
 	{
-		LLToast* toast = (*it);
-		toast->setIsHidden(false);
-		toast->setVisible(TRUE);
-
+		LLToast* toast = it->get();
+		if (toast)
+		{
+			toast->setIsHidden(false);
+			toast->setVisible(TRUE);
+		}
 	}
+
 }
 
 void LLNearbyChatScreenChannel::reshape			(S32 width, S32 height, BOOL called_from_parent)
@@ -347,14 +371,6 @@ void LLNearbyChatHandler::processChat(const LLChat& chat_msg, const LLSD &args)
 {
 	if(chat_msg.mMuted == TRUE)
 		return;
-	if(chat_msg.mSourceType == CHAT_SOURCE_AGENT && chat_msg.mFromID.notNull())
-	{
-        LLRecentPeople::instance().add(chat_msg.mFromID);
-		if (chat_msg.mFromID != gAgentID)
-		{
-	 		LLFirstUse::otherAvatarChatFirst();
-		}
-	}
 
 	if(chat_msg.mText.empty())
 		return;//don't process empty messages
@@ -457,7 +473,13 @@ void LLNearbyChatHandler::processChat(const LLChat& chat_msg, const LLSD &args)
 		notification["font_size"] = (S32)LLViewerChat::getChatFontSize() ;
 		channel->addNotification(notification);	
 	}
-	
+
+	if(chat_msg.mSourceType == CHAT_SOURCE_AGENT 
+		&& chat_msg.mFromID.notNull() 
+		&& chat_msg.mFromID != gAgentID)
+	{
+ 		LLFirstUse::otherAvatarChatFirst();
+	}
 }
 
 void LLNearbyChatHandler::onDeleteToast(LLToast* toast)
diff --git a/indra/newview/llpanelavatartag.cpp b/indra/newview/llpanelavatartag.cpp
index 7563cc7f61..0ffb10b18b 100644
--- a/indra/newview/llpanelavatartag.cpp
+++ b/indra/newview/llpanelavatartag.cpp
@@ -43,7 +43,7 @@ LLPanelAvatarTag::LLPanelAvatarTag(const LLUUID& key, const std::string im_time)
 	, mAvatarId(LLUUID::null)
 //	, mFadeTimer()
 {
-	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_avatar_tag.xml");
+	buildPanel(this, "panel_avatar_tag.xml");
 	setLeftButtonClickCallback(boost::bind(&LLPanelAvatarTag::onClick, this));
 	setAvatarId(key);
 	setTime(im_time);
diff --git a/indra/newview/llpanelclassified.cpp b/indra/newview/llpanelclassified.cpp
index 09b718f8b8..4d3d54ed15 100644
--- a/indra/newview/llpanelclassified.cpp
+++ b/indra/newview/llpanelclassified.cpp
@@ -144,7 +144,7 @@ LLPanelClassifiedInfo::~LLPanelClassifiedInfo()
 LLPanelClassifiedInfo* LLPanelClassifiedInfo::create()
 {
 	LLPanelClassifiedInfo* panel = new LLPanelClassifiedInfo();
-	LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_classified_info.xml");
+	buildPanel(panel, "panel_classified_info.xml");
 	return panel;
 }
 
@@ -617,7 +617,7 @@ LLPanelClassifiedEdit::~LLPanelClassifiedEdit()
 LLPanelClassifiedEdit* LLPanelClassifiedEdit::create()
 {
 	LLPanelClassifiedEdit* panel = new LLPanelClassifiedEdit();
-	LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_edit_classified.xml");
+	buildPanel(panel, "panel_edit_classified.xml");
 	return panel;
 }
 
diff --git a/indra/newview/llpanelgenerictip.cpp b/indra/newview/llpanelgenerictip.cpp
index 5a71f7f315..709ed33ed1 100644
--- a/indra/newview/llpanelgenerictip.cpp
+++ b/indra/newview/llpanelgenerictip.cpp
@@ -42,7 +42,7 @@ LLPanelGenericTip::LLPanelGenericTip(
 		const LLNotificationPtr& notification) :
 		LLPanelTipToast(notification)
 {
-	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_generic_tip.xml");
+	buildPanel(this, "panel_generic_tip.xml");
 
 	getChild<LLUICtrl>("message")->setValue(notification->getMessage());
 
diff --git a/indra/newview/llpanelgroupinvite.cpp b/indra/newview/llpanelgroupinvite.cpp
index 11d3768a3d..b610fa9899 100644
--- a/indra/newview/llpanelgroupinvite.cpp
+++ b/indra/newview/llpanelgroupinvite.cpp
@@ -375,7 +375,7 @@ LLPanelGroupInvite::LLPanelGroupInvite(const LLUUID& group_id)
 	  mPendingUpdate(FALSE)
 {
 	// Pass on construction of this panel to the control factory.
-	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_group_invite.xml");
+	buildPanel(this, "panel_group_invite.xml");
 }
 
 LLPanelGroupInvite::~LLPanelGroupInvite()
diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp
index 6f47fc60b0..9ad39d568c 100644
--- a/indra/newview/llpanellandmarks.cpp
+++ b/indra/newview/llpanellandmarks.cpp
@@ -202,7 +202,7 @@ LLLandmarksPanel::LLLandmarksPanel()
 	mInventoryObserver = new LLLandmarksPanelObserver(this);
 	gInventory.addObserver(mInventoryObserver);
 
-	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_landmarks.xml");
+	buildPanel(this, "panel_landmarks.xml");
 }
 
 LLLandmarksPanel::~LLLandmarksPanel()
diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp
index 58ed01896a..6b71e37337 100644
--- a/indra/newview/llpanellogin.cpp
+++ b/indra/newview/llpanellogin.cpp
@@ -193,7 +193,7 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
 	// Logo
 	mLogoImage = LLUI::getUIImage("startup_logo");
 
-	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_login.xml");
+	buildPanel(this, "panel_login.xml");
 	
 #if USE_VIEWER_AUTH
 	//leave room for the login menu bar
diff --git a/indra/newview/llpanelme.cpp b/indra/newview/llpanelme.cpp
index 017f6de63b..389fe8edbf 100644
--- a/indra/newview/llpanelme.cpp
+++ b/indra/newview/llpanelme.cpp
@@ -168,7 +168,7 @@ void LLPanelMe::onCancelClicked()
 LLPanelMyProfileEdit::LLPanelMyProfileEdit() 
  : LLPanelMyProfile()
 {
-	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_edit_profile.xml");
+	buildPanel(this, "panel_edit_profile.xml");
 
 	setAvatarId(gAgent.getID());
 }
diff --git a/indra/newview/llpanelmediasettingsgeneral.cpp b/indra/newview/llpanelmediasettingsgeneral.cpp
index 7a61872bc7..54703d3cdc 100644
--- a/indra/newview/llpanelmediasettingsgeneral.cpp
+++ b/indra/newview/llpanelmediasettingsgeneral.cpp
@@ -80,7 +80,7 @@ LLPanelMediaSettingsGeneral::LLPanelMediaSettingsGeneral() :
 	mMediaEditable(false)
 {
 	// build dialog from XML
-	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_media_settings_general.xml");
+	buildPanel(this, "panel_media_settings_general.xml");
 }
 
 ////////////////////////////////////////////////////////////////////////////////
diff --git a/indra/newview/llpanelmediasettingspermissions.cpp b/indra/newview/llpanelmediasettingspermissions.cpp
index 5effba515b..389003dc45 100644
--- a/indra/newview/llpanelmediasettingspermissions.cpp
+++ b/indra/newview/llpanelmediasettingspermissions.cpp
@@ -65,7 +65,7 @@ LLPanelMediaSettingsPermissions::LLPanelMediaSettingsPermissions() :
     mPermsWorldControl( 0 )
 {
     // build dialog from XML
-    LLUICtrlFactory::getInstance()->buildPanel(this, "panel_media_settings_permissions.xml");
+    buildPanel(this, "panel_media_settings_permissions.xml");
 }
 
 ////////////////////////////////////////////////////////////////////////////////
diff --git a/indra/newview/llpanelmediasettingssecurity.cpp b/indra/newview/llpanelmediasettingssecurity.cpp
index 1b1346c41a..502ba179d3 100644
--- a/indra/newview/llpanelmediasettingssecurity.cpp
+++ b/indra/newview/llpanelmediasettingssecurity.cpp
@@ -59,7 +59,7 @@ LLPanelMediaSettingsSecurity::LLPanelMediaSettingsSecurity() :
 	mCommitCallbackRegistrar.add("Media.whitelistDelete",	boost::bind(&LLPanelMediaSettingsSecurity::onBtnDel, this));	
 
 	// build dialog from XML
-	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_media_settings_security.xml");
+	buildPanel(this, "panel_media_settings_security.xml");
 }
 
 ////////////////////////////////////////////////////////////////////////////////
diff --git a/indra/newview/llpanelnearbymedia.cpp b/indra/newview/llpanelnearbymedia.cpp
index 7f4609b83e..e477d71712 100644
--- a/indra/newview/llpanelnearbymedia.cpp
+++ b/indra/newview/llpanelnearbymedia.cpp
@@ -102,7 +102,7 @@ LLPanelNearByMedia::LLPanelNearByMedia()
 	mCommitCallbackRegistrar.add("SelectedMediaCtrl.Zoom",		boost::bind(&LLPanelNearByMedia::onClickSelectedMediaZoom, this));
 	mCommitCallbackRegistrar.add("SelectedMediaCtrl.Unzoom",	boost::bind(&LLPanelNearByMedia::onClickSelectedMediaUnzoom, this));
 	
-	LLUICtrlFactory::instance().buildPanel(this, "panel_nearby_media.xml");
+	buildPanel(this, "panel_nearby_media.xml");
 }
 
 LLPanelNearByMedia::~LLPanelNearByMedia()
diff --git a/indra/newview/llpanelonlinestatus.cpp b/indra/newview/llpanelonlinestatus.cpp
index 7de4e8e49d..43c3ed782d 100644
--- a/indra/newview/llpanelonlinestatus.cpp
+++ b/indra/newview/llpanelonlinestatus.cpp
@@ -41,7 +41,7 @@ LLPanelOnlineStatus::LLPanelOnlineStatus(
 	LLPanelTipToast(notification)
 {
 
-	LLUICtrlFactory::getInstance()->buildPanel(this,
+	buildPanel(this,
 			"panel_online_status_toast.xml");
 
 
diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp
index cfd31b6829..81bd6b5414 100644
--- a/indra/newview/llpaneloutfitedit.cpp
+++ b/indra/newview/llpaneloutfitedit.cpp
@@ -491,7 +491,7 @@ BOOL LLPanelOutfitEdit::postBuild()
 
 	setVisibleCallback(boost::bind(&LLPanelOutfitEdit::onVisibilityChange, this, _2));
 
-	mCOFWearables = getChild<LLCOFWearables>("cof_wearables_list");
+	mCOFWearables = findChild<LLCOFWearables>("cof_wearables_list");
 	mCOFWearables->setCommitCallback(boost::bind(&LLPanelOutfitEdit::filterWearablesBySelectedItem, this));
 
 	mCOFWearables->getCOFCallbacks().mAddWearable = boost::bind(&LLPanelOutfitEdit::onAddWearableClicked, this);
diff --git a/indra/newview/llpaneloutfitsinventory.cpp b/indra/newview/llpaneloutfitsinventory.cpp
index 16ef7998b3..3c33824cd3 100644
--- a/indra/newview/llpaneloutfitsinventory.cpp
+++ b/indra/newview/llpaneloutfitsinventory.cpp
@@ -307,10 +307,10 @@ bool LLPanelOutfitsInventory::isActionEnabled(const LLSD& userdata)
 
 void LLPanelOutfitsInventory::initTabPanels()
 {
-	mCurrentOutfitPanel = getChild<LLPanelWearing>(COF_TAB_NAME);
+	mCurrentOutfitPanel = findChild<LLPanelWearing>(COF_TAB_NAME);
 	mCurrentOutfitPanel->setSelectionChangeCallback(boost::bind(&LLPanelOutfitsInventory::updateVerbs, this));
 
-	mMyOutfitsPanel = getChild<LLOutfitsList>(OUTFITS_TAB_NAME);
+	mMyOutfitsPanel = findChild<LLOutfitsList>(OUTFITS_TAB_NAME);
 	mMyOutfitsPanel->setSelectionChangeCallback(boost::bind(&LLPanelOutfitsInventory::updateVerbs, this));
 
 	mAppearanceTabs = getChild<LLTabContainer>("appearance_tabs");
diff --git a/indra/newview/llpanelpick.cpp b/indra/newview/llpanelpick.cpp
index 54eb21422e..0417c65f7a 100644
--- a/indra/newview/llpanelpick.cpp
+++ b/indra/newview/llpanelpick.cpp
@@ -80,7 +80,7 @@
 LLPanelPickInfo* LLPanelPickInfo::create()
 {
 	LLPanelPickInfo* panel = new LLPanelPickInfo();
-	LLUICtrlFactory::getInstance()->buildPanel(panel, XML_PANEL_PICK_INFO);
+	buildPanel(panel, XML_PANEL_PICK_INFO);
 	return panel;
 }
 
@@ -350,7 +350,7 @@ void LLPanelPickInfo::onClickBack()
 LLPanelPickEdit* LLPanelPickEdit::create()
 {
 	LLPanelPickEdit* panel = new LLPanelPickEdit();
-	LLUICtrlFactory::getInstance()->buildPanel(panel, XML_PANEL_EDIT_PICK);
+	buildPanel(panel, XML_PANEL_EDIT_PICK);
 	return panel;
 }
 
diff --git a/indra/newview/llpanelpicks.cpp b/indra/newview/llpanelpicks.cpp
index 65254e50b4..653f3726a9 100644
--- a/indra/newview/llpanelpicks.cpp
+++ b/indra/newview/llpanelpicks.cpp
@@ -1045,7 +1045,7 @@ LLPickItem::LLPickItem()
 , mSnapshotID(LLUUID::null)
 , mNeedData(true)
 {
-	LLUICtrlFactory::getInstance()->buildPanel(this,"panel_pick_list_item.xml");
+	buildPanel(this,"panel_pick_list_item.xml");
 }
 
 LLPickItem::~LLPickItem()
@@ -1175,7 +1175,7 @@ LLClassifiedItem::LLClassifiedItem(const LLUUID& avatar_id, const LLUUID& classi
  , mAvatarId(avatar_id)
  , mClassifiedId(classified_id)
 {
-	LLUICtrlFactory::getInstance()->buildPanel(this,"panel_classifieds_list_item.xml");
+	buildPanel(this,"panel_classifieds_list_item.xml");
 
 	LLAvatarPropertiesProcessor::getInstance()->addObserver(getAvatarId(), this);
 	LLAvatarPropertiesProcessor::getInstance()->sendClassifiedInfoRequest(getClassifiedId());
diff --git a/indra/newview/llpanelplaces.cpp b/indra/newview/llpanelplaces.cpp
index c8a9176d92..83e674ee92 100644
--- a/indra/newview/llpanelplaces.cpp
+++ b/indra/newview/llpanelplaces.cpp
@@ -252,7 +252,7 @@ LLPanelPlaces::LLPanelPlaces()
 	LLViewerParcelMgr::getInstance()->addAgentParcelChangedCallback(
 			boost::bind(&LLPanelPlaces::updateVerbs, this));
 
-	//LLUICtrlFactory::getInstance()->buildPanel(this, "panel_places.xml"); // Called from LLRegisterPanelClass::defaultPanelClassBuilder()
+	//buildPanel(this, "panel_places.xml"); // Called from LLRegisterPanelClass::defaultPanelClassBuilder()
 }
 
 LLPanelPlaces::~LLPanelPlaces()
@@ -327,8 +327,8 @@ BOOL LLPanelPlaces::postBuild()
 		mFilterEditor->setCommitCallback(boost::bind(&LLPanelPlaces::onFilterEdit, this, _2, false));
 	}
 
-	mPlaceProfile = getChild<LLPanelPlaceProfile>("panel_place_profile");
-	mLandmarkInfo = getChild<LLPanelLandmarkInfo>("panel_landmark_info");
+	mPlaceProfile = findChild<LLPanelPlaceProfile>("panel_place_profile");
+	mLandmarkInfo = findChild<LLPanelLandmarkInfo>("panel_landmark_info");
 	if (!mPlaceProfile || !mLandmarkInfo)
 		return FALSE;
 
diff --git a/indra/newview/llpanelprimmediacontrols.cpp b/indra/newview/llpanelprimmediacontrols.cpp
index 583b41aa57..68522ffac3 100644
--- a/indra/newview/llpanelprimmediacontrols.cpp
+++ b/indra/newview/llpanelprimmediacontrols.cpp
@@ -119,7 +119,7 @@ LLPanelPrimMediaControls::LLPanelPrimMediaControls() :
 	mCommitCallbackRegistrar.add("MediaCtrl.SkipBack",		boost::bind(&LLPanelPrimMediaControls::onClickSkipBack, this));
 	mCommitCallbackRegistrar.add("MediaCtrl.SkipForward",	boost::bind(&LLPanelPrimMediaControls::onClickSkipForward, this));
 	
-	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_prim_media_controls.xml");
+	buildPanel(this, "panel_prim_media_controls.xml");
 	mInactivityTimer.reset();
 	mFadeTimer.stop();
 	mCurrentZoom = ZOOM_NONE;
diff --git a/indra/newview/llpanelprofile.cpp b/indra/newview/llpanelprofile.cpp
index 18da8dd48c..272622fcf7 100644
--- a/indra/newview/llpanelprofile.cpp
+++ b/indra/newview/llpanelprofile.cpp
@@ -133,11 +133,11 @@ BOOL LLPanelProfile::postBuild()
 
 	getTabCtrl()->setCommitCallback(boost::bind(&LLPanelProfile::onTabSelected, this, _2));
 
-	LLPanelPicks* panel_picks = getChild<LLPanelPicks>(PANEL_PICKS);
+	LLPanelPicks* panel_picks = findChild<LLPanelPicks>(PANEL_PICKS);
 	panel_picks->setProfilePanel(this);
 
 	getTabContainer()[PANEL_PICKS] = panel_picks;
-	getTabContainer()[PANEL_PROFILE] = getChild<LLPanelAvatarProfile>(PANEL_PROFILE);
+	getTabContainer()[PANEL_PROFILE] = findChild<LLPanelAvatarProfile>(PANEL_PROFILE);
 
 	return TRUE;
 }
diff --git a/indra/newview/llpanelprofileview.cpp b/indra/newview/llpanelprofileview.cpp
index d59e694be6..56a211091c 100644
--- a/indra/newview/llpanelprofileview.cpp
+++ b/indra/newview/llpanelprofileview.cpp
@@ -120,7 +120,7 @@ BOOL LLPanelProfileView::postBuild()
 {
 	LLPanelProfile::postBuild();
 
-	getTabContainer()[PANEL_NOTES] = getChild<LLPanelAvatarNotes>(PANEL_NOTES);
+	getTabContainer()[PANEL_NOTES] = findChild<LLPanelAvatarNotes>(PANEL_NOTES);
 	
 	//*TODO remove this, according to style guide we don't use status combobox
 	getTabContainer()[PANEL_PROFILE]->getChildView("online_me_status_text")->setVisible( FALSE);
diff --git a/indra/newview/llpanelteleporthistory.cpp b/indra/newview/llpanelteleporthistory.cpp
index af58912b38..b398d75feb 100644
--- a/indra/newview/llpanelteleporthistory.cpp
+++ b/indra/newview/llpanelteleporthistory.cpp
@@ -131,7 +131,7 @@ LLTeleportHistoryFlatItem::LLTeleportHistoryFlatItem(S32 index, LLTeleportHistor
 	mRegionName(region_name),
 	mHighlight(hl)
 {
-	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_teleport_history_item.xml");
+	buildPanel(this, "panel_teleport_history_item.xml");
 }
 
 LLTeleportHistoryFlatItem::~LLTeleportHistoryFlatItem()
@@ -382,7 +382,7 @@ LLTeleportHistoryPanel::LLTeleportHistoryPanel()
 		mLastSelectedFlatlList(NULL),
 		mLastSelectedItemIndex(-1)
 {
-	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_teleport_history.xml");
+	buildPanel(this, "panel_teleport_history.xml");
 }
 
 LLTeleportHistoryPanel::~LLTeleportHistoryPanel()
diff --git a/indra/newview/llpaneltopinfobar.cpp b/indra/newview/llpaneltopinfobar.cpp
index e73d1fb7c2..6e69e6d44c 100644
--- a/indra/newview/llpaneltopinfobar.cpp
+++ b/indra/newview/llpaneltopinfobar.cpp
@@ -72,7 +72,7 @@ LLPanelTopInfoBar::LLPanelTopInfoBar(): mParcelChangedObserver(0)
 	LLUICtrl::CommitCallbackRegistry::currentRegistrar()
 			.add("TopInfoBar.Action", boost::bind(&LLPanelTopInfoBar::onContextMenuItemClicked, this, _2));
 
-	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_topinfo_bar.xml");
+	buildPanel(this, "panel_topinfo_bar.xml");
 }
 
 LLPanelTopInfoBar::~LLPanelTopInfoBar()
diff --git a/indra/newview/llpanelvolumepulldown.cpp b/indra/newview/llpanelvolumepulldown.cpp
index 7d70a8a891..a038badb01 100644
--- a/indra/newview/llpanelvolumepulldown.cpp
+++ b/indra/newview/llpanelvolumepulldown.cpp
@@ -60,7 +60,7 @@ LLPanelVolumePulldown::LLPanelVolumePulldown()
 
     mCommitCallbackRegistrar.add("Vol.setControlFalse", boost::bind(&LLPanelVolumePulldown::setControlFalse, this, _2));
 	mCommitCallbackRegistrar.add("Vol.GoAudioPrefs", boost::bind(&LLPanelVolumePulldown::onAdvancedButtonClick, this, _2));
-	LLUICtrlFactory::instance().buildPanel(this, "panel_volume_pulldown.xml");
+	buildPanel(this, "panel_volume_pulldown.xml");
 }
 
 BOOL LLPanelVolumePulldown::postBuild()
diff --git a/indra/newview/llscrollingpanelparam.cpp b/indra/newview/llscrollingpanelparam.cpp
index d715c47631..4c2469909b 100644
--- a/indra/newview/llscrollingpanelparam.cpp
+++ b/indra/newview/llscrollingpanelparam.cpp
@@ -62,7 +62,7 @@ LLScrollingPanelParam::LLScrollingPanelParam( const LLPanel::Params& panel_param
 	  mAllowModify(allow_modify),
 	  mWearable(wearable)
 {
-	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_scrolling_param.xml");
+	buildPanel(this, "panel_scrolling_param.xml");
 
 	// *HACK To avoid hard coding texture position, lets use border's position for texture. 
 	LLViewBorder* left_border = getChild<LLViewBorder>("left_border");
diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp
index f9189bfb22..aa29f6cb26 100644
--- a/indra/newview/llsidepanelinventory.cpp
+++ b/indra/newview/llsidepanelinventory.cpp
@@ -56,7 +56,7 @@ LLSidepanelInventory::LLSidepanelInventory()
 		mPanelMainInventory(NULL)
 {
 
-	//LLUICtrlFactory::getInstance()->buildPanel(this, "panel_inventory.xml"); // Called from LLRegisterPanelClass::defaultPanelClassBuilder()
+	//buildPanel(this, "panel_inventory.xml"); // Called from LLRegisterPanelClass::defaultPanelClassBuilder()
 }
 
 LLSidepanelInventory::~LLSidepanelInventory()
@@ -90,7 +90,7 @@ BOOL LLSidepanelInventory::postBuild()
 		mOverflowBtn = mInventoryPanel->getChild<LLButton>("overflow_btn");
 		mOverflowBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onOverflowButtonClicked, this));
 		
-		mPanelMainInventory = mInventoryPanel->getChild<LLPanelMainInventory>("panel_main_inventory");
+		mPanelMainInventory = mInventoryPanel->findChild<LLPanelMainInventory>("panel_main_inventory");
 		mPanelMainInventory->setSelectCallback(boost::bind(&LLSidepanelInventory::onSelectionChange, this, _1, _2));
 		LLTabContainer* tabs = mPanelMainInventory->getChild<LLTabContainer>("inventory filter tabs");
 		tabs->setCommitCallback(boost::bind(&LLSidepanelInventory::updateVerbs, this));
@@ -108,7 +108,7 @@ BOOL LLSidepanelInventory::postBuild()
 
 	// UI elements from item panel
 	{
-		mItemPanel = getChild<LLSidepanelItemInfo>("sidepanel__item_panel");
+		mItemPanel = findChild<LLSidepanelItemInfo>("sidepanel__item_panel");
 		
 		LLButton* back_btn = mItemPanel->getChild<LLButton>("back_btn");
 		back_btn->setClickedCallback(boost::bind(&LLSidepanelInventory::onBackButtonClicked, this));
@@ -116,7 +116,7 @@ BOOL LLSidepanelInventory::postBuild()
 
 	// UI elements from task panel
 	{
-		mTaskPanel = getChild<LLSidepanelTaskInfo>("sidepanel__task_panel");
+		mTaskPanel = findChild<LLSidepanelTaskInfo>("sidepanel__task_panel");
 		if (mTaskPanel)
 		{
 			LLButton* back_btn = mTaskPanel->getChild<LLButton>("back_btn");
@@ -176,7 +176,7 @@ void LLSidepanelInventory::onShopButtonClicked()
 
 void LLSidepanelInventory::performActionOnSelection(const std::string &action)
 {
-	LLPanelMainInventory *panel_main_inventory = mInventoryPanel->getChild<LLPanelMainInventory>("panel_main_inventory");
+	LLPanelMainInventory *panel_main_inventory = mInventoryPanel->findChild<LLPanelMainInventory>("panel_main_inventory");
 	LLFolderViewItem* current_item = panel_main_inventory->getActivePanel()->getRootFolder()->getCurSelectedItem();
 	if (!current_item)
 	{
@@ -314,7 +314,7 @@ void LLSidepanelInventory::updateVerbs()
 bool LLSidepanelInventory::canShare()
 {
 	LLPanelMainInventory* panel_main_inventory =
-		mInventoryPanel->getChild<LLPanelMainInventory>("panel_main_inventory");
+		mInventoryPanel->findChild<LLPanelMainInventory>("panel_main_inventory");
 
 	LLFolderView* root_folder =
 		panel_main_inventory->getActivePanel()->getRootFolder();
@@ -332,7 +332,7 @@ bool LLSidepanelInventory::canShare()
 
 LLInventoryItem *LLSidepanelInventory::getSelectedItem()
 {
-	LLPanelMainInventory *panel_main_inventory = mInventoryPanel->getChild<LLPanelMainInventory>("panel_main_inventory");
+	LLPanelMainInventory *panel_main_inventory = mInventoryPanel->findChild<LLPanelMainInventory>("panel_main_inventory");
 	LLFolderViewItem* current_item = panel_main_inventory->getActivePanel()->getRootFolder()->getCurSelectedItem();
 	if (!current_item)
 	{
@@ -345,7 +345,7 @@ LLInventoryItem *LLSidepanelInventory::getSelectedItem()
 
 U32 LLSidepanelInventory::getSelectedCount()
 {
-	LLPanelMainInventory *panel_main_inventory = mInventoryPanel->getChild<LLPanelMainInventory>("panel_main_inventory");
+	LLPanelMainInventory *panel_main_inventory = mInventoryPanel->findChild<LLPanelMainInventory>("panel_main_inventory");
 	std::set<LLUUID> selection_list = panel_main_inventory->getActivePanel()->getRootFolder()->getSelectionList();
 	return selection_list.size();
 }
diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp
index 6a081a573e..8d61bb94e1 100644
--- a/indra/newview/llstatusbar.cpp
+++ b/indra/newview/llstatusbar.cpp
@@ -142,7 +142,7 @@ LLStatusBar::LLStatusBar(const LLRect& rect)
 	mBalanceTimer = new LLFrameTimer();
 	mHealthTimer = new LLFrameTimer();
 
-	LLUICtrlFactory::getInstance()->buildPanel(this,"panel_status_bar.xml");
+	buildPanel(this,"panel_status_bar.xml");
 }
 
 LLStatusBar::~LLStatusBar()
diff --git a/indra/newview/llsyswellitem.cpp b/indra/newview/llsyswellitem.cpp
index 1f3d6a582d..79b053da24 100644
--- a/indra/newview/llsyswellitem.cpp
+++ b/indra/newview/llsyswellitem.cpp
@@ -44,7 +44,7 @@ LLSysWellItem::LLSysWellItem(const Params& p) : LLPanel(p),
 												mTitle(NULL),
 												mCloseBtn(NULL)
 {
-	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_sys_well_item.xml");
+	buildPanel(this, "panel_sys_well_item.xml");
 
 	mTitle = getChild<LLTextBox>("title");
 	mCloseBtn = getChild<LLButton>("close_btn");
diff --git a/indra/newview/llsyswellwindow.cpp b/indra/newview/llsyswellwindow.cpp
index 1a8c2b8fc0..89fd22a2a0 100644
--- a/indra/newview/llsyswellwindow.cpp
+++ b/indra/newview/llsyswellwindow.cpp
@@ -255,7 +255,7 @@ LLIMWellWindow::RowPanel::RowPanel(const LLSysWellWindow* parent, const LLUUID&
 		S32 chicletCounter, const std::string& name, const LLUUID& otherParticipantId) :
 		LLPanel(LLPanel::Params()), mChiclet(NULL), mParent(parent)
 {
-	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_activeim_row.xml", NULL);
+	buildPanel(this, "panel_activeim_row.xml", NULL);
 
 	// Choose which of the pre-created chiclets (IM/group) to use.
 	// The other one gets hidden.
@@ -352,7 +352,7 @@ LLIMWellWindow::ObjectRowPanel::ObjectRowPanel(const LLUUID& notification_id, bo
  : LLPanel()
  , mChiclet(NULL)
 {
-	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_active_object_row.xml", NULL);
+	buildPanel(this, "panel_active_object_row.xml", NULL);
 
 	initChiclet(notification_id);
 
diff --git a/indra/newview/lltoast.h b/indra/newview/lltoast.h
index c0da656685..8217aae0f2 100644
--- a/indra/newview/lltoast.h
+++ b/indra/newview/lltoast.h
@@ -194,6 +194,8 @@ public:
 
 	virtual S32	notifyParent(const LLSD& info);
 
+	LLHandle<LLToast> getHandle() { mHandle.bind(this); return mHandle; }
+
 private:
 
 	void onToastMouseEnter();
@@ -206,6 +208,8 @@ private:
 	LLUUID				mSessionID;
 	LLNotificationPtr	mNotification;
 
+	LLRootHandle<LLToast>	mHandle;
+		
 	LLPanel* mWrapperPanel;
 
 	// timer counts a lifetime of a toast
diff --git a/indra/newview/lltoastgroupnotifypanel.cpp b/indra/newview/lltoastgroupnotifypanel.cpp
index 57b80fc792..7c2e68f942 100644
--- a/indra/newview/lltoastgroupnotifypanel.cpp
+++ b/indra/newview/lltoastgroupnotifypanel.cpp
@@ -60,7 +60,7 @@ LLToastGroupNotifyPanel::LLToastGroupNotifyPanel(LLNotificationPtr& notification
 :	LLToastPanel(notification),
 	mInventoryOffer(NULL)
 {
-	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_group_notify.xml");
+	buildPanel(this, "panel_group_notify.xml");
 	const LLSD& payload = notification->getPayload();
 	LLGroupData groupData;
 	if (!gAgent.getGroupData(payload["group_id"].asUUID(),groupData))
diff --git a/indra/newview/lltoastimpanel.cpp b/indra/newview/lltoastimpanel.cpp
index 26d3bd5192..fc01b7f0d5 100644
--- a/indra/newview/lltoastimpanel.cpp
+++ b/indra/newview/lltoastimpanel.cpp
@@ -51,7 +51,7 @@ LLToastIMPanel::LLToastIMPanel(LLToastIMPanel::Params &p) :	LLToastPanel(p.notif
 								mAvatarIcon(NULL), mAvatarName(NULL),
 								mTime(NULL), mMessage(NULL), mGroupIcon(NULL)
 {
-	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_instant_message.xml");
+	buildPanel(this, "panel_instant_message.xml");
 
 	mGroupIcon = getChild<LLGroupIconCtrl>("group_icon");
 	mAvatarIcon = getChild<LLAvatarIconCtrl>("avatar_icon");
diff --git a/indra/newview/lltoastnotifypanel.cpp b/indra/newview/lltoastnotifypanel.cpp
index 38f67720b7..32e12035ee 100644
--- a/indra/newview/lltoastnotifypanel.cpp
+++ b/indra/newview/lltoastnotifypanel.cpp
@@ -67,7 +67,7 @@ mNumButtons(0),
 mAddedDefaultBtn(false),
 mCloseNotificationOnDestroy(true)
 {
-	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_notification.xml");
+	buildPanel(this, "panel_notification.xml");
 	if(rect != LLRect::null)
 	{
 		this->setShape(rect);
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index d8c7eabefb..c5dee710cb 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -1521,7 +1521,7 @@ void LLViewerWindow::initBase()
 	// (But wait to add it as a child of the root view so that it will be in front of the 
 	// other views.)
 	MainPanel* main_view = new MainPanel();
-	LLUICtrlFactory::instance().buildPanel(main_view, "main_view.xml");
+	LLPanel::buildPanel(main_view, "main_view.xml");
 	main_view->setShape(full_window);
 	getRootView()->addChild(main_view);
 
@@ -1529,7 +1529,7 @@ void LLViewerWindow::initBase()
 	mWorldViewPlaceholder = main_view->getChildView("world_view_rect")->getHandle();
 	mNonSideTrayView = main_view->getChildView("non_side_tray_view")->getHandle();
 	mFloaterViewHolder = main_view->getChildView("floater_view_holder")->getHandle();
-	mPopupView = main_view->getChild<LLPopupView>("popup_holder");
+	mPopupView = main_view->findChild<LLPopupView>("popup_holder");
 	mHintHolder = main_view->getChild<LLView>("hint_holder")->getHandle();
 
 	// Constrain floaters to inside the menu and status bar regions.
@@ -1568,7 +1568,7 @@ void LLViewerWindow::initBase()
 	LLAppViewer::instance()->setOnLoginCompletedCallback(boost::bind(&LLFloaterPreference::initBusyResponse));
 
 	// Add the progress bar view (startup view), which overrides everything
-	mProgressView = getRootView()->getChild<LLProgressView>("progress_view");
+	mProgressView = getRootView()->findChild<LLProgressView>("progress_view");
 	setShowProgress(FALSE);
 	setProgressCancelButtonVisible(FALSE);
 
-- 
cgit v1.2.3


From 32e4cda7dc730d505190db3d6658d6dd94bfc28f Mon Sep 17 00:00:00 2001
From: Richard Nelson <none@none>
Date: Mon, 16 Aug 2010 15:01:39 -0700
Subject: made hints only expire when explicitly responded to, not implicitly
 after first seeing them added hint_popup.xml for hint styling

---
 indra/newview/llfirstuse.cpp                       |  60 +++---
 indra/newview/llfirstuse.h                         |   5 +-
 indra/newview/llhints.cpp                          | 234 ++++++++++++---------
 .../newview/skins/default/xui/en/notifications.xml |  13 +-
 indra/newview/skins/default/xui/en/panel_hint.xml  |   9 +-
 .../skins/default/xui/en/widgets/hint_popup.xml    |  19 ++
 6 files changed, 205 insertions(+), 135 deletions(-)
 create mode 100644 indra/newview/skins/default/xui/en/widgets/hint_popup.xml

diff --git a/indra/newview/llfirstuse.cpp b/indra/newview/llfirstuse.cpp
index 15de138c95..038579c0bd 100644
--- a/indra/newview/llfirstuse.cpp
+++ b/indra/newview/llfirstuse.cpp
@@ -48,7 +48,6 @@
 
 // static
 std::set<std::string> LLFirstUse::sConfigVariables;
-std::map<std::string, LLNotificationPtr> LLFirstUse::sNotifications;
 
 // static
 void LLFirstUse::addConfigVariable(const std::string& var)
@@ -78,21 +77,10 @@ void LLFirstUse::resetFirstUse()
 	}
 }
 
-// static
-void LLFirstUse::useOverrideKeys()
-{
-	// Our orientation island uses key overrides to teach vehicle driving
-	// so don't show this message until you get off OI. JC
-	if (!gAgent.inPrelude())
-	{
-		firstUseNotification("FirstOverrideKeys", true, "FirstOverrideKeys");
-	}
-}
-
 // static
 void LLFirstUse::otherAvatarChatFirst(bool enable)
 {
-	firstUseNotification("FirstOtherChatBeforeUser", enable, "HintChat", LLSD(), LLSD().with("target", "nearby_chat_bar").with("direction", "top"));
+	firstUseNotification("FirstOtherChatBeforeUser", enable, "HintChat", LLSD(), LLSD().with("target", "incoming_chat").with("direction", "right"));
 }
 
 // static
@@ -143,24 +131,48 @@ void LLFirstUse::receiveLindens(bool enable)
 //static 
 void LLFirstUse::firstUseNotification(const std::string& control_var, bool enable, const std::string& notification_name, LLSD args, LLSD payload)
 {
-	LLNotificationPtr notif = sNotifications[notification_name];
+	init();
 
 	if (enable)
 	{
-		if (!notif && gWarningSettings.getBOOL(control_var))
+		LL_DEBUGS("LLFirstUse") << "Trigger first use notification " << notification_name << LL_ENDL;
+
+		// if notification doesn't already exist and this notification hasn't been disabled...
+		if (gWarningSettings.getBOOL(control_var))
 		{ // create new notification
-			sNotifications[notification_name] = LLNotifications::instance().add(LLNotification::Params().name(notification_name).substitutions(args).payload(payload));
-			gWarningSettings.setBOOL(control_var, FALSE);
+			LLNotifications::instance().add(LLNotification::Params().name(notification_name).substitutions(args).payload(payload.with("control_var", control_var)));
 		}
 	}	
 	else
-	{ // want to hide notification
-		if (notif)
-		{ // cancel existing notification
-			LLNotifications::instance().cancel(notif);
-			sNotifications.erase(notification_name);
-		}
-		gWarningSettings.setBOOL(control_var, FALSE);
+	{
+		LL_DEBUGS("LLFirstUse") << "Disabling first use notification " << notification_name << LL_ENDL;
+		LLNotifications::instance().cancelByName(notification_name);
+	}
+
+}
+
+// static
+void LLFirstUse::init()
+{
+	static bool initialized = false;
+	if (!initialized)
+	{
+		LLNotifications::instance().getChannel("Hints")->connectChanged(processNotification);
 	}
+	initialized = true;
+}
 
+//static 
+bool LLFirstUse::processNotification(const LLSD& notify)
+{
+	if (notify["sigtype"].asString() == "delete")
+	{
+		LLNotificationPtr notification = LLNotifications::instance().find(notify["id"].asUUID());
+		if (notification)
+		{
+			// disable any future notifications
+			gWarningSettings.setBOOL(notification->getPayload()["control_var"], FALSE);
+		}
+	}
+	return false;
 }
diff --git a/indra/newview/llfirstuse.h b/indra/newview/llfirstuse.h
index 48943cd9ab..9c4ab14006 100644
--- a/indra/newview/llfirstuse.h
+++ b/indra/newview/llfirstuse.h
@@ -90,7 +90,6 @@ public:
 	static void disableFirstUse();
 	static void resetFirstUse();
 
-	static void useOverrideKeys();
 	static void otherAvatarChatFirst(bool enable = true);
 	static void sit(bool enable = true);
 	static void notUsingDestinationGuide(bool enable = true);
@@ -103,7 +102,9 @@ public:
 protected:
 	static void firstUseNotification(const std::string& control_var, bool enable, const std::string& notification_name, LLSD args = LLSD(), LLSD payload = LLSD());
 	static std::set<std::string> sConfigVariables;
-	static std::map<std::string, boost::shared_ptr<LLNotification> > sNotifications;
+
+	static void init();
+	static bool processNotification(const LLSD& notify);
 };
 
 #endif
diff --git a/indra/newview/llhints.cpp b/indra/newview/llhints.cpp
index 14a9871a7d..c4cea86a31 100644
--- a/indra/newview/llhints.cpp
+++ b/indra/newview/llhints.cpp
@@ -63,11 +63,21 @@ public:
 		}
 	};
 
+	struct TargetParams : public LLInitParam::Block<TargetParams>
+	{
+		Mandatory<std::string>	target;
+		Mandatory<EPopupDirection, PopupDirections> direction;
+
+		TargetParams()
+		:	target("target"),
+			direction("direction")
+		{}
+	};
+
 	struct Params : public LLInitParam::Block<Params, LLPanel::Params>
 	{
 		Mandatory<LLNotificationPtr>	notification;
-		Optional<std::string>			target;
-		Optional<EPopupDirection, PopupDirections>	direction;
+		Optional<TargetParams>			target_params;
 		Optional<S32>					distance;
 		Optional<LLUIImage*>			left_arrow,
 										up_arrow,
@@ -81,34 +91,31 @@ public:
 										fade_out_time;
 
 		Params()
-		:	direction("direction", TOP),
-			distance("distance", 24),
-			target("target"),
-			left_arrow("left_arrow", LLUI::getUIImage("hint_arrow_left")),
-			up_arrow("up_arrow", LLUI::getUIImage("hint_arrow_up")),
-			right_arrow("right_arrow", LLUI::getUIImage("hint_arrow_right")),
-			down_arrow("down_arrow", LLUI::getUIImage("hint_arrow_down")),
-			left_arrow_offset("left_arrow_offset", 3),
-			up_arrow_offset("up_arrow_offset", -2),
-			right_arrow_offset("right_arrow_offset", -3),
-			down_arrow_offset("down_arrow_offset", 5),
-			fade_in_time("fade_in_time", 0.2f),
-			fade_out_time("fade_out_time", 0.5f)
+		:	distance("distance"),
+			left_arrow("left_arrow"),
+			up_arrow("up_arrow"),
+			right_arrow("right_arrow"),
+			down_arrow("down_arrow"),
+			left_arrow_offset("left_arrow_offset"),
+			up_arrow_offset("up_arrow_offset"),
+			right_arrow_offset("right_arrow_offset"),
+			down_arrow_offset("down_arrow_offset"),
+			fade_in_time("fade_in_time"),
+			fade_out_time("fade_out_time")
 		{}
 	};
 
 	LLHintPopup(const Params&);
 
-	void setHintTarget(LLHandle<LLView> target) { mTarget = target; }
 	/*virtual*/ BOOL postBuild();
 
-	void onClickClose() { hide(); }
+	void onClickClose() { hide(); LLNotifications::instance().cancel(mNotification); }
 	void draw();
 	void hide() { if(!mHidden) {mHidden = true; mFadeTimer.reset();} }
 
 private:
 	LLNotificationPtr	mNotification;
-	LLHandle<LLView>	mTarget;
+	std::string			mTarget;
 	EPopupDirection		mDirection;
 	S32					mDistance;
 	LLUIImagePtr		mArrowLeft,
@@ -125,14 +132,14 @@ private:
 	bool				mHidden;
 };
 
-
+static LLDefaultChildRegistry::Register<LLHintPopup> r("hint_popup");
 
 
 LLHintPopup::LLHintPopup(const LLHintPopup::Params& p)
 :	mNotification(p.notification),
-	mDirection(p.direction),
+	mDirection(p.target_params.direction),
 	mDistance(p.distance),
-	mTarget(LLHints::getHintTarget(p.target)),
+	mTarget(p.target_params.target),
 	mArrowLeft(p.left_arrow),
 	mArrowUp(p.up_arrow),
 	mArrowRight(p.right_arrow),
@@ -146,7 +153,7 @@ LLHintPopup::LLHintPopup(const LLHintPopup::Params& p)
 	mFadeOutTime(p.fade_out_time),
 	LLPanel(p)
 {
-	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_hint.xml");
+	buildPanel(this, "panel_hint.xml", NULL, p);
 }
 
 BOOL LLHintPopup::postBuild()
@@ -172,80 +179,108 @@ void LLHintPopup::draw()
 		if (alpha == 0.f)
 		{
 			die();
+			return;
 		}
 	}
 	else
 	{
 		alpha = clamp_rescale(mFadeTimer.getElapsedTimeF32(), 0.f, mFadeInTime, 0.f, 1.f);
 	}
-	LLViewDrawContext context(alpha);
-
-	LLView* targetp = mTarget.get();
-	if (!targetp || !targetp->isInVisibleChain()) 
-	{
-		hide();
-	}
-	else
-	{
-		LLRect target_rect;
-		targetp->localRectToOtherView(targetp->getLocalRect(), &target_rect, getParent());
-
-		LLRect my_local_rect = getLocalRect();
-		LLRect my_rect;
-		LLRect arrow_rect;
-		LLUIImagePtr arrow_imagep;
+	
+	{	LLViewDrawContext context(alpha); 
 
-		switch(mDirection)
+		if (mTarget.empty())
 		{
-		case LEFT:
-			my_rect.setCenterAndSize(	target_rect.mLeft - (my_local_rect.getWidth() / 2 + mDistance), 
-										target_rect.getCenterY(), 
-										my_local_rect.getWidth(), 
-										my_local_rect.getHeight());
-			arrow_rect.setCenterAndSize(my_local_rect.mRight + mArrowRight->getWidth() / 2 + mArrowRightOffset,
-										my_local_rect.getCenterY(),
-										mArrowRight->getWidth(), 
-										mArrowRight->getHeight());
-			arrow_imagep = mArrowRight;
-			break;
-		case TOP:
-			my_rect.setCenterAndSize(	target_rect.getCenterX(), 
-										target_rect.mTop + (my_local_rect.getHeight() / 2 + mDistance), 
-										my_local_rect.getWidth(), 
-										my_local_rect.getHeight());
-			arrow_rect.setCenterAndSize(my_local_rect.getCenterX(),
-										my_local_rect.mBottom - mArrowDown->getHeight() / 2 + mArrowDownOffset,
-										mArrowDown->getWidth(), 
-										mArrowDown->getHeight());
-			arrow_imagep = mArrowDown;
-			break;
-		case RIGHT:
-			my_rect.setCenterAndSize(	target_rect.getCenterX(), 
-										target_rect.mTop - (my_local_rect.getHeight() / 2 + mDistance), 
-										my_local_rect.getWidth(), 
-										my_local_rect.getHeight());
-			arrow_rect.setCenterAndSize(my_local_rect.mLeft - mArrowLeft->getWidth() / 2 + mArrowLeftOffset,
-										my_local_rect.getCenterY(),
-										mArrowLeft->getWidth(), 
-										mArrowLeft->getHeight());
-			arrow_imagep = mArrowLeft;
-			break;
-		case BOTTOM:
-			my_rect.setCenterAndSize(	target_rect.getCenterX(), 
-										target_rect.mBottom - (my_local_rect.getHeight() / 2 + mDistance),
-										my_local_rect.getWidth(), 
-										my_local_rect.getHeight());
-			arrow_rect.setCenterAndSize(my_local_rect.getCenterX(),
-										my_local_rect.mTop + mArrowUp->getHeight() / 2 + mArrowUpOffset,
-										mArrowUp->getWidth(), 
-										mArrowUp->getHeight());
-			arrow_imagep = mArrowUp;
-			break;
+			// just draw contents, no arrow, in default position
+			LLPanel::draw();
+		}
+		else 
+		{
+			LLView* targetp = LLHints::getHintTarget(mTarget).get();
+			if (!targetp)
+			{
+				// target widget is no longer valid, go away
+				die();
+			}
+			else if (!targetp->isInVisibleChain()) 
+			{
+				// if target is invisible, don't draw, but keep alive in case widget comes back
+			}
+			else
+			{
+				LLRect target_rect;
+				targetp->localRectToOtherView(targetp->getLocalRect(), &target_rect, getParent());
+
+				LLRect my_local_rect = getLocalRect();
+				LLRect my_rect;
+				LLRect arrow_rect;
+				LLUIImagePtr arrow_imagep;
+
+				switch(mDirection)
+				{
+				case LEFT:
+					my_rect.setCenterAndSize(	target_rect.mLeft - (my_local_rect.getWidth() / 2 + mDistance), 
+												target_rect.getCenterY(), 
+												my_local_rect.getWidth(), 
+												my_local_rect.getHeight());
+					if (mArrowRight)
+					{
+						arrow_rect.setCenterAndSize(my_local_rect.mRight + mArrowRight->getWidth() / 2 + mArrowRightOffset,
+													my_local_rect.getCenterY(),
+													mArrowRight->getWidth(), 
+													mArrowRight->getHeight());
+						arrow_imagep = mArrowRight;
+					}
+					break;
+				case TOP:
+					my_rect.setCenterAndSize(	target_rect.getCenterX(), 
+												target_rect.mTop + (my_local_rect.getHeight() / 2 + mDistance), 
+												my_local_rect.getWidth(), 
+												my_local_rect.getHeight());
+					if (mArrowDown)
+					{
+						arrow_rect.setCenterAndSize(my_local_rect.getCenterX(),
+													my_local_rect.mBottom - mArrowDown->getHeight() / 2 + mArrowDownOffset,
+													mArrowDown->getWidth(), 
+													mArrowDown->getHeight());
+						arrow_imagep = mArrowDown;
+					}
+					break;
+				case RIGHT:
+					my_rect.setCenterAndSize(	target_rect.mRight + (my_local_rect.getWidth() / 2 + mDistance), 
+												target_rect.getCenterY(),
+												my_local_rect.getWidth(), 
+												my_local_rect.getHeight());
+					if (mArrowLeft)
+					{
+						arrow_rect.setCenterAndSize(my_local_rect.mLeft - mArrowLeft->getWidth() / 2 + mArrowLeftOffset,
+													my_local_rect.getCenterY(),
+													mArrowLeft->getWidth(), 
+													mArrowLeft->getHeight());
+						arrow_imagep = mArrowLeft;
+					}
+					break;
+				case BOTTOM:
+					my_rect.setCenterAndSize(	target_rect.getCenterX(), 
+												target_rect.mBottom - (my_local_rect.getHeight() / 2 + mDistance),
+												my_local_rect.getWidth(), 
+												my_local_rect.getHeight());
+					if (mArrowUp)
+					{
+						arrow_rect.setCenterAndSize(my_local_rect.getCenterX(),
+													my_local_rect.mTop + mArrowUp->getHeight() / 2 + mArrowUpOffset,
+													mArrowUp->getWidth(), 
+													mArrowUp->getHeight());
+						arrow_imagep = mArrowUp;
+					}
+					break;
+				}
+				setShape(my_rect);
+				LLPanel::draw();
+
+				if (arrow_imagep) arrow_imagep->draw(arrow_rect, LLColor4(1.f, 1.f, 1.f, alpha));
+			}
 		}
-		setShape(my_rect);
-		LLPanel::draw();
-
-		arrow_imagep->draw(arrow_rect, LLColor4(1.f, 1.f, 1.f, alpha));
 	}
 }
 
@@ -256,20 +291,23 @@ std::map<LLNotificationPtr, class LLHintPopup*> LLHints::sHints;
 //static
 void LLHints::show(LLNotificationPtr hint)
 {
-	LLHintPopup::Params p;
-	LLParamSDParser::instance().readSD(hint->getPayload(), p);
+	LLHintPopup::Params p(LLUICtrlFactory::getDefaultParams<LLHintPopup>());
 
+	LLParamSDParser::instance().readSD(hint->getPayload(), p);
 	p.notification = hint;
 
-	LLHintPopup* popup = new LLHintPopup(p);
-	
-	sHints[hint] = popup;
-
-	LLView* hint_holder = gViewerWindow->getHintHolder();
-	if (hint_holder)
+	if (p.validateBlock())
 	{
-		hint_holder->addChild(popup);
-		popup->centerWithin(hint_holder->getLocalRect());
+		LLHintPopup* popup = new LLHintPopup(p);
+
+		sHints[hint] = popup;
+
+		LLView* hint_holder = gViewerWindow->getHintHolder();
+		if (hint_holder)
+		{
+			hint_holder->addChild(popup);
+			popup->centerWithin(hint_holder->getLocalRect());
+		}
 	}
 }
 
@@ -286,7 +324,7 @@ void LLHints::hide(LLNotificationPtr hint)
 //static
 void LLHints::registerHintTarget(const std::string& name, LLHandle<LLView> target)
 {
-	sTargetRegistry.defaultRegistrar().add(name, target);
+	sTargetRegistry.defaultRegistrar().replace(name, target);
 }
 
 //static 
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 60b0b1e8dc..47bb0fe45b 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -6402,6 +6402,7 @@ Mute everyone?
   label="Chat"
   type="hint">
     To join the conversation, type into the chat field below.
+    <unique/>
   </notification>
 
   <notification
@@ -6409,21 +6410,23 @@ Mute everyone?
   label="Stand"
   type="hint">
     To stand up and exit the sitting position, click the Stand button.
+    <unique/>
   </notification>
-  
+
   <notification
   name="HintDestinationGuide"
   label="Explore the World"
   type="hint">
     The Destination Guide contains thousands of new places to discover. Select a location and choose Teleport to start exploring.
+    <unique/>
   </notification>
-  
+
   <notification
     name="HintSidePanel"
     label="Side Panel"
     type="hint">
     Get quick access to your inventory, outfits, profiles and more in the side panel.
-    <!--<unique/>-->
+    <unique/>
   </notification>
 
   <notification
@@ -6431,7 +6434,7 @@ Mute everyone?
   label="Move"
   type="hint">
     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.
-    <!--<unique/>-->
+    <unique/>
   </notification>
 
   <notification
@@ -6439,6 +6442,7 @@ Mute everyone?
   label="Inventory"
   type="hint">
     Check your inventory to find items. Newest items can be easily found in the Recent tab.
+    <unique/>
   </notification>
 
   <notification
@@ -6446,6 +6450,7 @@ Mute everyone?
   label="You've got Linden Dollars!"
   type="hint">
     Here's your current balance of L$. Click Buy L$ to purchase more Linden Dollars.
+    <unique/>
   </notification>
 
   <global name="UnsupportedCPU">
diff --git a/indra/newview/skins/default/xui/en/panel_hint.xml b/indra/newview/skins/default/xui/en/panel_hint.xml
index 54ea08e5d4..839dbc58f2 100644
--- a/indra/newview/skins/default/xui/en/panel_hint.xml
+++ b/indra/newview/skins/default/xui/en/panel_hint.xml
@@ -1,12 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <panel
- name="hint"
  width="205"
- height="100"
- background_opaque="true"
- background_visible="true"
- layout="topleft" 
- bg_opaque_image="hint_background">
+ height="100">
   <text name="hint_title"
         font="SansSerifMedium" 
         left="8"
@@ -20,7 +15,7 @@
         left="8"
         right="197"
         top="26"
-        bottom="90"
+        bottom="92"
         follows="all" 
         text_color="White"
         wrap="true"/>
diff --git a/indra/newview/skins/default/xui/en/widgets/hint_popup.xml b/indra/newview/skins/default/xui/en/widgets/hint_popup.xml
new file mode 100644
index 0000000000..fbd92f982e
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/widgets/hint_popup.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<hint_popup
+ name="hint"
+ background_opaque="true"
+ background_visible="true"
+ layout="topleft"
+ bg_opaque_image="hint_background"
+ distance="24"
+ left_arrow="hint_arrow_left"
+ up_arrow="hint_arrow_up" 
+ right_arrow="hint_arrow_right"
+ down_arrow="hint_arrow_down"
+ left_arrow_offset="3"
+ up_arrow_offset="-2"
+ right_arrow_offset="-3"
+ down_arrow_offset="5"
+ fade_in_time="0.2"
+ fade_out_time="0.3">
+</hint_popup>
-- 
cgit v1.2.3


From d06500eaddd12f09189b47abfdd6990a652f8b51 Mon Sep 17 00:00:00 2001
From: Richard Nelson <none@none>
Date: Mon, 16 Aug 2010 15:02:24 -0700
Subject: fixed EOL

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

diff --git a/indra/llui/llpanel.cpp b/indra/llui/llpanel.cpp
index bfca0bd45e..f79429e0f6 100644
--- a/indra/llui/llpanel.cpp
+++ b/indra/llui/llpanel.cpp
@@ -1051,4 +1051,4 @@ LLPanel* LLPanel::createFactoryPanel(const std::string& name)
 	}
 	LLPanel::Params panel_p;
 	return LLUICtrlFactory::create<LLPanel>(panel_p);
-}
\ No newline at end of file
+}
-- 
cgit v1.2.3


From 7dce65a5db84988b2cab3d9c977a86c08124701c Mon Sep 17 00:00:00 2001
From: Richard Nelson <richard@lindenlab.com>
Date: Mon, 16 Aug 2010 15:36:56 -0700
Subject: fix for gcc

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

diff --git a/indra/llui/lluictrlfactory.h b/indra/llui/lluictrlfactory.h
index c4d3aa38d8..0b0a235f8f 100644
--- a/indra/llui/lluictrlfactory.h
+++ b/indra/llui/lluictrlfactory.h
@@ -247,7 +247,7 @@ fail:
 	template<class T>
 	static T* getDefaultWidget(const std::string& name)
 	{
-		T::Params widget_params;
+		typename T::Params widget_params;
 		widget_params.name = name;
 		return create<T>(widget_params);
 	}
-- 
cgit v1.2.3


From 124bc854dd7c3dffc044f306cf836a5d6c68bd2e Mon Sep 17 00:00:00 2001
From: Richard Nelson <none@none>
Date: Mon, 16 Aug 2010 17:44:23 -0700
Subject: moved buildFloater out of lluictrlfactory to llfloater.cpp

---
 indra/llui/llfloater.cpp                        | 63 +++++++++++++++++++++++
 indra/llui/llfloater.h                          |  1 +
 indra/llui/llfloaterreg.cpp                     |  2 +-
 indra/llui/llpanel.h                            |  4 +-
 indra/llui/lluictrlfactory.cpp                  | 66 +------------------------
 indra/llui/lluictrlfactory.h                    |  3 --
 indra/llui/llview.h                             | 32 ++++++------
 indra/newview/llcompilequeue.cpp                |  1 -
 indra/newview/llfloaterabout.cpp                |  1 -
 indra/newview/llfloaterauction.cpp              |  1 -
 indra/newview/llfloateravatarpicker.cpp         |  1 -
 indra/newview/llfloateravatartextures.cpp       |  1 -
 indra/newview/llfloaterbeacons.cpp              |  2 -
 indra/newview/llfloaterbuildoptions.cpp         |  1 -
 indra/newview/llfloaterbulkpermission.cpp       |  1 -
 indra/newview/llfloaterbump.cpp                 |  1 -
 indra/newview/llfloaterbuy.cpp                  |  1 -
 indra/newview/llfloaterbuycontents.cpp          |  1 -
 indra/newview/llfloaterbuyland.cpp              |  3 +-
 indra/newview/llfloatercolorpicker.cpp          |  3 --
 indra/newview/llfloaterdaycycle.cpp             |  1 -
 indra/newview/llfloaterenvsettings.cpp          |  1 -
 indra/newview/llfloatergodtools.cpp             |  2 -
 indra/newview/llfloaterhardwaresettings.cpp     |  1 -
 indra/newview/llfloaterhud.cpp                  |  2 -
 indra/newview/llfloaterinspect.cpp              |  1 -
 indra/newview/llfloaterjoystick.cpp             |  2 -
 indra/newview/llfloaterlagmeter.cpp             |  1 -
 indra/newview/llfloaterland.cpp                 |  2 -
 indra/newview/llfloaterlandholdings.cpp         |  1 -
 indra/newview/llfloatermap.cpp                  |  1 -
 indra/newview/llfloatermediabrowser.cpp         |  2 -
 indra/newview/llfloaternotificationsconsole.cpp |  3 --
 indra/newview/llfloateropenobject.cpp           |  1 -
 indra/newview/llfloaterperms.cpp                |  1 -
 indra/newview/llfloaterpostcard.cpp             |  1 -
 indra/newview/llfloaterpostprocess.cpp          |  1 -
 indra/newview/llfloaterpreference.cpp           |  1 -
 indra/newview/llfloaterproperties.cpp           |  2 -
 indra/newview/llfloaterregioninfo.cpp           |  1 -
 indra/newview/llfloaterreporter.cpp             |  1 -
 indra/newview/llfloaterscriptdebug.cpp          |  4 --
 indra/newview/llfloatersettingsdebug.cpp        |  1 -
 indra/newview/llfloatersnapshot.cpp             |  1 -
 indra/newview/llfloatertelehub.cpp              |  1 -
 indra/newview/llfloatertools.cpp                |  1 -
 indra/newview/llfloatertopobjects.cpp           |  1 -
 indra/newview/llfloateruipreview.cpp            |  5 +-
 indra/newview/llfloaterurlentry.cpp             |  2 +-
 indra/newview/llfloatervoicedevicesettings.cpp  |  1 -
 indra/newview/llfloaterwater.cpp                |  1 -
 indra/newview/llfloaterwhitelistentry.cpp       |  1 -
 indra/newview/llfloaterwindlight.cpp            |  1 -
 indra/newview/llfloaterwindowsize.cpp           |  1 -
 indra/newview/llfloaterworldmap.cpp             |  1 -
 indra/newview/llpanelmaininventory.cpp          |  1 -
 indra/newview/llpanelmaininventory.h            |  1 +
 indra/newview/llpreviewanim.cpp                 |  1 -
 indra/newview/llpreviewgesture.cpp              |  3 --
 indra/newview/llpreviewnotecard.cpp             |  1 -
 indra/newview/llpreviewscript.cpp               |  6 +--
 indra/newview/llpreviewsound.cpp                |  1 -
 indra/newview/llpreviewtexture.cpp              |  1 -
 indra/newview/llsidepaneliteminfo.cpp           |  2 -
 indra/newview/lltexturectrl.cpp                 |  1 -
 indra/newview/lltoast.cpp                       |  2 +-
 indra/newview/llviewermenu.cpp                  |  2 +-
 67 files changed, 93 insertions(+), 169 deletions(-)

diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp
index 838f93d3f9..d66b3c1707 100644
--- a/indra/llui/llfloater.cpp
+++ b/indra/llui/llfloater.cpp
@@ -42,6 +42,7 @@
 #include "lluictrlfactory.h"
 #include "llbutton.h"
 #include "llcheckboxctrl.h"
+#include "lldir.h"
 #include "lldraghandle.h"
 #include "llfloaterreg.h"
 #include "llfocusmgr.h"
@@ -2883,3 +2884,65 @@ bool LLFloater::isVisible(const LLFloater* floater)
 {
     return floater && floater->getVisible();
 }
+
+static LLFastTimer::DeclareTimer FTM_BUILD_FLOATERS("Build Floaters");
+
+/* static */
+bool LLFloater::buildFloater(LLFloater* floaterp, const std::string& filename, LLXMLNodePtr output_node)
+{
+	LLFastTimer timer(FTM_BUILD_FLOATERS);
+	LLXMLNodePtr root;
+
+	//if exporting, only load the language being exported, 
+	//instead of layering localized version on top of english
+	if (output_node)
+	{
+		if (!LLUICtrlFactory::getLocalizedXMLNode(filename, root))
+		{
+			llwarns << "Couldn't parse floater from: " << LLUI::getLocalizedSkinPath() + gDirUtilp->getDirDelimiter() + filename << llendl;
+			return false;
+		}
+	}
+	else if (!LLUICtrlFactory::getLayeredXMLNode(filename, root))
+	{
+		llwarns << "Couldn't parse floater from: " << LLUI::getSkinPath() + gDirUtilp->getDirDelimiter() + filename << llendl;
+		return false;
+	}
+	
+	// root must be called floater
+	if( !(root->hasName("floater") || root->hasName("multi_floater")) )
+	{
+		llwarns << "Root node should be named floater in: " << filename << llendl;
+		return false;
+	}
+	
+	bool res = true;
+	
+	lldebugs << "Building floater " << filename << llendl;
+	LLUICtrlFactory::instance().pushFileName(filename);
+	{
+		if (!floaterp->getFactoryMap().empty())
+		{
+			LLPanel::sFactoryStack.push_front(&floaterp->getFactoryMap());
+		}
+
+		 // for local registry callbacks; define in constructor, referenced in XUI or postBuild
+		floaterp->getCommitCallbackRegistrar().pushScope();
+		floaterp->getEnableCallbackRegistrar().pushScope();
+		
+		res = floaterp->initFloaterXML(root, floaterp->getParent(), filename, output_node);
+
+		floaterp->setXMLFilename(filename);
+		
+		floaterp->getCommitCallbackRegistrar().popScope();
+		floaterp->getEnableCallbackRegistrar().popScope();
+		
+		if (!floaterp->getFactoryMap().empty())
+		{
+			LLPanel::sFactoryStack.pop_front();
+		}
+	}
+	LLUICtrlFactory::instance().popFileName();
+	
+	return res;
+}
diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h
index e7d365238b..69762c7723 100644
--- a/indra/llui/llfloater.h
+++ b/indra/llui/llfloater.h
@@ -147,6 +147,7 @@ public:
 
 	// Don't export top/left for rect, only height/width
 	static void setupParamsForExport(Params& p, LLView* parent);
+	static bool buildFloater(LLFloater* floaterp, const std::string &filename, LLXMLNodePtr output_node);
 
 	void initFromParams(const LLFloater::Params& p);
 	bool initFloaterXML(LLXMLNodePtr node, LLView *parent, const std::string& filename, LLXMLNodePtr output_node = NULL);
diff --git a/indra/llui/llfloaterreg.cpp b/indra/llui/llfloaterreg.cpp
index 85f9af126c..2c31854011 100644
--- a/indra/llui/llfloaterreg.cpp
+++ b/indra/llui/llfloaterreg.cpp
@@ -127,7 +127,7 @@ LLFloater* LLFloaterReg::getInstance(const std::string& name, const LLSD& key)
 
 				res = build_func(key);
 				
-				bool success = LLUICtrlFactory::getInstance()->buildFloater(res, xui_file, NULL);
+				bool success = LLFloater::buildFloater(res, xui_file, NULL);
 				if (!success)
 				{
 					llwarns << "Failed to build floater type: '" << name << "'." << llendl;
diff --git a/indra/llui/llpanel.h b/indra/llui/llpanel.h
index 6fc8ca204f..de16d28e27 100644
--- a/indra/llui/llpanel.h
+++ b/indra/llui/llpanel.h
@@ -265,6 +265,8 @@ protected:
 	commit_signal_t* mVisibleSignal;		// Called when visibility changes, passes new visibility as LLSD()
 
 	std::string		mHelpTopic;         // the name of this panel's help topic to display in the Help Viewer
+	typedef std::deque<const LLCallbackMap::map_t*> factory_stack_t;
+	static factory_stack_t	sFactoryStack;
 	
 private:
 	BOOL			mBgVisible;				// any background at all?
@@ -286,8 +288,6 @@ private:
 	// for setting the xml filename when building panel in context dependent cases
 	std::string		mXMLFilename;
 
-	typedef std::deque<const LLCallbackMap::map_t*> factory_stack_t;
-	static factory_stack_t	sFactoryStack;
 }; // end class LLPanel
 
 // Build time optimization, generate once in .cpp file
diff --git a/indra/llui/lluictrlfactory.cpp b/indra/llui/lluictrlfactory.cpp
index 913c8bdb7d..ee700ee6eb 100644
--- a/indra/llui/lluictrlfactory.cpp
+++ b/indra/llui/lluictrlfactory.cpp
@@ -48,7 +48,7 @@
 #include "llquaternion.h"
 
 // this library includes
-#include "llfloater.h"
+#include "llpanel.h"
 
 LLFastTimer::DeclareTimer FTM_WIDGET_CONSTRUCTION("Widget Construction");
 LLFastTimer::DeclareTimer FTM_INIT_FROM_PARAMS("Widget InitFromParams");
@@ -178,70 +178,6 @@ bool LLUICtrlFactory::getLocalizedXMLNode(const std::string &xui_filename, LLXML
 	}
 }
 
-static LLFastTimer::DeclareTimer FTM_BUILD_FLOATERS("Build Floaters");
-
-//-----------------------------------------------------------------------------
-// buildFloater()
-//-----------------------------------------------------------------------------
-bool LLUICtrlFactory::buildFloater(LLFloater* floaterp, const std::string& filename, LLXMLNodePtr output_node)
-{
-	LLFastTimer timer(FTM_BUILD_FLOATERS);
-	LLXMLNodePtr root;
-
-	//if exporting, only load the language being exported, 
-	//instead of layering localized version on top of english
-	if (output_node)
-	{
-		if (!LLUICtrlFactory::getLocalizedXMLNode(filename, root))
-		{
-			llwarns << "Couldn't parse floater from: " << LLUI::getLocalizedSkinPath() + gDirUtilp->getDirDelimiter() + filename << llendl;
-			return false;
-		}
-	}
-	else if (!LLUICtrlFactory::getLayeredXMLNode(filename, root))
-	{
-		llwarns << "Couldn't parse floater from: " << LLUI::getSkinPath() + gDirUtilp->getDirDelimiter() + filename << llendl;
-		return false;
-	}
-	
-	// root must be called floater
-	if( !(root->hasName("floater") || root->hasName("multi_floater")) )
-	{
-		llwarns << "Root node should be named floater in: " << filename << llendl;
-		return false;
-	}
-	
-	bool res = true;
-	
-	lldebugs << "Building floater " << filename << llendl;
-	pushFileName(filename);
-	{
-		if (!floaterp->getFactoryMap().empty())
-		{
-			LLPanel::sFactoryStack.push_front(&floaterp->getFactoryMap());
-		}
-
-		 // for local registry callbacks; define in constructor, referenced in XUI or postBuild
-		floaterp->getCommitCallbackRegistrar().pushScope();
-		floaterp->getEnableCallbackRegistrar().pushScope();
-		
-		res = floaterp->initFloaterXML(root, floaterp->getParent(), filename, output_node);
-
-		floaterp->setXMLFilename(filename);
-		
-		floaterp->getCommitCallbackRegistrar().popScope();
-		floaterp->getEnableCallbackRegistrar().popScope();
-		
-		if (!floaterp->getFactoryMap().empty())
-		{
-			LLPanel::sFactoryStack.pop_front();
-		}
-	}
-	popFileName();
-	
-	return res;
-}
-
 //-----------------------------------------------------------------------------
 // saveToXML()
 //-----------------------------------------------------------------------------
diff --git a/indra/llui/lluictrlfactory.h b/indra/llui/lluictrlfactory.h
index c4d3aa38d8..47f1ba465a 100644
--- a/indra/llui/lluictrlfactory.h
+++ b/indra/llui/lluictrlfactory.h
@@ -38,7 +38,6 @@
 #include "llregistry.h"
 #include "llxuiparser.h"
 
-class LLFloater;
 class LLView;
 
 // sort functor for typeid maps
@@ -147,8 +146,6 @@ public:
 		return ParamDefaults<typename T::Params, 0>::instance().get();
 	}
 
-	bool buildFloater(LLFloater* floaterp, const std::string &filename, LLXMLNodePtr output_node);
-
 	// Does what you want for LLFloaters and LLPanels
 	// Returns 0 on success
 	S32 saveToXML(LLView* viewp, const std::string& filename);
diff --git a/indra/llui/llview.h b/indra/llui/llview.h
index 37f5232f91..0f796fb408 100644
--- a/indra/llui/llview.h
+++ b/indra/llui/llview.h
@@ -134,26 +134,26 @@ public:
 
 		Optional<std::string>		layout;
 		Optional<LLRect>			rect;
+
 		// Historical bottom-left layout used bottom_delta and left_delta
 		// for relative positioning.  New layout "topleft" prefers specifying
 		// based on top edge.
-		Optional<S32>				bottom_delta,	// deprecated
-									top_pad,	// from last bottom to my top
-									top_delta,	// from last top to my top
-									left_pad,	// from last right to my left
-									left_delta;	// from last left to my left
-								
-		// these are nested attributes for LLLayoutPanel
+		Optional<S32>				bottom_delta,	// from last bottom to my bottom
+									top_pad,		// from last bottom to my top
+									top_delta,		// from last top to my top
+									left_pad,		// from last right to my left
+									left_delta;		// from last left to my left
+
 		//FIXME: get parent context involved in parsing traversal
-		Ignored						user_resize,
-									auto_resize,
-									needs_translate,
-									min_width,
-									max_width,
-									xmlns,
-									xmlns_xsi,
-									xsi_schemaLocation,
-									xsi_type;
+		Ignored						user_resize,		// nested attribute for LLLayoutPanel
+									auto_resize,		// nested attribute for LLLayoutPanel
+									needs_translate,	// cue for translation tools
+									min_width,			// nested attribute for LLLayoutPanel
+									max_width,			// nested attribute for LLLayoutPanel
+									xmlns,				// xml namespace
+									xmlns_xsi,			// xml namespace
+									xsi_schemaLocation,	// xml schema
+									xsi_type;			// xml schema type
 
 		Params();
 	};
diff --git a/indra/newview/llcompilequeue.cpp b/indra/newview/llcompilequeue.cpp
index e91bf33502..78544ac144 100644
--- a/indra/newview/llcompilequeue.cpp
+++ b/indra/newview/llcompilequeue.cpp
@@ -95,7 +95,6 @@ LLFloaterScriptQueue::LLFloaterScriptQueue(const LLSD& key) :
 	mDone(false),
 	mMono(false)
 {
-	//Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this,"floater_script_queue.xml", FALSE);
 }
 
 // Destroys the object
diff --git a/indra/newview/llfloaterabout.cpp b/indra/newview/llfloaterabout.cpp
index 4bd3151f2e..d122d8780f 100644
--- a/indra/newview/llfloaterabout.cpp
+++ b/indra/newview/llfloaterabout.cpp
@@ -100,7 +100,6 @@ public:
 LLFloaterAbout::LLFloaterAbout(const LLSD& key) 
 :	LLFloater(key)
 {
-	//LLUICtrlFactory::getInstance()->buildFloater(this, "floater_about.xml");
 	
 }
 
diff --git a/indra/newview/llfloaterauction.cpp b/indra/newview/llfloaterauction.cpp
index b0265e6cd2..837d956c6f 100644
--- a/indra/newview/llfloaterauction.cpp
+++ b/indra/newview/llfloaterauction.cpp
@@ -80,7 +80,6 @@ LLFloaterAuction::LLFloaterAuction(const LLSD& key)
   : LLFloater(key),
 	mParcelID(-1)
 {
-//	LLUICtrlFactory::getInstance()->buildFloater(this, "floater_auction.xml");
 	mCommitCallbackRegistrar.add("ClickSnapshot",	boost::bind(&LLFloaterAuction::onClickSnapshot, this));
 	mCommitCallbackRegistrar.add("ClickSellToAnyone",		boost::bind(&LLFloaterAuction::onClickSellToAnyone, this));
 	mCommitCallbackRegistrar.add("ClickStartAuction",		boost::bind(&LLFloaterAuction::onClickStartAuction, this));
diff --git a/indra/newview/llfloateravatarpicker.cpp b/indra/newview/llfloateravatarpicker.cpp
index 7dbf6ebd5b..01e59bb190 100644
--- a/indra/newview/llfloateravatarpicker.cpp
+++ b/indra/newview/llfloateravatarpicker.cpp
@@ -85,7 +85,6 @@ LLFloaterAvatarPicker::LLFloaterAvatarPicker(const LLSD& key)
 	mNearMeListComplete(FALSE),
 	mCloseOnSelect(FALSE)
 {
-// 	LLUICtrlFactory::getInstance()->buildFloater(this, "floater_avatar_picker.xml");
 	mCommitCallbackRegistrar.add("Refresh.FriendList", boost::bind(&LLFloaterAvatarPicker::populateFriend, this));
 }
 
diff --git a/indra/newview/llfloateravatartextures.cpp b/indra/newview/llfloateravatartextures.cpp
index 847462a6c3..efc020aa2a 100644
--- a/indra/newview/llfloateravatartextures.cpp
+++ b/indra/newview/llfloateravatartextures.cpp
@@ -46,7 +46,6 @@ LLFloaterAvatarTextures::LLFloaterAvatarTextures(const LLSD& id)
   : LLFloater(id),
 	mID(id.asUUID())
 {
-// 	LLUICtrlFactory::getInstance()->buildFloater(this, "floater_avatar_textures.xml");
 }
 
 LLFloaterAvatarTextures::~LLFloaterAvatarTextures()
diff --git a/indra/newview/llfloaterbeacons.cpp b/indra/newview/llfloaterbeacons.cpp
index 975c888a2b..3058eacd48 100644
--- a/indra/newview/llfloaterbeacons.cpp
+++ b/indra/newview/llfloaterbeacons.cpp
@@ -42,8 +42,6 @@
 LLFloaterBeacons::LLFloaterBeacons(const LLSD& seed)
 :	LLFloater(seed)
 {
-//	LLUICtrlFactory::getInstance()->buildFloater(this, "floater_beacons.xml");
-
 	// Initialize pipeline states from saved settings.
 	// OK to do at floater constructor time because beacons do not display unless the floater is open
 	// therefore it is OK to not initialize the pipeline state before needed.
diff --git a/indra/newview/llfloaterbuildoptions.cpp b/indra/newview/llfloaterbuildoptions.cpp
index 30e9428df9..e59693aa92 100644
--- a/indra/newview/llfloaterbuildoptions.cpp
+++ b/indra/newview/llfloaterbuildoptions.cpp
@@ -46,7 +46,6 @@
 LLFloaterBuildOptions::LLFloaterBuildOptions(const LLSD& key)
   : LLFloater(key)
 {
-	//LLUICtrlFactory::getInstance()->buildFloater(this, "floater_build_options.xml");
 }
 
 LLFloaterBuildOptions::~LLFloaterBuildOptions()
diff --git a/indra/newview/llfloaterbulkpermission.cpp b/indra/newview/llfloaterbulkpermission.cpp
index 766fc0723c..d2138bcb3c 100644
--- a/indra/newview/llfloaterbulkpermission.cpp
+++ b/indra/newview/llfloaterbulkpermission.cpp
@@ -63,7 +63,6 @@ LLFloaterBulkPermission::LLFloaterBulkPermission(const LLSD& seed)
 	mDone(FALSE)
 {
 	mID.generate();
-//	LLUICtrlFactory::getInstance()->buildFloater(this,"floater_bulk_perms.xml");
 	mCommitCallbackRegistrar.add("BulkPermission.Apply",	boost::bind(&LLFloaterBulkPermission::onApplyBtn, this));
 	mCommitCallbackRegistrar.add("BulkPermission.Close",	boost::bind(&LLFloaterBulkPermission::onCloseBtn, this));
 	mCommitCallbackRegistrar.add("BulkPermission.CheckAll",	boost::bind(&LLFloaterBulkPermission::onCheckAll, this));
diff --git a/indra/newview/llfloaterbump.cpp b/indra/newview/llfloaterbump.cpp
index e925796526..c9275ce8cc 100644
--- a/indra/newview/llfloaterbump.cpp
+++ b/indra/newview/llfloaterbump.cpp
@@ -51,7 +51,6 @@ LLFloaterBump::LLFloaterBump(const LLSD& key)
 :	LLFloater(key)
 {
 	if(gNoRender) return;
-	//LLUICtrlFactory::getInstance()->buildFloater(this, "floater_bumps.xml");
 }
 
 
diff --git a/indra/newview/llfloaterbuy.cpp b/indra/newview/llfloaterbuy.cpp
index eee4310ec7..4493e723bc 100644
--- a/indra/newview/llfloaterbuy.cpp
+++ b/indra/newview/llfloaterbuy.cpp
@@ -57,7 +57,6 @@
 LLFloaterBuy::LLFloaterBuy(const LLSD& key)
 :	LLFloater(key)
 {
-// 	LLUICtrlFactory::getInstance()->buildFloater(this, "floater_buy_object.xml");
 }
 
 BOOL LLFloaterBuy::postBuild()
diff --git a/indra/newview/llfloaterbuycontents.cpp b/indra/newview/llfloaterbuycontents.cpp
index 76ec5da303..3cdd7b801b 100644
--- a/indra/newview/llfloaterbuycontents.cpp
+++ b/indra/newview/llfloaterbuycontents.cpp
@@ -60,7 +60,6 @@
 LLFloaterBuyContents::LLFloaterBuyContents(const LLSD& key)
 :	LLFloater(key)
 {
-// 	LLUICtrlFactory::getInstance()->buildFloater(this, "floater_buy_contents.xml");
 }
 
 BOOL LLFloaterBuyContents::postBuild()
diff --git a/indra/newview/llfloaterbuyland.cpp b/indra/newview/llfloaterbuyland.cpp
index 455cce5e56..78b0f73887 100644
--- a/indra/newview/llfloaterbuyland.cpp
+++ b/indra/newview/llfloaterbuyland.cpp
@@ -299,8 +299,7 @@ LLFloaterBuyLandUI::LLFloaterBuyLandUI(const LLSD& key)
 	mParcelBuyInfo(0)
 {
 	LLViewerParcelMgr::getInstance()->addObserver(&mParcelSelectionObserver);
-	
-// 	LLUICtrlFactory::getInstance()->buildFloater(sInstance, "floater_buy_land.xml");
+
 }
 
 LLFloaterBuyLandUI::~LLFloaterBuyLandUI()
diff --git a/indra/newview/llfloatercolorpicker.cpp b/indra/newview/llfloatercolorpicker.cpp
index 6922c515cd..0887c0353d 100644
--- a/indra/newview/llfloatercolorpicker.cpp
+++ b/indra/newview/llfloatercolorpicker.cpp
@@ -113,9 +113,6 @@ LLFloaterColorPicker::LLFloaterColorPicker (LLColorSwatchCtrl* swatch, BOOL show
 	  mCanApplyImmediately	( show_apply_immediate ),
 	  mContextConeOpacity	( 0.f )
 {
-	// build the majority of the gui using the factory builder
-	LLUICtrlFactory::getInstance()->buildFloater ( this, "floater_color_picker.xml", NULL );
-	
 	// create user interface for this picker
 	createUI ();
 
diff --git a/indra/newview/llfloaterdaycycle.cpp b/indra/newview/llfloaterdaycycle.cpp
index 50ea2765e7..182a108275 100644
--- a/indra/newview/llfloaterdaycycle.cpp
+++ b/indra/newview/llfloaterdaycycle.cpp
@@ -65,7 +65,6 @@ const F32 LLFloaterDayCycle::sHoursPerDay = 24.0f;
 LLFloaterDayCycle::LLFloaterDayCycle(const LLSD& key)	
 : LLFloater(key)
 {
-	//LLUICtrlFactory::getInstance()->buildFloater(this, "floater_day_cycle_options.xml");
 }
 
 BOOL LLFloaterDayCycle::postBuild()
diff --git a/indra/newview/llfloaterenvsettings.cpp b/indra/newview/llfloaterenvsettings.cpp
index eb344b91d3..c05ec0ba2c 100644
--- a/indra/newview/llfloaterenvsettings.cpp
+++ b/indra/newview/llfloaterenvsettings.cpp
@@ -56,7 +56,6 @@
 LLFloaterEnvSettings::LLFloaterEnvSettings(const LLSD& key)
   : LLFloater(key)
 {
-	//LLUICtrlFactory::getInstance()->buildFloater(this, "floater_env_settings.xml");
 }
 // virtual
 LLFloaterEnvSettings::~LLFloaterEnvSettings()
diff --git a/indra/newview/llfloatergodtools.cpp b/indra/newview/llfloatergodtools.cpp
index 61f5098af1..f60aaf3541 100644
--- a/indra/newview/llfloatergodtools.cpp
+++ b/indra/newview/llfloatergodtools.cpp
@@ -127,8 +127,6 @@ LLFloaterGodTools::LLFloaterGodTools(const LLSD& key)
 	mFactoryMap["region"] = LLCallbackMap(createPanelRegion, this);
 	mFactoryMap["objects"] = LLCallbackMap(createPanelObjects, this);
 	mFactoryMap["request"] = LLCallbackMap(createPanelRequest, this);
-//	LLUICtrlFactory::getInstance()->buildFloater(this, "floater_god_tools.xml");
-
 }
 
 BOOL LLFloaterGodTools::postBuild()
diff --git a/indra/newview/llfloaterhardwaresettings.cpp b/indra/newview/llfloaterhardwaresettings.cpp
index a97e00122a..be033de15f 100644
--- a/indra/newview/llfloaterhardwaresettings.cpp
+++ b/indra/newview/llfloaterhardwaresettings.cpp
@@ -62,7 +62,6 @@ LLFloaterHardwareSettings::LLFloaterHardwareSettings(const LLSD& key)
 	  mFogRatio(0.0),
 	  mProbeHardwareOnStartup(FALSE)
 {
-	//LLUICtrlFactory::getInstance()->buildFloater(this, "floater_hardware_settings.xml");
 }
 
 LLFloaterHardwareSettings::~LLFloaterHardwareSettings()
diff --git a/indra/newview/llfloaterhud.cpp b/indra/newview/llfloaterhud.cpp
index 930bbe9e6b..ba8e99cb7e 100644
--- a/indra/newview/llfloaterhud.cpp
+++ b/indra/newview/llfloaterhud.cpp
@@ -60,8 +60,6 @@ LLFloaterHUD::LLFloaterHUD(const LLSD& key)
 		return;
 	}
 	
-	//LLUICtrlFactory::getInstance()->buildFloater(this, "floater_hud.xml");
-	
 	// Don't grab the focus as it will impede performing in-world actions
 	// while using the HUD
 	setIsChrome(TRUE);
diff --git a/indra/newview/llfloaterinspect.cpp b/indra/newview/llfloaterinspect.cpp
index 4d4681a68d..93d4a8766a 100644
--- a/indra/newview/llfloaterinspect.cpp
+++ b/indra/newview/llfloaterinspect.cpp
@@ -53,7 +53,6 @@ LLFloaterInspect::LLFloaterInspect(const LLSD& key)
   : LLFloater(key),
 	mDirty(FALSE)
 {
-	//LLUICtrlFactory::getInstance()->buildFloater(this, "floater_inspect.xml");
 	mCommitCallbackRegistrar.add("Inspect.OwnerProfile",	boost::bind(&LLFloaterInspect::onClickOwnerProfile, this));
 	mCommitCallbackRegistrar.add("Inspect.CreatorProfile",	boost::bind(&LLFloaterInspect::onClickCreatorProfile, this));
 	mCommitCallbackRegistrar.add("Inspect.SelectObject",	boost::bind(&LLFloaterInspect::onSelectObject, this));
diff --git a/indra/newview/llfloaterjoystick.cpp b/indra/newview/llfloaterjoystick.cpp
index 9c7957603e..9fa8006b7f 100644
--- a/indra/newview/llfloaterjoystick.cpp
+++ b/indra/newview/llfloaterjoystick.cpp
@@ -50,8 +50,6 @@
 LLFloaterJoystick::LLFloaterJoystick(const LLSD& data)
 	: LLFloater(data)
 {
-	//Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this, "floater_joystick.xml");
-
 	initFromSettings();
 }
 
diff --git a/indra/newview/llfloaterlagmeter.cpp b/indra/newview/llfloaterlagmeter.cpp
index 9a2c34b40f..0cdf3be8c0 100644
--- a/indra/newview/llfloaterlagmeter.cpp
+++ b/indra/newview/llfloaterlagmeter.cpp
@@ -53,7 +53,6 @@ const std::string LAG_GOOD_IMAGE_NAME     = "lag_status_good.tga";
 LLFloaterLagMeter::LLFloaterLagMeter(const LLSD& key)
 	:	LLFloater(key)
 {
-//	LLUICtrlFactory::getInstance()->buildFloater(this, "floater_lagmeter.xml");
 	mCommitCallbackRegistrar.add("LagMeter.ClickShrink",  boost::bind(&LLFloaterLagMeter::onClickShrink, this));	
 }
 
diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp
index 19e28720ae..a1692d2b76 100644
--- a/indra/newview/llfloaterland.cpp
+++ b/indra/newview/llfloaterland.cpp
@@ -254,8 +254,6 @@ LLFloaterLand::LLFloaterLand(const LLSD& seed)
 	mFactoryMap["land_media_panel"] =	LLCallbackMap(createPanelLandMedia, this);
 	mFactoryMap["land_access_panel"] =	LLCallbackMap(createPanelLandAccess, this);
 
-	//LLUICtrlFactory::getInstance()->buildFloater(this, "floater_about_land.xml", false);
-
 	sObserver = new LLParcelSelectionObserver();
 	LLViewerParcelMgr::getInstance()->addObserver( sObserver );
 }
diff --git a/indra/newview/llfloaterlandholdings.cpp b/indra/newview/llfloaterlandholdings.cpp
index 12d27b8790..4ca851b8d2 100644
--- a/indra/newview/llfloaterlandholdings.cpp
+++ b/indra/newview/llfloaterlandholdings.cpp
@@ -66,7 +66,6 @@ LLFloaterLandHoldings::LLFloaterLandHoldings(const LLSD& key)
 	mSortColumn(""),
 	mSortAscending(TRUE)
 {
-// 	LLUICtrlFactory::getInstance()->buildFloater(floater, "floater_land_holdings.xml");
 }
 
 BOOL LLFloaterLandHoldings::postBuild()
diff --git a/indra/newview/llfloatermap.cpp b/indra/newview/llfloatermap.cpp
index df176a1f6d..94aee4ea7d 100644
--- a/indra/newview/llfloatermap.cpp
+++ b/indra/newview/llfloatermap.cpp
@@ -75,7 +75,6 @@ LLFloaterMap::LLFloaterMap(const LLSD& key)
 	  mTextBoxSouthWest(NULL),
 	  mMap(NULL)
 {
-	//Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this, "floater_map.xml", FALSE);
 }
 
 LLFloaterMap::~LLFloaterMap()
diff --git a/indra/newview/llfloatermediabrowser.cpp b/indra/newview/llfloatermediabrowser.cpp
index 90147ff650..ad996b5dc8 100644
--- a/indra/newview/llfloatermediabrowser.cpp
+++ b/indra/newview/llfloatermediabrowser.cpp
@@ -59,8 +59,6 @@
 LLFloaterMediaBrowser::LLFloaterMediaBrowser(const LLSD& key)
 	: LLFloater(key)
 {
-//	LLUICtrlFactory::getInstance()->buildFloater(this, "floater_media_browser.xml");
-
 }
 
 //static 
diff --git a/indra/newview/llfloaternotificationsconsole.cpp b/indra/newview/llfloaternotificationsconsole.cpp
index 9e3422c2b2..b7bca5c6cd 100644
--- a/indra/newview/llfloaternotificationsconsole.cpp
+++ b/indra/newview/llfloaternotificationsconsole.cpp
@@ -173,8 +173,6 @@ LLFloaterNotificationConsole::LLFloaterNotificationConsole(const LLSD& key)
 : LLFloater(key)
 {
 	mCommitCallbackRegistrar.add("ClickAdd",     boost::bind(&LLFloaterNotificationConsole::onClickAdd, this));	
-
-	//LLUICtrlFactory::instance().buildFloater(this, "floater_notifications_console.xml");
 }
 
 BOOL LLFloaterNotificationConsole::postBuild()
@@ -254,7 +252,6 @@ LLFloaterNotification::LLFloaterNotification(LLNotification* note)
 :	LLFloater(LLSD()),
 	mNote(note)
 {
-	LLUICtrlFactory::instance().buildFloater(this, "floater_notification.xml", NULL);
 }
 
 BOOL LLFloaterNotification::postBuild()
diff --git a/indra/newview/llfloateropenobject.cpp b/indra/newview/llfloateropenobject.cpp
index a2a3d300e7..d1c6ddb5b3 100644
--- a/indra/newview/llfloateropenobject.cpp
+++ b/indra/newview/llfloateropenobject.cpp
@@ -62,7 +62,6 @@ LLFloaterOpenObject::LLFloaterOpenObject(const LLSD& key)
 	mPanelInventoryObject(NULL),
 	mDirty(TRUE)
 {
-//	LLUICtrlFactory::getInstance()->buildFloater(this,"floater_openobject.xml");
 	mCommitCallbackRegistrar.add("OpenObject.MoveToInventory",	boost::bind(&LLFloaterOpenObject::onClickMoveToInventory, this));
 	mCommitCallbackRegistrar.add("OpenObject.MoveAndWear",		boost::bind(&LLFloaterOpenObject::onClickMoveAndWear, this));
 }
diff --git a/indra/newview/llfloaterperms.cpp b/indra/newview/llfloaterperms.cpp
index 7edc27d4c3..a6188af871 100644
--- a/indra/newview/llfloaterperms.cpp
+++ b/indra/newview/llfloaterperms.cpp
@@ -43,7 +43,6 @@
 LLFloaterPerms::LLFloaterPerms(const LLSD& seed)
 : LLFloater(seed)
 {
-	//LLUICtrlFactory::getInstance()->buildFloater(this, "floater_perm_prefs.xml");
 	mCommitCallbackRegistrar.add("Perms.Copy",	boost::bind(&LLFloaterPerms::onCommitCopy, this));
 	mCommitCallbackRegistrar.add("Perms.OK",	boost::bind(&LLFloaterPerms::onClickOK, this));
 	mCommitCallbackRegistrar.add("Perms.Cancel",	boost::bind(&LLFloaterPerms::onClickCancel, this));
diff --git a/indra/newview/llfloaterpostcard.cpp b/indra/newview/llfloaterpostcard.cpp
index dc4553ef96..99b0c8567d 100644
--- a/indra/newview/llfloaterpostcard.cpp
+++ b/indra/newview/llfloaterpostcard.cpp
@@ -82,7 +82,6 @@ LLFloaterPostcard::LLFloaterPostcard(const LLSD& key)
 	mViewerImage(NULL),
 	mHasFirstMsgFocus(false)
 {
-	//LLUICtrlFactory::getInstance()->buildFloater(this, "floater_postcard.xml");
 }
 
 // Destroys the object
diff --git a/indra/newview/llfloaterpostprocess.cpp b/indra/newview/llfloaterpostprocess.cpp
index 06c0a94afa..c6050b4832 100644
--- a/indra/newview/llfloaterpostprocess.cpp
+++ b/indra/newview/llfloaterpostprocess.cpp
@@ -48,7 +48,6 @@
 LLFloaterPostProcess::LLFloaterPostProcess(const LLSD& key)
   : LLFloater(key)
 {
-	//LLUICtrlFactory::getInstance()->buildFloater(this, "floater_post_process.xml");
 }
 
 LLFloaterPostProcess::~LLFloaterPostProcess()
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index a4b45e04f2..d1bae173f4 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -137,7 +137,6 @@ LLVoiceSetKeyDialog::LLVoiceSetKeyDialog(const LLSD& key)
   : LLModalDialog(key),
 	mParent(NULL)
 {
-// 	LLUICtrlFactory::getInstance()->buildFloater(this, "floater_select_key.xml", NULL);
 }
 
 //virtual
diff --git a/indra/newview/llfloaterproperties.cpp b/indra/newview/llfloaterproperties.cpp
index b6a98bdada..c577541c66 100644
--- a/indra/newview/llfloaterproperties.cpp
+++ b/indra/newview/llfloaterproperties.cpp
@@ -114,8 +114,6 @@ LLFloaterProperties::LLFloaterProperties(const LLUUID& item_id)
 	mDirty(TRUE)
 {
 	mPropertiesObserver = new LLPropertiesObserver(this);
-	
-	//LLUICtrlFactory::getInstance()->buildFloater(this,"floater_inventory_item_properties.xml");
 }
 
 // Destroys the object
diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp
index a8af80b952..b61d90043e 100644
--- a/indra/newview/llfloaterregioninfo.cpp
+++ b/indra/newview/llfloaterregioninfo.cpp
@@ -167,7 +167,6 @@ LLUUID LLFloaterRegionInfo::sRequestInvoice;
 LLFloaterRegionInfo::LLFloaterRegionInfo(const LLSD& seed)
 	: LLFloater(seed)
 {
-	//LLUICtrlFactory::getInstance()->buildFloater(this, "floater_region_info.xml", FALSE);
 }
 
 BOOL LLFloaterRegionInfo::postBuild()
diff --git a/indra/newview/llfloaterreporter.cpp b/indra/newview/llfloaterreporter.cpp
index 230d4be85b..196bf2d5f2 100644
--- a/indra/newview/llfloaterreporter.cpp
+++ b/indra/newview/llfloaterreporter.cpp
@@ -109,7 +109,6 @@ LLFloaterReporter::LLFloaterReporter(const LLSD& key)
 	mCopyrightWarningSeen( FALSE ),
 	mResourceDatap(new LLResourceData())
 {
-	//LLUICtrlFactory::getInstance()->buildFloater(this, "floater_report_abuse.xml");
 }
 
 // static
diff --git a/indra/newview/llfloaterscriptdebug.cpp b/indra/newview/llfloaterscriptdebug.cpp
index 4a82f3a11c..ad11a3ac5f 100644
--- a/indra/newview/llfloaterscriptdebug.cpp
+++ b/indra/newview/llfloaterscriptdebug.cpp
@@ -58,8 +58,6 @@
 LLFloaterScriptDebug::LLFloaterScriptDebug(const LLSD& key)
   : LLMultiFloater(key)
 {
-// 	LLUICtrlFactory::getInstance()->buildFloater(this, "floater_script_debug.xml");
-	
 	// avoid resizing of the window to match 
 	// the initial size of the tabbed-childs, whenever a tab is opened or closed
 	mAutoResize = FALSE;
@@ -147,8 +145,6 @@ LLFloaterScriptDebugOutput::LLFloaterScriptDebugOutput(const LLSD& object_id)
   : LLFloater(LLSD(object_id)),
 	mObjectID(object_id.asUUID())
 {
-	//LLUICtrlFactory::getInstance()->buildFloater(this, "floater_script_debug_panel.xml");
-	
 	// enabled autocous blocks controling focus via  LLFloaterReg::showInstance
 	setAutoFocus(FALSE);
 }
diff --git a/indra/newview/llfloatersettingsdebug.cpp b/indra/newview/llfloatersettingsdebug.cpp
index 77e0e4e677..fde84607fe 100644
--- a/indra/newview/llfloatersettingsdebug.cpp
+++ b/indra/newview/llfloatersettingsdebug.cpp
@@ -45,7 +45,6 @@
 LLFloaterSettingsDebug::LLFloaterSettingsDebug(const LLSD& key) 
 :	LLFloater(key)
 {
-	//LLUICtrlFactory::getInstance()->buildFloater(this, "floater_settings_debug.xml");
 	mCommitCallbackRegistrar.add("SettingSelect",	boost::bind(&LLFloaterSettingsDebug::onSettingSelect, this,_1));
 	mCommitCallbackRegistrar.add("CommitSettings",	boost::bind(&LLFloaterSettingsDebug::onCommitSettings, this));
 	mCommitCallbackRegistrar.add("ClickDefault",	boost::bind(&LLFloaterSettingsDebug::onClickDefault, this));
diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp
index e8a89bb705..8a08687bb8 100644
--- a/indra/newview/llfloatersnapshot.cpp
+++ b/indra/newview/llfloatersnapshot.cpp
@@ -2076,7 +2076,6 @@ LLFloaterSnapshot::LLFloaterSnapshot(const LLSD& key)
 	: LLFloater(key),
 	  impl (*(new Impl))
 {
-	//Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this, "floater_snapshot.xml", FALSE);
 }
 
 // Destroys the object
diff --git a/indra/newview/llfloatertelehub.cpp b/indra/newview/llfloatertelehub.cpp
index 6bd1e70f13..f748d737fb 100644
--- a/indra/newview/llfloatertelehub.cpp
+++ b/indra/newview/llfloatertelehub.cpp
@@ -57,7 +57,6 @@ LLFloaterTelehub::LLFloaterTelehub(const LLSD& key)
 	mTelehubRot(),
 	mNumSpawn(0)
 {
-	//LLUICtrlFactory::getInstance()->buildFloater(sInstance, "floater_telehub.xml");
 }
 
 BOOL LLFloaterTelehub::postBuild()
diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp
index 0988588d9c..173feff786 100644
--- a/indra/newview/llfloatertools.cpp
+++ b/indra/newview/llfloatertools.cpp
@@ -356,7 +356,6 @@ LLFloaterTools::LLFloaterTools(const LLSD& key)
 	mFactoryMap["Contents"] = LLCallbackMap(createPanelContents, this);//LLPanelContents
 	mFactoryMap["land info panel"] = LLCallbackMap(createPanelLandInfo, this);//LLPanelLandInfo
 	
-	//Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this,"floater_tools.xml",FALSE);
 	mCommitCallbackRegistrar.add("BuildTool.setTool",			boost::bind(&LLFloaterTools::setTool,this, _2));
 	mCommitCallbackRegistrar.add("BuildTool.commitZoom",		boost::bind(&commit_slider_zoom, _1));
 	mCommitCallbackRegistrar.add("BuildTool.commitRadioFocus",	boost::bind(&commit_radio_group_focus, _1));
diff --git a/indra/newview/llfloatertopobjects.cpp b/indra/newview/llfloatertopobjects.cpp
index d80f26657d..37ddd774da 100644
--- a/indra/newview/llfloatertopobjects.cpp
+++ b/indra/newview/llfloatertopobjects.cpp
@@ -70,7 +70,6 @@ void LLFloaterTopObjects::show()
 	}
 
 	sInstance = new LLFloaterTopObjects();
-//	LLUICtrlFactory::getInstance()->buildFloater(sInstance, "floater_top_objects.xml");
 	sInstance->center();
 }
 */
diff --git a/indra/newview/llfloateruipreview.cpp b/indra/newview/llfloateruipreview.cpp
index d32f809457..7c2a449343 100644
--- a/indra/newview/llfloateruipreview.cpp
+++ b/indra/newview/llfloateruipreview.cpp
@@ -400,7 +400,6 @@ LLFloaterUIPreview::LLFloaterUIPreview(const LLSD& key)
 	mLastDisplayedX(0),
 	mLastDisplayedY(0)
 {
-	// called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this, "floater_ui_preview.xml");
 }
 
 // Destructor
@@ -838,7 +837,7 @@ void LLFloaterUIPreview::displayFloater(BOOL click, S32 ID, bool save)
 		if (save)
 		{
 			LLXMLNodePtr floater_write = new LLXMLNode();			
-			LLUICtrlFactory::getInstance()->buildFloater(*floaterp, path, floater_write);	// just build it
+			buildFloater(*floaterp, path, floater_write);	// just build it
 
 			if (!floater_write->isNull())
 			{
@@ -852,7 +851,7 @@ void LLFloaterUIPreview::displayFloater(BOOL click, S32 ID, bool save)
 		}
 		else
 		{
-			LLUICtrlFactory::getInstance()->buildFloater(*floaterp, path, NULL);	// just build it
+			buildFloater(*floaterp, path, NULL);	// just build it
 			(*floaterp)->openFloater((*floaterp)->getKey());
 			(*floaterp)->setCanResize((*floaterp)->isResizable());
 		}
diff --git a/indra/newview/llfloaterurlentry.cpp b/indra/newview/llfloaterurlentry.cpp
index fa871d84a6..a192cfda3d 100644
--- a/indra/newview/llfloaterurlentry.cpp
+++ b/indra/newview/llfloaterurlentry.cpp
@@ -88,7 +88,7 @@ LLFloaterURLEntry::LLFloaterURLEntry(LLHandle<LLPanel> parent)
 	: LLFloater(LLSD()),
 	  mPanelLandMediaHandle(parent)
 {
-	LLUICtrlFactory::getInstance()->buildFloater(this, "floater_url_entry.xml", NULL);
+	buildFloater(this, "floater_url_entry.xml", NULL);
 }
 
 //-----------------------------------------------------------------------------
diff --git a/indra/newview/llfloatervoicedevicesettings.cpp b/indra/newview/llfloatervoicedevicesettings.cpp
index 036ef32016..af280ea9dc 100644
--- a/indra/newview/llfloatervoicedevicesettings.cpp
+++ b/indra/newview/llfloatervoicedevicesettings.cpp
@@ -338,7 +338,6 @@ LLFloaterVoiceDeviceSettings::LLFloaterVoiceDeviceSettings(const LLSD& seed)
 	mFactoryMap["device_settings"] = LLCallbackMap(createPanelVoiceDeviceSettings, this);
 	// do not automatically open singleton floaters (as result of getInstance())
 //	BOOL no_open = FALSE;
-//	Called from floater reg:  LLUICtrlFactory::getInstance()->buildFloater(this, "floater_device_settings.xml", no_open);	
 }
 BOOL LLFloaterVoiceDeviceSettings::postBuild()
 {
diff --git a/indra/newview/llfloaterwater.cpp b/indra/newview/llfloaterwater.cpp
index 0f0d85cacb..af15b89044 100644
--- a/indra/newview/llfloaterwater.cpp
+++ b/indra/newview/llfloaterwater.cpp
@@ -69,7 +69,6 @@ std::set<std::string> LLFloaterWater::sDefaultPresets;
 LLFloaterWater::LLFloaterWater(const LLSD& key)
   : LLFloater(key)
 {
-	//LLUICtrlFactory::getInstance()->buildFloater(this, "floater_water.xml");
 }
 
 LLFloaterWater::~LLFloaterWater()
diff --git a/indra/newview/llfloaterwhitelistentry.cpp b/indra/newview/llfloaterwhitelistentry.cpp
index 705c8afd00..1ce151d7ed 100644
--- a/indra/newview/llfloaterwhitelistentry.cpp
+++ b/indra/newview/llfloaterwhitelistentry.cpp
@@ -47,7 +47,6 @@
 LLFloaterWhiteListEntry::LLFloaterWhiteListEntry( const LLSD& key ) :
 	LLFloater(key)
 {
-//	LLUICtrlFactory::getInstance()->buildFloater(this, "floater_whitelist_entry.xml");
 }
 
 ///////////////////////////////////////////////////////////////////////////////
diff --git a/indra/newview/llfloaterwindlight.cpp b/indra/newview/llfloaterwindlight.cpp
index c8ea6e406b..001d5c9cd6 100644
--- a/indra/newview/llfloaterwindlight.cpp
+++ b/indra/newview/llfloaterwindlight.cpp
@@ -72,7 +72,6 @@ static const F32 WL_SUN_AMBIENT_SLIDER_SCALE = 3.0f;
 LLFloaterWindLight::LLFloaterWindLight(const LLSD& key)
   : LLFloater(key)
 {
-	//LLUICtrlFactory::getInstance()->buildFloater(this, "floater_windlight_options.xml");
 }
 
 LLFloaterWindLight::~LLFloaterWindLight()
diff --git a/indra/newview/llfloaterwindowsize.cpp b/indra/newview/llfloaterwindowsize.cpp
index 5519be6f08..1ab796cb9b 100644
--- a/indra/newview/llfloaterwindowsize.cpp
+++ b/indra/newview/llfloaterwindowsize.cpp
@@ -86,7 +86,6 @@ public:
 LLFloaterWindowSize::LLFloaterWindowSize(const LLSD& key) 
 :	LLFloater(key)
 {
-	//LLUICtrlFactory::getInstance()->buildFloater(this, "floater_window_size.xml");	
 }
 
 LLFloaterWindowSize::~LLFloaterWindowSize()
diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp
index 7fd073ea67..bc999cf1a7 100644
--- a/indra/newview/llfloaterworldmap.cpp
+++ b/indra/newview/llfloaterworldmap.cpp
@@ -205,7 +205,6 @@ LLFloaterWorldMap::LLFloaterWorldMap(const LLSD& key)
 	
 	mFactoryMap["objects_mapview"] = LLCallbackMap(createWorldMapView, NULL);
 	
-	//Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this, "floater_world_map.xml", FALSE);
 	mCommitCallbackRegistrar.add("WMap.Coordinates",	boost::bind(&LLFloaterWorldMap::onCoordinatesCommit, this));
 	mCommitCallbackRegistrar.add("WMap.Location",		boost::bind(&LLFloaterWorldMap::onLocationCommit, this));
 	mCommitCallbackRegistrar.add("WMap.AvatarCombo",	boost::bind(&LLFloaterWorldMap::onAvatarComboCommit, this));
diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp
index d7ffdacb70..9db79df78e 100644
--- a/indra/newview/llpanelmaininventory.cpp
+++ b/indra/newview/llpanelmaininventory.cpp
@@ -648,7 +648,6 @@ LLFloaterInventoryFinder::LLFloaterInventoryFinder(LLPanelMainInventory* invento
 	mPanelMainInventory(inventory_view),
 	mFilter(inventory_view->getPanel()->getFilter())
 {
-	LLUICtrlFactory::getInstance()->buildFloater(this, "floater_inventory_view_finder.xml", NULL);
 	updateElementsFromFilter();
 }
 
diff --git a/indra/newview/llpanelmaininventory.h b/indra/newview/llpanelmaininventory.h
index 82b72ac224..816d2f76fb 100644
--- a/indra/newview/llpanelmaininventory.h
+++ b/indra/newview/llpanelmaininventory.h
@@ -47,6 +47,7 @@ class LLFilterEditor;
 class LLTabContainer;
 class LLFloaterInventoryFinder;
 class LLMenuGL;
+class LLFloater;
 
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 // Class LLPanelMainInventory
diff --git a/indra/newview/llpreviewanim.cpp b/indra/newview/llpreviewanim.cpp
index a59ed53889..d65969c05d 100644
--- a/indra/newview/llpreviewanim.cpp
+++ b/indra/newview/llpreviewanim.cpp
@@ -49,7 +49,6 @@ extern LLAgent gAgent;
 LLPreviewAnim::LLPreviewAnim(const LLSD& key)
 	: LLPreview( key )
 {
-	//Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this,"floater_preview_animation.xml", FALSE);
 }
 
 // static
diff --git a/indra/newview/llpreviewgesture.cpp b/indra/newview/llpreviewgesture.cpp
index 6ef7c85e31..b9caaecbc1 100644
--- a/indra/newview/llpreviewgesture.cpp
+++ b/indra/newview/llpreviewgesture.cpp
@@ -317,9 +317,6 @@ LLPreviewGesture::LLPreviewGesture(const LLSD& key)
 	NONE_LABEL =  LLTrans::getString("---");
 	SHIFT_LABEL = LLTrans::getString("KBShift");
 	CTRL_LABEL = LLTrans::getString("KBCtrl");
-	
-	//Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this, "floater_preview_gesture.xml", FALSE);
-
 }
 
 
diff --git a/indra/newview/llpreviewnotecard.cpp b/indra/newview/llpreviewnotecard.cpp
index ee86d3a2c6..11cb2ec242 100644
--- a/indra/newview/llpreviewnotecard.cpp
+++ b/indra/newview/llpreviewnotecard.cpp
@@ -77,7 +77,6 @@ LLPreviewNotecard::LLPreviewNotecard(const LLSD& key) //const LLUUID& item_id,
 	{
 		mAssetID = item->getAssetUUID();
 	}	
-	//Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this,"floater_preview_notecard.xml", FALSE);
 }
 
 LLPreviewNotecard::~LLPreviewNotecard()
diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp
index 73845e2772..ce465927bb 100644
--- a/indra/newview/llpreviewscript.cpp
+++ b/indra/newview/llpreviewscript.cpp
@@ -157,7 +157,7 @@ LLFloaterScriptSearch::LLFloaterScriptSearch(LLScriptEdCore* editor_core)
 :	LLFloater(LLSD()),
 	mEditorCore(editor_core)
 {
-	LLUICtrlFactory::getInstance()->buildFloater(this,"floater_script_search.xml", NULL);
+	buildFloater(this,"floater_script_search.xml", NULL);
 
 	sInstance = this;
 	
@@ -660,7 +660,7 @@ void LLScriptEdCore::onBtnDynamicHelp()
 	if (!live_help_floater)
 	{
 		live_help_floater = new LLFloater(LLSD());
-		LLUICtrlFactory::getInstance()->buildFloater(live_help_floater, "floater_lsl_guide.xml", NULL);
+		LLFloater::buildFloater(live_help_floater, "floater_lsl_guide.xml", NULL);
 		LLFloater* parent = dynamic_cast<LLFloater*>(getParent());
 		llassert(parent);
 		if (parent)
@@ -948,7 +948,6 @@ LLPreviewLSL::LLPreviewLSL(const LLSD& key )
 	mPendingUploads(0)
 {
 	mFactoryMap["script panel"] = LLCallbackMap(LLPreviewLSL::createScriptEdPanel, this);
-	//Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this,"floater_script_preview.xml", FALSE);
 }
 
 // virtual
@@ -1423,7 +1422,6 @@ LLLiveLSLEditor::LLLiveLSLEditor(const LLSD& key) :
 	mIsNew(false)
 {
 	mFactoryMap["script ed panel"] = LLCallbackMap(LLLiveLSLEditor::createScriptEdPanel, this);
-	//Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this,"floater_live_lsleditor.xml", FALSE);
 }
 
 BOOL LLLiveLSLEditor::postBuild()
diff --git a/indra/newview/llpreviewsound.cpp b/indra/newview/llpreviewsound.cpp
index d9bcf5fba6..8d6f06502d 100644
--- a/indra/newview/llpreviewsound.cpp
+++ b/indra/newview/llpreviewsound.cpp
@@ -51,7 +51,6 @@ const F32 SOUND_GAIN = 1.0f;
 LLPreviewSound::LLPreviewSound(const LLSD& key)
   : LLPreview( key )
 {
-	//Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this,"floater_preview_sound.xml", FALSE);
 }
 
 // virtual
diff --git a/indra/newview/llpreviewtexture.cpp b/indra/newview/llpreviewtexture.cpp
index c1cb386556..b583fa4134 100644
--- a/indra/newview/llpreviewtexture.cpp
+++ b/indra/newview/llpreviewtexture.cpp
@@ -83,7 +83,6 @@ LLPreviewTexture::LLPreviewTexture(const LLSD& key)
 	{
 		mPreviewToSave = TRUE;
 	}
-	//Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this, "floater_preview_texture.xml", FALSE);
 }
 
 LLPreviewTexture::~LLPreviewTexture()
diff --git a/indra/newview/llsidepaneliteminfo.cpp b/indra/newview/llsidepaneliteminfo.cpp
index 56bb7167b6..22a2748356 100644
--- a/indra/newview/llsidepaneliteminfo.cpp
+++ b/indra/newview/llsidepaneliteminfo.cpp
@@ -94,8 +94,6 @@ LLSidepanelItemInfo::LLSidepanelItemInfo()
   : mItemID(LLUUID::null)
 {
 	mPropertiesObserver = new LLItemPropertiesObserver(this);
-	
-	//LLUICtrlFactory::getInstance()->buildFloater(this,"floater_inventory_item_properties.xml");
 }
 
 // Destroys the object
diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp
index 127e4010ca..2bf9483a23 100644
--- a/indra/newview/lltexturectrl.cpp
+++ b/indra/newview/lltexturectrl.cpp
@@ -203,7 +203,6 @@ LLFloaterTexturePicker::LLFloaterTexturePicker(
 	mSelectedItemPinned( FALSE )
 {
 	mCanApplyImmediately = can_apply_immediately;
-	LLUICtrlFactory::getInstance()->buildFloater(this,"floater_texture_ctrl.xml",NULL);
 	setCanMinimize(FALSE);
 }
 
diff --git a/indra/newview/lltoast.cpp b/indra/newview/lltoast.cpp
index 2bb573c263..06c95b5e9c 100644
--- a/indra/newview/lltoast.cpp
+++ b/indra/newview/lltoast.cpp
@@ -83,7 +83,7 @@ LLToast::LLToast(const LLToast::Params& p)
 {
 	mTimer.reset(new LLToastLifeTimer(this, p.lifetime_secs));
 
-	LLUICtrlFactory::getInstance()->buildFloater(this, "panel_toast.xml", NULL);
+	buildFloater(this, "panel_toast.xml", NULL);
 
 	setCanDrag(FALSE);
 
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 2a72e255d0..141d7d6b86 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -7255,7 +7255,7 @@ void handle_load_from_xml(void*)
 	{
 		std::string filename = picker.getFirstFile();
 		LLFloater* floater = new LLFloater(LLSD());
-		LLUICtrlFactory::getInstance()->buildFloater(floater, filename, NULL);
+		LLFloater::buildFloater(floater, filename, NULL);
 	}
 }
 
-- 
cgit v1.2.3


From 98bcaa1071ac4fb0b98a719c7fc7bdb3682dae4c Mon Sep 17 00:00:00 2001
From: Richard Nelson <none@none>
Date: Mon, 16 Aug 2010 17:56:46 -0700
Subject: made hint popups "chrome", meaning they can't steal focus

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

diff --git a/indra/newview/skins/default/xui/en/widgets/hint_popup.xml b/indra/newview/skins/default/xui/en/widgets/hint_popup.xml
index fbd92f982e..a9975941af 100644
--- a/indra/newview/skins/default/xui/en/widgets/hint_popup.xml
+++ b/indra/newview/skins/default/xui/en/widgets/hint_popup.xml
@@ -3,6 +3,7 @@
  name="hint"
  background_opaque="true"
  background_visible="true"
+ chrome="true" 
  layout="topleft"
  bg_opaque_image="hint_background"
  distance="24"
-- 
cgit v1.2.3


From c2d844c972419e3bd90076f4e5ee6296007b0e6e Mon Sep 17 00:00:00 2001
From: Techwolf Lupindo <bitbucket.org@trap.wereanimal.net>
Date: Mon, 16 Aug 2010 22:10:18 -0400
Subject: SNOW-746: Finished Google BreakPad cmake for standalone (transplanted
 from 5a7ee78d029e973084e28d0d23a7233e0d976dca)

---
 doc/contributions.txt                |  1 +
 indra/cmake/FindGoogleBreakpad.cmake | 40 ++++++++++++++++++++++++++++++++++++
 indra/cmake/GoogleBreakpad.cmake     |  4 ++--
 3 files changed, 43 insertions(+), 2 deletions(-)
 create mode 100644 indra/cmake/FindGoogleBreakpad.cmake

diff --git a/doc/contributions.txt b/doc/contributions.txt
index 5f209a6675..f2e9cfd5c3 100644
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -602,6 +602,7 @@ Teardrops Fall
 	VWR-5366
 Techwolf Lupindo
 	SNOW-92
+	SNOW-746
 	VWR-12385
 tenebrous pau
 	VWR-247
diff --git a/indra/cmake/FindGoogleBreakpad.cmake b/indra/cmake/FindGoogleBreakpad.cmake
new file mode 100644
index 0000000000..1a0493be5e
--- /dev/null
+++ b/indra/cmake/FindGoogleBreakpad.cmake
@@ -0,0 +1,40 @@
+# -*- cmake -*-
+
+# - Find Google BreakPad
+# Find the Google BreakPad includes and library
+# This module defines
+#  BREAKPAD_EXCEPTION_HANDLER_INCLUDE_DIR, where to find exception_handler.h, etc.
+#  BREAKPAD_EXCEPTION_HANDLER_LIBRARIES, the libraries needed to use Google BreakPad.
+#  BREAKPAD_EXCEPTION_HANDLER_FOUND, If false, do not try to use Google BreakPad.
+# also defined, but not for general use are
+#  BREAKPAD_EXCEPTION_HANDLER_LIBRARY, where to find the Google BreakPad library.
+
+FIND_PATH(BREAKPAD_EXCEPTION_HANDLER_INCLUDE_DIR google_breakpad/exception_handler.h)
+
+SET(BREAKPAD_EXCEPTION_HANDLER_NAMES ${BREAKPAD_EXCEPTION_HANDLER_NAMES} breakpad_client)
+FIND_LIBRARY(BREAKPAD_EXCEPTION_HANDLER_LIBRARY
+  NAMES ${BREAKPAD_EXCEPTION_HANDLER_NAMES}
+  )
+
+IF (BREAKPAD_EXCEPTION_HANDLER_LIBRARY AND BREAKPAD_EXCEPTION_HANDLER_INCLUDE_DIR)
+    SET(BREAKPAD_EXCEPTION_HANDLER_LIBRARIES ${BREAKPAD_EXCEPTION_HANDLER_LIBRARY})
+    SET(BREAKPAD_EXCEPTION_HANDLER_FOUND "YES")
+ELSE (BREAKPAD_EXCEPTION_HANDLER_LIBRARY AND BREAKPAD_EXCEPTION_HANDLER_INCLUDE_DIR)
+    SET(BREAKPAD_EXCEPTION_HANDLER_FOUND "NO")
+ENDIF (BREAKPAD_EXCEPTION_HANDLER_LIBRARY AND BREAKPAD_EXCEPTION_HANDLER_INCLUDE_DIR)
+
+
+IF (BREAKPAD_EXCEPTION_HANDLER_FOUND)
+   IF (NOT BREAKPAD_EXCEPTION_HANDLER_FIND_QUIETLY)
+      MESSAGE(STATUS "Found Google BreakPad: ${BREAKPAD_EXCEPTION_HANDLER_LIBRARIES}")
+   ENDIF (NOT BREAKPAD_EXCEPTION_HANDLER_FIND_QUIETLY)
+ELSE (BREAKPAD_EXCEPTION_HANDLER_FOUND)
+   IF (BREAKPAD_EXCEPTION_HANDLER_FIND_REQUIRED)
+      MESSAGE(FATAL_ERROR "Could not find Google BreakPad library")
+   ENDIF (BREAKPAD_EXCEPTION_HANDLER_FIND_REQUIRED)
+ENDIF (BREAKPAD_EXCEPTION_HANDLER_FOUND)
+
+MARK_AS_ADVANCED(
+  BREAKPAD_EXCEPTION_HANDLER_LIBRARY
+  BREAKPAD_EXCEPTION_HANDLER_INCLUDE_DIR
+  )
diff --git a/indra/cmake/GoogleBreakpad.cmake b/indra/cmake/GoogleBreakpad.cmake
index e45518ef56..c6daa05fbd 100644
--- a/indra/cmake/GoogleBreakpad.cmake
+++ b/indra/cmake/GoogleBreakpad.cmake
@@ -2,8 +2,8 @@
 include(Prebuilt)
 
 if (STANDALONE)
-  MESSAGE(FATAL_ERROR "*TODO standalone support for google breakad is unimplemented")
-  # *TODO - implement this include(FindGoogleBreakpad)
+  set(BREAKPAD_EXCEPTION_HANDLER_FIND_REQUIRED ON)
+  include(FindGoogleBreakpad)
 else (STANDALONE)
   use_prebuilt_binary(google_breakpad)
   set(BREAKPAD_EXCEPTION_HANDLER_LIBRARIES exception_handler)
-- 
cgit v1.2.3


From 29bbaef4aac059ca26c35a46f70e655e58f963bf Mon Sep 17 00:00:00 2001
From: Monroe Linden <monroe@lindenlab.com>
Date: Tue, 17 Aug 2010 17:03:23 -0700
Subject: Fixed a couple of compile errors.

---
 indra/integration_tests/llui_libtest/llui_libtest.cpp | 8 ++++----
 indra/newview/llfirstuse.cpp                          | 2 +-
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/indra/integration_tests/llui_libtest/llui_libtest.cpp b/indra/integration_tests/llui_libtest/llui_libtest.cpp
index abd8f7dbde..c981ba23d7 100644
--- a/indra/integration_tests/llui_libtest/llui_libtest.cpp
+++ b/indra/integration_tests/llui_libtest/llui_libtest.cpp
@@ -191,10 +191,10 @@ void export_test_floaters()
 		// Build a floater and output new attributes
 		LLXMLNodePtr output_node = new LLXMLNode();
 		LLFloater* floater = new LLFloater(LLSD());
-		LLUICtrlFactory::getInstance()->buildFloater(floater,
-													 filename,
-												//	 FALSE,	// don't open floater
-													 output_node);
+		LLFloater::buildFloater(floater,
+								filename,
+								//	 FALSE,	// don't open floater
+								output_node);
 		std::string out_filename = xui_dir + filename;
 		std::string::size_type extension_pos = out_filename.rfind(".xml");
 		out_filename.resize(extension_pos);
diff --git a/indra/newview/llfirstuse.cpp b/indra/newview/llfirstuse.cpp
index 038579c0bd..e9a9203a96 100644
--- a/indra/newview/llfirstuse.cpp
+++ b/indra/newview/llfirstuse.cpp
@@ -157,7 +157,7 @@ void LLFirstUse::init()
 	static bool initialized = false;
 	if (!initialized)
 	{
-		LLNotifications::instance().getChannel("Hints")->connectChanged(processNotification);
+		LLNotifications::instance().getChannel("Hints")->connectChanged(&processNotification);
 	}
 	initialized = true;
 }
-- 
cgit v1.2.3


From 5ed8b55283e93a0487f3056789102a8dcdd7db3a Mon Sep 17 00:00:00 2001
From: Monroe Linden <monroe@lindenlab.com>
Date: Tue, 17 Aug 2010 17:56:26 -0700
Subject: Updated Mac build of llqtwebkit, with javascript window.close
 handling.

Built from:

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

diff --git a/install.xml b/install.xml
index a3f5b5c7bc..19905fc1f7 100644
--- a/install.xml
+++ b/install.xml
@@ -981,9 +981,9 @@ anguage Infrstructure (CLI) international standard</string>
           <key>darwin</key>
           <map>
             <key>md5sum</key>
-            <string>093c977ef0ef2396cc235b3620329a87</string>
+            <string>9f4243cf304366030d02f2881357a928</string>
             <key>url</key>
-            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-4.6-darwin-20100805.tar.bz2</uri>
+            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-4.6-darwin-20100817.tar.bz2</uri>
           </map>
           <key>linux</key>
           <map>
-- 
cgit v1.2.3


From a2657be5782f20c3cbab542b5a3775d78e21cdfa Mon Sep 17 00:00:00 2001
From: Monroe Linden <monroe@lindenlab.com>
Date: Tue, 17 Aug 2010 17:56:54 -0700
Subject: Viewer side changes to support javascript window.close handling.

---
 indra/llplugin/llpluginclassmedia.cpp              | 4 ++++
 indra/llplugin/llpluginclassmediaowner.h           | 1 +
 indra/media_plugins/webkit/media_plugin_webkit.cpp | 9 +++++++++
 indra/newview/llfloatermediabrowser.cpp            | 5 +++++
 indra/newview/llmediactrl.cpp                      | 6 ++++++
 indra/newview/llviewerparcelmedia.cpp              | 6 ++++++
 indra/test_apps/llplugintest/llmediaplugintest.cpp | 4 ++++
 7 files changed, 35 insertions(+)

diff --git a/indra/llplugin/llpluginclassmedia.cpp b/indra/llplugin/llpluginclassmedia.cpp
index 41ace62964..6209a09bbd 100644
--- a/indra/llplugin/llpluginclassmedia.cpp
+++ b/indra/llplugin/llpluginclassmedia.cpp
@@ -1010,6 +1010,10 @@ void LLPluginClassMedia::receivePluginMessage(const LLPluginMessage &message)
 				mOwner->handleCookieSet(this, message.getValue("cookie"));
 			}
 		}
+		else if(message_name == "close_request")
+		{
+			mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_CLOSE_REQUEST);
+		}
 		else
 		{
 			LL_WARNS("Plugin") << "Unknown " << message_name << " class message: " << message_name << LL_ENDL;
diff --git a/indra/llplugin/llpluginclassmediaowner.h b/indra/llplugin/llpluginclassmediaowner.h
index 5669b81fd1..ac4fdd9ada 100644
--- a/indra/llplugin/llpluginclassmediaowner.h
+++ b/indra/llplugin/llpluginclassmediaowner.h
@@ -59,6 +59,7 @@ public:
 		MEDIA_EVENT_LOCATION_CHANGED,		// browser location (URL) has changed (maybe due to internal navagation/frames/etc)
 		MEDIA_EVENT_CLICK_LINK_HREF,		// I'm not entirely sure what the semantics of these two are
 		MEDIA_EVENT_CLICK_LINK_NOFOLLOW,
+		MEDIA_EVENT_CLOSE_REQUEST,			// The plugin requested its window be closed (currently hooked up to javascript window.close in webkit)
 		
 		MEDIA_EVENT_PLUGIN_FAILED_LAUNCH,	// The plugin failed to launch 
 		MEDIA_EVENT_PLUGIN_FAILED			// The plugin died unexpectedly
diff --git a/indra/media_plugins/webkit/media_plugin_webkit.cpp b/indra/media_plugins/webkit/media_plugin_webkit.cpp
index 3b00edec4e..2dc0c93521 100644
--- a/indra/media_plugins/webkit/media_plugin_webkit.cpp
+++ b/indra/media_plugins/webkit/media_plugin_webkit.cpp
@@ -539,6 +539,15 @@ private:
 //		message.setValueBoolean("dead", (event.getIntValue() != 0))
 		sendMessage(message);
 	}
+
+	////////////////////////////////////////////////////////////////////////////////
+	// virtual
+	void onWindowCloseRequested(const EventType& event)
+	{
+		llwarns << "onWindowCloseRequested " << llendl;
+		LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "close_request");
+		sendMessage(message);
+	}
 	
 	LLQtWebKit::EKeyboardModifier decodeModifiers(std::string &modifiers)
 	{
diff --git a/indra/newview/llfloatermediabrowser.cpp b/indra/newview/llfloatermediabrowser.cpp
index ad996b5dc8..bf797fdc95 100644
--- a/indra/newview/llfloatermediabrowser.cpp
+++ b/indra/newview/llfloatermediabrowser.cpp
@@ -223,6 +223,11 @@ void LLFloaterMediaBrowser::handleMediaEvent(LLPluginClassMedia* self, EMediaEve
 		getChildView("back")->setEnabled(self->getHistoryBackAvailable());
 		getChildView("forward")->setEnabled(self->getHistoryForwardAvailable());
 	}
+	else if(event == MEDIA_EVENT_CLOSE_REQUEST)
+	{
+		// The browser instance wants its window closed.
+		closeFloater();
+	}
 }
 void LLFloaterMediaBrowser::setCurrentURL(const std::string& url)
 {
diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp
index d6d128eb29..0739125081 100644
--- a/indra/newview/llmediactrl.cpp
+++ b/indra/newview/llmediactrl.cpp
@@ -956,6 +956,12 @@ void LLMediaCtrl::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event)
 			LL_DEBUGS("Media") <<  "Media event:  MEDIA_EVENT_NAME_CHANGED" << LL_ENDL;
 		};
 		break;
+		
+		case MEDIA_EVENT_CLOSE_REQUEST:
+		{
+			LL_DEBUGS("Media") <<  "Media event:  MEDIA_EVENT_CLOSE_REQUEST" << LL_ENDL;
+		}
+		break;
 	};
 
 	// chain all events to any potential observers of this object.
diff --git a/indra/newview/llviewerparcelmedia.cpp b/indra/newview/llviewerparcelmedia.cpp
index 202f8822e3..e1d88c799b 100644
--- a/indra/newview/llviewerparcelmedia.cpp
+++ b/indra/newview/llviewerparcelmedia.cpp
@@ -574,6 +574,12 @@ void LLViewerParcelMedia::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent
 			LL_DEBUGS("Media") <<  "Media event:  MEDIA_EVENT_NAME_CHANGED" << LL_ENDL;
 		};
 		break;
+
+		case MEDIA_EVENT_CLOSE_REQUEST:
+		{
+			LL_DEBUGS("Media") <<  "Media event:  MEDIA_EVENT_CLOSE_REQUEST" << LL_ENDL;
+		}
+		break;
 	};
 }
 
diff --git a/indra/test_apps/llplugintest/llmediaplugintest.cpp b/indra/test_apps/llplugintest/llmediaplugintest.cpp
index 166905c37c..4e39f1ccd1 100644
--- a/indra/test_apps/llplugintest/llmediaplugintest.cpp
+++ b/indra/test_apps/llplugintest/llmediaplugintest.cpp
@@ -2213,6 +2213,10 @@ void LLMediaPluginTest::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent e
 		case MEDIA_EVENT_PLUGIN_FAILED_LAUNCH:
 			std::cerr <<  "Media event:  MEDIA_EVENT_PLUGIN_FAILED_LAUNCH" << std::endl;
 		break;
+
+		case MEDIA_EVENT_CLOSE_REQUEST:
+			std::cerr <<  "Media event:  MEDIA_EVENT_CLOSE_REQUEST" << std::endl;
+		break;
 	}
 }
 
-- 
cgit v1.2.3


From 87d9a34ab869a6e31d83cae8cc55beaebc0c7ff9 Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Wed, 18 Aug 2010 11:50:24 -0700
Subject: DEV-52669 FIX Inventory Notification not given if first Inventory
 Item comes from buying object contents

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

diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 9bb734a3d3..067c0f3a80 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -1080,6 +1080,7 @@ bool check_offer_throttle(const std::string& from_name, bool check_only)
  
 void open_inventory_offer(const uuid_vec_t& objects, const std::string& from_name)
 {
+	LLFirstUse::inventoryOffer();
 	for (uuid_vec_t::const_iterator obj_iter = objects.begin();
 		 obj_iter != objects.end();
 		 ++obj_iter)
-- 
cgit v1.2.3


From 3aa8148ed94bcf495784efe51ad9d466d566868d Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Wed, 18 Aug 2010 12:16:29 -0700
Subject: fix for occasional crash when dismissing hint

---
 indra/llui/llnotifications.cpp | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

diff --git a/indra/llui/llnotifications.cpp b/indra/llui/llnotifications.cpp
index 2da8f1eb1b..7cc6e8e8f6 100644
--- a/indra/llui/llnotifications.cpp
+++ b/indra/llui/llnotifications.cpp
@@ -1425,17 +1425,26 @@ void LLNotifications::cancel(LLNotificationPtr pNotif)
 
 void LLNotifications::cancelByName(const std::string& name)
 {
-	for (LLNotificationSet::iterator it=mItems.begin(), end_it = mItems.end(), next_it = it;
+	std::vector<LLNotificationPtr> notifs_to_cancel;
+	for (LLNotificationSet::iterator it=mItems.begin(), end_it = mItems.end();
 		it != end_it;
-		it = next_it, ++next_it)
+		++it)
 	{
 		LLNotificationPtr pNotif = *it;
 		if (pNotif->getName() == name)
 		{
-			pNotif->cancel();
-			updateItem(LLSD().with("sigtype", "delete").with("id", pNotif->id()), pNotif);
+			notifs_to_cancel.push_back(pNotif);
 		}
 	}
+
+	for (std::vector<LLNotificationPtr>::iterator it = notifs_to_cancel.begin(), end_it = notifs_to_cancel.end();
+		it != end_it;
+		++it)
+	{
+		LLNotificationPtr pNotif = *it;
+		pNotif->cancel();
+		updateItem(LLSD().with("sigtype", "delete").with("id", pNotif->id()), pNotif);
+	}
 }
 
 void LLNotifications::update(const LLNotificationPtr pNotif)
-- 
cgit v1.2.3


From 25367cb33a4ae3df474b2d77e04bf44625efde4b Mon Sep 17 00:00:00 2001
From: Monroe Linden <monroe@lindenlab.com>
Date: Wed, 18 Aug 2010 16:58:57 -0700
Subject: Add support for an "_internal" target that forces a link to open in
 the embedded browser, regardless of the state of the "UseExternalBrowser"
 pref.

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

diff --git a/indra/newview/llweb.cpp b/indra/newview/llweb.cpp
index b61109d490..c6219334f4 100644
--- a/indra/newview/llweb.cpp
+++ b/indra/newview/llweb.cpp
@@ -86,7 +86,12 @@ void LLWeb::initClass()
 // static
 void LLWeb::loadURL(const std::string& url, const std::string& target)
 {
-	if (gSavedSettings.getBOOL("UseExternalBrowser") || (target == "_external"))
+	if(target == "_internal")
+	{
+		// Force load in the internal browser, as if with a blank target.
+		loadURLInternal(url);
+	}
+	else if (gSavedSettings.getBOOL("UseExternalBrowser") || (target == "_external"))
 	{
 		loadURLExternal(url);
 	}
-- 
cgit v1.2.3


From f17e3a6eb42f0f30b8d7a178cd9214a26162dde6 Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Thu, 19 Aug 2010 10:54:03 -0700
Subject: DEV-52666 FIX Chat and Move Hints shown when user performs action...

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

diff --git a/indra/newview/llfirstuse.cpp b/indra/newview/llfirstuse.cpp
index e9a9203a96..1ede2be978 100644
--- a/indra/newview/llfirstuse.cpp
+++ b/indra/newview/llfirstuse.cpp
@@ -147,6 +147,8 @@ void LLFirstUse::firstUseNotification(const std::string& control_var, bool enabl
 	{
 		LL_DEBUGS("LLFirstUse") << "Disabling first use notification " << notification_name << LL_ENDL;
 		LLNotifications::instance().cancelByName(notification_name);
+		// redundantly clear settings var here, in case there are no notifications to cancel
+		gWarningSettings.setBOOL(control_var, FALSE);
 	}
 
 }
-- 
cgit v1.2.3


From af108e324ae45ba3a055e7b55bea3f3b03c7f48d Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Thu, 19 Aug 2010 13:24:37 -0700
Subject: DEV-52669 FIX Inventory notification not given if first item comes
 from buying contents

---
 indra/newview/llfirstuse.cpp           |  2 +-
 indra/newview/llfirstuse.h             |  2 +-
 indra/newview/llfloaterbuycontents.cpp |  5 +++++
 indra/newview/llsidepanelinventory.cpp |  2 +-
 indra/newview/llviewermessage.cpp      | 14 +++++++++++---
 5 files changed, 19 insertions(+), 6 deletions(-)

diff --git a/indra/newview/llfirstuse.cpp b/indra/newview/llfirstuse.cpp
index 1ede2be978..c153f8b787 100644
--- a/indra/newview/llfirstuse.cpp
+++ b/indra/newview/llfirstuse.cpp
@@ -90,7 +90,7 @@ void LLFirstUse::sit(bool enable)
 }
 
 // static
-void LLFirstUse::inventoryOffer(bool enable)
+void LLFirstUse::newInventory(bool enable)
 {
 	firstUseNotification("FirstInventoryOffer", enable, "HintInventory", LLSD(), LLSD().with("target", "inventory_btn").with("direction", "left"));
 }
diff --git a/indra/newview/llfirstuse.h b/indra/newview/llfirstuse.h
index 9c4ab14006..174706f1f4 100644
--- a/indra/newview/llfirstuse.h
+++ b/indra/newview/llfirstuse.h
@@ -95,7 +95,7 @@ public:
 	static void notUsingDestinationGuide(bool enable = true);
 	static void notUsingSidePanel(bool enable = true);
 	static void notMoving(bool enable = true);
-	static void inventoryOffer(bool enable = true);
+	static void newInventory(bool enable = true);
 	static void receiveLindens(bool enable = true);
 	static void useSandbox();
 	
diff --git a/indra/newview/llfloaterbuycontents.cpp b/indra/newview/llfloaterbuycontents.cpp
index 3cdd7b801b..8e93a6bf03 100644
--- a/indra/newview/llfloaterbuycontents.cpp
+++ b/indra/newview/llfloaterbuycontents.cpp
@@ -47,6 +47,7 @@
 #include "llinventorydefines.h"
 #include "llinventoryfunctions.h"
 #include "llinventorymodel.h"	// for gInventory
+#include "llfirstuse.h"
 #include "llfloaterreg.h"
 #include "llfloaterinventory.h"	// for LLInventoryIcon::getIcon
 #include "llnotificationsutil.h"
@@ -289,6 +290,10 @@ void LLFloaterBuyContents::onClickBuy()
 	// it doesn't match region info then sale is canceled.
 	LLSelectMgr::getInstance()->sendBuy(gAgent.getID(), category_id, mSaleInfo);
 
+	// NOTE: do this here instead of on receipt of object, since contents are transfered
+	// via a generic BulkUpdateInventory message with no way of distinguishing it from
+	// other inventory operations
+	LLFirstUse::newInventory();
 	closeFloater();
 }
 
diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp
index aa29f6cb26..66a8a520af 100644
--- a/indra/newview/llsidepanelinventory.cpp
+++ b/indra/newview/llsidepanelinventory.cpp
@@ -129,7 +129,7 @@ BOOL LLSidepanelInventory::postBuild()
 
 void LLSidepanelInventory::onOpen(const LLSD& key)
 {
-	LLFirstUse::inventoryOffer(false);
+	LLFirstUse::newInventory(false);
 
 	if(key.size() == 0)
 		return;
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 067c0f3a80..71dff61f41 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -937,6 +937,15 @@ protected:
 //one global instance to bind them
 LLOpenTaskOffer* gNewInventoryObserver=NULL;
 
+class LLNewInventoryHintObserver : public LLInventoryAddedObserver
+{
+protected:
+	/*virtual*/ void done()
+	{
+		LLFirstUse::newInventory();
+	}
+};
+
 void start_new_inventory_observer()
 {
 	if (!gNewInventoryObserver) //task offer observer 
@@ -952,6 +961,8 @@ void start_new_inventory_observer()
 		gInventoryMoveObserver = new LLViewerInventoryMoveFromWorldObserver;
 		gInventory.addObserver(gInventoryMoveObserver);
 	}
+
+	gInventory.addObserver(new LLNewInventoryHintObserver());
 }
 
 class LLDiscardAgentOffer : public LLInventoryFetchItemsObserver
@@ -1080,7 +1091,6 @@ bool check_offer_throttle(const std::string& from_name, bool check_only)
  
 void open_inventory_offer(const uuid_vec_t& objects, const std::string& from_name)
 {
-	LLFirstUse::inventoryOffer();
 	for (uuid_vec_t::const_iterator obj_iter = objects.begin();
 		 obj_iter != objects.end();
 		 ++obj_iter)
@@ -1765,8 +1775,6 @@ void inventory_offer_handler(LLOfferInfo* info)
 		return;
 	}
 
-	LLFirstUse::inventoryOffer();
-
 	// Avoid the Accept/Discard dialog if the user so desires. JC
 	if (gSavedSettings.getBOOL("AutoAcceptNewInventory")
 		&& (info->mType == LLAssetType::AT_NOTECARD
-- 
cgit v1.2.3


From 7c80b591610e8f7467c40ce3585796e67390fb3e Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Thu, 19 Aug 2010 13:39:01 -0700
Subject: DEV-52553 FIX Font color/opacity issue in Group Panels DEV-52554 FIX
 Font color/opacity issue in About Second Life floater DEV-52617 FIX Font
 color/opacity issue in Profile Panel DEV-52618 FIX Font color/opacity issue
 in Covenant tab of About Land reviewed by Monroe

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

diff --git a/indra/newview/skins/default/xui/en/widgets/text_editor.xml b/indra/newview/skins/default/xui/en/widgets/text_editor.xml
index 180120ec89..0f7f50b312 100644
--- a/indra/newview/skins/default/xui/en/widgets/text_editor.xml
+++ b/indra/newview/skins/default/xui/en/widgets/text_editor.xml
@@ -2,5 +2,4 @@
 <!-- Core parameters are in simple_text_editor.xml -->
 <text_editor
   parse_urls="false"
-  text_readonly_color="LabelDisabledColor"
   show_context_menu="true"/>
-- 
cgit v1.2.3


From bc12956a304c0c9c8d67a86a4e6d2e108026c169 Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Thu, 19 Aug 2010 13:59:46 -0700
Subject: Fix for bad accelerator string lookups

---
 indra/llxuixml/lltrans.h | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/indra/llxuixml/lltrans.h b/indra/llxuixml/lltrans.h
index 6c8d28b346..30c96f8121 100644
--- a/indra/llxuixml/lltrans.h
+++ b/indra/llxuixml/lltrans.h
@@ -107,7 +107,16 @@ public:
 	{
 		std::string key_str(keystring);
 		std::string trans_str;
-		return findString(trans_str, "Key_" + key_str) ? trans_str : key_str; 
+		if (findString(trans_str, "Key_" + key_str))
+		{
+			return trans_str;
+		}
+		else if (findString(trans_str, key_str))
+		{
+			return trans_str;
+		}
+		llwarns << "Failed to find keyboard string " << keystring << llendl;
+		return key_str;
 	}
 
 	// get the default args
-- 
cgit v1.2.3


From 48e0087ce3096e3ebe778124cdb21b87eedcc07c Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Thu, 19 Aug 2010 15:29:09 -0700
Subject: removed keyboarstring spam

---
 indra/llxuixml/lltrans.h | 1 -
 1 file changed, 1 deletion(-)

diff --git a/indra/llxuixml/lltrans.h b/indra/llxuixml/lltrans.h
index 30c96f8121..4a99c5e0e2 100644
--- a/indra/llxuixml/lltrans.h
+++ b/indra/llxuixml/lltrans.h
@@ -115,7 +115,6 @@ public:
 		{
 			return trans_str;
 		}
-		llwarns << "Failed to find keyboard string " << keystring << llendl;
 		return key_str;
 	}
 
-- 
cgit v1.2.3


From b7266b13c96e76a64e7220baa1d4cd3cb0f9bb29 Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Thu, 19 Aug 2010 17:35:49 -0700
Subject: eliminated spam when parsing hints llsd

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

diff --git a/indra/newview/llhints.cpp b/indra/newview/llhints.cpp
index c4cea86a31..f758df2ef8 100644
--- a/indra/newview/llhints.cpp
+++ b/indra/newview/llhints.cpp
@@ -293,7 +293,7 @@ void LLHints::show(LLNotificationPtr hint)
 {
 	LLHintPopup::Params p(LLUICtrlFactory::getDefaultParams<LLHintPopup>());
 
-	LLParamSDParser::instance().readSD(hint->getPayload(), p);
+	LLParamSDParser::instance().readSD(hint->getPayload(), p, true);
 	p.notification = hint;
 
 	if (p.validateBlock())
-- 
cgit v1.2.3


From ae46afb7076959161316be1faf8a16ed21dbf854 Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Thu, 19 Aug 2010 17:36:38 -0700
Subject: eliminated some WTF code

---
 indra/newview/llfavoritesbar.cpp | 15 +++------------
 1 file changed, 3 insertions(+), 12 deletions(-)

diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp
index 6b7a257a4b..98c6642e08 100644
--- a/indra/newview/llfavoritesbar.cpp
+++ b/indra/newview/llfavoritesbar.cpp
@@ -167,22 +167,13 @@ public:
 		
 		if (!region_name.empty())
 		{
-			LLToolTip::Params params;
 			std::string extra_message = llformat("%s (%d, %d, %d)", region_name.c_str(), 
 				mLandmarkInfoGetter.getPosX(), mLandmarkInfoGetter.getPosY(), mLandmarkInfoGetter.getPosZ());
 
+			LLToolTip::Params params;
 			params.message = llformat("%s\n%s", getLabelSelected().c_str(), extra_message.c_str());
-			
-			LLRect rect = calcScreenRect();
-			LLFontGL* standart_font = LLFontGL::getFontSansSerif();
-			if(standart_font)
-			{
-				S32 w = llmax((S32)(standart_font->getWidthF32(getLabelSelected())+0.5),(S32)(standart_font->getWidthF32(extra_message)+0.5));
-				rect.mRight = rect.mLeft + w;
-				params.max_width = w;
-			}
-			
-			params.sticky_rect = rect; 
+			params.max_width = 1000;			
+			params.sticky_rect = calcScreenRect(); 
 
 			LLToolTipMgr::instance().show(params);
 		}
-- 
cgit v1.2.3


From 44e312541acd151c9d3ae264fae44e2d10284969 Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Thu, 19 Aug 2010 17:37:12 -0700
Subject: made favorites button tooltips override parent generic tooltip more
 consistently

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

diff --git a/indra/llui/lltooltip.cpp b/indra/llui/lltooltip.cpp
index 025725476e..b3699c738e 100644
--- a/indra/llui/lltooltip.cpp
+++ b/indra/llui/lltooltip.cpp
@@ -84,9 +84,9 @@ BOOL LLToolTipView::handleHover(S32 x, S32 y, MASK mask)
 
 	LLToolTipMgr& tooltip_mgr = LLToolTipMgr::instance();
 
-	if (x != last_x && y != last_y)
+	if (x != last_x && y != last_y && !tooltip_mgr.getMouseNearRect().pointInRect(x, y))
 	{
-		// allow new tooltips because mouse moved
+		// allow new tooltips because mouse moved outside of mouse near rect
 		tooltip_mgr.unblockToolTips();
 	}
 
@@ -586,6 +586,7 @@ void LLToolTipMgr::updateToolTipVisibility()
 		if (mToolTip->getVisibleTime() > tooltip_timeout)
 		{
 			hideToolTips();
+			unblockToolTips();
 		}
 	}
 }
-- 
cgit v1.2.3


From 02d8197019dcecec7aee80a104c4644ddb4807ca Mon Sep 17 00:00:00 2001
From: Richard Nelson <none@none>
Date: Fri, 20 Aug 2010 10:14:28 -0700
Subject: changed buildPanel/buildFloater to member functions buildFromFile
 streamlined LLUICtrlFactory's interface

---
 .../llui_libtest/llui_libtest.cpp                  |  7 +-
 indra/llui/llaccordionctrl.cpp                     |  2 +-
 indra/llui/llfloater.cpp                           | 21 +++---
 indra/llui/llfloater.h                             |  2 +-
 indra/llui/llfloaterreg.cpp                        |  2 +-
 indra/llui/llpanel.cpp                             | 20 +++---
 indra/llui/llpanel.h                               |  2 +-
 indra/llui/lluictrlfactory.h                       | 80 +++++++++++-----------
 indra/newview/llavatarlist.cpp                     |  2 +-
 indra/newview/llavatarlistitem.cpp                 |  2 +-
 indra/newview/llbottomtray.cpp                     |  4 +-
 indra/newview/llchathistory.cpp                    |  2 +-
 indra/newview/llchatitemscontainerctrl.cpp         |  2 +-
 indra/newview/llfavoritesbar.cpp                   | 45 ++++++------
 indra/newview/llfavoritesbar.h                     |  4 +-
 indra/newview/llfloaternotificationsconsole.cpp    |  2 +-
 indra/newview/llfloaterregioninfo.cpp              | 12 ++--
 indra/newview/llfloaterscriptlimits.cpp            |  4 +-
 indra/newview/llfloateruipreview.cpp               |  8 +--
 indra/newview/llfloaterurlentry.cpp                |  2 +-
 indra/newview/llgrouplist.cpp                      |  2 +-
 indra/newview/llhints.cpp                          | 10 ++-
 indra/newview/llhudview.cpp                        |  2 +-
 indra/newview/llmoveview.cpp                       |  2 +-
 indra/newview/llnavigationbar.cpp                  |  2 +-
 indra/newview/lloutfitslist.cpp                    | 40 +++++++----
 indra/newview/lloutfitslist.h                      |  6 --
 indra/newview/llpanelavatartag.cpp                 |  2 +-
 indra/newview/llpanelclassified.cpp                |  4 +-
 indra/newview/llpanelgenerictip.cpp                |  2 +-
 indra/newview/llpanelgroupinvite.cpp               |  2 +-
 indra/newview/llpanellandmarks.cpp                 |  2 +-
 indra/newview/llpanellogin.cpp                     |  2 +-
 indra/newview/llpanelme.cpp                        |  2 +-
 indra/newview/llpanelmediasettingsgeneral.cpp      |  2 +-
 indra/newview/llpanelmediasettingspermissions.cpp  |  2 +-
 indra/newview/llpanelmediasettingssecurity.cpp     |  2 +-
 indra/newview/llpanelnearbymedia.cpp               |  2 +-
 indra/newview/llpanelonlinestatus.cpp              |  2 +-
 indra/newview/llpanelpick.cpp                      |  4 +-
 indra/newview/llpanelpicks.cpp                     |  4 +-
 indra/newview/llpanelplaces.cpp                    |  2 +-
 indra/newview/llpanelprimmediacontrols.cpp         |  2 +-
 indra/newview/llpanelteleporthistory.cpp           |  4 +-
 indra/newview/llpaneltopinfobar.cpp                |  2 +-
 indra/newview/llpanelvolumepulldown.cpp            |  2 +-
 indra/newview/llpreviewscript.cpp                  |  4 +-
 indra/newview/llscrollingpanelparam.cpp            |  2 +-
 indra/newview/llsidepanelinventory.cpp             |  2 +-
 indra/newview/llstatusbar.cpp                      |  2 +-
 indra/newview/llsyswellitem.cpp                    |  2 +-
 indra/newview/llsyswellwindow.cpp                  |  4 +-
 indra/newview/lltoast.cpp                          |  2 +-
 indra/newview/lltoastgroupnotifypanel.cpp          |  2 +-
 indra/newview/lltoastimpanel.cpp                   |  2 +-
 indra/newview/lltoastnotifypanel.cpp               |  2 +-
 indra/newview/llviewermenu.cpp                     |  2 +-
 indra/newview/llviewerwindow.cpp                   |  2 +-
 58 files changed, 187 insertions(+), 176 deletions(-)

diff --git a/indra/integration_tests/llui_libtest/llui_libtest.cpp b/indra/integration_tests/llui_libtest/llui_libtest.cpp
index abd8f7dbde..8383066e46 100644
--- a/indra/integration_tests/llui_libtest/llui_libtest.cpp
+++ b/indra/integration_tests/llui_libtest/llui_libtest.cpp
@@ -191,10 +191,9 @@ void export_test_floaters()
 		// Build a floater and output new attributes
 		LLXMLNodePtr output_node = new LLXMLNode();
 		LLFloater* floater = new LLFloater(LLSD());
-		LLUICtrlFactory::getInstance()->buildFloater(floater,
-													 filename,
-												//	 FALSE,	// don't open floater
-													 output_node);
+		floater->buildFromFile(	filename,
+								//	 FALSE,	// don't open floater
+								output_node);
 		std::string out_filename = xui_dir + filename;
 		std::string::size_type extension_pos = out_filename.rfind(".xml");
 		out_filename.resize(extension_pos);
diff --git a/indra/llui/llaccordionctrl.cpp b/indra/llui/llaccordionctrl.cpp
index 9337626c8e..5ce52185e3 100644
--- a/indra/llui/llaccordionctrl.cpp
+++ b/indra/llui/llaccordionctrl.cpp
@@ -89,7 +89,7 @@ LLAccordionCtrl::LLAccordionCtrl() : LLPanel()
 
 	mSingleExpansion = false;
 	mFitParent = false;
-	buildPanel(this, "accordion_parent.xml");	
+	buildFromFile( "accordion_parent.xml");	
 }
 
 //---------------------------------------------------------------------------------
diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp
index d66b3c1707..0cd692b4a4 100644
--- a/indra/llui/llfloater.cpp
+++ b/indra/llui/llfloater.cpp
@@ -2887,8 +2887,7 @@ bool LLFloater::isVisible(const LLFloater* floater)
 
 static LLFastTimer::DeclareTimer FTM_BUILD_FLOATERS("Build Floaters");
 
-/* static */
-bool LLFloater::buildFloater(LLFloater* floaterp, const std::string& filename, LLXMLNodePtr output_node)
+bool LLFloater::buildFromFile(const std::string& filename, LLXMLNodePtr output_node)
 {
 	LLFastTimer timer(FTM_BUILD_FLOATERS);
 	LLXMLNodePtr root;
@@ -2921,23 +2920,23 @@ bool LLFloater::buildFloater(LLFloater* floaterp, const std::string& filename, L
 	lldebugs << "Building floater " << filename << llendl;
 	LLUICtrlFactory::instance().pushFileName(filename);
 	{
-		if (!floaterp->getFactoryMap().empty())
+		if (!getFactoryMap().empty())
 		{
-			LLPanel::sFactoryStack.push_front(&floaterp->getFactoryMap());
+			LLPanel::sFactoryStack.push_front(&getFactoryMap());
 		}
 
 		 // for local registry callbacks; define in constructor, referenced in XUI or postBuild
-		floaterp->getCommitCallbackRegistrar().pushScope();
-		floaterp->getEnableCallbackRegistrar().pushScope();
+		getCommitCallbackRegistrar().pushScope();
+		getEnableCallbackRegistrar().pushScope();
 		
-		res = floaterp->initFloaterXML(root, floaterp->getParent(), filename, output_node);
+		res = initFloaterXML(root, getParent(), filename, output_node);
 
-		floaterp->setXMLFilename(filename);
+		setXMLFilename(filename);
 		
-		floaterp->getCommitCallbackRegistrar().popScope();
-		floaterp->getEnableCallbackRegistrar().popScope();
+		getCommitCallbackRegistrar().popScope();
+		getEnableCallbackRegistrar().popScope();
 		
-		if (!floaterp->getFactoryMap().empty())
+		if (!getFactoryMap().empty())
 		{
 			LLPanel::sFactoryStack.pop_front();
 		}
diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h
index 69762c7723..750cf23c7d 100644
--- a/indra/llui/llfloater.h
+++ b/indra/llui/llfloater.h
@@ -147,7 +147,7 @@ public:
 
 	// Don't export top/left for rect, only height/width
 	static void setupParamsForExport(Params& p, LLView* parent);
-	static bool buildFloater(LLFloater* floaterp, const std::string &filename, LLXMLNodePtr output_node);
+	bool buildFromFile(const std::string &filename, LLXMLNodePtr output_node = NULL);
 
 	void initFromParams(const LLFloater::Params& p);
 	bool initFloaterXML(LLXMLNodePtr node, LLView *parent, const std::string& filename, LLXMLNodePtr output_node = NULL);
diff --git a/indra/llui/llfloaterreg.cpp b/indra/llui/llfloaterreg.cpp
index 2c31854011..39a67ee57b 100644
--- a/indra/llui/llfloaterreg.cpp
+++ b/indra/llui/llfloaterreg.cpp
@@ -127,7 +127,7 @@ LLFloater* LLFloaterReg::getInstance(const std::string& name, const LLSD& key)
 
 				res = build_func(key);
 				
-				bool success = LLFloater::buildFloater(res, xui_file, NULL);
+				bool success = res->buildFromFile(xui_file, NULL);
 				if (!success)
 				{
 					llwarns << "Failed to build floater type: '" << name << "'." << llendl;
diff --git a/indra/llui/llpanel.cpp b/indra/llui/llpanel.cpp
index f79429e0f6..51c8f6c743 100644
--- a/indra/llui/llpanel.cpp
+++ b/indra/llui/llpanel.cpp
@@ -972,7 +972,7 @@ static LLFastTimer::DeclareTimer FTM_BUILD_PANELS("Build Panels");
 //-----------------------------------------------------------------------------
 // buildPanel()
 //-----------------------------------------------------------------------------
-BOOL LLPanel::buildPanel(LLPanel* panelp, const std::string& filename, LLXMLNodePtr output_node, const LLPanel::Params& default_params)
+BOOL LLPanel::buildFromFile(const std::string& filename, LLXMLNodePtr output_node, const LLPanel::Params& default_params)
 {
 	LLFastTimer timer(FTM_BUILD_PANELS);
 	BOOL didPost = FALSE;
@@ -1005,23 +1005,23 @@ BOOL LLPanel::buildPanel(LLPanel* panelp, const std::string& filename, LLXMLNode
 
 	LLUICtrlFactory::instance().pushFileName(filename);
 	{
-		if (!panelp->getFactoryMap().empty())
+		if (!getFactoryMap().empty())
 		{
-			sFactoryStack.push_back(&panelp->getFactoryMap());
+			sFactoryStack.push_back(&getFactoryMap());
 		}
 		
 		 // for local registry callbacks; define in constructor, referenced in XUI or postBuild
-		panelp->getCommitCallbackRegistrar().pushScope();
-		panelp->getEnableCallbackRegistrar().pushScope();
+		getCommitCallbackRegistrar().pushScope();
+		getEnableCallbackRegistrar().pushScope();
 		
-		didPost = panelp->initPanelXML(root, NULL, output_node, default_params);
+		didPost = initPanelXML(root, NULL, output_node, default_params);
 
-		panelp->getCommitCallbackRegistrar().popScope();
-		panelp->getEnableCallbackRegistrar().popScope();
+		getCommitCallbackRegistrar().popScope();
+		getEnableCallbackRegistrar().popScope();
 		
-		panelp->setXMLFilename(filename);
+		setXMLFilename(filename);
 
-		if (!panelp->getFactoryMap().empty())
+		if (!getFactoryMap().empty())
 		{
 			sFactoryStack.pop_back();
 		}
diff --git a/indra/llui/llpanel.h b/indra/llui/llpanel.h
index de16d28e27..cacd1fdcf0 100644
--- a/indra/llui/llpanel.h
+++ b/indra/llui/llpanel.h
@@ -110,7 +110,7 @@ protected:
 	LLPanel(const LLPanel::Params& params = getDefaultParams());
 	
 public:
-	static 	BOOL buildPanel(LLPanel* panelp, const std::string &filename, LLXMLNodePtr output_node = NULL, const LLPanel::Params&default_params = getDefaultParams());
+	BOOL buildFromFile(const std::string &filename, LLXMLNodePtr output_node = NULL, const LLPanel::Params&default_params = getDefaultParams());
 
 	static LLPanel* createFactoryPanel(const std::string& name);
 
diff --git a/indra/llui/lluictrlfactory.h b/indra/llui/lluictrlfactory.h
index 16fb618c88..82076335d7 100644
--- a/indra/llui/lluictrlfactory.h
+++ b/indra/llui/lluictrlfactory.h
@@ -155,38 +155,12 @@ public:
 	void pushFileName(const std::string& name);
 	void popFileName();
 
-	template<typename T>
-	static T* createWidget(const typename T::Params& params, LLView* parent = NULL)
-	{
-		T* widget = NULL;
-
-		if (!params.validateBlock())
-		{
-			llwarns << getInstance()->getCurFileName() << ": Invalid parameter block for " << typeid(T).name() << llendl;
-			//return NULL;
-		}
-
-		{ LLFastTimer _(FTM_WIDGET_CONSTRUCTION);
-			widget = new T(params);	
-		}
-		{ LLFastTimer _(FTM_INIT_FROM_PARAMS);
-			widget->initFromParams(params);
-		}
-
-		if (parent)
-		{
-			S32 tab_group = params.tab_group.isProvided() ? params.tab_group() : S32_MAX;
-			setCtrlParent(widget, parent, tab_group);
-		}
-		return widget;
-	}
-
 	template<typename T>
 	static T* create(typename T::Params& params, LLView* parent = NULL)
 	{
 		params.fillFrom(ParamDefaults<typename T::Params, 0>::instance().get());
 
-		T* widget = createWidget<T>(params, parent);
+		T* widget = createWidgetImpl<T>(params, parent);
 		if (widget)
 		{
 			widget->postBuild();
@@ -249,8 +223,47 @@ fail:
 		return create<T>(widget_params);
 	}
 
+	static void createChildren(LLView* viewp, LLXMLNodePtr node, const widget_registry_t&, LLXMLNodePtr output_node = NULL);
+
+	static bool getLayeredXMLNode(const std::string &filename, LLXMLNodePtr& root);
+	static bool getLocalizedXMLNode(const std::string &xui_filename, LLXMLNodePtr& root);
+
+private:
+	template <typename T> friend class LLChildRegistry;
+
 	static void copyName(LLXMLNodePtr src, LLXMLNodePtr dest);
 
+	// helper function for adding widget type info to various registries
+	static void registerWidget(const std::type_info* widget_type, const std::type_info* param_block_type, const std::string& tag);
+
+	static void loadWidgetTemplate(const std::string& widget_tag, LLInitParam::BaseBlock& block);
+
+	template<typename T>
+	static T* createWidgetImpl(const typename T::Params& params, LLView* parent = NULL)
+	{
+		T* widget = NULL;
+
+		if (!params.validateBlock())
+		{
+			llwarns << getInstance()->getCurFileName() << ": Invalid parameter block for " << typeid(T).name() << llendl;
+			//return NULL;
+		}
+
+		{ LLFastTimer _(FTM_WIDGET_CONSTRUCTION);
+			widget = new T(params);	
+		}
+		{ LLFastTimer _(FTM_INIT_FROM_PARAMS);
+			widget->initFromParams(params);
+		}
+
+		if (parent)
+		{
+			S32 tab_group = params.tab_group.isProvided() ? params.tab_group() : S32_MAX;
+			setCtrlParent(widget, parent, tab_group);
+		}
+		return widget;
+	}
+
 	template<typename T>
 	static T* defaultBuilder(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr output_node)
 	{
@@ -275,7 +288,7 @@ fail:
 		// Apply layout transformations, usually munging rect
 		params.from_xui = true;
 		T::applyXUILayout(params, parent);
-		T* widget = createWidget<T>(params, parent);
+		T* widget = createWidgetImpl<T>(params, parent);
 
 		typedef typename T::child_registry_t registry_t;
 
@@ -290,18 +303,7 @@ fail:
 		return widget;
 	}
 
-	static void createChildren(LLView* viewp, LLXMLNodePtr node, const widget_registry_t&, LLXMLNodePtr output_node = NULL);
-
-	static bool getLayeredXMLNode(const std::string &filename, LLXMLNodePtr& root);
-	
-	static bool getLocalizedXMLNode(const std::string &xui_filename, LLXMLNodePtr& root);
-
-	static void loadWidgetTemplate(const std::string& widget_tag, LLInitParam::BaseBlock& block);
 
-	// helper function for adding widget type info to various registries
-	static void registerWidget(const std::type_info* widget_type, const std::type_info* param_block_type, const std::string& tag);
-
-private:
 	static const std::string* getWidgetTag(const std::type_info* widget_type);
 
 	// this exists to get around dependency on llview
diff --git a/indra/newview/llavatarlist.cpp b/indra/newview/llavatarlist.cpp
index f448816f76..95ced5067d 100644
--- a/indra/newview/llavatarlist.cpp
+++ b/indra/newview/llavatarlist.cpp
@@ -498,7 +498,7 @@ LLAvalineListItem::LLAvalineListItem(bool hide_number/* = true*/) : LLAvatarList
 , mIsHideNumber(hide_number)
 {
 	// should not use buildPanel from the base class to ensure LLAvalineListItem::postBuild is called.
-	buildPanel(this, "panel_avatar_list_item.xml");
+	buildFromFile( "panel_avatar_list_item.xml");
 }
 
 BOOL LLAvalineListItem::postBuild()
diff --git a/indra/newview/llavatarlistitem.cpp b/indra/newview/llavatarlistitem.cpp
index 18a5d74527..81c9b64c12 100644
--- a/indra/newview/llavatarlistitem.cpp
+++ b/indra/newview/llavatarlistitem.cpp
@@ -75,7 +75,7 @@ LLAvatarListItem::LLAvatarListItem(bool not_from_ui_factory/* = true*/)
 {
 	if (not_from_ui_factory)
 	{
-		buildPanel(this, "panel_avatar_list_item.xml");
+		buildFromFile("panel_avatar_list_item.xml");
 	}
 	// *NOTE: mantipov: do not use any member here. They can be uninitialized here in case instance
 	// is created from the UICtrlFactory
diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp
index 310b406bfd..c4eda5f107 100644
--- a/indra/newview/llbottomtray.cpp
+++ b/indra/newview/llbottomtray.cpp
@@ -112,7 +112,7 @@ public:
 		  mGesturePanel(NULL)
 	{
 		mFactoryMap["chat_bar"] = LLCallbackMap(LLBottomTray::createNearbyChatBar, NULL);
-		buildPanel(this, "panel_bottomtray_lite.xml");
+		buildFromFile("panel_bottomtray_lite.xml");
 		// Necessary for focus movement among child controls
 		setFocusRoot(TRUE);
 	}
@@ -163,7 +163,7 @@ LLBottomTray::LLBottomTray(const LLSD&)
 
 	mFactoryMap["chat_bar"] = LLCallbackMap(LLBottomTray::createNearbyChatBar, NULL);
 
-	buildPanel(this,"panel_bottomtray.xml");
+	buildFromFile("panel_bottomtray.xml");
 
 	LLUICtrl::CommitCallbackRegistry::defaultRegistrar().add("CameraPresets.ChangeView", boost::bind(&LLFloaterCamera::onClickCameraItem, _2));
 
diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index b6788b7739..e1e425fa8c 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -107,7 +107,7 @@ public:
 	static LLChatHistoryHeader* createInstance(const std::string& file_name)
 	{
 		LLChatHistoryHeader* pInstance = new LLChatHistoryHeader;
-		buildPanel(pInstance, file_name);	
+		pInstance->buildFromFile(file_name);	
 		return pInstance;
 	}
 
diff --git a/indra/newview/llchatitemscontainerctrl.cpp b/indra/newview/llchatitemscontainerctrl.cpp
index ed4803f87a..b1c878ed76 100644
--- a/indra/newview/llchatitemscontainerctrl.cpp
+++ b/indra/newview/llchatitemscontainerctrl.cpp
@@ -57,7 +57,7 @@ static const S32 msg_height_pad = 5;
 LLNearbyChatToastPanel* LLNearbyChatToastPanel::createInstance()
 {
 	LLNearbyChatToastPanel* item = new LLNearbyChatToastPanel();
-	buildPanel(item, "panel_chat_item.xml");
+	item->buildFromFile("panel_chat_item.xml");
 	item->setFollows(FOLLOWS_NONE);
 	return item;
 }
diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp
index 6b7a257a4b..b8776d0af2 100644
--- a/indra/newview/llfavoritesbar.cpp
+++ b/indra/newview/llfavoritesbar.cpp
@@ -667,16 +667,22 @@ void LLFavoritesBarCtrl::draw()
 	}
 }
 
-LLXMLNodePtr LLFavoritesBarCtrl::getButtonXMLNode()
+const LLButton::Params& LLFavoritesBarCtrl::getButtonParams()
 {
-	LLXMLNodePtr buttonXMLNode = NULL;
-	bool success = LLUICtrlFactory::getLayeredXMLNode("favorites_bar_button.xml", buttonXMLNode);
-	if (!success)
+	static LLButton::Params button_params;
+	static bool params_initialized = false;
+
+	if (!params_initialized)
 	{
-		llwarns << "Failed to create Favorites Bar button from favorites_bar_button.xml" << llendl;
-		buttonXMLNode = NULL;
+		LLXMLNodePtr button_xml_node;
+		if(LLUICtrlFactory::getLayeredXMLNode("favorites_bar_button.xml", button_xml_node))
+		{
+			LLXUIParser::instance().readXUI(button_xml_node, button_params, "favorites_bar_button.xml");
+		}
+		params_initialized = true;
 	}
-	return buttonXMLNode;
+
+	return button_params;
 }
 
 void LLFavoritesBarCtrl::updateButtons()
@@ -688,11 +694,8 @@ void LLFavoritesBarCtrl::updateButtons()
 		return;
 	}
 
-	static LLXMLNodePtr buttonXMLNode = getButtonXMLNode();
-	if (buttonXMLNode.isNull())
-	{
-		return;
-	}
+	const LLButton::Params& button_params = getButtonParams();
+
 	if(mItems.empty())
 	{
 		mBarLabel->setVisible(TRUE);
@@ -768,7 +771,7 @@ void LLFavoritesBarCtrl::updateButtons()
 		int j = first_changed_item_index;
 		for (; j < mItems.count(); j++)
 		{
-			last_new_button = createButton(mItems[j], buttonXMLNode, last_right_edge);
+			last_new_button = createButton(mItems[j], button_params, last_right_edge);
 			if (!last_new_button)
 			{
 				break;
@@ -786,8 +789,7 @@ void LLFavoritesBarCtrl::updateButtons()
 			//or there are some new favorites, or width had been changed
 			// so if we need to display chevron button,  we must update dropdown items too. 
 			mUpdateDropDownItems = true;
-			S32 buttonHGap = 2; // default value
-			buttonXMLNode->getAttributeS32("left", buttonHGap);
+			S32 buttonHGap = button_params.rect.left; // default value
 			LLRect rect;
 			// Chevron button should stay right aligned
 			rect.setOriginAndSize(getRect().mRight - mChevronButton->getRect().getWidth() - buttonHGap, 0,
@@ -814,12 +816,10 @@ void LLFavoritesBarCtrl::updateButtons()
 	}
 }
 
-LLButton* LLFavoritesBarCtrl::createButton(const LLPointer<LLViewerInventoryItem> item, LLXMLNodePtr &buttonXMLNode, S32 x_offset)
+LLButton* LLFavoritesBarCtrl::createButton(const LLPointer<LLViewerInventoryItem> item, const LLButton::Params& button_params, S32 x_offset)
 {
-	S32 def_button_width = 120;
-	buttonXMLNode->getAttributeS32("width", def_button_width);
-	S32 button_x_delta = 2; // default value
-	buttonXMLNode->getAttributeS32("left", button_x_delta);
+	S32 def_button_width = button_params.rect.width;
+	S32 button_x_delta = button_params.rect.left; // default value
 	S32 curr_x = x_offset;
 
 	/**
@@ -837,13 +837,16 @@ LLButton* LLFavoritesBarCtrl::createButton(const LLPointer<LLViewerInventoryItem
 	{
 		return NULL;
 	}
-	fav_btn = LLUICtrlFactory::defaultBuilder<LLFavoriteLandmarkButton>(buttonXMLNode, this, NULL);
+	LLButton::Params fav_btn_params(button_params);
+	fav_btn = LLUICtrlFactory::create<LLFavoriteLandmarkButton>(fav_btn_params);
 	if (NULL == fav_btn)
 	{
 		llwarns << "Unable to create LLFavoriteLandmarkButton widget: " << item->getName() << llendl;
 		return NULL;
 	}
 	
+	addChild(fav_btn);
+
 	LLRect butt_rect (fav_btn->getRect());
 	fav_btn->setLandmarkID(item->getUUID());
 	butt_rect.setOriginAndSize(curr_x + button_x_delta, fav_btn->getRect().mBottom, width, fav_btn->getRect().getHeight());
diff --git a/indra/newview/llfavoritesbar.h b/indra/newview/llfavoritesbar.h
index 2c6d8d1580..62f2825bbe 100644
--- a/indra/newview/llfavoritesbar.h
+++ b/indra/newview/llfavoritesbar.h
@@ -77,8 +77,8 @@ public:
 
 protected:
 	void updateButtons();
-	LLButton* createButton(const LLPointer<LLViewerInventoryItem> item, LLXMLNodePtr &root, S32 x_offset );
-	LLXMLNodePtr getButtonXMLNode();
+	LLButton* createButton(const LLPointer<LLViewerInventoryItem> item, const LLButton::Params& button_params, S32 x_offset );
+	const LLButton::Params& getButtonParams();
 	BOOL collectFavoriteItems(LLInventoryModel::item_array_t &items);
 
 	void onButtonClick(LLUUID id);
diff --git a/indra/newview/llfloaternotificationsconsole.cpp b/indra/newview/llfloaternotificationsconsole.cpp
index b7bca5c6cd..3d37c878ad 100644
--- a/indra/newview/llfloaternotificationsconsole.cpp
+++ b/indra/newview/llfloaternotificationsconsole.cpp
@@ -65,7 +65,7 @@ LLNotificationChannelPanel::LLNotificationChannelPanel(const std::string& channe
 	mChannelRejectsPtr = LLNotificationChannelPtr(
 		LLNotificationChannel::buildChannel(channel_name + "rejects", mChannelPtr->getParentChannelName(),
 											!boost::bind(mChannelPtr->getFilter(), _1)));
-	buildPanel(this, "panel_notifications_channel.xml");
+	buildFromFile( "panel_notifications_channel.xml");
 }
 
 BOOL LLNotificationChannelPanel::postBuild()
diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp
index b61d90043e..8c552d0c06 100644
--- a/indra/newview/llfloaterregioninfo.cpp
+++ b/indra/newview/llfloaterregioninfo.cpp
@@ -179,32 +179,32 @@ BOOL LLFloaterRegionInfo::postBuild()
 	mInfoPanels.push_back(panel);
 	panel->getCommitCallbackRegistrar().add("RegionInfo.ManageTelehub",	boost::bind(&LLPanelRegionInfo::onClickManageTelehub, panel));
 	
-	buildPanel(panel, "panel_region_general.xml");
+	panel->buildFromFile("panel_region_general.xml");
 	mTab->addTabPanel(LLTabContainer::TabPanelParams().panel(panel).select_tab(true));
 
 	panel = new LLPanelRegionDebugInfo;
 	mInfoPanels.push_back(panel);
-	buildPanel(panel, "panel_region_debug.xml");
+	panel->buildFromFile("panel_region_debug.xml");
 	mTab->addTabPanel(panel);
 
 	panel = new LLPanelRegionTextureInfo;
 	mInfoPanels.push_back(panel);
-	buildPanel(panel, "panel_region_texture.xml");
+	panel->buildFromFile("panel_region_texture.xml");
 	mTab->addTabPanel(panel);
 
 	panel = new LLPanelRegionTerrainInfo;
 	mInfoPanels.push_back(panel);
-	buildPanel(panel, "panel_region_terrain.xml");
+	panel->buildFromFile("panel_region_terrain.xml");
 	mTab->addTabPanel(panel);
 
 	panel = new LLPanelEstateInfo;
 	mInfoPanels.push_back(panel);
-	buildPanel(panel, "panel_region_estate.xml");
+	panel->buildFromFile("panel_region_estate.xml");
 	mTab->addTabPanel(panel);
 
 	panel = new LLPanelEstateCovenant;
 	mInfoPanels.push_back(panel);
-	buildPanel(panel, "panel_region_covenant.xml");
+	panel->buildFromFile("panel_region_covenant.xml");
 	mTab->addTabPanel(panel);
 
 	gMessageSystem->setHandlerFunc(
diff --git a/indra/newview/llfloaterscriptlimits.cpp b/indra/newview/llfloaterscriptlimits.cpp
index a6f3acd18d..6a20998245 100644
--- a/indra/newview/llfloaterscriptlimits.cpp
+++ b/indra/newview/llfloaterscriptlimits.cpp
@@ -121,7 +121,7 @@ BOOL LLFloaterScriptLimits::postBuild()
 		LLPanelScriptLimitsRegionMemory* panel_memory;
 		panel_memory = new LLPanelScriptLimitsRegionMemory;
 		mInfoPanels.push_back(panel_memory);
-		buildPanel(panel_memory, "panel_script_limits_region_memory.xml");
+		panel_memory->buildFromFile( "panel_script_limits_region_memory.xml");
 		mTab->addTabPanel(panel_memory);
 	}
 	
@@ -130,7 +130,7 @@ BOOL LLFloaterScriptLimits::postBuild()
 	{
 		LLPanelScriptLimitsAttachment* panel_attachments = new LLPanelScriptLimitsAttachment;
 		mInfoPanels.push_back(panel_attachments);
-		buildPanel(panel_attachments, "panel_script_limits_my_avatar.xml");
+		panel_attachments->buildFromFile("panel_script_limits_my_avatar.xml");
 		mTab->addTabPanel(panel_attachments);
 	}
 	
diff --git a/indra/newview/llfloateruipreview.cpp b/indra/newview/llfloateruipreview.cpp
index 7c2a449343..19790c8868 100644
--- a/indra/newview/llfloateruipreview.cpp
+++ b/indra/newview/llfloateruipreview.cpp
@@ -837,7 +837,7 @@ void LLFloaterUIPreview::displayFloater(BOOL click, S32 ID, bool save)
 		if (save)
 		{
 			LLXMLNodePtr floater_write = new LLXMLNode();			
-			buildFloater(*floaterp, path, floater_write);	// just build it
+			*floaterp->buildFromFile(path, floater_write);	// just build it
 
 			if (!floater_write->isNull())
 			{
@@ -851,7 +851,7 @@ void LLFloaterUIPreview::displayFloater(BOOL click, S32 ID, bool save)
 		}
 		else
 		{
-			buildFloater(*floaterp, path, NULL);	// just build it
+			(*floaterp)->buildFromFile(path);	// just build it
 			(*floaterp)->openFloater((*floaterp)->getKey());
 			(*floaterp)->setCanResize((*floaterp)->isResizable());
 		}
@@ -890,7 +890,7 @@ void LLFloaterUIPreview::displayFloater(BOOL click, S32 ID, bool save)
 		if (save)
 		{
 			LLXMLNodePtr panel_write = new LLXMLNode();
-			buildPanel(panel, path, panel_write);		// build it
+			panel->buildFromFile(path, panel_write);		// build it
 			
 			if (!panel_write->isNull())
 			{
@@ -904,7 +904,7 @@ void LLFloaterUIPreview::displayFloater(BOOL click, S32 ID, bool save)
 		}
 		else
 		{
-			buildPanel(panel, path);		// build it
+			panel->buildFromFile(path);										// build it
 			LLRect new_size = panel->getRect();								// get its rectangle
 			panel->setOrigin(0,0);											// reset its origin point so it's not offset by -left or other XUI attributes
 			(*floaterp)->setTitle(path);									// use the file name as its title, since panels have no guaranteed meaningful name attribute
diff --git a/indra/newview/llfloaterurlentry.cpp b/indra/newview/llfloaterurlentry.cpp
index a192cfda3d..639b664920 100644
--- a/indra/newview/llfloaterurlentry.cpp
+++ b/indra/newview/llfloaterurlentry.cpp
@@ -88,7 +88,7 @@ LLFloaterURLEntry::LLFloaterURLEntry(LLHandle<LLPanel> parent)
 	: LLFloater(LLSD()),
 	  mPanelLandMediaHandle(parent)
 {
-	buildFloater(this, "floater_url_entry.xml", NULL);
+	buildFromFile("floater_url_entry.xml");
 }
 
 //-----------------------------------------------------------------------------
diff --git a/indra/newview/llgrouplist.cpp b/indra/newview/llgrouplist.cpp
index af931810a2..f2ca6ea5d1 100644
--- a/indra/newview/llgrouplist.cpp
+++ b/indra/newview/llgrouplist.cpp
@@ -289,7 +289,7 @@ mGroupNameBox(NULL),
 mInfoBtn(NULL),
 mGroupID(LLUUID::null)
 {
-	buildPanel(this, "panel_group_list_item.xml");
+	buildFromFile( "panel_group_list_item.xml");
 
 	// Remember group icon width including its padding from the name text box,
 	// so that we can hide and show the icon again later.
diff --git a/indra/newview/llhints.cpp b/indra/newview/llhints.cpp
index c4cea86a31..e0ced5caeb 100644
--- a/indra/newview/llhints.cpp
+++ b/indra/newview/llhints.cpp
@@ -137,9 +137,8 @@ static LLDefaultChildRegistry::Register<LLHintPopup> r("hint_popup");
 
 LLHintPopup::LLHintPopup(const LLHintPopup::Params& p)
 :	mNotification(p.notification),
-	mDirection(p.target_params.direction),
+	mDirection(TOP),
 	mDistance(p.distance),
-	mTarget(p.target_params.target),
 	mArrowLeft(p.left_arrow),
 	mArrowUp(p.up_arrow),
 	mArrowRight(p.right_arrow),
@@ -153,7 +152,12 @@ LLHintPopup::LLHintPopup(const LLHintPopup::Params& p)
 	mFadeOutTime(p.fade_out_time),
 	LLPanel(p)
 {
-	buildPanel(this, "panel_hint.xml", NULL, p);
+	if (p.target_params.isProvided())
+	{
+		mDirection = p.target_params.direction;
+		mTarget = p.target_params.target;
+	}
+	buildFromFile( "panel_hint.xml", NULL, p);
 }
 
 BOOL LLHintPopup::postBuild()
diff --git a/indra/newview/llhudview.cpp b/indra/newview/llhudview.cpp
index beb3b4340a..ae3204e35c 100644
--- a/indra/newview/llhudview.cpp
+++ b/indra/newview/llhudview.cpp
@@ -56,7 +56,7 @@ const S32 HUD_ARROW_SIZE = 32;
 
 LLHUDView::LLHUDView(const LLRect& r)
 {
-	buildPanel(this, "panel_hud.xml");
+	buildFromFile( "panel_hud.xml");
 	setShape(r, true);
 }
 
diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp
index 680f937e83..f0fd7e1b7c 100644
--- a/indra/newview/llmoveview.cpp
+++ b/indra/newview/llmoveview.cpp
@@ -703,7 +703,7 @@ void LLPanelStandStopFlying::reparent(LLFloaterMove* move_view)
 LLPanelStandStopFlying* LLPanelStandStopFlying::getStandStopFlyingPanel()
 {
 	LLPanelStandStopFlying* panel = new LLPanelStandStopFlying();
-	buildPanel(panel, "panel_stand_stop_flying.xml");
+	panel->buildFromFile("panel_stand_stop_flying.xml");
 
 	panel->setVisible(FALSE);
 	//LLUI::getRootView()->addChild(panel);
diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp
index e53103237c..32b7a70204 100644
--- a/indra/newview/llnavigationbar.cpp
+++ b/indra/newview/llnavigationbar.cpp
@@ -278,7 +278,7 @@ LLNavigationBar::LLNavigationBar()
 	mPurgeTPHistoryItems(false),
 	mSaveToLocationHistory(false)
 {
-	buildPanel(this, "panel_navigation_bar.xml");
+	buildFromFile( "panel_navigation_bar.xml");
 
 	// set a listener function for LoginComplete event
 	LLAppViewer::instance()->setOnLoginCompletedCallback(boost::bind(&LLNavigationBar::handleLoginComplete, this));
diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp
index f2207e5c00..d35739d436 100644
--- a/indra/newview/lloutfitslist.cpp
+++ b/indra/newview/lloutfitslist.cpp
@@ -68,6 +68,29 @@ bool LLOutfitTabNameComparator::compare(const LLAccordionCtrlTab* tab1, const LL
 	return name1 < name2;
 }
 
+const LLAccordionCtrlTab::Params& get_accordion_tab_params()
+{
+	static LLAccordionCtrlTab::Params tab_params;
+	static bool initialized = false;
+	if (!initialized)
+	{
+		initialized = true;
+
+		LLXMLNodePtr xmlNode;
+		if (LLUICtrlFactory::getLayeredXMLNode("outfit_accordion_tab.xml", xmlNode))
+		{
+			LLXUIParser::instance().readXUI(xmlNode, tab_params, "outfit_accordion_tab.xml");
+		}
+		else
+		{
+			llwarns << "Failed to read xml of Outfit's Accordion Tab from outfit_accordion_tab.xml" << llendl;
+		}
+	}
+
+	return tab_params;
+}
+
+
 //////////////////////////////////////////////////////////////////////////
 
 class LLOutfitListGearMenu
@@ -442,8 +465,8 @@ void LLOutfitsList::refreshList(const LLUUID& category_id)
 
 		std::string name = cat->getName();
 
-		static LLXMLNodePtr accordionXmlNode = getAccordionTabXMLNode();
-		LLAccordionCtrlTab* tab = LLUICtrlFactory::defaultBuilder<LLAccordionCtrlTab>(accordionXmlNode, NULL, NULL);
+		LLAccordionCtrlTab::Params tab_params(get_accordion_tab_params());
+		LLAccordionCtrlTab* tab = LLUICtrlFactory::create<LLAccordionCtrlTab>(tab_params);
 
 		tab->setName(name);
 		tab->setTitle(name);
@@ -736,19 +759,6 @@ bool LLOutfitsList::hasItemSelected()
 //////////////////////////////////////////////////////////////////////////
 // Private methods
 //////////////////////////////////////////////////////////////////////////
-LLXMLNodePtr LLOutfitsList::getAccordionTabXMLNode()
-{
-	LLXMLNodePtr xmlNode = NULL;
-	bool success = LLUICtrlFactory::getLayeredXMLNode("outfit_accordion_tab.xml", xmlNode);
-	if (!success)
-	{
-		llwarns << "Failed to read xml of Outfit's Accordion Tab from outfit_accordion_tab.xml" << llendl;
-		return NULL;
-	}
-
-	return xmlNode;
-}
-
 void LLOutfitsList::computeDifference(
 	const LLInventoryModel::cat_array_t& vcats, 
 	uuid_vec_t& vadded, 
diff --git a/indra/newview/lloutfitslist.h b/indra/newview/lloutfitslist.h
index 206854b232..b3bc35dcda 100644
--- a/indra/newview/lloutfitslist.h
+++ b/indra/newview/lloutfitslist.h
@@ -116,12 +116,6 @@ public:
 	bool hasItemSelected();
 
 private:
-	/**
-	 * Reads xml with accordion tab and Flat list from xml file.
-	 *
-	 * @return LLPointer to XMLNode with accordion tab and flat list.
-	 */
-	LLXMLNodePtr getAccordionTabXMLNode();
 
 	/**
 	 * Wrapper for LLCommonUtils::computeDifference. @see LLCommonUtils::computeDifference
diff --git a/indra/newview/llpanelavatartag.cpp b/indra/newview/llpanelavatartag.cpp
index 0ffb10b18b..489222fb2a 100644
--- a/indra/newview/llpanelavatartag.cpp
+++ b/indra/newview/llpanelavatartag.cpp
@@ -43,7 +43,7 @@ LLPanelAvatarTag::LLPanelAvatarTag(const LLUUID& key, const std::string im_time)
 	, mAvatarId(LLUUID::null)
 //	, mFadeTimer()
 {
-	buildPanel(this, "panel_avatar_tag.xml");
+	buildFromFile( "panel_avatar_tag.xml");
 	setLeftButtonClickCallback(boost::bind(&LLPanelAvatarTag::onClick, this));
 	setAvatarId(key);
 	setTime(im_time);
diff --git a/indra/newview/llpanelclassified.cpp b/indra/newview/llpanelclassified.cpp
index 4d3d54ed15..8e0ebfa406 100644
--- a/indra/newview/llpanelclassified.cpp
+++ b/indra/newview/llpanelclassified.cpp
@@ -144,7 +144,7 @@ LLPanelClassifiedInfo::~LLPanelClassifiedInfo()
 LLPanelClassifiedInfo* LLPanelClassifiedInfo::create()
 {
 	LLPanelClassifiedInfo* panel = new LLPanelClassifiedInfo();
-	buildPanel(panel, "panel_classified_info.xml");
+	panel->buildFromFile("panel_classified_info.xml");
 	return panel;
 }
 
@@ -617,7 +617,7 @@ LLPanelClassifiedEdit::~LLPanelClassifiedEdit()
 LLPanelClassifiedEdit* LLPanelClassifiedEdit::create()
 {
 	LLPanelClassifiedEdit* panel = new LLPanelClassifiedEdit();
-	buildPanel(panel, "panel_edit_classified.xml");
+	panel->buildFromFile("panel_edit_classified.xml");
 	return panel;
 }
 
diff --git a/indra/newview/llpanelgenerictip.cpp b/indra/newview/llpanelgenerictip.cpp
index 709ed33ed1..7a05a2b8e7 100644
--- a/indra/newview/llpanelgenerictip.cpp
+++ b/indra/newview/llpanelgenerictip.cpp
@@ -42,7 +42,7 @@ LLPanelGenericTip::LLPanelGenericTip(
 		const LLNotificationPtr& notification) :
 		LLPanelTipToast(notification)
 {
-	buildPanel(this, "panel_generic_tip.xml");
+	buildFromFile( "panel_generic_tip.xml");
 
 	getChild<LLUICtrl>("message")->setValue(notification->getMessage());
 
diff --git a/indra/newview/llpanelgroupinvite.cpp b/indra/newview/llpanelgroupinvite.cpp
index b610fa9899..5d70e8bb30 100644
--- a/indra/newview/llpanelgroupinvite.cpp
+++ b/indra/newview/llpanelgroupinvite.cpp
@@ -375,7 +375,7 @@ LLPanelGroupInvite::LLPanelGroupInvite(const LLUUID& group_id)
 	  mPendingUpdate(FALSE)
 {
 	// Pass on construction of this panel to the control factory.
-	buildPanel(this, "panel_group_invite.xml");
+	buildFromFile( "panel_group_invite.xml");
 }
 
 LLPanelGroupInvite::~LLPanelGroupInvite()
diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp
index 9ad39d568c..038944802e 100644
--- a/indra/newview/llpanellandmarks.cpp
+++ b/indra/newview/llpanellandmarks.cpp
@@ -202,7 +202,7 @@ LLLandmarksPanel::LLLandmarksPanel()
 	mInventoryObserver = new LLLandmarksPanelObserver(this);
 	gInventory.addObserver(mInventoryObserver);
 
-	buildPanel(this, "panel_landmarks.xml");
+	buildFromFile( "panel_landmarks.xml");
 }
 
 LLLandmarksPanel::~LLLandmarksPanel()
diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp
index 6b71e37337..637a4968b0 100644
--- a/indra/newview/llpanellogin.cpp
+++ b/indra/newview/llpanellogin.cpp
@@ -193,7 +193,7 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
 	// Logo
 	mLogoImage = LLUI::getUIImage("startup_logo");
 
-	buildPanel(this, "panel_login.xml");
+	buildFromFile( "panel_login.xml");
 	
 #if USE_VIEWER_AUTH
 	//leave room for the login menu bar
diff --git a/indra/newview/llpanelme.cpp b/indra/newview/llpanelme.cpp
index 389fe8edbf..ca62a676ce 100644
--- a/indra/newview/llpanelme.cpp
+++ b/indra/newview/llpanelme.cpp
@@ -168,7 +168,7 @@ void LLPanelMe::onCancelClicked()
 LLPanelMyProfileEdit::LLPanelMyProfileEdit() 
  : LLPanelMyProfile()
 {
-	buildPanel(this, "panel_edit_profile.xml");
+	buildFromFile( "panel_edit_profile.xml");
 
 	setAvatarId(gAgent.getID());
 }
diff --git a/indra/newview/llpanelmediasettingsgeneral.cpp b/indra/newview/llpanelmediasettingsgeneral.cpp
index 54703d3cdc..b0ee4e92ad 100644
--- a/indra/newview/llpanelmediasettingsgeneral.cpp
+++ b/indra/newview/llpanelmediasettingsgeneral.cpp
@@ -80,7 +80,7 @@ LLPanelMediaSettingsGeneral::LLPanelMediaSettingsGeneral() :
 	mMediaEditable(false)
 {
 	// build dialog from XML
-	buildPanel(this, "panel_media_settings_general.xml");
+	buildFromFile( "panel_media_settings_general.xml");
 }
 
 ////////////////////////////////////////////////////////////////////////////////
diff --git a/indra/newview/llpanelmediasettingspermissions.cpp b/indra/newview/llpanelmediasettingspermissions.cpp
index 389003dc45..eebfd6bc77 100644
--- a/indra/newview/llpanelmediasettingspermissions.cpp
+++ b/indra/newview/llpanelmediasettingspermissions.cpp
@@ -65,7 +65,7 @@ LLPanelMediaSettingsPermissions::LLPanelMediaSettingsPermissions() :
     mPermsWorldControl( 0 )
 {
     // build dialog from XML
-    buildPanel(this, "panel_media_settings_permissions.xml");
+    buildFromFile( "panel_media_settings_permissions.xml");
 }
 
 ////////////////////////////////////////////////////////////////////////////////
diff --git a/indra/newview/llpanelmediasettingssecurity.cpp b/indra/newview/llpanelmediasettingssecurity.cpp
index 502ba179d3..75f29f1002 100644
--- a/indra/newview/llpanelmediasettingssecurity.cpp
+++ b/indra/newview/llpanelmediasettingssecurity.cpp
@@ -59,7 +59,7 @@ LLPanelMediaSettingsSecurity::LLPanelMediaSettingsSecurity() :
 	mCommitCallbackRegistrar.add("Media.whitelistDelete",	boost::bind(&LLPanelMediaSettingsSecurity::onBtnDel, this));	
 
 	// build dialog from XML
-	buildPanel(this, "panel_media_settings_security.xml");
+	buildFromFile( "panel_media_settings_security.xml");
 }
 
 ////////////////////////////////////////////////////////////////////////////////
diff --git a/indra/newview/llpanelnearbymedia.cpp b/indra/newview/llpanelnearbymedia.cpp
index e477d71712..49567b2ed8 100644
--- a/indra/newview/llpanelnearbymedia.cpp
+++ b/indra/newview/llpanelnearbymedia.cpp
@@ -102,7 +102,7 @@ LLPanelNearByMedia::LLPanelNearByMedia()
 	mCommitCallbackRegistrar.add("SelectedMediaCtrl.Zoom",		boost::bind(&LLPanelNearByMedia::onClickSelectedMediaZoom, this));
 	mCommitCallbackRegistrar.add("SelectedMediaCtrl.Unzoom",	boost::bind(&LLPanelNearByMedia::onClickSelectedMediaUnzoom, this));
 	
-	buildPanel(this, "panel_nearby_media.xml");
+	buildFromFile( "panel_nearby_media.xml");
 }
 
 LLPanelNearByMedia::~LLPanelNearByMedia()
diff --git a/indra/newview/llpanelonlinestatus.cpp b/indra/newview/llpanelonlinestatus.cpp
index 43c3ed782d..e77df757a5 100644
--- a/indra/newview/llpanelonlinestatus.cpp
+++ b/indra/newview/llpanelonlinestatus.cpp
@@ -41,7 +41,7 @@ LLPanelOnlineStatus::LLPanelOnlineStatus(
 	LLPanelTipToast(notification)
 {
 
-	buildPanel(this,
+	buildFromFile(
 			"panel_online_status_toast.xml");
 
 
diff --git a/indra/newview/llpanelpick.cpp b/indra/newview/llpanelpick.cpp
index 0417c65f7a..2e87a8eecb 100644
--- a/indra/newview/llpanelpick.cpp
+++ b/indra/newview/llpanelpick.cpp
@@ -80,7 +80,7 @@
 LLPanelPickInfo* LLPanelPickInfo::create()
 {
 	LLPanelPickInfo* panel = new LLPanelPickInfo();
-	buildPanel(panel, XML_PANEL_PICK_INFO);
+	panel->buildFromFile(XML_PANEL_PICK_INFO);
 	return panel;
 }
 
@@ -350,7 +350,7 @@ void LLPanelPickInfo::onClickBack()
 LLPanelPickEdit* LLPanelPickEdit::create()
 {
 	LLPanelPickEdit* panel = new LLPanelPickEdit();
-	buildPanel(panel, XML_PANEL_EDIT_PICK);
+	panel->buildFromFile(XML_PANEL_EDIT_PICK);
 	return panel;
 }
 
diff --git a/indra/newview/llpanelpicks.cpp b/indra/newview/llpanelpicks.cpp
index 653f3726a9..2efb664f2e 100644
--- a/indra/newview/llpanelpicks.cpp
+++ b/indra/newview/llpanelpicks.cpp
@@ -1045,7 +1045,7 @@ LLPickItem::LLPickItem()
 , mSnapshotID(LLUUID::null)
 , mNeedData(true)
 {
-	buildPanel(this,"panel_pick_list_item.xml");
+	buildFromFile("panel_pick_list_item.xml");
 }
 
 LLPickItem::~LLPickItem()
@@ -1175,7 +1175,7 @@ LLClassifiedItem::LLClassifiedItem(const LLUUID& avatar_id, const LLUUID& classi
  , mAvatarId(avatar_id)
  , mClassifiedId(classified_id)
 {
-	buildPanel(this,"panel_classifieds_list_item.xml");
+	buildFromFile("panel_classifieds_list_item.xml");
 
 	LLAvatarPropertiesProcessor::getInstance()->addObserver(getAvatarId(), this);
 	LLAvatarPropertiesProcessor::getInstance()->sendClassifiedInfoRequest(getClassifiedId());
diff --git a/indra/newview/llpanelplaces.cpp b/indra/newview/llpanelplaces.cpp
index 83e674ee92..e7af7e480d 100644
--- a/indra/newview/llpanelplaces.cpp
+++ b/indra/newview/llpanelplaces.cpp
@@ -252,7 +252,7 @@ LLPanelPlaces::LLPanelPlaces()
 	LLViewerParcelMgr::getInstance()->addAgentParcelChangedCallback(
 			boost::bind(&LLPanelPlaces::updateVerbs, this));
 
-	//buildPanel(this, "panel_places.xml"); // Called from LLRegisterPanelClass::defaultPanelClassBuilder()
+	//buildFromFile( "panel_places.xml"); // Called from LLRegisterPanelClass::defaultPanelClassBuilder()
 }
 
 LLPanelPlaces::~LLPanelPlaces()
diff --git a/indra/newview/llpanelprimmediacontrols.cpp b/indra/newview/llpanelprimmediacontrols.cpp
index 68522ffac3..6552a296b6 100644
--- a/indra/newview/llpanelprimmediacontrols.cpp
+++ b/indra/newview/llpanelprimmediacontrols.cpp
@@ -119,7 +119,7 @@ LLPanelPrimMediaControls::LLPanelPrimMediaControls() :
 	mCommitCallbackRegistrar.add("MediaCtrl.SkipBack",		boost::bind(&LLPanelPrimMediaControls::onClickSkipBack, this));
 	mCommitCallbackRegistrar.add("MediaCtrl.SkipForward",	boost::bind(&LLPanelPrimMediaControls::onClickSkipForward, this));
 	
-	buildPanel(this, "panel_prim_media_controls.xml");
+	buildFromFile( "panel_prim_media_controls.xml");
 	mInactivityTimer.reset();
 	mFadeTimer.stop();
 	mCurrentZoom = ZOOM_NONE;
diff --git a/indra/newview/llpanelteleporthistory.cpp b/indra/newview/llpanelteleporthistory.cpp
index b398d75feb..7e0bd2f8e6 100644
--- a/indra/newview/llpanelteleporthistory.cpp
+++ b/indra/newview/llpanelteleporthistory.cpp
@@ -131,7 +131,7 @@ LLTeleportHistoryFlatItem::LLTeleportHistoryFlatItem(S32 index, LLTeleportHistor
 	mRegionName(region_name),
 	mHighlight(hl)
 {
-	buildPanel(this, "panel_teleport_history_item.xml");
+	buildFromFile( "panel_teleport_history_item.xml");
 }
 
 LLTeleportHistoryFlatItem::~LLTeleportHistoryFlatItem()
@@ -382,7 +382,7 @@ LLTeleportHistoryPanel::LLTeleportHistoryPanel()
 		mLastSelectedFlatlList(NULL),
 		mLastSelectedItemIndex(-1)
 {
-	buildPanel(this, "panel_teleport_history.xml");
+	buildFromFile( "panel_teleport_history.xml");
 }
 
 LLTeleportHistoryPanel::~LLTeleportHistoryPanel()
diff --git a/indra/newview/llpaneltopinfobar.cpp b/indra/newview/llpaneltopinfobar.cpp
index 6e69e6d44c..1ee143b42e 100644
--- a/indra/newview/llpaneltopinfobar.cpp
+++ b/indra/newview/llpaneltopinfobar.cpp
@@ -72,7 +72,7 @@ LLPanelTopInfoBar::LLPanelTopInfoBar(): mParcelChangedObserver(0)
 	LLUICtrl::CommitCallbackRegistry::currentRegistrar()
 			.add("TopInfoBar.Action", boost::bind(&LLPanelTopInfoBar::onContextMenuItemClicked, this, _2));
 
-	buildPanel(this, "panel_topinfo_bar.xml");
+	buildFromFile( "panel_topinfo_bar.xml");
 }
 
 LLPanelTopInfoBar::~LLPanelTopInfoBar()
diff --git a/indra/newview/llpanelvolumepulldown.cpp b/indra/newview/llpanelvolumepulldown.cpp
index a038badb01..9d997f23d7 100644
--- a/indra/newview/llpanelvolumepulldown.cpp
+++ b/indra/newview/llpanelvolumepulldown.cpp
@@ -60,7 +60,7 @@ LLPanelVolumePulldown::LLPanelVolumePulldown()
 
     mCommitCallbackRegistrar.add("Vol.setControlFalse", boost::bind(&LLPanelVolumePulldown::setControlFalse, this, _2));
 	mCommitCallbackRegistrar.add("Vol.GoAudioPrefs", boost::bind(&LLPanelVolumePulldown::onAdvancedButtonClick, this, _2));
-	buildPanel(this, "panel_volume_pulldown.xml");
+	buildFromFile( "panel_volume_pulldown.xml");
 }
 
 BOOL LLPanelVolumePulldown::postBuild()
diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp
index ce465927bb..31ea69a889 100644
--- a/indra/newview/llpreviewscript.cpp
+++ b/indra/newview/llpreviewscript.cpp
@@ -157,7 +157,7 @@ LLFloaterScriptSearch::LLFloaterScriptSearch(LLScriptEdCore* editor_core)
 :	LLFloater(LLSD()),
 	mEditorCore(editor_core)
 {
-	buildFloater(this,"floater_script_search.xml", NULL);
+	buildFromFile("floater_script_search.xml");
 
 	sInstance = this;
 	
@@ -660,7 +660,7 @@ void LLScriptEdCore::onBtnDynamicHelp()
 	if (!live_help_floater)
 	{
 		live_help_floater = new LLFloater(LLSD());
-		LLFloater::buildFloater(live_help_floater, "floater_lsl_guide.xml", NULL);
+		live_help_floater->buildFromFile("floater_lsl_guide.xml", NULL);
 		LLFloater* parent = dynamic_cast<LLFloater*>(getParent());
 		llassert(parent);
 		if (parent)
diff --git a/indra/newview/llscrollingpanelparam.cpp b/indra/newview/llscrollingpanelparam.cpp
index 4c2469909b..3ca6d62d93 100644
--- a/indra/newview/llscrollingpanelparam.cpp
+++ b/indra/newview/llscrollingpanelparam.cpp
@@ -62,7 +62,7 @@ LLScrollingPanelParam::LLScrollingPanelParam( const LLPanel::Params& panel_param
 	  mAllowModify(allow_modify),
 	  mWearable(wearable)
 {
-	buildPanel(this, "panel_scrolling_param.xml");
+	buildFromFile( "panel_scrolling_param.xml");
 
 	// *HACK To avoid hard coding texture position, lets use border's position for texture. 
 	LLViewBorder* left_border = getChild<LLViewBorder>("left_border");
diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp
index aa29f6cb26..cdd2761024 100644
--- a/indra/newview/llsidepanelinventory.cpp
+++ b/indra/newview/llsidepanelinventory.cpp
@@ -56,7 +56,7 @@ LLSidepanelInventory::LLSidepanelInventory()
 		mPanelMainInventory(NULL)
 {
 
-	//buildPanel(this, "panel_inventory.xml"); // Called from LLRegisterPanelClass::defaultPanelClassBuilder()
+	//buildFromFile( "panel_inventory.xml"); // Called from LLRegisterPanelClass::defaultPanelClassBuilder()
 }
 
 LLSidepanelInventory::~LLSidepanelInventory()
diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp
index 8d61bb94e1..63e54fdeb2 100644
--- a/indra/newview/llstatusbar.cpp
+++ b/indra/newview/llstatusbar.cpp
@@ -142,7 +142,7 @@ LLStatusBar::LLStatusBar(const LLRect& rect)
 	mBalanceTimer = new LLFrameTimer();
 	mHealthTimer = new LLFrameTimer();
 
-	buildPanel(this,"panel_status_bar.xml");
+	buildFromFile("panel_status_bar.xml");
 }
 
 LLStatusBar::~LLStatusBar()
diff --git a/indra/newview/llsyswellitem.cpp b/indra/newview/llsyswellitem.cpp
index 79b053da24..794d413867 100644
--- a/indra/newview/llsyswellitem.cpp
+++ b/indra/newview/llsyswellitem.cpp
@@ -44,7 +44,7 @@ LLSysWellItem::LLSysWellItem(const Params& p) : LLPanel(p),
 												mTitle(NULL),
 												mCloseBtn(NULL)
 {
-	buildPanel(this, "panel_sys_well_item.xml");
+	buildFromFile( "panel_sys_well_item.xml");
 
 	mTitle = getChild<LLTextBox>("title");
 	mCloseBtn = getChild<LLButton>("close_btn");
diff --git a/indra/newview/llsyswellwindow.cpp b/indra/newview/llsyswellwindow.cpp
index 89fd22a2a0..d971318f21 100644
--- a/indra/newview/llsyswellwindow.cpp
+++ b/indra/newview/llsyswellwindow.cpp
@@ -255,7 +255,7 @@ LLIMWellWindow::RowPanel::RowPanel(const LLSysWellWindow* parent, const LLUUID&
 		S32 chicletCounter, const std::string& name, const LLUUID& otherParticipantId) :
 		LLPanel(LLPanel::Params()), mChiclet(NULL), mParent(parent)
 {
-	buildPanel(this, "panel_activeim_row.xml", NULL);
+	buildFromFile( "panel_activeim_row.xml", NULL);
 
 	// Choose which of the pre-created chiclets (IM/group) to use.
 	// The other one gets hidden.
@@ -352,7 +352,7 @@ LLIMWellWindow::ObjectRowPanel::ObjectRowPanel(const LLUUID& notification_id, bo
  : LLPanel()
  , mChiclet(NULL)
 {
-	buildPanel(this, "panel_active_object_row.xml", NULL);
+	buildFromFile( "panel_active_object_row.xml", NULL);
 
 	initChiclet(notification_id);
 
diff --git a/indra/newview/lltoast.cpp b/indra/newview/lltoast.cpp
index 06c95b5e9c..5fdc6765a8 100644
--- a/indra/newview/lltoast.cpp
+++ b/indra/newview/lltoast.cpp
@@ -83,7 +83,7 @@ LLToast::LLToast(const LLToast::Params& p)
 {
 	mTimer.reset(new LLToastLifeTimer(this, p.lifetime_secs));
 
-	buildFloater(this, "panel_toast.xml", NULL);
+	buildFromFile("panel_toast.xml", NULL);
 
 	setCanDrag(FALSE);
 
diff --git a/indra/newview/lltoastgroupnotifypanel.cpp b/indra/newview/lltoastgroupnotifypanel.cpp
index 7c2e68f942..f76c9adb78 100644
--- a/indra/newview/lltoastgroupnotifypanel.cpp
+++ b/indra/newview/lltoastgroupnotifypanel.cpp
@@ -60,7 +60,7 @@ LLToastGroupNotifyPanel::LLToastGroupNotifyPanel(LLNotificationPtr& notification
 :	LLToastPanel(notification),
 	mInventoryOffer(NULL)
 {
-	buildPanel(this, "panel_group_notify.xml");
+	buildFromFile( "panel_group_notify.xml");
 	const LLSD& payload = notification->getPayload();
 	LLGroupData groupData;
 	if (!gAgent.getGroupData(payload["group_id"].asUUID(),groupData))
diff --git a/indra/newview/lltoastimpanel.cpp b/indra/newview/lltoastimpanel.cpp
index fc01b7f0d5..ffe6c80f32 100644
--- a/indra/newview/lltoastimpanel.cpp
+++ b/indra/newview/lltoastimpanel.cpp
@@ -51,7 +51,7 @@ LLToastIMPanel::LLToastIMPanel(LLToastIMPanel::Params &p) :	LLToastPanel(p.notif
 								mAvatarIcon(NULL), mAvatarName(NULL),
 								mTime(NULL), mMessage(NULL), mGroupIcon(NULL)
 {
-	buildPanel(this, "panel_instant_message.xml");
+	buildFromFile( "panel_instant_message.xml");
 
 	mGroupIcon = getChild<LLGroupIconCtrl>("group_icon");
 	mAvatarIcon = getChild<LLAvatarIconCtrl>("avatar_icon");
diff --git a/indra/newview/lltoastnotifypanel.cpp b/indra/newview/lltoastnotifypanel.cpp
index 32e12035ee..0f22cb7778 100644
--- a/indra/newview/lltoastnotifypanel.cpp
+++ b/indra/newview/lltoastnotifypanel.cpp
@@ -67,7 +67,7 @@ mNumButtons(0),
 mAddedDefaultBtn(false),
 mCloseNotificationOnDestroy(true)
 {
-	buildPanel(this, "panel_notification.xml");
+	buildFromFile( "panel_notification.xml");
 	if(rect != LLRect::null)
 	{
 		this->setShape(rect);
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 141d7d6b86..602e641fe8 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -7255,7 +7255,7 @@ void handle_load_from_xml(void*)
 	{
 		std::string filename = picker.getFirstFile();
 		LLFloater* floater = new LLFloater(LLSD());
-		LLFloater::buildFloater(floater, filename, NULL);
+		floater->buildFromFile(filename);
 	}
 }
 
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index c5dee710cb..ac45daf810 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -1521,7 +1521,7 @@ void LLViewerWindow::initBase()
 	// (But wait to add it as a child of the root view so that it will be in front of the 
 	// other views.)
 	MainPanel* main_view = new MainPanel();
-	LLPanel::buildPanel(main_view, "main_view.xml");
+	main_view->buildFromFile("main_view.xml");
 	main_view->setShape(full_window);
 	getRootView()->addChild(main_view);
 
-- 
cgit v1.2.3


From 8f82c6a75795b5de746574432571ce468a43d13b Mon Sep 17 00:00:00 2001
From: Richard Nelson <none@none>
Date: Fri, 20 Aug 2010 14:36:34 -0700
Subject: fixed build

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

diff --git a/indra/newview/llfloateruipreview.cpp b/indra/newview/llfloateruipreview.cpp
index 19790c8868..9d75900ebf 100644
--- a/indra/newview/llfloateruipreview.cpp
+++ b/indra/newview/llfloateruipreview.cpp
@@ -837,7 +837,7 @@ void LLFloaterUIPreview::displayFloater(BOOL click, S32 ID, bool save)
 		if (save)
 		{
 			LLXMLNodePtr floater_write = new LLXMLNode();			
-			*floaterp->buildFromFile(path, floater_write);	// just build it
+			(*floaterp)->buildFromFile(path, floater_write);	// just build it
 
 			if (!floater_write->isNull())
 			{
-- 
cgit v1.2.3


From e948c4d9a95633f0b9eda9fbcb6e79ebacda8ef5 Mon Sep 17 00:00:00 2001
From: Richard Nelson <none@none>
Date: Fri, 20 Aug 2010 14:36:46 -0700
Subject: removed unused template function

---
 indra/llui/llsdparam.h | 9 ---------
 1 file changed, 9 deletions(-)

diff --git a/indra/llui/llsdparam.h b/indra/llui/llsdparam.h
index 71b0a45630..d8af3c9bce 100644
--- a/indra/llui/llsdparam.h
+++ b/indra/llui/llsdparam.h
@@ -56,15 +56,6 @@ public:
 private:
 	void readSDValues(const LLSD& sd, LLInitParam::BaseBlock& block);
 
-	template<typename T>
-	bool readTypedValue(void* val_ptr, boost::function<T(const LLSD&)> parser_func)
-    {
-	    if (!mCurReadSD) return false;
-
-	    *((T*)val_ptr) = parser_func(*mCurReadSD);
-	    return true;
-    }
-
 	template<typename T>
 	bool writeTypedValue(const void* val_ptr, const parser_t::name_stack_t& name_stack)
 	{
-- 
cgit v1.2.3


From c7540c6a039b107a014d89eed6c01c02aaa86335 Mon Sep 17 00:00:00 2001
From: Richard Nelson <none@none>
Date: Fri, 20 Aug 2010 14:36:54 -0700
Subject: fixed spelling error

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

diff --git a/indra/newview/app_settings/cmd_line.xml b/indra/newview/app_settings/cmd_line.xml
index 5f143431de..00d69f805e 100644
--- a/indra/newview/app_settings/cmd_line.xml
+++ b/indra/newview/app_settings/cmd_line.xml
@@ -296,7 +296,7 @@
     <key>multiple</key>		  
     <map>
       <key>desc</key>
-      <string>Allow multple viewers.</string>
+      <string>Allow multiple viewers.</string>
       <key>map-to</key>
       <string>AllowMultipleViewers</string>
     </map>
-- 
cgit v1.2.3


From 9d64b4adf5e455336cbac0ece1598e14ebe40a48 Mon Sep 17 00:00:00 2001
From: Richard Nelson <none@none>
Date: Fri, 20 Aug 2010 14:48:50 -0700
Subject: DEV-52870 FIX Inventory Notification not given if first Inventory
 Item comes from a user sharing an object or purchase from xstreet

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

diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 71dff61f41..7bf1031253 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -1889,6 +1889,8 @@ void inventory_offer_handler(LLOfferInfo* info)
 		    LLPostponedNotification::add<LLPostponedOfferNotification>(p, info->mFromID, false);
 		}
 	}
+
+	LLFirstUse::newInventory();
 }
 
 bool lure_callback(const LLSD& notification, const LLSD& response)
-- 
cgit v1.2.3


From 2ddeabec91cf14d252e7a0d4687fe2a46eeff8b7 Mon Sep 17 00:00:00 2001
From: Richard Nelson <none@none>
Date: Fri, 20 Aug 2010 16:29:35 -0700
Subject: added llfasttimer_class.h to project

---
 indra/llcommon/CMakeLists.txt | 1 +
 1 file changed, 1 insertion(+)

diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt
index 2a036df06e..858e483036 100644
--- a/indra/llcommon/CMakeLists.txt
+++ b/indra/llcommon/CMakeLists.txt
@@ -157,6 +157,7 @@ set(llcommon_HEADER_FILES
     lleventemitter.h
     llextendedstatus.h
     llfasttimer.h
+    llfasttimer_class.h
     llfile.h
     llfindlocale.h
     llfixedbuffer.h
-- 
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)

---
 doc/contributions.txt            | 1 +
 indra/newview/viewer_manifest.py | 7 +++++++
 2 files changed, 8 insertions(+)

diff --git a/doc/contributions.txt b/doc/contributions.txt
index 2e4d803252..7b47cd25ae 100644
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -594,6 +594,7 @@ Teardrops Fall
 Techwolf Lupindo
 	SNOW-92
 	VWR-12385
+	VWR-20893
 tenebrous pau
 	VWR-247
 Tharax Ferraris
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 1b27c4f9c762d68fae5b47dc08a31a2699ca9fe5 Mon Sep 17 00:00:00 2001
From: Techwolf Lupindo <bitbucket.org@trap.wereanimal.net>
Date: Sun, 22 Aug 2010 19:20:29 -0400
Subject: SNOW-599/SNOW-747: Pulseaudio should be optional on Linux.

---
 doc/contributions.txt                     |  2 ++
 indra/cmake/PulseAudio.cmake              | 38 +++++++++++++++----------------
 indra/media_plugins/webkit/CMakeLists.txt |  5 ++--
 3 files changed, 23 insertions(+), 22 deletions(-)

diff --git a/doc/contributions.txt b/doc/contributions.txt
index 8c6bd5e0fe..56e22d3990 100644
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -517,6 +517,8 @@ Ringo Tuxing
 Robin Cornelius
 	SNOW-108
 	SNOW-204
+	SNOW-599
+	SNOW-747
 	VWR-2488
 	VWR-9557
 	VWR-11128
diff --git a/indra/cmake/PulseAudio.cmake b/indra/cmake/PulseAudio.cmake
index f8087a8083..e918de0198 100644
--- a/indra/cmake/PulseAudio.cmake
+++ b/indra/cmake/PulseAudio.cmake
@@ -1,28 +1,28 @@
 # -*- cmake -*-
 include(Prebuilt)
 
-if (STANDALONE)
-  include(FindPkgConfig)
+set(PULSEAUDIO ON CACHE BOOL "Build with PulseAudio support, if available.")
 
-  pkg_check_modules(PULSEAUDIO REQUIRED libpulse-mainloop-glib)
+if (PULSEAUDIO)
+  if (STANDALONE)
+    include(FindPkgConfig)
+
+    pkg_check_modules(PULSEAUDIO libpulse)
 
-elseif (LINUX)
-  use_prebuilt_binary(pulseaudio)
-  set(PULSEAUDIO_FOUND ON FORCE BOOL)
-  set(PULSEAUDIO_INCLUDE_DIRS
-      ${LIBS_PREBUILT_DIR}/include
+  elseif (LINUX)
+    use_prebuilt_binary(pulseaudio)
+    set(PULSEAUDIO_FOUND ON FORCE BOOL)
+    set(PULSEAUDIO_INCLUDE_DIRS
+        ${LIBS_PREBUILT_DIR}/include
+        )
+    # We don't need to explicitly link against pulseaudio itself, because
+    # the viewer probes for the system's copy at runtime.
+    set(PULSEAUDIO_LIBRARIES
+      # none needed!
       )
-  # We don't need to explicitly link against pulseaudio itself, because
-  # the viewer probes for the system's copy at runtime.
-  set(PULSEAUDIO_LIBRARIES
-    # none needed!
-    )
-endif (STANDALONE)
+  endif (STANDALONE)
+endif (PULSEAUDIO)
 
 if (PULSEAUDIO_FOUND)
-  set(PULSEAUDIO ON CACHE BOOL "Build with PulseAudio support, if available.")
-endif (PULSEAUDIO_FOUND)
-
-if (PULSEAUDIO)
   add_definitions(-DLL_PULSEAUDIO_ENABLED=1)
-endif (PULSEAUDIO)
+endif (PULSEAUDIO_FOUND)
diff --git a/indra/media_plugins/webkit/CMakeLists.txt b/indra/media_plugins/webkit/CMakeLists.txt
index d576638dd7..6bb87ec306 100644
--- a/indra/media_plugins/webkit/CMakeLists.txt
+++ b/indra/media_plugins/webkit/CMakeLists.txt
@@ -53,6 +53,8 @@ set(media_plugin_webkit_LINK_LIBRARIES
 if (LINUX)
   if (PULSEAUDIO)
     list(APPEND media_plugin_webkit_SOURCE_FILES linux_volume_catcher.cpp)
+  else (PULSEAUDIO)
+    list(APPEND media_plugin_webkit_SOURCE_FILES dummy_volume_catcher.cpp)
   endif (PULSEAUDIO)
   list(APPEND media_plugin_webkit_LINK_LIBRARIES
        ${UI_LIBRARIES}     # for glib/GTK
@@ -67,9 +69,6 @@ elseif (DARWIN)
        )
 elseif (WINDOWS)
   list(APPEND media_plugin_webkit_SOURCE_FILES windows_volume_catcher.cpp)
-else (LINUX)
-  # All other platforms use the dummy volume catcher for now.
-  list(APPEND media_plugin_webkit_SOURCE_FILES dummy_volume_catcher.cpp)
 endif (LINUX)
 
 set_source_files_properties(${media_plugin_webkit_HEADER_FILES}
-- 
cgit v1.2.3


From 65c9914d23022df6a39db50ce295750f08695893 Mon Sep 17 00:00:00 2001
From: Richard Nelson <none@none>
Date: Mon, 23 Aug 2010 11:03:19 -0700
Subject: made Params parsers not act as singletons

---
 indra/llui/llfloater.cpp                           |   6 +-
 indra/llui/lllayoutstack.cpp                       |   6 +-
 indra/llui/llpanel.cpp                             |  17 +-
 indra/llui/llrngwriter.cpp                         |   5 +
 indra/llui/llscrolllistctrl.cpp                    |   6 +-
 indra/llui/llsdparam.cpp                           |  28 ++-
 indra/llui/llsdparam.h                             |   7 +-
 indra/llui/llui.cpp                                |   3 +-
 indra/llui/lluicolortable.cpp                      |   6 +-
 indra/llui/lluictrlfactory.cpp                     |   3 +-
 indra/llui/lluictrlfactory.h                       |   6 +-
 indra/llui/llview.cpp                              |   6 +-
 indra/llui/llview.h                                |  12 +-
 indra/llxuixml/llinitparam.h                       |  65 ++++---
 indra/llxuixml/lltrans.cpp                         |   6 +-
 indra/llxuixml/llxuiparser.cpp                     | 202 +++++++++++++--------
 indra/llxuixml/llxuiparser.h                       |  51 +++---
 indra/newview/llfavoritesbar.cpp                   |   3 +-
 indra/newview/llhints.cpp                          |   3 +-
 indra/newview/llnamelistctrl.cpp                   |   3 +-
 indra/newview/lloutfitslist.cpp                    |   3 +-
 indra/newview/llviewertexturelist.cpp              |   3 +-
 indra/newview/skins/default/xui/en/floater_aaa.xml |  61 +++++--
 23 files changed, 305 insertions(+), 206 deletions(-)

diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp
index 0cd692b4a4..e7d0950846 100644
--- a/indra/llui/llfloater.cpp
+++ b/indra/llui/llfloater.cpp
@@ -2780,7 +2780,8 @@ LLFastTimer::DeclareTimer POST_BUILD("Floater Post Build");
 bool LLFloater::initFloaterXML(LLXMLNodePtr node, LLView *parent, const std::string& filename, LLXMLNodePtr output_node)
 {
 	Params params(LLUICtrlFactory::getDefaultParams<LLFloater>());
-	LLXUIParser::instance().readXUI(node, params, filename); // *TODO: Error checking
+	LLXUIParser parser;
+	parser.readXUI(node, params, filename); // *TODO: Error checking
 
 	if (output_node)
 	{
@@ -2788,8 +2789,7 @@ bool LLFloater::initFloaterXML(LLXMLNodePtr node, LLView *parent, const std::str
 		setupParamsForExport(output_params, parent);
         Params default_params(LLUICtrlFactory::getDefaultParams<LLFloater>());
 		output_node->setName(node->getName()->mString);
-		LLXUIParser::instance().writeXUI(
-			output_node, output_params, &default_params);
+		parser.writeXUI(output_node, output_params, &default_params);
 	}
 
 	// Default floater position to top-left corner of screen
diff --git a/indra/llui/lllayoutstack.cpp b/indra/llui/lllayoutstack.cpp
index 4512091371..2e6e4912bf 100644
--- a/indra/llui/lllayoutstack.cpp
+++ b/indra/llui/lllayoutstack.cpp
@@ -238,7 +238,8 @@ static void get_attribute_bool_and_write(LLXMLNodePtr node,
 LLView* LLLayoutStack::fromXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr output_node)
 {
 	LLLayoutStack::Params p(LLUICtrlFactory::getDefaultParams<LLLayoutStack>());
-	LLXUIParser::instance().readXUI(node, p, LLUICtrlFactory::getInstance()->getCurFileName());
+	LLXUIParser parser;
+	parser.readXUI(node, p, LLUICtrlFactory::getInstance()->getCurFileName());
 
 	// Export must happen before setupParams() mungles rectangles and before
 	// this item gets added to parent (otherwise screws up last_child_rect
@@ -249,8 +250,7 @@ LLView* LLLayoutStack::fromXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr o
 		setupParamsForExport(output_params, parent);
 		LLLayoutStack::Params default_params(LLUICtrlFactory::getDefaultParams<LLLayoutStack>());
 		output_node->setName(node->getName()->mString);
-		LLXUIParser::instance().writeXUI(
-			output_node, output_params, &default_params);
+		parser.writeXUI(output_node, output_params, &default_params);
 	}
 
 	p.from_xui = true;
diff --git a/indra/llui/llpanel.cpp b/indra/llui/llpanel.cpp
index 51c8f6c743..4471f315c0 100644
--- a/indra/llui/llpanel.cpp
+++ b/indra/llui/llpanel.cpp
@@ -389,8 +389,7 @@ LLView* LLPanel::fromXML(LLXMLNodePtr node, LLView* parent, LLXMLNodePtr output_
 
 	LLPanel* panelp = NULL;
 	
-	{
-		LLFastTimer timer(FTM_PANEL_CONSTRUCTION);
+	{	LLFastTimer _(FTM_PANEL_CONSTRUCTION);
 		
 		if(!class_attr.empty())
 		{
@@ -512,6 +511,8 @@ BOOL LLPanel::initPanelXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr outpu
 			setXMLFilename(xml_filename);
 		}
 
+		LLXUIParser parser;
+
 		if (!xml_filename.empty())
 		{
 			LLUICtrlFactory::instance().pushFileName(xml_filename);
@@ -521,12 +522,11 @@ BOOL LLPanel::initPanelXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr outpu
 			{
 				//if we are exporting, we want to export the current xml
 				//not the referenced xml
-				LLXUIParser::instance().readXUI(node, params, LLUICtrlFactory::getInstance()->getCurFileName());
+				parser.readXUI(node, params, LLUICtrlFactory::getInstance()->getCurFileName());
 				Params output_params(params);
 				setupParamsForExport(output_params, parent);
 				output_node->setName(node->getName()->mString);
-				LLXUIParser::instance().writeXUI(
-					output_node, output_params, &default_params);
+				parser.writeXUI(output_node, output_params, &default_params);
 				return TRUE;
 			}
 		
@@ -537,7 +537,7 @@ BOOL LLPanel::initPanelXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr outpu
 				return FALSE;
 			}
 
-			LLXUIParser::instance().readXUI(referenced_xml, params, LLUICtrlFactory::getInstance()->getCurFileName());
+			parser.readXUI(referenced_xml, params, LLUICtrlFactory::getInstance()->getCurFileName());
 
 			// add children using dimensions from referenced xml for consistent layout
 			setShape(params.rect);
@@ -547,15 +547,14 @@ BOOL LLPanel::initPanelXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr outpu
 		}
 
 		// ask LLUICtrlFactory for filename, since xml_filename might be empty
-		LLXUIParser::instance().readXUI(node, params, LLUICtrlFactory::getInstance()->getCurFileName());
+		parser.readXUI(node, params, LLUICtrlFactory::getInstance()->getCurFileName());
 
 		if (output_node)
 		{
 			Params output_params(params);
 			setupParamsForExport(output_params, parent);
 			output_node->setName(node->getName()->mString);
-			LLXUIParser::instance().writeXUI(
-				output_node, output_params, &default_params);
+			parser.writeXUI(output_node, output_params, &default_params);
 		}
 		
 		params.from_xui = true;
diff --git a/indra/llui/llrngwriter.cpp b/indra/llui/llrngwriter.cpp
index 7e3d4b92d3..718c10d2f8 100644
--- a/indra/llui/llrngwriter.cpp
+++ b/indra/llui/llrngwriter.cpp
@@ -36,10 +36,15 @@
 #include "lluicolor.h"
 #include "lluictrlfactory.h"
 
+static 	LLInitParam::Parser::parser_read_func_map_t sReadFuncs;
+static 	LLInitParam::Parser::parser_write_func_map_t sWriteFuncs;
+static 	LLInitParam::Parser::parser_inspect_func_map_t sInspectFuncs;
+
 //
 // LLRNGWriter - writes Relax NG schema files based on a param block
 //
 LLRNGWriter::LLRNGWriter()
+: Parser(sReadFuncs, sWriteFuncs, sInspectFuncs)
 {
 	// register various callbacks for inspecting the contents of a param block
 	registerInspectFunc<bool>(boost::bind(&LLRNGWriter::writeAttribute, this, "boolean", _1, _2, _3, _4));
diff --git a/indra/llui/llscrolllistctrl.cpp b/indra/llui/llscrolllistctrl.cpp
index d356f061f9..844278e41c 100644
--- a/indra/llui/llscrolllistctrl.cpp
+++ b/indra/llui/llscrolllistctrl.cpp
@@ -2568,7 +2568,8 @@ BOOL	LLScrollListCtrl::canDeselect() const
 void LLScrollListCtrl::addColumn(const LLSD& column, EAddPosition pos)
 {
 	LLScrollListColumn::Params p;
-	LLParamSDParser::instance().readSD(column, p);
+	LLParamSDParser parser;
+	parser.readSD(column, p);
 	addColumn(p, pos);
 }
 
@@ -2759,7 +2760,8 @@ LLScrollListItem* LLScrollListCtrl::addElement(const LLSD& element, EAddPosition
 {
 	LLFastTimer _(FTM_ADD_SCROLLLIST_ELEMENT);
 	LLScrollListItem::Params item_params;
-	LLParamSDParser::instance().readSD(element, item_params);
+	LLParamSDParser parser;
+	parser.readSD(element, item_params);
 	item_params.userdata = userdata;
 	return addRow(item_params, pos);
 }
diff --git a/indra/llui/llsdparam.cpp b/indra/llui/llsdparam.cpp
index 7d37127584..338569fc58 100644
--- a/indra/llui/llsdparam.cpp
+++ b/indra/llui/llsdparam.cpp
@@ -36,23 +36,31 @@
 // Project includes
 #include "llsdparam.h"
 
+static 	LLInitParam::Parser::parser_read_func_map_t sReadFuncs;
+static 	LLInitParam::Parser::parser_write_func_map_t sWriteFuncs;
+static 	LLInitParam::Parser::parser_inspect_func_map_t sInspectFuncs;
+
 //
 // LLParamSDParser
 //
 LLParamSDParser::LLParamSDParser()
+: Parser(sReadFuncs, sWriteFuncs, sInspectFuncs)
 {
 	using boost::bind;
 
-	registerParserFuncs<S32>(readS32, bind(&LLParamSDParser::writeTypedValue<S32>, this, _1, _2));
-	registerParserFuncs<U32>(readU32, bind(&LLParamSDParser::writeU32Param, this, _1, _2));
-	registerParserFuncs<F32>(readF32, bind(&LLParamSDParser::writeTypedValue<F32>, this, _1, _2));
-	registerParserFuncs<F64>(readF64, bind(&LLParamSDParser::writeTypedValue<F64>, this, _1, _2));
-	registerParserFuncs<bool>(readBool, bind(&LLParamSDParser::writeTypedValue<F32>, this, _1, _2));
-	registerParserFuncs<std::string>(readString, bind(&LLParamSDParser::writeTypedValue<std::string>, this, _1, _2));
-	registerParserFuncs<LLUUID>(readUUID, bind(&LLParamSDParser::writeTypedValue<LLUUID>, this, _1, _2));
-	registerParserFuncs<LLDate>(readDate, bind(&LLParamSDParser::writeTypedValue<LLDate>, this, _1, _2));
-	registerParserFuncs<LLURI>(readURI, bind(&LLParamSDParser::writeTypedValue<LLURI>, this, _1, _2));
-	registerParserFuncs<LLSD>(readSD, bind(&LLParamSDParser::writeTypedValue<LLSD>, this, _1, _2));
+	if (sReadFuncs.empty())
+	{
+		registerParserFuncs<S32>(readS32, bind(&LLParamSDParser::writeTypedValue<S32>, this, _1, _2));
+		registerParserFuncs<U32>(readU32, bind(&LLParamSDParser::writeU32Param, this, _1, _2));
+		registerParserFuncs<F32>(readF32, bind(&LLParamSDParser::writeTypedValue<F32>, this, _1, _2));
+		registerParserFuncs<F64>(readF64, bind(&LLParamSDParser::writeTypedValue<F64>, this, _1, _2));
+		registerParserFuncs<bool>(readBool, bind(&LLParamSDParser::writeTypedValue<F32>, this, _1, _2));
+		registerParserFuncs<std::string>(readString, bind(&LLParamSDParser::writeTypedValue<std::string>, this, _1, _2));
+		registerParserFuncs<LLUUID>(readUUID, bind(&LLParamSDParser::writeTypedValue<LLUUID>, this, _1, _2));
+		registerParserFuncs<LLDate>(readDate, bind(&LLParamSDParser::writeTypedValue<LLDate>, this, _1, _2));
+		registerParserFuncs<LLURI>(readURI, bind(&LLParamSDParser::writeTypedValue<LLURI>, this, _1, _2));
+		registerParserFuncs<LLSD>(readSD, bind(&LLParamSDParser::writeTypedValue<LLSD>, this, _1, _2));
+	}
 }
 
 // special case handling of U32 due to ambiguous LLSD::assign overload
diff --git a/indra/llui/llsdparam.h b/indra/llui/llsdparam.h
index d8af3c9bce..e98318fc1e 100644
--- a/indra/llui/llsdparam.h
+++ b/indra/llui/llsdparam.h
@@ -37,17 +37,14 @@
 #include "llinitparam.h"
 
 class LLParamSDParser 
-:	public LLInitParam::Parser, 
-	public LLSingleton<LLParamSDParser>
+:	public LLInitParam::Parser
 {
 LOG_CLASS(LLParamSDParser);
 
 typedef LLInitParam::Parser parser_t;
 
-protected:
-	LLParamSDParser();
-	friend class LLSingleton<LLParamSDParser>;
 public:
+	LLParamSDParser();
 	void readSD(const LLSD& sd, LLInitParam::BaseBlock& block, bool silent = false);
 	void writeSD(LLSD& sd, const LLInitParam::BaseBlock& block);
 
diff --git a/indra/llui/llui.cpp b/indra/llui/llui.cpp
index 5d8b628776..85fdfbb312 100644
--- a/indra/llui/llui.cpp
+++ b/indra/llui/llui.cpp
@@ -1802,7 +1802,8 @@ void LLUI::setupPaths()
 	LLXMLNodePtr root;
 	BOOL success  = LLXMLNode::parseFile(filename, root, NULL);
 	Paths paths;
-	LLXUIParser::instance().readXUI(root, paths, filename);
+	LLXUIParser parser;
+	parser.readXUI(root, paths, filename);
 
 	sXUIPaths.clear();
 	
diff --git a/indra/llui/lluicolortable.cpp b/indra/llui/lluicolortable.cpp
index 1b64ef3abe..88140f1a49 100644
--- a/indra/llui/lluicolortable.cpp
+++ b/indra/llui/lluicolortable.cpp
@@ -243,7 +243,8 @@ void LLUIColorTable::saveUserSettings() const
 	}
 
 	LLXMLNodePtr output_node = new LLXMLNode("colors", false);
-	LLXUIParser::instance().writeXUI(output_node, params);
+	LLXUIParser parser;
+	parser.writeXUI(output_node, params);
 
 	if(!output_node->isNull())
 	{
@@ -309,7 +310,8 @@ bool LLUIColorTable::loadFromFilename(const std::string& filename, string_color_
 	}
 
 	Params params;
-	LLXUIParser::instance().readXUI(root, params, filename);
+	LLXUIParser parser;
+	parser.readXUI(root, params, filename);
 
 	if(params.validateBlock())
 	{
diff --git a/indra/llui/lluictrlfactory.cpp b/indra/llui/lluictrlfactory.cpp
index ee700ee6eb..2a2fa21ec0 100644
--- a/indra/llui/lluictrlfactory.cpp
+++ b/indra/llui/lluictrlfactory.cpp
@@ -103,7 +103,8 @@ void LLUICtrlFactory::loadWidgetTemplate(const std::string& widget_tag, LLInitPa
 	if (!full_filename.empty())
 	{
 		LLUICtrlFactory::instance().pushFileName(full_filename);
-		LLSimpleXUIParser::instance().readXUI(full_filename, block);
+		LLSimpleXUIParser parser;
+		parser.readXUI(full_filename, block);
 		LLUICtrlFactory::instance().popFileName();
 	}
 }
diff --git a/indra/llui/lluictrlfactory.h b/indra/llui/lluictrlfactory.h
index 82076335d7..165c117088 100644
--- a/indra/llui/lluictrlfactory.h
+++ b/indra/llui/lluictrlfactory.h
@@ -271,7 +271,8 @@ private:
 
 		typename T::Params params(getDefaultParams<T>());
 
-		LLXUIParser::instance().readXUI(node, params, LLUICtrlFactory::getInstance()->getCurFileName());
+		LLXUIParser parser;
+		parser.readXUI(node, params, LLUICtrlFactory::getInstance()->getCurFileName());
 
 		if (output_node)
 		{
@@ -281,8 +282,7 @@ private:
 			// Export only the differences between this any default params
 			typename T::Params default_params(getDefaultParams<T>());
 			copyName(node, output_node);
-			LLXUIParser::instance().writeXUI(
-				output_node, output_params, &default_params);
+			parser.writeXUI(output_node, output_params, &default_params);
 		}
 
 		// Apply layout transformations, usually munging rect
diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp
index 3ee4a85de0..48db873b6f 100644
--- a/indra/llui/llview.cpp
+++ b/indra/llui/llview.cpp
@@ -111,8 +111,8 @@ LLView::Params::Params()
 	user_resize("user_resize"),
 	auto_resize("auto_resize"),
 	needs_translate("translate"),
-	min_width("min_width"),
-	max_width("max_width"),
+	min_dim("min_width"),
+	max_dim("max_width"),
 	xmlns("xmlns"),
 	xmlns_xsi("xmlns:xsi"),
 	xsi_schemaLocation("xsi:schemaLocation"),
@@ -120,6 +120,8 @@ LLView::Params::Params()
 
 {
 	addSynonym(rect, "");
+	addSynonym(min_dim, "min_height");
+	addSynonym(max_dim, "max_height");
 }
 
 LLView::LLView(const LLView::Params& p)
diff --git a/indra/llui/llview.h b/indra/llui/llview.h
index 0f796fb408..6736ad9f33 100644
--- a/indra/llui/llview.h
+++ b/indra/llui/llview.h
@@ -145,16 +145,18 @@ public:
 									left_delta;		// from last left to my left
 
 		//FIXME: get parent context involved in parsing traversal
-		Ignored						user_resize,		// nested attribute for LLLayoutPanel
-									auto_resize,		// nested attribute for LLLayoutPanel
-									needs_translate,	// cue for translation tools
-									min_width,			// nested attribute for LLLayoutPanel
-									max_width,			// nested attribute for LLLayoutPanel
+		Ignored						needs_translate;	// cue for translation tools
 									xmlns,				// xml namespace
 									xmlns_xsi,			// xml namespace
 									xsi_schemaLocation,	// xml schema
 									xsi_type;			// xml schema type
 
+		// nested attributes for LLLayoutPanel
+		Optional<S32>				min_dim,
+									max_dim;
+		Optional<bool>				user_resize,		
+									auto_resize;
+
 		Params();
 	};
 
diff --git a/indra/llxuixml/llinitparam.h b/indra/llxuixml/llinitparam.h
index 5461ad9d05..488e20cf9f 100644
--- a/indra/llxuixml/llinitparam.h
+++ b/indra/llxuixml/llinitparam.h
@@ -204,14 +204,14 @@ namespace LLInitParam
 		typedef std::vector<std::string>							possible_values_t;
 
 		typedef bool (*parser_read_func_t)(Parser& parser, void* output);
-		typedef boost::function<bool (const void*, const name_stack_t&)>								parser_write_func_t;
+		typedef bool (*parser_write_func_t)(Parser& parser, const void*, const name_stack_t&);
 		typedef boost::function<void (const name_stack_t&, S32, S32, const possible_values_t*)>	parser_inspect_func_t;
 
 		typedef std::map<const std::type_info*, parser_read_func_t, CompareTypeID>		parser_read_func_map_t;
 		typedef std::map<const std::type_info*, parser_write_func_t, CompareTypeID>		parser_write_func_map_t;
 		typedef std::map<const std::type_info*, parser_inspect_func_t, CompareTypeID>	parser_inspect_func_map_t;
 
-		Parser()
+		Parser(parser_read_func_map_t& read_map, parser_write_func_map_t& write_map, parser_inspect_func_map_t& inspect_map)
 		:	mParseSilently(false),
 			mParseGeneration(0)
 		{}
@@ -219,8 +219,8 @@ namespace LLInitParam
 
 		template <typename T> bool readValue(T& param)
 	    {
-		    parser_read_func_map_t::iterator found_it = mParserReadFuncs.find(&typeid(T));
-		    if (found_it != mParserReadFuncs.end())
+		    parser_read_func_map_t::iterator found_it = mParserReadFuncs->find(&typeid(T));
+		    if (found_it != mParserReadFuncs->end())
 		    {
 			    return found_it->second(*this, (void*)&param);
 		    }
@@ -229,10 +229,10 @@ namespace LLInitParam
 
 		template <typename T> bool writeValue(const T& param, const name_stack_t& name_stack)
 		{
-		    parser_write_func_map_t::iterator found_it = mParserWriteFuncs.find(&typeid(T));
-		    if (found_it != mParserWriteFuncs.end())
+		    parser_write_func_map_t::iterator found_it = mParserWriteFuncs->find(&typeid(T));
+		    if (found_it != mParserWriteFuncs->end())
 		    {
-			    return found_it->second((const void*)&param, name_stack);
+			    return found_it->second(*this, (const void*)&param, name_stack);
 		    }
 		    return false;
 		}
@@ -240,8 +240,8 @@ namespace LLInitParam
 		// dispatch inspection to registered inspection functions, for each parameter in a param block
 		template <typename T> bool inspectValue(const name_stack_t& name_stack, S32 min_count, S32 max_count, const possible_values_t* possible_values)
 		{
-		    parser_inspect_func_map_t::iterator found_it = mParserInspectFuncs.find(&typeid(T));
-		    if (found_it != mParserInspectFuncs.end())
+		    parser_inspect_func_map_t::iterator found_it = mParserInspectFuncs->find(&typeid(T));
+		    if (found_it != mParserInspectFuncs->end())
 		    {
 			    found_it->second(name_stack, min_count, max_count, possible_values);
 				return true;
@@ -253,7 +253,6 @@ namespace LLInitParam
 		virtual void parserWarning(const std::string& message);
 		virtual void parserError(const std::string& message);
 		void setParseSilently(bool silent) { mParseSilently = silent; }
-		bool getParseSilently() { return mParseSilently; }
 
 		S32 getParseGeneration() { return mParseGeneration; }
 		S32 newParseGeneration() { return ++mParseGeneration; }
@@ -261,24 +260,24 @@ namespace LLInitParam
 
 	protected:
 		template <typename T>
-		void registerParserFuncs(parser_read_func_t read_func, parser_write_func_t write_func)
+		void registerParserFuncs(parser_read_func_t read_func, parser_write_func_t write_func = NULL)
 		{
-			mParserReadFuncs.insert(std::make_pair(&typeid(T), read_func));
-			mParserWriteFuncs.insert(std::make_pair(&typeid(T), write_func));
+			mParserReadFuncs->insert(std::make_pair(&typeid(T), read_func));
+			mParserWriteFuncs->insert(std::make_pair(&typeid(T), write_func));
 		}
 
 		template <typename T>
 		void registerInspectFunc(parser_inspect_func_t inspect_func)
 		{
-			mParserInspectFuncs.insert(std::make_pair(&typeid(T), inspect_func));
+			mParserInspectFuncs->insert(std::make_pair(&typeid(T), inspect_func));
 		}
 
 		bool				mParseSilently;
 
 	private:
-		parser_read_func_map_t		mParserReadFuncs;
-		parser_write_func_map_t		mParserWriteFuncs;
-		parser_inspect_func_map_t	mParserInspectFuncs;
+		parser_read_func_map_t*		mParserReadFuncs;
+		parser_write_func_map_t*	mParserWriteFuncs;
+		parser_inspect_func_map_t*	mParserInspectFuncs;
 		S32	mParseGeneration;
 	};
 
@@ -581,7 +580,7 @@ namespace LLInitParam
 			// no further names in stack, attempt to parse value now
 			if (name_stack.first == name_stack.second)
 			{
-				if (parser.readValue<T>(typed_param.mData.mValue))
+				if (parser.readValue(typed_param.mData.mValue))
 				{
 					typed_param.mData.clearKey();
 					typed_param.setProvided(true);
@@ -594,7 +593,7 @@ namespace LLInitParam
 				{
 					// try to parse a known named value
 					std::string name;
-					if (parser.readValue<std::string>(name))
+					if (parser.readValue(name))
 					{
 						// try to parse a per type named value
 						if (NAME_VALUE_LOOKUP::get(name, typed_param.mData.mValue))
@@ -629,7 +628,7 @@ namespace LLInitParam
 			{
 				if (!diff_param || !ParamCompare<std::string>::equals(static_cast<const self_t*>(diff_param)->mData.getKey(), key))
 				{
-					if (!parser.writeValue<std::string>(key, name_stack))
+					if (!parser.writeValue(key, name_stack))
 					{
 						return;
 					}
@@ -637,7 +636,7 @@ namespace LLInitParam
 			}
 			// then try to serialize value directly
 			else if (!diff_param || !ParamCompare<T>::equals(typed_param.get(), static_cast<const self_t*>(diff_param)->get()))					{
-				if (!parser.writeValue<T>(typed_param.mData.mValue, name_stack)) 
+				if (!parser.writeValue(typed_param.mData.mValue, name_stack)) 
 				{
 					return;
 				}
@@ -750,7 +749,7 @@ namespace LLInitParam
 			{
 				// try to parse a known named value
 				std::string name;
-				if (parser.readValue<std::string>(name))
+				if (parser.readValue(name))
 				{
 					// try to parse a per type named value
 					if (NAME_VALUE_LOOKUP::get(name, typed_param))
@@ -777,7 +776,7 @@ namespace LLInitParam
 			std::string key = typed_param.mData.getKey();
 			if (!key.empty() && typed_param.mData.mKeyVersion == typed_param.getLastChangeVersion())
 			{
-				if (!parser.writeValue<std::string>(key, name_stack))
+				if (!parser.writeValue(key, name_stack))
 				{
 					return;
 				}
@@ -924,7 +923,7 @@ namespace LLInitParam
 			if (name_stack.first == name_stack.second)
 			{
 				// attempt to read value directly
-				if (parser.readValue<value_t>(value))
+				if (parser.readValue(value))
 				{
 					typed_param.mValues.push_back(value);
 					// save an empty name/value key as a placeholder
@@ -939,7 +938,7 @@ namespace LLInitParam
 				{
 					// try to parse a known named value
 					std::string name;
-					if (parser.readValue<std::string>(name))
+					if (parser.readValue(name))
 					{
 						// try to parse a per type named value
 						if (NAME_VALUE_LOOKUP::get(name, typed_param.mValues))
@@ -973,13 +972,13 @@ namespace LLInitParam
 
 				if(!key.empty())
 				{
-					if(!parser.writeValue<std::string>(key, name_stack))
+					if(!parser.writeValue(key, name_stack))
 					{
 						return;
 					}
 				}
 				// not parse via name values, write out value directly
-				else if (!parser.writeValue<VALUE_TYPE>(*it, name_stack))
+				else if (!parser.writeValue(*it, name_stack))
 				{
 					return;
 				}
@@ -1126,7 +1125,7 @@ namespace LLInitParam
 			{
 				// try to parse a known named value
 				std::string name;
-				if (parser.readValue<std::string>(name))
+				if (parser.readValue(name))
 				{
 					// try to parse a per type named value
 					if (NAME_VALUE_LOOKUP::get(name, value))
@@ -1159,7 +1158,7 @@ namespace LLInitParam
 				std::string key = key_it->getKey();
 				if (!key.empty() && key_it->mKeyVersion == it->getLastChangeVersion())
 				{
-					if(!parser.writeValue<std::string>(key, name_stack))
+					if(!parser.writeValue(key, name_stack))
 					{
 						return;
 					}
@@ -1624,7 +1623,7 @@ namespace LLInitParam
 			// type to apply parse direct value T
 			if (name_stack.first == name_stack.second)
 			{
-				if(parser.readValue<T>(typed_param.mData.mValue))
+				if(parser.readValue(typed_param.mData.mValue))
 				{
 					typed_param.enclosingBlock().setLastChangedParam(param, true);
 					typed_param.setProvided(true);
@@ -1639,7 +1638,7 @@ namespace LLInitParam
 				{
 					// try to parse a known named value
 					std::string name;
-					if (parser.readValue<std::string>(name))
+					if (parser.readValue(name))
 					{
 						// try to parse a per type named value
 						if (TypeValues<T>::get(name, typed_param.mData.mValue))
@@ -1681,7 +1680,7 @@ namespace LLInitParam
 			{
 				if (!diff_param || !ParamCompare<std::string>::equals(static_cast<const self_t*>(diff_param)->mData.getKey(), key))
 				{
-					if (!parser.writeValue<std::string>(key, name_stack))
+					if (!parser.writeValue(key, name_stack))
 					{
 						return;
 					}
@@ -1691,7 +1690,7 @@ namespace LLInitParam
 			else if (!diff_param || !ParamCompare<T>::equals(typed_param.get(), (static_cast<const self_t*>(diff_param))->get()))	
             {
 				
-				if (parser.writeValue<T>(typed_param.mData.mValue, name_stack)) 
+				if (parser.writeValue(typed_param.mData.mValue, name_stack)) 
 				{
 					return;
 				}
diff --git a/indra/llxuixml/lltrans.cpp b/indra/llxuixml/lltrans.cpp
index d6f17dbb08..bf38e925c6 100644
--- a/indra/llxuixml/lltrans.cpp
+++ b/indra/llxuixml/lltrans.cpp
@@ -72,7 +72,8 @@ bool LLTrans::parseStrings(LLXMLNodePtr &root, const std::set<std::string>& defa
 	}
 
 	StringTable string_table;
-	LLXUIParser::instance().readXUI(root, string_table, xml_filename);
+	LLXUIParser parser;
+	parser.readXUI(root, string_table, xml_filename);
 
 	if (!string_table.validateBlock())
 	{
@@ -115,7 +116,8 @@ bool LLTrans::parseLanguageStrings(LLXMLNodePtr &root)
 	}
 	
 	StringTable string_table;
-	LLXUIParser::instance().readXUI(root, string_table, xml_filename);
+	LLXUIParser parser;
+	parser.readXUI(root, string_table, xml_filename);
 	
 	if (!string_table.validateBlock())
 	{
diff --git a/indra/llxuixml/llxuiparser.cpp b/indra/llxuixml/llxuiparser.cpp
index d856efb008..220171fb79 100644
--- a/indra/llxuixml/llxuiparser.cpp
+++ b/indra/llxuixml/llxuiparser.cpp
@@ -47,10 +47,16 @@ using namespace BOOST_SPIRIT_CLASSIC_NS;
 
 const S32 MAX_STRING_ATTRIBUTE_SIZE = 40;
 
+static 	LLInitParam::Parser::parser_read_func_map_t sXSDReadFuncs;
+static 	LLInitParam::Parser::parser_write_func_map_t sXSDWriteFuncs;
+static 	LLInitParam::Parser::parser_inspect_func_map_t sXSDInspectFuncs;
+
+
 //
 // LLXSDWriter
 //
 LLXSDWriter::LLXSDWriter()
+: Parser(sXSDReadFuncs, sXSDWriteFuncs, sXSDInspectFuncs)
 {
 	registerInspectFunc<bool>(boost::bind(&LLXSDWriter::writeAttribute, this, "xs:boolean", _1, _2, _3, _4));
 	registerInspectFunc<std::string>(boost::bind(&LLXSDWriter::writeAttribute, this, "xs:string", _1, _2, _3, _4));
@@ -368,27 +374,35 @@ void LLXUIXSDWriter::writeXSD(const std::string& type_name, const std::string& p
 	fclose(xsd_file);
 }
 
+static 	LLInitParam::Parser::parser_read_func_map_t sXUIReadFuncs;
+static 	LLInitParam::Parser::parser_write_func_map_t sXUIWriteFuncs;
+static 	LLInitParam::Parser::parser_inspect_func_map_t sXUIInspectFuncs;
+
 //
 // LLXUIParser
 //
 LLXUIParser::LLXUIParser()
-:	mLastWriteGeneration(-1),
+:	Parser(sXUIReadFuncs, sXUIWriteFuncs, sXUIInspectFuncs),
+	mLastWriteGeneration(-1),
 	mCurReadDepth(0)
 {
-	registerParserFuncs<bool>(readBoolValue, boost::bind(&LLXUIParser::writeBoolValue, this, _1, _2));
-	registerParserFuncs<std::string>(readStringValue, boost::bind(&LLXUIParser::writeStringValue, this, _1, _2));
-	registerParserFuncs<U8>(readU8Value, boost::bind(&LLXUIParser::writeU8Value, this, _1, _2));
-	registerParserFuncs<S8>(readS8Value, boost::bind(&LLXUIParser::writeS8Value, this, _1, _2));
-	registerParserFuncs<U16>(readU16Value, boost::bind(&LLXUIParser::writeU16Value, this, _1, _2));
-	registerParserFuncs<S16>(readS16Value, boost::bind(&LLXUIParser::writeS16Value, this, _1, _2));
-	registerParserFuncs<U32>(readU32Value, boost::bind(&LLXUIParser::writeU32Value, this, _1, _2));
-	registerParserFuncs<S32>(readS32Value, boost::bind(&LLXUIParser::writeS32Value, this, _1, _2));
-	registerParserFuncs<F32>(readF32Value, boost::bind(&LLXUIParser::writeF32Value, this, _1, _2));
-	registerParserFuncs<F64>(readF64Value, boost::bind(&LLXUIParser::writeF64Value, this, _1, _2));
-	registerParserFuncs<LLColor4>(readColor4Value, boost::bind(&LLXUIParser::writeColor4Value, this, _1, _2));
-	registerParserFuncs<LLUIColor>(readUIColorValue, boost::bind(&LLXUIParser::writeUIColorValue, this, _1, _2));
-	registerParserFuncs<LLUUID>(readUUIDValue, boost::bind(&LLXUIParser::writeUUIDValue, this, _1, _2));
-	registerParserFuncs<LLSD>(readSDValue, boost::bind(&LLXUIParser::writeSDValue, this, _1, _2));
+	if (sXUIReadFuncs.empty())
+	{
+		registerParserFuncs<bool>(readBoolValue, writeBoolValue);
+		registerParserFuncs<std::string>(readStringValue, writeStringValue);
+		registerParserFuncs<U8>(readU8Value, writeU8Value);
+		registerParserFuncs<S8>(readS8Value, writeS8Value);
+		registerParserFuncs<U16>(readU16Value, writeU16Value);
+		registerParserFuncs<S16>(readS16Value, writeS16Value);
+		registerParserFuncs<U32>(readU32Value, writeU32Value);
+		registerParserFuncs<S32>(readS32Value, writeS32Value);
+		registerParserFuncs<F32>(readF32Value, writeF32Value);
+		registerParserFuncs<F64>(readF64Value, writeF64Value);
+		registerParserFuncs<LLColor4>(readColor4Value, writeColor4Value);
+		registerParserFuncs<LLUIColor>(readUIColorValue, writeUIColorValue);
+		registerParserFuncs<LLUUID>(readUUIDValue, writeUUIDValue);
+		registerParserFuncs<LLSD>(readSDValue, writeSDValue);
+	}
 }
 
 static LLFastTimer::DeclareTimer FTM_PARSE_XUI("XUI Parsing");
@@ -621,9 +635,10 @@ bool LLXUIParser::readBoolValue(Parser& parser, void* val_ptr)
 	return success;
 }
 
-bool LLXUIParser::writeBoolValue(const void* val_ptr, const name_stack_t& stack)
+bool LLXUIParser::writeBoolValue(Parser& parser, const void* val_ptr, const name_stack_t& stack)
 {
-	LLXMLNodePtr node = getNode(stack);
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
+	LLXMLNodePtr node = self.getNode(stack);
 	if (node.notNull())
 	{
 		node->setBoolValue(*((bool*)val_ptr));
@@ -639,9 +654,10 @@ bool LLXUIParser::readStringValue(Parser& parser, void* val_ptr)
 	return true;
 }
 
-bool LLXUIParser::writeStringValue(const void* val_ptr, const name_stack_t& stack)
+bool LLXUIParser::writeStringValue(Parser& parser, const void* val_ptr, const name_stack_t& stack)
 {
-	LLXMLNodePtr node = getNode(stack);
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
+	LLXMLNodePtr node = self.getNode(stack);
 	if (node.notNull())
 	{
 		const std::string* string_val = reinterpret_cast<const std::string*>(val_ptr);
@@ -676,9 +692,10 @@ bool LLXUIParser::readU8Value(Parser& parser, void* val_ptr)
 	return self.mCurReadNode->getByteValue(1, (U8*)val_ptr);
 }
 
-bool LLXUIParser::writeU8Value(const void* val_ptr, const name_stack_t& stack)
+bool LLXUIParser::writeU8Value(Parser& parser, const void* val_ptr, const name_stack_t& stack)
 {
-	LLXMLNodePtr node = getNode(stack);
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
+	LLXMLNodePtr node = self.getNode(stack);
 	if (node.notNull())
 	{
 		node->setUnsignedValue(*((U8*)val_ptr));
@@ -699,9 +716,10 @@ bool LLXUIParser::readS8Value(Parser& parser, void* val_ptr)
 	return false;
 }
 
-bool LLXUIParser::writeS8Value(const void* val_ptr, const name_stack_t& stack)
+bool LLXUIParser::writeS8Value(Parser& parser, const void* val_ptr, const name_stack_t& stack)
 {
-	LLXMLNodePtr node = getNode(stack);
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
+	LLXMLNodePtr node = self.getNode(stack);
 	if (node.notNull())
 	{
 		node->setIntValue(*((S8*)val_ptr));
@@ -722,9 +740,10 @@ bool LLXUIParser::readU16Value(Parser& parser, void* val_ptr)
 	return false;
 }
 
-bool LLXUIParser::writeU16Value(const void* val_ptr, const name_stack_t& stack)
+bool LLXUIParser::writeU16Value(Parser& parser, const void* val_ptr, const name_stack_t& stack)
 {
-	LLXMLNodePtr node = getNode(stack);
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
+	LLXMLNodePtr node = self.getNode(stack);
 	if (node.notNull())
 	{
 		node->setUnsignedValue(*((U16*)val_ptr));
@@ -745,9 +764,10 @@ bool LLXUIParser::readS16Value(Parser& parser, void* val_ptr)
 	return false;
 }
 
-bool LLXUIParser::writeS16Value(const void* val_ptr, const name_stack_t& stack)
+bool LLXUIParser::writeS16Value(Parser& parser, const void* val_ptr, const name_stack_t& stack)
 {
-	LLXMLNodePtr node = getNode(stack);
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
+	LLXMLNodePtr node = self.getNode(stack);
 	if (node.notNull())
 	{
 		node->setIntValue(*((S16*)val_ptr));
@@ -762,9 +782,10 @@ bool LLXUIParser::readU32Value(Parser& parser, void* val_ptr)
 	return self.mCurReadNode->getUnsignedValue(1, (U32*)val_ptr);
 }
 
-bool LLXUIParser::writeU32Value(const void* val_ptr, const name_stack_t& stack)
+bool LLXUIParser::writeU32Value(Parser& parser, const void* val_ptr, const name_stack_t& stack)
 {
-	LLXMLNodePtr node = getNode(stack);
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
+	LLXMLNodePtr node = self.getNode(stack);
 	if (node.notNull())
 	{
 		node->setUnsignedValue(*((U32*)val_ptr));
@@ -779,9 +800,10 @@ bool LLXUIParser::readS32Value(Parser& parser, void* val_ptr)
 	return self.mCurReadNode->getIntValue(1, (S32*)val_ptr);
 }
 
-bool LLXUIParser::writeS32Value(const void* val_ptr, const name_stack_t& stack)
+bool LLXUIParser::writeS32Value(Parser& parser, const void* val_ptr, const name_stack_t& stack)
 {
-	LLXMLNodePtr node = getNode(stack);
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
+	LLXMLNodePtr node = self.getNode(stack);
 	if (node.notNull())
 	{
 		node->setIntValue(*((S32*)val_ptr));
@@ -796,9 +818,10 @@ bool LLXUIParser::readF32Value(Parser& parser, void* val_ptr)
 	return self.mCurReadNode->getFloatValue(1, (F32*)val_ptr);
 }
 
-bool LLXUIParser::writeF32Value(const void* val_ptr, const name_stack_t& stack)
+bool LLXUIParser::writeF32Value(Parser& parser, const void* val_ptr, const name_stack_t& stack)
 {
-	LLXMLNodePtr node = getNode(stack);
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
+	LLXMLNodePtr node = self.getNode(stack);
 	if (node.notNull())
 	{
 		node->setFloatValue(*((F32*)val_ptr));
@@ -813,9 +836,10 @@ bool LLXUIParser::readF64Value(Parser& parser, void* val_ptr)
 	return self.mCurReadNode->getDoubleValue(1, (F64*)val_ptr);
 }
 
-bool LLXUIParser::writeF64Value(const void* val_ptr, const name_stack_t& stack)
+bool LLXUIParser::writeF64Value(Parser& parser, const void* val_ptr, const name_stack_t& stack)
 {
-	LLXMLNodePtr node = getNode(stack);
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
+	LLXMLNodePtr node = self.getNode(stack);
 	if (node.notNull())
 	{
 		node->setDoubleValue(*((F64*)val_ptr));
@@ -836,9 +860,10 @@ bool LLXUIParser::readColor4Value(Parser& parser, void* val_ptr)
 	return false;
 }
 
-bool LLXUIParser::writeColor4Value(const void* val_ptr, const name_stack_t& stack)
+bool LLXUIParser::writeColor4Value(Parser& parser, const void* val_ptr, const name_stack_t& stack)
 {
-	LLXMLNodePtr node = getNode(stack);
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
+	LLXMLNodePtr node = self.getNode(stack);
 	if (node.notNull())
 	{
 		LLColor4 color = *((LLColor4*)val_ptr);
@@ -862,9 +887,10 @@ bool LLXUIParser::readUIColorValue(Parser& parser, void* val_ptr)
 	return false;
 }
 
-bool LLXUIParser::writeUIColorValue(const void* val_ptr, const name_stack_t& stack)
+bool LLXUIParser::writeUIColorValue(Parser& parser, const void* val_ptr, const name_stack_t& stack)
 {
-	LLXMLNodePtr node = getNode(stack);
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
+	LLXMLNodePtr node = self.getNode(stack);
 	if (node.notNull())
 	{
 		LLUIColor color = *((LLUIColor*)val_ptr);
@@ -890,9 +916,10 @@ bool LLXUIParser::readUUIDValue(Parser& parser, void* val_ptr)
 	return false;
 }
 
-bool LLXUIParser::writeUUIDValue(const void* val_ptr, const name_stack_t& stack)
+bool LLXUIParser::writeUUIDValue(Parser& parser, const void* val_ptr, const name_stack_t& stack)
 {
-	LLXMLNodePtr node = getNode(stack);
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
+	LLXMLNodePtr node = self.getNode(stack);
 	if (node.notNull())
 	{
 		node->setStringValue(((LLUUID*)val_ptr)->asString());
@@ -908,9 +935,11 @@ bool LLXUIParser::readSDValue(Parser& parser, void* val_ptr)
 	return true;
 }
 
-bool LLXUIParser::writeSDValue(const void* val_ptr, const name_stack_t& stack)
+bool LLXUIParser::writeSDValue(Parser& parser, const void* val_ptr, const name_stack_t& stack)
 {
-	LLXMLNodePtr node = getNode(stack);
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
+
+	LLXMLNodePtr node = self.getNode(stack);
 	if (node.notNull())
 	{
 		std::string string_val = ((LLSD*)val_ptr)->asString();
@@ -1007,25 +1036,33 @@ struct ScopedFile
 
 	LLFILE* mFile;
 };
+static 	LLInitParam::Parser::parser_read_func_map_t sSimpleXUIReadFuncs;
+static 	LLInitParam::Parser::parser_write_func_map_t sSimpleXUIWriteFuncs;
+static 	LLInitParam::Parser::parser_inspect_func_map_t sSimpleXUIInspectFuncs;
 
-LLSimpleXUIParser::LLSimpleXUIParser()
-:	mLastWriteGeneration(-1),
-	mCurReadDepth(0)
+LLSimpleXUIParser::LLSimpleXUIParser(LLSimpleXUIParser::element_start_callback_t element_cb)
+:	Parser(sSimpleXUIReadFuncs, sSimpleXUIWriteFuncs, sSimpleXUIInspectFuncs),
+	mLastWriteGeneration(-1),
+	mCurReadDepth(0),
+	mElementCB(element_cb)
 {
-	registerParserFuncs<bool>(readBoolValue, NULL);
-	registerParserFuncs<std::string>(readStringValue, NULL);
-	registerParserFuncs<U8>(readU8Value, NULL);
-	registerParserFuncs<S8>(readS8Value, NULL);
-	registerParserFuncs<U16>(readU16Value, NULL);
-	registerParserFuncs<S16>(readS16Value, NULL);
-	registerParserFuncs<U32>(readU32Value, NULL);
-	registerParserFuncs<S32>(readS32Value, NULL);
-	registerParserFuncs<F32>(readF32Value, NULL);
-	registerParserFuncs<F64>(readF64Value, NULL);
-	registerParserFuncs<LLColor4>(readColor4Value, NULL);
-	registerParserFuncs<LLUIColor>(readUIColorValue, NULL);
-	registerParserFuncs<LLUUID>(readUUIDValue, NULL);
-	registerParserFuncs<LLSD>(readSDValue, NULL);
+	if (sSimpleXUIReadFuncs.empty())
+	{
+		registerParserFuncs<bool>(readBoolValue);
+		registerParserFuncs<std::string>(readStringValue);
+		registerParserFuncs<U8>(readU8Value);
+		registerParserFuncs<S8>(readS8Value);
+		registerParserFuncs<U16>(readU16Value);
+		registerParserFuncs<S16>(readS16Value);
+		registerParserFuncs<U32>(readU32Value);
+		registerParserFuncs<S32>(readS32Value);
+		registerParserFuncs<F32>(readF32Value);
+		registerParserFuncs<F64>(readF64Value);
+		registerParserFuncs<LLColor4>(readColor4Value);
+		registerParserFuncs<LLUIColor>(readUIColorValue);
+		registerParserFuncs<LLUUID>(readUUIDValue);
+		registerParserFuncs<LLSD>(readSDValue);
+	}
 }
 
 LLSimpleXUIParser::~LLSimpleXUIParser()
@@ -1042,7 +1079,7 @@ bool LLSimpleXUIParser::readXUI(const std::string& filename, LLInitParam::BaseBl
 	XML_SetElementHandler(			mParser,	startElementHandler, endElementHandler);
 	XML_SetCharacterDataHandler(	mParser,	characterDataHandler);
 
-	mBlock = &block;
+	mOutputStack.push_back(std::make_pair(&block, 0));
 	mNameStack.clear();
 	mCurFileName = filename;
 	mCurReadDepth = 0;
@@ -1108,16 +1145,25 @@ void LLSimpleXUIParser::startElement(const char *name, const char **atts)
 	typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
 	boost::char_separator<char> sep(".");
 
-	mCurReadDepth++;
+	if (mElementCB) 
+	{
+		LLInitParam::BaseBlock* blockp = mElementCB(*this, name);
+		if (blockp)
+		{
+			mOutputStack.push_back(std::make_pair(blockp, 0));
+		}
+	}
+
+	mOutputStack.back().second++;
 	S32 num_tokens_pushed = 0;
 	std::string child_name(name);
 
-	if (mCurReadDepth > 1)
-	{
-		// for non "dotted" child nodes	check to see if child node maps to another widget type
-		// and if not, treat as a child element of the current node
-		// e.g. <button><rect left="10"/></button> will interpret <rect> as "button.rect"
-		// since there is no widget named "rect"
+	if (mOutputStack.back().second == 1)
+	{	// root node for this block
+		mScope.push_back(child_name);
+	}
+	else
+	{	// compound attribute
 		if (child_name.find(".") == std::string::npos) 
 		{
 			mNameStack.push_back(std::make_pair(child_name, newParseGeneration()));
@@ -1153,10 +1199,6 @@ void LLSimpleXUIParser::startElement(const char *name, const char **atts)
 			mScope.push_back(mNameStack.back().first);
 		}
 	}
-	else
-	{
-		mScope.push_back(child_name);
-	}
 
 	mTokenSizeStack.push_back(num_tokens_pushed);
 	readAttributes(atts);
@@ -1183,8 +1225,7 @@ bool LLSimpleXUIParser::readAttributes(const char **atts)
 		}
 
 		// child nodes are not necessarily valid attributes, so don't complain once we've recursed
-		bool silent = mCurReadDepth > 1;
-		any_parsed |= mBlock->submitValue(mNameStack, *this, silent);
+		any_parsed |= mOutputStack.back().first->submitValue(mNameStack, *this, mParseSilently);
 		
 		while(num_tokens_pushed-- > 0)
 		{
@@ -1204,12 +1245,21 @@ void LLSimpleXUIParser::endElement(const char *name)
 		{
 			mNameStack.push_back(std::make_pair(std::string("value"), newParseGeneration()));
 			mCurAttributeValueBegin = mTextContents.c_str();
-			mBlock->submitValue(mNameStack, *this, false);
+			mOutputStack.back().first->submitValue(mNameStack, *this, mParseSilently);
 			mNameStack.pop_back();
 			mTextContents.clear();
 		}
 	}
-	mCurReadDepth--;
+
+	if (--mOutputStack.back().second == 0)
+	{
+		if (mOutputStack.empty())
+		{
+			LL_ERRS("ReadXUI") << "Parameter block output stack popped while empty." << LL_ENDL;
+		}
+		mOutputStack.pop_back();
+	}
+
 	S32 num_tokens_to_pop = mTokenSizeStack.back();
 	mTokenSizeStack.pop_back();
 	while(num_tokens_to_pop-- > 0)
diff --git a/indra/llxuixml/llxuiparser.h b/indra/llxuixml/llxuiparser.h
index eb7147f49e..ee8fcdc369 100644
--- a/indra/llxuixml/llxuiparser.h
+++ b/indra/llxuixml/llxuiparser.h
@@ -102,14 +102,12 @@ public:
 
 
 
-class LLXUIParser : public LLInitParam::Parser, public LLSingleton<LLXUIParser>
+class LLXUIParser : public LLInitParam::Parser
 {
 LOG_CLASS(LLXUIParser);
 
-protected:
-	LLXUIParser();
-	friend class LLSingleton<LLXUIParser>;
 public:
+	LLXUIParser();
 	typedef LLInitParam::Parser::name_stack_t name_stack_t;
 
 	/*virtual*/ std::string getCurrentElementName();
@@ -140,20 +138,20 @@ private:
 	static bool readSDValue(Parser& parser, void* val_ptr);
 
 	//writer helper functions
-	bool writeBoolValue(const void* val_ptr, const name_stack_t&);
-	bool writeStringValue(const void* val_ptr, const name_stack_t&);
-	bool writeU8Value(const void* val_ptr, const name_stack_t&);
-	bool writeS8Value(const void* val_ptr, const name_stack_t&);
-	bool writeU16Value(const void* val_ptr, const name_stack_t&);
-	bool writeS16Value(const void* val_ptr, const name_stack_t&);
-	bool writeU32Value(const void* val_ptr, const name_stack_t&);
-	bool writeS32Value(const void* val_ptr, const name_stack_t&);
-	bool writeF32Value(const void* val_ptr, const name_stack_t&);
-	bool writeF64Value(const void* val_ptr, const name_stack_t&);
-	bool writeColor4Value(const void* val_ptr, const name_stack_t&);
-	bool writeUIColorValue(const void* val_ptr, const name_stack_t&);
-	bool writeUUIDValue(const void* val_ptr, const name_stack_t&);
-	bool writeSDValue(const void* val_ptr, const name_stack_t&);
+	static bool writeBoolValue(Parser& parser, const void* val_ptr, const name_stack_t&);
+	static bool writeStringValue(Parser& parser, const void* val_ptr, const name_stack_t&);
+	static bool writeU8Value(Parser& parser, const void* val_ptr, const name_stack_t&);
+	static bool writeS8Value(Parser& parser, const void* val_ptr, const name_stack_t&);
+	static bool writeU16Value(Parser& parser, const void* val_ptr, const name_stack_t&);
+	static bool writeS16Value(Parser& parser, const void* val_ptr, const name_stack_t&);
+	static bool writeU32Value(Parser& parser, const void* val_ptr, const name_stack_t&);
+	static bool writeS32Value(Parser& parser, const void* val_ptr, const name_stack_t&);
+	static bool writeF32Value(Parser& parser, const void* val_ptr, const name_stack_t&);
+	static bool writeF64Value(Parser& parser, const void* val_ptr, const name_stack_t&);
+	static bool writeColor4Value(Parser& parser, const void* val_ptr, const name_stack_t&);
+	static bool writeUIColorValue(Parser& parser, const void* val_ptr, const name_stack_t&);
+	static bool writeUUIDValue(Parser& parser, const void* val_ptr, const name_stack_t&);
+	static bool writeSDValue(Parser& parser, const void* val_ptr, const name_stack_t&);
 
 	LLXMLNodePtr getNode(const name_stack_t& stack);
 
@@ -182,23 +180,22 @@ private:
 // of coroutines to perform matching of xml nodes during parsing.  Not sure if the overhead
 // of coroutines would offset the gain from SAX parsing
 
-class LLSimpleXUIParser : public LLInitParam::Parser, public LLSingleton<LLSimpleXUIParser>
+class LLSimpleXUIParser : public LLInitParam::Parser
 {
 LOG_CLASS(LLSimpleXUIParser);
-
-protected:
-	LLSimpleXUIParser();
-	virtual ~LLSimpleXUIParser();
-	friend class LLSingleton<LLSimpleXUIParser>;
 public:
 	typedef LLInitParam::Parser::name_stack_t name_stack_t;
+	typedef LLInitParam::BaseBlock* (*element_start_callback_t)(LLSimpleXUIParser&, const char* block_name);
+
+	LLSimpleXUIParser(element_start_callback_t element_cb = NULL);
+	virtual ~LLSimpleXUIParser();
 
 	/*virtual*/ std::string getCurrentElementName();
 	/*virtual*/ void parserWarning(const std::string& message);
 	/*virtual*/ void parserError(const std::string& message);
 
 	bool readXUI(const std::string& filename, LLInitParam::BaseBlock& block, bool silent=false);
-	void setBlock(LLInitParam::BaseBlock* block);
+
 
 private:
 	//reader helper functions
@@ -227,7 +224,6 @@ private:
 	void characterData(const char *s, int len);
 	bool readAttributes(const char **atts);
 
-	LLInitParam::BaseBlock*			mBlock;
 	Parser::name_stack_t			mNameStack;
 	struct XML_ParserStruct*		mParser;
 	S32								mLastWriteGeneration;
@@ -238,6 +234,9 @@ private:
 	const char*						mCurAttributeValueBegin;
 	std::vector<S32>				mTokenSizeStack;
 	std::vector<std::string>		mScope;
+	element_start_callback_t		mElementCB;
+
+	std::vector<std::pair<LLInitParam::BaseBlock*, S32> > mOutputStack;
 };
 
 
diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp
index b8776d0af2..ef596c4457 100644
--- a/indra/newview/llfavoritesbar.cpp
+++ b/indra/newview/llfavoritesbar.cpp
@@ -677,7 +677,8 @@ const LLButton::Params& LLFavoritesBarCtrl::getButtonParams()
 		LLXMLNodePtr button_xml_node;
 		if(LLUICtrlFactory::getLayeredXMLNode("favorites_bar_button.xml", button_xml_node))
 		{
-			LLXUIParser::instance().readXUI(button_xml_node, button_params, "favorites_bar_button.xml");
+			LLXUIParser parser;
+			parser.readXUI(button_xml_node, button_params, "favorites_bar_button.xml");
 		}
 		params_initialized = true;
 	}
diff --git a/indra/newview/llhints.cpp b/indra/newview/llhints.cpp
index e0ced5caeb..4d7cdc01e5 100644
--- a/indra/newview/llhints.cpp
+++ b/indra/newview/llhints.cpp
@@ -297,7 +297,8 @@ void LLHints::show(LLNotificationPtr hint)
 {
 	LLHintPopup::Params p(LLUICtrlFactory::getDefaultParams<LLHintPopup>());
 
-	LLParamSDParser::instance().readSD(hint->getPayload(), p);
+	LLParamSDParser parser;
+	parser.readSD(hint->getPayload(), p);
 	p.notification = hint;
 
 	if (p.validateBlock())
diff --git a/indra/newview/llnamelistctrl.cpp b/indra/newview/llnamelistctrl.cpp
index d09f729943..b4c4d4a2ee 100644
--- a/indra/newview/llnamelistctrl.cpp
+++ b/indra/newview/llnamelistctrl.cpp
@@ -259,7 +259,8 @@ void LLNameListCtrl::addNameItem(LLNameListCtrl::NameItem& item, EAddPosition po
 LLScrollListItem* LLNameListCtrl::addElement(const LLSD& element, EAddPosition pos, void* userdata)
 {
 	LLNameListCtrl::NameItem item_params;
-	LLParamSDParser::instance().readSD(element, item_params);
+	LLParamSDParser parser;
+	parser.readSD(element, item_params);
 	item_params.userdata = userdata;
 	return addNameItemRow(item_params, pos);
 }
diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp
index d35739d436..7429386871 100644
--- a/indra/newview/lloutfitslist.cpp
+++ b/indra/newview/lloutfitslist.cpp
@@ -79,7 +79,8 @@ const LLAccordionCtrlTab::Params& get_accordion_tab_params()
 		LLXMLNodePtr xmlNode;
 		if (LLUICtrlFactory::getLayeredXMLNode("outfit_accordion_tab.xml", xmlNode))
 		{
-			LLXUIParser::instance().readXUI(xmlNode, tab_params, "outfit_accordion_tab.xml");
+			LLXUIParser parser;
+			parser.readXUI(xmlNode, tab_params, "outfit_accordion_tab.xml");
 		}
 		else
 		{
diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp
index 02097ea06d..181c5b4c81 100644
--- a/indra/newview/llviewertexturelist.cpp
+++ b/indra/newview/llviewertexturelist.cpp
@@ -1550,7 +1550,8 @@ bool LLUIImageList::initFromFile()
 	}
 
 	UIImageDeclarations images;
-	LLXUIParser::instance().readXUI(root, images, base_file_path);
+	LLXUIParser parser;
+	parser.readXUI(root, images, base_file_path);
 
 	if (!images.validateBlock()) return false;
 
diff --git a/indra/newview/skins/default/xui/en/floater_aaa.xml b/indra/newview/skins/default/xui/en/floater_aaa.xml
index cae6146880..930bbaa8cb 100644
--- a/indra/newview/skins/default/xui/en/floater_aaa.xml
+++ b/indra/newview/skins/default/xui/en/floater_aaa.xml
@@ -20,7 +20,7 @@
   <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>
-  <chat_history
+  <text_editor
    parse_urls="true"
    bg_readonly_color="ChatHistoryBgColor"
    bg_writeable_color="ChatHistoryBgColor" 
@@ -32,26 +32,51 @@
    layout="topleft"
 	 height="260"
    name="chat_history"
+   max_length="200000" 
    parse_highlights="true"
    text_color="ChatHistoryTextColor"
    text_readonly_color="ChatHistoryTextColor"
    translate="false"
+   track_end="true" 
+   wrap="true" 
    width="320">
-Really long line that is long enough to wrap once with jyg descenders.
-Really long line that is long enough to wrap once with jyg descenders.
-Really long line that is long enough to wrap once with jyg descenders.
-Really long line that is long enough to wrap once with jyg descenders.
-Really long line that is long enough to wrap once with jyg descenders.
-Really long line that is long enough to wrap once with jyg descenders.
-Really long line that is long enough to wrap once with jyg descenders.
-Really long line that is long enough to wrap once with jyg descenders.
-Really long line that is long enough to wrap once with jyg descenders.
-Really long line that is long enough to wrap once with jyg descenders.
-Really long line that is long enough to wrap once with jyg descenders.
-Really long line that is long enough to wrap once with jyg descenders.
-Really long line that is long enough to wrap once with jyg descenders.
-Really long line that is long enough to wrap once with jyg descenders.
-Really long line that is long enough to wrap once with jyg descenders.
-Really long line that is long enough to wrap once with jyg descenders.
-  </chat_history>
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    </text_editor>
 </floater>
-- 
cgit v1.2.3


From d1294e5aeb78205cbc580b8159f0a15b2102bd26 Mon Sep 17 00:00:00 2001
From: Richard Nelson <richard@lindenlab.com>
Date: Mon, 23 Aug 2010 14:31:39 -0700
Subject: fix for gcc

---
 indra/llui/llmenugl.cpp      | 2 +-
 indra/llui/lluictrlfactory.h | 2 ++
 2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp
index 46a7215707..b4d1a5726f 100644
--- a/indra/llui/llmenugl.cpp
+++ b/indra/llui/llmenugl.cpp
@@ -9,7 +9,7 @@
  * 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
+ * ("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
diff --git a/indra/llui/lluictrlfactory.h b/indra/llui/lluictrlfactory.h
index 82076335d7..207f74c89a 100644
--- a/indra/llui/lluictrlfactory.h
+++ b/indra/llui/lluictrlfactory.h
@@ -229,7 +229,9 @@ fail:
 	static bool getLocalizedXMLNode(const std::string &xui_filename, LLXMLNodePtr& root);
 
 private:
+	//NOTE: both friend declarations are necessary to keep both gcc and msvc happy
 	template <typename T> friend class LLChildRegistry;
+	template <typename T> template <typename U> friend class LLChildRegistry<T>::Register;
 
 	static void copyName(LLXMLNodePtr src, LLXMLNodePtr dest);
 
-- 
cgit v1.2.3


From 0daa627db4f1bba2f69ec717426b26593674d14c Mon Sep 17 00:00:00 2001
From: Richard Nelson <none@none>
Date: Tue, 24 Aug 2010 11:44:28 -0700
Subject: removed LLLayoutStack::fromXML custom xml parsing

---
 indra/llui/lllayoutstack.cpp                       | 435 +++++++--------------
 indra/llui/lllayoutstack.h                         |  74 +++-
 indra/llui/llsdparam.cpp                           |  27 +-
 indra/llui/llsdparam.h                             |   9 +-
 indra/llui/llview.cpp                              |   6 -
 indra/llui/llview.h                                |   8 +-
 indra/llxuixml/llinitparam.cpp                     |  44 +--
 indra/llxuixml/llinitparam.h                       |   6 +-
 indra/llxuixml/llxuiparser.cpp                     |  17 +-
 indra/llxuixml/llxuiparser.h                       |   3 +-
 indra/newview/llbottomtray.cpp                     |  10 +-
 indra/newview/llchathistory.cpp                    |  16 +-
 indra/newview/llchathistory.h                      |   2 +-
 indra/newview/llfavoritesbar.cpp                   |   7 +-
 indra/newview/llfloaternotificationsconsole.cpp    |  21 +-
 indra/newview/llnearbychatbar.cpp                  |   3 +-
 .../default/xui/da/floater_voice_controls.xml      |  12 +-
 indra/newview/skins/default/xui/da/panel_notes.xml |   8 +-
 .../default/xui/da/panel_prim_media_controls.xml   |   4 +-
 .../default/xui/de/floater_voice_controls.xml      |  12 +-
 .../default/xui/de/panel_notifications_channel.xml |  24 +-
 .../default/xui/de/panel_prim_media_controls.xml   |   4 +-
 .../default/xui/en/floater_voice_controls.xml      |   4 +-
 indra/newview/skins/default/xui/en/main_view.xml   |  40 +-
 .../skins/default/xui/en/panel_bottomtray.xml      |  55 +--
 .../skins/default/xui/en/panel_bottomtray_lite.xml |  35 +-
 .../default/xui/en/panel_notifications_channel.xml |  10 +-
 .../default/xui/en/panel_preferences_graphics1.xml |   2 +-
 .../default/xui/en/panel_prim_media_controls.xml   |   4 +-
 .../skins/default/xui/en/widgets/scroll_bar.xml    |   8 +-
 .../default/xui/en/widgets/simple_text_editor.xml  |   3 -
 .../default/xui/es/floater_voice_controls.xml      |  12 +-
 indra/newview/skins/default/xui/es/panel_notes.xml |   8 +-
 .../default/xui/es/panel_prim_media_controls.xml   |   4 +-
 .../default/xui/fr/floater_voice_controls.xml      |  12 +-
 .../default/xui/fr/panel_notifications_channel.xml |  24 +-
 .../default/xui/fr/panel_prim_media_controls.xml   |   4 +-
 .../default/xui/it/floater_voice_controls.xml      |  12 +-
 indra/newview/skins/default/xui/it/panel_notes.xml |   8 +-
 .../default/xui/it/panel_prim_media_controls.xml   |   4 +-
 .../default/xui/ja/floater_voice_controls.xml      |  12 +-
 .../default/xui/ja/panel_notifications_channel.xml |  24 +-
 .../default/xui/ja/panel_prim_media_controls.xml   |   4 +-
 .../default/xui/pl/floater_voice_controls.xml      |  12 +-
 indra/newview/skins/default/xui/pl/panel_notes.xml |   8 +-
 .../default/xui/pl/panel_prim_media_controls.xml   |   4 +-
 .../default/xui/pt/floater_voice_controls.xml      |  12 +-
 indra/newview/skins/default/xui/pt/panel_notes.xml |   8 +-
 .../default/xui/pt/panel_prim_media_controls.xml   |   4 +-
 49 files changed, 486 insertions(+), 603 deletions(-)

diff --git a/indra/llui/lllayoutstack.cpp b/indra/llui/lllayoutstack.cpp
index 2e6e4912bf..92c8416cbc 100644
--- a/indra/llui/lllayoutstack.cpp
+++ b/indra/llui/lllayoutstack.cpp
@@ -41,92 +41,56 @@
 #include "llresizebar.h"
 #include "llcriticaldamp.h"
 
-static LLDefaultChildRegistry::Register<LLLayoutStack> register_layout_stack("layout_stack", &LLLayoutStack::fromXML);
-
+static LLDefaultChildRegistry::Register<LLLayoutStack> register_layout_stack("layout_stack");
+static LLLayoutStack::LayoutStackRegistry::Register<LLLayoutPanel> register_layout_panel("layout_panel");
 
 //
-// LLLayoutStack
+// LLLayoutPanel
 //
-struct LLLayoutStack::LayoutPanel
+LLLayoutPanel::LLLayoutPanel(const Params& p)	
+:	LLPanel(p),
+ 	mMinDim(p.min_dim), 
+ 	mMaxDim(p.max_dim), 
+ 	mAutoResize(p.auto_resize),
+ 	mUserResize(p.user_resize),
+ 	mCollapsed(FALSE),
+ 	mCollapseAmt(0.f),
+ 	mVisibleAmt(1.f), // default to fully visible
+ 	mResizeBar(NULL) 
 {
-	LayoutPanel(LLPanel* panelp, ELayoutOrientation orientation, S32 min_width, S32 min_height, S32 max_width, S32 max_height, BOOL auto_resize, BOOL user_resize)	:	mPanel(panelp), 
-		mMinWidth(min_width), 
-		mMinHeight(min_height),
-		mMaxWidth(max_width), 
-		mMaxHeight(max_height),
-		mAutoResize(auto_resize),
-		mUserResize(user_resize),
-		mOrientation(orientation),
-		mCollapsed(FALSE),
-		mCollapseAmt(0.f),
-		mVisibleAmt(1.f), // default to fully visible
-		mResizeBar(NULL) 
+	// panels initialized as hidden should not start out partially visible
+	if (!getVisible())
 	{
-		LLResizeBar::Side side = (orientation == HORIZONTAL) ? LLResizeBar::RIGHT : LLResizeBar::BOTTOM;
-		LLRect resize_bar_rect = panelp->getRect();
-
-		S32 min_dim;
-		if (orientation == HORIZONTAL)
-		{
-			min_dim = mMinHeight;
-		}
-		else
-		{
-			min_dim = mMinWidth;
-		}
-		LLResizeBar::Params p;
-		p.name("resize");
-			p.resizing_view(mPanel);
-		p.min_size(min_dim);
-		p.side(side);
-		p.snapping_enabled(false);
-		mResizeBar = LLUICtrlFactory::create<LLResizeBar>(p);
-		// panels initialized as hidden should not start out partially visible
-		if (!mPanel->getVisible())
-		{
-			mVisibleAmt = 0.f;
-		}
+		mVisibleAmt = 0.f;
 	}
+}
 
-	~LayoutPanel()
-	{
-		// probably not necessary, but...
-		delete mResizeBar;
-		mResizeBar = NULL;
-	}
+LLLayoutPanel::~LLLayoutPanel()
+{
+	// probably not necessary, but...
+	delete mResizeBar;
+	mResizeBar = NULL;
+}
 	
-	F32 getCollapseFactor()
+F32 LLLayoutPanel::getCollapseFactor(LLLayoutStack::ELayoutOrientation orientation)
+{
+	if (orientation == LLLayoutStack::HORIZONTAL)
 	{
-		if (mOrientation == HORIZONTAL)
-		{
-			F32 collapse_amt = 
-				clamp_rescale(mCollapseAmt, 0.f, 1.f, 1.f, (F32)mMinWidth / (F32)llmax(1, mPanel->getRect().getWidth()));
-			return mVisibleAmt * collapse_amt;
-		}
-		else
+		F32 collapse_amt = 
+			clamp_rescale(mCollapseAmt, 0.f, 1.f, 1.f, (F32)mMinDim / (F32)llmax(1, getRect().getWidth()));
+		return mVisibleAmt * collapse_amt;
+	}
+	else
 	{
-			F32 collapse_amt = 
-				clamp_rescale(mCollapseAmt, 0.f, 1.f, 1.f, llmin(1.f, (F32)mMinHeight / (F32)llmax(1, mPanel->getRect().getHeight())));
-			return mVisibleAmt * collapse_amt;
-		}
+		F32 collapse_amt = 
+			clamp_rescale(mCollapseAmt, 0.f, 1.f, 1.f, llmin(1.f, (F32)mMinDim / (F32)llmax(1, getRect().getHeight())));
+		return mVisibleAmt * collapse_amt;
 	}
+}
 
-	LLPanel* mPanel;
-	S32 mMinWidth;
-	S32 mMinHeight;
-
-	// mMaxWidth & mMaxHeight are added to make configurable max width of the nearby chat bar. EXT-5589
-	// they are not processed by LLLayoutStack but they can be if necessary
-	S32 mMaxWidth;
-	S32 mMaxHeight;
-	BOOL mAutoResize;
-	BOOL mUserResize;
-	BOOL mCollapsed;
-	LLResizeBar* mResizeBar;
-	ELayoutOrientation mOrientation;
-	F32 mVisibleAmt;
-	F32 mCollapseAmt;
-};
+//
+// LLLayoutStack
+//
 
 LLLayoutStack::Params::Params()
 :	orientation("orientation", std::string("vertical")),
@@ -163,18 +127,18 @@ void LLLayoutStack::draw()
 	for (panel_it = mPanels.begin(); panel_it != mPanels.end(); ++panel_it)
 	{
 		// clip to layout rectangle, not bounding rectangle
-		LLRect clip_rect = (*panel_it)->mPanel->getRect();
+		LLRect clip_rect = (*panel_it)->getRect();
 		// scale clipping rectangle by visible amount
 		if (mOrientation == HORIZONTAL)
 		{
-			clip_rect.mRight = clip_rect.mLeft + llround((F32)clip_rect.getWidth() * (*panel_it)->getCollapseFactor());
+			clip_rect.mRight = clip_rect.mLeft + llround((F32)clip_rect.getWidth() * (*panel_it)->getCollapseFactor(mOrientation));
 		}
 		else
 		{
-			clip_rect.mBottom = clip_rect.mTop - llround((F32)clip_rect.getHeight() * (*panel_it)->getCollapseFactor());
+			clip_rect.mBottom = clip_rect.mTop - llround((F32)clip_rect.getHeight() * (*panel_it)->getCollapseFactor(mOrientation));
 		}
 
-		LLPanel* panelp = (*panel_it)->mPanel;
+		LLPanel* panelp = (*panel_it);
 
 		LLLocalClipRect clip(clip_rect, mClip);
 		// only force drawing invisible children if visible amount is non-zero
@@ -185,7 +149,7 @@ void LLLayoutStack::draw()
 
 void LLLayoutStack::removeChild(LLView* view)
 {
-	LayoutPanel* embedded_panelp = findEmbeddedPanel(dynamic_cast<LLPanel*>(view));
+	LLLayoutPanel* embedded_panelp = findEmbeddedPanel(dynamic_cast<LLPanel*>(view));
 
 	if (embedded_panelp)
 	{
@@ -206,149 +170,16 @@ BOOL LLLayoutStack::postBuild()
 	return TRUE;
 }
 
-static void get_attribute_s32_and_write(LLXMLNodePtr node,
-										const char* name,
-										S32 *value,
-										S32 default_value,
-										LLXMLNodePtr output_child)
-{
-	BOOL has_attr = node->getAttributeS32(name, *value);
-	if (has_attr && *value != default_value && output_child)
-	{
-		// create an attribute child node
-		LLXMLNodePtr child_attr = output_child->createChild(name, TRUE);
-		child_attr->setIntValue(*value);
-	}
-}
-
-static void get_attribute_bool_and_write(LLXMLNodePtr node,
-										const char* name,
-										BOOL *value,
-										BOOL default_value,
-										LLXMLNodePtr output_child)
+bool LLLayoutStack::addChild(LLView* child, S32 tab_group)
 {
-	BOOL has_attr = node->getAttributeBOOL(name, *value);
-	if (has_attr && *value != default_value && output_child)
+	LLLayoutPanel* panelp = dynamic_cast<LLLayoutPanel*>(child);
+	if (panelp)
 	{
-		LLXMLNodePtr child_attr = output_child->createChild(name, TRUE);
-		child_attr->setBoolValue(*value);
+		mPanels.push_back(panelp);
 	}
+	return LLView::addChild(child, tab_group);
 }
-//static 
-LLView* LLLayoutStack::fromXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr output_node)
-{
-	LLLayoutStack::Params p(LLUICtrlFactory::getDefaultParams<LLLayoutStack>());
-	LLXUIParser parser;
-	parser.readXUI(node, p, LLUICtrlFactory::getInstance()->getCurFileName());
-
-	// Export must happen before setupParams() mungles rectangles and before
-	// this item gets added to parent (otherwise screws up last_child_rect
-	// logic). JC
-	if (output_node)
-	{
-		Params output_params(p);
-		setupParamsForExport(output_params, parent);
-		LLLayoutStack::Params default_params(LLUICtrlFactory::getDefaultParams<LLLayoutStack>());
-		output_node->setName(node->getName()->mString);
-		parser.writeXUI(output_node, output_params, &default_params);
-	}
-
-	p.from_xui = true;
-	applyXUILayout(p, parent);
-	LLLayoutStack* layout_stackp = LLUICtrlFactory::create<LLLayoutStack>(p);
-
-	if (parent && layout_stackp)
-	{
-		S32 tab_group = p.tab_group.isProvided() ? p.tab_group() : parent->getLastTabGroup();
-
-		parent->addChild(layout_stackp, tab_group);
-	}
-
-	for (LLXMLNodePtr child_node = node->getFirstChild(); child_node.notNull(); child_node = child_node->getNextSibling())
-	{
-		const S32 DEFAULT_MIN_WIDTH = 0;
-		const S32 DEFAULT_MIN_HEIGHT = 0;
-		const S32 DEFAULT_MAX_WIDTH = S32_MAX;
-		const S32 DEFAULT_MAX_HEIGHT = S32_MAX;
-		const BOOL DEFAULT_AUTO_RESIZE = TRUE;
-
-		S32 min_width = DEFAULT_MIN_WIDTH;
-		S32 min_height = DEFAULT_MIN_HEIGHT;
-		S32 max_width = DEFAULT_MAX_WIDTH;
-		S32 max_height = DEFAULT_MAX_HEIGHT;
-		BOOL auto_resize = DEFAULT_AUTO_RESIZE;
-
-		LLXMLNodePtr output_child;
-		if (output_node) 
-		{
-			output_child = output_node->createChild("", FALSE);
-		}
-
-		// Layout stack allows child nodes to acquire additional attributes,
-		// such as "min_width" in:  <button label="Foo" min_width="100"/>
-		// If these attributes exist and have non-default values, write them
-		// to the output node.
-		get_attribute_s32_and_write(child_node, "min_width", &min_width,
-			DEFAULT_MIN_WIDTH, output_child);
-		get_attribute_s32_and_write(child_node, "min_height", &min_height,
-			DEFAULT_MIN_HEIGHT, output_child);
-		get_attribute_s32_and_write(child_node, "max_width", &max_width,
-			DEFAULT_MAX_WIDTH, output_child);
-		get_attribute_s32_and_write(child_node, "max_height", &max_height,
-			DEFAULT_MAX_HEIGHT, output_child);
-		get_attribute_bool_and_write(child_node, "auto_resize", &auto_resize,
-			DEFAULT_AUTO_RESIZE, output_child);
-
-		if (child_node->hasName("layout_panel"))
-		{
-			BOOL user_resize = TRUE;
-			get_attribute_bool_and_write(child_node, "user_resize", &user_resize,
-				TRUE, output_child);
-			LLPanel* panelp = (LLPanel*)LLPanel::fromXML(child_node, layout_stackp, output_child);
-			if (panelp)
-			{
-				panelp->setFollowsNone();
-				layout_stackp->addPanel(panelp, min_width, min_height, max_width, max_height, auto_resize, user_resize);
-			}
-		}
-		else
-		{
-			BOOL user_resize = FALSE;
-			get_attribute_bool_and_write(child_node, "user_resize", &user_resize,
-				FALSE, output_child);
-
-			LLPanel::Params p;
-			p.mouse_opaque(false);
-			LLPanel* panelp = LLUICtrlFactory::create<LLPanel>(p);
-			LLView* new_child = LLUICtrlFactory::getInstance()->createFromXML(child_node, panelp, LLStringUtil::null, LLPanel::child_registry_t::instance(), output_child);
-			if (new_child)
-			{
-				// put child in new embedded panel
-				layout_stackp->addPanel(panelp, min_width, min_height, max_width, max_height, auto_resize, user_resize);
-				// resize panel to contain widget and move widget to be contained in panel
-				panelp->setRect(new_child->getRect());
-				new_child->setOrigin(0, 0);
-			}
-			else
-			{
-				panelp->die();
-			}
-		}
-		
-		if (output_child && !output_child->mChildren && output_child->mAttributes.empty() && output_child->getValue().empty())
-		{
-			output_node->deleteChild(output_child);
-		}
-	}
-
-	if (!layout_stackp->postBuild())
-	{
-		delete layout_stackp;
-		return NULL;
-	}
 
-	return layout_stackp;
-}
 
 S32 LLLayoutStack::getDefaultHeight(S32 cur_height)
 {
@@ -374,34 +205,14 @@ S32 LLLayoutStack::getDefaultWidth(S32 cur_width)
 	return cur_width;
 }
 
-void LLLayoutStack::addPanel(LLPanel* panel, S32 min_width, S32 min_height, S32 max_width, S32 max_height, BOOL auto_resize, BOOL user_resize, EAnimate animate, S32 index)
+void LLLayoutStack::addPanel(LLLayoutPanel* panel, EAnimate animate)
 {
-	// panel starts off invisible (collapsed)
-	if (animate == ANIMATE)
-	{
-		panel->setVisible(FALSE);
-	}
-	LayoutPanel* embedded_panel = new LayoutPanel(panel, mOrientation, min_width, min_height, max_width, max_height, auto_resize, user_resize);
-	
-	mPanels.insert(mPanels.begin() + llclamp(index, 0, (S32)mPanels.size()), embedded_panel);
-	
-	if (panel->getParent() != this) 
-	{
-		addChild(panel);
-	}
-	addChild(embedded_panel->mResizeBar);
-
-	// bring all resize bars to the front so that they are clickable even over the panels
-	// with a bit of overlap
-	for (e_panel_list_t::iterator panel_it = mPanels.begin(); panel_it != mPanels.end(); ++panel_it)
-	{
-		LLResizeBar* resize_barp = (*panel_it)->mResizeBar;
-		sendChildToFront(resize_barp);
-	}
+	addChild(panel);
 
-	// start expanding panel animation
+	// panel starts off invisible (collapsed)
 	if (animate == ANIMATE)
 	{
+		panel->mVisibleAmt = 0.f;
 		panel->setVisible(TRUE);
 	}
 }
@@ -413,7 +224,7 @@ void LLLayoutStack::removePanel(LLPanel* panel)
 
 void LLLayoutStack::collapsePanel(LLPanel* panel, BOOL collapsed)
 {
-	LayoutPanel* panel_container = findEmbeddedPanel(panel);
+	LLLayoutPanel* panel_container = findEmbeddedPanel(panel);
 	if (!panel_container) return;
 
 	panel_container->mCollapsed = collapsed;
@@ -421,7 +232,7 @@ void LLLayoutStack::collapsePanel(LLPanel* panel, BOOL collapsed)
 
 void LLLayoutStack::updatePanelAutoResize(const std::string& panel_name, BOOL auto_resize)
 {
-	LayoutPanel* panel = findEmbeddedPanelByName(panel_name);
+	LLLayoutPanel* panel = findEmbeddedPanelByName(panel_name);
 
 	if (panel)
 	{
@@ -431,7 +242,7 @@ void LLLayoutStack::updatePanelAutoResize(const std::string& panel_name, BOOL au
 
 void LLLayoutStack::setPanelUserResize(const std::string& panel_name, BOOL user_resize)
 {
-	LayoutPanel* panel = findEmbeddedPanelByName(panel_name);
+	LLLayoutPanel* panel = findEmbeddedPanelByName(panel_name);
 
 	if (panel)
 	{
@@ -439,27 +250,25 @@ void LLLayoutStack::setPanelUserResize(const std::string& panel_name, BOOL user_
 	}
 }
 
-bool LLLayoutStack::getPanelMinSize(const std::string& panel_name, S32* min_widthp, S32* min_heightp)
+bool LLLayoutStack::getPanelMinSize(const std::string& panel_name, S32* min_dimp)
 {
-	LayoutPanel* panel = findEmbeddedPanelByName(panel_name);
+	LLLayoutPanel* panel = findEmbeddedPanelByName(panel_name);
 
 	if (panel)
 	{
-		if (min_widthp) *min_widthp = panel->mMinWidth;
-		if (min_heightp) *min_heightp = panel->mMinHeight;
+		if (min_dimp) *min_dimp = panel->mMinDim;
 	}
 
 	return NULL != panel;
 }
 
-bool LLLayoutStack::getPanelMaxSize(const std::string& panel_name, S32* max_widthp, S32* max_heightp)
+bool LLLayoutStack::getPanelMaxSize(const std::string& panel_name, S32* max_dimp)
 {
-	LayoutPanel* panel = findEmbeddedPanelByName(panel_name);
+	LLLayoutPanel* panel = findEmbeddedPanelByName(panel_name);
 
 	if (panel)
 	{
-		if (max_widthp) *max_widthp = panel->mMaxWidth;
-		if (max_heightp) *max_heightp = panel->mMaxHeight;
+		if (max_dimp) *max_dimp = panel->mMaxDim;
 	}
 
 	return NULL != panel;
@@ -471,6 +280,7 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
 	LLFastTimer ft(FTM_UPDATE_LAYOUT);
 	static LLUICachedControl<S32> resize_bar_overlap ("UIResizeBarOverlap", 0);
 	calcMinExtents();
+	createResizeBars();
 
 	// calculate current extents
 	S32 total_width = 0;
@@ -482,7 +292,7 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
 	e_panel_list_t::iterator panel_it;
 	for (panel_it = mPanels.begin(); panel_it != mPanels.end();	++panel_it)
 	{
-		LLPanel* panelp = (*panel_it)->mPanel;
+		LLPanel* panelp = (*panel_it);
 		if (panelp->getVisible()) 
 		{
 			if (mAnimate)
@@ -532,11 +342,11 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
 		if (mOrientation == HORIZONTAL)
 		{
 			// enforce minimize size constraint by default
-			if (panelp->getRect().getWidth() < (*panel_it)->mMinWidth)
+			if (panelp->getRect().getWidth() < (*panel_it)->mMinDim)
 			{
-				panelp->reshape((*panel_it)->mMinWidth, panelp->getRect().getHeight());
+				panelp->reshape((*panel_it)->mMinDim, panelp->getRect().getHeight());
 			}
-        	total_width += llround(panelp->getRect().getWidth() * (*panel_it)->getCollapseFactor());
+        	total_width += llround(panelp->getRect().getWidth() * (*panel_it)->getCollapseFactor(mOrientation));
         	// want n-1 panel gaps for n panels
 			if (panel_it != mPanels.begin())
 			{
@@ -546,11 +356,11 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
 		else //VERTICAL
 		{
 			// enforce minimize size constraint by default
-			if (panelp->getRect().getHeight() < (*panel_it)->mMinHeight)
+			if (panelp->getRect().getHeight() < (*panel_it)->mMinDim)
 			{
-				panelp->reshape(panelp->getRect().getWidth(), (*panel_it)->mMinHeight);
+				panelp->reshape(panelp->getRect().getWidth(), (*panel_it)->mMinDim);
 			}
-			total_height += llround(panelp->getRect().getHeight() * (*panel_it)->getCollapseFactor());
+			total_height += llround(panelp->getRect().getHeight() * (*panel_it)->getCollapseFactor(mOrientation));
 			if (panel_it != mPanels.begin())
 			{
 				total_height += mPanelSpacing;
@@ -564,7 +374,7 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
 	for (panel_it = mPanels.begin(); panel_it != mPanels.end(); ++panel_it)
 	{
 		// panels that are not fully visible do not count towards shrink headroom
-		if ((*panel_it)->getCollapseFactor() < 1.f) 
+		if ((*panel_it)->getCollapseFactor(mOrientation) < 1.f) 
 		{
 			continue;
 		}
@@ -577,11 +387,11 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
 		{
 			if (mOrientation == HORIZONTAL)
 			{
-				shrink_headroom_total += (*panel_it)->mPanel->getRect().getWidth() - (*panel_it)->mMinWidth;
+				shrink_headroom_total += (*panel_it)->getRect().getWidth() - (*panel_it)->mMinDim;
 			}
 			else //VERTICAL
 			{
-				shrink_headroom_total += (*panel_it)->mPanel->getRect().getHeight() - (*panel_it)->mMinHeight;
+				shrink_headroom_total += (*panel_it)->getRect().getHeight() - (*panel_it)->mMinDim;
 			}
 		}
 		else
@@ -589,13 +399,13 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
 			num_resizable_panels++;
 			if (mOrientation == HORIZONTAL)
 			{
-				shrink_headroom_available += (*panel_it)->mPanel->getRect().getWidth() - (*panel_it)->mMinWidth;
-				shrink_headroom_total += (*panel_it)->mPanel->getRect().getWidth() - (*panel_it)->mMinWidth;
+				shrink_headroom_available += (*panel_it)->getRect().getWidth() - (*panel_it)->mMinDim;
+				shrink_headroom_total += (*panel_it)->getRect().getWidth() - (*panel_it)->mMinDim;
 			}
 			else //VERTICAL
 			{
-				shrink_headroom_available += (*panel_it)->mPanel->getRect().getHeight() - (*panel_it)->mMinHeight;
-				shrink_headroom_total += (*panel_it)->mPanel->getRect().getHeight() - (*panel_it)->mMinHeight;
+				shrink_headroom_available += (*panel_it)->getRect().getHeight() - (*panel_it)->mMinDim;
+				shrink_headroom_total += (*panel_it)->getRect().getHeight() - (*panel_it)->mMinDim;
 			}
 		}
 	}
@@ -618,17 +428,25 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
 
 	for (panel_it = mPanels.begin(); panel_it != mPanels.end(); ++panel_it)
 	{
-		LLPanel* panelp = (*panel_it)->mPanel;
+		LLPanel* panelp = (*panel_it);
 
 		S32 cur_width = panelp->getRect().getWidth();
 		S32 cur_height = panelp->getRect().getHeight();
-		S32 new_width = llmax((*panel_it)->mMinWidth, cur_width);
-		S32 new_height = llmax((*panel_it)->mMinHeight, cur_height); 
+		S32 new_width = cur_width;
+		S32 new_height = cur_height; 
 
+		if (mOrientation == HORIZONTAL)
+		{
+			new_width = llmax((*panel_it)->mMinDim, new_width);
+		}
+		else
+		{
+			new_height = llmax((*panel_it)->mMinDim, new_height);
+		}
 		S32 delta_size = 0;
 
 		// if panel can automatically resize (not animating, and resize flag set)...
-		if ((*panel_it)->getCollapseFactor() == 1.f 
+		if ((*panel_it)->getCollapseFactor(mOrientation) == 1.f 
 			&& (force_resize || (*panel_it)->mAutoResize) 
 			&& !(*panel_it)->mResizeBar->hasMouseCapture()) 
 		{
@@ -639,8 +457,8 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
 				{
 					// shrink proportionally to amount over minimum
 					// so we can do this in one pass
-					delta_size = (shrink_headroom_available > 0) ? llround((F32)pixels_to_distribute * ((F32)(cur_width - (*panel_it)->mMinWidth) / (F32)shrink_headroom_available)) : 0;
-					shrink_headroom_available -= (cur_width - (*panel_it)->mMinWidth);
+					delta_size = (shrink_headroom_available > 0) ? llround((F32)pixels_to_distribute * ((F32)(cur_width - (*panel_it)->mMinDim) / (F32)shrink_headroom_available)) : 0;
+					shrink_headroom_available -= (cur_width - (*panel_it)->mMinDim);
 				}
 				else
 				{
@@ -649,7 +467,7 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
 					num_resizable_panels--;
 				}
 				pixels_to_distribute -= delta_size;
-				new_width = llmax((*panel_it)->mMinWidth, cur_width + delta_size);
+				new_width = llmax((*panel_it)->mMinDim, cur_width + delta_size);
 			}
 			else
 			{
@@ -662,8 +480,8 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
 				{
 					// shrink proportionally to amount over minimum
 					// so we can do this in one pass
-					delta_size = (shrink_headroom_available > 0) ? llround((F32)pixels_to_distribute * ((F32)(cur_height - (*panel_it)->mMinHeight) / (F32)shrink_headroom_available)) : 0;
-					shrink_headroom_available -= (cur_height - (*panel_it)->mMinHeight);
+					delta_size = (shrink_headroom_available > 0) ? llround((F32)pixels_to_distribute * ((F32)(cur_height - (*panel_it)->mMinDim) / (F32)shrink_headroom_available)) : 0;
+					shrink_headroom_available -= (cur_height - (*panel_it)->mMinDim);
 				}
 				else
 				{
@@ -671,7 +489,7 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
 					num_resizable_panels--;
 				}
 				pixels_to_distribute -= delta_size;
-				new_height = llmax((*panel_it)->mMinHeight, cur_height + delta_size);
+				new_height = llmax((*panel_it)->mMinDim, cur_height + delta_size);
 			}
 			else
 			{
@@ -712,11 +530,11 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
 
 		if (mOrientation == HORIZONTAL)
 		{
-			cur_x += llround(new_width * (*panel_it)->getCollapseFactor()) + mPanelSpacing;
+			cur_x += llround(new_width * (*panel_it)->getCollapseFactor(mOrientation)) + mPanelSpacing;
 		}
 		else //VERTICAL
 		{
-			cur_y -= llround(new_height * (*panel_it)->getCollapseFactor()) + mPanelSpacing;
+			cur_y -= llround(new_height * (*panel_it)->getCollapseFactor(mOrientation)) + mPanelSpacing;
 		}
 	}
 
@@ -724,19 +542,19 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
 	LLResizeBar* last_resize_bar = NULL;
 	for (panel_it = mPanels.begin(); panel_it != mPanels.end(); ++panel_it)
 	{
-		LLPanel* panelp = (*panel_it)->mPanel;
+		LLPanel* panelp = (*panel_it);
 
 		if (mOrientation == HORIZONTAL)
 		{
 			(*panel_it)->mResizeBar->setResizeLimits(
-				(*panel_it)->mMinWidth, 
-				(*panel_it)->mMinWidth + shrink_headroom_total);
+				(*panel_it)->mMinDim, 
+				(*panel_it)->mMinDim + shrink_headroom_total);
 		}
 		else //VERTICAL
 		{
 			(*panel_it)->mResizeBar->setResizeLimits(
-				(*panel_it)->mMinHeight, 
-				(*panel_it)->mMinHeight + shrink_headroom_total);
+				(*panel_it)->mMinDim, 
+				(*panel_it)->mMinDim + shrink_headroom_total);
 		}
 
 		// toggle resize bars based on panel visibility, resizability, etc
@@ -772,14 +590,14 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
 } // end LLLayoutStack::updateLayout
 
 
-LLLayoutStack::LayoutPanel* LLLayoutStack::findEmbeddedPanel(LLPanel* panelp) const
+LLLayoutPanel* LLLayoutStack::findEmbeddedPanel(LLPanel* panelp) const
 {
 	if (!panelp) return NULL;
 
 	e_panel_list_t::const_iterator panel_it;
 	for (panel_it = mPanels.begin(); panel_it != mPanels.end(); ++panel_it)
 	{
-		if ((*panel_it)->mPanel == panelp)
+		if ((*panel_it) == panelp)
 		{
 			return *panel_it;
 		}
@@ -787,15 +605,15 @@ LLLayoutStack::LayoutPanel* LLLayoutStack::findEmbeddedPanel(LLPanel* panelp) co
 	return NULL;
 }
 
-LLLayoutStack::LayoutPanel* LLLayoutStack::findEmbeddedPanelByName(const std::string& name) const
+LLLayoutPanel* LLLayoutStack::findEmbeddedPanelByName(const std::string& name) const
 {
-	LayoutPanel* result = NULL;
+	LLLayoutPanel* result = NULL;
 
 	for (e_panel_list_t::const_iterator panel_it = mPanels.begin(); panel_it != mPanels.end(); ++panel_it)
 	{
-		LayoutPanel* p = *panel_it;
+		LLLayoutPanel* p = *panel_it;
 
-		if (p->mPanel->getName() == name)
+		if (p->getName() == name)
 		{
 			result = p;
 			break;
@@ -816,9 +634,7 @@ void LLLayoutStack::calcMinExtents()
 	{
 		if (mOrientation == HORIZONTAL)
 		{
-			mMinHeight = llmax(	mMinHeight, 
-								(*panel_it)->mMinHeight);
-            mMinWidth += (*panel_it)->mMinWidth;
+            mMinWidth += (*panel_it)->mMinDim;
 			if (panel_it != mPanels.begin())
 			{
 				mMinWidth += mPanelSpacing;
@@ -826,9 +642,7 @@ void LLLayoutStack::calcMinExtents()
 		}
 		else //VERTICAL
 		{
-	        mMinWidth = llmax(	mMinWidth, 
-								(*panel_it)->mMinWidth);
-			mMinHeight += (*panel_it)->mMinHeight;
+			mMinHeight += (*panel_it)->mMinDim;
 			if (panel_it != mPanels.begin())
 			{
 				mMinHeight += mPanelSpacing;
@@ -837,6 +651,37 @@ void LLLayoutStack::calcMinExtents()
 	}
 }
 
+void LLLayoutStack::createResizeBars()
+{
+	for (e_panel_list_t::iterator panel_it = mPanels.begin(); panel_it != mPanels.end(); ++panel_it)
+	{
+		LLLayoutPanel* lp = (*panel_it);
+		if (lp->mResizeBar == NULL)
+		{
+			LLResizeBar::Side side = (mOrientation == HORIZONTAL) ? LLResizeBar::RIGHT : LLResizeBar::BOTTOM;
+			LLRect resize_bar_rect = getRect();
+
+			LLResizeBar::Params resize_params;
+			resize_params.name("resize");
+			resize_params.resizing_view(this);
+			resize_params.min_size(lp->mMinDim);
+			resize_params.side(side);
+			resize_params.snapping_enabled(false);
+			LLResizeBar* resize_bar = LLUICtrlFactory::create<LLResizeBar>(resize_params);
+			lp->mResizeBar = resize_bar;
+			LLView::addChild(resize_bar, 0);
+
+			// bring all resize bars to the front so that they are clickable even over the panels
+			// with a bit of overlap
+			for (e_panel_list_t::iterator panel_it = mPanels.begin(); panel_it != mPanels.end(); ++panel_it)
+			{
+				LLResizeBar* resize_barp = (*panel_it)->mResizeBar;
+				sendChildToFront(resize_barp);
+			}
+		}
+	}
+}
+
 // update layout stack animations, etc. once per frame
 // NOTE: we use this to size world view based on animating UI, *before* we draw the UI
 // we might still need to call updateLayout during UI draw phase, in case UI elements
diff --git a/indra/llui/lllayoutstack.h b/indra/llui/lllayoutstack.h
index e454454fe2..cc5bd6cf65 100644
--- a/indra/llui/lllayoutstack.h
+++ b/indra/llui/lllayoutstack.h
@@ -34,13 +34,18 @@
 #ifndef LL_LLLAYOUTSTACK_H
 #define LL_LLLAYOUTSTACK_H
 
-#include "llview.h"
+#include "llpanel.h"
 
 class LLPanel;
 
+class LLLayoutPanel;
+
 class LLLayoutStack : public LLView, public LLInstanceTracker<LLLayoutStack>
 {
 public:
+	struct LayoutStackRegistry : public LLChildRegistry<LayoutStackRegistry>
+	{};
+
 	struct Params : public LLInitParam::Block<Params, LLView::Params>
 	{
 		Optional<std::string>	orientation;
@@ -51,6 +56,8 @@ public:
 		Params();
 	};
 
+	typedef LayoutStackRegistry child_registry_t;
+
 	typedef enum e_layout_orientation
 	{
 		HORIZONTAL,
@@ -62,6 +69,7 @@ public:
 	/*virtual*/ void draw();
 	/*virtual*/ void removeChild(LLView*);
 	/*virtual*/ BOOL postBuild();
+	/*virtual*/ bool addChild(LLView* child, S32 tab_group = 0);
 
 	static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr output_node = NULL);
 
@@ -74,7 +82,7 @@ public:
 		ANIMATE
 	} EAnimate;
 
-	void addPanel(LLPanel* panel, S32 min_width, S32 min_height, S32 max_width, S32 max_height, BOOL auto_resize, BOOL user_resize, EAnimate animate = NO_ANIMATE, S32 index = S32_MAX);
+	void addPanel(LLLayoutPanel* panel, EAnimate animate = NO_ANIMATE);
 	void removePanel(LLPanel* panel);
 	void collapsePanel(LLPanel* panel, BOOL collapsed = TRUE);
 	S32 getNumPanels() { return mPanels.size(); }
@@ -83,20 +91,18 @@ public:
 	void setPanelUserResize(const std::string& panel_name, BOOL user_resize);
 	
 	/**
-	 * Gets minimal width and/or height of the specified by name panel.
+	 * Gets minimal dimension along layout_stack axis of the specified by name panel.
 	 *
-	 * If it is necessary to get only the one dimension pass NULL for another one.
 	 * @returns true if specified by panel_name internal panel exists, false otherwise.
 	 */
-	bool getPanelMinSize(const std::string& panel_name, S32* min_widthp, S32* min_heightp);
+	bool getPanelMinSize(const std::string& panel_name, S32* min_dimp);
 
 	/**
-	 * Gets maximal width and/or height of the specified by name panel.
+	 * Gets maximal dimension along layout_stack axis of the specified by name panel.
 	 *
-	 * If it is necessary to get only the one dimension pass NULL for another one.
 	 * @returns true if specified by panel_name internal panel exists, false otherwise.
 	 */
-	bool getPanelMaxSize(const std::string& panel_name, S32* max_width, S32* max_height);
+	bool getPanelMaxSize(const std::string& panel_name, S32* max_dim);
 	
 	void updateLayout(BOOL force_resize = FALSE);
 	
@@ -111,19 +117,18 @@ protected:
 	friend class LLUICtrlFactory;
 
 private:
-	struct LayoutPanel;
-
+	void createResizeBars();
 	void calcMinExtents();
 	S32 getDefaultHeight(S32 cur_height);
 	S32 getDefaultWidth(S32 cur_width);
 
 	const ELayoutOrientation mOrientation;
 
-	typedef std::vector<LayoutPanel*> e_panel_list_t;
+	typedef std::vector<LLLayoutPanel*> e_panel_list_t;
 	e_panel_list_t mPanels;
 
-	LayoutPanel* findEmbeddedPanel(LLPanel* panelp) const;
-	LayoutPanel* findEmbeddedPanelByName(const std::string& name) const;
+	LLLayoutPanel* findEmbeddedPanel(LLPanel* panelp) const;
+	LLLayoutPanel* findEmbeddedPanelByName(const std::string& name) const;
 
 	S32 mMinWidth;  // calculated by calcMinExtents
 	S32 mMinHeight;  // calculated by calcMinExtents
@@ -135,4 +140,47 @@ private:
 	bool mClip;
 }; // end class LLLayoutStack
 
+class LLLayoutPanel : public LLPanel
+{
+friend LLLayoutStack;
+friend class LLUICtrlFactory;
+public:
+	struct Params : public LLInitParam::Block<Params, LLPanel::Params>
+	{
+		Optional<S32>			min_dim,
+								max_dim;
+		Optional<bool>			user_resize,
+								auto_resize;
+
+		Params()
+		:	min_dim("min_dim", 0),
+			max_dim("max_dim", 0),
+			user_resize("user_resize", true),
+			auto_resize("auto_resize", true)
+		{
+			addSynonym(min_dim, "min_width");
+			addSynonym(min_dim, "min_height");
+			addSynonym(max_dim, "max_width");
+			addSynonym(max_dim, "max_height");
+		}
+	};
+
+	~LLLayoutPanel();
+protected:
+	LLLayoutPanel(const Params& p)	;
+
+	
+	F32 getCollapseFactor(LLLayoutStack::ELayoutOrientation orientation);
+
+	S32 mMinDim;
+	S32 mMaxDim;
+	BOOL mAutoResize;
+	BOOL mUserResize;
+	BOOL mCollapsed;
+	class LLResizeBar* mResizeBar;
+	F32 mVisibleAmt;
+	F32 mCollapseAmt;
+};
+
+
 #endif
diff --git a/indra/llui/llsdparam.cpp b/indra/llui/llsdparam.cpp
index 338569fc58..69976004e6 100644
--- a/indra/llui/llsdparam.cpp
+++ b/indra/llui/llsdparam.cpp
@@ -50,25 +50,26 @@ LLParamSDParser::LLParamSDParser()
 
 	if (sReadFuncs.empty())
 	{
-		registerParserFuncs<S32>(readS32, bind(&LLParamSDParser::writeTypedValue<S32>, this, _1, _2));
-		registerParserFuncs<U32>(readU32, bind(&LLParamSDParser::writeU32Param, this, _1, _2));
-		registerParserFuncs<F32>(readF32, bind(&LLParamSDParser::writeTypedValue<F32>, this, _1, _2));
-		registerParserFuncs<F64>(readF64, bind(&LLParamSDParser::writeTypedValue<F64>, this, _1, _2));
-		registerParserFuncs<bool>(readBool, bind(&LLParamSDParser::writeTypedValue<F32>, this, _1, _2));
-		registerParserFuncs<std::string>(readString, bind(&LLParamSDParser::writeTypedValue<std::string>, this, _1, _2));
-		registerParserFuncs<LLUUID>(readUUID, bind(&LLParamSDParser::writeTypedValue<LLUUID>, this, _1, _2));
-		registerParserFuncs<LLDate>(readDate, bind(&LLParamSDParser::writeTypedValue<LLDate>, this, _1, _2));
-		registerParserFuncs<LLURI>(readURI, bind(&LLParamSDParser::writeTypedValue<LLURI>, this, _1, _2));
-		registerParserFuncs<LLSD>(readSD, bind(&LLParamSDParser::writeTypedValue<LLSD>, this, _1, _2));
+		registerParserFuncs<S32>(readS32, &LLParamSDParser::writeTypedValue<S32>);
+		registerParserFuncs<U32>(readU32, &LLParamSDParser::writeU32Param);
+		registerParserFuncs<F32>(readF32, &LLParamSDParser::writeTypedValue<F32>);
+		registerParserFuncs<F64>(readF64, &LLParamSDParser::writeTypedValue<F64>);
+		registerParserFuncs<bool>(readBool, &LLParamSDParser::writeTypedValue<F32>);
+		registerParserFuncs<std::string>(readString, &LLParamSDParser::writeTypedValue<std::string>);
+		registerParserFuncs<LLUUID>(readUUID, &LLParamSDParser::writeTypedValue<LLUUID>);
+		registerParserFuncs<LLDate>(readDate, &LLParamSDParser::writeTypedValue<LLDate>);
+		registerParserFuncs<LLURI>(readURI, &LLParamSDParser::writeTypedValue<LLURI>);
+		registerParserFuncs<LLSD>(readSD, &LLParamSDParser::writeTypedValue<LLSD>);
 	}
 }
 
 // special case handling of U32 due to ambiguous LLSD::assign overload
-bool LLParamSDParser::writeU32Param(const void* val_ptr, const parser_t::name_stack_t& name_stack)
+bool LLParamSDParser::writeU32Param(LLParamSDParser::parser_t& parser, const void* val_ptr, const parser_t::name_stack_t& name_stack)
 {
-	if (!mWriteSD) return false;
+	LLParamSDParser& sdparser = static_cast<LLParamSDParser&>(parser);
+	if (!sdparser.mWriteSD) return false;
 	
-	LLSD* sd_to_write = getSDWriteNode(name_stack);
+	LLSD* sd_to_write = sdparser.getSDWriteNode(name_stack);
 	if (!sd_to_write) return false;
 
 	sd_to_write->assign((S32)*((const U32*)val_ptr));
diff --git a/indra/llui/llsdparam.h b/indra/llui/llsdparam.h
index e98318fc1e..83c958d67d 100644
--- a/indra/llui/llsdparam.h
+++ b/indra/llui/llsdparam.h
@@ -54,11 +54,12 @@ private:
 	void readSDValues(const LLSD& sd, LLInitParam::BaseBlock& block);
 
 	template<typename T>
-	bool writeTypedValue(const void* val_ptr, const parser_t::name_stack_t& name_stack)
+	static bool writeTypedValue(Parser& parser, const void* val_ptr, const parser_t::name_stack_t& name_stack)
 	{
-		if (!mWriteSD) return false;
+		LLParamSDParser& sdparser = static_cast<LLParamSDParser&>(parser);
+		if (!sdparser.mWriteSD) return false;
 		
-		LLSD* sd_to_write = getSDWriteNode(name_stack);
+		LLSD* sd_to_write = sdparser.getSDWriteNode(name_stack);
 		if (!sd_to_write) return false;
 
 		sd_to_write->assign(*((const T*)val_ptr));
@@ -67,7 +68,7 @@ private:
 
 	LLSD* getSDWriteNode(const parser_t::name_stack_t& name_stack);
 
-	bool writeU32Param(const void* value_ptr, const parser_t::name_stack_t& name_stack);
+	static bool writeU32Param(Parser& parser, const void* value_ptr, const parser_t::name_stack_t& name_stack);
 
 	static bool readS32(Parser& parser, void* val_ptr);
 	static bool readU32(Parser& parser, void* val_ptr);
diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp
index 48db873b6f..878def07ae 100644
--- a/indra/llui/llview.cpp
+++ b/indra/llui/llview.cpp
@@ -108,11 +108,7 @@ LLView::Params::Params()
 	left_pad("left_pad"),
 	left_delta("left_delta", S32_MAX),
 	from_xui("from_xui", false),
-	user_resize("user_resize"),
-	auto_resize("auto_resize"),
 	needs_translate("translate"),
-	min_dim("min_width"),
-	max_dim("max_width"),
 	xmlns("xmlns"),
 	xmlns_xsi("xmlns:xsi"),
 	xsi_schemaLocation("xsi:schemaLocation"),
@@ -120,8 +116,6 @@ LLView::Params::Params()
 
 {
 	addSynonym(rect, "");
-	addSynonym(min_dim, "min_height");
-	addSynonym(max_dim, "max_height");
 }
 
 LLView::LLView(const LLView::Params& p)
diff --git a/indra/llui/llview.h b/indra/llui/llview.h
index 6736ad9f33..fa4f4c8ae2 100644
--- a/indra/llui/llview.h
+++ b/indra/llui/llview.h
@@ -145,18 +145,12 @@ public:
 									left_delta;		// from last left to my left
 
 		//FIXME: get parent context involved in parsing traversal
-		Ignored						needs_translate;	// cue for translation tools
+		Ignored						needs_translate,	// cue for translation tools
 									xmlns,				// xml namespace
 									xmlns_xsi,			// xml namespace
 									xsi_schemaLocation,	// xml schema
 									xsi_type;			// xml schema type
 
-		// nested attributes for LLLayoutPanel
-		Optional<S32>				min_dim,
-									max_dim;
-		Optional<bool>				user_resize,		
-									auto_resize;
-
 		Params();
 	};
 
diff --git a/indra/llxuixml/llinitparam.cpp b/indra/llxuixml/llinitparam.cpp
index 99191d2dbe..922a91b609 100644
--- a/indra/llxuixml/llinitparam.cpp
+++ b/indra/llxuixml/llinitparam.cpp
@@ -74,7 +74,6 @@ namespace LLInitParam
 	void BlockDescriptor::aggregateBlockData(BlockDescriptor& src_block_data) 
 	{
 		mNamedParams.insert(src_block_data.mNamedParams.begin(), src_block_data.mNamedParams.end());
-		mSynonyms.insert(src_block_data.mSynonyms.begin(), src_block_data.mSynonyms.end());
 		std::copy(src_block_data.mUnnamedParams.begin(), src_block_data.mUnnamedParams.end(), std::back_inserter(mUnnamedParams));
 		std::copy(src_block_data.mValidationList.begin(), src_block_data.mValidationList.end(), std::back_inserter(mValidationList));
 		std::copy(src_block_data.mAllParams.begin(), src_block_data.mAllParams.end(), std::back_inserter(mAllParams));
@@ -277,22 +276,6 @@ namespace LLInitParam
 			}
 		}
 
-		for(BlockDescriptor::param_map_t::const_iterator it = block_data.mSynonyms.begin();
-			it != block_data.mSynonyms.end();
-			++it)
-		{
-			param_handle_t param_handle = it->second->mParamHandle;
-			const Param* param = getParamFromHandle(param_handle);
-			ParamDescriptor::inspect_func_t inspect_func = it->second->mInspectFunc;
-			if (inspect_func)
-			{
-				// use existing serial number for param
-				name_stack.push_back(std::make_pair(it->first, it->second->mGeneration));
-				inspect_func(*param, parser, name_stack, it->second->mMinCount, it->second->mMaxCount);
-				name_stack.pop_back();
-			}
-		}
-
 		return true;
 	}
 
@@ -314,22 +297,9 @@ namespace LLInitParam
 				// find pointer to member parameter from offset table
 				paramp = getParamFromHandle(found_it->second->mParamHandle);
 				deserialize_func = found_it->second->mDeserializeFunc;
-			}
-			else
-			{
-				BlockDescriptor::param_map_t::iterator found_it = block_data.mSynonyms.find(top_name);
-				if (found_it != block_data.mSynonyms.end())
-				{
-					// find pointer to member parameter from offset table
-					paramp = getParamFromHandle(found_it->second->mParamHandle);
-					deserialize_func = found_it->second->mDeserializeFunc;
-				}
-			}
 					
-			Parser::name_stack_range_t new_name_stack(name_stack.first, name_stack.second);
-			++new_name_stack.first;
-			if (deserialize_func)
-			{
+				Parser::name_stack_range_t new_name_stack(name_stack.first, name_stack.second);
+				++new_name_stack.first;
 				return deserialize_func(*paramp, p, new_name_stack, name_stack.first == name_stack.second ? -1 : name_stack.first->second);
 			}
 		}
@@ -404,7 +374,7 @@ namespace LLInitParam
 				}
 				else
 				{
-					block_data.mSynonyms[synonym] = param_descriptor;
+					block_data.mNamedParams[synonym] = param_descriptor;
 				}
 			}
 		}
@@ -429,14 +399,6 @@ namespace LLInitParam
 			}
 		}
 
-		for (BlockDescriptor::param_map_t::const_iterator it = block_data.mSynonyms.begin(); it != block_data.mSynonyms.end(); ++it)
-		{
-			if (it->second->mParamHandle == handle)
-			{
-				return it->first;
-			}
-		}
-
 		return LLStringUtil::null;
 	}
 
diff --git a/indra/llxuixml/llinitparam.h b/indra/llxuixml/llinitparam.h
index 488e20cf9f..51dbd99fb1 100644
--- a/indra/llxuixml/llinitparam.h
+++ b/indra/llxuixml/llinitparam.h
@@ -213,7 +213,10 @@ namespace LLInitParam
 
 		Parser(parser_read_func_map_t& read_map, parser_write_func_map_t& write_map, parser_inspect_func_map_t& inspect_map)
 		:	mParseSilently(false),
-			mParseGeneration(0)
+			mParseGeneration(0),
+			mParserReadFuncs(&read_map),
+			mParserWriteFuncs(&write_map),
+			mParserInspectFuncs(&inspect_map)
 		{}
 		virtual ~Parser();
 
@@ -393,7 +396,6 @@ namespace LLInitParam
 		typedef std::vector<std::pair<param_handle_t, ParamDescriptor::validation_func_t> > param_validation_list_t;
 
 		param_map_t						mNamedParams;			// parameters with associated names
-		param_map_t						mSynonyms;				// parameters with alternate names
 		param_list_t					mUnnamedParams;			// parameters with_out_ associated names
 		param_validation_list_t			mValidationList;		// parameters that must be validated
 		all_params_list_t				mAllParams;				// all parameters, owns descriptors
diff --git a/indra/llxuixml/llxuiparser.cpp b/indra/llxuixml/llxuiparser.cpp
index 220171fb79..9bda96713e 100644
--- a/indra/llxuixml/llxuiparser.cpp
+++ b/indra/llxuixml/llxuiparser.cpp
@@ -411,6 +411,7 @@ void LLXUIParser::readXUI(LLXMLNodePtr node, LLInitParam::BaseBlock& block, cons
 {
 	LLFastTimer timer(FTM_PARSE_XUI);
 	mNameStack.clear();
+	mRootNodeName = node->getName()->mString;
 	mCurFileName = filename;
 	mCurReadDepth = 0;
 	setParseSilently(silent);
@@ -421,11 +422,11 @@ void LLXUIParser::readXUI(LLXMLNodePtr node, LLInitParam::BaseBlock& block, cons
 	}
 	else
 	{
-		readXUIImpl(node, std::string(node->getName()->mString), block);
+		readXUIImpl(node, block);
 	}
 }
 
-bool LLXUIParser::readXUIImpl(LLXMLNodePtr nodep, const std::string& scope, LLInitParam::BaseBlock& block)
+bool LLXUIParser::readXUIImpl(LLXMLNodePtr nodep, LLInitParam::BaseBlock& block)
 {
 	typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
 	boost::char_separator<char> sep(".");
@@ -492,7 +493,15 @@ bool LLXUIParser::readXUIImpl(LLXMLNodePtr nodep, const std::string& scope, LLIn
 			}
 
 			// check for proper nesting
-			if(!scope.empty() && *name_token_it != scope)
+			if (mNameStack.empty())
+			{
+				if (*name_token_it != mRootNodeName)
+				{
+					childp = childp->getNextSibling();
+					continue;
+				}
+			}
+			else if(mNameStack.back().first != *name_token_it)
 			{
 				childp = childp->getNextSibling();
 				continue;
@@ -510,7 +519,7 @@ bool LLXUIParser::readXUIImpl(LLXMLNodePtr nodep, const std::string& scope, LLIn
 		}
 
 		// recurse and visit children XML nodes
-		if(readXUIImpl(childp, mNameStack.empty() ? scope : mNameStack.back().first, block))
+		if(readXUIImpl(childp, block))
 		{
 			// child node successfully parsed, remove from DOM
 
diff --git a/indra/llxuixml/llxuiparser.h b/indra/llxuixml/llxuiparser.h
index ee8fcdc369..1a4a7c49d1 100644
--- a/indra/llxuixml/llxuiparser.h
+++ b/indra/llxuixml/llxuiparser.h
@@ -118,7 +118,7 @@ public:
 	void writeXUI(LLXMLNodePtr node, const LLInitParam::BaseBlock& block, const LLInitParam::BaseBlock* diff_block = NULL);
 
 private:
-	bool readXUIImpl(LLXMLNodePtr node, const std::string& scope, LLInitParam::BaseBlock& block);
+	bool readXUIImpl(LLXMLNodePtr node, LLInitParam::BaseBlock& block);
 	bool readAttributes(LLXMLNodePtr nodep, LLInitParam::BaseBlock& block);
 
 	//reader helper functions
@@ -167,6 +167,7 @@ private:
 	LLXMLNodePtr					mLastWrittenChild;
 	S32								mCurReadDepth;
 	std::string						mCurFileName;
+	std::string						mRootNodeName;
 };
 
 // LLSimpleXUIParser is a streamlined SAX-based XUI parser that does not support localization 
diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp
index c4eda5f107..4377640416 100644
--- a/indra/newview/llbottomtray.cpp
+++ b/indra/newview/llbottomtray.cpp
@@ -76,7 +76,7 @@ namespace
 		llassert(stack);
 		if ( stack && panel && panel->getVisible() )
 		{
-			stack->getPanelMinSize(panel->getName(), &minimal_width, NULL);
+			stack->getPanelMinSize(panel->getName(), &minimal_width);
 		}
 		return minimal_width;
 	}
@@ -87,7 +87,7 @@ namespace
 		llassert(stack);
 		if ( stack && panel && panel->getVisible() )
 		{
-			stack->getPanelMaxSize(panel->getName(), &max_width, NULL);
+			stack->getPanelMaxSize(panel->getName(), &max_width);
 		}
 		return max_width;
 	}
@@ -975,7 +975,7 @@ void LLBottomTray::processShrinkButtons(S32& required_width, S32& buttons_freed_
 
 		S32 panel_min_width = 0;
 		std::string panel_name = mSpeakPanel->getName();
-		bool success = mToolbarStack->getPanelMinSize(panel_name, &panel_min_width, NULL);
+		bool success = mToolbarStack->getPanelMinSize(panel_name, &panel_min_width);
 		if (!success)
 		{
 			lldebugs << "Panel was not found to get its min width: " << panel_name << llendl;
@@ -1021,7 +1021,7 @@ void LLBottomTray::processShrinkButton(EResizeState processed_object_type, S32&
 		S32 panel_width = panel->getRect().getWidth();
 		S32 panel_min_width = 0;
 		std::string panel_name = panel->getName();
-		bool success = mToolbarStack->getPanelMinSize(panel_name, &panel_min_width, NULL);
+		bool success = mToolbarStack->getPanelMinSize(panel_name, &panel_min_width);
 		S32 possible_shrink_width = panel_width - panel_min_width;
 
 		if (!success)
@@ -1330,7 +1330,7 @@ bool LLBottomTray::setVisibleAndFitWidths(EResizeState object_type, bool visible
 
 			// Minimal width of current panel
 			S32 minimal_width = 0;
-			mToolbarStack->getPanelMinSize(cur_panel->getName(), &minimal_width, NULL);
+			mToolbarStack->getPanelMinSize(cur_panel->getName(), &minimal_width);
 
 			if ( (available_width + possible_shrunk_width) >= minimal_width)
 			{
diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index e1e425fa8c..162b12cd5e 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -502,12 +502,17 @@ void LLChatHistory::initFromParams(const LLChatHistory::Params& p)
 	
 	const S32 NEW_TEXT_NOTICE_HEIGHT = 20;
 	
-	LLPanel::Params panel_p;
+	LLLayoutPanel::Params panel_p;
 	panel_p.name = "spacer";
 	panel_p.background_visible = false;
 	panel_p.has_border = false;
 	panel_p.mouse_opaque = false;
-	stackp->addPanel(LLUICtrlFactory::create<LLPanel>(panel_p), 0, 30, S32_MAX, S32_MAX, true, false, LLLayoutStack::ANIMATE);
+	panel_p.min_dim = 30;
+	panel_p.max_dim = S32_MAX;
+	panel_p.auto_resize = true;
+	panel_p.user_resize = false;
+
+	stackp->addPanel(LLUICtrlFactory::create<LLLayoutPanel>(panel_p), LLLayoutStack::ANIMATE);
 
 	panel_p.name = "new_text_notice_holder";
 	LLRect new_text_notice_rect = getLocalRect();
@@ -516,7 +521,10 @@ void LLChatHistory::initFromParams(const LLChatHistory::Params& p)
 	panel_p.background_opaque = true;
 	panel_p.background_visible = true;
 	panel_p.visible = false;
-	mMoreChatPanel = LLUICtrlFactory::create<LLPanel>(panel_p);
+	panel_p.min_dim = 0;
+	panel_p.auto_resize = false;
+	panel_p.user_resize = false;
+	mMoreChatPanel = LLUICtrlFactory::create<LLLayoutPanel>(panel_p);
 	
 	LLTextBox::Params text_p(p.more_chat_text);
 	text_p.rect = mMoreChatPanel->getLocalRect();
@@ -525,7 +533,7 @@ void LLChatHistory::initFromParams(const LLChatHistory::Params& p)
 	mMoreChatText = LLUICtrlFactory::create<LLTextBox>(text_p, mMoreChatPanel);
 	mMoreChatText->setClickedCallback(boost::bind(&LLChatHistory::onClickMoreText, this));
 
-	stackp->addPanel(mMoreChatPanel, 0, 0, S32_MAX, S32_MAX, false, false, LLLayoutStack::ANIMATE);
+	stackp->addPanel(mMoreChatPanel, LLLayoutStack::ANIMATE);
 }
 
 
diff --git a/indra/newview/llchathistory.h b/indra/newview/llchathistory.h
index fa1f2e04a4..ddc456a5d2 100644
--- a/indra/newview/llchathistory.h
+++ b/indra/newview/llchathistory.h
@@ -144,7 +144,7 @@ class LLChatHistory : public LLUICtrl
 		S32 mTopHeaderPad;
 		S32 mBottomHeaderPad;
 
-		LLPanel*		mMoreChatPanel;
+		class LLLayoutPanel*	mMoreChatPanel;
 		LLTextBox*		mMoreChatText;
 		LLTextEditor*	mEditor;
 		typedef std::set<std::string> unread_chat_source_t;
diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp
index 18a6ac031f..751d5b8fcd 100644
--- a/indra/newview/llfavoritesbar.cpp
+++ b/indra/newview/llfavoritesbar.cpp
@@ -667,9 +667,10 @@ const LLButton::Params& LLFavoritesBarCtrl::getButtonParams()
 	{
 		LLXMLNodePtr button_xml_node;
 		if(LLUICtrlFactory::getLayeredXMLNode("favorites_bar_button.xml", button_xml_node))
-	{
-			LLXUIParser::instance().readXUI(button_xml_node, button_params, "favorites_bar_button.xml");
-	}
+		{
+			LLXUIParser parser;
+			parser.readXUI(button_xml_node, button_params, "favorites_bar_button.xml");
+		}
 		params_initialized = true;
 	}
 
diff --git a/indra/newview/llfloaternotificationsconsole.cpp b/indra/newview/llfloaternotificationsconsole.cpp
index 3d37c878ad..0a4d5b64f3 100644
--- a/indra/newview/llfloaternotificationsconsole.cpp
+++ b/indra/newview/llfloaternotificationsconsole.cpp
@@ -43,10 +43,10 @@
 const S32 NOTIFICATION_PANEL_HEADER_HEIGHT = 20;
 const S32 HEADER_PADDING = 38;
 
-class LLNotificationChannelPanel : public LLPanel
+class LLNotificationChannelPanel : public LLLayoutPanel
 {
 public:
-	LLNotificationChannelPanel(const std::string& channel_name);
+	LLNotificationChannelPanel(const Params& p);
 	BOOL postBuild();
 
 private:
@@ -58,12 +58,12 @@ private:
 	LLNotificationChannelPtr mChannelRejectsPtr;
 };
 
-LLNotificationChannelPanel::LLNotificationChannelPanel(const std::string& channel_name) 
-	: LLPanel()
+LLNotificationChannelPanel::LLNotificationChannelPanel(const LLNotificationChannelPanel::Params& p) 
+:	LLLayoutPanel(p)
 {
-	mChannelPtr = LLNotifications::instance().getChannel(channel_name);
+	mChannelPtr = LLNotifications::instance().getChannel(p.name);
 	mChannelRejectsPtr = LLNotificationChannelPtr(
-		LLNotificationChannel::buildChannel(channel_name + "rejects", mChannelPtr->getParentChannelName(),
+		LLNotificationChannel::buildChannel(p.name() + "rejects", mChannelPtr->getParentChannelName(),
 											!boost::bind(mChannelPtr->getFilter(), _1)));
 	buildFromFile( "panel_notifications_channel.xml");
 }
@@ -207,8 +207,13 @@ BOOL LLFloaterNotificationConsole::postBuild()
 void LLFloaterNotificationConsole::addChannel(const std::string& name, bool open)
 {
 	LLLayoutStack& stack = getChildRef<LLLayoutStack>("notification_channels");
-	LLNotificationChannelPanel* panelp = new LLNotificationChannelPanel(name);
-	stack.addPanel(panelp, 0, NOTIFICATION_PANEL_HEADER_HEIGHT, S32_MAX, S32_MAX, TRUE, TRUE, LLLayoutStack::ANIMATE);
+	LLNotificationChannelPanel::Params p;
+	p.min_dim = NOTIFICATION_PANEL_HEADER_HEIGHT;
+	p.auto_resize = true;
+	p.user_resize = true;
+	p.name = name;
+	LLNotificationChannelPanel* panelp = new LLNotificationChannelPanel(p);
+	stack.addPanel(panelp, LLLayoutStack::ANIMATE);
 
 	LLButton& header_button = panelp->getChildRef<LLButton>("header");
 	header_button.setToggleState(!open);
diff --git a/indra/newview/llnearbychatbar.cpp b/indra/newview/llnearbychatbar.cpp
index 41a19a54a8..fa3a627736 100644
--- a/indra/newview/llnearbychatbar.cpp
+++ b/indra/newview/llnearbychatbar.cpp
@@ -398,8 +398,7 @@ LLCtrlListInterface* LLGestureComboList::getListInterface()
 }
 
 LLNearbyChatBar::LLNearbyChatBar() 
-	: LLPanel()
-	, mChatBox(NULL)
+:	mChatBox(NULL)
 {
 	mSpeakerMgr = LLLocalSpeakerMgr::getInstance();
 }
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 2e59dfd649..4c956f13a7 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,12 @@
 		<layout_panel name="my_panel">
 			<text name="user_text" value="Min avatar:"/>
 		</layout_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"/>
-			</layout_panel>
-		</layout_stack>
+        <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"/>
+				</layout_panel>
+			</layout_stack>
+		</layout_panel>
 	</layout_stack>
 </floater>
diff --git a/indra/newview/skins/default/xui/da/panel_notes.xml b/indra/newview/skins/default/xui/da/panel_notes.xml
index 5b3a2d0906..00128497ba 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,13 @@
 					<check_box label="Editére, slette og tage mine objekter" name="objects_check"/>
 				</panel>
 			</scroll_container>
-		</panel>
-		<panel name="notes_buttons_panel">
+		</layout_panel>
+		<layout_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_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/da/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/da/panel_prim_media_controls.xml
index d3b3c7e21e..cfb32500c6 100644
--- a/indra/newview/skins/default/xui/da/panel_prim_media_controls.xml
+++ b/indra/newview/skins/default/xui/da/panel_prim_media_controls.xml
@@ -13,9 +13,9 @@
 		50
 	</string>
 	<layout_stack name="progress_indicator_area">
-		<panel name="media_progress_indicator">
+		<layout_panel name="media_progress_indicator">
 			<progress_bar name="media_progress_bar" tool_tip="Medie hentes"/>
-		</panel>
+		</layout_panel>
 	</layout_stack>
 	<layout_stack name="media_controls">
 		<layout_panel name="back">
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 07b7689cd0..22f2fd93ab 100644
--- a/indra/newview/skins/default/xui/de/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/de/floater_voice_controls.xml
@@ -19,10 +19,12 @@
 		<layout_panel name="my_panel">
 			<text name="user_text" value="Mein Avatar:"/>
 		</layout_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"/>
-			</layout_panel>
-		</layout_stack>
+        <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"/>
+				</layout_panel>
+			</layout_stack>
+		</layout_panel>
 	</layout_stack>
 </floater>
diff --git a/indra/newview/skins/default/xui/de/panel_notifications_channel.xml b/indra/newview/skins/default/xui/de/panel_notifications_channel.xml
index e2166f7baf..35bd76ce70 100644
--- a/indra/newview/skins/default/xui/de/panel_notifications_channel.xml
+++ b/indra/newview/skins/default/xui/de/panel_notifications_channel.xml
@@ -1,15 +1,19 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="notifications_panel">
 	<layout_stack name="stack1">
-		<scroll_list name="notifications_list">
-			<column label="Name" name="name"/>
-			<column label="Inhalt" name="content"/>
-			<column label="Datum" name="date"/>
-		</scroll_list>
-		<scroll_list name="notification_rejects_list">
-			<column label="Name" name="name"/>
-			<column label="Inhalt" name="content"/>
-			<column label="Datum" name="date"/>
-		</scroll_list>
+	     <layout_panel name="notifications_list_panel" >
+			<scroll_list name="notifications_list">
+				<column label="Name" name="name"/>
+				<column label="Inhalt" name="content"/>
+				<column label="Datum" name="date"/>
+			</scroll_list>
+		</layout_panel>
+	     <layout_panel name="rejects_list_panel" >
+			<scroll_list name="notification_rejects_list">
+				<column label="Name" name="name"/>
+				<column label="Inhalt" name="content"/>
+				<column label="Datum" name="date"/>
+			</scroll_list>
+		</layout_panel>
 	</layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/de/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/de/panel_prim_media_controls.xml
index 0a19483f8b..c85f2762b1 100644
--- a/indra/newview/skins/default/xui/de/panel_prim_media_controls.xml
+++ b/indra/newview/skins/default/xui/de/panel_prim_media_controls.xml
@@ -7,9 +7,9 @@
 		0.2
 	</string>
 	<layout_stack name="progress_indicator_area">
-		<panel name="media_progress_indicator">
+		<layout_panel name="media_progress_indicator">
 			<progress_bar name="media_progress_bar" tool_tip="Medien werden geladen"/>
-		</panel>
+		</layout_panel>
 	</layout_stack>
 	<layout_stack name="media_controls">
 		<layout_panel name="back">
diff --git a/indra/newview/skins/default/xui/en/floater_voice_controls.xml b/indra/newview/skins/default/xui/en/floater_voice_controls.xml
index bf5bd87ad6..a46604c834 100644
--- a/indra/newview/skins/default/xui/en/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/en/floater_voice_controls.xml
@@ -86,6 +86,7 @@
              visible="true"
              width="20" />
         </layout_panel>
+        <layout_panel name="leave_call_panel">
         <layout_stack
          clip="true"
          auto_resize="false"
@@ -96,7 +97,7 @@
          name="voice_effect_and_leave_call_stack"
          orientation="horizontal"
          width="262">
-          <panel
+          <layout_panel
            class="panel_voice_effect"
            name="panel_voice_effect"
            visiblity_control="VoiceMorphingEnabled"
@@ -118,6 +119,7 @@
              width="100" />
           </layout_panel>
         </layout_stack>
+          </layout_panel>
       <layout_panel
           follows="all"
           layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/main_view.xml b/indra/newview/skins/default/xui/en/main_view.xml
index 01ee8264e6..c3bbe70609 100644
--- a/indra/newview/skins/default/xui/en/main_view.xml
+++ b/indra/newview/skins/default/xui/en/main_view.xml
@@ -20,6 +20,7 @@
                   mouse_opaque="false"
                   name="nav_bar_container"
                   tab_stop="false"
+                  min_height="10" 
                   width="1024"
                   user_resize="false" 
                   visible="false">
@@ -65,25 +66,24 @@
                         mouse_opaque="false"
                         name="world_stack"
                         orientation="vertical">
-            <panel auto_resize="true"
-                   follows="all"
-                   height="500"
-                   layout="topleft"
-                   tab_stop="false"
-                   mouse_opaque="false"
-                name="hud container"
-                   width="500">
-            <panel auto_resize="false"
-                   follows="left|top"
-                   height="19"
-                   left="0"
-                   mouse_opaque="false"
-                   name="topinfo_bar_container"
-                   tab_stop="false"
-                   top="0"
-                   user_resize="false"
-                   visible="false"
-                   width="1024"/>
+            <layout_panel auto_resize="true"
+                          follows="all"
+                          height="500"
+                          layout="topleft"
+                          tab_stop="false"
+                          mouse_opaque="false"
+                          user_resize="false" 
+                          name="hud container"
+                          width="500">
+              <panel follows="left|top"
+                     height="19"
+                     left="0"
+                     mouse_opaque="false"
+                     name="topinfo_bar_container"
+                     tab_stop="false"
+                     top="0"
+                     visible="false"
+                     width="1024"/>
               <panel follows="right|top|bottom"
                      height="500"
                      mouse_opaque="false"
@@ -101,7 +101,7 @@
                      name="stand_stop_flying_container"
                      visible="false"
                      width="500"/>
-            </panel>
+            </layout_panel>
             <layout_panel auto_resize="false"
                    follows="all"
                    min_height="33"
diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
index 4b622691b3..73225ef7d0 100644
--- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml
+++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
@@ -29,31 +29,32 @@
      orientation="horizontal"
      top="0"
      width="1310">
-        <icon
+        <layout_panel
          auto_resize="false"
-         follows="left|right"
-         height="10"
-         image_name="spacer24.tga"
-         layout="topleft"
-         left="0"
+         user_resize="false" 
          min_width="2"
-         top="0"
          width="2" />
         <layout_panel
          auto_resize="false"
-         filename="panel_nearby_chat_bar.xml"
-         follows="left|right"
-         height="28"
          layout="topleft"
-         left="0"
          max_width="320"
          min_height="23"
          min_width="214"
          mouse_opaque="false"
-         name="chat_bar"
-         top="4"
+		 name="chat_bar_layout_panel"
          user_resize="true"
-         width="308" />
+         width="308" >
+          <panel
+            name="chat_bar"
+            filename="panel_nearby_chat_bar.xml"
+            left="0"
+            height="28"
+            width="308"
+            top="4"
+            mouse_opaque="false"
+            follows="left|right"
+          />
+        </layout_panel>
         <!--
         There is resize bar between chatbar and Speak button. It has 2px width (is is set as 2*UIResizeBarOverlap)
         -->
@@ -400,18 +401,10 @@ as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly.
                  width="7" />
             </chiclet_panel>
         </layout_panel>
-        <icon
-         auto_resize="false"
-         color="0 0 0 0"
-         follows="left|right"
-         height="10"
-         image_name="spacer24.tga"
-         layout="topleft"
-         left="0"
-         min_width="4"
-         name="DUMMY"
-         top="0"
-         width="4" />
+        <layout_panel auto_resize="false"
+                      user_resize="false" 
+                      width="4"
+                      min_width="4"/>
         <layout_panel
          auto_resize="false"
          follows="right"
@@ -503,17 +496,11 @@ image_pressed_selected  "Lit" + "Selected" - there are new messages and the Well
                 </button>
             </chiclet_notification>
         </layout_panel>
-      <icon
+      <layout_panel
          auto_resize="false"
-         color="0 0 0 0"
-         follows="left|right"
-         height="10"
-         image_name="spacer24.tga"
-         layout="topleft"
-         left="0"
+         user_resize="false" 
          min_width="4"
          name="DUMMY2"
-         top="0"
          width="8" />
     </layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray_lite.xml b/indra/newview/skins/default/xui/en/panel_bottomtray_lite.xml
index 6e9476f814..0734ca9a4b 100644
--- a/indra/newview/skins/default/xui/en/panel_bottomtray_lite.xml
+++ b/indra/newview/skins/default/xui/en/panel_bottomtray_lite.xml
@@ -28,30 +28,29 @@
      orientation="horizontal"
      top="0"
      width="1000">
-        <icon
+        <layout_panel
          auto_resize="false"
-         follows="left|right"
-         height="10"
-         image_name="spacer24.tga"
-         layout="topleft"
+         user_resize="false" 
          min_width="2"
-         left="0"
-         top="0"
          width="2" />
         <layout_panel
          mouse_opaque="false"
          auto_resize="true"
-         follows="left|right"
          height="28"
          layout="topleft"
-         left="0"
          min_height="23"
          width="310"
-         top="4"
          min_width="188"
-         name="chat_bar"
-         user_resize="false"
-         filename="panel_nearby_chat_bar.xml" />
+         user_resize="false">
+          <panel
+            left="0"
+            filename="panel_nearby_chat_bar.xml"
+            follows="left|right"
+            top="4"
+            width="310"
+            name="chat_bar"
+            mouse_opaque="false"/>
+        </layout_panel>
         <layout_panel
          mouse_opaque="false"
          auto_resize="false"
@@ -79,17 +78,11 @@
                  use_ellipses="true" />
             </gesture_combo_list>
         </layout_panel>
-        <icon
+        <layout_panel
          auto_resize="false"
-         color="0 0 0 0"
-         follows="left|right"
-         height="10"
-         image_name="spacer24.tga"
-         layout="topleft"
-         left="0"
+         user_resize="false" 
          min_width="3"
          name="after_gesture_panel"
-         top="0"
          width="3"/>
     </layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_notifications_channel.xml b/indra/newview/skins/default/xui/en/panel_notifications_channel.xml
index 3143b0a40c..c3dc588ba2 100644
--- a/indra/newview/skins/default/xui/en/panel_notifications_channel.xml
+++ b/indra/newview/skins/default/xui/en/panel_notifications_channel.xml
@@ -14,6 +14,9 @@
      orientation="horizontal"
      top="20"
      width="100">
+      <layout_panel name="notifications_list_panel" 
+                    width="100"
+                    user_resize="true">
         <scroll_list
          draw_heading="true"
          follows="left|right|top|bottom"
@@ -24,7 +27,6 @@
          sort_ascending="false"
          sort_column="2"
          top="0"
-         user_resize="true"
          width="100">
             <scroll_list.columns
              label="Name"
@@ -39,6 +41,10 @@
              name="date"
              width="150" />
         </scroll_list>
+      </layout_panel>
+      <layout_panel name="rejects_list_panel"
+                    width="100"
+                    user_resize="true">
         <scroll_list
          draw_heading="true"
          follows="left|right|top|bottom"
@@ -49,7 +55,6 @@
          sort_ascending="false"
          sort_column="2"
          top="0"
-         user_resize="true"
          width="100">
             <scroll_list.columns
              label="Name"
@@ -64,6 +69,7 @@
              name="date"
              width="150" />
         </scroll_list>
+      </layout_panel>
     </layout_stack>
     <button
      follows="left|right|top"
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..7ae717d0e3 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
@@ -291,7 +291,7 @@
       control_name="RenderReflectionDetail"
       height="23"
       layout="topleft"
-      left_="10"
+      left_delta="10"
       top_pad ="0"
       name="Reflections"
       width="150">
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 6bf00373ea..edf4b52773 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
@@ -33,7 +33,7 @@
 		mouse_opaque="false"
 		layout="topleft"
 		user_resize="false" />
-	<panel
+	<layout_panel
 		name="media_progress_indicator"
 		mouse_opaque="false"
 		follows="left|right|top"
@@ -55,7 +55,7 @@
 		  top="0"
 		  left="0"
 		  tool_tip="Media is Loading"/>
-	</panel>
+	</layout_panel>
 	<layout_panel
 		name="right_bookend_bottom"
 		width="0"
diff --git a/indra/newview/skins/default/xui/en/widgets/scroll_bar.xml b/indra/newview/skins/default/xui/en/widgets/scroll_bar.xml
index 48bc021e6d..830ea12e41 100644
--- a/indra/newview/skins/default/xui/en/widgets/scroll_bar.xml
+++ b/indra/newview/skins/default/xui/en/widgets/scroll_bar.xml
@@ -8,18 +8,18 @@
             thickness="15">
   <up_button image_unselected="ScrollArrow_Up"
              image_selected="ScrollArrow_Up"
-             scale_image="true" thickness="15"
+             scale_image="true"
              hover_glow_amount="0.35"/>
   <down_button image_unselected="ScrollArrow_Down"
                image_selected="ScrollArrow_Down"
-               scale_image="true" thickness="15"
+               scale_image="true"
                hover_glow_amount="0.35"/>
   <left_button image_unselected="ScrollArrow_Left"
                image_selected="ScrollArrow_Left"
-               scale_image="true" thickness="15"
+               scale_image="true"
                hover_glow_amount="0.35"/>
   <right_button image_unselected="ScrollArrow_Right"
                image_selected="ScrollArrow_Right"
-               scale_image="true" thickness="15"
+               scale_image="true"
                hover_glow_amount="0.35"/>
 </scroll_bar>
diff --git a/indra/newview/skins/default/xui/en/widgets/simple_text_editor.xml b/indra/newview/skins/default/xui/en/widgets/simple_text_editor.xml
index 3878c7a144..a120b1aec8 100644
--- a/indra/newview/skins/default/xui/en/widgets/simple_text_editor.xml
+++ b/indra/newview/skins/default/xui/en/widgets/simple_text_editor.xml
@@ -23,7 +23,4 @@
   bg_writeable_color="TextBgWriteableColor"
   bg_selected_color="EmphasisColor"
   bg_focus_color="TextBgFocusColor">
-  <simple_text_editor.border
-    bevel_style="in"
-    follows="all" />
 </simple_text_editor>
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 51adeb4dff..6f4782417d 100644
--- a/indra/newview/skins/default/xui/es/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/es/floater_voice_controls.xml
@@ -19,10 +19,12 @@
 		<layout_panel name="my_panel">
 			<text name="user_text" value="Mi avatar:"/>
 		</layout_panel>
-		<layout_stack name="voice_effect_and_leave_call_stack">
-			<layout_panel name="leave_call_btn_panel">
-				<button label="Colgar" name="leave_call_btn"/>
-			</layout_panel>
-		</layout_stack>
+        <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"/>
+				</layout_panel>
+			</layout_stack>
+		</layout_panel>
 	</layout_stack>
 </floater>
diff --git a/indra/newview/skins/default/xui/es/panel_notes.xml b/indra/newview/skins/default/xui/es/panel_notes.xml
index 8de2afa767..da98e1b15e 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,13 @@
 					<check_box label="Edite, borre o coja mis objetos" name="objects_check"/>
 				</panel>
 			</scroll_container>
-		</panel>
-		<panel name="notes_buttons_panel">
+		</layout_panel>
+		<layout_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_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/es/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/es/panel_prim_media_controls.xml
index 174922e28e..90b9e475e7 100644
--- a/indra/newview/skins/default/xui/es/panel_prim_media_controls.xml
+++ b/indra/newview/skins/default/xui/es/panel_prim_media_controls.xml
@@ -13,9 +13,9 @@
 		50
 	</string>
 	<layout_stack name="progress_indicator_area">
-		<panel name="media_progress_indicator">
+		<layout_panel name="media_progress_indicator">
 			<progress_bar name="media_progress_bar" tool_tip="Los media se están cargando"/>
-		</panel>
+		</layout_panel>
 	</layout_stack>
 	<layout_stack name="media_controls">
 		<layout_panel name="back">
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 5c26527ed6..8397dc4263 100644
--- a/indra/newview/skins/default/xui/fr/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/fr/floater_voice_controls.xml
@@ -19,10 +19,12 @@
 		<layout_panel name="my_panel">
 			<text name="user_text" value="Mon avatar :"/>
 		</layout_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"/>
-			</layout_panel>
-		</layout_stack>
+        <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"/>
+				</layout_panel>
+			</layout_stack>
+		</layout_panel>
 	</layout_stack>
 </floater>
diff --git a/indra/newview/skins/default/xui/fr/panel_notifications_channel.xml b/indra/newview/skins/default/xui/fr/panel_notifications_channel.xml
index 5beb71981c..110e017050 100644
--- a/indra/newview/skins/default/xui/fr/panel_notifications_channel.xml
+++ b/indra/newview/skins/default/xui/fr/panel_notifications_channel.xml
@@ -1,15 +1,19 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="notifications_panel">
 	<layout_stack name="stack1">
-		<scroll_list name="notifications_list">
-			<column label="Nom" name="name"/>
-			<column label="Contenu" name="content"/>
-			<column label="Date" name="date"/>
-		</scroll_list>
-		<scroll_list name="notification_rejects_list">
-			<column label="Nom" name="name"/>
-			<column label="Contenu" name="content"/>
-			<column label="Date" name="date"/>
-		</scroll_list>
+	     <layout_panel name="notifications_list_panel" >
+			<scroll_list name="notifications_list">
+				<column label="Nom" name="name"/>
+				<column label="Contenu" name="content"/>
+				<column label="Date" name="date"/>
+			</scroll_list>
+		</layout_panel>
+	     <layout_panel name="rejects_list_panel" >
+			<scroll_list name="notification_rejects_list">
+				<column label="Nom" name="name"/>
+				<column label="Contenu" name="content"/>
+				<column label="Date" name="date"/>
+			</scroll_list>
+		</layout_panel>
 	</layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/fr/panel_prim_media_controls.xml
index f6b9bdcb81..f16fcebd02 100644
--- a/indra/newview/skins/default/xui/fr/panel_prim_media_controls.xml
+++ b/indra/newview/skins/default/xui/fr/panel_prim_media_controls.xml
@@ -7,9 +7,9 @@
 		0.2
 	</string>
 	<layout_stack name="progress_indicator_area">
-		<panel name="media_progress_indicator">
+		<layout_panel name="media_progress_indicator">
 			<progress_bar name="media_progress_bar" tool_tip="Le média est en cours de chargement"/>
-		</panel>
+		</layout_panel>
 	</layout_stack>
 	<layout_stack name="media_controls">
 		<layout_panel name="back">
diff --git a/indra/newview/skins/default/xui/it/floater_voice_controls.xml b/indra/newview/skins/default/xui/it/floater_voice_controls.xml
index d2fd462062..4741d8d32f 100644
--- a/indra/newview/skins/default/xui/it/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/it/floater_voice_controls.xml
@@ -19,10 +19,12 @@
 		<layout_panel name="my_panel">
 			<text name="user_text" value="Il mio avatar:"/>
 		</layout_panel>
-		<layout_stack name="voice_effect_and_leave_call_stack">
-			<layout_panel name="leave_call_btn_panel">
-				<button label="Abbandona chiamata" name="leave_call_btn"/>
-			</layout_panel>
-		</layout_stack>
+        <layout_panel name="leave_call_panel">
+				<layout_stack name="voice_effect_and_leave_call_stack">
+				<layout_panel name="leave_call_btn_panel">
+					<button label="Abbandona chiamata" name="leave_call_btn"/>
+				</layout_panel>
+			</layout_stack>
+        </layout_panel>
 	</layout_stack>
 </floater>
diff --git a/indra/newview/skins/default/xui/it/panel_notes.xml b/indra/newview/skins/default/xui/it/panel_notes.xml
index 9ce6b47a32..945bff1603 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,13 @@
 					<check_box label="Modificare, eliminare o prendere i miei oggetti" name="objects_check"/>
 				</panel>
 			</scroll_container>
-		</panel>
-		<panel name="notes_buttons_panel">
+		</layout_panel>
+		<layout_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_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/it/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/it/panel_prim_media_controls.xml
index ef7aaf2e8c..4620d72977 100644
--- a/indra/newview/skins/default/xui/it/panel_prim_media_controls.xml
+++ b/indra/newview/skins/default/xui/it/panel_prim_media_controls.xml
@@ -13,9 +13,9 @@
 		50
 	</string>
 	<layout_stack name="progress_indicator_area">
-		<panel name="media_progress_indicator">
+		<layout_panel name="media_progress_indicator">
 			<progress_bar name="media_progress_bar" tool_tip="L&apos;elemento multimediale è in caricamento"/>
-		</panel>
+		</layout_panel>
 	</layout_stack>
 	<layout_stack name="media_controls">
 		<layout_panel name="back">
diff --git a/indra/newview/skins/default/xui/ja/floater_voice_controls.xml b/indra/newview/skins/default/xui/ja/floater_voice_controls.xml
index 4b95aa544f..0caca22bc1 100644
--- a/indra/newview/skins/default/xui/ja/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/ja/floater_voice_controls.xml
@@ -19,10 +19,12 @@
 		<layout_panel name="my_panel">
 			<text name="user_text" value="マイ アバター:"/>
 		</layout_panel>
-		<layout_stack name="voice_effect_and_leave_call_stack">
-			<layout_panel name="leave_call_btn_panel">
-				<button label="コール終了" name="leave_call_btn"/>
-			</layout_panel>
-		</layout_stack>
+        <layout_panel name="leave_call_panel">
+			<layout_stack name="voice_effect_and_leave_call_stack">
+				<layout_panel name="leave_call_btn_panel">
+					<button label="コール終了" name="leave_call_btn"/>
+				</layout_panel>
+			</layout_stack>
+		</layout_panel>
 	</layout_stack>
 </floater>
diff --git a/indra/newview/skins/default/xui/ja/panel_notifications_channel.xml b/indra/newview/skins/default/xui/ja/panel_notifications_channel.xml
index 5723535fd2..aff427ed49 100644
--- a/indra/newview/skins/default/xui/ja/panel_notifications_channel.xml
+++ b/indra/newview/skins/default/xui/ja/panel_notifications_channel.xml
@@ -1,15 +1,19 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="notifications_panel">
 	<layout_stack name="stack1">
-		<scroll_list name="notifications_list">
-			<column label="名前" name="name"/>
-			<column label="コンテンツ" name="content"/>
-			<column label="日付" name="date"/>
-		</scroll_list>
-		<scroll_list name="notification_rejects_list">
-			<column label="名前" name="name"/>
-			<column label="コンテンツ" name="content"/>
-			<column label="日付" name="date"/>
-		</scroll_list>
+		<layout_panel name="notifications_list_panel">
+			<scroll_list name="notifications_list">
+				<column label="名前" name="name"/>
+				<column label="コンテンツ" name="content"/>
+				<column label="日付" name="date"/>
+			</scroll_list>
+		</layout_panel>
+		<layout_panel name="rejects_list_panel">
+			<scroll_list name="notification_rejects_list">
+				<column label="名前" name="name"/>
+				<column label="コンテンツ" name="content"/>
+				<column label="日付" name="date"/>
+			</scroll_list>
+		</layout_panel>
 	</layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/ja/panel_prim_media_controls.xml
index a9897c7ae4..5506373eb0 100644
--- a/indra/newview/skins/default/xui/ja/panel_prim_media_controls.xml
+++ b/indra/newview/skins/default/xui/ja/panel_prim_media_controls.xml
@@ -7,9 +7,9 @@
 		0.2
 	</string>
 	<layout_stack name="progress_indicator_area">
-		<panel name="media_progress_indicator">
+		<layout_panel name="media_progress_indicator">
 			<progress_bar name="media_progress_bar" tool_tip="ローディング"/>
-		</panel>
+		</layout_panel>
 	</layout_stack>
 	<layout_stack name="media_controls">
 		<layout_panel name="back">
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 c222e4edbb..80200cfb21 100644
--- a/indra/newview/skins/default/xui/pl/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/pl/floater_voice_controls.xml
@@ -19,10 +19,12 @@
 		<layout_panel name="my_panel">
 			<text name="user_text" value="Mój awatar:"/>
 		</layout_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"/>
-			</layout_panel>
-		</layout_stack>
+        <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"/>
+				</layout_panel>
+			</layout_stack>
+		</layout_panel>
 	</layout_stack>
 </floater>
diff --git a/indra/newview/skins/default/xui/pl/panel_notes.xml b/indra/newview/skins/default/xui/pl/panel_notes.xml
index 35cb7e1bce..ec6008065f 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,13 @@
 					<check_box label="Edytowanie, kasowanie lub zabieranie moich obiektów" name="objects_check"/>
 				</panel>
 			</scroll_container>
-		</panel>
-		<panel name="notes_buttons_panel">
+		</layout_panel>
+		<layout_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_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/pl/panel_prim_media_controls.xml
index f10ce5ea4d..7f66ac5d93 100644
--- a/indra/newview/skins/default/xui/pl/panel_prim_media_controls.xml
+++ b/indra/newview/skins/default/xui/pl/panel_prim_media_controls.xml
@@ -13,9 +13,9 @@
 		50
 	</string>
 	<layout_stack name="progress_indicator_area">
-		<panel name="media_progress_indicator">
+		<layout_panel name="media_progress_indicator">
 			<progress_bar name="media_progress_bar" tool_tip="Wczytywanie mediów"/>
-		</panel>
+		</layout_panel>
 	</layout_stack>
 	<layout_stack name="media_controls">
 		<layout_panel name="back">
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 44f08b76b5..2337ee3074 100644
--- a/indra/newview/skins/default/xui/pt/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/pt/floater_voice_controls.xml
@@ -19,10 +19,12 @@
 		<layout_panel name="my_panel">
 			<text name="user_text" value="Meu avatar:"/>
 		</layout_panel>
-		<layout_stack name="voice_effect_and_leave_call_stack">
-			<layout_panel name="leave_call_btn_panel">
-				<button label="Desligar" name="leave_call_btn"/>
-			</layout_panel>
-		</layout_stack>
+        <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"/>
+				</layout_panel>
+			</layout_stack>
+		</layout_panel>
 	</layout_stack>
 </floater>
diff --git a/indra/newview/skins/default/xui/pt/panel_notes.xml b/indra/newview/skins/default/xui/pt/panel_notes.xml
index 9aa842d9a5..6fb614a8c4 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,13 @@
 					<check_box label="Pegar, editar ou excluir objetos meus" name="objects_check"/>
 				</panel>
 			</scroll_container>
-		</panel>
-		<panel name="notes_buttons_panel">
+		</layout_panel>
+		<layout_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_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/pt/panel_prim_media_controls.xml
index a1254b4da0..9e07b6772f 100644
--- a/indra/newview/skins/default/xui/pt/panel_prim_media_controls.xml
+++ b/indra/newview/skins/default/xui/pt/panel_prim_media_controls.xml
@@ -13,9 +13,9 @@
 		50
 	</string>
 	<layout_stack name="progress_indicator_area">
-		<panel name="media_progress_indicator">
+		<layout_panel name="media_progress_indicator">
 			<progress_bar name="media_progress_bar" tool_tip="Carregando mídia"/>
-		</panel>
+		</layout_panel>
 	</layout_stack>
 	<layout_stack name="media_controls">
 		<layout_panel name="back">
-- 
cgit v1.2.3


From 8641cba93b05936b1af0da749df5ed3b1b86f8e3 Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Wed, 25 Aug 2010 14:39:03 -0700
Subject: fix for line editor history not moving cursor to end

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

diff --git a/indra/llui/lllineeditor.cpp b/indra/llui/lllineeditor.cpp
index c93ca1af88..e6a07b02cc 100644
--- a/indra/llui/lllineeditor.cpp
+++ b/indra/llui/lllineeditor.cpp
@@ -1277,7 +1277,7 @@ BOOL LLLineEditor::handleSpecialKey(KEY key, MASK mask)
 			if( mCurrentHistoryLine > mLineHistory.begin() )
 			{
 				mText.assign( *(--mCurrentHistoryLine) );
-				setCursor(llmin((S32)mText.length(), getCursor()));
+				setCursorToEnd();
 			}
 			else
 			{
@@ -1294,7 +1294,7 @@ BOOL LLLineEditor::handleSpecialKey(KEY key, MASK mask)
 			if( !mLineHistory.empty() && mCurrentHistoryLine < mLineHistory.end() - 1 )
 			{
 				mText.assign( *(++mCurrentHistoryLine) );
-				setCursor(llmin((S32)mText.length(), getCursor()));
+				setCursorToEnd();
 			}
 			else
 			{
-- 
cgit v1.2.3


From c1405887c982f5a7396892017e4ea426ede9af23 Mon Sep 17 00:00:00 2001
From: callum <none@none>
Date: Wed, 25 Aug 2010 15:23:27 -0700
Subject: Force the value for the home page URL in the viewer sidebar to be
 persistant It's not loaded each time the side bar is opened - only at login -
 when it did not persist, the change to the URL that was lost after a restart.

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

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 12fb8741ca..3d7ab71c90 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -3782,7 +3782,7 @@
       <key>Comment</key>
       <string>URL for the web page to display in the Home side panel</string>
       <key>Persist</key>
-      <integer>0</integer>
+      <integer>1</integer>
       <key>Type</key>
       <string>String</string>
       <key>Value</key>
-- 
cgit v1.2.3


From 92db224e8624c22eb9e8516662685c68cb819e69 Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Wed, 25 Aug 2010 16:46:37 -0700
Subject: fixed regressions from changing layout panel to be a derived widget
 class

---
 indra/llui/llaccordionctrltab.h                    | 10 ++--
 indra/llui/lllayoutstack.cpp                       |  9 +++-
 indra/llui/lllayoutstack.h                         |  2 +
 indra/newview/llbottomtray.cpp                     | 57 ++++++++++++----------
 indra/newview/llbottomtray.h                       |  8 ++-
 indra/newview/llimfloater.cpp                      | 14 +++---
 .../skins/default/xui/da/floater_im_session.xml    |  1 -
 .../skins/default/xui/de/floater_im_session.xml    |  1 -
 .../skins/default/xui/en/favorites_bar_button.xml  |  2 +-
 .../skins/default/xui/en/floater_im_session.xml    | 17 +++++--
 indra/newview/skins/default/xui/en/main_view.xml   |  4 +-
 .../skins/default/xui/en/panel_bottomtray.xml      |  4 +-
 .../skins/default/xui/en/panel_bottomtray_lite.xml |  1 -
 .../default/xui/en/panel_im_control_panel.xml      | 40 +++++++--------
 .../default/xui/en/panel_prim_media_controls.xml   |  1 -
 .../skins/default/xui/es/floater_im_session.xml    |  1 -
 .../skins/default/xui/fr/floater_im_session.xml    |  1 -
 .../skins/default/xui/it/floater_im_session.xml    |  1 -
 .../skins/default/xui/ja/floater_im_session.xml    |  1 -
 .../skins/default/xui/pl/floater_im_session.xml    |  1 -
 .../skins/default/xui/pt/floater_im_session.xml    |  1 -
 21 files changed, 93 insertions(+), 84 deletions(-)

diff --git a/indra/llui/llaccordionctrltab.h b/indra/llui/llaccordionctrltab.h
index 00fb276f19..f87534fa76 100644
--- a/indra/llui/llaccordionctrltab.h
+++ b/indra/llui/llaccordionctrltab.h
@@ -91,10 +91,10 @@ public:
 
 		Optional<bool>			selection_enabled;
 
-		Optional<S32>			padding_left;
-		Optional<S32>			padding_right;
-		Optional<S32>			padding_top;
-		Optional<S32>			padding_bottom;
+		Optional<S32>			padding_left,
+								padding_right,
+								padding_top,
+								padding_bottom;
 
 		Params();
 	};
@@ -176,7 +176,7 @@ public:
 	virtual BOOL handleScrollWheel( S32 x, S32 y, S32 clicks );
 
 
-	virtual bool addChild(LLView* child, S32 tab_group);
+	virtual bool addChild(LLView* child, S32 tab_group = 0 );
 
 	bool isExpanded() const { return mDisplayChildren; }
 
diff --git a/indra/llui/lllayoutstack.cpp b/indra/llui/lllayoutstack.cpp
index 92c8416cbc..15a0369eb9 100644
--- a/indra/llui/lllayoutstack.cpp
+++ b/indra/llui/lllayoutstack.cpp
@@ -65,6 +65,13 @@ LLLayoutPanel::LLLayoutPanel(const Params& p)
 	}
 }
 
+void LLLayoutPanel::initFromParams(const Params& p)
+{
+	LLPanel::initFromParams(p);
+	setFollowsNone();
+}
+
+
 LLLayoutPanel::~LLLayoutPanel()
 {
 	// probably not necessary, but...
@@ -663,7 +670,7 @@ void LLLayoutStack::createResizeBars()
 
 			LLResizeBar::Params resize_params;
 			resize_params.name("resize");
-			resize_params.resizing_view(this);
+			resize_params.resizing_view(lp);
 			resize_params.min_size(lp->mMinDim);
 			resize_params.side(side);
 			resize_params.snapping_enabled(false);
diff --git a/indra/llui/lllayoutstack.h b/indra/llui/lllayoutstack.h
index cc5bd6cf65..9bcfa2c957 100644
--- a/indra/llui/lllayoutstack.h
+++ b/indra/llui/lllayoutstack.h
@@ -166,6 +166,8 @@ public:
 	};
 
 	~LLLayoutPanel();
+
+	void initFromParams(const Params& p);
 protected:
 	LLLayoutPanel(const Params& p)	;
 
diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp
index 4377640416..07c711644d 100644
--- a/indra/newview/llbottomtray.cpp
+++ b/indra/newview/llbottomtray.cpp
@@ -108,8 +108,9 @@ class LLBottomTrayLite
 {
 public:
 	LLBottomTrayLite()
-		: mNearbyChatBar(NULL),
-		  mGesturePanel(NULL)
+	:	mNearbyChatBar(NULL),
+		mChatBarContainer(NULL),
+		mGesturePanel(NULL)
 	{
 		mFactoryMap["chat_bar"] = LLCallbackMap(LLBottomTray::createNearbyChatBar, NULL);
 		buildFromFile("panel_bottomtray_lite.xml");
@@ -120,6 +121,7 @@ public:
 	BOOL postBuild()
 	{
 		mNearbyChatBar = findChild<LLNearbyChatBar>("chat_bar");
+		mChatBarContainer = getChild<LLLayoutPanel>("chat_bar_layout_panel");
 		mGesturePanel = getChild<LLPanel>("gesture_panel");
 
 		// Hide "show_nearby_chat" button 
@@ -141,6 +143,7 @@ public:
 	}
 
 	LLNearbyChatBar*	mNearbyChatBar;
+	LLLayoutPanel*		mChatBarContainer;
 	LLPanel*			mGesturePanel;
 };
 
@@ -149,13 +152,14 @@ LLBottomTray::LLBottomTray(const LLSD&)
 	mSpeakPanel(NULL),
 	mSpeakBtn(NULL),
 	mNearbyChatBar(NULL),
-	mToolbarStack(NULL)
-,	mMovementButton(NULL)
-,	mResizeState(RS_NORESIZE)
-,	mBottomTrayContextMenu(NULL)
-,	mCamButton(NULL)
-,	mBottomTrayLite(NULL)
-,	mIsInLiteMode(false)
+	mChatBarContainer(NULL),
+	mToolbarStack(NULL),
+	mMovementButton(NULL),
+	mResizeState(RS_NORESIZE),
+	mBottomTrayContextMenu(NULL),
+	mCamButton(NULL),
+	mBottomTrayLite(NULL),
+	mIsInLiteMode(false)
 {
 	// Firstly add ourself to IMSession observers, so we catch session events
 	// before chiclets do that.
@@ -192,7 +196,7 @@ LLBottomTray::~LLBottomTray()
 	if (mNearbyChatBar)
 	{
 		// store custom width of chatbar panel.
-		S32 custom_width = mNearbyChatBar->getRect().getWidth();
+		S32 custom_width = mChatBarContainer->getRect().getWidth();
 		gSavedSettings.setS32("ChatBarCustomWidth", custom_width);
 	}
 
@@ -387,7 +391,7 @@ S32 LLBottomTray::notifyParent(const LLSD& info)
 		const std::string& name = info["view_name"];
 
 		// expected only resize of nearby chatbar
-		if (mNearbyChatBar->getName() != name) return LLPanel::notifyParent(info);
+		if (mChatBarContainer->getName() != name) return LLPanel::notifyParent(info);
 
 		const S32 new_width = info["new_width"];
 
@@ -417,8 +421,8 @@ void LLBottomTray::updateContextMenu(S32 x, S32 y, MASK mask)
 {
 	LLUICtrl* edit_box = mNearbyChatBar->getChild<LLUICtrl>("chat_box");
 
-	S32 local_x = x - mNearbyChatBar->getRect().mLeft - edit_box->getRect().mLeft;
-	S32 local_y = y - mNearbyChatBar->getRect().mBottom - edit_box->getRect().mBottom;
+	S32 local_x = x - mChatBarContainer->getRect().mLeft - edit_box->getRect().mLeft;
+	S32 local_y = y - mChatBarContainer->getRect().mBottom - edit_box->getRect().mBottom;
 
 	bool in_edit_box = edit_box->pointInView(local_x, local_y);
 
@@ -472,6 +476,7 @@ BOOL LLBottomTray::postBuild()
 	gMenuHolder->addChild(mBottomTrayContextMenu);
 
 	mNearbyChatBar = findChild<LLNearbyChatBar>("chat_bar");
+	mChatBarContainer = getChild<LLLayoutPanel>("chat_bar_layout_panel");
 
 	mToolbarStack = getChild<LLLayoutStack>("toolbar_stack");
 	mMovementButton = getChild<LLButton>("movement_btn");
@@ -677,14 +682,14 @@ void LLBottomTray::reshape(S32 width, S32 height, BOOL called_from_parent)
 	// we can not to do this from postBuild because reshape is called from parent view on startup
 	// creation after it and reset width according to resize logic.
 	static bool needs_restore_custom_state = true;
-	if (mNearbyChatBar && needs_restore_custom_state)
+	if (mChatBarContainer && needs_restore_custom_state)
 	{
 		// restore custom width of chatbar panel.
 		S32 new_width = gSavedSettings.getS32("ChatBarCustomWidth");
 		if (new_width > 0)
 		{
 			processChatbarCustomization(new_width);
-			mNearbyChatBar->reshape(new_width, mNearbyChatBar->getRect().getHeight());
+			mChatBarContainer->reshape(new_width, mChatBarContainer->getRect().getHeight());
 		}
 		needs_restore_custom_state = false;
 	}
@@ -723,7 +728,7 @@ S32 LLBottomTray::processWidthDecreased(S32 delta_width)
 			<< llendl;
 	}
 
-	const S32 chatbar_panel_width = mNearbyChatBar->getRect().getWidth();
+	const S32 chatbar_panel_width = mChatBarContainer->getRect().getWidth();
 	const S32 chatbar_panel_min_width = get_panel_min_width(mToolbarStack, mNearbyChatBar);
 	if (still_should_be_processed && chatbar_panel_width > chatbar_panel_min_width)
 	{
@@ -737,7 +742,7 @@ S32 LLBottomTray::processWidthDecreased(S32 delta_width)
 
 		still_should_be_processed = delta_width < 0;
 
-		mNearbyChatBar->reshape(mNearbyChatBar->getRect().getWidth() - delta_panel, mNearbyChatBar->getRect().getHeight());
+		mChatBarContainer->reshape(mChatBarContainer->getRect().getWidth() - delta_panel, mChatBarContainer->getRect().getHeight());
 
 		log(mNearbyChatBar, "after processing panel decreasing via nearby chatbar panel");
 
@@ -765,7 +770,7 @@ S32 LLBottomTray::processWidthDecreased(S32 delta_width)
 		if (buttons_freed_width > 0)
 		{
 			log(mNearbyChatBar, "before applying compensative width");
-			mNearbyChatBar->reshape(mNearbyChatBar->getRect().getWidth() + buttons_freed_width, mNearbyChatBar->getRect().getHeight() );
+			mChatBarContainer->reshape(mChatBarContainer->getRect().getWidth() + buttons_freed_width, mChatBarContainer->getRect().getHeight() );
 			log(mNearbyChatBar, "after applying compensative width");
 			lldebugs << buttons_freed_width << llendl;
 		}
@@ -781,9 +786,9 @@ void LLBottomTray::processWidthIncreased(S32 delta_width)
 	const S32 chiclet_panel_width = mChicletPanel->getParent()->getRect().getWidth();
 	static const S32 chiclet_panel_min_width = mChicletPanel->getMinWidth();
 
-	const S32 chatbar_panel_width = mNearbyChatBar->getRect().getWidth();
-	static const S32 chatbar_panel_min_width = get_panel_min_width(mToolbarStack, mNearbyChatBar);
-	static const S32 chatbar_panel_max_width = get_panel_max_width(mToolbarStack, mNearbyChatBar);
+	const S32 chatbar_panel_width = mChatBarContainer->getRect().getWidth();
+	static const S32 chatbar_panel_min_width = get_panel_min_width(mToolbarStack, mChatBarContainer);
+	static const S32 chatbar_panel_max_width = get_panel_max_width(mToolbarStack, mChatBarContainer);
 
 	const S32 chatbar_available_shrink_width = chatbar_panel_width - chatbar_panel_min_width;
 	const S32 available_width_chiclet = chiclet_panel_width - chiclet_panel_min_width;
@@ -821,7 +826,7 @@ void LLBottomTray::processWidthIncreased(S32 delta_width)
 		}
 
 		log(mNearbyChatBar, "increase width: before applying compensative width");
-		mNearbyChatBar->reshape(mNearbyChatBar->getRect().getWidth() - chatbar_shrink_width, mNearbyChatBar->getRect().getHeight() );
+		mChatBarContainer->reshape(mChatBarContainer->getRect().getWidth() - chatbar_shrink_width, mChatBarContainer->getRect().getHeight() );
 		if (mNearbyChatBar)			log(mNearbyChatBar, "after applying compensative width");
 		lldebugs << chatbar_shrink_width << llendl;
 
@@ -842,7 +847,7 @@ void LLBottomTray::processWidthIncreased(S32 delta_width)
 
 
 	// how many space can nearby chatbar take?
-	S32 chatbar_panel_width_ = mNearbyChatBar->getRect().getWidth();
+	S32 chatbar_panel_width_ = mChatBarContainer->getRect().getWidth();
 	if (delta_width > 0 && chatbar_panel_width_ < chatbar_panel_max_width)
 	{
 		S32 delta_panel_max = chatbar_panel_max_width - chatbar_panel_width_;
@@ -853,7 +858,7 @@ void LLBottomTray::processWidthIncreased(S32 delta_width)
 			<< llendl;
 
 		delta_width -= delta_panel_max;
-		mNearbyChatBar->reshape(chatbar_panel_width_ + delta_panel, mNearbyChatBar->getRect().getHeight());
+		mChatBarContainer->reshape(chatbar_panel_width_ + delta_panel, mChatBarContainer->getRect().getHeight());
 		log(mNearbyChatBar, "applied unprocessed delta width");
 	}
 }
@@ -1310,7 +1315,7 @@ bool LLBottomTray::setVisibleAndFitWidths(EResizeState object_type, bool visible
 		{
 			// Calculate the possible shrunk width as difference between current and minimal widths
 			const S32 chatbar_shrunk_width =
-				mNearbyChatBar->getRect().getWidth() - get_panel_min_width(mToolbarStack, mNearbyChatBar);
+				mChatBarContainer->getRect().getWidth() - get_panel_min_width(mToolbarStack, mChatBarContainer);
 
 			S32 sum_of_min_widths = get_panel_min_width(mToolbarStack, mSpeakPanel);
 			S32 sum_of_curr_widths = get_curr_width(mSpeakPanel);
@@ -1407,7 +1412,7 @@ void LLBottomTray::processChatbarCustomization(S32 new_width)
 {
 	if (NULL == mNearbyChatBar) return;
 
-	const S32 delta_width = mNearbyChatBar->getRect().getWidth() - new_width;
+	const S32 delta_width = mChatBarContainer->getRect().getWidth() - new_width;
 
 	if (delta_width == 0) return;
 
diff --git a/indra/newview/llbottomtray.h b/indra/newview/llbottomtray.h
index 05fed53936..792355600b 100644
--- a/indra/newview/llbottomtray.h
+++ b/indra/newview/llbottomtray.h
@@ -33,20 +33,17 @@
 #ifndef LL_LLBOTTOMPANEL_H
 #define LL_LLBOTTOMPANEL_H
 
-#include "llmenugl.h"
-
 #include "llpanel.h"
 #include "llimview.h"
-#include "llcombobox.h"
 
 class LLChicletPanel;
-class LLLineEditor;
 class LLLayoutStack;
-class LLNotificationChiclet;
 class LLSpeakButton;
 class LLNearbyChatBar;
 class LLIMChiclet;
 class LLBottomTrayLite;
+class LLLayoutPanel;
+class LLMenuGL;
 
 // Build time optimization, generate once in .cpp file
 #ifndef LLBOTTOMTRAY_CPP
@@ -381,6 +378,7 @@ protected:
 	LLPanel*			mSpeakPanel;
 	LLSpeakButton* 		mSpeakBtn;
 	LLNearbyChatBar*	mNearbyChatBar;
+	LLLayoutPanel*		mChatBarContainer;
 	LLLayoutStack*		mToolbarStack;
 	LLMenuGL*			mBottomTrayContextMenu;
 	LLButton*			mCamButton;
diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp
index 967f38bfd2..a7a348f072 100644
--- a/indra/newview/llimfloater.cpp
+++ b/indra/newview/llimfloater.cpp
@@ -257,14 +257,14 @@ BOOL LLIMFloater::postBuild()
 	}
 
 	mControlPanel->setSessionId(mSessionID);
-	mControlPanel->setVisible(gSavedSettings.getBOOL("IMShowControlPanel"));
+	mControlPanel->getParent()->setVisible(gSavedSettings.getBOOL("IMShowControlPanel"));
 
 	LLButton* slide_left = getChild<LLButton>("slide_left_btn");
-	slide_left->setVisible(mControlPanel->getVisible());
+	slide_left->setVisible(mControlPanel->getParent()->getVisible());
 	slide_left->setClickedCallback(boost::bind(&LLIMFloater::onSlide, this));
 
 	LLButton* slide_right = getChild<LLButton>("slide_right_btn");
-	slide_right->setVisible(!mControlPanel->getVisible());
+	slide_right->setVisible(!mControlPanel->getParent()->getVisible());
 	slide_right->setClickedCallback(boost::bind(&LLIMFloater::onSlide, this));
 
 	mInputEditor = getChild<LLLineEditor>("chat_editor");
@@ -363,12 +363,12 @@ void* LLIMFloater::createPanelAdHocControl(void* userdata)
 
 void LLIMFloater::onSlide()
 {
-	mControlPanel->setVisible(!mControlPanel->getVisible());
+	mControlPanel->getParent()->setVisible(!mControlPanel->getParent()->getVisible());
 
-	gSavedSettings.setBOOL("IMShowControlPanel", mControlPanel->getVisible());
+	gSavedSettings.setBOOL("IMShowControlPanel", mControlPanel->getParent()->getVisible());
 
-	getChild<LLButton>("slide_left_btn")->setVisible(mControlPanel->getVisible());
-	getChild<LLButton>("slide_right_btn")->setVisible(!mControlPanel->getVisible());
+	getChild<LLButton>("slide_left_btn")->setVisible(mControlPanel->getParent()->getVisible());
+	getChild<LLButton>("slide_right_btn")->setVisible(!mControlPanel->getParent()->getVisible());
 
 	LLLayoutStack* stack = getChild<LLLayoutStack>("im_panels");
 	if (stack) stack->setAnimate(true);
diff --git a/indra/newview/skins/default/xui/da/floater_im_session.xml b/indra/newview/skins/default/xui/da/floater_im_session.xml
index aa7df6ad2b..16df7e4b03 100644
--- a/indra/newview/skins/default/xui/da/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/da/floater_im_session.xml
@@ -1,7 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater name="panel_im">
 	<layout_stack name="im_panels">
-		<layout_panel label="IM kontrol panel" name="panel_im_control_panel"/>
 		<layout_panel>
 			<line_editor label="Til" name="chat_editor"/>
 		</layout_panel>
diff --git a/indra/newview/skins/default/xui/de/floater_im_session.xml b/indra/newview/skins/default/xui/de/floater_im_session.xml
index c69bb600ea..abaf275651 100644
--- a/indra/newview/skins/default/xui/de/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/de/floater_im_session.xml
@@ -1,7 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater name="panel_im">
 	<layout_stack name="im_panels">
-		<layout_panel label="IM Steuerkonsole" name="panel_im_control_panel"/>
 		<layout_panel>
 			<line_editor label="An" name="chat_editor"/>
 		</layout_panel>
diff --git a/indra/newview/skins/default/xui/en/favorites_bar_button.xml b/indra/newview/skins/default/xui/en/favorites_bar_button.xml
index b365040c20..e7dd62eb64 100644
--- a/indra/newview/skins/default/xui/en/favorites_bar_button.xml
+++ b/indra/newview/skins/default/xui/en/favorites_bar_button.xml
@@ -22,6 +22,6 @@
  pad_right="9"
  scale_image="true"
  tab_stop="false"
- top="0"
+ bottom="0"
  use_ellipses="true"
  width="140" />
diff --git a/indra/newview/skins/default/xui/en/floater_im_session.xml b/indra/newview/skins/default/xui/en/floater_im_session.xml
index 6c1214f152..a371e98322 100644
--- a/indra/newview/skins/default/xui/en/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/en/floater_im_session.xml
@@ -30,12 +30,19 @@
   top="20"
   left="0">
     <layout_panel
-      name="panel_im_control_panel"
-      layout="topleft"
-      follows="left"
-      min_width="115" 
+      name="im_control_panel_holder"
+      min_width="115"
+      width="150" 
+      height="320" 
       auto_resize="false"
-      user_resize="true" />
+      user_resize="false">
+      <panel
+        name="panel_im_control_panel"
+        layout="topleft"
+        height="320"
+        width="150" 
+        follows="all"/>
+      </layout_panel>
     <layout_panel
        default_tab_group="3"
        left="0"
diff --git a/indra/newview/skins/default/xui/en/main_view.xml b/indra/newview/skins/default/xui/en/main_view.xml
index c3bbe70609..8d9ebf6e06 100644
--- a/indra/newview/skins/default/xui/en/main_view.xml
+++ b/indra/newview/skins/default/xui/en/main_view.xml
@@ -103,8 +103,8 @@
                      width="500"/>
             </layout_panel>
             <layout_panel auto_resize="false"
-                   follows="all"
                    min_height="33"
+                   height="33" 
                    mouse_opaque="false"
                    name="bottom_tray_container"
                    visible="false"/>
@@ -112,7 +112,7 @@
         </layout_panel>
         <!-- side tray -->
         <layout_panel auto_resize="false"
-                      follows="all"
+                      follows="top|bottom"
                       height="500"
                       min_width="333"
                       mouse_opaque="false"
diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
index 73225ef7d0..b06a72f584 100644
--- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml
+++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
@@ -38,8 +38,8 @@
          auto_resize="false"
          layout="topleft"
          max_width="320"
-         min_height="23"
          min_width="214"
+         height="28" 
          mouse_opaque="false"
 		 name="chat_bar_layout_panel"
          user_resize="true"
@@ -50,7 +50,7 @@
             left="0"
             height="28"
             width="308"
-            top="4"
+            top="0"
             mouse_opaque="false"
             follows="left|right"
           />
diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray_lite.xml b/indra/newview/skins/default/xui/en/panel_bottomtray_lite.xml
index 0734ca9a4b..efb1da4c05 100644
--- a/indra/newview/skins/default/xui/en/panel_bottomtray_lite.xml
+++ b/indra/newview/skins/default/xui/en/panel_bottomtray_lite.xml
@@ -38,7 +38,6 @@
          auto_resize="true"
          height="28"
          layout="topleft"
-         min_height="23"
          width="310"
          min_width="188"
          user_resize="false">
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..aa0edbfb8a 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
@@ -3,11 +3,11 @@
  border="false"
  height="300"
  name="panel_im_control_panel"
- width="119">
+ width="150">
     <avatar_icon
      follows="left|top"
      height="105"
-     left_delta="5"
+     left_delta="20"
      name="avatar_icon"
      top="-5"
      width="114"/>
@@ -22,7 +22,7 @@
      name="button_stack"
      orientation="vertical"
      top_pad="5"
-     width="114">
+     width="145">
         <layout_panel
          mouse_opaque="false"
          auto_resize="true"
@@ -31,7 +31,7 @@
          layout="topleft"
          left="2"
          min_height="0"
-         width="109"
+         width="140"
          top="0"
          name="spacer"
          user_resize="false" />
@@ -41,7 +41,7 @@
          height="20"
          layout="topleft"
          min_height="20"
-         width="109"
+         width="140"
          name="view_profile_btn_panel"
          user_resize="false">
             <button
@@ -50,7 +50,7 @@
              label="Profile"
              name="view_profile_btn"
              top="0"
-             width="109" />
+             width="140" />
         </layout_panel>
         <layout_panel
          auto_resize="false"
@@ -58,7 +58,7 @@
          height="25"
          layout="topleft"
          min_height="25"
-         width="109"
+         width="140"
          name="add_friend_btn_panel"
          user_resize="false">
             <button
@@ -67,7 +67,7 @@
              label="Add Friend"
              name="add_friend_btn"
              top="5"
-             width="109" />
+             width="140" />
         </layout_panel>
         <layout_panel
          auto_resize="false"
@@ -75,7 +75,7 @@
          height="25"
          layout="topleft"
          min_height="25"
-         width="109"
+         width="140"
          name="teleport_btn_panel"
          user_resize="false">
         <button
@@ -85,7 +85,7 @@
              label="Teleport"
              name="teleport_btn"
              tool_tip = "Offer to teleport this person"
-             width="109" />
+             width="140" />
         </layout_panel>
         <layout_panel
          auto_resize="false"
@@ -93,7 +93,7 @@
          height="25"
          layout="topleft"
          min_height="25"
-         width="109"
+         width="140"
          name="share_btn_panel"
          user_resize="false">
            <button
@@ -102,7 +102,7 @@
              height="23"
              label="Share"
              name="share_btn"
-             width="109" />
+             width="140" />
         </layout_panel>
         <layout_panel
          auto_resize="false"
@@ -110,7 +110,7 @@
          height="25"
          layout="topleft"
          min_height="25"
-         width="109"
+         width="140"
          name="pay_btn_panel"
          user_resize="false">
            <button
@@ -119,7 +119,7 @@
              height="23"
              label="Pay"
              name="pay_btn"
-             width="109" />
+             width="140" />
         </layout_panel>
         <layout_panel
          auto_resize="false"
@@ -127,7 +127,7 @@
          height="25"
          layout="topleft"
          min_height="25"
-         width="109"
+         width="140"
          name="call_btn_panel"
          user_resize="false">
             <button
@@ -135,7 +135,7 @@
              height="23"
              label="Call"
              name="call_btn"
-             width="109" />
+             width="140" />
         </layout_panel>
         <layout_panel
          auto_resize="false"
@@ -143,7 +143,7 @@
          height="25"
          layout="topleft"
          min_height="25"
-         width="109"
+         width="140"
          name="end_call_btn_panel"
          user_resize="false"
          visible="false">
@@ -152,7 +152,7 @@
              height="23"
              label="End Call"
              name="end_call_btn"
-             width="109" />
+             width="140" />
         </layout_panel>
         <layout_panel
          auto_resize="false"
@@ -160,7 +160,7 @@
          height="25"
          layout="topleft"
          min_height="25"
-         width="109"
+         width="140"
          name="voice_ctrls_btn_panel"
          user_resize="false"
          visible="false">
@@ -169,7 +169,7 @@
              height="23"
              label="Voice Controls"
              name="voice_ctrls_btn"
-             width="109" />
+             width="140" />
         </layout_panel>
     </layout_stack>
 </panel>
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 edf4b52773..b25fd695c9 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
@@ -36,7 +36,6 @@
 	<layout_panel
 		name="media_progress_indicator"
 		mouse_opaque="false"
-		follows="left|right|top"
 		height="8"
 		layout="topleft"
 		left="0"
diff --git a/indra/newview/skins/default/xui/es/floater_im_session.xml b/indra/newview/skins/default/xui/es/floater_im_session.xml
index c7312e609b..3d9d17fc81 100644
--- a/indra/newview/skins/default/xui/es/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/es/floater_im_session.xml
@@ -1,7 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater name="panel_im">
 	<layout_stack name="im_panels">
-		<layout_panel label="Panel de control de MI" name="panel_im_control_panel"/>
 		<layout_panel>
 			<line_editor label="A" name="chat_editor"/>
 		</layout_panel>
diff --git a/indra/newview/skins/default/xui/fr/floater_im_session.xml b/indra/newview/skins/default/xui/fr/floater_im_session.xml
index c3df4a869c..516eb41362 100644
--- a/indra/newview/skins/default/xui/fr/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/fr/floater_im_session.xml
@@ -1,7 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater name="panel_im">
 	<layout_stack name="im_panels">
-		<layout_panel label="Panneau de contrôle IM" name="panel_im_control_panel"/>
 		<layout_panel>
 			<line_editor label="À" name="chat_editor"/>
 		</layout_panel>
diff --git a/indra/newview/skins/default/xui/it/floater_im_session.xml b/indra/newview/skins/default/xui/it/floater_im_session.xml
index 8d395ea04b..3d9d17fc81 100644
--- a/indra/newview/skins/default/xui/it/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/it/floater_im_session.xml
@@ -1,7 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater name="panel_im">
 	<layout_stack name="im_panels">
-		<layout_panel label="Pannello di controllo IM" name="panel_im_control_panel"/>
 		<layout_panel>
 			<line_editor label="A" name="chat_editor"/>
 		</layout_panel>
diff --git a/indra/newview/skins/default/xui/ja/floater_im_session.xml b/indra/newview/skins/default/xui/ja/floater_im_session.xml
index 6646cc0b25..dfa1c85ca2 100644
--- a/indra/newview/skins/default/xui/ja/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/ja/floater_im_session.xml
@@ -1,7 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater name="panel_im">
 	<layout_stack name="im_panels">
-		<layout_panel label="IM コントロールパネル" name="panel_im_control_panel"/>
 		<layout_panel>
 			<line_editor label="宛先" name="chat_editor"/>
 		</layout_panel>
diff --git a/indra/newview/skins/default/xui/pl/floater_im_session.xml b/indra/newview/skins/default/xui/pl/floater_im_session.xml
index db513f787c..9041ff7416 100644
--- a/indra/newview/skins/default/xui/pl/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/pl/floater_im_session.xml
@@ -1,7 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater name="panel_im">
 	<layout_stack name="im_panels">
-		<layout_panel label="Panel kontroli wiadomości prywatnej (IM)" name="panel_im_control_panel"/>
 		<layout_panel>
 			<line_editor label="Do" name="chat_editor"/>
 		</layout_panel>
diff --git a/indra/newview/skins/default/xui/pt/floater_im_session.xml b/indra/newview/skins/default/xui/pt/floater_im_session.xml
index 39dde3408b..5543ffa41d 100644
--- a/indra/newview/skins/default/xui/pt/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/pt/floater_im_session.xml
@@ -1,7 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater name="panel_im">
 	<layout_stack name="im_panels">
-		<layout_panel label="Painel de controle de MI" name="panel_im_control_panel"/>
 		<layout_panel>
 			<line_editor label="Para" name="chat_editor"/>
 		</layout_panel>
-- 
cgit v1.2.3


From a0b15c827ee7704c1557c9c882ec236d5d67f948 Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Wed, 25 Aug 2010 16:46:52 -0700
Subject: outfits accordions now have proper contents

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

diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp
index 7429386871..8a2073e661 100644
--- a/indra/newview/lloutfitslist.cpp
+++ b/indra/newview/lloutfitslist.cpp
@@ -68,9 +68,18 @@ bool LLOutfitTabNameComparator::compare(const LLAccordionCtrlTab* tab1, const LL
 	return name1 < name2;
 }
 
-const LLAccordionCtrlTab::Params& get_accordion_tab_params()
+struct outfit_accordion_tab_params : public LLInitParam::Block<outfit_accordion_tab_params, LLAccordionCtrlTab::Params>
 {
-	static LLAccordionCtrlTab::Params tab_params;
+	Mandatory<LLWearableItemsList::Params> wearable_list;
+
+	outfit_accordion_tab_params()
+	:	wearable_list("wearable_items_list")
+	{}
+};
+
+const outfit_accordion_tab_params& get_accordion_tab_params()
+{
+	static outfit_accordion_tab_params tab_params;
 	static bool initialized = false;
 	if (!initialized)
 	{
@@ -466,8 +475,11 @@ void LLOutfitsList::refreshList(const LLUUID& category_id)
 
 		std::string name = cat->getName();
 
-		LLAccordionCtrlTab::Params tab_params(get_accordion_tab_params());
+		outfit_accordion_tab_params tab_params(get_accordion_tab_params());
 		LLAccordionCtrlTab* tab = LLUICtrlFactory::create<LLAccordionCtrlTab>(tab_params);
+		LLWearableItemsList* wearable_list = LLUICtrlFactory::create<LLWearableItemsList>(tab_params.wearable_list);
+		wearable_list->setShape(tab->getLocalRect());
+		tab->addChild(wearable_list);
 
 		tab->setName(name);
 		tab->setTitle(name);
-- 
cgit v1.2.3


From 2f0d1f98834a37063c1ebde2c518bf20854381e2 Mon Sep 17 00:00:00 2001
From: Monroe Linden <monroe@lindenlab.com>
Date: Thu, 26 Aug 2010 11:19:43 -0700
Subject: Fix for a mac build error.

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

diff --git a/indra/llui/lllayoutstack.h b/indra/llui/lllayoutstack.h
index 9bcfa2c957..e62c9776cb 100644
--- a/indra/llui/lllayoutstack.h
+++ b/indra/llui/lllayoutstack.h
@@ -142,7 +142,7 @@ private:
 
 class LLLayoutPanel : public LLPanel
 {
-friend LLLayoutStack;
+friend class LLLayoutStack;
 friend class LLUICtrlFactory;
 public:
 	struct Params : public LLInitParam::Block<Params, LLPanel::Params>
-- 
cgit v1.2.3


From 904e43e664583b6e567a32becf182957b2006dff Mon Sep 17 00:00:00 2001
From: Monroe Linden <monroe@lindenlab.com>
Date: Thu, 26 Aug 2010 11:23:46 -0700
Subject: Fix another mac build error.

---
 indra/llui/llsdparam.h | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/indra/llui/llsdparam.h b/indra/llui/llsdparam.h
index 83c958d67d..c42358178a 100644
--- a/indra/llui/llsdparam.h
+++ b/indra/llui/llsdparam.h
@@ -93,7 +93,8 @@ class LLSDParamAdapter : public T
 		LLSDParamAdapter() {}
 		LLSDParamAdapter(const LLSD& sd)
 		{
-			LLParamSDParser::instance().readSD(sd, *this);
+			LLParamSDParser parser;
+			parser.readSD(sd, *this);
 		}
 		
 		LLSDParamAdapter(const T& val)
-- 
cgit v1.2.3


From 6cd9103dcf6eb9992ac50b209ae4d99a22603554 Mon Sep 17 00:00:00 2001
From: Monroe Linden <monroe@lindenlab.com>
Date: Thu, 26 Aug 2010 12:17:07 -0700
Subject: Fix for a link error.

---
 indra/integration_tests/llui_libtest/llwidgetreg.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/indra/integration_tests/llui_libtest/llwidgetreg.cpp b/indra/integration_tests/llui_libtest/llwidgetreg.cpp
index 57c39243fb..489eebe6fa 100644
--- a/indra/integration_tests/llui_libtest/llwidgetreg.cpp
+++ b/indra/integration_tests/llui_libtest/llwidgetreg.cpp
@@ -84,7 +84,7 @@ void LLWidgetReg::initClass(bool register_widgets)
 		LLDefaultChildRegistry::Register<LLMultiSlider> multi_slider_bar("multi_slider_bar");
 		LLDefaultChildRegistry::Register<LLMultiSliderCtrl> multi_slider("multi_slider");
 		LLDefaultChildRegistry::Register<LLPanel> panel("panel", &LLPanel::fromXML);
-		LLDefaultChildRegistry::Register<LLLayoutStack> layout_stack("layout_stack", &LLLayoutStack::fromXML);
+		LLDefaultChildRegistry::Register<LLLayoutStack> layout_stack("layout_stack");
 		LLDefaultChildRegistry::Register<LLProgressBar> progress_bar("progress_bar");
 		LLDefaultChildRegistry::Register<LLRadioGroup> radio_group("radio_group");
 		LLDefaultChildRegistry::Register<LLSearchEditor> search_editor("search_editor");
-- 
cgit v1.2.3


From 74d4bbfa0a50df83a4fe419294609b6ef2af7a80 Mon Sep 17 00:00:00 2001
From: Monroe Linden <monroe@lindenlab.com>
Date: Thu, 26 Aug 2010 12:26:31 -0700
Subject: Added the MediaEnablePopups setting as a global on/off switch for
 media popups.

---
 indra/newview/app_settings/settings.xml | 11 +++++++++++
 indra/newview/llviewermedia.cpp         |  7 +++++--
 2 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 3d7ab71c90..e6d6032fef 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -5164,6 +5164,17 @@
     <key>Value</key>
     <real>3.0</real>
   </map>
+  <key>MediaEnablePopups</key>
+  <map>
+    <key>Comment</key>
+    <string>If true, enable targeted links and javascript in media to open new media browser windows.</string>
+    <key>Persist</key>
+    <integer>1</integer>
+    <key>Type</key>
+    <string>Boolean</string>
+    <key>Value</key>
+    <integer>0</integer>
+  </map>
   <key>MediaOnAPrimUI</key>
   <map>
     <key>Comment</key>
diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp
index d89ee13b95..6f824b84e3 100644
--- a/indra/newview/llviewermedia.cpp
+++ b/indra/newview/llviewermedia.cpp
@@ -2835,8 +2835,11 @@ void LLViewerMediaImpl::handleMediaEvent(LLPluginClassMedia* plugin, LLPluginCla
 				// ignore this click and let media plugin handle it
 				break;
 			default:
-				// loadURL now handles distinguishing between _blank, _external, and other named targets.
-				LLWeb::loadURL(url, target);
+				if(gSavedSettings.getBOOL("MediaEnablePopups"))
+				{
+					// loadURL now handles distinguishing between _blank, _external, and other named targets.
+					LLWeb::loadURL(url, target);
+				}
 				break;
 			}
 		};
-- 
cgit v1.2.3


From c1e71b0ee1f43486b79bf34305d5212afd8541a9 Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Thu, 26 Aug 2010 12:32:14 -0700
Subject: added images for popup notification

---
 .../skins/default/textures/icons/pop_up_caution.png      | Bin 0 -> 3158 bytes
 indra/newview/skins/default/textures/textures.xml        |   2 ++
 .../skins/default/textures/windows/yellow_gradient.png   | Bin 0 -> 3634 bytes
 3 files changed, 2 insertions(+)
 create mode 100644 indra/newview/skins/default/textures/icons/pop_up_caution.png
 create mode 100644 indra/newview/skins/default/textures/windows/yellow_gradient.png

diff --git a/indra/newview/skins/default/textures/icons/pop_up_caution.png b/indra/newview/skins/default/textures/icons/pop_up_caution.png
new file mode 100644
index 0000000000..78b681cb33
Binary files /dev/null and b/indra/newview/skins/default/textures/icons/pop_up_caution.png differ
diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index 9fbbfb1d2b..8d6a564687 100644
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -652,4 +652,6 @@ with the same filename but different name
   <texture name="hint_arrow_up" file_name="windows/hint_arrow_up.png" preload="false"/>
   <texture name="hint_arrow_down" file_name="windows/hint_arrow_down.png" preload="false"/>
 
+  <texture name="Yellow_Gradient" file_name="windows/yellow_gradient.png"/>
+  <texture name="Popup_Caution" file_name="icons/pop_up_caution.png"/>
 </textures>
diff --git a/indra/newview/skins/default/textures/windows/yellow_gradient.png b/indra/newview/skins/default/textures/windows/yellow_gradient.png
new file mode 100644
index 0000000000..5fd847aaef
Binary files /dev/null and b/indra/newview/skins/default/textures/windows/yellow_gradient.png differ
-- 
cgit v1.2.3


From ead46208b02f31c8ed06242a016501d57c90abfb Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Thu, 26 Aug 2010 12:33:31 -0700
Subject: made layoutstack orientation mandatory

---
 indra/llui/lllayoutstack.cpp                       |  2 +-
 indra/llui/lllayoutstack.h                         |  2 +-
 .../skins/default/xui/en/floater_help_browser.xml  |  1 +
 .../skins/default/xui/en/floater_media_browser.xml | 71 ++++++++++++++++++++++
 .../xui/en/floater_notifications_console.xml       |  1 +
 .../skins/default/xui/en/panel_outfit_edit.xml     |  1 +
 .../skins/default/xui/en/panel_progress.xml        |  1 +
 .../default/xui/en/panel_sidetray_home_tab.xml     |  1 +
 8 files changed, 78 insertions(+), 2 deletions(-)

diff --git a/indra/llui/lllayoutstack.cpp b/indra/llui/lllayoutstack.cpp
index 15a0369eb9..309f710cbb 100644
--- a/indra/llui/lllayoutstack.cpp
+++ b/indra/llui/lllayoutstack.cpp
@@ -100,7 +100,7 @@ F32 LLLayoutPanel::getCollapseFactor(LLLayoutStack::ELayoutOrientation orientati
 //
 
 LLLayoutStack::Params::Params()
-:	orientation("orientation", std::string("vertical")),
+:	orientation("orientation"),
 	animate("animate", true),
 	clip("clip", true),
 	border_size("border_size", LLCachedControl<S32>(*LLUI::sSettingGroups["config"], "UIResizeBarHeight", 0))
diff --git a/indra/llui/lllayoutstack.h b/indra/llui/lllayoutstack.h
index 9bcfa2c957..c7e27b6866 100644
--- a/indra/llui/lllayoutstack.h
+++ b/indra/llui/lllayoutstack.h
@@ -48,7 +48,7 @@ public:
 
 	struct Params : public LLInitParam::Block<Params, LLView::Params>
 	{
-		Optional<std::string>	orientation;
+		Mandatory<std::string>	orientation;
 		Optional<S32>			border_size;
 		Optional<bool>			animate,
 								clip;
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..13017cc803 100644
--- a/indra/newview/skins/default/xui/en/floater_help_browser.xml
+++ b/indra/newview/skins/default/xui/en/floater_help_browser.xml
@@ -24,6 +24,7 @@
      follows="left|right|top|bottom"
      layout="topleft"
      left="5"
+     orientation="vertical" 
      name="stack1"
      top="20"
      width="640">
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 18f3b9ab06..3b78da2a79 100644
--- a/indra/newview/skins/default/xui/en/floater_media_browser.xml
+++ b/indra/newview/skins/default/xui/en/floater_media_browser.xml
@@ -26,6 +26,7 @@
      layout="topleft"
      left="10"
      name="stack1"
+     orientation="vertical" 
      top="20"
      width="800">
         <layout_panel
@@ -181,6 +182,76 @@
 				function="MediaBrowser.Assign" />
 			</button>
         </layout_panel>
+      <layout_panel
+       height="30"
+       layout="topleft"
+       name="notification_area"
+       visible="false" 
+       user_resize="false"
+       background_visible="true" 
+       bg_alpha_image="Yellow_Gradient" 
+       auto_resize="false" 
+       width="800">
+        <layout_stack
+              top="0"
+              height="30"
+              width="800"
+              left="0"
+              follows="all" 
+              orientation="horizontal"
+              >
+          <layout_panel
+            height="30">
+            <icon value="Popup_Caution"
+                  left="5"
+                  top="7"
+                  width="16"
+                  height="15"/>
+            <text left_pad="8"
+                  top="10"
+                  height="25"
+                  width="400"
+                  text_color="black"
+                  font="SansSerifSmall"
+                  font.style="BOLD"
+                  name="notification_text"
+                  value="Notification text here"
+                  />
+          </layout_panel>
+          <layout_panel
+            height="30"
+            width="270"
+            auto_resize="false"
+            name="form_elements">
+            <check_box name="enable_check"
+                      left="5"
+                      top="5"
+                      height="20"
+                      width="120"
+                      label="Enable all popups"
+                       text_enabled_color="black"
+                      />
+            <button left_pad="5"
+                    width="140"
+                    top="4"
+                    label="Open pop-up window"/>
+          </layout_panel>
+          <layout_panel
+            height="30"
+            width="25"
+            auto_resize="false"
+            name="close_panel">
+            <button left="5"
+                    name="close" 
+                    width="16"
+                    height="16" 
+                    top="8"
+                    image_color="DkGray_66" 
+                    image_unselected="Icon_Close_Foreground"
+                    image_selected="Icon_Close_Press"/>
+          </layout_panel>
+        </layout_stack>
+      </layout_panel>
         <layout_panel
          height="40"
          layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/floater_notifications_console.xml b/indra/newview/skins/default/xui/en/floater_notifications_console.xml
index ca81b9bcf0..e243ccd2f9 100644
--- a/indra/newview/skins/default/xui/en/floater_notifications_console.xml
+++ b/indra/newview/skins/default/xui/en/floater_notifications_console.xml
@@ -36,6 +36,7 @@
      follows="left|right|top|bottom"
      layout="topleft"
      left="5"
+     orientation="vertical" 
      name="notification_channels"
      right="-5"
      top="42" />
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 cf174da2f0..f5df177b68 100644
--- a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml
+++ b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml
@@ -183,6 +183,7 @@ It is calculated as border_size + 2*UIResizeBarOverlap
              follows="all"
              height="185"
              width="313"
+             orientation="vertical" 
              layout="topleft"
              name="filter_panels"
              top="0"
diff --git a/indra/newview/skins/default/xui/en/panel_progress.xml b/indra/newview/skins/default/xui/en/panel_progress.xml
index 727c5fb7b2..2868d91cc7 100644
--- a/indra/newview/skins/default/xui/en/panel_progress.xml
+++ b/indra/newview/skins/default/xui/en/panel_progress.xml
@@ -34,6 +34,7 @@
              height="768"
              layout="topleft"
              left="0"
+             orientation="vertical" 
              name="stack2"
              top="0"
              width="640">
diff --git a/indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml b/indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml
index ab3cc036d5..e261d6d555 100644
--- a/indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml
+++ b/indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml
@@ -23,6 +23,7 @@
      layout="topleft"
      left_delta="0"
      name="browser_layout"
+     orientation="vertical" 
      top_delta="0"
      width="313">
       <web_browser
-- 
cgit v1.2.3


From 51311875b6e23fa9475c42b6d15637aa668729c5 Mon Sep 17 00:00:00 2001
From: convert-repo <none@none>
Date: Sat, 28 Aug 2010 07:56:29 +0000
Subject: update tags

---
 .hgtags | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)
 create mode 100644 .hgtags

diff --git a/.hgtags b/.hgtags
new file mode 100644
index 0000000000..d3172eb75a
--- /dev/null
+++ b/.hgtags
@@ -0,0 +1,24 @@
+003dd9461bfa479049afcc34545ab3431b147c7c v2start
+08398e650c222336bb2b6de0cd3bba944aef11b4 2-1rn1
+0962101bfa7df0643a6e625786025fe7f8a6dc97 2-1-beta-2
+12769e547e30067d494a6c01479a18107366ce2f beta-5
+17fc2908e9a1ef34a9f53a41a393caf5c3cac390 beta-3-5
+19547b909b404552593be5ec7c18241e062a6d65 2-1-1-beta-1
+1e2b517adc2ecb342cd3c865f2a6ccf82a3cf8d7 2-1-beta-3
+3469d90a115b900f8f250e137bbd9b684130f5d2 beta-4
+3e4b947f79d88c385e8218cbc0731cef0e42cfc4 2-1-beta-1
+46002088d9a4489e323b8d56131c680eaa21258c viewer-2-1-0-start
+4f777ffb99fefdc6497c61385c22688ff149c659 viewer-2-0-0
+52d96ad3d39be29147c5b2181b3bb46af6164f0e alpha-3
+668851b2ef0f8cf8df07a0fba429e4a6c1e70abb viewer-2-0-1
+6e3b2e13906ba8ff22d3c8490b02d518adb2c907 2-1-1-beta-2
+7f16e79826d377f5f9f5b33dc721ab56d0d7dc8f alpha-4
+7f16e79826d377f5f9f5b33dc721ab56d0d7dc8f fork to viewer-20qa
+80bc6cff515118a36108967af49d3f8105c95bc9 viewer-2-0-2-start
+b03065d018b8a2e28b7de85b293a4c992cb4c12d 2-1-release
+b8419565906e4feb434426d8d9b17dd1458e24b2 alpha-6
+bb38ff1a763738609e1b3cada6d15fa61e5e84b9 2-1-1-release
+c6969fe44e58c542bfc6f1bd6c0be2fa860929ac 2-1-beta-4
+d2382d374139850efa5bb6adfb229e3e656cfc40 howard-demo
+d40ac9dd949cba6dab1cc386da6a2027690c2519 alpha-5
+d6781e22543acd7e21b967209f3c6e7003d380e3 fork to viewer-2-0
-- 
cgit v1.2.3


From 7dfcb7ac9e23c83f306d39c397b8e108152228a1 Mon Sep 17 00:00:00 2001
From: Monroe Linden <monroe@lindenlab.com>
Date: Fri, 27 Aug 2010 16:58:34 -0700
Subject: viewer-hg-convert.shamap updated by convert_monolith.py from
 ./viewer-experience

---
 viewer-hg-convert.shamap | 101 +++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 101 insertions(+)

diff --git a/viewer-hg-convert.shamap b/viewer-hg-convert.shamap
index 29f98ed8cf..891eb98eef 100644
--- a/viewer-hg-convert.shamap
+++ b/viewer-hg-convert.shamap
@@ -14430,3 +14430,104 @@ ac617ee90acf68794feef501b99ae43ab538a558 09f13edf6aa8c1cef43c8ba7f17289e75096a6a
 f84f5fca57946f838e79a59be20dffe407e9d3a7 edb3d5536c38643633925215404f2f02350f37d4
 426780dc180359b13f72bb6a259f9c4effe88cf9 fe1a7607de6ce5c3dedf96907e114ca0a208076a
 edef0997a11b5e3bc1c82cce0509e0d57bdde64b 6b93a09d0cdf42d7cee85979de6d7b18e34f6dd1
+b140fb0f294a7cae1181edb342294f0c372a052d a6250fa92374d84353e5d80d38bafc0a315a9d71
+6cf3df8ac3c7712f1a8058e0d6f42761ecc63d58 462b1c235a145dec4b89cdb9f3c107f2dcdd048f
+070724e750c4bdd0eedefdb8fd4554e69e0ad33e ffca5f9c5c2ac2c8b201e1dc262371087f3f116d
+5f627e224ba5a0c8a63044ea91d9cb7e55f485e6 70e4af736964c211ea0e66e154255c0fb9fc4a1f
+de1c17c35aa42c6421c60ebd9102da151d78b1c1 5d67b10edea1f8696886d3d0479c784943fd228c
+e2fe42293f8a5a879b4c9a4206dd43c81f385720 c68776612c1f2895629f8712b7b8293d8f0cd833
+cd7e437979644107c314493e41fb39bc126caf97 80af8db446dfec8baf360c709ef7eb990dafaf74
+6247e22de57b7a78eae29758d816dae4c328c8e7 7d2e13e2bd90397984edd7d6b1de1641c546d3a0
+0a5fa7cb1858f4f87a594c740e49c6029cf61439 4f100e626f2d5b0d68c0cd581a1136404466316d
+1f4097b566c0c9395477219fa921ad24fdc7d252 5ab43707d58a1b9681d1935396aba08144ba96b8
+d2430c126b94dc6bc30eb0676ae4d6aa4bf81ab4 c3852476e859ad0bf2db7739185bb52442ca0498
+16040352ffd3f8d126e6fb5233e219b3840e4baf d13df6d264e1a58187545b5cfc2e83d37fcc0aee
+5ba552b6dd1585e2518b69afc7c6cb01d5bfb5bf 1d78d0e00428c1df177699cde1347c86a6e0da3c
+fba2f283e8847b9eaadcb7c78c220442bc61273a 54f5159608a71a8e6a7c6118e94128be35f5b94c
+f9766c168cb00ce2e293377f3587a0b398c10951 2cd0ffda361c57134f3fe87784d308f208f44340
+82b23a0e487bd95c6b6dbfd47f7724b14d4807cd 2ce97abf67d8e47f378adb352733bbe515f68763
+72651623d96deee014411daeb82d50452261e0b3 0d637cf64f9c61aafb938be19e6b77d0d75d2256
+359f03b1285092f52ca9cd8c1b2653d182568fd8 fed92bc4562639d565716008264fe7357e5e5493
+708e00baf7cd7b47dbfcc0dce45e2eb305fe3b72 bb9243c01e89446d08fd62b4ea874dc870a1e871
+f7714ce278de8b0aa577c7160e8770f0ecf432b2 5bff02eeef4689558df52f72a8f8a82d619f092b
+a8ed6873b6dba8eb5b7cd04ca5182d1c8820ca8a 9624351548184433776f16552da60487e663be08
+ffe8d0aa373cb42df6893b707027f66f3cf6694c 1fcfc45f02a5c3da4d5135167ec350fc916efdce
+6fd0d0bcdb5edc3509d5a810cae5e7a22d0eb82c 1fcfc45f02a5c3da4d5135167ec350fc916efdce
+08dfb2e4ed346ca38b3b59f2450c37f69e1ee671 bd299f8f759355320d1fe2ca19b599b77be0bad7
+5f7a90472c8c317a7531f919188daf506873790c 9d8ac18944420fdb0e9c600ac688d15860a289f6
+d1348e4ef737bc13dd223b62a2e41c38ffe30c72 0420007883104eaf3073c8d750edeccd830e1080
+3fad13218df677671f46c16962658f3ab42c975a 3f804a666358e9ae5af5beb69aad4c7b15f02f5b
+9577c104c8201f5fc18d326a6837db7bf1ad6353 380b963a1f0f87a2c3d5290117518da6e83d83ee
+0deb0a34cff7921b00a8e0c9cf366fa766bb9c34 14e17bde662cadb7835fe8bbcdceb5a83ec1c510
+e72b2aa52f48f786aa1a75ce436e62099665dcf6 d39aac8b222feb2955f3b630438a164ed4528c25
+9cb9aa264a2e231369de9ff9ea752d40ad9fcdd2 9b0a9bf5ce2f04ff3fd6caf8dbd30f7539586985
+a9163992e7050cb01bbdcadb78dbddc77d840488 edb69650e477033a04e25dd7b66b35fce24dc836
+0aac191d03179a59d41163be52860c3c26a37849 3a171f9cdbda0ba8cef60c33a11559273227b416
+b3bb873255af4849703bc17c81dbf755f22dbcf7 8582ab0f137b3e3bf85e931c550e4b0c7ba77ca1
+36e8ba1ae0728814a9f6f771b9380c7624c6af75 73a7e5749b0cc59ea73687dd9223d902e9dfcd80
+9cb4d9eb3d2df7dda2bfa3b9e8f623dff03dedc9 ced75bc3ce177acd84e83d79d6ae9c5f3118d3e2
+e0cd410398f70b7fbea7e04248c308f61dbf4b99 6c711bf31d62fb882dd4acbec5f518904b7b0183
+93bed3d76df0ccd9acb15d2e35dca67b2e9b0dc7 25017ca844f16f7251b7a41450deda304e0a6ba0
+5e8110decca97a55ac9fe68c2625dd36d77ec2a7 c075a1ed884ee002f6e18f564890e1fb17081667
+394d4cad28a28edce20eef31fa80a355559c7875 9c595e435fb3f2bac594c4bca503f47973275ca2
+17459d6abeb5289c6cf4e2e948b0687a2ddb0431 0bc0dcfa8873ca252fa22e2232518db481b6cfb6
+33601045919daf0e1dd3275abc3c59f767c09950 94982effd5cc02216ef6a9f43285749acb60ec1a
+565c110b72319fa973446814e551ad16e10a65ad 78b3304e3ff93810feeda98347aa44a97595e61f
+93190a6f49225ea2e3d2ce69626c9a7533300f53 19f58f962a66fef84261b7b8d9ca29242c566c1d
+ed2c851222c480d2d277c65e16cb193302d3a3e9 8f7ce29375da74dab526e8adb7b54870e145aac2
+9834412a934f93b3bf8aeb036bce0c7992042862 9fe3d3ab9dc7d5cd1fd0ee997248d3c445c99c14
+15267760d50c1aadb7f808d987ebfc6657830841 36949020e376f0a6a071cf64f714a4a54f4b6968
+eec90bdee54a588efe8518426a19a52770e1d1cc 57be583d7b844321a3c792a53ca20c3d7bef27e5
+d9125878d02521ec0ab2a4b974b5a1faaed004c5 653a6c7743f3eb23b853ecc54b703d8a0e36eefd
+934cf4e6d1eaf2707e6239ab80d0c566329f9cb3 32a4ec227b638cb0a4e1c238902bfa3fb99b1b2f
+346bf54e88d566da15ad09f7df78f55ac6d6ced7 461feca8921050c640c07c7e00b72b0aecf4acb2
+10dceeb7dbaf22857e6fdf45b7380238a7bbb869 c50a896787b44164995d4121044129780693ff5f
+f26fbc0cf6ad8ebbecdffba20e575834d135ffa0 3e75204640193b1337295ef3d05b416c131956f8
+d4a428559d3b107c0da7e8adf63970069b36cd35 06a41d63494131ac94990030e30b9525be10ece0
+56c391335a4ec4dc6ce45019fe236f0543f4a7a7 e3d8033c70ad10c0a54b291c195f8764869c6541
+7f8780db973eefb93fff212350abc447b8bc3cbc 8651c7b505d4ca24551954334737e3c6885e255d
+c02a766081eda6cc1d80bd6c19b41787e2541993 3816752a14f68c6b41ea6c9ea8180d80cb9eb3e2
+06a9be592bad3bdb0f843a88ade668b98c293016 3ae24f3a621a6efc2a845f88fe56ac0f8b618beb
+6b93e59e4942e2cb27431b20c243f1ebc5639c29 b2309808b156d54f25c21c68130da5fff16f5352
+0066c8b1620ef553c509a27121ef5d22b877064e 70933bb6ec87f8a251165e41db4c58f33e365c84
+e20a25cb260476adef2c108277ad87a9a2a90873 d17aa37a74bfc9ff7f6a3720f1bf23a8dea6c8f4
+d0ee75b942c5e0858f24c3b7aa0c26b919f1b7d8 b9f2438cc54e059cb0fc6a04c933db5028a148f2
+ec6a34eb37a6b5c7f36ea25752ae235346585ccd 3aafb01f4d8b4da78b0ba748df89c222eef03c86
+00e2b47aff44d0b80ae12a13c27450fea551004d 0704c40eb014577dd5843424d25e7bb73f43940c
+b1d92d7b39d6cb05728f27a9678d1fe08cea87c6 07c8441b1b55e4b9a13a89c5105d2913980cb128
+ec71fe47d2c4cdf16f4972fb743c844a0905ab21 6ac0bc6f805f62bcc579057fd0379f99f7a13c25
+6e9644d49652a6e1953d8bd791fad27942af2f2a 484e32d2b9a8721a4fc46d0f4093aa45a835a2b9
+12f41f9809967be695ccb52b33097452c3b37159 178809a07578142bfbe5ebb4e44a6239a39b2b90
+bc716311be35b0586dabcee225ecce302295e8b5 8dccf0ffabf5fbe36e1b29b66e4a747c4fe5a1e1
+b8873253909069c4750a1ecca80735db762ea92e 52031bc79f08c7d1e4ddfbdd580a15344e02a20f
+b520fb6d3d0f7972f106349e00819726b7cac9bc c9359a4f6ceff438c736e589c2ed35d1a889dae3
+82b4da888fc0d3ceed08988d94505385aea9b4f6 1c1bb9d8880c8cbebf0dae6901cc57a7580fe7a3
+8703b77fd914bce4145c8ba318d3605ae6cbbbf5 390d85cb3d6c8f17843680f6022bf3dbbfb62a67
+919a72408d72e55a219a88959986271926c76dd9 4d11122fa058a801d0f57c8898c0867e55a18035
+89be09c64c7f23b5cb6862b713ba9f43baeab6b1 f8cfde7fd7bd189bbeb93b09c7ea9296d9e059a2
+832c18c5075bfaf4e5dbab56592b628ffc2484f4 855c3cb89918ed1ebf4c724811f94bfa8a5d5aeb
+88bc7aea10a76df348ae9bc271aa74fd7c838b69 aec30358ef4786af41af2f3fc6fa787ea5a85682
+2f176370fedbee5e3fe37b2cf27eb94bc199e2ae df08d42aff5264cea1747d9a0937efef58a2ceda
+c00e7b247ccb1bf600c44203af00c94759c23e59 c2a6a7bd29949b6de93260614a63a2b5135e8d0b
+48cc49a039c39ee92c5a90f0ba155b5a92a408a8 696ad5f3d808e1a2d6b0ebffea0d9c337194c74f
+108cb92a2943ae5b274a43b9912fb97ed71fa9ba a042ece75362ff6b83010f3c66c8c3f5fe8c2a36
+5413225c8797e25fb42d314b172d4abd02f64d25 12351e182354413334fa8d0e1c773501c0d93a90
+1121237696041ebc58933ff0ea9cd1ee8566eb11 ef165d65c72aa68c12ba4503925214dc07a92d8a
+ca6a373ba89b7c74132b324f5ae2964160c01833 cc98bba7c26b2d2c9a65b95bd5618e14be8df8d5
+e90f089fae1224b29e1b047e9be2c1b653e224c4 72cceacad6f470c919f5a52fd4007098715af7c1
+81e8feff93c19164d9319d100a848673b7c76730 252779212dc40b64f9291c1287bd6f7c29f48377
+54e904d0062a98e9aa7f4935aa5671a6eeb647cb 741eb25e921cd0f8f274a660a31169284d47cdad
+84318fea200ddc5b502d51f68f92f31eac939556 f0b8e4748ec61c862d084b9eebe8eb37dfc1ef88
+144e4ef8c73291f488b4aeff55dfb2616571c009 a15dac7cf1f9056702c85c134c21b92fbc7a5849
+200575dbef612f1bd91db72242355519534b9fdd a2e46778a30ee390acfacf8009eec0acca441090
+2bfffe15ff3e4ef98dfc84c6e7303cbb33619154 12659fe5f0852cbbc2b3db4757ec25f525632240
+92443bdeff135c9032b618da17f883c35323e2b0 055fe04592f29645af4452b56cedf68209668b17
+524c1736684dc38ff3b381f968fec709f96f70cd 4105a6fd17b55cc83c332561347dae978edc3ebf
+796dd7513d261c7d3479afc32ecc39dd174965b9 849432193dbf5fe86dde65edc25560a1e9909c16
+6361273ae0f4f8fb876d3c1396d52c630a211460 70fc718d68cd079396863bfbc61e5770984adadf
+adddb5d790b8eb43c52992f730f2ec450731ab16 100999bf3348eef87c917b47c269dd450eed9db9
+5bcf7a83d56a6f26721548c2022462d708131116 1d4dc477ab14450a989fddc92e46f305cb5d2970
+f75c3fb19b8dffabe3510c45ead576a0534a569d d999e6b90aa03e1a97f530da74a5b7fc1df1d2b2
+29a591d8188a8cbc555c5ea9def1d397604ddb1f de9a0847cd5b883d96c4e48ae5866b3563f17309
+23a287269bc1e0cdfa4fdb0abb90fb34fce2f2e2 f68fdc49adf2d06c680b95a9c1c864343ca82882
+23a287269bc1e0cdfa4fdb0abb90fb34fce2f2e2 291d3b2d1d3496c7d02419059be50ecf824b7157
-- 
cgit v1.2.3


From e3856e1894d4d19e8673f1d638fa2cacf96a42a4 Mon Sep 17 00:00:00 2001
From: Monroe Linden <monroe@lindenlab.com>
Date: Fri, 27 Aug 2010 17:45:02 -0700
Subject: Update license block for new files.

---
 indra/newview/llhints.cpp                   | 42 +++++++++++++----------------
 indra/newview/llhints.h                     | 42 +++++++++++++----------------
 indra/newview/llnotificationhinthandler.cpp | 42 +++++++++++++----------------
 3 files changed, 54 insertions(+), 72 deletions(-)

diff --git a/indra/newview/llhints.cpp b/indra/newview/llhints.cpp
index a90131499d..0c91dd473d 100644
--- a/indra/newview/llhints.cpp
+++ b/indra/newview/llhints.cpp
@@ -2,31 +2,25 @@
  * @file llhints.cpp
  * @brief Hint popups for displaying context sensitive help in a UI overlay
  *
- * $LicenseInfo:firstyear=2000&license=viewergpl$
- *
- * Copyright (c) 2000-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2000&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
- *
- * 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.
+ * 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$
  */
 
diff --git a/indra/newview/llhints.h b/indra/newview/llhints.h
index d2580df012..90e09ed004 100644
--- a/indra/newview/llhints.h
+++ b/indra/newview/llhints.h
@@ -2,31 +2,25 @@
  * @file llhints.h
  * @brief Hint popups for displaying context sensitive help in a UI overlay
  *
- * $LicenseInfo:firstyear=2000&license=viewergpl$
- *
- * Copyright (c) 2000-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2000&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
- *
- * 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.
+ * 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$
  */
 
diff --git a/indra/newview/llnotificationhinthandler.cpp b/indra/newview/llnotificationhinthandler.cpp
index a9460821b0..f7163cb04f 100644
--- a/indra/newview/llnotificationhinthandler.cpp
+++ b/indra/newview/llnotificationhinthandler.cpp
@@ -2,31 +2,25 @@
  * @file llnotificationhinthandler.cpp
  * @brief Notification Handler Class for UI Hints
  *
- * $LicenseInfo:firstyear=2000&license=viewergpl$
- *
- * Copyright (c) 2000-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2000&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
- *
- * 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.
+ * 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$
  */
 
-- 
cgit v1.2.3


From 29bb5d24c9e65be1b5471d9f2c023c561371b1a8 Mon Sep 17 00:00:00 2001
From: Monroe Linden <monroe@lindenlab.com>
Date: Fri, 27 Aug 2010 17:47:48 -0700
Subject: Update license block in a couple files where it was missed.

---
 indra/newview/llwebsharing.cpp | 36 +++++++++++++++---------------------
 indra/newview/llwebsharing.h   | 36 +++++++++++++++---------------------
 2 files changed, 30 insertions(+), 42 deletions(-)

diff --git a/indra/newview/llwebsharing.cpp b/indra/newview/llwebsharing.cpp
index 2b9e5cc8cb..43b1a320c3 100644
--- a/indra/newview/llwebsharing.cpp
+++ b/indra/newview/llwebsharing.cpp
@@ -3,31 +3,25 @@
  * @author Aimee
  * @brief Web Snapshot Sharing
  *
- * $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.
+ * 
+ * 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/llwebsharing.h b/indra/newview/llwebsharing.h
index 70046ff1d8..ad9c99c224 100644
--- a/indra/newview/llwebsharing.h
+++ b/indra/newview/llwebsharing.h
@@ -3,31 +3,25 @@
  * @author Aimee
  * @brief Web Snapshot Sharing
  *
- * $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.
+ * 
+ * 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$
  */
 
-- 
cgit v1.2.3


From 24473fc0d619beaafab029170a7aacde5855be1a Mon Sep 17 00:00:00 2001
From: Merov Linden <merov@lindenlab.com>
Date: Thu, 16 Sep 2010 15:31:07 -0700
Subject: STORM-161 : Reimplement hide object selection

---
 doc/contributions.txt                              |  2 ++
 indra/newview/app_settings/settings.xml            | 11 +++++++++++
 indra/newview/llselectmgr.cpp                      |  3 ++-
 indra/newview/llselectmgr.h                        |  1 +
 indra/newview/skins/default/xui/en/menu_viewer.xml | 10 ++++++++++
 5 files changed, 26 insertions(+), 1 deletion(-)

diff --git a/doc/contributions.txt b/doc/contributions.txt
index 8087a87004..503caf26a6 100644
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -20,6 +20,7 @@ Aimee Trescothick
 	SNOW-227
 	SNOW-570
 	SNOW-572
+	SNOW-575
 	VWR-3321
 	VWR-3336
 	VWR-3903
@@ -33,6 +34,7 @@ Aimee Trescothick
 	VWR-6550
 	VWR-6583
 	VWR-6482
+	VWR-6918
 	VWR-7109
 	VWR-7383
 	VWR-7800
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 2a0e23b1dc..02e7cb660d 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -7899,6 +7899,17 @@
       <key>Value</key>
       <integer>0</integer>
     </map>
+    <key>RenderHighlightSelections</key>
+    <map>
+      <key>Comment</key>
+      <string>Show selection outlines on objects</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>RenderHiddenSelections</key>
     <map>
       <key>Comment</key>
diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp
index fb60b1ece7..8e080078c0 100644
--- a/indra/newview/llselectmgr.cpp
+++ b/indra/newview/llselectmgr.cpp
@@ -181,6 +181,7 @@ template class LLSelectMgr* LLSingleton<class LLSelectMgr>::getInstance();
 //-----------------------------------------------------------------------------
 LLSelectMgr::LLSelectMgr()
  : mHideSelectedObjects(LLCachedControl<bool>(gSavedSettings, "HideSelectedObjects", FALSE)),
+   mRenderHighlightSelections(LLCachedControl<bool>(gSavedSettings, "RenderHighlightSelections", TRUE)),
    mAllowSelectAvatar( LLCachedControl<bool>(gSavedSettings, "AllowSelectAvatar", FALSE)),
    mDebugSelectMgr(LLCachedControl<bool>(gSavedSettings, "DebugSelectMgr", FALSE))
 {
@@ -4898,7 +4899,7 @@ void LLSelectMgr::updateSelectionSilhouette(LLObjectSelectionHandle object_handl
 }
 void LLSelectMgr::renderSilhouettes(BOOL for_hud)
 {
-	if (!mRenderSilhouettes)
+	if (!mRenderSilhouettes || !mRenderHighlightSelections)
 	{
 		return;
 	}
diff --git a/indra/newview/llselectmgr.h b/indra/newview/llselectmgr.h
index e6db264377..7478ed5f9a 100644
--- a/indra/newview/llselectmgr.h
+++ b/indra/newview/llselectmgr.h
@@ -347,6 +347,7 @@ public:
 	static LLColor4				sContextSilhouetteColor;
 
 	LLCachedControl<bool>					mHideSelectedObjects;
+	LLCachedControl<bool>					mRenderHighlightSelections;
 	LLCachedControl<bool>					mAllowSelectAvatar;
 	LLCachedControl<bool>					mDebugSelectMgr;
 
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index 19707c1bc9..3f49505226 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -772,6 +772,16 @@
 
           <menu_item_separator/>
 
+                <menu_item_check
+                 label="Show Selection Outlines"
+                 name="Show Selection Outlines">
+                    <menu_item_check.on_check
+                     function="CheckControl"
+                     parameter="RenderHighlightSelections" />
+                    <menu_item_check.on_click
+                     function="ToggleControl"
+                     parameter="RenderHighlightSelections" />
+                </menu_item_check>
                 <menu_item_check
                  label="Show Hidden Selection"
                  name="Show Hidden Selection">
-- 
cgit v1.2.3


From 0be99ec115a8bd3f55c39725201106d044474109 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Sat, 25 Sep 2010 10:00:25 +0100
Subject: Backed out changeset 8ab901af1241 Was causing LEAP-2 (forensics by
 Boroondas)

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

diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index 7a81efeed7..493398c68a 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -622,10 +622,7 @@ bool LLIMModel::newSession(const LLUUID& session_id, const std::string& name, co
 	LLIMSession* session = new LLIMSession(session_id, name, type, other_participant_id, ids, voice);
 	mId2SessionMap[session_id] = session;
 
-	// When notifying observer, name of session is used instead of "name", because they may not be the
-	// same if it is an adhoc session (in this case name is localized in LLIMSession constructor).
-	std::string session_name = LLIMModel::getInstance()->getName(session_id);
-	LLIMMgr::getInstance()->notifyObserverSessionAdded(session_id, session_name, other_participant_id);
+	LLIMMgr::getInstance()->notifyObserverSessionAdded(session_id, name, other_participant_id);
 
 	return true;
 
@@ -2280,9 +2277,6 @@ void LLIMMgr::addMessage(
 	if (new_session)
 	{
 		LLIMModel::getInstance()->newSession(new_session_id, fixed_session_name, dialog, other_participant_id);
-		// When addidng messages further here, name of session is used instead of "name", because they may not be the
-		// same if it is an adhoc session (in this case name is localized in LLIMSession constructor).
-		fixed_session_name = LLIMModel::getInstance()->getName(new_session_id);
 
 		// When we get a new IM, and if you are a god, display a bit
 		// of information about the source. This is to help liaisons
@@ -2302,13 +2296,13 @@ void LLIMMgr::addMessage(
 			//<< "*** region_id: " << region_id << std::endl
 			//<< "*** position: " << position << std::endl;
 
-			LLIMModel::instance().addMessage(new_session_id, fixed_session_name, other_participant_id, bonus_info.str());
+			LLIMModel::instance().addMessage(new_session_id, from, other_participant_id, bonus_info.str());
 		}
 
 		make_ui_sound("UISndNewIncomingIMSession");
 	}
 
-	LLIMModel::instance().addMessage(new_session_id, fixed_session_name, other_participant_id, msg);
+	LLIMModel::instance().addMessage(new_session_id, from, other_participant_id, msg);
 }
 
 void LLIMMgr::addSystemMessage(const LLUUID& session_id, const std::string& message_name, const LLSD& args)
-- 
cgit v1.2.3


From b9f5ced5bb2c38bda9b8bdf53a329a040029bee4 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Sat, 25 Sep 2010 10:37:59 +0100
Subject: VWR-23181 (port of SNOW-650) 'Tries to build pulseaudio when
 pulseaudio not found.'

---
 doc/contributions.txt                     | 1 +
 indra/media_plugins/webkit/CMakeLists.txt | 4 ++--
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/doc/contributions.txt b/doc/contributions.txt
index 3da5af687e..bda461b0d6 100644
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -651,6 +651,7 @@ Teardrops Fall
 Techwolf Lupindo
 	SNOW-92
 	SNOW-649
+	SNOW-650
 	SNOW-687
 	SNOW-680
 	SNOW-681
diff --git a/indra/media_plugins/webkit/CMakeLists.txt b/indra/media_plugins/webkit/CMakeLists.txt
index d576638dd7..619b4baeef 100644
--- a/indra/media_plugins/webkit/CMakeLists.txt
+++ b/indra/media_plugins/webkit/CMakeLists.txt
@@ -51,9 +51,9 @@ set(media_plugin_webkit_LINK_LIBRARIES
 
 # Select which VolumeCatcher implementation to use
 if (LINUX)
-  if (PULSEAUDIO)
+  if (PULSEAUDIO_FOUND)
     list(APPEND media_plugin_webkit_SOURCE_FILES linux_volume_catcher.cpp)
-  endif (PULSEAUDIO)
+  endif (PULSEAUDIO_FOUND)
   list(APPEND media_plugin_webkit_LINK_LIBRARIES
        ${UI_LIBRARIES}     # for glib/GTK
        )
-- 
cgit v1.2.3


From c7a57bdf876121e1b9304222442d0426781eea33 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Sat, 25 Sep 2010 10:52:45 +0100
Subject: Update gstreamer video plugin's license in accordance with... our new
 license.

---
 indra/media_plugins/gstreamer010/llmediaimplgstreamervidplug.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/indra/media_plugins/gstreamer010/llmediaimplgstreamervidplug.cpp b/indra/media_plugins/gstreamer010/llmediaimplgstreamervidplug.cpp
index a51a8aa9e1..c4b563f0b8 100644
--- a/indra/media_plugins/gstreamer010/llmediaimplgstreamervidplug.cpp
+++ b/indra/media_plugins/gstreamer010/llmediaimplgstreamervidplug.cpp
@@ -516,7 +516,7 @@ void gst_slvideo_init_class (void)
 				  GST_VERSION_MINOR,
 				  "private-slvideoplugin", 
 				  "SL Video sink plugin",
-				  plugin_init, "0.1", GST_LICENSE_UNKNOWN,
+				  plugin_init, "1.0", "LGPL",
 				  "Second Life",
 				  "http://www.secondlife.com/");
 #undef PACKAGE
-- 
cgit v1.2.3


From 5e0d27b1c3d1965e239154ba1a3d3aa282d9734d Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Sat, 25 Sep 2010 11:02:02 +0100
Subject: port of 'SNOW-592 FIXED gstreamer 0.10.28 standalone build failure'

---
 doc/contributions.txt                              |  4 +++-
 indra/media_plugins/gstreamer010/CMakeLists.txt    |  7 -------
 .../gstreamer010/llmediaimplgstreamervidplug.cpp   | 22 +++++++++++-----------
 3 files changed, 14 insertions(+), 19 deletions(-)

diff --git a/doc/contributions.txt b/doc/contributions.txt
index bda461b0d6..68419ee40b 100644
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -650,6 +650,7 @@ Teardrops Fall
 	VWR-5366
 Techwolf Lupindo
 	SNOW-92
+	SNOW-592
 	SNOW-649
 	SNOW-650
 	SNOW-687
@@ -666,8 +667,9 @@ Thickbrick Sleaford
 	SNOW-390
 	SNOW-421
 	SNOW-462
-	SNOW-635
 	SNOW-586
+	SNOW-592
+	SNOW-635
 	SNOW-743
 	VWR-7109
 	VWR-9287
diff --git a/indra/media_plugins/gstreamer010/CMakeLists.txt b/indra/media_plugins/gstreamer010/CMakeLists.txt
index 9f0ff654fc..a5127ae5f4 100644
--- a/indra/media_plugins/gstreamer010/CMakeLists.txt
+++ b/indra/media_plugins/gstreamer010/CMakeLists.txt
@@ -42,13 +42,6 @@ set(media_plugin_gstreamer010_HEADER_FILES
     llmediaimplgstreamertriviallogging.h
     )
 
-if (${CXX_VERSION_NUMBER} MATCHES "4[23456789].")
-    # Work around a bad interaction between broken gstreamer headers and
-    # g++ >= 4.2's increased strictness.
-    set_source_files_properties(llmediaimplgstreamervidplug.cpp PROPERTIES
-                                COMPILE_FLAGS -Wno-write-strings)
-endif (${CXX_VERSION_NUMBER} MATCHES "4[23456789].")
-
 add_library(media_plugin_gstreamer010
     SHARED
     ${media_plugin_gstreamer010_SOURCE_FILES}
diff --git a/indra/media_plugins/gstreamer010/llmediaimplgstreamervidplug.cpp b/indra/media_plugins/gstreamer010/llmediaimplgstreamervidplug.cpp
index c4b563f0b8..cdb7f4faeb 100644
--- a/indra/media_plugins/gstreamer010/llmediaimplgstreamervidplug.cpp
+++ b/indra/media_plugins/gstreamer010/llmediaimplgstreamervidplug.cpp
@@ -48,7 +48,7 @@ GST_DEBUG_CATEGORY_STATIC (gst_slvideo_debug);
 #define SLV_ALLCAPS GST_VIDEO_CAPS_RGBx SLV_SIZECAPS
 
 static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE (
-    "sink",
+    (gchar*)"sink",
     GST_PAD_SINK,
     GST_PAD_ALWAYS,
     GST_STATIC_CAPS (SLV_ALLCAPS)
@@ -508,18 +508,18 @@ plugin_init (GstPlugin * plugin)
    some g++ versions buggily avoid __attribute__((constructor)) functions -
    so we provide an explicit plugin init function.
  */
+#define PACKAGE (gchar*)"packagehack"
+// this macro quietly refers to PACKAGE internally
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+		   GST_VERSION_MINOR,
+		   (gchar*)"private-slvideoplugin", 
+		   (gchar*)"SL Video sink plugin",
+		   plugin_init, (gchar*)"1.0", (gchar*)"LGPL",
+		   (gchar*)"Second Life",
+		   (gchar*)"http://www.secondlife.com/");
+#undef PACKAGE
 void gst_slvideo_init_class (void)
 {
-#define PACKAGE "packagehack"
-	// this macro quietly refers to PACKAGE internally
-	static GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
-				  GST_VERSION_MINOR,
-				  "private-slvideoplugin", 
-				  "SL Video sink plugin",
-				  plugin_init, "1.0", "LGPL",
-				  "Second Life",
-				  "http://www.secondlife.com/");
-#undef PACKAGE
 	ll_gst_plugin_register_static (&gst_plugin_desc);
 	DEBUGMSG("CLASS INIT");
 }
-- 
cgit v1.2.3


From 9ff0490998b0ff47f4372b0f6ef32c8abb534ba2 Mon Sep 17 00:00:00 2001
From: "Boroondas Gupte (patch by Aleric Inglewood)" <hg@boroon.dasgupta.ch>
Date: Tue, 31 Aug 2010 17:07:26 +0200
Subject: SNOW-764 (problem 1) FIXED Bugs showing when compiling with
 optimization

also fixes:
SNOW-522 FIXED crash due to looking for skins/paths.xml at the wrong path

originally commited at http://svn.secondlife.com/trac/linden/changeset/3550

SVN changeset did not apply automatically due to changed context.
Manually applied changes, which was straight forward.

Added SNOW-522 in doc/contributions.txt, because that's fixed by this, too.
(transplanted from 8afc8382dd9bddd4968060d306d96218d571a171)
---
 doc/contributions.txt       | 2 ++
 indra/llvfs/lldir_linux.cpp | 2 +-
 2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/doc/contributions.txt b/doc/contributions.txt
index 68419ee40b..11f3ad6d3a 100644
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -61,6 +61,8 @@ Aimee Trescothick
 Alejandro Rosenthal
 	VWR-1184
 Aleric Inglewood
+	SNOW-522
+	SNOW-764
 	VWR-10001
 	VWR-10759
 	VWR-10837
diff --git a/indra/llvfs/lldir_linux.cpp b/indra/llvfs/lldir_linux.cpp
index 6ccac45569..a1c6669b97 100644
--- a/indra/llvfs/lldir_linux.cpp
+++ b/indra/llvfs/lldir_linux.cpp
@@ -93,7 +93,7 @@ LLDir_Linux::LLDir_Linux()
 #else
 	mAppRODataDir = tmp_str;
 #endif
-    U32 indra_pos = mExecutableDir.find("/indra");
+    std::string::size_type indra_pos = mExecutableDir.find("/indra");
     if (indra_pos != std::string::npos)
     {
 		// ...we're in a dev checkout
-- 
cgit v1.2.3


From 136858bd20acab9684c2bd1673663fc925f0cc77 Mon Sep 17 00:00:00 2001
From: "Boroondas Gupte (patch by Robin Cornelius)" <hg@boroon.dasgupta.ch>
Date: Tue, 31 Aug 2010 12:16:03 +0200
Subject: VWR-20911 FIXED CMake build arch detection is inaccurate and
 incomplete

Robin Cornelius' patch from
http://jira.secondlife.com/secure/attachment/42801/SNOW-776+Don%27t+use+uname+for+build+arch+detection%2C+use+compiler.patch
applied without fuzz:

	patching file indra/cmake/Variables.cmake
	Hunk #1 succeeded at 52 (offset -2 lines).

Added entry in doc/contributions.txt.
No further changes other than that.
(transplanted from a9132a63e4739965d65ddd58a7be9eabe4321c2a)
---
 doc/contributions.txt       |  1 +
 indra/cmake/Variables.cmake | 17 +++++++++--------
 2 files changed, 10 insertions(+), 8 deletions(-)

diff --git a/doc/contributions.txt b/doc/contributions.txt
index 11f3ad6d3a..38059e1e29 100644
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -563,6 +563,7 @@ Robin Cornelius
 	VWR-12758
 	VWR-12763
 	VWR-12995
+	VWR-20911
 Ryozu Kojima
 	VWR-53
 	VWR-287
diff --git a/indra/cmake/Variables.cmake b/indra/cmake/Variables.cmake
index bfaf3f4f26..8a08154295 100644
--- a/indra/cmake/Variables.cmake
+++ b/indra/cmake/Variables.cmake
@@ -54,19 +54,20 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
   set(LINUX ON BOOl FORCE)
 
   # If someone has specified a word size, use that to determine the
-  # architecture.  Otherwise, let the architecture specify the word size.
+  # architecture.  Otherwise, let the compiler specify the word size.
+  # Using uname will break under chroots and other cross arch compiles. RC
   if (WORD_SIZE EQUAL 32)
     set(ARCH i686)
   elseif (WORD_SIZE EQUAL 64)
     set(ARCH x86_64)
   else (WORD_SIZE EQUAL 32)
-    execute_process(COMMAND uname -m COMMAND sed s/i.86/i686/
-                    OUTPUT_VARIABLE ARCH OUTPUT_STRIP_TRAILING_WHITESPACE)
-    if (ARCH STREQUAL x86_64)
-      set(WORD_SIZE 64)
-    else (ARCH STREQUAL x86_64)
-      set(WORD_SIZE 32)
-    endif (ARCH STREQUAL x86_64)
+    if(CMAKE_SIZEOF_VOID_P MATCHES 4)
+ 		set(ARCH i686)
+		set(WORD_SIZE 32)
+	else(CMAKE_SIZEOF_VOID_P MATCHES 4)
+		set(ARCH x86_64)
+		set(WORD_SIZE 64)
+	endif(CMAKE_SIZEOF_VOID_P MATCHES 4)
   endif (WORD_SIZE EQUAL 32)
 
   set(LL_ARCH ${ARCH}_linux)
-- 
cgit v1.2.3


From bd3d9e1ba99586d31b6deba2f9dc54d481f9740b Mon Sep 17 00:00:00 2001
From: Boroondas Gupte <hg@boroon.dasgupta.ch>
Date: Tue, 31 Aug 2010 14:41:46 +0200
Subject: VWR-20911 FOLLOWUP fixed indentation (cmake files use spaces only)
 (transplanted from d02b22278d5b0a0386b3a7c25221b2069bc02963)

---
 indra/cmake/Variables.cmake | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/indra/cmake/Variables.cmake b/indra/cmake/Variables.cmake
index 8a08154295..230e228c62 100644
--- a/indra/cmake/Variables.cmake
+++ b/indra/cmake/Variables.cmake
@@ -62,12 +62,12 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
     set(ARCH x86_64)
   else (WORD_SIZE EQUAL 32)
     if(CMAKE_SIZEOF_VOID_P MATCHES 4)
- 		set(ARCH i686)
-		set(WORD_SIZE 32)
-	else(CMAKE_SIZEOF_VOID_P MATCHES 4)
-		set(ARCH x86_64)
-		set(WORD_SIZE 64)
-	endif(CMAKE_SIZEOF_VOID_P MATCHES 4)
+      set(ARCH i686)
+      set(WORD_SIZE 32)
+    else(CMAKE_SIZEOF_VOID_P MATCHES 4)
+      set(ARCH x86_64)
+      set(WORD_SIZE 64)
+    endif(CMAKE_SIZEOF_VOID_P MATCHES 4)
   endif (WORD_SIZE EQUAL 32)
 
   set(LL_ARCH ${ARCH}_linux)
-- 
cgit v1.2.3


From 27ec7841279865ecc48a7a0af2f4591ff0300afc Mon Sep 17 00:00:00 2001
From: Boroondas Gupte <hg@boroon.dasgupta.ch>
Date: Sun, 29 Aug 2010 16:43:08 +0200
Subject: VWR-20891 FIXED missing LL_TEST conditions in
 indra/viewer_components/login/CMakeLists.txt (transplanted from
 6ea6df364e22ba6f99b18a0e684ba4912f4f7223)

---
 doc/contributions.txt                        |  1 +
 indra/viewer_components/login/CMakeLists.txt | 22 +++++++++++++---------
 2 files changed, 14 insertions(+), 9 deletions(-)

diff --git a/doc/contributions.txt b/doc/contributions.txt
index 38059e1e29..23050e718f 100644
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -171,6 +171,7 @@ Boroondas Gupte
 	SNOW-737
 	VWR-233
 	VWR-20583
+	VWR-20891
 	WEB-262
 Bulli Schumann
 	CT-218
diff --git a/indra/viewer_components/login/CMakeLists.txt b/indra/viewer_components/login/CMakeLists.txt
index fb65779eb7..fe64926da6 100644
--- a/indra/viewer_components/login/CMakeLists.txt
+++ b/indra/viewer_components/login/CMakeLists.txt
@@ -3,7 +3,9 @@
 project(login)
 
 include(00-Common)
-include(LLAddBuildTest)
+if(LL_TESTS)
+  include(LLAddBuildTest)
+endif(LL_TESTS)
 include(LLCommon)
 include(LLMath)
 include(LLXML)
@@ -43,14 +45,16 @@ target_link_libraries(lllogin
     ${PTH_LIBRARIES}
     )
 
-SET(lllogin_TEST_SOURCE_FILES
+if(LL_TESTS)
+  SET(lllogin_TEST_SOURCE_FILES
+      lllogin.cpp
+      )
+
+  set_source_files_properties(
     lllogin.cpp
+    PROPERTIES
+      LL_TEST_ADDITIONAL_LIBRARIES "${PTH_LIBRARIES}"
     )
 
-set_source_files_properties(
-  lllogin.cpp
-  PROPERTIES
-    LL_TEST_ADDITIONAL_LIBRARIES "${PTH_LIBRARIES}"
-  )
-
-LL_ADD_PROJECT_UNIT_TESTS(lllogin "${lllogin_TEST_SOURCE_FILES}")
+  LL_ADD_PROJECT_UNIT_TESTS(lllogin "${lllogin_TEST_SOURCE_FILES}")
+endif(LL_TESTS)
-- 
cgit v1.2.3


From bca2034f846c3029e8bc8aba035ae01ac20aa149 Mon Sep 17 00:00:00 2001
From: Monroe Linden <monroe@lindenlab.com>
Date: Mon, 30 Aug 2010 14:22:20 -0700
Subject: Default SidebarCameraMovement pref to false.

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

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 09b0e03b34..6ea4cf8625 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -8866,7 +8866,7 @@
       <key>Type</key>
       <string>Boolean</string>
       <key>Value</key>
-      <integer>1</integer>
+      <integer>0</integer>
     </map>
     <key>GroupListShowIcons</key>
     <map>
-- 
cgit v1.2.3


From 570b91f4724c30065a047a9270c7daef1963a548 Mon Sep 17 00:00:00 2001
From: "Boroondas Gupte (patch by Robin Cornelius)" <hg@boroon.dasgupta.ch>
Date: Tue, 31 Aug 2010 12:16:03 +0200
Subject: VWR-20911 FIXED CMake build arch detection is inaccurate and
 incomplete

Robin Cornelius' patch from
http://jira.secondlife.com/secure/attachment/42801/SNOW-776+Don%27t+use+uname+for+build+arch+detection%2C+use+compiler.patch
applied without fuzz:

	patching file indra/cmake/Variables.cmake
	Hunk #1 succeeded at 52 (offset -2 lines).

Added entry in doc/contributions.txt.
No further changes other than that.
---
 doc/contributions.txt       |  1 +
 indra/cmake/Variables.cmake | 17 +++++++++--------
 2 files changed, 10 insertions(+), 8 deletions(-)

diff --git a/doc/contributions.txt b/doc/contributions.txt
index 31ea1bbc5b..4b97e78b0f 100644
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -475,6 +475,7 @@ Robin Cornelius
 	VWR-2488
 	VWR-9557
 	VWR-12587
+	VWR-20911
 Ryozu Kojima
 	VWR-53
 	VWR-287
diff --git a/indra/cmake/Variables.cmake b/indra/cmake/Variables.cmake
index 75b66a85da..12a9ab7db9 100644
--- a/indra/cmake/Variables.cmake
+++ b/indra/cmake/Variables.cmake
@@ -52,19 +52,20 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
   set(LINUX ON BOOl FORCE)
 
   # If someone has specified a word size, use that to determine the
-  # architecture.  Otherwise, let the architecture specify the word size.
+  # architecture.  Otherwise, let the compiler specify the word size.
+  # Using uname will break under chroots and other cross arch compiles. RC
   if (WORD_SIZE EQUAL 32)
     set(ARCH i686)
   elseif (WORD_SIZE EQUAL 64)
     set(ARCH x86_64)
   else (WORD_SIZE EQUAL 32)
-    execute_process(COMMAND uname -m COMMAND sed s/i.86/i686/
-                    OUTPUT_VARIABLE ARCH OUTPUT_STRIP_TRAILING_WHITESPACE)
-    if (ARCH STREQUAL x86_64)
-      set(WORD_SIZE 64)
-    else (ARCH STREQUAL x86_64)
-      set(WORD_SIZE 32)
-    endif (ARCH STREQUAL x86_64)
+    if(CMAKE_SIZEOF_VOID_P MATCHES 4)
+ 		set(ARCH i686)
+		set(WORD_SIZE 32)
+	else(CMAKE_SIZEOF_VOID_P MATCHES 4)
+		set(ARCH x86_64)
+		set(WORD_SIZE 64)
+	endif(CMAKE_SIZEOF_VOID_P MATCHES 4)
   endif (WORD_SIZE EQUAL 32)
 
   set(LL_ARCH ${ARCH}_linux)
-- 
cgit v1.2.3


From 88e7a631b3e4c3d63aa80fe9b3e7f2595d3f45f8 Mon Sep 17 00:00:00 2001
From: "Boroondas Gupte (daggyfied changeset by Techwolf Lupindo, original fix
 by Robin Cornelius)" <hg@boroon.dasgupta.ch>
Date: Thu, 16 Sep 2010 13:26:45 +0200
Subject: SNOW-512/SNOW-287: Build of LLPlugin fails on 64bit linux due to non
 PIC code linking into the DSO Formatting, cleanup, and one minor change by
 Techwolf Lupindo. Minor change was a move of the hunk in
 indra/media_plugins/webkit/CmakeLists.txt to same area as the other plugins
 CmakeLists.txt files.

daggyfied version of https://bitbucket.org/Techwolf/viewer-development/changeset/00bd21962052
---
 doc/contributions.txt                           | 2 ++
 indra/llcommon/CMakeLists.txt                   | 7 +++++++
 indra/llplugin/CMakeLists.txt                   | 8 ++++++++
 indra/media_plugins/base/CMakeLists.txt         | 8 ++++++++
 indra/media_plugins/example/CMakeLists.txt      | 8 ++++++++
 indra/media_plugins/gstreamer010/CMakeLists.txt | 8 ++++++++
 indra/media_plugins/webkit/CMakeLists.txt       | 8 ++++++++
 7 files changed, 49 insertions(+)

diff --git a/doc/contributions.txt b/doc/contributions.txt
index 2e4d803252..461ddeb6b9 100644
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -502,6 +502,8 @@ Ringo Tuxing
 Robin Cornelius
 	SNOW-108
 	SNOW-204
+	SNOW-287
+	SNOW-512
 	VWR-2488
 	VWR-9557
 	VWR-11128
diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt
index 9ead183a9e..feb6d50799 100644
--- a/indra/llcommon/CMakeLists.txt
+++ b/indra/llcommon/CMakeLists.txt
@@ -250,6 +250,13 @@ list(APPEND llcommon_SOURCE_FILES ${llcommon_HEADER_FILES})
 
 if(LLCOMMON_LINK_SHARED)
     add_library (llcommon SHARED ${llcommon_SOURCE_FILES})
+    if(NOT CMAKE_SIZEOF_VOID_P MATCHES 4)
+      if(WINDOWS)
+        add_definitions(/FIXED:NO)
+      else(WINDOWS) # not windows therefore gcc LINUX and DARWIN
+        add_definitions(-fPIC)
+      endif(WINDOWS)
+    endif(NOT CMAKE_SIZEOF_VOID_P MATCHES 4)
     ll_stage_sharedlib(llcommon)
 else(LLCOMMON_LINK_SHARED)
     add_library (llcommon ${llcommon_SOURCE_FILES})
diff --git a/indra/llplugin/CMakeLists.txt b/indra/llplugin/CMakeLists.txt
index 6706775d4f..d9b623d5c0 100644
--- a/indra/llplugin/CMakeLists.txt
+++ b/indra/llplugin/CMakeLists.txt
@@ -48,6 +48,14 @@ set(llplugin_HEADER_FILES
 set_source_files_properties(${llplugin_HEADER_FILES}
                             PROPERTIES HEADER_FILE_ONLY TRUE)
 
+if(NOT CMAKE_SIZEOF_VOID_P MATCHES 4)
+	if(WINDOWS)
+		add_definitions(/FIXED:NO)
+	else(WINDOWS) # not windows therefore gcc LINUX and DARWIN
+		add_definitions(-fPIC)
+	endif(WINDOWS)
+endif (NOT CMAKE_SIZEOF_VOID_P MATCHES 4)
+
 list(APPEND llplugin_SOURCE_FILES ${llplugin_HEADER_FILES})
 
 add_library (llplugin ${llplugin_SOURCE_FILES})
diff --git a/indra/media_plugins/base/CMakeLists.txt b/indra/media_plugins/base/CMakeLists.txt
index f8d2dabc6c..16fd024139 100644
--- a/indra/media_plugins/base/CMakeLists.txt
+++ b/indra/media_plugins/base/CMakeLists.txt
@@ -25,6 +25,14 @@ include_directories(
 
 ### media_plugin_base
 
+if(NOT CMAKE_SIZEOF_VOID_P MATCHES 4)
+  if(WINDOWS)
+    add_definitions(/FIXED:NO)
+  else(WINDOWS) # not windows therefore gcc LINUX and DARWIN
+    add_definitions(-fPIC)
+  endif(WINDOWS)
+endif (NOT CMAKE_SIZEOF_VOID_P MATCHES 4)
+
 set(media_plugin_base_SOURCE_FILES
     media_plugin_base.cpp
 )
diff --git a/indra/media_plugins/example/CMakeLists.txt b/indra/media_plugins/example/CMakeLists.txt
index 4d82f2747c..7e4cdb0daf 100644
--- a/indra/media_plugins/example/CMakeLists.txt
+++ b/indra/media_plugins/example/CMakeLists.txt
@@ -29,6 +29,14 @@ include_directories(
 
 ### media_plugin_example
 
+if(NOT CMAKE_SIZEOF_VOID_P MATCHES 4)
+  if(WINDOWS)
+    add_definitions(/FIXED:NO)
+  else(WINDOWS) # not windows therefore gcc LINUX and DARWIN
+    add_definitions(-fPIC)
+  endif(WINDOWS)
+endif (NOT CMAKE_SIZEOF_VOID_P MATCHES 4)
+
 set(media_plugin_example_SOURCE_FILES
     media_plugin_example.cpp
     )
diff --git a/indra/media_plugins/gstreamer010/CMakeLists.txt b/indra/media_plugins/gstreamer010/CMakeLists.txt
index 3b73e04786..d6d697ba81 100644
--- a/indra/media_plugins/gstreamer010/CMakeLists.txt
+++ b/indra/media_plugins/gstreamer010/CMakeLists.txt
@@ -30,6 +30,14 @@ include_directories(
 
 ### media_plugin_gstreamer010
 
+if(NOT CMAKE_SIZEOF_VOID_P MATCHES 4)
+  if(WINDOWS)
+    add_definitions(/FIXED:NO)
+  else(WINDOWS) # not windows therefore gcc LINUX and DARWIN
+    add_definitions(-fPIC)
+  endif(WINDOWS)
+endif (NOT CMAKE_SIZEOF_VOID_P MATCHES 4)
+
 set(media_plugin_gstreamer010_SOURCE_FILES
     media_plugin_gstreamer010.cpp
     llmediaimplgstreamer_syms.cpp
diff --git a/indra/media_plugins/webkit/CMakeLists.txt b/indra/media_plugins/webkit/CMakeLists.txt
index 5bccd589d8..2073ee00de 100644
--- a/indra/media_plugins/webkit/CMakeLists.txt
+++ b/indra/media_plugins/webkit/CMakeLists.txt
@@ -29,6 +29,14 @@ include_directories(
 
 ### media_plugin_webkit
 
+if(NOT CMAKE_SIZEOF_VOID_P MATCHES 4)
+  if(WINDOWS)
+    add_definitions(/FIXED:NO)
+  else(WINDOWS) # not windows therefore gcc LINUX and DARWIN
+    add_definitions(-fPIC)
+  endif(WINDOWS)
+endif (NOT CMAKE_SIZEOF_VOID_P MATCHES 4)
+
 set(media_plugin_webkit_SOURCE_FILES
     media_plugin_webkit.cpp
     )
-- 
cgit v1.2.3


From 64f0b9a7f8d96e170049990372f445d471b826ac Mon Sep 17 00:00:00 2001
From: "Boroondas Gupte (original patches by Aimee Linden)"
 <hg@boroon.dasgupta.ch>
Date: Tue, 31 Aug 2010 13:48:30 +0200
Subject: SNOW-748 FIXED Building on OSX 10.6 fails with "warning:
 -mdynamic-no-pic overrides - fpic or -fPIC"

Originally commited at http://svn.secondlife.com/trac/linden/changeset/3499/projects/2010/snowglobe and http://svn.secondlife.com/trac/linden/changeset/3501

SVN changeset 3499 partially applied with --ignore-whitespace:

	Hunk #1 FAILED at 259.
	Hunk #2 FAILED at 265.
	2 out of 2 hunks FAILED -- saving rejects to file
	indra/llcommon/CMakeLists.txt.rej
	patching file indra/media_plugins/webkit/CMakeLists.txt
	Hunk #1 succeeded at 33 with fuzz 1 (offset -8 lines).
	patching file indra/media_plugins/base/CMakeLists.txt
	patching file indra/media_plugins/gstreamer010/CMakeLists.txt
	patching file indra/media_plugins/example/CMakeLists.txt
	patching file indra/llplugin/CMakeLists.txt

Manually applied to indra/llcommon/CMakeLists.txt (straight forward).

SVN changeset 3501 applied with fuzz 1:

	patching file indra/media_plugins/webkit/CMakeLists.txt
	Hunk #1 succeeded at 33 with fuzz 1 (offset -8 lines).
	Hunk #2 succeeded at 39 with fuzz 1 (offset -8 lines).

No further changes other than that.
---
 indra/llcommon/CMakeLists.txt                   |  4 ++--
 indra/llplugin/CMakeLists.txt                   | 14 +++++++-------
 indra/media_plugins/base/CMakeLists.txt         |  4 ++--
 indra/media_plugins/example/CMakeLists.txt      |  4 ++--
 indra/media_plugins/gstreamer010/CMakeLists.txt |  4 ++--
 indra/media_plugins/webkit/CMakeLists.txt       |  4 ++--
 6 files changed, 17 insertions(+), 17 deletions(-)

diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt
index feb6d50799..20a6c8d709 100644
--- a/indra/llcommon/CMakeLists.txt
+++ b/indra/llcommon/CMakeLists.txt
@@ -250,13 +250,13 @@ list(APPEND llcommon_SOURCE_FILES ${llcommon_HEADER_FILES})
 
 if(LLCOMMON_LINK_SHARED)
     add_library (llcommon SHARED ${llcommon_SOURCE_FILES})
-    if(NOT CMAKE_SIZEOF_VOID_P MATCHES 4)
+    if(NOT WORD_SIZE EQUAL 32)
       if(WINDOWS)
         add_definitions(/FIXED:NO)
       else(WINDOWS) # not windows therefore gcc LINUX and DARWIN
         add_definitions(-fPIC)
       endif(WINDOWS)
-    endif(NOT CMAKE_SIZEOF_VOID_P MATCHES 4)
+    endif(NOT WORD_SIZE EQUAL 32)
     ll_stage_sharedlib(llcommon)
 else(LLCOMMON_LINK_SHARED)
     add_library (llcommon ${llcommon_SOURCE_FILES})
diff --git a/indra/llplugin/CMakeLists.txt b/indra/llplugin/CMakeLists.txt
index d9b623d5c0..51cb0d78b4 100644
--- a/indra/llplugin/CMakeLists.txt
+++ b/indra/llplugin/CMakeLists.txt
@@ -48,13 +48,13 @@ set(llplugin_HEADER_FILES
 set_source_files_properties(${llplugin_HEADER_FILES}
                             PROPERTIES HEADER_FILE_ONLY TRUE)
 
-if(NOT CMAKE_SIZEOF_VOID_P MATCHES 4)
-	if(WINDOWS)
-		add_definitions(/FIXED:NO)
-	else(WINDOWS) # not windows therefore gcc LINUX and DARWIN
-		add_definitions(-fPIC)
-	endif(WINDOWS)
-endif (NOT CMAKE_SIZEOF_VOID_P MATCHES 4)
+if(NOT WORD_SIZE EQUAL 32)
+  if(WINDOWS)
+    add_definitions(/FIXED:NO)
+  else(WINDOWS) # not windows therefore gcc LINUX and DARWIN
+    add_definitions(-fPIC)
+  endif(WINDOWS)
+endif(NOT WORD_SIZE EQUAL 32)
 
 list(APPEND llplugin_SOURCE_FILES ${llplugin_HEADER_FILES})
 
diff --git a/indra/media_plugins/base/CMakeLists.txt b/indra/media_plugins/base/CMakeLists.txt
index 16fd024139..3ad94b0c64 100644
--- a/indra/media_plugins/base/CMakeLists.txt
+++ b/indra/media_plugins/base/CMakeLists.txt
@@ -25,13 +25,13 @@ include_directories(
 
 ### media_plugin_base
 
-if(NOT CMAKE_SIZEOF_VOID_P MATCHES 4)
+if(NOT WORD_SIZE EQUAL 32)
   if(WINDOWS)
     add_definitions(/FIXED:NO)
   else(WINDOWS) # not windows therefore gcc LINUX and DARWIN
     add_definitions(-fPIC)
   endif(WINDOWS)
-endif (NOT CMAKE_SIZEOF_VOID_P MATCHES 4)
+endif(NOT WORD_SIZE EQUAL 32)
 
 set(media_plugin_base_SOURCE_FILES
     media_plugin_base.cpp
diff --git a/indra/media_plugins/example/CMakeLists.txt b/indra/media_plugins/example/CMakeLists.txt
index 7e4cdb0daf..56cefde4bd 100644
--- a/indra/media_plugins/example/CMakeLists.txt
+++ b/indra/media_plugins/example/CMakeLists.txt
@@ -29,13 +29,13 @@ include_directories(
 
 ### media_plugin_example
 
-if(NOT CMAKE_SIZEOF_VOID_P MATCHES 4)
+if(NOT WORD_SIZE EQUAL 32)
   if(WINDOWS)
     add_definitions(/FIXED:NO)
   else(WINDOWS) # not windows therefore gcc LINUX and DARWIN
     add_definitions(-fPIC)
   endif(WINDOWS)
-endif (NOT CMAKE_SIZEOF_VOID_P MATCHES 4)
+endif(NOT WORD_SIZE EQUAL 32)
 
 set(media_plugin_example_SOURCE_FILES
     media_plugin_example.cpp
diff --git a/indra/media_plugins/gstreamer010/CMakeLists.txt b/indra/media_plugins/gstreamer010/CMakeLists.txt
index d6d697ba81..ba66166c55 100644
--- a/indra/media_plugins/gstreamer010/CMakeLists.txt
+++ b/indra/media_plugins/gstreamer010/CMakeLists.txt
@@ -30,13 +30,13 @@ include_directories(
 
 ### media_plugin_gstreamer010
 
-if(NOT CMAKE_SIZEOF_VOID_P MATCHES 4)
+if(NOT WORD_SIZE EQUAL 32)
   if(WINDOWS)
     add_definitions(/FIXED:NO)
   else(WINDOWS) # not windows therefore gcc LINUX and DARWIN
     add_definitions(-fPIC)
   endif(WINDOWS)
-endif (NOT CMAKE_SIZEOF_VOID_P MATCHES 4)
+endif(NOT WORD_SIZE EQUAL 32)
 
 set(media_plugin_gstreamer010_SOURCE_FILES
     media_plugin_gstreamer010.cpp
diff --git a/indra/media_plugins/webkit/CMakeLists.txt b/indra/media_plugins/webkit/CMakeLists.txt
index 2073ee00de..673e059c34 100644
--- a/indra/media_plugins/webkit/CMakeLists.txt
+++ b/indra/media_plugins/webkit/CMakeLists.txt
@@ -29,13 +29,13 @@ include_directories(
 
 ### media_plugin_webkit
 
-if(NOT CMAKE_SIZEOF_VOID_P MATCHES 4)
+if(NOT WORD_SIZE EQUAL 32)
   if(WINDOWS)
     add_definitions(/FIXED:NO)
   else(WINDOWS) # not windows therefore gcc LINUX and DARWIN
     add_definitions(-fPIC)
   endif(WINDOWS)
-endif (NOT CMAKE_SIZEOF_VOID_P MATCHES 4)
+endif(NOT WORD_SIZE EQUAL 32)
 
 set(media_plugin_webkit_SOURCE_FILES
     media_plugin_webkit.cpp
-- 
cgit v1.2.3


From ea112188e258cd51856b767311ee7917c114413a Mon Sep 17 00:00:00 2001
From: Boroondas Gupte <hg@boroon.dasgupta.ch>
Date: Tue, 31 Aug 2010 14:33:27 +0200
Subject: SNOW-748 FOLLOWUP make CMake if indentation consistent with other
 occurrences (i.e. two spaces only)

---
 indra/llcommon/CMakeLists.txt | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt
index 20a6c8d709..f5acadf30c 100644
--- a/indra/llcommon/CMakeLists.txt
+++ b/indra/llcommon/CMakeLists.txt
@@ -249,15 +249,15 @@ set_source_files_properties(${llcommon_HEADER_FILES}
 list(APPEND llcommon_SOURCE_FILES ${llcommon_HEADER_FILES})
 
 if(LLCOMMON_LINK_SHARED)
-    add_library (llcommon SHARED ${llcommon_SOURCE_FILES})
-    if(NOT WORD_SIZE EQUAL 32)
-      if(WINDOWS)
-        add_definitions(/FIXED:NO)
-      else(WINDOWS) # not windows therefore gcc LINUX and DARWIN
-        add_definitions(-fPIC)
-      endif(WINDOWS)
-    endif(NOT WORD_SIZE EQUAL 32)
-    ll_stage_sharedlib(llcommon)
+  add_library (llcommon SHARED ${llcommon_SOURCE_FILES})
+  if(NOT WORD_SIZE EQUAL 32)
+    if(WINDOWS)
+      add_definitions(/FIXED:NO)
+    else(WINDOWS) # not windows therefore gcc LINUX and DARWIN
+      add_definitions(-fPIC)
+    endif(WINDOWS)
+  endif(NOT WORD_SIZE EQUAL 32)
+  ll_stage_sharedlib(llcommon)
 else(LLCOMMON_LINK_SHARED)
     add_library (llcommon ${llcommon_SOURCE_FILES})
 endif(LLCOMMON_LINK_SHARED)
-- 
cgit v1.2.3


From 3ca4baeebc3fd3cd10faf27560237daae0b39547 Mon Sep 17 00:00:00 2001
From: Boroondas Gupte <hg@boroon.dasgupta.ch>
Date: Tue, 31 Aug 2010 14:41:46 +0200
Subject: VWR-20911 FOLLOWUP fixed indentation (cmake files use spaces only)

---
 indra/cmake/Variables.cmake | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/indra/cmake/Variables.cmake b/indra/cmake/Variables.cmake
index 12a9ab7db9..0573aa85d1 100644
--- a/indra/cmake/Variables.cmake
+++ b/indra/cmake/Variables.cmake
@@ -60,12 +60,12 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
     set(ARCH x86_64)
   else (WORD_SIZE EQUAL 32)
     if(CMAKE_SIZEOF_VOID_P MATCHES 4)
- 		set(ARCH i686)
-		set(WORD_SIZE 32)
-	else(CMAKE_SIZEOF_VOID_P MATCHES 4)
-		set(ARCH x86_64)
-		set(WORD_SIZE 64)
-	endif(CMAKE_SIZEOF_VOID_P MATCHES 4)
+      set(ARCH i686)
+      set(WORD_SIZE 32)
+    else(CMAKE_SIZEOF_VOID_P MATCHES 4)
+      set(ARCH x86_64)
+      set(WORD_SIZE 64)
+    endif(CMAKE_SIZEOF_VOID_P MATCHES 4)
   endif (WORD_SIZE EQUAL 32)
 
   set(LL_ARCH ${ARCH}_linux)
-- 
cgit v1.2.3


From dbc49731023c1c621784fa71f65a16b79f91cdc4 Mon Sep 17 00:00:00 2001
From: callum <none@none>
Date: Wed, 8 Sep 2010 11:18:11 -0700
Subject: Reference LLQtWebKit (Windows) that was built against Qt 4.7.0 RC1

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

diff --git a/install.xml b/install.xml
index df8fe33dc9..b6ddd03ce3 100644
--- a/install.xml
+++ b/install.xml
@@ -955,9 +955,9 @@ anguage Infrstructure (CLI) international standard</string>
           <key>windows</key>
           <map>
             <key>md5sum</key>
-            <string>1591dab02d6135c204a7a31bf72d8ac1</string>
+            <string>48bbef9581b197d0880d15b781ce3103</string>
             <key>url</key>
-            <uri>http://viewer-source-downloads.s3.amazonaws.com/install_pkgs/llqtwebkit-windows-qt4.6-20100809.tar.bz2</uri>
+            <uri>http://viewer-source-downloads.s3.amazonaws.com/install_pkgs/llqtwebkit-windows-qt4.7.0.rc1-20100907.tar.bz2</uri>
           </map>
         </map>
       </map>
-- 
cgit v1.2.3


From 051791dd902c878750ff4cd079f8bd0817ccdc68 Mon Sep 17 00:00:00 2001
From: Monroe Linden <monroe@lindenlab.com>
Date: Wed, 8 Sep 2010 14:47:33 -0700
Subject: Experimental Mac build of llqtwebkit against Qt 4.7 prerelease.

Built from:

Qt 4.7 prerelease source from http://get.qt.nokia.com/qt/source/qt-everywhere-opensource-src-4.7.0-rc1.tar.gz
revision 1faa5dfb28d2 in http://hg.secondlife.com/llqtwebkit/ (currently head of the qt-4.7 branch)
---
 install.xml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/install.xml b/install.xml
index b6ddd03ce3..53a8960093 100644
--- a/install.xml
+++ b/install.xml
@@ -941,9 +941,9 @@ anguage Infrstructure (CLI) international standard</string>
           <key>darwin</key>
           <map>
             <key>md5sum</key>
-            <string>9f4243cf304366030d02f2881357a928</string>
+            <string>d71d9789256e06be6b54d1a4bd22ce32</string>
             <key>url</key>
-            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-4.6-darwin-20100817.tar.bz2</uri>
+            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-4.7-darwin-20100908.tar.bz2</uri>
           </map>
           <key>linux</key>
           <map>
-- 
cgit v1.2.3


From 89942b7a398b14e9b6d3953786141fb6b5b3fce0 Mon Sep 17 00:00:00 2001
From: callum <none@none>
Date: Wed, 8 Sep 2010 18:07:31 -0700
Subject: Reference (updated) LLQtWebKit (Windows) that was built against Qt
 4.7.0 RC1 This version is built against Qt 4.7.0 with some extra build
 options to turn off manifest embedding in the Qt DLLs

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

diff --git a/install.xml b/install.xml
index b6ddd03ce3..062fe4cf6c 100644
--- a/install.xml
+++ b/install.xml
@@ -955,9 +955,9 @@ anguage Infrstructure (CLI) international standard</string>
           <key>windows</key>
           <map>
             <key>md5sum</key>
-            <string>48bbef9581b197d0880d15b781ce3103</string>
+            <string>8c1cc187d6ac1f32a973c83b926d9e70</string>
             <key>url</key>
-            <uri>http://viewer-source-downloads.s3.amazonaws.com/install_pkgs/llqtwebkit-windows-qt4.7.0.rc1-20100907.tar.bz2</uri>
+            <uri>http://viewer-source-downloads.s3.amazonaws.com/install_pkgs/llqtwebkit-windows-qt4.7.0.rc1-20100908.tar.bz2</uri>
           </map>
         </map>
       </map>
-- 
cgit v1.2.3


From e7884bbab54d172957f5ee05df8dad3a4f8931bd Mon Sep 17 00:00:00 2001
From: Richard Nelson <none@none>
Date: Wed, 8 Sep 2010 19:00:50 -0700
Subject: DEV-53094 FIX Selecting texture picker causes viewer to crash
 overzealous elimination of xml parsing

---
 indra/newview/llfloatercolorpicker.cpp          | 2 ++
 indra/newview/llfloaternotificationsconsole.cpp | 1 +
 indra/newview/llpanelmaininventory.cpp          | 1 +
 indra/newview/lltexturectrl.cpp                 | 1 +
 4 files changed, 5 insertions(+)

diff --git a/indra/newview/llfloatercolorpicker.cpp b/indra/newview/llfloatercolorpicker.cpp
index 4201ae1da1..69f1774ff8 100644
--- a/indra/newview/llfloatercolorpicker.cpp
+++ b/indra/newview/llfloatercolorpicker.cpp
@@ -107,6 +107,8 @@ LLFloaterColorPicker::LLFloaterColorPicker (LLColorSwatchCtrl* swatch, BOOL show
 	  mCanApplyImmediately	( show_apply_immediate ),
 	  mContextConeOpacity	( 0.f )
 {
+	buildFromFile ( "floater_color_picker.xml");
+
 	// create user interface for this picker
 	createUI ();
 
diff --git a/indra/newview/llfloaternotificationsconsole.cpp b/indra/newview/llfloaternotificationsconsole.cpp
index 08bab95654..42dc60f9e0 100644
--- a/indra/newview/llfloaternotificationsconsole.cpp
+++ b/indra/newview/llfloaternotificationsconsole.cpp
@@ -251,6 +251,7 @@ LLFloaterNotification::LLFloaterNotification(LLNotification* note)
 :	LLFloater(LLSD()),
 	mNote(note)
 {
+	buildFromFile("floater_notification.xml");
 }
 
 BOOL LLFloaterNotification::postBuild()
diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp
index c5d4f95f08..5b07e4863b 100644
--- a/indra/newview/llpanelmaininventory.cpp
+++ b/indra/newview/llpanelmaininventory.cpp
@@ -642,6 +642,7 @@ LLFloaterInventoryFinder::LLFloaterInventoryFinder(LLPanelMainInventory* invento
 	mPanelMainInventory(inventory_view),
 	mFilter(inventory_view->getPanel()->getFilter())
 {
+	buildFromFile("floater_inventory_view_finder.xml");
 	updateElementsFromFilter();
 }
 
diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp
index cb9fc4c5fe..328298bda4 100644
--- a/indra/newview/lltexturectrl.cpp
+++ b/indra/newview/lltexturectrl.cpp
@@ -196,6 +196,7 @@ LLFloaterTexturePicker::LLFloaterTexturePicker(
 	mContextConeOpacity(0.f),
 	mSelectedItemPinned( FALSE )
 {
+	buildFromFile("floater_texture_ctrl.xml");
 	mCanApplyImmediately = can_apply_immediately;
 	setCanMinimize(FALSE);
 }
-- 
cgit v1.2.3


From 846f39253a4422a881d1e2b84b58a8e50eb106c8 Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Thu, 9 Sep 2010 16:42:19 -0700
Subject: DEV-53087 FIX TOS does not appear for new users reviewed by Callum

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

diff --git a/indra/newview/lllogininstance.cpp b/indra/newview/lllogininstance.cpp
index 7b2f5984a7..3def135fb4 100644
--- a/indra/newview/lllogininstance.cpp
+++ b/indra/newview/lllogininstance.cpp
@@ -47,6 +47,7 @@
 #include "llfloaterreg.h"
 #include "llnotifications.h"
 #include "llwindow.h"
+#include "llviewerwindow.h"
 #if LL_LINUX || LL_SOLARIS
 #include "lltrans.h"
 #endif
@@ -102,6 +103,7 @@ void LLLoginInstance::reconnect()
 	std::vector<std::string> uris;
 	LLGridManager::getInstance()->getLoginURIs(uris);
 	mLoginModule->connect(uris.front(), mRequestData);
+	gViewerWindow->setShowProgress(true);
 }
 
 void LLLoginInstance::disconnect()
@@ -239,6 +241,7 @@ void LLLoginInstance::handleLoginFailure(const LLSD& event)
 			LLSD data(LLSD::emptyMap());
 			data["message"] = message_response;
 			data["reply_pump"] = TOS_REPLY_PUMP;
+			gViewerWindow->setShowProgress(FALSE);
 			LLFloaterReg::showInstance("message_tos", data);
 			LLEventPumps::instance().obtain(TOS_REPLY_PUMP)
 				.listen(TOS_LISTENER_NAME,
@@ -259,6 +262,7 @@ void LLLoginInstance::handleLoginFailure(const LLSD& event)
 				data["certificate"] = response["certificate"];
 			}
 			
+			gViewerWindow->setShowProgress(FALSE);
 			LLFloaterReg::showInstance("message_critical", data);
 			LLEventPumps::instance().obtain(TOS_REPLY_PUMP)
 				.listen(TOS_LISTENER_NAME,
@@ -402,6 +406,8 @@ void LLLoginInstance::updateApp(bool mandatory, const std::string& auth_msg)
 	{
 		mNotifications->add(notification_name, args, payload, 
 			boost::bind(&LLLoginInstance::updateDialogCallback, this, _1, _2));
+
+		gViewerWindow->setShowProgress(false);
 	}
 }
 
-- 
cgit v1.2.3


From 9f75ae5e327c2802a901b1afd6ce3deb77212181 Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Thu, 9 Sep 2010 16:51:20 -0700
Subject: fixed link seam in login unit test

---
 indra/newview/tests/lllogininstance_test.cpp | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/indra/newview/tests/lllogininstance_test.cpp b/indra/newview/tests/lllogininstance_test.cpp
index a0697af6c3..ed6c2e4cbc 100644
--- a/indra/newview/tests/lllogininstance_test.cpp
+++ b/indra/newview/tests/lllogininstance_test.cpp
@@ -62,6 +62,12 @@ LLSLURL LLStartUp::sStartSLURL;
 static std::string gLoginURI;
 static LLSD gLoginCreds;
 static bool gDisconnectCalled = false;
+
+#include "../llviewerwindow.h"
+void LLViewerWindow::setShowProgress(BOOL show) {}
+
+LLViewerWindow* gViewerWindow;
+
 class LLLogin::Impl
 {
 };
-- 
cgit v1.2.3


From 30f2987b0a2d4a0586ed8893a43d97274bd29500 Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Thu, 9 Sep 2010 17:17:44 -0700
Subject: Backed out changeset: 28f52b3d2e3d

---
 indra/llui/llbutton.cpp          | 12 +++++-------
 indra/llui/llbutton.h            |  1 -
 indra/newview/llviewerwindow.cpp | 11 +++++++++++
 3 files changed, 16 insertions(+), 8 deletions(-)

diff --git a/indra/llui/llbutton.cpp b/indra/llui/llbutton.cpp
index 5a4f0515fc..aeedf62379 100644
--- a/indra/llui/llbutton.cpp
+++ b/indra/llui/llbutton.cpp
@@ -120,7 +120,6 @@ LLButton::LLButton(const LLButton::Params& p)
 	mFlashing( FALSE ),
 	mCurGlowStrength(0.f),
 	mNeedsHighlight(FALSE),
-	mMouseOver(false),
 	mUnselectedLabel(p.label()),
 	mSelectedLabel(p.label_selected()),
 	mGLFont(p.font),
@@ -505,11 +504,7 @@ void LLButton::onMouseEnter(S32 x, S32 y, MASK mask)
 	LLUICtrl::onMouseEnter(x, y, mask);
 
 	if (isInEnabledChain())
-	{
 		mNeedsHighlight = TRUE;
-	}
-
-	mMouseOver = true;
 }
 
 void LLButton::onMouseLeave(S32 x, S32 y, MASK mask)
@@ -517,7 +512,6 @@ void LLButton::onMouseLeave(S32 x, S32 y, MASK mask)
 	LLUICtrl::onMouseLeave(x, y, mask);
 
 	mNeedsHighlight = FALSE;
-	mMouseOver = true;
 }
 
 void LLButton::setHighlight(bool b)
@@ -571,10 +565,14 @@ void LLButton::draw()
 	}
 
 	// Unselected image assignments
+	S32 local_mouse_x;
+	S32 local_mouse_y;
+	LLUI::getMousePositionLocal(this, &local_mouse_x, &local_mouse_y);
+
 	bool enabled = isInEnabledChain();
 
 	bool pressed = pressed_by_keyboard 
-					|| (hasMouseCapture() && mMouseOver)
+					|| (hasMouseCapture() && pointInView(local_mouse_x, local_mouse_y))
 					|| mForcePressedState;
 	bool selected = getToggleState();
 	
diff --git a/indra/llui/llbutton.h b/indra/llui/llbutton.h
index 5f25084b35..f4af19b696 100644
--- a/indra/llui/llbutton.h
+++ b/indra/llui/llbutton.h
@@ -356,7 +356,6 @@ private:
 	BOOL						mCommitOnReturn;
 	BOOL						mFadeWhenDisabled;
 	bool						mForcePressedState;
-	bool						mMouseOver;
 
 	LLFrameTimer				mFlashingTimer;
 };
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 f6645b10dd391218edff67579a4388dc8bbac7d2 Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Thu, 9 Sep 2010 19:07:07 -0700
Subject: DEV-53015 FIX Volume slider disappears when sliding on
 panel_prim_media_controls.xml

---
 indra/llui/llbutton.cpp | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/indra/llui/llbutton.cpp b/indra/llui/llbutton.cpp
index 40520c1b79..ceb1434b6a 100644
--- a/indra/llui/llbutton.cpp
+++ b/indra/llui/llbutton.cpp
@@ -558,15 +558,19 @@ void LLButton::draw()
 		pressed_by_keyboard = gKeyboard->getKeyDown(' ') || (mCommitOnReturn && gKeyboard->getKeyDown(KEY_RETURN));
 	}
 
-	// Unselected image assignments
-	S32 local_mouse_x;
-	S32 local_mouse_y;
-	LLUI::getMousePositionLocal(this, &local_mouse_x, &local_mouse_y);
+	bool mouse_pressed_and_over = false;
+	if (hasMouseCapture())
+	{
+		S32 local_mouse_x ;
+		S32 local_mouse_y;
+		LLUI::getMousePositionLocal(this, &local_mouse_x, &local_mouse_y);
+		mouse_pressed_and_over = pointInView(local_mouse_x, local_mouse_y);
+	}
 
 	bool enabled = isInEnabledChain();
 
 	bool pressed = pressed_by_keyboard 
-					|| (hasMouseCapture() && pointInView(local_mouse_x, local_mouse_y))
+					|| mouse_pressed_and_over
 					|| mForcePressedState;
 	bool selected = getToggleState();
 	
-- 
cgit v1.2.3


From 6c1e856b589e0fc56f893d0abf09ac241bb3245b Mon Sep 17 00:00:00 2001
From: Richard Nelson <none@none>
Date: Fri, 10 Sep 2010 15:54:07 -0700
Subject: DEV-53093 FIX Layout issue in nearby voice panel

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

diff --git a/indra/newview/skins/default/xui/en/floater_voice_controls.xml b/indra/newview/skins/default/xui/en/floater_voice_controls.xml
index a46604c834..e7026aa0c2 100644
--- a/indra/newview/skins/default/xui/en/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/en/floater_voice_controls.xml
@@ -86,7 +86,7 @@
              visible="true"
              width="20" />
         </layout_panel>
-        <layout_panel name="leave_call_panel">
+        <layout_panel name="leave_call_panel" height="26" auto_resize="false">
         <layout_stack
          clip="true"
          auto_resize="false"
-- 
cgit v1.2.3


From 3c641ef847bb6f59b4eb253ef1fd10f16d0e7c77 Mon Sep 17 00:00:00 2001
From: Richard Nelson <none@none>
Date: Fri, 10 Sep 2010 16:05:52 -0700
Subject: EXP-14 FIX Voice morphing drop down missing and layout issue in
 floater_voice_controls.xml

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

diff --git a/indra/newview/skins/default/xui/en/floater_voice_controls.xml b/indra/newview/skins/default/xui/en/floater_voice_controls.xml
index e7026aa0c2..1432099590 100644
--- a/indra/newview/skins/default/xui/en/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/en/floater_voice_controls.xml
@@ -98,10 +98,14 @@
          orientation="horizontal"
          width="262">
           <layout_panel
-           class="panel_voice_effect"
-           name="panel_voice_effect"
-           visiblity_control="VoiceMorphingEnabled"
-           filename="panel_voice_effect.xml" />
+            height="26"
+            width="200">
+            <panel
+             class="panel_voice_effect"
+             name="panel_voice_effect"
+             visiblity_control="VoiceMorphingEnabled"
+             filename="panel_voice_effect.xml" />
+          </layout_panel>
           <layout_panel
            auto_resize="false"
            user_resize="false"
-- 
cgit v1.2.3


From 24f308caaeda941a626b6143d95adbfe07450f97 Mon Sep 17 00:00:00 2001
From: Monroe Linden <monroe@lindenlab.com>
Date: Fri, 10 Sep 2010 16:43:35 -0700
Subject: Added support for a media plugin message that asks the viewer to open
 a file picker on the plugin's behalf.

Reviewed by Callum.
---
 indra/llplugin/llpluginclassmedia.cpp              | 12 ++++++++++
 indra/llplugin/llpluginclassmedia.h                |  4 +++-
 indra/llplugin/llpluginclassmediaowner.h           |  1 +
 indra/media_plugins/webkit/media_plugin_webkit.cpp | 26 +++++++++++++++++++++-
 indra/newview/llmediactrl.cpp                      |  6 +++++
 indra/newview/llviewermedia.cpp                    | 17 ++++++++++++++
 indra/newview/llviewerparcelmedia.cpp              |  6 +++++
 indra/test_apps/llplugintest/llmediaplugintest.cpp |  6 +++++
 8 files changed, 76 insertions(+), 2 deletions(-)

diff --git a/indra/llplugin/llpluginclassmedia.cpp b/indra/llplugin/llpluginclassmedia.cpp
index 4f45f95e85..06ed632da8 100644
--- a/indra/llplugin/llpluginclassmedia.cpp
+++ b/indra/llplugin/llpluginclassmedia.cpp
@@ -669,6 +669,18 @@ F64 LLPluginClassMedia::getCPUUsage()
 	return result;
 }
 
+void LLPluginClassMedia::sendPickFileResponse(const std::string &file)
+{
+	LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "pick_file_response");
+	message.setValue("file", file);
+	if(mPlugin->isBlocked())
+	{
+		// If the plugin sent a blocking pick-file request, the response should unblock it.
+		message.setValueBoolean("blocking_response", true);
+	}
+	sendMessage(message);
+}
+
 void LLPluginClassMedia::cut()
 {
 	LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "edit_cut");
diff --git a/indra/llplugin/llpluginclassmedia.h b/indra/llplugin/llpluginclassmedia.h
index ee53f3a4da..eaafbfe389 100644
--- a/indra/llplugin/llpluginclassmedia.h
+++ b/indra/llplugin/llpluginclassmedia.h
@@ -156,6 +156,8 @@ public:
 	void setLowPrioritySizeLimit(int size);
 	
 	F64 getCPUUsage();
+	
+	void sendPickFileResponse(const std::string &file);
 
 	// Valid after a MEDIA_EVENT_CURSOR_CHANGED event
 	std::string getCursorName() const { return mCursorName; };
@@ -176,7 +178,7 @@ public:
 	void	setLanguageCode(const std::string &language_code);
 	void	setPluginsEnabled(const bool enabled);
 	void	setJavascriptEnabled(const bool enabled);
-		
+	
 	///////////////////////////////////
 	// media browser class functions
 	bool pluginSupportsMediaBrowser(void);
diff --git a/indra/llplugin/llpluginclassmediaowner.h b/indra/llplugin/llpluginclassmediaowner.h
index 8a19e7530e..e60c85737f 100644
--- a/indra/llplugin/llpluginclassmediaowner.h
+++ b/indra/llplugin/llpluginclassmediaowner.h
@@ -55,6 +55,7 @@ public:
 		MEDIA_EVENT_CLICK_LINK_HREF,		// I'm not entirely sure what the semantics of these two are
 		MEDIA_EVENT_CLICK_LINK_NOFOLLOW,
 		MEDIA_EVENT_CLOSE_REQUEST,			// The plugin requested its window be closed (currently hooked up to javascript window.close in webkit)
+		MEDIA_EVENT_PICK_FILE_REQUEST,		// The plugin wants the user to pick a file
 		
 		MEDIA_EVENT_PLUGIN_FAILED_LAUNCH,	// The plugin failed to launch 
 		MEDIA_EVENT_PLUGIN_FAILED			// The plugin died unexpectedly
diff --git a/indra/media_plugins/webkit/media_plugin_webkit.cpp b/indra/media_plugins/webkit/media_plugin_webkit.cpp
index de4409fba7..a7189cb610 100644
--- a/indra/media_plugins/webkit/media_plugin_webkit.cpp
+++ b/indra/media_plugins/webkit/media_plugin_webkit.cpp
@@ -688,6 +688,26 @@ private:
 			
 		}
 	}
+	
+	std::string mPickedFile;
+	
+	std::string blockingPickFile(void)
+	{
+		mPickedFile.clear();
+		
+		LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "pick_file");
+		message.setValueBoolean("blocking_request", true);
+		
+		// The "blocking_request" key in the message means this sendMessage call will block until a response is received.
+		sendMessage(message);
+		
+		return mPickedFile;
+	}
+
+	void onPickFileResponse(const std::string &file)
+	{
+		mPickedFile = file;
+	}
 
 };
 
@@ -1045,10 +1065,14 @@ void MediaPluginWebKit::receiveMessage(const char *message_string)
 				LLQtWebKit::getInstance()->userAction( mBrowserWindowId, LLQtWebKit::UA_EDIT_PASTE );
 				checkEditState();
 			}
+			if(message_name == "pick_file_response")
+			{
+				onPickFileResponse(message_in.getValue("file"));
+			}
 			else
 			{
 //				std::cerr << "MediaPluginWebKit::receiveMessage: unknown media message: " << message_string << std::endl;
-			};
+			}
 		}
 		else if(message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER)
 		{
diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp
index 40ae9b06b7..1de249a3c1 100644
--- a/indra/newview/llmediactrl.cpp
+++ b/indra/newview/llmediactrl.cpp
@@ -956,6 +956,12 @@ void LLMediaCtrl::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event)
 			LL_DEBUGS("Media") <<  "Media event:  MEDIA_EVENT_CLOSE_REQUEST" << LL_ENDL;
 		}
 		break;
+		
+		case MEDIA_EVENT_PICK_FILE_REQUEST:
+		{
+			LL_DEBUGS("Media") <<  "Media event:  MEDIA_EVENT_PICK_FILE_REQUEST" << LL_ENDL;
+		}
+		break;
 	};
 
 	// chain all events to any potential observers of this object.
diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp
index 2e3570a3af..012a4d2920 100644
--- a/indra/newview/llviewermedia.cpp
+++ b/indra/newview/llviewermedia.cpp
@@ -51,6 +51,7 @@
 #include "llvoavatarself.h"
 #include "llviewerregion.h"
 #include "llwebsharing.h"	// For LLWebSharing::setOpenIDCookie(), *TODO: find a better way to do this!
+#include "llfilepicker.h"
 
 #include "llevent.h"		// LLSimpleListener
 #include "llnotificationsutil.h"
@@ -2967,6 +2968,22 @@ void LLViewerMediaImpl::handleMediaEvent(LLPluginClassMedia* plugin, LLPluginCla
 		}
 		break;
 
+		case LLViewerMediaObserver::MEDIA_EVENT_PICK_FILE_REQUEST:
+		{
+			// Display a file picker
+			std::string response;
+			
+			LLFilePicker& picker = LLFilePicker::instance();
+			if (!picker.getOpenFile(LLFilePicker::FFLOAD_ALL))
+			{
+				// The user didn't pick a file -- the empty response string will indicate this.
+			}
+			
+			response = picker.getFirstFile();
+			
+			plugin->sendPickFileResponse(response);
+		}
+		break;
 		
 		default:
 		break;
diff --git a/indra/newview/llviewerparcelmedia.cpp b/indra/newview/llviewerparcelmedia.cpp
index 0cb1ad2f39..335776029f 100644
--- a/indra/newview/llviewerparcelmedia.cpp
+++ b/indra/newview/llviewerparcelmedia.cpp
@@ -574,6 +574,12 @@ void LLViewerParcelMedia::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent
 			LL_DEBUGS("Media") <<  "Media event:  MEDIA_EVENT_CLOSE_REQUEST" << LL_ENDL;
 		}
 		break;
+		
+		case MEDIA_EVENT_PICK_FILE_REQUEST:
+		{
+			LL_DEBUGS("Media") <<  "Media event:  MEDIA_EVENT_PICK_FILE_REQUEST" << LL_ENDL;
+		}
+		break;
 	};
 }
 
diff --git a/indra/test_apps/llplugintest/llmediaplugintest.cpp b/indra/test_apps/llplugintest/llmediaplugintest.cpp
index 89a514f376..1d6ea8e270 100644
--- a/indra/test_apps/llplugintest/llmediaplugintest.cpp
+++ b/indra/test_apps/llplugintest/llmediaplugintest.cpp
@@ -2212,6 +2212,12 @@ void LLMediaPluginTest::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent e
 		case MEDIA_EVENT_CLOSE_REQUEST:
 			std::cerr <<  "Media event:  MEDIA_EVENT_CLOSE_REQUEST" << std::endl;
 		break;
+		
+		case MEDIA_EVENT_PICK_FILE_REQUEST:
+			std::cerr <<  "Media event:  MEDIA_EVENT_PICK_FILE_REQUEST" << std::endl;
+			// TODO: display an actual file picker
+			self->sendPickFileResponse("cake");
+		break;
 	}
 }
 
-- 
cgit v1.2.3


From db538aa945c5b977fcdc294f7946870cdc8b5d30 Mon Sep 17 00:00:00 2001
From: Richard Nelson <none@none>
Date: Fri, 10 Sep 2010 17:02:47 -0700
Subject: EXP-22 FIX Change hints background to white

---
 .../default/textures/windows/hint_arrow_down.png      | Bin 3239 -> 3170 bytes
 .../default/textures/windows/hint_arrow_left.png      | Bin 3163 -> 3059 bytes
 .../default/textures/windows/hint_arrow_right.png     | Bin 3155 -> 3112 bytes
 .../skins/default/textures/windows/hint_arrow_up.png  | Bin 3248 -> 3219 bytes
 .../default/textures/windows/hint_background.png      | Bin 3930 -> 4316 bytes
 indra/newview/skins/default/xui/en/panel_hint.xml     |   5 +++--
 6 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/indra/newview/skins/default/textures/windows/hint_arrow_down.png b/indra/newview/skins/default/textures/windows/hint_arrow_down.png
index 11ab3c2d0c..ddadef0978 100644
Binary files a/indra/newview/skins/default/textures/windows/hint_arrow_down.png and b/indra/newview/skins/default/textures/windows/hint_arrow_down.png differ
diff --git a/indra/newview/skins/default/textures/windows/hint_arrow_left.png b/indra/newview/skins/default/textures/windows/hint_arrow_left.png
index e5c597a550..2794b967e8 100644
Binary files a/indra/newview/skins/default/textures/windows/hint_arrow_left.png and b/indra/newview/skins/default/textures/windows/hint_arrow_left.png differ
diff --git a/indra/newview/skins/default/textures/windows/hint_arrow_right.png b/indra/newview/skins/default/textures/windows/hint_arrow_right.png
index 3f89187e13..7ac57f805b 100644
Binary files a/indra/newview/skins/default/textures/windows/hint_arrow_right.png and b/indra/newview/skins/default/textures/windows/hint_arrow_right.png differ
diff --git a/indra/newview/skins/default/textures/windows/hint_arrow_up.png b/indra/newview/skins/default/textures/windows/hint_arrow_up.png
index 1050097efb..bb3e1c07fa 100644
Binary files a/indra/newview/skins/default/textures/windows/hint_arrow_up.png and b/indra/newview/skins/default/textures/windows/hint_arrow_up.png differ
diff --git a/indra/newview/skins/default/textures/windows/hint_background.png b/indra/newview/skins/default/textures/windows/hint_background.png
index 0839a95205..cfac5deacb 100644
Binary files a/indra/newview/skins/default/textures/windows/hint_background.png and b/indra/newview/skins/default/textures/windows/hint_background.png differ
diff --git a/indra/newview/skins/default/xui/en/panel_hint.xml b/indra/newview/skins/default/xui/en/panel_hint.xml
index 839dbc58f2..e2e9d0aef0 100644
--- a/indra/newview/skins/default/xui/en/panel_hint.xml
+++ b/indra/newview/skins/default/xui/en/panel_hint.xml
@@ -9,7 +9,7 @@
         top="8"
         bottom="20"
         follows="left|right|top"
-        text_color="White"
+        text_color="Black"
         wrap="false"/>
   <text name="hint_text"
         left="8"
@@ -17,7 +17,7 @@
         top="26"
         bottom="92"
         follows="all" 
-        text_color="White"
+        text_color="Black"
         wrap="true"/>
   <button right="197" 
           top="8"
@@ -25,6 +25,7 @@
           height="16"
           name="close" 
           follows="right|top" 
+          image_color="DkGray" 
           image_unselected="Icon_Close_Foreground"
           image_selected="Icon_Close_Press"/>
 </panel>
-- 
cgit v1.2.3


From fbcde287363f38a4f73a14bbf3501e34b9698c68 Mon Sep 17 00:00:00 2001
From: Richard Nelson <none@none>
Date: Fri, 10 Sep 2010 18:06:42 -0700
Subject: EXP-23 FIX Tail for chat box hint should be slantways instead of
 horizontal

---
 indra/newview/llbottomtray.cpp                     |   2 ++
 indra/newview/llfirstuse.cpp                       |   2 +-
 indra/newview/llhints.cpp                          |  26 ++++++++++++++++++---
 indra/newview/skins/default/textures/textures.xml  |   1 +
 .../textures/windows/hint_arrow_lower_left.png     | Bin 0 -> 3081 bytes
 .../skins/default/xui/en/widgets/hint_popup.xml    |   1 +
 6 files changed, 28 insertions(+), 4 deletions(-)
 create mode 100644 indra/newview/skins/default/textures/windows/hint_arrow_lower_left.png

diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp
index fba15693c8..8c3d30237f 100644
--- a/indra/newview/llbottomtray.cpp
+++ b/indra/newview/llbottomtray.cpp
@@ -470,6 +470,8 @@ BOOL LLBottomTray::postBuild()
 	gMenuHolder->addChild(mBottomTrayContextMenu);
 
 	mNearbyChatBar = findChild<LLNearbyChatBar>("chat_bar");
+	LLHints::registerHintTarget("chat_bar", mNearbyChatBar->LLView::getHandle());
+
 	mChatBarContainer = getChild<LLLayoutPanel>("chat_bar_layout_panel");
 
 	mToolbarStack = getChild<LLLayoutStack>("toolbar_stack");
diff --git a/indra/newview/llfirstuse.cpp b/indra/newview/llfirstuse.cpp
index ead06d59f9..b864ba6a36 100644
--- a/indra/newview/llfirstuse.cpp
+++ b/indra/newview/llfirstuse.cpp
@@ -74,7 +74,7 @@ void LLFirstUse::resetFirstUse()
 // static
 void LLFirstUse::otherAvatarChatFirst(bool enable)
 {
-	firstUseNotification("FirstOtherChatBeforeUser", enable, "HintChat", LLSD(), LLSD().with("target", "incoming_chat").with("direction", "right"));
+	firstUseNotification("FirstOtherChatBeforeUser", enable, "HintChat", LLSD(), LLSD().with("target", "chat_bar").with("direction", "top_right").with("distance", 24));
 }
 
 // static
diff --git a/indra/newview/llhints.cpp b/indra/newview/llhints.cpp
index 0c91dd473d..21383109dc 100644
--- a/indra/newview/llhints.cpp
+++ b/indra/newview/llhints.cpp
@@ -43,7 +43,8 @@ public:
 		LEFT,
 		TOP,
 		RIGHT,
-		BOTTOM
+		BOTTOM,
+		TOP_RIGHT
 	} EPopupDirection;
 
 	struct PopupDirections : public LLInitParam::TypeValuesHelper<LLHintPopup::EPopupDirection, PopupDirections>
@@ -54,6 +55,7 @@ public:
 			declare("right", LLHintPopup::RIGHT);
 			declare("top", LLHintPopup::TOP);
 			declare("bottom", LLHintPopup::BOTTOM);
+			declare("top_right", LLHintPopup::TOP_RIGHT);
 		}
 	};
 
@@ -76,7 +78,9 @@ public:
 		Optional<LLUIImage*>			left_arrow,
 										up_arrow,
 										right_arrow,
-										down_arrow;	
+										down_arrow,
+										lower_left_arrow;
+				
 		Optional<S32>					left_arrow_offset,
 										up_arrow_offset,
 										right_arrow_offset,
@@ -90,6 +94,7 @@ public:
 			up_arrow("up_arrow"),
 			right_arrow("right_arrow"),
 			down_arrow("down_arrow"),
+			lower_left_arrow("lower_left_arrow"),
 			left_arrow_offset("left_arrow_offset"),
 			up_arrow_offset("up_arrow_offset"),
 			right_arrow_offset("right_arrow_offset"),
@@ -115,7 +120,8 @@ private:
 	LLUIImagePtr		mArrowLeft,
 						mArrowUp,
 						mArrowRight,
-						mArrowDown;
+						mArrowDown,
+						mArrowDownAndLeft;
 	S32					mArrowLeftOffset,
 						mArrowUpOffset,
 						mArrowRightOffset,
@@ -137,6 +143,7 @@ LLHintPopup::LLHintPopup(const LLHintPopup::Params& p)
 	mArrowUp(p.up_arrow),
 	mArrowRight(p.right_arrow),
 	mArrowDown(p.down_arrow),
+	mArrowDownAndLeft(p.lower_left_arrow),
 	mArrowLeftOffset(p.left_arrow_offset),
 	mArrowUpOffset(p.up_arrow_offset),
 	mArrowRightOffset(p.right_arrow_offset),
@@ -272,6 +279,19 @@ void LLHintPopup::draw()
 						arrow_imagep = mArrowUp;
 					}
 					break;
+				case TOP_RIGHT:
+					my_rect.setCenterAndSize(	target_rect.mRight + (my_local_rect.getWidth() / 2),
+												target_rect.mTop + (my_local_rect.getHeight() / 2 + mDistance),
+												my_local_rect.getWidth(), 
+												my_local_rect.getHeight());
+					if (mArrowDownAndLeft)
+					{
+						arrow_rect.setCenterAndSize(my_local_rect.mLeft + mArrowDownAndLeft->getWidth() / 2 + mArrowLeftOffset,
+													my_local_rect.mBottom - mArrowDownAndLeft->getHeight() / 2 + mArrowDownOffset,
+													mArrowDownAndLeft->getWidth(), 
+													mArrowDownAndLeft->getHeight());
+						arrow_imagep = mArrowDownAndLeft;
+					}
 				}
 				setShape(my_rect);
 				LLPanel::draw();
diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index 8d6a564687..7c8574609c 100644
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -651,6 +651,7 @@ with the same filename but different name
   <texture name="hint_arrow_right" file_name="windows/hint_arrow_right.png" preload="false"/>
   <texture name="hint_arrow_up" file_name="windows/hint_arrow_up.png" preload="false"/>
   <texture name="hint_arrow_down" file_name="windows/hint_arrow_down.png" preload="false"/>
+  <texture name="hint_arrow_lower_left" file_name="windows/hint_arrow_lower_left.png" preload="false"/>
 
   <texture name="Yellow_Gradient" file_name="windows/yellow_gradient.png"/>
   <texture name="Popup_Caution" file_name="icons/pop_up_caution.png"/>
diff --git a/indra/newview/skins/default/textures/windows/hint_arrow_lower_left.png b/indra/newview/skins/default/textures/windows/hint_arrow_lower_left.png
new file mode 100644
index 0000000000..0dfc99898d
Binary files /dev/null and b/indra/newview/skins/default/textures/windows/hint_arrow_lower_left.png differ
diff --git a/indra/newview/skins/default/xui/en/widgets/hint_popup.xml b/indra/newview/skins/default/xui/en/widgets/hint_popup.xml
index a9975941af..92080df154 100644
--- a/indra/newview/skins/default/xui/en/widgets/hint_popup.xml
+++ b/indra/newview/skins/default/xui/en/widgets/hint_popup.xml
@@ -11,6 +11,7 @@
  up_arrow="hint_arrow_up" 
  right_arrow="hint_arrow_right"
  down_arrow="hint_arrow_down"
+ lower_left_arrow="hint_arrow_lower_left"
  left_arrow_offset="3"
  up_arrow_offset="-2"
  right_arrow_offset="-3"
-- 
cgit v1.2.3


From e2257bc78e53162127c49adad3f9dc406ecc270e Mon Sep 17 00:00:00 2001
From: Richard Nelson <none@none>
Date: Fri, 10 Sep 2010 18:54:30 -0700
Subject: EXP-24 FIX Menu disable all viewer hints

---
 indra/newview/app_settings/settings.xml            | 13 +++++-
 indra/newview/llhints.cpp                          | 51 ++++++++++++++++------
 indra/newview/llhints.h                            |  1 +
 indra/newview/llviewermenu.cpp                     | 22 ++++++++++
 indra/newview/skins/default/xui/en/menu_viewer.xml |  8 ++++
 5 files changed, 81 insertions(+), 14 deletions(-)

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 6ea4cf8625..efe418f0e8 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -2809,7 +2809,18 @@
       <key>Value</key>
       <integer>0</integer>
     </map>
-    <key>EnableVoiceChat</key>
+    <key>EnableUIHints</key>
+    <map>
+      <key>Comment</key>
+      <string>Toggles UI hint popups</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+  <key>EnableVoiceChat</key>
     <map>
       <key>Comment</key>
       <string>Enable talking to other residents with a microphone</string>
diff --git a/indra/newview/llhints.cpp b/indra/newview/llhints.cpp
index 21383109dc..bd7fec63e8 100644
--- a/indra/newview/llhints.cpp
+++ b/indra/newview/llhints.cpp
@@ -32,6 +32,7 @@
 #include "llbutton.h"
 #include "lltextbox.h"
 #include "llviewerwindow.h"
+#include "llviewercontrol.h"
 #include "llsdparam.h"
 
 class LLHintPopup : public LLPanel
@@ -309,27 +310,31 @@ std::map<LLNotificationPtr, class LLHintPopup*> LLHints::sHints;
 //static
 void LLHints::show(LLNotificationPtr hint)
 {
-	LLHintPopup::Params p(LLUICtrlFactory::getDefaultParams<LLHintPopup>());
-
-	LLParamSDParser parser;
-	parser.readSD(hint->getPayload(), p, true);
-	p.notification = hint;
-
-	if (p.validateBlock())
+	if (gSavedSettings.getBOOL("EnableUIHints"))
 	{
-		LLHintPopup* popup = new LLHintPopup(p);
+		LLHintPopup::Params p(LLUICtrlFactory::getDefaultParams<LLHintPopup>());
 
-		sHints[hint] = popup;
+		LLParamSDParser parser;
+		parser.readSD(hint->getPayload(), p, true);
+		p.notification = hint;
 
-		LLView* hint_holder = gViewerWindow->getHintHolder();
-		if (hint_holder)
+		if (p.validateBlock())
 		{
-			hint_holder->addChild(popup);
-			popup->centerWithin(hint_holder->getLocalRect());
+			LLHintPopup* popup = new LLHintPopup(p);
+
+			sHints[hint] = popup;
+
+			LLView* hint_holder = gViewerWindow->getHintHolder();
+			if (hint_holder)
+			{
+				hint_holder->addChild(popup);
+				popup->centerWithin(hint_holder->getLocalRect());
+			}
 		}
 	}
 }
 
+//static
 void LLHints::hide(LLNotificationPtr hint)
 {
 	hint_map_t::iterator found_it = sHints.find(hint);
@@ -340,6 +345,26 @@ void LLHints::hide(LLNotificationPtr hint)
 	}
 }
 
+//static
+void LLHints::hideAll()
+{
+	std::vector<LLNotificationPtr> notifications;
+	for (hint_map_t::iterator it = sHints.begin(), end_it = sHints.end();
+		it != end_it;
+		++it)
+	{
+		notifications.push_back(it->first);
+	}
+
+	for(std::vector<LLNotificationPtr>::iterator it = notifications.begin(), end_it = notifications.end();
+		it != end_it;
+		++it)
+	{
+		LLNotifications::instance().cancel(*it);
+	}
+
+}
+
 //static
 void LLHints::registerHintTarget(const std::string& name, LLHandle<LLView> target)
 {
diff --git a/indra/newview/llhints.h b/indra/newview/llhints.h
index 90e09ed004..3bca7f00a1 100644
--- a/indra/newview/llhints.h
+++ b/indra/newview/llhints.h
@@ -36,6 +36,7 @@ class LLHints
 public:
 	static void show(LLNotificationPtr hint);
 	static void hide(LLNotificationPtr hint);
+	static void hideAll();
 	static void registerHintTarget(const std::string& name, LLHandle<LLView> target);
 	static LLHandle<LLView> getHintTarget(const std::string& name);
 private:
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index e1ce0b384a..eb74cfc00b 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -62,6 +62,7 @@
 #include "lllandmarkactions.h"
 #include "llgroupmgr.h"
 #include "lltooltip.h"
+#include "llhints.h"
 #include "llhudeffecttrail.h"
 #include "llhudmanager.h"
 #include "llimview.h"
@@ -7740,6 +7741,26 @@ public:
 	}
 };
 
+class LLToggleUIHints : public view_listener_t
+{
+	bool handleEvent(const LLSD& userdata)
+	{
+		bool ui_hints_enabled = gSavedSettings.getBOOL("EnableUIHints");
+		if (ui_hints_enabled)
+		{
+			// hide existing hints
+			LLHints::hideAll();
+
+			gSavedSettings.setBOOL("EnableUIHints", FALSE);
+		}
+		else
+		{
+			gSavedSettings.setBOOL("EnableUIHints", TRUE);
+		}
+		return true;
+	}
+};
+
 void LLUploadCostCalculator::calculateCost()
 {
 	S32 upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload();
@@ -8220,4 +8241,5 @@ void initialize_menus()
 	view_listener_t::addMenu(new LLEditableSelected(), "EditableSelected");
 	view_listener_t::addMenu(new LLEditableSelectedMono(), "EditableSelectedMono");
 
+	view_listener_t::addMenu(new LLToggleUIHints(), "ToggleUIHints");
 }
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index 0b85074eb6..dbd24b6d59 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -945,6 +945,14 @@
              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
      label="Advanced"
-- 
cgit v1.2.3


From 7b0aeb9d41bb74b76694adc0f9b8bd794e0f5f8c Mon Sep 17 00:00:00 2001
From: callum <none@none>
Date: Mon, 13 Sep 2010 10:49:50 -0700
Subject: Revert reference in install.xml to LLQtWebKit back to version 4.6.0
 We were using 4.7.0 but this is not officially released for a week or two and
 we want to push this out to Snowstorm.

---
 install.xml | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/install.xml b/install.xml
index 062fe4cf6c..313e615699 100644
--- a/install.xml
+++ b/install.xml
@@ -955,9 +955,9 @@ anguage Infrstructure (CLI) international standard</string>
           <key>windows</key>
           <map>
             <key>md5sum</key>
-            <string>8c1cc187d6ac1f32a973c83b926d9e70</string>
-            <key>url</key>
-            <uri>http://viewer-source-downloads.s3.amazonaws.com/install_pkgs/llqtwebkit-windows-qt4.7.0.rc1-20100908.tar.bz2</uri>
+            <string>1591dab02d6135c204a7a31bf72d8ac1</string>
+             <key>url</key>
+            <uri>http://viewer-source-downloads.s3.amazonaws.com/install_pkgs/llqtwebkit-windows-qt4.6-20100809.tar.bz2</uri>
           </map>
         </map>
       </map>
-- 
cgit v1.2.3


From 22172ce23d4abe7b50dc17ea7a67ecf55a4cd5b8 Mon Sep 17 00:00:00 2001
From: callum <none@none>
Date: Mon, 13 Sep 2010 14:59:05 -0700
Subject: EXP-56 - viewer side of support for file picker dialog requirement.

---
 indra/llplugin/llpluginclassmedia.cpp              | 4 ++++
 indra/media_plugins/webkit/media_plugin_webkit.cpp | 7 +++++++
 2 files changed, 11 insertions(+)

diff --git a/indra/llplugin/llpluginclassmedia.cpp b/indra/llplugin/llpluginclassmedia.cpp
index 06ed632da8..dcbe97469b 100644
--- a/indra/llplugin/llpluginclassmedia.cpp
+++ b/indra/llplugin/llpluginclassmedia.cpp
@@ -957,6 +957,10 @@ void LLPluginClassMedia::receivePluginMessage(const LLPluginMessage &message)
 			mMediaName = message.getValue("name");
 			mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_NAME_CHANGED);
 		}
+		else if(message_name == "pick_file")
+		{
+			mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_PICK_FILE_REQUEST);
+		}
 		else
 		{
 			LL_WARNS("Plugin") << "Unknown " << message_name << " class message: " << message_name << LL_ENDL;
diff --git a/indra/media_plugins/webkit/media_plugin_webkit.cpp b/indra/media_plugins/webkit/media_plugin_webkit.cpp
index a7189cb610..a2b1ff019b 100644
--- a/indra/media_plugins/webkit/media_plugin_webkit.cpp
+++ b/indra/media_plugins/webkit/media_plugin_webkit.cpp
@@ -543,6 +543,13 @@ private:
 		LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "close_request");
 		sendMessage(message);
 	}
+
+	////////////////////////////////////////////////////////////////////////////////
+	// virtual
+	std::string onRequestFilePicker( const EventType& eventIn )
+	{
+		return blockingPickFile();
+	}
 	
 	LLQtWebKit::EKeyboardModifier decodeModifiers(std::string &modifiers)
 	{
-- 
cgit v1.2.3


From 238cbcd7900615a22db629ed0032acab06220b68 Mon Sep 17 00:00:00 2001
From: callum <none@none>
Date: Mon, 13 Sep 2010 16:15:08 -0700
Subject: EXP-56 - Final piece of this task -refer to new LLQtWebKit in the
 viewer. (Windows version)

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

diff --git a/install.xml b/install.xml
index 313e615699..ff3ec6d9ab 100644
--- a/install.xml
+++ b/install.xml
@@ -955,9 +955,9 @@ anguage Infrstructure (CLI) international standard</string>
           <key>windows</key>
           <map>
             <key>md5sum</key>
-            <string>1591dab02d6135c204a7a31bf72d8ac1</string>
+            <string>b21f10e0010c439e474f42bd49871947</string>
              <key>url</key>
-            <uri>http://viewer-source-downloads.s3.amazonaws.com/install_pkgs/llqtwebkit-windows-qt4.6-20100809.tar.bz2</uri>
+            <uri>http://viewer-source-downloads.s3.amazonaws.com/install_pkgs/llqtwebkit-windows-qt4.6-20100913.tar.bz2</uri>
           </map>
         </map>
       </map>
-- 
cgit v1.2.3


From 8348dae46ffc053b3f638c6342a641cda5e6ea22 Mon Sep 17 00:00:00 2001
From: Richard Nelson <none@none>
Date: Tue, 14 Sep 2010 10:46:49 -0700
Subject: added non-const accessor to Multiple<T> containers, might need to
 revert

---
 indra/llxuixml/llinitparam.h | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/indra/llxuixml/llinitparam.h b/indra/llxuixml/llinitparam.h
index 60b14d9a90..2d281dd0b8 100644
--- a/indra/llxuixml/llinitparam.h
+++ b/indra/llxuixml/llinitparam.h
@@ -1027,6 +1027,7 @@ namespace LLInitParam
 		operator value_assignment_t() const { return self_t::get(); } 
 		// explicit conversion
 		value_assignment_t operator()() const { return get(); } 
+		container_t& operator()() { return mValues; }
 
 		U32 numValidElements() const
 		{
@@ -1210,6 +1211,7 @@ namespace LLInitParam
 		operator value_assignment_t() const { return self_t::get(); } 
 		// explicit conversion
 		value_assignment_t operator()() const { return get(); } 
+		container_t& operator()() { return mValues; }
 
 		U32 numValidElements() const
 		{
-- 
cgit v1.2.3


From 369d12bcfb9e12799509a70566e1220d04d0e189 Mon Sep 17 00:00:00 2001
From: Richard Nelson <none@none>
Date: Tue, 14 Sep 2010 10:47:43 -0700
Subject: fixed text contents parsing for LLSimpleXUIParser...each contiguous
 range of text is submitted as a new "value" element whenever an open/close
 tag is encountered

---
 indra/llxuixml/llxuiparser.cpp | 12 +++++++++---
 indra/llxuixml/llxuiparser.h   |  1 +
 2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/indra/llxuixml/llxuiparser.cpp b/indra/llxuixml/llxuiparser.cpp
index afc9b38246..e1ad9a5c71 100644
--- a/indra/llxuixml/llxuiparser.cpp
+++ b/indra/llxuixml/llxuiparser.cpp
@@ -1145,6 +1145,8 @@ void LLSimpleXUIParser::characterDataHandler(void *userData, const char *s, int
 
 void LLSimpleXUIParser::startElement(const char *name, const char **atts)
 {
+	processText();
+
 	typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
 	boost::char_separator<char> sep(".");
 
@@ -1238,8 +1240,7 @@ bool LLSimpleXUIParser::readAttributes(const char **atts)
 	return any_parsed;
 }
 
-
-void LLSimpleXUIParser::endElement(const char *name)
+void LLSimpleXUIParser::processText()
 {
 	if (!mTextContents.empty())
 	{
@@ -1250,9 +1251,14 @@ void LLSimpleXUIParser::endElement(const char *name)
 			mCurAttributeValueBegin = mTextContents.c_str();
 			mOutputStack.back().first->submitValue(mNameStack, *this, mParseSilently);
 			mNameStack.pop_back();
-			mTextContents.clear();
 		}
+		mTextContents.clear();
 	}
+}
+
+void LLSimpleXUIParser::endElement(const char *name)
+{
+	processText();
 
 	if (--mOutputStack.back().second == 0)
 	{
diff --git a/indra/llxuixml/llxuiparser.h b/indra/llxuixml/llxuiparser.h
index 2522128e03..5c613b0c69 100644
--- a/indra/llxuixml/llxuiparser.h
+++ b/indra/llxuixml/llxuiparser.h
@@ -218,6 +218,7 @@ private:
 	void endElement(const char *name);
 	void characterData(const char *s, int len);
 	bool readAttributes(const char **atts);
+	void processText();
 
 	Parser::name_stack_t			mNameStack;
 	struct XML_ParserStruct*		mParser;
-- 
cgit v1.2.3


From 144e14521b432205c4d3592facf61627f4f5419c Mon Sep 17 00:00:00 2001
From: Richard Nelson <none@none>
Date: Tue, 14 Sep 2010 10:52:39 -0700
Subject: EXP-29 WIP Added popup blocking notification

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

diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 47bb0fe45b..77b3122fb0 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -723,7 +723,7 @@ You need an account to enter [SECOND_LIFE]. Would you like to create one now?
     <url
 	option="0"
 	name="url"
-	openexternally = "1">
+	target = "_external">
 
 			http://join.secondlife.com/
     </url>
@@ -6453,6 +6453,24 @@ Mute everyone?
     <unique/>
   </notification>
 
+  <notification
+  name="PopupAttempt"
+  type="browser">
+    A pop-up was prevented from opening.
+    <unique/>
+    <form name="form">
+      <ignore name="ignore"
+       text="Enable all pop-ups"/>
+      <button default="true"
+              index="0"
+              name="open"
+              text="Open pop-up window"/>
+    </form>
+
+
+  </notification>
+
+  
   <global name="UnsupportedCPU">
 - Your CPU speed does not meet the minimum requirements.
   </global>
-- 
cgit v1.2.3


From 1ad5663463721c4bca6ca8e91b9894226e999cca Mon Sep 17 00:00:00 2001
From: Richard Nelson <none@none>
Date: Tue, 14 Sep 2010 10:53:05 -0700
Subject: converted notifications.xml to paramblock parsing for easier reuse
 and extension

---
 indra/llui/llnotifications.cpp | 654 ++++++++++++++++++++++++++++-------------
 indra/llui/llnotifications.h   |  30 +-
 2 files changed, 464 insertions(+), 220 deletions(-)

diff --git a/indra/llui/llnotifications.cpp b/indra/llui/llnotifications.cpp
index 7dba53e746..3baf8d4f7b 100644
--- a/indra/llui/llnotifications.cpp
+++ b/indra/llui/llnotifications.cpp
@@ -44,6 +44,229 @@
 
 const std::string NOTIFICATION_PERSIST_VERSION = "0.93";
 
+void NotificationPriorityValues::declareValues()
+{
+	declare("low", NOTIFICATION_PRIORITY_LOW);
+	declare("normal", NOTIFICATION_PRIORITY_NORMAL);
+	declare("high", NOTIFICATION_PRIORITY_HIGH);
+	declare("critical", NOTIFICATION_PRIORITY_CRITICAL);
+}
+
+
+namespace LLNotificationTemplateParams
+{
+	using namespace LLInitParam;
+
+	struct GlobalString : public Block<GlobalString>
+	{
+		Mandatory<std::string>	name,
+								value;
+
+		GlobalString()
+		:	name("name"),
+			value("value")
+		{}
+	};
+
+	struct UniquenessContext : public Block<UniquenessContext>
+	{
+		Mandatory<std::string>	key;
+
+		UniquenessContext()
+		:	key("key")
+		{}
+		
+	};
+
+	struct UniquenessConstraint : public Block<UniquenessConstraint>
+	{
+		Multiple<UniquenessContext>	contexts;
+
+		UniquenessConstraint()
+		:	contexts("context")
+		{}
+	};
+
+	struct FormElementBase : public Block<FormElementBase>
+	{
+		Mandatory<std::string>	name;
+		FormElementBase()
+		:	name("name")
+		{}
+	};
+
+	struct FormIgnore : public Block<FormIgnore, FormElementBase>
+	{
+		Optional<std::string>	text;
+		Optional<bool>			save_option;
+
+		FormIgnore()
+		:	text("text"),
+			save_option("save_option", false)
+		{}
+	};
+
+	struct FormButton : public Block<FormButton, FormElementBase>
+	{
+		Mandatory<S32>			index;
+		Mandatory<std::string>	text;
+		Optional<std::string>	ignore;
+		Optional<bool>			is_default;
+
+		FormButton()
+		:	index("index"),
+			text("text"),
+			ignore("ignore"),
+			is_default("default")
+		{}
+	};
+
+	struct FormInput : public Block<FormInput, FormElementBase>
+	{
+		Mandatory<std::string>	type;
+		Optional<S32>			width;
+
+		FormInput()
+		:	type("type"),
+			width("width", 0)
+		{}
+	};
+
+	struct FormElement : public Choice<FormElement>
+	{
+		Alternative<FormButton> button;
+		Alternative<FormInput>	input;
+
+		FormElement()
+		:	button("button"),
+			input("input")
+		{}
+	};
+
+	struct Form : public Block<Form>
+	{
+		Optional<std::string>	name;
+		Optional<FormIgnore>	ignore;
+		Multiple<FormElement>	form_elements;
+
+		Form()
+		:	name("form"),
+			ignore("ignore"),
+			form_elements("")
+		{}
+	};
+
+	// Templates are used to define common form types, such as OK/Cancel dialogs, etc.
+
+	struct Template : public Block<Template>
+	{
+		Mandatory<std::string>	name;
+		Mandatory<Form>			form;
+
+		Template()
+		:	name("name"),
+			form("form")
+		{}
+	};
+
+	// Reference a template to use its form elements
+	struct TemplateRef : public Block<TemplateRef>
+	{
+		Mandatory<std::string>	name;
+		Optional<std::string>	yes_text,
+								no_text,
+								cancel_text,
+								ignore_text;
+
+		TemplateRef()
+		:	name("name"),
+			yes_text("yestext"),
+			no_text("notext"),
+			cancel_text("canceltext"),
+			ignore_text("ignoretext")
+		{}
+	};
+
+	struct URL : public Block<URL>
+	{
+		Mandatory<S32>			option;
+		Mandatory<std::string>	value;
+		Optional<std::string>	target;
+		Ignored					name;
+
+		URL()
+		:	option("option", -1),
+			value("value"),
+			target("target", "_blank"),
+			name("name")
+		{}
+	};
+
+	struct FormRef : public Choice<FormRef>
+	{
+		Alternative<Form>			form;
+		Alternative<TemplateRef>	form_template;
+
+		FormRef()
+		:	form("form"),
+			form_template("use_template")
+		{}
+	};
+
+	struct Notification : public Block<Notification>
+	{
+		Mandatory<std::string>			name;
+		Optional<bool>					persist;
+		Optional<std::string>			functor,
+										icon,
+										label,
+										sound,
+										type,
+										value;
+		Optional<U32>					duration;
+		Optional<S32>					expire_option;
+		Optional<URL>					url;
+		Optional<TemplateRef>			use_template;
+		Optional<UniquenessConstraint>	unique;
+		Optional<FormRef>				form_ref;
+		Optional<ENotificationPriority, 
+			NotificationPriorityValues> priority;
+
+
+		Notification()
+		:	name("name"),
+			persist("persist", false),
+			functor("functor"),
+			icon("icon"),
+			label("label"),
+			priority("priority"),
+			sound("sound"),
+			type("type"),
+			value("value"),
+			duration("duration"),
+			expire_option("expireOption", -1),
+			url("url"),
+			use_template("usetemplate"),
+			unique("unique"),
+			form_ref("")
+		{}
+
+	};
+
+	struct Notifications : public Block<Notifications>
+	{
+		Multiple<GlobalString>	strings;
+		Multiple<Template>		templates;
+		Multiple<Notification>	notifications;
+
+		Notifications()
+		:	strings("global"),
+			notifications("notification"),
+			templates("template")
+		{}
+	};
+}
+
 // Local channel for persistent notifications
 // Stores only persistent notifications.
 // Class users can use connectChanged() to process persistent notifications
@@ -141,57 +364,31 @@ LLNotificationForm::LLNotificationForm()
 }
 
 
-LLNotificationForm::LLNotificationForm(const std::string& name, const LLXMLNodePtr xml_node) 
+LLNotificationForm::LLNotificationForm(const std::string& name, const LLNotificationTemplateParams::Form& p) 
 :	mFormData(LLSD::emptyArray()),
 	mIgnore(IGNORE_NO)
 {
-	if (!xml_node->hasName("form"))
-	{
-		llwarns << "Bad xml node for form: " << xml_node->getName() << llendl;
-	}
-	LLXMLNodePtr child = xml_node->getFirstChild();
-	while(child)
+	if (p.ignore.isProvided())
 	{
-		child = LLNotifications::instance().checkForXMLTemplate(child);
+		mIgnoreMsg = p.ignore.text;
 
-		LLSD item_entry;
-		std::string element_name = child->getName()->mString;
-
-		if (element_name == "ignore" )
+		if (!p.ignore.save_option)
 		{
-			bool save_option = false;
-			child->getAttribute_bool("save_option", save_option);
-			if (!save_option)
-			{
-				mIgnore = IGNORE_WITH_DEFAULT_RESPONSE;
-			}
-			else
-			{
-				// remember last option chosen by user and automatically respond with that in the future
-				mIgnore = IGNORE_WITH_LAST_RESPONSE;
-				LLUI::sSettingGroups["ignores"]->declareLLSD(std::string("Default") + name, "", std::string("Default response for notification " + name));
-			}
-			child->getAttributeString("text", mIgnoreMsg);
-			BOOL show_notification = TRUE;
-			LLUI::sSettingGroups["ignores"]->declareBOOL(name, show_notification, "Ignore notification with this name", TRUE);
+			mIgnore = IGNORE_WITH_DEFAULT_RESPONSE;
 		}
 		else
 		{
-			// flatten xml form entry into single LLSD map with type==name
-			item_entry["type"] = element_name;
-			const LLXMLAttribList::iterator attrib_end = child->mAttributes.end();
-			for(LLXMLAttribList::iterator attrib_it = child->mAttributes.begin();
-				attrib_it != attrib_end;
-				++attrib_it)
-			{
-				item_entry[std::string(attrib_it->second->getName()->mString)] = attrib_it->second->getValue();
-			}
-			item_entry["value"] = child->getTextContents();
-			mFormData.append(item_entry);
+			// remember last option chosen by user and automatically respond with that in the future
+			mIgnore = IGNORE_WITH_LAST_RESPONSE;
+			LLUI::sSettingGroups["ignores"]->declareLLSD(std::string("Default") + name, "", std::string("Default response for notification " + name));
 		}
 
-		child = child->getNextSibling();
+		BOOL show_notification = TRUE;
+		LLUI::sSettingGroups["ignores"]->declareBOOL(name, show_notification, "Ignore notification with this name", TRUE);
 	}
+
+	// TODO: serialize params.form_elements to mFormData
+	//mFormData.append(item_entry);
 }
 
 LLNotificationForm::LLNotificationForm(const LLSD& sd)
@@ -293,16 +490,37 @@ std::string LLNotificationForm::getDefaultOption()
 	return "";
 }
 
-LLNotificationTemplate::LLNotificationTemplate() :
-	mExpireSeconds(0),
-	mExpireOption(-1),
-	mURLOption(-1),
-	mURLOpenExternally(-1),
-	mPersist(false),
-	mUnique(false),
-	mPriority(NOTIFICATION_PRIORITY_NORMAL)
+LLNotificationTemplate::LLNotificationTemplate(const LLNotificationTemplateParams::Notification& p)
+:	mName(p.name),
+	mType(p.type),
+	mMessage(p.value),
+	mLabel(p.label),
+	mIcon(p.icon),
+	mURL(p.url.value),
+	mExpireSeconds(p.duration),
+	mExpireOption(p.expire_option),
+	mURLOption(p.url.option),
+	mURLTarget(p.url.target),
+	mUnique(p.unique.isProvided()),
+	mPriority(p.priority),
+	mPersist(p.persist),
+	mDefaultFunctor(p.functor.isProvided() ? p.functor() : p.name())
 {
-	mForm = LLNotificationFormPtr(new LLNotificationForm()); 
+	if (p.sound.isProvided()
+		&& LLUI::sSettingGroups["config"]->controlExists(p.sound))
+	{
+		mSoundEffect = LLUUID(LLUI::sSettingGroups["config"]->getString(p.sound));
+	}
+
+	for(LLInitParam::ParamIterator<LLNotificationTemplateParams::UniquenessContext>::const_iterator it = p.unique.contexts().begin(),
+			end_it = p.unique.contexts().end();
+		it != end_it;
+		++it)
+	{
+		mUniqueContext.push_back(it->key);
+	}
+
+	mForm = LLNotificationFormPtr(new LLNotificationForm(p.name, p.form_ref.form));
 }
 
 LLNotification::LLNotification(const LLNotification::Params& p) : 
@@ -1095,11 +1313,6 @@ bool LLNotifications::templateExists(const std::string& name)
 	return (mTemplates.count(name) != 0);
 }
 
-void LLNotifications::clearTemplates()
-{
-	mTemplates.clear();
-}
-
 void LLNotifications::forceResponse(const LLNotification::Params& params, S32 option)
 {
 	LLNotificationPtr temp_notify(new LLNotification(params));
@@ -1162,185 +1375,210 @@ void replaceSubstitutionStrings(LLXMLNodePtr node, StringMap& replacements)
 	}
 }
 
-// private to this file
-// returns true if the template request was invalid and there's nothing else we
-// can do with this node, false if you should keep processing (it may have
-// replaced the contents of the node referred to)
-LLXMLNodePtr LLNotifications::checkForXMLTemplate(LLXMLNodePtr item)
+void replaceFormText(LLNotificationTemplateParams::Form& form, const std::string& pattern, const std::string& replace)
 {
-	if (item->hasName("usetemplate"))
+	if (form.ignore.isProvided() && form.ignore.text() == pattern)
+	{
+		form.ignore.text = replace;
+	}
+	for (LLInitParam::ParamIterator<LLNotificationTemplateParams::FormElement>::iterator it = form.form_elements().begin(),
+			end_it = form.form_elements().end();
+		it != end_it;
+		++it)
 	{
-		std::string replacementName;
-		if (item->getAttributeString("name", replacementName))
+		if (it->button.isChosen() && it->button.text() == pattern)
 		{
-			StringMap replacements;
-			for (LLXMLAttribList::const_iterator it=item->mAttributes.begin(); 
-				 it != item->mAttributes.end(); ++it)
-			{
-				replacements[it->second->getName()->mString] = it->second->getValue();
-			}
-			if (mXmlTemplates.count(replacementName))
-			{
-				item=LLXMLNode::replaceNode(item, mXmlTemplates[replacementName]);
-				
-				// walk the nodes looking for $(substitution) here and replace
-				replaceSubstitutionStrings(item, replacements);
-			}
-			else
-			{
-				llwarns << "XML template lookup failure on '" << replacementName << "' " << llendl;
-			}
+			it->button.text = replace;
 		}
 	}
-	return item;
 }
 
 bool LLNotifications::loadTemplates()
 {
 	const std::string xml_filename = "notifications.xml";
-	LLXMLNodePtr root;
-	
-	BOOL success  = LLUICtrlFactory::getLayeredXMLNode(xml_filename, root);
-	
-	if (!success || root.isNull() || !root->hasName( "notifications" ))
+
+	std::string full_filename = gDirUtilp->findSkinnedFilename(LLUI::getXUIPaths().front(), xml_filename);
+	LLNotificationTemplateParams::Notifications params;
+	LLSimpleXUIParser parser;
+	parser.readXUI(full_filename, params);
+
+	mTemplates.clear();
+
+	for(LLInitParam::ParamIterator<LLNotificationTemplateParams::GlobalString>::const_iterator it = params.strings().begin(), end_it = params.strings().end();
+		it != end_it;
+		++it)
 	{
-		llerrs << "Problem reading UI Notifications file: " << xml_filename << llendl;
-		return false;
+		mGlobalStrings[it->name] = it->value;
 	}
-	
-	clearTemplates();
-	
-	for (LLXMLNodePtr item = root->getFirstChild();
-		 item.notNull(); item = item->getNextSibling())
-	{
-		// we do this FIRST so that item can be changed if we 
-		// encounter a usetemplate -- we just replace the
-		// current xml node and keep processing
-		item = checkForXMLTemplate(item);
-		
-		if (item->hasName("global"))
-		{
-			std::string global_name;
-			if (item->getAttributeString("name", global_name))
-			{
-				mGlobalStrings[global_name] = item->getTextContents();
-			}
-			continue;
-		}
-		
-		if (item->hasName("template"))
-		{
-			// store an xml template; templates must have a single node (can contain
-			// other nodes)
-			std::string name;
-			item->getAttributeString("name", name);
-			LLXMLNodePtr ptr = item->getFirstChild();
-			mXmlTemplates[name] = ptr;
-			continue;
-		}
-		
-		if (!item->hasName("notification"))
-		{
-            llwarns << "Unexpected entity " << item->getName()->mString << 
-                       " found in " << xml_filename << llendl;
-			continue;
-		}
-		
-		// now we know we have a notification entry, so let's build it
-		LLNotificationTemplatePtr pTemplate(new LLNotificationTemplate());
 
-		if (!item->getAttributeString("name", pTemplate->mName))
-		{
-			llwarns << "Unable to parse notification with no name" << llendl;
-			continue;
-		}
-		
-		//llinfos << "Parsing " << pTemplate->mName << llendl;
-		
-		pTemplate->mMessage = item->getTextContents();
-		pTemplate->mDefaultFunctor = pTemplate->mName;
-		item->getAttributeString("type", pTemplate->mType);
-		item->getAttributeString("icon", pTemplate->mIcon);
-		item->getAttributeString("label", pTemplate->mLabel);
-		item->getAttributeU32("duration", pTemplate->mExpireSeconds);
-		item->getAttributeU32("expireOption", pTemplate->mExpireOption);
-
-		std::string priority;
-		item->getAttributeString("priority", priority);
-		pTemplate->mPriority = NOTIFICATION_PRIORITY_NORMAL;
-		if (!priority.empty())
-		{
-			if (priority == "low")      pTemplate->mPriority = NOTIFICATION_PRIORITY_LOW;
-			if (priority == "normal")   pTemplate->mPriority = NOTIFICATION_PRIORITY_NORMAL;
-			if (priority == "high")     pTemplate->mPriority = NOTIFICATION_PRIORITY_HIGH;
-			if (priority == "critical") pTemplate->mPriority = NOTIFICATION_PRIORITY_CRITICAL;
-		}
-		
-		item->getAttributeString("functor", pTemplate->mDefaultFunctor);
+	std::map<std::string, LLNotificationTemplateParams::Form> form_templates;
 
-		BOOL persist = false;
-		item->getAttributeBOOL("persist", persist);
-		pTemplate->mPersist = persist;
-		
-		std::string sound;
-		item->getAttributeString("sound", sound);
-		if (!sound.empty())
+	for(LLInitParam::ParamIterator<LLNotificationTemplateParams::Template>::const_iterator it = params.templates().begin(), end_it = params.templates().end();
+		it != end_it;
+		++it)
+	{
+		form_templates[it->name] = it->form;
+	}
+
+	for(LLInitParam::ParamIterator<LLNotificationTemplateParams::Notification>::iterator it = params.notifications().begin(), end_it = params.notifications().end();
+		it != end_it;
+		++it)
+	{
+		if (it->form_ref.form_template.isChosen())
 		{
-			// test for bad sound effect name / missing effect
-			if (LLUI::sSettingGroups["config"]->controlExists(sound))
+			// replace form contents from template
+			it->form_ref.form = form_templates[it->form_ref.form_template.name];
+			if(it->form_ref.form_template.yes_text.isProvided())
 			{
-				pTemplate->mSoundEffect = 
-					LLUUID(LLUI::sSettingGroups["config"]->getString(sound));
+				replaceFormText(it->form_ref.form, "$yestext", it->form_ref.form_template.yes_text);
 			}
-			else
+			if(it->form_ref.form_template.no_text.isProvided())
 			{
-				llwarns << "Unknown sound effect control name " << sound
-					<< llendl;
+				replaceFormText(it->form_ref.form, "$notext", it->form_ref.form_template.no_text);
 			}
-		}
-
-		for (LLXMLNodePtr child = item->getFirstChild();
-			 !child.isNull(); child = child->getNextSibling())
-		{
-			child = checkForXMLTemplate(child);
-			
-			// <url>
-			if (child->hasName("url"))
+			if(it->form_ref.form_template.cancel_text.isProvided())
 			{
-				pTemplate->mURL = child->getTextContents();
-				child->getAttributeU32("option", pTemplate->mURLOption);
-				child->getAttributeU32("openexternally", pTemplate->mURLOpenExternally);
+				replaceFormText(it->form_ref.form, "$cancel_text", it->form_ref.form_template.cancel_text);
 			}
-			
-            if (child->hasName("unique"))
-            {
-                pTemplate->mUnique = true;
-                for (LLXMLNodePtr formitem = child->getFirstChild();
-                     !formitem.isNull(); formitem = formitem->getNextSibling())
-                {
-                    if (formitem->hasName("context"))
-                    {
-                        std::string key;
-                        formitem->getAttributeString("key", key);
-                        pTemplate->mUniqueContext.push_back(key);
-                        //llwarns << "adding " << key << " to unique context" << llendl;
-                    }
-                    else
-                    {
-                        llwarns << "'unique' has unrecognized subelement " 
-                        << formitem->getName()->mString << llendl;
-                    }
-                }
-            }
-            
-			// <form>
-			if (child->hasName("form"))
+			if(it->form_ref.form_template.ignore_text.isProvided())
 			{
-                pTemplate->mForm = LLNotificationFormPtr(new LLNotificationForm(pTemplate->mName, child));
+				replaceFormText(it->form_ref.form, "$ignore_text", it->form_ref.form_template.ignore_text);
 			}
 		}
-		addTemplate(pTemplate->mName, pTemplate);
-	}
+		addTemplate(it->name, LLNotificationTemplatePtr(new LLNotificationTemplate(*it)));
+	}
+
+	//for (LLXMLNodePtr item = root->getFirstChild();
+	//	 item.notNull(); item = item->getNextSibling())
+	//{
+	//	// we do this FIRST so that item can be changed if we 
+	//	// encounter a usetemplate -- we just replace the
+	//	// current xml node and keep processing
+	//	item = checkForXMLTemplate(item);
+	//	
+	//	if (item->hasName("global"))
+	//	{
+	//		std::string global_name;
+	//		if (item->getAttributeString("name", global_name))
+	//		{
+	//			mGlobalStrings[global_name] = item->getTextContents();
+	//		}
+	//		continue;
+	//	}
+	//	
+	//	if (item->hasName("template"))
+	//	{
+	//		// store an xml template; templates must have a single node (can contain
+	//		// other nodes)
+	//		std::string name;
+	//		item->getAttributeString("name", name);
+	//		LLXMLNodePtr ptr = item->getFirstChild();
+	//		mXmlTemplates[name] = ptr;
+	//		continue;
+	//	}
+	//	
+	//	if (!item->hasName("notification"))
+	//	{
+ //           llwarns << "Unexpected entity " << item->getName()->mString << 
+ //                      " found in " << xml_filename << llendl;
+	//		continue;
+	//	}
+	//	
+	//	// now we know we have a notification entry, so let's build it
+	//	LLNotificationTemplatePtr pTemplate(new LLNotificationTemplate());
+
+	//	if (!item->getAttributeString("name", pTemplate->mName))
+	//	{
+	//		llwarns << "Unable to parse notification with no name" << llendl;
+	//		continue;
+	//	}
+	//	
+	//	//llinfos << "Parsing " << pTemplate->mName << llendl;
+	//	
+	//	pTemplate->mMessage = item->getTextContents();
+	//	pTemplate->mDefaultFunctor = pTemplate->mName;
+	//	item->getAttributeString("type", pTemplate->mType);
+	//	item->getAttributeString("icon", pTemplate->mIcon);
+	//	item->getAttributeString("label", pTemplate->mLabel);
+	//	item->getAttributeU32("duration", pTemplate->mExpireSeconds);
+	//	item->getAttributeU32("expireOption", pTemplate->mExpireOption);
+
+	//	std::string priority;
+	//	item->getAttributeString("priority", priority);
+	//	pTemplate->mPriority = NOTIFICATION_PRIORITY_NORMAL;
+	//	if (!priority.empty())
+	//	{
+	//		if (priority == "low")      pTemplate->mPriority = NOTIFICATION_PRIORITY_LOW;
+	//		if (priority == "normal")   pTemplate->mPriority = NOTIFICATION_PRIORITY_NORMAL;
+	//		if (priority == "high")     pTemplate->mPriority = NOTIFICATION_PRIORITY_HIGH;
+	//		if (priority == "critical") pTemplate->mPriority = NOTIFICATION_PRIORITY_CRITICAL;
+	//	}
+	//	
+	//	item->getAttributeString("functor", pTemplate->mDefaultFunctor);
+
+	//	BOOL persist = false;
+	//	item->getAttributeBOOL("persist", persist);
+	//	pTemplate->mPersist = persist;
+	//	
+	//	std::string sound;
+	//	item->getAttributeString("sound", sound);
+	//	if (!sound.empty())
+	//	{
+	//		// test for bad sound effect name / missing effect
+	//		if (LLUI::sSettingGroups["config"]->controlExists(sound))
+	//		{
+	//			pTemplate->mSoundEffect = 
+	//				LLUUID(LLUI::sSettingGroups["config"]->getString(sound));
+	//		}
+	//		else
+	//		{
+	//			llwarns << "Unknown sound effect control name " << sound
+	//				<< llendl;
+	//		}
+	//	}
+
+	//	for (LLXMLNodePtr child = item->getFirstChild();
+	//		 !child.isNull(); child = child->getNextSibling())
+	//	{
+	//		child = checkForXMLTemplate(child);
+	//		
+	//		// <url>
+	//		if (child->hasName("url"))
+	//		{
+	//			pTemplate->mURL = child->getTextContents();
+	//			child->getAttributeU32("option", pTemplate->mURLOption);
+	//			child->getAttributeU32("openexternally", pTemplate->mURLOpenExternally);
+	//		}
+	//		
+ //           if (child->hasName("unique"))
+ //           {
+ //               pTemplate->mUnique = true;
+ //               for (LLXMLNodePtr formitem = child->getFirstChild();
+ //                    !formitem.isNull(); formitem = formitem->getNextSibling())
+ //               {
+ //                   if (formitem->hasName("context"))
+ //                   {
+ //                       std::string key;
+ //                       formitem->getAttributeString("key", key);
+ //                       pTemplate->mUniqueContext.push_back(key);
+ //                       //llwarns << "adding " << key << " to unique context" << llendl;
+ //                   }
+ //                   else
+ //                   {
+ //                       llwarns << "'unique' has unrecognized subelement " 
+ //                       << formitem->getName()->mString << llendl;
+ //                   }
+ //               }
+ //           }
+ //           
+	//		// <form>
+	//		if (child->hasName("form"))
+	//		{
+ //               pTemplate->mForm = LLNotificationFormPtr(new LLNotificationForm(pTemplate->mName, child));
+	//		}
+	//	}
+	//	addTemplate(pTemplate->mName, pTemplate);
+	//}
 	
 	//std::ostringstream ostream;
 	//root->writeToOstream(ostream, "\n  ");
diff --git a/indra/llui/llnotifications.h b/indra/llui/llnotifications.h
index 11adad8194..d20b65ee1b 100644
--- a/indra/llui/llnotifications.h
+++ b/indra/llui/llnotifications.h
@@ -110,6 +110,18 @@ typedef enum e_notification_priority
 	NOTIFICATION_PRIORITY_CRITICAL
 } ENotificationPriority;
 
+struct NotificationPriorityValues : public LLInitParam::TypeValuesHelper<ENotificationPriority, NotificationPriorityValues>
+{
+	static void declareValues();
+};
+
+namespace LLNotificationTemplateParams
+{
+	struct Notification;
+	struct Form;
+	struct Template;
+};
+
 class LLNotificationResponderInterface
 {
 public:
@@ -167,8 +179,7 @@ public:
 
 	LLNotificationForm();
 	LLNotificationForm(const LLSD& sd);
-	LLNotificationForm(const std::string& name, 
-		const LLPointer<class LLXMLNode> xml_node);
+	LLNotificationForm(const std::string& name, const LLNotificationTemplateParams::Form& p);
 
 	LLSD asLLSD() const;
 
@@ -193,11 +204,12 @@ private:
 
 typedef boost::shared_ptr<LLNotificationForm> LLNotificationFormPtr;
 
+
 // This is the class of object read from the XML file (notifications.xml, 
 // from the appropriate local language directory).
 struct LLNotificationTemplate
 {
-	LLNotificationTemplate();
+	LLNotificationTemplate(const LLNotificationTemplateParams::Notification& p);
     // the name of the notification -- the key used to identify it
     // Ideally, the key should follow variable naming rules 
     // (no spaces or punctuation).
@@ -247,7 +259,7 @@ struct LLNotificationTemplate
     // messages when we allow clickable URLs in the UI
     U32 mURLOption;
 	
-	U32 mURLOpenExternally;
+	std::string mURLTarget;
 	//This is a flag that tells if the url needs to open externally dispite 
 	//what the user setting is.
 	
@@ -302,7 +314,7 @@ public:
 		// optional
 		Optional<LLSD>							substitutions;
 		Optional<LLSD>							payload;
-		Optional<ENotificationPriority>			priority;
+		Optional<ENotificationPriority, NotificationPriorityValues>	priority;
 		Optional<LLSD>							form_elements;
 		Optional<LLDate>						time_stamp;
 		Optional<LLNotificationContext*>		context;
@@ -519,7 +531,7 @@ public:
     
 	S32 getURLOpenExternally() const
 	{
-		return(mTemplatep? mTemplatep->mURLOpenExternally : -1);
+		return(mTemplatep? mTemplatep->mURLTarget == "_external": -1);
 	}
 	
 	const LLNotificationFormPtr getForm();
@@ -872,7 +884,6 @@ public:
 	// load notification descriptions from file; 
 	// OK to call more than once because it will reload
 	bool loadTemplates();  
-	LLPointer<class LLXMLNode> checkForXMLTemplate(LLPointer<class LLXMLNode> item);
 	
 	// Add a simple notification (from XUI)
 	void addFromCallback(const LLSD& name);
@@ -918,8 +929,6 @@ public:
 
 	// test for existence
 	bool templateExists(const std::string& name);
-	// useful if you're reloading the file
-	void clearTemplates();   // erase all templates
 
 	void forceResponse(const LLNotification::Params& params, S32 option);
 
@@ -957,9 +966,6 @@ private:
 
 	std::string mFileName;
 	
-	typedef std::map<std::string, LLPointer<class LLXMLNode> > XMLTemplateMap;
-	XMLTemplateMap mXmlTemplates;
-
 	LLNotificationMap mUniqueNotifications;
 	
 	typedef std::map<std::string, std::string> GlobalStringMap;
-- 
cgit v1.2.3


From 3918b251e0f0405042ac8af6f5ff808bc2cc9553 Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Tue, 14 Sep 2010 20:10:18 -0700
Subject: implemented param block -> LLSD serialization

---
 indra/llui/llsdparam.cpp | 99 ++++++++++++++++++++++++++++++++++++++++++++++--
 indra/llui/llsdparam.h   |  5 ++-
 2 files changed, 98 insertions(+), 6 deletions(-)

diff --git a/indra/llui/llsdparam.cpp b/indra/llui/llsdparam.cpp
index bc1a0fd645..e3cadf4998 100644
--- a/indra/llui/llsdparam.cpp
+++ b/indra/llui/llsdparam.cpp
@@ -48,7 +48,7 @@ LLParamSDParser::LLParamSDParser()
 		registerParserFuncs<U32>(readU32, &LLParamSDParser::writeU32Param);
 		registerParserFuncs<F32>(readF32, &LLParamSDParser::writeTypedValue<F32>);
 		registerParserFuncs<F64>(readF64, &LLParamSDParser::writeTypedValue<F64>);
-		registerParserFuncs<bool>(readBool, &LLParamSDParser::writeTypedValue<F32>);
+		registerParserFuncs<bool>(readBool, &LLParamSDParser::writeTypedValue<bool>);
 		registerParserFuncs<std::string>(readString, &LLParamSDParser::writeTypedValue<std::string>);
 		registerParserFuncs<LLUUID>(readUUID, &LLParamSDParser::writeTypedValue<LLUUID>);
 		registerParserFuncs<LLDate>(readDate, &LLParamSDParser::writeTypedValue<LLDate>);
@@ -61,7 +61,7 @@ LLParamSDParser::LLParamSDParser()
 bool LLParamSDParser::writeU32Param(LLParamSDParser::parser_t& parser, const void* val_ptr, const parser_t::name_stack_t& name_stack)
 {
 	LLParamSDParser& sdparser = static_cast<LLParamSDParser&>(parser);
-	if (!sdparser.mWriteSD) return false;
+	if (!sdparser.mWriteRootSD) return false;
 	
 	LLSD* sd_to_write = sdparser.getSDWriteNode(name_stack);
 	if (!sd_to_write) return false;
@@ -81,7 +81,8 @@ void LLParamSDParser::readSD(const LLSD& sd, LLInitParam::BaseBlock& block, bool
 
 void LLParamSDParser::writeSD(LLSD& sd, const LLInitParam::BaseBlock& block)
 {
-	mWriteSD = &sd;
+	mNameStack.clear();
+	mWriteRootSD = &sd;
 	block.serializeBlock(*this);
 }
 
@@ -131,7 +132,97 @@ void LLParamSDParser::readSDValues(const LLSD& sd, LLInitParam::BaseBlock& block
 LLSD* LLParamSDParser::getSDWriteNode(const parser_t::name_stack_t& name_stack)
 {
 	//TODO: implement nested LLSD writing
-	return mWriteSD;
+	LLSD* sd_to_write = mWriteRootSD;
+	bool new_traversal = false;
+	for (name_stack_t::const_iterator it = name_stack.begin(), prev_it = mNameStack.begin();
+		it != name_stack.end();
+		++it)
+	{
+		bool new_array_entry = false;
+		if (prev_it == mNameStack.end())
+		{
+			new_traversal = true;
+		}
+		else
+		{
+			if (!new_traversal						// have not diverged yet from previous trace
+				&& prev_it->first == it->first		// names match
+				&& prev_it->second != it->second)	// versions differ
+			{
+				// name stacks match, but version numbers differ in last place.
+				// create a different entry at this point using an LLSD array
+				new_array_entry = true;
+			}
+			if (prev_it->first != it->first			// names differ
+				|| prev_it->second != it->second)	// versions differ
+			{
+				// at this point we have diverged from our last trace
+				// so any elements referenced here are new
+				new_traversal = true;
+			}
+		}
+
+		LLSD* child_sd = NULL;
+		if (it->first.empty())
+		{
+			if (sd_to_write->isUndefined())
+			{
+				*sd_to_write = LLSD::emptyArray();
+				child_sd = sd_to_write;
+			}
+			else if (sd_to_write->isArray())
+			{
+				child_sd = sd_to_write;
+			}
+			else
+			{
+				// go ahead and use the empty string as a map key
+				child_sd = &(*sd_to_write)[""];
+			}
+		}
+		else
+		{
+			child_sd = &(*sd_to_write)[it->first];
+		}
+
+		if (child_sd->isArray())
+		{
+			if (new_traversal)
+			{
+				// write to new element at end
+				sd_to_write = &(*child_sd)[child_sd->size()];
+			}
+			else
+			{
+				// write to last of existing elements, or first element if empty
+				sd_to_write = &(*child_sd)[llmax(0, child_sd->size() - 1)];
+			}
+		}
+		else
+		{
+			if (new_array_entry && !child_sd->isArray())
+			{
+				// copy child contents into first element of an array
+				LLSD new_array = LLSD::emptyArray();
+				new_array.append(*child_sd);
+				// assign array to slot that previously held the single value
+				*child_sd = new_array;
+				// return next element in that array
+				sd_to_write = &((*child_sd)[1]);
+			}
+			else
+			{
+				sd_to_write = child_sd;
+			}
+		}
+		if (prev_it != mNameStack.end())
+		{
+			++prev_it;
+		}
+	}
+	mNameStack = name_stack;
+	
+	return sd_to_write;
 }
 
 bool LLParamSDParser::readS32(Parser& parser, void* val_ptr)
diff --git a/indra/llui/llsdparam.h b/indra/llui/llsdparam.h
index bebf202b81..97e8b58e49 100644
--- a/indra/llui/llsdparam.h
+++ b/indra/llui/llsdparam.h
@@ -51,7 +51,7 @@ private:
 	static bool writeTypedValue(Parser& parser, const void* val_ptr, const parser_t::name_stack_t& name_stack)
 	{
 		LLParamSDParser& sdparser = static_cast<LLParamSDParser&>(parser);
-		if (!sdparser.mWriteSD) return false;
+		if (!sdparser.mWriteRootSD) return false;
 		
 		LLSD* sd_to_write = sdparser.getSDWriteNode(name_stack);
 		if (!sd_to_write) return false;
@@ -77,7 +77,8 @@ private:
 
 	Parser::name_stack_t	mNameStack;
 	const LLSD*				mCurReadSD;
-	LLSD*					mWriteSD;
+	LLSD*					mWriteRootSD;
+	LLSD*					mCurWriteSD;
 };
 
 template<typename T>
-- 
cgit v1.2.3


From 83e0ee0f3fa57ba0eb3cd69b334aec6554c1fdf6 Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Tue, 14 Sep 2010 20:10:44 -0700
Subject: fixed full path not appearing in debug output for param block errors
 by using full path for LLDir::mAppRODataDir

---
 indra/llvfs/lldir_win32.cpp | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/indra/llvfs/lldir_win32.cpp b/indra/llvfs/lldir_win32.cpp
index 8b1a2ddd3c..52d864e26f 100644
--- a/indra/llvfs/lldir_win32.cpp
+++ b/indra/llvfs/lldir_win32.cpp
@@ -116,10 +116,6 @@ LLDir_Win32::LLDir_Win32()
 	mExecutableDir = utf16str_to_utf8str(llutf16string(w_str));
 #endif
 
-	mAppRODataDir = ".";	
-
-	mSkinBaseDir = mAppRODataDir + mDirDelimiter + "skins";
-
 	if (mExecutableDir.find("indra") == std::string::npos)
 	{
 		// Running from installed directory.  Make sure current
@@ -129,8 +125,12 @@ LLDir_Win32::LLDir_Win32()
 		GetCurrentDirectory(MAX_PATH, w_str);
 		mWorkingDir = utf16str_to_utf8str(llutf16string(w_str));
 	}
+	mAppRODataDir = mWorkingDir;	
+
 	llinfos << "mAppRODataDir = " << mAppRODataDir << llendl;
 
+	mSkinBaseDir = mAppRODataDir + mDirDelimiter + "skins";
+
 	// Build the default cache directory
 	mDefaultCacheDir = buildSLOSCacheDir();
 	
-- 
cgit v1.2.3


From 2a81984363ca47365299da52f309532b18d77154 Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Tue, 14 Sep 2010 20:11:34 -0700
Subject: removed garbage from notifications.xml file

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

diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 77b3122fb0..4b11e68252 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -97,7 +97,7 @@
   </template>
 
   <notification
-   functor="GenericAcknowledge"
+ functor="GenericAcknowledge"
    icon="alertmodal.tga"
    name="MissingAlert"
    label="Unknown Notification Message"
@@ -6040,7 +6040,6 @@ One or more of your Voice Morphs will expire in less than [INTERVAL] days.
 [[URL] Click here] to renew your subscription.
     <unique/>
   </notification>
-		LLNotificationsUtil::add("VoiceEffectsNew");
 
   <notification
    icon="notify.tga"
-- 
cgit v1.2.3


From e0548d4c6f66b8236b1026f840fea37367325d95 Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Tue, 14 Sep 2010 20:11:58 -0700
Subject: finished notifications param block parsing logic

---
 indra/llui/llnotifications.cpp | 204 +++++++++++------------------------------
 1 file changed, 51 insertions(+), 153 deletions(-)

diff --git a/indra/llui/llnotifications.cpp b/indra/llui/llnotifications.cpp
index 3baf8d4f7b..cf93243eeb 100644
--- a/indra/llui/llnotifications.cpp
+++ b/indra/llui/llnotifications.cpp
@@ -37,6 +37,8 @@
 #include "lltrans.h"
 #include "llnotificationslistener.h"
 #include "llstring.h"
+#include "llsdparam.h"
+#include "llsdutil.h"
 
 #include <algorithm>
 #include <boost/regex.hpp>
@@ -90,6 +92,7 @@ namespace LLNotificationTemplateParams
 	struct FormElementBase : public Block<FormElementBase>
 	{
 		Mandatory<std::string>	name;
+
 		FormElementBase()
 		:	name("name")
 		{}
@@ -113,12 +116,18 @@ namespace LLNotificationTemplateParams
 		Optional<std::string>	ignore;
 		Optional<bool>			is_default;
 
+		Mandatory<std::string>	type;
+
 		FormButton()
 		:	index("index"),
 			text("text"),
 			ignore("ignore"),
-			is_default("default")
-		{}
+			is_default("default"),
+			type("type")
+		{
+			// set type here so it gets serialized
+			type = "button";
+		}
 	};
 
 	struct FormInput : public Block<FormInput, FormElementBase>
@@ -143,11 +152,19 @@ namespace LLNotificationTemplateParams
 		{}
 	};
 
+	struct FormElements : public Block<FormElements>
+	{
+		Multiple<FormElement> elements;
+		FormElements()
+		:	elements("")
+		{}
+	};
+
 	struct Form : public Block<Form>
 	{
 		Optional<std::string>	name;
 		Optional<FormIgnore>	ignore;
-		Multiple<FormElement>	form_elements;
+		Optional<FormElements>	form_elements;
 
 		Form()
 		:	name("form"),
@@ -209,7 +226,7 @@ namespace LLNotificationTemplateParams
 
 		FormRef()
 		:	form("form"),
-			form_template("use_template")
+			form_template("usetemplate")
 		{}
 	};
 
@@ -226,7 +243,6 @@ namespace LLNotificationTemplateParams
 		Optional<U32>					duration;
 		Optional<S32>					expire_option;
 		Optional<URL>					url;
-		Optional<TemplateRef>			use_template;
 		Optional<UniquenessConstraint>	unique;
 		Optional<FormRef>				form_ref;
 		Optional<ENotificationPriority, 
@@ -246,7 +262,6 @@ namespace LLNotificationTemplateParams
 			duration("duration"),
 			expire_option("expireOption", -1),
 			url("url"),
-			use_template("usetemplate"),
 			unique("unique"),
 			form_ref("")
 		{}
@@ -358,15 +373,13 @@ namespace LLNotificationFilters
 };
 
 LLNotificationForm::LLNotificationForm()
-:	mFormData(LLSD::emptyArray()),
-	mIgnore(IGNORE_NO)
+:	mIgnore(IGNORE_NO)
 {
 }
 
 
 LLNotificationForm::LLNotificationForm(const std::string& name, const LLNotificationTemplateParams::Form& p) 
-:	mFormData(LLSD::emptyArray()),
-	mIgnore(IGNORE_NO)
+:	mIgnore(IGNORE_NO)
 {
 	if (p.ignore.isProvided())
 	{
@@ -387,8 +400,20 @@ LLNotificationForm::LLNotificationForm(const std::string& name, const LLNotifica
 		LLUI::sSettingGroups["ignores"]->declareBOOL(name, show_notification, "Ignore notification with this name", TRUE);
 	}
 
-	// TODO: serialize params.form_elements to mFormData
-	//mFormData.append(item_entry);
+	LLParamSDParser parser;
+	parser.writeSD(mFormData, p.form_elements);
+
+	for (LLSD::array_iterator it = mFormData.beginArray(), end_it = mFormData.endArray();
+		it != end_it;
+		++it)
+	{
+		// lift contents of form element up a level, since element type is already encoded in "type" param
+		if (it->isMap() && it->beginMap() != it->endMap())
+		{
+			*it = it->beginMap()->second;
+		}
+	}
+	//llinfos << ll_pretty_print_sd(mFormData) << llendl;
 }
 
 LLNotificationForm::LLNotificationForm(const LLSD& sd)
@@ -1381,8 +1406,8 @@ void replaceFormText(LLNotificationTemplateParams::Form& form, const std::string
 	{
 		form.ignore.text = replace;
 	}
-	for (LLInitParam::ParamIterator<LLNotificationTemplateParams::FormElement>::iterator it = form.form_elements().begin(),
-			end_it = form.form_elements().end();
+	for (LLInitParam::ParamIterator<LLNotificationTemplateParams::FormElement>::iterator it = form.form_elements.elements().begin(),
+			end_it = form.form_elements.elements().end();
 		it != end_it;
 		++it)
 	{
@@ -1396,11 +1421,20 @@ void replaceFormText(LLNotificationTemplateParams::Form& form, const std::string
 bool LLNotifications::loadTemplates()
 {
 	const std::string xml_filename = "notifications.xml";
-
 	std::string full_filename = gDirUtilp->findSkinnedFilename(LLUI::getXUIPaths().front(), xml_filename);
+
+	LLXMLNodePtr root;
+	BOOL success  = LLUICtrlFactory::getLayeredXMLNode(xml_filename, root);
+	
+	if (!success || root.isNull() || !root->hasName( "notifications" ))
+	{
+		llerrs << "Problem reading UI Notifications file: " << full_filename << llendl;
+		return false;
+	}
+
 	LLNotificationTemplateParams::Notifications params;
-	LLSimpleXUIParser parser;
-	parser.readXUI(full_filename, params);
+	LLXUIParser parser;
+	parser.readXUI(root, params, full_filename);
 
 	mTemplates.clear();
 
@@ -1448,142 +1482,6 @@ bool LLNotifications::loadTemplates()
 		addTemplate(it->name, LLNotificationTemplatePtr(new LLNotificationTemplate(*it)));
 	}
 
-	//for (LLXMLNodePtr item = root->getFirstChild();
-	//	 item.notNull(); item = item->getNextSibling())
-	//{
-	//	// we do this FIRST so that item can be changed if we 
-	//	// encounter a usetemplate -- we just replace the
-	//	// current xml node and keep processing
-	//	item = checkForXMLTemplate(item);
-	//	
-	//	if (item->hasName("global"))
-	//	{
-	//		std::string global_name;
-	//		if (item->getAttributeString("name", global_name))
-	//		{
-	//			mGlobalStrings[global_name] = item->getTextContents();
-	//		}
-	//		continue;
-	//	}
-	//	
-	//	if (item->hasName("template"))
-	//	{
-	//		// store an xml template; templates must have a single node (can contain
-	//		// other nodes)
-	//		std::string name;
-	//		item->getAttributeString("name", name);
-	//		LLXMLNodePtr ptr = item->getFirstChild();
-	//		mXmlTemplates[name] = ptr;
-	//		continue;
-	//	}
-	//	
-	//	if (!item->hasName("notification"))
-	//	{
- //           llwarns << "Unexpected entity " << item->getName()->mString << 
- //                      " found in " << xml_filename << llendl;
-	//		continue;
-	//	}
-	//	
-	//	// now we know we have a notification entry, so let's build it
-	//	LLNotificationTemplatePtr pTemplate(new LLNotificationTemplate());
-
-	//	if (!item->getAttributeString("name", pTemplate->mName))
-	//	{
-	//		llwarns << "Unable to parse notification with no name" << llendl;
-	//		continue;
-	//	}
-	//	
-	//	//llinfos << "Parsing " << pTemplate->mName << llendl;
-	//	
-	//	pTemplate->mMessage = item->getTextContents();
-	//	pTemplate->mDefaultFunctor = pTemplate->mName;
-	//	item->getAttributeString("type", pTemplate->mType);
-	//	item->getAttributeString("icon", pTemplate->mIcon);
-	//	item->getAttributeString("label", pTemplate->mLabel);
-	//	item->getAttributeU32("duration", pTemplate->mExpireSeconds);
-	//	item->getAttributeU32("expireOption", pTemplate->mExpireOption);
-
-	//	std::string priority;
-	//	item->getAttributeString("priority", priority);
-	//	pTemplate->mPriority = NOTIFICATION_PRIORITY_NORMAL;
-	//	if (!priority.empty())
-	//	{
-	//		if (priority == "low")      pTemplate->mPriority = NOTIFICATION_PRIORITY_LOW;
-	//		if (priority == "normal")   pTemplate->mPriority = NOTIFICATION_PRIORITY_NORMAL;
-	//		if (priority == "high")     pTemplate->mPriority = NOTIFICATION_PRIORITY_HIGH;
-	//		if (priority == "critical") pTemplate->mPriority = NOTIFICATION_PRIORITY_CRITICAL;
-	//	}
-	//	
-	//	item->getAttributeString("functor", pTemplate->mDefaultFunctor);
-
-	//	BOOL persist = false;
-	//	item->getAttributeBOOL("persist", persist);
-	//	pTemplate->mPersist = persist;
-	//	
-	//	std::string sound;
-	//	item->getAttributeString("sound", sound);
-	//	if (!sound.empty())
-	//	{
-	//		// test for bad sound effect name / missing effect
-	//		if (LLUI::sSettingGroups["config"]->controlExists(sound))
-	//		{
-	//			pTemplate->mSoundEffect = 
-	//				LLUUID(LLUI::sSettingGroups["config"]->getString(sound));
-	//		}
-	//		else
-	//		{
-	//			llwarns << "Unknown sound effect control name " << sound
-	//				<< llendl;
-	//		}
-	//	}
-
-	//	for (LLXMLNodePtr child = item->getFirstChild();
-	//		 !child.isNull(); child = child->getNextSibling())
-	//	{
-	//		child = checkForXMLTemplate(child);
-	//		
-	//		// <url>
-	//		if (child->hasName("url"))
-	//		{
-	//			pTemplate->mURL = child->getTextContents();
-	//			child->getAttributeU32("option", pTemplate->mURLOption);
-	//			child->getAttributeU32("openexternally", pTemplate->mURLOpenExternally);
-	//		}
-	//		
- //           if (child->hasName("unique"))
- //           {
- //               pTemplate->mUnique = true;
- //               for (LLXMLNodePtr formitem = child->getFirstChild();
- //                    !formitem.isNull(); formitem = formitem->getNextSibling())
- //               {
- //                   if (formitem->hasName("context"))
- //                   {
- //                       std::string key;
- //                       formitem->getAttributeString("key", key);
- //                       pTemplate->mUniqueContext.push_back(key);
- //                       //llwarns << "adding " << key << " to unique context" << llendl;
- //                   }
- //                   else
- //                   {
- //                       llwarns << "'unique' has unrecognized subelement " 
- //                       << formitem->getName()->mString << llendl;
- //                   }
- //               }
- //           }
- //           
-	//		// <form>
-	//		if (child->hasName("form"))
-	//		{
- //               pTemplate->mForm = LLNotificationFormPtr(new LLNotificationForm(pTemplate->mName, child));
-	//		}
-	//	}
-	//	addTemplate(pTemplate->mName, pTemplate);
-	//}
-	
-	//std::ostringstream ostream;
-	//root->writeToOstream(ostream, "\n  ");
-	//llwarns << ostream.str() << llendl;
-	
 	return true;
 }
 
-- 
cgit v1.2.3


From 531b77a9485db77df31a25a766e66ec1443a49f6 Mon Sep 17 00:00:00 2001
From: Monroe Linden <monroe@lindenlab.com>
Date: Wed, 15 Sep 2010 14:39:42 -0700
Subject: Enable web popups to specify size and position of the Media Browser
 window from javascript.

This includes a Mac build of llqtwebkit from the following sources:

revision aacdf69cbf5aa12d77c179296e31ef643ed1ef4a of http://qt.gitorious.org/+lindenqt/qt/lindenqt (currently head of the 'lindenqt' branch)
revision 81ab5ae326f0 of http://hg.secondlife.com/llqtwebkit (currently head of the default branch)

Reviewed by Callum.
---
 indra/llplugin/llpluginclassmedia.cpp              |  55 +++++++----
 indra/llplugin/llpluginclassmedia.h                |  29 +++---
 indra/llplugin/llpluginclassmediaowner.h           |   1 +
 indra/media_plugins/webkit/media_plugin_webkit.cpp |  45 +++++++--
 indra/newview/app_settings/settings.xml            |   2 +-
 indra/newview/llfloatermediabrowser.cpp            |  93 ++++++++++++++++--
 indra/newview/llfloatermediabrowser.h              |   9 +-
 indra/newview/llmediactrl.cpp                      |  16 +++
 indra/newview/llmediactrl.h                        |   3 +
 indra/newview/llviewermedia.cpp                    | 107 +++++++++++++++++----
 indra/newview/llviewermedia.h                      |   8 +-
 indra/newview/llviewerparcelmedia.cpp              |   6 ++
 indra/newview/llweb.cpp                            |  17 ++--
 indra/newview/llweb.h                              |   9 +-
 indra/test_apps/llplugintest/llmediaplugintest.cpp |   4 +
 install.xml                                        |   4 +-
 16 files changed, 322 insertions(+), 86 deletions(-)

diff --git a/indra/llplugin/llpluginclassmedia.cpp b/indra/llplugin/llpluginclassmedia.cpp
index dcbe97469b..69ed0fb09c 100644
--- a/indra/llplugin/llpluginclassmedia.cpp
+++ b/indra/llplugin/llpluginclassmedia.cpp
@@ -74,6 +74,7 @@ bool LLPluginClassMedia::init(const std::string &launcher_filename, const std::s
 	
 	// Queue up the media init message -- it will be sent after all the currently queued messages.
 	LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "init");
+	message.setValue("target", mTarget);
 	sendMessage(message);
 	
 	mPlugin->init(launcher_filename, plugin_filename, debug);
@@ -143,7 +144,7 @@ void LLPluginClassMedia::reset()
 	mProgressPercent = 0;	
 	mClickURL.clear();
 	mClickTarget.clear();
-	mClickTargetType = TARGET_NONE;
+	mClickUUID.clear();
 	
 	// media_time class
 	mCurrentTime = 0.0f;
@@ -727,24 +728,9 @@ void LLPluginClassMedia::setJavascriptEnabled(const bool enabled)
 	sendMessage(message);
 }
 
-LLPluginClassMedia::ETargetType getTargetTypeFromLLQtWebkit(int target_type)
+void LLPluginClassMedia::setTarget(const std::string &target)
 {
-	// convert a LinkTargetType value from llqtwebkit to an ETargetType
-	// so that we don't expose the llqtwebkit header in viewer code
-	switch (target_type)
-	{
-	case LLQtWebKit::LTT_TARGET_NONE:
-		return LLPluginClassMedia::TARGET_NONE;
-
-	case LLQtWebKit::LTT_TARGET_BLANK:
-		return LLPluginClassMedia::TARGET_BLANK;
-
-	case LLQtWebKit::LTT_TARGET_EXTERNAL:
-		return LLPluginClassMedia::TARGET_EXTERNAL;
-
-	default:
-		return LLPluginClassMedia::TARGET_OTHER;
-	}
+	mTarget = target;
 }
 
 /* virtual */ 
@@ -1003,15 +989,13 @@ void LLPluginClassMedia::receivePluginMessage(const LLPluginMessage &message)
 		{
 			mClickURL = message.getValue("uri");
 			mClickTarget = message.getValue("target");
-			U32 target_type = message.getValueU32("target_type");
-			mClickTargetType = ::getTargetTypeFromLLQtWebkit(target_type);
+			mClickUUID = message.getValue("uuid");
 			mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_CLICK_LINK_HREF);
 		}
 		else if(message_name == "click_nofollow")
 		{
 			mClickURL = message.getValue("uri");
 			mClickTarget.clear();
-			mClickTargetType = TARGET_NONE;
 			mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_CLICK_LINK_NOFOLLOW);
 		}
 		else if(message_name == "cookie_set")
@@ -1025,6 +1009,16 @@ void LLPluginClassMedia::receivePluginMessage(const LLPluginMessage &message)
 		{
 			mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_CLOSE_REQUEST);
 		}
+		else if(message_name == "geometry_change")
+		{
+			mClickUUID = message.getValue("uuid");
+			mGeometryX = message.getValueS32("x");
+			mGeometryY = message.getValueS32("y");
+			mGeometryWidth = message.getValueS32("width");
+			mGeometryHeight = message.getValueS32("height");
+				
+			mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_GEOMETRY_CHANGE);
+		}
 		else
 		{
 			LL_WARNS("Plugin") << "Unknown " << message_name << " class message: " << message_name << LL_ENDL;
@@ -1179,6 +1173,25 @@ void LLPluginClassMedia::setBrowserUserAgent(const std::string& user_agent)
 	sendMessage(message);
 }
 
+void LLPluginClassMedia::proxyWindowOpened(const std::string &target, const std::string &uuid)
+{
+	LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "proxy_window_opened");
+
+	message.setValue("target", target);
+	message.setValue("uuid", uuid);
+
+	sendMessage(message);
+}
+
+void LLPluginClassMedia::proxyWindowClosed(const std::string &uuid)
+{
+	LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "proxy_window_closed");
+
+	message.setValue("uuid", uuid);
+
+	sendMessage(message);
+}
+
 void LLPluginClassMedia::crashPlugin()
 {
 	LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_INTERNAL, "crash");
diff --git a/indra/llplugin/llpluginclassmedia.h b/indra/llplugin/llpluginclassmedia.h
index eaafbfe389..9cb67fe909 100644
--- a/indra/llplugin/llpluginclassmedia.h
+++ b/indra/llplugin/llpluginclassmedia.h
@@ -178,6 +178,7 @@ public:
 	void	setLanguageCode(const std::string &language_code);
 	void	setPluginsEnabled(const bool enabled);
 	void	setJavascriptEnabled(const bool enabled);
+	void	setTarget(const std::string &target);
 	
 	///////////////////////////////////
 	// media browser class functions
@@ -195,6 +196,8 @@ public:
 	void browse_back();
 	void set_status_redirect(int code, const std::string &url);
 	void setBrowserUserAgent(const std::string& user_agent);
+	void proxyWindowOpened(const std::string &target, const std::string &uuid);
+	void proxyWindowClosed(const std::string &uuid);
 	
 	// This is valid after MEDIA_EVENT_NAVIGATE_BEGIN or MEDIA_EVENT_NAVIGATE_COMPLETE
 	std::string	getNavigateURI() const { return mNavigateURI; };
@@ -220,16 +223,14 @@ public:
 	// This is valid after MEDIA_EVENT_CLICK_LINK_HREF
 	std::string getClickTarget() const { return mClickTarget; };
 
-	typedef enum 
-	{
-		TARGET_NONE,        // empty href target string
-		TARGET_BLANK,       // target to open link in user's preferred browser
-		TARGET_EXTERNAL,    // target to open link in external browser
-		TARGET_OTHER        // nonempty and unsupported target type
-	}ETargetType;
-
-	// This is valid after MEDIA_EVENT_CLICK_LINK_HREF
-	ETargetType getClickTargetType() const { return mClickTargetType; };
+	// This is valid during MEDIA_EVENT_CLICK_LINK_HREF and MEDIA_EVENT_GEOMETRY_CHANGE
+	std::string getClickUUID() const { return mClickUUID; };
+	
+	// These are valid during MEDIA_EVENT_GEOMETRY_CHANGE
+	S32 getGeometryX() const { return mGeometryX; };
+	S32 getGeometryY() const { return mGeometryY; };
+	S32 getGeometryWidth() const { return mGeometryWidth; };
+	S32 getGeometryHeight() const { return mGeometryHeight; };
 
 	std::string getMediaName() const { return mMediaName; };
 	std::string getMediaDescription() const { return mMediaDescription; };
@@ -349,6 +350,8 @@ protected:
 	
 	LLColor4		mBackgroundColor;
 	
+	std::string		mTarget;
+	
 	/////////////////////////////////////////
 	// media_browser class
 	std::string		mNavigateURI;
@@ -361,7 +364,11 @@ protected:
 	std::string		mLocation;
 	std::string		mClickURL;
 	std::string		mClickTarget;
-	ETargetType     mClickTargetType;
+	std::string		mClickUUID;
+	S32				mGeometryX;
+	S32				mGeometryY;
+	S32				mGeometryWidth;
+	S32				mGeometryHeight;
 	
 	/////////////////////////////////////////
 	// media_time class
diff --git a/indra/llplugin/llpluginclassmediaowner.h b/indra/llplugin/llpluginclassmediaowner.h
index e60c85737f..c9efff216c 100644
--- a/indra/llplugin/llpluginclassmediaowner.h
+++ b/indra/llplugin/llpluginclassmediaowner.h
@@ -56,6 +56,7 @@ public:
 		MEDIA_EVENT_CLICK_LINK_NOFOLLOW,
 		MEDIA_EVENT_CLOSE_REQUEST,			// The plugin requested its window be closed (currently hooked up to javascript window.close in webkit)
 		MEDIA_EVENT_PICK_FILE_REQUEST,		// The plugin wants the user to pick a file
+		MEDIA_EVENT_GEOMETRY_CHANGE,		// The plugin requested its window geometry be changed (per the javascript window interface)
 		
 		MEDIA_EVENT_PLUGIN_FAILED_LAUNCH,	// The plugin failed to launch 
 		MEDIA_EVENT_PLUGIN_FAILED			// The plugin died unexpectedly
diff --git a/indra/media_plugins/webkit/media_plugin_webkit.cpp b/indra/media_plugins/webkit/media_plugin_webkit.cpp
index a2b1ff019b..67f49556c5 100644
--- a/indra/media_plugins/webkit/media_plugin_webkit.cpp
+++ b/indra/media_plugins/webkit/media_plugin_webkit.cpp
@@ -115,6 +115,7 @@ private:
 	F32 mBackgroundR;
 	F32 mBackgroundG;
 	F32 mBackgroundB;
+	std::string mTarget;
 	
 	VolumeCatcher mVolumeCatcher;
 
@@ -303,7 +304,7 @@ private:
 		LLQtWebKit::getInstance()->enableJavascript( mJavascriptEnabled );
 		
 		// create single browser window
-		mBrowserWindowId = LLQtWebKit::getInstance()->createBrowserWindow( mWidth, mHeight );
+		mBrowserWindowId = LLQtWebKit::getInstance()->createBrowserWindow( mWidth, mHeight, mTarget);
 
 		// tell LLQtWebKit about the size of the browser window
 		LLQtWebKit::getInstance()->setSize( mBrowserWindowId, mWidth, mHeight );
@@ -313,9 +314,6 @@ private:
 
 		// append details to agent string
 		LLQtWebKit::getInstance()->setBrowserAgentId( mUserAgent );
-
-		// Set up window open behavior
-		LLQtWebKit::getInstance()->setWindowOpenBehavior(mBrowserWindowId, LLQtWebKit::WOB_SIMULATE_BLANK_HREF_CLICK);
 		
 #if !LL_QTWEBKIT_USES_PIXMAPS
 		// don't flip bitmap
@@ -507,9 +505,9 @@ private:
 	void onClickLinkHref(const EventType& event)
 	{
 		LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "click_href");
-		message.setValue("uri", event.getStringValue());
-		message.setValue("target", event.getStringValue2());
-		message.setValueU32("target_type", event.getLinkType());
+		message.setValue("uri", event.getEventUri());
+		message.setValue("target", event.getStringValue());
+		message.setValue("uuid", event.getStringValue2());
 		sendMessage(message);
 	}
 	
@@ -518,7 +516,7 @@ private:
 	void onClickLinkNoFollow(const EventType& event)
 	{
 		LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "click_nofollow");
-		message.setValue("uri", event.getStringValue());
+		message.setValue("uri", event.getEventUri());
 		sendMessage(message);
 	}
 	
@@ -539,8 +537,24 @@ private:
 	// virtual
 	void onWindowCloseRequested(const EventType& event)
 	{
-		llwarns << "onWindowCloseRequested " << llendl;
 		LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "close_request");
+		message.setValue("uuid", event.getStringValue());
+		sendMessage(message);
+	}
+
+	////////////////////////////////////////////////////////////////////////////////
+	// virtual
+	void onWindowGeometryChangeRequested(const EventType& event)
+	{
+		int x, y, width, height;
+		event.getRectValue(x, y, width, height);
+
+		LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "geometry_change");
+		message.setValue("uuid", event.getStringValue());
+		message.setValueS32("x", x);
+		message.setValueS32("y", y);
+		message.setValueS32("width", width);
+		message.setValueS32("height", height);
 		sendMessage(message);
 	}
 
@@ -853,6 +867,8 @@ void MediaPluginWebKit::receiveMessage(const char *message_string)
 		{
 			if(message_name == "init")
 			{
+				mTarget = message_in.getValue("target");
+				
 				// This is the media init message -- all necessary data for initialization should have been received.
 				if(initBrowser())
 				{
@@ -1179,6 +1195,17 @@ void MediaPluginWebKit::receiveMessage(const char *message_string)
 					}
 				}
 			}
+			else if(message_name == "proxy_window_opened")
+			{
+				std::string target = message_in.getValue("target");
+				std::string uuid = message_in.getValue("uuid");
+				LLQtWebKit::getInstance()->proxyWindowOpened(mBrowserWindowId, target, uuid);
+			}
+			else if(message_name == "proxy_window_closed")
+			{
+				std::string uuid = message_in.getValue("uuid");
+				LLQtWebKit::getInstance()->proxyWindowClosed(mBrowserWindowId, uuid);
+			}
 			else
 			{
 //				std::cerr << "MediaPluginWebKit::receiveMessage: unknown media_browser message: " << message_string << std::endl;
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index efe418f0e8..f815ae3eb2 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -5195,7 +5195,7 @@
     <key>Type</key>
     <string>Boolean</string>
     <key>Value</key>
-    <integer>0</integer>
+    <integer>1</integer>
   </map>
   <key>MediaOnAPrimUI</key>
   <map>
diff --git a/indra/newview/llfloatermediabrowser.cpp b/indra/newview/llfloatermediabrowser.cpp
index 5d0df1f037..5e06a2e078 100644
--- a/indra/newview/llfloatermediabrowser.cpp
+++ b/indra/newview/llfloatermediabrowser.cpp
@@ -45,7 +45,8 @@
 #include "llviewermedia.h"
 #include "llviewerparcelmedia.h"
 #include "llcombobox.h"
-
+#include "llwindow.h"
+#include "lllayoutstack.h"
 
 // TEMP
 #include "llsdutil.h"
@@ -56,16 +57,25 @@ LLFloaterMediaBrowser::LLFloaterMediaBrowser(const LLSD& key)
 }
 
 //static 
-void LLFloaterMediaBrowser::create(const std::string &url, const std::string& target)
+void LLFloaterMediaBrowser::create(const std::string &url, const std::string& target, const std::string& uuid)
 {
+	lldebugs << "url = " << url << ", target = " << target << ", uuid = " << uuid << llendl;
+	
 	std::string tag = target;
 	
 	if(target.empty() || target == "_blank")
 	{
-		// create a unique tag for this instance
-		LLUUID id;
-		id.generate();
-		tag = id.asString();
+		if(!uuid.empty())
+		{
+			tag = uuid;
+		}
+		else
+		{
+			// create a unique tag for this instance
+			LLUUID id;
+			id.generate();
+			tag = id.asString();
+		}
 	}
 	
 	S32 browser_window_limit = gSavedSettings.getS32("MediaBrowserWindowLimit");
@@ -98,11 +108,70 @@ void LLFloaterMediaBrowser::create(const std::string &url, const std::string& ta
 	llassert(browser);
 	if(browser)
 	{
+		browser->mUUID = uuid;
+
 		// tell the browser instance to load the specified URL
-		browser->openMedia(url);
+		browser->openMedia(url, target);
+		LLViewerMedia::proxyWindowOpened(target, uuid);
 	}
 }
 
+//static 
+void LLFloaterMediaBrowser::closeRequest(const std::string &uuid)
+{
+	LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("media_browser");
+	lldebugs << "instance list size is " << inst_list.size() << ", incoming uuid is " << uuid << llendl;
+	for (LLFloaterReg::const_instance_list_t::const_iterator iter = inst_list.begin(); iter != inst_list.end(); ++iter)
+	{
+		LLFloaterMediaBrowser* i = dynamic_cast<LLFloaterMediaBrowser*>(*iter);
+		lldebugs << "    " << i->mUUID << llendl;
+		if (i && i->mUUID == uuid)
+		{
+			i->closeFloater(false);
+			return;
+ 		}
+ 	}
+}
+
+//static 
+void LLFloaterMediaBrowser::geometryChanged(const std::string &uuid, S32 x, S32 y, S32 width, S32 height)
+{
+	LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("media_browser");
+	lldebugs << "instance list size is " << inst_list.size() << ", incoming uuid is " << uuid << llendl;
+	for (LLFloaterReg::const_instance_list_t::const_iterator iter = inst_list.begin(); iter != inst_list.end(); ++iter)
+	{
+		LLFloaterMediaBrowser* i = dynamic_cast<LLFloaterMediaBrowser*>(*iter);
+		lldebugs << "    " << i->mUUID << llendl;
+		if (i && i->mUUID == uuid)
+		{
+			i->geometryChanged(x, y, width, height);
+			return;
+ 		}
+ 	}
+}
+	
+void LLFloaterMediaBrowser::geometryChanged(S32 x, S32 y, S32 width, S32 height)
+{	
+	// Make sure the layout of the browser control is updated, so this calculation is correct.
+	LLLayoutStack::updateClass();
+		
+	// TODO: need to adjust size and constrain position to make sure floaters aren't moved outside the window view, etc.
+	LLCoordWindow window_size;
+	getWindow()->getSize(&window_size);
+
+	// Adjust width and height for the size of the chrome on the Media Browser window.
+	width += getRect().getWidth() - mBrowser->getRect().getWidth();
+	height += getRect().getHeight() - mBrowser->getRect().getHeight();
+	
+	LLRect geom;
+	geom.setOriginAndSize(x, window_size.mY - (y + height), width, height);
+
+	lldebugs << "geometry change: " << geom << llendl;
+	
+	handleReshape(geom,false);
+}
+
+
 void LLFloaterMediaBrowser::draw()
 {
 	getChildView("go")->setEnabled(!mAddressCombo->getValue().asString().empty());
@@ -161,6 +230,7 @@ BOOL LLFloaterMediaBrowser::postBuild()
 	childSetAction("assign", onClickAssign, this);
 
 	buildURLHistory();
+
 	return TRUE;
 }
 
@@ -201,6 +271,7 @@ std::string LLFloaterMediaBrowser::getSupportURL()
 //virtual
 void LLFloaterMediaBrowser::onClose(bool app_quitting)
 {
+	LLViewerMedia::proxyWindowClosed(mUUID);
 	//setVisible(FALSE);
 	destroy();
 }
@@ -222,7 +293,12 @@ void LLFloaterMediaBrowser::handleMediaEvent(LLPluginClassMedia* self, EMediaEve
 		// The browser instance wants its window closed.
 		closeFloater();
 	}
+	else if(event == MEDIA_EVENT_GEOMETRY_CHANGE)
+	{
+		geometryChanged(self->getGeometryX(), self->getGeometryY(), self->getGeometryWidth(), self->getGeometryHeight());
+	}
 }
+
 void LLFloaterMediaBrowser::setCurrentURL(const std::string& url)
 {
 	mCurrentURL = url;
@@ -368,9 +444,10 @@ void LLFloaterMediaBrowser::onClickSeek(void* user_data)
 	if(self->mBrowser->getMediaPlugin())
 		self->mBrowser->getMediaPlugin()->start(2.0f);
 }
-void LLFloaterMediaBrowser::openMedia(const std::string& media_url)
+void LLFloaterMediaBrowser::openMedia(const std::string& media_url, const std::string& target)
 {
 	mBrowser->setHomePageUrl(media_url);
+	mBrowser->setTarget(target);
 	mBrowser->navigateTo(media_url);
 	setCurrentURL(media_url);
 }
diff --git a/indra/newview/llfloatermediabrowser.h b/indra/newview/llfloatermediabrowser.h
index ee4aef814f..5cb7377a36 100644
--- a/indra/newview/llfloatermediabrowser.h
+++ b/indra/newview/llfloatermediabrowser.h
@@ -42,7 +42,11 @@ public:
     LOG_CLASS(LLFloaterMediaBrowser);
 	LLFloaterMediaBrowser(const LLSD& key);
 
-	static void create(const std::string &url, const std::string& target);
+	static void create(const std::string &url, const std::string& target, const std::string& uuid = LLStringUtil::null);
+
+	static void closeRequest(const std::string &uuid);
+	static void geometryChanged(const std::string &uuid, S32 x, S32 y, S32 width, S32 height);
+	void geometryChanged(S32 x, S32 y, S32 width, S32 height);
 	
 	/*virtual*/ BOOL postBuild();
 	/*virtual*/ void onClose(bool app_quitting);
@@ -51,7 +55,7 @@ public:
 	// inherited from LLViewerMediaObserver
 	/*virtual*/ void handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event);
 
-	void openMedia(const std::string& media_url);
+	void openMedia(const std::string& media_url, const std::string& target);
 	void buildURLHistory();
 	std::string getSupportURL();
 	void setCurrentURL(const std::string& url);
@@ -73,6 +77,7 @@ private:
 	LLMediaCtrl* mBrowser;
 	LLComboBox* mAddressCombo;
 	std::string mCurrentURL;
+	std::string mUUID;
 };
 
 #endif  // LL_LLFLOATERMEDIABROWSER_H
diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp
index 1de249a3c1..635ceb8380 100644
--- a/indra/newview/llmediactrl.cpp
+++ b/indra/newview/llmediactrl.cpp
@@ -572,6 +572,15 @@ void LLMediaCtrl::setHomePageUrl( const std::string& urlIn, const std::string& m
 	}
 }
 
+void LLMediaCtrl::setTarget(const std::string& target)
+{
+	mTarget = target;
+	if (mMediaSource)
+	{
+		mMediaSource->setTarget(mTarget);
+	}
+}
+
 ////////////////////////////////////////////////////////////////////////////////
 //
 bool LLMediaCtrl::setCaretColor(unsigned int red, unsigned int green, unsigned int blue)
@@ -613,6 +622,7 @@ bool LLMediaCtrl::ensureMediaSourceExists()
 		{
 			mMediaSource->setUsedInUI(true);
 			mMediaSource->setHomeURL(mHomePageUrl, mHomePageMimeType);
+			mMediaSource->setTarget(mTarget);
 			mMediaSource->setVisible( getVisible() );
 			mMediaSource->addObserver( this );
 			mMediaSource->setBackgroundColor( getBackgroundColor() );
@@ -962,6 +972,12 @@ void LLMediaCtrl::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event)
 			LL_DEBUGS("Media") <<  "Media event:  MEDIA_EVENT_PICK_FILE_REQUEST" << LL_ENDL;
 		}
 		break;
+		
+		case MEDIA_EVENT_GEOMETRY_CHANGE:
+		{
+			LL_DEBUGS("Media") << "Media event:  MEDIA_EVENT_GEOMETRY_CHANGE, uuid is " << self->getClickUUID() << LL_ENDL;
+		}
+		break;
 	};
 
 	// chain all events to any potential observers of this object.
diff --git a/indra/newview/llmediactrl.h b/indra/newview/llmediactrl.h
index 755d1e1b04..6fefd8f6d7 100644
--- a/indra/newview/llmediactrl.h
+++ b/indra/newview/llmediactrl.h
@@ -107,6 +107,8 @@ public:
 
 		void setHomePageUrl( const std::string& urlIn, const std::string& mime_type = LLStringUtil::null );
 		std::string getHomePageUrl();
+		
+		void setTarget(const std::string& target);
 
 		// set/clear URL to visit when a 404 page is reached
 		void set404RedirectUrl( std::string redirect_url );
@@ -171,6 +173,7 @@ public:
 		std::string mHomePageUrl;
 		std::string mHomePageMimeType;
 		std::string mCurrentNavUrl;
+		std::string mTarget;
 		bool mIgnoreUIScale;
 		bool mAlwaysRefresh;
 		viewer_media_t mMediaSource;
diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp
index 012a4d2920..860d0b9fd6 100644
--- a/indra/newview/llviewermedia.cpp
+++ b/indra/newview/llviewermedia.cpp
@@ -61,6 +61,8 @@
 //#include "llfirstuse.h"
 #include "llwindow.h"
 
+#include "llfloatermediabrowser.h"	// for handling window close requests and geometry change requests in media browser windows.
+
 #include <boost/bind.hpp>	// for SkinFolder listener
 #include <boost/signals2.hpp>
 
@@ -1366,6 +1368,38 @@ void LLViewerMedia::openIDCookieResponse(const std::string &cookie)
 	setOpenIDCookie();
 }
 
+/////////////////////////////////////////////////////////////////////////////////////////
+// static
+void LLViewerMedia::proxyWindowOpened(const std::string &target, const std::string &uuid)
+{
+	if(uuid.empty())
+		return;
+		
+	for (impl_list::iterator iter = sViewerMediaImplList.begin(); iter != sViewerMediaImplList.end(); iter++)
+	{
+		if((*iter)->mMediaSource && (*iter)->mMediaSource->pluginSupportsMediaBrowser())
+		{
+			(*iter)->mMediaSource->proxyWindowOpened(target, uuid);
+		}
+	}
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// static
+void LLViewerMedia::proxyWindowClosed(const std::string &uuid)
+{
+	if(uuid.empty())
+		return;
+
+	for (impl_list::iterator iter = sViewerMediaImplList.begin(); iter != sViewerMediaImplList.end(); iter++)
+	{
+		if((*iter)->mMediaSource && (*iter)->mMediaSource->pluginSupportsMediaBrowser())
+		{
+			(*iter)->mMediaSource->proxyWindowClosed(uuid);
+		}
+	}
+}
+
 bool LLViewerMedia::hasInWorldMedia()
 {
 	if (sInWorldMediaDisabled) return false;
@@ -1599,7 +1633,7 @@ void LLViewerMediaImpl::setMediaType(const std::string& media_type)
 
 //////////////////////////////////////////////////////////////////////////////////////////
 /*static*/
-LLPluginClassMedia* LLViewerMediaImpl::newSourceFromMediaType(std::string media_type, LLPluginClassMediaOwner *owner /* may be NULL */, S32 default_width, S32 default_height)
+LLPluginClassMedia* LLViewerMediaImpl::newSourceFromMediaType(std::string media_type, LLPluginClassMediaOwner *owner /* may be NULL */, S32 default_width, S32 default_height, const std::string target)
 {
 	std::string plugin_basename = LLMIMETypes::implType(media_type);
 	
@@ -1655,7 +1689,9 @@ LLPluginClassMedia* LLViewerMediaImpl::newSourceFromMediaType(std::string media_
 			// collect 'javascript enabled' setting from prefs and send to embedded browser
 			bool javascript_enabled = gSavedSettings.getBOOL( "BrowserJavascriptEnabled" );
 			media_source->setJavascriptEnabled( javascript_enabled );
-
+			
+			media_source->setTarget(target);
+			
 			if (media_source->init(launcher_name, plugin_name, gSavedSettings.getBOOL("PluginAttachDebuggerToPlugins")))
 			{
 				return media_source;
@@ -1706,7 +1742,7 @@ bool LLViewerMediaImpl::initializePlugin(const std::string& media_type)
 	// Save the MIME type that really caused the plugin to load
 	mCurrentMimeType = mMimeType;
 
-	LLPluginClassMedia* media_source = newSourceFromMediaType(mMimeType, this, mMediaWidth, mMediaHeight);
+	LLPluginClassMedia* media_source = newSourceFromMediaType(mMimeType, this, mMediaWidth, mMediaHeight, mTarget);
 	
 	if (media_source)
 	{
@@ -2806,6 +2842,7 @@ bool LLViewerMediaImpl::isPlayable() const
 //////////////////////////////////////////////////////////////////////////////////////////
 void LLViewerMediaImpl::handleMediaEvent(LLPluginClassMedia* plugin, LLPluginClassMediaOwner::EMediaEvent event)
 {
+	bool pass_through = true;
 	switch(event)
 	{
 		case MEDIA_EVENT_CLICK_LINK_NOFOLLOW:
@@ -2822,21 +2859,10 @@ void LLViewerMediaImpl::handleMediaEvent(LLPluginClassMedia* plugin, LLPluginCla
 			// retrieve the event parameters
 			std::string url = plugin->getClickURL();
 			std::string target = plugin->getClickTarget();
-			U32 target_type = plugin->getClickTargetType();
-
-			switch (target_type)
-			{
-			case LLPluginClassMedia::TARGET_NONE:
-				// ignore this click and let media plugin handle it
-				break;
-			default:
-				if(gSavedSettings.getBOOL("MediaEnablePopups"))
-				{
-					// loadURL now handles distinguishing between _blank, _external, and other named targets.
-					LLWeb::loadURL(url, target);
-				}
-				break;
-			}
+			std::string uuid = plugin->getClickUUID();
+			
+			// loadURL now handles distinguishing between _blank, _external, and other named targets.
+			LLWeb::loadURL(url, target, uuid);
 		};
 		break;
 		case MEDIA_EVENT_PLUGIN_FAILED_LAUNCH:
@@ -2985,12 +3011,53 @@ void LLViewerMediaImpl::handleMediaEvent(LLPluginClassMedia* plugin, LLPluginCla
 		}
 		break;
 		
+		case LLViewerMediaObserver::MEDIA_EVENT_CLOSE_REQUEST:
+		{
+			std::string uuid = plugin->getClickUUID();
+
+			llinfos << "MEDIA_EVENT_CLOSE_REQUEST for uuid " << uuid << llendl;
+
+			if(uuid.empty())
+			{
+				// This close request is directed at this instance, let it fall through.
+			}
+			else
+			{
+				// This close request is directed at another instance
+				pass_through = false;
+				LLFloaterMediaBrowser::closeRequest(uuid);
+			}
+		}
+		break;
+
+		case LLViewerMediaObserver::MEDIA_EVENT_GEOMETRY_CHANGE:
+		{
+			std::string uuid = plugin->getClickUUID();
+
+			llinfos << "MEDIA_EVENT_GEOMETRY_CHANGE for uuid " << uuid << llendl;
+
+			if(uuid.empty())
+			{
+				// This geometry change request is directed at this instance, let it fall through.
+			}
+			else
+			{
+				// This request is directed at another instance
+				pass_through = false;
+				LLFloaterMediaBrowser::geometryChanged(uuid, plugin->getGeometryX(), plugin->getGeometryY(), plugin->getGeometryWidth(), plugin->getGeometryHeight());
+			}
+		}
+		break;
+
 		default:
 		break;
 	}
 
-	// Just chain the event to observers.
-	emitEvent(plugin, event);
+	if(pass_through)
+	{
+		// Just chain the event to observers.
+		emitEvent(plugin, event);
+	}
 }
 
 ////////////////////////////////////////////////////////////////////////////////
diff --git a/indra/newview/llviewermedia.h b/indra/newview/llviewermedia.h
index e0cc26fa29..4025a4484f 100644
--- a/indra/newview/llviewermedia.h
+++ b/indra/newview/llviewermedia.h
@@ -152,6 +152,9 @@ public:
 	static void openIDSetup(const std::string &openid_url, const std::string &openid_token);
 	static void openIDCookieResponse(const std::string &cookie);
 	
+	static void proxyWindowOpened(const std::string &target, const std::string &uuid);
+	static void proxyWindowClosed(const std::string &uuid);
+	
 private:
 	static void setOpenIDCookie();
 	static void onTeleportFinished();
@@ -271,8 +274,10 @@ public:
 
 	ECursorType getLastSetCursor() { return mLastSetCursor; }
 	
+	void setTarget(const std::string& target) { mTarget = target; }
+	
 	// utility function to create a ready-to-use media instance from a desired media type.
-	static LLPluginClassMedia* newSourceFromMediaType(std::string media_type, LLPluginClassMediaOwner *owner /* may be NULL */, S32 default_width, S32 default_height);
+	static LLPluginClassMedia* newSourceFromMediaType(std::string media_type, LLPluginClassMediaOwner *owner /* may be NULL */, S32 default_width, S32 default_height, const std::string target = LLStringUtil::null);
 
 	// Internally set our desired browser user agent string, including
 	// the Second Life version and skin name.  Used because we can
@@ -438,6 +443,7 @@ private:
 	bool mNavigateSuspended;
 	bool mNavigateSuspendedDeferred;
 	bool mTrustedBrowser;
+	std::string mTarget;
 	
 private:
 	BOOL mIsUpdated ;
diff --git a/indra/newview/llviewerparcelmedia.cpp b/indra/newview/llviewerparcelmedia.cpp
index 335776029f..99e869dafc 100644
--- a/indra/newview/llviewerparcelmedia.cpp
+++ b/indra/newview/llviewerparcelmedia.cpp
@@ -580,6 +580,12 @@ void LLViewerParcelMedia::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent
 			LL_DEBUGS("Media") <<  "Media event:  MEDIA_EVENT_PICK_FILE_REQUEST" << LL_ENDL;
 		}
 		break;
+
+		case MEDIA_EVENT_GEOMETRY_CHANGE:
+		{
+			LL_DEBUGS("Media") << "Media event:  MEDIA_EVENT_GEOMETRY_CHANGE, uuid is " << self->getClickUUID() << LL_ENDL;
+		}
+		break;
 	};
 }
 
diff --git a/indra/newview/llweb.cpp b/indra/newview/llweb.cpp
index 298e5590d0..912413d06a 100644
--- a/indra/newview/llweb.cpp
+++ b/indra/newview/llweb.cpp
@@ -78,12 +78,12 @@ void LLWeb::initClass()
 
 
 // static
-void LLWeb::loadURL(const std::string& url, const std::string& target)
+void LLWeb::loadURL(const std::string& url, const std::string& target, const std::string& uuid)
 {
 	if(target == "_internal")
 	{
 		// Force load in the internal browser, as if with a blank target.
-		loadURLInternal(url);
+		loadURLInternal(url, "", uuid);
 	}
 	else if (gSavedSettings.getBOOL("UseExternalBrowser") || (target == "_external"))
 	{
@@ -91,28 +91,31 @@ void LLWeb::loadURL(const std::string& url, const std::string& target)
 	}
 	else
 	{
-		loadURLInternal(url, target);
+		loadURLInternal(url, target, uuid);
 	}
 }
 
 
 // static
-void LLWeb::loadURLInternal(const std::string &url, const std::string& target)
+void LLWeb::loadURLInternal(const std::string &url, const std::string& target, const std::string& uuid)
 {
-	LLFloaterMediaBrowser::create(url, target);
+	LLFloaterMediaBrowser::create(url, target, uuid);
 }
 
 
 // static
-void LLWeb::loadURLExternal(const std::string& url)
+void LLWeb::loadURLExternal(const std::string& url, const std::string& uuid)
 {
 	loadURLExternal(url, true);
 }
 
 
 // static
-void LLWeb::loadURLExternal(const std::string& url, bool async)
+void LLWeb::loadURLExternal(const std::string& url, bool async, const std::string& uuid)
 {
+	// Act like the proxy window was closed, since we won't be able to track targeted windows in the external browser.
+	LLViewerMedia::proxyWindowClosed(uuid);
+	
 	LLSD payload;
 	payload["url"] = url;
 	LLNotificationsUtil::add( "WebLaunchExternalTarget", LLSD(), payload, boost::bind(on_load_url_external_response, _1, _2, async));
diff --git a/indra/newview/llweb.h b/indra/newview/llweb.h
index 691b687fef..2915376583 100644
--- a/indra/newview/llweb.h
+++ b/indra/newview/llweb.h
@@ -43,18 +43,19 @@ public:
 	static void initClass();
 	
 	/// Load the given url in the user's preferred web browser
-	static void loadURL(const std::string& url, const std::string& target);
+	static void loadURL(const std::string& url, const std::string& target, const std::string& uuid = LLStringUtil::null);
 	static void loadURL(const std::string& url) { loadURL(url, LLStringUtil::null); }
 	/// Load the given url in the user's preferred web browser	
 	static void loadURL(const char* url, const std::string& target) { loadURL( ll_safe_string(url), target); }
 	static void loadURL(const char* url) { loadURL( ll_safe_string(url), LLStringUtil::null ); }
 	/// Load the given url in the Second Life internal web browser
-	static void loadURLInternal(const std::string &url, const std::string& target);
+	static void loadURLInternal(const std::string &url, const std::string& target, const std::string& uuid = LLStringUtil::null);
 	static void loadURLInternal(const std::string &url) { loadURLInternal(url, LLStringUtil::null); }
 	/// Load the given url in the operating system's web browser, async if we want to return immediately
 	/// before browser has spawned
-	static void loadURLExternal(const std::string& url);
-	static void loadURLExternal(const std::string& url, bool async);
+	static void loadURLExternal(const std::string& url) { loadURLExternal(url,  LLStringUtil::null); };
+	static void loadURLExternal(const std::string& url, const std::string& uuid);
+	static void loadURLExternal(const std::string& url, bool async, const std::string& uuid = LLStringUtil::null);
 
 	/// Returns escaped url (eg, " " to "%20") - used by all loadURL methods
 	static std::string escapeURL(const std::string& url);
diff --git a/indra/test_apps/llplugintest/llmediaplugintest.cpp b/indra/test_apps/llplugintest/llmediaplugintest.cpp
index 1d6ea8e270..1ca328567e 100644
--- a/indra/test_apps/llplugintest/llmediaplugintest.cpp
+++ b/indra/test_apps/llplugintest/llmediaplugintest.cpp
@@ -2218,6 +2218,10 @@ void LLMediaPluginTest::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent e
 			// TODO: display an actual file picker
 			self->sendPickFileResponse("cake");
 		break;
+
+		case MEDIA_EVENT_GEOMETRY_CHANGE:
+			std::cerr <<  "Media event:  MEDIA_EVENT_GEOMETRY_CHANGE, uuid is " << self->getClickUUID() << ", rect is " << self->getGeometryRect() << std::endl;
+		break;
 	}
 }
 
diff --git a/install.xml b/install.xml
index ff3ec6d9ab..11136376f3 100644
--- a/install.xml
+++ b/install.xml
@@ -941,9 +941,9 @@ anguage Infrstructure (CLI) international standard</string>
           <key>darwin</key>
           <map>
             <key>md5sum</key>
-            <string>9f4243cf304366030d02f2881357a928</string>
+            <string>34d9e4c93678a422cf80521bf0cd7628</string>
             <key>url</key>
-            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-4.6-darwin-20100817.tar.bz2</uri>
+            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-4.6-darwin-20100914.tar.bz2</uri>
           </map>
           <key>linux</key>
           <map>
-- 
cgit v1.2.3


From f87a49991a0a96c8cf11cbc9461711794aae3a72 Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Thu, 16 Sep 2010 00:39:21 -0700
Subject: refactored notification template into own header file

---
 indra/llui/llnotifications.cpp      | 302 ++++++++----------------------------
 indra/llui/llnotifications.h        | 205 +++++++++++-------------
 indra/llui/llnotificationtemplate.h | 274 ++++++++++++++++++++++++++++++++
 3 files changed, 432 insertions(+), 349 deletions(-)
 create mode 100644 indra/llui/llnotificationtemplate.h

diff --git a/indra/llui/llnotifications.cpp b/indra/llui/llnotifications.cpp
index cf93243eeb..bdc094bf47 100644
--- a/indra/llui/llnotifications.cpp
+++ b/indra/llui/llnotifications.cpp
@@ -27,6 +27,7 @@
 #include "linden_common.h"
 
 #include "llnotifications.h"
+#include "llnotificationtemplate.h"
 
 #include "llinstantmessage.h"
 #include "llxmlnode.h"
@@ -55,233 +56,6 @@ void NotificationPriorityValues::declareValues()
 }
 
 
-namespace LLNotificationTemplateParams
-{
-	using namespace LLInitParam;
-
-	struct GlobalString : public Block<GlobalString>
-	{
-		Mandatory<std::string>	name,
-								value;
-
-		GlobalString()
-		:	name("name"),
-			value("value")
-		{}
-	};
-
-	struct UniquenessContext : public Block<UniquenessContext>
-	{
-		Mandatory<std::string>	key;
-
-		UniquenessContext()
-		:	key("key")
-		{}
-		
-	};
-
-	struct UniquenessConstraint : public Block<UniquenessConstraint>
-	{
-		Multiple<UniquenessContext>	contexts;
-
-		UniquenessConstraint()
-		:	contexts("context")
-		{}
-	};
-
-	struct FormElementBase : public Block<FormElementBase>
-	{
-		Mandatory<std::string>	name;
-
-		FormElementBase()
-		:	name("name")
-		{}
-	};
-
-	struct FormIgnore : public Block<FormIgnore, FormElementBase>
-	{
-		Optional<std::string>	text;
-		Optional<bool>			save_option;
-
-		FormIgnore()
-		:	text("text"),
-			save_option("save_option", false)
-		{}
-	};
-
-	struct FormButton : public Block<FormButton, FormElementBase>
-	{
-		Mandatory<S32>			index;
-		Mandatory<std::string>	text;
-		Optional<std::string>	ignore;
-		Optional<bool>			is_default;
-
-		Mandatory<std::string>	type;
-
-		FormButton()
-		:	index("index"),
-			text("text"),
-			ignore("ignore"),
-			is_default("default"),
-			type("type")
-		{
-			// set type here so it gets serialized
-			type = "button";
-		}
-	};
-
-	struct FormInput : public Block<FormInput, FormElementBase>
-	{
-		Mandatory<std::string>	type;
-		Optional<S32>			width;
-
-		FormInput()
-		:	type("type"),
-			width("width", 0)
-		{}
-	};
-
-	struct FormElement : public Choice<FormElement>
-	{
-		Alternative<FormButton> button;
-		Alternative<FormInput>	input;
-
-		FormElement()
-		:	button("button"),
-			input("input")
-		{}
-	};
-
-	struct FormElements : public Block<FormElements>
-	{
-		Multiple<FormElement> elements;
-		FormElements()
-		:	elements("")
-		{}
-	};
-
-	struct Form : public Block<Form>
-	{
-		Optional<std::string>	name;
-		Optional<FormIgnore>	ignore;
-		Optional<FormElements>	form_elements;
-
-		Form()
-		:	name("form"),
-			ignore("ignore"),
-			form_elements("")
-		{}
-	};
-
-	// Templates are used to define common form types, such as OK/Cancel dialogs, etc.
-
-	struct Template : public Block<Template>
-	{
-		Mandatory<std::string>	name;
-		Mandatory<Form>			form;
-
-		Template()
-		:	name("name"),
-			form("form")
-		{}
-	};
-
-	// Reference a template to use its form elements
-	struct TemplateRef : public Block<TemplateRef>
-	{
-		Mandatory<std::string>	name;
-		Optional<std::string>	yes_text,
-								no_text,
-								cancel_text,
-								ignore_text;
-
-		TemplateRef()
-		:	name("name"),
-			yes_text("yestext"),
-			no_text("notext"),
-			cancel_text("canceltext"),
-			ignore_text("ignoretext")
-		{}
-	};
-
-	struct URL : public Block<URL>
-	{
-		Mandatory<S32>			option;
-		Mandatory<std::string>	value;
-		Optional<std::string>	target;
-		Ignored					name;
-
-		URL()
-		:	option("option", -1),
-			value("value"),
-			target("target", "_blank"),
-			name("name")
-		{}
-	};
-
-	struct FormRef : public Choice<FormRef>
-	{
-		Alternative<Form>			form;
-		Alternative<TemplateRef>	form_template;
-
-		FormRef()
-		:	form("form"),
-			form_template("usetemplate")
-		{}
-	};
-
-	struct Notification : public Block<Notification>
-	{
-		Mandatory<std::string>			name;
-		Optional<bool>					persist;
-		Optional<std::string>			functor,
-										icon,
-										label,
-										sound,
-										type,
-										value;
-		Optional<U32>					duration;
-		Optional<S32>					expire_option;
-		Optional<URL>					url;
-		Optional<UniquenessConstraint>	unique;
-		Optional<FormRef>				form_ref;
-		Optional<ENotificationPriority, 
-			NotificationPriorityValues> priority;
-
-
-		Notification()
-		:	name("name"),
-			persist("persist", false),
-			functor("functor"),
-			icon("icon"),
-			label("label"),
-			priority("priority"),
-			sound("sound"),
-			type("type"),
-			value("value"),
-			duration("duration"),
-			expire_option("expireOption", -1),
-			url("url"),
-			unique("unique"),
-			form_ref("")
-		{}
-
-	};
-
-	struct Notifications : public Block<Notifications>
-	{
-		Multiple<GlobalString>	strings;
-		Multiple<Template>		templates;
-		Multiple<Notification>	notifications;
-
-		Notifications()
-		:	strings("global"),
-			notifications("notification"),
-			templates("template")
-		{}
-	};
-}
-
 // Local channel for persistent notifications
 // Stores only persistent notifications.
 // Class users can use connectChanged() to process persistent notifications
@@ -378,7 +152,7 @@ LLNotificationForm::LLNotificationForm()
 }
 
 
-LLNotificationForm::LLNotificationForm(const std::string& name, const LLNotificationTemplateParams::Form& p) 
+LLNotificationForm::LLNotificationForm(const std::string& name, const LLNotificationForm::Params& p) 
 :	mIgnore(IGNORE_NO)
 {
 	if (p.ignore.isProvided())
@@ -403,6 +177,15 @@ LLNotificationForm::LLNotificationForm(const std::string& name, const LLNotifica
 	LLParamSDParser parser;
 	parser.writeSD(mFormData, p.form_elements);
 
+	mFormData = mFormData[""];
+	if (!mFormData.isArray())
+	{
+		// change existing contents to a one element array
+		LLSD new_llsd_array = LLSD::emptyArray();
+		new_llsd_array.append(mFormData);
+		mFormData = new_llsd_array;
+	}
+
 	for (LLSD::array_iterator it = mFormData.beginArray(), end_it = mFormData.endArray();
 		it != end_it;
 		++it)
@@ -413,7 +196,9 @@ LLNotificationForm::LLNotificationForm(const std::string& name, const LLNotifica
 			*it = it->beginMap()->second;
 		}
 	}
-	//llinfos << ll_pretty_print_sd(mFormData) << llendl;
+
+	LL_DEBUGS("Notifications") << name << LL_ENDL;
+	LL_DEBUGS("Notifications") << ll_pretty_print_sd(mFormData) << LL_ENDL;
 }
 
 LLNotificationForm::LLNotificationForm(const LLSD& sd)
@@ -515,7 +300,7 @@ std::string LLNotificationForm::getDefaultOption()
 	return "";
 }
 
-LLNotificationTemplate::LLNotificationTemplate(const LLNotificationTemplateParams::Notification& p)
+LLNotificationTemplate::LLNotificationTemplate(const LLNotificationTemplate::Params& p)
 :	mName(p.name),
 	mType(p.type),
 	mMessage(p.value),
@@ -537,7 +322,7 @@ LLNotificationTemplate::LLNotificationTemplate(const LLNotificationTemplateParam
 		mSoundEffect = LLUUID(LLUI::sSettingGroups["config"]->getString(p.sound));
 	}
 
-	for(LLInitParam::ParamIterator<LLNotificationTemplateParams::UniquenessContext>::const_iterator it = p.unique.contexts().begin(),
+	for(LLInitParam::ParamIterator<LLNotificationTemplate::UniquenessContext>::const_iterator it = p.unique.contexts().begin(),
 			end_it = p.unique.contexts().end();
 		it != end_it;
 		++it)
@@ -771,6 +556,43 @@ void LLNotification::respond(const LLSD& response)
 	update();
 }
 
+const std::string& LLNotification::getName() const
+{
+	return mTemplatep->mName;
+}
+
+const std::string& LLNotification::getIcon() const
+{
+	return mTemplatep->mIcon;
+}
+
+
+bool LLNotification::isPersistent() const
+{
+	return mTemplatep->mPersist;
+}
+
+std::string LLNotification::getType() const
+{
+	return (mTemplatep ? mTemplatep->mType : "");
+}
+
+S32 LLNotification::getURLOption() const
+{
+	return (mTemplatep ? mTemplatep->mURLOption : -1);
+}
+
+S32 LLNotification::getURLOpenExternally() const
+{
+	return(mTemplatep? mTemplatep->mURLTarget == "_external": -1);
+}
+
+bool LLNotification::hasUniquenessConstraints() const 
+{ 
+	return (mTemplatep ? mTemplatep->mUnique : false);
+}
+
+
 void LLNotification::setIgnored(bool ignore)
 {
 	mIgnored = ignore;
@@ -1400,13 +1222,13 @@ void replaceSubstitutionStrings(LLXMLNodePtr node, StringMap& replacements)
 	}
 }
 
-void replaceFormText(LLNotificationTemplateParams::Form& form, const std::string& pattern, const std::string& replace)
+void replaceFormText(LLNotificationForm::Params& form, const std::string& pattern, const std::string& replace)
 {
 	if (form.ignore.isProvided() && form.ignore.text() == pattern)
 	{
 		form.ignore.text = replace;
 	}
-	for (LLInitParam::ParamIterator<LLNotificationTemplateParams::FormElement>::iterator it = form.form_elements.elements().begin(),
+	for (LLInitParam::ParamIterator<LLNotificationForm::FormElement>::iterator it = form.form_elements.elements().begin(),
 			end_it = form.form_elements.elements().end();
 		it != end_it;
 		++it)
@@ -1432,29 +1254,29 @@ bool LLNotifications::loadTemplates()
 		return false;
 	}
 
-	LLNotificationTemplateParams::Notifications params;
+	LLNotificationTemplate::Notifications params;
 	LLXUIParser parser;
 	parser.readXUI(root, params, full_filename);
 
 	mTemplates.clear();
 
-	for(LLInitParam::ParamIterator<LLNotificationTemplateParams::GlobalString>::const_iterator it = params.strings().begin(), end_it = params.strings().end();
+	for(LLInitParam::ParamIterator<LLNotificationTemplate::GlobalString>::const_iterator it = params.strings().begin(), end_it = params.strings().end();
 		it != end_it;
 		++it)
 	{
 		mGlobalStrings[it->name] = it->value;
 	}
 
-	std::map<std::string, LLNotificationTemplateParams::Form> form_templates;
+	std::map<std::string, LLNotificationForm::Params> form_templates;
 
-	for(LLInitParam::ParamIterator<LLNotificationTemplateParams::Template>::const_iterator it = params.templates().begin(), end_it = params.templates().end();
+	for(LLInitParam::ParamIterator<LLNotificationTemplate::Template>::const_iterator it = params.templates().begin(), end_it = params.templates().end();
 		it != end_it;
 		++it)
 	{
 		form_templates[it->name] = it->form;
 	}
 
-	for(LLInitParam::ParamIterator<LLNotificationTemplateParams::Notification>::iterator it = params.notifications().begin(), end_it = params.notifications().end();
+	for(LLInitParam::ParamIterator<LLNotificationTemplate::Params>::iterator it = params.notifications().begin(), end_it = params.notifications().end();
 		it != end_it;
 		++it)
 	{
@@ -1532,6 +1354,8 @@ LLNotificationPtr LLNotifications::add(const LLNotification::Params& p)
 
 void LLNotifications::add(const LLNotificationPtr pNotif)
 {
+	if (pNotif == NULL) return;
+
 	// first see if we already have it -- if so, that's a problem
 	LLNotificationSet::iterator it=mItems.find(pNotif);
 	if (it != mItems.end())
@@ -1544,6 +1368,8 @@ void LLNotifications::add(const LLNotificationPtr pNotif)
 
 void LLNotifications::cancel(LLNotificationPtr pNotif)
 {
+	if (pNotif == NULL) return;
+
 	LLNotificationSet::iterator it=mItems.find(pNotif);
 	if (it == mItems.end())
 	{
diff --git a/indra/llui/llnotifications.h b/indra/llui/llnotifications.h
index d20b65ee1b..a58e7afe23 100644
--- a/indra/llui/llnotifications.h
+++ b/indra/llui/llnotifications.h
@@ -100,7 +100,6 @@
 #include "llnotificationptr.h"
 #include "llcachename.h"
 
-	
 typedef enum e_notification_priority
 {
 	NOTIFICATION_PRIORITY_UNSPECIFIED,
@@ -115,13 +114,6 @@ struct NotificationPriorityValues : public LLInitParam::TypeValuesHelper<ENotifi
 	static void declareValues();
 };
 
-namespace LLNotificationTemplateParams
-{
-	struct Notification;
-	struct Form;
-	struct Template;
-};
-
 class LLNotificationResponderInterface
 {
 public:
@@ -169,6 +161,90 @@ class LLNotificationForm
 	LOG_CLASS(LLNotificationForm);
 
 public:
+	struct FormElementBase : public LLInitParam::Block<FormElementBase>
+	{
+		Mandatory<std::string>	name;
+
+		FormElementBase()
+		:	name("name")
+		{}
+	};
+
+	struct FormIgnore : public LLInitParam::Block<FormIgnore, FormElementBase>
+	{
+		Optional<std::string>	text;
+		Optional<bool>			save_option;
+
+		FormIgnore()
+		:	text("text"),
+			save_option("save_option", false)
+		{}
+	};
+
+	struct FormButton : public LLInitParam::Block<FormButton, FormElementBase>
+	{
+		Mandatory<S32>			index;
+		Mandatory<std::string>	text;
+		Optional<std::string>	ignore;
+		Optional<bool>			is_default;
+
+		Mandatory<std::string>	type;
+
+		FormButton()
+		:	index("index"),
+			text("text"),
+			ignore("ignore"),
+			is_default("default"),
+			type("type")
+		{
+			// set type here so it gets serialized
+			type = "button";
+		}
+	};
+
+	struct FormInput : public LLInitParam::Block<FormInput, FormElementBase>
+	{
+		Mandatory<std::string>	type;
+		Optional<S32>			width;
+
+		FormInput()
+		:	type("type"),
+			width("width", 0)
+		{}
+	};
+
+	struct FormElement : public LLInitParam::Choice<FormElement>
+	{
+		Alternative<FormButton> button;
+		Alternative<FormInput>	input;
+
+		FormElement()
+		:	button("button"),
+			input("input")
+		{}
+	};
+
+	struct FormElements : public LLInitParam::Block<FormElements>
+	{
+		Multiple<FormElement> elements;
+		FormElements()
+		:	elements("")
+		{}
+	};
+
+	struct Params : public LLInitParam::Block<Params>
+	{
+		Optional<std::string>	name;
+		Optional<FormIgnore>	ignore;
+		Optional<FormElements>	form_elements;
+
+		Params()
+		:	name("name"),
+			ignore("ignore"),
+			form_elements("")
+		{}
+	};
+
 	typedef enum e_ignore_type
 	{ 
 		IGNORE_NO,
@@ -179,7 +255,7 @@ public:
 
 	LLNotificationForm();
 	LLNotificationForm(const LLSD& sd);
-	LLNotificationForm(const std::string& name, const LLNotificationTemplateParams::Form& p);
+	LLNotificationForm(const std::string& name, const Params& p);
 
 	LLSD asLLSD() const;
 
@@ -205,80 +281,7 @@ private:
 typedef boost::shared_ptr<LLNotificationForm> LLNotificationFormPtr;
 
 
-// This is the class of object read from the XML file (notifications.xml, 
-// from the appropriate local language directory).
-struct LLNotificationTemplate
-{
-	LLNotificationTemplate(const LLNotificationTemplateParams::Notification& p);
-    // the name of the notification -- the key used to identify it
-    // Ideally, the key should follow variable naming rules 
-    // (no spaces or punctuation).
-    std::string mName;
-    // The type of the notification
-    // used to control which queue it's stored in
-    std::string mType;
-    // The text used to display the notification. Replaceable parameters
-    // are enclosed in square brackets like this [].
-    std::string mMessage;
-	// The label for the notification; used for 
-	// certain classes of notification (those with a window and a window title). 
-	// Also used when a notification pops up underneath the current one.
-	// Replaceable parameters can be used in the label.
-	std::string mLabel;
-	// The name of the icon image. This should include an extension.
-	std::string mIcon;
-    // This is the Highlander bit -- "There Can Be Only One"
-    // An outstanding notification with this bit set
-    // is updated by an incoming notification with the same name,
-    // rather than creating a new entry in the queue.
-    // (used for things like progress indications, or repeating warnings
-    // like "the grid is going down in N minutes")
-    bool mUnique;
-    // if we want to be unique only if a certain part of the payload is constant
-    // specify the field names for the payload. The notification will only be
-    // combined if all of the fields named in the context are identical in the
-    // new and the old notification; otherwise, the notification will be
-    // duplicated. This is to support suppressing duplicate offers from the same
-    // sender but still differentiating different offers. Example: Invitation to
-    // conference chat.
-    std::vector<std::string> mUniqueContext;
-    // If this notification expires automatically, this value will be 
-    // nonzero, and indicates the number of seconds for which the notification
-    // will be valid (a teleport offer, for example, might be valid for 
-    // 300 seconds). 
-    U32 mExpireSeconds;
-    // if the offer expires, one of the options is chosen automatically
-    // based on its "value" parameter. This controls which one. 
-    // If expireSeconds is specified, expireOption should also be specified.
-    U32 mExpireOption;
-    // if the notification contains a url, it's stored here (and replaced 
-    // into the message where [_URL] is found)
-    std::string mURL;
-    // if there's a URL in the message, this controls which option visits
-    // that URL. Obsolete this and eliminate the buttons for affected
-    // messages when we allow clickable URLs in the UI
-    U32 mURLOption;
-	
-	std::string mURLTarget;
-	//This is a flag that tells if the url needs to open externally dispite 
-	//what the user setting is.
-	
-	// does this notification persist across sessions? if so, it will be
-	// serialized to disk on first receipt and read on startup
-	bool mPersist;
-	// This is the name of the default functor, if present, to be
-	// used for the notification's callback. It is optional, and used only if 
-	// the notification is constructed without an identified functor.
-	std::string mDefaultFunctor;
-	// The form data associated with a given notification (buttons, text boxes, etc)
-    LLNotificationFormPtr mForm;
-	// default priority for notifications of this type
-	ENotificationPriority mPriority;
-	// UUID of the audio file to be played when this notification arrives
-	// this is loaded as a name, but looked up to get the UUID upon template load.
-	// If null, it wasn't specified.
-	LLUUID mSoundEffect;
-};
+struct LLNotificationTemplate;
 
 // we want to keep a map of these by name, and it's best to manage them
 // with smart pointers
@@ -481,15 +484,11 @@ public:
 		return mIgnored;
 	}
 
-	const std::string& getName() const
-	{
-		return mTemplatep->mName;
-	}
+	const std::string& getName() const;
 
-	bool isPersistent() const
-	{
-		return mTemplatep->mPersist;
-	}
+	const std::string& getIcon() const;
+
+	bool isPersistent() const;
 
 	const LLUUID& id() const
 	{
@@ -511,28 +510,12 @@ public:
 		return mTimestamp;
 	}
 
-	std::string getType() const
-	{
-		return (mTemplatep ? mTemplatep->mType : "");
-	}
-
+	std::string getType() const;
 	std::string getMessage() const;
 	std::string getLabel() const;
-
 	std::string getURL() const;
-//	{
-//		return (mTemplatep ? mTemplatep->mURL : "");
-//	}
-
-	S32 getURLOption() const
-	{
-		return (mTemplatep ? mTemplatep->mURLOption : -1);
-	}
-    
-	S32 getURLOpenExternally() const
-	{
-		return(mTemplatep? mTemplatep->mURLTarget == "_external": -1);
-	}
+	S32 getURLOption() const;
+    S32 getURLOpenExternally() const;
 	
 	const LLNotificationFormPtr getForm();
 
@@ -602,7 +585,7 @@ public:
 	
 	std::string summarize() const;
 
-	bool hasUniquenessConstraints() const { return (mTemplatep ? mTemplatep->mUnique : false);}
+	bool hasUniquenessConstraints() const;
 
 	virtual ~LLNotification() {}
 };
diff --git a/indra/llui/llnotificationtemplate.h b/indra/llui/llnotificationtemplate.h
new file mode 100644
index 0000000000..4a020bfe70
--- /dev/null
+++ b/indra/llui/llnotificationtemplate.h
@@ -0,0 +1,274 @@
+/**
+* @file llnotificationtemplate.h
+* @brief Description of notification contents
+* @author Q (with assistance from Richard and Coco)
+*
+* $LicenseInfo:firstyear=2008&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_LLNOTIFICATION_TEMPLATE_H
+#define LL_LLNOTIFICATION_TEMPLATE_H
+
+//#include <string>
+//#include <list>
+//#include <vector>
+//#include <map>
+//#include <set>
+//#include <iomanip>
+//#include <sstream>
+//
+//#include <boost/utility.hpp>
+//#include <boost/shared_ptr.hpp>
+//#include <boost/enable_shared_from_this.hpp>
+//#include <boost/type_traits.hpp>
+//
+//// we want to minimize external dependencies, but this one is important
+//#include "llsd.h"
+//
+//// and we need this to manage the notification callbacks
+//#include "llevents.h"
+//#include "llfunctorregistry.h"
+//#include "llpointer.h"
+#include "llinitparam.h"
+//#include "llnotificationslistener.h"
+//#include "llnotificationptr.h"
+//#include "llcachename.h"
+#include "llnotifications.h"
+
+
+typedef boost::shared_ptr<LLNotificationForm> LLNotificationFormPtr;
+
+// This is the class of object read from the XML file (notifications.xml, 
+// from the appropriate local language directory).
+struct LLNotificationTemplate
+{
+	struct GlobalString : public LLInitParam::Block<GlobalString>
+	{
+		Mandatory<std::string>	name,
+								value;
+
+		GlobalString()
+		:	name("name"),
+			value("value")
+		{}
+	};
+
+	struct UniquenessContext : public LLInitParam::Block<UniquenessContext>
+	{
+		Mandatory<std::string>	key;
+
+		UniquenessContext()
+		:	key("key")
+		{}
+		
+	};
+
+	struct UniquenessConstraint : public LLInitParam::Block<UniquenessConstraint>
+	{
+		Multiple<UniquenessContext>	contexts;
+
+		UniquenessConstraint()
+		:	contexts("context")
+		{}
+	};
+
+	// Templates are used to define common form types, such as OK/Cancel dialogs, etc.
+
+	struct Template : public LLInitParam::Block<Template>
+	{
+		Mandatory<std::string>					name;
+		Mandatory<LLNotificationForm::Params>	form;
+
+		Template()
+		:	name("name"),
+			form("form")
+		{}
+	};
+
+	// Reference a template to use its form elements
+	struct TemplateRef : public LLInitParam::Block<TemplateRef>
+	{
+		Mandatory<std::string>	name;
+		Optional<std::string>	yes_text,
+								no_text,
+								cancel_text,
+								ignore_text;
+
+		TemplateRef()
+		:	name("name"),
+			yes_text("yestext"),
+			no_text("notext"),
+			cancel_text("canceltext"),
+			ignore_text("ignoretext")
+		{}
+	};
+
+	struct URL : public LLInitParam::Block<URL>
+	{
+		Mandatory<S32>			option;
+		Mandatory<std::string>	value;
+		Optional<std::string>	target;
+		Ignored					name;
+
+		URL()
+		:	option("option", -1),
+			value("value"),
+			target("target", "_blank"),
+			name("name")
+		{}
+	};
+
+	struct FormRef : public LLInitParam::Choice<FormRef>
+	{
+		Alternative<LLNotificationForm::Params>		form;
+		Alternative<TemplateRef>					form_template;
+
+		FormRef()
+		:	form("form"),
+			form_template("usetemplate")
+		{}
+	};
+
+	struct Params : public LLInitParam::Block<Params>
+	{
+		Mandatory<std::string>			name;
+		Optional<bool>					persist;
+		Optional<std::string>			functor,
+										icon,
+										label,
+										sound,
+										type,
+										value;
+		Optional<U32>					duration;
+		Optional<S32>					expire_option;
+		Optional<URL>					url;
+		Optional<UniquenessConstraint>	unique;
+		Optional<FormRef>				form_ref;
+		Optional<ENotificationPriority, 
+			NotificationPriorityValues> priority;
+
+
+		Params()
+		:	name("name"),
+			persist("persist", false),
+			functor("functor"),
+			icon("icon"),
+			label("label"),
+			priority("priority"),
+			sound("sound"),
+			type("type"),
+			value("value"),
+			duration("duration"),
+			expire_option("expireOption", -1),
+			url("url"),
+			unique("unique"),
+			form_ref("")
+		{}
+
+	};
+
+	struct Notifications : public LLInitParam::Block<Notifications>
+	{
+		Multiple<GlobalString>	strings;
+		Multiple<Template>		templates;
+		Multiple<Params>		notifications;
+
+		Notifications()
+		:	strings("global"),
+			notifications("notification"),
+			templates("template")
+		{}
+	};
+
+	LLNotificationTemplate(const Params& p);
+    // the name of the notification -- the key used to identify it
+    // Ideally, the key should follow variable naming rules 
+    // (no spaces or punctuation).
+    std::string mName;
+    // The type of the notification
+    // used to control which queue it's stored in
+    std::string mType;
+    // The text used to display the notification. Replaceable parameters
+    // are enclosed in square brackets like this [].
+    std::string mMessage;
+	// The label for the notification; used for 
+	// certain classes of notification (those with a window and a window title). 
+	// Also used when a notification pops up underneath the current one.
+	// Replaceable parameters can be used in the label.
+	std::string mLabel;
+	// The name of the icon image. This should include an extension.
+	std::string mIcon;
+    // This is the Highlander bit -- "There Can Be Only One"
+    // An outstanding notification with this bit set
+    // is updated by an incoming notification with the same name,
+    // rather than creating a new entry in the queue.
+    // (used for things like progress indications, or repeating warnings
+    // like "the grid is going down in N minutes")
+    bool mUnique;
+    // if we want to be unique only if a certain part of the payload is constant
+    // specify the field names for the payload. The notification will only be
+    // combined if all of the fields named in the context are identical in the
+    // new and the old notification; otherwise, the notification will be
+    // duplicated. This is to support suppressing duplicate offers from the same
+    // sender but still differentiating different offers. Example: Invitation to
+    // conference chat.
+    std::vector<std::string> mUniqueContext;
+    // If this notification expires automatically, this value will be 
+    // nonzero, and indicates the number of seconds for which the notification
+    // will be valid (a teleport offer, for example, might be valid for 
+    // 300 seconds). 
+    U32 mExpireSeconds;
+    // if the offer expires, one of the options is chosen automatically
+    // based on its "value" parameter. This controls which one. 
+    // If expireSeconds is specified, expireOption should also be specified.
+    U32 mExpireOption;
+    // if the notification contains a url, it's stored here (and replaced 
+    // into the message where [_URL] is found)
+    std::string mURL;
+    // if there's a URL in the message, this controls which option visits
+    // that URL. Obsolete this and eliminate the buttons for affected
+    // messages when we allow clickable URLs in the UI
+    U32 mURLOption;
+	
+	std::string mURLTarget;
+	//This is a flag that tells if the url needs to open externally dispite 
+	//what the user setting is.
+	
+	// does this notification persist across sessions? if so, it will be
+	// serialized to disk on first receipt and read on startup
+	bool mPersist;
+	// This is the name of the default functor, if present, to be
+	// used for the notification's callback. It is optional, and used only if 
+	// the notification is constructed without an identified functor.
+	std::string mDefaultFunctor;
+	// The form data associated with a given notification (buttons, text boxes, etc)
+    LLNotificationFormPtr mForm;
+	// default priority for notifications of this type
+	ENotificationPriority mPriority;
+	// UUID of the audio file to be played when this notification arrives
+	// this is loaded as a name, but looked up to get the UUID upon template load.
+	// If null, it wasn't specified.
+	LLUUID mSoundEffect;
+};
+
+#endif //LL_LLNOTIFICATION_TEMPLATE_H
+
-- 
cgit v1.2.3


From cd7fd8829af1cff3e77ea7aab14a968912170567 Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Thu, 16 Sep 2010 00:39:40 -0700
Subject: refactored notification template into own header file

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

diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index 9892b4e357..50aacc6458 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -57,6 +57,7 @@
 #include "llnearbychat.h"
 #include "llnotifications.h"
 #include "llnotificationsutil.h"
+#include "llnotificationtemplate.h"
 #include "llpanellogin.h"
 #include "llradiogroup.h"
 #include "llsearchcombobox.h"
-- 
cgit v1.2.3


From cacade69ce944ede139e5c70c4f9db9f8dac00a1 Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Thu, 16 Sep 2010 00:40:07 -0700
Subject: refactored notification template into own header file

---
 indra/newview/CMakeLists.txt | 1 +
 1 file changed, 1 insertion(+)

diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 2920b30129..c236dc1c3f 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -91,6 +91,7 @@ set(viewer_SOURCE_FILES
     llbottomtray.cpp
     llbox.cpp
     llbreadcrumbview.cpp
+    llbrowsernotification.cpp
     llbuycurrencyhtml.cpp
     llcallbacklist.cpp
     llcallfloater.cpp
-- 
cgit v1.2.3


From 8f51615aa7c8cab8137c82e89446928e3632dc74 Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Thu, 16 Sep 2010 00:41:27 -0700
Subject: fixed serialization of choice blocks sometimes including more than
 one alternative fixed deserialization of Multiple<Block> leaving dummy blocks
 around when failing to find matching key

---
 indra/llxuixml/llinitparam.cpp |  2 +-
 indra/llxuixml/llinitparam.h   | 25 ++++++++++++++++++++-----
 2 files changed, 21 insertions(+), 6 deletions(-)

diff --git a/indra/llxuixml/llinitparam.cpp b/indra/llxuixml/llinitparam.cpp
index 7b6be55ec7..dc4d93d38a 100644
--- a/indra/llxuixml/llinitparam.cpp
+++ b/indra/llxuixml/llinitparam.cpp
@@ -178,7 +178,7 @@ namespace LLInitParam
 			param_handle_t param_handle = it->second->mParamHandle;
 			const Param* param = getParamFromHandle(param_handle);
 			ParamDescriptor::serialize_func_t serialize_func = it->second->mSerializeFunc;
-			if (serialize_func)
+			if (serialize_func && param->getProvided())
 			{
 				// Ensure this param has not already been serialized
 				// Prevents <rect> from being serialized as its own tag.
diff --git a/indra/llxuixml/llinitparam.h b/indra/llxuixml/llinitparam.h
index 2d281dd0b8..610381dcfe 100644
--- a/indra/llxuixml/llinitparam.h
+++ b/indra/llxuixml/llinitparam.h
@@ -1101,24 +1101,28 @@ namespace LLInitParam
 		static bool deserializeParam(Param& param, Parser& parser, const Parser::name_stack_range_t& name_stack, S32 generation) 
 		{ 
 			self_t& typed_param = static_cast<self_t&>(param);
+			bool new_value = false;
 			if (generation != typed_param.mLastParamGeneration || typed_param.mValues.empty())
 			{
+				new_value = true;
 				typed_param.mValues.push_back(value_t());
 				typed_param.mCachedKeys.push_back(Data());
-				typed_param.enclosingBlock().setLastChangedParam(param, true);
-				typed_param.mLastParamGeneration = generation;
 			}
 
-			value_t& value = typed_param.mValues.back();
+			value_ref_t value = typed_param.mValues.back();
 
 			// attempt to parse block...
 			if(value.deserializeBlock(parser, name_stack))
 			{
+				if (new_value)
+				{	// successfully parsed new value, let's keep it
+					typed_param.mLastParamGeneration = generation;
+				}
+				typed_param.enclosingBlock().setLastChangedParam(param, true);
 				typed_param.setProvided(true);
 				return true;
 			}
-
-			if(!NAME_VALUE_LOOKUP::empty())
+			else if(!NAME_VALUE_LOOKUP::empty())
 			{
 				// try to parse a known named value
 				std::string name;
@@ -1127,6 +1131,11 @@ namespace LLInitParam
 					// try to parse a per type named value
 					if (NAME_VALUE_LOOKUP::get(name, value))
 					{
+						if (new_value)
+						{	// successfully parsed new value, let's keep it
+							typed_param.mLastParamGeneration = generation;
+						}
+
 						typed_param.mCachedKeys.back().setKey(name);
 						typed_param.mCachedKeys.back().mKeyVersion = value.getLastChangeVersion();
 						typed_param.enclosingBlock().setLastChangedParam(param, true);
@@ -1137,6 +1146,12 @@ namespace LLInitParam
 				}
 			}
 
+			if (new_value)
+			{	// failed to parse new value, pop it off
+				typed_param.mValues.pop_back();
+				typed_param.mCachedKeys.pop_back();
+			}
+
 			return false;
 		}
 
-- 
cgit v1.2.3


From dcebc0114907e9cc1f78b239edc93138a4b5c0e4 Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Thu, 16 Sep 2010 00:41:45 -0700
Subject: made LLView::getUseBoundingRect() const and used it internally

---
 indra/llui/llview.cpp | 16 ++++++++--------
 indra/llui/llview.h   |  2 +-
 2 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp
index a6f1af9274..3fa86bf0ca 100644
--- a/indra/llui/llview.cpp
+++ b/indra/llui/llview.cpp
@@ -214,7 +214,7 @@ void LLView::setUseBoundingRect( BOOL use_bounding_rect )
 	}
 }
 
-BOOL LLView::getUseBoundingRect()
+BOOL LLView::getUseBoundingRect() const
 {
 	return mUseBoundingRect;
 }
@@ -1366,12 +1366,12 @@ void LLView::drawDebugRect()
 		// drawing solids requires texturing be disabled
 		gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
 
-		if (mUseBoundingRect)
+		if (getUseBoundingRect())
 		{
 			LLUI::translate((F32)mBoundingRect.mLeft - (F32)mRect.mLeft, (F32)mBoundingRect.mBottom - (F32)mRect.mBottom, 0.f);
 		}
 
-		LLRect debug_rect = mUseBoundingRect ? mBoundingRect : mRect;
+		LLRect debug_rect = getUseBoundingRect() ? mBoundingRect : mRect;
 
 		// draw red rectangle for the border
 		LLColor4 border_color(0.25f, 0.25f, 0.25f, 1.f);
@@ -1569,7 +1569,7 @@ void LLView::updateBoundingRect()
 
 	LLRect cur_rect = mBoundingRect;
 
-	if (mUseBoundingRect)
+	if (getUseBoundingRect())
 	{
 		mBoundingRect = calcBoundingRect();
 	}
@@ -1579,7 +1579,7 @@ void LLView::updateBoundingRect()
 	}
 
 	// give parent view a chance to resize, in case we just moved, for example
-	if (getParent() && getParent()->mUseBoundingRect)
+	if (getParent() && getParent()->getUseBoundingRect())
 	{
 		getParent()->updateBoundingRect();
 	}
@@ -1603,7 +1603,7 @@ LLRect LLView::calcScreenBoundingRect() const
 {
 	LLRect screen_rect;
 	// get bounding rect, if used
-	LLRect bounding_rect = mUseBoundingRect ? mBoundingRect : mRect;
+	LLRect bounding_rect = getUseBoundingRect() ? mBoundingRect : mRect;
 
 	// convert to local coordinates, as defined by mRect
 	bounding_rect.translate(-mRect.mLeft, -mRect.mBottom);
@@ -1734,14 +1734,14 @@ LLView* LLView::findChildView(const std::string& name, BOOL recurse) const
 
 BOOL LLView::parentPointInView(S32 x, S32 y, EHitTestType type) const 
 { 
-	return (mUseBoundingRect && type == HIT_TEST_USE_BOUNDING_RECT)
+	return (getUseBoundingRect() && type == HIT_TEST_USE_BOUNDING_RECT)
 		? mBoundingRect.pointInRect( x, y ) 
 		: mRect.pointInRect( x, y ); 
 }
 
 BOOL LLView::pointInView(S32 x, S32 y, EHitTestType type) const 
 { 
-	return (mUseBoundingRect && type == HIT_TEST_USE_BOUNDING_RECT)
+	return (getUseBoundingRect() && type == HIT_TEST_USE_BOUNDING_RECT)
 		? mBoundingRect.pointInRect( x + mRect.mLeft, y + mRect.mBottom ) 
 		: mRect.localPointInRect( x, y ); 
 }
diff --git a/indra/llui/llview.h b/indra/llui/llview.h
index 3504bb6619..6bcee98f26 100644
--- a/indra/llui/llview.h
+++ b/indra/llui/llview.h
@@ -234,7 +234,7 @@ public:
 	void        setSoundFlags(U8 flags)			{ mSoundFlags = flags; }
 	void		setName(std::string name)			{ mName = name; }
 	void		setUseBoundingRect( BOOL use_bounding_rect );
-	BOOL		getUseBoundingRect();
+	BOOL		getUseBoundingRect() const;
 
 	ECursorType	getHoverCursor() { return mHoverCursor; }
 
-- 
cgit v1.2.3


From f07c4f5bdc2358f65cc0aafe2b793c9854e0958a Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Thu, 16 Sep 2010 00:42:01 -0700
Subject: streamlined llsd serialization logic of param blocks

---
 indra/llui/llsdparam.cpp | 25 +++----------------------
 1 file changed, 3 insertions(+), 22 deletions(-)

diff --git a/indra/llui/llsdparam.cpp b/indra/llui/llsdparam.cpp
index e3cadf4998..f97f80ab6c 100644
--- a/indra/llui/llsdparam.cpp
+++ b/indra/llui/llsdparam.cpp
@@ -29,6 +29,7 @@
 
 // Project includes
 #include "llsdparam.h"
+#include "llsdutil.h"
 
 static 	LLInitParam::Parser::parser_read_func_map_t sReadFuncs;
 static 	LLInitParam::Parser::parser_write_func_map_t sWriteFuncs;
@@ -162,28 +163,7 @@ LLSD* LLParamSDParser::getSDWriteNode(const parser_t::name_stack_t& name_stack)
 			}
 		}
 
-		LLSD* child_sd = NULL;
-		if (it->first.empty())
-		{
-			if (sd_to_write->isUndefined())
-			{
-				*sd_to_write = LLSD::emptyArray();
-				child_sd = sd_to_write;
-			}
-			else if (sd_to_write->isArray())
-			{
-				child_sd = sd_to_write;
-			}
-			else
-			{
-				// go ahead and use the empty string as a map key
-				child_sd = &(*sd_to_write)[""];
-			}
-		}
-		else
-		{
-			child_sd = &(*sd_to_write)[it->first];
-		}
+		LLSD* child_sd = &(*sd_to_write)[it->first];
 
 		if (child_sd->isArray())
 		{
@@ -222,6 +202,7 @@ LLSD* LLParamSDParser::getSDWriteNode(const parser_t::name_stack_t& name_stack)
 	}
 	mNameStack = name_stack;
 	
+	//llinfos << ll_pretty_print_sd(*mWriteRootSD) << llendl;
 	return sd_to_write;
 }
 
-- 
cgit v1.2.3


From 54147dcb9e2e78430b52573164c567c3f30bd6aa Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Thu, 16 Sep 2010 00:42:14 -0700
Subject: added missing attribute

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

diff --git a/indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml b/indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml
index e261d6d555..2be95fc081 100644
--- a/indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml
+++ b/indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml
@@ -17,6 +17,7 @@
    left="10"
    name="stack"
    top_pad="10"
+   orientation="vertical" 
    width="313">
     <layout_panel
      height="550"
-- 
cgit v1.2.3


From 32d294960eed61a25896c06fa122a616eef081e7 Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Thu, 16 Sep 2010 00:42:37 -0700
Subject: added duration and icon to PopupAttempt notification

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

diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 4b11e68252..59fcd3513e 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -1,6 +1,5 @@
 <?xml version="1.0" ?><notifications>
-
-  <global name="skipnexttime">
+    <global name="skipnexttime">
 
 		Don&apos;t show me this again
   </global>
@@ -2033,8 +2032,8 @@ Offer friendship to [NAME]?
   </notification>
 
   <notification
-   icon="alertmodal.tga"
-   label="Add Friend"
+ icon="alertmodal.tga"
+ label="Add Friend"
    name="AddFriendWithMessage"
    type="alertmodal">
 Friends can give permissions to track each other on the map and receive online status updates.
@@ -6454,7 +6453,10 @@ Mute everyone?
 
   <notification
   name="PopupAttempt"
-  type="browser">
+  icon="Popup_Caution"
+  type="browser"
+  duration="10"
+  >
     A pop-up was prevented from opening.
     <unique/>
     <form name="form">
-- 
cgit v1.2.3


From 9c7a1c78045cc4741dc7cad01b02773cff014d7c Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Thu, 16 Sep 2010 00:43:32 -0700
Subject: deprecated text_enabled_color and text_disabled_color from
 LLCheckBoxCtrl in favor of label_text.text_color and
 label_text.text_readonly_color, respectively

---
 indra/llui/llcheckboxctrl.cpp                                 | 9 +++------
 indra/llui/llcheckboxctrl.h                                   | 2 --
 indra/newview/skins/default/xui/en/alert_check_box.xml        | 4 ++--
 indra/newview/skins/default/xui/en/floater_first_time_tip.xml | 2 +-
 indra/newview/skins/default/xui/en/floater_test_checkbox.xml  | 4 ++--
 indra/newview/skins/default/xui/en/panel_edit_profile.xml     | 2 +-
 indra/newview/skins/default/xui/en/widgets/check_box.xml      | 8 ++++----
 7 files changed, 13 insertions(+), 18 deletions(-)

diff --git a/indra/llui/llcheckboxctrl.cpp b/indra/llui/llcheckboxctrl.cpp
index cbc8f12472..bbd8db2645 100644
--- a/indra/llui/llcheckboxctrl.cpp
+++ b/indra/llui/llcheckboxctrl.cpp
@@ -50,9 +50,7 @@ template class LLCheckBoxCtrl* LLView::getChild<class LLCheckBoxCtrl>(
 	const std::string& name, BOOL recurse) const;
 
 LLCheckBoxCtrl::Params::Params()
-:	text_enabled_color("text_enabled_color"),
-	text_disabled_color("text_disabled_color"),
-	initial_value("initial_value", false),
+:	initial_value("initial_value", false),
 	label_text("label_text"),
 	check_button("check_button"),
 	radio_style("radio_style")
@@ -61,8 +59,8 @@ LLCheckBoxCtrl::Params::Params()
 
 LLCheckBoxCtrl::LLCheckBoxCtrl(const LLCheckBoxCtrl::Params& p)
 :	LLUICtrl(p),
-	mTextEnabledColor(p.text_enabled_color()),
-	mTextDisabledColor(p.text_disabled_color()),
+	mTextEnabledColor(p.label_text.text_color()),
+	mTextDisabledColor(p.label_text.text_readonly_color()),
 	mFont(p.font())
 {
 	mViewModel->setValue(LLSD(p.initial_value));
@@ -89,7 +87,6 @@ LLCheckBoxCtrl::LLCheckBoxCtrl(const LLCheckBoxCtrl::Params& p)
 	{
 		tbparams.font(p.font);
 	}
-	tbparams.text_color( p.enabled() ? p.text_enabled_color() : p.text_disabled_color() );
 	mLabel = LLUICtrlFactory::create<LLTextBox> (tbparams);
 	addChild(mLabel);
 
diff --git a/indra/llui/llcheckboxctrl.h b/indra/llui/llcheckboxctrl.h
index 0147088280..67d8091a97 100644
--- a/indra/llui/llcheckboxctrl.h
+++ b/indra/llui/llcheckboxctrl.h
@@ -52,8 +52,6 @@ public:
 	struct Params 
 	:	public LLInitParam::Block<Params, LLUICtrl::Params>
 	{
-		Optional<LLUIColor>		text_enabled_color;
-		Optional<LLUIColor>		text_disabled_color;
 		Optional<bool>			initial_value;	// override LLUICtrl initial_value
 
 		Optional<LLTextBox::Params> label_text;
diff --git a/indra/newview/skins/default/xui/en/alert_check_box.xml b/indra/newview/skins/default/xui/en/alert_check_box.xml
index 9f1bdb5193..5535a5dc2a 100644
--- a/indra/newview/skins/default/xui/en/alert_check_box.xml
+++ b/indra/newview/skins/default/xui/en/alert_check_box.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <check_box
-  text_enabled_color="LabelTextColor"
-  text_disabled_color="LabelDisabledColor"
+  label_text.text_color="LabelTextColor"
+  label_text.text_readonly_color="LabelDisabledColor"
   font="SansSerif"
   follows="left|top"
   name="check"/>
\ No newline at end of file
diff --git a/indra/newview/skins/default/xui/en/floater_first_time_tip.xml b/indra/newview/skins/default/xui/en/floater_first_time_tip.xml
index e4ac8fed77..084b3167c7 100644
--- a/indra/newview/skins/default/xui/en/floater_first_time_tip.xml
+++ b/indra/newview/skins/default/xui/en/floater_first_time_tip.xml
@@ -16,7 +16,7 @@
      layout="topleft"
      left="5"
      name="DontShowFirstTimeTip_checkbox"
-     text_enabled_color="white"
+     label_text.text_color="white"
      top="225"
      width="200" />
 </floater>
diff --git a/indra/newview/skins/default/xui/en/floater_test_checkbox.xml b/indra/newview/skins/default/xui/en/floater_test_checkbox.xml
index 1935edfcc1..95aaadfcf3 100644
--- a/indra/newview/skins/default/xui/en/floater_test_checkbox.xml
+++ b/indra/newview/skins/default/xui/en/floater_test_checkbox.xml
@@ -41,7 +41,7 @@
      layout="topleft"
      left_delta="0"
      name="text_enabled_color_checkbox"
-     text_enabled_color="EmphasisColor"
+     label_text.text_color="EmphasisColor"
      top_pad="14"
      width="150" />
     <check_box
@@ -51,7 +51,7 @@
      layout="topleft"
      left_delta="0"
      name="text_disabled_color_checkbox"
-     text_disabled_color="EmphasisColor_35"
+     label_text.text_readonly_color="EmphasisColor_35"
      top_pad="14"
      width="150" />
     <check_box
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 5072ec3a66..48bd9ace21 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
@@ -242,7 +242,7 @@
        left="8"
        name="show_in_search_checkbox"
        height="15"
-       text_enabled_color="white"
+       label_text.text_color="white"
        top_pad="12"
        width="100" />
       <text
diff --git a/indra/newview/skins/default/xui/en/widgets/check_box.xml b/indra/newview/skins/default/xui/en/widgets/check_box.xml
index 726ae803fe..7a60bee338 100644
--- a/indra/newview/skins/default/xui/en/widgets/check_box.xml
+++ b/indra/newview/skins/default/xui/en/widgets/check_box.xml
@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<check_box text_enabled_color="LabelTextColor"
-           text_disabled_color="LabelDisabledColor"
-           font="SansSerifSmall"
+<check_box font="SansSerifSmall"
            follows="left|top">
-  <check_box.label_text name="checkbox label" />
+  <check_box.label_text name="checkbox label"
+                        text_color="LabelTextColor"
+                        text_readonly_color="LabelDisabledColor"/>
   <check_box.check_button name="CheckboxCtrl Button"
                           commit_on_return="false"
                           label=""
-- 
cgit v1.2.3


From 0336487e34425c1630cd84da45dc64bc7c7c03be Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Thu, 16 Sep 2010 00:43:42 -0700
Subject: refactored notification template into own header file

---
 indra/llui/CMakeLists.txt | 1 +
 1 file changed, 1 insertion(+)

diff --git a/indra/llui/CMakeLists.txt b/indra/llui/CMakeLists.txt
index 8e78a5fefd..e98201ea63 100644
--- a/indra/llui/CMakeLists.txt
+++ b/indra/llui/CMakeLists.txt
@@ -158,6 +158,7 @@ set(llui_HEADER_FILES
     llnotifications.h
     llnotificationslistener.h
     llnotificationsutil.h
+    llnotificationtemplate.h
     llpanel.h
     llprogressbar.h
     llradiogroup.h
-- 
cgit v1.2.3


From 387011a1ff519d0e339b446ff5d02f0d009b7e5d Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Thu, 16 Sep 2010 00:45:27 -0700
Subject: EXP-29 WIP Implement popup blocking added web popup notification
 overlay

---
 indra/newview/llbrowsernotification.cpp            |  57 ++++++++
 indra/newview/llfloatermediabrowser.cpp            | 100 ++++++++++++++
 indra/newview/llfloatermediabrowser.h              |   8 ++
 indra/newview/llmediactrl.cpp                      |  36 ++++-
 indra/newview/llmediactrl.h                        |   4 +
 indra/newview/llnotificationhandler.h              |   9 ++
 indra/newview/llnotificationmanager.cpp            |   2 +
 indra/newview/llviewermedia.cpp                    |  18 ---
 .../skins/default/xui/en/floater_media_browser.xml | 146 +++++++++++----------
 9 files changed, 287 insertions(+), 93 deletions(-)
 create mode 100644 indra/newview/llbrowsernotification.cpp

diff --git a/indra/newview/llbrowsernotification.cpp b/indra/newview/llbrowsernotification.cpp
new file mode 100644
index 0000000000..e162527e23
--- /dev/null
+++ b/indra/newview/llbrowsernotification.cpp
@@ -0,0 +1,57 @@
+/**
+ * @file llbrowsernotification.cpp
+ * @brief Notification Handler Class for browser popups
+ *
+ * $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 "llnotifications.h"
+#include "llfloatermediabrowser.h"
+#include "llfloaterreg.h"
+
+using namespace LLNotificationsUI;
+
+bool LLBrowserNotification::processNotification(const LLSD& notify)
+{
+	LLNotificationPtr notification = LLNotifications::instance().find(notify["id"].asUUID());
+
+	if (notification)
+	{
+		LLFloaterMediaBrowser* browserp = dynamic_cast<LLFloaterMediaBrowser*>(LLFloaterReg::findInstance("media_browser", notification->getPayload()["source"]));
+		if (notify["sigtype"].asString() == "add" || notify["sigtype"].asString() == "load")
+		{
+			if (browserp)
+			{
+				browserp->showNotification(notification);
+			}
+		}
+		else if (notify["sigtype"].asString() == "delete")
+		{
+			browserp->hideNotification();
+		}
+	}
+	return false;
+}
diff --git a/indra/newview/llfloatermediabrowser.cpp b/indra/newview/llfloatermediabrowser.cpp
index 5d0df1f037..ba8128e902 100644
--- a/indra/newview/llfloatermediabrowser.cpp
+++ b/indra/newview/llfloatermediabrowser.cpp
@@ -45,7 +45,10 @@
 #include "llviewermedia.h"
 #include "llviewerparcelmedia.h"
 #include "llcombobox.h"
+#include "lllayoutstack.h"
+#include "llcheckboxctrl.h"
 
+#include "llnotifications.h"
 
 // TEMP
 #include "llsdutil.h"
@@ -141,12 +144,16 @@ void LLFloaterMediaBrowser::draw()
 BOOL LLFloaterMediaBrowser::postBuild()
 {
 	mBrowser = getChild<LLMediaCtrl>("browser");
+	mBrowser->setMediaID(mKey);
 	mBrowser->addObserver(this);
 
 	mAddressCombo = getChild<LLComboBox>("address");
 	mAddressCombo->setCommitCallback(onEnterAddress, this);
 	mAddressCombo->sortByName();
 
+	LLButton& notification_close = getChildRef<LLButton>("close_notification");
+	notification_close.setClickedCallback(boost::bind(&LLFloaterMediaBrowser::onCloseNotification, this), NULL);
+
 	childSetAction("back", onClickBack, this);
 	childSetAction("forward", onClickForward, this);
 	childSetAction("reload", onClickRefresh, this);
@@ -243,6 +250,73 @@ void LLFloaterMediaBrowser::setCurrentURL(const std::string& url)
 	getChildView("reload")->setEnabled(TRUE);
 }
 
+void LLFloaterMediaBrowser::showNotification(LLNotificationPtr notify)
+{
+	mCurNotification = notify;
+
+	// add popup here
+	LLSD payload = notify->getPayload();
+
+	LLNotificationFormPtr formp = notify->getForm();
+	LLLayoutPanel& panel = getChildRef<LLLayoutPanel>("notification_area");
+	panel.setVisible(true);
+	panel.getChild<LLUICtrl>("notification_icon")->setValue(notify->getIcon());
+	panel.getChild<LLUICtrl>("notification_text")->setValue(notify->getMessage());
+	panel.getChild<LLUICtrl>("notification_text")->setToolTip(notify->getMessage());
+	LLNotificationForm::EIgnoreType ignore_type = formp->getIgnoreType(); 
+	LLLayoutPanel& form_elements = panel.getChildRef<LLLayoutPanel>("form_elements");
+
+	const S32 FORM_PADDING_HORIZONTAL = 10;
+	const S32 FORM_PADDING_VERTICAL = 5;
+	S32 cur_x = FORM_PADDING_HORIZONTAL;
+
+	if (ignore_type != LLNotificationForm::IGNORE_NO)
+	{
+		LLCheckBoxCtrl::Params checkbox_p;
+		checkbox_p.name = "ignore_check";
+		checkbox_p.rect = LLRect(cur_x, form_elements.getRect().getHeight() - FORM_PADDING_VERTICAL, cur_x, FORM_PADDING_VERTICAL);
+		checkbox_p.label = formp->getIgnoreMessage();
+		checkbox_p.label_text.text_color = LLColor4::black;
+		checkbox_p.commit_callback.function = boost::bind(&LLFloaterMediaBrowser::onClickIgnore, this, _1);
+
+		LLCheckBoxCtrl* check = LLUICtrlFactory::create<LLCheckBoxCtrl>(checkbox_p);
+		check->setRect(check->getBoundingRect());
+		form_elements.addChild(check);
+		cur_x = check->getRect().mRight + FORM_PADDING_HORIZONTAL;
+	}
+
+	for (S32 i = 0; i < formp->getNumElements(); i++)
+	{
+		LLSD form_element = formp->getElement(i);
+		if (form_element["type"].asString() == "button")
+		{
+			LLButton::Params button_p;
+			button_p.name = form_element["name"];
+			button_p.label = form_element["text"];
+			button_p.rect = LLRect(cur_x, form_elements.getRect().getHeight() - FORM_PADDING_VERTICAL, cur_x, FORM_PADDING_VERTICAL);
+			button_p.commit_callback.function = boost::bind(&LLFloaterMediaBrowser::onClickNotificationButton, this, form_element["name"].asString());
+			button_p.auto_resize = true;
+
+			LLButton* button = LLUICtrlFactory::create<LLButton>(button_p);
+			button->autoResize();
+			form_elements.addChild(button);
+
+			cur_x = button->getRect().mRight + FORM_PADDING_HORIZONTAL;
+		}
+	}
+
+
+	form_elements.reshape(cur_x, form_elements.getRect().getHeight());
+
+	//LLWeb::loadURL(payload["url"], payload["target"]);
+}
+
+void LLFloaterMediaBrowser::hideNotification()
+{
+	LLLayoutPanel& panel = getChildRef<LLLayoutPanel>("notification_area");
+	panel.setVisible(FALSE);
+}
+
 //static 
 void LLFloaterMediaBrowser::onEnterAddress(LLUICtrl* ctrl, void* user_data)
 {
@@ -374,3 +448,29 @@ void LLFloaterMediaBrowser::openMedia(const std::string& media_url)
 	mBrowser->navigateTo(media_url);
 	setCurrentURL(media_url);
 }
+
+void LLFloaterMediaBrowser::onCloseNotification()
+{
+	LLNotifications::instance().cancel(mCurNotification);
+}
+
+void LLFloaterMediaBrowser::onClickIgnore(LLUICtrl* ctrl)
+{
+	bool check = ctrl->getValue().asBoolean();
+	if (mCurNotification && mCurNotification->getForm()->getIgnoreType() == LLNotificationForm::IGNORE_SHOW_AGAIN)
+	{
+		// question was "show again" so invert value to get "ignore"
+		check = !check;
+	}
+	mCurNotification->setIgnored(check);
+}
+
+void LLFloaterMediaBrowser::onClickNotificationButton(const std::string& name)
+{
+	if (!mCurNotification) return;
+
+	LLSD response = mCurNotification->getResponseTemplate();
+	response[name] = true;
+
+	mCurNotification->respond(response); 
+}
diff --git a/indra/newview/llfloatermediabrowser.h b/indra/newview/llfloatermediabrowser.h
index ee4aef814f..e6511c6e85 100644
--- a/indra/newview/llfloatermediabrowser.h
+++ b/indra/newview/llfloatermediabrowser.h
@@ -33,6 +33,7 @@
 
 class LLComboBox;
 class LLMediaCtrl;
+class LLNotification;
 
 class LLFloaterMediaBrowser : 
 	public LLFloater, 
@@ -55,6 +56,8 @@ public:
 	void buildURLHistory();
 	std::string getSupportURL();
 	void setCurrentURL(const std::string& url);
+	void showNotification(boost::shared_ptr<LLNotification> notify);
+	void hideNotification();
 
 	static void onEnterAddress(LLUICtrl* ctrl, void* user_data);
 	static void onClickRefresh(void* user_data);
@@ -70,9 +73,14 @@ public:
 	static void onClickSeek(void* user_data);
 
 private:
+	void onCloseNotification();
+	void onClickIgnore(LLUICtrl* ctrl);
+	void onClickNotificationButton(const std::string& name);
+
 	LLMediaCtrl* mBrowser;
 	LLComboBox* mAddressCombo;
 	std::string mCurrentURL;
+	boost::shared_ptr<LLNotification> mCurNotification;
 };
 
 #endif  // LL_LLFLOATERMEDIABROWSER_H
diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp
index 1de249a3c1..16519bc0d5 100644
--- a/indra/newview/llmediactrl.cpp
+++ b/indra/newview/llmediactrl.cpp
@@ -48,6 +48,7 @@
 
 // linden library includes
 #include "llfocusmgr.h"
+#include "llsdutil.h"
 
 extern BOOL gRestoreGL;
 
@@ -62,7 +63,8 @@ LLMediaCtrl::Params::Params()
 	texture_width("texture_width", 1024),
 	texture_height("texture_height", 1024),
 	caret_color("caret_color"),
-	initial_mime_type("initial_mime_type")
+	initial_mime_type("initial_mime_type"),
+	media_id("media_id")
 {
 	tab_stop(false);
 }
@@ -88,6 +90,7 @@ LLMediaCtrl::LLMediaCtrl( const Params& p) :
 	mTextureWidth ( 1024 ),
 	mTextureHeight ( 1024 ),
 	mClearCache(false),
+	mMediaID(p.media_id),
 	mHomePageMimeType(p.initial_mime_type)
 {
 	{
@@ -924,9 +927,29 @@ void LLMediaCtrl::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event)
 		case MEDIA_EVENT_CLICK_LINK_HREF:
 		{
 			LL_DEBUGS("Media") <<  "Media event:  MEDIA_EVENT_CLICK_LINK_HREF, target is \"" << self->getClickTarget() << "\", uri is " << self->getClickURL() << LL_ENDL;
+			// retrieve the event parameters
+			std::string url = self->getClickURL();
+			std::string target = self->getClickTarget();
+			U32 target_type = self->getClickTargetType();
+
+			switch (target_type)
+			{
+			case LLPluginClassMedia::TARGET_NONE:
+				// ignore this click and let media plugin handle it
+				break;
+			default:
+				if(gSavedSettings.getBOOL("MediaEnablePopups"))
+				{
+
+					LLNotificationsUtil::add("PopupAttempt", 
+						LLSD(), 
+						LLSD().with("source", mMediaID).with("target", target).with("url", url),
+						boost::bind(&LLMediaCtrl::onPopup, this, _1, _2));
+				}
+				break;
+			}
 		};
-		break;
-		
+
 		case MEDIA_EVENT_CLICK_LINK_NOFOLLOW:
 		{
 			LL_DEBUGS("Media") <<  "Media event:  MEDIA_EVENT_CLICK_LINK_NOFOLLOW, uri is " << self->getClickURL() << LL_ENDL;
@@ -975,3 +998,10 @@ std::string LLMediaCtrl::getCurrentNavUrl()
 	return mCurrentNavUrl;
 }
 
+void LLMediaCtrl::onPopup(const LLSD& notification, const LLSD& response)
+{
+	if (response["open"])
+	{
+		LLWeb::loadURL(notification["payload"]["url"], notification["payload"]["target"]);
+	}
+}
diff --git a/indra/newview/llmediactrl.h b/indra/newview/llmediactrl.h
index 755d1e1b04..3ba2904003 100644
--- a/indra/newview/llmediactrl.h
+++ b/indra/newview/llmediactrl.h
@@ -59,6 +59,7 @@ public:
 		Optional<LLUIColor>		caret_color;
 
 		Optional<std::string>	initial_mime_type;
+		Optional<std::string>	media_id;
 		
 		Params();
 	};
@@ -139,6 +140,7 @@ public:
 		bool getDecoupleTextureSize() { return mDecoupleTextureSize; }
 
 		void setTextureSize(S32 width, S32 height);
+		void setMediaID(const std::string& id) { mMediaID = id; }
 
 
 		// over-rides
@@ -161,6 +163,7 @@ public:
 
 	private:
 		void onVisibilityChange ( const LLSD& new_visibility );
+		void onPopup(const LLSD& notification, const LLSD& response);
 
 		const S32 mTextureDepthBytes;
 		LLUUID mMediaTextureID;
@@ -182,6 +185,7 @@ public:
 		bool mDecoupleTextureSize;
 		S32 mTextureWidth;
 		S32 mTextureHeight;
+		std::string mMediaID;
 		bool mClearCache;
 };
 
diff --git a/indra/newview/llnotificationhandler.h b/indra/newview/llnotificationhandler.h
index 3c84a02b68..28a69f2373 100644
--- a/indra/newview/llnotificationhandler.h
+++ b/indra/newview/llnotificationhandler.h
@@ -276,6 +276,15 @@ public:
 	virtual bool processNotification(const LLSD& notify);
 };
 
+/**
+ * Handler for browser notifications
+ */
+class LLBrowserNotification : public LLSingleton<LLBrowserNotification>
+{
+public:
+	virtual bool processNotification(const LLSD& notify);
+	
+};
 
 class LLHandlerUtil
 {
diff --git a/indra/newview/llnotificationmanager.cpp b/indra/newview/llnotificationmanager.cpp
index 17cf1ab2b8..6988227128 100644
--- a/indra/newview/llnotificationmanager.cpp
+++ b/indra/newview/llnotificationmanager.cpp
@@ -61,6 +61,7 @@ void LLNotificationManager::init()
 	LLNotificationChannel::buildChannel("IM Notifications", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "notifytoast"));
 	LLNotificationChannel::buildChannel("Offer", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "offer"));
 	LLNotificationChannel::buildChannel("Hints", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "hint"));
+	LLNotificationChannel::buildChannel("Browser", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "browser"));
   
 	LLNotifications::instance().getChannel("Notifications")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1));
 	LLNotifications::instance().getChannel("NotificationTips")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1));
@@ -70,6 +71,7 @@ void LLNotificationManager::init()
 	LLNotifications::instance().getChannel("IM Notifications")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1));
 	LLNotifications::instance().getChannel("Offer")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1));
 	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["notifytip"] =  boost::shared_ptr<LLEventHandler>(new LLTipHandler(NT_NOTIFY, LLSD()));
diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp
index 012a4d2920..31e4753553 100644
--- a/indra/newview/llviewermedia.cpp
+++ b/indra/newview/llviewermedia.cpp
@@ -2819,24 +2819,6 @@ void LLViewerMediaImpl::handleMediaEvent(LLPluginClassMedia* plugin, LLPluginCla
 		case MEDIA_EVENT_CLICK_LINK_HREF:
 		{
 			LL_DEBUGS("Media") <<  "Media event:  MEDIA_EVENT_CLICK_LINK_HREF, target is \"" << plugin->getClickTarget() << "\", uri is " << plugin->getClickURL() << LL_ENDL;
-			// retrieve the event parameters
-			std::string url = plugin->getClickURL();
-			std::string target = plugin->getClickTarget();
-			U32 target_type = plugin->getClickTargetType();
-
-			switch (target_type)
-			{
-			case LLPluginClassMedia::TARGET_NONE:
-				// ignore this click and let media plugin handle it
-				break;
-			default:
-				if(gSavedSettings.getBOOL("MediaEnablePopups"))
-				{
-					// loadURL now handles distinguishing between _blank, _external, and other named targets.
-					LLWeb::loadURL(url, target);
-				}
-				break;
-			}
 		};
 		break;
 		case MEDIA_EVENT_PLUGIN_FAILED_LAUNCH:
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 3b78da2a79..c220124f46 100644
--- a/indra/newview/skins/default/xui/en/floater_media_browser.xml
+++ b/indra/newview/skins/default/xui/en/floater_media_browser.xml
@@ -31,6 +31,7 @@
      width="800">
         <layout_panel
          auto_resize="false"
+         default_tab_group="1" 
          height="20"
          layout="topleft"
          left="0"
@@ -78,6 +79,7 @@
             <combo_box
              allow_text_entry="true"
              follows="left|top|right"
+             tab_group="1"
              height="20"
              layout="topleft"
              left_pad="5"
@@ -182,76 +184,6 @@
 				function="MediaBrowser.Assign" />
 			</button>
         </layout_panel>
-      <layout_panel
-       height="30"
-       layout="topleft"
-       name="notification_area"
-       visible="false" 
-       user_resize="false"
-       background_visible="true" 
-       bg_alpha_image="Yellow_Gradient" 
-       auto_resize="false" 
-       width="800">
-        <layout_stack
-              top="0"
-              height="30"
-              width="800"
-              left="0"
-              follows="all" 
-              orientation="horizontal"
-              >
-          <layout_panel
-            height="30">
-            <icon value="Popup_Caution"
-                  left="5"
-                  top="7"
-                  width="16"
-                  height="15"/>
-            <text left_pad="8"
-                  top="10"
-                  height="25"
-                  width="400"
-                  text_color="black"
-                  font="SansSerifSmall"
-                  font.style="BOLD"
-                  name="notification_text"
-                  value="Notification text here"
-                  />
-          </layout_panel>
-          <layout_panel
-            height="30"
-            width="270"
-            auto_resize="false"
-            name="form_elements">
-            <check_box name="enable_check"
-                      left="5"
-                      top="5"
-                      height="20"
-                      width="120"
-                      label="Enable all popups"
-                       text_enabled_color="black"
-                      />
-            <button left_pad="5"
-                    width="140"
-                    top="4"
-                    label="Open pop-up window"/>
-          </layout_panel>
-          <layout_panel
-            height="30"
-            width="25"
-            auto_resize="false"
-            name="close_panel">
-            <button left="5"
-                    name="close" 
-                    width="16"
-                    height="16" 
-                    top="8"
-                    image_color="DkGray_66" 
-                    image_unselected="Icon_Close_Foreground"
-                    image_selected="Icon_Close_Press"/>
-          </layout_panel>
-        </layout_stack>
-      </layout_panel>
         <layout_panel
          height="40"
          layout="topleft"
@@ -260,14 +192,84 @@
          top_delta="0"
          user_resize="false"
          width="540">
-            <web_browser
+          <web_browser
              bottom="-30"
-             follows="left|right|top|bottom"
+             follows="all"
              layout="topleft"
              left="0"
              name="browser"
              top="0"
              width="540" />
+          <layout_stack 
+            name="notification_stack"
+            left="0"
+            top="0"
+            width="540"
+            bottom="-30"
+            follows="all"
+            mouse_opaque="false"
+            orientation="vertical">
+            <layout_panel
+              height="30"
+              min_height="30" 
+              layout="topleft"
+              name="notification_area"
+              visible="false"
+              user_resize="false"
+              background_visible="true"
+              bg_alpha_image="Yellow_Gradient"
+              auto_resize="false"
+              width="800">
+              <layout_stack
+                top="0"
+                height="30"
+                width="800"
+                left="0"
+                follows="bottom|left|right"
+                orientation="horizontal">
+                <layout_panel
+                  height="30">
+                  <icon name="notification_icon"
+                        left="5"
+                        top="7"
+                        width="16"
+                        height="15"/>
+                  <text left_pad="8"
+                        top="10"
+                        height="25"
+                        width="400"
+                        text_color="black"
+                        font="SansSerifSmall"
+                        font.style="BOLD"
+                        name="notification_text"
+                        value="Notification text here"/>
+                </layout_panel>
+                <layout_panel
+                  height="30"
+                  width="130"
+                  auto_resize="false"
+                  user_resize="false"
+                  name="form_elements"/>
+                <layout_panel
+                  height="30"
+                  width="25"
+                  auto_resize="false"
+                  name="close_panel">
+                  <button left="5"
+                          name="close_notification"
+                          width="16"
+                          height="16"
+                          top="8"
+                          image_color="DkGray_66"
+                          image_unselected="Icon_Close_Foreground"
+                          image_selected="Icon_Close_Press"/>
+                </layout_panel>
+              </layout_stack>
+            </layout_panel>
+            <layout_panel
+              mouse_opaque="false" 
+              auto_resize="true"/>
+          </layout_stack>
             <button
              follows="bottom|left"
              height="20"
-- 
cgit v1.2.3


From ae81cf5dc466c3e10deef4be847076a1da9e7606 Mon Sep 17 00:00:00 2001
From: Aimee Linden <aimee@lindenlab.com>
Date: Thu, 16 Sep 2010 17:51:27 +0100
Subject: STORM-122 FIXED Clean up obsolete floaters and related dead code

Removed obsolete XUI files:

floater_activeim.xml
floater_customize.xml
floater_device_settings.xml
floater_first_time_tip.xml
floater_im.xml
floater_my_friends.xml
floater_outfit_save_as.xml
floater_preview_classified.xml
floater_preview_event.xml
floater_preview_gesture_info.xml
floater_preview_gesture_shortcut.xml
floater_preview_gesture_steps.xml
floater_statistics.xml
floater_wearable_save_as.xml
panel_audio_device.xml
panel_friends.xml
panel_groups.xml
panel_nearby_chat.xml
panel_online_status.xml
panel_region_general_layout.xml

Killed obsolete LLFloaterVoiceDeviceSettings class, and moved LLPanelVoiceDeviceSettings into its own appropriately named files.
---
 indra/newview/CMakeLists.txt                       |    4 +-
 indra/newview/llfloaterpreference.cpp              |   17 +-
 indra/newview/llfloatervoicedevicesettings.cpp     |  393 ---
 indra/newview/llfloatervoicedevicesettings.h       |   83 -
 indra/newview/llmorphview.h                        |    1 -
 indra/newview/llpaneloutfitsinventory.cpp          |    9 -
 indra/newview/llpanelvoicedevicesettings.cpp       |  322 ++
 indra/newview/llpanelvoicedevicesettings.h         |   61 +
 indra/newview/llviewerfloaterreg.cpp               |    2 -
 .../skins/default/xui/da/floater_customize.xml     |  530 ---
 .../default/xui/da/floater_device_settings.xml     |    2 -
 indra/newview/skins/default/xui/da/floater_im.xml  |   45 -
 .../skins/default/xui/da/floater_my_friends.xml    |    7 -
 .../default/xui/da/floater_outfit_save_as.xml      |   11 -
 .../default/xui/da/floater_preview_classified.xml  |    6 -
 .../skins/default/xui/da/floater_preview_event.xml |    6 -
 .../xui/da/floater_preview_gesture_info.xml        |    2 -
 .../xui/da/floater_preview_gesture_shortcut.xml    |   15 -
 .../xui/da/floater_preview_gesture_steps.xml       |    2 -
 .../skins/default/xui/da/floater_statistics.xml    |    2 -
 .../default/xui/da/floater_wearable_save_as.xml    |   11 -
 .../skins/default/xui/da/panel_audio_device.xml    |   25 -
 .../newview/skins/default/xui/da/panel_friends.xml |   20 -
 .../newview/skins/default/xui/da/panel_groups.xml  |   18 -
 .../skins/default/xui/da/panel_nearby_chat.xml     |    9 -
 .../skins/default/xui/da/panel_online_status.xml   |    2 -
 .../default/xui/da/panel_region_general_layout.xml |   43 -
 .../skins/default/xui/de/floater_customize.xml     |  529 ---
 .../default/xui/de/floater_device_settings.xml     |    2 -
 .../default/xui/de/floater_first_time_tip.xml      |    4 -
 indra/newview/skins/default/xui/de/floater_im.xml  |   46 -
 .../skins/default/xui/de/floater_my_friends.xml    |    7 -
 .../default/xui/de/floater_outfit_save_as.xml      |   12 -
 .../default/xui/de/floater_preview_classified.xml  |    6 -
 .../skins/default/xui/de/floater_preview_event.xml |    6 -
 .../xui/de/floater_preview_gesture_info.xml        |    2 -
 .../xui/de/floater_preview_gesture_shortcut.xml    |   15 -
 .../xui/de/floater_preview_gesture_steps.xml       |    2 -
 .../skins/default/xui/de/floater_statistics.xml    |    2 -
 .../default/xui/de/floater_wearable_save_as.xml    |   11 -
 .../skins/default/xui/de/panel_audio_device.xml    |   25 -
 .../newview/skins/default/xui/de/panel_friends.xml |   31 -
 .../newview/skins/default/xui/de/panel_groups.xml  |   15 -
 .../skins/default/xui/de/panel_nearby_chat.xml     |    9 -
 .../skins/default/xui/de/panel_online_status.xml   |    2 -
 .../default/xui/de/panel_region_general_layout.xml |   43 -
 .../skins/default/xui/en/floater_customize.xml     | 3389 --------------------
 .../default/xui/en/floater_device_settings.xml     |   18 -
 .../default/xui/en/floater_first_time_tip.xml      |   22 -
 indra/newview/skins/default/xui/en/floater_im.xml  |   80 -
 .../skins/default/xui/en/floater_my_friends.xml    |   45 -
 .../default/xui/en/floater_outfit_save_as.xml      |   58 -
 .../default/xui/en/floater_preview_classified.xml  |   24 -
 .../skins/default/xui/en/floater_preview_event.xml |   24 -
 .../xui/en/floater_preview_gesture_info.xml        |   57 -
 .../xui/en/floater_preview_gesture_shortcut.xml    |   88 -
 .../xui/en/floater_preview_gesture_steps.xml       |  242 --
 .../skins/default/xui/en/floater_statistics.xml    |   12 -
 .../default/xui/en/floater_wearable_save_as.xml    |   56 -
 .../skins/default/xui/en/panel_audio_device.xml    |  152 -
 .../newview/skins/default/xui/en/panel_friends.xml |  124 -
 .../newview/skins/default/xui/en/panel_groups.xml  |  111 -
 .../skins/default/xui/en/panel_nearby_chat.xml     |   27 -
 .../skins/default/xui/en/panel_online_status.xml   |   35 -
 .../default/xui/en/panel_region_general_layout.xml |  242 --
 .../skins/default/xui/es/floater_customize.xml     |  530 ---
 .../default/xui/es/floater_device_settings.xml     |    2 -
 indra/newview/skins/default/xui/es/floater_im.xml  |   45 -
 .../skins/default/xui/es/floater_my_friends.xml    |    7 -
 .../default/xui/es/floater_outfit_save_as.xml      |   12 -
 .../default/xui/es/floater_preview_classified.xml  |    6 -
 .../skins/default/xui/es/floater_preview_event.xml |    6 -
 .../xui/es/floater_preview_gesture_info.xml        |    2 -
 .../xui/es/floater_preview_gesture_shortcut.xml    |   15 -
 .../xui/es/floater_preview_gesture_steps.xml       |    2 -
 .../skins/default/xui/es/floater_statistics.xml    |    2 -
 .../default/xui/es/floater_wearable_save_as.xml    |   11 -
 .../skins/default/xui/es/panel_audio_device.xml    |   25 -
 .../newview/skins/default/xui/es/panel_friends.xml |   20 -
 .../newview/skins/default/xui/es/panel_groups.xml  |   17 -
 .../skins/default/xui/es/panel_nearby_chat.xml     |    9 -
 .../skins/default/xui/es/panel_online_status.xml   |    2 -
 .../default/xui/es/panel_region_general_layout.xml |   43 -
 .../skins/default/xui/fr/floater_customize.xml     |  530 ---
 .../default/xui/fr/floater_device_settings.xml     |    2 -
 .../default/xui/fr/floater_first_time_tip.xml      |    4 -
 indra/newview/skins/default/xui/fr/floater_im.xml  |   45 -
 .../skins/default/xui/fr/floater_my_friends.xml    |    7 -
 .../default/xui/fr/floater_outfit_save_as.xml      |   12 -
 .../default/xui/fr/floater_preview_classified.xml  |    6 -
 .../skins/default/xui/fr/floater_preview_event.xml |    6 -
 .../xui/fr/floater_preview_gesture_info.xml        |    2 -
 .../xui/fr/floater_preview_gesture_shortcut.xml    |   15 -
 .../xui/fr/floater_preview_gesture_steps.xml       |    2 -
 .../skins/default/xui/fr/floater_statistics.xml    |    2 -
 .../default/xui/fr/floater_wearable_save_as.xml    |   11 -
 .../skins/default/xui/fr/panel_audio_device.xml    |   25 -
 .../newview/skins/default/xui/fr/panel_friends.xml |   20 -
 .../newview/skins/default/xui/fr/panel_groups.xml  |   16 -
 .../skins/default/xui/fr/panel_nearby_chat.xml     |    9 -
 .../skins/default/xui/fr/panel_online_status.xml   |    2 -
 .../default/xui/fr/panel_region_general_layout.xml |   43 -
 .../skins/default/xui/it/floater_customize.xml     |  530 ---
 .../default/xui/it/floater_device_settings.xml     |    2 -
 indra/newview/skins/default/xui/it/floater_im.xml  |   45 -
 .../skins/default/xui/it/floater_my_friends.xml    |    7 -
 .../default/xui/it/floater_outfit_save_as.xml      |   12 -
 .../default/xui/it/floater_preview_classified.xml  |    6 -
 .../skins/default/xui/it/floater_preview_event.xml |    6 -
 .../xui/it/floater_preview_gesture_info.xml        |    2 -
 .../xui/it/floater_preview_gesture_shortcut.xml    |   15 -
 .../xui/it/floater_preview_gesture_steps.xml       |    2 -
 .../skins/default/xui/it/floater_statistics.xml    |    2 -
 .../default/xui/it/floater_wearable_save_as.xml    |   11 -
 .../skins/default/xui/it/panel_audio_device.xml    |   25 -
 .../newview/skins/default/xui/it/panel_friends.xml |   20 -
 .../newview/skins/default/xui/it/panel_groups.xml  |   17 -
 .../skins/default/xui/it/panel_nearby_chat.xml     |    9 -
 .../skins/default/xui/it/panel_online_status.xml   |    2 -
 .../default/xui/it/panel_region_general_layout.xml |   43 -
 .../skins/default/xui/ja/floater_customize.xml     |  529 ---
 .../default/xui/ja/floater_device_settings.xml     |    2 -
 .../default/xui/ja/floater_first_time_tip.xml      |    4 -
 indra/newview/skins/default/xui/ja/floater_im.xml  |   46 -
 .../skins/default/xui/ja/floater_my_friends.xml    |    7 -
 .../default/xui/ja/floater_outfit_save_as.xml      |   12 -
 .../default/xui/ja/floater_preview_classified.xml  |    6 -
 .../skins/default/xui/ja/floater_preview_event.xml |    6 -
 .../xui/ja/floater_preview_gesture_info.xml        |    2 -
 .../xui/ja/floater_preview_gesture_shortcut.xml    |   15 -
 .../xui/ja/floater_preview_gesture_steps.xml       |    2 -
 .../skins/default/xui/ja/floater_statistics.xml    |    2 -
 .../default/xui/ja/floater_wearable_save_as.xml    |   11 -
 .../skins/default/xui/ja/panel_audio_device.xml    |   26 -
 .../newview/skins/default/xui/ja/panel_friends.xml |   32 -
 .../newview/skins/default/xui/ja/panel_groups.xml  |   16 -
 .../skins/default/xui/ja/panel_nearby_chat.xml     |    9 -
 .../skins/default/xui/ja/panel_online_status.xml   |    2 -
 .../default/xui/ja/panel_region_general_layout.xml |   43 -
 .../skins/default/xui/nl/floater_customize.xml     |  469 ---
 indra/newview/skins/default/xui/nl/floater_im.xml  |   45 -
 .../skins/default/xui/nl/floater_my_friends.xml    |    7 -
 .../skins/default/xui/nl/floater_statistics.xml    |    2 -
 .../skins/default/xui/nl/panel_audio_device.xml    |   25 -
 .../newview/skins/default/xui/nl/panel_friends.xml |   20 -
 .../newview/skins/default/xui/nl/panel_groups.xml  |   15 -
 .../skins/default/xui/pl/floater_customize.xml     |  529 ---
 .../default/xui/pl/floater_device_settings.xml     |    2 -
 indra/newview/skins/default/xui/pl/floater_im.xml  |   45 -
 .../skins/default/xui/pl/floater_my_friends.xml    |    7 -
 .../default/xui/pl/floater_outfit_save_as.xml      |   12 -
 .../default/xui/pl/floater_preview_classified.xml  |    6 -
 .../skins/default/xui/pl/floater_preview_event.xml |    6 -
 .../xui/pl/floater_preview_gesture_info.xml        |    2 -
 .../xui/pl/floater_preview_gesture_shortcut.xml    |   15 -
 .../xui/pl/floater_preview_gesture_steps.xml       |    2 -
 .../skins/default/xui/pl/floater_statistics.xml    |    2 -
 .../default/xui/pl/floater_wearable_save_as.xml    |   11 -
 .../skins/default/xui/pl/panel_audio_device.xml    |   26 -
 .../newview/skins/default/xui/pl/panel_friends.xml |   20 -
 .../newview/skins/default/xui/pl/panel_groups.xml  |   18 -
 .../skins/default/xui/pl/panel_nearby_chat.xml     |    9 -
 .../skins/default/xui/pl/panel_online_status.xml   |    2 -
 .../default/xui/pl/panel_region_general_layout.xml |   43 -
 .../skins/default/xui/pt/floater_customize.xml     |  530 ---
 .../default/xui/pt/floater_device_settings.xml     |    2 -
 indra/newview/skins/default/xui/pt/floater_im.xml  |   45 -
 .../skins/default/xui/pt/floater_my_friends.xml    |    7 -
 .../default/xui/pt/floater_outfit_save_as.xml      |   11 -
 .../default/xui/pt/floater_preview_classified.xml  |    6 -
 .../skins/default/xui/pt/floater_preview_event.xml |    6 -
 .../xui/pt/floater_preview_gesture_info.xml        |    2 -
 .../xui/pt/floater_preview_gesture_shortcut.xml    |   15 -
 .../xui/pt/floater_preview_gesture_steps.xml       |    2 -
 .../skins/default/xui/pt/floater_statistics.xml    |    2 -
 .../default/xui/pt/floater_wearable_save_as.xml    |   11 -
 .../skins/default/xui/pt/panel_audio_device.xml    |   25 -
 .../newview/skins/default/xui/pt/panel_friends.xml |   20 -
 .../newview/skins/default/xui/pt/panel_groups.xml  |   15 -
 .../skins/default/xui/pt/panel_nearby_chat.xml     |    9 -
 .../skins/default/xui/pt/panel_online_status.xml   |    2 -
 .../default/xui/pt/panel_region_general_layout.xml |   43 -
 182 files changed, 386 insertions(+), 11973 deletions(-)
 delete mode 100644 indra/newview/llfloatervoicedevicesettings.cpp
 delete mode 100644 indra/newview/llfloatervoicedevicesettings.h
 create mode 100644 indra/newview/llpanelvoicedevicesettings.cpp
 create mode 100644 indra/newview/llpanelvoicedevicesettings.h
 delete mode 100644 indra/newview/skins/default/xui/da/floater_customize.xml
 delete mode 100644 indra/newview/skins/default/xui/da/floater_device_settings.xml
 delete mode 100644 indra/newview/skins/default/xui/da/floater_im.xml
 delete mode 100644 indra/newview/skins/default/xui/da/floater_my_friends.xml
 delete mode 100644 indra/newview/skins/default/xui/da/floater_outfit_save_as.xml
 delete mode 100644 indra/newview/skins/default/xui/da/floater_preview_classified.xml
 delete mode 100644 indra/newview/skins/default/xui/da/floater_preview_event.xml
 delete mode 100644 indra/newview/skins/default/xui/da/floater_preview_gesture_info.xml
 delete mode 100644 indra/newview/skins/default/xui/da/floater_preview_gesture_shortcut.xml
 delete mode 100644 indra/newview/skins/default/xui/da/floater_preview_gesture_steps.xml
 delete mode 100644 indra/newview/skins/default/xui/da/floater_statistics.xml
 delete mode 100644 indra/newview/skins/default/xui/da/floater_wearable_save_as.xml
 delete mode 100644 indra/newview/skins/default/xui/da/panel_audio_device.xml
 delete mode 100644 indra/newview/skins/default/xui/da/panel_friends.xml
 delete mode 100644 indra/newview/skins/default/xui/da/panel_groups.xml
 delete mode 100644 indra/newview/skins/default/xui/da/panel_nearby_chat.xml
 delete mode 100644 indra/newview/skins/default/xui/da/panel_online_status.xml
 delete mode 100644 indra/newview/skins/default/xui/da/panel_region_general_layout.xml
 delete mode 100644 indra/newview/skins/default/xui/de/floater_customize.xml
 delete mode 100644 indra/newview/skins/default/xui/de/floater_device_settings.xml
 delete mode 100644 indra/newview/skins/default/xui/de/floater_first_time_tip.xml
 delete mode 100644 indra/newview/skins/default/xui/de/floater_im.xml
 delete mode 100644 indra/newview/skins/default/xui/de/floater_my_friends.xml
 delete mode 100644 indra/newview/skins/default/xui/de/floater_outfit_save_as.xml
 delete mode 100644 indra/newview/skins/default/xui/de/floater_preview_classified.xml
 delete mode 100644 indra/newview/skins/default/xui/de/floater_preview_event.xml
 delete mode 100644 indra/newview/skins/default/xui/de/floater_preview_gesture_info.xml
 delete mode 100644 indra/newview/skins/default/xui/de/floater_preview_gesture_shortcut.xml
 delete mode 100644 indra/newview/skins/default/xui/de/floater_preview_gesture_steps.xml
 delete mode 100644 indra/newview/skins/default/xui/de/floater_statistics.xml
 delete mode 100644 indra/newview/skins/default/xui/de/floater_wearable_save_as.xml
 delete mode 100644 indra/newview/skins/default/xui/de/panel_audio_device.xml
 delete mode 100644 indra/newview/skins/default/xui/de/panel_friends.xml
 delete mode 100644 indra/newview/skins/default/xui/de/panel_groups.xml
 delete mode 100644 indra/newview/skins/default/xui/de/panel_nearby_chat.xml
 delete mode 100644 indra/newview/skins/default/xui/de/panel_online_status.xml
 delete mode 100644 indra/newview/skins/default/xui/de/panel_region_general_layout.xml
 delete mode 100644 indra/newview/skins/default/xui/en/floater_customize.xml
 delete mode 100644 indra/newview/skins/default/xui/en/floater_device_settings.xml
 delete mode 100644 indra/newview/skins/default/xui/en/floater_first_time_tip.xml
 delete mode 100644 indra/newview/skins/default/xui/en/floater_im.xml
 delete mode 100644 indra/newview/skins/default/xui/en/floater_my_friends.xml
 delete mode 100644 indra/newview/skins/default/xui/en/floater_outfit_save_as.xml
 delete mode 100644 indra/newview/skins/default/xui/en/floater_preview_classified.xml
 delete mode 100644 indra/newview/skins/default/xui/en/floater_preview_event.xml
 delete mode 100644 indra/newview/skins/default/xui/en/floater_preview_gesture_info.xml
 delete mode 100644 indra/newview/skins/default/xui/en/floater_preview_gesture_shortcut.xml
 delete mode 100644 indra/newview/skins/default/xui/en/floater_preview_gesture_steps.xml
 delete mode 100644 indra/newview/skins/default/xui/en/floater_statistics.xml
 delete mode 100644 indra/newview/skins/default/xui/en/floater_wearable_save_as.xml
 delete mode 100644 indra/newview/skins/default/xui/en/panel_audio_device.xml
 delete mode 100644 indra/newview/skins/default/xui/en/panel_friends.xml
 delete mode 100644 indra/newview/skins/default/xui/en/panel_groups.xml
 delete mode 100644 indra/newview/skins/default/xui/en/panel_nearby_chat.xml
 delete mode 100644 indra/newview/skins/default/xui/en/panel_online_status.xml
 delete mode 100644 indra/newview/skins/default/xui/en/panel_region_general_layout.xml
 delete mode 100644 indra/newview/skins/default/xui/es/floater_customize.xml
 delete mode 100644 indra/newview/skins/default/xui/es/floater_device_settings.xml
 delete mode 100644 indra/newview/skins/default/xui/es/floater_im.xml
 delete mode 100644 indra/newview/skins/default/xui/es/floater_my_friends.xml
 delete mode 100644 indra/newview/skins/default/xui/es/floater_outfit_save_as.xml
 delete mode 100644 indra/newview/skins/default/xui/es/floater_preview_classified.xml
 delete mode 100644 indra/newview/skins/default/xui/es/floater_preview_event.xml
 delete mode 100644 indra/newview/skins/default/xui/es/floater_preview_gesture_info.xml
 delete mode 100644 indra/newview/skins/default/xui/es/floater_preview_gesture_shortcut.xml
 delete mode 100644 indra/newview/skins/default/xui/es/floater_preview_gesture_steps.xml
 delete mode 100644 indra/newview/skins/default/xui/es/floater_statistics.xml
 delete mode 100644 indra/newview/skins/default/xui/es/floater_wearable_save_as.xml
 delete mode 100644 indra/newview/skins/default/xui/es/panel_audio_device.xml
 delete mode 100644 indra/newview/skins/default/xui/es/panel_friends.xml
 delete mode 100644 indra/newview/skins/default/xui/es/panel_groups.xml
 delete mode 100644 indra/newview/skins/default/xui/es/panel_nearby_chat.xml
 delete mode 100644 indra/newview/skins/default/xui/es/panel_online_status.xml
 delete mode 100644 indra/newview/skins/default/xui/es/panel_region_general_layout.xml
 delete mode 100644 indra/newview/skins/default/xui/fr/floater_customize.xml
 delete mode 100644 indra/newview/skins/default/xui/fr/floater_device_settings.xml
 delete mode 100644 indra/newview/skins/default/xui/fr/floater_first_time_tip.xml
 delete mode 100644 indra/newview/skins/default/xui/fr/floater_im.xml
 delete mode 100644 indra/newview/skins/default/xui/fr/floater_my_friends.xml
 delete mode 100644 indra/newview/skins/default/xui/fr/floater_outfit_save_as.xml
 delete mode 100644 indra/newview/skins/default/xui/fr/floater_preview_classified.xml
 delete mode 100644 indra/newview/skins/default/xui/fr/floater_preview_event.xml
 delete mode 100644 indra/newview/skins/default/xui/fr/floater_preview_gesture_info.xml
 delete mode 100644 indra/newview/skins/default/xui/fr/floater_preview_gesture_shortcut.xml
 delete mode 100644 indra/newview/skins/default/xui/fr/floater_preview_gesture_steps.xml
 delete mode 100644 indra/newview/skins/default/xui/fr/floater_statistics.xml
 delete mode 100644 indra/newview/skins/default/xui/fr/floater_wearable_save_as.xml
 delete mode 100644 indra/newview/skins/default/xui/fr/panel_audio_device.xml
 delete mode 100644 indra/newview/skins/default/xui/fr/panel_friends.xml
 delete mode 100644 indra/newview/skins/default/xui/fr/panel_groups.xml
 delete mode 100644 indra/newview/skins/default/xui/fr/panel_nearby_chat.xml
 delete mode 100644 indra/newview/skins/default/xui/fr/panel_online_status.xml
 delete mode 100644 indra/newview/skins/default/xui/fr/panel_region_general_layout.xml
 delete mode 100644 indra/newview/skins/default/xui/it/floater_customize.xml
 delete mode 100644 indra/newview/skins/default/xui/it/floater_device_settings.xml
 delete mode 100644 indra/newview/skins/default/xui/it/floater_im.xml
 delete mode 100644 indra/newview/skins/default/xui/it/floater_my_friends.xml
 delete mode 100644 indra/newview/skins/default/xui/it/floater_outfit_save_as.xml
 delete mode 100644 indra/newview/skins/default/xui/it/floater_preview_classified.xml
 delete mode 100644 indra/newview/skins/default/xui/it/floater_preview_event.xml
 delete mode 100644 indra/newview/skins/default/xui/it/floater_preview_gesture_info.xml
 delete mode 100644 indra/newview/skins/default/xui/it/floater_preview_gesture_shortcut.xml
 delete mode 100644 indra/newview/skins/default/xui/it/floater_preview_gesture_steps.xml
 delete mode 100644 indra/newview/skins/default/xui/it/floater_statistics.xml
 delete mode 100644 indra/newview/skins/default/xui/it/floater_wearable_save_as.xml
 delete mode 100644 indra/newview/skins/default/xui/it/panel_audio_device.xml
 delete mode 100644 indra/newview/skins/default/xui/it/panel_friends.xml
 delete mode 100644 indra/newview/skins/default/xui/it/panel_groups.xml
 delete mode 100644 indra/newview/skins/default/xui/it/panel_nearby_chat.xml
 delete mode 100644 indra/newview/skins/default/xui/it/panel_online_status.xml
 delete mode 100644 indra/newview/skins/default/xui/it/panel_region_general_layout.xml
 delete mode 100644 indra/newview/skins/default/xui/ja/floater_customize.xml
 delete mode 100644 indra/newview/skins/default/xui/ja/floater_device_settings.xml
 delete mode 100644 indra/newview/skins/default/xui/ja/floater_first_time_tip.xml
 delete mode 100644 indra/newview/skins/default/xui/ja/floater_im.xml
 delete mode 100644 indra/newview/skins/default/xui/ja/floater_my_friends.xml
 delete mode 100644 indra/newview/skins/default/xui/ja/floater_outfit_save_as.xml
 delete mode 100644 indra/newview/skins/default/xui/ja/floater_preview_classified.xml
 delete mode 100644 indra/newview/skins/default/xui/ja/floater_preview_event.xml
 delete mode 100644 indra/newview/skins/default/xui/ja/floater_preview_gesture_info.xml
 delete mode 100644 indra/newview/skins/default/xui/ja/floater_preview_gesture_shortcut.xml
 delete mode 100644 indra/newview/skins/default/xui/ja/floater_preview_gesture_steps.xml
 delete mode 100644 indra/newview/skins/default/xui/ja/floater_statistics.xml
 delete mode 100644 indra/newview/skins/default/xui/ja/floater_wearable_save_as.xml
 delete mode 100644 indra/newview/skins/default/xui/ja/panel_audio_device.xml
 delete mode 100644 indra/newview/skins/default/xui/ja/panel_friends.xml
 delete mode 100644 indra/newview/skins/default/xui/ja/panel_groups.xml
 delete mode 100644 indra/newview/skins/default/xui/ja/panel_nearby_chat.xml
 delete mode 100644 indra/newview/skins/default/xui/ja/panel_online_status.xml
 delete mode 100644 indra/newview/skins/default/xui/ja/panel_region_general_layout.xml
 delete mode 100644 indra/newview/skins/default/xui/nl/floater_customize.xml
 delete mode 100644 indra/newview/skins/default/xui/nl/floater_im.xml
 delete mode 100644 indra/newview/skins/default/xui/nl/floater_my_friends.xml
 delete mode 100644 indra/newview/skins/default/xui/nl/floater_statistics.xml
 delete mode 100644 indra/newview/skins/default/xui/nl/panel_audio_device.xml
 delete mode 100644 indra/newview/skins/default/xui/nl/panel_friends.xml
 delete mode 100644 indra/newview/skins/default/xui/nl/panel_groups.xml
 delete mode 100644 indra/newview/skins/default/xui/pl/floater_customize.xml
 delete mode 100644 indra/newview/skins/default/xui/pl/floater_device_settings.xml
 delete mode 100644 indra/newview/skins/default/xui/pl/floater_im.xml
 delete mode 100644 indra/newview/skins/default/xui/pl/floater_my_friends.xml
 delete mode 100644 indra/newview/skins/default/xui/pl/floater_outfit_save_as.xml
 delete mode 100644 indra/newview/skins/default/xui/pl/floater_preview_classified.xml
 delete mode 100644 indra/newview/skins/default/xui/pl/floater_preview_event.xml
 delete mode 100644 indra/newview/skins/default/xui/pl/floater_preview_gesture_info.xml
 delete mode 100644 indra/newview/skins/default/xui/pl/floater_preview_gesture_shortcut.xml
 delete mode 100644 indra/newview/skins/default/xui/pl/floater_preview_gesture_steps.xml
 delete mode 100644 indra/newview/skins/default/xui/pl/floater_statistics.xml
 delete mode 100644 indra/newview/skins/default/xui/pl/floater_wearable_save_as.xml
 delete mode 100644 indra/newview/skins/default/xui/pl/panel_audio_device.xml
 delete mode 100644 indra/newview/skins/default/xui/pl/panel_friends.xml
 delete mode 100644 indra/newview/skins/default/xui/pl/panel_groups.xml
 delete mode 100644 indra/newview/skins/default/xui/pl/panel_nearby_chat.xml
 delete mode 100644 indra/newview/skins/default/xui/pl/panel_online_status.xml
 delete mode 100644 indra/newview/skins/default/xui/pl/panel_region_general_layout.xml
 delete mode 100644 indra/newview/skins/default/xui/pt/floater_customize.xml
 delete mode 100644 indra/newview/skins/default/xui/pt/floater_device_settings.xml
 delete mode 100644 indra/newview/skins/default/xui/pt/floater_im.xml
 delete mode 100644 indra/newview/skins/default/xui/pt/floater_my_friends.xml
 delete mode 100644 indra/newview/skins/default/xui/pt/floater_outfit_save_as.xml
 delete mode 100644 indra/newview/skins/default/xui/pt/floater_preview_classified.xml
 delete mode 100644 indra/newview/skins/default/xui/pt/floater_preview_event.xml
 delete mode 100644 indra/newview/skins/default/xui/pt/floater_preview_gesture_info.xml
 delete mode 100644 indra/newview/skins/default/xui/pt/floater_preview_gesture_shortcut.xml
 delete mode 100644 indra/newview/skins/default/xui/pt/floater_preview_gesture_steps.xml
 delete mode 100644 indra/newview/skins/default/xui/pt/floater_statistics.xml
 delete mode 100644 indra/newview/skins/default/xui/pt/floater_wearable_save_as.xml
 delete mode 100644 indra/newview/skins/default/xui/pt/panel_audio_device.xml
 delete mode 100644 indra/newview/skins/default/xui/pt/panel_friends.xml
 delete mode 100644 indra/newview/skins/default/xui/pt/panel_groups.xml
 delete mode 100644 indra/newview/skins/default/xui/pt/panel_nearby_chat.xml
 delete mode 100644 indra/newview/skins/default/xui/pt/panel_online_status.xml
 delete mode 100644 indra/newview/skins/default/xui/pt/panel_region_general_layout.xml

diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 382bbaeba1..e3b998876f 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -216,7 +216,6 @@ set(viewer_SOURCE_FILES
     llfloatertos.cpp
     llfloateruipreview.cpp
     llfloaterurlentry.cpp
-    llfloatervoicedevicesettings.cpp
     llfloatervoiceeffect.cpp
     llfloaterwater.cpp
     llfloaterwhitelistentry.cpp
@@ -363,6 +362,7 @@ set(viewer_SOURCE_FILES
     llpaneltiptoast.cpp
     llpanelvoiceeffect.cpp
     llpaneltopinfobar.cpp
+    llpanelvoicedevicesettings.cpp
     llpanelvolume.cpp
     llpanelvolumepulldown.cpp
     llpanelwearing.cpp
@@ -744,7 +744,6 @@ set(viewer_HEADER_FILES
     llfloatertos.h
     llfloateruipreview.h
     llfloaterurlentry.h
-    llfloatervoicedevicesettings.h
     llfloatervoiceeffect.h
     llfloaterwater.h
     llfloaterwhitelistentry.h
@@ -884,6 +883,7 @@ set(viewer_HEADER_FILES
     llpanelprofileview.h
     llpanelteleporthistory.h
     llpaneltiptoast.h
+    llpanelvoicedevicesettings.h
     llpanelvoiceeffect.h
     llpaneltopinfobar.h
     llpanelvolume.h
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index 3804a1b858..53ddf70abe 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -49,7 +49,6 @@
 #include "llfloaterreg.h"
 #include "llfloaterabout.h"
 #include "llfloaterhardwaresettings.h"
-#include "llfloatervoicedevicesettings.h"
 #include "llimfloater.h"
 #include "llkeyboard.h"
 #include "llmodaldialog.h"
@@ -58,6 +57,7 @@
 #include "llnotifications.h"
 #include "llnotificationsutil.h"
 #include "llpanellogin.h"
+#include "llpanelvoicedevicesettings.h"
 #include "llradiogroup.h"
 #include "llsearchcombobox.h"
 #include "llsky.h"
@@ -407,12 +407,6 @@ void LLFloaterPreference::apply()
 		hardware_settings->apply();
 	}
 	
-	LLFloaterVoiceDeviceSettings* voice_device_settings = LLFloaterReg::findTypedInstance<LLFloaterVoiceDeviceSettings>("pref_voicedevicesettings");
-	if(voice_device_settings)
-	{
-		voice_device_settings->apply();
-	}
-	
 	gViewerWindow->requestResolutionUpdate(); // for UIScaleFactor
 
 	LLSliderCtrl* fov_slider = getChild<LLSliderCtrl>("camera_fov");
@@ -487,15 +481,6 @@ void LLFloaterPreference::cancel()
 	
 	// reverts any changes to current skin
 	gSavedSettings.setString("SkinCurrent", sSkin);
-	
-	LLFloaterVoiceDeviceSettings* voice_device_settings = LLFloaterReg::findTypedInstance<LLFloaterVoiceDeviceSettings>("pref_voicedevicesettings");
-	if (voice_device_settings)
-	{
-		voice_device_settings ->cancel();
-	}
-	
-	LLFloaterReg::hideInstance("pref_voicedevicesettings");
-	
 }
 
 void LLFloaterPreference::onOpen(const LLSD& key)
diff --git a/indra/newview/llfloatervoicedevicesettings.cpp b/indra/newview/llfloatervoicedevicesettings.cpp
deleted file mode 100644
index 34277001ee..0000000000
--- a/indra/newview/llfloatervoicedevicesettings.cpp
+++ /dev/null
@@ -1,393 +0,0 @@
-/** 
- * @file llfloatervoicedevicesettings.cpp
- * @author Richard Nelson
- * @brief Voice communication set-up 
- *
- * $LicenseInfo:firstyear=2007&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 "llfloatervoicedevicesettings.h"
-
-// Viewer includes
-#include "llbutton.h"
-#include "llcombobox.h"
-#include "llfocusmgr.h"
-#include "lliconctrl.h"
-#include "llsliderctrl.h"
-#include "llviewercontrol.h"
-#include "llvoiceclient.h"
-#include "llvoicechannel.h"
-
-// Library includes (after viewer)
-#include "lluictrlfactory.h"
-
-
-static LLRegisterPanelClassWrapper<LLPanelVoiceDeviceSettings> t_panel_group_general("panel_voice_device_settings");
-
-
-LLPanelVoiceDeviceSettings::LLPanelVoiceDeviceSettings()
-	: LLPanel()
-{
-	mCtrlInputDevices = NULL;
-	mCtrlOutputDevices = NULL;
-	mInputDevice = gSavedSettings.getString("VoiceInputAudioDevice");
-	mOutputDevice = gSavedSettings.getString("VoiceOutputAudioDevice");
-	mDevicesUpdated = FALSE;
-
-	// grab "live" mic volume level
-	mMicVolume = gSavedSettings.getF32("AudioLevelMic");
-
-}
-
-LLPanelVoiceDeviceSettings::~LLPanelVoiceDeviceSettings()
-{
-}
-
-BOOL LLPanelVoiceDeviceSettings::postBuild()
-{
-	LLSlider* volume_slider = getChild<LLSlider>("mic_volume_slider");
-	// set mic volume tuning slider based on last mic volume setting
-	volume_slider->setValue(mMicVolume);
-
-	childSetCommitCallback("voice_input_device", onCommitInputDevice, this);
-	childSetCommitCallback("voice_output_device", onCommitOutputDevice, this);
-	
-	return TRUE;
-}
-
-// virtual
-void LLPanelVoiceDeviceSettings::handleVisibilityChange ( BOOL new_visibility )
-{
-	if (new_visibility)
-	{
-		initialize();	
-	}
-	else
-	{
-		cleanup();
-		// when closing this window, turn of visiblity control so that 
-		// next time preferences is opened we don't suspend voice
-		gSavedSettings.setBOOL("ShowDeviceSettings", FALSE);
-	}
-}
-void LLPanelVoiceDeviceSettings::draw()
-{
-	refresh();
-
-	// let user know that volume indicator is not yet available
-	bool is_in_tuning_mode = LLVoiceClient::getInstance()->inTuningMode();
-	getChildView("wait_text")->setVisible( !is_in_tuning_mode);
-
-	LLPanel::draw();
-
-	if (is_in_tuning_mode)
-	{
-		const S32 num_bars = 5;
-		F32 voice_power = LLVoiceClient::getInstance()->tuningGetEnergy() / LLVoiceClient::OVERDRIVEN_POWER_LEVEL;
-		S32 discrete_power = llmin(num_bars, llfloor(voice_power * (F32)num_bars + 0.1f));
-
-		for(S32 power_bar_idx = 0; power_bar_idx < num_bars; power_bar_idx++)
-		{
-			std::string view_name = llformat("%s%d", "bar", power_bar_idx);
-			LLView* bar_view = getChild<LLView>(view_name);
-			if (bar_view)
-			{
-				gl_rect_2d(bar_view->getRect(), LLColor4::grey, TRUE);
-
-				LLColor4 color;
-				if (power_bar_idx < discrete_power)
-				{
-					color = (power_bar_idx >= 3) ? LLUIColorTable::instance().getColor("OverdrivenColor") : LLUIColorTable::instance().getColor("SpeakingColor");
-				}
-				else
-				{
-					color = LLUIColorTable::instance().getColor("PanelFocusBackgroundColor");
-				}
-
-				LLRect color_rect = bar_view->getRect();
-				color_rect.stretch(-1);
-				gl_rect_2d(color_rect, color, TRUE);
-			}
-		}
-	}
-}
-
-void LLPanelVoiceDeviceSettings::apply()
-{
-	std::string s;
-	if(mCtrlInputDevices)
-	{
-		s = mCtrlInputDevices->getSimple();
-		gSavedSettings.setString("VoiceInputAudioDevice", s);
-		mInputDevice = s;
-	}
-
-	if(mCtrlOutputDevices)
-	{
-		s = mCtrlOutputDevices->getSimple();
-		gSavedSettings.setString("VoiceOutputAudioDevice", s);
-		mOutputDevice = s;
-	}
-
-	// assume we are being destroyed by closing our embedding window
-	LLSlider* volume_slider = getChild<LLSlider>("mic_volume_slider");
-	if(volume_slider)
-	{
-		F32 slider_value = (F32)volume_slider->getValue().asReal();
-		gSavedSettings.setF32("AudioLevelMic", slider_value);
-		mMicVolume = slider_value;
-	}
-}
-
-void LLPanelVoiceDeviceSettings::cancel()
-{
-	gSavedSettings.setString("VoiceInputAudioDevice", mInputDevice);
-	gSavedSettings.setString("VoiceOutputAudioDevice", mOutputDevice);
-
-	if(mCtrlInputDevices)
-		mCtrlInputDevices->setSimple(mInputDevice);
-
-	if(mCtrlOutputDevices)
-		mCtrlOutputDevices->setSimple(mOutputDevice);
-
-	gSavedSettings.setF32("AudioLevelMic", mMicVolume);
-	LLSlider* volume_slider = getChild<LLSlider>("mic_volume_slider");
-	if(volume_slider)
-	{
-		volume_slider->setValue(mMicVolume);
-	}
-}
-
-void LLPanelVoiceDeviceSettings::refresh()
-{
-	//grab current volume
-	LLSlider* volume_slider = getChild<LLSlider>("mic_volume_slider");
-	// set mic volume tuning slider based on last mic volume setting
-	F32 current_volume = (F32)volume_slider->getValue().asReal();
-	LLVoiceClient::getInstance()->tuningSetMicVolume(current_volume);
-
-	// Fill in popup menus
-	mCtrlInputDevices = getChild<LLComboBox>("voice_input_device");
-	mCtrlOutputDevices = getChild<LLComboBox>("voice_output_device");
-
-	if(!LLVoiceClient::getInstance()->deviceSettingsAvailable())
-	{
-		// The combo boxes are disabled, since we can't get the device settings from the daemon just now.
-		// Put the currently set default (ONLY) in the box, and select it.
-		if(mCtrlInputDevices)
-		{
-			mCtrlInputDevices->removeall();
-			mCtrlInputDevices->add( mInputDevice, ADD_BOTTOM );
-			mCtrlInputDevices->setSimple(mInputDevice);
-		}
-		if(mCtrlOutputDevices)
-		{
-			mCtrlOutputDevices->removeall();
-			mCtrlOutputDevices->add( mOutputDevice, ADD_BOTTOM );
-			mCtrlOutputDevices->setSimple(mOutputDevice);
-		}
-	}
-	else if (!mDevicesUpdated)
-	{
-		LLVoiceDeviceList::const_iterator iter;
-		
-		if(mCtrlInputDevices)
-		{
-			mCtrlInputDevices->removeall();
-			mCtrlInputDevices->add( getString("default_text"), ADD_BOTTOM );
-
-			for(iter=LLVoiceClient::getInstance()->getCaptureDevices().begin(); 
-				iter != LLVoiceClient::getInstance()->getCaptureDevices().end();
-				iter++)
-			{
-				// Lets try to localize some system device names. EXT-8375
-				std::string device_name = *iter;
-				LLStringUtil::toLower(device_name); //compare in low case
-				if ("default system device" == device_name)
-				{
-					device_name = getString(device_name);
-				}
-				else if ("no device" == device_name)
-				{
-					device_name = getString(device_name);
-				}
-				else
-				{
-					// restore original value
-					device_name = *iter;
-				}
-				mCtrlInputDevices->add(device_name, ADD_BOTTOM );
-			}
-
-			if(!mCtrlInputDevices->setSimple(mInputDevice))
-			{
-				mCtrlInputDevices->setSimple(getString("default_text"));
-			}
-		}
-		
-		if(mCtrlOutputDevices)
-		{
-			mCtrlOutputDevices->removeall();
-			mCtrlOutputDevices->add( getString("default_text"), ADD_BOTTOM );
-
-			for(iter= LLVoiceClient::getInstance()->getRenderDevices().begin(); 
-				iter !=  LLVoiceClient::getInstance()->getRenderDevices().end(); iter++)
-			{
-				// Lets try to localize some system device names. EXT-8375
-				std::string device_name = *iter;
-				LLStringUtil::toLower(device_name); //compare in low case
-				if ("default system device" == device_name)
-				{
-					device_name = getString(device_name);
-				}
-				else if ("no device" == device_name)
-				{
-					device_name = getString(device_name);
-				}
-				else
-				{
-					// restore original value
-					device_name = *iter;
-				}
-				mCtrlOutputDevices->add(device_name, ADD_BOTTOM );
-			}
-
-			if(!mCtrlOutputDevices->setSimple(mOutputDevice))
-			{
-				mCtrlOutputDevices->setSimple(getString("default_text"));
-			}
-		}
-		mDevicesUpdated = TRUE;
-	}	
-}
-
-void LLPanelVoiceDeviceSettings::initialize()
-{
-	mInputDevice = gSavedSettings.getString("VoiceInputAudioDevice");
-	mOutputDevice = gSavedSettings.getString("VoiceOutputAudioDevice");
-	mMicVolume = gSavedSettings.getF32("AudioLevelMic");
-	mDevicesUpdated = FALSE;
-
-	// ask for new device enumeration
-	LLVoiceClient::getInstance()->refreshDeviceLists();
-
-	// put voice client in "tuning" mode
-	LLVoiceClient::getInstance()->tuningStart();
-	LLVoiceChannel::suspend();
-}
-
-void LLPanelVoiceDeviceSettings::cleanup()
-{
-	LLVoiceClient::getInstance()->tuningStop();
-	LLVoiceChannel::resume();
-}
-
-// static
-void LLPanelVoiceDeviceSettings::onCommitInputDevice(LLUICtrl* ctrl, void* user_data)
-{
-	if(LLVoiceClient::getInstance())
-	{
-		LLVoiceClient::getInstance()->setCaptureDevice(ctrl->getValue().asString());
-	}
-}
-
-// static
-void LLPanelVoiceDeviceSettings::onCommitOutputDevice(LLUICtrl* ctrl, void* user_data)
-{
-	if(LLVoiceClient::getInstance())
-	{
-		LLVoiceClient::getInstance()->setRenderDevice(ctrl->getValue().asString());
-	}
-}
-
-//
-// LLFloaterVoiceDeviceSettings
-//
-
-LLFloaterVoiceDeviceSettings::LLFloaterVoiceDeviceSettings(const LLSD& seed)
-	: LLFloater(seed),
-	  mDevicePanel(NULL)
-{
-	mFactoryMap["device_settings"] = LLCallbackMap(createPanelVoiceDeviceSettings, this);
-	// do not automatically open singleton floaters (as result of getInstance())
-//	BOOL no_open = FALSE;
-//	Called from floater reg:  LLUICtrlFactory::getInstance()->buildFloater(this, "floater_device_settings.xml", no_open);	
-}
-BOOL LLFloaterVoiceDeviceSettings::postBuild()
-{
-	center();
-	return TRUE;
-}
-
-// virtual
-void LLFloaterVoiceDeviceSettings::onOpen(const LLSD& key)
-{
-	if(mDevicePanel)
-	{
-		mDevicePanel->initialize();
-	}
-}
-
-// virtual
-void LLFloaterVoiceDeviceSettings::onClose(bool app_settings)
-{
-	if(mDevicePanel)
-	{
-		mDevicePanel->apply();
-		mDevicePanel->cleanup();
-	}
-}
-
-void LLFloaterVoiceDeviceSettings::apply()
-{
-	if (mDevicePanel)
-	{
-		mDevicePanel->apply();
-	}
-}
-
-void LLFloaterVoiceDeviceSettings::cancel()
-{
-	if (mDevicePanel)
-	{
-		mDevicePanel->cancel();
-	}
-}
-
-void LLFloaterVoiceDeviceSettings::draw()
-{
-	if (mDevicePanel)
-	{
-		mDevicePanel->refresh();
-	}
-	LLFloater::draw();
-}
-
-// static
-void* LLFloaterVoiceDeviceSettings::createPanelVoiceDeviceSettings(void* user_data)
-{
-	LLFloaterVoiceDeviceSettings* floaterp = (LLFloaterVoiceDeviceSettings*)user_data;
-	floaterp->mDevicePanel = new LLPanelVoiceDeviceSettings();
-	return floaterp->mDevicePanel;
-}
diff --git a/indra/newview/llfloatervoicedevicesettings.h b/indra/newview/llfloatervoicedevicesettings.h
deleted file mode 100644
index 5f892972de..0000000000
--- a/indra/newview/llfloatervoicedevicesettings.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/** 
- * @file llpanelvoicedevicesettings.h
- * @author Richard Nelson
- * @brief Voice communication set-up wizard
- *
- * $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_LLFLOATERVOICEDEVICESETTINGS_H
-#define LL_LLFLOATERVOICEDEVICESETTINGS_H
-
-#include "llfloater.h"
-
-class LLPanelVoiceDeviceSettings : public LLPanel
-{
-public:
-	LLPanelVoiceDeviceSettings();
-	~LLPanelVoiceDeviceSettings();
-
-	/*virtual*/ void draw();
-	/*virtual*/ BOOL postBuild();
-	void apply();
-	void cancel();
-	void refresh();
-	void initialize();
-	void cleanup();
-
-	/*virtual*/ void handleVisibilityChange ( BOOL new_visibility );
-	
-protected:
-	static void onCommitInputDevice(LLUICtrl* ctrl, void* user_data);
-	static void onCommitOutputDevice(LLUICtrl* ctrl, void* user_data);
-
-	F32 mMicVolume;
-	std::string mInputDevice;
-	std::string mOutputDevice;
-	class LLComboBox		*mCtrlInputDevices;
-	class LLComboBox		*mCtrlOutputDevices;
-	BOOL mDevicesUpdated;
-};
-
-class LLFloaterVoiceDeviceSettings : public LLFloater
-{
-	friend class LLFloaterReg;
-
-public:
-
-	/*virtual*/ BOOL postBuild();
-	/*virtual*/ void onOpen(const LLSD& key);
-	/*virtual*/ void onClose(bool app_settings);
-	/*virtual*/ void draw();
-	void apply();
-	void cancel();
-private:
-	LLFloaterVoiceDeviceSettings(const LLSD& seed);
-	
-protected:
-	static void* createPanelVoiceDeviceSettings(void* user_data);
-		
-protected:
-	LLPanelVoiceDeviceSettings* mDevicePanel;
-};
-
-#endif // LL_LLFLOATERVOICEDEVICESETTINGS_H
diff --git a/indra/newview/llmorphview.h b/indra/newview/llmorphview.h
index d135659ba2..1d8ee8e944 100644
--- a/indra/newview/llmorphview.h
+++ b/indra/newview/llmorphview.h
@@ -32,7 +32,6 @@
 #include "llframetimer.h"
 
 class LLJoint;
-class LLFloaterCustomize;
 
 class LLMorphView : public LLView
 {
diff --git a/indra/newview/llpaneloutfitsinventory.cpp b/indra/newview/llpaneloutfitsinventory.cpp
index c6a7bd88a0..ff59f9fa1e 100644
--- a/indra/newview/llpaneloutfitsinventory.cpp
+++ b/indra/newview/llpaneloutfitsinventory.cpp
@@ -217,15 +217,6 @@ void LLPanelOutfitsInventory::onSave()
 	//payload["ids"].append(*it);
 	
 	LLNotificationsUtil::add("SaveOutfitAs", args, payload, boost::bind(&LLPanelOutfitsInventory::onSaveCommit, this, _1, _2));
-
-	//)
-	
-/*
-	LLOutfitSaveAsDialog* save_as_dialog = LLFloaterReg::showTypedInstance<LLOutfitSaveAsDialog>("outfit_save_as", LLSD(outfit_name), TRUE);
-	if (save_as_dialog)
-	{
-		save_as_dialog->setSaveAsCommit(boost::bind(&LLPanelOutfitsInventory::onSaveCommit, this, _1 ));
-	}*/
 }
 
 //static
diff --git a/indra/newview/llpanelvoicedevicesettings.cpp b/indra/newview/llpanelvoicedevicesettings.cpp
new file mode 100644
index 0000000000..a97fb434ae
--- /dev/null
+++ b/indra/newview/llpanelvoicedevicesettings.cpp
@@ -0,0 +1,322 @@
+/** 
+ * @file llpanelvoicedevicesettings.cpp
+ * @author Richard Nelson
+ * @brief Voice communication set-up 
+ *
+ * $LicenseInfo:firstyear=2007&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 "llpanelvoicedevicesettings.h"
+
+// Viewer includes
+#include "llbutton.h"
+#include "llcombobox.h"
+#include "llfocusmgr.h"
+#include "lliconctrl.h"
+#include "llsliderctrl.h"
+#include "llviewercontrol.h"
+#include "llvoiceclient.h"
+#include "llvoicechannel.h"
+
+// Library includes (after viewer)
+#include "lluictrlfactory.h"
+
+
+static LLRegisterPanelClassWrapper<LLPanelVoiceDeviceSettings> t_panel_group_general("panel_voice_device_settings");
+
+
+LLPanelVoiceDeviceSettings::LLPanelVoiceDeviceSettings()
+	: LLPanel()
+{
+	mCtrlInputDevices = NULL;
+	mCtrlOutputDevices = NULL;
+	mInputDevice = gSavedSettings.getString("VoiceInputAudioDevice");
+	mOutputDevice = gSavedSettings.getString("VoiceOutputAudioDevice");
+	mDevicesUpdated = FALSE;
+
+	// grab "live" mic volume level
+	mMicVolume = gSavedSettings.getF32("AudioLevelMic");
+
+}
+
+LLPanelVoiceDeviceSettings::~LLPanelVoiceDeviceSettings()
+{
+}
+
+BOOL LLPanelVoiceDeviceSettings::postBuild()
+{
+	LLSlider* volume_slider = getChild<LLSlider>("mic_volume_slider");
+	// set mic volume tuning slider based on last mic volume setting
+	volume_slider->setValue(mMicVolume);
+
+	childSetCommitCallback("voice_input_device", onCommitInputDevice, this);
+	childSetCommitCallback("voice_output_device", onCommitOutputDevice, this);
+	
+	return TRUE;
+}
+
+// virtual
+void LLPanelVoiceDeviceSettings::handleVisibilityChange ( BOOL new_visibility )
+{
+	if (new_visibility)
+	{
+		initialize();	
+	}
+	else
+	{
+		cleanup();
+		// when closing this window, turn of visiblity control so that 
+		// next time preferences is opened we don't suspend voice
+		gSavedSettings.setBOOL("ShowDeviceSettings", FALSE);
+	}
+}
+void LLPanelVoiceDeviceSettings::draw()
+{
+	refresh();
+
+	// let user know that volume indicator is not yet available
+	bool is_in_tuning_mode = LLVoiceClient::getInstance()->inTuningMode();
+	getChildView("wait_text")->setVisible( !is_in_tuning_mode);
+
+	LLPanel::draw();
+
+	if (is_in_tuning_mode)
+	{
+		const S32 num_bars = 5;
+		F32 voice_power = LLVoiceClient::getInstance()->tuningGetEnergy() / LLVoiceClient::OVERDRIVEN_POWER_LEVEL;
+		S32 discrete_power = llmin(num_bars, llfloor(voice_power * (F32)num_bars + 0.1f));
+
+		for(S32 power_bar_idx = 0; power_bar_idx < num_bars; power_bar_idx++)
+		{
+			std::string view_name = llformat("%s%d", "bar", power_bar_idx);
+			LLView* bar_view = getChild<LLView>(view_name);
+			if (bar_view)
+			{
+				gl_rect_2d(bar_view->getRect(), LLColor4::grey, TRUE);
+
+				LLColor4 color;
+				if (power_bar_idx < discrete_power)
+				{
+					color = (power_bar_idx >= 3) ? LLUIColorTable::instance().getColor("OverdrivenColor") : LLUIColorTable::instance().getColor("SpeakingColor");
+				}
+				else
+				{
+					color = LLUIColorTable::instance().getColor("PanelFocusBackgroundColor");
+				}
+
+				LLRect color_rect = bar_view->getRect();
+				color_rect.stretch(-1);
+				gl_rect_2d(color_rect, color, TRUE);
+			}
+		}
+	}
+}
+
+void LLPanelVoiceDeviceSettings::apply()
+{
+	std::string s;
+	if(mCtrlInputDevices)
+	{
+		s = mCtrlInputDevices->getSimple();
+		gSavedSettings.setString("VoiceInputAudioDevice", s);
+		mInputDevice = s;
+	}
+
+	if(mCtrlOutputDevices)
+	{
+		s = mCtrlOutputDevices->getSimple();
+		gSavedSettings.setString("VoiceOutputAudioDevice", s);
+		mOutputDevice = s;
+	}
+
+	// assume we are being destroyed by closing our embedding window
+	LLSlider* volume_slider = getChild<LLSlider>("mic_volume_slider");
+	if(volume_slider)
+	{
+		F32 slider_value = (F32)volume_slider->getValue().asReal();
+		gSavedSettings.setF32("AudioLevelMic", slider_value);
+		mMicVolume = slider_value;
+	}
+}
+
+void LLPanelVoiceDeviceSettings::cancel()
+{
+	gSavedSettings.setString("VoiceInputAudioDevice", mInputDevice);
+	gSavedSettings.setString("VoiceOutputAudioDevice", mOutputDevice);
+
+	if(mCtrlInputDevices)
+		mCtrlInputDevices->setSimple(mInputDevice);
+
+	if(mCtrlOutputDevices)
+		mCtrlOutputDevices->setSimple(mOutputDevice);
+
+	gSavedSettings.setF32("AudioLevelMic", mMicVolume);
+	LLSlider* volume_slider = getChild<LLSlider>("mic_volume_slider");
+	if(volume_slider)
+	{
+		volume_slider->setValue(mMicVolume);
+	}
+}
+
+void LLPanelVoiceDeviceSettings::refresh()
+{
+	//grab current volume
+	LLSlider* volume_slider = getChild<LLSlider>("mic_volume_slider");
+	// set mic volume tuning slider based on last mic volume setting
+	F32 current_volume = (F32)volume_slider->getValue().asReal();
+	LLVoiceClient::getInstance()->tuningSetMicVolume(current_volume);
+
+	// Fill in popup menus
+	mCtrlInputDevices = getChild<LLComboBox>("voice_input_device");
+	mCtrlOutputDevices = getChild<LLComboBox>("voice_output_device");
+
+	if(!LLVoiceClient::getInstance()->deviceSettingsAvailable())
+	{
+		// The combo boxes are disabled, since we can't get the device settings from the daemon just now.
+		// Put the currently set default (ONLY) in the box, and select it.
+		if(mCtrlInputDevices)
+		{
+			mCtrlInputDevices->removeall();
+			mCtrlInputDevices->add( mInputDevice, ADD_BOTTOM );
+			mCtrlInputDevices->setSimple(mInputDevice);
+		}
+		if(mCtrlOutputDevices)
+		{
+			mCtrlOutputDevices->removeall();
+			mCtrlOutputDevices->add( mOutputDevice, ADD_BOTTOM );
+			mCtrlOutputDevices->setSimple(mOutputDevice);
+		}
+	}
+	else if (!mDevicesUpdated)
+	{
+		LLVoiceDeviceList::const_iterator iter;
+		
+		if(mCtrlInputDevices)
+		{
+			mCtrlInputDevices->removeall();
+			mCtrlInputDevices->add( getString("default_text"), ADD_BOTTOM );
+
+			for(iter=LLVoiceClient::getInstance()->getCaptureDevices().begin(); 
+				iter != LLVoiceClient::getInstance()->getCaptureDevices().end();
+				iter++)
+			{
+				// Lets try to localize some system device names. EXT-8375
+				std::string device_name = *iter;
+				LLStringUtil::toLower(device_name); //compare in low case
+				if ("default system device" == device_name)
+				{
+					device_name = getString(device_name);
+				}
+				else if ("no device" == device_name)
+				{
+					device_name = getString(device_name);
+				}
+				else
+				{
+					// restore original value
+					device_name = *iter;
+				}
+				mCtrlInputDevices->add(device_name, ADD_BOTTOM );
+			}
+
+			if(!mCtrlInputDevices->setSimple(mInputDevice))
+			{
+				mCtrlInputDevices->setSimple(getString("default_text"));
+			}
+		}
+		
+		if(mCtrlOutputDevices)
+		{
+			mCtrlOutputDevices->removeall();
+			mCtrlOutputDevices->add( getString("default_text"), ADD_BOTTOM );
+
+			for(iter= LLVoiceClient::getInstance()->getRenderDevices().begin(); 
+				iter !=  LLVoiceClient::getInstance()->getRenderDevices().end(); iter++)
+			{
+				// Lets try to localize some system device names. EXT-8375
+				std::string device_name = *iter;
+				LLStringUtil::toLower(device_name); //compare in low case
+				if ("default system device" == device_name)
+				{
+					device_name = getString(device_name);
+				}
+				else if ("no device" == device_name)
+				{
+					device_name = getString(device_name);
+				}
+				else
+				{
+					// restore original value
+					device_name = *iter;
+				}
+				mCtrlOutputDevices->add(device_name, ADD_BOTTOM );
+			}
+
+			if(!mCtrlOutputDevices->setSimple(mOutputDevice))
+			{
+				mCtrlOutputDevices->setSimple(getString("default_text"));
+			}
+		}
+		mDevicesUpdated = TRUE;
+	}	
+}
+
+void LLPanelVoiceDeviceSettings::initialize()
+{
+	mInputDevice = gSavedSettings.getString("VoiceInputAudioDevice");
+	mOutputDevice = gSavedSettings.getString("VoiceOutputAudioDevice");
+	mMicVolume = gSavedSettings.getF32("AudioLevelMic");
+	mDevicesUpdated = FALSE;
+
+	// ask for new device enumeration
+	LLVoiceClient::getInstance()->refreshDeviceLists();
+
+	// put voice client in "tuning" mode
+	LLVoiceClient::getInstance()->tuningStart();
+	LLVoiceChannel::suspend();
+}
+
+void LLPanelVoiceDeviceSettings::cleanup()
+{
+	LLVoiceClient::getInstance()->tuningStop();
+	LLVoiceChannel::resume();
+}
+
+// static
+void LLPanelVoiceDeviceSettings::onCommitInputDevice(LLUICtrl* ctrl, void* user_data)
+{
+	if(LLVoiceClient::getInstance())
+	{
+		LLVoiceClient::getInstance()->setCaptureDevice(ctrl->getValue().asString());
+	}
+}
+
+// static
+void LLPanelVoiceDeviceSettings::onCommitOutputDevice(LLUICtrl* ctrl, void* user_data)
+{
+	if(LLVoiceClient::getInstance())
+	{
+		LLVoiceClient::getInstance()->setRenderDevice(ctrl->getValue().asString());
+	}
+}
diff --git a/indra/newview/llpanelvoicedevicesettings.h b/indra/newview/llpanelvoicedevicesettings.h
new file mode 100644
index 0000000000..dd630be9a3
--- /dev/null
+++ b/indra/newview/llpanelvoicedevicesettings.h
@@ -0,0 +1,61 @@
+/** 
+ * @file llpanelvoicedevicesettings.h
+ * @author Richard Nelson
+ * @brief Voice communication set-up wizard
+ *
+ * $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_LLFLOATERVOICEDEVICESETTINGS_H
+#define LL_LLFLOATERVOICEDEVICESETTINGS_H
+
+#include "llfloater.h"
+
+class LLPanelVoiceDeviceSettings : public LLPanel
+{
+public:
+	LLPanelVoiceDeviceSettings();
+	~LLPanelVoiceDeviceSettings();
+
+	/*virtual*/ void draw();
+	/*virtual*/ BOOL postBuild();
+	void apply();
+	void cancel();
+	void refresh();
+	void initialize();
+	void cleanup();
+
+	/*virtual*/ void handleVisibilityChange ( BOOL new_visibility );
+	
+protected:
+	static void onCommitInputDevice(LLUICtrl* ctrl, void* user_data);
+	static void onCommitOutputDevice(LLUICtrl* ctrl, void* user_data);
+
+	F32 mMicVolume;
+	std::string mInputDevice;
+	std::string mOutputDevice;
+	class LLComboBox		*mCtrlInputDevices;
+	class LLComboBox		*mCtrlOutputDevices;
+	BOOL mDevicesUpdated;
+};
+
+#endif // LL_LLFLOATERVOICEDEVICESETTINGS_H
diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp
index b6f2d34663..7490ccf77a 100644
--- a/indra/newview/llviewerfloaterreg.cpp
+++ b/indra/newview/llviewerfloaterreg.cpp
@@ -95,7 +95,6 @@
 #include "llfloatertos.h"
 #include "llfloatertopobjects.h"
 #include "llfloateruipreview.h"
-#include "llfloatervoicedevicesettings.h"
 #include "llfloatervoiceeffect.h"
 #include "llfloaterwater.h"
 #include "llfloaterwhitelistentry.h"
@@ -202,7 +201,6 @@ void LLViewerFloaterReg::registerFloaters()
 	LLFloaterReg::add("prefs_hardware_settings", "floater_hardware_settings.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterHardwareSettings>);
 	LLFloaterReg::add("perm_prefs", "floater_perm_prefs.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPerms>);
 	LLFloaterReg::add("pref_joystick", "floater_joystick.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterJoystick>);
-	LLFloaterReg::add("pref_voicedevicesettings", "floater_device_settings.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterVoiceDeviceSettings>);
 	LLFloaterReg::add("preview_anim", "floater_preview_animation.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLPreviewAnim>, "preview");
 	LLFloaterReg::add("preview_gesture", "floater_preview_gesture.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLPreviewGesture>, "preview");
 	LLFloaterReg::add("preview_notecard", "floater_preview_notecard.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLPreviewNotecard>, "preview");
diff --git a/indra/newview/skins/default/xui/da/floater_customize.xml b/indra/newview/skins/default/xui/da/floater_customize.xml
deleted file mode 100644
index a47e0d33df..0000000000
--- a/indra/newview/skins/default/xui/da/floater_customize.xml
+++ /dev/null
@@ -1,530 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater customize" title="UDSEENDE">
-	<tab_container name="customize tab container">
-		<text label="Krops Dele" name="body_parts_placeholder">
-			Kropsdele
-		</text>
-		<panel label="Kropsbygning" name="Shape">
-			<button label="Annullér" label_selected="Annullér" name="Revert"/>
-			<button label="Krop" label_selected="Krop" name="Body"/>
-			<button label="Hoved" label_selected="Hoved" name="Head"/>
-			<button label="Øjne" label_selected="Øjne" name="Eyes"/>
-			<button label="Ører" label_selected="Ører" name="Ears"/>
-			<button label="Næse" label_selected="Næse" name="Nose"/>
-			<button label="Mund" label_selected="Mund" name="Mouth"/>
-			<button label="Kinder" label_selected="Kinder" name="Chin"/>
-			<button label="Overkrop" label_selected="Overkrop" name="Torso"/>
-			<button label="Ben" label_selected="Ben" name="Legs"/>
-			<radio_group name="sex radio">
-				<radio_item label="Kvinde" name="radio" value="0"/>
-				<radio_item label="Mand" name="radio2" value="1"/>
-			</radio_group>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: Kan ikke redigeres
-			</text>
-			<text name="title_loading">
-				[DESC]: indlæser...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: ikke båret
-			</text>
-			<text name="path">
-				Fundet i [PATH]
-			</text>
-			<text name="not worn instructions">
-				Vælg en ny kropsbygning ved at trække en sådan fra din beholdning over på din avatar. Du kan også oprette en fra bunden og bagefter &apos;tage den på&apos;.
-			</text>
-			<text name="no modify instructions">
-				Du har ikke rettigheder til at redigere denne del.
-			</text>
-			<text name="Item Action Label">
-				Figur:
-			</text>
-			<button label="Lav ny krop" label_selected="Lav ny krop" name="Create New"/>
-			<button label="Gem" label_selected="Gem" name="Save"/>
-			<button label="Gem som..." label_selected="Gem som..." name="Save As"/>
-		</panel>
-		<panel label="Hud" name="Skin">
-			<button label="Hudfarve" label_selected="Hudfarve" name="Skin Color"/>
-			<button label="Detaljer" label_selected="Detaljer" name="Face Detail"/>
-			<button label="Sminke" label_selected="Sminke" name="Makeup"/>
-			<button label="Kropsdetaljer" label_selected="Kropsdetaljer" name="Body Detail"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: Kan ikke redigeres
-			</text>
-			<text name="title_loading">
-				[DESC]: indlæser...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: ikke båret
-			</text>
-			<text name="path">
-				Fundet i [PATH]
-			</text>
-			<text name="not worn instructions">
-				Vælg en ny hud ved at trække en sådan fra din beholdning over på din avatar. Du kan også oprette en fra bunden og bagefter &apos;tage den på&apos;.
-			</text>
-			<text name="no modify instructions">
-				Du har ikke rettigheder til at redigere denne del.
-			</text>
-			<text name="Item Action Label">
-				Hud:
-			</text>
-			<texture_picker label="Tatoveringer hoved" name="Head Tattoos" tool_tip="Klik for at vælge et billede" width="98"/>
-			<texture_picker label="Tatover. overkrop" name="Upper Tattoos" tool_tip="Klik for at vælge et billede" width="98"/>
-			<texture_picker label="Tatover. underkrop" name="Lower Tattoos" tool_tip="Klik for at vælge et billede" width="98"/>
-			<button label="Lav ny hud" label_selected="Lav nyt hud" name="Create New"/>
-			<button label="Gem" label_selected="Gem" name="Save"/>
-			<button label="Gem som..." label_selected="Gem som..." name="Save As"/>
-			<button label="Annullér" label_selected="Annullér" name="Revert"/>
-		</panel>
-		<panel label="Hår" name="Hair">
-			<button label="Farve" label_selected="Farve" name="Color"/>
-			<button label="Stil" label_selected="Stil" name="Style"/>
-			<button label="Øjenbryn" label_selected="Øjenbryn" name="Eyebrows"/>
-			<button label="Skæg" label_selected="Skæg" name="Facial"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: kan ikke redigeres
-			</text>
-			<text name="title_loading">
-				[DESC]: indlæser...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: ikke båret
-			</text>
-			<text name="path">
-				Fundet i [PATH]
-			</text>
-			<text name="not worn instructions">
-				Vælg et nyt hår ved at trække et sådant fra din beholdning over på din avatar. Du kan også oprette et fra bunden og bagefter &apos;tage det på&apos;.
-			</text>
-			<text name="no modify instructions">
-				Du har ikke rettigheder til at redigere denne del.
-			</text>
-			<text name="Item Action Label">
-				Hår:
-			</text>
-			<texture_picker label="Tekstur" name="Texture" tool_tip="Klik for at vælge et billede"/>
-			<button label="Lav nyt hår" label_selected="Lav nyt hår" name="Create New"/>
-			<button label="Gem" label_selected="Gem" name="Save"/>
-			<button label="Gem som..." label_selected="Gem som..." name="Save As"/>
-			<button label="Annullér" label_selected="Annullér" name="Revert"/>
-		</panel>
-		<panel label="Øjne" name="Eyes">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: Kan ikke redigeres
-			</text>
-			<text name="title_loading">
-				[DESC]: indlæser...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: ikke båret
-			</text>
-			<text name="path">
-				Fundet i [PATH]
-			</text>
-			<text name="not worn instructions">
-				Vælg et nyt sæt øjne ved at trække et sådant par fra din beholdning over på din avatar. Du kan også oprette et par fra bunden og bagefter &apos;tage dem på&apos;.
-			</text>
-			<text name="no modify instructions">
-				Du har ikke rettigheder til at redigere denne del.
-			</text>
-			<text name="Item Action Label">
-				Øjne:
-			</text>
-			<texture_picker label="Iris" name="Iris" tool_tip="Klik for at vælge et billede"/>
-			<button label="Lav nye øjne" label_selected="Lav nye øjne" name="Create New"/>
-			<button label="Gem" label_selected="Gem" name="Save"/>
-			<button label="Gem som..." label_selected="Gem som..." name="Save As"/>
-			<button label="Annullér" label_selected="Annullér" name="Revert"/>
-		</panel>
-		<text label="Tøje" name="clothes_placeholder">
-			Tøj
-		</text>
-		<panel label="Trøje" name="Shirt">
-			<texture_picker label="Stof" name="Fabric" tool_tip="Klik for at vælge et billede"/>
-			<color_swatch label="Farve" name="Color/Tint" tool_tip="Klik for at åbne farvevælger"/>
-			<button label="Tag af" label_selected="Tag af" name="Take Off"/>
-			<button label="Lav ny trøje" label_selected="Lav ny trøje" name="Create New"/>
-			<button label="Gem" label_selected="Gem" name="Save"/>
-			<button label="Gem som..." label_selected="Gem som..." name="Save As"/>
-			<button label="Annullér" label_selected="Annullér" name="Revert"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: Kan ikke redigeres
-			</text>
-			<text name="title_loading">
-				[DESC]: indlæser...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: ikke båret
-			</text>
-			<text name="path">
-				Fundet i [PATH]
-			</text>
-			<text name="not worn instructions">
-				Vælg en ny trøje ved at trække en fra din beholdning over på din avatar. Du kan også oprette en fra bunden og bagefter &apos;tage den på&apos;.
-			</text>
-			<text name="no modify instructions">
-				Du har ikke rettigheder til at redigere denne del.
-			</text>
-			<text name="Item Action Label">
-				Trøje:
-			</text>
-		</panel>
-		<panel label="Bukser" name="Pants">
-			<texture_picker label="Stof" name="Fabric" tool_tip="Klik for at vælge et billede"/>
-			<color_swatch label="Farve" name="Color/Tint" tool_tip="Klik for at åbne farvevælger"/>
-			<button label="Tag af" label_selected="Tag af" name="Take Off"/>
-			<button label="Lav nye bukser" label_selected="Lav nye bukser" name="Create New"/>
-			<button label="Gem" label_selected="Gem" name="Save"/>
-			<button label="Gem som..." label_selected="Gem som..." name="Save As"/>
-			<button label="Annullér" label_selected="Annullér" name="Revert"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: Kan ikke redigeres
-			</text>
-			<text name="title_loading">
-				[DESC]: indlæser...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: ikke båret
-			</text>
-			<text name="path">
-				Fundet i [PATH]
-			</text>
-			<text name="not worn instructions">
-				Vælg et nyt par bukser ved at trække et par fra din beholdning over på din avatar. Du kan også oprette et par fra bunden og bagefter &apos;tage dem på&apos;.
-			</text>
-			<text name="no modify instructions">
-				Du har ikke rettigheder til at redigere denne del.
-			</text>
-			<text name="Item Action Label">
-				Bukser:
-			</text>
-		</panel>
-		<panel label="Sko" name="Shoes">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: Kan ikke redigeres
-			</text>
-			<text name="title_loading">
-				[DESC]: indlæser...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: ikke båret
-			</text>
-			<text name="path">
-				Fundet i [PATH]
-			</text>
-			<text name="not worn instructions">
-				Vælg et nyt par sko ved at trække et par fra din beholdning over på din avatar. Du kan også oprette et par fra bunden og bagefter &apos;tage dem på&apos;.
-			</text>
-			<button label="Lav nye sko" label_selected="Lav nye sko" name="Create New"/>
-			<text name="no modify instructions">
-				Du har ikke rettigheder til at redigere denne del.
-			</text>
-			<text name="Item Action Label">
-				Sko:
-			</text>
-			<texture_picker label="Stof" name="Fabric" tool_tip="Klik for at vælge et billede"/>
-			<color_swatch label="Farve" name="Color/Tint" tool_tip="Klik for at åbne farvevælger"/>
-			<button label="Tag af" label_selected="Tag af" name="Take Off"/>
-			<button label="Gem" label_selected="Gem" name="Save"/>
-			<button label="Gem som..." label_selected="Gem som..." name="Save As"/>
-			<button label="Annullér" label_selected="Annullér" name="Revert"/>
-		</panel>
-		<panel label="Strømper" name="Socks">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: Kan ikke redigeres
-			</text>
-			<text name="title_loading">
-				[DESC]: indlæser...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: ikke båret
-			</text>
-			<text name="path">
-				Fundet i [PATH]
-			</text>
-			<text name="not worn instructions">
-				Vælg et nyt par sokker ved at trække et par fra din beholdning over på din avatar. Du kan også oprette et par fra bunden og bagefter &apos;tage dem på&apos;.
-			</text>
-			<button label="Lav nye strømper" label_selected="Lav nye strømper" name="Create New"/>
-			<text name="no modify instructions">
-				Du har ikke rettigheder til at redigere denne del.
-			</text>
-			<text name="Item Action Label">
-				Strømper:
-			</text>
-			<texture_picker label="Stof" name="Fabric" tool_tip="Klik for at vælge et billede"/>
-			<color_swatch label="Farve" name="Color/Tint" tool_tip="Klik for at åbne farvevælger"/>
-			<button label="Tag af" label_selected="Tag af" name="Take Off"/>
-			<button label="Gem" label_selected="Gem" name="Save"/>
-			<button label="Gem som..." label_selected="Gem som..." name="Save As"/>
-			<button label="Annullér" label_selected="Annullér" name="Revert"/>
-		</panel>
-		<panel label="Jakke" name="Jacket">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: Kan ikke redigeres
-			</text>
-			<text name="title_loading">
-				[DESC]: indlæser...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: ikke båret
-			</text>
-			<text name="path">
-				Fundet i [PATH]
-			</text>
-			<text name="not worn instructions">
-				Vælg en ny jakke ved at trække en fra din beholdning over på din avatar. Du kan også oprette en fra bunden og bagefter &apos;tage den på&apos;.
-			</text>
-			<button label="Lav ny jakke" label_selected="Lav ny jakke" name="Create New"/>
-			<text name="no modify instructions">
-				Du har ikke rettigheder til at redigere denne del.
-			</text>
-			<text name="Item Action Label">
-				Jakke:
-			</text>
-			<texture_picker label="Stof øverst" name="Upper Fabric" tool_tip="Klik for at vælge et billede"/>
-			<texture_picker label="Stof nederst" name="Lower Fabric" tool_tip="Klik for at vælge et billede"/>
-			<color_swatch label="Farve" name="Color/Tint" tool_tip="Klik for at åbne farvevælger"/>
-			<button label="Tag af" label_selected="Tag af" name="Take Off"/>
-			<button label="Gem" label_selected="Gem" name="Save"/>
-			<button label="Gem som..." label_selected="Gem som..." name="Save As"/>
-			<button label="Annullér" label_selected="Annullér" name="Revert"/>
-		</panel>
-		<panel label="Handsker" name="Gloves">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: Kan ikke redigeres
-			</text>
-			<text name="title_loading">
-				[DESC]: indlæser...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: ikke båret
-			</text>
-			<text name="path">
-				Fundet i [PATH]
-			</text>
-			<text name="not worn instructions">
-				Vælg et sæt nye handsker ved at trække et par fra din beholdning over på din avatar. Du kan også oprette et par fra bunden og bagefter &apos;tage dem på&apos;.
-			</text>
-			<button label="Lav nye handsker" label_selected="Lav nye handsker" name="Create New"/>
-			<text name="no modify instructions">
-				Du har ikke rettigheder til at redigere denne del.
-			</text>
-			<text name="Item Action Label">
-				Handsker:
-			</text>
-			<texture_picker label="Stof" name="Fabric" tool_tip="Klik for at vælge et billede"/>
-			<color_swatch label="Farve" name="Color/Tint" tool_tip="Klik for at åbne farvevælger"/>
-			<button label="Tag af" label_selected="Tag af" name="Take Off"/>
-			<button label="Gem" label_selected="Gem" name="Save"/>
-			<button label="Gem som..." label_selected="Gem som..." name="Save As"/>
-			<button label="Annullér" label_selected="Annullér" name="Revert"/>
-		</panel>
-		<panel label="Undertrøje" name="Undershirt">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: Kan ikke redigeres
-			</text>
-			<text name="title_loading">
-				[DESC]: indlæser...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: ikke båret
-			</text>
-			<text name="path">
-				Fundet i [PATH]
-			</text>
-			<text name="not worn instructions">
-				Vælg en ny undertrøje ved at trække en fra din beholdning over på din avatar. Du kan også oprette en fra bunden og bagefter &apos;tage den på&apos;.
-			</text>
-			<button label="Lav ny undertrøje" label_selected="Lav ny undertrøje" name="Create New"/>
-			<text name="no modify instructions">
-				Du har ikke rettigheder til at redigere denne del.
-			</text>
-			<text name="Item Action Label">
-				Undertrøje:
-			</text>
-			<texture_picker label="Stof" name="Fabric" tool_tip="Klik for at vælge et billede"/>
-			<color_swatch label="Farve" name="Color/Tint" tool_tip="Klik for at åbne farvevælger"/>
-			<button label="Tag af" label_selected="Tag af" name="Take Off"/>
-			<button label="Gem" label_selected="Gem" name="Save"/>
-			<button label="Gem som..." label_selected="Gem som..." name="Save As"/>
-			<button label="Annullér" label_selected="Annullér" name="Revert"/>
-		</panel>
-		<panel label="Underbukser" name="Underpants">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: Kan ikke redigeres
-			</text>
-			<text name="title_loading">
-				[DESC]: indlæser...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: ikke båret
-			</text>
-			<text name="path">
-				Fundet i [PATH]
-			</text>
-			<text name="not worn instructions">
-				Vælg et nyt par underbukser ved at trække et par fra din beholdning over på din avatar. Du kan også oprette et par fra bunden og bagefter &apos;tage dem på&apos;.
-			</text>
-			<button label="Lav nye underbukser" label_selected="Lav nye underbukser" name="Create New"/>
-			<text name="no modify instructions">
-				Du har ikke rettigheder til at redigere denne del.
-			</text>
-			<text name="Item Action Label">
-				Underbukser:
-			</text>
-			<texture_picker label="Stof" name="Fabric" tool_tip="Klik for at vælge et billede"/>
-			<color_swatch label="Farve" name="Color/Tint" tool_tip="Klik for at åbne farvevælger"/>
-			<button label="Tag af" label_selected="Tag af" name="Take Off"/>
-			<button label="Gem" label_selected="Gem" name="Save"/>
-			<button label="Gem som..." label_selected="Gem som..." name="Save As"/>
-			<button label="Annullér" label_selected="Annullér" name="Revert"/>
-		</panel>
-		<panel label="Nederdel" name="Skirt">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: Kan ikke redigeres
-			</text>
-			<text name="title_loading">
-				[DESC]: indlæser...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: ikke båret
-			</text>
-			<text name="path">
-				Fundet i [PATH]
-			</text>
-			<text name="not worn instructions">
-				Vælg en ny nederdel ved at trække en fra din beholdning over på din avatar. Du kan også oprette en fra bunden og bagefter &apos;tage den på&apos;.
-			</text>
-			<button label="Lav ny nederdel" label_selected="Lav ny nederdel" name="Create New"/>
-			<text name="no modify instructions">
-				Du har ikke rettigheder til at redigere denne del.
-			</text>
-			<text name="Item Action Label">
-				Nederdel:
-			</text>
-			<texture_picker label="Stof" name="Fabric" tool_tip="Klik for at vælge et billede"/>
-			<color_swatch label="Farve" name="Color/Tint" tool_tip="Klik for at åbne farvevælger"/>
-			<button label="Tag af" label_selected="Tag af" name="Take Off"/>
-			<button label="Gem" label_selected="Gem" name="Save"/>
-			<button label="Gem som..." label_selected="Gem som..." name="Save As"/>
-			<button label="Annullér" label_selected="Annullér" name="Revert"/>
-		</panel>
-		<panel label="Tatovering" name="Tattoo">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: kan ikke ændre
-			</text>
-			<text name="title_loading">
-				[DESC]: indlæser...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: ikke båret
-			</text>
-			<text name="path">
-				Placeret i [PATH]
-			</text>
-			<text name="not worn instructions">
-				Vælg en ny tatovering ved at trække en fra din beholdning over på din avatar. Du kan også oprette en fra bunden og bagefter &apos;tage den på&apos;.
-			</text>
-			<button label="lav ny tatovering" label_selected="Lav ny tatovering" name="Create New"/>
-			<text name="no modify instructions">
-				Du har ikke rettigheder til at ændre denne.
-			</text>
-			<text name="Item Action Label">
-				Tatovering:
-			</text>
-			<texture_picker label="Tatovering - hovede" name="Head Tattoo" tool_tip="Klik for at vælge et billede"/>
-			<texture_picker label="Øvre tatovering" name="Upper Tattoo" tool_tip="Klik for at vælge et billede"/>
-			<texture_picker label="Nedre tatovering" name="Lower Tattoo" tool_tip="Klik for at vælge et billede"/>
-			<button label="Tag af" label_selected="Tag af" name="Take Off"/>
-			<button label="Gem" label_selected="Gem" name="Save"/>
-			<button label="Gem som..." label_selected="Gem som..." name="Save As"/>
-			<button label="Vend tilbage" label_selected="Vend tilbage" name="Revert"/>
-		</panel>
-		<panel label="Alpha" name="Alpha">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: kan ikke ændre
-			</text>
-			<text name="title_loading">
-				[DESC]: indlæser...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: ikke båret
-			</text>
-			<text name="path">
-				Placeret i [PATH]
-			</text>
-			<text name="not worn instructions">
-				Vælg en ny &apos;alpha maske&apos; ved at trække en fra din beholdning over på din avatar. Du kan også oprette en fra bunden og bagefter &apos;tage den på&apos;.
-			</text>
-			<button label="Lav ny &quot;Alpha&quot;" label_selected="Lav ny &quot;Alpha&quot;" name="Create New"/>
-			<text name="no modify instructions">
-				Du har ikke rettigheder til at ændre denne.
-			</text>
-			<text name="Item Action Label">
-				Alpha:
-			</text>
-			<texture_picker label="Alpha - nedre" name="Lower Alpha" tool_tip="Klik for at vælge et billede"/>
-			<texture_picker label="Øvre alpha" name="Upper Alpha" tool_tip="Klik for at vælge et billede"/>
-			<texture_picker label="Alpha - hoved" name="Head Alpha" tool_tip="Klik for at vælge et billede"/>
-			<texture_picker label="Alpha - øjne" name="Eye Alpha" tool_tip="Klik for at vælge et billede"/>
-			<texture_picker label="Alpha - hår" name="Hair Alpha" tool_tip="Klik for at vælge et billede"/>
-			<button label="Tag af" label_selected="Tag af" name="Take Off"/>
-			<button label="Gem" label_selected="Gem" name="Save"/>
-			<button label="Gem som..." label_selected="Gem som..." name="Save As"/>
-			<button label="Vend tilbage" label_selected="Vend tilbage" name="Revert"/>
-		</panel>
-	</tab_container>
-	<scroll_container name="panel_container"/>
-	<button label="Script info" label_selected="Script info" name="script_info" tool_tip="Vis scripts vedhæftet på din avatar"/>
-	<button label="Lav sæt" label_selected="Lav sæt" name="make_outfit_btn"/>
-	<button label="Annullér" label_selected="Annullér" name="Cancel"/>
-	<button label="OK" label_selected="OK" name="Ok"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/da/floater_device_settings.xml b/indra/newview/skins/default/xui/da/floater_device_settings.xml
deleted file mode 100644
index 06d431a8f9..0000000000
--- a/indra/newview/skins/default/xui/da/floater_device_settings.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_device_settings" title="STEMME CHAT ENHEDSOPSÆTNING"/>
diff --git a/indra/newview/skins/default/xui/da/floater_im.xml b/indra/newview/skins/default/xui/da/floater_im.xml
deleted file mode 100644
index 776bc9ab13..0000000000
--- a/indra/newview/skins/default/xui/da/floater_im.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<multi_floater name="im_floater" title="Personlig samtale (IM)">
-	<string name="only_user_message">
-		Du er den eneste beboer i denne session.
-	</string>
-	<string name="offline_message">
-		[FIRST] [LAST] er ikke logget på.
-	</string>
-	<string name="invite_message">
-		Tryk på [BUTTON NAME] knappen for at acceptére/tilslutte til denne stemme chat.
-	</string>
-	<string name="muted_message">
-		Du har blokeret denne beboer. Hvis du sender en besked til beboeren vil dette automatisk medføre fjernelse af blokeringen
-	</string>
-	<string name="generic_request_error">
-		Kunne ikke etablere forbindelse, prøv igen senere
-	</string>
-	<string name="insufficient_perms_error">
-		Du har ikke de fornødne rettigheder.
-	</string>
-	<string name="session_does_not_exist_error">
-		Denne samtale er lukket ned
-	</string>
-	<string name="no_ability_error">
-		Du har ikke den mulighed.
-	</string>
-	<string name="not_a_mod_error">
-		Du er ikke moderator for denne samtale.
-	</string>
-	<string name="muted_error">
-		Du er blevet &quot;blokeret&quot;.
-	</string>
-	<string name="add_session_event">
-		Kunne ikke tilføje beboere til chat session med [RECIPIENT].
-	</string>
-	<string name="message_session_event">
-		Ikke muligt at sende din besked til samtalen med [RECIPIENT].
-	</string>
-	<string name="removed_from_group">
-		Du er blevet fjernet fra gruppen.
-	</string>
-	<string name="close_on_no_ability">
-		Du har ikke længere mulighed for at deltage i samtalen
-	</string>
-</multi_floater>
diff --git a/indra/newview/skins/default/xui/da/floater_my_friends.xml b/indra/newview/skins/default/xui/da/floater_my_friends.xml
deleted file mode 100644
index c3db53ce63..0000000000
--- a/indra/newview/skins/default/xui/da/floater_my_friends.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_my_friends" title="KONTAKTER">
-	<tab_container name="friends_and_groups">
-		<panel label="Venner" name="friends_panel"/>
-		<panel label="Grupper" name="groups_panel"/>
-	</tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/da/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/da/floater_outfit_save_as.xml
deleted file mode 100644
index 0bcb96b151..0000000000
--- a/indra/newview/skins/default/xui/da/floater_outfit_save_as.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="modal container" title="Gem sæt">
-	<button label="Gem" label_selected="Gem" name="Save"/>
-	<button label="Annullér" label_selected="Annullér" name="Cancel"/>
-	<text name="Save item as:">
-		Gem hvad jeg har på som et nyt sæt:
-	</text>
-	<line_editor name="name ed">
-		[DESC] (ny)
-	</line_editor>
-</floater>
diff --git a/indra/newview/skins/default/xui/da/floater_preview_classified.xml b/indra/newview/skins/default/xui/da/floater_preview_classified.xml
deleted file mode 100644
index bc232f3e9f..0000000000
--- a/indra/newview/skins/default/xui/da/floater_preview_classified.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="classified_preview" title="ANNONCE INFORMATION">
-	<floater.string name="Title">
-		Annonce: [NAME]
-	</floater.string>
-</floater>
diff --git a/indra/newview/skins/default/xui/da/floater_preview_event.xml b/indra/newview/skins/default/xui/da/floater_preview_event.xml
deleted file mode 100644
index 3e870b58ae..0000000000
--- a/indra/newview/skins/default/xui/da/floater_preview_event.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="event_preview" title="EVENT INFORMATION">
-	<floater.string name="Title">
-		Event: [NAME]
-	</floater.string>
-</floater>
diff --git a/indra/newview/skins/default/xui/da/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/da/floater_preview_gesture_info.xml
deleted file mode 100644
index 9892a92e4c..0000000000
--- a/indra/newview/skins/default/xui/da/floater_preview_gesture_info.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="BEVÆGELSE GENVEJ"/>
diff --git a/indra/newview/skins/default/xui/da/floater_preview_gesture_shortcut.xml b/indra/newview/skins/default/xui/da/floater_preview_gesture_shortcut.xml
deleted file mode 100644
index 4d4cca1d90..0000000000
--- a/indra/newview/skins/default/xui/da/floater_preview_gesture_shortcut.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="GENVEJ BEVÆGELSER">
-	<text name="trigger_label">
-		Chat:
-	</text>
-	<text name="key_label">
-		Tastatur:
-	</text>
-	<combo_box label="Intet" name="modifier_combo"/>
-	<combo_box label="Intet" name="key_combo"/>
-	<text name="replace_text" tool_tip="Erstat udløser ord med disse ord. For eksempel uløser &quot;hello&quot; erstat med &quot;hej&quot; vil ændre chat &apos;Jeg ville bare sige hello&apos; til &apos;Jeg ville bare sige hej&apos; samtidig med bevægelsen afspilles!">
-		Erstat:
-	</text>
-	<line_editor name="replace_editor" tool_tip="Erstat udløser ord med disse ord. For eksempel uløser &quot;hello&quot; erstat med &quot;hej&quot; vil ændre chat &apos;Jeg ville bare sige hello&apos; til &apos;Jeg ville bare sige hej&apos; samtidig med bevægelsen afspilles!"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/da/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/da/floater_preview_gesture_steps.xml
deleted file mode 100644
index 9892a92e4c..0000000000
--- a/indra/newview/skins/default/xui/da/floater_preview_gesture_steps.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="BEVÆGELSE GENVEJ"/>
diff --git a/indra/newview/skins/default/xui/da/floater_statistics.xml b/indra/newview/skins/default/xui/da/floater_statistics.xml
deleted file mode 100644
index 8c33f3ecb3..0000000000
--- a/indra/newview/skins/default/xui/da/floater_statistics.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="stats floater" title="STATISTIK"/>
diff --git a/indra/newview/skins/default/xui/da/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/da/floater_wearable_save_as.xml
deleted file mode 100644
index 17d5b9c205..0000000000
--- a/indra/newview/skins/default/xui/da/floater_wearable_save_as.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="modal container" title="">
-	<button label="Gem" label_selected="Gem" name="Save"/>
-	<button label="Annullér" label_selected="Annullér" name="Cancel"/>
-	<text name="Save item as:">
-		Gem genstand i min beholdning som:
-	</text>
-	<line_editor name="name ed">
-		Ny [DESC]
-	</line_editor>
-</floater>
diff --git a/indra/newview/skins/default/xui/da/panel_audio_device.xml b/indra/newview/skins/default/xui/da/panel_audio_device.xml
deleted file mode 100644
index f6d817540e..0000000000
--- a/indra/newview/skins/default/xui/da/panel_audio_device.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel name="device_settings">
-	<text name="Audio Devices">
-		Lydenheder
-	</text>
-	<text name="Input device (microphone):">
-		Input enhed (mikrofon):
-	</text>
-	<text name="Output device (speakers):">
-		Output enhed (højtalere):
-	</text>
-	<text name="Input level:">
-		Input niveau
-	</text>
-	<text_editor name="voice_intro_text1">
-		Med denne skyder kan du regulere hvor højt du lyder i forhold til andre beboere. for at test input niveau kan du blot tale i mikrofon.
-	</text_editor>
-	<volume_slider name="mic_volume_slider" tool_tip="Ændre lydstyrke med denne skyder" />
-	<text name="wait_text">
-		Vent venligst
-	</text>
-	<string name="default_text">
-		Standard
-	</string>
-</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_friends.xml b/indra/newview/skins/default/xui/da/panel_friends.xml
deleted file mode 100644
index a1a25bdc77..0000000000
--- a/indra/newview/skins/default/xui/da/panel_friends.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="friends">
-	<string name="Multiple">
-		Flere venner
-	</string>
-	<scroll_list name="friend_list" tool_tip="Hold Shift eller Ctrl nede imens du klikker for at vælge flere venner">
-		<column name="icon_online_status" tool_tip="Online status"/>
-		<column label="Name" name="friend_name" tool_tip="Navn"/>
-		<column name="icon_visible_online" tool_tip="Venner kan se at du er online"/>
-		<column name="icon_visible_map" tool_tip="Venner kan finde dig på kortet"/>
-		<column name="icon_edit_mine" tool_tip="Venner kan rette i, slette eller tage dine objekter"/>
-		<column name="icon_edit_theirs" tool_tip="Du kan rette i denne vens objekter"/>
-	</scroll_list>
-	<button label="IM" name="im_btn" tool_tip="Skriv en personlig besked (IM)"/>
-	<button label="Profil" name="profile_btn" tool_tip="Vis billede, grupper og anden information"/>
-	<button label="Teleport" name="offer_teleport_btn" tool_tip="Tilbyd denne ven at blive teleporteret til din nuværende position"/>
-	<button label="Betal" name="pay_btn" tool_tip="Giv Linden dollars (L$) til denne ven"/>
-	<button label="Fjern" name="remove_btn" tool_tip="Fjern denne beboer fra din venneliste"/>
-	<button label="Tilføj" name="add_btn" tool_tip="Tilbyd venskab til en beboer"/>
-</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_groups.xml b/indra/newview/skins/default/xui/da/panel_groups.xml
deleted file mode 100644
index 5877226e57..0000000000
--- a/indra/newview/skins/default/xui/da/panel_groups.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel name="groups">
-	<scroll_list name="group list">
-		<column label="" name="name" />
-	</scroll_list>
-	<text name="groupdesc" width="300">
-		Din nuværende aktive gruppe er fremhævet i listen.
-	</text>
-	<text name="groupcount" width="300">
-		Du er medlem i [COUNT] grupper (ud af maksimalt [MAX]).
-	</text>
-	<button label="IM/Opkald" name="IM" tool_tip="Åbner IM session" />
-	<button label="Info" name="Info" />
-	<button label="Aktivér" name="Activate" />
-	<button label="Forlad" name="Leave" />
-	<button label="Opret..." name="Create" />
-	<button label="Søg..." name="Search..." />
-</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_nearby_chat.xml b/indra/newview/skins/default/xui/da/panel_nearby_chat.xml
deleted file mode 100644
index 7f94345976..0000000000
--- a/indra/newview/skins/default/xui/da/panel_nearby_chat.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<!-- All our XML is utf-8 encoded. -->
-<panel name="nearby_chat">
-	<panel name="chat_caption">
-		<text name="sender_name">
-			CHAT NÆRVED
-		</text>
-	</panel>
-</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_online_status.xml b/indra/newview/skins/default/xui/da/panel_online_status.xml
deleted file mode 100644
index fdc489f375..0000000000
--- a/indra/newview/skins/default/xui/da/panel_online_status.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="friend_online_status" name="friend_online_status"/>
diff --git a/indra/newview/skins/default/xui/da/panel_region_general_layout.xml b/indra/newview/skins/default/xui/da/panel_region_general_layout.xml
deleted file mode 100644
index f3c32d6169..0000000000
--- a/indra/newview/skins/default/xui/da/panel_region_general_layout.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Region" name="General">
-	<text name="region_text_lbl">
-		Region:
-	</text>
-	<text name="region_text">
-		ukendt
-	</text>
-	<text name="version_channel_text_lbl">
-		Version:
-	</text>
-	<text name="version_channel_text">
-		ukendt
-	</text>
-	<text name="region_type_lbl">
-		Type:
-	</text>
-	<text name="region_type">
-		ukendt
-	</text>
-	<check_box label="Blokér for redigering af terræn" name="block_terraform_check"/>
-	<check_box label="Blokér for flyvning" name="block_fly_check"/>
-	<check_box label="Tillad skader" name="allow_damage_check"/>
-	<check_box label="Begræns skubning" name="restrict_pushobject"/>
-	<check_box label="Tillad at sælge land" name="allow_land_resell_check"/>
-	<check_box label="Tillad at samle/dele land" name="allow_parcel_changes_check"/>
-	<check_box label="Blokér visning af land i Søgning" name="block_parcel_search_check" tool_tip="Lad beboere se denne region og dens parceller i søgeresultater"/>
-	<spinner label="Max besøgende" name="agent_limit_spin"/>
-	<spinner label="Objekt bonus" name="object_bonus_spin"/>
-	<text label="Rating" name="access_text">
-		Rating:
-	</text>
-	<combo_box label="Moderat" name="access_combo">
-		<combo_box.item label="Voksent" name="Adult"/>
-		<combo_box.item label="Moderat" name="Mature"/>
-		<combo_box.item label="Generel" name="PG"/>
-	</combo_box>
-	<button label="Gem" name="apply_btn"/>
-	<button label="Teleportér en beboer hjem..." name="kick_btn"/>
-	<button label="Teleportér alle beboere hjem..." name="kick_all_btn"/>
-	<button label="Send besked til region..." name="im_btn"/>
-	<button label="Vedligehold telehub..." name="manage_telehub_btn"/>
-</panel>
diff --git a/indra/newview/skins/default/xui/de/floater_customize.xml b/indra/newview/skins/default/xui/de/floater_customize.xml
deleted file mode 100644
index 3651577797..0000000000
--- a/indra/newview/skins/default/xui/de/floater_customize.xml
+++ /dev/null
@@ -1,529 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater customize" title="AUSSEHEN">
-	<tab_container name="customize tab container">
-		<text label="Körperteile" name="body_parts_placeholder">
-			Körperteile
-		</text>
-		<panel label="Form" name="Shape">
-			<button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/>
-			<button label="Körper" label_selected="Körper" name="Body"/>
-			<button label="Kopf" label_selected="Kopf" name="Head"/>
-			<button label="Augen" label_selected="Augen" name="Eyes"/>
-			<button label="Ohren" label_selected="Ohren" name="Ears"/>
-			<button label="Nase" label_selected="Nase" name="Nose"/>
-			<button label="Mund" label_selected="Mund" name="Mouth"/>
-			<button label="Kinn" label_selected="Kinn" name="Chin"/>
-			<button label="Oberkörper" label_selected="Oberkörper" name="Torso"/>
-			<button label="Beine" label_selected="Beine" name="Legs"/>
-			<radio_group name="sex radio">
-				<radio_item label="Weiblich" name="radio" value="0"/>
-				<radio_item label="Männlich" name="radio2" value="1"/>
-			</radio_group>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: bearbeiten nicht möglich
-			</text>
-			<text name="title_loading">
-				[DESC]: wird geladen...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: nicht getragen
-			</text>
-			<text name="path">
-				In [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ziehen Sie eine neue Form aus dem Inventar auf Ihren Avatar, um diese anzulegen. Sie können aber auch eine neue erstellen und diese anlegen.
-			</text>
-			<text name="no modify instructions">
-				Sie sind nicht berechtigt, diese Kleidung zu bearbeiten.
-			</text>
-			<text name="Item Action Label">
-				Form:
-			</text>
-			<button label="Neue Form/Gestalt" label_selected="Neue Form/Gestalt" name="Create New"/>
-			<button font="SansSerifSmall" label="Speichern" label_selected="Speichern" name="Save"/>
-			<button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/>
-		</panel>
-		<panel label="Haut" name="Skin">
-			<button label="Hautfarbe" label_selected="Hautfarbe" left="2" name="Skin Color" width="92"/>
-			<button label="Gesichtsdetails" label_selected="Gesichtsdetails" left="2" name="Face Detail" width="92"/>
-			<button label="Make-Up" label_selected="Make-Up" left="2" name="Makeup" width="92"/>
-			<button label="Körperdetails" label_selected="Körperdetails" left="2" name="Body Detail" width="92"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: bearbeiten nicht möglich
-			</text>
-			<text name="title_loading">
-				[DESC]: wird geladen...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: nicht getragen
-			</text>
-			<text name="path">
-				In [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ziehen Sie eine neue Skin (Haut) aus dem Inventar auf Ihren Avatar, um diese anzulegen. Sie können aber auch eine neue erstellen und diese anlegen.
-			</text>
-			<text name="no modify instructions">
-				Sie sind nicht berechtigt, diese Kleidung zu bearbeiten.
-			</text>
-			<text name="Item Action Label" right="100">
-				Haut:
-			</text>
-			<texture_picker label="Kopftattoo" name="Head Tattoos" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
-			<texture_picker label="Obere Tattoos" name="Upper Tattoos" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
-			<texture_picker label="Untere Tattoos" name="Lower Tattoos" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
-			<button label="Neue Haut" label_selected="Neue Haut" name="Create New"/>
-			<button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/>
-			<button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/>
-			<button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/>
-		</panel>
-		<panel label="Haar" name="Hair">
-			<button label="Farbe" label_selected="Farbe" name="Color"/>
-			<button label="Stil" label_selected="Stil" name="Style"/>
-			<button label="Augenbrauen" label_selected="Augenbrauen" name="Eyebrows"/>
-			<button label="Gesichtshaar" label_selected="Gesichtshaar" name="Facial"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: bearbeiten nicht möglich
-			</text>
-			<text name="title_loading">
-				[DESC]: wird geladen...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: nicht getragen
-			</text>
-			<text name="path">
-				In [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ziehen Sie Haar aus dem Inventar auf Ihren Avatar, um dieses anzulegen. Sie können aber auch neues Haar erstellen und anlegen.
-			</text>
-			<text name="no modify instructions">
-				Sie sind nicht berechtigt, diese Kleidung zu bearbeiten.
-			</text>
-			<text name="Item Action Label" right="100">
-				Haare:
-			</text>
-			<texture_picker label="Textur" name="Texture" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
-			<button label="Neue Haare" label_selected="Neue Haare" name="Create New"/>
-			<button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/>
-			<button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/>
-			<button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/>
-		</panel>
-		<panel label="Augen" name="Eyes">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: bearbeiten nicht möglich
-			</text>
-			<text name="title_loading">
-				[DESC]: wird geladen...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: nicht getragen
-			</text>
-			<text name="path">
-				In [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ziehen Sie neue Augen aus dem Inventar auf Ihren Avatar, um diese anzulegen. Sie können aber auch neue Augen erstellen und diese anlegen.
-			</text>
-			<text name="no modify instructions">
-				Sie sind nicht berechtigt, diese Kleidung zu bearbeiten.
-			</text>
-			<text name="Item Action Label" right="100">
-				Augen:
-			</text>
-			<texture_picker label="Iris" name="Iris" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
-			<button label="Neue Augen" label_selected="Neue Augen" name="Create New"/>
-			<button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/>
-			<button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/>
-			<button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/>
-		</panel>
-		<text label="Kleidung" name="clothes_placeholder">
-			Kleidung
-		</text>
-		<panel label="Hemd" name="Shirt">
-			<texture_picker label="Stoff" name="Fabric" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
-			<color_swatch label="Farbe/Ton" name="Color/Tint" tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen"/>
-			<button font="SansSerifSmall" label="Ausziehen" label_selected="Ausziehen" name="Take Off"/>
-			<button label="Neues Hemd" label_selected="Neues Hemd" name="Create New"/>
-			<button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/>
-			<button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/>
-			<button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: bearbeiten nicht möglich
-			</text>
-			<text name="title_loading">
-				[DESC]: wird geladen...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: nicht getragen
-			</text>
-			<text name="path">
-				In [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ziehen Sie ein neues Hemd aus dem Inventar auf Ihren Avatar, um dieses anzuziehen. Sie können aber auch ein neues Hemd erstellen und dieses anlegen.
-			</text>
-			<text name="no modify instructions">
-				Sie sind nicht berechtigt, diese Kleidung zu bearbeiten.
-			</text>
-			<text name="Item Action Label" right="100">
-				Hemd:
-			</text>
-		</panel>
-		<panel label="Hose" name="Pants">
-			<texture_picker label="Stoff" name="Fabric" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
-			<color_swatch label="Farbe/Ton" name="Color/Tint" tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen"/>
-			<button font="SansSerifSmall" label="Ausziehen" label_selected="Ausziehen" name="Take Off"/>
-			<button label="Neue Hose" label_selected="Neue Hose" name="Create New"/>
-			<button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/>
-			<button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/>
-			<button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: bearbeiten nicht möglich
-			</text>
-			<text name="title_loading">
-				[DESC]: wird geladen...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: nicht getragen
-			</text>
-			<text name="path">
-				In [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ziehen Sie eine neue Hose aus dem Inventar auf Ihren Avatar, um diese anzuziehen. Sie können aber auch eine neue erstellen und diese anziehen.
-			</text>
-			<text name="no modify instructions">
-				Sie sind nicht berechtigt, diese Kleidung zu bearbeiten.
-			</text>
-			<text name="Item Action Label" right="100">
-				Hose:
-			</text>
-		</panel>
-		<panel label="Schuhe" name="Shoes">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: bearbeiten nicht möglich
-			</text>
-			<text name="title_loading">
-				[DESC]: wird geladen...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: nicht getragen
-			</text>
-			<text name="path">
-				In [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ziehen Sie neue Schuhe aus dem Inventar auf Ihren Avatar, um diese anzuziehen. Sie können aber auch neue Schuhe erstellen und diese anlegen.
-			</text>
-			<button label="Neue Schuhe" label_selected="Neue Schuhe" name="Create New"/>
-			<text name="no modify instructions">
-				Sie sind nicht berechtigt, diese Kleidung zu bearbeiten.
-			</text>
-			<text name="Item Action Label" right="100">
-				Schuhe:
-			</text>
-			<texture_picker label="Stoff" name="Fabric" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
-			<color_swatch label="Farbe/Ton" name="Color/Tint" tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen"/>
-			<button font="SansSerifSmall" label="Ausziehen" label_selected="Ausziehen" name="Take Off"/>
-			<button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/>
-			<button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/>
-			<button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/>
-		</panel>
-		<panel label="Socken" name="Socks">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: bearbeiten nicht möglich
-			</text>
-			<text name="title_loading">
-				[DESC]: wird geladen...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: nicht getragen
-			</text>
-			<text name="path">
-				In [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ziehen Sie neue Socken aus dem Inventar auf Ihren Avatar, um diese anzuziehen. Sie können aber auch neue erstellen und diese anziehen.
-			</text>
-			<button label="Neue Socken" label_selected="Neue Socken" name="Create New"/>
-			<text name="no modify instructions">
-				Sie sind nicht berechtigt, diese Kleidung zu bearbeiten.
-			</text>
-			<text name="Item Action Label" right="100">
-				Socken:
-			</text>
-			<texture_picker label="Stoff" name="Fabric" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
-			<color_swatch label="Farbe/Ton" name="Color/Tint" tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen"/>
-			<button font="SansSerifSmall" label="Ausziehen" label_selected="Ausziehen" name="Take Off"/>
-			<button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/>
-			<button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/>
-			<button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/>
-		</panel>
-		<panel label="Jacke" name="Jacket">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: bearbeiten nicht möglich
-			</text>
-			<text name="title_loading">
-				[DESC]: wird geladen...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: nicht getragen
-			</text>
-			<text name="path">
-				In [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ziehen Sie eine neue Jacke aus dem Inventar auf Ihren Avatar, um diese anzuziehen. Sie können aber auch eine neue erstellen und diese anziehen.
-			</text>
-			<button label="Neue Jacke" label_selected="Neue Jacke" name="Create New"/>
-			<text name="no modify instructions">
-				Sie sind nicht berechtigt, diese Kleidung zu bearbeiten.
-			</text>
-			<text name="Item Action Label" right="100">
-				Jacke:
-			</text>
-			<texture_picker label="Stoff: oben" name="Upper Fabric" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
-			<texture_picker label="Stoff: unten" name="Lower Fabric" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
-			<color_swatch label="Farbe/Ton" name="Color/Tint" tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen"/>
-			<button font="SansSerifSmall" label="Ausziehen" label_selected="Ausziehen" name="Take Off"/>
-			<button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/>
-			<button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/>
-			<button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/>
-		</panel>
-		<panel label="Handschuhe" name="Gloves">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: bearbeiten nicht möglich
-			</text>
-			<text name="title_loading">
-				[DESC]: wird geladen...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: nicht getragen
-			</text>
-			<text name="path">
-				In [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ziehen Sie neue Handschuhe aus dem Inventar auf Ihren Avatar, um diese anzuziehen. Sie können aber auch neue erstellen und diese anziehen.
-			</text>
-			<button label="Neue Handschuhe" label_selected="Neue Handschuhe" name="Create New"/>
-			<text name="no modify instructions">
-				Sie sind nicht berechtigt, diese Kleidung zu bearbeiten.
-			</text>
-			<text name="Item Action Label" right="100">
-				Handschuhe:
-			</text>
-			<texture_picker label="Stoff" name="Fabric" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
-			<color_swatch label="Farbe/Ton" name="Color/Tint" tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen"/>
-			<button font="SansSerifSmall" label="Ausziehen" label_selected="Ausziehen" name="Take Off"/>
-			<button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/>
-			<button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/>
-			<button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/>
-		</panel>
-		<panel label="Unterhemd" name="Undershirt">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: bearbeiten nicht möglich
-			</text>
-			<text name="title_loading">
-				[DESC]: wird geladen...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: nicht getragen
-			</text>
-			<text name="path">
-				In [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ziehen Sie ein neues Unterhemd aus dem Inventar auf Ihren Avatar, um dieses anzuziehen. Sie können aber auch ein neues Unterhemd erstellen und dieses anziehen.
-			</text>
-			<button label="Neues Unterhemd" label_selected="Neues Unterhemd" name="Create New"/>
-			<text name="no modify instructions">
-				Sie sind nicht berechtigt, diese Kleidung zu bearbeiten.
-			</text>
-			<text name="Item Action Label" right="100">
-				Unterhemd:
-			</text>
-			<texture_picker label="Stoff" name="Fabric" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
-			<color_swatch label="Farbe/Ton" name="Color/Tint" tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen"/>
-			<button font="SansSerifSmall" label="Ausziehen" label_selected="Ausziehen" name="Take Off"/>
-			<button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/>
-			<button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/>
-			<button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/>
-		</panel>
-		<panel label="Unterhose" name="Underpants">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: bearbeiten nicht möglich
-			</text>
-			<text name="title_loading">
-				[DESC]: wird geladen...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: nicht getragen
-			</text>
-			<text name="path">
-				In [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ziehen Sie eine neue Unterhose aus dem Inventar auf Ihren Avatar, um diese anzuziehen. Sie können aber auch eine neue erstellen und diese anziehen.
-			</text>
-			<button label="Neue Unterhose" label_selected="Neue Unterhose" name="Create New"/>
-			<text name="no modify instructions">
-				Sie sind nicht berechtigt, diese Kleidung zu bearbeiten.
-			</text>
-			<text name="Item Action Label" right="100">
-				Unterhose:
-			</text>
-			<texture_picker label="Stoff" name="Fabric" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
-			<color_swatch label="Farbe/Ton" name="Color/Tint" tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen"/>
-			<button font="SansSerifSmall" label="Ausziehen" label_selected="Ausziehen" name="Take Off"/>
-			<button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/>
-			<button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/>
-			<button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/>
-		</panel>
-		<panel label="Rock" name="Skirt">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: bearbeiten nicht möglich
-			</text>
-			<text name="title_loading">
-				[DESC]: wird geladen...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: nicht getragen
-			</text>
-			<text name="path">
-				In [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ziehen Sie einen neuen Rock aus dem Inventar auf Ihren Avatar, um diesen anzuziehen. Sie können aber auch einen neuen Rock erstellen und diesen anziehen.
-			</text>
-			<button label="Neuer Rock" label_selected="Neuer Rock" name="Create New"/>
-			<text name="no modify instructions">
-				Sie sind nicht berechtigt, diese Kleidung zu bearbeiten.
-			</text>
-			<text name="Item Action Label" right="100">
-				Rock:
-			</text>
-			<texture_picker label="Stoff" name="Fabric" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
-			<color_swatch label="Farbe/Ton" name="Color/Tint" tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen"/>
-			<button font="SansSerifSmall" label="Ausziehen" label_selected="Ausziehen" name="Take Off"/>
-			<button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/>
-			<button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/>
-			<button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/>
-		</panel>
-		<panel label="Tätowierung" name="Tattoo">
-			<text name="title">
-				Tätowierung
-			</text>
-			<text name="title_no_modify">
-				[BESCHR]: bearbeiten nicht möglich
-			</text>
-			<text name="title_loading">
-				[BESCHR]: wird geladen...
-			</text>
-			<text name="title_not_worn">
-				[BESCHR]: nicht getragen
-			</text>
-			<text name="path">
-				Befindet sich in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ziehen Sie eine neue Tätowierung aus dem Inventar auf Ihren Avatar, um diese anzulegen. Sie können aber auch eine neue erstellen und diese anlegen.
-			</text>
-			<button label="Neue Tätowierung erstellen" label_selected="Neue Tätowierung erstellen" name="Create New"/>
-			<text name="no modify instructions">
-				Sie sind nicht berechtigt, diese Kleidung zu bearbeiten.
-			</text>
-			<text name="Item Action Label">
-				Tätowierung:
-			</text>
-			<texture_picker label="Kopftattoo" name="Head Tattoo" tool_tip="Zum Auswählen eines Bildes hier klicken"/>
-			<texture_picker label="Obere Tattoos" name="Upper Tattoo" tool_tip="Zum Auswählen eines Bildes hier klicken"/>
-			<texture_picker label="Untere Tattoos" name="Lower Tattoo" tool_tip="Zum Auswählen eines Bildes hier klicken"/>
-			<button label="Ausziehen" label_selected="Ausziehen" name="Take Off"/>
-			<button label="Speichern" label_selected="Speichern" name="Save"/>
-			<button label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/>
-			<button label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/>
-		</panel>
-		<panel label="Alpha" name="Alpha">
-			<text name="title">
-				Alpha
-			</text>
-			<text name="title_no_modify">
-				[BESCHR]: bearbeiten nicht möglich
-			</text>
-			<text name="title_loading">
-				[BESCHR]: wird geladen...
-			</text>
-			<text name="title_not_worn">
-				[BESCHR]: nicht getragen
-			</text>
-			<text name="path">
-				Befindet sich in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Sie können eine neue Alpha-Maske anlegen, indem Sie eine von Ihrem Inventar auf Ihren Avatar ziehen. Sie können aber auch eine neue erstellen und diese anlegen.
-			</text>
-			<button label="Neue Alpha erstellen" label_selected="Neue Alpha erstellen" name="Create New"/>
-			<text name="no modify instructions">
-				Sie sind nicht berechtigt, diese Kleidung zu bearbeiten.
-			</text>
-			<text name="Item Action Label">
-				Alpha:
-			</text>
-			<texture_picker label="Alpha: Unten" name="Lower Alpha" tool_tip="Zum Auswählen eines Bildes hier klicken"/>
-			<texture_picker label="Alpha: Oben" name="Upper Alpha" tool_tip="Zum Auswählen eines Bildes hier klicken"/>
-			<texture_picker label="Kopf: Alpha" name="Head Alpha" tool_tip="Zum Auswählen eines Bildes hier klicken"/>
-			<texture_picker label="Alpha: Augen" name="Eye Alpha" tool_tip="Zum Auswählen eines Bildes hier klicken"/>
-			<texture_picker label="Alpha: Haare" name="Hair Alpha" tool_tip="Zum Auswählen eines Bildes hier klicken"/>
-			<button label="Ausziehen" label_selected="Ausziehen" name="Take Off"/>
-			<button label="Speichern" label_selected="Speichern" name="Save"/>
-			<button label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/>
-			<button label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/>
-		</panel>
-	</tab_container>
-	<button label="Skriptinfo" label_selected="Skriptinfo" name="script_info" tool_tip="Skripts, die an Ihren Avatar angehängt sind, anzeigen"/>
-	<button label="Outfit erstellen" label_selected="Outfit erstellen" name="make_outfit_btn"/>
-	<button label="Abbrechen" label_selected="Abbrechen" name="Cancel"/>
-	<button label="OK" label_selected="OK" name="Ok"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_device_settings.xml b/indra/newview/skins/default/xui/de/floater_device_settings.xml
deleted file mode 100644
index 3d7e9c96c1..0000000000
--- a/indra/newview/skins/default/xui/de/floater_device_settings.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_device_settings" title="EINSTELLUNGEN FÜR VOICE-CHAT"/>
diff --git a/indra/newview/skins/default/xui/de/floater_first_time_tip.xml b/indra/newview/skins/default/xui/de/floater_first_time_tip.xml
deleted file mode 100644
index 9546cc2c42..0000000000
--- a/indra/newview/skins/default/xui/de/floater_first_time_tip.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="set_name_in_the_cladd">
-	<check_box label="Turn off Quick Tips" name="DontShowFirstTimeTip_checkbox"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_im.xml b/indra/newview/skins/default/xui/de/floater_im.xml
deleted file mode 100644
index 8ae8f120cf..0000000000
--- a/indra/newview/skins/default/xui/de/floater_im.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<multi_floater name="im_floater" title="Instant Message">
-	<string name="only_user_message">
-		Sie sind der einzige Einwohner in dieser Sitzung.
-	</string>
-	<string name="offline_message">
-		[FIRST] [LAST] ist offline.
-	</string>
-	<string name="invite_message">
-		Klicken Sie auf [BUTTON NAME], um eine Verbindung zu diesem Voice-Chat herzustellen.
-	</string>
-	<string name="muted_message">
-		Sie haben diesen Einwohner ignoriert. Wenn Sie eine Nachricht senden, wird dieser freigeschaltet.
-	</string>
-	<string name="generic_request_error">
-		Fehler bei Anfrage, bitte versuchen Sie es später.
-	</string>
-	<string name="insufficient_perms_error">
-		Sie sind dazu nicht berechtigt.
-	</string>
-	<string name="session_does_not_exist_error">
-		Die Sitzung ist abgelaufen
-	</string>
-	<string name="no_ability_error">
-		Sie besitzen diese Fähigkeit nicht.
-	</string>
-	<string name="not_a_mod_error">
-		Sie sind kein Sitzungsmoderator.
-	</string>
-	<string name="muted_error">
-		Ein Gruppenmoderator hat Ihren Text-Chat deaktiviert.
-	</string>
-	<!-- ALL of the event strings should have [RECIPIENT] in them -->
-	<string name="add_session_event">
-		Es konnten keine Einwohner zur Chat-Sitzung mit [RECIPIENT] hinzugefügt werden.
-	</string>
-	<string name="message_session_event">
-		Ihre Nachricht konnte nicht an die Chat-Sitzung mit [RECIPIENT] gesendet werden.
-	</string>
-	<string name="removed_from_group">
-		Sie wurden von der Gruppe ausgeschlossen.
-	</string>
-	<string name="close_on_no_ability">
-		Sie haben nicht mehr die Berechtigung an der Chat-Sitzung teilzunehmen.
-	</string>
-</multi_floater>
diff --git a/indra/newview/skins/default/xui/de/floater_my_friends.xml b/indra/newview/skins/default/xui/de/floater_my_friends.xml
deleted file mode 100644
index 61cb0d5c14..0000000000
--- a/indra/newview/skins/default/xui/de/floater_my_friends.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_my_friends" title="KONTAKTE">
-	<tab_container name="friends_and_groups">
-		<panel label="Freunde" name="friends_panel"/>
-		<panel label="Gruppen" name="groups_panel"/>
-	</tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/de/floater_outfit_save_as.xml
deleted file mode 100644
index 8c110e5516..0000000000
--- a/indra/newview/skins/default/xui/de/floater_outfit_save_as.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="modal container" title="Outfit speichern">
-	<button label="Speichern" label_selected="Speichern" name="Save"/>
-	<button label="Abbrechen" label_selected="Abbrechen" name="Cancel"/>
-	<text name="Save item as:">
-		Meine aktuelle Kleidung
-als neues Outfit speichern:
-	</text>
-	<line_editor name="name ed">
-		[DESC] (neu)
-	</line_editor>
-</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_preview_classified.xml b/indra/newview/skins/default/xui/de/floater_preview_classified.xml
deleted file mode 100644
index 401758769d..0000000000
--- a/indra/newview/skins/default/xui/de/floater_preview_classified.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="classified_preview" title="INFORMATIONEN ÜBER ANZEIGE">
-	<floater.string name="Title">
-		Anzeige: [NAME]
-	</floater.string>
-</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_preview_event.xml b/indra/newview/skins/default/xui/de/floater_preview_event.xml
deleted file mode 100644
index 7e46bbab54..0000000000
--- a/indra/newview/skins/default/xui/de/floater_preview_event.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="event_preview" title="EVENT-INFORMATION">
-	<floater.string name="Title">
-		Veranstaltung: [NAME]
-	</floater.string>
-</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/de/floater_preview_gesture_info.xml
deleted file mode 100644
index 0d0d28f96f..0000000000
--- a/indra/newview/skins/default/xui/de/floater_preview_gesture_info.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="GESTE - SCHNELLTASTE"/>
diff --git a/indra/newview/skins/default/xui/de/floater_preview_gesture_shortcut.xml b/indra/newview/skins/default/xui/de/floater_preview_gesture_shortcut.xml
deleted file mode 100644
index 0b5df13395..0000000000
--- a/indra/newview/skins/default/xui/de/floater_preview_gesture_shortcut.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="GESTE - SCHNELLTASTE">
-	<text name="trigger_label">
-		Chat:
-	</text>
-	<text name="key_label">
-		Tastatur:
-	</text>
-	<combo_box label="Keiner" name="modifier_combo"/>
-	<combo_box label="Keiner" name="key_combo"/>
-	<text name="replace_text" tool_tip="Ersetzt den Auslösertext mit diesem Text. Wenn Sie zum Beispiel den Auslöser „hallo“ durch „wie geht&apos;s“ ersetzen, erscheint im Chat anstelle von „Ich wollte nur hallo sagen“ der Text „Ich wollte nur wie geht&apos;s sagen“ und die zugehörige Geste wird abgespielt.">
-		Ersetzen:
-	</text>
-	<line_editor name="replace_editor" tool_tip="Ersetzt den Auslösertext mit diesem Text. Wenn Sie zum Beispiel den Auslöser „hallo“ durch „wie geht&apos;s“ ersetzen, erscheint im Chat anstelle von „Ich wollte nur hallo sagen“ der Text „Ich wollte nur wie geht&apos;s sagen“ und die zugehörige Geste wird abgespielt."/>
-</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/de/floater_preview_gesture_steps.xml
deleted file mode 100644
index 0d0d28f96f..0000000000
--- a/indra/newview/skins/default/xui/de/floater_preview_gesture_steps.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="GESTE - SCHNELLTASTE"/>
diff --git a/indra/newview/skins/default/xui/de/floater_statistics.xml b/indra/newview/skins/default/xui/de/floater_statistics.xml
deleted file mode 100644
index 72a87a9566..0000000000
--- a/indra/newview/skins/default/xui/de/floater_statistics.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="stats floater" title="STATISTIKEN"/>
diff --git a/indra/newview/skins/default/xui/de/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/de/floater_wearable_save_as.xml
deleted file mode 100644
index f9b3552e8b..0000000000
--- a/indra/newview/skins/default/xui/de/floater_wearable_save_as.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="modal container" title=" ">
-	<button label="Speichern" label_selected="Speichern" name="Save"/>
-	<button label="Abbrechen" label_selected="Abbrechen" name="Cancel"/>
-	<text name="Save item as:">
-		Objekt in meinem Inventar speichern als:
-	</text>
-	<line_editor name="name ed">
-		Neu [DESC]
-	</line_editor>
-</floater>
diff --git a/indra/newview/skins/default/xui/de/panel_audio_device.xml b/indra/newview/skins/default/xui/de/panel_audio_device.xml
deleted file mode 100644
index 6ecd1f0241..0000000000
--- a/indra/newview/skins/default/xui/de/panel_audio_device.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel name="device_settings">
-	<text name="Audio Devices">
-		Audiogeräte
-	</text>
-	<text name="Output device (speakers):">
-		Ausgabegerät (Lautsprecher):
-	</text>
-	<text name="Input device (microphone):">
-		Eingabegerät (Mikro):
-	</text>
-	<text name="Input level:">
-		Eingangslautstärke
-	</text>
-	<text_editor name="voice_intro_text1">
-		Mit dem Regler steuern Sie, wie laut andere Einwohner Sie hören. Testen Sie die Eingangslautstärke, indem Sie in das Mikro sprechen.
-	</text_editor>
-	<volume_slider name="mic_volume_slider" tool_tip="Ändern Sie die Lautstärke mit dem Regler" />
-	<text name="wait_text">
-		Bitte warten
-	</text>
-	<text name="default_text">
-		Standard
-	</text>
-</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_friends.xml b/indra/newview/skins/default/xui/de/panel_friends.xml
deleted file mode 100644
index 50013a2b24..0000000000
--- a/indra/newview/skins/default/xui/de/panel_friends.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="friends">
-	<string name="Multiple">
-		Mehrere Freunde
-	</string>
-	<scroll_list name="friend_list" tool_tip="Halten Sie die Tasten „Umschalt“ oder „Strg“ gedrückt, um durch Klicken mehrere Freunde auszuwählen.">
-		<column name="icon_online_status" tool_tip="Online-Status"/>
-		<column label="Name" name="friend_name" tool_tip="Name"/>
-		<column name="icon_visible_online" tool_tip="Freund kann sehen, wenn Sie online sind"/>
-		<column name="icon_visible_map" tool_tip="Freund kann Sie auf der Karte finden"/>
-		<column name="icon_edit_mine" tool_tip="Freunde können Objekte bearbeiten, löschen und an sich nehmen"/>
-		<column name="icon_edit_theirs" tool_tip="Sie können die Objekte dieses Freunds bearbeiten"/>
-	</scroll_list>
-	<panel name="rights_container">
-		<text name="friend_name_label">
-			Wählen Sie den/die Freund(e) aus, dessen/deren Rechte Sie ändern möchten...
-		</text>
-		<check_box label="Kann meinen Online-Status sehen" name="online_status_cb" tool_tip="Festlegen, ob dieser Freund meinen Online-Status auf seiner Freundesliste oder Visitenkarte einsehen kann"/>
-		<check_box label="Kann mich auf der Weltkarte sehen" name="map_status_cb" tool_tip="Festlegen, ob dieser Freund auf seiner Karte meinen Standort sehen kann"/>
-		<check_box label="Kann meine Objekte verändern" name="modify_status_cb" tool_tip="Festlegen, ob dieser Freund meine Objekte verändern kann"/>
-		<text name="process_rights_label">
-			Rechte werden geändert...
-		</text>
-	</panel>
-	<button label="IM/Anruf" name="im_btn" tool_tip="Beginnt eine Instant Message-Sitzung"/>
-	<button label="Profil" name="profile_btn" tool_tip="Bilder, Gruppen und andere Informationen anzeigen"/>
-	<button label="Teleportieren" name="offer_teleport_btn" tool_tip="Bieten Sie diesem Freund einen Teleport an Ihre Position an"/>
-	<button label="Bezahlen" name="pay_btn" tool_tip="Diesem Freund Linden-Dollar (L$) geben"/>
-	<button label="Entfernen" name="remove_btn" tool_tip="Diese Person von Ihrer Freundesliste entfernen"/>
-	<button label="Hinzufügen" name="add_btn" tool_tip="Bieten Sie einem Einwohner die Freundschaft an"/>
-</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_groups.xml b/indra/newview/skins/default/xui/de/panel_groups.xml
deleted file mode 100644
index f857a6c7ac..0000000000
--- a/indra/newview/skins/default/xui/de/panel_groups.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel name="groups">
-	<text name="groupdesc" width="300">
-		Die derzeit aktive Gruppe ist fett hervorgehoben.
-	</text>
-	<text name="groupcount" width="360">
-		Sie sind Mitglied bei [COUNT] Gruppen (von max. [MAX]).
-	</text>
-	<button label="IM/Anruf" name="IM" tool_tip="Beginnt eine Instant Message-Sitzung" />
-	<button label="Info" name="Info" />
-	<button label="Aktivieren" name="Activate" />
-	<button label="Verlassen" name="Leave" />
-	<button label="Erstellen..." name="Create" />
-	<button label="Suchen..." name="Search..." />
-</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_nearby_chat.xml b/indra/newview/skins/default/xui/de/panel_nearby_chat.xml
deleted file mode 100644
index 3f4f5a71b5..0000000000
--- a/indra/newview/skins/default/xui/de/panel_nearby_chat.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<!-- All our XML is utf-8 encoded. -->
-<panel name="nearby_chat">
-	<panel name="chat_caption">
-		<text name="sender_name" width="200">
-			CHAT IN DER NÄHE
-		</text>
-	</panel>
-</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_online_status.xml b/indra/newview/skins/default/xui/de/panel_online_status.xml
deleted file mode 100644
index 7c7448c061..0000000000
--- a/indra/newview/skins/default/xui/de/panel_online_status.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Freunde_online_Status" name="friend_online_status"/>
diff --git a/indra/newview/skins/default/xui/de/panel_region_general_layout.xml b/indra/newview/skins/default/xui/de/panel_region_general_layout.xml
deleted file mode 100644
index 09142ada6f..0000000000
--- a/indra/newview/skins/default/xui/de/panel_region_general_layout.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Region" name="General">
-	<text name="region_text_lbl">
-		Region:
-	</text>
-	<text name="region_text">
-		unbekannt
-	</text>
-	<text name="version_channel_text_lbl">
-		Version:
-	</text>
-	<text name="version_channel_text">
-		unbekannt
-	</text>
-	<text name="region_type_lbl">
-		Typ:
-	</text>
-	<text name="region_type">
-		unbekannt
-	</text>
-	<check_box label="Terraformen blockieren" name="block_terraform_check"/>
-	<check_box label="Fliegen blockieren" name="block_fly_check"/>
-	<check_box label="Schaden zulassen" name="allow_damage_check"/>
-	<check_box label="Stoßen beschränken" name="restrict_pushobject"/>
-	<check_box label="Landwiederverkauf zulassen" name="allow_land_resell_check"/>
-	<check_box label="Zusammenlegen/Teilen von Land zulassen" name="allow_parcel_changes_check"/>
-	<check_box label="Landanzeige in Suche blockieren" name="block_parcel_search_check" tool_tip="Diese Region und ihre Parzellen in Suchergebnissen anzeigen"/>
-	<spinner label="Avatar-Limit" name="agent_limit_spin"/>
-	<spinner label="Objektbonus" name="object_bonus_spin"/>
-	<text label="Alterseinstufung" name="access_text">
-		Einstufung:
-	</text>
-	<combo_box label="Moderat" name="access_combo">
-		<combo_box.item label="Adult" name="Adult"/>
-		<combo_box.item label="Moderat" name="Mature"/>
-		<combo_box.item label="Allgemein" name="PG"/>
-	</combo_box>
-	<button label="Übernehmen" name="apply_btn"/>
-	<button label="Einen Einwohner nach Hause teleportieren..." name="kick_btn"/>
-	<button label="Alle Einwohner nach Hause teleportieren..." name="kick_all_btn"/>
-	<button label="Nachricht an Region senden..." name="im_btn"/>
-	<button label="Telehub verwalten..." name="manage_telehub_btn"/>
-</panel>
diff --git a/indra/newview/skins/default/xui/en/floater_customize.xml b/indra/newview/skins/default/xui/en/floater_customize.xml
deleted file mode 100644
index 01bced81d0..0000000000
--- a/indra/newview/skins/default/xui/en/floater_customize.xml
+++ /dev/null
@@ -1,3389 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater
- legacy_header_height="18"
- can_minimize="false"
- follows="left|top"
- height="583"
- layout="topleft"
- left_delta="-3"
- name="floater customize"
- help_topic="floater_customize"
- save_rect="true"
- title="APPEARANCE"
- top_delta="-185"
- width="600">
-    <tab_container
-     height="517"
-     layout="topleft"
-     left="10"
-     name="customize tab container"
-     tab_min_width="96"
-     tab_position="left"
-     tab_height="50"
-     top="26"
-     width="580">
-            <text
-             type="string"
-             length="1"
-             follows="left|top"
-             height="16"
-             layout="topleft"
-             left="5"
-             name="body_parts_placeholder"
-	     font="SansSerifSmallBold"
-             top="10"
-             width="100">
-                Body Parts
-            </text>
-	    <placeholder />
-        <panel
-         border="false"
- background_visible="true"
- bg_alpha_color="DkGray2"
-         follows="left|top|right|bottom"
-         height="508"
-         label="Shape"
-         layout="topleft"
-         name="Shape"
-         help_topic="customize_shape_tab"
-         width="400">
-            <icon
-             follows="top|right"
-             height="18"
-             image_name="Lock"
-             layout="topleft"
-             left="315"
-             mouse_opaque="true"
-             name="square"
-             top="4"
-             width="18" />
-            <icon
-             height="16"
-	     top="10"
-	     left="10"
-             layout="topleft"
-             mouse_opaque="true"
-             width="16" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Create New Shape"
-             label_selected="Create New Shape"
-             layout="topleft"
-             left="10"
-             name="Create New"
-             top="104"
-             width="160" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Body"
-             label_selected="Body"
-             layout="topleft"
-             left="10"
-             name="Body"
-             top="63"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Head"
-             label_selected="Head"
-             layout="topleft"
-             left_delta="0"
-             name="Head"
-             top_pad="4"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Eyes"
-             label_selected="Eyes"
-             layout="topleft"
-             left_delta="0"
-             name="Eyes"
-             top_pad="4"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Ears"
-             label_selected="Ears"
-             layout="topleft"
-             left_delta="0"
-             name="Ears"
-             top_pad="4"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Nose"
-             label_selected="Nose"
-             layout="topleft"
-             left_delta="0"
-             name="Nose"
-             top_pad="4"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Mouth"
-             label_selected="Mouth"
-             layout="topleft"
-             left_delta="0"
-             name="Mouth"
-             top_pad="4"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Chin"
-             label_selected="Chin"
-             layout="topleft"
-             left_delta="0"
-             name="Chin"
-             top_pad="4"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Torso"
-             label_selected="Torso"
-             layout="topleft"
-             left_delta="0"
-             name="Torso"
-             top_pad="4"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Legs"
-             label_selected="Legs"
-             layout="topleft"
-             left_delta="0"
-             name="Legs"
-             top_pad="4"
-             width="82" />
-            <radio_group
-             control_name="AvatarSex"
-             height="34"
-             layout="topleft"
-             name="sex radio"
-	     top_pad="10"
-             width="82">
-                <radio_item
-                 height="16"
-                 label="Female"
-                 layout="topleft"
-                 name="radio"
-                 value="0"
-                 width="82" />
-                <radio_item
-                 height="16"
-                 label="Male"
-                 layout="topleft"
-                 name="radio2"
-                 value="1"
-                 width="82" />
-            </radio_group>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title"
-             top="10"
-             width="355">
-                [DESC]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_no_modify"
-             top="10"
-             width="355">
-                [DESC]: cannot modify
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_loading"
-             top="10"
-             width="355">
-                [DESC]: loading...
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_not_worn"
-             top="10"
-             width="355">
-                [DESC]: not worn
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top"
-             height="16"
-             layout="topleft"
-             left="10"
-             name="path"
-             top="36"
-             width="373">
-                Located in [PATH]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="not worn instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                Put on a new shape by dragging one from your inventory to your avatar. Alternately, you create a new one from scratch and wear it.
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="no modify instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                You do not have permission to modify this wearable.
-            </text>
-            <text
-             type="string"
-             length="1"
-             top="488"
-             follows="left|top"
-             font="SansSerif"
-             halign="right"
-             height="23"
-             layout="topleft"
-             left="10"
-             name="Item Action Label"
-             width="130">
-                Shape:
-            </text>
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save"
-             label_selected="Save"
-             layout="topleft"
-             name="Save"
-             left_pad="2"
-             top="477"
-             width="82" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save As..."
-             label_selected="Save As..."
-             layout="topleft"
-             name="Save As"
-             top="477"
-             left_pad="3"
-             width="115" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Revert"
-             label_selected="Revert"
-             layout="topleft"
-             left_pad="3"
-             name="Revert"
-             top="477"
-             width="120" />
-        </panel>
-        <panel
-         border="false"
- background_visible="true"
- bg_alpha_color="DkGray2"
-         follows="left|top|right|bottom"
-         height="508"
-         label="Skin"
-         layout="topleft"
-         name="Skin"
-         help_topic="customize_skin_tab"
-         width="400">
-            <icon
-             follows="top|right"
-             height="18"
-             image_name="Lock"
-             layout="topleft"
-             left="315"
-             mouse_opaque="true"
-             name="square"
-             top="4"
-             width="18" />
-            <icon
-             height="16"
-	     top="10"
-	     left="10"
-             layout="topleft"
-             mouse_opaque="true"
-             width="16" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Create New Skin"
-             label_selected="Create New Skin"
-             layout="topleft"
-             left_delta="0"
-             name="Create New"
-             top_delta="-249"
-             width="160" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Skin Color"
-             label_selected="Skin Color"
-             layout="topleft"
-             left="10"
-             name="Skin Color"
-             top="63"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Face Detail"
-             label_selected="Face Detail"
-             layout="topleft"
-             left_delta="0"
-             name="Face Detail"
-             top_pad="4"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Makeup"
-             label_selected="Makeup"
-             layout="topleft"
-             left_delta="0"
-             name="Makeup"
-             top_pad="4"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Body Detail"
-             label_selected="Body Detail"
-             layout="topleft"
-             left_delta="0"
-             name="Body Detail"
-             top_pad="4"
-             width="82" />
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title"
-             top="10"
-             width="355">
-                [DESC]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_no_modify"
-             top="10"
-             width="355">
-                [DESC]: cannot modify
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_loading"
-             top="10"
-             width="355">
-                [DESC]: loading...
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_not_worn"
-             top="10"
-             width="355">
-                [DESC]: not worn
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="14"
-             layout="topleft"
-             left="10"
-             name="path"
-             top="36"
-             width="373">
-                Located in [PATH]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="not worn instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                Put on a new skin by dragging one from your inventory to your avatar. Alternately, you create a new one from scratch and wear it.
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="no modify instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                You do not have permission to modify this wearable.
-            </text>
-            <texture_picker
-             allow_no_texture="true"
-             can_apply_immediately="true"
-             default_image_name="Default"
-             follows="left|top"
-             height="108"
-             label="Head Tattoos"
-             layout="topleft"
-             left="10"
-             name="Head Tattoos"
-             tool_tip="Click to choose a picture"
-             top="176"
-             width="82" />
-            <texture_picker
-             allow_no_texture="true"
-             can_apply_immediately="true"
-             default_image_name="Default"
-             follows="left|top"
-             height="108"
-             label="Upper Tattoos"
-             layout="topleft"
-             left_delta="0"
-             name="Upper Tattoos"
-             tool_tip="Click to choose a picture"
-             top_delta="102"
-             width="82" />
-            <texture_picker
-             allow_no_texture="true"
-             can_apply_immediately="true"
-             default_image_name="Default"
-             follows="left|top"
-             height="108"
-             label="Lower Tattoos"
-             layout="topleft"
-             left_delta="0"
-             name="Lower Tattoos"
-             tool_tip="Click to choose a picture"
-             top_delta="102"
-             width="82" />
-            <text
-             type="string"
-             length="1"
-             top="488"
-             follows="left|top"
-             font="SansSerif"
-             halign="right"
-             height="23"
-             layout="topleft"
-             left="10"
-             name="Item Action Label"
-             width="130">
-                Skin:
-            </text>
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save"
-             label_selected="Save"
-             layout="topleft"
-             left_pad="2"
-             name="Save"
-             top="477"
-             width="82" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save As..."
-             label_selected="Save As..."
-             layout="topleft"
-             left_pad="3"
-             name="Save As"
-             top="477"
-             width="115" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Revert"
-             label_selected="Revert"
-             layout="topleft"
-             left_pad="3"
-             name="Revert"
-             top="477"
-             width="120" />
-        </panel>
-        <panel
-         border="false"
- background_visible="true"
- bg_alpha_color="DkGray2"
-         follows="left|top|right|bottom"
-         height="508"
-         label="Hair"
-         layout="topleft"
-         name="Hair"
-         help_topic="customize_hair_tab"
-         width="400">
-            <icon
-             follows="top|right"
-             height="18"
-             image_name="Lock"
-             layout="topleft"
-             left="315"
-             mouse_opaque="true"
-             name="square"
-             top="4"
-             width="18" />
-            <icon
-             height="16"
-	     top="10"
-	     left="10"
-             layout="topleft"
-             mouse_opaque="true"
-             width="16" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Color"
-             label_selected="Color"
-             layout="topleft"
-             left="10"
-             name="Color"
-             top="63"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Style"
-             label_selected="Style"
-             layout="topleft"
-             left_delta="0"
-             name="Style"
-             top_pad="4"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Eyebrows"
-             label_selected="Eyebrows"
-             layout="topleft"
-             name="Eyebrows"
-             top_pad="4"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Facial"
-             label_selected="Facial"
-             layout="topleft"
-             name="Facial"
-             top_pad="4"
-             width="82" />
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title"
-             top="10"
-             width="355">
-                [DESC]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_no_modify"
-             top="10"
-             width="355">
-                [DESC]: cannot modify
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_loading"
-             top="10"
-             width="355">
-                [DESC]: loading...
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_not_worn"
-             top="10"
-             width="355">
-                [DESC]: not worn
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="14"
-             layout="topleft"
-             left="10"
-             name="path"
-             top="36"
-             width="373">
-                Located in [PATH]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="not worn instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                Put on a new hair by dragging one from your inventory to your avatar. Alternately, you create a new one from scratch and wear it.
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="no modify instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                You do not have permission to modify this wearable.
-            </text>
-            <texture_picker
-             can_apply_immediately="true"
-             default_image_name="Default"
-             follows="left|top"
-             height="108"
-             label="Texture"
-             layout="topleft"
-             left="10"
-             name="Texture"
-             tool_tip="Click to choose a picture"
-             top="176"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Create New Hair"
-             label_selected="Create New Hair"
-             layout="topleft"
-             left_delta="0"
-             name="Create New"
-             top_delta="-89"
-             width="160" />
-            <text
-             type="string"
-             length="1"
-             top="488"
-             follows="left|top"
-             font="SansSerif"
-             halign="right"
-             height="23"
-             layout="topleft"
-             name="Item Action Label"
-             left="10"
-             width="130">
-                Hair:
-            </text>
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save"
-             label_selected="Save"
-             layout="topleft"
-             left_pad="2"
-             name="Save"
-             top="477"
-             width="82" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save As..."
-             label_selected="Save As..."
-             layout="topleft"
-             left_pad="3"
-             name="Save As"
-             top="477"
-             width="115" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Revert"
-             label_selected="Revert"
-             layout="topleft"
-             left_pad="3"
-             name="Revert"
-             top="477"
-             width="120" />
-        </panel>
-        <panel
-         border="false"
- background_visible="true"
- bg_alpha_color="DkGray2"
-         follows="left|top|right|bottom"
-         height="508"
-         label="Eyes"
-         layout="topleft"
-         name="Eyes"
-         help_topic="customize_eyes_tab"
-         width="400">
-            <icon
-             follows="top|right"
-             height="18"
-             image_name="Lock"
-             layout="topleft"
-             left="315"
-             mouse_opaque="true"
-             name="square"
-             top="4"
-             width="18" />
-            <icon
-             height="16"
-	     top="10"
-	     left="10"
-             layout="topleft"
-             mouse_opaque="true"
-             width="16" />
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title"
-             top="10"
-             width="355">
-                [DESC]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_no_modify"
-             top="10"
-             width="355">
-                [DESC]: cannot modify
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_loading"
-             top="10"
-             width="355">
-                [DESC]: loading...
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_not_worn"
-             top="10"
-             width="355">
-                [DESC]: not worn
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top"
-             height="16"
-             layout="topleft"
-             left="10"
-             name="path"
-             top="36"
-             width="373">
-                Located in [PATH]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="not worn instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                Put on a new set of eyes by dragging one from your inventory to your avatar. Alternately, you create a new one from scratch and wear it.
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="no modify instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                You do not have permission to modify this wearable.
-            </text>
-            <texture_picker
-             can_apply_immediately="true"
-             default_image_name="Default"
-             follows="left|top"
-             height="108"
-             label="Iris"
-             layout="topleft"
-             left="10"
-             name="Iris"
-             tool_tip="Click to choose a picture"
-             top="66"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Create New Eyes"
-             label_selected="Create New Eyes"
-             layout="topleft"
-             name="Create New"
-             top="66"
-             width="160" />
-            <text
-             type="string"
-             length="1"
-             bottom="4"
-             follows="left|bottom"
-             font="SansSerif"
-             halign="right"
-             height="23"
-             layout="bottomleft"
-             name="Item Action Label"
-             left="10"
-             width="130">
-                Eyes:
-            </text>
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save"
-             label_selected="Save"
-             layout="topleft"
-             left_pad="2"
-             name="Save"
-             top="477"
-             width="82" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save As..."
-             label_selected="Save As..."
-             layout="topleft"
-             left_pad="3"
-             name="Save As"
-             top="477"
-             width="115" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Revert"
-             label_selected="Revert"
-             layout="topleft"
-             left_pad="3"
-             name="Revert"
-             top="477"
-             width="120" />
-        </panel>
-            <text
-             type="string"
-             length="1"
-             follows="left|top"
-             height="16"
-             layout="topleft"
-             left="5"
-             name="clothes_placeholder"
-	     font="SansSerifSmallBold"
-             top="125"
-             width="100">
-                Clothes
-            </text>
-	    <placeholder />
-        <panel
-         border="false"
- background_visible="true"
- bg_alpha_color="DkGray2"
-         follows="left|top|right|bottom"
-         height="508"
-         label="Shirt"
-         layout="topleft"
-         name="Shirt"
-         help_topic="customize_shirt_tab"
-         top_delta="0"
-         width="400">
-            <icon
-             follows="top|left"
-             height="18"
-             image_name="Lock"
-             layout="topleft"
-             left="10"
-             mouse_opaque="true"
-             name="square"
-             top="10"
-             width="18" />
-            <icon
-             height="16"
-	     top="10"
-	     left="10"
-             layout="topleft"
-             mouse_opaque="true"
-             width="16" />
-            <texture_picker
-             can_apply_immediately="true"
-             default_image_name="Default"
-             follows="left|top"
-             height="108"
-             label="Fabric"
-             layout="topleft"
-             left="10"
-             name="Fabric"
-             tool_tip="Click to choose a picture"
-             top="66"
-             width="82" />
-            <color_swatch
-             can_apply_immediately="true"
-             follows="left|top"
-             height="108"
-             label="Color/Tint"
-             layout="topleft"
-             name="Color/Tint"
-             tool_tip="Click to open color picker"
-             top_delta="102"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Take Off"
-             label_selected="Take Off"
-             layout="topleft"
-             name="Take Off"
-             top_pad="4"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Create New Shirt"
-             label_selected="Create New Shirt"
-             layout="topleft"
-             name="Create New"
-             top="66"
-             width="160" />
-            <text
-             type="string"
-             length="1"
-             bottom="4"
-             follows="left|bottom"
-             font="SansSerif"
-             halign="right"
-             height="23"
-             layout="bottomleft"
-             name="Item Action Label"
-             left="10"
-             width="130">
-                Shirt:
-            </text>
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save"
-             label_selected="Save"
-             layout="topleft"
-             left_pad="2"
-             name="Save"
-             top="477"
-             width="82" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save As..."
-             label_selected="Save As..."
-             layout="topleft"
-             left_pad="3"
-             name="Save As"
-             top="477"
-             width="115" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Revert"
-             label_selected="Revert"
-             layout="topleft"
-             left_pad="3"
-             name="Revert"
-             top="477"
-             width="120" />
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title"
-             top="10"
-             width="355">
-                [DESC]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_no_modify"
-             top="10"
-             width="355">
-                [DESC]: cannot modify
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_loading"
-             top="10"
-             width="355">
-                [DESC]: loading...
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_not_worn"
-             top="10"
-             width="355">
-                [DESC]: not worn
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top"
-             height="16"
-             layout="topleft"
-             left="10"
-             name="path"
-             top="36"
-             width="373">
-                Located in [PATH]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="not worn instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                Put on a new shirt by dragging one from your inventory to your avatar. Alternately, you create a new one from scratch and wear it.
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="no modify instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                You do not have permission to modify this wearable.
-            </text>
-        </panel>
-        <panel
-         border="false"
- background_visible="true"
- bg_alpha_color="DkGray2"
-         follows="left|top|right|bottom"
-         height="508"
-         label="Pants"
-         layout="topleft"
-         name="Pants"
-         help_topic="customize_pants_tab"
-         width="400">
-            <icon
-             follows="top|left"
-             height="18"
-             image_name="Lock"
-             layout="topleft"
-             left="10"
-             mouse_opaque="true"
-             name="square"
-             top="10"
-             width="18" />
-            <icon
-             height="16"
-             layout="topleft"
-	     left="10"
-             mouse_opaque="true"
-	     top="10"
-             width="16" />
-            <texture_picker
-             can_apply_immediately="true"
-             default_image_name="Default"
-             follows="left|top"
-             height="108"
-             label="Fabric"
-             layout="topleft"
-             left="10"
-             name="Fabric"
-             tool_tip="Click to choose a picture"
-             top="66"
-             width="82" />
-            <color_swatch
-             can_apply_immediately="true"
-             follows="left|top"
-             height="108"
-             label="Color/Tint"
-             layout="topleft"
-             name="Color/Tint"
-             tool_tip="Click to open color picker"
-             top_delta="102"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Take Off"
-             label_selected="Take Off"
-             layout="topleft"
-             name="Take Off"
-             top_pad="4"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Create New Pants"
-             label_selected="Create New Pants"
-             layout="topleft"
-             name="Create New"
-             top="66"
-             width="160" />
-            <text
-             type="string"
-             length="1"
-             bottom="4"
-             follows="left|bottom"
-             font="SansSerif"
-             halign="right"
-             height="23"
-             layout="bottomleft"
-             name="Item Action Label"
-             left="10"
-             width="130">
-                Pants:
-            </text>
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save"
-             label_selected="Save"
-             layout="topleft"
-             left_pad="2"
-             name="Save"
-             top="477"
-             width="82" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save As..."
-             label_selected="Save As..."
-             layout="topleft"
-             left_pad="3"
-             name="Save As"
-             top="477"
-             width="115" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Revert"
-             label_selected="Revert"
-             layout="topleft"
-             left_pad="3"
-             name="Revert"
-             top="477"
-             width="120" />
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title"
-             top="10"
-             width="355">
-                [DESC]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_no_modify"
-             top="10"
-             width="355">
-                [DESC]: cannot modify
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_loading"
-             top="10"
-             width="355">
-                [DESC]: loading...
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_not_worn"
-             top="10"
-             width="355">
-                [DESC]: not worn
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="14"
-             layout="topleft"
-             left="10"
-             name="path"
-             top="36"
-             width="373">
-                Located in [PATH]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="not worn instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                Put on new pants by dragging one from your inventory to your avatar. Alternately, you create a new one from scratch and wear it.
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="no modify instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                You do not have permission to modify this wearable.
-            </text>
-        </panel>
-        <panel
-         border="false"
- background_visible="true"
- bg_alpha_color="DkGray2"
-         follows="left|top|right|bottom"
-         height="508"
-         label="Shoes"
-         layout="topleft"
-         name="Shoes"
-         help_topic="customize_shoes_tab"
-         width="400">
-            <icon
-             follows="top|left"
-             height="18"
-             image_name="Lock"
-             layout="topleft"
-             left="10"
-             mouse_opaque="true"
-             name="square"
-             top="10"
-             width="18" />
-            <icon
-             height="16"
-             layout="topleft"
-	     left="10"
-             mouse_opaque="true"
-	     top="10"
-             width="16" />
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title"
-             top="10"
-             width="355">
-                [DESC]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_no_modify"
-             top="10"
-             width="355">
-                [DESC]: cannot modify
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_loading"
-             top="10"
-             width="355">
-                [DESC]: loading...
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_not_worn"
-             top="10"
-             width="355">
-                [DESC]: not worn
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="14"
-             layout="topleft"
-             left="10"
-             name="path"
-             top="36"
-             width="373">
-                Located in [PATH]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="not worn instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                Put on a new pair of shoes by dragging one from your inventory to your avatar. Alternately, you create a new one from scratch and wear it.
-            </text>
-            <button
-             follows="left|top"
-             height="23"
-             label="Create New Shoes"
-             label_selected="Create New Shoes"
-             layout="topleft"
-             name="Create New"
-             top_pad="18"
-             width="160" />
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="no modify instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                You do not have permission to modify this wearable.
-            </text>
-            <texture_picker
-             can_apply_immediately="true"
-             default_image_name="Default"
-             follows="left|top"
-             height="108"
-             label="Fabric"
-             layout="topleft"
-             left="10"
-             name="Fabric"
-             tool_tip="Click to choose a picture"
-             top="66"
-             width="82" />
-            <color_swatch
-             can_apply_immediately="true"
-             follows="left|top"
-             height="108"
-             label="Color/Tint"
-             layout="topleft"
-             name="Color/Tint"
-             tool_tip="Click to open color picker"
-             top_delta="102"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Take Off"
-             label_selected="Take Off"
-             layout="topleft"
-             name="Take Off"
-             top_pad="4"
-             width="82" />
-            <text
-             type="string"
-             length="1"
-             bottom="4"
-             follows="left|bottom"
-             font="SansSerif"
-             halign="right"
-             height="23"
-             layout="bottomleft"
-             left="10"
-             name="Item Action Label"
-             width="130">
-                Shoes:
-            </text>
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save"
-             label_selected="Save"
-             layout="topleft"
-             left_pad="2"
-             name="Save"
-             top="477"
-             width="82" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save As..."
-             label_selected="Save As..."
-             layout="topleft"
-             left_pad="3"
-             name="Save As"
-             top="477"
-             width="115" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Revert"
-             label_selected="Revert"
-             layout="topleft"
-             left_pad="3"
-             name="Revert"
-             top="477"
-             width="120" />
-        </panel>
-        <panel
-         border="false"
- background_visible="true"
- bg_alpha_color="DkGray2"
-         follows="left|top|right|bottom"
-         height="508"
-         label="Socks"
-         layout="topleft"
-         name="Socks"
-         help_topic="customize_socks_tab"
-         width="400">
-            <icon
-             follows="top|left"
-             height="18"
-             image_name="Lock"
-             layout="topleft"
-             left="10"
-             mouse_opaque="true"
-             name="square"
-             top="10"
-             width="18" />
-            <icon
-             height="16"
-             layout="topleft"
-	     left="10"
-             mouse_opaque="true"
-	     top="10"
-             width="16" />
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title"
-             top="10"
-             width="355">
-                [DESC]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_no_modify"
-             top="10"
-             width="355">
-                [DESC]: cannot modify
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_loading"
-             top="10"
-             width="355">
-                [DESC]: loading...
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_not_worn"
-             top="10"
-             width="355">
-                [DESC]: not worn
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="14"
-             layout="topleft"
-             left="10"
-             name="path"
-             top="36"
-             width="373">
-                Located in [PATH]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="not worn instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                Put on new socks by dragging one from your inventory to your avatar. Alternately, you create a new one from scratch and wear it.
-            </text>
-            <button
-             follows="left|top"
-             height="23"
-             label="Create New Socks"
-             label_selected="Create New Socks"
-             layout="topleft"
-             name="Create New"
-             top_pad="7"
-             width="160" />
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="no modify instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                You do not have permission to modify this wearable.
-            </text>
-            <texture_picker
-             can_apply_immediately="true"
-             default_image_name="Default"
-             follows="left|top"
-             height="108"
-             label="Fabric"
-             layout="topleft"
-             left="10"
-             name="Fabric"
-             tool_tip="Click to choose a picture"
-             top="66"
-             width="82" />
-            <color_swatch
-             can_apply_immediately="true"
-             follows="left|top"
-             height="108"
-             label="Color/Tint"
-             layout="topleft"
-             name="Color/Tint"
-             tool_tip="Click to open color picker"
-             top_delta="102"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Take Off"
-             label_selected="Take Off"
-             layout="topleft"
-             name="Take Off"
-             top_pad="4"
-             width="82" />
-            <text
-             type="string"
-             length="1"
-             bottom="4"
-             follows="left|bottom"
-             font="SansSerif"
-             halign="right"
-             height="23"
-             layout="bottomleft"
-             left="10"
-             name="Item Action Label"
-             width="130">
-                Socks:
-            </text>
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save"
-             label_selected="Save"
-             layout="topleft"
-             left_pad="2"
-             name="Save"
-             top="477"
-             width="82" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save As..."
-             label_selected="Save As..."
-             layout="topleft"
-             left_pad="3"
-             name="Save As"
-             top="477"
-             width="115" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Revert"
-             label_selected="Revert"
-             layout="topleft"
-             left_pad="3"
-             name="Revert"
-             top="477"
-             width="120" />
-        </panel>
-        <panel
-         border="false"
- background_visible="true"
- bg_alpha_color="DkGray2"
-         follows="left|top|right|bottom"
-         height="508"
-         label="Jacket"
-         layout="topleft"
-         name="Jacket"
-         help_topic="customize_jacket_tab"
-         width="400">
-            <icon
-             follows="top|left"
-             height="18"
-             image_name="Lock"
-             layout="topleft"
-             left="10"
-             mouse_opaque="true"
-             name="square"
-             top="10"
-             width="18" />
-            <icon
-             height="16"
-             layout="topleft"
-	     left="10"
-             mouse_opaque="true"
-	     top="10"
-             width="16" />
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title"
-             top="10"
-             width="355">
-                [DESC]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_no_modify"
-             top="10"
-             width="355">
-                [DESC]: cannot modify
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_loading"
-             top="10"
-             width="355">
-                [DESC]: loading...
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_not_worn"
-             top="10"
-             width="355">
-                [DESC]: not worn
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="14"
-             layout="topleft"
-             left="10"
-             name="path"
-             top="36"
-             width="373">
-                Located in [PATH]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="not worn instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                Put on a new jacket by dragging one from your inventory to your avatar. Alternately, you create a new one from scratch and wear it.
-            </text>
-            <button
-             follows="left|top"
-             height="23"
-             label="Create New Jacket"
-             label_selected="Create New Jacket"
-             layout="topleft"
-             name="Create New"
-             top_pad="7"
-             width="160" />
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="no modify instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                You do not have permission to modify this wearable.
-            </text>
-            <texture_picker
-             can_apply_immediately="true"
-             default_image_name="Default"
-             follows="left|top"
-             height="108"
-             label="Upper Fabric"
-             layout="topleft"
-             left="10"
-             name="Upper Fabric"
-             tool_tip="Click to choose a picture"
-             top="66"
-             width="82" />
-            <texture_picker
-             can_apply_immediately="true"
-             default_image_name="Default"
-             follows="left|top"
-             height="108"
-             label="Lower Fabric"
-             layout="topleft"
-             name="Lower Fabric"
-             tool_tip="Click to choose a picture"
-             top_delta="102"
-             width="82" />
-            <color_swatch
-             can_apply_immediately="true"
-             follows="left|top"
-             height="108"
-             label="Color/Tint"
-             layout="topleft"
-             name="Color/Tint"
-             tool_tip="Click to open color picker"
-             top_delta="102"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Take Off"
-             label_selected="Take Off"
-             layout="topleft"
-             name="Take Off"
-             top_pad="4"
-             width="82" />
-            <text
-             type="string"
-             length="1"
-             bottom="4"
-             follows="left|bottom"
-             font="SansSerif"
-             halign="right"
-             height="23"
-             layout="bottomleft"
-             left="10"
-             name="Item Action Label"
-             width="130">
-                Jacket:
-            </text>
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save"
-             label_selected="Save"
-             layout="topleft"
-             left_pad="2"
-             name="Save"
-             top="477"
-             width="82" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save As..."
-             label_selected="Save As..."
-             layout="topleft"
-             left_pad="3"
-             name="Save As"
-             top="477"
-             width="115" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Revert"
-             label_selected="Revert"
-             layout="topleft"
-             left_pad="3"
-             name="Revert"
-             top="477"
-             width="120" />
-        </panel>
-        <panel
-         border="false"
- background_visible="true"
- bg_alpha_color="DkGray2"
-         follows="left|top|right|bottom"
-         height="508"
-         label="Gloves"
-         layout="topleft"
-         name="Gloves"
-         help_topic="customize_gloves_tab"
-         width="400">
-            <icon
-             follows="top|left"
-             height="18"
-             image_name="Lock"
-             layout="topleft"
-             left="10"
-             mouse_opaque="true"
-             name="square"
-             top="10"
-             width="18" />
-            <icon
-             height="16"
-             layout="topleft"
-	     left="10"
-             mouse_opaque="true"
-	     top="10"
-             width="16" />
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title"
-             top="10"
-             width="355">
-                [DESC]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_no_modify"
-             top="10"
-             width="355">
-                [DESC]: cannot modify
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_loading"
-             top="10"
-             width="355">
-                [DESC]: loading...
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_not_worn"
-             top="10"
-             width="355">
-                [DESC]: not worn
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="14"
-             layout="topleft"
-             left="10"
-             name="path"
-             top="36"
-             width="373">
-                Located in [PATH]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="not worn instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                Put on new gloves by dragging one from your inventory to your avatar. Alternately, you create a new one from scratch and wear it.
-            </text>
-            <button
-             follows="left|top"
-             height="23"
-             label="Create New Gloves"
-             label_selected="Create New Gloves"
-             layout="topleft"
-             name="Create New"
-             top_pad="7"
-             width="160" />
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="no modify instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                You do not have permission to modify this wearable.
-            </text>
-            <texture_picker
-             can_apply_immediately="true"
-             default_image_name="Default"
-             follows="left|top"
-             height="108"
-             label="Fabric"
-             layout="topleft"
-             left="10"
-             name="Fabric"
-             tool_tip="Click to choose a picture"
-             top="66"
-             width="82" />
-            <color_swatch
-             can_apply_immediately="true"
-             follows="left|top"
-             height="108"
-             label="Color/Tint"
-             layout="topleft"
-             name="Color/Tint"
-             tool_tip="Click to open color picker"
-             top_delta="102"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Take Off"
-             label_selected="Take Off"
-             layout="topleft"
-             name="Take Off"
-             top_pad="4"
-             width="82" />
-            <text
-             type="string"
-             length="1"
-             bottom="4"
-             follows="left|bottom"
-             font="SansSerif"
-             halign="right"
-             height="23"
-             layout="bottomleft"
-             left="10"
-             name="Item Action Label"
-             width="130">
-                Gloves:
-            </text>
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save"
-             label_selected="Save"
-             layout="topleft"
-             left_pad="2"
-             name="Save"
-             top="477"
-             width="82" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save As..."
-             label_selected="Save As..."
-             layout="topleft"
-             left_pad="3"
-             name="Save As"
-             top="477"
-             width="115" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Revert"
-             label_selected="Revert"
-             layout="topleft"
-             left_pad="3"
-             name="Revert"
-             top="477"
-             width="120" />
-        </panel>
-        <panel
-         border="false"
- background_visible="true"
- bg_alpha_color="DkGray2"
-         follows="left|top|right|bottom"
-         height="508"
-         label="Undershirt"
-         layout="topleft"
-         name="Undershirt"
-         help_topic="customize_undershirt_tab"
-         width="400">
-            <icon
-             follows="top|left"
-             height="18"
-             image_name="Lock"
-             layout="topleft"
-             left="10"
-             mouse_opaque="true"
-             name="square"
-             top="10"
-             width="18" />
-            <icon
-             height="16"
-             layout="topleft"
-	     left="10"
-             mouse_opaque="true"
-	     top="10"
-             width="16" />
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title"
-             top="10"
-             width="355">
-                [DESC]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_no_modify"
-             top="10"
-             width="355">
-                [DESC]: cannot modify
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_loading"
-             top="10"
-             width="355">
-                [DESC]: loading...
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_not_worn"
-             top="10"
-             width="355">
-                [DESC]: not worn
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="14"
-             layout="topleft"
-             left="10"
-             name="path"
-             top="36"
-             width="373">
-                Located in [PATH]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="not worn instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                Put on a new undershirt by dragging one from your inventory to your avatar. Alternately, you create a new one from scratch and wear it.
-            </text>
-            <button
-             follows="left|top"
-             height="23"
-             label="Create New Undershirt"
-             label_selected="Create New Undershirt"
-             layout="topleft"
-             name="Create New"
-             top_pad="7"
-             width="160" />
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="no modify instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                You do not have permission to modify this wearable.
-            </text>
-            <texture_picker
-             can_apply_immediately="true"
-             default_image_name="Default"
-             follows="left|top"
-             height="108"
-             label="Fabric"
-             layout="topleft"
-             left="10"
-             name="Fabric"
-             tool_tip="Click to choose a picture"
-             top="66"
-             width="82" />
-            <color_swatch
-             can_apply_immediately="true"
-             follows="left|top"
-             height="108"
-             label="Color/Tint"
-             layout="topleft"
-             name="Color/Tint"
-             tool_tip="Click to open color picker"
-             top_delta="102"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Take Off"
-             label_selected="Take Off"
-             layout="topleft"
-             name="Take Off"
-             top_pad="4"
-             width="82" />
-            <text
-             type="string"
-             length="1"
-             bottom="4"
-             follows="left|bottom"
-             font="SansSerif"
-             halign="right"
-             height="23"
-             layout="bottomleft"
-             left="10"
-             name="Item Action Label"
-             width="130">
-                Undershirt:
-            </text>
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save"
-             label_selected="Save"
-             layout="topleft"
-             left_pad="2"
-             name="Save"
-             top="477"
-             width="82" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save As..."
-             label_selected="Save As..."
-             layout="topleft"
-             left_pad="3"
-             name="Save As"
-             top="477"
-             width="115" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Revert"
-             label_selected="Revert"
-             layout="topleft"
-             left_pad="3"
-             name="Revert"
-             top="477"
-             width="120" />
-        </panel>
-        <panel
-         border="false"
- background_visible="true"
- bg_alpha_color="DkGray2"
-         follows="left|top|right|bottom"
-         height="508"
-         label="Underpants"
-         layout="topleft"
-         name="Underpants"
-         help_topic="customize_underpants_tab"
-         width="400">
-            <icon
-             follows="top|left"
-             height="18"
-             image_name="Lock"
-             layout="topleft"
-             left="10"
-             mouse_opaque="true"
-             name="square"
-             top="10"
-             width="18" />
-            <icon
-             height="16"
-             layout="topleft"
-	     left="10"
-             mouse_opaque="true"
-	     top="10"
-             width="16" />
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title"
-             top="10"
-             width="355">
-                [DESC]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_no_modify"
-             top="10"
-             width="355">
-                [DESC]: cannot modify
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_loading"
-             top="10"
-             width="355">
-                [DESC]: loading...
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_not_worn"
-             top="10"
-             width="355">
-                [DESC]: not worn
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="14"
-             layout="topleft"
-             left="10"
-             name="path"
-             top="36"
-             width="373">
-                Located in [PATH]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="not worn instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                Put on new underpants by dragging one from your inventory to your avatar. Alternately, you create a new one from scratch and wear it.
-            </text>
-            <button
-             follows="left|top"
-             height="23"
-             label="Create New Underpants"
-             label_selected="Create New Underpants"
-             layout="topleft"
-             name="Create New"
-             top_pad="7"
-             width="160" />
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="no modify instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                You do not have permission to modify this wearable.
-            </text>
-            <texture_picker
-             can_apply_immediately="true"
-             default_image_name="Default"
-             follows="left|top"
-             height="108"
-             label="Fabric"
-             layout="topleft"
-             left="10"
-             name="Fabric"
-             tool_tip="Click to choose a picture"
-             top="66"
-             width="82" />
-            <color_swatch
-             can_apply_immediately="true"
-             follows="left|top"
-             height="108"
-             label="Color/Tint"
-             layout="topleft"
-             name="Color/Tint"
-             tool_tip="Click to open color picker"
-             top_delta="102"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Take Off"
-             label_selected="Take Off"
-             layout="topleft"
-             name="Take Off"
-             top_pad="4"
-             width="82" />
-            <text
-             type="string"
-             length="1"
-             bottom="4"
-             follows="left|bottom"
-             font="SansSerif"
-             halign="right"
-             height="23"
-             layout="bottomleft"
-             left="10"
-             name="Item Action Label"
-             width="130">
-                Underpants:
-            </text>
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save"
-             label_selected="Save"
-             layout="topleft"
-             left_pad="2"
-             name="Save"
-             top="477"
-             width="82" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save As..."
-             label_selected="Save As..."
-             layout="topleft"
-             left_pad="3"
-             name="Save As"
-             top="477"
-             width="115" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Revert"
-             label_selected="Revert"
-             layout="topleft"
-             left_pad="3"
-             name="Revert"
-             top="477"
-             width="120" />
-        </panel>
-        <panel
-         border="false"
- background_visible="true"
- bg_alpha_color="DkGray2"
-         follows="left|top|right|bottom"
-         height="508"
-         label="Skirt"
-         layout="topleft"
-         name="Skirt"
-         help_topic="customize_skirt_tab"
-         width="400">
-            <icon
-             follows="top|left"
-             height="18"
-             image_name="Lock"
-             layout="topleft"
-             left="10"
-             mouse_opaque="true"
-             name="square"
-             top="10"
-             width="18" />
-            <icon
-             height="16"
-             layout="topleft"
-	     left="10"
-             mouse_opaque="true"
-	     top="10"
-             width="16" />
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title"
-             top="10"
-             width="355">
-                [DESC]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_no_modify"
-             top="10"
-             width="355">
-                [DESC]: cannot modify
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_loading"
-             top="10"
-             width="355">
-                [DESC]: loading...
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_not_worn"
-             top="10"
-             width="355">
-                [DESC]: not worn
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="14"
-             layout="topleft"
-             left="10"
-             name="path"
-             top="36"
-             width="373">
-                Located in [PATH]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="not worn instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                Put on a new skirt by dragging one from your inventory to your avatar. Alternately, you create a new one from scratch and wear it.
-            </text>
-            <button
-             follows="left|top"
-             height="23"
-             label="Create New Skirt"
-             label_selected="Create New Skirt"
-             layout="topleft"
-             name="Create New"
-             top_pad="7"
-             width="160" />
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="no modify instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                You do not have permission to modify this wearable.
-            </text>
-            <texture_picker
-             can_apply_immediately="true"
-             default_image_name="Default"
-             follows="left|top"
-             height="108"
-             label="Fabric"
-             layout="topleft"
-             left="10"
-             name="Fabric"
-             tool_tip="Click to choose a picture"
-             top="66"
-             width="82" />
-            <color_swatch
-             can_apply_immediately="true"
-             follows="left|top"
-             height="108"
-             label="Color/Tint"
-             layout="topleft"
-             name="Color/Tint"
-             tool_tip="Click to open color picker"
-             top_delta="102"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Take Off"
-             label_selected="Take Off"
-             layout="topleft"
-             name="Take Off"
-             top_pad="4"
-             width="82" />
-            <text
-             type="string"
-             length="1"
-             bottom="4"
-             follows="left|bottom"
-             font="SansSerif"
-             halign="right"
-             height="23"
-             layout="bottomleft"
-             left="10"
-             name="Item Action Label"
-             width="130">
-                Skirt:
-            </text>
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save"
-             label_selected="Save"
-             layout="topleft"
-             left_pad="2"
-             name="Save"
-             top="477"
-             width="82" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save As..."
-             label_selected="Save As..."
-             layout="topleft"
-             left_pad="3"
-             name="Save As"
-             top="477"
-             width="115" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Revert"
-             label_selected="Revert"
-             layout="topleft"
-             left_pad="3"
-             name="Revert"
-             top="477"
-             width="120" />
-        </panel>
-        <panel
-         border="false"
- background_visible="true"
- bg_alpha_color="DkGray2"
-         follows="left|top|right|bottom"
-         height="508"
-         label="Tattoo"
-         layout="topleft"
-         name="Tattoo"
-         help_topic="customize_tattoo_tab"
-         width="400">
-            <icon
-             follows="top|left"
-             height="18"
-             image_name="Lock"
-             layout="topleft"
-             left="10"
-             mouse_opaque="true"
-             name="square"
-             top="10"
-             width="18" />
-            <icon
-             height="16"
-             layout="topleft"
-	     left="10"
-             mouse_opaque="true"
-	     top="10"
-             width="16" />
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title"
-             top="10"
-             width="355">
-                [DESC]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_no_modify"
-             top="10"
-             width="355">
-                [DESC]: cannot modify
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_loading"
-             top="10"
-             width="355">
-                [DESC]: loading...
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_not_worn"
-             top="10"
-             width="355">
-                [DESC]: not worn
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="14"
-             layout="topleft"
-             left="10"
-             name="path"
-             top="36"
-             width="373">
-                Located in [PATH]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="not worn instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                Put on a new tattoo by dragging one from your inventory to your avatar. Alternately, you create a new one from scratch and wear it.
-            </text>
-            <button
-             follows="left|top"
-             height="23"
-             label="Create New Tattoo"
-             label_selected="Create New Tattoo"
-             layout="topleft"
-             name="Create New"
-             top_pad="7"
-             width="160" />
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="no modify instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                You do not have permission to modify this wearable.
-            </text>
-            <texture_picker
-             can_apply_immediately="true"
-             default_image_name="Default"
-             follows="left|top"
-             height="108"
-             label="Head Tattoo"
-             layout="topleft"
-             left="10"
-             name="Head Tattoo"
-             tool_tip="Click to choose a picture"
-             top="66"
-             width="82" />
-            <texture_picker
-             can_apply_immediately="true"
-             default_image_name="Default"
-             follows="left|top"
-             height="108"
-             label="Upper Tattoo"
-             layout="topleft"
-             name="Upper Tattoo"
-             tool_tip="Click to choose a picture"
-             left_delta="90"
-             width="82" />
-            <texture_picker
-             can_apply_immediately="true"
-             default_image_name="Default"
-             follows="left|top"
-             height="108"
-             label="Lower Tattoo"
-             layout="topleft"
-             name="Lower Tattoo"
-             tool_tip="Click to choose a picture"
-             left_delta="90"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Take Off"
-             label_selected="Take Off"
-             layout="topleft"
-             name="Take Off"
-             top_pad="4"
-             left="10"
-             width="82" />
-            <text
-             type="string"
-             length="1"
-             bottom="4"
-             follows="left|bottom"
-             font="SansSerif"
-             halign="right"
-             height="23"
-             layout="bottomleft"
-             left="10"
-             name="Item Action Label"
-             width="130">
-                Tattoo:
-            </text>
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save"
-             label_selected="Save"
-             layout="topleft"
-             left_pad="2"
-             name="Save"
-             top="477"
-             width="82" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save As..."
-             label_selected="Save As..."
-             layout="topleft"
-             left_pad="3"
-             name="Save As"
-             top="477"
-             width="115" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Revert"
-             label_selected="Revert"
-             layout="topleft"
-             left_pad="3"
-             name="Revert"
-             top="477"
-             width="120" />
-        </panel>
-        <panel
-         border="false"
- background_visible="true"
- bg_alpha_color="DkGray2"
-         follows="left|top|right|bottom"
-         height="508"
-         label="Alpha"
-         layout="topleft"
-         name="Alpha"
-         help_topic="customize_alpha_tab"
-         width="400">
-            <icon
-             follows="top|left"
-             height="18"
-             image_name="Lock"
-             layout="topleft"
-             left="10"
-             mouse_opaque="true"
-             name="square"
-             top="10"
-             width="18" />
-            <icon
-             height="16"
-             layout="topleft"
-	     left="10"
-             mouse_opaque="true"
-	     top="10"
-             width="16" />
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title"
-             top="10"
-             width="355">
-                [DESC]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_no_modify"
-             top="10"
-             width="355">
-                [DESC]: cannot modify
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_loading"
-             top="10"
-             width="355">
-                [DESC]: loading...
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_not_worn"
-             top="10"
-             width="355">
-                [DESC]: not worn
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="14"
-             layout="topleft"
-             left="10"
-             name="path"
-             top="36"
-             width="373">
-                Located in [PATH]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="not worn instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                Put on a new alpha mask by dragging one from your inventory to your avatar. Alternately, you create a new one from scratch and wear it.
-            </text>
-            <button
-             follows="left|top"
-             height="23"
-             label="Create New Alpha"
-             label_selected="Create New Alpha"
-             layout="topleft"
-             name="Create New"
-             top_pad="18"
-             width="160" />
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="no modify instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                You do not have permission to modify this wearable.
-            </text>
-            <texture_picker
-             can_apply_immediately="true"
-             default_image_name="Default"
-             follows="left|top"
-             height="108"
-             label="Lower Alpha"
-             layout="topleft"
-             left="10"
-             name="Lower Alpha"
-             tool_tip="Click to choose a picture"
-             top="66"
-             width="82" />
-            <texture_picker
-             can_apply_immediately="true"
-             default_image_name="Default"
-             follows="left|top"
-             height="108"
-             label="Upper Alpha"
-             layout="topleft"
-             name="Upper Alpha"
-             tool_tip="Click to choose a picture"
-             left_delta="90"
-             width="82" />
-            <texture_picker
-             can_apply_immediately="true"
-             default_image_name="Default"
-             follows="left|top"
-             height="108"
-             label="Head Alpha"
-             layout="topleft"
-             name="Head Alpha"
-             tool_tip="Click to choose a picture"
-             left_delta="90"
-             width="82" />
-            <check_box
-             control_name="LowerAlphaTextureInvisible"
-             follows="left"
-             height="16"
-             layout="topleft"
-             left="43"
-             name="lower alpha texture invisible"
-             top_delta="96"
-             width="16" />
-            <check_box
-             control_name="UpperAlphaTextureInvisible"
-             follows="left"
-             height="16"
-             layout="topleft"
-             left_pad="72"
-             name="upper alpha texture invisible"
-             width="16" />
-            <check_box
-             control_name="HeadAlphaTextureInvisible"
-             follows="left"
-             height="16"
-             layout="topleft"
-             left_pad="72"
-             name="head alpha texture invisible"
-             width="16" />
-            <texture_picker
-             can_apply_immediately="true"
-             default_image_name="Default"
-             follows="left|top"
-             height="108"
-             label="Eye Alpha"
-             layout="topleft"
-             name="Eye Alpha"
-             tool_tip="Click to choose a picture"
-             left="10"
-             top_pad="20"
-             width="82" />
-            <texture_picker
-             can_apply_immediately="true"
-             default_image_name="Default"
-             follows="left|top"
-             height="108"
-             label="Hair Alpha"
-             layout="topleft"
-             name="Hair Alpha"
-             left_delta="90"
-             tool_tip="Click to choose a picture"
-             width="82" />
-            <check_box
-             control_name="Eye AlphaTextureInvisible"
-             follows="left"
-             height="16"
-             layout="topleft"
-             left="43"
-             name="eye alpha texture invisible"
-             top_delta="96"
-             width="16" />
-            <check_box
-             control_name="HairAlphaTextureInvisible"
-             follows="left"
-             height="16"
-             layout="topleft"
-             left_pad="72"
-             name="hair alpha texture invisible"
-             width="16" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Take Off"
-             label_selected="Take Off"
-             layout="topleft"
-             name="Take Off"
-             left="10"
-             top_pad="20"
-             width="82" />
-            <text
-             type="string"
-             length="1"
-             bottom="4"
-             follows="left|bottom"
-             font="SansSerif"
-             halign="right"
-             height="23"
-             layout="bottomleft"
-             left="10"
-             name="Item Action Label"
-             width="130">
-                Alpha:
-            </text>
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save"
-             label_selected="Save"
-             layout="topleft"
-             left_pad="2"
-             name="Save"
-             top="477"
-             width="82" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save As..."
-             label_selected="Save As..."
-             layout="topleft"
-             left_pad="3"
-             name="Save As"
-             top="477"
-             width="115" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Revert"
-             label_selected="Revert"
-             layout="topleft"
-             left_pad="3"
-             name="Revert"
-             top="477"
-             width="120" />
-        </panel>
-    </tab_container>
-    <scroll_container
-     follows="left|top|right|bottom"
-     height="409"
-     layout="topleft"
-     left="247"
-     mouse_opaque="false"
-     name="panel_container"
-     top="92"
-     width="330">
-        <scrolling_panel_list
-         follows="left|bottom"
-         layout="topleft"
-         name="panel_list" />
-    </scroll_container>
-    <button
-     bottom="460"
-     follows="right|left"
-     height="23"
-     label="Script Info"
-     label_selected="Script Info"
-     layout="topleft"
-     name="script_info"
-     tool_tip="Show scripts attached to your avatar"
-     left="13"
-     width="90" ></button>
-    <button
-     bottom="574"
-     follows="right|bottom"
-     height="23"
-     label="Make Outfit"
-     label_selected="Make Outfit"
-     layout="topleft"
-     name="make_outfit_btn"
-     right="-218"
-     width="120" />
-    <button
-     bottom="574"
-     follows="right|bottom"
-     height="23"
-     label="Cancel"
-     label_selected="Cancel"
-     layout="topleft"
-     name="Cancel"
-     right="-10"
-     width="100" />
-    <button
-     bottom="574"
-     follows="right|bottom"
-     height="23"
-     label="OK"
-     label_selected="OK"
-     layout="topleft"
-     name="Ok"
-     right="-114"
-     width="100" />
-</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_device_settings.xml b/indra/newview/skins/default/xui/en/floater_device_settings.xml
deleted file mode 100644
index 91a7a678da..0000000000
--- a/indra/newview/skins/default/xui/en/floater_device_settings.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater
- legacy_header_height="18"
- height="260"
- layout="topleft"
- name="floater_device_settings"
- help_topic="floater_device_settings"
- title="VOICE CHAT DEVICE SETTINGS"
- width="405">
-    <panel
-     bottom="260"
-     filename="panel_audio_device.xml"
-     layout="topleft"
-     left="2"
-     name="device_settings"
-     right="-5"
-     top="20" />
-</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_first_time_tip.xml b/indra/newview/skins/default/xui/en/floater_first_time_tip.xml
deleted file mode 100644
index e4ac8fed77..0000000000
--- a/indra/newview/skins/default/xui/en/floater_first_time_tip.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater
- legacy_header_height="18"
- can_close="true"
- can_minimize="false"
- height="250"
- layout="topleft"
- name="set_name_in_the_cladd"
- help_topic="set_name_in_the_cladd"
- save_rect="true"
- width="300">
-    <check_box
-     height="20"
-     follows="left|bottom|right"
-     label="Turn off Quick Tips"
-     layout="topleft"
-     left="5"
-     name="DontShowFirstTimeTip_checkbox"
-     text_enabled_color="white"
-     top="225"
-     width="200" />
-</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_im.xml b/indra/newview/skins/default/xui/en/floater_im.xml
deleted file mode 100644
index 55efe83820..0000000000
--- a/indra/newview/skins/default/xui/en/floater_im.xml
+++ /dev/null
@@ -1,80 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<multi_floater
- legacy_header_height="18" 
- can_resize="true"
- follows="left|bottom"
- height="422"
- layout="topleft"
- min_height="130"
- min_width="350"
- name="im_floater"
- help_topic="im_floater"
- save_rect="true"
- title="Instant Message"
- width="419">
-    <multi_floater.string
-     name="only_user_message">
-        You are the only Resident in this session.
-    </multi_floater.string>
-    <multi_floater.string
-     name="offline_message">
-        [FIRST] [LAST] is offline.
-    </multi_floater.string>
-    <multi_floater.string
-     name="invite_message">
-        Click the [BUTTON NAME] button to accept/connect to this voice chat.
-    </multi_floater.string>
-    <multi_floater.string
-     name="muted_message">
-        You have blocked this Resident. Sending a message will automatically unblock them.
-    </multi_floater.string>
-    <multi_floater.string
-     name="generic_request_error">
-        Error making request, please try again later.
-    </multi_floater.string>
-    <multi_floater.string
-     name="insufficient_perms_error">
-        You do not have sufficient permissions.
-    </multi_floater.string>
-    <multi_floater.string
-     name="session_does_not_exist_error">
-        The session no longer exists
-    </multi_floater.string>
-    <multi_floater.string
-     name="no_ability_error">
-        You do not have that ability.
-    </multi_floater.string>
-    <multi_floater.string
-     name="not_a_mod_error">
-        You are not a session moderator.
-    </multi_floater.string>
-    <multi_floater.string
-     name="muted_error">
-        A group moderator disabled your text chat.
-    </multi_floater.string>
-    <multi_floater.string
-     name="add_session_event">
-        Unable to add Residents to chat session with [RECIPIENT].
-    </multi_floater.string>
-    <multi_floater.string
-     name="message_session_event">
-        Unable to send your message to the chat session with [RECIPIENT].
-    </multi_floater.string>
-    <multi_floater.string
-     name="removed_from_group">
-        You have been removed from the group.
-    </multi_floater.string>
-    <multi_floater.string
-     name="close_on_no_ability">
-        You no longer have the ability to be in the chat session.
-    </multi_floater.string>
-    <tab_container
-     follows="left|top|right|bottom"
-     height="406"
-     layout="topleft"
-     left="1"
-     name="Preview Tabs"
-     tab_position="bottom"
-     top="16"
-     width="417" />
-</multi_floater>
diff --git a/indra/newview/skins/default/xui/en/floater_my_friends.xml b/indra/newview/skins/default/xui/en/floater_my_friends.xml
deleted file mode 100644
index e7efcc7844..0000000000
--- a/indra/newview/skins/default/xui/en/floater_my_friends.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater
- legacy_header_height="18"
- can_close="false"
- can_resize="true"
- height="390"
- layout="topleft"
- min_height="240"
- min_width="365"
- name="floater_my_friends"
- help_topic="floater_my_friends"
- save_rect="true"
- single_instance="true"
- title="CONTACTS"
- width="395">
-    <tab_container
-     follows="all"
-     height="364"
-     layout="topleft"
-     left="4"
-     name="friends_and_groups"
-     tab_position="top"
-     tab_width="80"
-     top="20"
-     width="383">
-        <panel
-         bottom="364"
-         filename="panel_friends.xml"
-         label="Friends"
-         layout="topleft"
-         left="0"
-         help_topic="my_friends_friends_tab"
-         name="friends_panel"
-         width="370" />
-        <panel
-         bottom="364"
-         filename="panel_groups.xml"
-         label="Groups"
-         layout="topleft"
-         left="0"
-         help_topic="my_friends_groups_tab"
-         name="groups_panel"
-         width="370" />
-    </tab_container>
-</floater>
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
deleted file mode 100644
index 1d73d516d0..0000000000
--- a/indra/newview/skins/default/xui/en/floater_outfit_save_as.xml
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater
- can_close="false"
- can_minimize="false"
- height="100"
- layout="topleft"
- title="Save Outfit"
- name="modal container"
- width="240">
-    <button
-     height="23"
-     label="Save"
-     label_selected="Save"
-     layout="topleft"
-     left="20"
-     name="Save"
-     top="70"
-     width="82" />
-    <button
-     height="23"
-     label="Cancel"
-     label_selected="Cancel"
-     layout="topleft"
-     left_pad="36"
-     name="Cancel"
-     top_delta="0"
-     width="82" />
-    <text
-     type="string"
-     length="1"
-     follows="left|top"
-     height="30"
-     layout="topleft"
-     left="20"
-     word_wrap="true"
-     name="Save item as:"
-     top="10"
-     width="200">
-        Save what I'm wearing
-as a new Outfit:
-    </text>
-    <line_editor
-     type="string"
-     length="1"
-     border_style="line"
-     border_thickness="1"
-     follows="left|top"
-     height="23"
-     layout="topleft"
-     left_delta="0"
-     show_text_as_tentative="false"
-     top_pad="0"
-     max_length="63"
-     name="name ed"
-     width="200">
-        [DESC] (new)
-    </line_editor>
-</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_preview_classified.xml b/indra/newview/skins/default/xui/en/floater_preview_classified.xml
deleted file mode 100644
index 2017cf2bd1..0000000000
--- a/indra/newview/skins/default/xui/en/floater_preview_classified.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater
- legacy_header_height="18"
- auto_tile="true"
- height="510"
- layout="topleft"
- name="classified_preview"
- help_topic="classified_preview"
- save_rect="true"
- title="CLASSIFIED INFORMATION"
- width="440">
-    <floater.string
-     name="Title">
-        Classified: [NAME]
-    </floater.string>
-    <panel
-     follows="bottom|left"
-     height="470"
-     layout="topleft"
-     left="0"
-     name="classified_details_panel"
-     top="20"
-     width="440" />
-</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_preview_event.xml b/indra/newview/skins/default/xui/en/floater_preview_event.xml
deleted file mode 100644
index a4066b34c5..0000000000
--- a/indra/newview/skins/default/xui/en/floater_preview_event.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater
- legacy_header_height="18"
- auto_tile="true"
- height="510"
- layout="topleft"
- name="event_preview"
- help_topic="event_preview"
- save_rect="true"
- title="EVENT INFORMATION"
- width="440">
-    <floater.string
-     name="Title">
-        Event: [NAME]
-    </floater.string>
-    <panel
-     follows="bottom|left"
-     height="470"
-     layout="topleft"
-     left="0"
-     name="event_details_panel"
-     top="20"
-     width="440" />
-</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/en/floater_preview_gesture_info.xml
deleted file mode 100644
index 66408a5057..0000000000
--- a/indra/newview/skins/default/xui/en/floater_preview_gesture_info.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater
- legacy_header_height="18"
- can_minimize="false"
- follows="left|top"
- height="155"
- layout="topleft"
- name="Gesture"
- help_topic="gesture"
- save_rect="true"
- title="GESTURE SHORTCUT"
- width="260">
-    <scroll_list
-     follows="top|left"
-     height="110"
-     layout="topleft"
-     left="10"
-     name="library_list"
-     top="10"
-     width="240">
-        <scroll_list.rows
-         value="Animation" />
-        <scroll_list.rows
-         value="Sound" />
-        <scroll_list.rows
-         value="Chat" />
-        <scroll_list.rows
-         value="Wait" />
-    </scroll_list>
-    <!--button
-     follows="top|left"
-     height="20"
-     label="Preview"
-     layout="topleft"
-     left="20"
-     name="preview_btn"
-     top_pad="50"
-     width="80" />
-    <button
-     follows="top|left"
-     height="20"
-     label="Save"
-     layout="topleft"
-     left_pad="5"
-     name="save_btn"
-     top_delta="0"
-     width="80" />
-    <button
-     follows="top|left"
-     height="20"
-     label="Cancel (not working)"
-     layout="topleft"
-     left_pad="5"
-     name="save_btn"
-     top_delta="0"
-     width="80" /-->   
-</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_preview_gesture_shortcut.xml b/indra/newview/skins/default/xui/en/floater_preview_gesture_shortcut.xml
deleted file mode 100644
index 26252a7a16..0000000000
--- a/indra/newview/skins/default/xui/en/floater_preview_gesture_shortcut.xml
+++ /dev/null
@@ -1,88 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater
- legacy_header_height="18"
- can_minimize="false"
- follows="left|top"
- height="90"
- layout="topleft"
- name="Gesture"
- help_topic="gesture"
- save_rect="true"
- title="GESTURE SHORTCUT"
- width="260">
-      <text
-     type="string"
-     length="1"
-     follows="top|left"
-     font="SansSerifSmall"
-     height="10"
-     layout="topleft"
-     left="10"
-     name="trigger_label"
-     top_pad="10"
-     width="100">
-        Chat:
-    </text>
-    <line_editor
-     follows="left|top"
-     height="20"
-     layout="topleft"
-     left_pad="5"
-     max_length="31"
-     name="trigger_editor"
-     top_delta="-4"
-     width="135" />
-    <text
-     type="string"
-     length="1"
-     follows="top|left"
-     font="SansSerifSmall"
-     height="10"
-     layout="topleft"
-     left="10"
-     name="key_label"
-     top_pad="10"
-     width="100">
-        Keyboard:
-    </text>
-    <combo_box
-     height="20"
-     label="None"
-     layout="topleft"
-     left_pad="13"
-     name="modifier_combo"
-     top_delta="-4"
-     width="50" />
-    <combo_box
-     height="20"
-     label="None"
-     layout="topleft"
-     left_pad="5"
-     name="key_combo"
-     top_delta="0"
-     width="45" />
-    <text
-     type="string"
-     length="1"
-     follows="top|left"
-     font="SansSerifSmall"
-     height="10"
-     layout="topleft"
-     left="10"
-     name="replace_text"
-     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_pad="10"
-     width="100">
-        Replace:
-    </text>
-    <line_editor
-     follows="left|top"
-     height="20"
-     layout="topleft"
-     left_pad="5"
-     max_length="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"
-     width="135" />
-</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/en/floater_preview_gesture_steps.xml
deleted file mode 100644
index 34f707cd2a..0000000000
--- a/indra/newview/skins/default/xui/en/floater_preview_gesture_steps.xml
+++ /dev/null
@@ -1,242 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater
- legacy_header_height="18"
- can_minimize="false"
- follows="left|top"
- height="155"
- layout="topleft"
- name="Gesture"
- help_topic="gesture"
- save_rect="true"
- title="GESTURE SHORTCUT"
- width="260">
-    <scroll_list
-     follows="top|left"
-     height="110"
-     layout="topleft"
-     left="10"
-     name="step_list"
-     top_pad="10"
-     width="240" />
-    <!--text
-     type="string"
-     length="1"
-     follows="top|left"
-     font="SansSerifSmall"
-     height="60"
-     layout="topleft"
-     left="10"
-     name="help_label"
-     top_pad="10"
-     width="200">
-        All steps happen simultaneously, 
-unless you add wait steps.
-    </text-->
-    <!--text
-     follows="top|left"
-     height="60"
-     layout="topleft"
-     left="10"
-     name="options_text"
-     top_pad="10"
-     width="205" /-->
-    <!--combo_box
-     follows="top|left"
-     height="20"
-     layout="topleft"
-     left_delta="10"
-     name="animation_list"
-     top_pad="10"
-     width="100" />
-    <combo_box
-     follows="top|left"
-     height="20"
-     layout="topleft"
-     left_delta="0"
-     name="sound_list"
-     top_delta="10"
-     width="100" />
-    <line_editor
-     follows="top|left"
-     height="20"
-     layout="topleft"
-     left_delta="0"
-     max_length="127"
-     name="chat_editor"
-     top_pad="10"
-     width="100" />
-    <radio_group
-     draw_border="false"
-     follows="top|left"
-     height="40"
-     layout="topleft"
-     left_pad="8"
-     name="animation_trigger_type"
-     top_pad="10"
-     width="80">
-        <radio_item
-         height="16"
-         label="Start"
-         layout="topleft"
-         left="3"
-         name="start"
-         top="-11"
-         width="80" />
-        <radio_item
-         height="16"
-         label="Stop"
-         layout="topleft"
-         left_delta="0"
-         name="stop"
-         top_pad="10"
-         width="80" />
-    </radio_group>
-    <check_box
-     follows="top|left"
-     height="20"
-     label="until animations are done"
-     layout="topleft"
-     left="16"
-     name="wait_anim_check"
-     top_pad="10"
-     width="100" />
-    <check_box
-     follows="top|left"
-     height="20"
-     label="time in seconds"
-     layout="topleft"
-     left_delta="0"
-     name="wait_time_check"
-     top_pad="10"
-     width="100" />
-    <line_editor
-     follows="top|left"
-     height="20"
-     layout="topleft"
-     left_pad="5"
-     max_length="15"
-     name="wait_time_editor"
-     top_pad="10"
-     width="50" /-->   
-
-
-
-    <!--For pop out floater-->
-    <!--scroll_list
-     follows="top|left"
-     height="110"
-     layout="topleft"
-     left="10"
-     name="library_list"
-     top_pad="10"
-     width="260">
-        <scroll_list.rows
-         value="Animation" />
-        <scroll_list.rows
-         value="Sound" />
-        <scroll_list.rows
-         value="Chat" />
-        <scroll_list.rows
-         value="Wait" />
-    </scroll_list>
-    <text
-     type="string"
-     length="1"
-     follows="top|left"
-     font="SansSerifSmall"
-     height="60"
-     layout="topleft"
-     left="10"
-     name="help_label"
-     top_pad="10"
-     width="200">
-        All steps happen simultaneously, 
-unless you add wait steps.
-    </text>
-    <text
-     follows="top|left"
-     height="60"
-     layout="topleft"
-     left="10"
-     name="options_text"
-     top_pad="10"
-     width="205" />
-    <combo_box
-     follows="top|left"
-     height="20"
-     layout="topleft"
-     left_delta="10"
-     name="animation_list"
-     top_pad="10"
-     width="100" />
-    <combo_box
-     follows="top|left"
-     height="20"
-     layout="topleft"
-     left_delta="0"
-     name="sound_list"
-     top_delta="0"
-     width="100" />
-    <line_editor
-     follows="top|left"
-     height="20"
-     layout="topleft"
-     left_delta="0"
-     max_length="127"
-     name="chat_editor"
-     top_delta="0"
-     width="100" />
-    <radio_group
-     draw_border="false"
-     follows="top|left"
-     height="40"
-     layout="topleft"
-     left_pad="8"
-     name="animation_trigger_type"
-     top="445"
-     width="80">
-        <radio_item
-         height="16"
-         label="Start"
-         layout="topleft"
-         left="3"
-         name="start"
-         top="-11"
-         width="80" />
-        <radio_item
-         height="16"
-         label="Stop"
-         layout="topleft"
-         left_delta="0"
-         name="stop"
-         top_pad="10"
-         width="80" />
-    </radio_group>
-    <check_box
-     follows="top|left"
-     height="20"
-     label="until animations are done"
-     layout="topleft"
-     left="16"
-     name="wait_anim_check"
-     top="430"
-     width="100" />
-    <check_box
-     follows="top|left"
-     height="20"
-     label="time in seconds"
-     layout="topleft"
-     left_delta="0"
-     name="wait_time_check"
-     top_delta="20"
-     width="100" />
-    <line_editor
-     follows="top|left"
-     height="20"
-     layout="topleft"
-     left_pad="5"
-     max_length="15"
-     name="wait_time_editor"
-     top_delta="0"
-     width="50" /-->   
-</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_statistics.xml b/indra/newview/skins/default/xui/en/floater_statistics.xml
deleted file mode 100644
index 3a4e845141..0000000000
--- a/indra/newview/skins/default/xui/en/floater_statistics.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater
- legacy_header_height="18"
- can_resize="true"
- follows="right|top"
- height="392"
- layout="topleft"
- mouse_opaque="false"
- name="stats floater"
- help_topic="stats_floater"
- title="STATISTICS"
- width="250" />
diff --git a/indra/newview/skins/default/xui/en/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/en/floater_wearable_save_as.xml
deleted file mode 100644
index 71812bd1a6..0000000000
--- a/indra/newview/skins/default/xui/en/floater_wearable_save_as.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater
- legacy_header_height="0"
- can_close="false"
- can_minimize="false"
- height="100"
- layout="topleft"
- name="modal container"
- width="240">
-    <button
-     height="23"
-     label="Save"
-     label_selected="Save"
-     layout="topleft"
-     left="20"
-     name="Save"
-     top="70"
-     width="82" />
-    <button
-     height="23"
-     label="Cancel"
-     label_selected="Cancel"
-     layout="topleft"
-     left_pad="36"
-     name="Cancel"
-     top_delta="0"
-     width="82" />
-    <text
-     type="string"
-     length="1"
-     follows="left|top"
-     height="30"
-     layout="topleft"
-     word_wrap="true"
-     left="20"
-     name="Save item as:"
-     top="10"
-     width="200">
-        Save item to my inventory as:
-    </text>
-    <line_editor
-     type="string"
-     length="1"
-     border_style="line"
-     border_thickness="1"
-     follows="left|top"
-     height="23"
-     layout="topleft"
-     left_delta="0"
-     max_length="63"
-     name="name ed"
-     top_pad="0"
-     width="200">
-        New [DESC]
-    </line_editor>
-</floater>
diff --git a/indra/newview/skins/default/xui/en/panel_audio_device.xml b/indra/newview/skins/default/xui/en/panel_audio_device.xml
deleted file mode 100644
index 546f46205f..0000000000
--- a/indra/newview/skins/default/xui/en/panel_audio_device.xml
+++ /dev/null
@@ -1,152 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel
- height="240"
- layout="topleft"
- left="8"
- name="device_settings"
- top="240"
- width="404">
-    <panel.string
-     name="default_text">
-        Default
-    </panel.string>
-    <text
-     type="string"
-     length="1"
-     follows="left|top"
-     height="16"
-     layout="topleft"
-     left="6"
-     name="Audio Devices"
-     width="200">
-        Audio Devices
-    </text>
-    <text
-     type="string"
-     length="1"
-     follows="left|top"
-     height="16"
-     layout="topleft"
-     left="20"
-     name="Input device (microphone):"
-     top="26"
-     width="200">
-        Input device (microphone):
-    </text>
-    <combo_box
-     height="18"
-     layout="topleft"
-     left_delta="0"
-     max_chars="128"
-     name="voice_input_device"
-     top_pad="2"
-     width="225" />
-    <text
-     type="string"
-     length="1"
-     follows="left|top"
-     height="16"
-     layout="topleft"
-     left_delta="0"
-     name="Output device (speakers):"
-     top_pad="9"
-     width="200">
-        Output device (speakers):
-    </text>
-    <combo_box
-     height="18"
-     layout="topleft"
-     left_delta="0"
-     max_chars="128"
-     name="voice_output_device"
-     top_pad="2"
-     width="225" />
-    <text
-     type="string"
-     length="1"
-     follows="left|top"
-     height="16"
-     layout="topleft"
-     left="6"
-     name="Input level:"
-     top="121"
-     width="200">
-        Input Level
-    </text>
-    <text_editor
-     type="string"
-     length="1"
-	 top="135"
-     bg_readonly_color="0 0 0 0"
-     enabled="false"
-     height="60"
-     border_visible="false"
-     layout="topleft"
-     left_delta="10"
-     max_length="65535"
-     name="voice_intro_text1"
-     tab_stop="false"
-     width="380"
-     word_wrap="true">
-        Adjust the slider to control how loud you sound to other Residents. To test the input level, simply speak into your microphone.
-    </text_editor>
-    <slider_bar
-     follows="left|top"
-     height="17"
-     increment="0.05"
-     initial_value="1.0"
-     layout="topleft"
-     left_delta="5"
-     max_val="2"
-     name="mic_volume_slider"
-     tool_tip="Change the volume using this slider"
-     top="202"
-     width="90" />
-    <text
-     type="string"
-     length="1"
-     follows="left|top"
-     height="20"
-     layout="topleft"
-     left_pad="5"
-     name="wait_text"
-     top_delta="1"
-     width="200">
-        Please wait
-    </text>
-    <locate
-     height="20"
-     layout="topleft"
-     left_delta="0"
-     name="bar0"
-     top_delta="5"
-     width="20" />
-    <locate
-     height="20"
-     layout="topleft"
-     left_pad="2"
-     name="bar1"
-     top_delta="0"
-     width="20" />
-    <locate
-     height="20"
-     layout="topleft"
-     left_pad="2"
-     name="bar2"
-     top_delta="0"
-     width="20" />
-    <locate
-     height="20"
-     layout="topleft"
-     left_pad="2"
-     name="bar3"
-     top_delta="0"
-     width="20" />
-    <locate
-     height="20"
-     layout="topleft"
-     left_pad="2"
-     name="bar4"
-     top_delta="0"
-     width="20" />
-</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_friends.xml b/indra/newview/skins/default/xui/en/panel_friends.xml
deleted file mode 100644
index c315adb33e..0000000000
--- a/indra/newview/skins/default/xui/en/panel_friends.xml
+++ /dev/null
@@ -1,124 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel
- border="true"
- follows="all"
- height="347"
- layout="topleft"
- name="friends"
- width="100">
-    <panel.string
-     name="Multiple">
-        Multiple friends
-    </panel.string>
-    <scroll_list
-     bottom="337"
-     column_padding="0"
-     draw_heading="true"
-     follows="left|top|bottom|right"
-     layout="topleft"
-     left="10"
-     multi_select="true"
-     name="friend_list"
-     right="-100"
-     search_column="1"
-     tool_tip="Hold shift or control while clicking to select multiple friends"
-     top="10">
-        <scroll_list.columns
-         image="ff_online_status_button.tga"
-         name="icon_online_status"
-         tool_tip="Online status"
-         width="20" />
-        <scroll_list.columns
-         dynamic_width="true"
-         label="Name"
-         name="friend_name"
-         tool_tip="Name" />
-        <scroll_list.columns
-         image="ff_visible_online_button.tga"
-         name="icon_visible_online"
-         tool_tip="Friend can see when you&apos;re online"
-         width="20" />
-        <scroll_list.columns
-         image="ff_visible_map_button.tga"
-         name="icon_visible_map"
-         tool_tip="Friend can locate you on the map"
-         width="20" />
-        <scroll_list.columns
-         image="ff_edit_mine_button.tga"
-         name="icon_edit_mine"
-         tool_tip="Friend can edit, delete or take objects"
-         width="20" />
-        <scroll_list.columns
-         image="ff_edit_theirs_button.tga"
-         name="icon_edit_theirs"
-         tool_tip="You can edit this friend&apos;s objects"
-         width="20" />
-        <scroll_list.columns
-         name="friend_last_update_generation"
-         width="0" />
-    </scroll_list>
-    <locate
-     bottom="7"
-     layout="topleft"
-     left="-90" />
-    <button
-     follows="top|right"
-     height="22"
-     label="IM/Call"
-     layout="topleft"
-     left_pad="10"
-     name="im_btn"
-     tool_tip="Open Instant Message session"
-     top_pad="3"
-     width="80" />
-    <button
-     follows="top|right"
-     height="22"
-     label="Profile"
-     layout="topleft"
-     left_delta="0"
-     name="profile_btn"
-     tool_tip="Show picture, groups, and other information"
-     top_pad="3"
-     width="80" />
-    <button
-     follows="top|right"
-     height="22"
-     label="Teleport"
-     layout="topleft"
-     left_delta="0"
-     name="offer_teleport_btn"
-     tool_tip="Offer this friend a teleport to your current location"
-     top_pad="3"
-     width="80" />
-    <button
-     follows="top|right"
-     height="22"
-     label="Pay"
-     layout="topleft"
-     left_delta="0"
-     name="pay_btn"
-     tool_tip="Give Linden dollars (L$) to this friend"
-     top_pad="3"
-     width="80" />
-    <button
-     follows="top|right"
-     height="22"
-     label="Remove"
-     layout="topleft"
-     left_delta="0"
-     name="remove_btn"
-     tool_tip="Remove this person from your friends list"
-     top_pad="3"
-     width="80" />
-    <button
-     follows="top|right"
-     height="22"
-     label="Add"
-     layout="topleft"
-     left_delta="0"
-     name="add_btn"
-     tool_tip="Offer friendship to a Resident"
-     top_pad="13"
-     width="80" />
-</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_groups.xml b/indra/newview/skins/default/xui/en/panel_groups.xml
deleted file mode 100644
index bba399481b..0000000000
--- a/indra/newview/skins/default/xui/en/panel_groups.xml
+++ /dev/null
@@ -1,111 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel
- border="true"
- follows="all"
- height="347"
- layout="topleft"
- left="280"
- name="groups"
- top="24"
- width="350">
-    <scroll_list
-     bottom="302"
-     follows="left|top|right|bottom"
-     layout="topleft"
-     left="10"
-     name="group list"
-     top="10"
-     width="240">
-        <scroll_list.columns
-         label=""
-         name="name"
-         width="248" />
-    </scroll_list>
-    <text
-     type="string"
-     length="1"
-     follows="left|bottom"
-     height="16"
-     layout="topleft"
-     left_delta="2"
-     mouse_opaque="false"
-     name="groupdesc"
-     top_pad="7"
-     width="248">
-        Your currently active group is displayed in bold.
-    </text>
-    <text
-     type="string"
-     length="1"
-     follows="left|bottom"
-     height="16"
-     layout="topleft"
-     left_delta="0"
-     mouse_opaque="false"
-     name="groupcount"
-     top_pad="1"
-     width="248">
-        You belong to [COUNT] groups (of [MAX] maximum).
-    </text>
-    <locate
-     height="0"
-     layout="topleft"
-     left="-90"
-     top="7"
-     width="1" />
-    <button
-     follows="top|right"
-     height="22"
-     label="IM/Call"
-     layout="topleft"
-     left_delta="0"
-     name="IM"
-     tool_tip="Open Instant Message session"
-     top_pad="3"
-     width="80" />
-    <button
-     follows="top|right"
-     height="22"
-     label="Info"
-     layout="topleft"
-     left_delta="0"
-     name="Info"
-     top_pad="3"
-     width="80" />
-    <button
-     follows="top|right"
-     height="22"
-     label="Activate"
-     layout="topleft"
-     left_delta="0"
-     name="Activate"
-     top_pad="3"
-     width="80" />
-    <button
-     follows="top|right"
-     height="22"
-     label="Leave"
-     layout="topleft"
-     left_delta="0"
-     name="Leave"
-     top_pad="3"
-     width="80" />
-    <button
-     follows="top|right"
-     height="22"
-     label="Create..."
-     layout="topleft"
-     left_delta="0"
-     name="Create"
-     top_pad="13"
-     width="80" />
-    <button
-     follows="top|right"
-     height="22"
-     label="Search..."
-     layout="topleft"
-     left_delta="0"
-     name="Search..."
-     top_pad="3"
-     width="80" />
-</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_nearby_chat.xml b/indra/newview/skins/default/xui/en/panel_nearby_chat.xml
deleted file mode 100644
index 50a78e1c71..0000000000
--- a/indra/newview/skins/default/xui/en/panel_nearby_chat.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<!-- All our XML is utf-8 encoded. -->
-
-<panel
-  name="nearby_chat"  visible="true" width="250" height="480" background_opaque="false"
-  background_visible="true" bevel_style="in" follows="left|top" bg_alpha_color="0.3 0.3 0.3 1.0">
-	<panel bottom="380" width="250" height="30" background_visible="true" background_opaque="false" bg_alpha_color="0.0 0.0 0.0 1.0" name="chat_caption">
-    	<text
-        	width="140" left="25" height="20" follows="left|right|top"
-        	font="SansSerifBigBold" text_color="white" word_wrap="true"
-        	mouse_opaque="true" name="sender_name" >NEARBY CHAT  </text>
-    	<icon top="25" left="180"
-      			width="20" height="20" follows="top|right"
-		      	color="1 1 1 1" enabled="true" image_name="icn_voice-groupfocus.tga"
-      			mouse_opaque="true" name="nearby_speakers_btn"/>
-    	<icon top="25" left="205"
-      		width="20" height="20" follows="top|right"
-      		color="1 1 1 1" enabled="true" image_name="inv_item_landmark_visited.tga"
-      		mouse_opaque="true" name="tearoff_btn"/>
-    	<icon top="22" left="230"
-      		width="15" height="15" follows="top|right"
-      		color="1 1 1 1" enabled="true" image_name="closebox.tga"
-      		name="close_btn"/>
-	</panel>
-  <chat_history_view bottom="0" width="250" height="320" follows="left|right|top|bottom" name="chat_scroll" />    
-</panel>
-
diff --git a/indra/newview/skins/default/xui/en/panel_online_status.xml b/indra/newview/skins/default/xui/en/panel_online_status.xml
deleted file mode 100644
index 14cb5fffee..0000000000
--- a/indra/newview/skins/default/xui/en/panel_online_status.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel
- background_visible="false"
- height="152"
- label="friend_online_status"
- layout="topleft"
- left="0"
- name="friend_online_status"
- top="0"
- width="305">
-    <avatar_icon
-	 follows="top|left"
-	 height="18"
-	 image_name="Generic_Person"
-	 layout="topleft"
-	 left="3"
-	 mouse_opaque="false"
-	 name="avatar_icon"
-	 top="10"
-	 width="18" />
-    <text
-     font="SansSerifSmall"
-     follows="all"
-     height="137"
-     layout="topleft"
-     left_pad="5"
-     name="message"
-     text_color="white"
-     top="15"
-     use_ellipses="true"
-     value=""
-     width="285"
-     word_wrap="true"
-     max_length="350" />
-</panel>
\ No newline at end of file
diff --git a/indra/newview/skins/default/xui/en/panel_region_general_layout.xml b/indra/newview/skins/default/xui/en/panel_region_general_layout.xml
deleted file mode 100644
index ffa1a257d5..0000000000
--- a/indra/newview/skins/default/xui/en/panel_region_general_layout.xml
+++ /dev/null
@@ -1,242 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel
- border="true"
- follows="top|left"
- height="360"
- label="Region"
- layout="topleft"
- left="0"
- name="General"
- top="360"
- width="280">
-    <text
-     follows="left|top"
-     font="SansSerif"
-     height="20"
-     layout="topleft"
-     left="10"
-     name="region_text_lbl"
-     top="10"
-     width="100">
-        Region:
-    </text>
-    <text
-     follows="left|top"
-     font="SansSerif"
-     height="20"
-     layout="topleft"
-     left_delta="50"
-     name="region_text"
-     top_delta="0"
-     width="200">
-        unknown
-    </text>
-    <text
-     follows="left|top"
-     font="SansSerif"
-     height="20"
-     layout="topleft"
-     left="10"
-     name="version_channel_text_lbl"
-     top="30"
-     width="100">
-        Version:
-    </text>
-    <text
-     follows="left|top"
-     font="SansSerif"
-     height="20"
-     layout="topleft"
-     left_delta="50"
-     name="version_channel_text"
-     top_delta="0"
-     width="200">
-        unknown
-    </text>
-    <text
-     follows="left|top"
-     font="SansSerif"
-     height="20"
-     layout="topleft"
-     left="10"
-     name="region_type_lbl"
-     top="50"
-     width="100">
-        Type:
-    </text>
-    <text
-     follows="left|top"
-     font="SansSerif"
-     height="20"
-     layout="topleft"
-     left_delta="50"
-     name="region_type"
-     top_delta="0"
-     width="200">
-        unknown
-    </text>
-    <check_box
-     height="20"
-     label="Block Terraform"
-     layout="topleft"
-     left="10"
-     name="block_terraform_check"
-     top="70"
-     width="80" />
-    <check_box
-     height="20"
-     label="Block Fly"
-     layout="topleft"
-     left="10"
-     name="block_fly_check"
-     top="90"
-     width="80" />
-    <check_box
-     height="20"
-     label="Allow Damage"
-     layout="topleft"
-     left="10"
-     name="allow_damage_check"
-     top="110"
-     width="80" />
-    <check_box
-     height="20"
-     label="Restrict Pushing"
-     layout="topleft"
-     left="10"
-     name="restrict_pushobject"
-     top="130"
-     width="80" />
-    <check_box
-     height="20"
-     label="Allow Land Resell"
-     layout="topleft"
-     left="10"
-     name="allow_land_resell_check"
-     top="160"
-     width="80" />
-    <check_box
-     height="20"
-     label="Allow Land Join/Divide"
-     layout="topleft"
-     left="10"
-     name="allow_parcel_changes_check"
-     top="180"
-     width="80" />
-    <check_box
-     height="20"
-     label="Block Land Show in Search"
-     layout="topleft"
-     left="10"
-     name="block_parcel_search_check"
-     tool_tip="Let people see this region and its parcels in search results"
-     top="200"
-     width="80" />
-    <spinner
-     follows="left|top"
-     height="20"
-     increment="1"
-     label="Agent Limit"
-     label_width="97"
-     layout="topleft"
-     left="10"
-     max_val="100"
-     min_val="1"
-     name="agent_limit_spin"
-     top="240"
-     width="170" />
-    <spinner
-     follows="left|top"
-     height="20"
-     increment="0.5"
-     label="Object Bonus"
-     label_width="97"
-     layout="topleft"
-     left="10"
-     max_val="10"
-     min_val="1"
-     name="object_bonus_spin"
-     top="260"
-     width="170" />
-    <text
-     follows="left|top"
-     height="20"
-     label="Maturity"
-     layout="topleft"
-     left="10"
-     name="access_text"
-     top="290"
-     width="100">
-        Rating:
-    </text>
-    <combo_box
-     height="20"
-     label="Moderate"
-     layout="topleft"
-     left_delta="100"
-     name="access_combo"
-     top_delta="0"
-     width="85">
-        <combo_box.item
-         label="Adult"
-         name="Adult"
-         value="42" />
-        <combo_box.item
-         label="Moderate"
-         name="Mature"
-         value="21" />
-        <combo_box.item
-         label="General"
-         name="PG"
-         value="13" />
-    </combo_box> 
-    <button
-     enabled="false"
-     follows="left|top"
-     height="20"
-     label="Apply"
-     layout="topleft"
-     left="108"
-     name="apply_btn"
-     top="320"
-     width="100"/>
-   <button
-     follows="left|top"
-     height="20"
-     label="Teleport Home One Resident..."
-     layout="topleft"
-     left="10"
-     name="kick_btn"
-     top_pad="10"
-     width="250" />
-    <button
-     follows="left|top"
-     height="20"
-     label="Teleport Home All Residents..."
-     layout="topleft"
-     left_delta="0"
-     name="kick_all_btn"
-     top_pad="3"
-     width="250" />
-    <button
-     follows="left|top"
-     height="20"
-     label="Send Message To Region..."
-     layout="topleft"
-     left_delta="0"
-     name="im_btn"
-     top_pad="20"
-     width="200" />
-    <button
-     follows="left|top"
-     height="20"
-     label="Manage Telehub..."
-     layout="topleft"
-     left_delta="0"
-     name="manage_telehub_btn"
-     top_pad="20"
-     width="150" >
-		<button.commit_callback
-         function="RegionInfo.ManageTelehub" />
-    </button> 
-</panel>
diff --git a/indra/newview/skins/default/xui/es/floater_customize.xml b/indra/newview/skins/default/xui/es/floater_customize.xml
deleted file mode 100644
index 77b670d5f0..0000000000
--- a/indra/newview/skins/default/xui/es/floater_customize.xml
+++ /dev/null
@@ -1,530 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater customize" title="APARIENCIA">
-	<tab_container name="customize tab container">
-		<text label="Partes del cuerpo" name="body_parts_placeholder">
-			Partes del cuerpo
-		</text>
-		<panel label="Forma" name="Shape">
-			<button label="Restablecer" label_selected="Restablecer" name="Revert"/>
-			<button label="Cuerpo" label_selected="Cuerpo" name="Body"/>
-			<button label="Cabeza" label_selected="Cabeza" name="Head"/>
-			<button label="Ojos" label_selected="Ojos" name="Eyes"/>
-			<button label="Orejas" label_selected="Orejas" name="Ears"/>
-			<button label="Nariz" label_selected="Nariz" name="Nose"/>
-			<button label="Boca" label_selected="Boca" name="Mouth"/>
-			<button label="Barbilla" label_selected="Barbilla" name="Chin"/>
-			<button label="Torso" label_selected="Torso" name="Torso"/>
-			<button label="Piernas" label_selected="Piernas" name="Legs"/>
-			<radio_group name="sex radio">
-				<radio_item label="Mujer" name="radio" value="0"/>
-				<radio_item label="Varón" name="radio2" value="1"/>
-			</radio_group>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: no modificable
-			</text>
-			<text name="title_loading">
-				[DESC]: cargando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: no lleva
-			</text>
-			<text name="path">
-				Situada en [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ponte una anatomía nueva arrastrándola desde tu inventario hasta tu avatar. O bien puedes crear una nueva partiendo de cero.
-			</text>
-			<text name="no modify instructions">
-				No tiene permiso para modificar este ítem.
-			</text>
-			<text name="Item Action Label">
-				Forma:
-			</text>
-			<button label="Crear una forma nueva" label_selected="Crear una forma nueva" name="Create New"/>
-			<button label="Guardar" label_selected="Guardar" name="Save"/>
-			<button label="Guardar como..." label_selected="Guardar como..." name="Save As"/>
-		</panel>
-		<panel label="Piel" name="Skin">
-			<button label="Color de piel" label_selected="Color de piel" name="Skin Color" width="115"/>
-			<button label="Detalles faciales" label_selected="Detalles faciales" name="Face Detail" width="115"/>
-			<button label="Maquillaje" label_selected="Maquillaje" name="Makeup" width="115"/>
-			<button label="Detalles del cuerpo" label_selected="Detalles del cuerpo" name="Body Detail" width="115"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: no modificable
-			</text>
-			<text name="title_loading">
-				[DESC]: cargando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: no lleva
-			</text>
-			<text name="path">
-				Situada en [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ponte una piel nueva arrastrándola desde tu inventario hasta tu avatar. O bien puedes crear una nueva partiendo de cero.
-			</text>
-			<text name="no modify instructions">
-				No tiene permiso para modificar este ítem.
-			</text>
-			<text name="Item Action Label" right="107">
-				Piel:
-			</text>
-			<texture_picker label="Tatuaje: cabeza" name="Head Tattoos" tool_tip="Pulse para elegir una imagen" width="90"/>
-			<texture_picker label="Tatuaje: superior" name="Upper Tattoos" tool_tip="Pulse para elegir una imagen" width="90"/>
-			<texture_picker label="Tatuaje: inferior" name="Lower Tattoos" tool_tip="Pulse para elegir una imagen" width="90"/>
-			<button label="Crear una piel nueva" label_selected="Crear una piel nueva" name="Create New"/>
-			<button label="Guardar" label_selected="Guardar" left="113" name="Save"/>
-			<button label="Guardar como..." label_selected="Guardar como..." name="Save As"/>
-			<button label="Restablecer" label_selected="Restablecer" name="Revert"/>
-		</panel>
-		<panel label="Pelo" name="Hair">
-			<button label="Color" label_selected="Color" name="Color"/>
-			<button label="Peinado" label_selected="Peinado" name="Style"/>
-			<button label="Cejas" label_selected="Cejas" name="Eyebrows"/>
-			<button label="Facial" label_selected="Facial" name="Facial"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: no modificable
-			</text>
-			<text name="title_loading">
-				[DESC]: cargando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: no lleva
-			</text>
-			<text name="path">
-				Situado en [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ponte un pelo nuevo arrastrándolo desde tu inventario hasta tu avatar. O bien puedes crear uno nuevo partiendo de cero.
-			</text>
-			<text name="no modify instructions">
-				No tiene permiso para modificar este ítem.
-			</text>
-			<text name="Item Action Label" right="107">
-				Pelo:
-			</text>
-			<texture_picker label="Textura" name="Texture" tool_tip="Pulse para elegir una imagen"/>
-			<button label="Crear un pelo nuevo" label_selected="Crear un pelo nuevo" name="Create New"/>
-			<button label="Guardar" label_selected="Guardar" left="113" name="Save"/>
-			<button label="Guardar como..." label_selected="Guardar como..." name="Save As"/>
-			<button label="Restablecer" label_selected="Restablecer" name="Revert"/>
-		</panel>
-		<panel label="Ojos" name="Eyes">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: no modificables
-			</text>
-			<text name="title_loading">
-				[DESC]: cargando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: no lleva
-			</text>
-			<text name="path">
-				Situados en [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ponte unos ojos nuevos arrastrándolos desde tu inventario hasta tu avatar. O bien puedes crear unos nuevos partiendo de cero.
-			</text>
-			<text name="no modify instructions">
-				No tiene permiso para modificar este ítem.
-			</text>
-			<text name="Item Action Label" right="107">
-				Ojos:
-			</text>
-			<texture_picker label="Iris" name="Iris" tool_tip="Pulse para elegir una imagen"/>
-			<button label="Crear unos ojos nuevos" label_selected="Crear unos ojos nuevos" name="Create New"/>
-			<button label="Guardar" label_selected="Guardar" left="113" name="Save"/>
-			<button label="Guardar como..." label_selected="Guardar como..." name="Save As"/>
-			<button label="Restablecer" label_selected="Restablecer" name="Revert"/>
-		</panel>
-		<text label="Ropa" name="clothes_placeholder">
-			Ropas
-		</text>
-		<panel label="Camisa" name="Shirt">
-			<texture_picker label="Tela" name="Fabric" tool_tip="Pulse para elegir una imagen"/>
-			<color_swatch label="Color/Tinte" name="Color/Tint" tool_tip="Pulsa para abrir el selector de color"/>
-			<button label="Quitarla" label_selected="Quitarla" name="Take Off"/>
-			<button label="Crear una falda nueva" label_selected="Crear una falda nueva" name="Create New"/>
-			<button label="Guardar" label_selected="Guardar" left="113" name="Save"/>
-			<button label="Guardar como..." label_selected="Guardar como..." name="Save As"/>
-			<button label="Restablecer" label_selected="Restablecer" name="Revert"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: no modificable
-			</text>
-			<text name="title_loading">
-				[DESC]: cargando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: no lleva
-			</text>
-			<text name="path">
-				Situada en [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ponte una camisa nueva arrastrándola desde tu inventario hasta tu avatar. O bien puedes crear una nueva partiendo de cero.
-			</text>
-			<text name="no modify instructions">
-				No tiene permiso para modificar este ítem.
-			</text>
-			<text name="Item Action Label" right="107">
-				Camisa:
-			</text>
-		</panel>
-		<panel label="Pantalones" name="Pants">
-			<texture_picker label="Tela" name="Fabric" tool_tip="Pulse para elegir una imagen"/>
-			<color_swatch label="Color/Tinte" name="Color/Tint" tool_tip="Pulsa para abrir el selector de color"/>
-			<button label="Quitarlos" label_selected="Quitarlos" name="Take Off"/>
-			<button label="Crear unos pantalones nuevos" label_selected="Crear unos pantalones nuevos" name="Create New" width="185"/>
-			<button label="Guardar" label_selected="Guardar" left="113" name="Save"/>
-			<button label="Guardar como..." label_selected="Guardar como..." name="Save As"/>
-			<button label="Restablecer" label_selected="Restablecer" name="Revert"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: no modificables
-			</text>
-			<text name="title_loading">
-				[DESC]: cargando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: no lleva
-			</text>
-			<text name="path">
-				Situados en [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ponte unos pantalones nuevos arrastrándolos desde tu inventario hasta tu avatar. O bien puedes crear unos nuevos partiendo de cero.
-			</text>
-			<text name="no modify instructions">
-				No tiene permiso para modificar este ítem.
-			</text>
-			<text name="Item Action Label" right="107">
-				Pantalones:
-			</text>
-		</panel>
-		<panel label="Zapatos" name="Shoes">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: no modificables
-			</text>
-			<text name="title_loading">
-				[DESC]: cargando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: no lleva
-			</text>
-			<text name="path">
-				Situados en [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ponte unos zapatos nuevos arrastrándolos desde tu inventario hasta tu avatar. O bien puedes crear unos nuevos partiendo de cero.
-			</text>
-			<button label="Crear unos zapatos nuevos" label_selected="Crear unos zapatos nuevos" name="Create New"/>
-			<text name="no modify instructions">
-				No tiene permiso para modificar este ítem.
-			</text>
-			<text name="Item Action Label" right="107">
-				Zapatos:
-			</text>
-			<texture_picker label="Tela" name="Fabric" tool_tip="Pulse para elegir una imagen"/>
-			<color_swatch label="Color/Tinte" name="Color/Tint" tool_tip="Pulsa para abrir el selector de color"/>
-			<button label="Quitarlos" label_selected="Quitarlos" name="Take Off"/>
-			<button label="Guardar" label_selected="Guardar" left="113" name="Save"/>
-			<button label="Guardar como..." label_selected="Guardar como..." name="Save As"/>
-			<button label="Restablecer" label_selected="Restablecer" name="Revert"/>
-		</panel>
-		<panel label="Calcetines" name="Socks">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: no modificables
-			</text>
-			<text name="title_loading">
-				[DESC]: cargando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: no lleva
-			</text>
-			<text name="path">
-				Situados en [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ponte unos calcetines nuevos arrastrándolos desde tu inventario hasta tu avatar. O bien puedes crear unos nuevos partiendo de cero.
-			</text>
-			<button label="Crear unos calcetines nuevos" label_selected="Crear unos calcetines nuevos" name="Create New" width="185"/>
-			<text name="no modify instructions">
-				No tiene permiso para modificar este ítem.
-			</text>
-			<text name="Item Action Label" right="107">
-				Calcetines:
-			</text>
-			<texture_picker label="Tela" name="Fabric" tool_tip="Pulse para elegir una imagen"/>
-			<color_swatch label="Color/Tinte" name="Color/Tint" tool_tip="Pulsa para abrir el selector de color"/>
-			<button label="Quitarlos" label_selected="Quitarlos" name="Take Off"/>
-			<button label="Guardar" label_selected="Guardar" left="113" name="Save"/>
-			<button label="Guardar como..." label_selected="Guardar como..." name="Save As"/>
-			<button label="Restablecer" label_selected="Restablecer" name="Revert"/>
-		</panel>
-		<panel label="Chaqueta" name="Jacket">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: no modificable
-			</text>
-			<text name="title_loading">
-				[DESC]: cargando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: no lleva
-			</text>
-			<text name="path">
-				Situada en [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ponte una chaqueta nueva arrastrándola desde tu inventario hasta tu avatar. O bien puedes crear una nueva partiendo de cero.
-			</text>
-			<button label="Crear una chaqueta nueva" label_selected="Crear una chaqueta nueva" name="Create New"/>
-			<text name="no modify instructions">
-				No tiene permiso para modificar este ítem.
-			</text>
-			<text name="Item Action Label" right="107">
-				Chaqueta:
-			</text>
-			<texture_picker label="Tela superior" name="Upper Fabric" tool_tip="Pulse para elegir una imagen"/>
-			<texture_picker label="Tela inferior" name="Lower Fabric" tool_tip="Pulse para elegir una imagen"/>
-			<color_swatch label="Color/Tinte" name="Color/Tint" tool_tip="Pulsa para abrir el selector de color"/>
-			<button label="Quitarla" label_selected="Quitarla" name="Take Off"/>
-			<button label="Guardar" label_selected="Guardar" left="113" name="Save"/>
-			<button label="Guardar como..." label_selected="Guardar como..." name="Save As"/>
-			<button label="Restablecer" label_selected="Restablecer" name="Revert"/>
-		</panel>
-		<panel label="Guantes" name="Gloves">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: no modificables
-			</text>
-			<text name="title_loading">
-				[DESC]: cargando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: no lleva
-			</text>
-			<text name="path">
-				Situados en [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ponte unos guantes nuevos arrastrándolos desde tu inventario hasta tu avatar. O bien puedes crear unos nuevos partiendo de cero.
-			</text>
-			<button label="Crear unos guantes nuevos" label_selected="Crear unos guantes nuevos" name="Create New"/>
-			<text name="no modify instructions">
-				No tiene permiso para modificar este ítem.
-			</text>
-			<text name="Item Action Label" right="107">
-				Guantes:
-			</text>
-			<texture_picker label="Tela" name="Fabric" tool_tip="Pulse para elegir una imagen"/>
-			<color_swatch label="Color/Tinte" name="Color/Tint" tool_tip="Pulsa para abrir el selector de color"/>
-			<button label="Quitarlos" label_selected="Quitarlos" name="Take Off"/>
-			<button label="Guardar" label_selected="Guardar" left="113" name="Save"/>
-			<button label="Guardar como..." label_selected="Guardar como..." name="Save As"/>
-			<button label="Restablecer" label_selected="Restablecer" name="Revert"/>
-		</panel>
-		<panel label="Camiseta" name="Undershirt">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: no modificable
-			</text>
-			<text name="title_loading">
-				[DESC]: cargando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: no lleva
-			</text>
-			<text name="path">
-				Situada en [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ponte una camiseta nueva arrastrándola desde tu inventario hasta tu avatar. O bien puedes crear una nueva partiendo de cero.
-			</text>
-			<button label="Crear una camiseta nueva" label_selected="Crear una camiseta nueva" name="Create New"/>
-			<text name="no modify instructions">
-				No tiene permiso para modificar este ítem.
-			</text>
-			<text name="Item Action Label" right="107">
-				Camiseta:
-			</text>
-			<texture_picker label="Tela" name="Fabric" tool_tip="Pulse para elegir una imagen"/>
-			<color_swatch label="Color/Tinte" name="Color/Tint" tool_tip="Pulsa para abrir el selector de color"/>
-			<button label="Quitarla" label_selected="Quitarla" name="Take Off"/>
-			<button label="Guardar" label_selected="Guardar" left="113" name="Save"/>
-			<button label="Guardar como..." label_selected="Guardar como..." name="Save As"/>
-			<button label="Restablecer" label_selected="Restablecer" name="Revert"/>
-		</panel>
-		<panel label="Ropa interior" name="Underpants">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: no modificable
-			</text>
-			<text name="title_loading">
-				[DESC]: cargando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: no lleva
-			</text>
-			<text name="path">
-				Situada en [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ponte una ropa interior nueva arrastrándola desde tu inventario hasta tu avatar. O bien puedes crear una nueva partiendo de cero.
-			</text>
-			<button label="Crear una ropa interior nueva" label_selected="Crear una ropa interior nueva" name="Create New" width="185"/>
-			<text name="no modify instructions">
-				No tiene permiso para modificar este ítem.
-			</text>
-			<text name="Item Action Label" right="107">
-				Ropa interior:
-			</text>
-			<texture_picker label="Tela" name="Fabric" tool_tip="Pulse para elegir una imagen"/>
-			<color_swatch label="Color/Tinte" name="Color/Tint" tool_tip="Pulsa para abrir el selector de color"/>
-			<button label="Quitarla" label_selected="Quitarla" name="Take Off"/>
-			<button label="Guardar" label_selected="Guardar" left="113" name="Save"/>
-			<button label="Guardar como..." label_selected="Guardar como..." name="Save As"/>
-			<button label="Restablecer" label_selected="Restablecer" name="Revert"/>
-		</panel>
-		<panel label="Falda" name="Skirt">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: no modificable
-			</text>
-			<text name="title_loading">
-				[DESC]: cargando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: no lleva
-			</text>
-			<text name="path">
-				Situada en [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ponte una falda nueva arrastrándola desde tu inventario hasta tu avatar. O bien puedes crear una nueva partiendo de cero.
-			</text>
-			<button label="Crear una falda nueva" label_selected="Crear una falda nueva" name="Create New"/>
-			<text name="no modify instructions">
-				No tiene permiso para modificar este ítem.
-			</text>
-			<text name="Item Action Label" right="107">
-				Falda:
-			</text>
-			<texture_picker label="Tela" name="Fabric" tool_tip="Pulse para elegir una imagen"/>
-			<color_swatch label="Color/Tinte" name="Color/Tint" tool_tip="Pulsa para abrir el selector de color"/>
-			<button label="Quitarla" label_selected="Quitarla" name="Take Off"/>
-			<button label="Guardar" label_selected="Guardar" left="113" name="Save"/>
-			<button label="Guardar como..." label_selected="Guardar como..." name="Save As"/>
-			<button label="Restablecer" label_selected="Restablecer" name="Revert"/>
-		</panel>
-		<panel label="Tatuaje" name="Tattoo">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: no modificable
-			</text>
-			<text name="title_loading">
-				[DESC]: cargando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: no puesto
-			</text>
-			<text name="path">
-				Situado en [PATH]
-			</text>
-			<text name="not worn instructions">
-				Pon un tatuaje nuevo arrastrándolo desde tu inventario a tu avatar. O bien puedes crear uno nuevo partiendo de cero.
-			</text>
-			<button label="Crear un tatuaje nuevo" label_selected="Crear un tatuaje nuevo" name="Create New"/>
-			<text name="no modify instructions">
-				No tienes permiso para modificar este artículo.
-			</text>
-			<text name="Item Action Label">
-				Tatuaje:
-			</text>
-			<texture_picker label="Tatuaje de la cabeza" name="Head Tattoo" tool_tip="Pulsa para elegir una imagen"/>
-			<texture_picker label="Tatuaje superior" name="Upper Tattoo" tool_tip="Pulsa para elegir una imagen"/>
-			<texture_picker label="Tatuaje inferior" name="Lower Tattoo" tool_tip="Pulsa para elegir una imagen"/>
-			<button label="Quitarme" label_selected="Quitarme" name="Take Off"/>
-			<button label="Guardar" label_selected="Guardar" name="Save"/>
-			<button label="Guardar como..." label_selected="Guardar como..." name="Save As"/>
-			<button label="Revertir" label_selected="Revertir" name="Revert"/>
-		</panel>
-		<panel label="Alfa" name="Alpha">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: no modificable
-			</text>
-			<text name="title_loading">
-				[DESC]: cargando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: no puesto
-			</text>
-			<text name="path">
-				Situado en [PATH]
-			</text>
-			<text name="not worn instructions">
-				Pon una capa Alfa nueva arrastrándola desde tu inventario a tu avatar. O bien puedes crear una nueva partiendo de cero.
-			</text>
-			<button label="Crear una capa Alfa nueva" label_selected="Crear una capa Alfa nueva" name="Create New"/>
-			<text name="no modify instructions">
-				No tienes permiso para modificar este artículo.
-			</text>
-			<text name="Item Action Label">
-				Alfa:
-			</text>
-			<texture_picker label="Alfa inferior" name="Lower Alpha" tool_tip="Pulsa para elegir una imagen"/>
-			<texture_picker label="Alfa superior" name="Upper Alpha" tool_tip="Pulsa para elegir una imagen"/>
-			<texture_picker label="Alfa de la cabeza" name="Head Alpha" tool_tip="Pulsa para elegir una imagen"/>
-			<texture_picker label="Alfa de los ojos" name="Eye Alpha" tool_tip="Pulsa para elegir una imagen"/>
-			<texture_picker label="Alfa del pelo" name="Hair Alpha" tool_tip="Pulsa para elegir una imagen"/>
-			<button label="Quitarme" label_selected="Quitarme" name="Take Off"/>
-			<button label="Guardar" label_selected="Guardar" name="Save"/>
-			<button label="Guardar como..." label_selected="Guardar como..." name="Save As"/>
-			<button label="Revertir" label_selected="Revertir" name="Revert"/>
-		</panel>
-	</tab_container>
-	<scroll_container name="panel_container"/>
-	<button label="Información del script" label_selected="Información del script" name="script_info" tool_tip="Mostrar los scripts anexados a tu avatar"/>
-	<button label="Hacer un vestuario" label_selected="Hacer un vestuario" name="make_outfit_btn"/>
-	<button label="Cancelar" label_selected="Cancelar" name="Cancel"/>
-	<button label="OK" label_selected="OK" name="Ok"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_device_settings.xml b/indra/newview/skins/default/xui/es/floater_device_settings.xml
deleted file mode 100644
index eadf04a417..0000000000
--- a/indra/newview/skins/default/xui/es/floater_device_settings.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_device_settings" title="CONFIGURACIÓN DE LOS DISPOSITIVOS DEL CHAT DE VOZ"/>
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/floater_my_friends.xml b/indra/newview/skins/default/xui/es/floater_my_friends.xml
deleted file mode 100644
index 07f362560b..0000000000
--- a/indra/newview/skins/default/xui/es/floater_my_friends.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_my_friends" title="CONTACTOS">
-	<tab_container name="friends_and_groups">
-		<panel label="Amigos" name="friends_panel"/>
-		<panel label="Grupos" name="groups_panel"/>
-	</tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/es/floater_outfit_save_as.xml
deleted file mode 100644
index 9f9902a3a0..0000000000
--- a/indra/newview/skins/default/xui/es/floater_outfit_save_as.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="modal container" title="Guardar el vestuario">
-	<button label="Guardar" label_selected="Guardar" name="Save"/>
-	<button label="Cancelar" label_selected="Cancelar" name="Cancel"/>
-	<text name="Save item as:">
-		Guardar lo que llevo puesto
-como un vestuario nuevo:
-	</text>
-	<line_editor name="name ed">
-		[DESC] (nuevo)
-	</line_editor>
-</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_preview_classified.xml b/indra/newview/skins/default/xui/es/floater_preview_classified.xml
deleted file mode 100644
index d9c9c51ba8..0000000000
--- a/indra/newview/skins/default/xui/es/floater_preview_classified.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="classified_preview" title="INFORMACIÓN DEL CLASIFICADO">
-	<floater.string name="Title">
-		Clasificado: [NAME]
-	</floater.string>
-</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_preview_event.xml b/indra/newview/skins/default/xui/es/floater_preview_event.xml
deleted file mode 100644
index 7edd4f9e3f..0000000000
--- a/indra/newview/skins/default/xui/es/floater_preview_event.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="event_preview" title="INFORMACIÓN DEL EVENTO">
-	<floater.string name="Title">
-		Evento: [NAME]
-	</floater.string>
-</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/es/floater_preview_gesture_info.xml
deleted file mode 100644
index f5b771c6e7..0000000000
--- a/indra/newview/skins/default/xui/es/floater_preview_gesture_info.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="ATAJO DE TECLADO PARA GESTOS"/>
diff --git a/indra/newview/skins/default/xui/es/floater_preview_gesture_shortcut.xml b/indra/newview/skins/default/xui/es/floater_preview_gesture_shortcut.xml
deleted file mode 100644
index ea955f9727..0000000000
--- a/indra/newview/skins/default/xui/es/floater_preview_gesture_shortcut.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="ATAJO DE TECLADO PARA GESTOS">
-	<text name="trigger_label">
-		Chat :
-	</text>
-	<text name="key_label">
-		Teclado:
-	</text>
-	<combo_box label="Ninguno/a" name="modifier_combo"/>
-	<combo_box label="Ninguno/a" name="key_combo"/>
-	<text name="replace_text" tool_tip="Reemplaza la/s palabra/s clave con estas palabras. Por ejemplo, si cambias la palabra clave &apos;hola&apos; por &apos;qué tal&apos;, se cambiará en el chat &apos;Quería decir hola&apos; por &apos;Quería decir qué tal&apos; en cuanto realices el gesto.">
-		Reemplazar por:
-	</text>
-	<line_editor name="replace_editor" tool_tip="Reemplaza la/s palabra/s clave con estas palabras. Por ejemplo, si cambias la palabra clave &apos;hola&apos; por &apos;qué tal&apos;, se cambiará en el chat &apos;Quería decir hola&apos; por &apos;Quería decir qué tal&apos; en cuanto realices el gesto."/>
-</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/es/floater_preview_gesture_steps.xml
deleted file mode 100644
index f5b771c6e7..0000000000
--- a/indra/newview/skins/default/xui/es/floater_preview_gesture_steps.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="ATAJO DE TECLADO PARA GESTOS"/>
diff --git a/indra/newview/skins/default/xui/es/floater_statistics.xml b/indra/newview/skins/default/xui/es/floater_statistics.xml
deleted file mode 100644
index c9b0a76df0..0000000000
--- a/indra/newview/skins/default/xui/es/floater_statistics.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="stats floater" title="ESTADÍSTICAS"/>
diff --git a/indra/newview/skins/default/xui/es/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/es/floater_wearable_save_as.xml
deleted file mode 100644
index bf96ed53ce..0000000000
--- a/indra/newview/skins/default/xui/es/floater_wearable_save_as.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="modal container" title=" ">
-	<button label="Guardar" label_selected="Guardar" name="Save"/>
-	<button label="Cancelar" label_selected="Cancelar" name="Cancel"/>
-	<text name="Save item as:">
-		Guardar el ítem en mi inventario como:
-	</text>
-	<line_editor name="name ed">
-		Nuevo [DESC]
-	</line_editor>
-</floater>
diff --git a/indra/newview/skins/default/xui/es/panel_audio_device.xml b/indra/newview/skins/default/xui/es/panel_audio_device.xml
deleted file mode 100644
index d20a0af4fb..0000000000
--- a/indra/newview/skins/default/xui/es/panel_audio_device.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="device_settings">
-	<text name="Audio Devices">
-		Dispositivos de sonido
-	</text>
-	<text name="Input device (microphone):">
-		Dispositivo de entrada (micrófono):
-	</text>
-	<text name="Output device (speakers):">
-		Dispositivo de salida (altavoces):
-	</text>
-	<text name="Input level:">
-		Volumen de entrada
-	</text>
-	<text_editor name="voice_intro_text1">
-		Ajuste el deslizable para controlar el volumen con el que usted le sonará a otros residentes. Para probar el volumen de entrada, basta con que hable al micrófono.
-	</text_editor>
-	<volume_slider name="mic_volume_slider" tool_tip="Cambie el volumen usando este deslizable"/>
-	<text name="wait_text">
-		Por favor, espere
-	</text>
-	<string name="default_text">
-		Por defecto
-	</string>
-</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_friends.xml b/indra/newview/skins/default/xui/es/panel_friends.xml
deleted file mode 100644
index e1cac7c2c3..0000000000
--- a/indra/newview/skins/default/xui/es/panel_friends.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="friends">
-	<string name="Multiple">
-		Varios amigos
-	</string>
-	<scroll_list name="friend_list" tool_tip="Para seleccionar a varios amigos, mantenga pulsado Ctrl o Mays. mientras les va pulsando.">
-		<column name="icon_online_status" tool_tip="Estado de conexión"/>
-		<column label="Nombre" name="friend_name" tool_tip="Nombre"/>
-		<column name="icon_visible_online" tool_tip="El amigo puede ver cuándo está conectado"/>
-		<column name="icon_visible_map" tool_tip="El amigo puede localizarle en el mapa"/>
-		<column name="icon_edit_mine" tool_tip="El amigo puede editar, borrar o tomar sus objetos"/>
-		<column name="icon_edit_theirs" tool_tip="Puede editar los objetos de este amigo"/>
-	</scroll_list>
-	<button label="MI/Llamada" name="im_btn" tool_tip="Abrir sesión de mensajes instantáneos"/>
-	<button label="Perfil" name="profile_btn" tool_tip="Mostrar la imagen, los grupos, y otra información"/>
-	<button label="Teleporte" name="offer_teleport_btn" tool_tip="Ofrecer a este amigo teleportarle hasta su posición"/>
-	<button label="Pagar" name="pay_btn" tool_tip="Dar dólares Linden (L$) a este amigo"/>
-	<button label="Quitar" name="remove_btn" tool_tip="Quitar a esta persona de su lista de amigos"/>
-	<button label="Añadir" name="add_btn" tool_tip="Ofrecer amistad a un Residente"/>
-</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_groups.xml b/indra/newview/skins/default/xui/es/panel_groups.xml
deleted file mode 100644
index 232de85522..0000000000
--- a/indra/newview/skins/default/xui/es/panel_groups.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="groups">
-	<scroll_list bottom="50" name="group list"/>
-	<text bottom="16" height="32" name="groupdesc" width="268">
-		El grupo que tiene activado actualmente se
-muestra en negrilla.
-	</text>
-	<text bottom="3" name="groupcount" width="268">
-		Pertenece a [COUNT] grupo/s (de un máximo de [MAX]).
-	</text>
-	<button label="MI/Llamar" name="IM" tool_tip="Abrir una sesión de mensajes instantáneos"/>
-	<button label="Información" name="Info"/>
-	<button label="Activar" name="Activate"/>
-	<button label="Abandonar" name="Leave"/>
-	<button label="Crear..." name="Create"/>
-	<button label="Buscar..." name="Search..."/>
-</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_nearby_chat.xml b/indra/newview/skins/default/xui/es/panel_nearby_chat.xml
deleted file mode 100644
index 986c109c41..0000000000
--- a/indra/newview/skins/default/xui/es/panel_nearby_chat.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<!-- All our XML is utf-8 encoded. -->
-<panel name="nearby_chat">
-	<panel name="chat_caption">
-		<text name="sender_name">
-			CHAT
-		</text>
-	</panel>
-</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_online_status.xml b/indra/newview/skins/default/xui/es/panel_online_status.xml
deleted file mode 100644
index fdc489f375..0000000000
--- a/indra/newview/skins/default/xui/es/panel_online_status.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="friend_online_status" name="friend_online_status"/>
diff --git a/indra/newview/skins/default/xui/es/panel_region_general_layout.xml b/indra/newview/skins/default/xui/es/panel_region_general_layout.xml
deleted file mode 100644
index 9ff88e2f79..0000000000
--- a/indra/newview/skins/default/xui/es/panel_region_general_layout.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Región" name="General">
-	<text name="region_text_lbl">
-		Región:
-	</text>
-	<text name="region_text">
-		desconocida
-	</text>
-	<text name="version_channel_text_lbl">
-		Versión:
-	</text>
-	<text name="version_channel_text">
-		desconocida
-	</text>
-	<text name="region_type_lbl">
-		Tipo:
-	</text>
-	<text name="region_type">
-		desconocido
-	</text>
-	<check_box label="No permitir modificar el terreno" name="block_terraform_check"/>
-	<check_box label="Prohibir volar" name="block_fly_check"/>
-	<check_box label="Permitir el daño" name="allow_damage_check"/>
-	<check_box label="Impedir los &apos;empujones&apos;" name="restrict_pushobject"/>
-	<check_box label="Permitir la reventa del terreno" name="allow_land_resell_check"/>
-	<check_box label="Permitir unir/dividir el terreno" name="allow_parcel_changes_check"/>
-	<check_box label="Bloquear el mostrar el terreno en la búsqueda" name="block_parcel_search_check" tool_tip="Permite que la gente vea esta región y sus parcelas en los resultados de la búsqueda"/>
-	<spinner label="Nº máximo de avatares" name="agent_limit_spin"/>
-	<spinner label="Plus de objetos" name="object_bonus_spin"/>
-	<text label="Calificación" name="access_text">
-		Calificación:
-	</text>
-	<combo_box label="Moderado" name="access_combo">
-		<combo_box.item label="Adulto" name="Adult"/>
-		<combo_box.item label="Moderado" name="Mature"/>
-		<combo_box.item label="General" name="PG"/>
-	</combo_box>
-	<button label="Aplicar" name="apply_btn"/>
-	<button label="Teleportar a su Base a un Residente..." name="kick_btn"/>
-	<button label="Teleportar a sus Bases a todos los Residentes..." name="kick_all_btn"/>
-	<button label="Enviar un mensaje a toda la región..." name="im_btn"/>
-	<button label="Administrar el Punto de Teleporte..." name="manage_telehub_btn"/>
-</panel>
diff --git a/indra/newview/skins/default/xui/fr/floater_customize.xml b/indra/newview/skins/default/xui/fr/floater_customize.xml
deleted file mode 100644
index ff407b25c1..0000000000
--- a/indra/newview/skins/default/xui/fr/floater_customize.xml
+++ /dev/null
@@ -1,530 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater customize" title="APPARENCE">
-	<tab_container name="customize tab container" tab_min_width="150">
-		<text label="Parties du corps" name="body_parts_placeholder">
-			Parties du corps
-		</text>
-		<panel label="Silhouette" left="154" name="Shape" width="389">
-			<button label="Rétablir" label_selected="Rétablir" name="Revert"/>
-			<button label="Corps" label_selected="Corps" name="Body"/>
-			<button label="Tête" label_selected="Tête" name="Head"/>
-			<button label="Yeux" label_selected="Yeux" name="Eyes"/>
-			<button label="Oreilles" label_selected="Oreilles" name="Ears"/>
-			<button label="Nez" label_selected="Nez" name="Nose"/>
-			<button label="Bouche" label_selected="Bouche" name="Mouth"/>
-			<button label="Menton" label_selected="Menton" name="Chin"/>
-			<button label="Torse" label_selected="Torse" name="Torso"/>
-			<button label="Jambes" label_selected="Jambes" name="Legs"/>
-			<radio_group name="sex radio">
-				<radio_item label="Femme" name="radio" value="0"/>
-				<radio_item label="Homme" name="radio2" value="1"/>
-			</radio_group>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: impossible de modifier
-			</text>
-			<text name="title_loading">
-				[DESC]: en cours de chargement...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non portée
-			</text>
-			<text name="path">
-				Emplacement : [PATH]
-			</text>
-			<text name="not worn instructions">
-				Pour changer de silhouette, faites-en glisser une de votre inventaire à votre avatar. Vous pouvez aussi en créer une nouvelle et la porter.
-			</text>
-			<text name="no modify instructions">
-				Vous n&apos;avez pas la permission de modifier cet objet.
-			</text>
-			<text name="Item Action Label" right="92">
-				Silhouette :
-			</text>
-			<button label="Créer une silhouette" label_selected="Créer une silhouette" name="Create New"/>
-			<button label="Enregistrer" label_selected="Enregistrer" name="Save"/>
-			<button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/>
-		</panel>
-		<panel label="Peau" name="Skin">
-			<button label="Couleur" label_selected="Couleur" name="Skin Color" width="84"/>
-			<button label="Détails visage" label_selected="Détails visage" name="Face Detail" width="84"/>
-			<button label="Maquillage" label_selected="Maquillage" name="Makeup" width="84"/>
-			<button label="Détails corps" label_selected="Détails corps" name="Body Detail" width="84"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: impossible de modifier
-			</text>
-			<text name="title_loading">
-				[DESC]: en cours de chargement...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non portée
-			</text>
-			<text name="path">
-				Emplacement : [PATH]
-			</text>
-			<text name="not worn instructions">
-				Pour changer de peau, faites-en glisser une à partir de votre inventaire. Vous pouvez aussi en créer une nouvelle et la porter.
-			</text>
-			<text name="no modify instructions">
-				Vous n&apos;avez pas la permission de modifier cet objet.
-			</text>
-			<text name="Item Action Label" right="92">
-				Peau :
-			</text>
-			<texture_picker label="Tatouages tête" name="Head Tattoos" tool_tip="Cliquez pour sélectionner une image" width="78"/>
-			<texture_picker label="Tatouages haut" name="Upper Tattoos" tool_tip="Cliquez pour sélectionner une image" width="78"/>
-			<texture_picker label="Tatouages bas" name="Lower Tattoos" tool_tip="Cliquez pour sélectionner une image" width="78"/>
-			<button label="Créer une peau" label_selected="Créer une peau" name="Create New"/>
-			<button label="Enregistrer" label_selected="Enregistrer" name="Save"/>
-			<button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/>
-			<button label="Rétablir" label_selected="Rétablir" name="Revert"/>
-		</panel>
-		<panel label="Cheveux" name="Hair">
-			<button label="Couleur" label_selected="Couleur" name="Color"/>
-			<button label="Style" label_selected="Style" name="Style"/>
-			<button label="Sourcils" label_selected="Sourcils" name="Eyebrows"/>
-			<button label="Pilosité" label_selected="Pilosité" name="Facial"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: impossible de modifier
-			</text>
-			<text name="title_loading">
-				[DESC]: en cours de chargement...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non portés
-			</text>
-			<text name="path">
-				Emplacement : [PATH]
-			</text>
-			<text name="not worn instructions">
-				Pour changer de cheveux, faites-en glisser à partir de votre inventaire. Vous pouvez aussi en créer de nouveaux et les porter.
-			</text>
-			<text name="no modify instructions">
-				Vous n&apos;avez pas la permission de modifier cet objet.
-			</text>
-			<text name="Item Action Label" right="92">
-				Cheveux :
-			</text>
-			<texture_picker label="Texture" name="Texture" tool_tip="Cliquez pour sélectionner une image"/>
-			<button label="Créer des cheveux" label_selected="Créer des cheveux" name="Create New"/>
-			<button label="Enregistrer" label_selected="Enregistrer" name="Save"/>
-			<button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/>
-			<button label="Rétablir" label_selected="Rétablir" name="Revert"/>
-		</panel>
-		<panel label="Yeux" name="Eyes">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: impossible de modifier
-			</text>
-			<text name="title_loading">
-				[DESC]: en cours de chargement...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non portés
-			</text>
-			<text name="path">
-				Emplacement : [PATH]
-			</text>
-			<text name="not worn instructions">
-				Pour changer d&apos;yeux, faites-en glisser une paire de votre inventaire à votre avatar. Vous pouvez aussi en créer de nouveaux et les porter.
-			</text>
-			<text name="no modify instructions">
-				Vous n&apos;avez pas la permission de modifier cet objet.
-			</text>
-			<text name="Item Action Label" right="92">
-				Yeux :
-			</text>
-			<texture_picker label="Iris" name="Iris" tool_tip="Cliquez pour sélectionner une image"/>
-			<button label="Créer des yeux" label_selected="Créer des yeux" name="Create New"/>
-			<button label="Enregistrer" label_selected="Enregistrer" name="Save"/>
-			<button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/>
-			<button label="Rétablir" label_selected="Rétablir" name="Revert"/>
-		</panel>
-		<text label="Habits" name="clothes_placeholder">
-			Habits
-		</text>
-		<panel label="Chemise" name="Shirt">
-			<texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image" width="74"/>
-			<color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/>
-			<button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/>
-			<button label="Créer une chemise" label_selected="Créer une chemise" name="Create New"/>
-			<button label="Enregistrer" label_selected="Enregistrer" name="Save"/>
-			<button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/>
-			<button label="Rétablir" label_selected="Rétablir" name="Revert"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: impossible de modifier
-			</text>
-			<text name="title_loading">
-				[DESC]: en cours de chargement...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non portée
-			</text>
-			<text name="path">
-				Emplacement : [PATH]
-			</text>
-			<text name="not worn instructions">
-				Pour changer de chemise, faites-en glisser une à partir de votre inventaire. Vous pouvez aussi en créer une nouvelle et la porter.
-			</text>
-			<text name="no modify instructions">
-				Vous n&apos;avez pas la permission de modifier cet objet.
-			</text>
-			<text name="Item Action Label" right="92">
-				Chemise :
-			</text>
-		</panel>
-		<panel label="Pantalon" name="Pants">
-			<texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image" width="74"/>
-			<color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/>
-			<button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/>
-			<button label="Créer un pantalon" label_selected="Créer un pantalon" name="Create New"/>
-			<button label="Enregistrer" label_selected="Enregistrer" name="Save"/>
-			<button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/>
-			<button label="Rétablir" label_selected="Rétablir" name="Revert"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: impossible de modifier
-			</text>
-			<text name="title_loading">
-				[DESC]: en cours de chargement...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non porté
-			</text>
-			<text name="path">
-				Emplacement : [PATH]
-			</text>
-			<text name="not worn instructions">
-				Pour changer de pantalon, faites-en glisser un à partir de votre inventaire. Vous pouvez aussi en créer un nouveau et le porter.
-			</text>
-			<text name="no modify instructions">
-				Vous n&apos;avez pas la permission de modifier cet objet.
-			</text>
-			<text name="Item Action Label" right="92">
-				Pantalon :
-			</text>
-		</panel>
-		<panel label="Chaussures" name="Shoes">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: impossible de modifier
-			</text>
-			<text name="title_loading">
-				[DESC]: en cours de chargement...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non portées
-			</text>
-			<text name="path">
-				Emplacement : [PATH]
-			</text>
-			<text name="not worn instructions">
-				Pour changer de chaussures, faites-en glisser une paire de votre inventaire à votre avatar. Vous pouvez aussi en créer des nouvelles et les porter.
-			</text>
-			<button label="Créer des chaussures" label_selected="Créer des chaussures" name="Create New"/>
-			<text name="no modify instructions">
-				Vous n&apos;avez pas la permission de modifier cet objet.
-			</text>
-			<text name="Item Action Label" right="92">
-				Chaussures :
-			</text>
-			<texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image" width="74"/>
-			<color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/>
-			<button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/>
-			<button label="Enregistrer" label_selected="Enregistrer" name="Save"/>
-			<button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/>
-			<button label="Rétablir" label_selected="Rétablir" name="Revert"/>
-		</panel>
-		<panel label="Chaussettes" name="Socks">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: impossible de modifier
-			</text>
-			<text name="title_loading">
-				[DESC]: en cours de chargement...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non portées
-			</text>
-			<text name="path">
-				Emplacement : [PATH]
-			</text>
-			<text name="not worn instructions">
-				Pour changer de chaussettes, faites-en glisser une paire à partir de votre inventaire. Vous pouvez aussi en créer des nouvelles et les porter.
-			</text>
-			<button label="Créer des chaussettes" label_selected="Créer des chaussettes" name="Create New"/>
-			<text name="no modify instructions">
-				Vous n&apos;avez pas la permission de modifier cet objet.
-			</text>
-			<text name="Item Action Label" right="92">
-				Chaussettes :
-			</text>
-			<texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image" width="74"/>
-			<color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/>
-			<button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/>
-			<button label="Enregistrer" label_selected="Enregistrer" name="Save"/>
-			<button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/>
-			<button label="Rétablir" label_selected="Rétablir" name="Revert"/>
-		</panel>
-		<panel label="Veste" name="Jacket">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: impossible de modifier
-			</text>
-			<text name="title_loading">
-				[DESC]: en cours de chargement...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non portée
-			</text>
-			<text name="path">
-				Emplacement : [PATH]
-			</text>
-			<text name="not worn instructions">
-				Pour changer de veste, faites-en glisser une à partir de votre inventaire. Vous pouvez aussi en créer une nouvelle et la porter.
-			</text>
-			<button label="Créer une veste" label_selected="Créer une veste" name="Create New"/>
-			<text name="no modify instructions">
-				Vous n&apos;avez pas la permission de modifier cet objet.
-			</text>
-			<text name="Item Action Label" right="92">
-				Veste :
-			</text>
-			<texture_picker label="Tissu (dessus)" name="Upper Fabric" tool_tip="Cliquez pour sélectionner une image" width="81"/>
-			<texture_picker label="Tissu (dessous)" name="Lower Fabric" tool_tip="Cliquez pour sélectionner une image" width="81"/>
-			<color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="81"/>
-			<button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/>
-			<button label="Enregistrer" label_selected="Enregistrer" name="Save"/>
-			<button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/>
-			<button label="Rétablir" label_selected="Rétablir" name="Revert"/>
-		</panel>
-		<panel label="Gants" name="Gloves">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: impossible de modifier
-			</text>
-			<text name="title_loading">
-				[DESC]: en cours de chargement...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non portés
-			</text>
-			<text name="path">
-				Emplacement : [PATH]
-			</text>
-			<text name="not worn instructions">
-				Pour changer de gants, faites-en glisser une paire à partir de votre inventaire. Vous pouvez aussi en créer de nouveaux et les porter.
-			</text>
-			<button label="Créer des gants" label_selected="Créer des gants" name="Create New"/>
-			<text name="no modify instructions">
-				Vous n&apos;avez pas la permission de modifier cet objet.
-			</text>
-			<text name="Item Action Label" right="92">
-				Gants :
-			</text>
-			<texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image" width="74"/>
-			<color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/>
-			<button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/>
-			<button label="Enregistrer" label_selected="Enregistrer" name="Save"/>
-			<button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/>
-			<button label="Rétablir" label_selected="Rétablir" name="Revert"/>
-		</panel>
-		<panel label="Débardeur" name="Undershirt">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: impossible de modifier
-			</text>
-			<text name="title_loading">
-				[DESC]: en cours de chargement...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non porté
-			</text>
-			<text name="path">
-				Emplacement : [PATH]
-			</text>
-			<text name="not worn instructions">
-				Pour changer de débardeur, faites-en glisser un à partir de votre inventaire. Vous pouvez aussi en créer un nouveau et le porter.
-			</text>
-			<button label="Créer un débardeur" label_selected="Créer un débardeur" name="Create New"/>
-			<text name="no modify instructions">
-				Vous n&apos;avez pas la permission de modifier cet objet.
-			</text>
-			<text name="Item Action Label">
-				Débardeur :
-			</text>
-			<texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image" width="74"/>
-			<color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/>
-			<button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/>
-			<button label="Enregistrer" label_selected="Enregistrer" name="Save"/>
-			<button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/>
-			<button label="Rétablir" label_selected="Rétablir" name="Revert"/>
-		</panel>
-		<panel label="Caleçon" name="Underpants">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: impossible de modifier
-			</text>
-			<text name="title_loading">
-				[DESC]: en cours de chargement...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non porté
-			</text>
-			<text name="path">
-				Emplacement : [PATH]
-			</text>
-			<text name="not worn instructions">
-				Pour changer de caleçon, faites-en glisser un à partir de votre inventaire. Vous pouvez aussi en créer un nouveau et le porter.
-			</text>
-			<button label="Créer un caleçon" label_selected="Créer un caleçon" name="Create New"/>
-			<text name="no modify instructions">
-				Vous n&apos;avez pas la permission de modifier cet objet.
-			</text>
-			<text name="Item Action Label">
-				Caleçon :
-			</text>
-			<texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image" width="74"/>
-			<color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/>
-			<button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/>
-			<button label="Enregistrer" label_selected="Enregistrer" name="Save"/>
-			<button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/>
-			<button label="Rétablir" label_selected="Rétablir" name="Revert"/>
-		</panel>
-		<panel label="Jupe" name="Skirt">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: impossible de modifier
-			</text>
-			<text name="title_loading">
-				[DESC]: en cours de chargement...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non portée
-			</text>
-			<text name="path">
-				Emplacement : [PATH]
-			</text>
-			<text name="not worn instructions">
-				Pour changer de jupe, faites-en glisser une à partir de votre inventaire. Vous pouvez aussi en créer une nouvelle et la porter.
-			</text>
-			<button label="Créer une jupe" label_selected="Créer une jupe" name="Create New"/>
-			<text name="no modify instructions">
-				Vous n&apos;avez pas la permission de modifier cet objet.
-			</text>
-			<text name="Item Action Label" right="92">
-				Jupe :
-			</text>
-			<texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image" width="74"/>
-			<color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/>
-			<button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/>
-			<button label="Enregistrer" label_selected="Enregistrer" name="Save"/>
-			<button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/>
-			<button label="Rétablir" label_selected="Rétablir" name="Revert"/>
-		</panel>
-		<panel label="Tatouage" name="Tattoo">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: impossible de modifier
-			</text>
-			<text name="title_loading">
-				[DESC]: en cours de chargement...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non porté
-			</text>
-			<text name="path">
-				Dans [PATH]
-			</text>
-			<text name="not worn instructions">
-				Pour changer de tatouage, faites-en glisser un de votre inventaire à votre avatar. Vous pouvez aussi en créer un nouveau et le porter.
-			</text>
-			<button label="Créer un nouveau tatouage" label_selected="Créer un nouveau tatouage" name="Create New"/>
-			<text name="no modify instructions">
-				Vous n&apos;avez pas le droit de modifier cet objet.
-			</text>
-			<text name="Item Action Label">
-				Tatouage :
-			</text>
-			<texture_picker label="Tatouage tête" name="Head Tattoo" tool_tip="Cliquez pour sélectionner une image"/>
-			<texture_picker label="Tatouage haut" name="Upper Tattoo" tool_tip="Cliquez pour sélectionner une image"/>
-			<texture_picker label="Tatouage bas" name="Lower Tattoo" tool_tip="Cliquez pour sélectionner une image"/>
-			<button label="Enlever" label_selected="Enlever" name="Take Off"/>
-			<button label="Enregistrer" label_selected="Enregistrer" name="Save"/>
-			<button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/>
-			<button label="Rétablir" label_selected="Rétablir" name="Revert"/>
-		</panel>
-		<panel label="Alpha" name="Alpha">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: impossible de modifier
-			</text>
-			<text name="title_loading">
-				[DESC]: en cours de chargement...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non porté
-			</text>
-			<text name="path">
-				Dans [PATH]
-			</text>
-			<text name="not worn instructions">
-				Pour changer de masque alpha, faites-en glisser un de votre inventaire à votre avatar. Vous pouvez aussi en créer un nouveau et le porter.
-			</text>
-			<button label="Créer un nouvel alpha" label_selected="Créer un nouvel alpha" name="Create New"/>
-			<text name="no modify instructions">
-				Vous n&apos;avez pas le droit de modifier cet objet.
-			</text>
-			<text name="Item Action Label">
-				Alpha :
-			</text>
-			<texture_picker label="Alpha bas" name="Lower Alpha" tool_tip="Cliquez pour sélectionner une image"/>
-			<texture_picker label="Alpha haut" name="Upper Alpha" tool_tip="Cliquez pour sélectionner une image"/>
-			<texture_picker label="Alpha tête" name="Head Alpha" tool_tip="Cliquez pour sélectionner une image"/>
-			<texture_picker label="Alpha yeux" name="Eye Alpha" tool_tip="Cliquez pour sélectionner une image"/>
-			<texture_picker label="Alpha cheveux" name="Hair Alpha" tool_tip="Cliquez pour sélectionner une image"/>
-			<button label="Enlever" label_selected="Enlever" name="Take Off"/>
-			<button label="Enregistrer" label_selected="Enregistrer" name="Save"/>
-			<button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/>
-			<button label="Rétablir" label_selected="Rétablir" name="Revert"/>
-		</panel>
-	</tab_container>
-	<scroll_container left="251" name="panel_container"/>
-	<button label="Infos scripts" label_selected="Infos scripts" name="script_info" tool_tip="Afficher les scripts attachés à votre avatar"/>
-	<button label="Créer tenue" label_selected="Créer une tenue..." name="make_outfit_btn"/>
-	<button label="Annuler" label_selected="Annuler" name="Cancel"/>
-	<button label="OK" label_selected="OK" name="Ok"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_device_settings.xml b/indra/newview/skins/default/xui/fr/floater_device_settings.xml
deleted file mode 100644
index f5994cb604..0000000000
--- a/indra/newview/skins/default/xui/fr/floater_device_settings.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_device_settings" title="PARAMÈTRES DU MATÉRIEL UTILISÉ POUR LE CHAT VOCAL"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_first_time_tip.xml b/indra/newview/skins/default/xui/fr/floater_first_time_tip.xml
deleted file mode 100644
index a1c6a19e8c..0000000000
--- a/indra/newview/skins/default/xui/fr/floater_first_time_tip.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="set_name_in_the_cladd">
-	<check_box label="Désactiver les astuces" name="DontShowFirstTimeTip_checkbox"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_im.xml b/indra/newview/skins/default/xui/fr/floater_im.xml
deleted file mode 100644
index 15b01dbf12..0000000000
--- a/indra/newview/skins/default/xui/fr/floater_im.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<multi_floater name="im_floater" title="Message instantané">
-	<text name="only_user_message">
-		Vous êtes le seul résident participant à cette session.
-	</text>
-	<text name="offline_message">
-		[FIRST] [LAST] est déconnecté(e).
-	</text>
-	<string name="invite_message">
-		Pour accepter ce chat vocal/vous connecter, cliquez sur le bouton [BUTTON NAME].
-	</string>
-	<string name="muted_message">
-		Vous ignorez ce résident. Si vous lui envoyez un message, il ne sera plus ignoré.
-	</string>
-	<string name="generic_request_error">
-		Erreur lors de la requête, veuillez réessayer ultérieurement.
-	</string>
-	<string name="insufficient_perms_error">
-		Vous n&apos;avez pas les droits requis.
-	</string>
-	<string name="session_does_not_exist_error">
-		La session a expiré
-	</string>
-	<string name="no_ability_error">
-		Vous n&apos;avez pas ce pouvoir.
-	</string>
-	<string name="not_a_mod_error">
-		Vous n&apos;êtes pas modérateur de session.
-	</string>
-	<string name="muted_error">
-		Un modérateur de groupe a désactivé votre chat écrit.
-	</string>
-	<string name="add_session_event">
-		Impossible d&apos;ajouter des résidents à la session de chat avec [RECIPIENT].
-	</string>
-	<string name="message_session_event">
-		Impossible d&apos;envoyer votre message à la session de chat avec [RECIPIENT].
-	</string>
-	<string name="removed_from_group">
-		Vous avez été supprimé du groupe.
-	</string>
-	<string name="close_on_no_ability">
-		Vous ne pouvez plus participer à la session de chat.
-	</string>
-</multi_floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_my_friends.xml b/indra/newview/skins/default/xui/fr/floater_my_friends.xml
deleted file mode 100644
index db7c026e22..0000000000
--- a/indra/newview/skins/default/xui/fr/floater_my_friends.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_my_friends" title="CONTACTS">
-	<tab_container name="friends_and_groups">
-		<panel label="Amis" name="friends_panel"/>
-		<panel label="Groupes" name="groups_panel"/>
-	</tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/fr/floater_outfit_save_as.xml
deleted file mode 100644
index d77dfbdf82..0000000000
--- a/indra/newview/skins/default/xui/fr/floater_outfit_save_as.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="modal container" title="Enregistrer la tenue">
-	<button label="Enregistrer" label_selected="Enregistrer" name="Save"/>
-	<button label="Annuler" label_selected="Annuler" name="Cancel"/>
-	<text name="Save item as:">
-		Enregistrer ce que je porte
-comme une nouvelle tenue :
-	</text>
-	<line_editor name="name ed">
-		[DESC] (nouv.)
-	</line_editor>
-</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_classified.xml b/indra/newview/skins/default/xui/fr/floater_preview_classified.xml
deleted file mode 100644
index 23f86d88b9..0000000000
--- a/indra/newview/skins/default/xui/fr/floater_preview_classified.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="classified_preview" title="INFOS SUR LA PETITE ANNONCE">
-	<floater.string name="Title">
-		Petite annonce : [NAME]
-	</floater.string>
-</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_event.xml b/indra/newview/skins/default/xui/fr/floater_preview_event.xml
deleted file mode 100644
index 7590c43af1..0000000000
--- a/indra/newview/skins/default/xui/fr/floater_preview_event.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="event_preview" title="INFORMATIONS SUR LES ÉVÉNEMENTS">
-	<floater.string name="Title">
-		Événement : [NAME]
-	</floater.string>
-</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/fr/floater_preview_gesture_info.xml
deleted file mode 100644
index 4a91992f6a..0000000000
--- a/indra/newview/skins/default/xui/fr/floater_preview_gesture_info.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="RACCOURCI DU GESTE"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_gesture_shortcut.xml b/indra/newview/skins/default/xui/fr/floater_preview_gesture_shortcut.xml
deleted file mode 100644
index d866c32882..0000000000
--- a/indra/newview/skins/default/xui/fr/floater_preview_gesture_shortcut.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="RACCOURCI DU GESTE">
-	<text name="trigger_label">
-		Chat :
-	</text>
-	<text name="key_label">
-		Clavier :
-	</text>
-	<combo_box label="Aucun" name="modifier_combo" width="62"/>
-	<combo_box label="Aucun" name="key_combo" width="62"/>
-	<text name="replace_text" tool_tip="Remplacez le ou les mots-clés par ces mots. Par exemple, si vous remplacez le mot-clé &quot; bonjour &quot; par &quot; salut &quot;, le chat &quot; Je voulais te dire bonjour &quot; devient &quot; Je voulais te dire salut &quot; et le geste correspondant s&apos;affiche.">
-		Remplacer :
-	</text>
-	<line_editor name="replace_editor" tool_tip="Remplacez le ou les mots-clés par ces mots. Par exemple, si vous remplacez le mot-clé &quot; bonjour &quot; par &quot; salut &quot;, le chat &quot; Je voulais te dire bonjour &quot; devient &quot; Je voulais te dire salut &quot; et le geste correspondant s&apos;affiche."/>
-</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/fr/floater_preview_gesture_steps.xml
deleted file mode 100644
index 4a91992f6a..0000000000
--- a/indra/newview/skins/default/xui/fr/floater_preview_gesture_steps.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="RACCOURCI DU GESTE"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_statistics.xml b/indra/newview/skins/default/xui/fr/floater_statistics.xml
deleted file mode 100644
index a2e3c199ab..0000000000
--- a/indra/newview/skins/default/xui/fr/floater_statistics.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="stats floater" title="STATISTIQUES"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/fr/floater_wearable_save_as.xml
deleted file mode 100644
index 5dda347fcf..0000000000
--- a/indra/newview/skins/default/xui/fr/floater_wearable_save_as.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="modal container">
-	<button label="Enregistrer" label_selected="Enregistrer" name="Save"/>
-	<button label="Annuler" label_selected="Annuler" name="Cancel"/>
-	<text name="Save item as:">
-		Enregistrer l&apos;objet dans mon inventaire comme :
-	</text>
-	<line_editor name="name ed">
-		Nouveau [DESC]
-	</line_editor>
-</floater>
diff --git a/indra/newview/skins/default/xui/fr/panel_audio_device.xml b/indra/newview/skins/default/xui/fr/panel_audio_device.xml
deleted file mode 100644
index 2caa013f54..0000000000
--- a/indra/newview/skins/default/xui/fr/panel_audio_device.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="device_settings">
-	<text name="Audio Devices">
-		Matériel audio
-	</text>
-	<text name="Input device (microphone):">
-		Périphérique d&apos;entrée (micro) :
-	</text>
-	<text name="Output device (speakers):" width="300">
-		Périphérique de sortie (haut-parleurs) :
-	</text>
-	<text name="Input level:">
-		Volume d&apos;entrée
-	</text>
-	<text_editor name="voice_intro_text1">
-		Pour que les autres résidents vous entendent plus ou moins fort, utilisez le curseur. Pour tester le volume, parlez dans le micro.
-	</text_editor>
-	<volume_slider name="mic_volume_slider" tool_tip="Réglez le volume avec ce curseur."/>
-	<text name="wait_text">
-		Veuillez patienter
-	</text>
-	<string name="default_text">
-		Défaut
-	</string>
-</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_friends.xml b/indra/newview/skins/default/xui/fr/panel_friends.xml
deleted file mode 100644
index ad9e3daf3d..0000000000
--- a/indra/newview/skins/default/xui/fr/panel_friends.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="friends">
-	<string name="Multiple">
-		Amis multiples
-	</string>
-	<scroll_list name="friend_list" tool_tip="Pour sélectionner plusieurs amis, cliquez en maintenant la touche Maj ou Ctrl appuyée">
-		<column name="icon_online_status" tool_tip="Statut en ligne"/>
-		<column label="Nom" name="friend_name" tool_tip="Nom"/>
-		<column name="icon_visible_online" tool_tip="Votre ami voit si vous êtes connecté(e)"/>
-		<column name="icon_visible_map" tool_tip="Votre ami peut vous situer sur la carte"/>
-		<column name="icon_edit_mine" tool_tip="Votre ami peut modifier, supprimer ou prendre vos objets"/>
-		<column name="icon_edit_theirs" tool_tip="Vous pouvez modifier les objets de cet ami"/>
-	</scroll_list>
-	<button label="IM/Appel" name="im_btn" tool_tip="Envoyez un IM à ce résident"/>
-	<button label="Profil" name="profile_btn" tool_tip="Consultez le profil de ce résident (photos, groupes et autres infos)"/>
-	<button label="Téléporter" name="offer_teleport_btn" tool_tip="Proposez à cet ami d&apos;être téléporté là où vous êtes"/>
-	<button label="Payer" name="pay_btn" tool_tip="Donnez des L$ à cet ami"/>
-	<button label="Supprimer" name="remove_btn" tool_tip="Supprimez ce résident de votre liste d&apos;amis"/>
-	<button label="Ajouter" name="add_btn" tool_tip="Proposer à un résident de devenir votre ami"/>
-</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_groups.xml b/indra/newview/skins/default/xui/fr/panel_groups.xml
deleted file mode 100644
index 4cda98b9f7..0000000000
--- a/indra/newview/skins/default/xui/fr/panel_groups.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="groups">
-	<scroll_list bottom="50" name="group list"/>
-	<text name="groupdesc">
-		Le groupe actif est en gras.
-	</text>
-	<text name="groupcount" width="280">
-		Vous appartenez à [COUNT] groupes ([MAX] max).
-	</text>
-	<button label="IM/Appel" name="IM" tool_tip="Ouvrir une session de messagerie instantanée"/>
-	<button label="Infos" name="Info"/>
-	<button label="Activer" name="Activate"/>
-	<button label="Quitter" name="Leave"/>
-	<button label="Créer..." name="Create"/>
-	<button label="Rechercher..." name="Search..."/>
-</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_nearby_chat.xml b/indra/newview/skins/default/xui/fr/panel_nearby_chat.xml
deleted file mode 100644
index b506a202bd..0000000000
--- a/indra/newview/skins/default/xui/fr/panel_nearby_chat.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<!-- All our XML is utf-8 encoded. -->
-<panel name="nearby_chat">
-	<panel name="chat_caption">
-    	<text 
-	name="sender_name" 
-width="170">CHAT PRÈS DE MOI</text>
-	</panel>
-</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_online_status.xml b/indra/newview/skins/default/xui/fr/panel_online_status.xml
deleted file mode 100644
index fdc489f375..0000000000
--- a/indra/newview/skins/default/xui/fr/panel_online_status.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="friend_online_status" name="friend_online_status"/>
diff --git a/indra/newview/skins/default/xui/fr/panel_region_general_layout.xml b/indra/newview/skins/default/xui/fr/panel_region_general_layout.xml
deleted file mode 100644
index 663ae55134..0000000000
--- a/indra/newview/skins/default/xui/fr/panel_region_general_layout.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Région" name="General">
-	<text name="region_text_lbl">
-		Région :
-	</text>
-	<text left_delta="56" name="region_text">
-		inconnu
-	</text>
-	<text name="version_channel_text_lbl">
-		Version :
-	</text>
-	<text left_delta="56" name="version_channel_text">
-		inconnu
-	</text>
-	<text name="region_type_lbl">
-		Type :
-	</text>
-	<text left_delta="56" name="region_type">
-		inconnu
-	</text>
-	<check_box label="Interdire le terraformage" name="block_terraform_check"/>
-	<check_box label="Interdire le vol" name="block_fly_check"/>
-	<check_box label="Autoriser les dégâts" name="allow_damage_check"/>
-	<check_box label="Interdire les bousculades" name="restrict_pushobject"/>
-	<check_box label="Autoriser la revente de terrains" name="allow_land_resell_check"/>
-	<check_box label="Autoriser la fusion/division de terrains" name="allow_parcel_changes_check"/>
-	<check_box label="Interdire l&apos;affichage du terrain dans les recherches" name="block_parcel_search_check" tool_tip="Permettre aux autres résidents de voir cette région et ses parcelles dans les résultats de recherche"/>
-	<spinner label="Nombre maximum d&apos;avatars" label_width="160" name="agent_limit_spin" width="240"/>
-	<spinner label="Bonus objet" label_width="160" name="object_bonus_spin" width="240"/>
-	<text label="Accès" name="access_text">
-		Catégorie :
-	</text>
-	<combo_box label="Modéré" name="access_combo">
-		<combo_box.item label="Adulte" name="Adult"/>
-		<combo_box.item label="Modéré" name="Mature"/>
-		<combo_box.item label="Général" name="PG"/>
-	</combo_box>
-	<button label="Appliquer" name="apply_btn"/>
-	<button label="Téléporter un résident chez lui…" name="kick_btn"/>
-	<button label="Téléporter tous les résidents chez eux…" name="kick_all_btn"/>
-	<button label="Envoyer un message à la région..." name="im_btn"/>
-	<button label="Gérer le téléhub..." name="manage_telehub_btn"/>
-</panel>
diff --git a/indra/newview/skins/default/xui/it/floater_customize.xml b/indra/newview/skins/default/xui/it/floater_customize.xml
deleted file mode 100644
index 63c26b4d73..0000000000
--- a/indra/newview/skins/default/xui/it/floater_customize.xml
+++ /dev/null
@@ -1,530 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater customize" title="ASPETTO">
-	<tab_container name="customize tab container" tab_min_width="120">
-		<text label="Parti del corpo" name="body_parts_placeholder">
-			Parti del corpo
-		</text>
-		<panel label="Forma del corpo" left="124" name="Shape">
-			<button label="Crea una nuova forma del corpo" label_selected="Crea una nuova forma del corpo" name="Create New" width="190"/>
-			<button label="Corpo" label_selected="Corpo" name="Body"/>
-			<button label="Testa" label_selected="Testa" name="Head"/>
-			<button label="Occhi" label_selected="Occhi" name="Eyes"/>
-			<button label="Orecchie" label_selected="Orecchie" name="Ears"/>
-			<button label="Naso" label_selected="Naso" name="Nose"/>
-			<button label="Bocca" label_selected="Bocca" name="Mouth"/>
-			<button label="Mento" label_selected="Mento" name="Chin"/>
-			<button label="Torso" label_selected="Torso" name="Torso"/>
-			<button label="Gambe" label_selected="Gambe" name="Legs"/>
-			<radio_group name="sex radio">
-				<radio_item label="Femmina" name="radio" value="0"/>
-				<radio_item label="Maschio" name="radio2" value="1"/>
-			</radio_group>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: immodificabile
-			</text>
-			<text name="title_loading">
-				[DESC]: in caricamento...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non indossato
-			</text>
-			<text name="path">
-				Ubicato in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Metti una nuova figura corporea trascinandola dal tuo inventario sul tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo.
-			</text>
-			<text name="no modify instructions">
-				Non hai il permesso di modificare questo indumento.
-			</text>
-			<text name="Item Action Label">
-				Forma del corpo:
-			</text>
-			<button label="Salva" label_selected="Salva" name="Save"/>
-			<button label="Salva come..." label_selected="Salva come..." name="Save As"/>
-			<button font="SansSerifSmall" label="Annulla le modifiche" label_selected="Annulla le modifiche" name="Revert"/>
-		</panel>
-		<panel label="Pelle" name="Skin">
-			<button label="Colore della pelle" label_selected="Colore della pelle" name="Skin Color" width="115"/>
-			<button label="Dettagli della faccia" label_selected="Dettagli della faccia" name="Face Detail" width="115"/>
-			<button label="Trucco" label_selected="Trucco" name="Makeup" width="115"/>
-			<button label="Dettagli del corpo" label_selected="Dettagli del corpo" name="Body Detail" width="115"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: immodificabile
-			</text>
-			<text name="title_loading">
-				[DESC]: in caricamento...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non indossata
-			</text>
-			<text name="path">
-				Ubicata in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Per mettere una nuova pelle, trascinala dal tuo inventario sul tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo.
-			</text>
-			<text name="no modify instructions">
-				Non hai il permesso di modificare questo indumento.
-			</text>
-			<text name="Item Action Label" right="89">
-				Pelle:
-			</text>
-			<texture_picker label="Tatuaggi: testa" name="Head Tattoos" tool_tip="Clicca per scegliere un&apos;immagine" width="96"/>
-			<texture_picker label="Tatuaggi: superiori" name="Upper Tattoos" tool_tip="Clicca per scegliere un&apos;immagine" width="96"/>
-			<texture_picker label="Tatuaggi: inferiori" name="Lower Tattoos" tool_tip="Clicca per scegliere un&apos;immagine" width="96"/>
-			<button label="Crea una nuova pelle" label_selected="Crea una nuova pelle" name="Create New"/>
-			<button label="Salva" label_selected="Salva" name="Save"/>
-			<button label="Salva come..." label_selected="Salva come..." name="Save As"/>
-			<button font="SansSerifSmall" label="Annulla le modifiche" label_selected="Annulla le modifiche" name="Revert"/>
-		</panel>
-		<panel label="Capelli" name="Hair">
-			<button label="Capelli" label_selected="Colore" name="Color"/>
-			<button label="Stile" label_selected="Stile" name="Style"/>
-			<button label="Sopracciglia" label_selected="Sopracciglia" name="Eyebrows"/>
-			<button label="Facciale" label_selected="Facciale" name="Facial"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: immodificabili
-			</text>
-			<text name="title_loading">
-				[DESC]: in caricamento...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non indossati
-			</text>
-			<text name="path">
-				Ubicati in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Per cambiare capelli, trascinali dal tuo inventario sul tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo.
-			</text>
-			<text name="no modify instructions">
-				Non hai il permesso per modificare questo indumento.
-			</text>
-			<text name="Item Action Label" right="89">
-				Capelli:
-			</text>
-			<texture_picker label="Texture" name="Texture" tool_tip="Clicca per scegliere un&apos;immagine"/>
-			<button label="Crea nuovi capelli" label_selected="Crea nuovi capelli" name="Create New"/>
-			<button label="Salva" label_selected="Salva" name="Save"/>
-			<button label="Salva come..." label_selected="Salva come..." left="171" name="Save As"/>
-			<button font="SansSerifSmall" label="Annulla le modifiche" label_selected="Annulla le modifiche" name="Revert" width="120"/>
-		</panel>
-		<panel label="Occhi" name="Eyes">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: immodificabili
-			</text>
-			<text name="title_loading">
-				[DESC]: in caricamento...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non indossati
-			</text>
-			<text name="path">
-				Ubicati in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Puoi cambiare gli occhi trascinandoli dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo.
-			</text>
-			<text name="no modify instructions">
-				Non hai il permesso di modificare questo indumento.
-			</text>
-			<text name="Item Action Label" right="89">
-				Occhi:
-			</text>
-			<texture_picker label="Iride" name="Iris" tool_tip="Clicca per scegliere un&apos;immagine"/>
-			<button label="Crea nuovi occhi" label_selected="Crea nuovi occhi" name="Create New"/>
-			<button label="Salva" label_selected="Salva" name="Save"/>
-			<button label="Salva come..." label_selected="Salva come..." left="171" name="Save As"/>
-			<button font="SansSerifSmall" label="Annulla le modifiche" label_selected="Annulla le modifiche" name="Revert" width="120"/>
-		</panel>
-		<text label="Vestiti" name="clothes_placeholder">
-			Abiti
-		</text>
-		<panel label="Camicia" name="Shirt">
-			<texture_picker label="Tessuto" name="Fabric" tool_tip="Clicca per scegliere un&apos;immagine"/>
-			<color_swatch label="Colore/Tinta" name="Color/Tint" tool_tip="Clicca per aprire il selettore dei colori"/>
-			<button label="Togli" label_selected="Togli" name="Take Off"/>
-			<button label="Crea una nuova camicia" label_selected="Crea una nuova camicia" name="Create New"/>
-			<button label="Salva" label_selected="Salva" name="Save"/>
-			<button label="Salva come..." label_selected="Salva come..." left="171" name="Save As"/>
-			<button font="SansSerifSmall" label="Annulla le modifiche" label_selected="Annulla le modifiche"  name="Revert" width="120"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: immodificabile
-			</text>
-			<text name="title_loading">
-				[DESC]: in caricamento...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non indossata
-			</text>
-			<text name="path">
-				Ubicata in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Metti una nuova camicia trascinandola dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo.
-			</text>
-			<text name="no modify instructions">
-				Non hai il permesso di modificare questo indumento.
-			</text>
-			<text name="Item Action Label" right="89">
-				Camicia:
-			</text>
-		</panel>
-		<panel label="Pantaloni" name="Pants">
-			<texture_picker label="Tessuto" name="Fabric" tool_tip="Clicca per scegliere un&apos;immagine"/>
-			<color_swatch label="Colore/Tinta" name="Color/Tint" tool_tip="Clicca per aprire il selettore dei colori"/>
-			<button label="Togli" label_selected="Togli" name="Take Off"/>
-			<button label="Crea nuovi pantaloni" label_selected="Crea nuovi pantaloni" name="Create New"/>
-			<button label="Salva" label_selected="Salva" name="Save"/>
-			<button label="Salva come..." label_selected="Salva come..." left="171" name="Save As"/>
-			<button font="SansSerifSmall" label="Annulla le modifiche" label_selected="Annulla le modifiche" name="Revert" width="120"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: immodificabile
-			</text>
-			<text name="title_loading">
-				[DESC]: in caricamento...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non indossato
-			</text>
-			<text name="path">
-				Ubicati in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Metti dei nuovi pantaloni trascinandoli dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo.
-			</text>
-			<text name="no modify instructions">
-				Non hai il permesso di modificare questo indumento.
-			</text>
-			<text name="Item Action Label" right="89">
-				Pantaloni:
-			</text>
-		</panel>
-		<panel label="Scarpe" name="Shoes">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: immodificabili
-			</text>
-			<text name="title_loading">
-				[DESC]: in caricamento...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non indossate
-			</text>
-			<text name="path">
-				Ubicate in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Metti delle nuove scarpe trascinandole dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo.
-			</text>
-			<button label="Crea nuove scarpe" label_selected="Crea nuove scarpe" name="Create New"/>
-			<text name="no modify instructions">
-				Non hai il permesso di modificare questo indumento.
-			</text>
-			<text name="Item Action Label" right="89">
-				Scarpe:
-			</text>
-			<texture_picker label="Tessuto" name="Fabric" tool_tip="Clicca per scegliere un&apos;immagine"/>
-			<color_swatch label="Colore/Tinta" name="Color/Tint" tool_tip="Clicca per aprire il selettore dei colori"/>
-			<button label="Togli" label_selected="Togli" name="Take Off"/>
-			<button label="Salva" label_selected="Salva" name="Save"/>
-			<button label="Salva come..." label_selected="Salva come..." left="171" name="Save As"/>
-			<button font="SansSerifSmall" label="Annulla le modifiche" label_selected="Annulla le modifiche" name="Revert" width="120"/>
-		</panel>
-		<panel label="Calze" name="Socks">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: immodificabili
-			</text>
-			<text name="title_loading">
-				[DESC]: in caricamento...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non indossate
-			</text>
-			<text name="path">
-				Ubicato in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Metti delle nuove calze trascinandole dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo.
-			</text>
-			<button label="Crea nuove calze" label_selected="Crea nuove calze" name="Create New"/>
-			<text name="no modify instructions">
-				Non hai il permesso di modificare questo indumento.
-			</text>
-			<text name="Item Action Label" right="89">
-				Calze:
-			</text>
-			<texture_picker label="Tessuto" name="Fabric" tool_tip="Clicca per scegliere un&apos;immagine"/>
-			<color_swatch label="Colore/Tinta" name="Color/Tint" tool_tip="Clicca per aprire il selettore dei colori"/>
-			<button label="Togli" label_selected="Togli" name="Take Off"/>
-			<button label="Salva" label_selected="Salva" name="Save"/>
-			<button label="Salva come..." label_selected="Salva come..." left="171" name="Save As"/>
-			<button font="SansSerifSmall" label="Annulla le modifiche" label_selected="Annulla le modifiche" name="Revert" width="120"/>
-		</panel>
-		<panel label="Giacca" name="Jacket">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: immodificabile
-			</text>
-			<text name="title_loading">
-				[DESC]: in caricamento...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non indossata
-			</text>
-			<text name="path">
-				Ubicata in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Metti una nuova giacca trascinandola dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo.
-			</text>
-			<button label="Crea una nuova giacca" label_selected="Crea una nuova giacca" name="Create New"/>
-			<text name="no modify instructions">
-				Non hai il permesso di modificare questo indumento.
-			</text>
-			<text name="Item Action Label" right="89">
-				Giacca:
-			</text>
-			<texture_picker label="Tessuto: superiore" name="Upper Fabric" tool_tip="Clicca per scegliere un&apos;immagine" width="96"/>
-			<texture_picker label="Tessuto: inferiore" name="Lower Fabric" tool_tip="Clicca per scegliere un&apos;immagine" width="96"/>
-			<color_swatch label="Colore/Tinta" name="Color/Tint" tool_tip="Clicca per aprire il selettore dei colori"/>
-			<button label="Togli" label_selected="Togli" name="Take Off"/>
-			<button label="Salva" label_selected="Salva" name="Save"/>
-			<button label="Salva come..." label_selected="Salva come..." left="171" name="Save As"/>
-			<button font="SansSerifSmall" label="Annulla le modifiche" label_selected="Annulla le modifiche" name="Revert" width="120"/>
-		</panel>
-		<panel label="Guanti" name="Gloves">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: immodificabili
-			</text>
-			<text name="title_loading">
-				[DESC]: in caricamento...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non indossati
-			</text>
-			<text name="path">
-				Ubicati in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Metti dei nuovi guanti trascinandoli dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo.
-			</text>
-			<button label="Crea nuovi guanti" label_selected="Crea nuovi guanti" name="Create New"/>
-			<text name="no modify instructions">
-				Non hai il permesso di modificare questo indumento.
-			</text>
-			<text name="Item Action Label" right="89">
-				Guanti:
-			</text>
-			<texture_picker label="Tessuto" name="Fabric" tool_tip="Clicca per scegliere un&apos;immagine"/>
-			<color_swatch label="Colore/Tinta" name="Color/Tint" tool_tip="Clicca per aprire il selettore dei colori"/>
-			<button font="SansSerifSmall" label="Rimuovi l&apos;indumento" label_selected="Rimuovi l&apos;indumento" name="Take Off" width="115"/>
-			<button label="Salva" label_selected="Salva" name="Save"/>
-			<button label="Salva come..." label_selected="Salva come..." left="171" name="Save As"/>
-			<button font="SansSerifSmall" label="Annulla le modifiche" label_selected="Annulla le modifiche" name="Revert" width="120"/>
-		</panel>
-		<panel label="Canottiera" name="Undershirt">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: immodificabile
-			</text>
-			<text name="title_loading">
-				[DESC]: in caricamento...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non indossata
-			</text>
-			<text name="path">
-				Ubicata in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Metti una nuova maglietta intima trascinandola dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo.
-			</text>
-			<button label="Crea una nuova canottiera" label_selected="Crea una nuova canottiera" name="Create New"/>
-			<text name="no modify instructions">
-				Non hai il permesso di modificare questo indumento.
-			</text>
-			<text name="Item Action Label" right="89">
-				Canottiera:
-			</text>
-			<texture_picker label="Tessuto" name="Fabric" tool_tip="Clicca per scegliere un&apos;immagine"/>
-			<color_swatch label="Colore/Tinta" name="Color/Tint" tool_tip="Clicca per aprire il selettore dei colori"/>
-			<button font="SansSerifSmall" label="Rimuovi l&apos;indumento" label_selected="Rimuovi l&apos;indumento" name="Take Off" width="115"/>
-			<button label="Salva" label_selected="Salva" name="Save"/>
-			<button label="Salva come..." label_selected="Salva come..." left="171" name="Save As"/>
-			<button font="SansSerifSmall" label="Annulla le modifiche" label_selected="Annulla le modifiche" name="Revert" width="120"/>
-		</panel>
-		<panel label="Mutande" name="Underpants">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: immodificabili
-			</text>
-			<text name="title_loading">
-				[DESC]: in caricamento...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non indossate
-			</text>
-			<text name="path">
-				Ubicato in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Metti dei nuovi slip trascinandoli dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo.
-			</text>
-			<button label="Crea nuove mutande" label_selected="Crea nuove mutande" name="Create New"/>
-			<text name="no modify instructions">
-				Non hai il permesso di modificare questo indumento.
-			</text>
-			<text name="Item Action Label" right="89">
-				Mutande:
-			</text>
-			<texture_picker label="Tessuto" name="Fabric" tool_tip="Clicca per scegliere un&apos;immagine"/>
-			<color_swatch label="Colore/Tinta" name="Color/Tint" tool_tip="Clicca per aprire il selettore dei colori"/>
-			<button font="SansSerifSmall" label="Rimuovi l&apos;indumento" label_selected="Rimuovi l&apos;indumento" name="Take Off" width="115"/>
-			<button label="Salva" label_selected="Salva" name="Save"/>
-			<button label="Salva come..." label_selected="Salva come..." left="171" name="Save As"/>
-			<button font="SansSerifSmall" label="Annulla le modifiche" label_selected="Annulla le modifiche" name="Revert" width="120"/>
-		</panel>
-		<panel label="Gonna" name="Skirt">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: immodificabile
-			</text>
-			<text name="title_loading">
-				[DESC]: in caricamento...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non indossata
-			</text>
-			<text name="path">
-				Ubicata in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Metti una nuova gonna trascinandola dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo.
-			</text>
-			<button label="Crea una nuova gonna" label_selected="Crea una nuova gonna" name="Create New"/>
-			<text name="no modify instructions">
-				Non hai il permesso di modificare questo indumento.
-			</text>
-			<text name="Item Action Label" right="89">
-				Gonna:
-			</text>
-			<texture_picker label="Tessuto" name="Fabric" tool_tip="Clicca per scegliere un&apos;immagine"/>
-			<color_swatch label="Colore/Tinta" name="Color/Tint" tool_tip="Clicca per aprire il selettore dei colori"/>
-			<button font="SansSerifSmall" label="Rimuovi l&apos;indumento" label_selected="Rimuovi l&apos;indumento" name="Take Off" width="115"/>
-			<button label="Salva" label_selected="Salva" name="Save"/>
-			<button label="Salva come..." label_selected="Salva come..." left="171" name="Save As"/>
-			<button font="SansSerifSmall" label="Annulla le modifiche" label_selected="Annulla le modifiche" name="Revert" width="120"/>
-		</panel>
-		<panel label="Tatuaggio" name="Tattoo">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: non può essere modificato
-			</text>
-			<text name="title_loading">
-				[DESC]: caricamento in corso...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non indossato
-			</text>
-			<text name="path">
-				Collocato in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Metti un nuovo tatuaggio trascinandolo dal tuo inventario al avatar. Oppure, crea un nuovo tatuaggio e indossalo.
-			</text>
-			<button label="Crea un nuovo tatuaggio" label_selected="Crea un nuovo tatuaggio" name="Create New"/>
-			<text name="no modify instructions">
-				Non hai i permessi per modificare questo capo.
-			</text>
-			<text name="Item Action Label">
-				Tatuaggio:
-			</text>
-			<texture_picker label="Tatuaggio della testa" name="Head Tattoo" tool_tip="Clicca per scegliere una fotografia"/>
-			<texture_picker label="Tatuaggio superiore" name="Upper Tattoo" tool_tip="Clicca per scegliere una fotografia"/>
-			<texture_picker label="Tattuaggio inferiore" name="Lower Tattoo" tool_tip="Clicca per scegliere una fotografia"/>
-			<button label="Togli" label_selected="Togli" name="Take Off"/>
-			<button label="Salva" label_selected="Salva" name="Save"/>
-			<button label="Salva con nome..." label_selected="Salva con nome..." name="Save As"/>
-			<button label="Ripristina" label_selected="Ripristina" name="Revert"/>
-		</panel>
-		<panel label="Alpha (Trasparenza)" name="Alpha">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: non può essere modificato
-			</text>
-			<text name="title_loading">
-				[DESC]: caricamento in corso...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non indossato
-			</text>
-			<text name="path">
-				Collocato in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Metti una nuova alpha mask trascinandola dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo.
-			</text>
-			<button label="Crea nuovo Alpha" label_selected="Crea nuovo Alpha" name="Create New"/>
-			<text name="no modify instructions">
-				Non hai i permessi per modificare questo capo.
-			</text>
-			<text name="Item Action Label">
-				Alpha:
-			</text>
-			<texture_picker label="Alpha inferiore" name="Lower Alpha" tool_tip="Clicca per scegliere una fotografia"/>
-			<texture_picker label="Alpha superiore" name="Upper Alpha" tool_tip="Clicca per scegliere una fotografia"/>
-			<texture_picker label="Alpha della testa" name="Head Alpha" tool_tip="Clicca per scegliere una fotografia"/>
-			<texture_picker label="Alpha dell&apos;occhio" name="Eye Alpha" tool_tip="Clicca per scegliere una fotografia"/>
-			<texture_picker label="Alpha dei capelli" name="Hair Alpha" tool_tip="Clicca per scegliere una fotografia"/>
-			<button label="Togli" label_selected="Togli" name="Take Off"/>
-			<button label="Salva" label_selected="Salva" name="Save"/>
-			<button label="Salva con nome..." label_selected="Salva con nome..." name="Save As"/>
-			<button label="Ripristina" label_selected="Ripristina" name="Revert"/>
-		</panel>
-	</tab_container>
-	<scroll_container name="panel_container"/>
-	<button label="Informazioni script" label_selected="Informazioni script" name="script_info" tool_tip="Mostra gli script collegati al tuo avatar"/>
-	<button label="Crea vestiario" label_selected="Crea vestiario" name="make_outfit_btn"/>
-	<button label="Annulla" label_selected="Annulla" name="Cancel"/>
-	<button label="OK" label_selected="OK" name="Ok"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_device_settings.xml b/indra/newview/skins/default/xui/it/floater_device_settings.xml
deleted file mode 100644
index 97aa64086d..0000000000
--- a/indra/newview/skins/default/xui/it/floater_device_settings.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_device_settings" title="OPZIONI CHAT VOCALE"/>
diff --git a/indra/newview/skins/default/xui/it/floater_im.xml b/indra/newview/skins/default/xui/it/floater_im.xml
deleted file mode 100644
index aa916adf2c..0000000000
--- a/indra/newview/skins/default/xui/it/floater_im.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<multi_floater name="im_floater" title="">
-	<string name="only_user_message">
-		Sei il solo residente presente nella sessione.
-	</string>
-	<string name="offline_message">
-		[FIRST] [LAST] è offline.
-	</string>
-	<string name="invite_message">
-		Clicca il tasto [BUTTON NAME] per accettare/connetterti a questa voice chat.
-	</string>
-	<string name="muted_message">
-		Hai bloccato questo residente. Quando gli invii un messaggio, verrà automaticamente sbloccato.
-	</string>
-	<string name="generic_request_error">
-		Errore durante la richiesta, riprova più tardi.
-	</string>
-	<string name="insufficient_perms_error">
-		Non hai sufficienti permessi.
-	</string>
-	<string name="session_does_not_exist_error">
-		Questa sessione non esiste più
-	</string>
-	<string name="no_ability_error">
-		Non hai questa abilitazione.
-	</string>
-	<string name="not_a_mod_error">
-		Non sei un moderatore.
-	</string>
-	<string name="muted_error">
-		Un moderatore di gruppo ti ha disabilitato dalla chat di testo.
-	</string>
-	<string name="add_session_event">
-		Impossibile aggiungere residenti alla sessione chat con [RECIPIENT].
-	</string>
-	<string name="message_session_event">
-		Impossibile inviare il messaggio nella chat con [RECIPIENT].
-	</string>
-	<string name="removed_from_group">
-		Sei stato espulso dal gruppo.
-	</string>
-	<string name="close_on_no_ability">
-		Non hai più le abilitazioni per rimanere nella sessione chat.
-	</string>
-</multi_floater>
diff --git a/indra/newview/skins/default/xui/it/floater_my_friends.xml b/indra/newview/skins/default/xui/it/floater_my_friends.xml
deleted file mode 100644
index faeba0a6d9..0000000000
--- a/indra/newview/skins/default/xui/it/floater_my_friends.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_my_friends" title="CONTATTI">
-	<tab_container name="friends_and_groups">
-		<panel label="Amici" name="friends_panel"/>
-		<panel label="Gruppi" name="groups_panel"/>
-	</tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/it/floater_outfit_save_as.xml
deleted file mode 100644
index dff5f33e57..0000000000
--- a/indra/newview/skins/default/xui/it/floater_outfit_save_as.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="modal container" title="Salva vestiario">
-	<button label="Salva" label_selected="Salva" name="Save"/>
-	<button label="Annulla" label_selected="Annulla" name="Cancel"/>
-	<text name="Save item as:">
-		Salva quello che indosso
-come nuovo vestiario:
-	</text>
-	<line_editor name="name ed">
-		[DESC] (nuovo)
-	</line_editor>
-</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_preview_classified.xml b/indra/newview/skins/default/xui/it/floater_preview_classified.xml
deleted file mode 100644
index c617f81f7b..0000000000
--- a/indra/newview/skins/default/xui/it/floater_preview_classified.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="classified_preview" title="INFORMAZIONI RISERVATE">
-	<floater.string name="Title">
-		Riservato: [NAME]
-	</floater.string>
-</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_preview_event.xml b/indra/newview/skins/default/xui/it/floater_preview_event.xml
deleted file mode 100644
index 1e1653e758..0000000000
--- a/indra/newview/skins/default/xui/it/floater_preview_event.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="event_preview" title="INFORMAZIONI SULL&apos;EVENTO">
-	<floater.string name="Title">
-		Evento: [NAME]
-	</floater.string>
-</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/it/floater_preview_gesture_info.xml
deleted file mode 100644
index d490416cc7..0000000000
--- a/indra/newview/skins/default/xui/it/floater_preview_gesture_info.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="SCORCIATOIA GESTURE"/>
diff --git a/indra/newview/skins/default/xui/it/floater_preview_gesture_shortcut.xml b/indra/newview/skins/default/xui/it/floater_preview_gesture_shortcut.xml
deleted file mode 100644
index eb0bc4d868..0000000000
--- a/indra/newview/skins/default/xui/it/floater_preview_gesture_shortcut.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="SCORCIATOIA GESTURE">
-	<text name="trigger_label">
-		Chat:
-	</text>
-	<text name="key_label">
-		Tastiera:
-	</text>
-	<combo_box label="Nessuno" name="modifier_combo"/>
-	<combo_box label="Nessuno" name="key_combo"/>
-	<text name="replace_text" tool_tip="Sostituisci la parola chiave con queste parole. Per esempio, se si sceglie di sostituire la parola chiave &apos;ciao&apos; con &apos;buongiorno&apos;, nella chat il testo &apos;Volevo dire ciao&apos; diventerà &apos;Volevo dire buongiorno&apos; e verrà attivata la gesture.">
-		Sostituisci:
-	</text>
-	<line_editor name="replace_editor" tool_tip="Sostituisci la parola chiave con queste parole. Per esempio, se si sceglie di sostituire la parola chiave &apos;ciao&apos; con &apos;buongiorno&apos;, nella chat il testo &apos;Volevo dire ciao&apos; diventerà &apos;Volevo dire buongiorno&apos; e verrà attivata la gesture"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/it/floater_preview_gesture_steps.xml
deleted file mode 100644
index d490416cc7..0000000000
--- a/indra/newview/skins/default/xui/it/floater_preview_gesture_steps.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="SCORCIATOIA GESTURE"/>
diff --git a/indra/newview/skins/default/xui/it/floater_statistics.xml b/indra/newview/skins/default/xui/it/floater_statistics.xml
deleted file mode 100644
index 00df1ff994..0000000000
--- a/indra/newview/skins/default/xui/it/floater_statistics.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="stats floater" title="STATISTICHE"/>
diff --git a/indra/newview/skins/default/xui/it/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/it/floater_wearable_save_as.xml
deleted file mode 100644
index 7c3754f004..0000000000
--- a/indra/newview/skins/default/xui/it/floater_wearable_save_as.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="modal container" title="">
-	<button label="Salva" label_selected="Salva" name="Save"/>
-	<button label="Annulla" label_selected="Annulla" name="Cancel"/>
-	<text name="Save item as:">
-		Salva oggetto nel mio inventario come:
-	</text>
-	<line_editor name="name ed">
-		Nuovo [DESC]
-	</line_editor>
-</floater>
diff --git a/indra/newview/skins/default/xui/it/panel_audio_device.xml b/indra/newview/skins/default/xui/it/panel_audio_device.xml
deleted file mode 100644
index 166db81999..0000000000
--- a/indra/newview/skins/default/xui/it/panel_audio_device.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="device_settings">
-	<text name="Audio Devices">
-		Periferiche audio
-	</text>
-	<text name="Input device (microphone):">
-		Periferica di input (microfono):
-	</text>
-	<text name="Output device (speakers):">
-		Periferica di Output (altoparlanti):
-	</text>
-	<text name="Input level:">
-		Livello d&apos;ingresso
-	</text>
-	<text_editor name="voice_intro_text1">
-		Sposta il cursore per impostare il livello della tua voce per gli altri residenti. Per controllare il livello di ingresso, parla semplicemente nel microfono.
-	</text_editor>
-	<volume_slider name="mic_volume_slider" tool_tip="Cambia il volume usando il cursore"/>
-	<text name="wait_text">
-		Attendi
-	</text>
-	<string name="default_text">
-		Default
-	</string>
-</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_friends.xml b/indra/newview/skins/default/xui/it/panel_friends.xml
deleted file mode 100644
index cfe162a67b..0000000000
--- a/indra/newview/skins/default/xui/it/panel_friends.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="friends">
-	<string name="Multiple">
-		Più amici
-	</string>
-	<scroll_list name="friend_list" tool_tip="Tieni premuto shift o control mentre clicchi per selezionare più di un amico">
-		<column name="icon_online_status" tool_tip="Stato Online"/>
-		<column label="Nome" name="friend_name" tool_tip="Nome"/>
-		<column name="icon_visible_online" tool_tip="Questo amico può vedere quando sei online"/>
-		<column name="icon_visible_map" tool_tip="Questo amico può localizzarti sulla mappa"/>
-		<column name="icon_edit_mine" tool_tip="Questo amico può modificare, cancellare o prendere i tuoi oggetti"/>
-		<column name="icon_edit_theirs" tool_tip="Puoi modificare gli oggetti di questo amico"/>
-	</scroll_list>
-	<button label="IM/Chiama" name="im_btn" tool_tip="Apri una sessione di IM - Messaggio Privato"/>
-	<button label="Profilo" name="profile_btn" tool_tip="Mostra foto, gruppi, ed altre informazioni"/>
-	<button label="Teleport" name="offer_teleport_btn" tool_tip="Offri a questo amico un teleport per dove sei tu ora"/>
-	<button label="Paga" name="pay_btn" tool_tip="Dai Linden dollar (L$) a questo amico"/>
-	<button label="Rimuovi" name="remove_btn" tool_tip="Rimuovi questa persona dalla tua lista amici"/>
-	<button label="Aggiungi" name="add_btn" tool_tip="Offri amicizia a un residente"/>
-</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_groups.xml b/indra/newview/skins/default/xui/it/panel_groups.xml
deleted file mode 100644
index 43fd36710e..0000000000
--- a/indra/newview/skins/default/xui/it/panel_groups.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="groups">
-	<scroll_list bottom="50" name="group list"/>
-	<text bottom="16" height="32" name="groupdesc" width="268">
-		Il tuo gruppo attualmente attivo è visualizzato
-in grassetto.
-	</text>
-	<text bottom="3" name="groupcount" width="268">
-		Appartieni a [COUNT] gruppo/i (su un massimo di [MAX]).
-	</text>
-	<button label="IM/Chiama" name="IM" tool_tip="Apri una sessione di IM/Instant Messages"/>
-	<button label="Informazioni" name="Info"/>
-	<button label="Attiva" name="Activate"/>
-	<button label="Abbandona" name="Leave"/>
-	<button label="Crea..." name="Create"/>
-	<button label="Cerca..." name="Search..."/>
-</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_nearby_chat.xml b/indra/newview/skins/default/xui/it/panel_nearby_chat.xml
deleted file mode 100644
index 7ffe972181..0000000000
--- a/indra/newview/skins/default/xui/it/panel_nearby_chat.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<!-- All our XML is utf-8 encoded. -->
-<panel name="nearby_chat">
-	<panel name="chat_caption">
-		<text name="sender_name">
-			CHAT NEI DINTORNI
-		</text>
-	</panel>
-</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_online_status.xml b/indra/newview/skins/default/xui/it/panel_online_status.xml
deleted file mode 100644
index fdc489f375..0000000000
--- a/indra/newview/skins/default/xui/it/panel_online_status.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="friend_online_status" name="friend_online_status"/>
diff --git a/indra/newview/skins/default/xui/it/panel_region_general_layout.xml b/indra/newview/skins/default/xui/it/panel_region_general_layout.xml
deleted file mode 100644
index 4cf31f4b6e..0000000000
--- a/indra/newview/skins/default/xui/it/panel_region_general_layout.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Regione" name="General">
-	<text name="region_text_lbl">
-		Regione:
-	</text>
-	<text name="region_text">
-		sconosciuto
-	</text>
-	<text name="version_channel_text_lbl">
-		Versione:
-	</text>
-	<text name="version_channel_text">
-		sconosciuto
-	</text>
-	<text name="region_type_lbl">
-		Tipo:
-	</text>
-	<text name="region_type">
-		sconosciuto
-	</text>
-	<check_box label="Impedisci Terraform" name="block_terraform_check"/>
-	<check_box label="Impedisci volo" name="block_fly_check"/>
-	<check_box label="Permetti danni" name="allow_damage_check"/>
-	<check_box label="Limita spinte" name="restrict_pushobject"/>
-	<check_box label="Permetti la rivendita dei terreni" name="allow_land_resell_check"/>
-	<check_box label="Permetti l&apos;unione/divisione del terreno" name="allow_parcel_changes_check"/>
-	<check_box label="Impedisci la visualizzazione del terreno nelle ricerche" name="block_parcel_search_check" tool_tip="Permetti alla gente di vedere questa regione e i suoi lotti nei risultati dellla ricerca"/>
-	<spinner label="N. massimo di avatar" name="agent_limit_spin"/>
-	<spinner label="Bonus oggetto" name="object_bonus_spin"/>
-	<text label="Categoria di accesso" name="access_text">
-		Categoria:
-	</text>
-	<combo_box label="Moderato" name="access_combo">
-		<combo_box.item label="Adulti" name="Adult"/>
-		<combo_box.item label="Moderato" name="Mature"/>
-		<combo_box.item label="Generale" name="PG"/>
-	</combo_box>
-	<button label="Applica" name="apply_btn"/>
-	<button label="Teleport a casa un residente..." name="kick_btn"/>
-	<button label="Teleport a casa tutti i residenti..." name="kick_all_btn"/>
-	<button label="Invia messaggio alla regione..." name="im_btn"/>
-	<button label="Gestisci telehub..." name="manage_telehub_btn"/>
-</panel>
diff --git a/indra/newview/skins/default/xui/ja/floater_customize.xml b/indra/newview/skins/default/xui/ja/floater_customize.xml
deleted file mode 100644
index cc0032e1ab..0000000000
--- a/indra/newview/skins/default/xui/ja/floater_customize.xml
+++ /dev/null
@@ -1,529 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater customize" title="容姿">
-	<tab_container name="customize tab container">
-		<text label="身体部位" name="body_parts_placeholder">
-			身体部位
-		</text>
-		<panel label="シェイプ" name="Shape">
-			<button label="戻す" label_selected="戻す" name="Revert"/>
-			<button label="身体" label_selected="身体" name="Body"/>
-			<button label="頭" label_selected="頭" name="Head"/>
-			<button label="眼" label_selected="眼" name="Eyes"/>
-			<button label="耳" label_selected="耳" name="Ears"/>
-			<button label="鼻" label_selected="鼻" name="Nose"/>
-			<button label="口" label_selected="口" name="Mouth"/>
-			<button label="あご" label_selected="あご" name="Chin"/>
-			<button label="胴体" label_selected="胴体" name="Torso"/>
-			<button label="両脚" label_selected="両脚" name="Legs"/>
-			<radio_group name="sex radio">
-				<radio_item label="女性" name="radio" value="0"/>
-				<radio_item label="男性" name="radio2" value="1"/>
-			</radio_group>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: 修正できません。
-			</text>
-			<text name="title_loading">
-				[DESC]: ロード中...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: 未装着。
-			</text>
-			<text name="path">
-				[PATH] に所在
-			</text>
-			<text name="not worn instructions">
-				持ち物からあなたのアバターに 1 つドラッグして、新しいシェイプをつけます。 代わりに、はじめから新しく作成して着用することもできます。
-			</text>
-			<text name="no modify instructions">
-				あなたはこの服の修正を許されていません。
-			</text>
-			<text name="Item Action Label">
-				シェイプ:
-			</text>
-			<button label="新しいシェイプ(体型)を作成" label_selected="新しいシェイプ(体型)を作成" name="Create New"/>
-			<button label="保存" label_selected="保存" name="Save"/>
-			<button label="別名で保存..." label_selected="別名で保存..." name="Save As"/>
-		</panel>
-		<panel label="スキン" name="Skin">
-			<button label="スキンの色" label_selected="スキンの色" name="Skin Color"/>
-			<button label="顔の細部" label_selected="顔の細部" name="Face Detail"/>
-			<button label="メイク" label_selected="メイク" name="Makeup"/>
-			<button label="身体細部" label_selected="身体細部" name="Body Detail"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: 修正できません。
-			</text>
-			<text name="title_loading">
-				[DESC]: ロード中...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: 未装着。
-			</text>
-			<text name="path">
-				[PATH] に所在
-			</text>
-			<text name="not worn instructions">
-				持ち物からあなたのアバターに 1 つドラッグして、新しいスキンをつけます。 代わりに、はじめから新しく作成して着用することもできます。
-			</text>
-			<text name="no modify instructions">
-				あなたはこの服の修正を許されていません。
-			</text>
-			<text name="Item Action Label">
-				スキン:
-			</text>
-			<texture_picker label="頭部のタトゥー" name="Head Tattoos" tool_tip="写真をクリックして選択"/>
-			<texture_picker label="上半身のタトゥー" name="Upper Tattoos" tool_tip="写真をクリックして選択"/>
-			<texture_picker label="下部のタトゥー" name="Lower Tattoos" tool_tip="写真をクリックして選択"/>
-			<button label="新しいスキンを作成" label_selected="新しいスキンを作成" name="Create New"/>
-			<button label="保存" label_selected="保存" name="Save"/>
-			<button label="別名で保存..." label_selected="別名で保存..." name="Save As"/>
-			<button label="戻す" label_selected="戻す" name="Revert"/>
-		</panel>
-		<panel label="髪" name="Hair">
-			<button label="色" label_selected="色" name="Color"/>
-			<button label="スタイル" label_selected="スタイル" name="Style"/>
-			<button label="眉毛" label_selected="眉毛" name="Eyebrows"/>
-			<button label="顔" label_selected="顔" name="Facial"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: 修正できません。
-			</text>
-			<text name="title_loading">
-				[DESC]: ロード中...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: 未装着。
-			</text>
-			<text name="path">
-				[PATH] に所在
-			</text>
-			<text name="not worn instructions">
-				持ち物からあなたのアバターに 1 つドラッグして、新しい髪をつけます。 代わりに、はじめから新しく作成して着用することもできます。
-			</text>
-			<text name="no modify instructions">
-				あなたはこの服の修正を許されていません。
-			</text>
-			<text name="Item Action Label">
-				髪型:
-			</text>
-			<texture_picker label="テクスチャ" name="Texture" tool_tip="写真をクリックして選択"/>
-			<button label="新しい髪を作成" label_selected="新しい髪を作成" name="Create New"/>
-			<button label="保存" label_selected="保存" name="Save"/>
-			<button label="別名で保存..." label_selected="別名で保存..." name="Save As"/>
-			<button label="戻す" label_selected="戻す" name="Revert"/>
-		</panel>
-		<panel label="眼" name="Eyes">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: 修正できません。
-			</text>
-			<text name="title_loading">
-				[DESC]: ロード中...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: 未装着。
-			</text>
-			<text name="path">
-				[PATH] に所在
-			</text>
-			<text name="not worn instructions">
-				あなたの持ち物からアバターにドラッグして、新しい目をつけます。 代わりに、はじめから新しく作成して着用することもできます。
-			</text>
-			<text name="no modify instructions">
-				あなたはこの服の修正を許されていません。
-			</text>
-			<text name="Item Action Label">
-				目:
-			</text>
-			<texture_picker label="虹彩" name="Iris" tool_tip="写真をクリックして選択"/>
-			<button label="新しい眼を作成" label_selected="新しい眼を作成" name="Create New"/>
-			<button label="保存" label_selected="保存" name="Save"/>
-			<button label="別名で保存..." label_selected="別名で保存..." name="Save As"/>
-			<button label="戻す" label_selected="戻す" name="Revert"/>
-		</panel>
-		<text label="服" name="clothes_placeholder">
-			衣類
-		</text>
-		<panel label="シャツ" name="Shirt">
-			<texture_picker label="生地" name="Fabric" tool_tip="写真をクリックして選択"/>
-			<color_swatch label="色/明暗" name="Color/Tint" tool_tip="クリックしてカラーピッカーを開きます"/>
-			<button label="取り外す" label_selected="取り外す" name="Take Off"/>
-			<button label="新しいシャツを作成" label_selected="新しいシャツを作成" name="Create New"/>
-			<button label="保存" label_selected="保存" name="Save"/>
-			<button label="別名で保存..." label_selected="別名で保存..." name="Save As"/>
-			<button label="戻す" label_selected="戻す" name="Revert"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: 修正できません。
-			</text>
-			<text name="title_loading">
-				[DESC]: ロード中...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: 未装着。
-			</text>
-			<text name="path">
-				[PATH] に所在
-			</text>
-			<text name="not worn instructions">
-				持ち物からあなたのアバターに 1 つドラッグして、新しいシャツを着ます。 代わりに、はじめから新しく作成して着用することもできます。
-			</text>
-			<text name="no modify instructions">
-				あなたはこの服の修正を許されていません。
-			</text>
-			<text name="Item Action Label">
-				シャツ:
-			</text>
-		</panel>
-		<panel label="パンツ" name="Pants">
-			<texture_picker label="生地" name="Fabric" tool_tip="写真をクリックして選択"/>
-			<color_swatch label="色/明暗" name="Color/Tint" tool_tip="クリックしてカラーピッカーを開きます"/>
-			<button label="取り外す" label_selected="取り外す" name="Take Off"/>
-			<button label="新しいパンツを作成" label_selected="新しいパンツを作成" name="Create New"/>
-			<button label="保存" label_selected="保存" name="Save"/>
-			<button label="別名で保存..." label_selected="別名で保存..." name="Save As"/>
-			<button label="戻す" label_selected="戻す" name="Revert"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: 修正できません。
-			</text>
-			<text name="title_loading">
-				[DESC]: ロード中...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: 未装着。
-			</text>
-			<text name="path">
-				[PATH] に所在
-			</text>
-			<text name="not worn instructions">
-				あなたの持ち物からアバターにドラッグして、新しいパンツを履きます。 代わりに、はじめから新しく作成して着用することもできます。
-			</text>
-			<text name="no modify instructions">
-				あなたはこの服の修正を許されていません。
-			</text>
-			<text name="Item Action Label">
-				パンツ:
-			</text>
-		</panel>
-		<panel label="靴" name="Shoes">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: 修正できません。
-			</text>
-			<text name="title_loading">
-				[DESC]: ロード中...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: 未装着。
-			</text>
-			<text name="path">
-				[PATH] に所在
-			</text>
-			<text name="not worn instructions">
-				あなたの持ち物からアバターにドラッグして、新しい靴を履きます。 代わりに、はじめから新しく作成して着用することもできます。
-			</text>
-			<button label="新しい靴を作成" label_selected="新しい靴を作成" name="Create New"/>
-			<text name="no modify instructions">
-				あなたはこの服の修正を許されていません。
-			</text>
-			<text name="Item Action Label">
-				靴:
-			</text>
-			<texture_picker label="生地" name="Fabric" tool_tip="写真をクリックして選択"/>
-			<color_swatch label="色/明暗" name="Color/Tint" tool_tip="クリックしてカラーピッカーを開きます"/>
-			<button label="取り外す" label_selected="取り外す" name="Take Off"/>
-			<button label="保存" label_selected="保存" name="Save"/>
-			<button label="別名で保存..." label_selected="別名で保存..." name="Save As"/>
-			<button label="戻す" label_selected="戻す" name="Revert"/>
-		</panel>
-		<panel label="靴下" name="Socks">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: 修正できません。
-			</text>
-			<text name="title_loading">
-				[DESC]: ロード中...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: 未装着。
-			</text>
-			<text name="path">
-				[PATH] に所在
-			</text>
-			<text name="not worn instructions">
-				あなたの持ち物からアバターにドラッグして、新しい靴下を履きます。 代わりに、はじめから新しく作成して着用することもできます。
-			</text>
-			<button label="新しい靴下を作成" label_selected="新しい靴下を作成" name="Create New"/>
-			<text name="no modify instructions">
-				あなたはこの服の修正を許されていません。
-			</text>
-			<text name="Item Action Label">
-				靴下:
-			</text>
-			<texture_picker label="生地" name="Fabric" tool_tip="写真をクリックして選択"/>
-			<color_swatch label="色/明暗" name="Color/Tint" tool_tip="クリックしてカラーピッカーを開きます"/>
-			<button label="取り外す" label_selected="取り外す" name="Take Off"/>
-			<button label="保存" label_selected="保存" name="Save"/>
-			<button label="別名で保存..." label_selected="別名で保存..." name="Save As"/>
-			<button label="戻す" label_selected="戻す" name="Revert"/>
-		</panel>
-		<panel label="上着" name="Jacket">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: 修正できません。
-			</text>
-			<text name="title_loading">
-				[DESC]: ロード中...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: 未装着。
-			</text>
-			<text name="path">
-				[PATH] に所在
-			</text>
-			<text name="not worn instructions">
-				持ち物からあなたのアバターに 1 つドラッグして、新しいジャケットを着ます。 代わりに、はじめから新しく作成して着用することもできます。
-			</text>
-			<button label="新しい上着を作成" label_selected="新しい上着を作成" name="Create New"/>
-			<text name="no modify instructions">
-				あなたはこの服の修正を許されていません。
-			</text>
-			<text name="Item Action Label">
-				上着:
-			</text>
-			<texture_picker label="上半身の生地" name="Upper Fabric" tool_tip="写真をクリックして選択"/>
-			<texture_picker label="下層生地" name="Lower Fabric" tool_tip="写真をクリックして選択"/>
-			<color_swatch label="色/明暗" name="Color/Tint" tool_tip="クリックしてカラーピッカーを開きます"/>
-			<button label="取り外す" label_selected="取り外す" name="Take Off"/>
-			<button label="保存" label_selected="保存" name="Save"/>
-			<button label="別名で保存..." label_selected="別名で保存..." name="Save As"/>
-			<button label="戻す" label_selected="戻す" name="Revert"/>
-		</panel>
-		<panel label="手袋" name="Gloves">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: 修正できません。
-			</text>
-			<text name="title_loading">
-				[DESC]: ロード中...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: 未装着。
-			</text>
-			<text name="path">
-				[PATH] に所在
-			</text>
-			<text name="not worn instructions">
-				あなたの持ち物からアバターにドラッグして、新しい手袋をつけます。 代わりに、はじめから新しく作成して着用することもできます。
-			</text>
-			<button label="新しい手袋を作成" label_selected="新しい手袋を作成" name="Create New"/>
-			<text name="no modify instructions">
-				あなたはこの服の修正を許されていません。
-			</text>
-			<text name="Item Action Label">
-				手袋:
-			</text>
-			<texture_picker label="生地" name="Fabric" tool_tip="写真をクリックして選択"/>
-			<color_swatch label="色/明暗" name="Color/Tint" tool_tip="クリックしてカラーピッカーを開きます"/>
-			<button label="取り外す" label_selected="取り外す" name="Take Off"/>
-			<button label="保存" label_selected="保存" name="Save"/>
-			<button label="別名で保存..." label_selected="別名で保存..." name="Save As"/>
-			<button label="戻す" label_selected="戻す" name="Revert"/>
-		</panel>
-		<panel label="下着シャツ" name="Undershirt">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: 修正できません。
-			</text>
-			<text name="title_loading">
-				[DESC]: ロード中...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: 未装着。
-			</text>
-			<text name="path">
-				[PATH] に所在
-			</text>
-			<text name="not worn instructions">
-				持ち物からあなたのアバターに1つドラッグして、新しい下着(上)を着ます。 代わりに、はじめから新しく作成して着用することもできます。
-			</text>
-			<button label="新しい下着シャツを作成" label_selected="新しい下着シャツを作成" name="Create New"/>
-			<text name="no modify instructions">
-				あなたはこの服の修正を許されていません。
-			</text>
-			<text name="Item Action Label">
-				下着シャツ:
-			</text>
-			<texture_picker label="生地" name="Fabric" tool_tip="写真をクリックして選択"/>
-			<color_swatch label="色/明暗" name="Color/Tint" tool_tip="クリックしてカラーピッカーを開きます"/>
-			<button label="取り外す" label_selected="取り外す" name="Take Off"/>
-			<button label="保存" label_selected="保存" name="Save"/>
-			<button label="別名で保存..." label_selected="別名で保存..." name="Save As"/>
-			<button label="戻す" label_selected="戻す" name="Revert"/>
-		</panel>
-		<panel label="下着パンツ" name="Underpants">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: 修正できません。
-			</text>
-			<text name="title_loading">
-				[DESC]: ロード中...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: 未装着。
-			</text>
-			<text name="path">
-				[PATH] に所在
-			</text>
-			<text name="not worn instructions">
-				あなたの持ち物からアバターにドラッグして、新しい下着(下)を履きます。 代わりに、はじめから新しく作成して着用することもできます。
-			</text>
-			<button label="新しいパンツを作成" label_selected="新しいパンツを作成" name="Create New"/>
-			<text name="no modify instructions">
-				あなたはこの服の修正を許されていません。
-			</text>
-			<text name="Item Action Label">
-				下着パンツ:
-			</text>
-			<texture_picker label="生地" name="Fabric" tool_tip="写真をクリックして選択"/>
-			<color_swatch label="色/明暗" name="Color/Tint" tool_tip="クリックしてカラーピッカーを開きます"/>
-			<button label="取り外す" label_selected="取り外す" name="Take Off"/>
-			<button label="保存" label_selected="保存" name="Save"/>
-			<button label="別名で保存..." label_selected="別名で保存..." name="Save As"/>
-			<button label="戻す" label_selected="戻す" name="Revert"/>
-		</panel>
-		<panel label="スカート" name="Skirt">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: 修正できません。
-			</text>
-			<text name="title_loading">
-				[DESC]: ロード中...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: 未装着。
-			</text>
-			<text name="path">
-				[PATH] に所在
-			</text>
-			<text name="not worn instructions">
-				持ち物からあなたのアバターに 1 つドラッグして、新しいスカートを履きます。 代わりに、はじめから新しく作成して着用することもできます。
-			</text>
-			<button label="スカートを作成" label_selected="スカートを作成" name="Create New"/>
-			<text name="no modify instructions">
-				あなたはこの服の修正を許されていません。
-			</text>
-			<text name="Item Action Label">
-				スカート:
-			</text>
-			<texture_picker label="生地" name="Fabric" tool_tip="写真をクリックして選択"/>
-			<color_swatch label="色/明暗" name="Color/Tint" tool_tip="クリックしてカラーピッカーを開きます"/>
-			<button label="取り外す" label_selected="取り外す" name="Take Off"/>
-			<button label="保存" label_selected="保存" name="Save"/>
-			<button label="別名で保存..." label_selected="別名で保存..." name="Save As"/>
-			<button label="戻す" label_selected="戻す" name="Revert"/>
-		</panel>
-		<panel label="タトゥ" name="Tattoo">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: 修正不可
-			</text>
-			<text name="title_loading">
-				[DESC]: ローディング...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: 未着用
-			</text>
-			<text name="path">
-				参照 [PATH]
-			</text>
-			<text name="not worn instructions">
-				あなたの持ち物からアバターにドラッグして、新しいタトゥをつけます。 代わりに、はじめから新しく作成して着用することもできます。
-			</text>
-			<button label="新しいタトゥを作成" label_selected="新しいタトゥを作成" name="Create New"/>
-			<text name="no modify instructions">
-				この着用物を修正する権限がありません。
-			</text>
-			<text name="Item Action Label">
-				タトゥ:
-			</text>
-			<texture_picker label="頭部のタトゥー" name="Head Tattoo" tool_tip="クリックして写真を選択します"/>
-			<texture_picker label="上部のタトゥー" name="Upper Tattoo" tool_tip="クリックして写真を選択します"/>
-			<texture_picker label="下部のタトゥー" name="Lower Tattoo" tool_tip="クリックして写真を選択します"/>
-			<button label="取り外す" label_selected="取り外す" name="Take Off"/>
-			<button label="保存" label_selected="保存" name="Save"/>
-			<button label="別名で保存..." label_selected="別名で保存..." name="Save As"/>
-			<button label="元に戻す" label_selected="元に戻す" name="Revert"/>
-		</panel>
-		<panel label="アルファ" name="Alpha">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: 修正不可
-			</text>
-			<text name="title_loading">
-				[DESC]: ローディング...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: 未着用
-			</text>
-			<text name="path">
-				参照 [PATH]
-			</text>
-			<text name="not worn instructions">
-				あなたの持ち物からアバターにドラッグして、新しいアルファマスクをつけます。 代わりに、はじめから新しく作成して着用することもできます。
-			</text>
-			<button label="新しいアルファを作成" label_selected="新しいアルファを作成" name="Create New"/>
-			<text name="no modify instructions">
-				この着用物を修正する権限がありません。
-			</text>
-			<text name="Item Action Label">
-				アルファ:
-			</text>
-			<texture_picker label="アルファ(下)" name="Lower Alpha" tool_tip="クリックして写真を選択します"/>
-			<texture_picker label="アルファ(上)" name="Upper Alpha" tool_tip="クリックして写真を選択します"/>
-			<texture_picker label="頭部のアルファ" name="Head Alpha" tool_tip="クリックして写真を選択します"/>
-			<texture_picker label="目のアルファ" name="Eye Alpha" tool_tip="クリックして写真を選択します"/>
-			<texture_picker label="髪のアルファ" name="Hair Alpha" tool_tip="クリックして写真を選択します"/>
-			<button label="取り外す" label_selected="取り外す" name="Take Off"/>
-			<button label="保存" label_selected="保存" name="Save"/>
-			<button label="別名で保存..." label_selected="別名で保存..." name="Save As"/>
-			<button label="元に戻す" label_selected="元に戻す" name="Revert"/>
-		</panel>
-	</tab_container>
-	<button label="スクリプト情報" label_selected="スクリプト情報" name="script_info" tool_tip="あなたのアバターに付いているスクリプトを表示します"/>
-	<button label="アウトフィット作成" label_selected="アウトフィット作成" name="make_outfit_btn"/>
-	<button label="キャンセル" label_selected="キャンセル" name="Cancel"/>
-	<button label="OK" label_selected="OK" name="Ok"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_device_settings.xml b/indra/newview/skins/default/xui/ja/floater_device_settings.xml
deleted file mode 100644
index 3ae7356fb6..0000000000
--- a/indra/newview/skins/default/xui/ja/floater_device_settings.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_device_settings" title="ボイスチャット機器の設定"/>
diff --git a/indra/newview/skins/default/xui/ja/floater_first_time_tip.xml b/indra/newview/skins/default/xui/ja/floater_first_time_tip.xml
deleted file mode 100644
index fce9185b8a..0000000000
--- a/indra/newview/skins/default/xui/ja/floater_first_time_tip.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="set_name_in_the_cladd">
-	<check_box label="クイックヒントをオフにする" name="DontShowFirstTimeTip_checkbox"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_im.xml b/indra/newview/skins/default/xui/ja/floater_im.xml
deleted file mode 100644
index 2e8993ec21..0000000000
--- a/indra/newview/skins/default/xui/ja/floater_im.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<multi_floater name="im_floater" title="インスタント・メッセージ">
-	<string name="only_user_message">
-		このセッションには、あなたしかいません。
-	</string>
-	<string name="offline_message">
-		[FIRST] [LAST]はオフラインです。
-	</string>
-	<string name="invite_message">
-		このボイスチャットに応答/接続する場合は、[BUTTON NAME]をクリックしてください。
-	</string>
-	<string name="muted_message">
-		この住人をブロックしています。 メッセージを送ると、ブロックが自動的に解除されます。
-	</string>
-	<string name="generic_request_error">
-		要求中にエラーが発生しました。後でもう一度試してください。
-	</string>
-	<string name="insufficient_perms_error">
-		あなたには充分な権限がありません。
-	</string>
-	<string name="session_does_not_exist_error">
-		このセッションは既に切断されています。
-	</string>
-	<string name="no_ability_error">
-		あなたにはその能力がありません。
-	</string>
-	<string name="not_a_mod_error">
-		あなたはセッション・モデレータではありません。
-	</string>
-	<string name="muted_error">
-		グループモデレータがあなたのテキストチャットを無効化しました
-	</string>
-	<!-- ALL of the event strings should have [RECIPIENT] in them -->
-	<string name="add_session_event">
-		[RECIPIENT] とのチャットセッションに住人を追加できません。
-	</string>
-	<string name="message_session_event">
-		[RECIPIENT] とのチャット・セッションにメッセージを送ることができません
-	</string>
-	<string name="removed_from_group">
-		あなたはグループから削除されました。
-	</string>
-	<string name="close_on_no_ability">
-		このチャット・セッションを継続することはできません
-	</string>
-</multi_floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_my_friends.xml b/indra/newview/skins/default/xui/ja/floater_my_friends.xml
deleted file mode 100644
index b55cdde5b5..0000000000
--- a/indra/newview/skins/default/xui/ja/floater_my_friends.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater min_width="500" name="floater_my_friends" title="連絡先">
-	<tab_container name="friends_and_groups">
-		<panel label="フレンド" name="friends_panel"/>
-		<panel label="グループ" name="groups_panel"/>
-	</tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/ja/floater_outfit_save_as.xml
deleted file mode 100644
index 70555e6ded..0000000000
--- a/indra/newview/skins/default/xui/ja/floater_outfit_save_as.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="modal container" title="アウトフィットを保存する">
-	<button label="保存" label_selected="保存" name="Save"/>
-	<button label="キャンセル" label_selected="キャンセル" name="Cancel"/>
-	<text name="Save item as:">
-		着用しているものを
-新しいアウトフィットに保存:
-	</text>
-	<line_editor name="name ed">
-		[DESC] (新)
-	</line_editor>
-</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_preview_classified.xml b/indra/newview/skins/default/xui/ja/floater_preview_classified.xml
deleted file mode 100644
index ba3bb028b2..0000000000
--- a/indra/newview/skins/default/xui/ja/floater_preview_classified.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="classified_preview" title="クラシファイド広告情報">
-	<floater.string name="Title">
-		クラシファイド広告: [NAME]
-	</floater.string>
-</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_preview_event.xml b/indra/newview/skins/default/xui/ja/floater_preview_event.xml
deleted file mode 100644
index 21f57ca7a3..0000000000
--- a/indra/newview/skins/default/xui/ja/floater_preview_event.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="event_preview" title="イベント情報">
-	<floater.string name="Title">
-		イベント: [NAME]
-	</floater.string>
-</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/ja/floater_preview_gesture_info.xml
deleted file mode 100644
index 682b295a14..0000000000
--- a/indra/newview/skins/default/xui/ja/floater_preview_gesture_info.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="ジェスチャーのショートカット"/>
diff --git a/indra/newview/skins/default/xui/ja/floater_preview_gesture_shortcut.xml b/indra/newview/skins/default/xui/ja/floater_preview_gesture_shortcut.xml
deleted file mode 100644
index e96a43d0c1..0000000000
--- a/indra/newview/skins/default/xui/ja/floater_preview_gesture_shortcut.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="ジェスチャーのショートカット">
-	<text name="trigger_label">
-		チャット:
-	</text>
-	<text name="key_label">
-		キーボード:
-	</text>
-	<combo_box label="なし" name="modifier_combo" width="60"/>
-	<combo_box label="なし" name="key_combo" width="60"/>
-	<text name="replace_text" tool_tip="これらの単語にトリガーとなる単語を置き換えます。 例えば、「howdy」と「hello」を置き換えると、「I wanted to say hello」というチャットは、ジェスチャーを交えながらの「I wanted to say howdy」に変わります。">
-		置き換え:
-	</text>
-	<line_editor name="replace_editor" tool_tip="これらの単語にトリガーとなる単語を置き換えます。 例えば、「howdy」と「hello」を置き換えると、「I wanted to say hello」というチャットは、ジェスチャーを交えながらの「I wanted to say howdy」に変わります。"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/ja/floater_preview_gesture_steps.xml
deleted file mode 100644
index 682b295a14..0000000000
--- a/indra/newview/skins/default/xui/ja/floater_preview_gesture_steps.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="ジェスチャーのショートカット"/>
diff --git a/indra/newview/skins/default/xui/ja/floater_statistics.xml b/indra/newview/skins/default/xui/ja/floater_statistics.xml
deleted file mode 100644
index de83e97b80..0000000000
--- a/indra/newview/skins/default/xui/ja/floater_statistics.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="stats floater" title="統計"/>
diff --git a/indra/newview/skins/default/xui/ja/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/ja/floater_wearable_save_as.xml
deleted file mode 100644
index de8b590a80..0000000000
--- a/indra/newview/skins/default/xui/ja/floater_wearable_save_as.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="modal container" title=" ">
-	<button label="保存" label_selected="保存" name="Save"/>
-	<button label="取り消し" label_selected="取り消し" name="Cancel"/>
-	<text name="Save item as:">
-		アイテムを別名で持ち物に保存:
-	</text>
-	<line_editor name="name ed">
-		New [DESC]
-	</line_editor>
-</floater>
diff --git a/indra/newview/skins/default/xui/ja/panel_audio_device.xml b/indra/newview/skins/default/xui/ja/panel_audio_device.xml
deleted file mode 100644
index 2352c60989..0000000000
--- a/indra/newview/skins/default/xui/ja/panel_audio_device.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel name="device_settings">
-	<text name="Audio Devices">
-		オーディオ機器
-	</text>
-	<text name="Output device (speakers):">
-		出力機器 (スピーカー):
-	</text>
-	<text name="Input device (microphone):">
-		入力機器(マイクロフォン):
-	</text>
-	<text name="Input level:">
-		入力レベル
-	</text>
-	<text_editor name="voice_intro_text1">
-		スライダを調節して、他の住人に聞こえるあなたの音量を制御します。マイクロフォンに向かって話すだけで、入力レベルをテストできます。
-	</text_editor>
-	<volume_slider name="mic_volume_slider"
-	     tool_tip="このスライダーを使用して、ボリュームを変えてください。" />
-	<text name="wait_text">
-		お待ちください
-	</text>
-	<text name="default_text">
-		デフォルト
-	</text>
-</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_friends.xml b/indra/newview/skins/default/xui/ja/panel_friends.xml
deleted file mode 100644
index 0c7114dbb7..0000000000
--- a/indra/newview/skins/default/xui/ja/panel_friends.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="friends">
-	<string name="Multiple">
-		複数のフレンド
-	</string>
-	<scroll_list name="friend_list" tool_tip="複数のフレンドを選択するには、Shift キーまたは Ctrl キーを押しながら名前をクリックします。">
-		<column name="icon_online_status" tool_tip="オンライン状態"/>
-		<column label="名前" name="friend_name" tool_tip="名前"/>
-		<column name="icon_visible_online" tool_tip="フレンドは、あなたがオンラインかどうか確認することができます。"/>
-		<column name="icon_visible_map" tool_tip="フレンドは、地図であなたの居場所を見つけることができます。"/>
-		<column name="icon_edit_mine" tool_tip="フレンドは、オブジェクトを編集、削除、または取得することができます。"/>
-		<column name="icon_edit_theirs" tool_tip="あなたは、このフレンドのオブジェクトを編集することができます。"/>
-	</scroll_list>
-	<panel name="rights_container">
-		<text name="friend_name_label" right="-10">
-			フレンドを選択して権利を変更...
-		</text>
-		<check_box label="オンライン状態の確認を許可する" name="online_status_cb" tool_tip="コーリングカードあるいはフレンドリストでこのフレンドがオンライン状態を確認できるよう設定します"/>
-		<check_box label="世界地図上であなたの居場所を検索可能にする" name="map_status_cb" tool_tip="このフレンドが地図で私の位置を発見できるように設定します"/>
-		<check_box label="オブジェクトの修正を許可する" name="modify_status_cb" tool_tip="このフレンドに私のオブジェクトを改造する許可を与えます"/>
-		<text name="process_rights_label">
-			権利変更をプロセス中...
-		</text>
-	</panel>
-	<pad left="-95"/>
-	<button label="IM・コール" name="im_btn" tool_tip="インスタントメッセージセッションを開きます。" width="90"/>
-	<button label="プロフィール" name="profile_btn" tool_tip="写真、グループ、およびその他の情報を表示します。" width="90"/>
-	<button label="テレポート" name="offer_teleport_btn" tool_tip="このフレンドに、あなたの現在地へのテレポートを申し出ます。" width="90"/>
-	<button label="支払う" name="pay_btn" tool_tip="リンデンドル (L$) をこのフレンドにあげます。" width="90"/>
-	<button label="削除" name="remove_btn" tool_tip="この人物をフレンドリストから外します。" width="90"/>
-	<button label="追加" name="add_btn" tool_tip="フレンド登録を申し出ます。" width="90"/>
-</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_groups.xml b/indra/newview/skins/default/xui/ja/panel_groups.xml
deleted file mode 100644
index de81a6431a..0000000000
--- a/indra/newview/skins/default/xui/ja/panel_groups.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel name="groups">
-	<text name="groupdesc">
-		アクティブなグループは太字で表示されています
-	</text>
-	<text name="groupcount" width="270">
-		[COUNT] のグループに所属しています (最大[MAX])
-	</text>
-	<button label="IM・コール" name="IM"
-	     tool_tip="インスタントメッセージ・セッションを開く" />
-	<button label="情報" name="Info" />
-	<button label="アクティブ" name="Activate" />
-	<button label="抜ける" name="Leave" />
-	<button label="作成..." name="Create" />
-	<button label="検索..." name="Search..." />
-</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_nearby_chat.xml b/indra/newview/skins/default/xui/ja/panel_nearby_chat.xml
deleted file mode 100644
index c0549c8ae9..0000000000
--- a/indra/newview/skins/default/xui/ja/panel_nearby_chat.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<!-- All our XML is utf-8 encoded. -->
-<panel name="nearby_chat">
-	<panel name="chat_caption">
-		<text name="sender_name">
-			近くのチャット
-		</text>
-	</panel>
-</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_online_status.xml b/indra/newview/skins/default/xui/ja/panel_online_status.xml
deleted file mode 100644
index fdc489f375..0000000000
--- a/indra/newview/skins/default/xui/ja/panel_online_status.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="friend_online_status" name="friend_online_status"/>
diff --git a/indra/newview/skins/default/xui/ja/panel_region_general_layout.xml b/indra/newview/skins/default/xui/ja/panel_region_general_layout.xml
deleted file mode 100644
index 188a60eb60..0000000000
--- a/indra/newview/skins/default/xui/ja/panel_region_general_layout.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="リージョン(地域)" name="General">
-	<text name="region_text_lbl">
-		地域:
-	</text>
-	<text left_delta="70" name="region_text">
-		不明
-	</text>
-	<text name="version_channel_text_lbl">
-		バージョン:
-	</text>
-	<text left_delta="70" name="version_channel_text">
-		不明
-	</text>
-	<text name="region_type_lbl">
-		種類:
-	</text>
-	<text left_delta="70" name="region_type">
-		不明
-	</text>
-	<check_box label="地形編集をブロック" name="block_terraform_check"/>
-	<check_box label="飛行をブロック" name="block_fly_check"/>
-	<check_box label="ダメージを許可" name="allow_damage_check"/>
-	<check_box label="プッシュを制限" name="restrict_pushobject"/>
-	<check_box label="土地の再販を許可" name="allow_land_resell_check"/>
-	<check_box label="土地の統合・分割を許可" name="allow_parcel_changes_check"/>
-	<check_box label="土地の検索表示をブロック" name="block_parcel_search_check" tool_tip="検索結果で、この地域と区画を表示するかどうかの設定です"/>
-	<spinner label="アバター数上限" label_width="110" name="agent_limit_spin" width="190"/>
-	<spinner label="物体ボーナス" label_width="110" name="object_bonus_spin" width="190"/>
-	<text label="レーティング区分" name="access_text">
-		レーティング区分:
-	</text>
-	<combo_box label="Moderate" name="access_combo">
-		<combo_box.item label="Adult" name="Adult"/>
-		<combo_box.item label="Moderate" name="Mature"/>
-		<combo_box.item label="General" name="PG"/>
-	</combo_box>
-	<button label="適用" name="apply_btn"/>
-	<button label="住人 1 名をホームにテレポート..." name="kick_btn"/>
-	<button label="住人全員をホームにテレポート..." name="kick_all_btn"/>
-	<button label="メッセージを地域に送信..." name="im_btn"/>
-	<button label="テレハブの管理..." name="manage_telehub_btn"/>
-</panel>
diff --git a/indra/newview/skins/default/xui/nl/floater_customize.xml b/indra/newview/skins/default/xui/nl/floater_customize.xml
deleted file mode 100644
index e6a4ed7a27..0000000000
--- a/indra/newview/skins/default/xui/nl/floater_customize.xml
+++ /dev/null
@@ -1,469 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater customize" title="UITERLIJK">
-	<tab_container name="customize tab container" tab_min_width="120">
-		<placeholder label="Lichaamsdelen" name="body_parts_placeholder"/>
-		<panel label="Postuur" name="Shape" left="124" width="389">
-			<button label="Herstel" label_selected="Herstel" name="Revert"/>
-			<button label="Lichaam" label_selected="Lichaam" name="Body"/>
-			<button label="Hoofd" label_selected="Hoofd" name="Head"/>
-			<button label="Ogen" label_selected="Ogen" name="Eyes"/>
-			<button label="Oren" label_selected="Oren" name="Ears"/>
-			<button label="Neus" label_selected="Neus" name="Nose"/>
-			<button label="Mond" label_selected="Mond" name="Mouth"/>
-			<button label="Kin" label_selected="Kin" name="Chin"/>
-			<button label="Torso" label_selected="Torso" name="Torso"/>
-			<button label="Benen" label_selected="Benen" name="Legs"/>
-			<radio_group name="sex radio">
-				<radio_item name="radio" label="Vrouw" />
-				<radio_item name="radio2" label="Man" />
-			</radio_group>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: Kan niet wijzigen
-			</text>
-			<text name="title_loading">
-				[DESC]: laden...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: niet gedragen
-			</text>
-			<text name="path">
-				Gelegen in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Draag een nieuwe postuur door hem vanuit uw inventaris naar uw avatar
-te slepen. Ook kunt u zelf van begin af aan een nieuwe creëren en dragen.
-			</text>
-			<text name="no modify instructions">
-				U heeft geen permissie om dit draagbare item te wijzigen.
-			</text>
-			<text name="Item Action Label">
-				Postuur:
-			</text>
-			<button label="Nieuw postuur maken" label_selected="Nieuw postuur maken" name="Create New"/>
-			<button label="Opslaan" label_selected="Opslaan" name="Save"/>
-			<button label="Opslaan als..." label_selected="Opslaan als..." name="Save As"/>
-		</panel>
-		<panel label="Huid" name="Skin">
-			<button width="104" label="Huidskleur" label_selected="Huidskleur" name="Skin Color"/>
-			<button width="104" label="Gezichtsdetail" label_selected="Gezichtsdetail" name="Face Detail"/>
-			<button width="104" label="Make-up" label_selected="Make-up" name="Makeup"/>
-			<button width="104" label="Lichaam detail" label_selected="Lichaam detail" name="Body Detail"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: Kan niet wijzigen
-			</text>
-			<text name="title_loading">
-				[DESC]: laden...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: niet gedragen
-			</text>
-			<text name="path">
-				Gelegen in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Draag een nieuwe huid door haar vanuit uw inventaris naar uw avatar te
-slepen. Ook kunt u zelf van begin af aan een nieuwe creëren en dragen.
-			</text>
-			<text name="no modify instructions">
-				U heeft geen permissie om dit draagbare item te wijzigen.
-			</text>
-			<text name="Item Action Label">
-				Huid:
-			</text>
-			<texture_picker width="104" label="Hoofd tatoeages" name="Head Tattoos" tool_tip="Klik om een afbeelding te kiezen"/>
-			<texture_picker width="104" label="Bovenste tatoeage" name="Upper Tattoos" tool_tip="Klik om een afbeelding te kiezen"/>
-			<texture_picker width="104" label="Onderste tatoeages" name="Lower Tattoos" tool_tip="Klik om een afbeelding te kiezen"/>
-			<button label="Nieuwe huid maken" label_selected="Nieuwe huid maken" name="Create New"/>
-			<button label="Opslaan" label_selected="Opslaan" name="Save"/>
-			<button label="Opslaan als..." label_selected="Opslaan als..." name="Save As"/>
-			<button label="Herstel" label_selected="Herstel" name="Revert"/>
-		</panel>
-		<panel label="Haar" name="Hair">
-			<button label="Kleur" label_selected="Kleur" name="Color"/>
-			<button label="Stijl" label_selected="Stijl" name="Style"/>
-			<button label="Wenkbrauwen" label_selected="Wenkbrauwen" name="Eyebrows"/>
-			<button label="Aangezicht" label_selected="Aangezicht" name="Facial"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: Kan niet wijzigen
-			</text>
-			<text name="title_loading">
-				[DESC]: laden...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: niet gedragen
-			</text>
-			<text name="path">
-				Gelegen in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Draag nieuw haar door het vanuit uw inventaris naar uw avatar te
-slepen. Ook kunt u zelf van begin af aan nieuw creëren en dragen.
-			</text>
-			<text name="no modify instructions">
-				U heeft geen permissie om dit draagbare item te wijzigen.
-			</text>
-			<text name="Item Action Label">
-				Haar:
-			</text>
-			<texture_picker label="Textuur" name="Texture" tool_tip="Klik om een afbeelding te kiezen"/>
-			<button label="Nieuw haar maken" label_selected="Nieuw haar maken" name="Create New"/>
-			<button label="Opslaan" label_selected="Opslaan" name="Save"/>
-			<button label="Opslaan als..." label_selected="Opslaan als..." name="Save As"/>
-			<button label="Herstel" label_selected="Herstel" name="Revert"/>
-		</panel>
-		<panel label="Ogen" name="Eyes">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: Kan niet wijzigen
-			</text>
-			<text name="title_loading">
-				[DESC]: laden...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: niet gedragen
-			</text>
-			<text name="path">
-				Gelegen in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Draag nieuwe ogen door ze vanuit uw inventaris naar uw avatar te
-slepen. Ook kunt u zelf van begin af aan nieuwe creëren en dragen.
-			</text>
-			<text name="no modify instructions">
-				U heeft geen permissie om dit draagbare item te wijzigen.
-			</text>
-			<text name="Item Action Label">
-				Ogen:
-			</text>
-			<texture_picker label="Iris" name="Iris" tool_tip="Klik om een afbeelding te kiezen"/>
-			<button label="Nieuwe ogen maken" label_selected="Nieuwe ogen maken" name="Create New"/>
-			<button label="Opslaan" label_selected="Opslaan" name="Save"/>
-			<button label="Opslaan als..." label_selected="Opslaan als..." name="Save As"/>
-			<button label="Herstel" label_selected="Herstel" name="Revert"/>
-		</panel>
-		<panel label="Kleding" name="clothes_placeholder"/>
-		<panel label="Hemd" name="Shirt">
-			<texture_picker label="Stof" name="Fabric" tool_tip="Klik om een afbeelding te kiezen"/>
-			<color_swatch label="Kleur/tint" name="Color/Tint" tool_tip="Klik om de kleurkiezer te openen"/>
-			<button label="Nieuw hemd maken" label_selected="Nieuw hemd maken" name="Create New"/>
-			<button label="Uitdoen" label_selected="Uitdoen" name="Take Off"/>
-			<button label="Opslaan" label_selected="Opslaan" name="Save"/>
-			<button label="Opslaan als..." label_selected="Opslaan als..." name="Save As"/>
-			<button label="Herstel" label_selected="Herstel" name="Revert"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: Kan niet wijzigen
-			</text>
-			<text name="title_loading">
-				[DESC]: laden...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: niet gedragen
-			</text>
-			<text name="path">
-				Gelegen in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Draag een nieuw hemd door hem vanuit uw inventaris naar uw avatar te
-slepen. Ook kunt u zelf van begin af aan een nieuwe creëren en dragen.
-			</text>
-			<text name="no modify instructions">
-				U heeft geen permissie om dit draagbare item te wijzigen.
-			</text>
-			<text name="Item Action Label">
-				Hemd:
-			</text>
-		</panel>
-		<panel label="Broek" name="Pants">
-			<texture_picker label="Stof" name="Fabric" tool_tip="Klik om een afbeelding te kiezen"/>
-			<color_swatch label="Kleur/tint" name="Color/Tint" tool_tip="Klik om de kleurkiezer te openen"/>
-			<button label="Nieuwe broek maken" label_selected="Nieuwe broek maken" name="Create New"/>
-			<button label="Uitdoen" label_selected="Uitdoen" name="Take Off"/>
-			<button label="Opslaan" label_selected="Opslaan" name="Save"/>
-			<button label="Opslaan als..." label_selected="Opslaan als..." name="Save As"/>
-			<button label="Herstel" label_selected="Herstel" name="Revert"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: Kan niet wijzigen
-			</text>
-			<text name="title_loading">
-				[DESC]: laden...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: niet gedragen
-			</text>
-			<text name="path">
-				Gelegen in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Draag een nieuwe broek door hem vanuit uw inventaris naar uw avatar te
-slepen. Ook kunt u zelf van begin af aan een nieuwe creëren en dragen.
-			</text>
-			<text name="no modify instructions">
-				U heeft geen permissie om dit draagbare item te wijzigen.
-			</text>
-			<text name="Item Action Label">
-				Broek:
-			</text>
-		</panel>
-		<panel label="Schoenen" name="Shoes">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: Kan niet wijzigen
-			</text>
-			<text name="title_loading">
-				[DESC]: laden...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: niet gedragen
-			</text>
-			<text name="path">
-				Gelegen in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Draag nieuwe schoenen door ze vanuit uw inventaris naar uw avatar te
-slepen. Ook kunt u zelf van begin af aan nieuwe creëren en dragen.
-			</text>
-			<text name="no modify instructions">
-				U heeft geen permissie om dit draagbare item te wijzigen.
-			</text>
-			<text name="Item Action Label">
-				Schoenen:
-			</text>
-			<texture_picker label="Stof" name="Fabric" tool_tip="Klik om een afbeelding te kiezen"/>
-			<color_swatch label="Kleur/tint" name="Color/Tint" tool_tip="Klik om de kleurkiezer te openen"/>
-			<button label="Nieuwe schoenen maken" label_selected="Nieuwe schoenen maken" name="Create New"/>
-			<button label="Uitdoen" label_selected="Uitdoen" name="Take Off"/>
-			<button label="Opslaan" label_selected="Opslaan" name="Save"/>
-			<button label="Opslaan als..." label_selected="Opslaan als..." name="Save As"/>
-			<button label="Herstel" label_selected="Herstel" name="Revert"/>
-		</panel>
-		<panel label="Sokken" name="Socks">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: Kan niet wijzigen
-			</text>
-			<text name="title_loading">
-				[DESC]: laden...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: niet gedragen
-			</text>
-			<text name="path">
-				Gelegen in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Draag nieuwe sokken door ze vanuit uw inventaris naar uw avatar te
-slepen. Ook kunt u zelf van begin af aan nieuwe creëren en dragen.
-			</text>
-			<text name="no modify instructions">
-				U heeft geen permissie om dit draagbare item te wijzigen.
-			</text>
-			<text name="Item Action Label">
-				Sokken:
-			</text>
-			<texture_picker label="Stof" name="Fabric" tool_tip="Klik om een afbeelding te kiezen"/>
-			<color_swatch label="Kleur/tint" name="Color/Tint" tool_tip="Klik om de kleurkiezer te openen"/>
-			<button label="Nieuwe sokken maken" label_selected="Nieuwe sokken maken" name="Create New"/>
-			<button label="Uitdoen" label_selected="Uitdoen" name="Take Off"/>
-			<button label="Opslaan" label_selected="Opslaan" name="Save"/>
-			<button label="Opslaan als..." label_selected="Opslaan als..." name="Save As"/>
-			<button label="Herstel" label_selected="Herstel" name="Revert"/>
-		</panel>
-		<panel label="Jas" name="Jacket">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: Kan niet wijzigen
-			</text>
-			<text name="title_loading">
-				[DESC]: laden...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: niet gedragen
-			</text>
-			<text name="path">
-				Gelegen in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Draag een nieuwe jas door hem vanuit uw inventaris naar uw avatar te
-slepen. Ook kunt u zelf van begin af aan een nieuwe creëren en dragen.
-			</text>
-			<text name="no modify instructions">
-				U heeft geen permissie om dit draagbare item te wijzigen.
-			</text>
-			<text name="Item Action Label">
-				Jas:
-			</text>
-			<texture_picker width="78" label="Bovenste stof" name="Upper Fabric" tool_tip="Klik om een afbeelding te kiezen"/>
-			<texture_picker width="78" label="Onderste stof" name="Lower Fabric" tool_tip="Klik om een afbeelding te kiezen"/>
-			<color_swatch width="78" label="Kleur/tint" name="Color/Tint" tool_tip="Klik om de kleurkiezer te openen"/>
-			<button label="Nieuwe jas maken" label_selected="Nieuwe jas maken" name="Create New"/>
-			<button label="Uitdoen" label_selected="Uitdoen" name="Take Off"/>
-			<button label="Opslaan" label_selected="Opslaan" name="Save"/>
-			<button label="Opslaan als..." label_selected="Opslaan als..." name="Save As"/>
-			<button label="Herstel" label_selected="Herstel" name="Revert"/>
-		</panel>
-		<panel label="Handschoenen" name="Gloves">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: Kan niet wijzigen
-			</text>
-			<text name="title_loading">
-				[DESC]: laden...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: niet gedragen
-			</text>
-			<text name="path">
-				Gelegen in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Draag nieuwe handschoenen door ze vanuit uw inventaris naar uw avatar
-te slepen. Ook kunt u zelf van begin af aan nieuwe creëren en dragen.
-			</text>
-			<text name="no modify instructions">
-				U heeft geen permissie om dit draagbare item te wijzigen.
-			</text>
-			<text name="Item Action Label">
-				Handschoenen:
-			</text>
-			<texture_picker label="Stof" name="Fabric" tool_tip="Klik om een afbeelding te kiezen"/>
-			<color_swatch label="Kleur/tint" name="Color/Tint" tool_tip="Klik om de kleurkiezer te openen"/>
-			<button label="Nieuwe handschoenen maken" label_selected="Nieuwe handschoenen maken" name="Create New" width="190"/>
-			<button label="Uitdoen" label_selected="Uitdoen" name="Take Off"/>
-			<button label="Opslaan" label_selected="Opslaan" name="Save"/>
-			<button label="Opslaan als..." label_selected="Opslaan als..." name="Save As"/>
-			<button label="Herstel" label_selected="Herstel" name="Revert"/>
-		</panel>
-		<panel label="Onderhemd" name="Undershirt">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: Kan niet wijzigen
-			</text>
-			<text name="title_loading">
-				[DESC]: laden...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: niet gedragen
-			</text>
-			<text name="path">
-				Gelegen in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Draag een nieuw onderhemd door hem vanuit uw inventaris naar uw avatar
-te slepen. Ook kunt u zelf van begin af aan een nieuwe creëren en dragen.
-			</text>
-			<text name="no modify instructions">
-				U heeft geen permissie om dit draagbare item te wijzigen.
-			</text>
-			<text name="Item Action Label">
-				Onderhemd:
-			</text>
-			<texture_picker label="Stof" name="Fabric" tool_tip="Klik om een afbeelding te kiezen"/>
-			<color_swatch label="Kleur/tint" name="Color/Tint" tool_tip="Klik om de kleurkiezer te openen"/>
-			<button label="Nieuw onderhemd maken" label_selected="Nieuw onderhemd maken" name="Create New"/>
-			<button label="Uitdoen" label_selected="Uitdoen" name="Take Off"/>
-			<button label="Opslaan" label_selected="Opslaan" name="Save"/>
-			<button label="Opslaan als..." label_selected="Opslaan als..." name="Save As"/>
-			<button label="Herstel" label_selected="Herstel" name="Revert"/>
-		</panel>
-		<panel label="Onderbroek" name="Underpants">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: Kan niet wijzigen
-			</text>
-			<text name="title_loading">
-				[DESC]: laden...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: niet gedragen
-			</text>
-			<text name="path">
-				Gelegen in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Draag een nieuwe onderbroek door hem vanuit uw inventaris naar uw
-avatar te slepen. Ook kunt u zelf van begin af aan een nieuwe creëren
-en dragen.
-			</text>
-			<text name="no modify instructions">
-				U heeft geen permissie om dit draagbare item te wijzigen.
-			</text>
-			<text name="Item Action Label">
-				Onderbroek:
-			</text>
-			<texture_picker label="Stof" name="Fabric" tool_tip="Klik om een afbeelding te kiezen"/>
-			<color_swatch label="Kleur/tint" name="Color/Tint" tool_tip="Klik om de kleurkiezer te openen"/>
-			<button label="Nieuwe onderbroek maken" label_selected="Nieuwe onderbroek maken" name="Create New"/>
-			<button label="Uitdoen" label_selected="Uitdoen" name="Take Off"/>
-			<button label="Opslaan" label_selected="Opslaan" name="Save"/>
-			<button label="Opslaan als..." label_selected="Opslaan als..." name="Save As"/>
-			<button label="Herstel" label_selected="Herstel" name="Revert"/>
-		</panel>
-		<panel label="Rok" name="Skirt">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: Kan niet wijzigen
-			</text>
-			<text name="title_loading">
-				[DESC]: laden...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: niet gedragen
-			</text>
-			<text name="path">
-				Gelegen in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Draag een nieuwe rok door hem vanuit uw inventaris naar uw avatar te
-slepen. Ook kunt u zelf van begin af aan een nieuwe creëren en dragen.
-			</text>
-			<text name="no modify instructions">
-				U heeft geen permissie om dit draagbare item te wijzigen.
-			</text>
-			<text name="Item Action Label">
-				Rok:
-			</text>
-			<texture_picker label="Stof" name="Fabric" tool_tip="Klik om een afbeelding te kiezen"/>
-			<color_swatch label="Kleur/tint" name="Color/Tint" tool_tip="Klik om de kleurkiezer te openen"/>
-			<button label="Nieuwe rok maken" label_selected="Nieuwe rok maken" name="Create New"/>
-			<button label="Uitdoen" label_selected="Uitdoen" name="Take Off"/>
-			<button label="Opslaan" label_selected="Opslaan" name="Save"/>
-			<button label="Opslaan als..." label_selected="Opslaan als..." name="Save As"/>
-			<button label="Herstel" label_selected="Herstel" name="Revert"/>
-		</panel>
-	</tab_container>
-	<scroll_container name="panel_container"/>
-	<button label="Annuleren" label_selected="Annuleren" name="Cancel"/>
-	<button label="OK" label_selected="OK" name="Ok"/>
-	<button label="Maak kleding..." label_selected="Maak kleding..." name="Make Outfit" left="110"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/nl/floater_im.xml b/indra/newview/skins/default/xui/nl/floater_im.xml
deleted file mode 100644
index 3167af5321..0000000000
--- a/indra/newview/skins/default/xui/nl/floater_im.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<multi_floater name="im_floater" title="Instant Message">
-	<string name="only_user_message">
-		U bent de enige gebruiker in deze sessie.
-	</string>
-	<string name="offline_message">
-		[FIRST] [LAST] is offline.
-	</string>
-	<string name="invite_message">
-		Klik de [BUTTON NAME] knop om deze voicechat te accepteren/verbinden.
-	</string>
-	<string name="muted_message">
-		U heeft deze inwoner genegeerd. Door het sturen van een bericht zal deze automatisch van de negeerlijst verwijderd worden.
-	</string>
-	<string name="generic_request_error">
-		Fout tijdens het maken van het verzoek, probeer het later nog een keer.
-	</string>
-	<string name="insufficient_perms_error">
-		U heeft niet voldoende permissies.
-	</string>
-	<string name="session_does_not_exist_error">
-		De sessie bestaat niet meer
-	</string>
-	<string name="no_ability_error">
-		U beschikt niet over die mogelijkheid.
-	</string>
-	<string name="not_a_mod_error">
-		U bent geen sessie moderateur
-	</string>
-	<string name="muted_error">
-		Een groepsmoderator heeft uw textchat uitgeschakeld.
-	</string>
-	<string name="add_session_event">
-		Kan geen gebruikers toevoegen aan chatsessie met [RECIPIENT].
-	</string>
-	<string name="message_session_event">
-		Kan uw bericht niet versturen naar de chatsessie met [RECIPIENT].
-	</string>
-	<string name="removed_from_group">
-		U bent verwijderd uit de groep.
-	</string>
-	<string name="close_on_no_ability">
-		U heeft niet langer de mogelijkheid om in deze chatsessie te zijn.
-	</string>
-</multi_floater>
diff --git a/indra/newview/skins/default/xui/nl/floater_my_friends.xml b/indra/newview/skins/default/xui/nl/floater_my_friends.xml
deleted file mode 100644
index 8d709d3c00..0000000000
--- a/indra/newview/skins/default/xui/nl/floater_my_friends.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_my_friends" title="CONTACTEN">
-	<tab_container name="friends_and_groups">
-		<panel label="Vrienden" name="friends_panel"/>
-		<panel label="Groepen" name="groups_panel"/>
-	</tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/nl/floater_statistics.xml b/indra/newview/skins/default/xui/nl/floater_statistics.xml
deleted file mode 100644
index 7684a73663..0000000000
--- a/indra/newview/skins/default/xui/nl/floater_statistics.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="stats floater" title="STATISTIEKEN"/>
diff --git a/indra/newview/skins/default/xui/nl/panel_audio_device.xml b/indra/newview/skins/default/xui/nl/panel_audio_device.xml
deleted file mode 100644
index fd5dda799f..0000000000
--- a/indra/newview/skins/default/xui/nl/panel_audio_device.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="device_settings">
-	<text name="Audio Devices">
-		Audioapparaten
-	</text>
-	<text name="Input device (microphone):">
-		Invoerapparaat (microfoon):
-	</text>
-	<text name="Output device (speakers):">
-		Uitvoerapparaat (luidsprekers)
-	</text>
-	<text name="Input level:">
-		Invoerniveau
-	</text>
-	<text_editor name="voice_intro_text1">
-		Wijzig de schuifbalk om in te stellen hoe luid u klinkt voor andere inwoners. Spreek gewoon in uw microfoon om het invoerniveau te testen.
-	</text_editor>
-	<volume_slider name="mic_volume_slider" tool_tip="Wijzig het volume met deze schuifknop"/>
-	<text name="wait_text">
-		Wacht u alstublieft
-	</text>
-	<string name="default_text">
-		Standaard
-	</string>
-</panel>
diff --git a/indra/newview/skins/default/xui/nl/panel_friends.xml b/indra/newview/skins/default/xui/nl/panel_friends.xml
deleted file mode 100644
index eaf6e5d55b..0000000000
--- a/indra/newview/skins/default/xui/nl/panel_friends.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="friends">
-	<string name="Multiple">
-		Meerdere vrienden...
-	</string>
-	<scroll_list name="friend_list" tool_tip="Houd shift of control ingedrukt terwijl u meerdere vrienden klikt">
-		<column name="icon_online_status" tool_tip="Online status"/>
-		<column label="Naam" name="friend_name" tool_tip="Naam"/>
-		<column name="icon_visible_online" tool_tip="Vriend kan zien wanneer u online bent"/>
-		<column name="icon_visible_map" tool_tip="Vriend kan u op de kaart lokaliseren"/>
-		<column name="icon_edit_mine" tool_tip="Vriend kan objecten wijzigen, verwijderen of oppakken"/>
-		<column name="icon_edit_theirs" tool_tip="U kunt de objecten van deze vriend bewerken"/>
-	</scroll_list>
-	<button label="IM/Oproepen" name="im_btn" tool_tip="Open Instant Message sessie" width="86"/>
-	<button label="Profiel" name="profile_btn" tool_tip="Toon afbeelding, groepen en andere informatie" width="86"/>
-	<button label="Teleport..." name="offer_teleport_btn" tool_tip="Bied deze vriend een teleport naar uw huidige locatie aan" width="86"/>
-	<button label="Betaal..." name="pay_btn" tool_tip="Geef Linden dollars (L$) aan deze vriend" width="86"/>
-	<button label="Verwijderen..." name="remove_btn" tool_tip="Verwijder deze persoon van uw vriendenlijst" width="86"/>
-	<button label="Toevoegen..." name="add_btn" tool_tip="Bied vriendschap aan een inwoner aan" width="86"/>
-</panel>
diff --git a/indra/newview/skins/default/xui/nl/panel_groups.xml b/indra/newview/skins/default/xui/nl/panel_groups.xml
deleted file mode 100644
index a0c77b83ff..0000000000
--- a/indra/newview/skins/default/xui/nl/panel_groups.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="groups">
-	<text name="groupdesc">
-		Uw huidige actieve groep wordt vet getoond.
-	</text>
-	<text name="groupcount" width="300">
-		U behoort tot [COUNT] groepen (maximaal [MAX]).
-	</text>
-	<button label="IM/Oproepen" name="IM" tool_tip="Open Instant Message sessie" width="86"/>
-	<button label="Info" name="Info" width="86"/>
-	<button label="Activeren" name="Activate" width="86"/>
-	<button label="Verlaten" name="Leave" width="86"/>
-	<button label="Maak…" name="Create" width="86"/>
-	<button label="Zoeken…" name="Search..." width="86"/>
-</panel>
diff --git a/indra/newview/skins/default/xui/pl/floater_customize.xml b/indra/newview/skins/default/xui/pl/floater_customize.xml
deleted file mode 100644
index 373e74ffe0..0000000000
--- a/indra/newview/skins/default/xui/pl/floater_customize.xml
+++ /dev/null
@@ -1,529 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater customize" title="WYGLĄD">
-	<tab_container name="customize tab container">
-		<text label="Części ciała" name="body_parts_placeholder">
-			Części ciała
-		</text>
-		<panel label="Kształt" name="Shape">
-			<button label="Wróć" label_selected="Wróć" name="Revert"/>
-			<button label="Ciało" label_selected="Ciało" name="Body"/>
-			<button label="Głowa" label_selected="Głowa" name="Head"/>
-			<button label="Oczy" label_selected="Oczy" name="Eyes"/>
-			<button label="Uszy" label_selected="Uszy" name="Ears"/>
-			<button label="Nos" label_selected="Nos" name="Nose"/>
-			<button label="Usta" label_selected="Usta" name="Mouth"/>
-			<button label="Broda " label_selected="Broda" name="Chin"/>
-			<button label="Tułów" label_selected="Tułów" name="Torso"/>
-			<button label="Nogi" label_selected="Nogi" name="Legs"/>
-			<radio_group name="sex radio">
-				<radio_item label="Kobieta" name="radio" value="0"/>
-				<radio_item label="Mężczyzna" name="radio2" value="1"/>
-			</radio_group>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: zabroniona modyfikacja
-			</text>
-			<text name="title_loading">
-				[DESC]: ładowanie...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: niezałożone
-			</text>
-			<text name="path">
-				Zapisane w [PATH]
-			</text>
-			<text name="not worn instructions">
-				Załóż nowy kształt poprzez przeciągnięcie go ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własny kształt z plików roboczych.
-			</text>
-			<text name="no modify instructions">
-				Nie posiadasz prawa do modyfikowania tego kształtu.
-			</text>
-			<text name="Item Action Label">
-				Kształt:
-			</text>
-			<button label="Nowy kształt" label_selected="Nowy kształt" name="Create New"/>
-			<button label="Zapisz" label_selected="Zapisz" name="Save"/>
-			<button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/>
-		</panel>
-		<panel label="Skórka" name="Skin">
-			<button label="Kolor skórki" label_selected="Kolor skórki" name="Skin Color"/>
-			<button label="Detale twarzy" label_selected="Detale twarzy" name="Face Detail"/>
-			<button label="Makijaż" label_selected="Makijaż" name="Makeup"/>
-			<button label="Detale ciała" label_selected="Detale ciała" name="Body Detail"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: modyfikacja zabroniona
-			</text>
-			<text name="title_loading">
-				[DESC]: ładowanie...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: niezałożone
-			</text>
-			<text name="path">
-				Zapisane w [PATH]
-			</text>
-			<text name="not worn instructions">
-				Załóż nową skórkę poprzez przeciągnięcie jej ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własną skórkę z plików roboczych.
-			</text>
-			<text name="no modify instructions">
-				Nie posiadasz prawa do modyfikowania tej skórki.
-			</text>
-			<text name="Item Action Label">
-				Skórka:
-			</text>
-			<texture_picker label="Tatuaże głowy" name="Head Tattoos" tool_tip="Kliknij by wybrać teksturę"/>
-			<texture_picker label="Tatuaże górne" name="Upper Tattoos" tool_tip="Kliknij by wybrać teksturę"/>
-			<texture_picker label="Tatuaże dolne" name="Lower Tattoos" tool_tip="Kliknij by wybrać teksturę"/>
-			<button label="Nowa skórka" label_selected="Nowa skórka" name="Create New"/>
-			<button label="Zapisz" label_selected="Zapisz" name="Save"/>
-			<button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/>
-			<button label="Wróć" label_selected="Wróć" name="Revert"/>
-		</panel>
-		<panel label="Włosy" name="Hair">
-			<button label="Kolor" label_selected="Kolor" name="Color"/>
-			<button label="Styl" label_selected="Styl" name="Style"/>
-			<button label="Brwi" label_selected="Brwi" name="Eyebrows"/>
-			<button label="Twarzy" label_selected="Twarzy" name="Facial"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: modyfikacja zabroniona
-			</text>
-			<text name="title_loading">
-				[DESC]: ładowanie...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: niezałożone
-			</text>
-			<text name="path">
-				Zapisane w [PATH]
-			</text>
-			<text name="not worn instructions">
-				Załóż nowe włosy poprzez przeciągnięcie ich ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własne włosy z plików roboczych.
-			</text>
-			<text name="no modify instructions">
-				Nie posiadasz prawa do modyfikowania tych włosów.
-			</text>
-			<text name="Item Action Label">
-				Włosy:
-			</text>
-			<texture_picker label="Tekstura" name="Texture" tool_tip="Kliknij by wybrać teksturę"/>
-			<button label="Nowe włosy" label_selected="Nowe włosy" name="Create New"/>
-			<button label="Zapisz" label_selected="Zapisz" name="Save"/>
-			<button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/>
-			<button label="Wróć" label_selected="Wróć" name="Revert"/>
-		</panel>
-		<panel label="Oczy" name="Eyes">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: modyfikacja zabroniona
-			</text>
-			<text name="title_loading">
-				[DESC]: ładowanie...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: niezałożone
-			</text>
-			<text name="path">
-				Zapisane w [PATH]
-			</text>
-			<text name="not worn instructions">
-				Załóż nowe oczy poprzez przeciągnięcie ich ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własne oczy z plików roboczych.
-			</text>
-			<text name="no modify instructions">
-				Nie posiadasz prawa do modyfikowania tych oczów.
-			</text>
-			<text name="Item Action Label">
-				Oczy:
-			</text>
-			<texture_picker label="Tęczówka" name="Iris" tool_tip="Kliknij by wybrać teksturę"/>
-			<button label="Nowe oczy" label_selected="Nowe oczy" name="Create New"/>
-			<button label="Zapisz" label_selected="Zapisz" name="Save"/>
-			<button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/>
-			<button label="Wróć" label_selected="Wróć" name="Revert"/>
-		</panel>
-		<text label="Ubrania" name="clothes_placeholder">
-			Ubrania
-		</text>
-		<panel label="Koszula" name="Shirt">
-			<texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij by wybrać teksturę"/>
-			<color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/>
-			<button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/>
-			<button label="Nowa koszula" label_selected="Nowa Koszula" name="Create New"/>
-			<button label="Zapisz" label_selected="Zapisz" name="Save"/>
-			<button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/>
-			<button label="Wróć" label_selected="Wróć" name="Revert"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: modyfikowanie zabronione
-			</text>
-			<text name="title_loading">
-				[DESC]: ładowanie...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: niezałożone
-			</text>
-			<text name="path">
-				Zapisane w [PATH]
-			</text>
-			<text name="not worn instructions">
-				Załóż nową koszulę poprzez przeciągnięcie jej ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własną koszulę z plików roboczych.
-			</text>
-			<text name="no modify instructions">
-				Nie posiadasz prawa do modyfikowania tej koszuli.
-			</text>
-			<text name="Item Action Label">
-				Koszula:
-			</text>
-		</panel>
-		<panel label="Spodnie" name="Pants">
-			<texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij tutaj by wybrać teksturę"/>
-			<color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/>
-			<button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/>
-			<button label="Nowe spodnie" label_selected="Nowe spodnie" name="Create New"/>
-			<button label="Zapisz" label_selected="Zapisz" name="Save"/>
-			<button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/>
-			<button label="Wróć" label_selected="Wróć" name="Revert"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: modyfikcja zabroniona
-			</text>
-			<text name="title_loading">
-				[DESC]: ładowanie...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: niezałożone
-			</text>
-			<text name="path">
-				Zapisane w [PATH]
-			</text>
-			<text name="not worn instructions">
-				Załóż nowe spodnie poprzez przeciągnięcie ich ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własne spodnie z plików roboczych.
-			</text>
-			<text name="no modify instructions">
-				Nie posiadasz prawa do modyfikowania tych spodni.
-			</text>
-			<text name="Item Action Label">
-				Spodnie:
-			</text>
-		</panel>
-		<panel label="Buty" name="Shoes">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: modyfikacja zabroniona
-			</text>
-			<text name="title_loading">
-				[DESC]: ładwanie...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: niezałożone
-			</text>
-			<text name="path">
-				Zapisane w [PATH]
-			</text>
-			<text name="not worn instructions">
-				Załóż nowe buty poprzez przeciągnięcie ich ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własne buty z plików roboczych.
-			</text>
-			<button label="Nowe Buty" label_selected="Nowe Buty" name="Create New"/>
-			<text name="no modify instructions">
-				Nie posiadasz prawa do modyfikowania tych butów.
-			</text>
-			<text name="Item Action Label">
-				Buty:
-			</text>
-			<texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij by wybrać teksturę"/>
-			<color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/>
-			<button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/>
-			<button label="Zapisz" label_selected="Zapisz" name="Save"/>
-			<button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/>
-			<button label="Wróć" label_selected="Wróć" name="Revert"/>
-		</panel>
-		<panel label="Skarpety" name="Socks">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: modyfikacja zabroniona
-			</text>
-			<text name="title_loading">
-				[DESC]: ładowanie...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: niezałożone
-			</text>
-			<text name="path">
-				Zapisane w [PATH]
-			</text>
-			<text name="not worn instructions">
-				Załóż nowe skarpety poprzez przeciągnięcie ich ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własne skarpety z plików roboczych.
-			</text>
-			<button label="Nowe Skarpety" label_selected="Nowe Skarpety" name="Create New"/>
-			<text name="no modify instructions">
-				Nie posiadasz prawa do modyfikowania tych skarpet.
-			</text>
-			<text name="Item Action Label">
-				Skarpetki:
-			</text>
-			<texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij by wybrać teksturę"/>
-			<color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/>
-			<button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/>
-			<button label="Zapisz" label_selected="Zapisz" name="Save"/>
-			<button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/>
-			<button label="Wróć" label_selected="Wróć" name="Revert"/>
-		</panel>
-		<panel label="Kurtka" name="Jacket">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: modyfikacja zabroniona
-			</text>
-			<text name="title_loading">
-				[DESC]: ładowanie...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: niezałożone
-			</text>
-			<text name="path">
-				Zapisane w [PATH]
-			</text>
-			<text name="not worn instructions">
-				Załóż nową kurtkę poprzez przeciągnięcie jej ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własną kurtkę z plików roboczych.
-			</text>
-			<button label="Nowa Kurtka" label_selected="Nowa Kurtka" name="Create New"/>
-			<text name="no modify instructions">
-				Nie posiadasz prawa do modyfikowania tej kurtki.
-			</text>
-			<text name="Item Action Label">
-				Kurtka:
-			</text>
-			<texture_picker label="Górny materiał" name="Upper Fabric" tool_tip="Kliknij by wybrać teksturę" width="76"/>
-			<texture_picker label="Dolny materiał" name="Lower Fabric" tool_tip="Kliknij by wybrać kolor" width="76"/>
-			<color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor" width="76"/>
-			<button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/>
-			<button label="Zapisz" label_selected="Zapisz" name="Save"/>
-			<button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/>
-			<button label="Wróć" label_selected="Wróć" name="Revert"/>
-		</panel>
-		<panel label="Rękawiczki" name="Gloves">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: modyfikacja zabroniona
-			</text>
-			<text name="title_loading">
-				[DESC]: ładowanie...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: niezałożone
-			</text>
-			<text name="path">
-				Zapisane w [PATH]
-			</text>
-			<text name="not worn instructions">
-				Załóż nowe rękawiczki poprzez przeciągnięcie ich ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własne rękawiczki z plików roboczych.
-			</text>
-			<button label="Nowe Rękawiczki" label_selected="Nowe Rękawiczki" name="Create New"/>
-			<text name="no modify instructions">
-				Nie posiadasz prawa do modyfikowania tych rękawiczek
-			</text>
-			<text name="Item Action Label">
-				Rękawiczki:
-			</text>
-			<texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij by wybrać teksturę"/>
-			<color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/>
-			<button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/>
-			<button label="Zapisz" label_selected="Zapisz" name="Save"/>
-			<button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/>
-			<button label="Wróć" label_selected="Wróć" name="Revert"/>
-		</panel>
-		<panel label="Podkoszulek" name="Undershirt">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: modyfikacja zabroniona
-			</text>
-			<text name="title_loading">
-				[DESC]: ładowanie...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: niezałożone
-			</text>
-			<text name="path">
-				Zapisane w [PATH]
-			</text>
-			<text name="not worn instructions">
-				Załóż nowy podkoszulek poprzez przeciągnięcie ich ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własny podkoszulek z plików roboczych.
-			</text>
-			<button label="Nowy Podkoszulek" label_selected="Nowy Podkoszulek" name="Create New"/>
-			<text name="no modify instructions">
-				Nie posiadasz prawa do modyfikowania tego podkoszulka.
-			</text>
-			<text name="Item Action Label">
-				Podkoszulka:
-			</text>
-			<texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij by wybrać teksturę"/>
-			<color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/>
-			<button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/>
-			<button label="Zapisz" label_selected="Zapisz" name="Save"/>
-			<button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/>
-			<button label="Wróć" label_selected="Wróć" name="Revert"/>
-		</panel>
-		<panel label="Bielizna" name="Underpants">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: modyfikacja zabroniona
-			</text>
-			<text name="title_loading">
-				[DESC]: ładowanie...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: niezałożone
-			</text>
-			<text name="path">
-				Zapisane w [PATH]
-			</text>
-			<text name="not worn instructions">
-				Załóż nową bieliznę poprzez przeciągnięcie jej ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własną bieliznę z plików roboczych.
-			</text>
-			<button label="Nowa Bielizna" label_selected="Nowa Bielizna" name="Create New"/>
-			<text name="no modify instructions">
-				Nie posiadasz prawa do modyfikowania tej bielizny.
-			</text>
-			<text name="Item Action Label">
-				Bielizna:
-			</text>
-			<texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij by wybrać teksturę"/>
-			<color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/>
-			<button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/>
-			<button label="Zapisz" label_selected="Zapisz" name="Save"/>
-			<button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/>
-			<button label="Wróć" label_selected="Wróć" name="Revert"/>
-		</panel>
-		<panel label="Spódnica" name="Skirt">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: modyfikacja zabroniona
-			</text>
-			<text name="title_loading">
-				[DESC]: ładowanie...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: niezałożone
-			</text>
-			<text name="path">
-				Zapisane w [PATH]
-			</text>
-			<text name="not worn instructions">
-				Załóż nową spódnicę poprzez przeciągnięcie jej ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własną spódnicę z plików roboczych.
-			</text>
-			<button label="Nowa Spódnica" label_selected="Nowa Spódnica" name="Create New"/>
-			<text name="no modify instructions">
-				Nie posiadasz prawa do modyfikowania tej spódnicy.
-			</text>
-			<text name="Item Action Label">
-				Spódnica:
-			</text>
-			<texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij by wybrać teksturę"/>
-			<color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/>
-			<button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/>
-			<button label="Zapisz" label_selected="Zapisz" name="Save"/>
-			<button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/>
-			<button label="Wróć" label_selected="Wróć" name="Revert"/>
-		</panel>
-		<panel label="Tatuaż" name="Tattoo">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: nie można modyfikować
-			</text>
-			<text name="title_loading">
-				[DESC]: ładowanie...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: nienałożone
-			</text>
-			<text name="path">
-				Zapisane w [PATH]
-			</text>
-			<text name="not worn instructions">
-				Załóż nowy tatuaż poprzez przeciągnięcie go ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własny tatuaż z plików roboczych.
-			</text>
-			<button label="Utwórz Nowy Tatuaż" label_selected="Stwórz Nowy Tatuaż" name="Create New"/>
-			<text name="no modify instructions">
-				Nie posiadasz uprawnień do modyfikowania tych ubrań/części ciała.
-			</text>
-			<text name="Item Action Label">
-				Tatuaż:
-			</text>
-			<texture_picker label="Tatuaż głowy" name="Head Tattoo" tool_tip="Kliknij aby wybrać teksturę"/>
-			<texture_picker label="Górny tatuaż" name="Upper Tattoo" tool_tip="Kliknij aby wybrać teksturę"/>
-			<texture_picker label="Tatuaż dolnej części ciała" name="Lower Tattoo" tool_tip="Kliknij aby wybrać teksturę"/>
-			<button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/>
-			<button label="Zapisz" label_selected="Zapisz" name="Save"/>
-			<button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/>
-			<button label="Wróć" label_selected="Wróć" name="Revert"/>
-		</panel>
-		<panel label="Alpha" name="Alpha">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: nie można modyfikować
-			</text>
-			<text name="title_loading">
-				[DESC]: ładowanie...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: nienałożone
-			</text>
-			<text name="path">
-				Zapisane w [PATH]
-			</text>
-			<text name="not worn instructions">
-				Załóż nową maskę alpha poprzez przeciągnięcie jej ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własną z plików roboczych.
-			</text>
-			<button label="Stwórz nową Alpha" label_selected="Utwórz nową Alpha" name="Create New"/>
-			<text name="no modify instructions">
-				Nie posiadasz uprawnień do modyfikowania tych ubrań/części ciała.
-			</text>
-			<text name="Item Action Label">
-				Alpha:
-			</text>
-			<texture_picker label="Dolna Alpha" name="Lower Alpha" tool_tip="Kliknij aby wybrać teksturę"/>
-			<texture_picker label="Alpha górnej części ciała" name="Upper Alpha" tool_tip="Kliknij aby wybrać teksturę"/>
-			<texture_picker label="Alpha głowy" name="Head Alpha" tool_tip="Kliknij aby wybrać teksturę"/>
-			<texture_picker label="Alpha oka" name="Eye Alpha" tool_tip="Kliknij aby wybrać teksturę"/>
-			<texture_picker label="Alpha włosów" name="Hair Alpha" tool_tip="Kliknij aby wybrać teksturę"/>
-			<button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/>
-			<button label="Zapisz" label_selected="Zapisz" name="Save"/>
-			<button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/>
-			<button label="Wróć" label_selected="Wróć" name="Revert"/>
-		</panel>
-	</tab_container>
-	<button label="Info o skrypcie" label_selected="Info o skrypcie" name="script_info" tool_tip="Pokaż skrypty przyłączone do Twojego awatara"/>
-	<button label="Stwórz ubranie" label_selected="Stwórz Ubranie" name="make_outfit_btn"/>
-	<button label="Anuluj" label_selected="Anuluj" name="Cancel"/>
-	<button label="OK" label_selected="OK" name="Ok"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_device_settings.xml b/indra/newview/skins/default/xui/pl/floater_device_settings.xml
deleted file mode 100644
index c485fb2e29..0000000000
--- a/indra/newview/skins/default/xui/pl/floater_device_settings.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_device_settings" title="USTAWIENIA URZĄDZEŃ KOMUNIKACJI GŁOSOWEJ"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_im.xml b/indra/newview/skins/default/xui/pl/floater_im.xml
deleted file mode 100644
index e40935ccb7..0000000000
--- a/indra/newview/skins/default/xui/pl/floater_im.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<multi_floater name="im_floater" title="Wiadomość (IM)">
-	<string name="only_user_message">
-		Jesteś jedynym uczestnikiem tej konferencji.
-	</string>
-	<string name="offline_message">
-		[FIRST] [LAST] - ta osoba jest obecnie niedostępna.
-	</string>
-	<string name="invite_message">
-		Kliknij na [BUTTON NAME] przycisk by zaakceptować/dołączyć do tej rozmowy.
-	</string>
-	<string name="muted_message">
-		Zablokowałeś tego Rezydenta. Wysłanie wiadomości automatycznie odblokuje go.
-	</string>
-	<string name="generic_request_error">
-		Błąd. Spróbuj ponownie za kilka minut.
-	</string>
-	<string name="insufficient_perms_error">
-		Nie posiadasz praw do kontynuacji.
-	</string>
-	<string name="session_does_not_exist_error">
-		Ta konferencja jest już zakończona.
-	</string>
-	<string name="no_ability_error">
-		Nie posiadesz tego przywileju.
-	</string>
-	<string name="not_a_mod_error">
-		Nie jesteś moderatorem konferencji.
-	</string>
-	<string name="muted_error">
-		Moderator wyciszył Cię.
-	</string>
-	<string name="add_session_event">
-		Niemożliwość dodania Rezydentów do tej konferencji z [RECIPIENT].
-	</string>
-	<string name="message_session_event">
-		Nie można wysłać Twojej wiadomości do sesji czatu z [RECIPIENT].
-	</string>
-	<string name="removed_from_group">
-		Usunięto Cię z grupy.
-	</string>
-	<string name="close_on_no_ability">
-		Nie posiadasz praw by uczestniczyć w tej konferencji.
-	</string>
-</multi_floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_my_friends.xml b/indra/newview/skins/default/xui/pl/floater_my_friends.xml
deleted file mode 100644
index 847c93f891..0000000000
--- a/indra/newview/skins/default/xui/pl/floater_my_friends.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_my_friends" title="KONTAKTY">
-	<tab_container name="friends_and_groups">
-		<panel label="Znajomi" name="friends_panel"/>
-		<panel label="Grupy" name="groups_panel"/>
-	</tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/pl/floater_outfit_save_as.xml
deleted file mode 100644
index a8d2e10c5f..0000000000
--- a/indra/newview/skins/default/xui/pl/floater_outfit_save_as.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="modal container" title="Stwórz ubranie">
-	<button label="Zapisz" label_selected="Zapisz" name="Save"/>
-	<button label="Anuluj" label_selected="Anuluj" name="Cancel"/>
-	<text name="Save item as:">
-		Zapisz to co mam w tej chwili założone
-jako nowy komplet ubrania:
-	</text>
-	<line_editor name="name ed">
-		[DESC] (nowy)
-	</line_editor>
-</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_preview_classified.xml b/indra/newview/skins/default/xui/pl/floater_preview_classified.xml
deleted file mode 100644
index d3d6588397..0000000000
--- a/indra/newview/skins/default/xui/pl/floater_preview_classified.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="classified_preview" title="INFO O REKLAMIE">
-	<floater.string name="Title">
-		Reklama: [NAME]
-	</floater.string>
-</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_preview_event.xml b/indra/newview/skins/default/xui/pl/floater_preview_event.xml
deleted file mode 100644
index 5d9e47bc00..0000000000
--- a/indra/newview/skins/default/xui/pl/floater_preview_event.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="event_preview" title="INFO O IMPREZIE">
-	<floater.string name="Title">
-		Impreza: [NAME]
-	</floater.string>
-</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/pl/floater_preview_gesture_info.xml
deleted file mode 100644
index a041472f68..0000000000
--- a/indra/newview/skins/default/xui/pl/floater_preview_gesture_info.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="GESTURKI"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_preview_gesture_shortcut.xml b/indra/newview/skins/default/xui/pl/floater_preview_gesture_shortcut.xml
deleted file mode 100644
index 9692fca9cd..0000000000
--- a/indra/newview/skins/default/xui/pl/floater_preview_gesture_shortcut.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="GESTURKI">
-	<text name="trigger_label">
-		Czat:
-	</text>
-	<text name="key_label">
-		Klawiatura:
-	</text>
-	<combo_box label="Żaden" name="modifier_combo"/>
-	<combo_box label="Żaden" name="key_combo"/>
-	<text name="replace_text" tool_tip="Zmień włączającą frazę na inną. Na przykład zmiana &apos;witam&apos; na &apos;cześć&apos; zmieni czat &apos;Chciałem powiedzieć witam&apos; na &apos;Chciałem powiedzieć cześć&apos; i pokaże animację!">
-		Zamień na:
-	</text>
-	<line_editor name="replace_editor" tool_tip="Zmień włączającą frazę na inną. Na przykład zmiana &apos;witam&apos; na &apos;cześć&apos; zmieni czat &apos;Chciałem powiedzieć witam&apos; na &apos;Chciałem powiedzieć cześć&apos; i pokaże animację"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/pl/floater_preview_gesture_steps.xml
deleted file mode 100644
index a041472f68..0000000000
--- a/indra/newview/skins/default/xui/pl/floater_preview_gesture_steps.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="GESTURKI"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_statistics.xml b/indra/newview/skins/default/xui/pl/floater_statistics.xml
deleted file mode 100644
index b7025e484d..0000000000
--- a/indra/newview/skins/default/xui/pl/floater_statistics.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="stats floater" title="STATYSTYKI"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/pl/floater_wearable_save_as.xml
deleted file mode 100644
index 925295102e..0000000000
--- a/indra/newview/skins/default/xui/pl/floater_wearable_save_as.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="modal container" title="">
-	<button label="Zapisz" label_selected="Zapisz" name="Save"/>
-	<button label="Anuluj" label_selected="Anuluj" name="Cancel"/>
-	<text name="Save item as:">
-		Zapisz obiekt w mojej Szafie jako:
-	</text>
-	<line_editor name="name ed">
-		Nowe [DESC]
-	</line_editor>
-</floater>
diff --git a/indra/newview/skins/default/xui/pl/panel_audio_device.xml b/indra/newview/skins/default/xui/pl/panel_audio_device.xml
deleted file mode 100644
index 9074296bd5..0000000000
--- a/indra/newview/skins/default/xui/pl/panel_audio_device.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel name="device_settings">
-	<text name="Audio Devices">
-		Urządzenia audio
-	</text>
-	<text name="Input device (microphone):">
-		Urządzenia wejściowe (mikrofon):
-	</text>
-	<text name="Output device (speakers):">
-		Urządzenia wyjściowe (głośniki):
-	</text>
-	<text name="Input level:">
-		Poziom wejścia
-	</text>
-	<text_editor name="voice_intro_text1">
-		Za pomocą suwaka ustaw poziom głośności Twojego mówienia dla innych Rezydentów. W celu przetestowania poziomu wejścia, zacznij mówić do mikrofonu.
-	</text_editor>
-	<volume_slider name="mic_volume_slider"
-	     tool_tip="By zmienić poziom głośności użyj suwaka" />
-	<text name="wait_text">
-		Proszę poczekać
-	</text>
-	<string name="default_text">
-		Domyślne
-	</string>
-</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_friends.xml b/indra/newview/skins/default/xui/pl/panel_friends.xml
deleted file mode 100644
index 9d8dc69a35..0000000000
--- a/indra/newview/skins/default/xui/pl/panel_friends.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="friends">
-	<string name="Multiple">
-		Znajomi
-	</string>
-	<scroll_list name="friend_list" tool_tip="Aby wybrać wielu znajomych za jednym razem przetrzymaj klawisz Shift lub Control">
-		<column name="icon_online_status" tool_tip="Status dostępności"/>
-		<column label="Imię" name="friend_name" tool_tip="Imię"/>
-		<column name="icon_visible_online" tool_tip="Ta osoba może widzieć czy jesteś w Second Life"/>
-		<column name="icon_visible_map" tool_tip="Ta osoba może zlokalizować Ciebie na mapie"/>
-		<column name="icon_edit_mine" tool_tip="Ta osoba może edytować, usunąć lub wziąć Twoje obiekty"/>
-		<column name="icon_edit_theirs" tool_tip="Możesz edytować obiekty tej osoby"/>
-	</scroll_list>
-	<button label="Czat/IM" name="im_btn" tool_tip="Rozpocznij sesję czatu/IM"/>
-	<button label="Profil" name="profile_btn" tool_tip="Pokaż zdjęcia, grupy i inne informacje"/>
-	<button label="Teleportuj" name="offer_teleport_btn" tool_tip="Zaoferuj teleportację do siebie"/>
-	<button label="Zapłać" name="pay_btn" tool_tip="Zapłać L$ tej osobie"/>
-	<button label="Usuń" name="remove_btn" tool_tip="Usuń tę osobę z listy znajomych"/>
-	<button label="Dodaj" name="add_btn" tool_tip="Zaoferuj znajomość"/>
-</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_groups.xml b/indra/newview/skins/default/xui/pl/panel_groups.xml
deleted file mode 100644
index 671d8fd2f0..0000000000
--- a/indra/newview/skins/default/xui/pl/panel_groups.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel name="groups">
-	<scroll_list name="group list">
-		<column label="" name="name" />
-	</scroll_list>
-	<text name="groupdesc">
-		Twoja aktywna grupa jest pogrubiona.
-	</text>
-	<text name="groupcount">
-		Należysz do [COUNT] grup (maksimum to [MAX]).
-	</text>
-	<button label="Czat/IM" name="IM" tool_tip="Rozpocznij sesję czatu (IM)" />
-	<button label="O grupie" name="Info" />
-	<button label="Wybierz" name="Activate" />
-	<button label="Opuść" name="Leave" />
-	<button label="Stwórz..." name="Create" />
-	<button label="Szukaj..." name="Search..." />
-</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_nearby_chat.xml b/indra/newview/skins/default/xui/pl/panel_nearby_chat.xml
deleted file mode 100644
index bcecaeabb3..0000000000
--- a/indra/newview/skins/default/xui/pl/panel_nearby_chat.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<!-- All our XML is utf-8 encoded. -->
-<panel name="nearby_chat">
-	<panel name="chat_caption">
-		<text name="sender_name">
-			CZAT LOKALNY
-		</text>
-	</panel>
-</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_online_status.xml b/indra/newview/skins/default/xui/pl/panel_online_status.xml
deleted file mode 100644
index fdc489f375..0000000000
--- a/indra/newview/skins/default/xui/pl/panel_online_status.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="friend_online_status" name="friend_online_status"/>
diff --git a/indra/newview/skins/default/xui/pl/panel_region_general_layout.xml b/indra/newview/skins/default/xui/pl/panel_region_general_layout.xml
deleted file mode 100644
index 84d7d7ab62..0000000000
--- a/indra/newview/skins/default/xui/pl/panel_region_general_layout.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Region" name="General">
-	<text name="region_text_lbl">
-		Region:
-	</text>
-	<text name="region_text">
-		nieznany
-	</text>
-	<text name="version_channel_text_lbl">
-		Wersja:
-	</text>
-	<text name="version_channel_text">
-		nieznany
-	</text>
-	<text name="region_type_lbl">
-		Typ:
-	</text>
-	<text name="region_type">
-		nieznany
-	</text>
-	<check_box label="Zablokuj zmiany terenu" name="block_terraform_check"/>
-	<check_box label="Zablokuj latanie" name="block_fly_check"/>
-	<check_box label="Uszkodzenia dozwolone" name="allow_damage_check"/>
-	<check_box label="Zablokuj popychanie" name="restrict_pushobject"/>
-	<check_box label="Odsprzedaż dozwolona" name="allow_land_resell_check"/>
-	<check_box label="Łączenie/Dzielenie dozwolone" name="allow_parcel_changes_check"/>
-	<check_box label="Zablokuj wyszukiwanie" name="block_parcel_search_check" tool_tip="Pozwól na wyświetlanie nazwy Regionu i Posiadłości w wynikach wyszukiwania"/>
-	<spinner label="Limit gości" name="agent_limit_spin"/>
-	<spinner label="Ekstra obiekty" name="object_bonus_spin"/>
-	<text label="Restrykcje wieku" name="access_text">
-		Rodzaj:
-	</text>
-	<combo_box label="Moderuj" name="access_combo">
-		<combo_box.item label="Adult" name="Adult"/>
-		<combo_box.item label="Moderate" name="Mature"/>
-		<combo_box.item label="General" name="PG"/>
-	</combo_box>
-	<button label="Zastosuj" name="apply_btn"/>
-	<button label="Teleportuj do Miejsca Startu jednego Rezydenta..." name="kick_btn"/>
-	<button label="Teleportuj do Miejsca Startu wszystkich Rezydentów..." name="kick_all_btn"/>
-	<button label="Wyślij wiadomość do Regionu..." name="im_btn"/>
-	<button label="Obsługa teleportera..." name="manage_telehub_btn"/>
-</panel>
diff --git a/indra/newview/skins/default/xui/pt/floater_customize.xml b/indra/newview/skins/default/xui/pt/floater_customize.xml
deleted file mode 100644
index a9ec0b9b1f..0000000000
--- a/indra/newview/skins/default/xui/pt/floater_customize.xml
+++ /dev/null
@@ -1,530 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater customize" title="APARÊNCIA">
-	<tab_container name="customize tab container" tab_min_width="115">
-		<text label="Corpo" name="body_parts_placeholder">
-			Partes do corpo
-		</text>
-		<panel label="Forma" name="Shape">
-			<button label="Reverter" label_selected="Reverter" name="Revert"/>
-			<button label="Corpo" label_selected="Corpo" name="Body"/>
-			<button label="Cabeça" label_selected="Cabeça" name="Head"/>
-			<button label="Olhos" label_selected="Olhos" name="Eyes"/>
-			<button label="Orelhas" label_selected="Orelhas" name="Ears"/>
-			<button label="Nariz" label_selected="Nariz" name="Nose"/>
-			<button label="Boca" label_selected="Boca" name="Mouth"/>
-			<button label="Queixo" label_selected="Queixo" name="Chin"/>
-			<button label="Tórax" label_selected="Tórax" name="Torso"/>
-			<button label="Pernas" label_selected="Pernas" name="Legs"/>
-			<radio_group name="sex radio">
-				<radio_item label="Feminino" name="radio" value="0"/>
-				<radio_item label="Masculino" name="radio2" value="1"/>
-			</radio_group>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: não foi possível modificar
-			</text>
-			<text name="title_loading">
-				[DESC]: carregando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: não vestido
-			</text>
-			<text name="path">
-				Localizado em [PATH]
-			</text>
-			<text name="not worn instructions">
-				Para obter um físico novo, arraste um do inventário para o seu avatar. Ou crie um novo.
-			</text>
-			<text name="no modify instructions">
-				Você não tem permissão para modificar esta vestimenta.
-			</text>
-			<text name="Item Action Label">
-				Forma:
-			</text>
-			<button label="Nova" label_selected="Nova" name="Create New"/>
-			<button label="Salvar" label_selected="Salvar" name="Save"/>
-			<button label="Salvar como..." label_selected="Salvar como..." name="Save As"/>
-		</panel>
-		<panel label="Pele" name="Skin">
-			<button label="Cor de pele" label_selected="Cor de pele" name="Skin Color" width="115"/>
-			<button label="Detalhes faciais" label_selected="Detalhes faciais" name="Face Detail" width="115"/>
-			<button label="Maquilagem" label_selected="Maquilagem" name="Makeup" width="115"/>
-			<button label="Detalhes do corpo" label_selected="Detalhes do corpo" name="Body Detail" width="115"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: não foi possível modificar
-			</text>
-			<text name="title_loading">
-				[DESC]: carregando..
-			</text>
-			<text name="title_not_worn">
-				[DESC]: não vestido
-			</text>
-			<text name="path">
-				Localizada em [PATH]
-			</text>
-			<text name="not worn instructions">
-				Para obter uma pele nova, arraste uma do inventário para o seu avatar. Ou crie uma pele nova.
-			</text>
-			<text name="no modify instructions">
-				Você não tem permissão para modificar esta vestimenta.
-			</text>
-			<text name="Item Action Label">
-				Pele:
-			</text>
-			<texture_picker label="Tattoo: cabeça" name="Head Tattoos" tool_tip="Clique para escolher um desenho" width="86"/>
-			<texture_picker label="Tattoo: superior" name="Upper Tattoos" tool_tip="Clique para escolher um desenho" width="86"/>
-			<texture_picker label="Tattoo: inferior" name="Lower Tattoos" tool_tip="Clique para escolher um desenho" width="86"/>
-			<button label="Novo" label_selected="Novo" name="Create New"/>
-			<button label="Salvar" label_selected="Salvar" name="Save"/>
-			<button label="Salvar como..." label_selected="Salvar como..." name="Save As"/>
-			<button label="Reverter" label_selected="Reverter" name="Revert"/>
-		</panel>
-		<panel label="Cabelo" name="Hair">
-			<button label="Cor" label_selected="Cor" name="Color" width="115"/>
-			<button label="Estilo" label_selected="Estilo" name="Style" width="115"/>
-			<button label="Sombrancelhas" label_selected="Sombrancelhas" name="Eyebrows" width="115"/>
-			<button label="Rosto" label_selected="Rosto" name="Facial" width="115"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: não foi possível modificar
-			</text>
-			<text name="title_loading">
-				[DESC]: carregando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: não vestido
-			</text>
-			<text name="path">
-				Localizado em [PATH]
-			</text>
-			<text name="not worn instructions">
-				Para obter um cabelo novo, arraste um tipo de cabelo do inventário para o seu avatar. Ou crie um cabelo novo.
-			</text>
-			<text name="no modify instructions">
-				Você não ter permissão para modificar essa vestimenta.
-			</text>
-			<text name="Item Action Label">
-				Cabelo:
-			</text>
-			<texture_picker label="Texture" name="Texture" tool_tip="Clique para escolher uma imagem"/>
-			<button label="Criar novo cabelo" label_selected="Criar novo cabelo" name="Create New"/>
-			<button label="Salvar" label_selected="Salvar" name="Save"/>
-			<button label="Salvar como..." label_selected="Salvar como..." name="Save As"/>
-			<button label="Reverter" label_selected="Reverter" name="Revert"/>
-		</panel>
-		<panel label="Olhos" name="Eyes">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: não foi possível modificar
-			</text>
-			<text name="title_loading">
-				[DESC]: carregando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: não vestido
-			</text>
-			<text name="path">
-				Localizado em [PATH]
-			</text>
-			<text name="not worn instructions">
-				Para obter novos olhos, arraste um tipo de olhos do inventário para o seu avatar. Ou crie olhos novos.
-			</text>
-			<text name="no modify instructions">
-				Você não tem permissão para alterar esta vestimenta.
-			</text>
-			<text name="Item Action Label">
-				Olhos:
-			</text>
-			<texture_picker label="Íris" name="Iris" tool_tip="Clique para escolher uma imagem"/>
-			<button label="Criar novos olhos" label_selected="Criar novos olhos" name="Create New"/>
-			<button label="Salvar" label_selected="Salvar" name="Save"/>
-			<button label="Salvar como..." label_selected="Salvar como..." name="Save As"/>
-			<button label="Reverter" label_selected="Reverter" name="Revert"/>
-		</panel>
-		<text label="Roupas" name="clothes_placeholder">
-			Roupa
-		</text>
-		<panel label="Camisa" name="Shirt">
-			<texture_picker label="Tecido" name="Fabric" tool_tip="Clique para escolher uma imagem"/>
-			<color_swatch label="Cor/Tint" name="Color/Tint" tool_tip="Selecionar a cor"/>
-			<button label="Remover" label_selected="Remover" name="Take Off"/>
-			<button label="Criar nova camisa" label_selected="Criar nova camisa" name="Create New"/>
-			<button label="Salvar" label_selected="Salvar" name="Save"/>
-			<button label="Salvar como..." label_selected="Salvar como..." name="Save As"/>
-			<button label="Reverter" label_selected="Reverter" name="Revert"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: não foi possível modificar
-			</text>
-			<text name="title_loading">
-				[DESC]: carregando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: não vestido
-			</text>
-			<text name="path">
-				Localizado em [PATH]
-			</text>
-			<text name="not worn instructions">
-				Para obter uma camisa nova, arraste uma do inventário para o seu avatar. Ou crie uma camisa nova.
-			</text>
-			<text name="no modify instructions">
-				Você não ter permissão para modificar esta vestimenta.
-			</text>
-			<text name="Item Action Label">
-				Camisa:
-			</text>
-		</panel>
-		<panel label="Calças" name="Pants">
-			<texture_picker label="Tecido" name="Fabric" tool_tip="Clique para escolher uma imagem"/>
-			<color_swatch label="Cor/Tint" name="Color/Tint" tool_tip="Selecionar a cor"/>
-			<button label="Remover" label_selected="Remover" name="Take Off"/>
-			<button label="Criar novas calças" label_selected="Criar novas calças" name="Create New"/>
-			<button label="Salvar" label_selected="Salvar" name="Save"/>
-			<button label="Salvar como..." label_selected="Salvar como..." name="Save As"/>
-			<button label="Reverter" label_selected="Reverter" name="Revert"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: não foi possível modificar
-			</text>
-			<text name="title_loading">
-				[DESC]: carregando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: não vestindo
-			</text>
-			<text name="path">
-				Localizado em [PATH]
-			</text>
-			<text name="not worn instructions">
-				Para obter calças novas, arraste uma do inventário para o seu avatar. Ou crie calças novas.
-			</text>
-			<text name="no modify instructions">
-				Você não tem permissão para modificar esta vestimenta.
-			</text>
-			<text name="Item Action Label">
-				Calças:
-			</text>
-		</panel>
-		<panel label="Sapatos" name="Shoes">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: não foi possível modificar
-			</text>
-			<text name="title_loading">
-				[DESC]: carregando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: não vestido
-			</text>
-			<text name="path">
-				Localizado em [PATH]
-			</text>
-			<text name="not worn instructions">
-				Para obter novos olhos, arraste um tipo de olhos do inventário para o seu avatar. Ou crie olhos novos.
-			</text>
-			<button label="Criar novos sapatos" label_selected="Criar novos sapatos" name="Create New" width="166"/>
-			<text name="no modify instructions">
-				Você não tem permissão para modificar esta vestimenta.
-			</text>
-			<text name="Item Action Label">
-				Sapatos:
-			</text>
-			<texture_picker label="Tecido" name="Fabric" tool_tip="Clique para escolher uma imagem"/>
-			<color_swatch label="Cor/Tint" name="Color/Tint" tool_tip="Selecionar a cor"/>
-			<button label="Remover" label_selected="Remover" name="Take Off"/>
-			<button label="Salvar" label_selected="Salvar" name="Save"/>
-			<button label="Salvar como..." label_selected="Salvar como..." name="Save As"/>
-			<button label="Reverter" label_selected="Reverter" name="Revert"/>
-		</panel>
-		<panel label="Meias" name="Socks">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: não foi possível modificar
-			</text>
-			<text name="title_loading">
-				[DESC]: carregando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: não vestido.
-			</text>
-			<text name="path">
-				Localizado em [PATH]
-			</text>
-			<text name="not worn instructions">
-				Para obter meias novas, arraste um par do inventário para o seu avatar. Ou crie meias novas.
-			</text>
-			<button label="Criar novas meias" label_selected="Criar novas meias" name="Create New"/>
-			<text name="no modify instructions">
-				Você não tem permissão para modificar essa vestimenta.
-			</text>
-			<text name="Item Action Label">
-				Meias:
-			</text>
-			<texture_picker label="Tecido" name="Fabric" tool_tip="Clique para escolher uma imagem"/>
-			<color_swatch label="Cor/Tint" name="Color/Tint" tool_tip="Selecionar a cor"/>
-			<button label="Remover" label_selected="Remover" name="Take Off"/>
-			<button label="Salvar" label_selected="Salvar" name="Save"/>
-			<button label="Salvar como..." label_selected="Salvar como..." name="Save As"/>
-			<button label="Reverter" label_selected="Reverter" name="Revert"/>
-		</panel>
-		<panel label="Jaqueta" name="Jacket">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: Não foi possível modificar
-			</text>
-			<text name="title_loading">
-				[DESC]: carregando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: não vestido
-			</text>
-			<text name="path">
-				Localizado em [PATH]
-			</text>
-			<text name="not worn instructions">
-				Para por uma jaqueta nova, arraste uma do inventário para o seu avatar. Ou crie uma jaqueta nova.
-			</text>
-			<button label="Criar nova jaqueta" label_selected="Criar nova jaqueta" name="Create New"/>
-			<text name="no modify instructions">
-				Você não tem permissão para modificar esta vestimenta.
-			</text>
-			<text name="Item Action Label">
-				Jaqueta:
-			</text>
-			<texture_picker label="Tecido superior" name="Upper Fabric" tool_tip="Clique para escolher uma imagem." width="84"/>
-			<texture_picker label="Tecido Inferior" name="Lower Fabric" tool_tip="Clique para escolher uma imagem." width="84"/>
-			<color_swatch label="Cor/Tint" name="Color/Tint" tool_tip="Selecionar a cor"/>
-			<button label="Remover" label_selected="Remover" name="Take Off"/>
-			<button label="Salvar" label_selected="Salvar" name="Save"/>
-			<button label="Salvar como..." label_selected="Salvar como..." name="Save As"/>
-			<button label="Reverter" label_selected="Reverter" name="Revert"/>
-		</panel>
-		<panel label="Luvas" name="Gloves">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: não foi possível modificar
-			</text>
-			<text name="title_loading">
-				[DESC]: carregando....
-			</text>
-			<text name="title_not_worn">
-				[DESC]: não vestido
-			</text>
-			<text name="path">
-				Localizado em [PATH]
-			</text>
-			<text name="not worn instructions">
-				Para obter luvas novas, arraste um par do inventário para o seu avatar. Ou crie luvas novas.
-			</text>
-			<button label="Criar novas luvas" label_selected="Criar novas luvas" name="Create New"/>
-			<text name="no modify instructions">
-				Você não tem permissão para modificar essa vestimenta.
-			</text>
-			<text name="Item Action Label">
-				Luvas:
-			</text>
-			<texture_picker label="Tecido" name="Fabric" tool_tip="Clique para escolher uma imagem"/>
-			<color_swatch label="Cor/Tint" name="Color/Tint" tool_tip="Selecionar a cor"/>
-			<button label="Remover" label_selected="Remover" name="Take Off"/>
-			<button label="Salvar" label_selected="Salvar" name="Save"/>
-			<button label="Salvar como..." label_selected="Salvar como..." name="Save As"/>
-			<button label="Reverter" label_selected="Reverter" name="Revert"/>
-		</panel>
-		<panel label="Camiseta" name="Undershirt">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: não foi possível modificar
-			</text>
-			<text name="title_loading">
-				[DESC]: carregando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: não vestido
-			</text>
-			<text name="path">
-				Localizado em [PATH]
-			</text>
-			<text name="not worn instructions">
-				Para obter uma camiseta nova, arraste uma do inventário para o seu avatar. Ou crie uma camiseta nova.
-			</text>
-			<button label="Criar nova camiseta" label_selected="Criar nova camiseta" name="Create New"/>
-			<text name="no modify instructions">
-				Você não ter permissão para modificar essa vestimenta.
-			</text>
-			<text name="Item Action Label">
-				Camiseta:
-			</text>
-			<texture_picker label="Tecido" name="Fabric" tool_tip="Clique para escolher uma imagem"/>
-			<color_swatch label="Cor/Tint" name="Color/Tint" tool_tip="Selecionar a cor"/>
-			<button label="Remover" label_selected="Remover" name="Take Off"/>
-			<button label="Salvar" label_selected="Salvar" name="Save"/>
-			<button label="Salvar como..." label_selected="Salvar como..." name="Save As"/>
-			<button label="Reverter" label_selected="Reverter" name="Revert"/>
-		</panel>
-		<panel label="Roupas de Baixo" name="Underpants">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: não foi possível modificar
-			</text>
-			<text name="title_loading">
-				[DESC]: carregando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: não vestido
-			</text>
-			<text name="path">
-				Localizado em [PATH]
-			</text>
-			<text name="not worn instructions">
-				Para obter roupa de baixo nova, arraste um modelo do inventário para o seu avatar. Ou crie uma roupa de baixo nova.
-			</text>
-			<button label="Criar novas" label_selected="Criar novas" name="Create New" width="180"/>
-			<text name="no modify instructions">
-				Você não tem permissão para modificar essa vestimenta.
-			</text>
-			<text name="Item Action Label">
-				Roupas de baixo:
-			</text>
-			<texture_picker label="Tecido" name="Fabric" tool_tip="Clique para escolher uma imagem"/>
-			<color_swatch label="Cor/Tint" name="Color/Tint" tool_tip="Selecionar a cor"/>
-			<button label="Remover" label_selected="Remover" name="Take Off"/>
-			<button label="Salvar" label_selected="Salvar" name="Save"/>
-			<button label="Salvar como..." label_selected="Salvar como..." name="Save As"/>
-			<button label="Reverter" label_selected="Reverter" name="Revert"/>
-		</panel>
-		<panel label="Saia" name="Skirt">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: não foi possível modificar
-			</text>
-			<text name="title_loading">
-				[DESC]: carregando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: não vestido
-			</text>
-			<text name="path">
-				Localizado em [PATH]
-			</text>
-			<text name="not worn instructions">
-				Para obter um saia nova, arraste uma saia do inventário para o seu avatar. Ou crie uma saia nova.
-			</text>
-			<button label="Criar nova saia" label_selected="Criar nova saia" name="Create New"/>
-			<text name="no modify instructions">
-				Você não tem permissão para modificar esta vestimenta.
-			</text>
-			<text name="Item Action Label">
-				Saia:
-			</text>
-			<texture_picker label="Tecido" name="Fabric" tool_tip="Clique para escolher uma imagem"/>
-			<color_swatch label="Cor/Tint" name="Color/Tint" tool_tip="Selecionar a cor"/>
-			<button label="Remover" label_selected="Remover" name="Take Off"/>
-			<button label="Salvar" label_selected="Salvar" name="Save"/>
-			<button label="Salvar como..." label_selected="Salvar como..." name="Save As"/>
-			<button label="Reverter" label_selected="Reverter" name="Revert"/>
-		</panel>
-		<panel label="Tatuagem" name="Tattoo">
-			<text name="title">
-				[DESC]:
-			</text>
-			<text name="title_no_modify">
-				[DESC]: não pode ser modificado
-			</text>
-			<text name="title_loading">
-				[DESC]: Carregando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: não vestido
-			</text>
-			<text name="path">
-				Localização: [PATH]
-			</text>
-			<text name="not worn instructions">
-				Para por uma tatuagem nova, arraste uma tatuagem do inventário para o seu avatar. Ou crie uma tatuagem nova.
-			</text>
-			<button label="Criar tatuagem" label_selected="Criar tatuagem" name="Create New"/>
-			<text name="no modify instructions">
-				Você não está autorizado a modificar este acessório.
-			</text>
-			<text name="Item Action Label">
-				Tatuagem:
-			</text>
-			<texture_picker label="Tatuagem na cabeça" name="Head Tattoo" tool_tip="Selecionar imagem"/>
-			<texture_picker label="Tatuagem parte de cima" name="Upper Tattoo" tool_tip="Selecionar imagem"/>
-			<texture_picker label="Tatuagem de baixo" name="Lower Tattoo" tool_tip="Selecionar imagem"/>
-			<button label="Tirar" label_selected="Tirar" name="Take Off"/>
-			<button label="Salvar" label_selected="Salvar" name="Save"/>
-			<button label="Salvar como..." label_selected="Salvar como..." name="Save As"/>
-			<button label="Reverter" label_selected="Reverter" name="Revert"/>
-		</panel>
-		<panel label="Alpha" name="Alpha">
-			<text name="title">
-				[DESC]:
-			</text>
-			<text name="title_no_modify">
-				[DESC]: não pode ser modificado
-			</text>
-			<text name="title_loading">
-				[DESC]: Carregando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: não vestido
-			</text>
-			<text name="path">
-				Localização: [PATH]
-			</text>
-			<text name="not worn instructions">
-				Para por uma máscara alpha nova, arraste a máscara do inventário para o seu avatar. Ou crie uma máscara nova.
-			</text>
-			<button label="Criar Alpha novo" label_selected="Criar Alpha novo" name="Create New"/>
-			<text name="no modify instructions">
-				Você não está autorizado a modificar este acessório.
-			</text>
-			<text name="Item Action Label">
-				Alpha:
-			</text>
-			<texture_picker label="Alpha inferior" name="Lower Alpha" tool_tip="Selecionar imagem"/>
-			<texture_picker label="Alpha de cima" name="Upper Alpha" tool_tip="Selecionar imagem"/>
-			<texture_picker label="Cabeça Alpha" name="Head Alpha" tool_tip="Selecionar imagem"/>
-			<texture_picker label="Olhos Alpha" name="Eye Alpha" tool_tip="Selecionar imagem"/>
-			<texture_picker label="Cabelo alpha" name="Hair Alpha" tool_tip="Selecionar imagem"/>
-			<button label="Tirar" label_selected="Tirar" name="Take Off"/>
-			<button label="Salvar" label_selected="Salvar" name="Save"/>
-			<button label="Salvar como..." label_selected="Salvar como..." name="Save As"/>
-			<button label="Reverter" label_selected="Reverter" name="Revert"/>
-		</panel>
-	</tab_container>
-	<scroll_container left="249" name="panel_container"/>
-	<button label="Dados do script" label_selected="Dados do script" name="script_info" tool_tip="Mostrar scripts anexados ao seu avatar"/>
-	<button label="Criar look" label_selected="Criar look" name="make_outfit_btn"/>
-	<button label="Cancelar" label_selected="Cancelar" name="Cancel"/>
-	<button label="OK" label_selected="OK" name="Ok"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_device_settings.xml b/indra/newview/skins/default/xui/pt/floater_device_settings.xml
deleted file mode 100644
index 48a4a6ef6f..0000000000
--- a/indra/newview/skins/default/xui/pt/floater_device_settings.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_device_settings" title="CONFIGURAÇÃO DE DISPOSITIVO DE VOZ"/>
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/floater_my_friends.xml b/indra/newview/skins/default/xui/pt/floater_my_friends.xml
deleted file mode 100644
index 68f2a19998..0000000000
--- a/indra/newview/skins/default/xui/pt/floater_my_friends.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_my_friends" title="CONTATOS">
-	<tab_container name="friends_and_groups">
-		<panel label="Amigos" name="friends_panel"/>
-		<panel label="Grupos" name="groups_panel"/>
-	</tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/pt/floater_outfit_save_as.xml
deleted file mode 100644
index dec8a7676a..0000000000
--- a/indra/newview/skins/default/xui/pt/floater_outfit_save_as.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="modal container" title="Salvar este look">
-	<button label="Salvar" label_selected="Salvar" name="Save"/>
-	<button label="Cancelar" label_selected="Cancelar" name="Cancel"/>
-	<text name="Save item as:">
-		Veja o meu novo visual:
-	</text>
-	<line_editor name="name ed">
-		[DESC] (new)
-	</line_editor>
-</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_preview_classified.xml b/indra/newview/skins/default/xui/pt/floater_preview_classified.xml
deleted file mode 100644
index bb626430ed..0000000000
--- a/indra/newview/skins/default/xui/pt/floater_preview_classified.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="classified_preview" title="INFORMAÇÕES CLASSIFICADAS">
-	<floater.string name="Title">
-		Classificados: [NAME]
-	</floater.string>
-</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_preview_event.xml b/indra/newview/skins/default/xui/pt/floater_preview_event.xml
deleted file mode 100644
index b422580f3b..0000000000
--- a/indra/newview/skins/default/xui/pt/floater_preview_event.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="event_preview" title="DADOS DO EVENTO">
-	<floater.string name="Title">
-		Evento: [NAME]
-	</floater.string>
-</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/pt/floater_preview_gesture_info.xml
deleted file mode 100644
index aabcff70d3..0000000000
--- a/indra/newview/skins/default/xui/pt/floater_preview_gesture_info.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="ATALHO DE GESTO"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_preview_gesture_shortcut.xml b/indra/newview/skins/default/xui/pt/floater_preview_gesture_shortcut.xml
deleted file mode 100644
index 64bb7785f6..0000000000
--- a/indra/newview/skins/default/xui/pt/floater_preview_gesture_shortcut.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="ATALHO DE GESTO">
-	<text name="trigger_label">
-		Bate-papo:
-	</text>
-	<text name="key_label">
-		Tecla:
-	</text>
-	<combo_box label="Nenhum" name="modifier_combo"/>
-	<combo_box label="Nenhum" name="key_combo"/>
-	<text name="replace_text" tool_tip="Substituir a(s) palavra(s) de comando.   Por exemplo, substitua o comando &apos;olá&apos; por &apos;oi&apos; para trocar &apos;Olá, tudo bem&apos; por &apos;Oi tudo bem&apos;. O gesto também será executado.">
-		Trocar:
-	</text>
-	<line_editor name="replace_editor" tool_tip="Substituir a(s) palavra(s) de comando.   Por exemplo, substitua o comando &apos;olá&apos; por &apos;oi&apos; para trocar &apos;Olá, tudo bem&apos; por &apos;Oi tudo bem&apos;. O gesto também será executado."/>
-</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/pt/floater_preview_gesture_steps.xml
deleted file mode 100644
index aabcff70d3..0000000000
--- a/indra/newview/skins/default/xui/pt/floater_preview_gesture_steps.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="ATALHO DE GESTO"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_statistics.xml b/indra/newview/skins/default/xui/pt/floater_statistics.xml
deleted file mode 100644
index ecbf638157..0000000000
--- a/indra/newview/skins/default/xui/pt/floater_statistics.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="stats floater" title="ESTATÍSTICAS"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/pt/floater_wearable_save_as.xml
deleted file mode 100644
index 282bf0e268..0000000000
--- a/indra/newview/skins/default/xui/pt/floater_wearable_save_as.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="modal container" title=" ">
-	<button label="Salvar" label_selected="Salvar" name="Save"/>
-	<button label="Cancelar" label_selected="Cancelar" name="Cancel"/>
-	<text name="Save item as:">
-		Salvar item no inventário como:
-	</text>
-	<line_editor name="name ed">
-		Novo [DESC]
-	</line_editor>
-</floater>
diff --git a/indra/newview/skins/default/xui/pt/panel_audio_device.xml b/indra/newview/skins/default/xui/pt/panel_audio_device.xml
deleted file mode 100644
index 967dc27070..0000000000
--- a/indra/newview/skins/default/xui/pt/panel_audio_device.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="device_settings">
-	<text name="Audio Devices">
-		Dispositivos de Áudio
-	</text>
-	<text name="Input device (microphone):">
-		Dispositivo de entrada (microfone):
-	</text>
-	<text name="Output device (speakers):">
-		Dispositivo de saída (falantes):
-	</text>
-	<text name="Input level:">
-		Nível de Entrada
-	</text>
-	<text_editor name="voice_intro_text1">
-		Ajuste a barra para controlar o volume de som para os outros residentes. Para testar o nível de entrada, basta falar em seu microfone.
-	</text_editor>
-	<volume_slider name="mic_volume_slider" tool_tip="Altere o volume usando este controle gradual"/>
-	<text name="wait_text">
-		Por Favor aguarde
-	</text>
-	<string name="default_text">
-		Padrão
-	</string>
-</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_friends.xml b/indra/newview/skins/default/xui/pt/panel_friends.xml
deleted file mode 100644
index 34073f9ce1..0000000000
--- a/indra/newview/skins/default/xui/pt/panel_friends.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="friends">
-	<string name="Multiple">
-		Diversos amigos
-	</string>
-	<scroll_list name="friend_list" tool_tip="Aperte shift ou control enquanto clica para selecionar múltiplos amigos">
-		<column name="icon_online_status" tool_tip="Status Online"/>
-		<column label="Nome" name="friend_name" tool_tip="Nome"/>
-		<column name="icon_visible_online" tool_tip="Amigo pode ver quando você está online"/>
-		<column name="icon_visible_map" tool_tip="Amigo pode localizá-lo no mapa"/>
-		<column name="icon_edit_mine" tool_tip="Amigo pode editar, apagar ou pegar seus objetos"/>
-		<column name="icon_edit_theirs" tool_tip="Você pode editar os objetos deste amigo"/>
-	</scroll_list>
-	<button label="MI/Chamar" name="im_btn" tool_tip="Abrir sessão de Mensagem Instantânea" width="86"/>
-	<button label="Perfil" name="profile_btn" tool_tip="Mostrar foto, grupos e outras informações" width="86"/>
-	<button label="Teletransportar" name="offer_teleport_btn" tool_tip="Oferecer a este amigo o teletransporte para sua localização atual" width="86"/>
-	<button label="Pagar" name="pay_btn" tool_tip="Dar Linden dólares (L$) a este amigo" width="86"/>
-	<button label="Tirar" name="remove_btn" tool_tip="Remover esta pessoa de sua lista de amigos" width="86"/>
-	<button label="Adicionar" name="add_btn" tool_tip="Oferecer amizade para um residente" width="86"/>
-</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_groups.xml b/indra/newview/skins/default/xui/pt/panel_groups.xml
deleted file mode 100644
index 0aea0d53dd..0000000000
--- a/indra/newview/skins/default/xui/pt/panel_groups.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="groups">
-	<text name="groupdesc" width="268">
-		Seu grupo ativo atual está em negrito.
-	</text>
-	<text name="groupcount" width="300">
-		Você pertence a [COUNT] grupos (máximo [MAX]).
-	</text>
-	<button width="86" label="MI/Ligação" name="IM" tool_tip="Abrir sessão de Mensagem Instantânea"/>
-	<button width="86" label="Informações" name="Info"/>
-	<button width="86" label="Ativar" name="Activate"/>
-	<button width="86" label="Sair" name="Leave"/>
-	<button width="86" label="Criar..." name="Create"/>
-	<button width="86" label="Buscar..." name="Search..."/>
-</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_nearby_chat.xml b/indra/newview/skins/default/xui/pt/panel_nearby_chat.xml
deleted file mode 100644
index bdbf29e70b..0000000000
--- a/indra/newview/skins/default/xui/pt/panel_nearby_chat.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<!-- All our XML is utf-8 encoded. -->
-<panel name="nearby_chat">
-	<panel name="chat_caption">
-		<text name="sender_name">
-			Bate-papo local
-		</text>
-	</panel>
-</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_online_status.xml b/indra/newview/skins/default/xui/pt/panel_online_status.xml
deleted file mode 100644
index fdc489f375..0000000000
--- a/indra/newview/skins/default/xui/pt/panel_online_status.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="friend_online_status" name="friend_online_status"/>
diff --git a/indra/newview/skins/default/xui/pt/panel_region_general_layout.xml b/indra/newview/skins/default/xui/pt/panel_region_general_layout.xml
deleted file mode 100644
index 534b2826af..0000000000
--- a/indra/newview/skins/default/xui/pt/panel_region_general_layout.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Região" name="General">
-	<text name="region_text_lbl">
-		Região:
-	</text>
-	<text name="region_text">
-		(Desconhecido)
-	</text>
-	<text name="version_channel_text_lbl">
-		Versão:
-	</text>
-	<text name="version_channel_text">
-		(Desconhecido)
-	</text>
-	<text name="region_type_lbl">
-		Tipo:
-	</text>
-	<text name="region_type">
-		(Desconhecido)
-	</text>
-	<check_box label="Bloquear terraplanagens" name="block_terraform_check"/>
-	<check_box label="Bloquear voos" name="block_fly_check"/>
-	<check_box label="Permitir danos" name="allow_damage_check"/>
-	<check_box label="Limitar empurrões" name="restrict_pushobject"/>
-	<check_box label="Permitir revenda de terrenos" name="allow_land_resell_check"/>
-	<check_box label="Permitir união e divisão de terrenos" name="allow_parcel_changes_check"/>
-	<check_box label="Não mostrar nos resultados de pesquisa" name="block_parcel_search_check" tool_tip="Mostrar esta região e lotes nos resultados de pesquisa"/>
-	<spinner label="Limite do agente" name="agent_limit_spin"/>
-	<spinner label="Bônus do objeto" name="object_bonus_spin"/>
-	<text label="Nível de maturidade" name="access_text">
-		Classificação:
-	</text>
-	<combo_box label="Moderado" name="access_combo">
-		<combo_box.item label="Público adulto" name="Adult"/>
-		<combo_box.item label="Moderado" name="Mature"/>
-		<combo_box.item label="Geral" name="PG"/>
-	</combo_box>
-	<button label="Aplicar" name="apply_btn"/>
-	<button label="Teletransportar um residente para início..." name="kick_btn"/>
-	<button label="Teletransportar todos para início..." name="kick_all_btn"/>
-	<button label="Enviar mensagem para região..." name="im_btn"/>
-	<button label="Gerenciar telehub..." name="manage_telehub_btn"/>
-</panel>
-- 
cgit v1.2.3


From 34ef02db00024ba82a35d9559393b21d0b19e25b Mon Sep 17 00:00:00 2001
From: Monroe Linden <monroe@lindenlab.com>
Date: Thu, 16 Sep 2010 11:46:29 -0700
Subject: Matching Windows build of llqtwebkit.

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

diff --git a/install.xml b/install.xml
index 11136376f3..f9bbb42644 100644
--- a/install.xml
+++ b/install.xml
@@ -955,9 +955,9 @@ anguage Infrstructure (CLI) international standard</string>
           <key>windows</key>
           <map>
             <key>md5sum</key>
-            <string>b21f10e0010c439e474f42bd49871947</string>
+            <string>4b8412833c00f8cdaba26808f0ddb404</string>
              <key>url</key>
-            <uri>http://viewer-source-downloads.s3.amazonaws.com/install_pkgs/llqtwebkit-windows-qt4.6-20100913.tar.bz2</uri>
+            <uri>http://viewer-source-downloads.s3.amazonaws.com/install_pkgs/llqtwebkit-windows-qt4.6-20100916.tar.bz2</uri>
           </map>
         </map>
       </map>
-- 
cgit v1.2.3


From a36033853a7d567e92713a0392b29754521f338b Mon Sep 17 00:00:00 2001
From: Merov Linden <merov@lindenlab.com>
Date: Thu, 16 Sep 2010 14:27:42 -0700
Subject: STORM-168 : Python modules cleanup

---
 indra/lib/python/indra/util/named_query.py | 12 ------------
 indra/lib/python/uuid.py                   | 10 ++++++++--
 scripts/install.py                         | 12 ------------
 3 files changed, 8 insertions(+), 26 deletions(-)

diff --git a/indra/lib/python/indra/util/named_query.py b/indra/lib/python/indra/util/named_query.py
index 5c19368240..6bf956107d 100644
--- a/indra/lib/python/indra/util/named_query.py
+++ b/indra/lib/python/indra/util/named_query.py
@@ -36,14 +36,6 @@ import os.path
 import re
 import time
 
-#import sys # *TODO: remove. only used in testing.
-#import pprint # *TODO: remove. only used in testing.
-
-try:
-    set = set
-except NameError:
-    from sets import Set as set
-
 from indra.base import llsd
 from indra.base import config
 
@@ -195,8 +187,6 @@ class NamedQuery(object):
         style. It also has to look for %:name% and :name% and
         ready them for use in LIKE statements"""
         if sql:
-            #print >>sys.stderr, "sql:",sql
-            
             # This first sub is to properly escape any % signs that
             # are meant to be literally passed through to mysql in the
             # query.  It leaves any %'s that are used for
@@ -408,7 +398,6 @@ class NamedQuery(object):
         # build the query from the options available and the params
         base_query = []
         base_query.append(self._base_query)
-        #print >>sys.stderr, "base_query:",base_query
         for opt, extra_where in self._options.items():
             if type(extra_where) in (dict, list, tuple):
                 if opt in params:
@@ -418,7 +407,6 @@ class NamedQuery(object):
                     base_query.append(extra_where)
         if self._query_suffix:
             base_query.append(self._query_suffix)
-        #print >>sys.stderr, "base_query:",base_query
         full_query = '\n'.join(base_query)
 
         # Go through the query and rewrite all of the ones with the
diff --git a/indra/lib/python/uuid.py b/indra/lib/python/uuid.py
index 48dac84377..0bc21a35f8 100644
--- a/indra/lib/python/uuid.py
+++ b/indra/lib/python/uuid.py
@@ -446,8 +446,14 @@ def uuid1(node=None, clock_seq=None):
 
 def uuid3(namespace, name):
     """Generate a UUID from the MD5 hash of a namespace UUID and a name."""
-    import md5
-    hash = md5.md5(namespace.bytes + name).digest()
+    try:
+        # Python 2.6
+        from hashlib import md5
+    except ImportError:
+        # Python 2.5 and earlier
+        from md5 import new as md5
+        
+    hash = md5(namespace.bytes + name).digest()
     return UUID(bytes=hash[:16], version=3)
 
 def uuid4():
diff --git a/scripts/install.py b/scripts/install.py
index 7368af0b37..c2adf4d0a2 100755
--- a/scripts/install.py
+++ b/scripts/install.py
@@ -84,18 +84,6 @@ except ImportError:
 from indra.base import llsd
 from indra.util import helpformatter
 
-# *HACK: Necessary for python 2.3. Consider removing this code wart
-# after etch has deployed everywhere. 2008-12-23 Phoenix
-try:
-    sorted = sorted
-except NameError:
-    def sorted(in_list):
-        "Return a list which is a sorted copy of in_list."
-        # Copy the source to be more functional and side-effect free.
-        out_list = copy.copy(in_list)
-        out_list.sort()
-        return out_list
-
 class InstallFile(object):
     "This is just a handy way to throw around details on a file in memory."
     def __init__(self, pkgname, url, md5sum, cache_dir, platform_path):
-- 
cgit v1.2.3


From 7a3fc995c3af52004fb1efee8c2f1de55fffef04 Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Thu, 16 Sep 2010 15:36:23 -0700
Subject: EXP-63 FIX  Hint marked as acted upon if hints are disabled while
 specific UI hint is open

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

diff --git a/indra/newview/llhints.cpp b/indra/newview/llhints.cpp
index bd7fec63e8..bb8f4a995b 100644
--- a/indra/newview/llhints.cpp
+++ b/indra/newview/llhints.cpp
@@ -360,7 +360,7 @@ void LLHints::hideAll()
 		it != end_it;
 		++it)
 	{
-		LLNotifications::instance().cancel(*it);
+		hide(*it);
 	}
 
 }
-- 
cgit v1.2.3


From c46a82c56b5b47497f3adc94ea2ddfdb1d4aa1cf Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Thu, 16 Sep 2010 16:26:45 -0700
Subject: renamed isProvided() to anyProvided() and fixed partial params
 (missing mandatory elements) not merging over complete params

---
 indra/llxuixml/llinitparam.cpp |  2 +-
 indra/llxuixml/llinitparam.h   | 18 +++++++++---------
 2 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/indra/llxuixml/llinitparam.cpp b/indra/llxuixml/llinitparam.cpp
index dc4d93d38a..2c92539387 100644
--- a/indra/llxuixml/llinitparam.cpp
+++ b/indra/llxuixml/llinitparam.cpp
@@ -178,7 +178,7 @@ namespace LLInitParam
 			param_handle_t param_handle = it->second->mParamHandle;
 			const Param* param = getParamFromHandle(param_handle);
 			ParamDescriptor::serialize_func_t serialize_func = it->second->mSerializeFunc;
-			if (serialize_func && param->getProvided())
+			if (serialize_func && param->anyProvided())
 			{
 				// Ensure this param has not already been serialized
 				// Prevents <rect> from being serialized as its own tag.
diff --git a/indra/llxuixml/llinitparam.h b/indra/llxuixml/llinitparam.h
index 610381dcfe..24ce891880 100644
--- a/indra/llxuixml/llinitparam.h
+++ b/indra/llxuixml/llinitparam.h
@@ -287,7 +287,7 @@ namespace LLInitParam
 		void setProvided(bool is_provided) { mIsProvided = is_provided; }
 
 	protected:
-		bool getProvided() const { return mIsProvided; }
+		bool anyProvided() const { return mIsProvided; }
 
 		Param(class BaseBlock* enclosing_block);
 
@@ -568,7 +568,7 @@ namespace LLInitParam
 			mData.mValue = value;
 		} 
 
-		bool isProvided() const { return Param::getProvided(); }
+		bool isProvided() const { return Param::anyProvided(); }
 
 		static bool deserializeParam(Param& param, Parser& parser, const Parser::name_stack_range_t& name_stack, S32 generation) 
 		{ 
@@ -795,13 +795,13 @@ namespace LLInitParam
 		bool isProvided() const 
 		{ 
 			// only validate block when it hasn't already passed validation and user has supplied *some* value
-			if (Param::getProvided() && mData.mValidatedVersion < T::getLastChangeVersion())
+			if (Param::anyProvided() && mData.mValidatedVersion < T::getLastChangeVersion())
 			{
 				// a sub-block is "provided" when it has been filled in enough to be valid
 				mData.mValidated = T::validateBlock(false);
 				mData.mValidatedVersion = T::getLastChangeVersion();
 			}
-			return Param::getProvided() && mData.mValidated;
+			return Param::anyProvided() && mData.mValidated;
 		}
 
 		// assign block contents to this param-that-is-a-block
@@ -852,7 +852,7 @@ namespace LLInitParam
 		{
 			const self_t& src_typed_param = static_cast<const self_t&>(src);
 			self_t& dst_typed_param = static_cast<self_t&>(dst);
-			if (dst_typed_param.T::merge(T::selfBlockDescriptor(), src_typed_param, overwrite || !dst_typed_param.isProvided()))
+			if (dst_typed_param.T::merge(T::selfBlockDescriptor(), src_typed_param, overwrite))
 			{
 				dst_typed_param.mData.clearKey();
 				return true;
@@ -909,7 +909,7 @@ namespace LLInitParam
 			}
 		} 
 
-		bool isProvided() const { return Param::getProvided(); }
+		bool isProvided() const { return Param::anyProvided(); }
 
 		static bool deserializeParam(Param& param, Parser& parser, const Parser::name_stack_range_t& name_stack, S32 generation) 
 		{ 
@@ -1093,7 +1093,7 @@ namespace LLInitParam
 			}
 		} 
 
-		bool isProvided() const { return Param::getProvided(); }
+		bool isProvided() const { return Param::anyProvided(); }
 
 		value_ref_t operator[](S32 index) { return mValues[index]; }
 		value_const_ref_t operator[](S32 index) const { return mValues[index]; }
@@ -1736,7 +1736,7 @@ namespace LLInitParam
 
 		bool isProvided() const 
 		{
-			if (!Param::getProvided()) return false;
+			if (!Param::anyProvided()) return false;
 
 			// block has an updated parameter
 			// if cached value is stale, regenerate from params
@@ -1803,7 +1803,7 @@ namespace LLInitParam
 		value_assignment_t get() const
 		{
 			// if some parameters were provided, issue warnings on invalid blocks
-			if (Param::getProvided() && (mData.mValueAge == OLDER_THAN_BLOCK))
+			if (Param::anyProvided() && (mData.mValueAge == OLDER_THAN_BLOCK))
 			{
 				// go ahead and issue warnings at this point if any param is invalid
 				if(block_t::validateBlock(true))
-- 
cgit v1.2.3


From b24071ca8936035ff42cb361e42cac63593f695e Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Thu, 16 Sep 2010 16:28:57 -0700
Subject: added ability to have notification ignore variable point to
 settings.xml variables

---
 indra/llui/llnotifications.cpp         | 91 +++++++++++++++++++++++++++++-----
 indra/llui/llnotifications.h           | 55 +++++++-------------
 indra/llui/llnotificationslistener.cpp |  7 ++-
 3 files changed, 103 insertions(+), 50 deletions(-)

diff --git a/indra/llui/llnotifications.cpp b/indra/llui/llnotifications.cpp
index bdc094bf47..bd58fe2637 100644
--- a/indra/llui/llnotifications.cpp
+++ b/indra/llui/llnotifications.cpp
@@ -55,6 +55,47 @@ void NotificationPriorityValues::declareValues()
 	declare("critical", NOTIFICATION_PRIORITY_CRITICAL);
 }
 
+LLNotificationForm::FormElementBase::FormElementBase()
+:	name("name")
+{}
+
+LLNotificationForm::FormIgnore::FormIgnore()
+:	text("text"),
+	control("control"),
+	invert_control("invert_control", false),
+	save_option("save_option", false)
+{}
+
+LLNotificationForm::FormButton::FormButton()
+:	index("index"),
+	text("text"),
+	ignore("ignore"),
+	is_default("default"),
+	type("type")
+{
+	// set type here so it gets serialized
+	type = "button";
+}
+
+LLNotificationForm::FormInput::FormInput()
+:	type("type"),
+	width("width", 0)
+{}
+
+LLNotificationForm::FormElement::FormElement()
+:	button("button"),
+	input("input")
+{}
+
+LLNotificationForm::FormElements::FormElements()
+:	elements("")
+{}
+
+LLNotificationForm::Params::Params()
+:	name("name"),
+	ignore("ignore"),
+	form_elements("")
+{}
 
 // Local channel for persistent notifications
 // Stores only persistent notifications.
@@ -100,12 +141,7 @@ bool filterIgnoredNotifications(LLNotificationPtr notification)
 
 	LLNotificationFormPtr form = notification->getForm();
 	// Check to see if the user wants to ignore this alert
-	if (form->getIgnoreType() != LLNotificationForm::IGNORE_NO)
-	{
-		return LLUI::sSettingGroups["ignores"]->getBOOL(notification->getName());
-	}
-
-	return true;
+	return !notification->getForm()->getIgnored();
 }
 
 bool handleIgnoredNotification(const LLSD& payload)
@@ -153,7 +189,8 @@ LLNotificationForm::LLNotificationForm()
 
 
 LLNotificationForm::LLNotificationForm(const std::string& name, const LLNotificationForm::Params& p) 
-:	mIgnore(IGNORE_NO)
+:	mIgnore(IGNORE_NO),
+	mInvertSetting(false)
 {
 	if (p.ignore.isProvided())
 	{
@@ -171,7 +208,16 @@ LLNotificationForm::LLNotificationForm(const std::string& name, const LLNotifica
 		}
 
 		BOOL show_notification = TRUE;
-		LLUI::sSettingGroups["ignores"]->declareBOOL(name, show_notification, "Ignore notification with this name", TRUE);
+		if (p.ignore.control.isProvided())
+		{
+			mIgnoreSetting = LLUI::sSettingGroups["config"]->getControl(p.ignore.control);
+			mInvertSetting = p.ignore.invert_control;
+		}
+		else
+		{
+			LLUI::sSettingGroups["ignores"]->declareBOOL(name, show_notification, "Ignore notification with this name", TRUE);
+			mIgnoreSetting = LLUI::sSettingGroups["ignores"]->getControl(name);
+		}
 	}
 
 	LLParamSDParser parser;
@@ -300,6 +346,27 @@ std::string LLNotificationForm::getDefaultOption()
 	return "";
 }
 
+LLControlVariablePtr LLNotificationForm::getIgnoreSetting() 
+{ 
+	return mIgnoreSetting; 
+}
+
+bool LLNotificationForm::getIgnored()
+{
+	if (mIgnore != LLNotificationForm::IGNORE_NO
+		&& mIgnoreSetting) 
+	{
+		return mIgnoreSetting->getValue().asBoolean() != mInvertSetting;
+	}
+
+	return false;
+}
+
+void LLNotificationForm::setIgnored(bool ignored)
+{
+	if (mIgnoreSetting) mIgnoreSetting->setValue(ignored != mInvertSetting);
+}
+
 LLNotificationTemplate::LLNotificationTemplate(const LLNotificationTemplate::Params& p)
 :	mName(p.name),
 	mType(p.type),
@@ -545,8 +612,8 @@ void LLNotification::respond(const LLSD& response)
 
 	if (mForm->getIgnoreType() != LLNotificationForm::IGNORE_NO)
 	{
-		BOOL show_notification = mIgnored ? FALSE : TRUE;
-		LLUI::sSettingGroups["ignores"]->setBOOL(getName(), show_notification);
+		bool show_notification = !mIgnored;
+		mForm->setIgnored(!show_notification);
 		if (mIgnored && mForm->getIgnoreType() == LLNotificationForm::IGNORE_WITH_LAST_RESPONSE)
 		{
 			LLUI::sSettingGroups["ignores"]->setLLSD("Default" + getName(), response);
@@ -1294,11 +1361,11 @@ bool LLNotifications::loadTemplates()
 			}
 			if(it->form_ref.form_template.cancel_text.isProvided())
 			{
-				replaceFormText(it->form_ref.form, "$cancel_text", it->form_ref.form_template.cancel_text);
+				replaceFormText(it->form_ref.form, "$canceltext", it->form_ref.form_template.cancel_text);
 			}
 			if(it->form_ref.form_template.ignore_text.isProvided())
 			{
-				replaceFormText(it->form_ref.form, "$ignore_text", it->form_ref.form_template.ignore_text);
+				replaceFormText(it->form_ref.form, "$ignoretext", it->form_ref.form_template.ignore_text);
 			}
 		}
 		addTemplate(it->name, LLNotificationTemplatePtr(new LLNotificationTemplate(*it)));
diff --git a/indra/llui/llnotifications.h b/indra/llui/llnotifications.h
index a58e7afe23..ed29e0d83e 100644
--- a/indra/llui/llnotifications.h
+++ b/indra/llui/llnotifications.h
@@ -163,22 +163,19 @@ class LLNotificationForm
 public:
 	struct FormElementBase : public LLInitParam::Block<FormElementBase>
 	{
-		Mandatory<std::string>	name;
+		Optional<std::string>	name;
 
-		FormElementBase()
-		:	name("name")
-		{}
+		FormElementBase();
 	};
 
 	struct FormIgnore : public LLInitParam::Block<FormIgnore, FormElementBase>
 	{
 		Optional<std::string>	text;
 		Optional<bool>			save_option;
+		Optional<std::string>	control;
+		Optional<bool>			invert_control;
 
-		FormIgnore()
-		:	text("text"),
-			save_option("save_option", false)
-		{}
+		FormIgnore();
 	};
 
 	struct FormButton : public LLInitParam::Block<FormButton, FormElementBase>
@@ -190,16 +187,7 @@ public:
 
 		Mandatory<std::string>	type;
 
-		FormButton()
-		:	index("index"),
-			text("text"),
-			ignore("ignore"),
-			is_default("default"),
-			type("type")
-		{
-			// set type here so it gets serialized
-			type = "button";
-		}
+		FormButton();
 	};
 
 	struct FormInput : public LLInitParam::Block<FormInput, FormElementBase>
@@ -207,10 +195,7 @@ public:
 		Mandatory<std::string>	type;
 		Optional<S32>			width;
 
-		FormInput()
-		:	type("type"),
-			width("width", 0)
-		{}
+		FormInput();
 	};
 
 	struct FormElement : public LLInitParam::Choice<FormElement>
@@ -218,18 +203,13 @@ public:
 		Alternative<FormButton> button;
 		Alternative<FormInput>	input;
 
-		FormElement()
-		:	button("button"),
-			input("input")
-		{}
+		FormElement();
 	};
 
 	struct FormElements : public LLInitParam::Block<FormElements>
 	{
 		Multiple<FormElement> elements;
-		FormElements()
-		:	elements("")
-		{}
+		FormElements();
 	};
 
 	struct Params : public LLInitParam::Block<Params>
@@ -238,11 +218,7 @@ public:
 		Optional<FormIgnore>	ignore;
 		Optional<FormElements>	form_elements;
 
-		Params()
-		:	name("name"),
-			ignore("ignore"),
-			form_elements("")
-		{}
+		Params();
 	};
 
 	typedef enum e_ignore_type
@@ -268,14 +244,19 @@ public:
 	// appends form elements from another form serialized as LLSD
 	void append(const LLSD& sub_form);
 	std::string getDefaultOption();
+	LLPointer<class LLControlVariable> getIgnoreSetting();
+	bool getIgnored();
+	void setIgnored(bool ignored);
 
 	EIgnoreType getIgnoreType() { return mIgnore; }
 	std::string getIgnoreMessage() { return mIgnoreMsg; }
 
 private:
-	LLSD	mFormData;
-	EIgnoreType mIgnore;
-	std::string mIgnoreMsg;
+	LLSD								mFormData;
+	EIgnoreType							mIgnore;
+	std::string							mIgnoreMsg;
+	LLPointer<class LLControlVariable>	mIgnoreSetting;
+	bool								mInvertSetting;
 };
 
 typedef boost::shared_ptr<LLNotificationForm> LLNotificationFormPtr;
diff --git a/indra/llui/llnotificationslistener.cpp b/indra/llui/llnotificationslistener.cpp
index 44a90398fd..3bbeb3a778 100644
--- a/indra/llui/llnotificationslistener.cpp
+++ b/indra/llui/llnotificationslistener.cpp
@@ -29,6 +29,7 @@
 #include "linden_common.h"
 #include "llnotificationslistener.h"
 #include "llnotifications.h"
+#include "llnotificationtemplate.h"
 #include "llsd.h"
 #include "llui.h"
 
@@ -182,7 +183,11 @@ void LLNotificationsListener::ignore(const LLSD& params) const
     if (params["name"].isDefined())
     {
         // ["name"] was passed: ignore just that notification
-        LLUI::sSettingGroups["ignores"]->setBOOL(params["name"], ignore);
+		LLNotificationTemplatePtr templatep = mNotifications.getTemplate(params["name"]);
+		if (templatep)
+		{
+			templatep->mForm->setIgnored(ignore);
+		}
     }
     else
     {
-- 
cgit v1.2.3


From d2a0327b6e89ca678e50e58dd685ea80e4c51cb5 Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Thu, 16 Sep 2010 16:29:53 -0700
Subject: popup blocking notifications now handled in all web_browser
 instances, not just llfloatermediabrowser

---
 indra/newview/llbrowsernotification.cpp            |  18 +-
 indra/newview/llfloatermediabrowser.cpp            |  95 ---------
 indra/newview/llfloatermediabrowser.h              |   6 -
 indra/newview/llfloaterpreference.cpp              |  10 +-
 indra/newview/llmediactrl.cpp                      | 216 +++++++++++++++++++--
 indra/newview/llmediactrl.h                        |   8 +-
 .../skins/default/xui/en/floater_media_browser.xml |  70 -------
 .../newview/skins/default/xui/en/notifications.xml |   5 +-
 .../default/xui/en/panel_preferences_setup.xml     |  14 +-
 9 files changed, 231 insertions(+), 211 deletions(-)

diff --git a/indra/newview/llbrowsernotification.cpp b/indra/newview/llbrowsernotification.cpp
index e162527e23..cc54d10944 100644
--- a/indra/newview/llbrowsernotification.cpp
+++ b/indra/newview/llbrowsernotification.cpp
@@ -36,22 +36,6 @@ using namespace LLNotificationsUI;
 
 bool LLBrowserNotification::processNotification(const LLSD& notify)
 {
-	LLNotificationPtr notification = LLNotifications::instance().find(notify["id"].asUUID());
-
-	if (notification)
-	{
-		LLFloaterMediaBrowser* browserp = dynamic_cast<LLFloaterMediaBrowser*>(LLFloaterReg::findInstance("media_browser", notification->getPayload()["source"]));
-		if (notify["sigtype"].asString() == "add" || notify["sigtype"].asString() == "load")
-		{
-			if (browserp)
-			{
-				browserp->showNotification(notification);
-			}
-		}
-		else if (notify["sigtype"].asString() == "delete")
-		{
-			browserp->hideNotification();
-		}
-	}
+	// browser notifications are currently handled directly by the LLMediaCtrl instance that spawned them
 	return false;
 }
diff --git a/indra/newview/llfloatermediabrowser.cpp b/indra/newview/llfloatermediabrowser.cpp
index ba8128e902..3e99b27f7f 100644
--- a/indra/newview/llfloatermediabrowser.cpp
+++ b/indra/newview/llfloatermediabrowser.cpp
@@ -144,16 +144,12 @@ void LLFloaterMediaBrowser::draw()
 BOOL LLFloaterMediaBrowser::postBuild()
 {
 	mBrowser = getChild<LLMediaCtrl>("browser");
-	mBrowser->setMediaID(mKey);
 	mBrowser->addObserver(this);
 
 	mAddressCombo = getChild<LLComboBox>("address");
 	mAddressCombo->setCommitCallback(onEnterAddress, this);
 	mAddressCombo->sortByName();
 
-	LLButton& notification_close = getChildRef<LLButton>("close_notification");
-	notification_close.setClickedCallback(boost::bind(&LLFloaterMediaBrowser::onCloseNotification, this), NULL);
-
 	childSetAction("back", onClickBack, this);
 	childSetAction("forward", onClickForward, this);
 	childSetAction("reload", onClickRefresh, this);
@@ -250,73 +246,6 @@ void LLFloaterMediaBrowser::setCurrentURL(const std::string& url)
 	getChildView("reload")->setEnabled(TRUE);
 }
 
-void LLFloaterMediaBrowser::showNotification(LLNotificationPtr notify)
-{
-	mCurNotification = notify;
-
-	// add popup here
-	LLSD payload = notify->getPayload();
-
-	LLNotificationFormPtr formp = notify->getForm();
-	LLLayoutPanel& panel = getChildRef<LLLayoutPanel>("notification_area");
-	panel.setVisible(true);
-	panel.getChild<LLUICtrl>("notification_icon")->setValue(notify->getIcon());
-	panel.getChild<LLUICtrl>("notification_text")->setValue(notify->getMessage());
-	panel.getChild<LLUICtrl>("notification_text")->setToolTip(notify->getMessage());
-	LLNotificationForm::EIgnoreType ignore_type = formp->getIgnoreType(); 
-	LLLayoutPanel& form_elements = panel.getChildRef<LLLayoutPanel>("form_elements");
-
-	const S32 FORM_PADDING_HORIZONTAL = 10;
-	const S32 FORM_PADDING_VERTICAL = 5;
-	S32 cur_x = FORM_PADDING_HORIZONTAL;
-
-	if (ignore_type != LLNotificationForm::IGNORE_NO)
-	{
-		LLCheckBoxCtrl::Params checkbox_p;
-		checkbox_p.name = "ignore_check";
-		checkbox_p.rect = LLRect(cur_x, form_elements.getRect().getHeight() - FORM_PADDING_VERTICAL, cur_x, FORM_PADDING_VERTICAL);
-		checkbox_p.label = formp->getIgnoreMessage();
-		checkbox_p.label_text.text_color = LLColor4::black;
-		checkbox_p.commit_callback.function = boost::bind(&LLFloaterMediaBrowser::onClickIgnore, this, _1);
-
-		LLCheckBoxCtrl* check = LLUICtrlFactory::create<LLCheckBoxCtrl>(checkbox_p);
-		check->setRect(check->getBoundingRect());
-		form_elements.addChild(check);
-		cur_x = check->getRect().mRight + FORM_PADDING_HORIZONTAL;
-	}
-
-	for (S32 i = 0; i < formp->getNumElements(); i++)
-	{
-		LLSD form_element = formp->getElement(i);
-		if (form_element["type"].asString() == "button")
-		{
-			LLButton::Params button_p;
-			button_p.name = form_element["name"];
-			button_p.label = form_element["text"];
-			button_p.rect = LLRect(cur_x, form_elements.getRect().getHeight() - FORM_PADDING_VERTICAL, cur_x, FORM_PADDING_VERTICAL);
-			button_p.commit_callback.function = boost::bind(&LLFloaterMediaBrowser::onClickNotificationButton, this, form_element["name"].asString());
-			button_p.auto_resize = true;
-
-			LLButton* button = LLUICtrlFactory::create<LLButton>(button_p);
-			button->autoResize();
-			form_elements.addChild(button);
-
-			cur_x = button->getRect().mRight + FORM_PADDING_HORIZONTAL;
-		}
-	}
-
-
-	form_elements.reshape(cur_x, form_elements.getRect().getHeight());
-
-	//LLWeb::loadURL(payload["url"], payload["target"]);
-}
-
-void LLFloaterMediaBrowser::hideNotification()
-{
-	LLLayoutPanel& panel = getChildRef<LLLayoutPanel>("notification_area");
-	panel.setVisible(FALSE);
-}
-
 //static 
 void LLFloaterMediaBrowser::onEnterAddress(LLUICtrl* ctrl, void* user_data)
 {
@@ -449,28 +378,4 @@ void LLFloaterMediaBrowser::openMedia(const std::string& media_url)
 	setCurrentURL(media_url);
 }
 
-void LLFloaterMediaBrowser::onCloseNotification()
-{
-	LLNotifications::instance().cancel(mCurNotification);
-}
-
-void LLFloaterMediaBrowser::onClickIgnore(LLUICtrl* ctrl)
-{
-	bool check = ctrl->getValue().asBoolean();
-	if (mCurNotification && mCurNotification->getForm()->getIgnoreType() == LLNotificationForm::IGNORE_SHOW_AGAIN)
-	{
-		// question was "show again" so invert value to get "ignore"
-		check = !check;
-	}
-	mCurNotification->setIgnored(check);
-}
 
-void LLFloaterMediaBrowser::onClickNotificationButton(const std::string& name)
-{
-	if (!mCurNotification) return;
-
-	LLSD response = mCurNotification->getResponseTemplate();
-	response[name] = true;
-
-	mCurNotification->respond(response); 
-}
diff --git a/indra/newview/llfloatermediabrowser.h b/indra/newview/llfloatermediabrowser.h
index e6511c6e85..6498e28045 100644
--- a/indra/newview/llfloatermediabrowser.h
+++ b/indra/newview/llfloatermediabrowser.h
@@ -56,8 +56,6 @@ public:
 	void buildURLHistory();
 	std::string getSupportURL();
 	void setCurrentURL(const std::string& url);
-	void showNotification(boost::shared_ptr<LLNotification> notify);
-	void hideNotification();
 
 	static void onEnterAddress(LLUICtrl* ctrl, void* user_data);
 	static void onClickRefresh(void* user_data);
@@ -73,10 +71,6 @@ public:
 	static void onClickSeek(void* user_data);
 
 private:
-	void onCloseNotification();
-	void onClickIgnore(LLUICtrl* ctrl);
-	void onClickNotificationButton(const std::string& name);
-
 	LLMediaCtrl* mBrowser;
 	LLComboBox* mAddressCombo;
 	std::string mCurrentURL;
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index 50aacc6458..cba91d7e7e 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -798,7 +798,7 @@ void LLFloaterPreference::buildPopupLists()
 		
 		LLScrollListItem* item = NULL;
 		
-		bool show_popup = LLUI::sSettingGroups["ignores"]->getBOOL(templatep->mName);
+		bool show_popup = formp->getIgnored();
 		if (!show_popup)
 		{
 			if (ignore == LLNotificationForm::IGNORE_WITH_LAST_RESPONSE)
@@ -1150,9 +1150,7 @@ void LLFloaterPreference::onClickDisablePopup()
 	for (itor = items.begin(); itor != items.end(); ++itor)
 	{
 		LLNotificationTemplatePtr templatep = LLNotifications::instance().getTemplate(*(std::string*)((*itor)->getUserdata()));
-		//gSavedSettings.setWarning(templatep->mName, TRUE);
-		std::string notification_name = templatep->mName;
-		LLUI::sSettingGroups["ignores"]->setBOOL(notification_name, FALSE);
+		templatep->mForm->setIgnored(false);
 	}
 	
 	buildPopupLists();
@@ -1166,7 +1164,7 @@ void LLFloaterPreference::resetAllIgnored()
 	{
 		if (iter->second->mForm->getIgnoreType() != LLNotificationForm::IGNORE_NO)
 		{
-			LLUI::sSettingGroups["ignores"]->setBOOL(iter->first, TRUE);
+			iter->second->mForm->setIgnored(true);
 		}
 	}
 }
@@ -1179,7 +1177,7 @@ void LLFloaterPreference::setAllIgnored()
 	{
 		if (iter->second->mForm->getIgnoreType() != LLNotificationForm::IGNORE_NO)
 		{
-			LLUI::sSettingGroups["ignores"]->setBOOL(iter->first, FALSE);
+			iter->second->mForm->setIgnored(false);
 		}
 	}
 }
diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp
index 16519bc0d5..a2c809884b 100644
--- a/indra/newview/llmediactrl.cpp
+++ b/indra/newview/llmediactrl.cpp
@@ -38,7 +38,6 @@
 #include "llviewermedia.h"
 #include "llviewertexture.h"
 #include "llviewerwindow.h"
-#include "llnotificationsutil.h"
 #include "llweb.h"
 #include "llrender.h"
 #include "llpluginclassmedia.h"
@@ -49,6 +48,12 @@
 // linden library includes
 #include "llfocusmgr.h"
 #include "llsdutil.h"
+#include "lllayoutstack.h"
+#include "lliconctrl.h"
+#include "lltextbox.h"
+#include "llbutton.h"
+#include "llcheckboxctrl.h"
+#include "llnotifications.h"
 
 extern BOOL gRestoreGL;
 
@@ -90,7 +95,6 @@ LLMediaCtrl::LLMediaCtrl( const Params& p) :
 	mTextureWidth ( 1024 ),
 	mTextureHeight ( 1024 ),
 	mClearCache(false),
-	mMediaID(p.media_id),
 	mHomePageMimeType(p.initial_mime_type)
 {
 	{
@@ -177,6 +181,7 @@ void LLMediaCtrl::setTrusted( bool valIn )
 //
 BOOL LLMediaCtrl::handleHover( S32 x, S32 y, MASK mask )
 {
+	if (LLPanel::handleHover(x, y, mask)) return TRUE;
 	convertInputCoords(x, y);
 
 	if (mMediaSource)
@@ -192,6 +197,7 @@ BOOL LLMediaCtrl::handleHover( S32 x, S32 y, MASK mask )
 //
 BOOL LLMediaCtrl::handleScrollWheel( S32 x, S32 y, S32 clicks )
 {
+	if (LLPanel::handleScrollWheel(x, y, clicks)) return TRUE;
 	if (mMediaSource && mMediaSource->hasMedia())
 		mMediaSource->getMediaPlugin()->scrollEvent(0, clicks, gKeyboard->currentMask(TRUE));
 
@@ -202,6 +208,7 @@ BOOL LLMediaCtrl::handleScrollWheel( S32 x, S32 y, S32 clicks )
 //
 BOOL LLMediaCtrl::handleMouseUp( S32 x, S32 y, MASK mask )
 {
+	if (LLPanel::handleMouseUp(x, y, mask)) return TRUE;
 	convertInputCoords(x, y);
 
 	if (mMediaSource)
@@ -226,6 +233,7 @@ BOOL LLMediaCtrl::handleMouseUp( S32 x, S32 y, MASK mask )
 //
 BOOL LLMediaCtrl::handleMouseDown( S32 x, S32 y, MASK mask )
 {
+	if (LLPanel::handleMouseDown(x, y, mask)) return TRUE;
 	convertInputCoords(x, y);
 
 	if (mMediaSource)
@@ -245,6 +253,7 @@ BOOL LLMediaCtrl::handleMouseDown( S32 x, S32 y, MASK mask )
 //
 BOOL LLMediaCtrl::handleRightMouseUp( S32 x, S32 y, MASK mask )
 {
+	if (LLPanel::handleRightMouseUp(x, y, mask)) return TRUE;
 	convertInputCoords(x, y);
 
 	if (mMediaSource)
@@ -269,6 +278,7 @@ BOOL LLMediaCtrl::handleRightMouseUp( S32 x, S32 y, MASK mask )
 //
 BOOL LLMediaCtrl::handleRightMouseDown( S32 x, S32 y, MASK mask )
 {
+	if (LLPanel::handleRightMouseDown(x, y, mask)) return TRUE;
 	convertInputCoords(x, y);
 
 	if (mMediaSource)
@@ -288,6 +298,7 @@ BOOL LLMediaCtrl::handleRightMouseDown( S32 x, S32 y, MASK mask )
 //
 BOOL LLMediaCtrl::handleDoubleClick( S32 x, S32 y, MASK mask )
 {
+	if (LLPanel::handleDoubleClick(x, y, mask)) return TRUE;
 	convertInputCoords(x, y);
 
 	if (mMediaSource)
@@ -342,6 +353,85 @@ void LLMediaCtrl::onFocusLost()
 //
 BOOL LLMediaCtrl::postBuild ()
 {
+	LLLayoutStack::Params layout_p;
+	layout_p.name = "notification_stack";
+	layout_p.rect = LLRect(0,getLocalRect().mTop,getLocalRect().mRight, 30);
+	layout_p.follows.flags = FOLLOWS_ALL;
+	layout_p.mouse_opaque = false;
+	layout_p.orientation = "vertical";
+
+	LLLayoutStack* stackp = LLUICtrlFactory::create<LLLayoutStack>(layout_p);
+	addChild(stackp);
+
+	LLLayoutPanel::Params panel_p;
+	panel_p.rect = LLRect(0, 30, 800, 0);
+	panel_p.min_height = 30;
+	panel_p.name = "notification_area";
+	panel_p.visible = false;
+	panel_p.user_resize = false;
+	panel_p.background_visible = true;
+	panel_p.bg_alpha_image.name = "Yellow_Gradient";
+	panel_p.auto_resize = false;
+	LLLayoutPanel* notification_panel = LLUICtrlFactory::create<LLLayoutPanel>(panel_p);
+	stackp->addChild(notification_panel);
+
+	panel_p = LLUICtrlFactory::getDefaultParams<LLLayoutPanel>();
+	panel_p.auto_resize = true;
+	panel_p.mouse_opaque = false;
+	LLLayoutPanel* dummy_panel = LLUICtrlFactory::create<LLLayoutPanel>(panel_p);
+	stackp->addChild(dummy_panel);
+
+	layout_p = LLUICtrlFactory::getDefaultParams<LLLayoutStack>();
+	layout_p.rect = LLRect(0, 30, 800, 0);
+	layout_p.follows.flags = FOLLOWS_ALL;
+	layout_p.orientation = "horizontal";
+	stackp = LLUICtrlFactory::create<LLLayoutStack>(layout_p);
+	notification_panel->addChild(stackp);
+
+	panel_p = LLUICtrlFactory::getDefaultParams<LLLayoutPanel>();
+	panel_p.rect.height = 30;
+	LLLayoutPanel* panel = LLUICtrlFactory::create<LLLayoutPanel>(panel_p);
+	stackp->addChild(panel);
+
+	LLIconCtrl::Params icon_p;
+	icon_p.name = "notification_icon";
+	icon_p.rect = LLRect(5, 23, 21, 8);
+	panel->addChild(LLUICtrlFactory::create<LLIconCtrl>(icon_p));
+
+	LLTextBox::Params text_p;
+	text_p.rect = LLRect(31, 20, 430, 0);
+	text_p.text_color = LLColor4::black;
+	text_p.font = LLFontGL::getFontSansSerif();
+	text_p.font.style = "BOLD";
+	text_p.name = "notification_text";
+	text_p.use_ellipses = true;
+	panel->addChild(LLUICtrlFactory::create<LLTextBox>(text_p));
+
+	panel_p = LLUICtrlFactory::getDefaultParams<LLLayoutPanel>();
+	panel_p.auto_resize = false;
+	panel_p.user_resize = false;
+	panel_p.name="form_elements";
+	panel_p.rect = LLRect(0, 30, 130, 0);
+	LLLayoutPanel* form_elements_panel = LLUICtrlFactory::create<LLLayoutPanel>(panel_p);
+	stackp->addChild(form_elements_panel);
+
+	panel_p = LLUICtrlFactory::getDefaultParams<LLLayoutPanel>();
+	panel_p.auto_resize = false;
+	panel_p.user_resize = false;
+	panel_p.rect = LLRect(0, 30, 25, 0);
+	LLLayoutPanel* close_panel = LLUICtrlFactory::create<LLLayoutPanel>(panel_p);
+	stackp->addChild(close_panel);
+
+	LLButton::Params button_p;
+	button_p.name = "close_notification";
+	button_p.rect = LLRect(5, 23, 21, 7);
+	button_p.image_color=LLUIColorTable::instance().getColor("DkGray_66");
+    button_p.image_unselected.name="Icon_Close_Foreground";
+	button_p.image_selected.name="Icon_Close_Press";
+	button_p.click_callback.function = boost::bind(&LLMediaCtrl::onCloseNotification, this);
+
+	close_panel->addChild(LLUICtrlFactory::create<LLButton>(button_p));
+
 	setVisibleCallback(boost::bind(&LLMediaCtrl::onVisibilityChange, this, _2));
 	return TRUE;
 }
@@ -350,6 +440,7 @@ BOOL LLMediaCtrl::postBuild ()
 //
 BOOL LLMediaCtrl::handleKeyHere( KEY key, MASK mask )
 {
+	if (LLPanel::handleKeyHere(key, mask)) return TRUE;
 	BOOL result = FALSE;
 	
 	if (mMediaSource)
@@ -375,6 +466,7 @@ void LLMediaCtrl::handleVisibilityChange ( BOOL new_visibility )
 //
 BOOL LLMediaCtrl::handleUnicodeCharHere(llwchar uni_char)
 {
+	if (LLPanel::handleUnicodeCharHere(uni_char)) return TRUE;
 	BOOL result = FALSE;
 	
 	if (mMediaSource)
@@ -827,7 +919,15 @@ void LLMediaCtrl::draw()
 	if ( mBorder && mBorder->getVisible() )
 		mBorder->setKeyboardFocusHighlight( gFocusMgr.childHasKeyboardFocus( this ) );
 
-	
+	if (mCurNotification)
+	{
+		if (mCurNotification->isCancelled() || mCurNotification->isExpired())
+		{
+			hideNotification();
+		}
+	}
+
+
 	LLPanel::draw();
 
 	// Restore the previous values
@@ -938,14 +1038,11 @@ void LLMediaCtrl::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event)
 				// ignore this click and let media plugin handle it
 				break;
 			default:
-				if(gSavedSettings.getBOOL("MediaEnablePopups"))
-				{
-
-					LLNotificationsUtil::add("PopupAttempt", 
-						LLSD(), 
-						LLSD().with("source", mMediaID).with("target", target).with("url", url),
-						boost::bind(&LLMediaCtrl::onPopup, this, _1, _2));
-				}
+				LLNotificationPtr popup_notify = LLNotifications::instance().add("PopupAttempt", 
+					LLSD(), 
+					LLSD().with("target", target).with("url", url),
+					boost::bind(&LLMediaCtrl::onPopup, this, _1, _2));
+				showNotification(popup_notify);
 				break;
 			}
 		};
@@ -1005,3 +1102,100 @@ void LLMediaCtrl::onPopup(const LLSD& notification, const LLSD& response)
 		LLWeb::loadURL(notification["payload"]["url"], notification["payload"]["target"]);
 	}
 }
+
+void LLMediaCtrl::onCloseNotification()
+{
+	LLNotifications::instance().cancel(mCurNotification);
+}
+
+void LLMediaCtrl::onClickIgnore(LLUICtrl* ctrl)
+{
+	bool check = ctrl->getValue().asBoolean();
+	if (mCurNotification && mCurNotification->getForm()->getIgnoreType() == LLNotificationForm::IGNORE_SHOW_AGAIN)
+	{
+		// question was "show again" so invert value to get "ignore"
+		check = !check;
+	}
+	mCurNotification->setIgnored(check);
+}
+
+void LLMediaCtrl::onClickNotificationButton(const std::string& name)
+{
+	if (!mCurNotification) return;
+
+	LLSD response = mCurNotification->getResponseTemplate();
+	response[name] = true;
+
+	mCurNotification->respond(response); 
+}
+
+void LLMediaCtrl::showNotification(LLNotificationPtr notify)
+{
+	mCurNotification = notify;
+
+	// add popup here
+	LLSD payload = notify->getPayload();
+
+	LLNotificationFormPtr formp = notify->getForm();
+	LLLayoutPanel& panel = getChildRef<LLLayoutPanel>("notification_area");
+	panel.setVisible(true);
+	panel.getChild<LLUICtrl>("notification_icon")->setValue(notify->getIcon());
+	panel.getChild<LLUICtrl>("notification_text")->setValue(notify->getMessage());
+	panel.getChild<LLUICtrl>("notification_text")->setToolTip(notify->getMessage());
+	LLNotificationForm::EIgnoreType ignore_type = formp->getIgnoreType(); 
+	LLLayoutPanel& form_elements = panel.getChildRef<LLLayoutPanel>("form_elements");
+	form_elements.deleteAllChildren();
+
+	const S32 FORM_PADDING_HORIZONTAL = 10;
+	const S32 FORM_PADDING_VERTICAL = 3;
+	S32 cur_x = FORM_PADDING_HORIZONTAL;
+
+	if (ignore_type != LLNotificationForm::IGNORE_NO)
+	{
+		LLCheckBoxCtrl::Params checkbox_p;
+		checkbox_p.name = "ignore_check";
+		checkbox_p.rect = LLRect(cur_x, form_elements.getRect().getHeight() - FORM_PADDING_VERTICAL, cur_x, FORM_PADDING_VERTICAL);
+		checkbox_p.label = formp->getIgnoreMessage();
+		checkbox_p.label_text.text_color = LLColor4::black;
+		checkbox_p.commit_callback.function = boost::bind(&LLMediaCtrl::onClickIgnore, this, _1);
+		checkbox_p.initial_value = formp->getIgnored();
+
+		LLCheckBoxCtrl* check = LLUICtrlFactory::create<LLCheckBoxCtrl>(checkbox_p);
+		check->setRect(check->getBoundingRect());
+		form_elements.addChild(check);
+		cur_x = check->getRect().mRight + FORM_PADDING_HORIZONTAL;
+	}
+
+	for (S32 i = 0; i < formp->getNumElements(); i++)
+	{
+		LLSD form_element = formp->getElement(i);
+		if (form_element["type"].asString() == "button")
+		{
+			LLButton::Params button_p;
+			button_p.name = form_element["name"];
+			button_p.label = form_element["text"];
+			button_p.rect = LLRect(cur_x, form_elements.getRect().getHeight() - FORM_PADDING_VERTICAL, cur_x, FORM_PADDING_VERTICAL);
+			button_p.click_callback.function = boost::bind(&LLMediaCtrl::onClickNotificationButton, this, form_element["name"].asString());
+			button_p.auto_resize = true;
+
+			LLButton* button = LLUICtrlFactory::create<LLButton>(button_p);
+			button->autoResize();
+			form_elements.addChild(button);
+
+			cur_x = button->getRect().mRight + FORM_PADDING_HORIZONTAL;
+		}
+	}
+
+
+	form_elements.reshape(cur_x, form_elements.getRect().getHeight());
+
+	//LLWeb::loadURL(payload["url"], payload["target"]);
+}
+
+void LLMediaCtrl::hideNotification()
+{
+	LLLayoutPanel& panel = getChildRef<LLLayoutPanel>("notification_area");
+	panel.setVisible(FALSE);
+
+	mCurNotification.reset();
+}
diff --git a/indra/newview/llmediactrl.h b/indra/newview/llmediactrl.h
index 3ba2904003..7008fa893e 100644
--- a/indra/newview/llmediactrl.h
+++ b/indra/newview/llmediactrl.h
@@ -140,8 +140,9 @@ public:
 		bool getDecoupleTextureSize() { return mDecoupleTextureSize; }
 
 		void setTextureSize(S32 width, S32 height);
-		void setMediaID(const std::string& id) { mMediaID = id; }
 
+		void showNotification(boost::shared_ptr<class LLNotification> notify);
+		void hideNotification();
 
 		// over-rides
 		virtual BOOL handleKeyHere( KEY key, MASK mask);
@@ -164,6 +165,9 @@ public:
 	private:
 		void onVisibilityChange ( const LLSD& new_visibility );
 		void onPopup(const LLSD& notification, const LLSD& response);
+		void onCloseNotification();
+		void onClickNotificationButton(const std::string& name);
+		void onClickIgnore(LLUICtrl* ctrl);
 
 		const S32 mTextureDepthBytes;
 		LLUUID mMediaTextureID;
@@ -185,8 +189,8 @@ public:
 		bool mDecoupleTextureSize;
 		S32 mTextureWidth;
 		S32 mTextureHeight;
-		std::string mMediaID;
 		bool mClearCache;
+		boost::shared_ptr<class LLNotification> mCurNotification;
 };
 
 #endif // LL_LLMediaCtrl_H
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 c220124f46..1cb8613eb4 100644
--- a/indra/newview/skins/default/xui/en/floater_media_browser.xml
+++ b/indra/newview/skins/default/xui/en/floater_media_browser.xml
@@ -200,76 +200,6 @@
              name="browser"
              top="0"
              width="540" />
-          <layout_stack 
-            name="notification_stack"
-            left="0"
-            top="0"
-            width="540"
-            bottom="-30"
-            follows="all"
-            mouse_opaque="false"
-            orientation="vertical">
-            <layout_panel
-              height="30"
-              min_height="30" 
-              layout="topleft"
-              name="notification_area"
-              visible="false"
-              user_resize="false"
-              background_visible="true"
-              bg_alpha_image="Yellow_Gradient"
-              auto_resize="false"
-              width="800">
-              <layout_stack
-                top="0"
-                height="30"
-                width="800"
-                left="0"
-                follows="bottom|left|right"
-                orientation="horizontal">
-                <layout_panel
-                  height="30">
-                  <icon name="notification_icon"
-                        left="5"
-                        top="7"
-                        width="16"
-                        height="15"/>
-                  <text left_pad="8"
-                        top="10"
-                        height="25"
-                        width="400"
-                        text_color="black"
-                        font="SansSerifSmall"
-                        font.style="BOLD"
-                        name="notification_text"
-                        value="Notification text here"/>
-                </layout_panel>
-                <layout_panel
-                  height="30"
-                  width="130"
-                  auto_resize="false"
-                  user_resize="false"
-                  name="form_elements"/>
-                <layout_panel
-                  height="30"
-                  width="25"
-                  auto_resize="false"
-                  name="close_panel">
-                  <button left="5"
-                          name="close_notification"
-                          width="16"
-                          height="16"
-                          top="8"
-                          image_color="DkGray_66"
-                          image_unselected="Icon_Close_Foreground"
-                          image_selected="Icon_Close_Press"/>
-                </layout_panel>
-              </layout_stack>
-            </layout_panel>
-            <layout_panel
-              mouse_opaque="false" 
-              auto_resize="true"/>
-          </layout_stack>
             <button
              follows="bottom|left"
              height="20"
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 59fcd3513e..a2a5015d06 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -6461,14 +6461,13 @@ Mute everyone?
     <unique/>
     <form name="form">
       <ignore name="ignore"
-       text="Enable all pop-ups"/>
+              control="MediaEnablePopups" 
+              text="Enable all pop-ups"/>
       <button default="true"
               index="0"
               name="open"
               text="Open pop-up window"/>
     </form>
-
-
   </notification>
 
   
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..879781f746 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
@@ -320,7 +320,19 @@
     radio_style="false"
     width="400"
     top_pad="5"/>
-
+  <check_box
+    top_delta="4"
+    enabled="true"
+    follows="left|top"
+    height="14"
+    initial_value="false"
+    control_name="MediaEnablePopups"
+    label="Enable media browser pop-ups"
+    left_delta="0"
+    mouse_opaque="true"
+    name="media_popup_enabled"
+    width="400"           
+    top_pad="5"/>
   <check_box
     top_delta="4"
     enabled="true"
-- 
cgit v1.2.3


From 7b7d8ffc22d3af3186f96d57f1276411f558d6f1 Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Thu, 16 Sep 2010 16:51:07 -0700
Subject: EXP-73 FIX hint cannot be dismissed with X and crashes browser when
 hint is triggered by user taking an object from inworld into inventory

---
 indra/llui/llnotificationtemplate.h                | 10 ++-
 .../newview/skins/default/xui/en/notifications.xml | 99 +++++++++++-----------
 2 files changed, 58 insertions(+), 51 deletions(-)

diff --git a/indra/llui/llnotificationtemplate.h b/indra/llui/llnotificationtemplate.h
index 4a020bfe70..a4d393f874 100644
--- a/indra/llui/llnotificationtemplate.h
+++ b/indra/llui/llnotificationtemplate.h
@@ -74,10 +74,18 @@ struct LLNotificationTemplate
 
 	struct UniquenessContext : public LLInitParam::Block<UniquenessContext>
 	{
+	private:
+		// this idiom allows 
+		// <notification unique="true">
+		// as well as
+		// <notification> <unique> <context key=""/> </unique>...
+		Optional<bool>			dummy_val;
+	public:
 		Mandatory<std::string>	key;
 
 		UniquenessContext()
-		:	key("key")
+		:	key("key"),
+			dummy_val("")
 		{}
 		
 	};
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index a2a5015d06..9d947480b3 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -2059,7 +2059,8 @@ Would you be my friend?
  icon="alertmodal.tga"
  label="Save Outfit"
  name="SaveOutfitAs"
- type="alertmodal">
+ type="alertmodal"
+ unique="true">
     Save what I'm wearing as a new Outfit:
     <form name="form">
       <input name="message" type="text">
@@ -2075,7 +2076,6 @@ Would you be my friend?
        name="Cancel"
        text="Cancel"/>
     </form>
-    <unique/>
   </notification>
 
   <notification
@@ -4010,37 +4010,37 @@ Go to your [http://secondlife.com/account/ Dashboard] to see your account histor
   <notification
    icon="alertmodal.tga"
    name="ConfirmQuit"
-   type="alertmodal">
+   type="alertmodal"
+   unique="true">
 Are you sure you want to quit?
     <usetemplate
      ignoretext="Confirm before I quit"
      name="okcancelignore"
      notext="Don&apos;t Quit"
      yestext="Quit"/>
-     <unique/>
   </notification>
 
   <notification
    icon="alertmodal.tga"
    name="DeleteItems"
-   type="alertmodal">
+   type="alertmodal"
+   unique="true">
     [QUESTION]
     <usetemplate
      ignoretext="Confirm before deleting items"
      name="okcancelignore"
      notext="Cancel"
      yestext="OK"/>
-    <unique/>
   </notification>
 
   <notification
    icon="alertmodal.tga"
    name="HelpReportAbuseEmailLL"
-   type="alert">
+   type="alert"
+   unique="true">
 Use this tool to report violations of the [http://secondlife.com/corporate/tos.php Terms of Service] and [http://secondlife.com/corporate/cs.php Community Standards].
 
 All reported abuses are investigated and resolved.
-   <unique/>
   </notification>
 
   <notification
@@ -4982,47 +4982,47 @@ Message from [NAME]:
    icon="notify.tga"
    name="NotSafe"
    persist="true"
-   type="notify">
+   type="notify"
+   unique="true">
 This land has damage enabled.
 You can be hurt here. If you die, you will be teleported to your home location.
-    <unique/>
   </notification>
 
   <notification
    icon="notify.tga"
    name="NoFly"
    persist="true"
-   type="notify">
+   type="notify"
+   unique="true">
 This area has flying disabled.
 You can&apos;t fly here.
-    <unique/>
   </notification>
 
   <notification
    icon="notify.tga"
    name="PushRestricted"
    persist="true"
-   type="notify">
+   type="notify"
+   unique="true">
 This area does not allow pushing. You can&apos;t push others here unless you own the land.
-    <unique/>
   </notification>
 
   <notification
    icon="notify.tga"
    name="NoVoice"
    persist="true"
-   type="notify">
+   type="notify"
+   unique="true">
 This area has voice chat disabled. You won&apos;t be able to hear anyone talking.
-    <unique/>
   </notification>
 
   <notification
    icon="notify.tga"
    name="NoBuild"
    persist="true"
-   type="notify">
+   type="notify"
+   unique="true">
 This area has building disabled. You can&apos;t build or rez objects here.
-    <unique/>
   </notification>
 
   <notification
@@ -5943,9 +5943,9 @@ The voice call you are trying to join, [VOICE_CHANNEL_NAME], has reached maximum
   <notification
    icon="notifytip.tga"
    name="ProximalVoiceChannelFull"
-   type="notifytip">
+   type="notifytip"
+   unique="true">
 We&apos;re sorry.  This area has reached maximum capacity for voice conversations.  Please try to use voice in another area.
-    <unique/>
   </notification>
 
   <notification
@@ -6002,9 +6002,9 @@ Failed to connect to [VOICE_CHANNEL_NAME], please try again later.  You will now
    duration="10"
    icon="notifytip.tga"
    name="VoiceLoginRetry"
-   type="notifytip">
+   type="notifytip"
+   unique="true">
 We are creating a voice channel for you. This may take up to one minute.
-    <unique/>
   </notification>
 
   <notification
@@ -6012,10 +6012,10 @@ We are creating a voice channel for you. This may take up to one minute.
    name="VoiceEffectsExpired"
    sound="UISndAlert"
    persist="true"
-   type="notify">
+   type="notify"
+   unique="true">
 One or more of your subscribed Voice Morphs has expired.
 [[URL] Click here] to renew your subscription.
-    <unique/>
   </notification>
 
   <notification
@@ -6023,10 +6023,10 @@ One or more of your subscribed Voice Morphs has expired.
    name="VoiceEffectsExpiredInUse"
    sound="UISndAlert"
    persist="true"
-   type="notify">
+   type="notify"
+   unique="true">
 The active Voice Morph has expired, your normal voice settings have been applied.
 [[URL] Click here] to renew your subscription.
-    <unique/>
   </notification>
 
   <notification
@@ -6034,10 +6034,10 @@ The active Voice Morph has expired, your normal voice settings have been applied
    name="VoiceEffectsWillExpire"
    sound="UISndAlert"
    persist="true"
-   type="notify">
+   type="notify"
+   unique="true">
 One or more of your Voice Morphs will expire in less than [INTERVAL] days.
 [[URL] Click here] to renew your subscription.
-    <unique/>
   </notification>
 
   <notification
@@ -6045,9 +6045,9 @@ One or more of your Voice Morphs will expire in less than [INTERVAL] days.
    name="VoiceEffectsNew"
    sound="UISndAlert"
    persist="true"
-   type="notify">
+   type="notify"
+   unique="true">
 New Voice Morphs are available!
-    <unique/>
   </notification>
 
   <notification
@@ -6374,8 +6374,8 @@ Are you sure you want to leave this call?
      ignoretext="Confirm before I leave call"
      name="okcancelignore"
      notext="No"
-     yestext="Yes"/>
-    <unique/>
+     yestext="Yes"
+     unique="true"/>
   </notification>
 
   <notification
@@ -6391,64 +6391,64 @@ Mute everyone?
      ignoretext="Confirm before I mute all participants in a group call"
      name="okcancelignore"
      yestext="Ok"
-     notext="Cancel"/>
-    <unique/>
+     notext="Cancel"
+     unique="true"/>
   </notification>
 
   <notification
   name="HintChat"
   label="Chat"
-  type="hint">
+  type="hint"
+  unique="true">
     To join the conversation, type into the chat field below.
-    <unique/>
   </notification>
 
   <notification
   name="HintSit"
   label="Stand"
-  type="hint">
+  type="hint"
+  unique="true">
     To stand up and exit the sitting position, click the Stand button.
-    <unique/>
   </notification>
 
   <notification
   name="HintDestinationGuide"
   label="Explore the World"
-  type="hint">
+  type="hint"
+  unique="true">
     The Destination Guide contains thousands of new places to discover. Select a location and choose Teleport to start exploring.
-    <unique/>
   </notification>
 
   <notification
     name="HintSidePanel"
     label="Side Panel"
-    type="hint">
+    type="hint"
+    unique="true">
     Get quick access to your inventory, outfits, profiles and more in the side panel.
-    <unique/>
   </notification>
 
   <notification
   name="HintMove"
   label="Move"
-  type="hint">
+  type="hint"
+  unique="true">
     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.
-    <unique/>
   </notification>
 
   <notification
   name="HintInventory"
   label="Inventory"
-  type="hint">
+  type="hint"
+  unique="true">
     Check your inventory to find items. Newest items can be easily found in the Recent tab.
-    <unique/>
   </notification>
 
   <notification
   name="HintLindenDollar"
   label="You've got Linden Dollars!"
-  type="hint">
+  type="hint"
+  unique="true">
     Here's your current balance of L$. Click Buy L$ to purchase more Linden Dollars.
-    <unique/>
   </notification>
 
   <notification
@@ -6456,9 +6456,8 @@ Mute everyone?
   icon="Popup_Caution"
   type="browser"
   duration="10"
-  >
+  unique="true">
     A pop-up was prevented from opening.
-    <unique/>
     <form name="form">
       <ignore name="ignore"
               control="MediaEnablePopups" 
-- 
cgit v1.2.3


From 57d4e7261d2a451f2066b68e163d6632fcac246e Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Thu, 16 Sep 2010 17:29:36 -0700
Subject: fixed build

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

diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp
index 982d82ca01..7c94627dcb 100644
--- a/indra/newview/llmediactrl.cpp
+++ b/indra/newview/llmediactrl.cpp
@@ -1045,9 +1045,9 @@ void LLMediaCtrl::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event)
 			if(gSavedSettings.getBOOL("MediaEnablePopups"))
 			{
 
-				LLNotificationPtr popup_notify = LLNotificationsUtil::add("PopupAttempt", 
+				LLNotificationPtr popup_notify = LLNotifications::instance().add("PopupAttempt", 
 					LLSD(), 
-					LLSD().with("source", mMediaID).with("target", target).with("url", url).with("uuid", uuid),
+					LLSD().with("target", target).with("url", url).with("uuid", uuid),
 					boost::bind(&LLMediaCtrl::onPopup, this, _1, _2));
 				showNotification(popup_notify);
 				break;
-- 
cgit v1.2.3


From 2dc14c66d4f50dfe4d140b5630cadf2febcee09d Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Thu, 16 Sep 2010 17:55:28 -0700
Subject: fix for all notifications being ignored by default

---
 indra/llui/llnotifications.cpp                       | 16 +++++++++++-----
 indra/newview/skins/default/xui/en/notifications.xml |  3 ++-
 2 files changed, 13 insertions(+), 6 deletions(-)

diff --git a/indra/llui/llnotifications.cpp b/indra/llui/llnotifications.cpp
index bd58fe2637..6a0d64e876 100644
--- a/indra/llui/llnotifications.cpp
+++ b/indra/llui/llnotifications.cpp
@@ -62,7 +62,7 @@ LLNotificationForm::FormElementBase::FormElementBase()
 LLNotificationForm::FormIgnore::FormIgnore()
 :	text("text"),
 	control("control"),
-	invert_control("invert_control", false),
+	invert_control("invert_control", true),
 	save_option("save_option", false)
 {}
 
@@ -190,7 +190,7 @@ LLNotificationForm::LLNotificationForm()
 
 LLNotificationForm::LLNotificationForm(const std::string& name, const LLNotificationForm::Params& p) 
 :	mIgnore(IGNORE_NO),
-	mInvertSetting(false)
+	mInvertSetting(true) // ignore settings by default mean true=show, false=ignore
 {
 	if (p.ignore.isProvided())
 	{
@@ -353,18 +353,24 @@ LLControlVariablePtr LLNotificationForm::getIgnoreSetting()
 
 bool LLNotificationForm::getIgnored()
 {
+	bool ignored = false;
 	if (mIgnore != LLNotificationForm::IGNORE_NO
 		&& mIgnoreSetting) 
 	{
-		return mIgnoreSetting->getValue().asBoolean() != mInvertSetting;
+		ignored = mIgnoreSetting->getValue().asBoolean();
+		if (mInvertSetting) ignored = !ignored;
 	}
 
-	return false;
+	return ignored;
 }
 
 void LLNotificationForm::setIgnored(bool ignored)
 {
-	if (mIgnoreSetting) mIgnoreSetting->setValue(ignored != mInvertSetting);
+	if (mIgnoreSetting)
+	{
+		if (mInvertSetting) ignored = !ignored;
+		mIgnoreSetting->setValue(ignored);
+	}
 }
 
 LLNotificationTemplate::LLNotificationTemplate(const LLNotificationTemplate::Params& p)
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 9d947480b3..d206313185 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -6460,7 +6460,8 @@ Mute everyone?
     A pop-up was prevented from opening.
     <form name="form">
       <ignore name="ignore"
-              control="MediaEnablePopups" 
+              control="MediaEnablePopups"
+              invert_control="false"
               text="Enable all pop-ups"/>
       <button default="true"
               index="0"
-- 
cgit v1.2.3


From 2f233f3eb48730eef4df708021752b0fd9b6c6b2 Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Thu, 16 Sep 2010 17:59:12 -0700
Subject: reverted mediaenablepopups to false by default (desired behavior)
 always trigger popup notification and rely on ignore machinery to hide it

---
 indra/newview/app_settings/settings.xml |  2 +-
 indra/newview/llmediactrl.cpp           | 16 ++++++----------
 2 files changed, 7 insertions(+), 11 deletions(-)

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index f815ae3eb2..efe418f0e8 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -5195,7 +5195,7 @@
     <key>Type</key>
     <string>Boolean</string>
     <key>Value</key>
-    <integer>1</integer>
+    <integer>0</integer>
   </map>
   <key>MediaOnAPrimUI</key>
   <map>
diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp
index 7c94627dcb..621f241227 100644
--- a/indra/newview/llmediactrl.cpp
+++ b/indra/newview/llmediactrl.cpp
@@ -1042,16 +1042,12 @@ void LLMediaCtrl::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event)
 			std::string target = self->getClickTarget();
 			std::string uuid = self->getClickUUID();
 
-			if(gSavedSettings.getBOOL("MediaEnablePopups"))
-			{
-
-				LLNotificationPtr popup_notify = LLNotifications::instance().add("PopupAttempt", 
-					LLSD(), 
-					LLSD().with("target", target).with("url", url).with("uuid", uuid),
-					boost::bind(&LLMediaCtrl::onPopup, this, _1, _2));
-				showNotification(popup_notify);
-				break;
-			}
+			LLNotificationPtr popup_notify = LLNotifications::instance().add("PopupAttempt", 
+				LLSD(), 
+				LLSD().with("target", target).with("url", url).with("uuid", uuid),
+				boost::bind(&LLMediaCtrl::onPopup, this, _1, _2));
+			showNotification(popup_notify);
+			break;
 		};
 
 		case MEDIA_EVENT_CLICK_LINK_NOFOLLOW:
-- 
cgit v1.2.3


From 83c01b041d5b6527b3741b73d075afc4b7ad134c Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Thu, 16 Sep 2010 18:15:01 -0700
Subject: EXP-73 FIX hint cannot be dismissed with X and crashes browser when
 hint is triggered by user taking an object from inworld into inventory

---
 indra/llui/llnotificationtemplate.h | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/indra/llui/llnotificationtemplate.h b/indra/llui/llnotificationtemplate.h
index a4d393f874..6bc0d2aaff 100644
--- a/indra/llui/llnotificationtemplate.h
+++ b/indra/llui/llnotificationtemplate.h
@@ -74,28 +74,28 @@ struct LLNotificationTemplate
 
 	struct UniquenessContext : public LLInitParam::Block<UniquenessContext>
 	{
-	private:
-		// this idiom allows 
-		// <notification unique="true">
-		// as well as
-		// <notification> <unique> <context key=""/> </unique>...
-		Optional<bool>			dummy_val;
-	public:
 		Mandatory<std::string>	key;
 
 		UniquenessContext()
-		:	key("key"),
-			dummy_val("")
+		:	key("key")
 		{}
 		
 	};
 
 	struct UniquenessConstraint : public LLInitParam::Block<UniquenessConstraint>
 	{
+	private:
+		// this idiom allows 
+		// <notification unique="true">
+		// as well as
+		// <notification> <unique> <context key=""/> </unique>...
+		Optional<bool>			dummy_val;
+	public:
 		Multiple<UniquenessContext>	contexts;
 
 		UniquenessConstraint()
-		:	contexts("context")
+		:	contexts("context"),
+			dummy_val("")
 		{}
 	};
 
-- 
cgit v1.2.3


From 83bb4b9518da813a42e49366cea15e5ae9dc7507 Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Thu, 16 Sep 2010 22:10:30 -0700
Subject: fixed merge

---
 indra/llui/lllayoutstack.cpp                  |  4 ++--
 indra/newview/llagentui.h                     |  1 -
 indra/newview/llappviewer.cpp                 |  1 +
 indra/newview/llbottomtray.h                  |  1 +
 indra/newview/llbrowsernotification.cpp       |  6 +++---
 indra/newview/llimhandler.cpp                 |  1 +
 indra/newview/llnearbychathandler.cpp         |  3 ++-
 indra/newview/llnotificationalerthandler.cpp  |  2 +-
 indra/newview/llnotificationgrouphandler.cpp  |  1 +
 indra/newview/llnotificationhandler.h         | 18 ++++++++----------
 indra/newview/llnotificationhandlerutil.cpp   |  1 +
 indra/newview/llnotificationofferhandler.cpp  |  1 +
 indra/newview/llnotificationscripthandler.cpp |  1 +
 indra/newview/llnotificationtiphandler.cpp    |  3 +++
 indra/newview/llsyswellwindow.cpp             |  1 +
 indra/newview/llviewermessage.cpp             |  3 +++
 16 files changed, 30 insertions(+), 18 deletions(-)

diff --git a/indra/llui/lllayoutstack.cpp b/indra/llui/lllayoutstack.cpp
index a0275b6ed5..940c7e7e18 100644
--- a/indra/llui/lllayoutstack.cpp
+++ b/indra/llui/lllayoutstack.cpp
@@ -208,8 +208,8 @@ S32 LLLayoutStack::getDefaultWidth(S32 cur_width)
 
 void LLLayoutStack::movePanel(LLPanel* panel_to_move, LLPanel* target_panel, bool move_to_front)
 {
-	LayoutPanel* embedded_panel_to_move = findEmbeddedPanel(panel_to_move);
-	LayoutPanel* embedded_target_panel = move_to_front ? *mPanels.begin() : findEmbeddedPanel(target_panel);
+	LLLayoutPanel* embedded_panel_to_move = findEmbeddedPanel(panel_to_move);
+	LLLayoutPanel* embedded_target_panel = move_to_front ? *mPanels.begin() : findEmbeddedPanel(target_panel);
 
 	if (!embedded_panel_to_move || !embedded_target_panel || embedded_panel_to_move == embedded_target_panel)
 	{
diff --git a/indra/newview/llagentui.h b/indra/newview/llagentui.h
index afc0ba5d9a..be7d0c365a 100644
--- a/indra/newview/llagentui.h
+++ b/indra/newview/llagentui.h
@@ -26,7 +26,6 @@
 
 #ifndef LLAGENTUI_H
 #define LLAGENTUI_H
-
 class LLSLURL;
 
 class LLAgentUI
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 333c92e50d..3b374947a0 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -46,6 +46,7 @@
 #include "llmd5.h"
 #include "llpumpio.h"
 #include "llmimetypes.h"
+#include "llmodaldialog.h"
 #include "llslurl.h"
 #include "llstartup.h"
 #include "llfocusmgr.h"
diff --git a/indra/newview/llbottomtray.h b/indra/newview/llbottomtray.h
index 35e00924aa..6225d4c92c 100644
--- a/indra/newview/llbottomtray.h
+++ b/indra/newview/llbottomtray.h
@@ -29,6 +29,7 @@
 
 #include "llpanel.h"
 #include "llimview.h"
+#include "llbutton.h"
 
 class LLChicletPanel;
 class LLLayoutStack;
diff --git a/indra/newview/llbrowsernotification.cpp b/indra/newview/llbrowsernotification.cpp
index cc54d10944..8eb0bb1e0b 100644
--- a/indra/newview/llbrowsernotification.cpp
+++ b/indra/newview/llbrowsernotification.cpp
@@ -28,9 +28,9 @@
 #include "llviewerprecompiledheaders.h" // must be first include
 
 #include "llnotificationhandler.h"
-#include "llnotifications.h"
-#include "llfloatermediabrowser.h"
-#include "llfloaterreg.h"
+//#include "llnotifications.h"
+//#include "llfloatermediabrowser.h"
+//#include "llfloaterreg.h"
 
 using namespace LLNotificationsUI;
 
diff --git a/indra/newview/llimhandler.cpp b/indra/newview/llimhandler.cpp
index bc76092a20..e8c905a266 100644
--- a/indra/newview/llimhandler.cpp
+++ b/indra/newview/llimhandler.cpp
@@ -28,6 +28,7 @@
 #include "llviewerprecompiledheaders.h" // must be first include
 
 #include "llnotificationhandler.h"
+#include "llchannelmanager.h"
 
 #include "llagentdata.h"
 #include "llnotifications.h"
diff --git a/indra/newview/llnearbychathandler.cpp b/indra/newview/llnearbychathandler.cpp
index 303f2abcce..83777af31a 100644
--- a/indra/newview/llnearbychathandler.cpp
+++ b/indra/newview/llnearbychathandler.cpp
@@ -28,7 +28,7 @@
 
 #include "llagentdata.h" // for gAgentID
 #include "llnearbychathandler.h"
-
+#include "llchannelmanager.h"
 #include "llbottomtray.h"
 #include "llchatitemscontainerctrl.h"
 #include "llfirstuse.h"
@@ -36,6 +36,7 @@
 #include "llhints.h"
 #include "llnearbychat.h"
 #include "llrecentpeople.h"
+#include "llscreenchannel.h"
 
 #include "llviewercontrol.h"
 
diff --git a/indra/newview/llnotificationalerthandler.cpp b/indra/newview/llnotificationalerthandler.cpp
index dcbf6b64ce..6b9bd0436f 100644
--- a/indra/newview/llnotificationalerthandler.cpp
+++ b/indra/newview/llnotificationalerthandler.cpp
@@ -28,7 +28,7 @@
 #include "llviewerprecompiledheaders.h" // must be first include
 
 #include "llnotificationhandler.h"
-
+#include "llchannelmanager.h"
 #include "llnotifications.h"
 #include "llprogressview.h"
 #include "lltoastnotifypanel.h"
diff --git a/indra/newview/llnotificationgrouphandler.cpp b/indra/newview/llnotificationgrouphandler.cpp
index 9933a8a49c..3819cb06e8 100644
--- a/indra/newview/llnotificationgrouphandler.cpp
+++ b/indra/newview/llnotificationgrouphandler.cpp
@@ -26,6 +26,7 @@
 
 #include "llviewerprecompiledheaders.h" // must be first include
 
+#include "llchannelmanager.h"
 #include "llnotificationhandler.h"
 #include "lltoastgroupnotifypanel.h"
 #include "llgroupactions.h"
diff --git a/indra/newview/llnotificationhandler.h b/indra/newview/llnotificationhandler.h
index 28a69f2373..f20ddd20d5 100644
--- a/indra/newview/llnotificationhandler.h
+++ b/indra/newview/llnotificationhandler.h
@@ -27,19 +27,17 @@
 #ifndef LL_LLNOTIFICATIONHANDLER_H
 #define LL_LLNOTIFICATIONHANDLER_H
 
-
-#include "llwindow.h"
-
-//#include "llnotificationsutil.h"
-#include "llchannelmanager.h"
-#include "llchat.h"
-#include "llinstantmessage.h"
-#include "llnotificationptr.h"
-
 class LLIMFloater;
+class LLChat;
+
+typedef boost::shared_ptr<class LLNotification> LLNotificationPtr;
+enum EInstantMessage;
+typedef enum e_chat_source_type EChatSourceType;
 
 namespace LLNotificationsUI
 {
+	class LLToast;
+
 // ENotificationType enumerates all possible types of notifications that could be met
 // 
 typedef enum e_notification_type
@@ -103,7 +101,7 @@ protected:
 	// at the moment, when a handlers creates a channel.
 	virtual void initChannel()=0;
 
-	LLScreenChannelBase*	mChannel;
+	class LLScreenChannelBase*	mChannel;
 	e_notification_type		mType;
 
 };
diff --git a/indra/newview/llnotificationhandlerutil.cpp b/indra/newview/llnotificationhandlerutil.cpp
index 4231a73af1..7c82ca0da9 100644
--- a/indra/newview/llnotificationhandlerutil.cpp
+++ b/indra/newview/llnotificationhandlerutil.cpp
@@ -34,6 +34,7 @@
 #include "llfloaterreg.h"
 #include "llnearbychat.h"
 #include "llimfloater.h"
+#include "llscreenchannel.h"
 
 using namespace LLNotificationsUI;
 
diff --git a/indra/newview/llnotificationofferhandler.cpp b/indra/newview/llnotificationofferhandler.cpp
index 85f95bd0c7..2c10aac06c 100644
--- a/indra/newview/llnotificationofferhandler.cpp
+++ b/indra/newview/llnotificationofferhandler.cpp
@@ -27,6 +27,7 @@
 
 #include "llviewerprecompiledheaders.h" // must be first include
 
+#include "llchannelmanager.h"
 #include "llnotificationhandler.h"
 #include "lltoastnotifypanel.h"
 #include "llviewercontrol.h"
diff --git a/indra/newview/llnotificationscripthandler.cpp b/indra/newview/llnotificationscripthandler.cpp
index b4d28bb346..89b29756fb 100644
--- a/indra/newview/llnotificationscripthandler.cpp
+++ b/indra/newview/llnotificationscripthandler.cpp
@@ -27,6 +27,7 @@
 
 #include "llviewerprecompiledheaders.h" // must be first include
 
+#include "llchannelmanager.h"
 #include "llnotificationhandler.h"
 #include "lltoastnotifypanel.h"
 #include "llviewercontrol.h"
diff --git a/indra/newview/llnotificationtiphandler.cpp b/indra/newview/llnotificationtiphandler.cpp
index 94612975a2..3c1cd107df 100644
--- a/indra/newview/llnotificationtiphandler.cpp
+++ b/indra/newview/llnotificationtiphandler.cpp
@@ -27,6 +27,8 @@
 
 #include "llviewerprecompiledheaders.h" // must be first include
 
+#include "llchannelmanager.h"
+#include "llinstantmessage.h"
 #include "llfloaterreg.h"
 #include "llnearbychat.h"
 #include "llnotificationhandler.h"
@@ -36,6 +38,7 @@
 #include "llviewerwindow.h"
 #include "llnotificationmanager.h"
 #include "llpaneltiptoast.h"
+#include "lltoast.h"
 
 using namespace LLNotificationsUI;
 
diff --git a/indra/newview/llsyswellwindow.cpp b/indra/newview/llsyswellwindow.cpp
index 99342bb564..ca93027352 100644
--- a/indra/newview/llsyswellwindow.cpp
+++ b/indra/newview/llsyswellwindow.cpp
@@ -40,6 +40,7 @@
 #include "llviewerwindow.h"
 
 #include "llchiclet.h"
+#include "llchannelmanager.h"
 #include "lltoastpanel.h"
 #include "llnotificationmanager.h"
 #include "llnotificationsutil.h"
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 48d11e1f05..317d08cc52 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -49,6 +49,7 @@
 #include "llagent.h"
 #include "llagentcamera.h"
 #include "llcallingcard.h"
+#include "llchannelmanager.h"
 #include "llbuycurrencyhtml.h"
 #include "llfirstuse.h"
 #include "llfloaterbuyland.h"
@@ -76,11 +77,13 @@
 #include "llstatenums.h"
 #include "llstatusbar.h"
 #include "llimview.h"
+#include "llscreenchannel.h"
 #include "llspeakers.h"
 #include "lltrans.h"
 #include "lltranslate.h"
 #include "llviewerfoldertype.h"
 #include "lluri.h"
+#include "llviewercontrol.h"
 #include "llviewergenericmessage.h"
 #include "llviewermenu.h"
 #include "llviewerjoystick.h"
-- 
cgit v1.2.3


From c5e2348e94f852e2d5ab38ff0f3d142a6285650c Mon Sep 17 00:00:00 2001
From: Aimee Linden <aimee@lindenlab.com>
Date: Fri, 17 Sep 2010 10:42:44 +0100
Subject: STORM-122 FIXED Clean up obsolete floaters and related dead code

A little bit more clean up on LLPanelVoiceDeviceSettings while I'm in there.
---
 indra/newview/llpanelvoicedevicesettings.cpp | 21 ++++++++++-----------
 indra/newview/llpanelvoicedevicesettings.h   | 12 ++++++------
 2 files changed, 16 insertions(+), 17 deletions(-)

diff --git a/indra/newview/llpanelvoicedevicesettings.cpp b/indra/newview/llpanelvoicedevicesettings.cpp
index a97fb434ae..aef870d352 100644
--- a/indra/newview/llpanelvoicedevicesettings.cpp
+++ b/indra/newview/llpanelvoicedevicesettings.cpp
@@ -30,10 +30,7 @@
 #include "llpanelvoicedevicesettings.h"
 
 // Viewer includes
-#include "llbutton.h"
 #include "llcombobox.h"
-#include "llfocusmgr.h"
-#include "lliconctrl.h"
 #include "llsliderctrl.h"
 #include "llviewercontrol.h"
 #include "llvoiceclient.h"
@@ -70,8 +67,10 @@ BOOL LLPanelVoiceDeviceSettings::postBuild()
 	// set mic volume tuning slider based on last mic volume setting
 	volume_slider->setValue(mMicVolume);
 
-	childSetCommitCallback("voice_input_device", onCommitInputDevice, this);
-	childSetCommitCallback("voice_output_device", onCommitOutputDevice, this);
+	getChild<LLComboBox>("voice_input_device")->setCommitCallback(
+		boost::bind(&LLPanelVoiceDeviceSettings::onCommitInputDevice, this));
+	getChild<LLComboBox>("voice_output_device")->setCommitCallback(
+		boost::bind(&LLPanelVoiceDeviceSettings::onCommitOutputDevice, this));
 	
 	return TRUE;
 }
@@ -303,20 +302,20 @@ void LLPanelVoiceDeviceSettings::cleanup()
 	LLVoiceChannel::resume();
 }
 
-// static
-void LLPanelVoiceDeviceSettings::onCommitInputDevice(LLUICtrl* ctrl, void* user_data)
+void LLPanelVoiceDeviceSettings::onCommitInputDevice()
 {
 	if(LLVoiceClient::getInstance())
 	{
-		LLVoiceClient::getInstance()->setCaptureDevice(ctrl->getValue().asString());
+		LLVoiceClient::getInstance()->setCaptureDevice(
+			getChild<LLComboBox>("voice_input_device")->getValue().asString());
 	}
 }
 
-// static
-void LLPanelVoiceDeviceSettings::onCommitOutputDevice(LLUICtrl* ctrl, void* user_data)
+void LLPanelVoiceDeviceSettings::onCommitOutputDevice()
 {
 	if(LLVoiceClient::getInstance())
 	{
-		LLVoiceClient::getInstance()->setRenderDevice(ctrl->getValue().asString());
+		LLVoiceClient::getInstance()->setRenderDevice(
+			getChild<LLComboBox>("voice_input_device")->getValue().asString());
 	}
 }
diff --git a/indra/newview/llpanelvoicedevicesettings.h b/indra/newview/llpanelvoicedevicesettings.h
index dd630be9a3..636b8b9948 100644
--- a/indra/newview/llpanelvoicedevicesettings.h
+++ b/indra/newview/llpanelvoicedevicesettings.h
@@ -25,10 +25,10 @@
  * $/LicenseInfo$
  */
 
-#ifndef LL_LLFLOATERVOICEDEVICESETTINGS_H
-#define LL_LLFLOATERVOICEDEVICESETTINGS_H
+#ifndef LL_LLPANELVOICEDEVICESETTINGS_H
+#define LL_LLPANELVOICEDEVICESETTINGS_H
 
-#include "llfloater.h"
+#include "llpanel.h"
 
 class LLPanelVoiceDeviceSettings : public LLPanel
 {
@@ -47,8 +47,8 @@ public:
 	/*virtual*/ void handleVisibilityChange ( BOOL new_visibility );
 	
 protected:
-	static void onCommitInputDevice(LLUICtrl* ctrl, void* user_data);
-	static void onCommitOutputDevice(LLUICtrl* ctrl, void* user_data);
+	void onCommitInputDevice();
+	void onCommitOutputDevice();
 
 	F32 mMicVolume;
 	std::string mInputDevice;
@@ -58,4 +58,4 @@ protected:
 	BOOL mDevicesUpdated;
 };
 
-#endif // LL_LLFLOATERVOICEDEVICESETTINGS_H
+#endif // LL_LLPANELVOICEDEVICESETTINGS_H
-- 
cgit v1.2.3


From e66585aa4fce98d4e58656cadfdbb65b3d808cfa Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Fri, 17 Sep 2010 11:47:13 -0700
Subject: EXP-74 FIX Pop-up warning given for links in Home Side Panel in
 Viewer Reviewed by Callum

---
 indra/newview/llmediactrl.cpp                      | 24 +++++++++++++++-------
 indra/newview/llmediactrl.h                        |  4 +++-
 .../default/xui/en/floater_buy_currency_html.xml   |  1 +
 .../skins/default/xui/en/floater_help_browser.xml  |  1 +
 .../skins/default/xui/en/floater_lsl_guide.xml     |  1 +
 .../skins/default/xui/en/floater_search.xml        |  1 +
 indra/newview/skins/default/xui/en/floater_tos.xml |  1 +
 indra/newview/skins/default/xui/en/panel_login.xml |  1 +
 .../default/xui/en/panel_sidetray_home_tab.xml     |  1 +
 9 files changed, 27 insertions(+), 8 deletions(-)

diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp
index 621f241227..0fd18303bb 100644
--- a/indra/newview/llmediactrl.cpp
+++ b/indra/newview/llmediactrl.cpp
@@ -69,7 +69,8 @@ LLMediaCtrl::Params::Params()
 	texture_height("texture_height", 1024),
 	caret_color("caret_color"),
 	initial_mime_type("initial_mime_type"),
-	media_id("media_id")
+	media_id("media_id"),
+	always_allow_popups("always_allow_popups", false)
 {
 	tab_stop(false);
 }
@@ -95,7 +96,8 @@ LLMediaCtrl::LLMediaCtrl( const Params& p) :
 	mTextureWidth ( 1024 ),
 	mTextureHeight ( 1024 ),
 	mClearCache(false),
-	mHomePageMimeType(p.initial_mime_type)
+	mHomePageMimeType(p.initial_mime_type),
+	mAlwaysAllowPopups(p.always_allow_popups)
 {
 	{
 		LLColor4 color = p.caret_color().get();
@@ -1042,11 +1044,19 @@ void LLMediaCtrl::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event)
 			std::string target = self->getClickTarget();
 			std::string uuid = self->getClickUUID();
 
-			LLNotificationPtr popup_notify = LLNotifications::instance().add("PopupAttempt", 
-				LLSD(), 
-				LLSD().with("target", target).with("url", url).with("uuid", uuid),
-				boost::bind(&LLMediaCtrl::onPopup, this, _1, _2));
-			showNotification(popup_notify);
+			LLNotification::Params notify_params;
+			notify_params.name = "PopupAttempt";
+			notify_params.payload = LLSD().with("target", target).with("url", url).with("uuid", uuid);
+			notify_params.functor.function = boost::bind(&LLMediaCtrl::onPopup, this, _1, _2);
+
+			if (mAlwaysAllowPopups)
+			{
+				LLNotifications::instance().forceResponse(notify_params, 0);
+			}
+			else
+			{
+				showNotification(LLNotifications::instance().add(notify_params));
+			}
 			break;
 		};
 
diff --git a/indra/newview/llmediactrl.h b/indra/newview/llmediactrl.h
index b8e10d5591..dc18a1130e 100644
--- a/indra/newview/llmediactrl.h
+++ b/indra/newview/llmediactrl.h
@@ -51,7 +51,8 @@ public:
 		Optional<bool>			border_visible,
 								ignore_ui_scale,
 								hide_loading,
-								decouple_texture_size;
+								decouple_texture_size,
+								always_allow_popups;
 								
 		Optional<S32>			texture_width,
 								texture_height;
@@ -193,6 +194,7 @@ public:
 		S32 mTextureWidth;
 		S32 mTextureHeight;
 		bool mClearCache;
+		bool mAlwaysAllowPopups;
 		boost::shared_ptr<class LLNotification> mCurNotification;
 };
 
diff --git a/indra/newview/skins/default/xui/en/floater_buy_currency_html.xml b/indra/newview/skins/default/xui/en/floater_buy_currency_html.xml
index 4b990fa566..0226b75d0a 100644
--- a/indra/newview/skins/default/xui/en/floater_buy_currency_html.xml
+++ b/indra/newview/skins/default/xui/en/floater_buy_currency_html.xml
@@ -16,6 +16,7 @@
     https://quick-buy.secondlife.com/[LANGUAGE]/display/?sa=[SPECIFIC_AMOUNT]&amp;sum=[SUM]&amp;msg=[MSG]&amp;bal=[BAL]
   </floater.string>
   <web_browser
+    always_allow_popups="true" 
     follows="all"
     layout="topleft"
     left="1"
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 13017cc803..d8175e20dc 100644
--- a/indra/newview/skins/default/xui/en/floater_help_browser.xml
+++ b/indra/newview/skins/default/xui/en/floater_help_browser.xml
@@ -36,6 +36,7 @@
          user_resize="false"
          width="620">
             <web_browser
+              always_allow_popups="true" 
              bottom="-11"
              follows="left|right|top|bottom"
              layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/floater_lsl_guide.xml b/indra/newview/skins/default/xui/en/floater_lsl_guide.xml
index c9d87f158f..70c278d172 100644
--- a/indra/newview/skins/default/xui/en/floater_lsl_guide.xml
+++ b/indra/newview/skins/default/xui/en/floater_lsl_guide.xml
@@ -54,6 +54,7 @@
      top_delta="0"
      width="70" />
     <web_browser
+      always_allow_popups="true" 
      bottom="390"
      follows="left|right|top|bottom"
      layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/floater_search.xml b/indra/newview/skins/default/xui/en/floater_search.xml
index 354f1de85e..0b97c363f6 100644
--- a/indra/newview/skins/default/xui/en/floater_search.xml
+++ b/indra/newview/skins/default/xui/en/floater_search.xml
@@ -38,6 +38,7 @@
          user_resize="false"
          width="630">
             <web_browser
+              always_allow_popups="true" 
              follows="left|right|top|bottom"
              layout="topleft"
              left="0"
diff --git a/indra/newview/skins/default/xui/en/floater_tos.xml b/indra/newview/skins/default/xui/en/floater_tos.xml
index cbfaac958b..70653801e0 100644
--- a/indra/newview/skins/default/xui/en/floater_tos.xml
+++ b/indra/newview/skins/default/xui/en/floater_tos.xml
@@ -58,6 +58,7 @@
         Please read the following Terms of Service and Privacy Policy carefully. To continue logging in to [SECOND_LIFE], you must accept the agreement.
     </text>
     <web_browser
+      always_allow_popups="true" 
      follows="left|top"
      height="340"
      layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml
index 6b136495d2..6f3e49b2b7 100644
--- a/indra/newview/skins/default/xui/en/panel_login.xml
+++ b/indra/newview/skins/default/xui/en/panel_login.xml
@@ -24,6 +24,7 @@ top="600"
 </panel.string>
 <!-- *NOTE: Custom resize logic for login_html in llpanellogin.cpp -->
 <web_browser
+always_allow_popups="true" 
 bg_opaque_color="Black"
 border_visible="false"
 bottom="600"
diff --git a/indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml b/indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml
index 2be95fc081..d496f1f5ee 100644
--- a/indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml
+++ b/indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml
@@ -28,6 +28,7 @@
      top_delta="0"
      width="313">
       <web_browser
+        always_allow_popups="true"
        border_visible="false"
        follows="all"
        height="550"
-- 
cgit v1.2.3


From f3cdc9b01deb6c789d909b39914d11a6184946cd Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Fri, 17 Sep 2010 12:16:07 -0700
Subject: allow_popups is now driven by trusted content flag trusted content is
 now a const attribute of LLMediaCtrl, set in constructor params

---
 indra/newview/llfloatersearch.cpp                        |  6 +-----
 indra/newview/llmediactrl.cpp                            | 16 +++-------------
 indra/newview/llmediactrl.h                              |  7 ++-----
 indra/newview/llpanelhome.cpp                            |  1 -
 indra/newview/llpanellogin.cpp                           |  7 -------
 .../skins/default/xui/en/floater_buy_currency_html.xml   |  2 +-
 .../skins/default/xui/en/floater_help_browser.xml        |  2 +-
 indra/newview/skins/default/xui/en/floater_lsl_guide.xml |  1 -
 indra/newview/skins/default/xui/en/floater_search.xml    |  2 +-
 indra/newview/skins/default/xui/en/floater_tos.xml       |  2 +-
 indra/newview/skins/default/xui/en/panel_login.xml       |  3 ++-
 .../skins/default/xui/en/panel_sidetray_home_tab.xml     |  2 +-
 12 files changed, 13 insertions(+), 38 deletions(-)

diff --git a/indra/newview/llfloatersearch.cpp b/indra/newview/llfloatersearch.cpp
index 7661e50eba..3ed4aec89a 100644
--- a/indra/newview/llfloatersearch.cpp
+++ b/indra/newview/llfloatersearch.cpp
@@ -96,11 +96,7 @@ LLFloaterSearch::LLFloaterSearch(const LLSD& key) :
 BOOL LLFloaterSearch::postBuild()
 {
 	mBrowser = getChild<LLMediaCtrl>("browser");
-	if (mBrowser)
-	{
-		mBrowser->addObserver(this);
-		mBrowser->setTrusted(true);
-	}
+	mBrowser->addObserver(this);
 
 	return TRUE;
 }
diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp
index 0fd18303bb..e6577a7ab8 100644
--- a/indra/newview/llmediactrl.cpp
+++ b/indra/newview/llmediactrl.cpp
@@ -70,7 +70,7 @@ LLMediaCtrl::Params::Params()
 	caret_color("caret_color"),
 	initial_mime_type("initial_mime_type"),
 	media_id("media_id"),
-	always_allow_popups("always_allow_popups", false)
+	trusted_content("trusted_content", false)
 {
 	tab_stop(false);
 }
@@ -97,7 +97,7 @@ LLMediaCtrl::LLMediaCtrl( const Params& p) :
 	mTextureHeight ( 1024 ),
 	mClearCache(false),
 	mHomePageMimeType(p.initial_mime_type),
-	mAlwaysAllowPopups(p.always_allow_popups)
+	mTrusted(p.trusted_content)
 {
 	{
 		LLColor4 color = p.caret_color().get();
@@ -169,16 +169,6 @@ void LLMediaCtrl::setTakeFocusOnClick( bool take_focus )
 	mTakeFocusOnClick = take_focus;
 }
 
-////////////////////////////////////////////////////////////////////////////////
-void LLMediaCtrl::setTrusted( bool valIn )
-{
-	if(mMediaSource)
-	{
-		mMediaSource->setTrustedBrowser(valIn);
-	}
-	mTrusted = valIn;
-}
-
 ////////////////////////////////////////////////////////////////////////////////
 //
 BOOL LLMediaCtrl::handleHover( S32 x, S32 y, MASK mask )
@@ -1049,7 +1039,7 @@ void LLMediaCtrl::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event)
 			notify_params.payload = LLSD().with("target", target).with("url", url).with("uuid", uuid);
 			notify_params.functor.function = boost::bind(&LLMediaCtrl::onPopup, this, _1, _2);
 
-			if (mAlwaysAllowPopups)
+			if (mTrusted)
 			{
 				LLNotifications::instance().forceResponse(notify_params, 0);
 			}
diff --git a/indra/newview/llmediactrl.h b/indra/newview/llmediactrl.h
index dc18a1130e..f010e5f4c8 100644
--- a/indra/newview/llmediactrl.h
+++ b/indra/newview/llmediactrl.h
@@ -52,7 +52,7 @@ public:
 								ignore_ui_scale,
 								hide_loading,
 								decouple_texture_size,
-								always_allow_popups;
+								trusted_content;
 								
 		Optional<S32>			texture_width,
 								texture_height;
@@ -105,8 +105,6 @@ public:
 		// Javascript or some other mechanism.  However, we need the search
 		// floater and login page to handle these URLs.  Those are safe
 		// because we control the page content.  See DEV-9530.  JC.
-		void setTrusted( bool valIn );
-
 		void setHomePageUrl( const std::string& urlIn, const std::string& mime_type = LLStringUtil::null );
 		std::string getHomePageUrl();
 
@@ -177,7 +175,7 @@ public:
 		LLViewBorder* mBorder;
 		bool mFrequentUpdates;
 		bool mForceUpdate;
-		bool mTrusted;
+		const bool mTrusted;
 		std::string mHomePageUrl;
 		std::string mHomePageMimeType;
 		std::string mCurrentNavUrl;
@@ -194,7 +192,6 @@ public:
 		S32 mTextureWidth;
 		S32 mTextureHeight;
 		bool mClearCache;
-		bool mAlwaysAllowPopups;
 		boost::shared_ptr<class LLNotification> mCurNotification;
 };
 
diff --git a/indra/newview/llpanelhome.cpp b/indra/newview/llpanelhome.cpp
index 93c4e0c9c7..b03bab3127 100644
--- a/indra/newview/llpanelhome.cpp
+++ b/indra/newview/llpanelhome.cpp
@@ -61,7 +61,6 @@ BOOL LLPanelHome::postBuild()
 		std::string url = LLViewerHome::getHomeURL();
 
 		mBrowser->addObserver(this);
-		mBrowser->setTrusted(true);
 		mBrowser->setHomePageUrl(url);
 	}
 
diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp
index f1bd861f1d..7c93d8a1f9 100644
--- a/indra/newview/llpanellogin.cpp
+++ b/indra/newview/llpanellogin.cpp
@@ -257,13 +257,6 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
 	// Clear the browser's cache to avoid any potential for the cache messing up the login screen.
 	web_browser->clearCache();
 
-	// Need to handle login secondlife:///app/ URLs
-	web_browser->setTrusted( true );
-
-	// don't make it a tab stop until SL-27594 is fixed
-	web_browser->setTabStop(FALSE);
-	// web_browser->navigateToLocalPage( "loading", "loading.html" );
-
 	reshapeBrowser();
 
 	// kick off a request to grab the url manually
diff --git a/indra/newview/skins/default/xui/en/floater_buy_currency_html.xml b/indra/newview/skins/default/xui/en/floater_buy_currency_html.xml
index 0226b75d0a..b9c415633f 100644
--- a/indra/newview/skins/default/xui/en/floater_buy_currency_html.xml
+++ b/indra/newview/skins/default/xui/en/floater_buy_currency_html.xml
@@ -16,7 +16,7 @@
     https://quick-buy.secondlife.com/[LANGUAGE]/display/?sa=[SPECIFIC_AMOUNT]&amp;sum=[SUM]&amp;msg=[MSG]&amp;bal=[BAL]
   </floater.string>
   <web_browser
-    always_allow_popups="true" 
+    trusted_content="true" 
     follows="all"
     layout="topleft"
     left="1"
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 d8175e20dc..0c90df24f0 100644
--- a/indra/newview/skins/default/xui/en/floater_help_browser.xml
+++ b/indra/newview/skins/default/xui/en/floater_help_browser.xml
@@ -36,7 +36,7 @@
          user_resize="false"
          width="620">
             <web_browser
-              always_allow_popups="true" 
+              trusted_content="true" 
              bottom="-11"
              follows="left|right|top|bottom"
              layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/floater_lsl_guide.xml b/indra/newview/skins/default/xui/en/floater_lsl_guide.xml
index 70c278d172..c9d87f158f 100644
--- a/indra/newview/skins/default/xui/en/floater_lsl_guide.xml
+++ b/indra/newview/skins/default/xui/en/floater_lsl_guide.xml
@@ -54,7 +54,6 @@
      top_delta="0"
      width="70" />
     <web_browser
-      always_allow_popups="true" 
      bottom="390"
      follows="left|right|top|bottom"
      layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/floater_search.xml b/indra/newview/skins/default/xui/en/floater_search.xml
index 0b97c363f6..8770ede7e9 100644
--- a/indra/newview/skins/default/xui/en/floater_search.xml
+++ b/indra/newview/skins/default/xui/en/floater_search.xml
@@ -38,7 +38,7 @@
          user_resize="false"
          width="630">
             <web_browser
-              always_allow_popups="true" 
+              trusted_content="true" 
              follows="left|right|top|bottom"
              layout="topleft"
              left="0"
diff --git a/indra/newview/skins/default/xui/en/floater_tos.xml b/indra/newview/skins/default/xui/en/floater_tos.xml
index 70653801e0..af1617eb39 100644
--- a/indra/newview/skins/default/xui/en/floater_tos.xml
+++ b/indra/newview/skins/default/xui/en/floater_tos.xml
@@ -58,7 +58,7 @@
         Please read the following Terms of Service and Privacy Policy carefully. To continue logging in to [SECOND_LIFE], you must accept the agreement.
     </text>
     <web_browser
-      always_allow_popups="true" 
+      trusted_content="true" 
      follows="left|top"
      height="340"
      layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml
index 6f3e49b2b7..891616b838 100644
--- a/indra/newview/skins/default/xui/en/panel_login.xml
+++ b/indra/newview/skins/default/xui/en/panel_login.xml
@@ -24,7 +24,8 @@ top="600"
 </panel.string>
 <!-- *NOTE: Custom resize logic for login_html in llpanellogin.cpp -->
 <web_browser
-always_allow_popups="true" 
+  tab_stop="false" 
+trusted_content="true" 
 bg_opaque_color="Black"
 border_visible="false"
 bottom="600"
diff --git a/indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml b/indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml
index d496f1f5ee..72b2f5e84f 100644
--- a/indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml
+++ b/indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml
@@ -28,7 +28,7 @@
      top_delta="0"
      width="313">
       <web_browser
-        always_allow_popups="true"
+        trusted_content="true"
        border_visible="false"
        follows="all"
        height="550"
-- 
cgit v1.2.3


From 382877242ada619b33a34d4e9d7b274243dde5a1 Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Fri, 17 Sep 2010 12:29:16 -0700
Subject: fixed build

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

diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp
index e6577a7ab8..c824374a2b 100644
--- a/indra/newview/llmediactrl.cpp
+++ b/indra/newview/llmediactrl.cpp
@@ -82,7 +82,6 @@ LLMediaCtrl::LLMediaCtrl( const Params& p) :
 	mFrequentUpdates( true ),
 	mForceUpdate( false ),
 	mHomePageUrl( "" ),
-	mTrusted(false),
 	mIgnoreUIScale( true ),
 	mAlwaysRefresh( false ),
 	mMediaSource( 0 ),
-- 
cgit v1.2.3


From 418941234dc276fe8ecc54abba3e06887ea78bfe Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Fri, 17 Sep 2010 13:55:12 -0700
Subject: updated comment on MediaEnablePopups setting to reflect new behavior

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

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index c2f2f6d797..feb5ebc16d 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -5233,7 +5233,7 @@
   <key>MediaEnablePopups</key>
   <map>
     <key>Comment</key>
-    <string>If true, enable targeted links and javascript in media to open new media browser windows.</string>
+    <string>If true, enable targeted links and javascript in media to open new media browser windows without a prompt.</string>
     <key>Persist</key>
     <integer>1</integer>
     <key>Type</key>
-- 
cgit v1.2.3


From 99a13feade938a7801aa4323fc63a53dac294a77 Mon Sep 17 00:00:00 2001
From: callum <none@none>
Date: Fri, 17 Sep 2010 14:53:02 -0700
Subject: Turn off new inventory hints until defect EXP-62 is fixed

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

diff --git a/indra/newview/llfirstuse.cpp b/indra/newview/llfirstuse.cpp
index b864ba6a36..1764d6b145 100644
--- a/indra/newview/llfirstuse.cpp
+++ b/indra/newview/llfirstuse.cpp
@@ -86,7 +86,8 @@ void LLFirstUse::sit(bool enable)
 // static
 void LLFirstUse::newInventory(bool enable)
 {
-	firstUseNotification("FirstInventoryOffer", enable, "HintInventory", LLSD(), LLSD().with("target", "inventory_btn").with("direction", "left"));
+	// turning this off until bug EXP-62 can be fixed (inventory hint appears for new users when their initial inventory is acquired)
+	// firstUseNotification("FirstInventoryOffer", enable, "HintInventory", LLSD(), LLSD().with("target", "inventory_btn").with("direction", "left"));
 }
 
 // static
-- 
cgit v1.2.3


From 159fd0316adccbf51faa2f6293952d615b3f2a14 Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Fri, 17 Sep 2010 14:56:03 -0700
Subject: fix for enable all popups not working also popup notification is no
 longer a singleton

---
 indra/llui/llnotifications.h                         | 7 +++++++
 indra/newview/llmediactrl.cpp                        | 8 ++------
 indra/newview/skins/default/xui/en/notifications.xml | 3 +--
 3 files changed, 10 insertions(+), 8 deletions(-)

diff --git a/indra/llui/llnotifications.h b/indra/llui/llnotifications.h
index ed29e0d83e..dcb7b48f92 100644
--- a/indra/llui/llnotifications.h
+++ b/indra/llui/llnotifications.h
@@ -458,6 +458,13 @@ public:
 		return mRespondedTo;
 	}
 
+	bool isActive() const
+	{
+		return !isRespondedTo()
+			&& !isCancelled()
+			&& !isExpired();
+	}
+
 	const LLSD& getResponse() { return mResponse; }
 
 	bool isIgnored() const
diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp
index c824374a2b..e59f2ddd07 100644
--- a/indra/newview/llmediactrl.cpp
+++ b/indra/newview/llmediactrl.cpp
@@ -920,14 +920,10 @@ void LLMediaCtrl::draw()
 	if ( mBorder && mBorder->getVisible() )
 		mBorder->setKeyboardFocusHighlight( gFocusMgr.childHasKeyboardFocus( this ) );
 
-	if (mCurNotification)
+	if (mCurNotification && !mCurNotification->isActive())
 	{
-		if (mCurNotification->isCancelled() || mCurNotification->isExpired())
-		{
-			hideNotification();
-		}
+		hideNotification();
 	}
-
 	
 	LLPanel::draw();
 
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index d206313185..3084aa3de8 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -6455,8 +6455,7 @@ Mute everyone?
   name="PopupAttempt"
   icon="Popup_Caution"
   type="browser"
-  duration="10"
-  unique="true">
+  duration="10">
     A pop-up was prevented from opening.
     <form name="form">
       <ignore name="ignore"
-- 
cgit v1.2.3


From 949b60465593764118c03d0f4e112f69c41bab31 Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Fri, 17 Sep 2010 15:01:44 -0700
Subject: Backed out changeset: d71309f8bd0e

---
 indra/llui/lllayoutstack.cpp                  |  4 ++--
 indra/newview/llagentui.h                     |  1 +
 indra/newview/llappviewer.cpp                 |  1 -
 indra/newview/llbottomtray.h                  |  1 -
 indra/newview/llbrowsernotification.cpp       |  6 +++---
 indra/newview/llimhandler.cpp                 |  1 -
 indra/newview/llnearbychathandler.cpp         |  3 +--
 indra/newview/llnotificationalerthandler.cpp  |  2 +-
 indra/newview/llnotificationgrouphandler.cpp  |  1 -
 indra/newview/llnotificationhandler.h         | 18 ++++++++++--------
 indra/newview/llnotificationhandlerutil.cpp   |  1 -
 indra/newview/llnotificationofferhandler.cpp  |  1 -
 indra/newview/llnotificationscripthandler.cpp |  1 -
 indra/newview/llnotificationtiphandler.cpp    |  3 ---
 indra/newview/llsyswellwindow.cpp             |  1 -
 indra/newview/llviewermessage.cpp             |  3 ---
 16 files changed, 18 insertions(+), 30 deletions(-)

diff --git a/indra/llui/lllayoutstack.cpp b/indra/llui/lllayoutstack.cpp
index 940c7e7e18..a0275b6ed5 100644
--- a/indra/llui/lllayoutstack.cpp
+++ b/indra/llui/lllayoutstack.cpp
@@ -208,8 +208,8 @@ S32 LLLayoutStack::getDefaultWidth(S32 cur_width)
 
 void LLLayoutStack::movePanel(LLPanel* panel_to_move, LLPanel* target_panel, bool move_to_front)
 {
-	LLLayoutPanel* embedded_panel_to_move = findEmbeddedPanel(panel_to_move);
-	LLLayoutPanel* embedded_target_panel = move_to_front ? *mPanels.begin() : findEmbeddedPanel(target_panel);
+	LayoutPanel* embedded_panel_to_move = findEmbeddedPanel(panel_to_move);
+	LayoutPanel* embedded_target_panel = move_to_front ? *mPanels.begin() : findEmbeddedPanel(target_panel);
 
 	if (!embedded_panel_to_move || !embedded_target_panel || embedded_panel_to_move == embedded_target_panel)
 	{
diff --git a/indra/newview/llagentui.h b/indra/newview/llagentui.h
index be7d0c365a..afc0ba5d9a 100644
--- a/indra/newview/llagentui.h
+++ b/indra/newview/llagentui.h
@@ -26,6 +26,7 @@
 
 #ifndef LLAGENTUI_H
 #define LLAGENTUI_H
+
 class LLSLURL;
 
 class LLAgentUI
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 3b374947a0..333c92e50d 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -46,7 +46,6 @@
 #include "llmd5.h"
 #include "llpumpio.h"
 #include "llmimetypes.h"
-#include "llmodaldialog.h"
 #include "llslurl.h"
 #include "llstartup.h"
 #include "llfocusmgr.h"
diff --git a/indra/newview/llbottomtray.h b/indra/newview/llbottomtray.h
index 6225d4c92c..35e00924aa 100644
--- a/indra/newview/llbottomtray.h
+++ b/indra/newview/llbottomtray.h
@@ -29,7 +29,6 @@
 
 #include "llpanel.h"
 #include "llimview.h"
-#include "llbutton.h"
 
 class LLChicletPanel;
 class LLLayoutStack;
diff --git a/indra/newview/llbrowsernotification.cpp b/indra/newview/llbrowsernotification.cpp
index 8eb0bb1e0b..cc54d10944 100644
--- a/indra/newview/llbrowsernotification.cpp
+++ b/indra/newview/llbrowsernotification.cpp
@@ -28,9 +28,9 @@
 #include "llviewerprecompiledheaders.h" // must be first include
 
 #include "llnotificationhandler.h"
-//#include "llnotifications.h"
-//#include "llfloatermediabrowser.h"
-//#include "llfloaterreg.h"
+#include "llnotifications.h"
+#include "llfloatermediabrowser.h"
+#include "llfloaterreg.h"
 
 using namespace LLNotificationsUI;
 
diff --git a/indra/newview/llimhandler.cpp b/indra/newview/llimhandler.cpp
index e8c905a266..bc76092a20 100644
--- a/indra/newview/llimhandler.cpp
+++ b/indra/newview/llimhandler.cpp
@@ -28,7 +28,6 @@
 #include "llviewerprecompiledheaders.h" // must be first include
 
 #include "llnotificationhandler.h"
-#include "llchannelmanager.h"
 
 #include "llagentdata.h"
 #include "llnotifications.h"
diff --git a/indra/newview/llnearbychathandler.cpp b/indra/newview/llnearbychathandler.cpp
index 83777af31a..303f2abcce 100644
--- a/indra/newview/llnearbychathandler.cpp
+++ b/indra/newview/llnearbychathandler.cpp
@@ -28,7 +28,7 @@
 
 #include "llagentdata.h" // for gAgentID
 #include "llnearbychathandler.h"
-#include "llchannelmanager.h"
+
 #include "llbottomtray.h"
 #include "llchatitemscontainerctrl.h"
 #include "llfirstuse.h"
@@ -36,7 +36,6 @@
 #include "llhints.h"
 #include "llnearbychat.h"
 #include "llrecentpeople.h"
-#include "llscreenchannel.h"
 
 #include "llviewercontrol.h"
 
diff --git a/indra/newview/llnotificationalerthandler.cpp b/indra/newview/llnotificationalerthandler.cpp
index 6b9bd0436f..dcbf6b64ce 100644
--- a/indra/newview/llnotificationalerthandler.cpp
+++ b/indra/newview/llnotificationalerthandler.cpp
@@ -28,7 +28,7 @@
 #include "llviewerprecompiledheaders.h" // must be first include
 
 #include "llnotificationhandler.h"
-#include "llchannelmanager.h"
+
 #include "llnotifications.h"
 #include "llprogressview.h"
 #include "lltoastnotifypanel.h"
diff --git a/indra/newview/llnotificationgrouphandler.cpp b/indra/newview/llnotificationgrouphandler.cpp
index 3819cb06e8..9933a8a49c 100644
--- a/indra/newview/llnotificationgrouphandler.cpp
+++ b/indra/newview/llnotificationgrouphandler.cpp
@@ -26,7 +26,6 @@
 
 #include "llviewerprecompiledheaders.h" // must be first include
 
-#include "llchannelmanager.h"
 #include "llnotificationhandler.h"
 #include "lltoastgroupnotifypanel.h"
 #include "llgroupactions.h"
diff --git a/indra/newview/llnotificationhandler.h b/indra/newview/llnotificationhandler.h
index f20ddd20d5..28a69f2373 100644
--- a/indra/newview/llnotificationhandler.h
+++ b/indra/newview/llnotificationhandler.h
@@ -27,17 +27,19 @@
 #ifndef LL_LLNOTIFICATIONHANDLER_H
 #define LL_LLNOTIFICATIONHANDLER_H
 
-class LLIMFloater;
-class LLChat;
 
-typedef boost::shared_ptr<class LLNotification> LLNotificationPtr;
-enum EInstantMessage;
-typedef enum e_chat_source_type EChatSourceType;
+#include "llwindow.h"
+
+//#include "llnotificationsutil.h"
+#include "llchannelmanager.h"
+#include "llchat.h"
+#include "llinstantmessage.h"
+#include "llnotificationptr.h"
+
+class LLIMFloater;
 
 namespace LLNotificationsUI
 {
-	class LLToast;
-
 // ENotificationType enumerates all possible types of notifications that could be met
 // 
 typedef enum e_notification_type
@@ -101,7 +103,7 @@ protected:
 	// at the moment, when a handlers creates a channel.
 	virtual void initChannel()=0;
 
-	class LLScreenChannelBase*	mChannel;
+	LLScreenChannelBase*	mChannel;
 	e_notification_type		mType;
 
 };
diff --git a/indra/newview/llnotificationhandlerutil.cpp b/indra/newview/llnotificationhandlerutil.cpp
index 7c82ca0da9..4231a73af1 100644
--- a/indra/newview/llnotificationhandlerutil.cpp
+++ b/indra/newview/llnotificationhandlerutil.cpp
@@ -34,7 +34,6 @@
 #include "llfloaterreg.h"
 #include "llnearbychat.h"
 #include "llimfloater.h"
-#include "llscreenchannel.h"
 
 using namespace LLNotificationsUI;
 
diff --git a/indra/newview/llnotificationofferhandler.cpp b/indra/newview/llnotificationofferhandler.cpp
index 2c10aac06c..85f95bd0c7 100644
--- a/indra/newview/llnotificationofferhandler.cpp
+++ b/indra/newview/llnotificationofferhandler.cpp
@@ -27,7 +27,6 @@
 
 #include "llviewerprecompiledheaders.h" // must be first include
 
-#include "llchannelmanager.h"
 #include "llnotificationhandler.h"
 #include "lltoastnotifypanel.h"
 #include "llviewercontrol.h"
diff --git a/indra/newview/llnotificationscripthandler.cpp b/indra/newview/llnotificationscripthandler.cpp
index 89b29756fb..b4d28bb346 100644
--- a/indra/newview/llnotificationscripthandler.cpp
+++ b/indra/newview/llnotificationscripthandler.cpp
@@ -27,7 +27,6 @@
 
 #include "llviewerprecompiledheaders.h" // must be first include
 
-#include "llchannelmanager.h"
 #include "llnotificationhandler.h"
 #include "lltoastnotifypanel.h"
 #include "llviewercontrol.h"
diff --git a/indra/newview/llnotificationtiphandler.cpp b/indra/newview/llnotificationtiphandler.cpp
index 3c1cd107df..94612975a2 100644
--- a/indra/newview/llnotificationtiphandler.cpp
+++ b/indra/newview/llnotificationtiphandler.cpp
@@ -27,8 +27,6 @@
 
 #include "llviewerprecompiledheaders.h" // must be first include
 
-#include "llchannelmanager.h"
-#include "llinstantmessage.h"
 #include "llfloaterreg.h"
 #include "llnearbychat.h"
 #include "llnotificationhandler.h"
@@ -38,7 +36,6 @@
 #include "llviewerwindow.h"
 #include "llnotificationmanager.h"
 #include "llpaneltiptoast.h"
-#include "lltoast.h"
 
 using namespace LLNotificationsUI;
 
diff --git a/indra/newview/llsyswellwindow.cpp b/indra/newview/llsyswellwindow.cpp
index ca93027352..99342bb564 100644
--- a/indra/newview/llsyswellwindow.cpp
+++ b/indra/newview/llsyswellwindow.cpp
@@ -40,7 +40,6 @@
 #include "llviewerwindow.h"
 
 #include "llchiclet.h"
-#include "llchannelmanager.h"
 #include "lltoastpanel.h"
 #include "llnotificationmanager.h"
 #include "llnotificationsutil.h"
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 317d08cc52..48d11e1f05 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -49,7 +49,6 @@
 #include "llagent.h"
 #include "llagentcamera.h"
 #include "llcallingcard.h"
-#include "llchannelmanager.h"
 #include "llbuycurrencyhtml.h"
 #include "llfirstuse.h"
 #include "llfloaterbuyland.h"
@@ -77,13 +76,11 @@
 #include "llstatenums.h"
 #include "llstatusbar.h"
 #include "llimview.h"
-#include "llscreenchannel.h"
 #include "llspeakers.h"
 #include "lltrans.h"
 #include "lltranslate.h"
 #include "llviewerfoldertype.h"
 #include "lluri.h"
-#include "llviewercontrol.h"
 #include "llviewergenericmessage.h"
 #include "llviewermenu.h"
 #include "llviewerjoystick.h"
-- 
cgit v1.2.3


From 1fc63c8da1e8244fdd0cfd59b88102c9ffbf7ca6 Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Fri, 17 Sep 2010 15:14:42 -0700
Subject: fixed build (again)

---
 indra/newview/llbottomtray.h | 1 +
 1 file changed, 1 insertion(+)

diff --git a/indra/newview/llbottomtray.h b/indra/newview/llbottomtray.h
index 35e00924aa..6225d4c92c 100644
--- a/indra/newview/llbottomtray.h
+++ b/indra/newview/llbottomtray.h
@@ -29,6 +29,7 @@
 
 #include "llpanel.h"
 #include "llimview.h"
+#include "llbutton.h"
 
 class LLChicletPanel;
 class LLLayoutStack;
-- 
cgit v1.2.3


From e0df544a57efed1c89c1f12ab0bc8a38911db14f Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Fri, 17 Sep 2010 15:51:56 -0700
Subject: maded popup alert last forever

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

diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 3084aa3de8..e1aecda151 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -6454,8 +6454,7 @@ Mute everyone?
   <notification
   name="PopupAttempt"
   icon="Popup_Caution"
-  type="browser"
-  duration="10">
+  type="browser">
     A pop-up was prevented from opening.
     <form name="form">
       <ignore name="ignore"
-- 
cgit v1.2.3


From 57c1845e2d7274b5cb28dc31a41a00088c2ecdda Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Fri, 17 Sep 2010 16:06:51 -0700
Subject: clear popup notifications on navigate

---
 indra/newview/llbrowsernotification.cpp | 2 +-
 indra/newview/llmediactrl.cpp           | 1 +
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/indra/newview/llbrowsernotification.cpp b/indra/newview/llbrowsernotification.cpp
index cc54d10944..ee19701773 100644
--- a/indra/newview/llbrowsernotification.cpp
+++ b/indra/newview/llbrowsernotification.cpp
@@ -29,13 +29,13 @@
 
 #include "llnotificationhandler.h"
 #include "llnotifications.h"
-#include "llfloatermediabrowser.h"
 #include "llfloaterreg.h"
 
 using namespace LLNotificationsUI;
 
 bool LLBrowserNotification::processNotification(const LLSD& notify)
 {
+
 	// browser notifications are currently handled directly by the LLMediaCtrl instance that spawned them
 	return false;
 }
diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp
index e59f2ddd07..9d172b7301 100644
--- a/indra/newview/llmediactrl.cpp
+++ b/indra/newview/llmediactrl.cpp
@@ -990,6 +990,7 @@ void LLMediaCtrl::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event)
 		case MEDIA_EVENT_NAVIGATE_BEGIN:
 		{
 			LL_DEBUGS("Media") <<  "Media event:  MEDIA_EVENT_NAVIGATE_BEGIN, url is " << self->getNavigateURI() << LL_ENDL;
+			hideNotification();
 		};
 		break;
 		
-- 
cgit v1.2.3


From 1c3b38cace6d3a673c83230f6f3f20b430738042 Mon Sep 17 00:00:00 2001
From: Monroe Linden <monroe@lindenlab.com>
Date: Fri, 17 Sep 2010 16:39:22 -0700
Subject: Fix for EXP-78 (javascript window.open function with no size
 parameters opens a tiny window when all popups setting is enabled).

---
 indra/media_plugins/webkit/media_plugin_webkit.cpp | 30 ++++++++++++----------
 1 file changed, 17 insertions(+), 13 deletions(-)

diff --git a/indra/media_plugins/webkit/media_plugin_webkit.cpp b/indra/media_plugins/webkit/media_plugin_webkit.cpp
index 67f49556c5..bd1a44a930 100644
--- a/indra/media_plugins/webkit/media_plugin_webkit.cpp
+++ b/indra/media_plugins/webkit/media_plugin_webkit.cpp
@@ -549,21 +549,25 @@ private:
 		int x, y, width, height;
 		event.getRectValue(x, y, width, height);
 
-		LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "geometry_change");
-		message.setValue("uuid", event.getStringValue());
-		message.setValueS32("x", x);
-		message.setValueS32("y", y);
-		message.setValueS32("width", width);
-		message.setValueS32("height", height);
-		sendMessage(message);
+		// This sometimes gets called with a zero-size request.  Don't pass these along.
+		if(width > 0 && height > 0)
+		{
+			LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "geometry_change");
+			message.setValue("uuid", event.getStringValue());
+			message.setValueS32("x", x);
+			message.setValueS32("y", y);
+			message.setValueS32("width", width);
+			message.setValueS32("height", height);
+			sendMessage(message);
+		}
 	}
 
-	////////////////////////////////////////////////////////////////////////////////
-	// virtual
-	std::string onRequestFilePicker( const EventType& eventIn )
-	{
-		return blockingPickFile();
-	}
+	////////////////////////////////////////////////////////////////////////////////
+	// virtual
+	std::string onRequestFilePicker( const EventType& eventIn )
+	{
+		return blockingPickFile();
+	}
 	
 	LLQtWebKit::EKeyboardModifier decodeModifiers(std::string &modifiers)
 	{
-- 
cgit v1.2.3


From 8e09bcd703a81bfb114df53e620e758a358149a2 Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Fri, 17 Sep 2010 17:28:22 -0700
Subject: fix for clicking on Invite Friends resulting in disabling popups

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

diff --git a/indra/llui/llnotifications.cpp b/indra/llui/llnotifications.cpp
index 6a0d64e876..2a7ca4c321 100644
--- a/indra/llui/llnotifications.cpp
+++ b/indra/llui/llnotifications.cpp
@@ -618,8 +618,7 @@ void LLNotification::respond(const LLSD& response)
 
 	if (mForm->getIgnoreType() != LLNotificationForm::IGNORE_NO)
 	{
-		bool show_notification = !mIgnored;
-		mForm->setIgnored(!show_notification);
+		mForm->setIgnored(mIgnored);
 		if (mIgnored && mForm->getIgnoreType() == LLNotificationForm::IGNORE_WITH_LAST_RESPONSE)
 		{
 			LLUI::sSettingGroups["ignores"]->setLLSD("Default" + getName(), response);
@@ -745,6 +744,8 @@ void LLNotification::init(const std::string& template_name, const LLSD& form_ele
 	// apply substitution to form labels
 	mForm->formatElements(mSubstitutions);
 
+	mIgnored = mForm->getIgnored();
+
 	LLDate rightnow = LLDate::now();
 	if (mTemplatep->mExpireSeconds)
 	{
-- 
cgit v1.2.3


From a67acc2afa3e7369cb0ee29fcca0048f1b4eb23f Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Fri, 17 Sep 2010 17:28:39 -0700
Subject: made address entry field of media browser select all text on first
 click

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

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 1cb8613eb4..4701d7eca8 100644
--- a/indra/newview/skins/default/xui/en/floater_media_browser.xml
+++ b/indra/newview/skins/default/xui/en/floater_media_browser.xml
@@ -85,6 +85,7 @@
              left_pad="5"
              max_chars="1024"
              name="address"
+             combo_editor.select_on_focus="true"
              top_delta="0"
              width="540">
 				<combo_box.commit_callback
-- 
cgit v1.2.3


From 325991a002894011b1da8dd54b16b4cb15f77554 Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Fri, 17 Sep 2010 23:12:13 -0700
Subject: EXP-60 Hints not showing after Re-enabling Hints in same session

---
 indra/newview/llhints.cpp      | 38 ++++++++++++++++++--------------------
 indra/newview/llhints.h        |  5 +++--
 indra/newview/llviewermenu.cpp | 14 +++-----------
 3 files changed, 24 insertions(+), 33 deletions(-)

diff --git a/indra/newview/llhints.cpp b/indra/newview/llhints.cpp
index bb8f4a995b..393aa188e1 100644
--- a/indra/newview/llhints.cpp
+++ b/indra/newview/llhints.cpp
@@ -345,26 +345,6 @@ void LLHints::hide(LLNotificationPtr hint)
 	}
 }
 
-//static
-void LLHints::hideAll()
-{
-	std::vector<LLNotificationPtr> notifications;
-	for (hint_map_t::iterator it = sHints.begin(), end_it = sHints.end();
-		it != end_it;
-		++it)
-	{
-		notifications.push_back(it->first);
-	}
-
-	for(std::vector<LLNotificationPtr>::iterator it = notifications.begin(), end_it = notifications.end();
-		it != end_it;
-		++it)
-	{
-		hide(*it);
-	}
-
-}
-
 //static
 void LLHints::registerHintTarget(const std::string& name, LLHandle<LLView> target)
 {
@@ -384,3 +364,21 @@ LLHandle<LLView> LLHints::getHintTarget(const std::string& name)
 		return LLHandle<LLView>();
 	}
 }
+
+//static
+void LLHints::initClass()
+{
+	sRegister.reference();
+
+	LLControlVariablePtr control = gSavedSettings.getControl("EnableUIHints");
+	control->getSignal()->connect(boost::bind(&showHints, _2));
+	gViewerWindow->getHintHolder()->setVisible(control->getValue().asBoolean());
+
+}
+
+//staic
+void LLHints::showHints(const LLSD& show)
+{
+	bool visible = show.asBoolean();
+	gViewerWindow->getHintHolder()->setVisible(visible);
+}
\ No newline at end of file
diff --git a/indra/newview/llhints.h b/indra/newview/llhints.h
index 3bca7f00a1..ebffe561b9 100644
--- a/indra/newview/llhints.h
+++ b/indra/newview/llhints.h
@@ -31,18 +31,19 @@
 #include "llnotifications.h"
 
 
-class LLHints
+class LLHints :  public LLInitClass<LLHints>
 {
 public:
 	static void show(LLNotificationPtr hint);
 	static void hide(LLNotificationPtr hint);
-	static void hideAll();
 	static void registerHintTarget(const std::string& name, LLHandle<LLView> target);
 	static LLHandle<LLView> getHintTarget(const std::string& name);
+	static void initClass();
 private:
 	static LLRegistry<std::string, LLHandle<LLView> > sTargetRegistry;
 	typedef std::map<LLNotificationPtr, class LLHintPopup*> hint_map_t;
 	static hint_map_t sHints;
+	static void showHints(const LLSD& show);
 };
 
 
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index ba98ffdc52..d4af5048c3 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -7756,17 +7756,9 @@ class LLToggleUIHints : public view_listener_t
 	bool handleEvent(const LLSD& userdata)
 	{
 		bool ui_hints_enabled = gSavedSettings.getBOOL("EnableUIHints");
-		if (ui_hints_enabled)
-		{
-			// hide existing hints
-			LLHints::hideAll();
-
-			gSavedSettings.setBOOL("EnableUIHints", FALSE);
-		}
-		else
-		{
-			gSavedSettings.setBOOL("EnableUIHints", TRUE);
-		}
+		// toggle
+		ui_hints_enabled = !ui_hints_enabled;
+		gSavedSettings.setBOOL("EnableUIHints", ui_hints_enabled);
 		return true;
 	}
 };
-- 
cgit v1.2.3


From 7c0a6df30a1d78611782767763b7710702b96336 Mon Sep 17 00:00:00 2001
From: Richard Nelson <none@none>
Date: Mon, 20 Sep 2010 16:21:00 -0700
Subject: EXP-60 FIX not showing after Re-enabling Hints in same session

---
 indra/newview/llagent.cpp    |  1 -
 indra/newview/llfirstuse.cpp | 13 ++++++++-----
 indra/newview/llhints.cpp    | 29 +++++++++++++----------------
 3 files changed, 21 insertions(+), 22 deletions(-)

diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index fec29eac17..c9bd7851ed 100644
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -1557,7 +1557,6 @@ void LLAgent::updateAgentPosition(const F32 dt, const F32 yaw_radians, const S32
 	if (mMoveTimer.getStarted() && mMoveTimer.getElapsedTimeF32() > gSavedSettings.getF32("NotMovingHintTimeout"))
 	{
 		LLFirstUse::notMoving();
-		mMoveTimer.stop();
 	}
 
 	propagate(dt);
diff --git a/indra/newview/llfirstuse.cpp b/indra/newview/llfirstuse.cpp
index 1764d6b145..dd08706f4f 100644
--- a/indra/newview/llfirstuse.cpp
+++ b/indra/newview/llfirstuse.cpp
@@ -130,12 +130,15 @@ void LLFirstUse::firstUseNotification(const std::string& control_var, bool enabl
 
 	if (enable)
 	{
-		LL_DEBUGS("LLFirstUse") << "Trigger first use notification " << notification_name << LL_ENDL;
+		if (gSavedSettings.getBOOL("EnableUIHints"))
+		{
+			LL_DEBUGS("LLFirstUse") << "Trigger first use notification " << notification_name << LL_ENDL;
 
-		// if notification doesn't already exist and this notification hasn't been disabled...
-		if (gWarningSettings.getBOOL(control_var))
-		{ // create new notification
-			LLNotifications::instance().add(LLNotification::Params().name(notification_name).substitutions(args).payload(payload.with("control_var", control_var)));
+			// if notification doesn't already exist and this notification hasn't been disabled...
+			if (gWarningSettings.getBOOL(control_var))
+			{ // create new notification
+				LLNotifications::instance().add(LLNotification::Params().name(notification_name).substitutions(args).payload(payload.with("control_var", control_var)));
+			}
 		}
 	}	
 	else
diff --git a/indra/newview/llhints.cpp b/indra/newview/llhints.cpp
index 393aa188e1..a8274b3887 100644
--- a/indra/newview/llhints.cpp
+++ b/indra/newview/llhints.cpp
@@ -310,26 +310,23 @@ std::map<LLNotificationPtr, class LLHintPopup*> LLHints::sHints;
 //static
 void LLHints::show(LLNotificationPtr hint)
 {
-	if (gSavedSettings.getBOOL("EnableUIHints"))
-	{
-		LLHintPopup::Params p(LLUICtrlFactory::getDefaultParams<LLHintPopup>());
+	LLHintPopup::Params p(LLUICtrlFactory::getDefaultParams<LLHintPopup>());
 
-		LLParamSDParser parser;
-		parser.readSD(hint->getPayload(), p, true);
-		p.notification = hint;
+	LLParamSDParser parser;
+	parser.readSD(hint->getPayload(), p, true);
+	p.notification = hint;
 
-		if (p.validateBlock())
-		{
-			LLHintPopup* popup = new LLHintPopup(p);
+	if (p.validateBlock())
+	{
+		LLHintPopup* popup = new LLHintPopup(p);
 
-			sHints[hint] = popup;
+		sHints[hint] = popup;
 
-			LLView* hint_holder = gViewerWindow->getHintHolder();
-			if (hint_holder)
-			{
-				hint_holder->addChild(popup);
-				popup->centerWithin(hint_holder->getLocalRect());
-			}
+		LLView* hint_holder = gViewerWindow->getHintHolder();
+		if (hint_holder)
+		{
+			hint_holder->addChild(popup);
+			popup->centerWithin(hint_holder->getLocalRect());
 		}
 	}
 }
-- 
cgit v1.2.3


From 136029821ca37dbe7d7707a0fb0422612a31bae6 Mon Sep 17 00:00:00 2001
From: Merov Linden <merov@lindenlab.com>
Date: Mon, 20 Sep 2010 17:24:33 -0700
Subject: STORM-162 : Makes the folder code more resilient

---
 doc/contributions.txt              |   1 +
 indra/newview/llfolderview.cpp     |  13 ++--
 indra/newview/llfolderview.h       |  11 ++-
 indra/newview/llfolderviewitem.cpp | 140 +++++++++++++++++++++++++++++--------
 indra/newview/llfolderviewitem.h   |  63 ++++++++++-------
 5 files changed, 161 insertions(+), 67 deletions(-)

diff --git a/doc/contributions.txt b/doc/contributions.txt
index c02c28c447..8d1ab8a7f0 100644
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -65,6 +65,7 @@ Aleric Inglewood
 	VWR-12691
 	VWR-13996
 	VWR-14426
+	SNOW-84
 	SNOW-766
 Ales Beaumont
 	VWR-9352
diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp
index 5d8e3f9ab9..bbe837c507 100644
--- a/indra/newview/llfolderview.cpp
+++ b/indra/newview/llfolderview.cpp
@@ -350,6 +350,10 @@ BOOL LLFolderView::addFolder( LLFolderViewFolder* folder)
 	{
 		mFolders.insert(mFolders.begin(), folder);
 	}
+	if (folder->numSelected())
+	{
+		recursiveIncrementNumDescendantsSelected(folder->numSelected());
+	}
 	folder->setShowLoadStatus(true);
 	folder->setOrigin(0, 0);
 	folder->reshape(getRect().getWidth(), 0);
@@ -692,29 +696,24 @@ BOOL LLFolderView::changeSelection(LLFolderViewItem* selection, BOOL selected)
 	return rv;
 }
 
-S32 LLFolderView::extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray<LLFolderViewItem*>& items)
+void LLFolderView::extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray<LLFolderViewItem*>& items)
 {
-	S32 rv = 0;
-
 	// now store resulting selection
 	if (mAllowMultiSelect)
 	{
 		LLFolderViewItem *cur_selection = getCurSelectedItem();
-		rv = LLFolderViewFolder::extendSelection(selection, cur_selection, items);
+		LLFolderViewFolder::extendSelection(selection, cur_selection, items);
 		for (S32 i = 0; i < items.count(); i++)
 		{
 			addToSelectionList(items[i]);
-			rv++;
 		}
 	}
 	else
 	{
 		setSelection(selection, FALSE, FALSE);
-		rv++;
 	}
 
 	mSignalSelectCallback = SIGNAL_KEYBOARD_FOCUS;
-	return rv;
 }
 
 void LLFolderView::sanitizeSelection()
diff --git a/indra/newview/llfolderview.h b/indra/newview/llfolderview.h
index 980f9a34a6..f9c48c3ca7 100644
--- a/indra/newview/llfolderview.h
+++ b/indra/newview/llfolderview.h
@@ -74,7 +74,6 @@ public:
 	virtual void doItem(LLFolderViewItem* item) = 0;
 };
 
-
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 // Class LLFolderView
 //
@@ -146,18 +145,18 @@ public:
 	// Record the selected item and pass it down the hierachy.
 	virtual BOOL setSelection(LLFolderViewItem* selection, BOOL openitem,
 		BOOL take_keyboard_focus);
-	
+
 	// Used by menu callbacks
 	void setSelectionByID(const LLUUID& obj_id, BOOL take_keyboard_focus);
-	
+
 	// Called once a frame to update the selection if mSelectThisID has been set
-	void updateSelection();	
-	
+	void updateSelection(); 
+
 	// This method is used to toggle the selection of an item. Walks
 	// children, and keeps track of selected objects.
 	virtual BOOL changeSelection(LLFolderViewItem* selection, BOOL selected);
 
-	virtual S32 extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray<LLFolderViewItem*>& items);
+	virtual void extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray<LLFolderViewItem*>& items);
 
 	virtual std::set<LLUUID> getSelectionList() const;
 
diff --git a/indra/newview/llfolderviewitem.cpp b/indra/newview/llfolderviewitem.cpp
index 04b690b903..316f78d1e2 100644
--- a/indra/newview/llfolderviewitem.cpp
+++ b/indra/newview/llfolderviewitem.cpp
@@ -489,27 +489,34 @@ void LLFolderViewItem::dirtyFilter()
 // together.
 BOOL LLFolderViewItem::setSelection(LLFolderViewItem* selection, BOOL openitem, BOOL take_keyboard_focus)
 {
-	if( selection == this )
+	if (selection == this && !mIsSelected)
 	{
-		mIsSelected = TRUE;
-		if(mListener)
+		selectItem();
+		if (mListener)
 		{
 			mListener->selectItem();
 		}
 	}
-	else
+	else if (mIsSelected)	// Deselect everything else.
 	{
-		mIsSelected = FALSE;
+		deselectItem();
 	}
 	return mIsSelected;
 }
 
 BOOL LLFolderViewItem::changeSelection(LLFolderViewItem* selection, BOOL selected)
 {
-	if(selection == this && mIsSelected != selected)
+	if (selection == this && mIsSelected != selected)
 	{
-		mIsSelected = selected;
-		if(mListener)
+		if (mIsSelected)
+		{
+			deselectItem();
+		}
+		else
+		{
+			selectItem();
+		}
+		if (mListener)
 		{
 			mListener->selectItem();
 		}
@@ -518,6 +525,33 @@ BOOL LLFolderViewItem::changeSelection(LLFolderViewItem* selection, BOOL selecte
 	return FALSE;
 }
 
+void LLFolderViewItem::deselectItem(void)
+{
+	llassert(mIsSelected);
+    
+	mIsSelected = FALSE;
+    
+	// Update ancestors' count of selected descendents.
+	LLFolderViewFolder* parent_folder = getParentFolder();
+	if (parent_folder)
+	{
+		parent_folder->recursiveIncrementNumDescendantsSelected(-1);
+	}
+}
+
+void LLFolderViewItem::selectItem(void)
+{
+	llassert(!mIsSelected);
+    
+	mIsSelected = TRUE;
+    
+	// Update ancestors' count of selected descendents.
+	LLFolderViewFolder* parent_folder = getParentFolder();
+	if (parent_folder)
+	{
+		parent_folder->recursiveIncrementNumDescendantsSelected(1);
+	}
+}
 
 BOOL LLFolderViewItem::isMovable()
 {
@@ -1073,6 +1107,7 @@ void LLFolderViewItem::draw()
 
 LLFolderViewFolder::LLFolderViewFolder( const LLFolderViewItem::Params& p ): 
 	LLFolderViewItem( p ),	// 0 = no create time
+    mNumDescendantsSelected(0),
 	mIsOpen(FALSE),
 	mExpanderHighlighted(FALSE),
 	mCurHeight(0.f),
@@ -1458,16 +1493,34 @@ BOOL LLFolderViewFolder::hasFilteredDescendants()
 	return mMostFilteredDescendantGeneration >= getRoot()->getFilter()->getCurrentGeneration();
 }
 
+void LLFolderViewFolder::recursiveIncrementNumDescendantsSelected(S32 increment)
+{
+	LLFolderViewFolder* parent_folder = this;
+	do
+	{
+		parent_folder->mNumDescendantsSelected += increment;
+        
+		// Make sure we don't have negative values.
+		llassert(parent_folder->mNumDescendantsSelected >= 0);
+        
+		parent_folder = parent_folder->getParentFolder();
+	}
+	while(parent_folder);
+}
+
 // Passes selection information on to children and record selection
 // information if necessary.
 BOOL LLFolderViewFolder::setSelection(LLFolderViewItem* selection, BOOL openitem,
 									  BOOL take_keyboard_focus)
 {
 	BOOL rv = FALSE;
-	if( selection == this )
+	if (selection == this)
 	{
-		mIsSelected = TRUE;
-		if(mListener)
+		if (!isSelected())
+		{
+			selectItem();
+		}
+		if (mListener)
 		{
 			mListener->selectItem();
 		}
@@ -1475,7 +1528,10 @@ BOOL LLFolderViewFolder::setSelection(LLFolderViewItem* selection, BOOL openitem
 	}
 	else
 	{
-		mIsSelected = FALSE;
+		if (isSelected())
+		{
+			deselectItem();
+		}
 		rv = FALSE;
 	}
 	BOOL child_selected = FALSE;
@@ -1507,21 +1563,31 @@ BOOL LLFolderViewFolder::setSelection(LLFolderViewItem* selection, BOOL openitem
 	return rv;
 }
 
-// This method is used to change the selection of an item. If
-// selection is 'this', then note selection as true. Returns TRUE
-// if this or a child is now selected.
-BOOL LLFolderViewFolder::changeSelection(LLFolderViewItem* selection,
-										 BOOL selected)
+// This method is used to change the selection of an item.
+// Recursively traverse all children; if 'selection' is 'this' then change
+// the select status if necessary.
+// Returns TRUE if the selection state of this folder, or of a child, was changed.
+BOOL LLFolderViewFolder::changeSelection(LLFolderViewItem* selection, BOOL selected)
 {
 	BOOL rv = FALSE;
 	if(selection == this)
 	{
-		mIsSelected = selected;
-		if(mListener && selected)
+		if (isSelected() != selected)
+		{
+			rv = TRUE;
+			if (selected)
+			{
+				selectItem();
+			}
+			else
+			{
+				deselectItem();
+			}
+		}
+		if (mListener && selected)
 		{
 			mListener->selectItem();
 		}
-		rv = TRUE;
 	}
 
 	for (folders_t::iterator iter = mFolders.begin();
@@ -1545,16 +1611,14 @@ BOOL LLFolderViewFolder::changeSelection(LLFolderViewItem* selection,
 	return rv;
 }
 
-S32 LLFolderViewFolder::extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray<LLFolderViewItem*>& selected_items)
+void LLFolderViewFolder::extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray<LLFolderViewItem*>& selected_items)
 {
-	S32 num_selected = 0;
-
 	// pass on to child folders first
 	for (folders_t::iterator iter = mFolders.begin();
 		iter != mFolders.end();)
 	{
 		folders_t::iterator fit = iter++;
-		num_selected += (*fit)->extendSelection(selection, last_selected, selected_items);
+		(*fit)->extendSelection(selection, last_selected, selected_items);
 	}
 
 	// handle selection of our immediate children...
@@ -1647,7 +1711,6 @@ S32 LLFolderViewFolder::extendSelection(LLFolderViewItem* selection, LLFolderVie
 			if (item->changeSelection(item, TRUE))
 			{
 				selected_items.put(item);
-				num_selected++;
 			}
 		}
 	}
@@ -1657,11 +1720,8 @@ S32 LLFolderViewFolder::extendSelection(LLFolderViewItem* selection, LLFolderVie
 		if (selection->changeSelection(selection, TRUE))
 		{
 			selected_items.put(selection);
-			num_selected++;
 		}
 	}
-
-	return num_selected;
 }
 
 void LLFolderViewFolder::destroyView()
@@ -1711,6 +1771,10 @@ void LLFolderViewFolder::removeView(LLFolderViewItem* item)
 		return;
 	}
 	// deselect without traversing hierarchy
+	if (item->isSelected())
+	{
+		item->deselectItem();
+	}
 	getRoot()->removeFromSelectionList(item);
 	extractItem(item);
 	delete item;
@@ -1726,16 +1790,24 @@ void LLFolderViewFolder::extractItem( LLFolderViewItem* item )
 		// This is an evil downcast. However, it's only doing
 		// pointer comparison to find if (which it should be ) the
 		// item is in the container, so it's pretty safe.
-		LLFolderViewFolder* f = reinterpret_cast<LLFolderViewFolder*>(item);
+		LLFolderViewFolder* f = static_cast<LLFolderViewFolder*>(item);
 		folders_t::iterator ft;
 		ft = std::find(mFolders.begin(), mFolders.end(), f);
-		if(ft != mFolders.end())
+		if (ft != mFolders.end())
 		{
+			if ((*ft)->numSelected())
+			{
+				recursiveIncrementNumDescendantsSelected(-(*ft)->numSelected());
+			}
 			mFolders.erase(ft);
 		}
 	}
 	else
 	{
+		if ((*it)->isSelected())
+		{
+			recursiveIncrementNumDescendantsSelected(-1);
+		}
 		mItems.erase(it);
 	}
 	//item has been removed, need to update filter
@@ -1899,6 +1971,10 @@ BOOL LLFolderViewFolder::isRemovable()
 BOOL LLFolderViewFolder::addItem(LLFolderViewItem* item)
 {
 	mItems.push_back(item);
+	if (item->isSelected())
+	{
+		recursiveIncrementNumDescendantsSelected(1);
+	}
 	item->setRect(LLRect(0, 0, getRect().getWidth(), 0));
 	item->setVisible(FALSE);
 	addChild( item );
@@ -1912,6 +1988,10 @@ BOOL LLFolderViewFolder::addItem(LLFolderViewItem* item)
 BOOL LLFolderViewFolder::addFolder(LLFolderViewFolder* folder)
 {
 	mFolders.push_back(folder);
+	if (folder->numSelected())
+	{
+		recursiveIncrementNumDescendantsSelected(folder->numSelected());
+	}
 	folder->setOrigin(0, 0);
 	folder->reshape(getRect().getWidth(), 0);
 	folder->setVisible(FALSE);
diff --git a/indra/newview/llfolderviewitem.h b/indra/newview/llfolderviewitem.h
index 11b644e3aa..9e819aaaaa 100644
--- a/indra/newview/llfolderviewitem.h
+++ b/indra/newview/llfolderviewitem.h
@@ -121,6 +121,9 @@ public:
 	// Mostly for debugging printout purposes.
 	const std::string& getSearchableLabel() { return mSearchableLabel; }
 
+private:
+	BOOL						mIsSelected;
+
 protected:
 	friend class LLUICtrlFactory;
 	friend class LLFolderViewEventListener;
@@ -134,7 +137,6 @@ protected:
 	time_t						mCreationDate;
 	LLFolderViewFolder*			mParentFolder;
 	LLFolderViewEventListener*	mListener;
-	BOOL						mIsSelected;
 	BOOL						mIsCurSelection;
 	BOOL						mSelectPending;
 	LLFontGL::StyleFlags		mLabelStyle;
@@ -212,20 +214,24 @@ public:
 
 	virtual void	dirtyFilter();
 
-	// If the selection is 'this' then note that otherwise
-	// ignore. Returns TRUE if this object was affected. If open is
-	// TRUE, then folders are opened up along the way to the
-	// selection.
-	virtual BOOL setSelection(LLFolderViewItem* selection, BOOL openitem,
-		BOOL take_keyboard_focus);
-
-	// This method is used to toggle the selection of an item. If
-	// selection is 'this', then note selection, and return TRUE.
+	// If 'selection' is 'this' then note that otherwise ignore.
+	// Returns TRUE if this item ends up being selected.
+	virtual BOOL setSelection(LLFolderViewItem* selection, BOOL openitem, BOOL take_keyboard_focus);
+    
+	// This method is used to set the selection state of an item.
+	// If 'selection' is 'this' then note selection.
+	// Returns TRUE if the selection state of this item was changed.
 	virtual BOOL changeSelection(LLFolderViewItem* selection, BOOL selected);
-
+    
 	// this method is used to group select items
-	virtual S32 extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray<LLFolderViewItem*>& items){ return FALSE; }
-
+	virtual void extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray<LLFolderViewItem*>& items) { }
+    
+	// this method is used to deselect this element
+	void deselectItem();
+    
+	// this method is used to select this element
+	void selectItem();
+    
 	// gets multiple-element selection
 	virtual std::set<LLUUID> getSelectionList() const;
 
@@ -238,7 +244,7 @@ public:
 	// destroys this item recursively
 	virtual void destroyView();
 
-	BOOL isSelected() { return mIsSelected; }
+	BOOL isSelected() const { return mIsSelected; }
 
 	void setUnselected() { mIsSelected = FALSE; }
 
@@ -359,6 +365,13 @@ public:
 		UNKNOWN, TRASH, NOT_TRASH
 	} ETrash;
 
+private:
+	S32		mNumDescendantsSelected;
+
+public:		// Accessed needed by LLFolderViewItem
+	void recursiveIncrementNumDescendantsSelected(S32 increment);
+	S32 numSelected(void) const { return mNumDescendantsSelected + (isSelected() ? 1 : 0); }
+
 protected:
 	typedef std::list<LLFolderViewItem*> items_t;
 	typedef std::list<LLFolderViewFolder*> folders_t;
@@ -420,18 +433,19 @@ public:
 	virtual void dirtyFilter();
 
 	// Passes selection information on to children and record
-	// selection information if necessary. Returns TRUE if this object
-	// (or a child) was affected.
-	virtual BOOL setSelection(LLFolderViewItem* selection, BOOL openitem,
-		BOOL take_keyboard_focus);
-
-	// This method is used to change the selection of an item. If
-	// selection is 'this', then note selection as true. Returns TRUE
-	// if this or a child is now selected.
+	// selection information if necessary.
+	// Returns TRUE if this object (or a child) ends up being selected.
+	// If 'openitem' is TRUE then folders are opened up along the way to the selection.
+	virtual BOOL setSelection(LLFolderViewItem* selection, BOOL openitem, BOOL take_keyboard_focus);
+    
+	// This method is used to change the selection of an item.
+	// Recursively traverse all children; if 'selection' is 'this' then change
+	// the select status if necessary.
+	// Returns TRUE if the selection state of this folder, or of a child, was changed.
 	virtual BOOL changeSelection(LLFolderViewItem* selection, BOOL selected);
-
+    
 	// this method is used to group select items
-	virtual S32 extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray<LLFolderViewItem*>& items);
+	virtual void extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray<LLFolderViewItem*>& items);
 
 	// Returns true is this object and all of its children can be removed.
 	virtual BOOL isRemovable();
@@ -521,6 +535,7 @@ public:
 
 	time_t getCreationDate() const;
 	bool isTrash() const;
+	S32 getNumSelectedDescendants(void) const { return mNumDescendantsSelected; }
 };
 
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- 
cgit v1.2.3


From a20a98454de522eba4da17881b85a0f16bb3c116 Mon Sep 17 00:00:00 2001
From: Monroe Linden <monroe@lindenlab.com>
Date: Mon, 20 Sep 2010 18:02:23 -0700
Subject: Fix one variant of LLWeb::loadURLExternal() not passing through the
 uuid to the other variant.

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

diff --git a/indra/newview/llweb.cpp b/indra/newview/llweb.cpp
index 912413d06a..73a37a6993 100644
--- a/indra/newview/llweb.cpp
+++ b/indra/newview/llweb.cpp
@@ -106,7 +106,7 @@ void LLWeb::loadURLInternal(const std::string &url, const std::string& target, c
 // static
 void LLWeb::loadURLExternal(const std::string& url, const std::string& uuid)
 {
-	loadURLExternal(url, true);
+	loadURLExternal(url, true, uuid);
 }
 
 
-- 
cgit v1.2.3


From a748466377982f376d4901e3450e6b927cf96a4d Mon Sep 17 00:00:00 2001
From: Richard Nelson <none@none>
Date: Mon, 20 Sep 2010 19:16:17 -0700
Subject: EXP-82 FIX MOTD open in external browser notification not given until
 fully logged in reviewed by Monroe

---
 indra/llui/llnotifications.cpp                |  6 ++++++
 indra/llui/llnotifications.h                  |  1 +
 indra/newview/llimhandler.cpp                 |  2 +-
 indra/newview/llnotificationalerthandler.cpp  |  2 +-
 indra/newview/llnotificationgrouphandler.cpp  |  2 +-
 indra/newview/llnotificationofferhandler.cpp  |  2 +-
 indra/newview/llnotificationscripthandler.cpp |  2 +-
 indra/newview/llnotificationtiphandler.cpp    |  6 +++---
 indra/newview/llprogressview.cpp              | 18 ++++++++++++++++++
 indra/newview/llprogressview.h                |  1 +
 10 files changed, 34 insertions(+), 8 deletions(-)

diff --git a/indra/llui/llnotifications.cpp b/indra/llui/llnotifications.cpp
index 2a7ca4c321..9d14c4149c 100644
--- a/indra/llui/llnotifications.cpp
+++ b/indra/llui/llnotifications.cpp
@@ -628,6 +628,12 @@ void LLNotification::respond(const LLSD& response)
 	update();
 }
 
+void LLNotification::respondWithDefault()
+{
+	respond(getResponseTemplate(WITH_DEFAULT_BUTTON));
+}
+
+
 const std::string& LLNotification::getName() const
 {
 	return mTemplatep->mName;
diff --git a/indra/llui/llnotifications.h b/indra/llui/llnotifications.h
index dcb7b48f92..4fe1687f0e 100644
--- a/indra/llui/llnotifications.h
+++ b/indra/llui/llnotifications.h
@@ -441,6 +441,7 @@ public:
 	LLSD asLLSD();
 
 	void respond(const LLSD& sd);
+	void respondWithDefault();
 
 	void* getResponder() { return mResponderObj; }
 
diff --git a/indra/newview/llimhandler.cpp b/indra/newview/llimhandler.cpp
index bc76092a20..cd71da7393 100644
--- a/indra/newview/llimhandler.cpp
+++ b/indra/newview/llimhandler.cpp
@@ -115,7 +115,7 @@ bool LLIMHandler::processNotification(const LLSD& notify)
 	{
 		mChannel->killToastByNotificationID(notification->getID());
 	}
-	return true;
+	return false;
 }
 
 //--------------------------------------------------------------------------
diff --git a/indra/newview/llnotificationalerthandler.cpp b/indra/newview/llnotificationalerthandler.cpp
index dcbf6b64ce..9d824dcd59 100644
--- a/indra/newview/llnotificationalerthandler.cpp
+++ b/indra/newview/llnotificationalerthandler.cpp
@@ -133,7 +133,7 @@ bool LLAlertHandler::processNotification(const LLSD& notify)
 		if(channel)
 			channel->killToastByNotificationID(notification->getID());
 	}
-	return true;
+	return false;
 }
 
 //--------------------------------------------------------------------------
diff --git a/indra/newview/llnotificationgrouphandler.cpp b/indra/newview/llnotificationgrouphandler.cpp
index 9933a8a49c..9b7fdaef82 100644
--- a/indra/newview/llnotificationgrouphandler.cpp
+++ b/indra/newview/llnotificationgrouphandler.cpp
@@ -104,7 +104,7 @@ bool LLGroupHandler::processNotification(const LLSD& notify)
 	{
 		mChannel->killToastByNotificationID(notification->getID());
 	}
-	return true;
+	return false;
 }
 
 //--------------------------------------------------------------------------
diff --git a/indra/newview/llnotificationofferhandler.cpp b/indra/newview/llnotificationofferhandler.cpp
index 85f95bd0c7..68fd65be0f 100644
--- a/indra/newview/llnotificationofferhandler.cpp
+++ b/indra/newview/llnotificationofferhandler.cpp
@@ -179,7 +179,7 @@ bool LLOfferHandler::processNotification(const LLSD& notify)
 		}
 	}
 
-	return true;
+	return false;
 }
 
 //--------------------------------------------------------------------------
diff --git a/indra/newview/llnotificationscripthandler.cpp b/indra/newview/llnotificationscripthandler.cpp
index b4d28bb346..45590c3cdb 100644
--- a/indra/newview/llnotificationscripthandler.cpp
+++ b/indra/newview/llnotificationscripthandler.cpp
@@ -130,7 +130,7 @@ bool LLScriptHandler::processNotification(const LLSD& notify)
 			mChannel->killToastByNotificationID(notification->getID());
 		}
 	}
-	return true;
+	return false;
 }
 
 //--------------------------------------------------------------------------
diff --git a/indra/newview/llnotificationtiphandler.cpp b/indra/newview/llnotificationtiphandler.cpp
index 94612975a2..02b217fc94 100644
--- a/indra/newview/llnotificationtiphandler.cpp
+++ b/indra/newview/llnotificationtiphandler.cpp
@@ -96,7 +96,7 @@ bool LLTipHandler::processNotification(const LLSD& notify)
 					LLNearbyChat>("nearby_chat", LLSD());
 			if (nearby_chat->getVisible())
 			{
-				return true;
+				return false;
 			}
 		}
 
@@ -121,7 +121,7 @@ bool LLTipHandler::processNotification(const LLSD& notify)
 		// don't spawn toast for inventory accepted/declined offers if respective IM window is open (EXT-5909)
 		if (!LLHandlerUtil::canSpawnToast(notification))
 		{
-			return true;
+			return false;
 		}
 
 		LLToastPanel* notify_box = LLToastPanel::buidPanelFromNotification(notification);
@@ -144,7 +144,7 @@ bool LLTipHandler::processNotification(const LLSD& notify)
 	{
 		mChannel->killToastByNotificationID(notification->getID());
 	}
-	return true;
+	return false;
 }
 
 //--------------------------------------------------------------------------
diff --git a/indra/newview/llprogressview.cpp b/indra/newview/llprogressview.cpp
index aeb0a35ae4..c6bd600403 100644
--- a/indra/newview/llprogressview.cpp
+++ b/indra/newview/llprogressview.cpp
@@ -41,6 +41,7 @@
 #include "llagent.h"
 #include "llbutton.h"
 #include "llfocusmgr.h"
+#include "llnotifications.h"
 #include "llprogressbar.h"
 #include "llstartup.h"
 #include "llviewercontrol.h"
@@ -90,6 +91,8 @@ BOOL LLProgressView::postBuild()
 	// hidden initially, until we need it
 	LLPanel::setVisible(FALSE);
 
+	LLNotifications::instance().getChannel("AlertModal")->connectChanged(boost::bind(&LLProgressView::onAlertModal, this, _1));
+
 	sInstance = this;
 	return TRUE;
 }
@@ -289,3 +292,18 @@ bool LLProgressView::handleUpdate(const LLSD& event_data)
 	}
 	return false;
 }
+
+bool LLProgressView::onAlertModal(const LLSD& notify)
+{
+	// if the progress view is visible, it will obscure the notification window
+	// in this case, we want to auto-accept WebLaunchExternalTarget notifications
+	if (isInVisibleChain())
+	{
+		LLNotificationPtr notifyp = LLNotifications::instance().find(notify["id"].asUUID());
+		if (notifyp && notifyp->getName() == "WebLaunchExternalTarget")
+		{
+			notifyp->respondWithDefault();
+		}
+	}
+	return false;
+}
diff --git a/indra/newview/llprogressview.h b/indra/newview/llprogressview.h
index 01d5e16534..be1744f08a 100644
--- a/indra/newview/llprogressview.h
+++ b/indra/newview/llprogressview.h
@@ -59,6 +59,7 @@ public:
 
 	static void onCancelButtonClicked( void* );
 	static void onClickMessage(void*);
+	bool onAlertModal(const LLSD& sd);
 
 protected:
 	LLProgressBar* mProgressBar;
-- 
cgit v1.2.3


From 71259fcccbfa834eab35eb3e98a7afc93786b32f Mon Sep 17 00:00:00 2001
From: Richard Nelson <none@none>
Date: Mon, 20 Sep 2010 19:55:16 -0700
Subject: EXP-77 FIX Pop-up warning flashes on and off even whan all popups are
 enabled in settings

---
 indra/newview/llbrowsernotification.cpp | 9 ++++++++-
 indra/newview/llmediactrl.cpp           | 5 +++--
 indra/newview/llmediactrl.h             | 3 ++-
 3 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/indra/newview/llbrowsernotification.cpp b/indra/newview/llbrowsernotification.cpp
index ee19701773..d6a813d608 100644
--- a/indra/newview/llbrowsernotification.cpp
+++ b/indra/newview/llbrowsernotification.cpp
@@ -30,12 +30,19 @@
 #include "llnotificationhandler.h"
 #include "llnotifications.h"
 #include "llfloaterreg.h"
+#include "llmediactrl.h"
 
 using namespace LLNotificationsUI;
 
 bool LLBrowserNotification::processNotification(const LLSD& notify)
 {
+	LLNotificationPtr notification = LLNotifications::instance().find(notify["id"].asUUID());
+	if (!notification) return false;
 
-	// browser notifications are currently handled directly by the LLMediaCtrl instance that spawned them
+	LLMediaCtrl* media_instance = LLMediaCtrl::getInstance(notification->getPayload()["media_id"].asUUID());
+	if (media_instance)
+	{
+		media_instance->showNotification(notification);
+	}
 	return false;
 }
diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp
index 9d172b7301..33e46e70f7 100644
--- a/indra/newview/llmediactrl.cpp
+++ b/indra/newview/llmediactrl.cpp
@@ -77,6 +77,7 @@ LLMediaCtrl::Params::Params()
 
 LLMediaCtrl::LLMediaCtrl( const Params& p) :
 	LLPanel( p ),
+	LLInstanceTracker(LLUUID::generateNewID()),
 	mTextureDepthBytes( 4 ),
 	mBorder(NULL),
 	mFrequentUpdates( true ),
@@ -1032,7 +1033,7 @@ void LLMediaCtrl::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event)
 
 			LLNotification::Params notify_params;
 			notify_params.name = "PopupAttempt";
-			notify_params.payload = LLSD().with("target", target).with("url", url).with("uuid", uuid);
+			notify_params.payload = LLSD().with("target", target).with("url", url).with("uuid", uuid).with("media_id", getKey());
 			notify_params.functor.function = boost::bind(&LLMediaCtrl::onPopup, this, _1, _2);
 
 			if (mTrusted)
@@ -1041,7 +1042,7 @@ void LLMediaCtrl::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event)
 			}
 			else
 			{
-				showNotification(LLNotifications::instance().add(notify_params));
+				LLNotifications::instance().add(notify_params);
 			}
 			break;
 		};
diff --git a/indra/newview/llmediactrl.h b/indra/newview/llmediactrl.h
index f010e5f4c8..65dfbbff78 100644
--- a/indra/newview/llmediactrl.h
+++ b/indra/newview/llmediactrl.h
@@ -40,7 +40,8 @@ class LLUICtrlFactory;
 class LLMediaCtrl :
 	public LLPanel,
 	public LLViewerMediaObserver,
-	public LLViewerMediaEventEmitter
+	public LLViewerMediaEventEmitter,
+	public LLInstanceTracker<LLMediaCtrl, LLUUID>
 {
 	LOG_CLASS(LLMediaCtrl);
 public:
-- 
cgit v1.2.3


From 36253ae8bf1ca6dd53b747a4da87a5008f61c697 Mon Sep 17 00:00:00 2001
From: Boroondas Gupte <hg@boroon.dasgupta.ch>
Date: Tue, 21 Sep 2010 14:05:31 +0200
Subject: fixed some whitespace errors in files touched by STORM-162

---
 indra/newview/llfolderview.h       |  2 +-
 indra/newview/llfolderviewitem.cpp | 16 ++++++++--------
 indra/newview/llfolderviewitem.h   | 18 +++++++++---------
 3 files changed, 18 insertions(+), 18 deletions(-)

diff --git a/indra/newview/llfolderview.h b/indra/newview/llfolderview.h
index f9c48c3ca7..66ab4ce5eb 100644
--- a/indra/newview/llfolderview.h
+++ b/indra/newview/llfolderview.h
@@ -150,7 +150,7 @@ public:
 	void setSelectionByID(const LLUUID& obj_id, BOOL take_keyboard_focus);
 
 	// Called once a frame to update the selection if mSelectThisID has been set
-	void updateSelection(); 
+	void updateSelection();
 
 	// This method is used to toggle the selection of an item. Walks
 	// children, and keeps track of selected objects.
diff --git a/indra/newview/llfolderviewitem.cpp b/indra/newview/llfolderviewitem.cpp
index 316f78d1e2..3c36248c1f 100644
--- a/indra/newview/llfolderviewitem.cpp
+++ b/indra/newview/llfolderviewitem.cpp
@@ -528,9 +528,9 @@ BOOL LLFolderViewItem::changeSelection(LLFolderViewItem* selection, BOOL selecte
 void LLFolderViewItem::deselectItem(void)
 {
 	llassert(mIsSelected);
-    
+
 	mIsSelected = FALSE;
-    
+
 	// Update ancestors' count of selected descendents.
 	LLFolderViewFolder* parent_folder = getParentFolder();
 	if (parent_folder)
@@ -542,9 +542,9 @@ void LLFolderViewItem::deselectItem(void)
 void LLFolderViewItem::selectItem(void)
 {
 	llassert(!mIsSelected);
-    
+
 	mIsSelected = TRUE;
-    
+
 	// Update ancestors' count of selected descendents.
 	LLFolderViewFolder* parent_folder = getParentFolder();
 	if (parent_folder)
@@ -1107,7 +1107,7 @@ void LLFolderViewItem::draw()
 
 LLFolderViewFolder::LLFolderViewFolder( const LLFolderViewItem::Params& p ): 
 	LLFolderViewItem( p ),	// 0 = no create time
-    mNumDescendantsSelected(0),
+	mNumDescendantsSelected(0),
 	mIsOpen(FALSE),
 	mExpanderHighlighted(FALSE),
 	mCurHeight(0.f),
@@ -1499,10 +1499,10 @@ void LLFolderViewFolder::recursiveIncrementNumDescendantsSelected(S32 increment)
 	do
 	{
 		parent_folder->mNumDescendantsSelected += increment;
-        
+
 		// Make sure we don't have negative values.
 		llassert(parent_folder->mNumDescendantsSelected >= 0);
-        
+
 		parent_folder = parent_folder->getParentFolder();
 	}
 	while(parent_folder);
@@ -1511,7 +1511,7 @@ void LLFolderViewFolder::recursiveIncrementNumDescendantsSelected(S32 increment)
 // Passes selection information on to children and record selection
 // information if necessary.
 BOOL LLFolderViewFolder::setSelection(LLFolderViewItem* selection, BOOL openitem,
-									  BOOL take_keyboard_focus)
+                                      BOOL take_keyboard_focus)
 {
 	BOOL rv = FALSE;
 	if (selection == this)
diff --git a/indra/newview/llfolderviewitem.h b/indra/newview/llfolderviewitem.h
index 9e819aaaaa..ab9317afd9 100644
--- a/indra/newview/llfolderviewitem.h
+++ b/indra/newview/llfolderviewitem.h
@@ -108,7 +108,7 @@ public:
 
 	// layout constants
 	static const S32 LEFT_PAD = 5;
-    // LEFT_INDENTATION is set via folder_indentation above
+	// LEFT_INDENTATION is set via folder_indentation above
 	static const S32 ICON_PAD = 2;
 	static const S32 ICON_WIDTH = 16;
 	static const S32 TEXT_PAD = 1;
@@ -217,21 +217,21 @@ public:
 	// If 'selection' is 'this' then note that otherwise ignore.
 	// Returns TRUE if this item ends up being selected.
 	virtual BOOL setSelection(LLFolderViewItem* selection, BOOL openitem, BOOL take_keyboard_focus);
-    
+
 	// This method is used to set the selection state of an item.
 	// If 'selection' is 'this' then note selection.
 	// Returns TRUE if the selection state of this item was changed.
 	virtual BOOL changeSelection(LLFolderViewItem* selection, BOOL selected);
-    
+
 	// this method is used to group select items
 	virtual void extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray<LLFolderViewItem*>& items) { }
-    
+
 	// this method is used to deselect this element
 	void deselectItem();
-    
+
 	// this method is used to select this element
 	void selectItem();
-    
+
 	// gets multiple-element selection
 	virtual std::set<LLUUID> getSelectionList() const;
 
@@ -253,7 +253,7 @@ public:
 	BOOL getIsCurSelection() { return mIsCurSelection; }
 
 	BOOL hasVisibleChildren() { return mHasVisibleChildren; }
-	
+
 	void setShowLoadStatus(bool status) { mShowLoadStatus = status; }
 
 	// Call through to the viewed object and return true if it can be
@@ -437,13 +437,13 @@ public:
 	// Returns TRUE if this object (or a child) ends up being selected.
 	// If 'openitem' is TRUE then folders are opened up along the way to the selection.
 	virtual BOOL setSelection(LLFolderViewItem* selection, BOOL openitem, BOOL take_keyboard_focus);
-    
+
 	// This method is used to change the selection of an item.
 	// Recursively traverse all children; if 'selection' is 'this' then change
 	// the select status if necessary.
 	// Returns TRUE if the selection state of this folder, or of a child, was changed.
 	virtual BOOL changeSelection(LLFolderViewItem* selection, BOOL selected);
-    
+
 	// this method is used to group select items
 	virtual void extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray<LLFolderViewItem*>& items);
 
-- 
cgit v1.2.3


From 483e22a64d4d8c56a0ac0a3d7df50c4860985446 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.
---
 doc/contributions.txt         |  1 +
 indra/newview/llselectmgr.cpp | 22 ++++++----------------
 2 files changed, 7 insertions(+), 16 deletions(-)

diff --git a/doc/contributions.txt b/doc/contributions.txt
index d58539dd71..e48924d0f6 100644
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -661,6 +661,7 @@ Thickbrick Sleaford
 	SNOW-390
 	SNOW-421
 	SNOW-462
+	SNOW-635
 	SNOW-586
 	SNOW-743
 	VWR-7109
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 9cd8da3f9c5e17ec48523db26187cdd097ba6e3c Mon Sep 17 00:00:00 2001
From: Sergei Litovchuk <slitovchuk@productengine.com>
Date: Tue, 21 Sep 2010 18:38:48 +0300
Subject: STORM-133 FIXED keyboard navigation in Places SP->My Landmarks while
 items fetch is in progress.

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

diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp
index 5d8e3f9ab9..bbcd3fa652 100644
--- a/indra/newview/llfolderview.cpp
+++ b/indra/newview/llfolderview.cpp
@@ -1972,7 +1972,11 @@ void LLFolderView::scrollToShowSelection()
 {
 	// If items are filtered while background fetch is in progress
 	// scrollbar resets to the first filtered item. See EXT-3981.
-	if (!LLInventoryModelBackgroundFetch::instance().backgroundFetchActive() && mSelectedItems.size())
+	// However we allow scrolling for folder views with mAutoSelectOverride
+	// (used in Places SP) as an exception because the selection in them
+	// is not reset during items filtering. See STORM-133.
+	if ( (!LLInventoryModelBackgroundFetch::instance().backgroundFetchActive() || mAutoSelectOverride)
+			&& mSelectedItems.size() )
 	{
 		mNeedsScroll = TRUE;
 	}
-- 
cgit v1.2.3


From 5b2d4a169830c10dd5bfc4c72ddd94ef80e658d3 Mon Sep 17 00:00:00 2001
From: Vadim Savchuk <vsavchuk@productengine.com>
Date: Tue, 21 Sep 2010 19:11:40 +0300
Subject: STORM-163 FIXED Intermittent FPS drop related to "audio" (main thread
 hangs often on openal lock)

Submitting a patch made by Aleric Inglewood (See VWR-14914).

This bug happens for a lot of people, although it might be needed to have a fast multi core machine.
I have seen it on 1.22.10 once, never used 1.23 sorry, and saw it often on snowglobe. I am sure
it also affects 1.23 but I'd have to test that.

The symptons are that on a viewer with normally a good, high FPS, sometimes it happens
that the FPS dramatically drops (as low as 0.3, but it can also be anything higher, as high
as 10, say).

This particular jira is about a problem where the main thread is slowed down by a mutex lock
in libopenal (most calls starting with 'al' in indra/llaudio/audioengine_openal.cpp and
one in indra/llaudio/listener_openal.cpp). You can see that this is the case by opening the
Frame Console (control-shift-2) and checking that the "audio" (and possibly misc) timings
are very large compared to the Render time.
---
 doc/contributions.txt             |  1 +
 indra/llaudio/llaudioengine.cpp   | 73 +++++++++++++++++++++++++--------------
 indra/llaudio/llaudioengine.h     |  9 +++--
 indra/newview/llaudiosourcevo.cpp | 59 +++++++++++++++++++------------
 indra/newview/llaudiosourcevo.h   |  3 +-
 indra/newview/llvieweraudio.cpp   |  4 ---
 indra/newview/llviewermessage.cpp |  8 ++---
 indra/newview/llviewerobject.cpp  |  7 ++++
 8 files changed, 103 insertions(+), 61 deletions(-)

diff --git a/doc/contributions.txt b/doc/contributions.txt
index d58539dd71..d3e2731566 100644
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -66,6 +66,7 @@ Aleric Inglewood
 	VWR-13996
 	VWR-14426
 	SNOW-766
+	STORM-163
 Ales Beaumont
 	VWR-9352
 	SNOW-240
diff --git a/indra/llaudio/llaudioengine.cpp b/indra/llaudio/llaudioengine.cpp
index 8843acc891..1cc03bddb8 100644
--- a/indra/llaudio/llaudioengine.cpp
+++ b/indra/llaudio/llaudioengine.cpp
@@ -97,6 +97,7 @@ void LLAudioEngine::setDefaults()
 	}
 
 	mMasterGain = 1.f;
+	mInternalGain = 0.f;
 	mNextWindUpdate = 0.f;
 
 	mStreamingAudioImpl = NULL;
@@ -247,15 +248,6 @@ void LLAudioEngine::idle(F32 max_decode_time)
 	// Primarily does position updating, cleanup of unused audio sources.
 	// Also does regeneration of the current priority of each audio source.
 
-	if (getMuted())
-	{
-		setInternalGain(0.f);
-	}
-	else
-	{
-		setInternalGain(getMasterGain());
-	}
-
 	S32 i;
 	for (i = 0; i < MAX_BUFFERS; i++)
 	{
@@ -284,6 +276,12 @@ void LLAudioEngine::idle(F32 max_decode_time)
 			continue;
 		}
 
+		if (sourcep->isMuted())
+		{
+			++iter;
+		  	continue;
+		}
+
 		if (!sourcep->getChannel() && sourcep->getCurrentBuffer())
 		{
 			// We could potentially play this sound if its priority is high enough.
@@ -336,9 +334,9 @@ void LLAudioEngine::idle(F32 max_decode_time)
 		// attached to each channel, since only those with active channels
 		// can have anything interesting happen with their queue? (Maybe not true)
 		LLAudioSource *sourcep = iter->second;
-		if (!sourcep->mQueuedDatap)
+		if (!sourcep->mQueuedDatap || sourcep->isMuted())
 		{
-			// Nothing queued, so we don't care.
+			// Muted, or nothing queued, so we don't care.
 			continue;
 		}
 
@@ -418,6 +416,10 @@ void LLAudioEngine::idle(F32 max_decode_time)
 	for (iter = mAllSources.begin(); iter != mAllSources.end(); ++iter)
 	{
 		LLAudioSource *sourcep = iter->second;
+		if (sourcep->isMuted())
+		{
+			continue;
+		}
 		if (sourcep->isSyncMaster())
 		{
 			if (sourcep->getPriority() > max_sm_priority)
@@ -691,15 +693,23 @@ bool LLAudioEngine::isWindEnabled()
 
 void LLAudioEngine::setMuted(bool muted)
 {
-	mMuted = muted;
+	if (muted != mMuted)
+	{
+		mMuted = muted;
+		setMasterGain(mMasterGain);
+	}
 	enableWind(!mMuted);
 }
 
-
 void LLAudioEngine::setMasterGain(const F32 gain)
 {
 	mMasterGain = gain;
-	setInternalGain(gain);
+	F32 internal_gain = getMuted() ? 0.f : gain;
+	if (internal_gain != mInternalGain)
+	{
+		mInternalGain = internal_gain;
+		setInternalGain(mInternalGain);
+	}
 }
 
 F32 LLAudioEngine::getMasterGain()
@@ -1243,13 +1253,14 @@ LLAudioSource::LLAudioSource(const LLUUID& id, const LLUUID& owner_id, const F32
 	mOwnerID(owner_id),
 	mPriority(0.f),
 	mGain(gain),
-	mType(type),
+	mSourceMuted(false),
 	mAmbient(false),
 	mLoop(false),
 	mSyncMaster(false),
 	mSyncSlave(false),
 	mQueueSounds(false),
 	mPlayedOnce(false),
+	mType(type),
 	mChannelp(NULL),
 	mCurrentDatap(NULL),
 	mQueuedDatap(NULL)
@@ -1301,6 +1312,10 @@ void LLAudioSource::updatePriority()
 	{
 		mPriority = 1.f;
 	}
+	else if (isMuted())
+	{
+		mPriority = 0.f;
+	}
 	else
 	{
 		// Priority is based on distance
@@ -1349,25 +1364,33 @@ bool LLAudioSource::setupChannel()
 
 bool LLAudioSource::play(const LLUUID &audio_uuid)
 {
+	// Special abuse of play(); don't play a sound, but kill it.
 	if (audio_uuid.isNull())
 	{
 		if (getChannel())
 		{
 			getChannel()->setSource(NULL);
 			setChannel(NULL);
-			addAudioData(NULL, true);
+			if (!isMuted())
+			{
+				mCurrentDatap = NULL;
+			}
 		}
+		return false;
 	}
+
 	// Reset our age timeout if someone attempts to play the source.
 	mAgeTimer.reset();
 
 	LLAudioData *adp = gAudiop->getAudioData(audio_uuid);
-
-	bool has_buffer = gAudiop->updateBufferForData(adp, audio_uuid);
-
-
 	addAudioData(adp);
 
+	if (isMuted())
+	{
+		return false;
+	}
+
+	bool has_buffer = gAudiop->updateBufferForData(adp, audio_uuid);
 	if (!has_buffer)
 	{
 		// Don't bother trying to set up a channel or anything, we don't have an audio buffer.
@@ -1392,10 +1415,11 @@ bool LLAudioSource::play(const LLUUID &audio_uuid)
 }
 
 
-bool LLAudioSource::isDone()
+bool LLAudioSource::isDone() const
 {
 	const F32 MAX_AGE = 60.f;
 	const F32 MAX_UNPLAYED_AGE = 15.f;
+	const F32 MAX_MUTED_AGE = 11.f;
 
 	if (isLoop())
 	{
@@ -1403,7 +1427,6 @@ bool LLAudioSource::isDone()
 		return false;
 	}
 
-
 	if (hasPendingPreloads())
 	{
 		return false;
@@ -1420,10 +1443,10 @@ bool LLAudioSource::isDone()
 	// This is a single-play source
 	if (!mChannelp)
 	{
-		if ((elapsed > MAX_UNPLAYED_AGE) || mPlayedOnce)
+		if ((elapsed > (mSourceMuted ? MAX_MUTED_AGE : MAX_UNPLAYED_AGE)) || mPlayedOnce)
 		{
 			// We don't have a channel assigned, and it's been
-			// over 5 seconds since we tried to play it.  Don't bother.
+			// over 15 seconds since we tried to play it.  Don't bother.
 			//llinfos << "No channel assigned, source is done" << llendl;
 			return true;
 		}
@@ -1449,7 +1472,7 @@ bool LLAudioSource::isDone()
 
 	if ((elapsed > MAX_UNPLAYED_AGE) || mPlayedOnce)
 	{
-		// The sound isn't playing back after 5 seconds or we're already done playing it, kill it.
+		// The sound isn't playing back after 15 seconds or we're already done playing it, kill it.
 		return true;
 	}
 
diff --git a/indra/llaudio/llaudioengine.h b/indra/llaudio/llaudioengine.h
index 6a5000d7ed..30d2490635 100644
--- a/indra/llaudio/llaudioengine.h
+++ b/indra/llaudio/llaudioengine.h
@@ -118,8 +118,8 @@ public:
 	// Use these for temporarily muting the audio system.
 	// Does not change buffers, initialization, etc. but
 	// stops playing new sounds.
-	virtual void setMuted(bool muted);
-	virtual bool getMuted() const { return mMuted; }
+	void setMuted(bool muted);
+	bool getMuted() const { return mMuted; }
 #ifdef USE_PLUGIN_MEDIA
 	LLPluginClassMedia* initializeMedia(const std::string& media_type);
 #endif
@@ -239,6 +239,7 @@ protected:
 	LLAudioBuffer *mBuffers[MAX_BUFFERS];
 	
 	F32 mMasterGain;
+	F32 mInternalGain;			// Actual gain set; either mMasterGain or 0 when mMuted is true.
 	F32 mSecondaryGain[AUDIO_TYPE_COUNT];
 
 	F32 mNextWindUpdate;
@@ -303,7 +304,8 @@ public:
 	virtual void setGain(const F32 gain)							{ mGain = llclamp(gain, 0.f, 1.f); }
 
 	const LLUUID &getID() const		{ return mID; }
-	bool isDone();
+	bool isDone() const;
+	bool isMuted() const { return mSourceMuted; }
 
 	LLAudioData *getCurrentData();
 	LLAudioData *getQueuedData();
@@ -325,6 +327,7 @@ protected:
 	LLUUID			mOwnerID;	// owner of the object playing the sound
 	F32				mPriority;
 	F32				mGain;
+	bool			mSourceMuted;
 	bool			mAmbient;
 	bool			mLoop;
 	bool			mSyncMaster;
diff --git a/indra/newview/llaudiosourcevo.cpp b/indra/newview/llaudiosourcevo.cpp
index 40eb5ebcd1..b37aba6c15 100644
--- a/indra/newview/llaudiosourcevo.cpp
+++ b/indra/newview/llaudiosourcevo.cpp
@@ -35,11 +35,8 @@
 
 LLAudioSourceVO::LLAudioSourceVO(const LLUUID &sound_id, const LLUUID& owner_id, const F32 gain, LLViewerObject *objectp)
 	:	LLAudioSource(sound_id, owner_id, gain, LLAudioEngine::AUDIO_TYPE_SFX), 
-	mObjectp(objectp), 
-	mActualGain(gain)
+	mObjectp(objectp)
 {
-	setAmbient(FALSE);
-	updateGain();
 	update();
 }
 
@@ -54,18 +51,18 @@ LLAudioSourceVO::~LLAudioSourceVO()
 
 void LLAudioSourceVO::setGain(const F32 gain)
 {
-	mActualGain = llclamp(gain, 0.f, 1.f);
-	updateGain();
+	mGain = llclamp(gain, 0.f, 1.f);
 }
 
-void LLAudioSourceVO::updateGain()
+void LLAudioSourceVO::updateMute()
 {
-	if (!mObjectp)
+	if (!mObjectp || mObjectp->isDead())
 	{
+	  	mSourceMuted = true;
 		return;
 	}
 
-	BOOL mute = FALSE;
+	bool mute = false;
 	LLVector3d pos_global;
 
 	if (mObjectp->isAttachment())
@@ -84,21 +81,21 @@ void LLAudioSourceVO::updateGain()
 	{
 		pos_global = mObjectp->getPositionGlobal();
 	}
-	
+
 	if (!LLViewerParcelMgr::getInstance()->canHearSound(pos_global))
 	{
-		mute = TRUE;
+		mute = true;
 	}
 
 	if (!mute)
 	{
 		if (LLMuteList::getInstance()->isMuted(mObjectp->getID()))
 		{
-			mute = TRUE;
+			mute = true;
 		}
 		else if (LLMuteList::getInstance()->isMuted(mOwnerID, LLMute::flagObjectSounds))
 		{
-			mute = TRUE;
+			mute = true;
 		}
 		else if (mObjectp->isAttachment())
 		{
@@ -110,24 +107,38 @@ void LLAudioSourceVO::updateGain()
 			if (parent 
 				&& LLMuteList::getInstance()->isMuted(parent->getID()))
 			{
-				mute = TRUE;
+				mute = true;
 			}
 		}
 	}
 
-	if (!mute)
+	if (mute != mSourceMuted)
 	{
-		mGain = mActualGain;
-	}
-	else
-	{
-		mGain = 0.f;
+		mSourceMuted = mute;
+		if (mSourceMuted)
+		{
+		  	// Stop the sound.
+			this->play(LLUUID::null);
+		}
+		else
+		{
+		  	// Muted sounds keep there data at all times, because
+			// it's the place where the audio UUID is stored.
+			// However, it's possible that mCurrentDatap is
+			// NULL when this source did only preload sounds.
+			if (mCurrentDatap)
+			{
+		  		// Restart the sound.
+				this->play(mCurrentDatap->getID());
+			}
+		}
 	}
 }
 
-
 void LLAudioSourceVO::update()
 {
+	updateMute();
+
 	if (!mObjectp)
 	{
 		return;
@@ -139,7 +150,11 @@ void LLAudioSourceVO::update()
 		return;
 	}
 
-	updateGain();
+	if (mSourceMuted)
+	{
+	  	return;
+	}
+
 	if (mObjectp->isHUDAttachment())
 	{
 		mPositionGlobal = gAgentCamera.getCameraPositionGlobal();
diff --git a/indra/newview/llaudiosourcevo.h b/indra/newview/llaudiosourcevo.h
index a68f58a4b2..f1d8ef4528 100644
--- a/indra/newview/llaudiosourcevo.h
+++ b/indra/newview/llaudiosourcevo.h
@@ -42,11 +42,10 @@ public:
 	/*virtual*/ void setGain(const F32 gain);
 
 private:
-	void updateGain();
+	void updateMute();
 
 private:
 	LLPointer<LLViewerObject>	mObjectp;
-	F32							mActualGain; // The "real" gain, when not off due to parcel effects
 };
 
 #endif // LL_LLAUDIOSOURCEVO_H
diff --git a/indra/newview/llvieweraudio.cpp b/indra/newview/llvieweraudio.cpp
index 750bb224b1..b19c738ed2 100644
--- a/indra/newview/llvieweraudio.cpp
+++ b/indra/newview/llvieweraudio.cpp
@@ -114,10 +114,6 @@ void audio_update_volume(bool force_update)
 
 		gAudiop->setDopplerFactor(gSavedSettings.getF32("AudioLevelDoppler"));
 		gAudiop->setRolloffFactor(gSavedSettings.getF32("AudioLevelRolloff"));
-#ifdef kAUDIO_ENABLE_WIND
-		gAudiop->enableWind(!mute_audio);
-#endif
-
 		gAudiop->setMuted(mute_audio);
 		
 		if (force_update)
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index c35173a7d4..2f3aeec9b3 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -4213,13 +4213,11 @@ void process_preload_sound(LLMessageSystem *msg, void **user_data)
 
 	// Don't play sounds from a region with maturity above current agent maturity
 	LLVector3d pos_global = objectp->getPositionGlobal();
-	if( !gAgent.canAccessMaturityAtGlobal( pos_global ) )
+	if (gAgent.canAccessMaturityAtGlobal(pos_global))
 	{
-		return;
+		// Add audioData starts a transfer internally.
+		sourcep->addAudioData(datap, FALSE);
 	}
-	
-	// Add audioData starts a transfer internally.
-	sourcep->addAudioData(datap, FALSE);
 }
 
 void process_attached_sound(LLMessageSystem *msg, void **user_data)
diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp
index 741a9e6ec4..fd3e80d755 100644
--- a/indra/newview/llviewerobject.cpp
+++ b/indra/newview/llviewerobject.cpp
@@ -4445,6 +4445,13 @@ void LLViewerObject::setAttachedSound(const LLUUID &audio_uuid, const LLUUID& ow
 		mAudioSourcep = NULL;
 	}
 
+	if (mAudioSourcep && mAudioSourcep->isMuted() &&
+	    mAudioSourcep->getCurrentData() && mAudioSourcep->getCurrentData()->getID() == audio_uuid)
+	{
+		//llinfos << "Already having this sound as muted sound, ignoring" << llendl;
+		return;
+	}
+
 	getAudioSource(owner_id);
 
 	if (mAudioSourcep)
-- 
cgit v1.2.3


From 9479c872746074d27d245b2af2d17a760a927915 Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Tue, 21 Sep 2010 13:57:58 -0700
Subject: FIX crash when clicking on MOTD

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

diff --git a/indra/newview/llprogressview.cpp b/indra/newview/llprogressview.cpp
index c6bd600403..e9504cbba0 100644
--- a/indra/newview/llprogressview.cpp
+++ b/indra/newview/llprogressview.cpp
@@ -297,7 +297,7 @@ bool LLProgressView::onAlertModal(const LLSD& notify)
 {
 	// if the progress view is visible, it will obscure the notification window
 	// in this case, we want to auto-accept WebLaunchExternalTarget notifications
-	if (isInVisibleChain())
+	if (isInVisibleChain() && notify["sigtype"].asString() == "add")
 	{
 		LLNotificationPtr notifyp = LLNotifications::instance().find(notify["id"].asUUID());
 		if (notifyp && notifyp->getName() == "WebLaunchExternalTarget")
-- 
cgit v1.2.3


From 5cf8584b8c43c7e7a283652a754b46f84d511161 Mon Sep 17 00:00:00 2001
From: Kent Quirk <q@lindenlab.com>
Date: Tue, 21 Sep 2010 17:03:51 -0400
Subject: Increment version number since we forked for beta.

---
 indra/llcommon/llversionviewer.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/indra/llcommon/llversionviewer.h b/indra/llcommon/llversionviewer.h
index 92d9e1204a..bd65ce8573 100644
--- a/indra/llcommon/llversionviewer.h
+++ b/indra/llcommon/llversionviewer.h
@@ -28,8 +28,8 @@
 #define LL_LLVERSIONVIEWER_H
 
 const S32 LL_VERSION_MAJOR = 2;
-const S32 LL_VERSION_MINOR = 1;
-const S32 LL_VERSION_PATCH = 2;
+const S32 LL_VERSION_MINOR = 2;
+const S32 LL_VERSION_PATCH = 1;
 const S32 LL_VERSION_BUILD = 0;
 
 const char * const LL_CHANNEL = "Second Life Developer";
-- 
cgit v1.2.3


From 325f16d0b4c8fc9de694121d770a4931a7b98529 Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Tue, 21 Sep 2010 14:28:03 -0700
Subject: fix for mac build and possible crash when responding to notification
 twice

---
 indra/llui/llnotifications.cpp | 7 ++++++-
 indra/newview/llmediactrl.cpp  | 2 +-
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/indra/llui/llnotifications.cpp b/indra/llui/llnotifications.cpp
index 9d14c4149c..ab9bd12b85 100644
--- a/indra/llui/llnotifications.cpp
+++ b/indra/llui/llnotifications.cpp
@@ -600,7 +600,7 @@ void LLNotification::respond(const LLSD& response)
 	{
 		mResponder->handleRespond(asLLSD(), response);
 	}
-	else
+	else if (!mResponseFunctorName.empty())
 	{
 		// look up the functor
 		LLNotificationFunctorRegistry::ResponseFunctor functor =
@@ -608,6 +608,11 @@ void LLNotification::respond(const LLSD& response)
 		// and then call it
 		functor(asLLSD(), response);
 	}
+	else
+	{
+		// no registered responder
+		return;
+	}
 
 	if (mTemporaryResponder && !isReusable())
 	{
diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp
index 33e46e70f7..e84c9152b1 100644
--- a/indra/newview/llmediactrl.cpp
+++ b/indra/newview/llmediactrl.cpp
@@ -77,7 +77,7 @@ LLMediaCtrl::Params::Params()
 
 LLMediaCtrl::LLMediaCtrl( const Params& p) :
 	LLPanel( p ),
-	LLInstanceTracker(LLUUID::generateNewID()),
+	LLInstanceTracker<LLMediaCtrl, LLUUID>(LLUUID::generateNewID()),
 	mTextureDepthBytes( 4 ),
 	mBorder(NULL),
 	mFrequentUpdates( true ),
-- 
cgit v1.2.3


From a75f44505abd80ab96504ed8af6d65cdfac658da Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Wed, 22 Sep 2010 13:25:04 +0100
Subject: CID-512: Checker: DEADCODE Function:
 show_item_sharing_confirmation(std::basic_string<char,
 std::char_traits<char>, std::allocator<char>>, LLViewerInventoryItem *, const
 LLSD &, const LLUUID &, const LLUUID &) File:
 /indra/newview/lltooldraganddrop.cpp

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

diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp
index d6e069b3dc..6bb95168e2 100644
--- a/indra/newview/lltooldraganddrop.cpp
+++ b/indra/newview/lltooldraganddrop.cpp
@@ -1446,10 +1446,10 @@ static void give_inventory_cb(const LLSD& notification, const LLSD& response)
 }
 
 static void show_item_sharing_confirmation(const std::string name,
-										   LLViewerInventoryItem* inv_item,
-										   const LLSD& dest,
-										   const LLUUID& dest_agent,
-										   const LLUUID& session_id = LLUUID::null)
+					   LLViewerInventoryItem* inv_item,
+					   const LLSD& dest,
+					   const LLUUID& dest_agent,
+					   const LLUUID& session_id = LLUUID::null)
 {
 	if (!inv_item)
 	{
@@ -1459,7 +1459,7 @@ static void show_item_sharing_confirmation(const std::string name,
 
 	LLSD substitutions;
 	substitutions["RESIDENTS"] = name;
-	substitutions["ITEMS"] = inv_item ? inv_item->getName() : LLStringUtil::null;
+	substitutions["ITEMS"] = inv_item->getName();
 	LLSD payload;
 	payload["agent_id"] = dest_agent;
 	payload["item_id"] = inv_item->getUUID();
-- 
cgit v1.2.3


From 240ab6f0dfeb90bf876d76e2a4d4bd38abba2e1b Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Wed, 22 Sep 2010 13:37:35 +0100
Subject: CID-511

Checker: UNINIT_CTOR
Function: LLVOCacheEntry::LLVOCacheEntry(LLAPRFile *)
File: /indra/newview/llvocache.cpp
---
 indra/newview/llvocache.cpp | 58 +++++++++++++++++++++++----------------------
 1 file changed, 30 insertions(+), 28 deletions(-)

diff --git a/indra/newview/llvocache.cpp b/indra/newview/llvocache.cpp
index 0b903e62b1..d76634663d 100644
--- a/indra/newview/llvocache.cpp
+++ b/indra/newview/llvocache.cpp
@@ -44,25 +44,27 @@ BOOL check_write(LLAPRFile* apr_file, void* src, S32 n_bytes)
 //---------------------------------------------------------------------------
 
 LLVOCacheEntry::LLVOCacheEntry(U32 local_id, U32 crc, LLDataPackerBinaryBuffer &dp)
+	:
+	mLocalID(local_id),
+	mCRC(crc),
+	mHitCount(0),
+	mDupeCount(0),
+	mCRCChangeCount(0)
 {
-	mLocalID = local_id;
-	mCRC = crc;
-	mHitCount = 0;
-	mDupeCount = 0;
-	mCRCChangeCount = 0;
 	mBuffer = new U8[dp.getBufferSize()];
 	mDP.assignBuffer(mBuffer, dp.getBufferSize());
 	mDP = dp;
 }
 
 LLVOCacheEntry::LLVOCacheEntry()
+	:
+	mLocalID(0),
+	mCRC(0),
+	mHitCount(0),
+	mDupeCount(0),
+	mCRCChangeCount(0),
+	mBuffer(NULL)
 {
-	mLocalID = 0;
-	mCRC = 0;
-	mHitCount = 0;
-	mDupeCount = 0;
-	mCRCChangeCount = 0;
-	mBuffer = NULL;
 	mDP.assignBuffer(mBuffer, 0);
 }
 
@@ -73,7 +75,7 @@ LLVOCacheEntry::LLVOCacheEntry(LLAPRFile* apr_file)
 
 	success = check_read(apr_file, &mLocalID, sizeof(U32));
 	if(success)
-{
+	{
 		success = check_read(apr_file, &mCRC, sizeof(U32));
 	}
 	if(success)
@@ -83,27 +85,24 @@ LLVOCacheEntry::LLVOCacheEntry(LLAPRFile* apr_file)
 	if(success)
 	{
 		success = check_read(apr_file, &mDupeCount, sizeof(S32));
-}
+	}
 	if(success)
-{
+	{
 		success = check_read(apr_file, &mCRCChangeCount, sizeof(S32));
 	}
 	if(success)
 	{
 		success = check_read(apr_file, &size, sizeof(S32));
 
-	// Corruption in the cache entries
-	if ((size > 10000) || (size < 1))
-	{
-		// We've got a bogus size, skip reading it.
-		// We won't bother seeking, because the rest of this file
-		// is likely bogus, and will be tossed anyway.
-		llwarns << "Bogus cache entry, size " << size << ", aborting!" << llendl;
-		mLocalID = 0;
-		mCRC = 0;
-		mBuffer = NULL;
-		return;
-	}
+		// Corruption in the cache entries
+		if ((size > 10000) || (size < 1))
+		{
+			// We've got a bogus size, skip reading it.
+			// We won't bother seeking, because the rest of this file
+			// is likely bogus, and will be tossed anyway.
+			llwarns << "Bogus cache entry, size " << size << ", aborting!" << llendl;
+			success = FALSE;
+		}
 	}
 	if(success && size > 0)
 	{
@@ -112,8 +111,8 @@ LLVOCacheEntry::LLVOCacheEntry(LLAPRFile* apr_file)
 
 		if(success)
 		{
-	mDP.assignBuffer(mBuffer, size);
-}
+			mDP.assignBuffer(mBuffer, size);
+		}
 		else
 		{
 			delete[] mBuffer ;
@@ -125,6 +124,9 @@ LLVOCacheEntry::LLVOCacheEntry(LLAPRFile* apr_file)
 	{
 		mLocalID = 0;
 		mCRC = 0;
+		mHitCount = 0;
+		mDupeCount = 0;
+		mCRCChangeCount = 0;
 		mBuffer = NULL;
 	}
 }
-- 
cgit v1.2.3


From b8337bdd2ce2d07b23eb0354adfef984fb218b9a Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Wed, 22 Sep 2010 13:40:59 +0100
Subject: CID-510

Checker: UNINIT_CTOR
Function: LLVOCache::LLVOCache()
File: /indra/newview/llvocache.cpp
---
 indra/newview/llvocache.cpp | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/indra/newview/llvocache.cpp b/indra/newview/llvocache.cpp
index d76634663d..8bdb8e069e 100644
--- a/indra/newview/llvocache.cpp
+++ b/indra/newview/llvocache.cpp
@@ -259,7 +259,8 @@ void LLVOCache::destroyClass()
 LLVOCache::LLVOCache():
 	mInitialized(FALSE),
 	mReadOnly(TRUE),
-	mNumEntries(0)
+	mNumEntries(0),
+	mCacheSize(1)
 {
 	mLocalAPRFilePoolp = new LLVolatileAPRPool() ;
 }
@@ -291,8 +292,8 @@ void LLVOCache::initCache(ELLPath location, U32 size, U32 cache_version)
 	{
 		LLFile::mkdir(mObjectCacheDirName);
 	}	
-	mCacheSize = llmin(size, MAX_NUM_OBJECT_ENTRIES) ;
-	mCacheSize = llmax(mCacheSize, NUM_ENTRIES_TO_PURGE);
+	mCacheSize = llclamp(size,
+			     MAX_NUM_OBJECT_ENTRIES, NUM_ENTRIES_TO_PURGE);
 
 	mMetaInfo.mVersion = cache_version;
 	readCacheHeader();
-- 
cgit v1.2.3


From 3fb0736bec2fdea6fbb729e2582aa69bd270b318 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Wed, 22 Sep 2010 13:42:10 +0100
Subject: CID-509

Checker: UNINIT_CTOR
Function: LLAvatarListItem::LLAvatarListItem(bool)
File: /indra/newview/llavatarlistitem.cpp
---
 indra/newview/llavatarlistitem.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/indra/newview/llavatarlistitem.cpp b/indra/newview/llavatarlistitem.cpp
index 8fc4ad6763..9f7699b3db 100644
--- a/indra/newview/llavatarlistitem.cpp
+++ b/indra/newview/llavatarlistitem.cpp
@@ -70,7 +70,8 @@ LLAvatarListItem::LLAvatarListItem(bool not_from_ui_factory/* = true*/)
 	mOnlineStatus(E_UNKNOWN),
 	mShowInfoBtn(true),
 	mShowProfileBtn(true),
-	mShowPermissions(false)
+	mShowPermissions(false),
+	mHovered(false)
 {
 	if (not_from_ui_factory)
 	{
-- 
cgit v1.2.3


From 24a7ac8dd6438a1648feda1fa34dc4482d0c8d2d Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Wed, 22 Sep 2010 13:46:50 +0100
Subject: CID-505

Checker: UNINIT_CTOR
Function: LLGridManager::LLGridManager()
File: /indra/newview/tests/lllogininstance_test.cpp
---
 indra/newview/tests/lllogininstance_test.cpp | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/indra/newview/tests/lllogininstance_test.cpp b/indra/newview/tests/lllogininstance_test.cpp
index 55823fc386..b750d5d816 100644
--- a/indra/newview/tests/lllogininstance_test.cpp
+++ b/indra/newview/tests/lllogininstance_test.cpp
@@ -100,6 +100,8 @@ void LLCredential::authenticatorType(std::string &idType)
 //-----------------------------------------------------------------------------
 #include "../llviewernetwork.h"
 LLGridManager::~LLGridManager()
+:
+	mIsInProductionGrid(false)
 {
 }
 
-- 
cgit v1.2.3


From 1200c4aabfed19fb4e8e330041bb1f3694ee7aab Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Wed, 22 Sep 2010 13:49:04 +0100
Subject: doh, fix this in the RIGHT place.

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

diff --git a/indra/newview/tests/lllogininstance_test.cpp b/indra/newview/tests/lllogininstance_test.cpp
index b750d5d816..712f9a197e 100644
--- a/indra/newview/tests/lllogininstance_test.cpp
+++ b/indra/newview/tests/lllogininstance_test.cpp
@@ -100,8 +100,6 @@ void LLCredential::authenticatorType(std::string &idType)
 //-----------------------------------------------------------------------------
 #include "../llviewernetwork.h"
 LLGridManager::~LLGridManager()
-:
-	mIsInProductionGrid(false)
 {
 }
 
@@ -109,6 +107,8 @@ void LLGridManager::addGrid(LLSD& grid_data)
 {
 }
 LLGridManager::LLGridManager()
+:
+	mIsInProductionGrid(false)
 {	
 }
 
-- 
cgit v1.2.3


From 2a1d4b375efdc32145908e0112fd9b8dc308b5bf Mon Sep 17 00:00:00 2001
From: Andrew Productengine <adyukov@productengine.com>
Date: Wed, 22 Sep 2010 18:20:01 +0300
Subject: STORM-187 FIXED Fixed chatbar not getting back its width after
 opening/closing sidetray.

The bug reproduced not only for opening/closing sidetray, but also when viewer window was resized.
The chatbar's width was set to default on width increase, it was also shrunk even when there was enough space for it, and buttons could be shrunk instead.
Also, width to which user resized it manually, was not used in resizes. Gave priority on resizes to nearby chat - i.e.:
Before this fix priorities were- buttons are visible -> buttons are as wide as possible -> nearby is stretched.
After this fix priorities are- buttons are visible -> nearby is stretched -> buttons are as wide as possible.

- Added new member which stores width of nearbychat(either value that was recorded after user's manual resize of chatbar or default). Used it as a value to which chatbar tries to be resized on resizes.

- Implemented the change of priorities described above in processWidthIncreased() and processWidthDecreased() methods.
---
 indra/newview/llbottomtray.cpp | 73 ++++++++++++++++++++++--------------------
 indra/newview/llbottomtray.h   |  4 +++
 2 files changed, 42 insertions(+), 35 deletions(-)

diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp
index 29f4311ea4..9320c3305f 100644
--- a/indra/newview/llbottomtray.cpp
+++ b/indra/newview/llbottomtray.cpp
@@ -225,6 +225,7 @@ LLBottomTray::LLBottomTray(const LLSD&)
 	}
 
 	mImageDragIndication = LLUI::getUIImage(getString("DragIndicationImageName"));
+	mDesiredNearbyChatWidth = getChild<LLNearbyChatBar>("chat_bar")->getRect().getWidth();
 }
 
 LLBottomTray::~LLBottomTray()
@@ -967,6 +968,7 @@ void LLBottomTray::reshape(S32 width, S32 height, BOOL called_from_parent)
 		S32 new_width = gSavedSettings.getS32("ChatBarCustomWidth");
 		if (new_width > 0)
 		{
+			mDesiredNearbyChatWidth = new_width;
 			processChatbarCustomization(new_width);
 			mNearbyChatBar->reshape(new_width, mNearbyChatBar->getRect().getHeight());
 		}
@@ -982,6 +984,9 @@ S32 LLBottomTray::processWidthDecreased(S32 delta_width)
 	const S32 chiclet_panel_width = mChicletPanel->getParent()->getRect().getWidth();
 	const S32 chiclet_panel_min_width = mChicletPanel->getMinWidth();
 
+	// There are four steps of processing width decrease. If in one of them required width was reached,
+	// further are not needed.
+	// 1. Decreasing width of chiclet panel.
 	if (chiclet_panel_width > chiclet_panel_min_width)
 	{
 		// we have some space to decrease chiclet panel
@@ -1007,8 +1012,15 @@ S32 LLBottomTray::processWidthDecreased(S32 delta_width)
 			<< llendl;
 	}
 
-	const S32 chatbar_panel_width = mNearbyChatBar->getRect().getWidth();
+	S32 buttons_freed_width = 0;
+	// 2. Decreasing width of buttons.
+	if (still_should_be_processed)
+	{
+		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_width = mNearbyChatBar->getRect().getWidth();
 	if (still_should_be_processed && chatbar_panel_width > chatbar_panel_min_width)
 	{
 		// we have some space to decrease chatbar panel
@@ -1021,7 +1033,11 @@ S32 LLBottomTray::processWidthDecreased(S32 delta_width)
 
 		still_should_be_processed = delta_width < 0;
 
-		mNearbyChatBar->reshape(mNearbyChatBar->getRect().getWidth() - delta_panel, mNearbyChatBar->getRect().getHeight());
+		// chatbar should only be shrunk here, not stretched
+		if(delta_panel > 0)
+		{
+			mNearbyChatBar->reshape(mNearbyChatBar->getRect().getWidth() - delta_panel, mNearbyChatBar->getRect().getHeight());
+		}
 
 		log(mNearbyChatBar, "after processing panel decreasing via nearby chatbar panel");
 
@@ -1032,11 +1048,9 @@ S32 LLBottomTray::processWidthDecreased(S32 delta_width)
 	}
 
 	S32 extra_shrink_width = 0;
-	S32 buttons_freed_width = 0;
+	// 4. Hiding buttons if needed.
 	if (still_should_be_processed)
 	{
-		processShrinkButtons(delta_width, buttons_freed_width);
-
 		processHideButtons(delta_width, buttons_freed_width);
 
 		if (delta_width < 0)
@@ -1048,10 +1062,15 @@ S32 LLBottomTray::processWidthDecreased(S32 delta_width)
 
 		if (buttons_freed_width > 0)
 		{
-			log(mNearbyChatBar, "before applying compensative width");
-			mNearbyChatBar->reshape(mNearbyChatBar->getRect().getWidth() + buttons_freed_width, mNearbyChatBar->getRect().getHeight() );
-			log(mNearbyChatBar, "after applying compensative width");
-			lldebugs << buttons_freed_width << llendl;
+			S32 nearby_needed_width = mDesiredNearbyChatWidth - mNearbyChatBar->getRect().getWidth();
+			if (nearby_needed_width > 0)
+			{
+				S32 compensative_width = nearby_needed_width > buttons_freed_width ? buttons_freed_width : nearby_needed_width; 
+				log(mNearbyChatBar, "before applying compensative width");
+				mNearbyChatBar->reshape(mNearbyChatBar->getRect().getWidth() + compensative_width, mNearbyChatBar->getRect().getHeight() );
+				log(mNearbyChatBar, "after applying compensative width");
+				lldebugs << buttons_freed_width << llendl;
+			}
 		}
 	}
 
@@ -1065,18 +1084,12 @@ void LLBottomTray::processWidthIncreased(S32 delta_width)
 	const S32 chiclet_panel_width = mChicletPanel->getParent()->getRect().getWidth();
 	static const S32 chiclet_panel_min_width = mChicletPanel->getMinWidth();
 
-	const S32 chatbar_panel_width = mNearbyChatBar->getRect().getWidth();
-	static const S32 chatbar_panel_min_width = get_panel_min_width(mToolbarStack, mNearbyChatBar);
-	static const S32 chatbar_panel_max_width = get_panel_max_width(mToolbarStack, mNearbyChatBar);
-
-	const S32 chatbar_available_shrink_width = chatbar_panel_width - chatbar_panel_min_width;
 	const S32 available_width_chiclet = chiclet_panel_width - chiclet_panel_min_width;
 
 	// how many room we have to show hidden buttons
-	S32 total_available_width = delta_width + chatbar_available_shrink_width + available_width_chiclet;
+	S32 total_available_width = delta_width + available_width_chiclet;
 
 	lldebugs << "Processing extending, available width:"
-		<< ", chatbar - " << chatbar_available_shrink_width
 		<< ", chiclets - " << available_width_chiclet
 		<< ", total - " << total_available_width
 		<< llendl;
@@ -1085,8 +1098,6 @@ void LLBottomTray::processWidthIncreased(S32 delta_width)
 
 	processShowButtons(available_width);
 
-	processExtendButtons(available_width);
-
 	// if we have to show/extend some buttons but resized delta width is not enough...
 	S32 processed_width = total_available_width - available_width;
 	if (processed_width > delta_width)
@@ -1097,21 +1108,7 @@ void LLBottomTray::processWidthIncreased(S32 delta_width)
 		// 1. use delta width of resizing
 		required_to_process_width -= delta_width;
 
-		// 2. use width available via decreasing of nearby chat panel
-		S32 chatbar_shrink_width = required_to_process_width;
-		if (chatbar_available_shrink_width < chatbar_shrink_width)
-		{
-			chatbar_shrink_width = chatbar_available_shrink_width;
-		}
-
-		log(mNearbyChatBar, "increase width: before applying compensative width");
-		mNearbyChatBar->reshape(mNearbyChatBar->getRect().getWidth() - chatbar_shrink_width, mNearbyChatBar->getRect().getHeight() );
-		if (mNearbyChatBar)			log(mNearbyChatBar, "after applying compensative width");
-		lldebugs << chatbar_shrink_width << llendl;
-
-		// 3. use width available via decreasing of chiclet panel
-		required_to_process_width -= chatbar_shrink_width;
-
+		// 2. use width available via decreasing of chiclet panel
 		if (required_to_process_width > 0)
 		{
 			mChicletPanel->getParent()->reshape(mChicletPanel->getParent()->getRect().getWidth() - required_to_process_width, mChicletPanel->getParent()->getRect().getHeight());
@@ -1127,9 +1124,9 @@ void LLBottomTray::processWidthIncreased(S32 delta_width)
 
 	// how many space can nearby chatbar take?
 	S32 chatbar_panel_width_ = mNearbyChatBar->getRect().getWidth();
-	if (delta_width > 0 && chatbar_panel_width_ < chatbar_panel_max_width)
+	if (delta_width > 0 && chatbar_panel_width_ < mDesiredNearbyChatWidth)
 	{
-		S32 delta_panel_max = chatbar_panel_max_width - chatbar_panel_width_;
+		S32 delta_panel_max = mDesiredNearbyChatWidth - chatbar_panel_width_;
 		S32 delta_panel = llmin(delta_width, delta_panel_max);
 		lldebugs << "Unprocesed delta width: " << delta_width
 			<< ", can be applied to chatbar: " << delta_panel_max
@@ -1140,6 +1137,10 @@ void LLBottomTray::processWidthIncreased(S32 delta_width)
 		mNearbyChatBar->reshape(chatbar_panel_width_ + delta_panel, mNearbyChatBar->getRect().getHeight());
 		log(mNearbyChatBar, "applied unprocessed delta width");
 	}
+	if (delta_width > 0)
+	{
+		processExtendButtons(delta_width);
+	}
 }
 
 void LLBottomTray::processShowButtons(S32& available_width)
@@ -1697,6 +1698,8 @@ void LLBottomTray::processChatbarCustomization(S32 new_width)
 	const S32 delta_width = mNearbyChatBar->getRect().getWidth() - new_width;
 
 	if (delta_width == 0) return;
+	
+	mDesiredNearbyChatWidth = new_width;
 
 	LLView * chiclet_layout_panel = mChicletPanel->getParent();
 	const S32 chiclet_min_width = get_panel_min_width(mToolbarStack, chiclet_layout_panel);
diff --git a/indra/newview/llbottomtray.h b/indra/newview/llbottomtray.h
index 1197c5a10a..e6c6f66f33 100644
--- a/indra/newview/llbottomtray.h
+++ b/indra/newview/llbottomtray.h
@@ -439,6 +439,10 @@ protected:
 	void onContextMenuItemClicked(const LLSD& userdata);
 	bool onContextMenuItemEnabled(const LLSD& userdata);
 
+	// Either default or saved after user's manual resize width of nearby chat.
+	// Nearby chat will not always have it, because sometimes it can be shrunk on resize,
+	// but when possible it will be restored back to this value.
+	S32					mDesiredNearbyChatWidth;
 	LLChicletPanel* 	mChicletPanel;
 	LLPanel*			mSpeakPanel;
 	LLSpeakButton* 		mSpeakBtn;
-- 
cgit v1.2.3


From 2f29c3511422e29bbdefa43af2fc3fc785c38c86 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(-)

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 0edb695ea86d7997ae3952e155ed5b4922c799f8 Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Wed, 22 Sep 2010 14:48:18 -0700
Subject: instead of exposing mutable container in LLInitParam::Multiple, just
 expose access functions, begin(), end(), etc. this allows mutation of param
 block contents, without being able to change number of elements

---
 indra/llui/llcombobox.cpp             |  4 ++--
 indra/llui/llmultislider.cpp          |  4 ++--
 indra/llui/llnotifications.cpp        | 14 +++++++-------
 indra/llui/llpanel.cpp                |  4 ++--
 indra/llui/llradiogroup.cpp           |  4 ++--
 indra/llui/llscrolllistctrl.cpp       | 14 +++++++-------
 indra/llui/lltooltip.cpp              |  4 ++--
 indra/llui/llui.cpp                   |  8 ++++----
 indra/llui/lluicolortable.cpp         |  4 ++--
 indra/llxuixml/llinitparam.h          | 36 ++++++++++++++++++++++-------------
 indra/llxuixml/lltrans.cpp            |  8 ++++----
 indra/newview/llsplitbutton.cpp       |  4 ++--
 indra/newview/llviewertexturelist.cpp |  4 ++--
 indra/newview/llviewerwindow.cpp      |  2 +-
 14 files changed, 62 insertions(+), 52 deletions(-)

diff --git a/indra/llui/llcombobox.cpp b/indra/llui/llcombobox.cpp
index 910bab9a97..edd2cd340b 100644
--- a/indra/llui/llcombobox.cpp
+++ b/indra/llui/llcombobox.cpp
@@ -139,8 +139,8 @@ LLComboBox::LLComboBox(const LLComboBox::Params& p)
 	// Grab the mouse-up event and make sure the button state is correct
 	mList->setMouseUpCallback(boost::bind(&LLComboBox::onListMouseUp, this));
 
-	for (LLInitParam::ParamIterator<ItemParams>::const_iterator it = p.items().begin();
-		it != p.items().end();
+	for (LLInitParam::ParamIterator<ItemParams>::const_iterator it = p.items.begin();
+		it != p.items.end();
 		++it)
 	{
 		LLScrollListItem::Params item_params = *it;
diff --git a/indra/llui/llmultislider.cpp b/indra/llui/llmultislider.cpp
index 1f6fa12969..d4e6091ee0 100644
--- a/indra/llui/llmultislider.cpp
+++ b/indra/llui/llmultislider.cpp
@@ -101,8 +101,8 @@ LLMultiSlider::LLMultiSlider(const LLMultiSlider::Params& p)
 		setMouseUpCallback(initCommitCallback(p.mouse_up_callback));
 	}
 
-	for (LLInitParam::ParamIterator<SliderParams>::const_iterator it = p.sliders().begin();
-		it != p.sliders().end();
+	for (LLInitParam::ParamIterator<SliderParams>::const_iterator it = p.sliders.begin();
+		it != p.sliders.end();
 		++it)
 	{
 		if (it->name.isProvided())
diff --git a/indra/llui/llnotifications.cpp b/indra/llui/llnotifications.cpp
index ab9bd12b85..67b3c5cfce 100644
--- a/indra/llui/llnotifications.cpp
+++ b/indra/llui/llnotifications.cpp
@@ -395,8 +395,8 @@ LLNotificationTemplate::LLNotificationTemplate(const LLNotificationTemplate::Par
 		mSoundEffect = LLUUID(LLUI::sSettingGroups["config"]->getString(p.sound));
 	}
 
-	for(LLInitParam::ParamIterator<LLNotificationTemplate::UniquenessContext>::const_iterator it = p.unique.contexts().begin(),
-			end_it = p.unique.contexts().end();
+	for(LLInitParam::ParamIterator<LLNotificationTemplate::UniquenessContext>::const_iterator it = p.unique.contexts.begin(),
+			end_it = p.unique.contexts.end();
 		it != end_it;
 		++it)
 	{
@@ -1313,8 +1313,8 @@ void replaceFormText(LLNotificationForm::Params& form, const std::string& patter
 	{
 		form.ignore.text = replace;
 	}
-	for (LLInitParam::ParamIterator<LLNotificationForm::FormElement>::iterator it = form.form_elements.elements().begin(),
-			end_it = form.form_elements.elements().end();
+	for (LLInitParam::ParamIterator<LLNotificationForm::FormElement>::iterator it = form.form_elements.elements.begin(),
+			end_it = form.form_elements.elements.end();
 		it != end_it;
 		++it)
 	{
@@ -1345,7 +1345,7 @@ bool LLNotifications::loadTemplates()
 
 	mTemplates.clear();
 
-	for(LLInitParam::ParamIterator<LLNotificationTemplate::GlobalString>::const_iterator it = params.strings().begin(), end_it = params.strings().end();
+	for(LLInitParam::ParamIterator<LLNotificationTemplate::GlobalString>::const_iterator it = params.strings.begin(), end_it = params.strings.end();
 		it != end_it;
 		++it)
 	{
@@ -1354,14 +1354,14 @@ bool LLNotifications::loadTemplates()
 
 	std::map<std::string, LLNotificationForm::Params> form_templates;
 
-	for(LLInitParam::ParamIterator<LLNotificationTemplate::Template>::const_iterator it = params.templates().begin(), end_it = params.templates().end();
+	for(LLInitParam::ParamIterator<LLNotificationTemplate::Template>::const_iterator it = params.templates.begin(), end_it = params.templates.end();
 		it != end_it;
 		++it)
 	{
 		form_templates[it->name] = it->form;
 	}
 
-	for(LLInitParam::ParamIterator<LLNotificationTemplate::Params>::iterator it = params.notifications().begin(), end_it = params.notifications().end();
+	for(LLInitParam::ParamIterator<LLNotificationTemplate::Params>::iterator it = params.notifications.begin(), end_it = params.notifications.end();
 		it != end_it;
 		++it)
 	{
diff --git a/indra/llui/llpanel.cpp b/indra/llui/llpanel.cpp
index 2f5dabf23c..c8e56630f1 100644
--- a/indra/llui/llpanel.cpp
+++ b/indra/llui/llpanel.cpp
@@ -446,8 +446,8 @@ void LLPanel::initFromParams(const LLPanel::Params& p)
 		setVisibleCallback(initCommitCallback(p.visible_callback));
 	}
 	
-	for (LLInitParam::ParamIterator<LocalizedString>::const_iterator it = p.strings().begin();
-		it != p.strings().end();
+	for (LLInitParam::ParamIterator<LocalizedString>::const_iterator it = p.strings.begin();
+		it != p.strings.end();
 		++it)
 	{
 		mUIStrings[it->name] = it->value;
diff --git a/indra/llui/llradiogroup.cpp b/indra/llui/llradiogroup.cpp
index 83c42a5ab8..cc348fdc63 100644
--- a/indra/llui/llradiogroup.cpp
+++ b/indra/llui/llradiogroup.cpp
@@ -100,8 +100,8 @@ LLRadioGroup::LLRadioGroup(const LLRadioGroup::Params& p)
 
 void LLRadioGroup::initFromParams(const Params& p)
 {
-	for (LLInitParam::ParamIterator<ItemParams>::const_iterator it = p.items().begin();
-		it != p.items().end();
+	for (LLInitParam::ParamIterator<ItemParams>::const_iterator it = p.items.begin();
+		it != p.items.end();
 		++it)
 	{
 		LLRadioGroup::ItemParams item_params(*it);
diff --git a/indra/llui/llscrolllistctrl.cpp b/indra/llui/llscrolllistctrl.cpp
index bfc77e77ad..7df7c13dc0 100644
--- a/indra/llui/llscrolllistctrl.cpp
+++ b/indra/llui/llscrolllistctrl.cpp
@@ -259,15 +259,15 @@ LLScrollListCtrl::LLScrollListCtrl(const LLScrollListCtrl::Params& p)
 	}
 
 	
-	for (LLInitParam::ParamIterator<LLScrollListColumn::Params>::const_iterator row_it = p.contents.columns().begin();
-		row_it != p.contents.columns().end();
+	for (LLInitParam::ParamIterator<LLScrollListColumn::Params>::const_iterator row_it = p.contents.columns.begin();
+		row_it != p.contents.columns.end();
 		++row_it)
 	{
 		addColumn(*row_it);
 	}
 
-	for (LLInitParam::ParamIterator<LLScrollListItem::Params>::const_iterator row_it = p.contents.rows().begin();
-		row_it != p.contents.rows().end();
+	for (LLInitParam::ParamIterator<LLScrollListItem::Params>::const_iterator row_it = p.contents.rows.begin();
+		row_it != p.contents.rows.end();
 		++row_it)
 	{
 		addRow(*row_it);
@@ -2776,8 +2776,8 @@ LLScrollListItem* LLScrollListCtrl::addRow(LLScrollListItem *new_item, const LLS
 	// Add any columns we don't already have
 	S32 col_index = 0;
 
-	for(LLInitParam::ParamIterator<LLScrollListCell::Params>::const_iterator itor = item_p.columns().begin();
-		itor != item_p.columns().end();
+	for(LLInitParam::ParamIterator<LLScrollListCell::Params>::const_iterator itor = item_p.columns.begin();
+		itor != item_p.columns.end();
 		++itor)
 	{
 		LLScrollListCell::Params cell_p = *itor;
@@ -2828,7 +2828,7 @@ LLScrollListItem* LLScrollListCtrl::addRow(LLScrollListItem *new_item, const LLS
 		col_index++;
 	}
 
-	if (item_p.columns().empty())
+	if (item_p.columns.empty())
 	{
 		if (mColumns.empty())
 		{
diff --git a/indra/llui/lltooltip.cpp b/indra/llui/lltooltip.cpp
index 2c44b91749..6390039794 100644
--- a/indra/llui/lltooltip.cpp
+++ b/indra/llui/lltooltip.cpp
@@ -276,8 +276,8 @@ void LLToolTip::initFromParams(const LLToolTip::Params& p)
 
 	if (p.styled_message.isProvided())
 	{
-		for (LLInitParam::ParamIterator<LLToolTip::StyledText>::const_iterator text_it = p.styled_message().begin();
-			text_it != p.styled_message().end();
+		for (LLInitParam::ParamIterator<LLToolTip::StyledText>::const_iterator text_it = p.styled_message.begin();
+			text_it != p.styled_message.end();
 			++text_it)
 		{
 			mTextBox->appendText(text_it->text(), false, text_it->style);
diff --git a/indra/llui/llui.cpp b/indra/llui/llui.cpp
index b673d81c2b..ff9af21e54 100644
--- a/indra/llui/llui.cpp
+++ b/indra/llui/llui.cpp
@@ -1806,14 +1806,14 @@ void LLUI::setupPaths()
 		LLStringUtil::format_map_t path_args;
 		path_args["[LANGUAGE]"] = LLUI::getLanguage();
 		
-		for (LLInitParam::ParamIterator<Directory>::const_iterator it = paths.directories().begin(), 
-				end_it = paths.directories().end();
+		for (LLInitParam::ParamIterator<Directory>::const_iterator it = paths.directories.begin(), 
+				end_it = paths.directories.end();
 			it != end_it;
 			++it)
 		{
 			std::string path_val_ui;
-			for (LLInitParam::ParamIterator<SubDir>::const_iterator subdir_it = it->subdirs().begin(),
-					subdir_end_it = it->subdirs().end();
+			for (LLInitParam::ParamIterator<SubDir>::const_iterator subdir_it = it->subdirs.begin(),
+					subdir_end_it = it->subdirs.end();
 				subdir_it != subdir_end_it;)
 			{
 				path_val_ui += subdir_it->value();
diff --git a/indra/llui/lluicolortable.cpp b/indra/llui/lluicolortable.cpp
index 219c70500a..0641f6d175 100644
--- a/indra/llui/lluicolortable.cpp
+++ b/indra/llui/lluicolortable.cpp
@@ -56,8 +56,8 @@ void LLUIColorTable::insertFromParams(const Params& p, string_color_map_t& table
 	typedef std::map<std::string, std::string> string_string_map_t;
 	string_string_map_t unresolved_refs;
 
-	for(LLInitParam::ParamIterator<ColorEntryParams>::const_iterator it = p.color_entries().begin();
-		it != p.color_entries().end();
+	for(LLInitParam::ParamIterator<ColorEntryParams>::const_iterator it = p.color_entries.begin();
+		it != p.color_entries.end();
 		++it)
 	{
 		ColorEntryParams color_entry = *it;
diff --git a/indra/llxuixml/llinitparam.h b/indra/llxuixml/llinitparam.h
index 24ce891880..83b27f5396 100644
--- a/indra/llxuixml/llinitparam.h
+++ b/indra/llxuixml/llinitparam.h
@@ -958,7 +958,7 @@ namespace LLInitParam
 			const self_t& typed_param = static_cast<const self_t&>(param);
 			if (!typed_param.isProvided() || name_stack.empty()) return;
 
-			typename container_t::const_iterator it = typed_param.mValues.begin();
+			typename const_iterator it = typed_param.mValues.begin();
 			for (typename std::vector<key_cache_t>::const_iterator key_it = typed_param.mCachedKeys.begin();
 				it != typed_param.mValues.end();
 				++key_it, ++it)
@@ -1025,9 +1025,15 @@ namespace LLInitParam
 
 		// implicit conversion
 		operator value_assignment_t() const { return self_t::get(); } 
-		// explicit conversion
-		value_assignment_t operator()() const { return get(); } 
-		container_t& operator()() { return mValues; }
+
+		typedef typename container_t::iterator iterator;
+		typedef typename container_t::const_iterator const_iterator;
+		iterator begin() { return mValues.begin(); }
+		iterator end() { return mValues.end(); }
+		const_iterator begin() const { return mValues.begin(); }
+		const_iterator end() const { return mValues.end(); }
+		bool empty() const { return mValues.empty(); }
+		size_t size() const { return mValues.size(); }
 
 		U32 numValidElements() const
 		{
@@ -1160,7 +1166,7 @@ namespace LLInitParam
 			const self_t& typed_param = static_cast<const self_t&>(param);
 			if (!typed_param.isProvided() || name_stack.empty()) return;
 
-			typename container_t::const_iterator it = typed_param.mValues.begin();
+			const_iterator it = typed_param.mValues.begin();
 			for (typename std::vector<Data>::const_iterator key_it = typed_param.mCachedKeys.begin();
 				it != typed_param.mValues.end();
 				++key_it, ++it)
@@ -1224,14 +1230,20 @@ namespace LLInitParam
 
 		// implicit conversion
 		operator value_assignment_t() const { return self_t::get(); } 
-		// explicit conversion
-		value_assignment_t operator()() const { return get(); } 
-		container_t& operator()() { return mValues; }
+
+		typedef typename container_t::iterator iterator;
+		typedef typename container_t::const_iterator const_iterator;
+		iterator begin() { return mValues.begin(); }
+		iterator end() { return mValues.end(); }
+		const_iterator begin() const { return mValues.begin(); }
+		const_iterator end() const { return mValues.end(); }
+		bool empty() const { return mValues.empty(); }
+		size_t size() const { return mValues.size(); }
 
 		U32 numValidElements() const
 		{
 			U32 count = 0;
-			for (typename container_t::const_iterator it = mValues.begin();
+			for (const_iterator it = mValues.begin();
 				it != mValues.end();
 				++it)
 			{
@@ -1518,15 +1530,13 @@ namespace LLInitParam
 			typedef Multiple<T, RANGE, NAME_VALUE_LOOKUP>							self_t;
 			typedef typename super_t::container_t									container_t;
 			typedef typename super_t::value_assignment_t							value_assignment_t;
-			typedef typename container_t::iterator									iterator;
-			typedef typename container_t::const_iterator							const_iterator;
+			typedef typename super_t::iterator										iterator;
+			typedef typename super_t::const_iterator								const_iterator;
 
 			explicit Multiple(const char* name = "", value_assignment_t val = DefaultInitializer<container_t>::get())
 			:	super_t(DERIVED_BLOCK::selfBlockDescriptor(), name, val, &validate, RANGE::minCount(), RANGE::maxCount())
 			{}
 
-			using super_t::operator();
-
 			Multiple& operator=(value_assignment_t val)
 			{
 				set(val);
diff --git a/indra/llxuixml/lltrans.cpp b/indra/llxuixml/lltrans.cpp
index bf56461bac..11127a53f5 100644
--- a/indra/llxuixml/lltrans.cpp
+++ b/indra/llxuixml/lltrans.cpp
@@ -78,8 +78,8 @@ bool LLTrans::parseStrings(LLXMLNodePtr &root, const std::set<std::string>& defa
 	sStringTemplates.clear();
 	sDefaultArgs.clear();
 	
-	for(LLInitParam::ParamIterator<StringDef>::const_iterator it = string_table.strings().begin();
-		it != string_table.strings().end();
+	for(LLInitParam::ParamIterator<StringDef>::const_iterator it = string_table.strings.begin();
+		it != string_table.strings.end();
 		++it)
 	{
 		LLTransTemplate xml_template(it->name, it->value);
@@ -119,8 +119,8 @@ bool LLTrans::parseLanguageStrings(LLXMLNodePtr &root)
 		return false;
 	}
 		
-	for(LLInitParam::ParamIterator<StringDef>::const_iterator it = string_table.strings().begin();
-		it != string_table.strings().end();
+	for(LLInitParam::ParamIterator<StringDef>::const_iterator it = string_table.strings.begin();
+		it != string_table.strings.end();
 		++it)
 	{
 		// share the same map with parseStrings() so we can search the strings using the same getString() function.- angela
diff --git a/indra/newview/llsplitbutton.cpp b/indra/newview/llsplitbutton.cpp
index 7db42214e1..790305103d 100644
--- a/indra/newview/llsplitbutton.cpp
+++ b/indra/newview/llsplitbutton.cpp
@@ -220,7 +220,7 @@ LLSplitButton::LLSplitButton(const LLSplitButton::Params& p)
 	addChild(mItemsPanel);
 
 
-	LLInitParam::ParamIterator<ItemParams>::const_iterator it = p.items().begin();
+	LLInitParam::ParamIterator<ItemParams>::const_iterator it = p.items.begin();
 
 	//processing shown item button
 	mShownItem = prepareItemButton(*it);
@@ -231,7 +231,7 @@ LLSplitButton::LLSplitButton(const LLSplitButton::Params& p)
 
 	//processing hidden item buttons
 	S32 item_top = mItemsPanel->getRect().getHeight();
-	for (++it; it != p.items().end(); ++it)
+	for (++it; it != p.items.end(); ++it)
 	{
 		LLButton* hidden_button = prepareItemButton(*it);
 		hidden_button->setRect(LLRect(btn_left, item_top, btn_right, item_top - rc.getHeight()));
diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp
index abe75a1224..bbf7c8e60e 100644
--- a/indra/newview/llviewertexturelist.cpp
+++ b/indra/newview/llviewertexturelist.cpp
@@ -1558,8 +1558,8 @@ bool LLUIImageList::initFromFile()
 
 	for (S32 cur_pass = PASS_DECODE_NOW; cur_pass < NUM_PASSES; cur_pass++)
 	{
-		for (LLInitParam::ParamIterator<UIImageDeclaration>::const_iterator image_it = images.textures().begin();
-			image_it != images.textures().end();
+		for (LLInitParam::ParamIterator<UIImageDeclaration>::const_iterator image_it = images.textures.begin();
+			image_it != images.textures.end();
 			++image_it)
 		{
 			std::string file_name = image_it->file_name.isProvided() ? image_it->file_name() : image_it->name();
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 7f8b7fba9f..b2ff39bbd2 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -2393,7 +2393,7 @@ void append_xui_tooltip(LLView* viewp, LLToolTip::Params& params)
 {
 	if (viewp) 
 	{
-		if (!params.styled_message().empty())
+		if (!params.styled_message.empty())
 		{
 			params.styled_message.add().text("\n---------\n"); 
 		}
-- 
cgit v1.2.3


From 73db0816e0a12d74c36ffdb64df6c745f7f39e9e Mon Sep 17 00:00:00 2001
From: Sergei Litovchuk <slitovchuk@productengine.com>
Date: Thu, 23 Sep 2010 01:34:51 +0300
Subject: STORM-199 FIXED Added wearing an object from Library if it was
 dragged to COF - Disabled moving items from in-world objects to COF or outfit
 folders not to create copies of items instead of links. - Enabled dropping a
 landmark from Library to certain position in Favorites folder which supports
 items reordering.

---
 indra/newview/llinventorybridge.cpp | 166 +++++++++++++++++++++++-------------
 indra/newview/llinventorybridge.h   |   2 +
 2 files changed, 109 insertions(+), 59 deletions(-)

diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index 311d791319..569dfc08e2 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -2856,6 +2856,66 @@ bool move_task_inventory_callback(const LLSD& notification, const LLSD& response
 	return false;
 }
 
+// Returns true if the item can be moved to Current Outfit or any outfit folder.
+static BOOL can_move_to_outfit(LLInventoryItem* inv_item, BOOL move_is_into_current_outfit)
+{
+	if ((inv_item->getInventoryType() != LLInventoryType::IT_WEARABLE) &&
+		(inv_item->getInventoryType() != LLInventoryType::IT_GESTURE) &&
+		(inv_item->getInventoryType() != LLInventoryType::IT_OBJECT))
+	{
+		return FALSE;
+	}
+
+	if (move_is_into_current_outfit && get_is_item_worn(inv_item->getUUID()))
+	{
+		return FALSE;
+	}
+
+	return TRUE;
+}
+
+void LLFolderBridge::dropToFavorites(LLInventoryItem* inv_item)
+{
+	// use callback to rearrange favorite landmarks after adding
+	// to have new one placed before target (on which it was dropped). See EXT-4312.
+	LLPointer<AddFavoriteLandmarkCallback> cb = new AddFavoriteLandmarkCallback();
+	LLInventoryPanel* panel = dynamic_cast<LLInventoryPanel*>(mInventoryPanel.get());
+	LLFolderViewItem* drag_over_item = panel ? panel->getRootFolder()->getDraggingOverItem() : NULL;
+	if (drag_over_item && drag_over_item->getListener())
+	{
+		cb.get()->setTargetLandmarkId(drag_over_item->getListener()->getUUID());
+	}
+
+	copy_inventory_item(
+		gAgent.getID(),
+		inv_item->getPermissions().getOwner(),
+		inv_item->getUUID(),
+		mUUID,
+		std::string(),
+		cb);
+}
+
+void LLFolderBridge::dropToOutfit(LLInventoryItem* inv_item, BOOL move_is_into_current_outfit)
+{
+	// BAP - should skip if dup.
+	if (move_is_into_current_outfit)
+	{
+		LLAppearanceMgr::instance().wearItemOnAvatar(inv_item->getUUID(), true, true);
+	}
+	else
+	{
+		LLPointer<LLInventoryCallback> cb = NULL;
+		link_inventory_item(
+			gAgent.getID(),
+			inv_item->getLinkedUUID(),
+			mUUID,
+			inv_item->getName(),
+			inv_item->getDescription(),
+			LLAssetType::AT_LINK,
+			cb);
+	}
+}
+
 // This is used both for testing whether an item can be dropped
 // into the folder, as well as performing the actual drop, depending
 // if drop == TRUE.
@@ -2868,18 +2928,20 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
 	if(!isAgentInventory()) return FALSE; // cannot drag into library
 	if (!isAgentAvatarValid()) return FALSE;
 
+	const LLUUID &current_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT, false);
+	const LLUUID &favorites_id = model->findCategoryUUIDForType(LLFolderType::FT_FAVORITE, false);
+
+	const BOOL move_is_into_current_outfit = (mUUID == current_outfit_id);
+	const BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT);
+
 	LLToolDragAndDrop::ESource source = LLToolDragAndDrop::getInstance()->getSource();
 	BOOL accept = FALSE;
 	LLViewerObject* object = NULL;
 	if(LLToolDragAndDrop::SOURCE_AGENT == source)
 	{
 		const LLUUID &trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH, false);
-		const LLUUID &current_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT, false);
-		const LLUUID &favorites_id = model->findCategoryUUIDForType(LLFolderType::FT_FAVORITE, false);
 
 		const BOOL move_is_into_trash = (mUUID == trash_id) || model->isObjectDescendentOf(mUUID, trash_id);
-		const BOOL move_is_into_current_outfit = (mUUID == current_outfit_id);
-		const BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT);
 		const BOOL move_is_outof_current_outfit = LLAppearanceMgr::instance().getIsInCOF(inv_item->getUUID());
 		const BOOL folder_allows_reorder = (mUUID == favorites_id);
 
@@ -2931,14 +2993,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
 			accept = FALSE;
 		if (move_is_into_current_outfit || move_is_into_outfit)
 		{
-			if ((inv_item->getInventoryType() != LLInventoryType::IT_WEARABLE) &&
-				(inv_item->getInventoryType() != LLInventoryType::IT_GESTURE) &&
-				(inv_item->getInventoryType() != LLInventoryType::IT_OBJECT))
-				accept = FALSE;
-		}
-		if (move_is_into_current_outfit && get_is_item_worn(inv_item->getUUID()))
-		{
-			accept = FALSE;
+			accept = can_move_to_outfit(inv_item, move_is_into_current_outfit);
 		}
 
 		if(accept && drop)
@@ -2982,50 +3037,13 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
 			// (copy the item)
 			else if (favorites_id == mUUID)
 			{
-				// use callback to rearrange favorite landmarks after adding
-				// to have new one placed before target (on which it was dropped). See EXT-4312.
-				LLPointer<AddFavoriteLandmarkCallback> cb = new AddFavoriteLandmarkCallback();
-				LLInventoryPanel* panel = dynamic_cast<LLInventoryPanel*>(mInventoryPanel.get());
-				LLFolderViewItem* drag_over_item = panel ? panel->getRootFolder()->getDraggingOverItem() : NULL;
-				if (drag_over_item && drag_over_item->getListener())
-				{
-					cb.get()->setTargetLandmarkId(drag_over_item->getListener()->getUUID());
-				}
-
-				copy_inventory_item(
-					gAgent.getID(),
-					inv_item->getPermissions().getOwner(),
-					inv_item->getUUID(),
-					mUUID,
-					std::string(),
-					cb);
+				dropToFavorites(inv_item);
 			}
 			// CURRENT OUTFIT or OUTFIT folder
 			// (link the item)
 			else if (move_is_into_current_outfit || move_is_into_outfit)
 			{
-				if ((inv_item->getInventoryType() == LLInventoryType::IT_WEARABLE) || 
-					(inv_item->getInventoryType() == LLInventoryType::IT_GESTURE) || 
-					(inv_item->getInventoryType() == LLInventoryType::IT_OBJECT))
-				{
-					// BAP - should skip if dup.
-					if (move_is_into_current_outfit)
-					{
-						LLAppearanceMgr::instance().wearItemOnAvatar(inv_item->getUUID(), true, true);
-					}
-					else
-					{
-						LLPointer<LLInventoryCallback> cb = NULL;
-						link_inventory_item(
-							gAgent.getID(),
-							inv_item->getLinkedUUID(),
-							mUUID,
-							inv_item->getName(),
-							inv_item->getDescription(),
-							LLAssetType::AT_LINK,
-							cb);
-					}
-				}
+				dropToOutfit(inv_item, move_is_into_current_outfit);
 			}
 			// NORMAL or TRASH folder
 			// (move the item, restamp if into trash)
@@ -3074,6 +3092,15 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
 			is_move = TRUE;
 			accept = TRUE;
 		}
+
+		// Don't allow placing an original item into Current Outfit or an outfit folder
+		// because they must contain only links to wearable items.
+		// *TODO: Probably we should create a link to an item if it was dragged to outfit or COF.
+		if(move_is_into_current_outfit || move_is_into_outfit)
+		{
+			accept = FALSE;
+		}
+
 		if(drop && accept)
 		{
 			LLMoveInv* move_inv = new LLMoveInv;
@@ -3113,15 +3140,36 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
 		if(item && item->isFinished())
 		{
 			accept = TRUE;
-			if(drop)
+
+			if (move_is_into_current_outfit || move_is_into_outfit)
 			{
-				copy_inventory_item(
-					gAgent.getID(),
-					inv_item->getPermissions().getOwner(),
-					inv_item->getUUID(),
-					mUUID,
-					std::string(),
-					LLPointer<LLInventoryCallback>(NULL));
+				accept = can_move_to_outfit(inv_item, move_is_into_current_outfit);
+			}
+
+			if (accept && drop)
+			{
+				// FAVORITES folder
+				// (copy the item)
+				if (favorites_id == mUUID)
+				{
+					dropToFavorites(inv_item);
+				}
+				// CURRENT OUTFIT or OUTFIT folder
+				// (link the item)
+				else if (move_is_into_current_outfit || move_is_into_outfit)
+				{
+					dropToOutfit(inv_item, move_is_into_current_outfit);
+				}
+				else
+				{
+					copy_inventory_item(
+						gAgent.getID(),
+						inv_item->getPermissions().getOwner(),
+						inv_item->getUUID(),
+						mUUID,
+						std::string(),
+						LLPointer<LLInventoryCallback>(NULL));
+				}
 			}
 		}
 	}
diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h
index 14abdd76b9..5ac328dcef 100644
--- a/indra/newview/llinventorybridge.h
+++ b/indra/newview/llinventorybridge.h
@@ -295,6 +295,8 @@ protected:
 
 	menuentry_vec_t getMenuItems() { return mItems; } // returns a copy of current menu items
 
+	void dropToFavorites(LLInventoryItem* inv_item);
+	void dropToOutfit(LLInventoryItem* inv_item, BOOL move_is_into_current_outfit);
 
 	//--------------------------------------------------------------------
 	// Messy hacks for handling folder options
-- 
cgit v1.2.3


From 5626cc0ccfabfaec74aee5d7bdf6b92d76d9951f Mon Sep 17 00:00:00 2001
From: Monroe Linden <monroe@lindenlab.com>
Date: Wed, 22 Sep 2010 16:25:47 -0700
Subject: Temporary changes to allow the viewer to build against an older
 version of llqtwebkit.

NOTE: once updated builds of llqtwebkit are available on all platforms, this changeset should be backed out.
---
 indra/media_plugins/webkit/media_plugin_webkit.cpp | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/indra/media_plugins/webkit/media_plugin_webkit.cpp b/indra/media_plugins/webkit/media_plugin_webkit.cpp
index bd1a44a930..c47052bae9 100644
--- a/indra/media_plugins/webkit/media_plugin_webkit.cpp
+++ b/indra/media_plugins/webkit/media_plugin_webkit.cpp
@@ -304,7 +304,11 @@ private:
 		LLQtWebKit::getInstance()->enableJavascript( mJavascriptEnabled );
 		
 		// create single browser window
+#if LLQTWEBKIT_API_VERSION < 2
+		mBrowserWindowId = LLQtWebKit::getInstance()->createBrowserWindow( mWidth, mHeight);
+#else
 		mBrowserWindowId = LLQtWebKit::getInstance()->createBrowserWindow( mWidth, mHeight, mTarget);
+#endif
 
 		// tell LLQtWebKit about the size of the browser window
 		LLQtWebKit::getInstance()->setSize( mBrowserWindowId, mWidth, mHeight );
@@ -505,9 +509,14 @@ private:
 	void onClickLinkHref(const EventType& event)
 	{
 		LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "click_href");
+#if LLQTWEBKIT_API_VERSION < 2
+		message.setValue("uri", event.getStringValue());
+		message.setValue("target", event.getStringValue2());
+#else
 		message.setValue("uri", event.getEventUri());
 		message.setValue("target", event.getStringValue());
 		message.setValue("uuid", event.getStringValue2());
+#endif
 		sendMessage(message);
 	}
 	
@@ -516,7 +525,11 @@ private:
 	void onClickLinkNoFollow(const EventType& event)
 	{
 		LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "click_nofollow");
+#if LLQTWEBKIT_API_VERSION < 2
+		message.setValue("uri", event.getStringValue());
+#else
 		message.setValue("uri", event.getEventUri());
+#endif
 		sendMessage(message);
 	}
 	
@@ -538,7 +551,9 @@ private:
 	void onWindowCloseRequested(const EventType& event)
 	{
 		LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "close_request");
+#if LLQTWEBKIT_API_VERSION >= 2
 		message.setValue("uuid", event.getStringValue());
+#endif
 		sendMessage(message);
 	}
 
@@ -1199,6 +1214,7 @@ void MediaPluginWebKit::receiveMessage(const char *message_string)
 					}
 				}
 			}
+#if LLQTWEBKIT_API_VERSION >= 2
 			else if(message_name == "proxy_window_opened")
 			{
 				std::string target = message_in.getValue("target");
@@ -1210,6 +1226,7 @@ void MediaPluginWebKit::receiveMessage(const char *message_string)
 				std::string uuid = message_in.getValue("uuid");
 				LLQtWebKit::getInstance()->proxyWindowClosed(mBrowserWindowId, uuid);
 			}
+#endif
 			else
 			{
 //				std::cerr << "MediaPluginWebKit::receiveMessage: unknown media_browser message: " << message_string << std::endl;
-- 
cgit v1.2.3


From 27d2520685039f81a17d410a66dd8623156899ce Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Wed, 22 Sep 2010 16:52:37 -0700
Subject: fix for gcc

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

diff --git a/indra/llxuixml/llinitparam.h b/indra/llxuixml/llinitparam.h
index 83b27f5396..8cb5bd80fc 100644
--- a/indra/llxuixml/llinitparam.h
+++ b/indra/llxuixml/llinitparam.h
@@ -958,7 +958,7 @@ namespace LLInitParam
 			const self_t& typed_param = static_cast<const self_t&>(param);
 			if (!typed_param.isProvided() || name_stack.empty()) return;
 
-			typename const_iterator it = typed_param.mValues.begin();
+			const_iterator it = typed_param.mValues.begin();
 			for (typename std::vector<key_cache_t>::const_iterator key_it = typed_param.mCachedKeys.begin();
 				it != typed_param.mValues.end();
 				++key_it, ++it)
-- 
cgit v1.2.3


From b124d45b4ef714acfe629af554768950dcdd5f2c Mon Sep 17 00:00:00 2001
From: Monroe Linden <monroe@lindenlab.com>
Date: Wed, 22 Sep 2010 17:14:41 -0700
Subject: Fix "no newline at end of file".

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

diff --git a/indra/newview/llhints.cpp b/indra/newview/llhints.cpp
index a8274b3887..d837ed8205 100644
--- a/indra/newview/llhints.cpp
+++ b/indra/newview/llhints.cpp
@@ -378,4 +378,4 @@ void LLHints::showHints(const LLSD& show)
 {
 	bool visible = show.asBoolean();
 	gViewerWindow->getHintHolder()->setVisible(visible);
-}
\ No newline at end of file
+}
-- 
cgit v1.2.3


From 0034bdc38bb9f757edbfe2600ee19b3731a5c68b Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Wed, 22 Sep 2010 20:12:06 -0700
Subject: fixed build

---
 indra/newview/llbottomtray.cpp        | 16 +++++++++-------
 indra/newview/llnearbychathandler.cpp |  2 +-
 2 files changed, 10 insertions(+), 8 deletions(-)

diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp
index 9c8482c35d..33d006578d 100644
--- a/indra/newview/llbottomtray.cpp
+++ b/indra/newview/llbottomtray.cpp
@@ -161,12 +161,14 @@ public:
 		mGesturePanel = getChild<LLPanel>("gesture_panel");
 
 		// Hide "show_nearby_chat" button 
-		LLLineEditor* chat_box = mNearbyChatBar->getChatBox();
-		LLUICtrl* show_btn = mNearbyChatBar->getChild<LLUICtrl>("show_nearby_chat");
-		S32 delta_width = show_btn->getRect().getWidth();
-		show_btn->setVisible(FALSE);
-		chat_box->reshape(chat_box->getRect().getWidth() + delta_width, chat_box->getRect().getHeight());
-
+		if (mNearbyChatBar)
+		{
+			LLLineEditor* chat_box = mNearbyChatBar->getChatBox();
+			LLUICtrl* show_btn = mNearbyChatBar->getChild<LLUICtrl>("show_nearby_chat");
+			S32 delta_width = show_btn->getRect().getWidth();
+			show_btn->setVisible(FALSE);
+			chat_box->reshape(chat_box->getRect().getWidth() + delta_width, chat_box->getRect().getHeight());
+		}
 		return TRUE;
 	}
 
@@ -226,7 +228,7 @@ LLBottomTray::LLBottomTray(const LLSD&)
 	}
 
 	mImageDragIndication = LLUI::getUIImage(getString("DragIndicationImageName"));
-	mDesiredNearbyChatWidth = getChild<LLNearbyChatBar>("chat_bar")->getRect().getWidth();
+	mDesiredNearbyChatWidth = mNearbyChatBar ? mNearbyChatBar->getRect().getWidth() : 0;
 }
 
 LLBottomTray::~LLBottomTray()
diff --git a/indra/newview/llnearbychathandler.cpp b/indra/newview/llnearbychathandler.cpp
index f141817b3f..47d32e57fb 100644
--- a/indra/newview/llnearbychathandler.cpp
+++ b/indra/newview/llnearbychathandler.cpp
@@ -154,7 +154,7 @@ private:
 
 void LLNearbyChatScreenChannel::deactivateToast(LLToast* toast)
 {
-	std::vector<LLToast*>::iterator pos = std::find(m_active_toasts.begin(), m_active_toasts.end(), toast);
+	toast_vec_t::iterator pos = std::find(m_active_toasts.begin(), m_active_toasts.end(), toast->getHandle());
 
 	if (pos == m_active_toasts.end())
 	{
-- 
cgit v1.2.3


From c096e209abeb50d3de408dfe3d1b1cc14dfa6c80 Mon Sep 17 00:00:00 2001
From: Andrew Productengine <adyukov@productengine.com>
Date: Thu, 23 Sep 2010 11:39:29 +0300
Subject: STORM-201 FIXED Substituted link to widgets page on internal LL wiki
 in test floater with external one.

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

diff --git a/indra/newview/skins/default/xui/en/floater_test_widgets.xml b/indra/newview/skins/default/xui/en/floater_test_widgets.xml
index fb583114c0..13c850c86c 100644
--- a/indra/newview/skins/default/xui/en/floater_test_widgets.xml
+++ b/indra/newview/skins/default/xui/en/floater_test_widgets.xml
@@ -79,7 +79,7 @@
    follows="top|left"
    left="10"
    height="16">
-    For widget list see https://wiki.lindenlab.com/wiki/Viewer:UI/Widgets
+    For widget list see http://wiki.secondlife.com/wiki/XUI_Reference
   </text>
 
   <!-- First column -->
-- 
cgit v1.2.3


From 8e67a60528718541e9104cee29759b71bdb4d2d6 Mon Sep 17 00:00:00 2001
From: Aimee Linden <aimee@lindenlab.com>
Date: Thu, 23 Sep 2010 12:13:43 +0100
Subject: STORM-128 FIXED New friends list permission icons

* Added new icon artwork.
* Reordered the icons so that the most common ones are to the right, so that they change position as little as possible.
* Removed old 1.23 icons.
---
 indra/newview/llavatarlistitem.cpp                 |  24 ++++-----
 indra/newview/llavatarlistitem.h                   |   6 +--
 indra/newview/skins/default/textures/edit_mine.png | Bin 0 -> 639 bytes
 .../newview/skins/default/textures/edit_theirs.png | Bin 0 -> 634 bytes
 .../skins/default/textures/ff_edit_mine.tga        | Bin 1068 -> 0 bytes
 .../skins/default/textures/ff_edit_mine_button.tga | Bin 4140 -> 0 bytes
 .../skins/default/textures/ff_edit_theirs.tga      | Bin 1068 -> 0 bytes
 .../default/textures/ff_edit_theirs_button.tga     | Bin 4140 -> 0 bytes
 .../default/textures/ff_online_status_button.tga   | Bin 4140 -> 0 bytes
 .../skins/default/textures/ff_visible_map.tga      | Bin 812 -> 0 bytes
 .../default/textures/ff_visible_map_button.tga     | Bin 4140 -> 0 bytes
 .../skins/default/textures/ff_visible_online.tga   | Bin 1068 -> 0 bytes
 .../default/textures/ff_visible_online_button.tga  | Bin 4140 -> 0 bytes
 .../skins/default/textures/see_me_online.png       | Bin 0 -> 330 bytes
 .../newview/skins/default/textures/see_on_map.png  | Bin 0 -> 613 bytes
 indra/newview/skins/default/textures/textures.xml  |   8 +--
 .../default/xui/en/panel_avatar_list_item.xml      |  55 +++++++++++----------
 17 files changed, 49 insertions(+), 44 deletions(-)
 create mode 100644 indra/newview/skins/default/textures/edit_mine.png
 create mode 100644 indra/newview/skins/default/textures/edit_theirs.png
 delete mode 100644 indra/newview/skins/default/textures/ff_edit_mine.tga
 delete mode 100644 indra/newview/skins/default/textures/ff_edit_mine_button.tga
 delete mode 100644 indra/newview/skins/default/textures/ff_edit_theirs.tga
 delete mode 100644 indra/newview/skins/default/textures/ff_edit_theirs_button.tga
 delete mode 100644 indra/newview/skins/default/textures/ff_online_status_button.tga
 delete mode 100644 indra/newview/skins/default/textures/ff_visible_map.tga
 delete mode 100644 indra/newview/skins/default/textures/ff_visible_map_button.tga
 delete mode 100644 indra/newview/skins/default/textures/ff_visible_online.tga
 delete mode 100644 indra/newview/skins/default/textures/ff_visible_online_button.tga
 create mode 100644 indra/newview/skins/default/textures/see_me_online.png
 create mode 100644 indra/newview/skins/default/textures/see_on_map.png

diff --git a/indra/newview/llavatarlistitem.cpp b/indra/newview/llavatarlistitem.cpp
index 9f7699b3db..cc522a64e8 100644
--- a/indra/newview/llavatarlistitem.cpp
+++ b/indra/newview/llavatarlistitem.cpp
@@ -450,20 +450,20 @@ void LLAvatarListItem::initChildrenWidths(LLAvatarListItem* avatar_item)
 	//info btn width + padding
 	S32 info_btn_width = avatar_item->mProfileBtn->getRect().mLeft - avatar_item->mInfoBtn->getRect().mLeft;
 
-	// edit their objects permission icon width + padding
-	S32 permission_edit_theirs_width = avatar_item->mInfoBtn->getRect().mLeft - avatar_item->mIconPermissionEditTheirs->getRect().mLeft;
-
-	// edit my objects permission icon width + padding
-	S32 permission_edit_mine_width = avatar_item->mIconPermissionEditTheirs->getRect().mLeft - avatar_item->mIconPermissionEditMine->getRect().mLeft;
+	// online permission icon width + padding
+	S32 permission_online_width = avatar_item->mInfoBtn->getRect().mLeft - avatar_item->mIconPermissionOnline->getRect().mLeft;
 
 	// map permission icon width + padding
-	S32 permission_map_width = avatar_item->mIconPermissionEditMine->getRect().mLeft - avatar_item->mIconPermissionMap->getRect().mLeft;
+	S32 permission_map_width = avatar_item->mIconPermissionOnline->getRect().mLeft - avatar_item->mIconPermissionMap->getRect().mLeft;
 
-	// online permission icon width + padding
-	S32 permission_online_width = avatar_item->mIconPermissionMap->getRect().mLeft - avatar_item->mIconPermissionOnline->getRect().mLeft;
+	// edit my objects permission icon width + padding
+	S32 permission_edit_mine_width = avatar_item->mIconPermissionMap->getRect().mLeft - avatar_item->mIconPermissionEditMine->getRect().mLeft;
+
+	// edit their objects permission icon width + padding
+	S32 permission_edit_theirs_width = avatar_item->mIconPermissionEditMine->getRect().mLeft - avatar_item->mIconPermissionEditTheirs->getRect().mLeft;
 
 	// last interaction time textbox width + padding
-	S32 last_interaction_time_width = avatar_item->mIconPermissionOnline->getRect().mLeft - avatar_item->mLastInteractionTime->getRect().mLeft;
+	S32 last_interaction_time_width = avatar_item->mIconPermissionEditTheirs->getRect().mLeft - avatar_item->mLastInteractionTime->getRect().mLeft;
 
 	// avatar icon width + padding
 	S32 icon_width = avatar_item->mAvatarName->getRect().mLeft - avatar_item->mAvatarIcon->getRect().mLeft;
@@ -475,10 +475,10 @@ void LLAvatarListItem::initChildrenWidths(LLAvatarListItem* avatar_item)
 	sChildrenWidths[--index] = icon_width;
 	sChildrenWidths[--index] = 0; // for avatar name we don't need its width, it will be calculated as "left available space"
 	sChildrenWidths[--index] = last_interaction_time_width;
-	sChildrenWidths[--index] = permission_online_width;
-	sChildrenWidths[--index] = permission_map_width;
-	sChildrenWidths[--index] = permission_edit_mine_width;
 	sChildrenWidths[--index] = permission_edit_theirs_width;
+	sChildrenWidths[--index] = permission_edit_mine_width;
+	sChildrenWidths[--index] = permission_map_width;
+	sChildrenWidths[--index] = permission_online_width;
 	sChildrenWidths[--index] = info_btn_width;
 	sChildrenWidths[--index] = profile_btn_width;
 	sChildrenWidths[--index] = speaking_indicator_width;
diff --git a/indra/newview/llavatarlistitem.h b/indra/newview/llavatarlistitem.h
index ffb988b2ab..52187284eb 100644
--- a/indra/newview/llavatarlistitem.h
+++ b/indra/newview/llavatarlistitem.h
@@ -143,10 +143,10 @@ private:
 		ALIC_SPEAKER_INDICATOR,
 		ALIC_PROFILE_BUTTON,
 		ALIC_INFO_BUTTON,
-		ALIC_PERMISSION_EDIT_THEIRS,
-		ALIC_PERMISSION_EDIT_MINE,
-		ALIC_PERMISSION_MAP,
 		ALIC_PERMISSION_ONLINE,
+		ALIC_PERMISSION_MAP,
+		ALIC_PERMISSION_EDIT_MINE,
+		ALIC_PERMISSION_EDIT_THEIRS,
 		ALIC_INTERACTION_TIME,
 		ALIC_NAME,
 		ALIC_ICON,
diff --git a/indra/newview/skins/default/textures/edit_mine.png b/indra/newview/skins/default/textures/edit_mine.png
new file mode 100644
index 0000000000..a0bc7efd25
Binary files /dev/null and b/indra/newview/skins/default/textures/edit_mine.png differ
diff --git a/indra/newview/skins/default/textures/edit_theirs.png b/indra/newview/skins/default/textures/edit_theirs.png
new file mode 100644
index 0000000000..ed36ad7cfc
Binary files /dev/null and b/indra/newview/skins/default/textures/edit_theirs.png differ
diff --git a/indra/newview/skins/default/textures/ff_edit_mine.tga b/indra/newview/skins/default/textures/ff_edit_mine.tga
deleted file mode 100644
index 8f0c35b98f..0000000000
Binary files a/indra/newview/skins/default/textures/ff_edit_mine.tga and /dev/null differ
diff --git a/indra/newview/skins/default/textures/ff_edit_mine_button.tga b/indra/newview/skins/default/textures/ff_edit_mine_button.tga
deleted file mode 100644
index 07627a65c5..0000000000
Binary files a/indra/newview/skins/default/textures/ff_edit_mine_button.tga and /dev/null differ
diff --git a/indra/newview/skins/default/textures/ff_edit_theirs.tga b/indra/newview/skins/default/textures/ff_edit_theirs.tga
deleted file mode 100644
index 005ada2dea..0000000000
Binary files a/indra/newview/skins/default/textures/ff_edit_theirs.tga and /dev/null differ
diff --git a/indra/newview/skins/default/textures/ff_edit_theirs_button.tga b/indra/newview/skins/default/textures/ff_edit_theirs_button.tga
deleted file mode 100644
index 798ef641d3..0000000000
Binary files a/indra/newview/skins/default/textures/ff_edit_theirs_button.tga and /dev/null differ
diff --git a/indra/newview/skins/default/textures/ff_online_status_button.tga b/indra/newview/skins/default/textures/ff_online_status_button.tga
deleted file mode 100644
index 9076df6b9e..0000000000
Binary files a/indra/newview/skins/default/textures/ff_online_status_button.tga and /dev/null differ
diff --git a/indra/newview/skins/default/textures/ff_visible_map.tga b/indra/newview/skins/default/textures/ff_visible_map.tga
deleted file mode 100644
index a4dad78dad..0000000000
Binary files a/indra/newview/skins/default/textures/ff_visible_map.tga and /dev/null differ
diff --git a/indra/newview/skins/default/textures/ff_visible_map_button.tga b/indra/newview/skins/default/textures/ff_visible_map_button.tga
deleted file mode 100644
index 8d13adee3f..0000000000
Binary files a/indra/newview/skins/default/textures/ff_visible_map_button.tga and /dev/null differ
diff --git a/indra/newview/skins/default/textures/ff_visible_online.tga b/indra/newview/skins/default/textures/ff_visible_online.tga
deleted file mode 100644
index 74e3a4e318..0000000000
Binary files a/indra/newview/skins/default/textures/ff_visible_online.tga and /dev/null differ
diff --git a/indra/newview/skins/default/textures/ff_visible_online_button.tga b/indra/newview/skins/default/textures/ff_visible_online_button.tga
deleted file mode 100644
index 08a6cbedd9..0000000000
Binary files a/indra/newview/skins/default/textures/ff_visible_online_button.tga and /dev/null differ
diff --git a/indra/newview/skins/default/textures/see_me_online.png b/indra/newview/skins/default/textures/see_me_online.png
new file mode 100644
index 0000000000..52dc2ae74f
Binary files /dev/null and b/indra/newview/skins/default/textures/see_me_online.png differ
diff --git a/indra/newview/skins/default/textures/see_on_map.png b/indra/newview/skins/default/textures/see_on_map.png
new file mode 100644
index 0000000000..200e649818
Binary files /dev/null and b/indra/newview/skins/default/textures/see_on_map.png differ
diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index 273531f9b2..2776c07202 100644
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -360,10 +360,10 @@ with the same filename but different name
   <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="Permission_Visible_Online" file_name="ff_visible_online_button.tga" preload="false" />
-  <texture name="Permission_Visible_Map" file_name="ff_visible_map_button.tga" preload="false" />
-  <texture name="Permission_Edit_Objects_Mine" file_name="ff_edit_mine_button.tga" preload="false" />
-  <texture name="Permission_Edit_Objects_Theirs" file_name="ff_edit_theirs_button.tga" preload="false" />
+  <texture name="Permission_Visible_Online" file_name="see_me_online.png" preload="false" />
+  <texture name="Permission_Visible_Map" file_name="see_on_map.png" preload="false" />
+  <texture name="Permission_Edit_Objects_Mine" file_name="edit_mine.png" preload="false" />
+  <texture name="Permission_Edit_Objects_Theirs" file_name="edit_theirs.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" />
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 b385654010..6f3629cc8f 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
@@ -19,6 +19,11 @@
     <string name="FormatMonths">[COUNT]mon</string>
     <string name="FormatYears">[COUNT]y</string>
  
+    <!--
+    *NOTE: llavatarlistitem.cpp lays these controls out depending on which
+           ones are visible. Trying to change their order here will break it
+           ... which kinda sucks.
+    -->
     <icon
      follows="top|right|left"
      height="24"
@@ -71,49 +76,49 @@
      value="0s"
      width="35" />
     <icon
-     height="20"
+     height="16"
      follows="right"
-     image_name="Permission_Visible_Online"
+     image_name="Permission_Edit_Objects_Theirs"
      layout="topleft"
      left_pad="3"
-     right="-141"
-     name="permission_online_icon"
-     tool_tip="This friend can see when you&apos;re online"
-     top="2"
-     width="20" />
+     right="-129"
+     name="permission_edit_theirs_icon"
+     tool_tip="You can edit this friend&apos;s objects"
+     top="4"
+     width="16" />
     <icon
-     height="20"
+     height="16"
      follows="right"
-     image_name="Permission_Visible_Map"
+     image_name="Permission_Edit_Objects_Mine"
      layout="topleft"
      left_pad="3"
-     tool_tip="This friend can locate you on the map"
-     right="-118"
-     name="permission_map_icon"
+     right="-110"
+     name="permission_edit_mine_icon"
+     tool_tip="This friend can edit, delete or take your objects"
      top_delta="0"
-     width="20" />
+     width="16" />
     <icon
-     height="20"
+     height="16"
      follows="right"
-     image_name="Permission_Edit_Objects_Mine"
+     image_name="Permission_Visible_Map"
      layout="topleft"
      left_pad="3"
-     right="-95"
-     name="permission_edit_mine_icon"
-     tool_tip="This friend can edit, delete or take your objects"
+     tool_tip="This friend can locate you on the map"
+     right="-91"
+     name="permission_map_icon"
      top_delta="0"
-     width="20" />
+     width="16" />
     <icon
-     height="20"
+     height="16"
      follows="right"
-     image_name="Permission_Edit_Objects_Theirs"
+     image_name="Permission_Visible_Online"
      layout="topleft"
      left_pad="3"
      right="-72"
-     name="permission_edit_theirs_icon"
-     tool_tip="You can edit this friend&apos;s objects"
+     name="permission_online_icon"
+     tool_tip="This friend can see when you&apos;re online"
      top_delta="0"
-     width="20" />
+     width="16" />
     <button
      follows="right"
      height="16"
@@ -124,7 +129,7 @@
      right="-53"
      name="info_btn"
      tab_stop="false"
-     top_delta="2"
+     top_delta="0"
      width="16" />
     <button
      follows="right"
-- 
cgit v1.2.3


From 7f0bcfae49169f1c76806cf857a920a6a2396bf9 Mon Sep 17 00:00:00 2001
From: Aimee Linden <aimee@lindenlab.com>
Date: Thu, 23 Sep 2010 13:17:58 +0100
Subject: STORM-128 SUPPLEMENTARY Move new permissions icons into the icons
 directory.

---
 indra/newview/skins/default/textures/edit_mine.png        | Bin 639 -> 0 bytes
 indra/newview/skins/default/textures/edit_theirs.png      | Bin 634 -> 0 bytes
 indra/newview/skins/default/textures/icons/edit_mine.png  | Bin 0 -> 639 bytes
 .../newview/skins/default/textures/icons/edit_theirs.png  | Bin 0 -> 634 bytes
 .../skins/default/textures/icons/see_me_online.png        | Bin 0 -> 330 bytes
 indra/newview/skins/default/textures/icons/see_on_map.png | Bin 0 -> 613 bytes
 indra/newview/skins/default/textures/see_me_online.png    | Bin 330 -> 0 bytes
 indra/newview/skins/default/textures/see_on_map.png       | Bin 613 -> 0 bytes
 indra/newview/skins/default/textures/textures.xml         |   8 ++++----
 9 files changed, 4 insertions(+), 4 deletions(-)
 delete mode 100644 indra/newview/skins/default/textures/edit_mine.png
 delete mode 100644 indra/newview/skins/default/textures/edit_theirs.png
 create mode 100644 indra/newview/skins/default/textures/icons/edit_mine.png
 create mode 100644 indra/newview/skins/default/textures/icons/edit_theirs.png
 create mode 100644 indra/newview/skins/default/textures/icons/see_me_online.png
 create mode 100644 indra/newview/skins/default/textures/icons/see_on_map.png
 delete mode 100644 indra/newview/skins/default/textures/see_me_online.png
 delete mode 100644 indra/newview/skins/default/textures/see_on_map.png

diff --git a/indra/newview/skins/default/textures/edit_mine.png b/indra/newview/skins/default/textures/edit_mine.png
deleted file mode 100644
index a0bc7efd25..0000000000
Binary files a/indra/newview/skins/default/textures/edit_mine.png and /dev/null differ
diff --git a/indra/newview/skins/default/textures/edit_theirs.png b/indra/newview/skins/default/textures/edit_theirs.png
deleted file mode 100644
index ed36ad7cfc..0000000000
Binary files a/indra/newview/skins/default/textures/edit_theirs.png and /dev/null differ
diff --git a/indra/newview/skins/default/textures/icons/edit_mine.png b/indra/newview/skins/default/textures/icons/edit_mine.png
new file mode 100644
index 0000000000..a0bc7efd25
Binary files /dev/null and b/indra/newview/skins/default/textures/icons/edit_mine.png differ
diff --git a/indra/newview/skins/default/textures/icons/edit_theirs.png b/indra/newview/skins/default/textures/icons/edit_theirs.png
new file mode 100644
index 0000000000..ed36ad7cfc
Binary files /dev/null and b/indra/newview/skins/default/textures/icons/edit_theirs.png differ
diff --git a/indra/newview/skins/default/textures/icons/see_me_online.png b/indra/newview/skins/default/textures/icons/see_me_online.png
new file mode 100644
index 0000000000..52dc2ae74f
Binary files /dev/null and b/indra/newview/skins/default/textures/icons/see_me_online.png differ
diff --git a/indra/newview/skins/default/textures/icons/see_on_map.png b/indra/newview/skins/default/textures/icons/see_on_map.png
new file mode 100644
index 0000000000..200e649818
Binary files /dev/null and b/indra/newview/skins/default/textures/icons/see_on_map.png differ
diff --git a/indra/newview/skins/default/textures/see_me_online.png b/indra/newview/skins/default/textures/see_me_online.png
deleted file mode 100644
index 52dc2ae74f..0000000000
Binary files a/indra/newview/skins/default/textures/see_me_online.png and /dev/null differ
diff --git a/indra/newview/skins/default/textures/see_on_map.png b/indra/newview/skins/default/textures/see_on_map.png
deleted file mode 100644
index 200e649818..0000000000
Binary files a/indra/newview/skins/default/textures/see_on_map.png and /dev/null differ
diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index 2776c07202..fff118d69a 100644
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -360,10 +360,10 @@ with the same filename but different name
   <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="Permission_Visible_Online" file_name="see_me_online.png" preload="false" />
-  <texture name="Permission_Visible_Map" file_name="see_on_map.png" preload="false" />
-  <texture name="Permission_Edit_Objects_Mine" file_name="edit_mine.png" preload="false" />
-  <texture name="Permission_Edit_Objects_Theirs" file_name="edit_theirs.png" preload="false" />
+  <texture name="Permission_Visible_Online" file_name="icons/see_me_online.png" preload="false" />
+  <texture name="Permission_Visible_Map" file_name="icons/see_on_map.png" preload="false" />
+  <texture name="Permission_Edit_Objects_Mine" file_name="icons/edit_mine.png" preload="false" />
+  <texture name="Permission_Edit_Objects_Theirs" file_name="icons/edit_theirs.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" />
-- 
cgit v1.2.3


From 438e42edcfaa4de955440c58271d295c20ee5989 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Thu, 23 Sep 2010 13:45:12 +0100
Subject: Linux rebuild of llqtwebkit from the following sources:

revision aacdf69cbf5aa12d77c179296e31ef643ed1ef4a of http://qt.gitorious.org/+lindenqt/qt/lindenqt (currently head of the 'lindenqt' branch)
revision 81ab5ae326f0 of http://hg.secondlife.com/llqtwebkit (currently head of the default branch)
---
 install.xml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/install.xml b/install.xml
index 23d51f92dd..5a9d704191 100644
--- a/install.xml
+++ b/install.xml
@@ -988,9 +988,9 @@ anguage Infrstructure (CLI) international standard</string>
           <key>linux</key>
           <map>
             <key>md5sum</key>
-            <string>414d72dd59e3d83c96f0e1531360792e</string>
+            <string>5d743c93b970abe685b185de83001a6e</string>
             <key>url</key>
-            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-linux-20100618.tar.bz2</uri>
+            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-linux-qt4.6-20100923.tar.bz2</uri>
           </map>
           <key>windows</key>
           <map>
-- 
cgit v1.2.3


From 0f391c6ac9734a6ed121c0930ba622bcd4284aa9 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Thu, 23 Sep 2010 13:46:00 +0100
Subject: Backed out changeset acb451f83a9d original commit log for
 acb451f83a9d was: "Temporary changes to allow the viewer to build against an
 older version of llqtwebkit. NOTE: once updated builds of llqtwebkit are
 available on all platforms, this changeset should be backed out."

So, yes, I'm backing that out.
---
 indra/media_plugins/webkit/media_plugin_webkit.cpp | 17 -----------------
 1 file changed, 17 deletions(-)

diff --git a/indra/media_plugins/webkit/media_plugin_webkit.cpp b/indra/media_plugins/webkit/media_plugin_webkit.cpp
index c47052bae9..bd1a44a930 100644
--- a/indra/media_plugins/webkit/media_plugin_webkit.cpp
+++ b/indra/media_plugins/webkit/media_plugin_webkit.cpp
@@ -304,11 +304,7 @@ private:
 		LLQtWebKit::getInstance()->enableJavascript( mJavascriptEnabled );
 		
 		// create single browser window
-#if LLQTWEBKIT_API_VERSION < 2
-		mBrowserWindowId = LLQtWebKit::getInstance()->createBrowserWindow( mWidth, mHeight);
-#else
 		mBrowserWindowId = LLQtWebKit::getInstance()->createBrowserWindow( mWidth, mHeight, mTarget);
-#endif
 
 		// tell LLQtWebKit about the size of the browser window
 		LLQtWebKit::getInstance()->setSize( mBrowserWindowId, mWidth, mHeight );
@@ -509,14 +505,9 @@ private:
 	void onClickLinkHref(const EventType& event)
 	{
 		LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "click_href");
-#if LLQTWEBKIT_API_VERSION < 2
-		message.setValue("uri", event.getStringValue());
-		message.setValue("target", event.getStringValue2());
-#else
 		message.setValue("uri", event.getEventUri());
 		message.setValue("target", event.getStringValue());
 		message.setValue("uuid", event.getStringValue2());
-#endif
 		sendMessage(message);
 	}
 	
@@ -525,11 +516,7 @@ private:
 	void onClickLinkNoFollow(const EventType& event)
 	{
 		LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "click_nofollow");
-#if LLQTWEBKIT_API_VERSION < 2
-		message.setValue("uri", event.getStringValue());
-#else
 		message.setValue("uri", event.getEventUri());
-#endif
 		sendMessage(message);
 	}
 	
@@ -551,9 +538,7 @@ private:
 	void onWindowCloseRequested(const EventType& event)
 	{
 		LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "close_request");
-#if LLQTWEBKIT_API_VERSION >= 2
 		message.setValue("uuid", event.getStringValue());
-#endif
 		sendMessage(message);
 	}
 
@@ -1214,7 +1199,6 @@ void MediaPluginWebKit::receiveMessage(const char *message_string)
 					}
 				}
 			}
-#if LLQTWEBKIT_API_VERSION >= 2
 			else if(message_name == "proxy_window_opened")
 			{
 				std::string target = message_in.getValue("target");
@@ -1226,7 +1210,6 @@ void MediaPluginWebKit::receiveMessage(const char *message_string)
 				std::string uuid = message_in.getValue("uuid");
 				LLQtWebKit::getInstance()->proxyWindowClosed(mBrowserWindowId, uuid);
 			}
-#endif
 			else
 			{
 //				std::cerr << "MediaPluginWebKit::receiveMessage: unknown media_browser message: " << message_string << std::endl;
-- 
cgit v1.2.3


From 4ddf507d282a9ca287eb8176ff9ec4776a756cd4 Mon Sep 17 00:00:00 2001
From: Andrew Productengine <adyukov@productengine.com>
Date: Thu, 23 Sep 2010 19:25:30 +0300
Subject: STORM-153 ADDITIONAL FIX Fixed unlocalized chiclet tooltip and
 syswell session names for adhoc.

Bug was caused by using incorrect (unlocalized) name of session as argument for some methods after the session name was localized in constructor.

- Used correct (localized) session name instead.
---
 indra/newview/llimview.cpp | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index 493398c68a..7a81efeed7 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -622,7 +622,10 @@ bool LLIMModel::newSession(const LLUUID& session_id, const std::string& name, co
 	LLIMSession* session = new LLIMSession(session_id, name, type, other_participant_id, ids, voice);
 	mId2SessionMap[session_id] = session;
 
-	LLIMMgr::getInstance()->notifyObserverSessionAdded(session_id, name, other_participant_id);
+	// When notifying observer, name of session is used instead of "name", because they may not be the
+	// same if it is an adhoc session (in this case name is localized in LLIMSession constructor).
+	std::string session_name = LLIMModel::getInstance()->getName(session_id);
+	LLIMMgr::getInstance()->notifyObserverSessionAdded(session_id, session_name, other_participant_id);
 
 	return true;
 
@@ -2277,6 +2280,9 @@ void LLIMMgr::addMessage(
 	if (new_session)
 	{
 		LLIMModel::getInstance()->newSession(new_session_id, fixed_session_name, dialog, other_participant_id);
+		// When addidng messages further here, name of session is used instead of "name", because they may not be the
+		// same if it is an adhoc session (in this case name is localized in LLIMSession constructor).
+		fixed_session_name = LLIMModel::getInstance()->getName(new_session_id);
 
 		// When we get a new IM, and if you are a god, display a bit
 		// of information about the source. This is to help liaisons
@@ -2296,13 +2302,13 @@ void LLIMMgr::addMessage(
 			//<< "*** region_id: " << region_id << std::endl
 			//<< "*** position: " << position << std::endl;
 
-			LLIMModel::instance().addMessage(new_session_id, from, other_participant_id, bonus_info.str());
+			LLIMModel::instance().addMessage(new_session_id, fixed_session_name, other_participant_id, bonus_info.str());
 		}
 
 		make_ui_sound("UISndNewIncomingIMSession");
 	}
 
-	LLIMModel::instance().addMessage(new_session_id, from, other_participant_id, msg);
+	LLIMModel::instance().addMessage(new_session_id, fixed_session_name, other_participant_id, msg);
 }
 
 void LLIMMgr::addSystemMessage(const LLUUID& session_id, const std::string& message_name, const LLSD& args)
-- 
cgit v1.2.3


From 78e52f40424cb8336ab5d06c9ea37e16cb2b40a7 Mon Sep 17 00:00:00 2001
From: "Christian Goetze (CG)" <cg@lindenlab.com>
Date: Thu, 23 Sep 2010 12:55:20 -0700
Subject: Add support for platform specific permanent quick links to the
 installer

---
 BuildParams | 1 +
 build.sh    | 1 +
 2 files changed, 2 insertions(+)

diff --git a/BuildParams b/BuildParams
index acc3904d82..7a684c61cf 100644
--- a/BuildParams
+++ b/BuildParams
@@ -84,6 +84,7 @@ brad-parabuild.build_server_tests = false
 
 cg_viewer-development_lenny.collect_metrics = true
 cg_viewer-development_lenny.show_changes_since = 4b140ce7839d
+cg_viewer-development_lenny.email = cg@lindenlab.com
 
 # ========================================
 # gooey
diff --git a/build.sh b/build.sh
index 88faf12473..25ff0f368d 100755
--- a/build.sh
+++ b/build.sh
@@ -284,6 +284,7 @@ then
       succeeded=$build_coverity
     else
       upload_item installer "$package" binary/octet-stream
+      upload_item quicklink "$package" binary/octet-stream
 
       # Upload crash reporter files.
       case "$last_built_variant" in
-- 
cgit v1.2.3


From 825724077721a07d4c2f803630ae62ad0e3f589f 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(-)

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 7f929cc288b1aa2dfa128da619d2d10a29a73da0 Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Thu, 23 Sep 2010 15:27:37 -0700
Subject: dummy commit to track experience team work: EXP-11 UI Optimizations
 EXP-12 Selective Pop-up Blocking EXP-5 UI Hints EXP-6 Side Panel Tutorial
 EXP-3 Enable Pop-up Web Content EXP-13 Javascript Handling EXP-56 Add support
 for file picking to LLQtWebKit and hook up to media plugin EXP-59 Some
 buttons disappear when clicked QAR-3491 "Tutorial in the side panel" QAR-3448
 "UI Hints Experience Sprint 1" QAR-3440 "Pop-Up Web Content in Viewer
 Experience Sprint 1 QAR" QAR-3439 "UI Performance Improvements Experience
 Sprint 1 QAR"

---
 indra/newview/featuretable.txt | 1 -
 1 file changed, 1 deletion(-)

diff --git a/indra/newview/featuretable.txt b/indra/newview/featuretable.txt
index e3fc9d4949..721fe81a3c 100644
--- a/indra/newview/featuretable.txt
+++ b/indra/newview/featuretable.txt
@@ -550,4 +550,3 @@ list NVIDIA_GeForce_Go_7800
 RenderShaderLightingMaxLevel	1	2
 list NVIDIA_GeForce_Go_7900
 RenderShaderLightingMaxLevel	1	2
-
-- 
cgit v1.2.3


From 568496eb323e575f9b4bed7866dec0aeef5d7eb4 Mon Sep 17 00:00:00 2001
From: Monroe Linden <monroe@lindenlab.com>
Date: Thu, 23 Sep 2010 16:30:30 -0700
Subject: Fixed some build errors in llmediaplugintest.cpp.

Reviewed by Richard.
---
 indra/test_apps/llplugintest/llmediaplugintest.cpp | 62 +++++++++++-----------
 1 file changed, 30 insertions(+), 32 deletions(-)

diff --git a/indra/test_apps/llplugintest/llmediaplugintest.cpp b/indra/test_apps/llplugintest/llmediaplugintest.cpp
index 1ca328567e..873fa23db8 100644
--- a/indra/test_apps/llplugintest/llmediaplugintest.cpp
+++ b/indra/test_apps/llplugintest/llmediaplugintest.cpp
@@ -2160,39 +2160,32 @@ void LLMediaPluginTest::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent e
 			// retrieve the event parameters
 			std::string url = self->getClickURL();
 			std::string target = self->getClickTarget();
-			U32 target_type = self->getClickTargetType();
-
-			switch (target_type)
+			
+			if(target == "_external")
 			{
-				case LLPluginClassMedia::TARGET_NONE:
-					// ignore this click
-				break;
-				
-				case LLPluginClassMedia::TARGET_EXTERNAL:
-					// this should open in an external browser, but since this is a test app we don't care.
-				break;
-				
-				case LLPluginClassMedia::TARGET_BLANK:
-					// Create a new panel with the specified URL.
-					addMediaPanel(url);
-				break;
-
-				case LLPluginClassMedia::TARGET_OTHER:
-					mediaPanel *target_panel = findMediaPanel(target);
-					if(target_panel)
-					{
-						target_panel = replaceMediaPanel(target_panel, url);
-					}
-					else
-					{
-						target_panel = addMediaPanel(url);
-					}
+				// this should open in an external browser, but since this is a test app we don't care.
+			}
+			else if(target == "_blank")
+			{
+				// Create a new panel with the specified URL.
+				addMediaPanel(url);
+			}
+			else // other named target
+			{
+				mediaPanel *target_panel = findMediaPanel(target);
+				if(target_panel)
+				{
+					target_panel = replaceMediaPanel(target_panel, url);
+				}
+				else
+				{
+					target_panel = addMediaPanel(url);
+				}
 
-					if(target_panel)
-					{
-						target_panel->mTarget = target;
-					}
-				break;
+				if(target_panel)
+				{
+					target_panel->mTarget = target;
+				}
 			}
 		}
 		break;
@@ -2220,7 +2213,12 @@ void LLMediaPluginTest::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent e
 		break;
 
 		case MEDIA_EVENT_GEOMETRY_CHANGE:
-			std::cerr <<  "Media event:  MEDIA_EVENT_GEOMETRY_CHANGE, uuid is " << self->getClickUUID() << ", rect is " << self->getGeometryRect() << std::endl;
+			std::cerr <<  "Media event:  MEDIA_EVENT_GEOMETRY_CHANGE, uuid is " << self->getClickUUID() 
+				<< ", x = " << self->getGeometryX() 
+				<< ", y = " << self->getGeometryY() 
+				<< ", width = " << self->getGeometryWidth() 
+				<< ", height = " << self->getGeometryHeight() 
+				<< std::endl;
 		break;
 	}
 }
-- 
cgit v1.2.3


From df25093a76b613ebffe9195c2d0ff4455f3514b3 Mon Sep 17 00:00:00 2001
From: Richard Linden <none@none>
Date: Thu, 23 Sep 2010 16:45:40 -0700
Subject: fix for llviewernetwork integration test

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

diff --git a/indra/newview/llviewernetwork.cpp b/indra/newview/llviewernetwork.cpp
index 7f7c245717..b91e407c6d 100644
--- a/indra/newview/llviewernetwork.cpp
+++ b/indra/newview/llviewernetwork.cpp
@@ -304,7 +304,12 @@ void LLGridManager::initialize(const std::string& grid_file)
 		addGrid(grid);		
 	}
 
-	gSavedSettings.getControl("CurrentGrid")->getSignal()->connect(boost::bind(&LLGridManager::updateIsInProductionGrid, this));
+	LLControlVariablePtr grid_control = gSavedSettings.getControl("CurrentGrid");
+	if (grid_control.notNull())
+	{
+		grid_control->getSignal()->connect(boost::bind(&LLGridManager::updateIsInProductionGrid, this));
+	}
+
 	// since above only triggers on changes, trigger the callback manually to initialize state
 	updateIsInProductionGrid();
 
@@ -499,7 +504,8 @@ void LLGridManager::setGridChoice(const std::string& grid)
 		addGrid(grid_data);		
 	}
 	mGrid = grid;
-	gSavedSettings.setString("CurrentGrid", grid);
+	gSavedSettings.setString("CurrentGrid", grid); 
+	updateIsInProductionGrid();
 }
 
 std::string LLGridManager::getGridByLabel( const std::string &grid_label, bool case_sensitive)
-- 
cgit v1.2.3


From 4f3339ff99af47e6a21f555489cdc9eb66c5ea06 Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Wed, 29 Sep 2010 20:43:41 +0300
Subject: STORM-227 FIXED Made long cache location in Preferences->Setup
 readable.

Changes:
- The line editor is now scrollable.
- Its value is duplicated in the tool-tip.

Technical notes:
If you set the "enabled" param of a line editor to "false", that will disable text selection in the widget.
However, if a line editor is initially enabled and then gets disabled with setEnabled(FALSE), it will remain selectable.
It looks like bug, but I'm not going to fix it now to not introduce issues like this one.
Instead, I'm applying to workaround which is to enable the widget initially and disable later, thus keeping it read-only but selectable.
---
 indra/newview/llfloaterpreference.cpp                         | 11 +++++++++--
 indra/newview/llfloaterpreference.h                           |  2 ++
 .../newview/skins/default/xui/en/panel_preferences_setup.xml  |  1 -
 3 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index ff6df548c4..41f85ae29d 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -323,8 +323,9 @@ BOOL LLFloaterPreference::postBuild()
 	if (!tabcontainer->selectTab(gSavedSettings.getS32("LastPrefTab")))
 		tabcontainer->selectFirstTab();
 
+	getChild<LLUICtrl>("cache_location")->setEnabled(FALSE); // make it read-only but selectable (STORM-227)
 	std::string cache_location = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "");
-	getChild<LLUICtrl>("cache_location")->setValue(cache_location);
+	setCacheLocation(cache_location);
 
 	// if floater is opened before login set default localized busy message
 	if (LLStartUp::getStartupState() < STATE_STARTED)
@@ -414,7 +415,7 @@ void LLFloaterPreference::apply()
 	fov_slider->setMaxValue(LLViewerCamera::getInstance()->getMaxView());
 	
 	std::string cache_location = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "");
-	getChild<LLUICtrl>("cache_location")->setValue(cache_location);		
+	setCacheLocation(cache_location);
 	
 	LLViewerMedia::setCookiesEnabled(getChild<LLUICtrl>("cookies_enabled")->getValue());
 	
@@ -1310,6 +1311,12 @@ void LLFloaterPreference::getUIColor(LLUICtrl* ctrl, const LLSD& param)
 	color_swatch->setOriginal(LLUIColorTable::instance().getColor(param.asString()));
 }
 
+void LLFloaterPreference::setCacheLocation(const LLStringExplicit& location)
+{
+	LLUICtrl* cache_location_editor = getChild<LLUICtrl>("cache_location");
+	cache_location_editor->setValue(location);
+	cache_location_editor->setToolTip(location);
+}
 
 //----------------------------------------------------------------------------
 static LLRegisterPanelClassWrapper<LLPanelPreference> t_places("panel_preference");
diff --git a/indra/newview/llfloaterpreference.h b/indra/newview/llfloaterpreference.h
index d1e15d5ab8..e99731b92e 100644
--- a/indra/newview/llfloaterpreference.h
+++ b/indra/newview/llfloaterpreference.h
@@ -103,6 +103,8 @@ protected:
 
 public:
 
+	void setCacheLocation(const LLStringExplicit& location);
+
 	void onClickSetCache();
 	void onClickResetCache();
 	void onClickSkin(LLUICtrl* ctrl,const LLSD& userdata);
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 879781f746..140d16e37f 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
@@ -195,7 +195,6 @@
    control_name="CacheLocationTopFolder"
    border_style="line"
    border_thickness="1"
-   enabled="false"
    follows="left|top"
    font="SansSerif"
    height="23"
-- 
cgit v1.2.3


From 62a46df736cf88d7a2ad4bd55e285e4026328eb9 Mon Sep 17 00:00:00 2001
From: Seth ProductEngine <slitovchuk@productengine.com>
Date: Wed, 29 Sep 2010 21:44:30 +0300
Subject: STORM-269 FIXED Added strings for missing land types in strings.xml
 If localized land type name is not found it is displayed as original string
 to avoid MissingString error.

---
 indra/newview/llfloaterland.cpp                | 5 ++++-
 indra/newview/skins/default/xui/en/strings.xml | 2 ++
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp
index df0d22561e..e124263db5 100644
--- a/indra/newview/llfloaterland.cpp
+++ b/indra/newview/llfloaterland.cpp
@@ -565,7 +565,10 @@ void LLPanelLandGeneral::refresh()
 		if (regionp)
 		{
 			insert_maturity_into_textbox(mContentRating, gFloaterView->getParentFloater(this), MATURITY);
-			mLandType->setText(LLTrans::getString(regionp->getSimProductName()));
+
+			std::string land_type;
+			bool is_land_type_localized = LLTrans::findString(land_type, regionp->getSimProductName());
+			mLandType->setText(is_land_type_localized ? land_type : regionp->getSimProductName());
 		}
 
 		// estate owner/manager cannot edit other parts of the parcel
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index 6b3fd9ff9e..8470d91b8c 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -321,6 +321,8 @@
 
 	<!-- For land type back from the simulator -->
 	<string name="Estate / Full Region">Estate / Full Region</string>
+	<string name="Estate / Homestead">Estate / Homestead</string>
+	<string name="Mainland / Homestead">Mainland / Homestead</string>
 	<string name="Mainland / Full Region">Mainland / Full Region</string>
 
 	<!-- File load/save dialogs -->
-- 
cgit v1.2.3


From d3a9d6a6cef6630995c652b4cc04c8807dbe6d4e Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Fri, 24 Sep 2010 15:44:26 +0100
Subject: trivial indentation changes while I'm poking around here.
 (transplanted from 01d8534678f5613c924a036128addf6b7447c92a)

---
 indra/llui/llnotifications.cpp | 8 ++++----
 indra/llui/llnotifications.h   | 2 +-
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/indra/llui/llnotifications.cpp b/indra/llui/llnotifications.cpp
index 67b3c5cfce..30cd85619e 100644
--- a/indra/llui/llnotifications.cpp
+++ b/indra/llui/llnotifications.cpp
@@ -1060,12 +1060,12 @@ std::string LLNotificationChannel::summarize()
 // LLNotifications implementation
 // ---
 LLNotifications::LLNotifications() : LLNotificationChannelBase(LLNotificationFilters::includeEverything,
-															   LLNotificationComparators::orderByUUID()),
-									mIgnoreAllNotifications(false)
+							       LLNotificationComparators::orderByUUID()),
+				     mIgnoreAllNotifications(false)
 {
 	LLUICtrl::CommitCallbackRegistry::currentRegistrar().add("Notification.Show", boost::bind(&LLNotifications::addFromCallback, this, _2));
-
-    mListener.reset(new LLNotificationsListener(*this));
+	
+	mListener.reset(new LLNotificationsListener(*this));
 }
 
 
diff --git a/indra/llui/llnotifications.h b/indra/llui/llnotifications.h
index 4fe1687f0e..f075c44520 100644
--- a/indra/llui/llnotifications.h
+++ b/indra/llui/llnotifications.h
@@ -504,7 +504,7 @@ public:
 	std::string getLabel() const;
 	std::string getURL() const;
 	S32 getURLOption() const;
-    S32 getURLOpenExternally() const;
+	S32 getURLOpenExternally() const;
 	
 	const LLNotificationFormPtr getForm();
 
-- 
cgit v1.2.3


From 214cdc417763580e75d4568ad3d98245aaa30846 Mon Sep 17 00:00:00 2001
From: Merov Linden <merov@lindenlab.com>
Date: Fri, 24 Sep 2010 15:38:21 -0700
Subject: STORM-173 : Add Build > Object > Return Object

---
 doc/contributions.txt                              | 2 ++
 indra/newview/skins/default/xui/en/menu_viewer.xml | 8 ++++++++
 2 files changed, 10 insertions(+)

diff --git a/doc/contributions.txt b/doc/contributions.txt
index 8739bfd1be..c70aeaf078 100644
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -383,6 +383,7 @@ Matthew Dowd
 	VWR-1761
 	VWR-2681
 McCabe Maxsted
+	SNOW-387
 	VWR-1318
 	VWR-4065
 	VWR-4826
@@ -652,6 +653,7 @@ Techwolf Lupindo
 	SNOW-687
 	SNOW-680
 	SNOW-681
+	SNOW-685
 	SNOW-690
 	VWR-12385
 tenebrous pau
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index ed79f1246a..0df613e9bb 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -669,6 +669,14 @@
                function="Tools.SaveToObjectInventory" />
 			<menu_item_call.on_enable
                function="Tools.EnableSaveToObjectInventory" />
+          </menu_item_call>
+          <menu_item_call
+			 label="Return Object"
+			 name="Return Object back to Owner">
+			<menu_item_call.on_click
+               function="Object.Return" />
+			<menu_item_call.on_enable
+               function="Object.EnableReturn" />
           </menu_item_call>
 		</menu>
         <menu
-- 
cgit v1.2.3


From 0931799f03df4a0d573cc9162f1a81f6e3222d3b 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/llui/llfocusmgr.cpp        | 14 ++++++++++++++
 indra/llui/llfocusmgr.h          |  2 ++
 indra/llui/llview.h              |  5 +++++
 indra/newview/llpreviewscript.h  |  2 ++
 indra/newview/llviewerwindow.cpp | 11 ++++++++++-
 5 files changed, 33 insertions(+), 1 deletion(-)

diff --git a/indra/llui/llfocusmgr.cpp b/indra/llui/llfocusmgr.cpp
index 1f16d12add..7fbfd80d8d 100644
--- a/indra/llui/llfocusmgr.cpp
+++ b/indra/llui/llfocusmgr.cpp
@@ -315,6 +315,20 @@ void LLFocusMgr::removeKeyboardFocusWithoutCallback( const LLFocusableElement* f
 	}
 }
 
+bool LLFocusMgr::keyboardFocusHasMenus() const
+{
+	LLView* focus_view = dynamic_cast<LLView*>(mKeyboardFocus);
+	while( focus_view )
+	{
+		if(focus_view->hasMenus())
+		{
+			return true;
+		}
+
+		focus_view = focus_view->getParent();
+	}
+	return false;
+}
 
 void LLFocusMgr::setMouseCapture( LLMouseHandler* new_captor )
 {
diff --git a/indra/llui/llfocusmgr.h b/indra/llui/llfocusmgr.h
index eef82a3b5a..e09bad0187 100644
--- a/indra/llui/llfocusmgr.h
+++ b/indra/llui/llfocusmgr.h
@@ -118,6 +118,8 @@ public:
 	void			unlockFocus();
 	BOOL			focusLocked() const { return mLockedView != NULL; }
 
+	bool			keyboardFocusHasMenus() const;
+
 private:
 	LLUICtrl*			mLockedView;
 
diff --git a/indra/llui/llview.h b/indra/llui/llview.h
index 6bcee98f26..706858e65c 100644
--- a/indra/llui/llview.h
+++ b/indra/llui/llview.h
@@ -273,6 +273,11 @@ public:
 	BOOL focusNextRoot();
 	BOOL focusPrevRoot();
 
+	// Normally we want the app menus to get priority on modified keys
+	// However, if this item claims to have menus then we want to give
+	// it first chance at handling them. (eg. the script editor)
+	virtual bool	hasMenus() const { return false; };
+
 	// delete all children. Override this function if you need to
 	// perform any extra clean up such as cached pointers to selected
 	// children, etc.
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 b2ff39bbd2..dbc9317613 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -2136,10 +2136,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)))
 		{
@@ -2175,7 +2185,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 f3b01596ddde08a178276fadc44f430928582748 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/llui/llfocusmgr.cpp        | 4 ++--
 indra/llui/llfocusmgr.h          | 2 +-
 indra/llui/llview.h              | 8 ++++----
 indra/newview/llpreviewscript.h  | 2 +-
 indra/newview/llviewerwindow.cpp | 2 +-
 5 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/indra/llui/llfocusmgr.cpp b/indra/llui/llfocusmgr.cpp
index 7fbfd80d8d..43e5f6b051 100644
--- a/indra/llui/llfocusmgr.cpp
+++ b/indra/llui/llfocusmgr.cpp
@@ -315,12 +315,12 @@ void LLFocusMgr::removeKeyboardFocusWithoutCallback( const LLFocusableElement* f
 	}
 }
 
-bool LLFocusMgr::keyboardFocusHasMenus() const
+bool LLFocusMgr::keyboardFocusHasAccelerators() const
 {
 	LLView* focus_view = dynamic_cast<LLView*>(mKeyboardFocus);
 	while( focus_view )
 	{
-		if(focus_view->hasMenus())
+		if(focus_view->hasAccelerators())
 		{
 			return true;
 		}
diff --git a/indra/llui/llfocusmgr.h b/indra/llui/llfocusmgr.h
index e09bad0187..22c1895075 100644
--- a/indra/llui/llfocusmgr.h
+++ b/indra/llui/llfocusmgr.h
@@ -118,7 +118,7 @@ public:
 	void			unlockFocus();
 	BOOL			focusLocked() const { return mLockedView != NULL; }
 
-	bool			keyboardFocusHasMenus() const;
+	bool			keyboardFocusHasAccelerators() const;
 
 private:
 	LLUICtrl*			mLockedView;
diff --git a/indra/llui/llview.h b/indra/llui/llview.h
index 706858e65c..33d345beff 100644
--- a/indra/llui/llview.h
+++ b/indra/llui/llview.h
@@ -273,10 +273,10 @@ public:
 	BOOL focusNextRoot();
 	BOOL focusPrevRoot();
 
-	// Normally we want the app menus to get priority on modified keys
-	// However, if this item claims to have menus then we want to give
-	// it first chance at handling them. (eg. the script editor)
-	virtual bool	hasMenus() const { return false; };
+	// Normally we want the app menus to get priority on accelerated keys
+	// However, sometimes we want to give specific views a first chance
+	// iat handling them. (eg. the script editor)
+	virtual bool	hasAccelerators() const { return false; };
 
 	// delete all children. Override this function if you need to
 	// perform any extra clean up such as cached pointers to selected
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 dbc9317613..983a2d25c8 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -2143,7 +2143,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 753238d70e0db62faaf5ccb50e62cdf96ed4f344 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(+)

diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp
index 627010bb53..cf2ea38288 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 ce84d6707a9c47a1f4f786e2fa431cea5c5b090f Mon Sep 17 00:00:00 2001
From: Aimee Linden <aimee@lindenlab.com>
Date: Mon, 27 Sep 2010 12:33:36 +0100
Subject: STORM-253 FIXED FrontWindow() API is deprecated

---
 indra/llplugin/slplugin/slplugin.cpp | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/indra/llplugin/slplugin/slplugin.cpp b/indra/llplugin/slplugin/slplugin.cpp
index 7d69e1c5cd..516a58db88 100644
--- a/indra/llplugin/slplugin/slplugin.cpp
+++ b/indra/llplugin/slplugin/slplugin.cpp
@@ -281,7 +281,7 @@ int main(int argc, char **argv)
 			}
 			
 			// Check for a change in this process's frontmost window.
-			if(FrontWindow() != front_window)
+			if(GetFrontWindowOfClass(kAllWindowClasses, true) != front_window)
 			{
 				ProcessSerialNumber self = { 0, kCurrentProcess };
 				ProcessSerialNumber parent = { 0, kNoProcess };
@@ -307,7 +307,7 @@ int main(int argc, char **argv)
 					}
 				}
 								
-				if((FrontWindow() != NULL) && (front_window == NULL))
+				if((GetFrontWindowOfClass(kAllWindowClasses, true) != NULL) && (front_window == NULL))
 				{
 					// Opening the first window
 					
@@ -319,7 +319,7 @@ int main(int argc, char **argv)
 
 					if(layer_group)
 					{
-						SetWindowGroup(FrontWindow(), layer_group);
+						SetWindowGroup(GetFrontWindowOfClass(kAllWindowClasses, true), layer_group);
 					}
 					
 					if(parent_is_front_process)
@@ -328,9 +328,9 @@ int main(int argc, char **argv)
 						(void) SetFrontProcess( &self );
 					}
 
-					ActivateWindow(FrontWindow(), true);					
+					ActivateWindow(GetFrontWindowOfClass(kAllWindowClasses, true), true);
 				}
-				else if((FrontWindow() == NULL) && (front_window != NULL))
+				else if((GetFrontWindowOfClass(kAllWindowClasses, true) == NULL) && (front_window != NULL))
 				{
 					// Closing the last window
 					
@@ -350,7 +350,7 @@ int main(int argc, char **argv)
 					window_hack_state = 2;
 				}
 
-				front_window = FrontWindow();
+				front_window = GetFrontWindowOfClass(kAllWindowClasses, true);
 
 			}
 		}
-- 
cgit v1.2.3


From 0d6f80d737af9607399c3869868413e7194772a6 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(-)

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 05043257e45d04820bb72ed919872d1cc4e2baff 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(-)

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 0c90df24f0..837923bcf6 100644
--- a/indra/newview/skins/default/xui/en/floater_help_browser.xml
+++ b/indra/newview/skins/default/xui/en/floater_help_browser.xml
@@ -37,7 +37,7 @@
          width="620">
             <web_browser
               trusted_content="true" 
-             bottom="-11"
+             bottom="-25"
              follows="left|right|top|bottom"
              layout="topleft"
              left="0"
-- 
cgit v1.2.3


From 09ef4a2417f8400b03185adec859edd76e59823a Mon Sep 17 00:00:00 2001
From: Andrew Productengine <adyukov@productengine.com>
Date: Mon, 27 Sep 2010 18:18:03 +0300
Subject: STORM-153 ADDITIONAL FIX Properly fixed unlocalized chiclet tooltip
 and syswell session names for adhoc.

Bug was caused by using unlocalized name of session as argument in LLIMModel::newSession() after the session name was localized in constructor.

- Used correct session name in LLIMModel::newSession(). Adding similar logic to addMessage() turned out to be unnecessary and also caused regression (VWR-23180),
so previous fix of the same bug(8ab901af1241) was backed out in 28ed1b4cf4cd. Erroneous part was excluded from this fix.
---
 indra/newview/llimview.cpp | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index 493398c68a..494b5d1e56 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -622,7 +622,10 @@ bool LLIMModel::newSession(const LLUUID& session_id, const std::string& name, co
 	LLIMSession* session = new LLIMSession(session_id, name, type, other_participant_id, ids, voice);
 	mId2SessionMap[session_id] = session;
 
-	LLIMMgr::getInstance()->notifyObserverSessionAdded(session_id, name, other_participant_id);
+	// When notifying observer, name of session is used instead of "name", because they may not be the
+	// same if it is an adhoc session (in this case name is localized in LLIMSession constructor).
+	std::string session_name = LLIMModel::getInstance()->getName(session_id);
+	LLIMMgr::getInstance()->notifyObserverSessionAdded(session_id, session_name, other_participant_id);
 
 	return true;
 
-- 
cgit v1.2.3


From 2d6db708f41681268235e3c616414d9d1391a25b Mon Sep 17 00:00:00 2001
From: Andrew Productengine <adyukov@productengine.com>
Date: Mon, 27 Sep 2010 22:30:50 +0300
Subject: STORM-210 FIXED Implemented adding of ad-hoc call participans in
 Recent.

Both offline and online users are added. It is done in LLVoiceChannelGroup::activate(), where TODO for it was placed earlier.
To avoid code duplication when adding users from speakers list to Recent, a new method was added to LLIMModel.
---
 indra/newview/llimview.cpp       | 34 ++++++++++++++++++++--------------
 indra/newview/llimview.h         |  4 ++++
 indra/newview/llvoicechannel.cpp | 24 +++++++++++++++++++-----
 3 files changed, 43 insertions(+), 19 deletions(-)

diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index 494b5d1e56..01e1c3caa0 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -495,6 +495,11 @@ LLIMModel::LLIMSession* LLIMModel::findAdHocIMSession(const uuid_vec_t& ids)
 	return NULL;
 }
 
+bool LLIMModel::LLIMSession::isOutgoingAdHoc()
+{
+	return IM_SESSION_CONFERENCE_START == mType;
+}
+
 bool LLIMModel::LLIMSession::isAdHoc()
 {
 	return IM_SESSION_CONFERENCE_START == mType || (IM_SESSION_INVITE == mType && !gAgent.isInGroup(mSessionID));
@@ -1032,24 +1037,25 @@ void LLIMModel::sendMessage(const std::string& utf8_text,
 			// 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)
-			LLIMSpeakerMgr* speaker_mgr = LLIMModel::getInstance()->getSpeakerManager(im_session_id);
-			LLSpeakerMgr::speaker_list_t speaker_list;
-			if(speaker_mgr != NULL)
-			{
-				speaker_mgr->getSpeakerList(&speaker_list, true);
-			}
-			for(LLSpeakerMgr::speaker_list_t::iterator it = speaker_list.begin(); it != speaker_list.end(); it++)
-			{
-				const LLPointer<LLSpeaker>& speakerp = *it;
-
-				LLRecentPeople::instance().add(speakerp->mID);
-			}
+			addSpeakersToRecent(im_session_id);			
 		}
 	}
+}
 
-	
+void LLIMModel::addSpeakersToRecent(const LLUUID& im_session_id)
+{
+	LLIMSpeakerMgr* speaker_mgr = LLIMModel::getInstance()->getSpeakerManager(im_session_id);
+	LLSpeakerMgr::speaker_list_t speaker_list;
+	if(speaker_mgr != NULL)
+	{
+		speaker_mgr->getSpeakerList(&speaker_list, true);
+	}
+	for(LLSpeakerMgr::speaker_list_t::iterator it = speaker_list.begin(); it != speaker_list.end(); it++)
+	{
+		const LLPointer<LLSpeaker>& speakerp = *it;
+		LLRecentPeople::instance().add(speakerp->mID);
+	}
 }
 
 void session_starter_helper(
diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h
index ba8c7ae489..f7a4406f00 100644
--- a/indra/newview/llimview.h
+++ b/indra/newview/llimview.h
@@ -84,6 +84,7 @@ public:
 		/** @deprecated */
 		static void chatFromLogFile(LLLogChat::ELogLineType type, const LLSD& msg, void* userdata);
 
+		bool isOutgoingAdHoc();
 		bool isAdHoc();
 		bool isP2P();
 		bool isOtherParticipantAvaline();
@@ -273,6 +274,9 @@ public:
 	static void sendMessage(const std::string& utf8_text, const LLUUID& im_session_id,
 								const LLUUID& other_participant_id, EInstantMessage dialog);
 
+	// Adds people from speakers list (people with whom you are currently speaking) to the Recent People List
+	static void addSpeakersToRecent(const LLUUID& im_session_id);
+
 	void testMessages();
 
 	/**
diff --git a/indra/newview/llvoicechannel.cpp b/indra/newview/llvoicechannel.cpp
index 9e3d61ae44..b692093fb9 100644
--- a/indra/newview/llvoicechannel.cpp
+++ b/indra/newview/llvoicechannel.cpp
@@ -497,14 +497,28 @@ void LLVoiceChannelGroup::activate()
 			mURI,
 			mCredentials);
 
-#if 0 // *TODO
 		if (!gAgent.isInGroup(mSessionID)) // ad-hoc channel
 		{
-			// Add the party to the list of people with which we've recently interacted.
-			for (/*people in the chat*/)
-				LLRecentPeople::instance().add(buddy_id);
+			LLIMModel::LLIMSession* session = LLIMModel::getInstance()->findIMSession(mSessionID);
+			// Adding ad-hoc call participants to Recent People List.
+			// If it's an outgoing ad-hoc, we can use mInitialTargetIDs that holds IDs of people we
+			// called(both online and offline) as source to get people for recent (STORM-210).
+			if (session->isOutgoingAdHoc())
+			{
+				for (uuid_vec_t::iterator it = session->mInitialTargetIDs.begin();
+					it!=session->mInitialTargetIDs.end();++it)
+				{
+					const LLUUID id = *it;
+					LLRecentPeople::instance().add(id);
+				}
+			}
+			// If this ad-hoc is incoming then trying to get ids of people from mInitialTargetIDs
+			// would lead to EXT-8246. So in this case we get them from speakers list.
+			else
+			{
+				LLIMModel::addSpeakersToRecent(mSessionID);
+			}
 		}
-#endif
 
 		//Mic default state is OFF on initiating/joining Ad-Hoc/Group calls
 		if (LLVoiceClient::getInstance()->getUserPTTState() && LLVoiceClient::getInstance()->getPTTIsToggle())
-- 
cgit v1.2.3


From 49ae085d4c02045a70eeed3d8cd57c22d2594c0c Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Mon, 27 Sep 2010 22:32:01 +0300
Subject: STORM-207 FIXED Favorites overflow menu didn't close when you press
 ESC.

Caused by the fix of EXT-4217 which I had to revert.
---
 indra/newview/llfavoritesbar.cpp | 25 ++++++++-----------------
 1 file changed, 8 insertions(+), 17 deletions(-)

diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp
index dd1f92a25c..3981b887ad 100644
--- a/indra/newview/llfavoritesbar.cpp
+++ b/indra/newview/llfavoritesbar.cpp
@@ -290,20 +290,6 @@ public:
 		return TRUE;
 	}
 
-	void setVisible(BOOL b)
-	{
-		// Overflow menu shouldn't hide when it still has focus. See EXT-4217.
-		if (!b && hasFocus())
-			return;
-		LLToggleableMenu::setVisible(b);
-		setFocus(b);
-	}
-
-	void onFocusLost()
-	{
-		setVisible(FALSE);
-	}
-
 protected:
 	LLFavoriteLandmarkToggleableMenu(const LLToggleableMenu::Params& p):
 		LLToggleableMenu(p)
@@ -790,7 +776,6 @@ void LLFavoritesBarCtrl::updateButtons()
 		LLToggleableMenu* overflow_menu = static_cast <LLToggleableMenu*> (mPopupMenuHandle.get());
 		if (overflow_menu && overflow_menu->getVisible())
 		{
-			overflow_menu->setFocus(FALSE);
 			overflow_menu->setVisible(FALSE);
 			if (mUpdateDropDownItems)
 				showDropDownMenu();
@@ -911,8 +896,6 @@ void LLFavoritesBarCtrl::showDropDownMenu()
 
 	if (menu)
 	{
-		// Release focus to allow changing of visibility.
-		menu->setFocus(FALSE);
 		if (!menu->toggleVisibility())
 			return;
 
@@ -1093,6 +1076,14 @@ void LLFavoritesBarCtrl::doToSelected(const LLSD& userdata)
 	{
 		gInventory.removeItem(mSelectedItemID);
 	}
+
+	// Pop-up the overflow menu again (it gets hidden whenever the user clicks a context menu item).
+	// See EXT-4217 and STORM-207.
+	LLToggleableMenu* menu = (LLToggleableMenu*) mPopupMenuHandle.get();
+	if (menu && !menu->getVisible())
+	{
+		showDropDownMenu();
+	}
 }
 
 BOOL LLFavoritesBarCtrl::isClipboardPasteable() const
-- 
cgit v1.2.3


From 0a938d395c6bde13ead4f789056e7f9067e4dbd0 Mon Sep 17 00:00:00 2001
From: Seth ProductEngine <slitovchuk@productengine.com>
Date: Tue, 28 Sep 2010 19:40:31 +0300
Subject: STORM-266 FIXED displaying group notices in detached People SP. Fixed
 failure getting pointers to some child panels of LLSideTray while parent side
 panels are detached.

---
 indra/newview/llgroupactions.cpp   |  2 +-
 indra/newview/llpanelgroup.cpp     |  4 ++--
 indra/newview/llpanellandmarks.cpp |  7 ++++++-
 indra/newview/llsidetray.h         | 16 ++++++++++++++++
 indra/newview/llviewermessage.cpp  |  4 ++--
 5 files changed, 27 insertions(+), 6 deletions(-)

diff --git a/indra/newview/llgroupactions.cpp b/indra/newview/llgroupactions.cpp
index c42b397252..5393678a6b 100644
--- a/indra/newview/llgroupactions.cpp
+++ b/indra/newview/llgroupactions.cpp
@@ -235,7 +235,7 @@ static bool isGroupUIVisible()
 {
 	static LLPanel* panel = 0;
 	if(!panel)
-		panel = LLSideTray::getInstance()->findChild<LLPanel>("panel_group_info_sidetray");
+		panel = LLSideTray::getInstance()->getPanel("panel_group_info_sidetray");
 	if(!panel)
 		return false;
 	return panel->isInVisibleChain();
diff --git a/indra/newview/llpanelgroup.cpp b/indra/newview/llpanelgroup.cpp
index 62ed7acb15..76b85d5bec 100644
--- a/indra/newview/llpanelgroup.cpp
+++ b/indra/newview/llpanelgroup.cpp
@@ -597,7 +597,7 @@ void LLPanelGroup::showNotice(const std::string& subject,
 //static
 void LLPanelGroup::refreshCreatedGroup(const LLUUID& group_id)
 {
-	LLPanelGroup* panel = LLSideTray::getInstance()->findChild<LLPanelGroup>("panel_group_info_sidetray");
+	LLPanelGroup* panel = LLSideTray::getInstance()->getPanel<LLPanelGroup>("panel_group_info_sidetray");
 	if(!panel)
 		return;
 	panel->setGroupID(group_id);
@@ -612,7 +612,7 @@ void LLPanelGroup::showNotice(const std::string& subject,
 					   const std::string& inventory_name,
 					   LLOfferInfo* inventory_offer)
 {
-	LLPanelGroup* panel = LLSideTray::getInstance()->findChild<LLPanelGroup>("panel_group_info_sidetray");
+	LLPanelGroup* panel = LLSideTray::getInstance()->getPanel<LLPanelGroup>("panel_group_info_sidetray");
 	if(!panel)
 		return;
 
diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp
index b09360a2d6..c4a484d368 100644
--- a/indra/newview/llpanellandmarks.cpp
+++ b/indra/newview/llpanellandmarks.cpp
@@ -1245,7 +1245,12 @@ void LLLandmarksPanel::doProcessParcelInfo(LLLandmark* landmark,
 	landmark->getGlobalPos(landmark_global_pos);
 
 	// let's toggle pick panel into  panel places
-	LLPanel* panel_places =  LLSideTray::getInstance()->getChild<LLPanel>("panel_places");//-> sidebar_places
+	LLPanel* panel_places =  LLSideTray::getInstance()->getPanel("panel_places");//-> sidebar_places
+	if (!panel_places)
+	{
+		llassert(NULL != panel_places);
+		return;
+	}
 	panel_places->addChild(panel_pick);
 	LLRect paren_rect(panel_places->getRect());
 	panel_pick->reshape(paren_rect.getWidth(),paren_rect.getHeight(), TRUE);
diff --git a/indra/newview/llsidetray.h b/indra/newview/llsidetray.h
index 4e79007c13..4c23a1920b 100644
--- a/indra/newview/llsidetray.h
+++ b/indra/newview/llsidetray.h
@@ -109,6 +109,22 @@ public:
     LLPanel*	getPanel		(const std::string& panel_name);
     LLPanel*	getActivePanel	();
     bool		isPanelActive	(const std::string& panel_name);
+
+	/*
+	 * get the panel of given type T (don't show it or do anything else with it)
+	 */
+	template <typename T>
+	T* getPanel(const std::string& panel_name)
+	{
+		T* panel = dynamic_cast<T*>(getPanel(panel_name));
+		if (!panel)
+		{
+			llwarns << "Child named \"" << panel_name << "\" of type " << typeid(T*).name() << " not found" << llendl;
+			return NULL;
+		}
+		return panel;
+	}
+
 	/*
 	 * get currently active tab
 	 */
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 33c74e7465..26b7e0fb6d 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -6453,7 +6453,7 @@ void process_covenant_reply(LLMessageSystem* msg, void**)
 	LLPanelLandCovenant::updateEstateOwnerName(owner_name);
 	LLFloaterBuyLand::updateEstateOwnerName(owner_name);
 
-	LLPanelPlaceProfile* panel = LLSideTray::getInstance()->findChild<LLPanelPlaceProfile>("panel_place_profile");
+	LLPanelPlaceProfile* panel = LLSideTray::getInstance()->getPanel<LLPanelPlaceProfile>("panel_place_profile");
 	if (panel)
 	{
 		panel->updateEstateName(estate_name);
@@ -6587,7 +6587,7 @@ void onCovenantLoadComplete(LLVFS *vfs,
 	LLPanelLandCovenant::updateCovenantText(covenant_text);
 	LLFloaterBuyLand::updateCovenantText(covenant_text, asset_uuid);
 
-	LLPanelPlaceProfile* panel = LLSideTray::getInstance()->findChild<LLPanelPlaceProfile>("panel_place_profile");
+	LLPanelPlaceProfile* panel = LLSideTray::getInstance()->getPanel<LLPanelPlaceProfile>("panel_place_profile");
 	if (panel)
 	{
 		panel->updateCovenantText(covenant_text);
-- 
cgit v1.2.3


From b0cadec6fbd3c8d0ca21d5804061d2ce366b52dc Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Tue, 28 Sep 2010 22:14:22 +0300
Subject: STORM-248 FIXED The 'Share' button in My Inventory now respects
 multiple selection.

- The button is now enabled only if all selected items are shareable.
  (it had checked only one currently selected item)
- Eliminated some copy&paste.
---
 indra/newview/llavataractions.cpp      | 80 +++++++++++++++++++++++++++-------
 indra/newview/llavataractions.h        | 11 +++++
 indra/newview/llsidepanelinventory.cpp | 19 ++++----
 3 files changed, 85 insertions(+), 25 deletions(-)

diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp
index b9ae976e58..79b0c63b38 100644
--- a/indra/newview/llavataractions.cpp
+++ b/indra/newview/llavataractions.cpp
@@ -49,6 +49,7 @@
 #include "llfloaterpay.h"
 #include "llfloaterworldmap.h"
 #include "llgiveinventory.h"
+#include "llinventorybridge.h"
 #include "llinventorymodel.h"	// for gInventory.findCategoryUUIDForType
 #include "llinventorypanel.h"
 #include "llimview.h"			// for gIMMgr
@@ -443,17 +444,27 @@ namespace action_give_inventory
 	}
 
 	/**
-	 * Checks My Inventory visibility.
+	 * @return active inventory panel, or NULL if there's no such panel
 	 */
-	static bool is_give_inventory_acceptable()
+	static LLInventoryPanel* get_active_inventory_panel()
 	{
 		LLInventoryPanel* active_panel = LLInventoryPanel::getActiveInventoryPanel(FALSE);
 		if (!active_panel)
 		{
 			active_panel = get_outfit_editor_inventory_panel();
-			if (!active_panel) return false;
 		}
 
+		return active_panel;
+	}
+
+	/**
+	 * Checks My Inventory visibility.
+	 */
+	static bool is_give_inventory_acceptable()
+	{
+		LLInventoryPanel* active_panel = get_active_inventory_panel();
+		if (!active_panel) return false;
+
 		// check selection in the panel
 		const uuid_set_t inventory_selected_uuids = active_panel->getRootFolder()->getSelectionList();
 		if (inventory_selected_uuids.empty()) return false; // nothing selected
@@ -543,12 +554,8 @@ namespace action_give_inventory
 			return;
 		}
 
-		LLInventoryPanel* active_panel = LLInventoryPanel::getActiveInventoryPanel(FALSE);
-		if (!active_panel)
-		{
-			active_panel = get_outfit_editor_inventory_panel();
-			if (!active_panel) return;
-		}
+		LLInventoryPanel* active_panel = get_active_inventory_panel();
+		if (!active_panel) return;
 
 		const uuid_set_t inventory_selected_uuids = active_panel->getRootFolder()->getSelectionList();
 		if (inventory_selected_uuids.empty())
@@ -632,12 +639,8 @@ namespace action_give_inventory
 		llassert(avatar_names.size() == avatar_uuids.size());
 
 
-		LLInventoryPanel* active_panel = LLInventoryPanel::getActiveInventoryPanel(FALSE);
-		if (!active_panel)
-		{
-			active_panel = get_outfit_editor_inventory_panel();
-			if (!active_panel) return;
-		}
+		LLInventoryPanel* active_panel = get_active_inventory_panel();
+		if (!active_panel) return;
 
 		const uuid_set_t inventory_selected_uuids = active_panel->getRootFolder()->getSelectionList();
 		if (inventory_selected_uuids.empty())
@@ -672,6 +675,53 @@ void LLAvatarActions::shareWithAvatars()
 	LLNotificationsUtil::add("ShareNotification");
 }
 
+
+// static
+bool LLAvatarActions::canShareSelectedItems(LLInventoryPanel* inv_panel /* = NULL*/)
+{
+	using namespace action_give_inventory;
+
+	if (!inv_panel)
+	{
+		LLInventoryPanel* active_panel = get_active_inventory_panel();
+		if (!active_panel) return false;
+		inv_panel = active_panel;
+	}
+
+	// check selection in the panel
+	LLFolderView* root_folder = inv_panel->getRootFolder();
+	const uuid_set_t inventory_selected_uuids = root_folder->getSelectionList();
+	if (inventory_selected_uuids.empty()) return false; // nothing selected
+
+	bool can_share = true;
+	uuid_set_t::const_iterator it = inventory_selected_uuids.begin();
+	const uuid_set_t::const_iterator it_end = inventory_selected_uuids.end();
+	for (; it != it_end; ++it)
+	{
+		LLViewerInventoryCategory* inv_cat = gInventory.getCategory(*it);
+		// any category can be offered.
+		if (inv_cat)
+		{
+			continue;
+		}
+
+		// check if inventory item can be given
+		LLFolderViewItem* item = root_folder->getItemByID(*it);
+		if (!item) return false;
+		LLInvFVBridge* bridge = dynamic_cast<LLInvFVBridge*>(item->getListener());
+		if (bridge && bridge->canShare())
+		{
+			continue;
+		}
+
+		// there are neither item nor category in inventory
+		can_share = false;
+		break;
+	}
+
+	return can_share;
+}
+
 // static
 void LLAvatarActions::toggleBlock(const LLUUID& id)
 {
diff --git a/indra/newview/llavataractions.h b/indra/newview/llavataractions.h
index 6313ae0759..44bd3778da 100644
--- a/indra/newview/llavataractions.h
+++ b/indra/newview/llavataractions.h
@@ -34,6 +34,8 @@
 #include <string>
 #include <vector>
 
+class LLInventoryPanel;
+
 /**
  * Friend-related actions (add, remove, offer teleport, etc)
  */
@@ -183,6 +185,15 @@ public:
 	 */
 	static bool canOfferTeleport(const uuid_vec_t& ids);
 
+	/**
+	 * Checks whether all items selected in the given inventory panel can be shared
+	 *
+	 * @param inv_panel Inventory panel to get selection from. If NULL, the active inventory panel is used.
+	 *
+	 * @return false if the selected items cannot be shared or the active inventory panel cannot be obtained
+	 */
+	static bool canShareSelectedItems(LLInventoryPanel* inv_panel = NULL);
+
 private:
 	static bool callbackAddFriend(const LLSD& notification, const LLSD& response);
 	static bool callbackAddFriendWithMessage(const LLSD& notification, const LLSD& response);
diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp
index 23e96c22fa..1e585ece23 100644
--- a/indra/newview/llsidepanelinventory.cpp
+++ b/indra/newview/llsidepanelinventory.cpp
@@ -311,18 +311,17 @@ bool LLSidepanelInventory::canShare()
 	LLPanelMainInventory* panel_main_inventory =
 		mInventoryPanel->findChild<LLPanelMainInventory>("panel_main_inventory");
 
-	LLFolderView* root_folder =
-		panel_main_inventory->getActivePanel()->getRootFolder();
-
-	LLFolderViewItem* current_item = root_folder->hasVisibleChildren()
-		? root_folder->getCurSelectedItem()
-		: NULL;
+	if (!panel_main_inventory)
+	{
+		llwarns << "Failed to get the main inventory panel" << llendl;
+		return false;
+	}
 
-	LLInvFVBridge* bridge = current_item
-		? dynamic_cast <LLInvFVBridge*> (current_item->getListener())
-		: NULL;
+	LLInventoryPanel* active_panel = panel_main_inventory->getActivePanel();
+	// Avoid flicker in the Recent tab while inventory is being loaded.
+	if (!active_panel->getRootFolder()->hasVisibleChildren()) return false;
 
-	return bridge ? bridge->canShare() : false;
+	return LLAvatarActions::canShareSelectedItems(active_panel);
 }
 
 LLInventoryItem *LLSidepanelInventory::getSelectedItem()
-- 
cgit v1.2.3


From 16a973feea87016bd6dc0154d610e4eedeb1b1cf Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Tue, 28 Sep 2010 22:49:45 +0300
Subject: STORM-249 FIXED The Wear button in My Inventory now respects multiple
 selection.

- The button is now enabled only when all selected items can be worn.
- Pressing it wears all selected items.
---
 indra/newview/llsidepanelinventory.cpp | 46 +++++++++++++++++++++++++++++++---
 indra/newview/llsidepanelinventory.h   |  2 ++
 2 files changed, 45 insertions(+), 3 deletions(-)

diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp
index 23e96c22fa..5b4c530f06 100644
--- a/indra/newview/llsidepanelinventory.cpp
+++ b/indra/newview/llsidepanelinventory.cpp
@@ -182,8 +182,26 @@ void LLSidepanelInventory::performActionOnSelection(const std::string &action)
 
 void LLSidepanelInventory::onWearButtonClicked()
 {
-	performActionOnSelection("wear");
-	performActionOnSelection("attach");
+	LLPanelMainInventory *panel_main_inventory = mInventoryPanel->findChild<LLPanelMainInventory>("panel_main_inventory");
+	if (!panel_main_inventory)
+	{
+		llassert(panel_main_inventory != NULL);
+		return;
+	}
+
+	// Get selected items set.
+	const std::set<LLUUID> selected_uuids_set = panel_main_inventory->getActivePanel()->getRootFolder()->getSelectionList();
+	if (selected_uuids_set.empty()) return; // nothing selected
+
+	// Convert the set to a vector.
+	uuid_vec_t selected_uuids_vec;
+	for (std::set<LLUUID>::const_iterator it = selected_uuids_set.begin(); it != selected_uuids_set.end(); ++it)
+	{
+		selected_uuids_vec.push_back(*it);
+	}
+
+	// Wear all selected items.
+	wear_multiple(selected_uuids_vec, true);
 }
 
 void LLSidepanelInventory::onPlayButtonClicked()
@@ -286,7 +304,7 @@ void LLSidepanelInventory::updateVerbs()
 		case LLInventoryType::IT_OBJECT:
 		case LLInventoryType::IT_ATTACHMENT:
 			mWearBtn->setVisible(TRUE);
-			mWearBtn->setEnabled(get_can_item_be_worn(item->getLinkedUUID()));
+			mWearBtn->setEnabled(canWearSelected());
 		 	mShopBtn->setVisible(FALSE);
 			break;
 		case LLInventoryType::IT_SOUND:
@@ -325,6 +343,28 @@ bool LLSidepanelInventory::canShare()
 	return bridge ? bridge->canShare() : false;
 }
 
+bool LLSidepanelInventory::canWearSelected()
+{
+	LLPanelMainInventory* panel_main_inventory =
+		mInventoryPanel->findChild<LLPanelMainInventory>("panel_main_inventory");
+
+	if (!panel_main_inventory)
+	{
+		llassert(panel_main_inventory != NULL);
+		return false;
+	}
+
+	std::set<LLUUID> selected_uuids = panel_main_inventory->getActivePanel()->getRootFolder()->getSelectionList();
+	for (std::set<LLUUID>::const_iterator it = selected_uuids.begin();
+		it != selected_uuids.end();
+		++it)
+	{
+		if (!get_can_item_be_worn(*it)) return false;
+	}
+
+	return true;
+}
+
 LLInventoryItem *LLSidepanelInventory::getSelectedItem()
 {
 	LLPanelMainInventory *panel_main_inventory = mInventoryPanel->findChild<LLPanelMainInventory>("panel_main_inventory");
diff --git a/indra/newview/llsidepanelinventory.h b/indra/newview/llsidepanelinventory.h
index 4776dd7530..32c98bc034 100644
--- a/indra/newview/llsidepanelinventory.h
+++ b/indra/newview/llsidepanelinventory.h
@@ -65,6 +65,8 @@ protected:
 	void performActionOnSelection(const std::string &action);
 	void updateVerbs();
 
+	bool canWearSelected(); // check whether selected items can be worn
+
 	//
 	// UI Elements
 	//
-- 
cgit v1.2.3


From 283763d0909e581ee142f9c7ef749c81e653b3c3 Mon Sep 17 00:00:00 2001
From: Andrew Productengine <adyukov@productengine.com>
Date: Wed, 29 Sep 2010 16:36:58 +0300
Subject: STORM-291 FIXED Fixed the position of the nearby chat bar.

The bug was caused by moving nearby chat bar into panel inside layout panel instead of being layout panel itself without modifying code in LLBottomTray::loadButtonsOrder() which used that layout panel.

- Fixed it by using this new nearby chat container layout panel in this method.
---
 indra/newview/llbottomtray.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp
index 33d006578d..ef6f2f7337 100644
--- a/indra/newview/llbottomtray.cpp
+++ b/indra/newview/llbottomtray.cpp
@@ -770,7 +770,7 @@ void LLBottomTray::loadButtonsOrder()
 	}
 	// Nearbychat is not stored in order settings file, but it must be the first of the panels, so moving it
 	// manually here
-	mToolbarStack->movePanel(mNearbyChatBar, NULL, true);
+	mToolbarStack->movePanel(mChatBarContainer, NULL, true);
 }
 
 void LLBottomTray::onDraggableButtonMouseUp(LLUICtrl* ctrl, S32 x, S32 y)
-- 
cgit v1.2.3


From 92008ee7381b8f2118259fcaf12ca85bed392080 Mon Sep 17 00:00:00 2001
From: Boroondas Gupte <hg@boroon.dasgupta.ch>
Date: Thu, 30 Sep 2010 02:24:16 +0200
Subject: STORM-222 FIXED indra/llxuixml/llxuiparser.cpp:32:25: error:
 expat/expat.h: No such file or directory

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

diff --git a/indra/llxuixml/llxuiparser.cpp b/indra/llxuixml/llxuiparser.cpp
index 00128c978a..45f97569dc 100644
--- a/indra/llxuixml/llxuiparser.cpp
+++ b/indra/llxuixml/llxuiparser.cpp
@@ -35,7 +35,13 @@
 #include "llxuiparser.h"
 
 #include "llxmlnode.h"
+
+#ifdef LL_STANDALONE
+#include <expat.h>
+#else
 #include "expat/expat.h"
+#endif
+
 #include <fstream>
 #include <boost/tokenizer.hpp>
 //#include <boost/spirit/include/qi.hpp>
@@ -1366,4 +1372,4 @@ bool LLFastXUIParser::readSDValue(Parser& parser, void* val_ptr)
 	LLFastXUIParser& self = static_cast<LLFastXUIParser&>(parser);
 	*((LLSD*)val_ptr) = LLSD(self.mCurAttributeValueBegin);
 	return true;
-}
\ No newline at end of file
+}
-- 
cgit v1.2.3


From 4b414302cf97922b5200814b0ea1d3ddcd0b3b58 Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Thu, 30 Sep 2010 22:11:01 +0300
Subject: STORM-214 FIXED Disabled URL highlighting in pick names.

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

diff --git a/indra/newview/skins/default/xui/en/panel_pick_list_item.xml b/indra/newview/skins/default/xui/en/panel_pick_list_item.xml
index de147908d8..43d580844f 100644
--- a/indra/newview/skins/default/xui/en/panel_pick_list_item.xml
+++ b/indra/newview/skins/default/xui/en/panel_pick_list_item.xml
@@ -52,6 +52,7 @@
      layout="topleft"
      left="110"
      name="picture_name"
+     parse_urls="false"
      text_color="white"
      top="9"
      use_ellipses="true"
-- 
cgit v1.2.3


From 9862c58e1b3eec24e412ee7c2980d2945c38360e Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Thu, 30 Sep 2010 23:35:48 +0300
Subject: STORM-215 FIXED Disabled URL highlighting in name_box'es.

By the way, fixed invalid SLURLs that LLNameBox generated for groups.
---
 indra/newview/llnamebox.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/indra/newview/llnamebox.cpp b/indra/newview/llnamebox.cpp
index 74d4217899..c31da84f78 100644
--- a/indra/newview/llnamebox.cpp
+++ b/indra/newview/llnamebox.cpp
@@ -47,6 +47,7 @@ LLNameBox::LLNameBox(const Params& p)
 {
 	mNameID = LLUUID::null;
 	mLink = p.link;
+	mParseHTML = mLink; // STORM-215
 	mInitialValue = p.initial_value().asString();
 	LLNameBox::sInstances.insert(this);
 	setText(LLStringUtil::null);
@@ -119,7 +120,7 @@ void LLNameBox::setName(const std::string& name, BOOL is_group)
 		std::string url;
 
 		if (is_group)
-			url = "[secondlife:///app/group/" + LLURI::escape(name) + "/about " + name + "]";
+			url = "[secondlife:///app/group/" + mNameID.asString() + "/about " + name + "]";
 		else
 			url = "[secondlife:///app/agent/" + mNameID.asString() + "/about " + name + "]";
 
-- 
cgit v1.2.3


From f92ad98d62f298c0005f7bc8cac503ada8dc88d0 Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Fri, 1 Oct 2010 18:27:12 +0300
Subject: STORM-213 FIXED Disabled highlighting URLs in object names in group
 notification toasts.

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

diff --git a/indra/newview/skins/default/xui/en/panel_group_notify.xml b/indra/newview/skins/default/xui/en/panel_group_notify.xml
index 6f271a757c..cded4cf31a 100644
--- a/indra/newview/skins/default/xui/en/panel_group_notify.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_notify.xml
@@ -85,6 +85,7 @@
      layout="topleft"
      left="45"
      name="attachment"
+     parse_urls="false"
      text_color="GroupNotifyTextColor"
      value="Attachment"
      use_ellipses="true"
-- 
cgit v1.2.3


From 7af6d1c7319bc0f339e9159161c05ed6eb45fb5b Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Fri, 1 Oct 2010 18:58:20 +0300
Subject: STORM-307 FIXED Disabled highlighting of URLs in outfit names.

Affected: My Outfits and Edit Outfit panels.
---
 indra/llui/llaccordionctrltab.cpp                           | 1 +
 indra/newview/skins/default/xui/en/panel_outfit_edit.xml    | 1 +
 indra/newview/skins/default/xui/en/sidepanel_appearance.xml | 1 +
 3 files changed, 3 insertions(+)

diff --git a/indra/llui/llaccordionctrltab.cpp b/indra/llui/llaccordionctrltab.cpp
index b7da5f4a1b..e28ef1f25d 100644
--- a/indra/llui/llaccordionctrltab.cpp
+++ b/indra/llui/llaccordionctrltab.cpp
@@ -141,6 +141,7 @@ LLAccordionCtrlTab::LLAccordionCtrlTabHeader::LLAccordionCtrlTabHeader(
 	textboxParams.use_ellipses = true;
 	textboxParams.bg_visible = false;
 	textboxParams.mouse_opaque = false;
+	textboxParams.parse_urls = false;
 	mHeaderTextbox = LLUICtrlFactory::create<LLTextBox>(textboxParams);
 	addChild(mHeaderTextbox);
 }
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 e0426c75b4..a48a9ce626 100644
--- a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml
+++ b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml
@@ -132,6 +132,7 @@
                  height="18"
                  layout="topleft"
                  name="curr_outfit_name"
+                 parse_urls="false"
                  text_color="LtGray"
                  top_pad="2"
                  value="[Current Outfit]"
diff --git a/indra/newview/skins/default/xui/en/sidepanel_appearance.xml b/indra/newview/skins/default/xui/en/sidepanel_appearance.xml
index c1c0f07304..b5839878d5 100644
--- a/indra/newview/skins/default/xui/en/sidepanel_appearance.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_appearance.xml
@@ -77,6 +77,7 @@ width="333">
       font="SansSerifLargeBold"
       height="20"
       left="35"
+      parse_urls="false"
       text_color="White"
       top="15"
       use_ellipses="true"
-- 
cgit v1.2.3


From 5bcfa063b448deacd6a539765fc7490309ba1fbe Mon Sep 17 00:00:00 2001
From: "Boroondas Gupte (original fix by Techwolf Lupindo)"
 <hg@boroon.dasgupta.ch>
Date: Mon, 4 Oct 2010 23:01:43 +0200
Subject: SNOW-651: Added missing "if (LL_TESTS)"

Daggified version of http://svn.secondlife.com/trac/linden/changeset/3523
(or of the SNOW-651 part of https://bitbucket.org/Techwolf/viewer-development/changeset/5697874b390b )
---
 doc/contributions.txt                  | 1 +
 indra/llplugin/slplugin/CMakeLists.txt | 4 +++-
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/doc/contributions.txt b/doc/contributions.txt
index ef9f09bd23..b4a3361232 100644
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -596,6 +596,7 @@ Teardrops Fall
 	VWR-5366
 Techwolf Lupindo
 	SNOW-92
+	SNOW-651
 	VWR-12385
 tenebrous pau
 	VWR-247
diff --git a/indra/llplugin/slplugin/CMakeLists.txt b/indra/llplugin/slplugin/CMakeLists.txt
index c1536e85de..f4f4ba99da 100644
--- a/indra/llplugin/slplugin/CMakeLists.txt
+++ b/indra/llplugin/slplugin/CMakeLists.txt
@@ -62,4 +62,6 @@ if (DARWIN)
   )
 endif (DARWIN)
 
-ll_deploy_sharedlibs_command(SLPlugin)
+if (LL_TESTS)
+  ll_deploy_sharedlibs_command(SLPlugin)
+endif (LL_TESTS)
-- 
cgit v1.2.3


From d918701d585873fdeb1dd2e112831bf510e40b22 Mon Sep 17 00:00:00 2001
From: "Boroondas Gupte (original fix by Techwolf Lupindo)"
 <hg@boroon.dasgupta.ch>
Date: Mon, 4 Oct 2010 23:54:31 +0200
Subject: SNOW-654: Added missing "if (LL_TESTS)" in indra/CMakeLists.txt

Daggified version of http://svn.secondlife.com/trac/linden/changeset/3431
(or of the SNOW-654 part of https://bitbucket.org/Techwolf/viewer-development/changeset/5697874b390b )
---
 doc/contributions.txt | 2 ++
 indra/CMakeLists.txt  | 8 +++++---
 2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/doc/contributions.txt b/doc/contributions.txt
index a4647f005d..54960b515b 100644
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -560,6 +560,8 @@ TBBle Kurosawa
 	VWR-1892
 Teardrops Fall
 	VWR-5366
+Techwolf Lupindo
+	SNOW-654
 tenebrous pau
 	VWR-247
 Tharax Ferraris
diff --git a/indra/CMakeLists.txt b/indra/CMakeLists.txt
index 1010b199a1..8052f7b473 100644
--- a/indra/CMakeLists.txt
+++ b/indra/CMakeLists.txt
@@ -112,6 +112,8 @@ if (SERVER)
   endif (WINDOWS)
 endif (SERVER)
 
-# Define after the custom viewer and server targets are created so individual
-# apps can add themselves as dependencies
-add_subdirectory(${INTEGRATION_TESTS_PREFIX}integration_tests)
+if (LL_TESTS)
+  # Define after the custom viewer and server targets are created so individual
+  # apps can add themselves as dependencies
+  add_subdirectory(${INTEGRATION_TESTS_PREFIX}integration_tests)
+endif (LL_TESTS)
-- 
cgit v1.2.3


From de9ec21470fae69a4e8eff9c204402de7a030cb8 Mon Sep 17 00:00:00 2001
From: Boroondas Gupte <hg@boroon.dasgupta.ch>
Date: Tue, 5 Oct 2010 00:01:16 +0200
Subject: SNOW-654 (follow up): adjusted comment line length after indentation
 has changed

---
 indra/CMakeLists.txt | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/indra/CMakeLists.txt b/indra/CMakeLists.txt
index 8052f7b473..56333d6f30 100644
--- a/indra/CMakeLists.txt
+++ b/indra/CMakeLists.txt
@@ -113,7 +113,7 @@ if (SERVER)
 endif (SERVER)
 
 if (LL_TESTS)
-  # Define after the custom viewer and server targets are created so individual
-  # apps can add themselves as dependencies
+  # Define after the custom viewer and server targets are created so
+  # individual apps can add themselves as dependencies
   add_subdirectory(${INTEGRATION_TESTS_PREFIX}integration_tests)
 endif (LL_TESTS)
-- 
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(-)

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(-)

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 48c2b2496d3ed6aeeebb0bc8950725f8ef7e305f Mon Sep 17 00:00:00 2001
From: "Christian Goetze (CG)" <cg@lindenlab.com>
Date: Fri, 8 Oct 2010 13:02:39 -0700
Subject: Have build.sh print out info usable by open source devs. Have it
 check for a README and use that if needed.

---
 build.sh | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/build.sh b/build.sh
index 25ff0f368d..9b4d4a16dc 100755
--- a/build.sh
+++ b/build.sh
@@ -114,11 +114,15 @@ then
   if [ -x "$top/../buildscripts/hg/bin/build.sh" ]
   then
     exec "$top/../buildscripts/hg/bin/build.sh" "$top"
+  elif [ -r "$top/README" ]
+  then
+    cat "$top/README"
+    exit 1
   else
     cat <<EOF
 This script, if called in a development environment, requires that the branch
 independent build script repository be checked out next to this repository.
-This repository is located at http://hg.lindenlab.com/parabuild/buildscripts
+This repository is located at http://hg.secondlife.com/buildscripts
 EOF
     exit 1
   fi
-- 
cgit v1.2.3


From 8f77ebbcd9e4814fb19b8875aea1b1cf52a28e75 Mon Sep 17 00:00:00 2001
From: "Boroondas Gupte (patch by Aleric Inglewood)" <hg@boroon.dasgupta.ch>
Date: Tue, 12 Oct 2010 00:39:23 +0200
Subject: SNOW-756 / VWR-23385 FIXED standalone LD_LIBRARY_PATH for unit tests

Used patch from https://jira.secondlife.com/secure/attachment/41586/SNOW-756-standalone_tests.diff

patching file indra/cmake/LLAddBuildTest.cmake
Hunk #1 succeeded at 259 with fuzz 2 (offset 1 line).

Added entry in doc/contributions.txt. No further changes.

originally commited to Snowglobe 2.1 at http://svn.secondlife.com/trac/linden/changeset/3515
---
 doc/contributions.txt            | 1 +
 indra/cmake/LLAddBuildTest.cmake | 6 +++++-
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/doc/contributions.txt b/doc/contributions.txt
index 8c6bd5e0fe..1dd1ef369b 100644
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -58,6 +58,7 @@ Aimee Trescothick
 Alejandro Rosenthal
 	VWR-1184
 Aleric Inglewood
+	SNOW-756
 	VWR-10001
 	VWR-10759
 	VWR-10837
diff --git a/indra/cmake/LLAddBuildTest.cmake b/indra/cmake/LLAddBuildTest.cmake
index e0c0ae2246..d0f21a1e38 100644
--- a/indra/cmake/LLAddBuildTest.cmake
+++ b/indra/cmake/LLAddBuildTest.cmake
@@ -257,7 +257,11 @@ MACRO(SET_TEST_LIST LISTVAR)
     set(${LISTVAR} ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}/Resources ${SHARED_LIB_STAGING_DIR}/Release/Resources /usr/lib)
   ELSE(WINDOWS)
     # Linux uses a single staging directory anyway.
-    set(${LISTVAR} ${SHARED_LIB_STAGING_DIR} /usr/lib)
+	IF (STANDALONE)
+      set(${LISTVAR} ${CMAKE_BINARY_DIR}/llcommon /usr/lib /usr/local/lib)
+    ELSE (STANDALONE)
+	  set(${LISTVAR} ${SHARED_LIB_STAGING_DIR} /usr/lib)
+    ENDIF (STANDALONE)
   ENDIF(WINDOWS)
 ENDMACRO(SET_TEST_LIST)
 
-- 
cgit v1.2.3


From e26f812e0d7edb2b50cc94e27f822ebe94a3647a Mon Sep 17 00:00:00 2001
From: Boroondas Gupte <hg@boroon.dasgupta.ch>
Date: Tue, 12 Oct 2010 00:41:46 +0200
Subject: SNOW-756 / VWR-23385 FOLLOWUP fixed indentation

---
 indra/cmake/LLAddBuildTest.cmake | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/indra/cmake/LLAddBuildTest.cmake b/indra/cmake/LLAddBuildTest.cmake
index d0f21a1e38..33f24d5410 100644
--- a/indra/cmake/LLAddBuildTest.cmake
+++ b/indra/cmake/LLAddBuildTest.cmake
@@ -257,10 +257,10 @@ MACRO(SET_TEST_LIST LISTVAR)
     set(${LISTVAR} ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}/Resources ${SHARED_LIB_STAGING_DIR}/Release/Resources /usr/lib)
   ELSE(WINDOWS)
     # Linux uses a single staging directory anyway.
-	IF (STANDALONE)
+    IF (STANDALONE)
       set(${LISTVAR} ${CMAKE_BINARY_DIR}/llcommon /usr/lib /usr/local/lib)
     ELSE (STANDALONE)
-	  set(${LISTVAR} ${SHARED_LIB_STAGING_DIR} /usr/lib)
+      set(${LISTVAR} ${SHARED_LIB_STAGING_DIR} /usr/lib)
     ENDIF (STANDALONE)
   ENDIF(WINDOWS)
 ENDMACRO(SET_TEST_LIST)
-- 
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(-)

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(+)

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(-)

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 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(-)

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 7ea2a1f9cc998396f437ec2535ddb1d51cce46b1 Mon Sep 17 00:00:00 2001
From: Dessie Linden <dessie@lindenlab.com>
Date: Wed, 13 Oct 2010 14:14:13 -0700
Subject: Added tag 2.2.0-beta3 for changeset b0cd7e150009

---
 .hgtags | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.hgtags b/.hgtags
index 162c25cd1d..24663fc42a 100644
--- a/.hgtags
+++ b/.hgtags
@@ -26,3 +26,4 @@ c6e6324f5be1401f077ad18a4a0f6b46451c2f7b last_sprint
 7076e22f9f43f479a4ea75eac447a36364bead5a beta_2.1.3
 7076e22f9f43f479a4ea75eac447a36364bead5a 2.2.0-beta1
 9822eb3e25f7fe0c28ffd8aba45c507caa383cbc 2.2.0-beta2
+b0cd7e150009809a0b5b0a9d5785cd4bb230413a 2.2.0-beta3
-- 
cgit v1.2.3