Commits

falcon committed b816636 Merge

Merge

Comments (0)

Files changed (49)

doc/contributions.txt

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

indra/llcharacter/llkeyframemotion.cpp

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

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)

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);
 }
 

indra/newview/app_settings/settings.xml

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

indra/newview/llappearancemgr.cpp

 			{
 				removeCOFItemLinks(gAgentWearables.getWearableItemID(item_to_wear->getWearableType(), wearable_count-1), false);
 			}
-			addCOFItemLink(item_to_wear, do_update);
+			addCOFItemLink(item_to_wear, do_update, cb);
 		} 
 		break;
 	case LLAssetType::AT_BODYPART:
 	}
 	else
 	{
+		LLIsOfAssetType collector = LLIsOfAssetType(LLAssetType::AT_LINK);
+
 		LLInventoryModel::cat_array_t cof_cats;
 		LLInventoryModel::item_array_t cof_items;
-		gInventory.collectDescendents(cof, cof_cats, cof_items,
-									  LLInventoryModel::EXCLUDE_TRASH);
+		gInventory.collectDescendentsIf(cof, cof_cats, cof_items,
+									  LLInventoryModel::EXCLUDE_TRASH, collector);
 
 		LLInventoryModel::cat_array_t outfit_cats;
 		LLInventoryModel::item_array_t outfit_items;
-		gInventory.collectDescendents(base_outfit, outfit_cats, outfit_items,
-									  LLInventoryModel::EXCLUDE_TRASH);
+		gInventory.collectDescendentsIf(base_outfit, outfit_cats, outfit_items,
+									  LLInventoryModel::EXCLUDE_TRASH, collector);
 
-		if(outfit_items.count() != cof_items.count() -1)
+		if(outfit_items.count() != cof_items.count())
 		{
 			// Current outfit folder should have one more item than the outfit folder.
 			// this one item is the link back to the outfit folder itself.
 			return;
 		}
 
-		//getting rid of base outfit folder link to simplify comparison
-		for (LLInventoryModel::item_array_t::iterator it = cof_items.begin(); it != cof_items.end(); ++it)
-		{
-			if (*it == base_outfit_item)
-			{
-				cof_items.erase(it);
-				break;
-			}
-		}
-
 		//"dirty" - also means a difference in linked UUIDs and/or a difference in wearables order (links' descriptions)
 		std::sort(cof_items.begin(), cof_items.end(), sort_by_linked_uuid);
 		std::sort(outfit_items.begin(), outfit_items.end(), sort_by_linked_uuid);

indra/newview/llavatarlist.cpp

 void LLAvatarList::addAvalineItem(const LLUUID& item_id, const LLUUID& session_id, const std::string& item_name)
 {
 	LL_DEBUGS("Avaline") << "Adding avaline item into the list: " << item_name << "|" << item_id << ", session: " << session_id << LL_ENDL;
-	LLAvalineListItem* item = new LLAvalineListItem;
+	LLAvalineListItem* item = new LLAvalineListItem(/*hide_number=*/false);
 	item->setAvatarId(item_id, session_id, true, false);
 	item->setName(item_name);
 

indra/newview/llchiclet.cpp

 
 	if("end" == action)
 	{
-		LLScriptFloaterManager::instance().onRemoveNotification(getSessionId());
+		LLScriptFloaterManager::instance().removeNotification(getSessionId());
 	}
 }
 
 
 	if("end" == action)
 	{
-		LLScriptFloaterManager::instance().onRemoveNotification(getSessionId());
+		LLScriptFloaterManager::instance().removeNotification(getSessionId());
 	}
 }
 

indra/newview/llfolderview.h

 	BOOL needsAutoSelect() { return mNeedsAutoSelect && !mAutoSelectOverride; }
 	BOOL needsAutoRename() { return mNeedsAutoRename; }
 	void setNeedsAutoRename(BOOL val) { mNeedsAutoRename = val; }
+	void setAutoSelectOverride(BOOL val) { mAutoSelectOverride = val; }
 
 	void setCallbackRegistrar(LLUICtrl::CommitCallbackRegistry::ScopedRegistrar* registrar) { mCallbackRegistrar = registrar; }
 

indra/newview/llimview.cpp

 		}
 		else
 		{
+			// IM_SESSION_INVITE means that this is an Ad-hoc incoming chat
+			//		(it can be also Group chat but it is checked above)
+			// In this case mInitialTargetIDs contains Ad-hoc session ID and it should not be added
+			// to Recent People to prevent showing of an item with (???)(???). See EXT-8246.
+			// Concrete participants will be added into this list once they sent message in chat.
+			if (IM_SESSION_INVITE == dialog) return;
+
+			// implemented adding of all participants of an outgoing to Recent People List. See EXT-5694.
 			for(uuid_vec_t::iterator it = session->mInitialTargetIDs.begin();
 				it!=session->mInitialTargetIDs.end();++it)
 			{

indra/newview/llinventoryfunctions.cpp

 	return TRUE;
 }
 
+bool LLIsOfAssetType::operator()(LLInventoryCategory* cat, LLInventoryItem* item)
+{
+	if(mType == LLAssetType::AT_CATEGORY)
+	{
+		if(cat) return TRUE;
+	}
+	if(item)
+	{
+		if(item->getActualType() == mType) return TRUE;
+	}
+	return FALSE;
+}
+
 bool LLIsTypeWithPermissions::operator()(LLInventoryCategory* cat, LLInventoryItem* item)
 {
 	if(mType == LLAssetType::AT_CATEGORY)

indra/newview/llinventoryfunctions.h

 	LLAssetType::EType mType;
 };
 
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Class LLIsOfAssetType
+//
+// Implementation of a LLInventoryCollectFunctor which returns TRUE if
+// the item or category is of asset type passed in during construction.
+// Link types are treated as links, not as the types they point to.
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+class LLIsOfAssetType : public LLInventoryCollectFunctor
+{
+public:
+	LLIsOfAssetType(LLAssetType::EType type) : mType(type) {}
+	virtual ~LLIsOfAssetType() {}
+	virtual bool operator()(LLInventoryCategory* cat,
+							LLInventoryItem* item);
+protected:
+	LLAssetType::EType mType;
+};
+
 class LLIsTypeWithPermissions : public LLInventoryCollectFunctor
 {
 public:

indra/newview/lllocationinputctrl.cpp

 		//needs unescaped one
 		LLSLURL slurl;
 		LLAgentUI::buildSLURL(slurl, false);
-		mTextEntry->setText(slurl.getSLURLString());
+		mTextEntry->setText(LLURI::unescape(slurl.getSLURLString()));
 		mTextEntry->selectAll();
 
 		mMaturityButton->setVisible(FALSE);

indra/newview/llpanelgenerictip.cpp

 
 #include "llpanelgenerictip.h"
 #include "llnotifications.h"
+#include "llviewercontrol.h" // for gSavedSettings
 
 
 LLPanelGenericTip::LLPanelGenericTip(
 
 	childSetValue("message", notification->getMessage());
 
-	// set line max count to 3 in case of a very long name
-	snapToMessageHeight(getChild<LLTextBox> ("message"), 3);
+
+	S32 max_line_count =  gSavedSettings.getS32("TipToastMessageLineCount");
+	snapToMessageHeight(getChild<LLTextBox> ("message"), max_line_count);
 }
 

indra/newview/llpanelmaininventory.cpp

 		mFilterEditor->setCommitCallback(boost::bind(&LLPanelMainInventory::onFilterEdit, this, _2));
 	}
 
+	initListCommandsHandlers();
+
 	// *TODO:Get the cost info from the server
 	const std::string upload_cost("10");
-	childSetLabelArg("Upload Image", "[COST]", upload_cost);
-	childSetLabelArg("Upload Sound", "[COST]", upload_cost);
-	childSetLabelArg("Upload Animation", "[COST]", upload_cost);
-	childSetLabelArg("Bulk Upload", "[COST]", upload_cost);
+	mMenuAdd->getChild<LLMenuItemGL>("Upload Image")->setLabelArg("[COST]", upload_cost);
+	mMenuAdd->getChild<LLMenuItemGL>("Upload Sound")->setLabelArg("[COST]", upload_cost);
+	mMenuAdd->getChild<LLMenuItemGL>("Upload Animation")->setLabelArg("[COST]", upload_cost);
+	mMenuAdd->getChild<LLMenuItemGL>("Bulk Upload")->setLabelArg("[COST]", upload_cost);
 
-	initListCommandsHandlers();
 	return TRUE;
 }
 

indra/newview/llpanelonlinestatus.cpp

 
 #include "llnotifications.h"
 #include "llpanelonlinestatus.h"
+#include "llviewercontrol.h" // for gSavedSettings
 
 LLPanelOnlineStatus::LLPanelOnlineStatus(
 		const LLNotificationPtr& notification) :
 				notification, notification->getResponseTemplate()));
 	}
 
-	// set line max count to 3 in case of a very long name
-	snapToMessageHeight(getChild<LLTextBox> ("message"), 3);
+	S32 max_line_count =  gSavedSettings.getS32("TipToastMessageLineCount");
+	snapToMessageHeight(getChild<LLTextBox> ("message"), max_line_count);
 
 }

indra/newview/llparticipantlist.cpp

 	else
 	{
 		std::string display_name = LLVoiceClient::getInstance()->getDisplayName(avatar_id);
-		mAvatarList->addAvalineItem(avatar_id, mSpeakerMgr->getSessionID(), display_name.empty() ? display_name : LLTrans::getString("AvatarNameWaiting"));
+		mAvatarList->addAvalineItem(avatar_id, mSpeakerMgr->getSessionID(), display_name.empty() ? LLTrans::getString("AvatarNameWaiting") : display_name);
 		mAvalineUpdater->watchAvalineCaller(avatar_id);
 	}
 	adjustParticipant(avatar_id);

indra/newview/llpreviewtexture.cpp

 	  mLastWidth(0),
 	  mAspectRatio(0.f),
 	  mPreviewToSave(FALSE),
-	  mImage(NULL)
+	  mImage(NULL),
+	  mImageOldBoostLevel(LLViewerTexture::BOOST_NONE)
 {
 	updateImageID();
 	if (key.has("save_as"))
 	{
 		getWindow()->decBusyCount();
 	}
-
+	mImage->setBoostLevel(mImageOldBoostLevel);
 	mImage = NULL;
 }
 
 void LLPreviewTexture::loadAsset()
 {
 	mImage = LLViewerTextureManager::getFetchedTexture(mImageID, MIPMAP_TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE);
+	mImageOldBoostLevel = mImage->getBoostLevel();
 	mImage->setBoostLevel(LLViewerTexture::BOOST_PREVIEW);
 	mImage->forceToSaveRawImage(0) ;
 	mAssetStatus = PREVIEW_ASSET_LOADING;

indra/newview/llpreviewtexture.h

 	void				updateDimensions();
 	LLUUID				mImageID;
 	LLPointer<LLViewerFetchedTexture>		mImage;
-	BOOL				mLoadingFullImage;
+	S32                 mImageOldBoostLevel;
 	std::string			mSaveFileName;
 	LLFrameTimer		mSavedFileTimer;
+	BOOL				mLoadingFullImage;
 	BOOL                mShowKeepDiscard;
 	BOOL                mCopyToInv;
 
 	// This is stored off in a member variable, because the save-as
 	// button and drag and drop functionality need to know.
 	BOOL mIsCopyable;
-
+	BOOL mUpdateDimensions;
 	S32 mLastHeight;
 	S32 mLastWidth;
-	F32 mAspectRatio;
-	BOOL mUpdateDimensions;
+	F32 mAspectRatio;	
 
 	LLLoadedCallbackEntry::source_callback_list_t mCallbackTextureList ; 
 };

indra/newview/llscriptfloater.cpp

 
 	if(getNotificationId().notNull())
 	{
-		LLScriptFloaterManager::getInstance()->onRemoveNotification(getNotificationId());
+		// we shouldn't kill notification on exit since it may be used as persistent.
+		if (app_quitting)
+		{
+			LLScriptFloaterManager::getInstance()->onRemoveNotification(getNotificationId());
+		}
+		else
+		{
+			LLScriptFloaterManager::getInstance()->removeNotification(getNotificationId());
+		}
 	}
 }
 
 				set_new_message |= !floater->hasFocus();
 			}
 
-			onRemoveNotification(it->first);
+			removeNotification(it->first);
 		}
 	}
 
 	toggleScriptFloater(notification_id, set_new_message);
 }
 
+void LLScriptFloaterManager::removeNotification(const LLUUID& notification_id)
+{
+	LLNotificationPtr notification = LLNotifications::instance().find(notification_id);
+	if (notification != NULL && !notification->isCancelled())
+	{
+		LLNotificationsUtil::cancel(notification);
+	}
+
+	onRemoveNotification(notification_id);
+}
+
 void LLScriptFloaterManager::onRemoveNotification(const LLUUID& notification_id)
 {
 	if(notification_id.isNull())
 
 	LLIMWellWindow::getInstance()->removeObjectRow(notification_id);
 
+	mNotifications.erase(notification_id);
+
 	// close floater
 	LLScriptFloater* floater = LLFloaterReg::findTypedInstance<LLScriptFloater>("script_floater", notification_id);
 	if(floater)
 		floater->setNotificationId(LLUUID::null);
 		floater->closeFloater();
 	}
-
-	mNotifications.erase(notification_id);
 }
 
 void LLScriptFloaterManager::toggleScriptFloater(const LLUUID& notification_id, bool set_new_message)

indra/newview/llscriptfloater.h

 	void onAddNotification(const LLUUID& notification_id);
 
 	/**
+	 * Removes notification.
+	 */
+	void removeNotification(const LLUUID& notification_id);
+
+	/**
 	 * Handles notification removal.
 	 * Removes script notification toast, removes script chiclet, closes script floater
 	 */

indra/newview/llsyswellwindow.cpp

 //---------------------------------------------------------------------------------
 void LLIMWellWindow::ObjectRowPanel::onClosePanel()
 {
-	LLScriptFloaterManager::getInstance()->onRemoveNotification(mChiclet->getSessionId());
+	LLScriptFloaterManager::getInstance()->removeNotification(mChiclet->getSessionId());
 }
 
 void LLIMWellWindow::ObjectRowPanel::initChiclet(const LLUUID& notification_id, bool new_message/* = false*/)
 		ObjectRowPanel* obj_panel = dynamic_cast <ObjectRowPanel*> (panel);
 		if (obj_panel)
 		{
-			LLScriptFloaterManager::instance().onRemoveNotification(*iter);
+			LLScriptFloaterManager::instance().removeNotification(*iter);
 		}
 	}
 }

indra/newview/lltexturectrl.cpp

 		mInventoryPanel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
 		mInventoryPanel->setAllowMultiSelect(FALSE);
 
+		// Disable auto selecting first filtered item because it takes away
+		// selection from the item set by LLTextureCtrl owning this floater.
+		mInventoryPanel->getRootFolder()->setAutoSelectOverride(TRUE);
+
 		// Commented out to scroll to currently selected texture. See EXT-5403.
 		// // store this filter as the default one
 		// mInventoryPanel->getRootFolder()->getFilter()->markDefault();

indra/newview/llurllineeditorctrl.cpp

 
 	const std::string unescaped_text = wstring_to_utf8str(mText.getWString().substr(left_pos, length));
 	LLWString text_to_copy;
-	if (LLSLURL(unescaped_text).isValid())
+	// *HACK: Because LLSLURL is currently broken we cannot use it to check if unescaped_text is a valid SLURL (see EXT-8335).
+	if (LLStringUtil::startsWith(unescaped_text, "http://")) // SLURL
 		text_to_copy = utf8str_to_wstring(LLWeb::escapeURL(unescaped_text));
-	else
+	else // human-readable location
 		text_to_copy = utf8str_to_wstring(unescaped_text);
 		
 	gClipboard.copyFromString( text_to_copy );

indra/newview/llviewerinventory.h

 
 class LLInventoryCallbackManager : public LLDestroyClass<LLInventoryCallbackManager>
 {
-	friend LLDestroyClass<LLInventoryCallbackManager>;
+	friend class LLDestroyClass<LLInventoryCallbackManager>;
 public:
 	LLInventoryCallbackManager();
 	~LLInventoryCallbackManager();

indra/newview/llviewertexture.cpp

 	mFullHeight = height ;
 	mUseMipMaps = usemipmaps ;
 	mComponents = components ;
+	setTexelsPerImage();
 
 	mID.generate();
 	sImageCount++;
 
 	mFullWidth = 0;
 	mFullHeight = 0;
+	mTexelsPerImage = 0 ;
 	mUseMipMaps = FALSE ;
 	mComponents = 0 ;
 
 	mMaxVirtualSize = 0.f;
 	mNeedsGLTexture = FALSE ;
 	mMaxVirtualSizeResetInterval = 1;
-	mMaxVirtualSizeResetCounter = 1 ;
+	mMaxVirtualSizeResetCounter = mMaxVirtualSizeResetInterval ;
 	mAdditionalDecodePriority = 0.f ;	
 	mParcelMedia = NULL ;
 	mNumFaces = 0 ;
 	{
 		mFullWidth = mGLTexturep->getCurrentWidth() ;
 		mFullHeight = mGLTexturep->getCurrentHeight() ; 
-		mComponents = mGLTexturep->getComponents() ;		
+		mComponents = mGLTexturep->getComponents() ;	
+		setTexelsPerImage();
 	}
 
 	return ret ;
 	}	
 }
 
+void LLViewerTexture::setTexelsPerImage()
+{
+	S32 fullwidth = llmin(mFullWidth,(S32)MAX_IMAGE_SIZE_DEFAULT);
+	S32 fullheight = llmin(mFullHeight,(S32)MAX_IMAGE_SIZE_DEFAULT);
+	mTexelsPerImage = (F32)fullwidth * fullheight;
+}
+
 BOOL LLViewerTexture::isLargeImage()
 {
-	return mFullWidth * mFullHeight > LLViewerTexture::sMinLargeImageSize ;
+	return  (S32)mTexelsPerImage > LLViewerTexture::sMinLargeImageSize ;
 }
 
 //virtual 
 			
 			mFullWidth = mRawImage->getWidth();
 			mFullHeight = mRawImage->getHeight();
+			setTexelsPerImage();
 		}
 		else
 		{
 	{
 		// priority range = 100,000 - 500,000
 		S32 desired_discard = mDesiredDiscardLevel;
-		if (getDontDiscard())
-		{
-			desired_discard -= 2;
-		}
-		else if (!isJustBound() && mCachedRawImageReady)
+		if (!isJustBound() && mCachedRawImageReady)
 		{
 			if(mBoostLevel < BOOST_HIGH)
 			{
 
 		S32 ddiscard = cur_discard - desired_discard;
 		ddiscard = llclamp(ddiscard, -1, MAX_DELTA_DISCARD_LEVEL_FOR_PRIORITY);
-		priority = (ddiscard + 1) * PRIORITY_DELTA_DISCARD_LEVEL_FACTOR;
+		priority = (ddiscard + 1) * PRIORITY_DELTA_DISCARD_LEVEL_FACTOR;		
 	}
 
 	// Priority Formula:
 	// [10,000,000] + [1,000,000-9,000,000]  + [100,000-500,000]   + [1-20,000]  + [0-999]
 	if (priority > 0.0f)
 	{
+		bool large_enough = mCachedRawImageReady && ((S32)mTexelsPerImage > sMinLargeImageSize) ;
+		if(large_enough)
+		{
+			//Note: 
+			//to give small, low-priority textures some chance to be fetched, 
+			//cut the priority in half if the texture size is larger than 256 * 256 and has a 64*64 ready.
+			priority *= 0.5f ; 
+		}
+
 		pixel_priority = llclamp(pixel_priority, 0.0f, MAX_PRIORITY_PIXEL); 
 
 		priority += pixel_priority + PRIORITY_BOOST_LEVEL_FACTOR * mBoostLevel;
 
 		if ( mBoostLevel > BOOST_HIGH)
 		{
-			priority += PRIORITY_BOOST_HIGH_FACTOR;
+			if(mBoostLevel > BOOST_SUPER_HIGH)
+			{
+				//for very important textures, always grant the highest priority.
+				priority += PRIORITY_BOOST_HIGH_FACTOR;
+			}
+			else if(mCachedRawImageReady)
+			{
+				//Note: 
+				//to give small, low-priority textures some chance to be fetched, 
+				//if high priority texture has a 64*64 ready, lower its fetching priority.
+				setAdditionalDecodePriority(0.5f) ;
+			}
+			else
+			{
+				priority += PRIORITY_BOOST_HIGH_FACTOR;
+			}
 		}		
 
 		if(mAdditionalDecodePriority > 0.0f)
 		{
 			// priority range += 1,000,000.f-9,000,000.f
-			priority += PRIORITY_ADDITIONAL_FACTOR * (1.0 + mAdditionalDecodePriority * MAX_ADDITIONAL_LEVEL_FOR_PRIORITY);
+			F32 additional = PRIORITY_ADDITIONAL_FACTOR * (1.0 + mAdditionalDecodePriority * MAX_ADDITIONAL_LEVEL_FOR_PRIORITY);
+			if(large_enough)
+			{
+				//Note: 
+				//to give small, low-priority textures some chance to be fetched, 
+				//cut the additional priority to a quarter if the texture size is larger than 256 * 256 and has a 64*64 ready.
+				additional *= 0.25f ;
+			}
+			priority += additional;
 		}
 	}
 	return priority;
 		addTextureStats(0.f, FALSE) ;//reset
 	}
 
-	if(mForceToSaveRawImage)
-	{
-		setAdditionalDecodePriority(0.75f) ; //boost the fetching priority
-	}
-
 	for(U32 i = 0 ; i < mNumFaces ; i++)
 	{				
 		LLFace* facep = mFaceList[i] ;
 			{
 				mFullWidth = mRawImage->getWidth() << mRawDiscardLevel;
 				mFullHeight = mRawImage->getHeight() << mRawDiscardLevel;
+				setTexelsPerImage();
 
 				if(mFullWidth > MAX_IMAGE_SIZE || mFullHeight > MAX_IMAGE_SIZE)
 				{ 
 		//static const F64 log_2 = log(2.0);
 		static const F64 log_4 = log(4.0);
 
-		S32 fullwidth = llmin(mFullWidth,(S32)MAX_IMAGE_SIZE_DEFAULT);
-		S32 fullheight = llmin(mFullHeight,(S32)MAX_IMAGE_SIZE_DEFAULT);
-		mTexelsPerImage = (F32)fullwidth * fullheight;
-
 		F32 discard_level = 0.f;
 
 		// If we know the output width and height, we can force the discard

indra/newview/llviewertexture.h

 		BOOST_HIGH 			= 10,
 		BOOST_BUMP          ,
 		BOOST_TERRAIN		, // has to be high priority for minimap / low detail
-		BOOST_SELECTED		,
+		BOOST_SELECTED		,		
+		BOOST_AVATAR_BAKED_SELF	,
+		BOOST_AVATAR_SELF	, // needed for baking avatar
+		BOOST_SUPER_HIGH    , //textures higher than this need to be downloaded at the required resolution without delay.
 		BOOST_HUD			,
-		BOOST_AVATAR_BAKED_SELF	,
 		BOOST_ICON			,
 		BOOST_UI			,
 		BOOST_PREVIEW		,
 		BOOST_MAP			,
-		BOOST_MAP_VISIBLE	,
-		BOOST_AVATAR_SELF	, // needed for baking avatar
+		BOOST_MAP_VISIBLE	,		
 		BOOST_MAX_LEVEL,
 
 		//other texture Categories
 	void init(bool firstinit) ;	
 	void reorganizeFaceList() ;
 	void reorganizeVolumeList() ;
+	void setTexelsPerImage();
 private:
 	//note: do not make this function public.
 	/*virtual*/ LLImageGL* getGLTexture() const ;
 	S32 mFullHeight;
 	BOOL  mUseMipMaps ;
 	S8  mComponents;
+	F32 mTexelsPerImage;			// Texels per image.
 	mutable S8  mNeedsGLTexture;
 	mutable F32 mMaxVirtualSize;	// The largest virtual size of the image, in pixels - how much data to we need?	
 	mutable S32  mMaxVirtualSizeResetCounter ;
 	void scaleDown() ;		
 
 private:
-	
-	F32 mTexelsPerImage;			// Texels per image.
 	F32 mDiscardVirtualSize;		// Virtual size used to calculate desired discard	
 	F32 mCalculatedDiscardLevel;    // Last calculated discard level
 };

indra/newview/llvoavatar.cpp

 		{ // muted avatars update at 16 hz
 			mUpdatePeriod = 16;
 		}
-		else if (visible && mVisibilityRank <= LLVOAvatar::sMaxVisible)
+		else if (mVisibilityRank <= LLVOAvatar::sMaxVisible)
 		{ //first 25% of max visible avatars are not impostored
 			mUpdatePeriod = 1;
 		}
-		else if (visible && mVisibilityRank > LLVOAvatar::sMaxVisible * 4)
+		else if (mVisibilityRank > LLVOAvatar::sMaxVisible * 4)
 		{ //background avatars are REALLY slow updating impostors
 			mUpdatePeriod = 16;
 		}
-		else if (visible && mVisibilityRank > LLVOAvatar::sMaxVisible * 3)
+		else if (mVisibilityRank > LLVOAvatar::sMaxVisible * 3)
 		{ //back 25% of max visible avatars are slow updating impostors
 			mUpdatePeriod = 8;
 		}
-		else if (visible && mImpostorPixelArea <= impostor_area)
+		else if (mImpostorPixelArea <= impostor_area)
 		{  // stuff in between gets an update period based on pixel area
 			mUpdatePeriod = llclamp((S32) sqrtf(impostor_area*4.f/mImpostorPixelArea), 2, 8);
 		}
-		else if (visible && mVisibilityRank > LLVOAvatar::sMaxVisible)
-		{ // force nearby impostors in ultra crowded areas
-			mUpdatePeriod = 2;
-		}
 		else
-		{ // not impostored
-			mUpdatePeriod = 1;
+		{
+			//nearby avatars, update the impostors more frequently.
+			mUpdatePeriod = 4;
 		}
 
 		visible = (LLDrawable::getCurrentFrame()+mID.mData[0])%mUpdatePeriod == 0 ? TRUE : FALSE;
 	return ;
 }
 
+const F32  SELF_ADDITIONAL_PRI = 0.75f ;
+const F32  ADDITIONAL_PRI = 0.5f;
 void LLVOAvatar::addBakedTextureStats( LLViewerFetchedTexture* imagep, F32 pixel_area, F32 texel_area_ratio, S32 boost_level)
 {
 	//if this function is not called for the last 512 frames, the texture pipeline will stop fetching this texture.
-	static const S32  MAX_TEXTURE_VIRTURE_SIZE_RESET_INTERVAL = 512 ; //frames	
+	static const S32  MAX_TEXTURE_VIRTURE_SIZE_RESET_INTERVAL = 512 ; //frames		
 
 	imagep->resetTextureStats();
 	imagep->setCanUseHTTP(false) ; //turn off http fetching for baked textures.
 	mMinPixelArea = llmin(pixel_area, mMinPixelArea);	
 	imagep->addTextureStats(pixel_area / texel_area_ratio);
 	imagep->setBoostLevel(boost_level);
-	if(boost_level == LLViewerTexture::BOOST_AVATAR_BAKED_SELF)
-	{
-		imagep->setAdditionalDecodePriority(1.0f) ;
+	
+	if(boost_level != LLViewerTexture::BOOST_AVATAR_BAKED_SELF)
+	{
+		imagep->setAdditionalDecodePriority(ADDITIONAL_PRI) ;
+	}
+	else
+	{
+		imagep->setAdditionalDecodePriority(SELF_ADDITIONAL_PRI) ;
 	}
 }
 
 	std::sort(LLCharacter::sInstances.begin(), LLCharacter::sInstances.end(), CompareScreenAreaGreater());
 	
 	// Update the avatars that have changed status
-	U32 rank = 0;
+	U32 rank = 2; //1 is reserved for self. 
 	for (std::vector<LLCharacter*>::iterator iter = LLCharacter::sInstances.begin();
 		 iter != LLCharacter::sInstances.end(); ++iter)
 	{
 
 		if (inst->isSelf())
 		{
-			inst->setVisibilityRank(0);
+			inst->setVisibilityRank(1);
 		}
 		else if (inst->mDrawable.notNull() && inst->mDrawable->isVisible())
 		{

indra/newview/llvoavatar.h

  *******************************************************************************/
 
 }; // LLVOAvatar
+extern const F32  SELF_ADDITIONAL_PRI;
 
 #endif // LL_VO_AVATAR_H

indra/newview/llvoavatarself.cpp

 			imagep->resetTextureStats();
 			imagep->setMaxVirtualSizeResetInterval(16);
 			imagep->addTextureStats( desired_pixels / texel_area_ratio );
-			imagep->setAdditionalDecodePriority(1.0f) ;
+			imagep->setAdditionalDecodePriority(SELF_ADDITIONAL_PRI) ;
 			imagep->forceUpdateBindStats() ;
 			if (imagep->getDiscardLevel() < 0)
 			{

indra/newview/pipeline.cpp

 	if (LLPipeline::sWaterReflections && assertInitialized() && LLDrawPoolWater::sNeedsReflectionUpdate)
 	{
 		BOOL skip_avatar_update = FALSE;
-		if (gAgentCamera.getCameraAnimating() || gAgentCamera.getCameraMode() != CAMERA_MODE_MOUSELOOK)
+		if (!isAgentAvatarValid() || gAgentCamera.getCameraAnimating() || gAgentCamera.getCameraMode() != CAMERA_MODE_MOUSELOOK)
 		{
 			skip_avatar_update = TRUE;
 		}

indra/newview/skins/default/xui/en/menu_inventory_add.xml

                      function="File.UploadBulk"
                      parameter="" />
                 </menu_item_call>
-                <menu_item_separator
-                 layout="topleft" />
+	            <menu_item_call
+	             label="Set Default Upload Permissions"
+	             name="perm prefs">
+	                <menu_item_call.on_click
+	                 function="Floater.Toggle"
+	                 parameter="perm_prefs" />
+	            </menu_item_call>
             </menu>
 
             <menu_item_call

indra/newview/skins/default/xui/en/menu_viewer.xml

          label="Options"
          name="Options"
          tear_off="true">
-            <menu_item_call
-             label="Set Default Upload Permissions"
-             name="perm prefs">
-                <menu_item_call.on_click
-                 function="Floater.Toggle"
-                 parameter="perm_prefs" />
-            </menu_item_call>
 	   <menu_item_check
 	       label="Show Advanced Permissions"
 	       name="DebugPermissions">
                  function="File.UploadBulk"
                  parameter="" />
             </menu_item_call>
-            <menu_item_separator
-             layout="topleft" />
+            <menu_item_call
+             label="Set Default Upload Permissions"
+             name="perm prefs">
+                <menu_item_call.on_click
+                 function="Floater.Toggle"
+                 parameter="perm_prefs" />
+            </menu_item_call>
         </menu>
     </menu>
     <menu

indra/newview/skins/default/xui/en/panel_nearby_media.xml

 		follows="top|left"
 		font="SansSerif"
 		left="10"
+		name="nearby_media_title"
 		width="100">
 	  Nearby Media
 	</text>
 		font="SansSerif"
 		top_pad="15"
 		left="10"
+		name="show_text"
 		width="40">
 	  Show:
 	</text>

indra/newview/skins/default/xui/en/panel_outfits_list.xml

      background_visible="true"
      bg_alpha_color="DkGray2"
      bg_opaque_color="DkGray2"
-     no_matched_tabs_text.value="NoOutfitsTabsMatched"
+     no_matched_tabs_text.value="Didn't find what you're looking for? Try [secondlife:///app/search/all/[SEARCH_TERM] Search]."
      no_matched_tabs_text.v_pad="10"
-     no_visible_tabs_text.value="NoOutfits"
+     no_visible_tabs_text.value="You don't have any outfits yet. Try [secondlife:///app/search/all/ Search]"
      follows="all"
      height="400"
      layout="topleft"

indra/newview/skins/default/xui/en/strings.xml

 	<string name="InvFolder Animations">Animations</string>
 	<string name="InvFolder Gestures">Gestures</string>
 	<string name="InvFolder Favorite">Favorites</string>
+  <!-- historically default name of the Favorites folder can start from either "f" or "F" letter.
+  We should localize both of them with the same value -->
+	<string name="InvFolder favorite">Favorites</string>
 	<string name="InvFolder Current Outfit">Current Outfit</string>
 	<string name="InvFolder My Outfits">My Outfits</string>
 	<string name="InvFolder Accessories">Accessories</string>
   <!-- panel preferences general -->
   <string name="BusyModeResponseDefault">The Resident you messaged is in &apos;busy mode&apos; which means they have requested not to be disturbed.  Your message will still be shown in their IM panel for later viewing.</string>
 
-	<!-- Outfits Panel -->
-	<string name="NoOutfits">You don't have any outfits yet. Try [secondlife:///app/search/all/ Search]</string>
-	<string name="NoOutfitsTabsMatched">Didn't find what you're looking for? Try [secondlife:///app/search/all/[SEARCH_TERM] Search].</string>
-
 	<!-- Mute -->
 	<string name="MuteByName">(By name)</string>
 	<string name="MuteAgent">(Resident)</string>

indra/newview/skins/default/xui/fr/panel_group_general.xml

 		<spinner label="L$" name="spin_enrollment_fee" tool_tip="Les nouveaux membres doivent payer ces frais pour rejoindre le groupe quand l&apos;option Frais d&apos;inscription est cochée."/>
 		<combo_box name="group_mature_check" tool_tip="Définit si votre groupe contient des informations de type Modéré" width="195">
 			<combo_item name="select_mature">
-				- Sélectionner une catégorie de contenu -
+				- Catégorie de contenu -
 			</combo_item>
 			<combo_box.item label="Contenu Modéré" name="mature"/>
 			<combo_box.item label="Contenu Général" name="pg"/>

indra/newview/skins/default/xui/it/floater_about_land.xml

 			<text name="allow_label">
 				Permetti ad altri residenti di:
 			</text>
-			<check_box label="Modificare il terreno" name="edit land check" tool_tip="Se spuntato, chiunque può terraformare il tuo terreno. E&apos; preferibile lasciare questo quadrato non spuntato, dato che sarai sempre in grado di modificare il tuo terreno."/>
+			<check_box label="Modificare il terreno" name="edit land check" tool_tip="Se spuntata, chiunque può terraformare il tuo terreno. È preferibile lasciare questa opzione non spuntata, dato che sarai comunque in grado di modificare il tuo terreno."/>
 			<check_box label="Permetti il volo" name="check fly" tool_tip="Se spuntato, gli altri residenti potranno volare sul tuo terreno. Se non spuntato, potranno solamente arrivare in volo o sorvolare il terreno."/>
 			<text name="allow_label2">
 				Creare oggetti:
 			<check_box label="Tutti i residenti" name="edit objects check"/>
 			<check_box label="Gruppo" name="edit group objects check"/>
 			<text name="allow_label3">
-				Entrata oggetti:
+				Immissione oggetti:
 			</text>
 			<check_box label="Tutti i residenti" name="all object entry check"/>
 			<check_box label="Gruppo" name="group object entry check"/>
 			<text name="land_options_label">
 				Opzioni per il terreno:
 			</text>
-			<check_box label="Sicuro (senza danno)" name="check safe" tool_tip="Se spuntato, imposta il terreno su &apos;sicuro&apos;, disabilitando i danni da combattimento. Se non spuntato, viene abilitato il combattimento a morte."/>
+			<check_box label="Sicuro (senza danno)" name="check safe" tool_tip="Se spuntato, imposta il terreno su &apos;sicuro&apos;, disabilitando i danni da combattimento. Se non spuntato, viene abilitato il combattimento con danni."/>
 			<check_box label="Nessuna spinta" name="PushRestrictCheck" tool_tip="Previeni i colpi. Selezionare questa opzione può essere utile per prevenire comportamenti dannosi sul tuo terreno."/>
-			<check_box label="Mostra luogo nella ricerca (30 L$/settimana)" name="ShowDirectoryCheck" tool_tip="Lascia che questa terra sia vista dagli altri nei risultati di ricerca"/>
+			<check_box label="Mostra luogo nella ricerca (30 L$/settimana)" name="ShowDirectoryCheck" tool_tip="Consenti che il lotto sia visto nei risultati di ricerca"/>
 			<combo_box name="land category with adult">
 				<combo_box.item label="Tutte le categorie" name="item0"/>
 				<combo_box.item label="Luogo dei Linden" name="item1"/>
 			<spinner left_delta="104" name="media_size_width" tool_tip="Aumenta larghezza per far vedere meglio i media web, lascia a 0 per impostare il default."/>
 			<spinner name="media_size_height" tool_tip="Aumenta altezza per far vedere meglio i media web, lascia a 0 per impostare il default."/>
 			<text name="pixels">
-				pixels
+				pixel
 			</text>
 			<text name="Options:">
 				Opzioni

indra/newview/skins/default/xui/it/floater_buy_currency.xml

 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater name="buy currency" title="ACQUISTA L$">
 	<floater.string name="buy_currency">
-		Acquista [LINDENS] L$ per circa [LOCALAMOUNT]
+		acquistare [LINDENS] L$ per circa [LOCALAMOUNT]
 	</floater.string>
 	<text font="SansSerifLarge" left="5" name="info_need_more" right="-5">
 		Ti servono più L$
 	<text bottom_delta="16" name="purchase_warning_notenough">
 		Non stai acquistando abbastanza L$. Aumenta l&apos;importo.
 	</text>
-	<button label="Acquista adesso" name="buy_btn"/>
-	<button label="Cancella" name="cancel_btn"/>
+	<button label="Acquista" name="buy_btn"/>
+	<button label="Annulla" name="cancel_btn"/>
 	<text left="5" name="info_cannot_buy" right="-5">
 		Non in grado di acquistare
 	</text>

indra/newview/skins/default/xui/it/panel_people.xml

 <panel label="Persone" name="people_panel">
 	<string name="no_recent_people" value="Nessuna persona recente. Stai cercando persone da frequentare? Prova la [secondlife:///app/search/people Ricerca] o la [secondlife:///app/worldmap Mappa del mondo]."/>
 	<string name="no_filtered_recent_people" value="Non riesci a trovare quello che cerchi? Prova [secondlife:///app/search/people/[SEARCH_TERM] Cerca]."/>
-	<string name="no_one_near" value="Nessuno vicino. Stai cercando persone da frequentare? Try la [secondlife:///app/search/people Ricerca] o la [secondlife:///app/worldmap Mappa del mondo]."/>
+	<string name="no_one_near" value="Nessuno vicino. Stai cercando persone da frequentare? Prova a vedere la [secondlife:///app/search/people Ricerca] o la [secondlife:///app/worldmap Mappa del mondo]."/>
 	<string name="no_one_filtered_near" value="Non riesci a trovare quello che cerchi? Prova [secondlife:///app/search/people/[SEARCH_TERM] Cerca]."/>
 	<string name="no_friends_online" value="Nessun amico online"/>
 	<string name="no_friends" value="Nessun amico"/>

indra/newview/skins/default/xui/pt/floater_preview_gesture.xml

 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater name="gesture_preview">
 	<floater.string name="step_anim">
-		Selecionar animação:
+		Executar animação:
 	</floater.string>
 	<floater.string name="step_sound">
-		Selecionar animação:
+		Executar som:
 	</floater.string>
 	<floater.string name="step_chat">
-		Diga por bate-papo:
+		Executar bate-papo:
 	</floater.string>
 	<floater.string name="step_wait">
-		Espere:
+		Pausa
 	</floater.string>
 	<floater.string name="stop_txt">
 		Parar
 		Gatilho:
 	</text>
 	<text name="replace_text" tool_tip="Substituir a(s) palavra(s) de gatilho por estas palavras. Por exemplo, o gatilho &apos;oi&apos; substituído por &apos;olá&apos;, mudará a conversa de &apos;Eu digo oi&apos; para &apos;Eu digo olá&apos; e também executando o gesto!">
-		Substituir por:
+		Trocar por:
 	</text>
-	<line_editor name="replace_editor" tool_tip="Substituir a(s) palavra(s) gatilho por estas palavras.Por exemplo, o gatilho &apos;oi&apos; substituído por &apos;olá&apos;, mudará a conversa de &apos;Eu digo oi&apos; para &apos;Eu digo olá&apos; e também executando o gesto!"/>
+	<line_editor name="replace_editor" tool_tip="Substituir a(s) palavra(s) gatilho por estas palavras. Por exemplo, o gatilho &apos;oi&apos; substituído por &apos;olá&apos;, mudará a conversa de &apos;Eu digo oi&apos; para &apos;Eu digo olá&apos; e também executando o gesto!"/>
 	<text name="key_label">
-		Tecla de Atalho:
+		Atalho:
 	</text>
 	<combo_box label="Nenhum" left="116" name="modifier_combo" width="76"/>
 	<combo_box label="Nenhum" left_delta="80" name="key_combo" width="76"/>
 		(opções)
 	</text>
 	<radio_group name="animation_trigger_type">
-		<radio_item label="OK" name="start"/>
-		<radio_item label="Pare" name="stop"/>
+		<radio_item label="Iniciar" name="start"/>
+		<radio_item label="Parar" name="stop"/>
 	</radio_group>
 	<check_box bottom_delta="34" label="até que as animações estejam  concluídas" name="wait_anim_check"/>
 	<check_box bottom_delta="-30" label="segundos:" name="wait_time_check"/>
 	<line_editor left_delta="130" name="wait_time_editor"/>
 	<text name="help_label">
-		Se não incluir etapas de espera, todas as etapas ocorrem ao mesmo tempo.
+		Se não incluir uma pausa, todas as etapas ocorrem ao mesmo tempo.
 	</text>
-	<check_box label="Ativar" name="active_check" tool_tip="Gestos ativos podem ser gatilhados escrevendo suas frases de gatilho no chat ou através de suas teclas de atalho. Gestos normalmente ficam inativos quando existe um conflito nas teclas de atalho."/>
+	<check_box label="Ativar" name="active_check" tool_tip="Gestos podem ser ativados escrevendo suas frases de gatilho no chat ou teclando o atalho. Gestos normalmente ficam inativos quando existe um conflito nas teclas de atalho."/>
 	<button label="Prévia" name="preview_btn"/>
 	<button label="Salvar" name="save_btn"/>
 </floater>

indra/newview/skins/default/xui/pt/floater_tools.xml

 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater name="toolbox floater" short_title="BUILD TOOLS" title="" width="288">
 	<floater.string name="status_rotate">
-		Arrastar as bandas coloridas para girar o objeto
+		Arrastar as faixas coloridas para girar o objeto
 	</floater.string>
 	<floater.string name="status_scale">
 		Clicar e arrastar para esticar o lado selecionado
 		Clicar e reter para modificar a terra
 	</floater.string>
 	<floater.string name="status_camera">
-		Clique e arraste para mexer a câmera
+		Clicar e arrastar para mover a câmera
 	</floater.string>
 	<floater.string name="status_grab">
-		Arraste para mexer, Ctrl para levantar, Ctrl+Shift para girar
+		Arrastar para mexer, Ctrl para levantar, Ctrl+Shift para girar
 	</floater.string>
 	<floater.string name="status_place">
-		Clique no mundo para construir
+		Clicar em um lugar para construir
 	</floater.string>
 	<floater.string name="status_selectland">
 		Clicar e arrastar para selecionar a terra
 	<button label="" label_selected="" name="button create" tool_tip="Criar"/>
 	<button label="" label_selected="" name="button land" tool_tip="Terra"/>
 	<text name="text status" width="280">
-		Arraste para mover, shift+Arrastar para Copiar
+		Arrastar para mover, shift+Arrastar para copiar
 	</text>
 	<radio_group name="focus_radio_group">
 		<radio_item label="Zoom" name="radio zoom"/>
 		<radio_item label="Spin (Ctrl+Shift)" name="radio spin"/>
 	</radio_group>
 	<radio_group name="edit_radio_group">
-		<radio_item label="Movimentar" name="radio position"/>
+		<radio_item label="Mover" name="radio position"/>
 		<radio_item label="Rotacionar (Ctrl)" name="radio rotate"/>
-		<radio_item label="Stretch (Ctrl+Shift)" name="radio stretch"/>
-		<radio_item label="Face selecionada" name="radio select face"/>
+		<radio_item label="Esticar (Ctrl+Shift)" name="radio stretch"/>
+		<radio_item label="Selecionar face" name="radio select face"/>
 	</radio_group>
 	<check_box label="Editar partes linkadas" name="checkbox edit linked parts"/>
 	<text name="RenderingCost" tool_tip="Mostra o cálculo do custo de renderização do objeto">
 	</text>
 	<check_box initial_value="true" label="Esticar texturas" name="checkbox stretch textures"/>
 	<check_box initial_value="true" label="Mostrar na grade" name="checkbox snap to grid"/>
-	<combo_box name="combobox grid mode" tool_tip="Selecione o tipo de régua da grade onde o objeto será colocado">
-		<combo_box.item label="Grid SL" name="World"/>
-		<combo_box.item label="Grid local" name="Local"/>
-		<combo_box.item label="Grid de referência" name="Reference"/>
+	<combo_box name="combobox grid mode" tool_tip="Selecione a régua da grade onde o objeto será colocado">
+		<combo_box.item label="Grade SL" name="World"/>
+		<combo_box.item label="Local" name="Local"/>
+		<combo_box.item label="Referência" name="Reference"/>
 	</combo_box>
 	<button label="Opções..." label_selected="Opções..." name="Options..." tool_tip="Mais opções de grade"/>
 	<button label="" label_selected="" name="ToolCube" tool_tip="Cubo"/>
 	<check_box initial_value="true" label="Copiar parte central" name="checkbox copy centers"/>
 	<check_box label="Girar cópia" name="checkbox copy rotates"/>
 	<radio_group name="land_radio_group">
-		<radio_item label="Selecionar Terra" name="radio select land"/>
+		<radio_item label="Selecionar terra" name="radio select land"/>
 		<radio_item label="Aplainar" name="radio flatten"/>
-		<radio_item label="Subir" name="radio raise"/>
+		<radio_item label="Elevar" name="radio raise"/>
 		<radio_item label="Abaixar" name="radio lower"/>
-		<radio_item label="Suavizar" name="radio smooth"/>
-		<radio_item label="Endurecer" name="radio noise"/>
+		<radio_item label="Alisar" name="radio smooth"/>
+		<radio_item label="Irregularizar" name="radio noise"/>
 		<radio_item label="Reverter" name="radio revert"/>
 	</radio_group>
 	<text name="Bulldozer:">
 				Você não pode modificar estes objetos
 			</panel.string>
 			<panel.string name="text modify warning">
-				Selecione o objeto intereiro para configurar as autorizações
+				Selecione o objeto inteiro para configurar as autorizações
 			</panel.string>
 			<panel.string name="Cost Default">
 				Preço: L$
 				Preço unitário: L$
 			</panel.string>
 			<panel.string name="Cost Mixed">
-				Preço Misturado
+				Preço misto
 			</panel.string>
 			<panel.string name="Sale Mixed">
-				Venda Misturada
+				Venda mista
 			</panel.string>
 			<text name="Name:">
 				Nome:
 				<combo_box.item label="Tocar (padrão)" name="Touch/grab(default)"/>
 				<combo_box.item label="Sentar no objeto" name="Sitonobject"/>
 				<combo_box.item label="Comprar objeto" name="Buyobject"/>
-				<combo_box.item label="Pagar Objeto" name="Payobject"/>
+				<combo_box.item label="Pagar objeto" name="Payobject"/>
 				<combo_box.item label="Abrir" name="Open"/>
 				<combo_box.item label="Zoom" name="Zoom"/>
 			</combo_box>
 		</panel>
 		<panel label="Recursos" name="Features">
 			<text name="select_single" width="272">
-				Selecione apenas uma primitiva para editar suas características.
+				Selecione apenas um prim para editar suas características.
 			</text>
 			<text name="edit_object">
 				Editar características do Objeto:
 		<button label="Sobre terrenos" label_selected="Sobre terrenos" name="button about land"/>
 		<check_box label="Mostrar donos" name="checkbox show owners" tool_tip="Colorir lotes de acordo com seus donos:    Green = Sua terra  Aqua = Terra do seu grupo  Red = Possuída por outros  Yellow = À venda  Purple = A leilão  Grey = Pública"/>
 		<text name="label_parcel_modify">
-			Modificar Lote
+			Modificar lote
 		</text>
 		<button label="Subdividir" label_selected="Subdividir" name="button subdivide land"/>
 		<button label="Juntar" label_selected="Juntar" name="button join land"/>

indra/newview/skins/default/xui/pt/floater_voice_effect.xml

 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater label="Lugares" name="voice_effects" title="DISTORCENDO VOZ">
+<floater label="Lugares" name="voice_effects" title="EFEITOS DE VOZ">
 	<string name="no_voice_effect">
 		(Não distorcer voz)
 	</string>

indra/newview/skins/default/xui/pt/floater_world_map.xml

 		</text>
 		<check_box label="Terra à Venda" name="land_for_sale_chk"/>
 		<text name="land_sale_label">
-			Venda de terreno
+			Terreno à venda
 		</text>
 		<text name="by_owner_label">
-			o proprietário
+			pelo dono
 		</text>
 		<text name="auction_label">
-			leilão de terrenos
+			leilão
 		</text>
 		<button label="Voltar ao meu início" label_selected="Voltar ao meu início" name="Go Home" tool_tip="Teletransportar para meu início"/>
 		<text name="Home_label">
 		</text>
 		<check_box label="PG" name="event_chk"/>
 		<text name="pg_label">
-			Público geral
+			Geral
 		</text>
 		<check_box label="Mature" name="events_mature_chk"/>
 		<text name="events_mature_label">

indra/newview/skins/default/xui/pt/menu_inventory.xml

 	<menu label="Novas roupas" name="New Clothes">
 		<menu_item_call label="Nova camisa" name="New Shirt"/>
 		<menu_item_call label="Nova calça" name="New Pants"/>
-		<menu_item_call label="Novos calçados" name="New Shoes"/>
+		<menu_item_call label="Novos sapatos" name="New Shoes"/>
 		<menu_item_call label="Novas meias" name="New Socks"/>
 		<menu_item_call label="Nova jaqueta" name="New Jacket"/>
 		<menu_item_call label="Nova saia" name="New Skirt"/>
 	<menu_item_call label="Teletransporte" name="Landmark Open"/>
 	<menu_item_call label="Abrir" name="Animation Open"/>
 	<menu_item_call label="Abrir" name="Sound Open"/>
-	<menu_item_call label="Substituir equipamento" name="Replace Outfit"/>
-	<menu_item_call label="Adicionar ao equipamento" name="Add To Outfit"/>
+	<menu_item_call label="Substituir look" name="Replace Outfit"/>
+	<menu_item_call label="Adicionar a look" name="Add To Outfit"/>
 	<menu_item_call label="Tirar do look atual" name="Remove From Outfit"/>
 	<menu_item_call label="Encontrar original" name="Find Original"/>
 	<menu_item_call label="Remover item" name="Purge Item"/>
 	<menu_item_call label="Ativar" name="Activate"/>
 	<menu_item_call label="Desativar" name="Deactivate"/>
 	<menu_item_call label="Salvar como" name="Save As"/>
-	<menu_item_call label="Retirar de si mesmo" name="Detach From Yourself"/>
+	<menu_item_call label="Tirar de si mesmo" name="Detach From Yourself"/>
 	<menu_item_call label="Vestir" name="Wearable And Object Wear"/>
 	<menu label="Anexar a" name="Attach To"/>
 	<menu label="Anexar ao HUD" name="Attach To HUD"/>

indra/newview/skins/default/xui/pt/panel_landmark_info.xml

 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="landmark_info">
-	<string name="title_create_landmark" value="Criar Landmark"/>
-	<string name="title_edit_landmark" value="Editar Landmark"/>
-	<string name="title_landmark" value="Landmark"/>
-	<string name="not_available" value="(N\A)"/>
+	<string name="title_create_landmark" value="Criar marco"/>
+	<string name="title_edit_landmark" value="Editar marco"/>
+	<string name="title_landmark" value="Marco"/>
+	<string name="not_available" value="(N/A)"/>
 	<string name="unknown" value="(desconhecido)"/>
 	<string name="public" value="(público)"/>
 	<string name="server_update_text">
 		Informação do lugar não disponível sem atualização do servidor.
 	</string>
 	<string name="server_error_text">
-		Informações sobre esta localização não está disponível neste momento, por favor, tente novamente mais tarde.
+		No momento não há informações sobre este lugar; por favor tente novamente mais tarde.
 	</string>
 	<string name="server_forbidden_text">
-		Informações sobre esta localização está indisponível devido a restrições de acesso. Por favor, verifique as permissões com o proprietário da parcela.
+		Os dados deste lugar não estão indisponíveis devido a restrições de acesso. Verifique as permissões com o proprietário do terreno ou parcela.
 	</string>
 	<string name="acquired_date">
 		[wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local]
 	</string>
 	<button name="back_btn" tool_tip="Atrás"/>
-	<text name="title" value="Perfil do Lugar"/>
+	<text name="title" value="Perfil do lugar"/>
 	<scroll_container name="place_scroll">
 		<panel name="scrolling_panel">
 			<text name="maturity_value" value="desconhecido"/>
 			<panel name="landmark_edit_panel">
 				<text name="title_label" value="Título:"/>
 				<text name="notes_label" value="Minhas notas:"/>
-				<text name="folder_label" value="Localização da Landmark:"/>
+				<text name="folder_label" value="Localização do marco:"/>
 			</panel>
 		</panel>
 	</scroll_container>

indra/newview/skins/default/xui/pt/panel_place_profile.xml

 		Dados sobre o local não disponíveis no momento. Favor tentar mais tarde.
 	</string>
 	<string name="server_forbidden_text">
-		Dados sobre o local controlados por lista de acesso.   Verifique se você está autorizado a acessá-los com o dono do lote.
+		Dados sobre o local controlados por lista de acesso. Verifique se você está autorizado a acessá-los com o dono do lote.
 	</string>
 	<string name="acquired_date">
 		[wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local]
 						<text name="rating_label" value="Classificação:"/>
 						<text name="rating_value" value="desconhecido"/>
 						<text name="voice_label" value="Voz:"/>
-						<text name="voice_value" value="Ligar"/>
+						<text name="voice_value" value="Ligado"/>
 						<text name="fly_label" value="Voar:"/>
-						<text name="fly_value" value="Ligar"/>
+						<text name="fly_value" value="Ligado"/>
 						<text name="push_label" value="Empurrar:"/>
-						<text name="push_value" value="Desligar"/>
+						<text name="push_value" value="Desligado"/>
 						<text name="build_label" value="Construir:"/>
-						<text name="build_value" value="Ligar"/>
+						<text name="build_value" value="Ligado"/>
 						<text name="scripts_label" value="Scripts:"/>
-						<text name="scripts_value" value="Ligar"/>
+						<text name="scripts_value" value="Ligado"/>
 						<text name="damage_label" value="Dano:"/>
-						<text name="damage_value" value="Desligar"/>
-						<button label="Sobre terrenos" name="about_land_btn"/>
+						<text name="damage_value" value="Desligado"/>
+						<button label="Sobre o terreno" name="about_land_btn"/>
 					</panel>
 				</accordion_tab>
 				<accordion_tab name="region_information_tab" title="Região">

indra/newview/skins/default/xui/pt/panel_preferences_privacy.xml

 		Localização dos logs:
 	</text>
 	<line_editor left="278" name="log_path_string" right="-20"/>
-	<button label="Navegar" label_selected="Navegar" name="log_path_button" width="120"/>
-	<button label="Lista dos bloqueados" name="block_list"/>
+	<button label="Procurar" label_selected="Procurar" name="log_path_button" width="120"/>
+	<button label="Lista de bloqueados" name="block_list"/>
 </panel>

indra/newview/skins/default/xui/pt/role_actions.xml

 <role_actions>
 	<action_set description="Esta habilidades incluem poderes de adicionar ou remover membros do grupo e permitir que novos membros se juntem sem um convite." name="Membership">
 		<action description="Convidar pessoas para este grupo" longdescription="Em Membros &gt; Cargos, use o botão &apos;Convidar&apos; para convidar pessoas para entrar no grupo." name="member invite"/>
-		<action description="Expulsar membros deste grupo" longdescription="Em Membros &gt; Cargos, use o botão &apos;Ejetar&apos; para tirar pessoas do grupo. Proprietários podem expulsar qualquer pessoa, menos outro proprietário.  Se você não é Proprietário, um membro só pode ser expulso se tiver cargo &apos;Todos&apos; e nenhum outro cargo.  Para destituir um membro de seu cargo, você precisa ter a função &apos;Destituir membro com cargo&apos;." name="member eject"/>
+		<action description="Expulsar membros deste grupo" longdescription="Em Membros &gt; Cargos, use o botão &apos;Ejetar&apos; para tirar pessoas do grupo. Proprietários podem expulsar qualquer pessoa, menos outro proprietário. Se você não é Proprietário, um membro só pode ser expulso se tiver cargo &apos;Todos&apos; e nenhum outro cargo.  Para destituir um membro de seu cargo, você precisa ter a função &apos;Destituir membro com cargo&apos;." name="member eject"/>
 		<action description="Alterna entre &apos;Inscrições abertas&apos; e &apos;Taxa de associação&apos;." longdescription="Ative &apos;Inscrições abertas&apos; para que novos membros entrem no grupo sem convite, mude a &apos;Taxa de associação&apos; na seção Geral." name="member options"/>
 	</action_set>
 	<action_set description="Estas habilidades incluem poderes de adicionar, remover e mudar funções do grupo; adicionar e remover membros em funções e designar habilidades a funções." name="Roles">
 		<action description="Mudar apresentação, insígnia, &apos;Publicar na web&apos;, e quais membros estão publicamente visíveis em Informações do Grupo." longdescription="Modificar o estatuto, símbolo e exibição nos resultados de busca.  Use a seção Geral." name="group change identity"/>
 	</action_set>
 	<action_set description="Estas funções incluem poderes de transferir, vender e modificar os terrenos do grupo.  Para acessar a janela &apos;Sobre terrenos&apos;, clique no chão com o botão direito e selecione  &apos;Sobre terrenos&apos;. Ou clique no ícone &apos;i&apos; da barra de navegação." name="Parcel Management">
-		<action description="Transferir  e comprar terreno para o grupo" longdescription="Transfere e compre terreno para o grupo. É feito em Sobre o terreno &gt; aba Geral." name="land deed"/>
+		<action description="Transferir e comprar terreno para o grupo" longdescription="Transfere e compre terreno para o grupo. É feito em Sobre o terreno &gt; aba Geral." name="land deed"/>
 		<action description="Abandonar terreno para Governador Linden" longdescription="Abandone terreno para Governador Linden. *AVISO* Qualquer membro em uma função com esta habilidade pode abandonar o terreno pertencente ao grupo em Sobre o terreno &gt; aba Geral, revertendo à posse Linden sem uma venda! Certifique-se de saber o que está fazendo antes de designar esta habilidade." name="land release"/>
 		<action description="Definir terreno para informação de venda" longdescription="Defina informações de venda para terreno. *AVISO* Qualquer membro em uma função com esta habilidade pode vender terrenos pertencentes ao grupo em Sobre o terreno &gt; aba Geral como quiser! Certifique-se de sabe o que está fazendo antes de designar esta habilidade." name="land set sale info"/>
 		<action description="Subdividir e unir parcelas" longdescription="Juntar ou dividir lotes.  Clique no chão com o botão direito, selecione &apos;Editar terreno&apos; e arraste o mouse sobre o terreno para ver as opções.  Para dividir um terreno, selecione a área a ser dividida e clique em &apos;Dividir&apos;.  Para juntar terrenos, selecione dois ou mais lotes adjacentes e clique em &apos;Juntar&apos;." name="land divide join"/>