Commits

Christian Goetze (CG)  committed e7024fe Merge

Fix the reversion imported from viewer-hotfix via: "hg pull -r 1c95812ba38b ../viewer-public" - reviewed by richard

  • Participants
  • Parent commits 2b197b9, f6cfc13

Comments (0)

Files changed (283)

File doc/contributions.txt

 Robin Cornelius
 	SNOW-108
 	SNOW-204
+	SNOW-484
 	VWR-2488
 	VWR-9557
 	VWR-11128

File indra/llcharacter/llkeyframemotion.cpp

 		return FALSE;
 	}
 
+	if(mJointMotionList->mEmoteName==mID.asString())
+	{
+		llwarns << "Malformed animation mEmoteName==mID" << llendl;
+		return FALSE;
+	}
+
 	//-------------------------------------------------------------------------
 	// get loop
 	//-------------------------------------------------------------------------

File indra/llcharacter/llmultigesture.cpp

 	dp.unpackU32(mFlags, "flags");
 	return TRUE;
 }
-// *NOTE: result is translated in LLPreviewGesture::getLabel()
+// *TODO: Translate
 std::vector<std::string> LLGestureStepAnimation::getLabel() const 
 {
 	std::vector<std::string> strings;
 	dp.unpackU32(mFlags, "flags");
 	return TRUE;
 }
-// *NOTE: result is translated in LLPreviewGesture::getLabel()
+// *TODO: Translate
 std::vector<std::string> LLGestureStepSound::getLabel() const
 {
 	std::vector<std::string> strings;
 	dp.unpackU32(mFlags, "flags");
 	return TRUE;
 }
-// *NOTE: result is translated in LLPreviewGesture::getLabel()
+// *TODO: Translate
 std::vector<std::string> LLGestureStepChat::getLabel() const
 {
 	std::vector<std::string> strings;
 	dp.unpackU32(mFlags, "flags");
 	return TRUE;
 }
-// *NOTE: result is translated in LLPreviewGesture::getLabel()
+// *TODO: Translate
 std::vector<std::string> LLGestureStepWait::getLabel() const
 {
 	std::vector<std::string> strings;

File indra/llcommon/llformat.cpp

 
 #include <cstdarg>
 
-// common used function with va_list argument
-// wrapper for vsnprintf to be called from llformatXXX functions.
-static void va_format(std::string& out, const char *fmt, va_list va)
+std::string llformat(const char *fmt, ...)
 {
 	char tstr[1024];	/* Flawfinder: ignore */
+	va_list va;
+	va_start(va, fmt);
 #if LL_WINDOWS
 	_vsnprintf(tstr, 1024, fmt, va);
 #else
 	vsnprintf(tstr, 1024, fmt, va);	/* Flawfinder: ignore */
 #endif
-	out.assign(tstr);
+	va_end(va);
+	return std::string(tstr);
 }
-
-std::string llformat(const char *fmt, ...)
-{
-	std::string res;
-	va_list va;
-	va_start(va, fmt);
-	va_format(res, fmt, va);
-	va_end(va);
-	return res;
-}
-
-std::string llformat_to_utf8(const char *fmt, ...)
-{
-	std::string res;
-	va_list va;
-	va_start(va, fmt);
-	va_format(res, fmt, va);
-	va_end(va);
-
-#if LL_WINDOWS
-	// made converting to utf8. See EXT-8318.
-	res = ll_convert_string_to_utf8_string(res);
-#endif
-	return res;
-}

File indra/llcommon/llformat.h

 
 std::string LL_COMMON_API llformat(const char *fmt, ...);
 
-// the same version as above but ensures that returned string is in utf8 on windows
-// to enable correct converting utf8_to_wstring.
-std::string LL_COMMON_API llformat_to_utf8(const char *fmt, ...);
-
 #endif // LL_LLFORMAT_H

File indra/llcommon/llmd5.cpp

 
 }
 
+
+
+
+
+
 // MD5 update for istreams.
 // Like update for files; see above.
 
 
 }
 
-void  LLMD5::update(const std::string& s)
-{
-	update((unsigned char *)s.c_str(),s.length());
-}
+
+
+
 
 // MD5 finalization. Ends an MD5 message-digest operation, writing the
 // the message digest and zeroizing the context.
 	finalize();
 }
 
-void LLMD5::raw_digest(unsigned char *s) const
+void LLMD5::raw_digest(unsigned char *s)
 {
 	if (!finalized)
 	{
 
 
 
-void LLMD5::hex_digest(char *s) const
+void LLMD5::hex_digest(char *s)
 {
 	int i;
 
 
 
 
-
 std::ostream& operator<<(std::ostream &stream, LLMD5 context)
 {
 	char s[33];		/* Flawfinder: ignore */
 	return stream;
 }
 
-bool operator==(const LLMD5& a, const LLMD5& b)
-{
-	unsigned char a_guts[16];
-	unsigned char b_guts[16];
-	a.raw_digest(a_guts);
-	b.raw_digest(b_guts);
-	if (memcmp(a_guts,b_guts,16)==0)
-		return true;
-	else
-		return false;
-}
 
-bool operator!=(const LLMD5& a, const LLMD5& b)
-{
-	return !(a==b);
-}
+
 
 // PRIVATE METHODS:
 
+
+
 void LLMD5::init(){
   finalized=0;  // we just started!
 
     output[i] = ((uint4)input[j]) | (((uint4)input[j+1]) << 8) |
       (((uint4)input[j+2]) << 16) | (((uint4)input[j+3]) << 24);
 }
-
-

File indra/llcommon/llmd5.h

   void  update     (const uint1 *input, const uint4 input_length);
   void  update     (std::istream& stream);
   void  update     (FILE *file);
-  void  update     (const std::string& str);
   void  finalize   ();
 
 // constructors for special circumstances.  All these constructors finalize
   LLMD5              (const unsigned char *string, const unsigned int number);
   
 // methods to acquire finalized result
-  void				raw_digest(unsigned char *array) const;	// provide 16-byte array for binary data
-  void				hex_digest(char *string) const;			// provide 33-byte array for ascii-hex string
+  void				raw_digest(unsigned char *array);	// provide 16-byte array for binary data
+  void				hex_digest(char *string);			// provide 33-byte array for ascii-hex string
+  friend std::ostream&   operator<< (std::ostream&, LLMD5 context);
 
-  friend std::ostream&   operator<< (std::ostream&, LLMD5 context);
+
 
 private:
 
 
 };
 
-LL_COMMON_API bool operator==(const LLMD5& a, const LLMD5& b);
-LL_COMMON_API bool operator!=(const LLMD5& a, const LLMD5& b);
-
 #endif // LL_LLMD5_H

File indra/llcommon/llqueuedthread.cpp

 		llassert_always(req->getStatus() == STATUS_QUEUED);
 		break;
 	}
+	U32 start_priority = 0 ;
 	if (req)
 	{
 		req->setStatus(STATUS_INPROGRESS);
+		start_priority = req->getPriority();
 	}
 	unlockData();
 
 	// safe to access req.
 	if (req)
 	{
-		// process request
-		U32 start_priority = req->getPriority();
+		// process request		
 		bool complete = req->processRequest();
 
 		if (complete)

File indra/llcommon/llstring.cpp

 	}
 }
 
-std::string ll_convert_wide_to_string(const wchar_t* in, unsigned int code_page)
+std::string ll_convert_wide_to_string(const wchar_t* in)
 {
 	std::string out;
 	if(in)
 	{
 		int len_in = wcslen(in);
 		int len_out = WideCharToMultiByte(
-			code_page,
+			CP_ACP,
 			0,
 			in,
 			len_in,
 		if(pout)
 		{
 			WideCharToMultiByte(
-				code_page,
+				CP_ACP,
 				0,
 				in,
 				len_in,
 	}
 	return out;
 }
-
-wchar_t* ll_convert_string_to_wide(const std::string& in, unsigned int code_page)
-{
-	// From review:
-	// We can preallocate a wide char buffer that is the same length (in wchar_t elements) as the utf8 input,
-	// plus one for a null terminator, and be guaranteed to not overflow.
-
-	//	Normally, I'd call that sort of thing premature optimization,
-	// but we *are* seeing string operations taking a bunch of time, especially when constructing widgets.
-//	int output_str_len = MultiByteToWideChar(code_page, 0, in.c_str(), in.length(), NULL, 0);
-
-	// reserve place to NULL terminator
-	int output_str_len = in.length();
-	wchar_t* w_out = new wchar_t[output_str_len + 1];
-
-	memset(w_out, 0, output_str_len + 1);
-	int real_output_str_len = MultiByteToWideChar (code_page, 0, in.c_str(), in.length(), w_out, output_str_len);
-
-	//looks like MultiByteToWideChar didn't add null terminator to converted string, see EXT-4858.
-	w_out[real_output_str_len] = 0;
-
-	return w_out;
-}
-
-std::string ll_convert_string_to_utf8_string(const std::string& in)
-{
-	wchar_t* w_mesg = ll_convert_string_to_wide(in, CP_ACP);
-	std::string out_utf8(ll_convert_wide_to_string(w_mesg, CP_UTF8));
-	delete[] w_mesg;
-
-	return out_utf8;
-}
 #endif // LL_WINDOWS
 
 long LLStringOps::sPacificTimeOffset = 0;

File indra/llcommon/llstring.h

  *
  * This replaces the unsafe W2A macro from ATL.
  */
-LL_COMMON_API std::string ll_convert_wide_to_string(const wchar_t* in, unsigned int code_page);
-
-/**
- * Converts a string to wide string.
- *
- * It will allocate memory for result string with "new []". Don't forget to release it with "delete []".
- */
-LL_COMMON_API wchar_t* ll_convert_string_to_wide(const std::string& in, unsigned int code_page);
-
-/**
- * Converts incoming string into urf8 string
- *
- */
-LL_COMMON_API std::string ll_convert_string_to_utf8_string(const std::string& in);
+LL_COMMON_API std::string ll_convert_wide_to_string(const wchar_t* in);
 
 //@}
 #endif // LL_WINDOWS

File indra/llmessage/llcurl.cpp

 		responseCode = 499;
 		responseReason = strerror(code) + " : " + mErrorBuffer;
 	}
+		
+	if(responseCode >= 300 && responseCode < 400) //redirect
+	{
+		char new_url[512] ;
+		curl_easy_getinfo(mCurlEasyHandle, CURLINFO_REDIRECT_URL, new_url);
+		responseReason = new_url ; //get the new URL.
+	}
 
 	if (mResponder)
 	{	
 	setopt(CURLOPT_HEADERFUNCTION, (void*)&curlHeaderCallback);
 	setopt(CURLOPT_HEADERDATA, (void*)this);
 
-	// Allow up to five redirects
-	if(responder && responder->followRedir())
-	{
-		setopt(CURLOPT_FOLLOWLOCATION, 1);
-		setopt(CURLOPT_MAXREDIRS, MAX_REDIRECTS);
-	}
-
 	setErrorBuffer();
 	setCA();
 
 	curl_global_cleanup();
 }
 
-const unsigned int LLCurl::MAX_REDIRECTS = 5;

File indra/llmessage/llcurl.h

 			// Used internally to set the url for debugging later.
 			void setURL(const std::string& url);
 
-			virtual bool followRedir() 
-			{
-				return false;
-			}
-
 	public: /* but not really -- don't touch this */
 		U32 mReferenceCount;
 
 private:
 	static std::string sCAPath;
 	static std::string sCAFile;
-	static const unsigned int MAX_REDIRECTS;
 };
 
 namespace boost

File indra/llrender/llimagegl.cpp

 {
 	if ((forced || gDebugGL) && mTarget == GL_TEXTURE_2D)
 	{
-		{
-			//check viewport
-			GLint vp[4] ;
-			glGetIntegerv(GL_VIEWPORT, vp) ;
-			llcallstacks << "viewport: " << vp[0] << " : " << vp[1] << " : " << vp[2] << " : " << vp[3] << llcallstacksendl ;
-		}
-
 		GLint texname;
 		glGetIntegerv(GL_TEXTURE_BINDING_2D, &texname);
 		BOOL error = FALSE;
 		if (texname != mTexName)
 		{
-			llinfos << "Bound: " << texname << " Should bind: " << mTexName << " Default: " << LLImageGL::sDefaultGLTexture->getTexName() << llendl;
-
 			error = TRUE;
 			if (gDebugSession)
 			{

File indra/llui/llaccordionctrl.cpp

 #include "llfocusmgr.h"
 #include "lllocalcliprect.h"
 
-#include "lltrans.h"
-
 #include "boost/bind.hpp"
 
 static const S32 DRAGGER_BAR_MARGIN = 4;
 {
 	initNoTabsWidget(params.no_matched_tabs_text);
 
-	mNoVisibleTabsOrigString = LLTrans::getString(params.no_visible_tabs_text.initial_value().asString());
 	mSingleExpansion = params.single_expansion;
 	if(mFitParent && !mSingleExpansion)
 	{
 {
 	LLTextBox::Params tp = tb_params;
 	tp.rect(getLocalRect());
-	mNoMatchedTabsOrigString = LLTrans::getString(tp.initial_value().asString());
+	mNoMatchedTabsOrigString = tp.initial_value().asString();
 	mNoVisibleTabsHelpText = LLUICtrlFactory::create<LLTextBox>(tp, this);
 }
 
 			}
 			return 0;
 		}
-		else if(str_action == "deselect_current")
-		{
-			// Reset selection to the currently selected tab.
-			if (mSelectedTab)
-			{
-				mSelectedTab->setSelected(false);
-				mSelectedTab = NULL;
-				return 1;
-			}
-			return 0;
-		}
 	}
 	else if (info.has("scrollToShowRect"))
 	{
 		mScrollbar->setDocPos(0);
 }
 
-void LLAccordionCtrl::expandDefaultTab()
-{
-	if (mAccordionTabs.size() > 0)
-	{
-		LLAccordionCtrlTab* tab = mAccordionTabs.front();
-
-		if (!tab->getDisplayChildren())
-		{
-			tab->setDisplayChildren(true);
-		}
-
-		for (size_t i = 1; i < mAccordionTabs.size(); ++i)
-		{
-			tab = mAccordionTabs[i];
-
-			if (tab->getDisplayChildren())
-			{
-				tab->setDisplayChildren(false);
-			}
-		}
-
-		arrange();
-	}
-}
-
 void LLAccordionCtrl::sort()
 {
 	if (!mTabComparator)

File indra/llui/llaccordionctrl.h

 	S32		notifyParent(const LLSD& info);
 
 	void	reset		();
-	void	expandDefaultTab();
 
 	void	setComparator(const LLTabComparator* comp) { mTabComparator = comp; }
 	void	sort();
 
 	const LLAccordionCtrlTab* getSelectedTab() const { return mSelectedTab; }
 
-	bool getFitParent() const {return mFitParent;}
-
 private:
 	void	initNoTabsWidget(const LLTextBox::Params& tb_params);
 	void	updateNoTabsHelpTextVisibility();

File indra/llui/llaccordionctrltab.cpp

 #include "linden_common.h"
 
 #include "llaccordionctrltab.h"
-#include "llaccordionctrl.h"
 
 #include "lllocalcliprect.h"
 #include "llscrollbar.h"
 	mHeader = LLUICtrlFactory::create<LLAccordionCtrlTabHeader>(headerParams);
 	addChild(mHeader, 1);
 
-	LLFocusableElement::setFocusReceivedCallback(boost::bind(&LLAccordionCtrlTab::selectOnFocusReceived, this));
-
-	if (!p.selection_enabled)
+	if (p.selection_enabled)
 	{
-		LLFocusableElement::setFocusLostCallback(boost::bind(&LLAccordionCtrlTab::deselectOnFocusLost, this));
+		LLFocusableElement::setFocusReceivedCallback(boost::bind(&LLAccordionCtrlTab::selectOnFocusReceived, this));
 	}
 
 	reshape(100, 200,FALSE);
 		getParent()->notifyParent(LLSD().with("action", "select_current"));
 }
 
-void LLAccordionCtrlTab::deselectOnFocusLost()
-{
-	if(getParent()) // A parent may not be set if tabs are added dynamically.
-	{
-		getParent()->notifyParent(LLSD().with("action", "deselect_current"));
-	}
-
-}
-
 S32 LLAccordionCtrlTab::getHeaderHeight()
 {
 	return mHeaderVisible?HEADER_HEIGHT:0; 
 				setRect(panel_rect);
 			}
 			
-			//LLAccordionCtrl should rearrange accordion tab if one of accordion change its size
+			//LLAccordionCtrl should rearrange accodion tab if one of accordion change its size
 			if (getParent()) // A parent may not be set if tabs are added dynamically.
 				getParent()->notifyParent(info);
 			return 1;
 			return 1;
 		}
 	}
-	else if (info.has("scrollToShowRect"))
-	{
-		LLAccordionCtrl* parent = dynamic_cast<LLAccordionCtrl*>(getParent());
-		if (parent && parent->getFitParent())
-		{
-			//	EXT-8285 ('No attachments worn' text appears at the bottom of blank 'Attachments' accordion)
-			//	The problem was in passing message "scrollToShowRect" IN LLAccordionCtrlTab::notifyParent
-			//	FROM child LLScrollContainer TO parent LLAccordionCtrl with "it_parent" set to true.
-
-			//	It is wrong notification for parent accordion which leads to recursive call of adjustContainerPanel
-			//	As the result of recursive call of adjustContainerPanel we got LLAccordionCtrlTab
-			//	that reshaped and re-sized with different rectangles.
-
-			//	LLAccordionCtrl has own scrollContainer and LLAccordionCtrlTab has own scrollContainer
-			//	both should handle own scroll container's event.
-			//	So, if parent accordion "fit_parent" accordion tab should handle its scroll container events itself.
-
-			return 1;
-		}
-	}
-
 	return LLUICtrl::notifyParent(info);
 }
 

File indra/llui/llaccordionctrltab.h

 	LLView* findContainerView	();
 
 	void selectOnFocusReceived();
-	void deselectOnFocusLost();
 
 private:
 

File indra/llui/llbutton.cpp

+
 /** 
  * @file llbutton.cpp
  * @brief LLButton base class

File indra/llui/llcheckboxctrl.cpp

 	// must be big enough to hold all children
 	setUseBoundingRect(TRUE);
 
+	// Label (add a little space to make sure text actually renders)
+	const S32 FUDGE = 10;
+	S32 text_width = mFont->getWidth( p.label ) + FUDGE;
+	S32 text_height = llround(mFont->getLineHeight());
+	LLRect label_rect;
+	label_rect.setOriginAndSize(
+		llcheckboxctrl_hpad + llcheckboxctrl_btn_size + llcheckboxctrl_spacing,
+		llcheckboxctrl_vpad + 1, // padding to get better alignment
+		text_width + llcheckboxctrl_hpad,
+		text_height );
+
 	// *HACK Get rid of this with SL-55508... 
 	// this allows blank check boxes and radio boxes for now
 	std::string local_label = p.label;
 	}
 
 	LLTextBox::Params tbparams = p.label_text;
+	tbparams.rect(label_rect);
 	tbparams.initial_value(local_label);
 	if (p.font.isProvided())
 	{
 	mLabel = LLUICtrlFactory::create<LLTextBox> (tbparams);
 	addChild(mLabel);
 
-	S32 text_width = mLabel->getTextBoundingRect().getWidth();
-	S32 text_height = llround(mFont->getLineHeight());
-	LLRect label_rect;
-	label_rect.setOriginAndSize(
-		llcheckboxctrl_hpad + llcheckboxctrl_btn_size + llcheckboxctrl_spacing,
-		llcheckboxctrl_vpad + 1, // padding to get better alignment
-		text_width + llcheckboxctrl_hpad,
-		text_height );
-	mLabel->setShape(label_rect);
-
-
 	// Button
 	// Note: button cover the label by extending all the way to the right.
 	LLRect btn_rect;
 	static LLUICachedControl<S32> llcheckboxctrl_vpad ("UICheckboxctrlVPad", 0);
 	static LLUICachedControl<S32> llcheckboxctrl_btn_size ("UICheckboxctrlBtnSize", 0);
 
-	S32 text_width = mLabel->getTextBoundingRect().getWidth();
+	const S32 FUDGE = 10;
+	S32 text_width = mFont->getWidth( mLabel->getText() ) + FUDGE;
 	S32 text_height = llround(mFont->getLineHeight());
 	LLRect label_rect;
 	label_rect.setOriginAndSize(
 		llcheckboxctrl_vpad,
 		text_width,
 		text_height );
-	mLabel->setShape(label_rect);
+	mLabel->setRect(label_rect);
 
 	LLRect btn_rect;
 	btn_rect.setOriginAndSize(
 		llcheckboxctrl_vpad,
 		llcheckboxctrl_btn_size + llcheckboxctrl_spacing + text_width,
 		llmax( text_height, llcheckboxctrl_btn_size() ) );
-	mButton->setShape( btn_rect );
+	mButton->setRect( btn_rect );
 	
 	LLUICtrl::reshape(width, height, called_from_parent);
 }

File indra/llui/llflatlistview.cpp

 }
 
 
-bool LLFlatListView::removeItem(LLPanel* item)
+bool LLFlatListView::removeItem(LLPanel* item, bool rearrange)
 {
 	if (!item) return false;
 	if (item->getParent() != mItemsPanel) return false;
 	item_pair_t* item_pair = getItemPair(item);
 	if (!item_pair) return false;
 
-	return removeItemPair(item_pair);
+	return removeItemPair(item_pair, rearrange);
 }
 
-bool LLFlatListView::removeItemByValue(const LLSD& value)
+bool LLFlatListView::removeItemByValue(const LLSD& value, bool rearrange)
 {
 	if (value.isUndefined()) return false;
 	
 	item_pair_t* item_pair = getItemPair(value);
 	if (!item_pair) return false;
 
-	return removeItemPair(item_pair);
+	return removeItemPair(item_pair, rearrange);
 }
 
-bool LLFlatListView::removeItemByUUID(const LLUUID& uuid)
+bool LLFlatListView::removeItemByUUID(const LLUUID& uuid, bool rearrange)
 {
-	return removeItemByValue(LLSD(uuid));
+	return removeItemByValue(LLSD(uuid), rearrange);
 }
 
 LLPanel* LLFlatListView::getItemByValue(const LLSD& value) const
 
 void LLFlatListView::clear()
 {
+	// This will clear mSelectedItemPairs, calling all appropriate callbacks.
+	resetSelection();
+	
 	// do not use LLView::deleteAllChildren to avoid removing nonvisible items. drag-n-drop for ex.
 	for (pairs_iterator_t it = mItemPairs.begin(); it != mItemPairs.end(); ++it)
 	{
 		delete *it;
 	}
 	mItemPairs.clear();
-	mSelectedItemPairs.clear();
 
 	// also set items panel height to zero. Reshape it to allow reshaping of non-item children
 	LLRect rc = mItemsPanel->getRect();
 	return std::find(mSelectedItemPairs.begin(), it_end, item_pair) != it_end;
 }
 
-bool LLFlatListView::removeItemPair(item_pair_t* item_pair)
+bool LLFlatListView::removeItemPair(item_pair_t* item_pair, bool rearrange)
 {
 	llassert(item_pair);
 
 	bool deleted = false;
+	bool selection_changed = false;
 	for (pairs_iterator_t it = mItemPairs.begin(); it != mItemPairs.end(); ++it)
 	{
 		item_pair_t* _item_pair = *it;
 		if (selected_item_pair == item_pair)
 		{
 			it = mSelectedItemPairs.erase(it);
+			selection_changed = true;
 			break;
 		}
 	}
 	item_pair->first->die();
 	delete item_pair;
 
+	if (rearrange)
+	{
 	rearrangeItems();
 	notifyParentItemsRectChanged();
+	}
+
+	if (selection_changed && mCommitOnSelectionChange)
+	{
+		onCommit();
+	}
 
 	return true;
 }
 {
 	if (mNoItemsCommentTextbox)
 	{
-		mSelectedItemsBorder->setVisible(!visible);
+		if (visible)
+		{
+/*
+// *NOTE: MA 2010-02-04
+// Deprecated after params of the comment text box were moved into widget (flat_list_view.xml)
+// can be removed later if nothing happened.
+			// We have to update child rect here because of issues with rect after reshaping while creating LLTextbox
+			// It is possible to have invalid LLRect if Flat List is in LLAccordionTab
+			LLRect comment_rect = getLocalRect();
+
+			// To see comment correctly (EXT - 3244) in mNoItemsCommentTextbox we must get border width
+			// of LLFlatListView (@see getBorderWidth()) and stretch mNoItemsCommentTextbox to this width
+			// But getBorderWidth() returns 0 if LLFlatListView not visible. So we have to get border width
+			// from 'scroll_border'
+			LLViewBorder* scroll_border = getChild<LLViewBorder>("scroll border");
+			comment_rect.stretch(-scroll_border->getBorderWidth());
+			mNoItemsCommentTextbox->setRect(comment_rect);
+*/
+		}
+		mSelectedItemsBorder->setVisible(FALSE);
 		mNoItemsCommentTextbox->setVisible(visible);
 	}
 }
 {
 	if (size())
 	{
-		mSelectedItemsBorder->setVisible(TRUE);
+	mSelectedItemsBorder->setVisible(TRUE);
 	}
 	gEditMenuHandler = this;
 }

File indra/llui/llflatlistview.h

 		Params();
 	};
 	
+	// disable traversal when finding widget to hand focus off to
+	/*virtual*/ BOOL canFocusChildren() const { return FALSE; }
+
 	/**
 	 * Connects callback to signal called when Return key is pressed.
 	 */
 	 * Remove specified item
 	 * @return true if the item was removed, false otherwise 
 	 */
-	virtual bool removeItem(LLPanel* item);
+	virtual bool removeItem(LLPanel* item, bool rearrange = true);
 
 	/** 
 	 * Remove an item specified by value
 	 * @return true if the item was removed, false otherwise 
 	 */
-	virtual bool removeItemByValue(const LLSD& value);
+	virtual bool removeItemByValue(const LLSD& value, bool rearrange = true);
 
 	/** 
 	 * Remove an item specified by uuid
 	 * @return true if the item was removed, false otherwise 
 	 */
-	virtual bool removeItemByUUID(const LLUUID& uuid);
+	virtual bool removeItemByUUID(const LLUUID& uuid, bool rearrange = true);
 
 	/** 
 	 * Get an item by value 
 	void setAllowSelection(bool can_select) { mAllowSelection = can_select; }
 
 	/** Sets flag whether onCommit should be fired if selection was changed */
+	// FIXME: this should really be a separate signal, since "Commit" implies explicit user action, and selection changes can happen more indirectly.
 	void setCommitOnSelectionChange(bool b)		{ mCommitOnSelectionChange = b; }
 
 	/** Get number of selected items in the list */
 
 	virtual bool isSelected(item_pair_t* item_pair) const;
 
-	virtual bool removeItemPair(item_pair_t* item_pair);
+	virtual bool removeItemPair(item_pair_t* item_pair, bool rearrange);
 
 	/**
 	 * Notify parent about changed size of internal controls with "size_changes" action

File indra/llui/llfloater.cpp

 	}
 }
 
-void LLFloater::destroy()
-{
-	// LLFloaterReg should be synchronized with "dead" floater to avoid returning dead instance before
-	// it was deleted via LLMortician::updateClass(). See EXT-8458.
-	LLFloaterReg::removeInstance(mInstanceName, mKey);
-	die();
-}
-
 // virtual
 LLFloater::~LLFloater()
 {

File indra/llui/llfloater.h

 	BOOL			getAutoFocus() const { return mAutoFocus; }
 	LLDragHandle*	getDragHandle() const { return mDragHandle; }
 
-	void			destroy(); // Don't call this directly.  You probably want to call closeFloater()
+	void			destroy() { die(); } // Don't call this directly.  You probably want to call closeFloater()
 
 	virtual	void	onClickCloseBtn();
 

File indra/llui/llmenugl.cpp

 }
 
 //virtual
-LLSD LLMenuItemGL::getValue() const
-{
-	return getLabel();
-}
-
-//virtual
 BOOL LLMenuItemGL::handleAcceleratorKey(KEY key, MASK mask)
 {
 	if( getEnabled() && (!gKeyboard->getKeyRepeated(key) || mAllowKeyRepeat) && (key == mAcceleratorKey) && (mask == (mAcceleratorMask & MASK_NORMALKEYS)) )
 	}
 }
 
-//virtual
-LLSD LLMenuItemCheckGL::getValue() const
-{
-	// Get our boolean value from the view model.
-	// If we don't override this method then the implementation from
-	// LLMenuItemGL will return a string. (EXT-8501)
-	return LLUICtrl::getValue();
-}
-
 // called to rebuild the draw label
 void LLMenuItemCheckGL::buildDrawLabel( void )
 {

File indra/llui/llmenugl.h

 
 	// LLUICtrl overrides
 	/*virtual*/ void setValue(const LLSD& value);
-	/*virtual*/ LLSD getValue() const;
 
 	virtual BOOL handleAcceleratorKey(KEY key, MASK mask);
 
 	virtual void onCommit( void );
 	
 	virtual void setValue(const LLSD& value);
-	virtual LLSD getValue() const;
 
 	// called to rebuild the draw label
 	virtual void buildDrawLabel( void );

File indra/llui/llnotifications.cpp

 
 #include "llnotifications.h"
 
+#include "llinstantmessage.h"
 #include "llxmlnode.h"
 #include "lluictrl.h"
 #include "lluictrlfactory.h"
 #include "llsdserialize.h"
 #include "lltrans.h"
 #include "llnotificationslistener.h"
+#include "llstring.h"
 
 #include <algorithm>
 #include <boost/regex.hpp>
 LLSD LLNotification::asLLSD()
 {
 	LLSD output;
-	output["id"] = mId;
 	output["name"] = mTemplatep->mName;
 	output["form"] = getForm()->asLLSD();
 	output["substitutions"] = mSubstitutions;
 void LLPostponedNotification::onCachedNameReceived(const LLUUID& id, const std::string& first,
 		const std::string& last, bool is_group)
 {
-	gCacheName->getFullName(id, mName);
+	mName = first + " " + last;
+
+	LLStringUtil::trim(mName);
+	if (mName.empty())
+	{
+		llwarns << "Empty name received for Id: " << id << llendl;
+		mName = SYSTEM_FROM;
+	}
 	modifyNotificationParams();
 	LLNotifications::instance().add(mParams);
 	cleanup();

File indra/llui/llnotifications.h

 		}
 	};
 
-	LLNotificationResponderPtr getResponderPtr() { return mResponder; }
-
 private:
 	
 	LLUUID mId;

File indra/llui/llresmgr.cpp

 		{
 			if (fraction == remaining_count)
 			{
-				fraction_string = llformat_to_utf8("%d%c", fraction, getThousandsSeparator());
+				fraction_string = llformat("%d%c", fraction, getThousandsSeparator());
 			}
 			else
 			{
-				fraction_string = llformat_to_utf8("%3.3d%c", fraction, getThousandsSeparator());
+				fraction_string = llformat("%3.3d%c", fraction, getThousandsSeparator());
 			}
 			output = fraction_string + output;
 		}

File indra/llui/lltextbase.cpp

 	{
 		return a->getStart() < b->getStart();
 	}
-	return a->getEnd() < b->getEnd();
+	else
+	{
+		return a->getEnd() < b->getEnd();
+	}
 }
 
 
 
 LLTextBase::LLTextBase(const LLTextBase::Params &p) 
 :	LLUICtrl(p, LLTextViewModelPtr(new LLTextViewModel)),
-	mURLClickSignal(),
+	mURLClickSignal(NULL),
 	mMaxTextByteLength( p.max_text_length ),
 	mDefaultFont(p.font),
 	mFontShadow(p.font_shadow),
 	mParseHTML(p.allow_html),
 	mParseHighlights(p.parse_highlights),
 	mBGVisible(p.bg_visible),
-	mScroller(NULL)
+	mScroller(NULL),
+	mStyleDirty(true)
 {
 	if(p.allow_scroll)
 	{
 
 LLTextBase::~LLTextBase()
 {
-	// Menu, like any other LLUICtrl, is deleted by its parent - gMenuHolder
-
 	mSegments.clear();
+	delete mURLClickSignal;
 }
 
 void LLTextBase::initFromParams(const LLTextBase::Params& p)
 	return did_truncate;
 }
 
-LLStyle::Params LLTextBase::getDefaultStyleParams()
+const LLStyle::Params& LLTextBase::getDefaultStyleParams()
 {
-	return LLStyle::Params()
-		.color(LLUIColor(&mFgColor))
-		.readonly_color(LLUIColor(&mReadOnlyFgColor))
-		.font(mDefaultFont)
-		.drop_shadow(mFontShadow);
+	if (mStyleDirty)
+	{
+		  mDefaultStyle
+				  .color(LLUIColor(&mFgColor))
+				  .readonly_color(LLUIColor(&mReadOnlyFgColor))
+				  .font(mDefaultFont)
+				  .drop_shadow(mFontShadow);
+		  mStyleDirty = false;
+	}
+	return mDefaultStyle;
 }
 
 void LLTextBase::onValueChange(S32 start, S32 end)
 	if (cur_segment && cur_segment->handleMouseUp(x, y, mask))
 	{
 		// Did we just click on a link?
-		if (cur_segment->getStyle()
+		if (mURLClickSignal
+			&& cur_segment->getStyle()
 		    && cur_segment->getStyle()->isLink())
 		{
 			// *TODO: send URL here?
-			mURLClickSignal(this, LLSD() );
+			(*mURLClickSignal)(this, LLSD() );
 		}
 		return TRUE;
 	}
 void LLTextBase::setColor( const LLColor4& c )
 {
 	mFgColor = c;
+	mStyleDirty = true;
 }
 
 //virtual 
 void LLTextBase::setReadOnlyColor(const LLColor4 &c)
 {
 	mReadOnlyFgColor = c;
+	mStyleDirty = true;
 }
 
 //virtual
 
 LLTextBase::segment_set_t::iterator LLTextBase::getSegIterContaining(S32 index)
 {
+	if (index > getLength()) { return mSegments.end(); }
+
+	// when there are no segments, we return the end iterator, which must be checked by caller
+	if (mSegments.size() <= 1) { return mSegments.begin(); }
+
 	segment_set_t::iterator it = mSegments.upper_bound(new LLIndexSegment(index));
 	return it;
 }
 
 LLTextBase::segment_set_t::const_iterator LLTextBase::getSegIterContaining(S32 index) const
 {
+	if (index > getLength()) { return mSegments.end(); }
+
+	// when there are no segments, we return the end iterator, which must be checked by caller
+	if (mSegments.size() <= 1) { return mSegments.begin(); }
+
 	LLTextBase::segment_set_t::const_iterator it =  mSegments.upper_bound(new LLIndexSegment(index));
 	return it;
 }
 		? llmax(mVisibleTextRect.getWidth(), mTextBoundingRect.mRight)
 		: mVisibleTextRect.getWidth();
 
-	if (!mScroller)
-	{
-		// push doc rect to top of text widget
-		doc_rect.translate(0, mVisibleTextRect.getHeight() - doc_rect.mTop);
-	}
-
 	mDocumentView->setShape(doc_rect);
 
 	//update mVisibleTextRect *after* mDocumentView has been resized
 	}
 }
 
+boost::signals2::connection LLTextBase::setURLClickedCallback(const commit_signal_t::slot_type& cb)
+{
+	if (!mURLClickSignal)
+	{
+		mURLClickSignal = new commit_signal_t();
+	}
+	return mURLClickSignal->connect(cb);
+}
+
 //
 // LLTextSegment
 //
 }
 
 LLImageTextSegment::LLImageTextSegment(LLStyleConstSP style,S32 pos,class LLTextBase& editor)
-:	LLTextSegment(pos,pos+1),
-	mStyle( style ),
-	mEditor(editor)
+	:LLTextSegment(pos,pos+1)
+	,mStyle( style )
+	,mEditor(editor)
 {
 }
 

File indra/llui/lltextbase.h

 	virtual void			appendLineBreakSegment(const LLStyle::Params& style_params);
 	virtual void			appendImageSegment(const LLStyle::Params& style_params);
 	virtual void			appendWidget(const LLInlineViewSegment::Params& params, const std::string& text, bool allow_undo);
-
-public:
-	// Fired when a URL link is clicked
-	commit_signal_t mURLClickSignal;
+	boost::signals2::connection setURLClickedCallback(const commit_signal_t::slot_type& cb);
 
 protected:
 	// helper structs
 	void							createDefaultSegment();
 	virtual void					updateSegments();
 	void							insertSegment(LLTextSegmentPtr segment_to_insert);
-	LLStyle::Params					getDefaultStyleParams();
+	const LLStyle::Params&			getDefaultStyleParams();
 
 	//  manage lines
 	S32								getLineStart( S32 line ) const;
 	LLRect						mVisibleTextRect;			// The rect in which text is drawn.  Excludes borders.
 	LLRect						mTextBoundingRect;
 
+	// default text style
+	LLStyle::Params				mDefaultStyle;
+	bool						mStyleDirty;
+	const LLFontGL* const		mDefaultFont;		// font that is used when none specified, can only be set by constructor
+	const LLFontGL::ShadowType	mFontShadow;		// shadow style, can only be set by constructor
+
 	// colors
 	LLUIColor					mCursorColor;
 	LLUIColor					mFgColor;
 	LLFontGL::VAlign			mVAlign;
 	F32							mLineSpacingMult;	// multiple of line height used as space for a single line of text (e.g. 1.5 to get 50% padding)
 	S32							mLineSpacingPixels;	// padding between lines
-	const LLFontGL*				mDefaultFont;		// font that is used when none specified
-	LLFontGL::ShadowType		mFontShadow;
 	bool						mBorderVisible;
 	bool                		mParseHTML;			// make URLs interactive
 	bool						mParseHighlights;	// highlight user-defined keywords
 	bool						mScrollNeeded;		// need to change scroll region because of change to cursor position
 	S32							mScrollIndex;		// index of first character to keep visible in scroll region
 
+	// Fired when a URL link is clicked
+	commit_signal_t*			mURLClickSignal;
+
 };
 
 #endif

File indra/llui/lltexteditor.cpp

 	mContextMenu(NULL),
 	mShowContextMenu(p.show_context_menu)
 {
-	mDefaultFont = p.font;
-
 	mSourceID.generate();
 
 	//FIXME: use image?

File indra/llui/lluictrl.cpp

 class CompareByDefaultTabGroup: public LLCompareByTabOrder
 {
 public:
-	CompareByDefaultTabGroup(LLView::child_tab_order_t order, S32 default_tab_group):
+	CompareByDefaultTabGroup(const LLView::child_tab_order_t& order, S32 default_tab_group):
 			LLCompareByTabOrder(order),
 			mDefaultTabGroup(default_tab_group) {}
 private:
 {
 public:
 	/*virtual*/ void operator() (LLView * parent, viewList_t &children) const
-	{
+	{	
 		children.sort(CompareByDefaultTabGroup(parent->getCtrlOrder(), parent->getDefaultTabGroup()));
 	}
 };
 
+LLFastTimer::DeclareTimer FTM_FOCUS_FIRST_ITEM("Focus First Item");
+
 BOOL LLUICtrl::focusFirstItem(BOOL prefer_text_fields, BOOL focus_flash)
 {
+	LLFastTimer _(FTM_FOCUS_FIRST_ITEM);
 	// try to select default tab group child
 	LLCtrlQuery query = getTabOrderQuery();
 	// sort things such that the default tab group is at the front

File indra/llui/lluictrlfactory.h

 	void popFactoryFunctions();
 
 	template<typename T>
-	static T* createWidget(typename T::Params& params, LLView* parent = NULL)
+	static T* createWidget(const typename T::Params& params, LLView* parent = NULL)
 	{
 		T* widget = NULL;
 

File indra/llui/lluistring.cpp

 	mResult = mOrig;
 	
 	// get the defailt args + local args
-	LLStringUtil::format_map_t combined_args = LLTrans::getDefaultArgs();
-	combined_args.insert(mArgs.begin(), mArgs.end());
-	LLStringUtil::format(mResult, combined_args);
+	if (mArgs.empty())
+	{
+		LLStringUtil::format(mResult, LLTrans::getDefaultArgs());
+	}
+	else
+	{
+		LLStringUtil::format_map_t combined_args = LLTrans::getDefaultArgs();
+		combined_args.insert(mArgs.begin(), mArgs.end());
+		LLStringUtil::format(mResult, combined_args);
+	}
 }
 
 void LLUIString::updateWResult() const

File indra/llui/llview.h

 
 	virtual BOOL	postBuild() { return TRUE; }
 
-	child_tab_order_t getCtrlOrder() const		{ return mCtrlOrder; }
+	const child_tab_order_t& getCtrlOrder() const		{ return mCtrlOrder; }
 	ctrl_list_t getCtrlList() const;
 	ctrl_list_t getCtrlListSorted() const;
 	
 class LLCompareByTabOrder
 {
 public:
-	LLCompareByTabOrder(LLView::child_tab_order_t order) : mTabOrder(order) {}
+	LLCompareByTabOrder(const LLView::child_tab_order_t& order) : mTabOrder(order) {}
 	virtual ~LLCompareByTabOrder() {}
 	bool operator() (const LLView* const a, const LLView* const b) const;
 private:
 	virtual bool compareTabOrders(const LLView::tab_order_t & a, const LLView::tab_order_t & b) const { return a < b; }
-	LLView::child_tab_order_t mTabOrder;
+	// ok to store a reference, as this should only be allocated on stack during view query operations
+	const LLView::child_tab_order_t& mTabOrder;
 };
 
 template <class T> T* LLView::getChild(const std::string& name, BOOL recurse) const

File indra/llui/llviewquery.cpp

 		if (pre.first)
 		{
 			post = runFilters(view, filtered_children, mPostFilters);
+			}
 		}
-	}
 
 	if(pre.first && post.first) 
 	{
 		(*mSorterp)(view, views); // sort the children per the sorter
 	}
 	for(LLView::child_list_iter_t iter = views.begin();
-			iter != views.end();
-			iter++)
-		{
-			viewList_t indiv_children = this->run(*iter);
-			filtered_children.insert(filtered_children.end(), indiv_children.begin(), indiv_children.end());
-		}
+		iter != views.end();
+		iter++)
+	{
+		viewList_t indiv_children = this->run(*iter);
+		filtered_children.splice(filtered_children.end(), indiv_children);
+	}
 }
 
 filterResult_t LLViewQuery::runFilters(LLView * view, const viewList_t children, const filterList_t filters) const

File indra/llui/llviewquery.h

 	viewList_t operator () (LLView * view) const { return run(view); }
 
 	// override this method to provide iteration over other types of children
-	virtual void filterChildren(LLView * view, viewList_t & filtered_children) const;
+	virtual void filterChildren(LLView * view, viewList_t& filtered_children) const;
 
 private:
 

File indra/newview/app_settings/settings.xml

       <key>Value</key>
       <integer>2</integer>
     </map>
-    <key>AvatarBakedTextureUploadTimeout</key>
+    <key>AvatarBakedTextureTimeout</key>
     <map>
       <key>Comment</key>
       <string>Specifes the maximum time in seconds to wait before sending your baked textures for avatar appearance.  Set to 0 to disable and wait until all baked textures are at highest resolution.</string>
       <key>Type</key>
       <string>U32</string>
       <key>Value</key>
-      <integer>60</integer>
-    </map>
-    <key>AvatarBakedLocalTextureUpdateTimeout</key>
-    <map>
-      <key>Comment</key>
-      <string>Specifes the maximum time in seconds to wait before updating your appearance during appearance mode.</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>U32</string>
-      <key>Value</key>
-      <integer>10</integer>
-    </map>
-
+      <integer>120</integer>
+    </map>
     <key>AvatarSex</key>
     <map>
       <key>Comment</key>
       <key>Type</key>
       <string>String</string>
       <key>Value</key>
-      <string>https://www.xstreetsl.com/modules.php?name=Marketplace</string>
+      <string>http://marketplace.secondlife.com/</string>
     </map>
     <key>MarketplaceURL_objectFemale</key>
     <map>
       <key>Type</key>
       <string>String</string>
       <key>Value</key>
-      <string>https://www.xstreetsl.com/modules.php?name=Marketplace</string>
+      <string>http://marketplace.secondlife.com</string>
     </map>
     <key>MarketplaceURL_bodypartMale</key>
     <map>
       <key>Type</key>
       <string>String</string>
       <key>Value</key>
-      <string>https://www.xstreetsl.com/modules.php?name=Marketplace</string>
+      <string>http://marketplace.secondlife.com/</string>
     </map>
     <key>MarketplaceURL_glovesMale</key>
     <map>
       <key>Value</key>
       <integer>1</integer>
     </map>
+    <key>TipToastMessageLineCount</key>
+    <map>
+      <key>Comment</key>
+      <string>Max line count of text message on tip toast.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>10</integer>
+    </map>
 </map>
 </llsd>

File indra/newview/gpu_table.txt

 NVIDIA G103M					.*NVIDIA.*GeForce G *103M.*			0		1
 NVIDIA G105M					.*NVIDIA.*GeForce G *105M.*			0		1
 NVIDIA G210M					.*NVIDIA.*GeForce G210M.*			0		1
-NVIDIA GT 120					.*NVIDIA.*GeForce GT 12.*			1		1
+NVIDIA GT 120					.*NVIDIA.*GeForce GT 12.*			0		1
 NVIDIA GT 130					.*NVIDIA.*GeForce GT 13.*			1		1
-NVIDIA GT 220					.*NVIDIA.*GeForce GT 22.*			1		1
+NVIDIA GT 220					.*NVIDIA.*GeForce GT 22.*			0		1
 NVIDIA GT 230					.*NVIDIA.*GeForce GT 23.*			1		1
 NVIDIA GT 240					.*NVIDIA.*GeForce GT 24.*			1		1
 NVIDIA GT 320					.*NVIDIA.*GeForce GT 32.*			0		1

File indra/newview/llagent.cpp

 		return;
 	}
 
-	if (isAgentAvatarValid() && !gAgentAvatarp->isUsingBakedTextures())
+	if (gAgentCamera.cameraCustomizeAvatar())
 	{
 		// ignore baked textures when in customize mode
 		return;
 	}
 	else if(mTeleportState == TELEPORT_ARRIVING)
 	{
+		// First two position updates after a teleport tend to be weird
+		LLViewerStats::getInstance()->mAgentPositionSnaps.mCountOfNextUpdatesToIgnore = 2;
+
 		// Let the interested parties know we've teleported.
 		LLViewerParcelMgr::getInstance()->onTeleportFinished(false, getPositionGlobal());
 	}
 {
 	if (!isAgentAvatarValid()) return;
 
-	if (gAgentQueryManager.mNumPendingQueries > 0 && (isAgentAvatarValid() && gAgentAvatarp->isUsingBakedTextures())) 
+	if (gAgentQueryManager.mNumPendingQueries > 0 && !gAgentCamera.cameraCustomizeAvatar()) 
 	{
 		return;
 	}

File indra/newview/llagentcamera.cpp

 		*/
 	}
 
-	if(cameraCustomizeAvatar())
+	if( cameraCustomizeAvatar() )
 	{
 		new_distance = llclamp( new_distance, APPEARANCE_MIN_ZOOM, APPEARANCE_MAX_ZOOM );
 	}

File indra/newview/llagentlanguage.cpp

 // library includes
 #include "llui.h"					// getLanguage()
 
-// static
-void LLAgentLanguage::init()
+LLAgentLanguage::LLAgentLanguage()
 {
-	gSavedSettings.getControl("Language")->getSignal()->connect(boost::bind(&onChange));
-	gSavedSettings.getControl("InstallLanguage")->getSignal()->connect(boost::bind(&onChange));
-	gSavedSettings.getControl("SystemLanguage")->getSignal()->connect(boost::bind(&onChange));
-	gSavedSettings.getControl("LanguageIsPublic")->getSignal()->connect(boost::bind(&onChange));
+	gSavedSettings.getControl("Language")->getSignal()->connect(boost::bind(&update));
+	gSavedSettings.getControl("InstallLanguage")->getSignal()->connect(boost::bind(&update));
+	gSavedSettings.getControl("SystemLanguage")->getSignal()->connect(boost::bind(&update));
+	gSavedSettings.getControl("LanguageIsPublic")->getSignal()->connect(boost::bind(&update));
 }
 
-// static
-void LLAgentLanguage::onChange()
-{
-	// Clear inventory cache so that default names of inventory items
-	// appear retranslated (EXT-8308).
-	gSavedSettings.setBOOL("PurgeCacheOnNextStartup", TRUE);
-}
 
 // send language settings to the sim
 // static
 bool LLAgentLanguage::update()
 {
 	LLSD body;
-	std::string url;
-
-	if (gAgent.getRegion())
-	{
-		url = gAgent.getRegion()->getCapability("UpdateAgentLanguage");
-	}
-
+	std::string url = gAgent.getRegion()->getCapability("UpdateAgentLanguage");
 	if (!url.empty())
 	{
 		std::string language = LLUI::getLanguage();

File indra/newview/llagentlanguage.h

 #ifndef LL_LLAGENTLANGUAGE_H
 #define LL_LLAGENTLANGUAGE_H
 
-class LLAgentLanguage
+#include "llsingleton.h"	// LLSingleton<>
+#include "llevent.h"
+
+class LLAgentLanguage: public LLSingleton<LLAgentLanguage>, public LLOldEvents::LLSimpleListener
 {
  public:
-	static void init();
+	LLAgentLanguage();
 	static bool update();
-
- private:
-	static void onChange();
 };
 
 #endif // LL_LLAGENTLANGUAGE_H

File indra/newview/llagentwearables.cpp

 	gAgent.sendReliableMessage();
 }
 
-void LLAgentWearables::saveWearable(const LLWearableType::EType type, const U32 index, BOOL send_update,
-									const std::string new_name)
+void LLAgentWearables::saveWearable(const LLWearableType::EType type, const U32 index, BOOL send_update)
 {
 	LLWearable* old_wearable = getWearable(type, index);
 	if (old_wearable && (old_wearable->isDirty() || old_wearable->isOldVersion()))
 		LLInventoryItem* item = gInventory.getItem(old_item_id);
 		if (item)
 		{
-			std::string item_name = item->getName();
-			bool name_changed = false;
-			if (!new_name.empty() && (new_name != item->getName()))
-			{
-				llinfos << "saveWearable changing name from "  << item->getName() << " to " << new_name << llendl;
-				item_name = new_name;
-				name_changed = true;
-			}
 			// Update existing inventory item