diff options
32 files changed, 266 insertions, 138 deletions
| @@ -229,6 +229,14 @@ c4911ec8cd81e676dfd2af438b3e065407a94a7a 3.2.1-start  a8c7030d6845186fac7c188be4323a0e887b4184 DRTVWR-99_3.2.1-release  a8c7030d6845186fac7c188be4323a0e887b4184 3.2.1-release  3fe994349fae64fc40874bb59db387131eb35a41 3.2.4-start +a9abb9633a266c8d2fe62411cfd1c86d32da72bf DRTVWR-60_2.7.1-release +fe3a8e7973072ea62043c08b19b66626c1a720eb DRTVWR-60_2.7.1-release +a9abb9633a266c8d2fe62411cfd1c86d32da72bf 2.7.1-release +fe3a8e7973072ea62043c08b19b66626c1a720eb 2.7.1-release  3fe994349fae64fc40874bb59db387131eb35a41 DRTVWR-104_3.2.4-beta1  3fe994349fae64fc40874bb59db387131eb35a41 3.2.4-beta1  8a44ff3d2104269ce76145c2772cf1bdff2a2abe 3.2.5-start +fe3a8e7973072ea62043c08b19b66626c1a720eb DRTVWR-62_2.7.2-release +fe3a8e7973072ea62043c08b19b66626c1a720eb 2.7.2-release +bd6bcde2584491fd9228f1fa51c4575f4e764e19 DRTVWR-103_3.2.4-release +bd6bcde2584491fd9228f1fa51c4575f4e764e19 3.2.4-release diff --git a/BuildParams b/BuildParams index 3f5d6f8c6b..c051397853 100644 --- a/BuildParams +++ b/BuildParams @@ -145,6 +145,17 @@ oz_viewer-devreview.codeticket_add_context = false  oz_viewer-devreview.build_enforce_coding_policy = true  oz_viewer-devreview.email = oz@lindenlab.com +oz_viewer-trial.build_debug_release_separately = true +oz_viewer-trial.codeticket_add_context = false +oz_viewer-trial.build_enforce_coding_policy = true +oz_viewer-trial.email = oz@lindenlab.com + +oz_viewer-beta-review.build_debug_release_separately = true +oz_viewer-beta-review.codeticket_add_context = false +oz_viewer-beta-review.viewer_channel = "Second Life Beta Viewer" +oz_viewer-beta-review.login_channel = "Second Life Beta Viewer" +oz_viewer-beta-review.email = oz@lindenlab.com +  oz_project-1.build_debug_release_separately = true  oz_project-1.codeticket_add_context = false  oz_project-1.email = oz@lindenlab.com @@ -157,15 +168,6 @@ oz_project-3.email = oz@lindenlab.com  oz_project-4.build_debug_release_separately = true  oz_project-4.codeticket_add_context = false  oz_project-4.email = oz@lindenlab.com -oz_project-5.build_debug_release_separately = true -oz_project-5.codeticket_add_context = false -oz_project-5.email = oz@lindenlab.com - -oz_viewer-beta-review.build_debug_release_separately = true -oz_viewer-beta-review.codeticket_add_context = false -oz_viewer-beta-review.viewer_channel = "Second Life Beta Viewer" -oz_viewer-beta-review.login_channel = "Second Life Beta Viewer" -oz_viewer-beta-review.email = oz@lindenlab.com  # =================================================================  # asset delivery 2010 projects diff --git a/doc/contributions.txt b/doc/contributions.txt index d2a73dfd22..1a3fc680bc 100644 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -159,6 +159,7 @@ Alissa Sabre  	VWR-12620  	VWR-12789  	SNOW-322 +    STORM-1723  Alliez Mysterio  Angus Boyd  	VWR-592 @@ -583,6 +584,7 @@ Jonathan Yap  	STORM-976  	STORM-1639  	STORM-910 +	STORM-1653  	STORM-1642  	STORM-591  	STORM-1105 @@ -595,7 +597,12 @@ Jonathan Yap  	STORM-1719  	STORM-1712  	STORM-1728 +	STORM-1736  	STORM-1734 +	STORM-1731 +	STORM-653 +	STORM-1737 +	STORM-1733  Kadah Coba  	STORM-1060  Jondan Lundquist diff --git a/indra/llcommon/llsys.cpp b/indra/llcommon/llsys.cpp index d781687175..19075afa68 100644 --- a/indra/llcommon/llsys.cpp +++ b/indra/llcommon/llsys.cpp @@ -608,6 +608,7 @@ LLCPUInfo::LLCPUInfo()  		out << " (" << mCPUMHz << " MHz)";  	}  	mCPUString = out.str(); +	LLStringUtil::trim(mCPUString);  }  bool LLCPUInfo::hasAltivec() const diff --git a/indra/llrender/llfontgl.cpp b/indra/llrender/llfontgl.cpp index 607473d416..82e8227ffe 100644 --- a/indra/llrender/llfontgl.cpp +++ b/indra/llrender/llfontgl.cpp @@ -304,6 +304,18 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons  		S32 next_bitmap_num = fgi->mBitmapNum;  		if (next_bitmap_num != bitmap_num)  		{ +			// Actually draw the queued glyphs before switching their texture; +			// otherwise the queued glyphs will be taken from wrong textures. +			if (glyph_count > 0) +			{ +				gGL.begin(LLRender::QUADS); +				{ +					gGL.vertexBatchPreTransformed(vertices, uvs, colors, glyph_count * 4); +				} +				gGL.end(); +				glyph_count = 0; +			} +  			bitmap_num = next_bitmap_num;  			LLImageGL *font_image = font_bitmap_cache->getImageGL(bitmap_num);  			gGL.getTexUnit(0)->bind(font_image); diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index b45f9c55fb..0861fe85a8 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -75,6 +75,7 @@  //#include "llfirstuse.h"  #include "llrender.h"  #include "llteleporthistory.h" +#include "lltoast.h"  #include "lllocationhistory.h"  #include "llfasttimerview.h"  #include "llvector4a.h" @@ -4051,6 +4052,7 @@ void LLAppViewer::idle()  	LLFrameTimer::updateFrameTime();  	LLFrameTimer::updateFrameCount();  	LLEventTimer::updateClass(); +	LLNotificationsUI::LLToast::updateClass();  	LLCriticalDamp::updateInterpolants();  	LLMortician::updateClass();  	LLFilePickerThread::clearDead();  //calls LLFilePickerThread::notify() diff --git a/indra/newview/llcofwearables.cpp b/indra/newview/llcofwearables.cpp index 54598f90c8..e9c7a3fa03 100644 --- a/indra/newview/llcofwearables.cpp +++ b/indra/newview/llcofwearables.cpp @@ -328,6 +328,19 @@ BOOL LLCOFWearables::postBuild()  	return LLPanel::postBuild();  } +void LLCOFWearables::setAttachmentsTitle() +{ +	if (mAttachmentsTab) +	{ +		U32 free_slots = MAX_AGENT_ATTACHMENTS - mAttachments->size(); + +		LLStringUtil::format_map_t args_attachments; +		args_attachments["[COUNT]"] = llformat ("%d", free_slots); +		std::string attachments_title = LLTrans::getString("Attachments remain", args_attachments); +		mAttachmentsTab->setTitle(attachments_title); +	} +} +  void LLCOFWearables::onSelectionChange(LLFlatListView* selected_list)  {  	if (!selected_list) return; @@ -490,6 +503,7 @@ void LLCOFWearables::populateAttachmentsAndBodypartsLists(const LLInventoryModel  	{  		mAttachments->sort();  		mAttachments->notify(REARRANGE); //notifying the parent about the list's size change (cause items were added with rearrange=false) +		setAttachmentsTitle();  	}  	else  	{ diff --git a/indra/newview/llcofwearables.h b/indra/newview/llcofwearables.h index 1f8d6d0c94..9957d6a64e 100644 --- a/indra/newview/llcofwearables.h +++ b/indra/newview/llcofwearables.h @@ -91,6 +91,8 @@ public:  	 */  	void selectClothing(LLWearableType::EType clothing_type); +	void setAttachmentsTitle(); +  protected:  	void populateAttachmentsAndBodypartsLists(const LLInventoryModel::item_array_t& cof_items); diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp index 1b3290d5a8..cc7a1b2368 100644 --- a/indra/newview/llfloatersnapshot.cpp +++ b/indra/newview/llfloatersnapshot.cpp @@ -333,8 +333,7 @@ void LLSnapshotLivePreview::updateSnapshot(BOOL new_snapshot, BOOL new_thumbnail  	{  		S32 old_image_index = mCurImageIndex;  		mCurImageIndex = (mCurImageIndex + 1) % 2;  -		setWidth(mWidth[old_image_index]); -		setHeight(mHeight[old_image_index]); +		setSize(mWidth[old_image_index], mHeight[old_image_index]);  		mFallAnimTimer.start();		  	}  	mSnapshotUpToDate = FALSE; 		 @@ -833,7 +832,7 @@ BOOL LLSnapshotLivePreview::onIdle( void* snapshot_preview )  				previewp->mPreviewImage->getHeight(),  				previewp->mPreviewImage->getComponents()); -			scaled->biasedScaleToPowerOfTwo(512); +			scaled->biasedScaleToPowerOfTwo(MAX_TEXTURE_SIZE);  			previewp->setImageScaled(TRUE);  			if (formatted->encode(scaled, 0.f))  			{ @@ -960,7 +959,7 @@ void LLSnapshotLivePreview::saveTexture()  												  mPreviewImage->getHeight(),  												  mPreviewImage->getComponents()); -	scaled->biasedScaleToPowerOfTwo(512); +	scaled->biasedScaleToPowerOfTwo(MAX_TEXTURE_SIZE);  	lldebugs << "scaled texture to " << scaled->getWidth() << "x" << scaled->getHeight() << llendl;  	if (formatted->encode(scaled, 0.0f)) @@ -1447,7 +1446,6 @@ void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater)  	if (previewp)  	{ -		lldebugs << "Setting snapshot type (" << shot_type << "), format (" << shot_format << ")" << llendl;  		previewp->setSnapshotType(shot_type);  		previewp->setSnapshotFormat(shot_format);  		previewp->setSnapshotBufferType(layer_type); @@ -1460,6 +1458,7 @@ void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater)  		info["have-snapshot"] = got_snap;  		current_panel->updateControls(info);  	} +	lldebugs << "finished updating controls" << llendl;  }  // static @@ -1696,6 +1695,7 @@ void LLFloaterSnapshot::Impl::setFinished(LLFloaterSnapshot* floater, bool finis  	}  } +// Apply a new resolution selected from the given combobox.  // static  void LLFloaterSnapshot::Impl::updateResolution(LLUICtrl* ctrl, void* data, BOOL do_update)  { @@ -1738,6 +1738,13 @@ void LLFloaterSnapshot::Impl::updateResolution(LLUICtrl* ctrl, void* data, BOOL  				lldebugs << "Loading typed res from panel " << spanel->getName() << llendl;  				new_width = spanel->getTypedPreviewWidth();  				new_height = spanel->getTypedPreviewHeight(); + +				// Limit custom size for inventory snapshots to 512x512 px. +				if (getActiveSnapshotType(view) == LLSnapshotLivePreview::SNAPSHOT_TEXTURE) +				{ +					new_width = llmin(new_width, MAX_TEXTURE_SIZE); +					new_height = llmin(new_height, MAX_TEXTURE_SIZE); +				}  			}  			else  			{ @@ -1864,11 +1871,11 @@ BOOL LLFloaterSnapshot::Impl::checkImageSize(LLSnapshotLivePreview* previewp, S3  		//change another value proportionally  		if(isWidthChanged)  		{ -			height = (S32)(width / aspect_ratio) ; +			height = llround(width / aspect_ratio) ;  		}  		else  		{ -			width = (S32)(height * aspect_ratio) ; +			width = llround(height * aspect_ratio) ;  		}  		//bound w/h by the max_value diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index ed4bb727cd..a856bd0bdc 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -2403,15 +2403,6 @@ void LLIMMgr::addMessage(  	bool link_name) // If this is true, then we insert the name and link it to a profile  {  	LLUUID other_participant_id = target_id; - -	// don't process muted IMs -	if (LLMuteList::getInstance()->isMuted( -			other_participant_id, -			LLMute::flagTextChat) && !LLMuteList::getInstance()->isLinden(from)) -	{ -		return; -	} -  	LLUUID new_session_id = session_id;  	if (new_session_id.isNull())  	{ @@ -2452,10 +2443,25 @@ void LLIMMgr::addMessage(  			LLIMModel::instance().addMessage(new_session_id, from, other_participant_id, bonus_info.str());  		} +		// Logically it would make more sense to reject the session sooner, in another area of the +		// code, but the session has to be established inside the server before it can be left. +		if (LLMuteList::getInstance()->isMuted(other_participant_id) && !LLMuteList::getInstance()->isLinden(from)) +		{ +			llwarns << "Leaving IM session from initiating muted resident " << from << llendl; +			if(!gIMMgr->leaveSession(new_session_id)) +			{ +				llinfos << "Session " << new_session_id << " does not exist." << llendl; +			} +			return; +		} +  		make_ui_sound("UISndNewIncomingIMSession");  	} -	LLIMModel::instance().addMessage(new_session_id, from, other_participant_id, msg); +	if (!LLMuteList::getInstance()->isMuted(other_participant_id, LLMute::flagTextChat)) +	{ +		LLIMModel::instance().addMessage(new_session_id, from, other_participant_id, msg); +	}  }  void LLIMMgr::addSystemMessage(const LLUUID& session_id, const std::string& message_name, const LLSD& args) @@ -2661,18 +2667,15 @@ void LLIMMgr::inviteToSession(  	const std::string& session_handle,  	const std::string& session_uri)  { -	//ignore invites from muted residents -	if (LLMuteList::getInstance()->isMuted(caller_id)) -	{ -		return; -	} -  	std::string notify_box_type;  	// voice invite question is different from default only for group call (EXT-7118)  	std::string question_type = "VoiceInviteQuestionDefault";  	BOOL ad_hoc_invite = FALSE;  	BOOL voice_invite = FALSE; +	bool is_linden = LLMuteList::getInstance()->isLinden(caller_name); + +  	if(type == IM_SESSION_P2P_INVITE)  	{  		//P2P is different...they only have voice invitations @@ -2711,7 +2714,18 @@ void LLIMMgr::inviteToSession(  	payload["session_uri"] = session_uri;  	payload["notify_box_type"] = notify_box_type;  	payload["question_type"] = question_type; -	 + +	//ignore invites from muted residents +	if (LLMuteList::getInstance()->isMuted(caller_id) && !is_linden) +	{ +		if (voice_invite && "VoiceInviteQuestionDefault" == question_type) +		{ +			llinfos << "Rejecting voice call from initiating muted resident " << caller_name << llendl; +			LLIncomingCallDialog::processCallResponse(1, payload); +		} +		return; +	} +  	LLVoiceChannel* channelp = LLVoiceChannel::getChannelByID(session_id);  	if (channelp && channelp->callStarted())  	{ @@ -3234,7 +3248,7 @@ public:  			chat.mFromID = from_id;  			chat.mFromName = name; -			if (!is_linden && (is_busy || is_muted)) +			if (!is_linden && is_busy)  			{  				return;  			} @@ -3266,6 +3280,11 @@ public:  				ll_vector3_from_sd(message_params["position"]),  				true); +			if (LLMuteList::getInstance()->isMuted(from_id, name, LLMute::flagTextChat)) +			{ +				return; +			} +  			//K now we want to accept the invitation  			std::string url = gAgent.getRegion()->getCapability(  				"ChatSessionRequest"); diff --git a/indra/newview/llpaneleditwearable.cpp b/indra/newview/llpaneleditwearable.cpp index b73d97e4c4..03404e816b 100644 --- a/indra/newview/llpaneleditwearable.cpp +++ b/indra/newview/llpaneleditwearable.cpp @@ -356,9 +356,9 @@ LLEditWearableDictionary::ColorSwatchCtrls::ColorSwatchCtrls()  LLEditWearableDictionary::TextureCtrls::TextureCtrls()  { -        addEntry ( TEX_HEAD_BODYPAINT,  new PickerControlEntry (TEX_HEAD_BODYPAINT,  "Head Tattoos", LLUUID::null, TRUE )); -        addEntry ( TEX_UPPER_BODYPAINT, new PickerControlEntry (TEX_UPPER_BODYPAINT, "Upper Tattoos", LLUUID::null, TRUE )); -        addEntry ( TEX_LOWER_BODYPAINT, new PickerControlEntry (TEX_LOWER_BODYPAINT, "Lower Tattoos", LLUUID::null, TRUE )); +        addEntry ( TEX_HEAD_BODYPAINT,  new PickerControlEntry (TEX_HEAD_BODYPAINT,  "Head", LLUUID::null, TRUE )); +        addEntry ( TEX_UPPER_BODYPAINT, new PickerControlEntry (TEX_UPPER_BODYPAINT, "Upper Body", LLUUID::null, TRUE )); +        addEntry ( TEX_LOWER_BODYPAINT, new PickerControlEntry (TEX_LOWER_BODYPAINT, "Lower Body", LLUUID::null, TRUE ));          addEntry ( TEX_HAIR, new PickerControlEntry (TEX_HAIR, "Texture", LLUUID( gSavedSettings.getString( "UIImgDefaultHairUUID" ) ), FALSE ));          addEntry ( TEX_EYES_IRIS, new PickerControlEntry (TEX_EYES_IRIS, "Iris", LLUUID( gSavedSettings.getString( "UIImgDefaultEyesUUID" ) ), FALSE ));          addEntry ( TEX_UPPER_SHIRT, new PickerControlEntry (TEX_UPPER_SHIRT, "Fabric", LLUUID( gSavedSettings.getString( "UIImgDefaultShirtUUID" ) ), FALSE )); diff --git a/indra/newview/lltoast.cpp b/indra/newview/lltoast.cpp index c4b226b70b..da691a2d0c 100644 --- a/indra/newview/lltoast.cpp +++ b/indra/newview/lltoast.cpp @@ -140,7 +140,9 @@ LLToast::LLToast(const LLToast::Params& p)  	// init callbacks if present  	if(!p.on_delete_toast().empty()) +	{  		mOnDeleteToastSignal.connect(p.on_delete_toast()); +	}  }  void LLToast::reshape(S32 width, S32 height, BOOL called_from_parent) @@ -236,7 +238,9 @@ void LLToast::setCanFade(bool can_fade)  {   	mCanFade = can_fade;   	if(!mCanFade) +	{  		mTimer->stop(); +	}  }  //-------------------------------------------------------------------------- @@ -328,55 +332,6 @@ void LLToast::draw()  			drawChild(mHideBtn);  		}  	} - -	updateHoveredState(); - -	LLToastLifeTimer* timer = getTimer(); -	if (!timer) -	{ -		return; -	} - -	// Started timer means the mouse had left the toast previously. -	// If toast is hovered in the current frame we should handle -	// a mouse enter event. -	if(timer->getStarted() && mIsHovered) -	{ -		mOnToastHoverSignal(this, MOUSE_ENTER); - -		updateTransparency(); - -		//toasts fading is management by Screen Channel - -		sendChildToFront(mHideBtn); -		if(mHideBtn && mHideBtn->getEnabled()) -		{ -			mHideBtn->setVisible(TRUE); -		} -		mToastMouseEnterSignal(this, getValue()); -	} -	// Stopped timer means the mouse had entered the toast previously. -	// If the toast is not hovered in the current frame we should handle -	// a mouse leave event. -	else if(!timer->getStarted() && !mIsHovered) -	{ -		mOnToastHoverSignal(this, MOUSE_LEAVE); - -		updateTransparency(); - -		//toasts fading is management by Screen Channel - -		if(mHideBtn && mHideBtn->getEnabled()) -		{ -			if( mHideBtnPressed ) -			{ -				mHideBtnPressed = false; -				return; -			} -			mHideBtn->setVisible(FALSE); -		} -		mToastMouseLeaveSignal(this, getValue()); -	}  }  //-------------------------------------------------------------------------- @@ -440,28 +395,80 @@ void LLToast::updateHoveredState()  	{  		// mouse is not over this toast  		mIsHovered = false; -		return;  	} +	else +	{ +		bool is_overlapped_by_other_floater = false; -	bool is_overlapped_by_other_floater = false; - -	const child_list_t* child_list = gFloaterView->getChildList(); +		const child_list_t* child_list = gFloaterView->getChildList(); -	// find this toast in gFloaterView child list to check whether any floater -	// with higher Z-order is visible under the mouse pointer overlapping this toast -	child_list_const_reverse_iter_t r_iter = std::find(child_list->rbegin(), child_list->rend(), this); -	if (r_iter != child_list->rend()) -	{ -		// skip this toast and proceed to views above in Z-order -		for (++r_iter; r_iter != child_list->rend(); ++r_iter) +		// find this toast in gFloaterView child list to check whether any floater +		// with higher Z-order is visible under the mouse pointer overlapping this toast +		child_list_const_reverse_iter_t r_iter = std::find(child_list->rbegin(), child_list->rend(), this); +		if (r_iter != child_list->rend())  		{ -			LLView* view = *r_iter; -			is_overlapped_by_other_floater = view->isInVisibleChain() && view->calcScreenRect().pointInRect(x, y); -			if (is_overlapped_by_other_floater) break; +			// skip this toast and proceed to views above in Z-order +			for (++r_iter; r_iter != child_list->rend(); ++r_iter) +			{ +				LLView* view = *r_iter; +				is_overlapped_by_other_floater = view->isInVisibleChain() && view->calcScreenRect().pointInRect(x, y); +				if (is_overlapped_by_other_floater) +				{ +					break; +				} +			}  		} + +		mIsHovered = !is_overlapped_by_other_floater;  	} -	mIsHovered = !is_overlapped_by_other_floater; +	LLToastLifeTimer* timer = getTimer(); +	 +	if (timer) +	{	 +		// Started timer means the mouse had left the toast previously. +		// If toast is hovered in the current frame we should handle +		// a mouse enter event. +		if(timer->getStarted() && mIsHovered) +		{ +			mOnToastHoverSignal(this, MOUSE_ENTER); +			 +			updateTransparency(); +			 +			//toasts fading is management by Screen Channel +			 +			sendChildToFront(mHideBtn); +			if(mHideBtn && mHideBtn->getEnabled()) +			{ +				mHideBtn->setVisible(TRUE); +			} +			 +			mToastMouseEnterSignal(this, getValue()); +		} +		// Stopped timer means the mouse had entered the toast previously. +		// If the toast is not hovered in the current frame we should handle +		// a mouse leave event. +		else if(!timer->getStarted() && !mIsHovered) +		{ +			mOnToastHoverSignal(this, MOUSE_LEAVE); +			 +			updateTransparency(); +			 +			//toasts fading is management by Screen Channel +			 +			if(mHideBtn && mHideBtn->getEnabled()) +			{ +				if( mHideBtnPressed ) +				{ +					mHideBtnPressed = false; +					return; +				} +				mHideBtn->setVisible(FALSE); +			} +			 +			mToastMouseLeaveSignal(this, getValue()); +		} +	}  }  void LLToast::setBackgroundOpaque(BOOL b) @@ -553,3 +560,14 @@ S32	LLToast::notifyParent(const LLSD& info)  	return LLModalDialog::notifyParent(info);  } + +//static +void LLToast::updateClass() +{ +	for (LLInstanceTracker<LLToast>::instance_iter iter = LLInstanceTracker<LLToast>::beginInstances(); iter != LLInstanceTracker<LLToast>::endInstances(); )  +	{ +		LLToast& toast = *iter++; +		 +		toast.updateHoveredState(); +	} +} diff --git a/indra/newview/lltoast.h b/indra/newview/lltoast.h index 77229e7beb..0b06728935 100644 --- a/indra/newview/lltoast.h +++ b/indra/newview/lltoast.h @@ -27,7 +27,7 @@  #ifndef LL_LLTOAST_H  #define LL_LLTOAST_H - +#include "llinstancetracker.h"  #include "llpanel.h"  #include "llmodaldialog.h"  #include "lleventtimer.h" @@ -69,7 +69,7 @@ private :   * Represents toast pop-up.   * This is a parent view for all toast panels.   */ -class LLToast : public LLModalDialog +class LLToast : public LLModalDialog, public LLInstanceTracker<LLToast>  {  	friend class LLToastLifeTimer;  public: @@ -102,6 +102,8 @@ public:  		Params();  	}; +	 +	static void updateClass();  	LLToast(const LLToast::Params& p);  	virtual ~LLToast(); @@ -221,7 +223,7 @@ private:  	F32			mToastLifetime; // in seconds  	F32			mToastFadingTime; // in seconds - +	  	LLPanel*		mPanel;  	LLButton*		mHideBtn; diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 2f2c711073..3c6770df43 100755 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -2235,6 +2235,10 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)  	{          name = LLTrans::getString("Unnamed");  	} + +	// Preserve the unaltered name for use in group notice mute checking. +	std::string original_name = name; +  	// IDEVO convert new-style "Resident" names for display  	name = clean_name_from_im(name, dialog); @@ -2441,6 +2445,26 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)  				break;  			} +			// The group notice packet does not have an AgentID.  Obtain one from the name cache. +			// If last name is "Resident" strip it out so the cache name lookup works. +			U32 index = original_name.find(" Resident"); +			if (index != std::string::npos) +			{ +				original_name = original_name.substr(0, index); +			} +			std::string legacy_name = gCacheName->buildLegacyName(original_name); +			LLUUID agent_id; +			gCacheName->getUUID(legacy_name, agent_id); + +			if (agent_id.isNull()) +			{ +				LL_WARNS("Messaging") << "buildLegacyName returned null while processing " << original_name << LL_ENDL; +			} +			else if (LLMuteList::getInstance()->isMuted(agent_id)) +			{ +				break; +			} +  			notice_bin_bucket = (struct notice_bucket_full_t*) &binary_bucket[0];  			U8 has_inventory = notice_bin_bucket->header.has_inventory;  			U8 asset_type = notice_bin_bucket->header.asset_type; diff --git a/indra/newview/skins/default/xui/da/menu_viewer.xml b/indra/newview/skins/default/xui/da/menu_viewer.xml index c2f7d26dc9..ba18306686 100644 --- a/indra/newview/skins/default/xui/da/menu_viewer.xml +++ b/indra/newview/skins/default/xui/da/menu_viewer.xml @@ -121,6 +121,7 @@  			<menu_item_call label="Model..." name="Upload Model"/>  			<menu_item_call label="Model Wizard..." name="Upload Model Wizard"/>  			<menu_item_call label="Mange (L$[COST] pr. fil)..." name="Bulk Upload"/> +			<menu_item_call label="Sæt standardværdier for upload rettigheder" name="perm prefs"/>  		</menu>  		<menu_item_call label="Fortyd" name="Undo"/>  		<menu_item_call label="Gendan" name="Redo"/> diff --git a/indra/newview/skins/default/xui/de/menu_viewer.xml b/indra/newview/skins/default/xui/de/menu_viewer.xml index e6135aa100..90b2cfbc41 100644 --- a/indra/newview/skins/default/xui/de/menu_viewer.xml +++ b/indra/newview/skins/default/xui/de/menu_viewer.xml @@ -140,6 +140,7 @@  			<menu_item_call label="Animation ([COST] L$)..." name="Upload Animation"/>  			<menu_item_call label="Modell..." name="Upload Model"/>  			<menu_item_call label="Mehrfach-Upload ([COST] L$ pro Datei)..." name="Bulk Upload"/> +			<menu_item_call label="Hochlade-Berechtigungen (Standard) festlegen" name="perm prefs"/>  		</menu>  		<menu_item_call label="Rückgängig" name="Undo"/>  		<menu_item_call label="Wiederholen" name="Redo"/> diff --git a/indra/newview/skins/default/xui/en/floater_im_session.xml b/indra/newview/skins/default/xui/en/floater_im_session.xml index 5fe8f3c114..a2739a8339 100644 --- a/indra/newview/skins/default/xui/en/floater_im_session.xml +++ b/indra/newview/skins/default/xui/en/floater_im_session.xml @@ -3,7 +3,7 @@   legacy_header_height="18"   background_visible="true"   default_tab_group="1" - height="350" + height="355"   help_topic="floater_im_box"   layout="topleft"   name="panel_im" diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index 1834be2d48..0aa5c72f2a 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -1713,7 +1713,17 @@               function="ToggleControl"               parameter="MouseSmooth" />          </menu_item_check> - +            <menu_item_call +             enabled="false" +             label="Release Keys" +             name="Release Keys"> +                <menu_item_call.on_click +                 function="Tools.ReleaseKeys" +                 parameter="" /> +                <menu_item_call.on_enable +                 function="Tools.EnableReleaseKeys" +                 parameter="" /> +            </menu_item_call>          <menu_item_separator/>          <menu @@ -1743,17 +1753,7 @@               function="Floater.Toggle"               parameter="search" />              </menu_item_check> -            <menu_item_call -             enabled="false" -             label="Release Keys" -             name="Release Keys"> -                <menu_item_call.on_click -                 function="Tools.ReleaseKeys" -                 parameter="" /> -                <menu_item_call.on_enable -                 function="Tools.EnableReleaseKeys" -                 parameter="" /> -            </menu_item_call> +              <!-- This second, alternative shortcut for Show Advanced Menu is for backward compatibility.  The main shortcut has been changed so it's Linux-friendly, where the old shortcut is typically eaten by the window manager. -->              <menu_item_check                 label="Show Advanced Menu - legacy shortcut" diff --git a/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml index e70abc0975..93cafd4a53 100644 --- a/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml +++ b/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml @@ -58,7 +58,7 @@               label="Call"               name="call_btn"               width="130" -             top="5" /> +             top="0" />          </layout_panel>          <layout_panel           auto_resize="false" @@ -75,7 +75,7 @@               height="20"               label="Leave Call"               name="end_call_btn" -             top="5"/> +             top="0"/>          </layout_panel>          <layout_panel           auto_resize="false" @@ -92,7 +92,7 @@               height="20"               label="Voice Controls"               name="voice_ctrls_btn" -             top="5" +             top="0"               use_ellipses="true" />          </layout_panel>      </layout_stack> diff --git a/indra/newview/skins/default/xui/en/panel_cof_wearables.xml b/indra/newview/skins/default/xui/en/panel_cof_wearables.xml index beea53437a..aa8e3d07a6 100644 --- a/indra/newview/skins/default/xui/en/panel_cof_wearables.xml +++ b/indra/newview/skins/default/xui/en/panel_cof_wearables.xml @@ -37,6 +37,7 @@               top="0"               width="311" />          </accordion_tab> +         <!-- The Attachments title is overwritten by the definition of "Attachments remain" in strings.xml -->          <accordion_tab           layout="topleft"           name="tab_attachments" diff --git a/indra/newview/skins/default/xui/en/panel_edit_skin.xml b/indra/newview/skins/default/xui/en/panel_edit_skin.xml index 45591ba2ad..b61f65a3d1 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_skin.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_skin.xml @@ -27,10 +27,10 @@          default_image_name="Default"          follows="left|top"          height="80" -        label="Head Tattoos" +        label="Head"          layout="topleft"          left="25" -        name="Head Tattoos" +        name="Head"          tool_tip="Click to choose a picture"          top="10"          width="74" > @@ -43,10 +43,10 @@          default_image_name="Default"          follows="left|top"          height="80" -        label="Upper Tattoos" +        label="Upper body"          layout="topleft"          left_pad="20" -        name="Upper Tattoos" +        name="Upper Body"          tool_tip="Click to choose a picture"          top="10"          width="74" > @@ -59,10 +59,10 @@          default_image_name="Default"          follows="left|top"          height="80" -        label="Lower Tattoos" +        label="Lower body"          layout="topleft"          left_pad="20" -        name="Lower Tattoos" +        name="Lower Body"          tool_tip="Click to choose a picture"          top="10"          width="74" > diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index 877c2e5c34..9752a07b66 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -2133,6 +2133,7 @@ Returns a string with the requested data about the region  	<string name="InvFolder All">All</string>  	<string name="no_attachments">No attachments worn</string> +    <string name="Attachments remain">Attachments ([COUNT] slots remain)</string>  	<!-- inventory FVBridge -->  	<!--  This is used in llpanelinventory.cpp when constructing a context menu for an item for Sale  --> diff --git a/indra/newview/skins/default/xui/es/floater_buy_land.xml b/indra/newview/skins/default/xui/es/floater_buy_land.xml index 9d33b69de9..005fe90318 100644 --- a/indra/newview/skins/default/xui/es/floater_buy_land.xml +++ b/indra/newview/skins/default/xui/es/floater_buy_land.xml @@ -160,7 +160,7 @@ para cubrir esta parcela.  		Podrá o no unirse o dividirse.  	</text>  	<text name="covenant_text"> -		Debes aceptar el Contrato del Estado: +		Debes aceptar el Contrato del estado:  	</text>  	<text left="470" name="covenant_timestamp_text"/>  	<text_editor name="covenant_editor"> diff --git a/indra/newview/skins/default/xui/es/menu_viewer.xml b/indra/newview/skins/default/xui/es/menu_viewer.xml index 0714e7f2c6..f5cc2b9389 100644 --- a/indra/newview/skins/default/xui/es/menu_viewer.xml +++ b/indra/newview/skins/default/xui/es/menu_viewer.xml @@ -140,6 +140,7 @@  			<menu_item_call label="Animación ([COST] L$)..." name="Upload Animation"/>  			<menu_item_call label="Modelo..." name="Upload Model"/>  			<menu_item_call label="Masivo ([COST] L$ por archivo)..." name="Bulk Upload"/> +			<menu_item_call label="Configurar los permisos por defecto de subida" name="perm prefs"/>  		</menu>  		<menu_item_call label="Deshacer" name="Undo"/>  		<menu_item_call label="Rehacer" name="Redo"/> diff --git a/indra/newview/skins/default/xui/es/panel_region_estate.xml b/indra/newview/skins/default/xui/es/panel_region_estate.xml index c51c3815d1..3d0de4f083 100644 --- a/indra/newview/skins/default/xui/es/panel_region_estate.xml +++ b/indra/newview/skins/default/xui/es/panel_region_estate.xml @@ -10,7 +10,7 @@  		(desconocido)  	</text>  	<text name="owner_text"> -		Propietario del Estado: +		Propietario del estado:  	</text>  	<text name="estate_owner">  		(desconocido) @@ -39,7 +39,7 @@  	</string>  	<button label="?" name="abuse_email_address_help"/>  	<button label="Aplicar" name="apply_btn"/> -	<button label="Expulsar a un Residente del Estado..." name="kick_user_from_estate_btn"/> +	<button label="Expulsar a un Residente del estado..." name="kick_user_from_estate_btn"/>  	<button label="Enviar un mensaje al estado..." name="message_estate_btn"/>  	<text name="estate_manager_label">  		Administradores del estado: diff --git a/indra/newview/skins/default/xui/fr/menu_viewer.xml b/indra/newview/skins/default/xui/fr/menu_viewer.xml index e2cb1f999d..d3b48639e0 100644 --- a/indra/newview/skins/default/xui/fr/menu_viewer.xml +++ b/indra/newview/skins/default/xui/fr/menu_viewer.xml @@ -140,6 +140,7 @@  			<menu_item_call label="Animation ([COST] L$)..." name="Upload Animation"/>  			<menu_item_call label="Modèle..." name="Upload Model"/>  			<menu_item_call label="Lot ([COST] L$ par fichier)..." name="Bulk Upload"/> +			<menu_item_call label="Définir les droits de chargement par défaut" name="perm prefs"/>  		</menu>  		<menu_item_call label="Annuler" name="Undo"/>  		<menu_item_call label="Refaire" name="Redo"/> diff --git a/indra/newview/skins/default/xui/it/menu_viewer.xml b/indra/newview/skins/default/xui/it/menu_viewer.xml index 815f6f58ed..8792a0fc19 100644 --- a/indra/newview/skins/default/xui/it/menu_viewer.xml +++ b/indra/newview/skins/default/xui/it/menu_viewer.xml @@ -140,6 +140,7 @@  			<menu_item_call label="Animazione ([COST] L$)..." name="Upload Animation"/>  			<menu_item_call label="Modella..." name="Upload Model"/>  			<menu_item_call label="In blocco ([COST] L$ per file)..." name="Bulk Upload"/> +			<menu_item_call label="Definisci diritti di caricamento predefiniti" name="perm prefs"/>  		</menu>  		<menu_item_call label="Annulla" name="Undo"/>  		<menu_item_call label="Ripeti" name="Redo"/> diff --git a/indra/newview/skins/default/xui/ja/menu_viewer.xml b/indra/newview/skins/default/xui/ja/menu_viewer.xml index b9dbb81c0a..125e9bb226 100644 --- a/indra/newview/skins/default/xui/ja/menu_viewer.xml +++ b/indra/newview/skins/default/xui/ja/menu_viewer.xml @@ -140,6 +140,7 @@  			<menu_item_call label="アニメーション(L$[COST])..." name="Upload Animation"/>  			<menu_item_call label="モデル" name="Upload Model"/>  			<menu_item_call label="一括 (ファイルにつきL$[COST])..." name="Bulk Upload"/> +			<menu_item_call label="デフォルトのアップロード権限を設定" name="perm prefs"/>  		</menu>  		<menu_item_call label="元に戻す" name="Undo"/>  		<menu_item_call label="やり直し" name="Redo"/> diff --git a/indra/newview/skins/default/xui/pl/menu_viewer.xml b/indra/newview/skins/default/xui/pl/menu_viewer.xml index fe4662c5a2..c072ea9b5a 100644 --- a/indra/newview/skins/default/xui/pl/menu_viewer.xml +++ b/indra/newview/skins/default/xui/pl/menu_viewer.xml @@ -119,6 +119,7 @@  			<menu_item_call label="dźwięk (L$[COST])..." name="Upload Sound"/>  			<menu_item_call label="animację (L$[COST])..." name="Upload Animation"/>  			<menu_item_call label="zbiór plików (L$[COST] za jeden plik)..." name="Bulk Upload"/> +			<menu_item_call label="Ustaw domyślne pozwolenia ładowania" name="perm prefs"/>  		</menu>  		<menu_item_call label="Cofnij" name="Undo"/>  		<menu_item_call label="Ponów" name="Redo"/> diff --git a/indra/newview/skins/default/xui/pt/inspect_avatar.xml b/indra/newview/skins/default/xui/pt/inspect_avatar.xml index a199c58c15..19244d9b27 100644 --- a/indra/newview/skins/default/xui/pt/inspect_avatar.xml +++ b/indra/newview/skins/default/xui/pt/inspect_avatar.xml @@ -5,10 +5,10 @@  -->  <floater name="inspect_avatar">  	<string name="Subtitle"> -		[IDADE] +		[AGE]  	</string>  	<string name="Details"> -		[PERFIL_SL] +		[SL_PROFILE]  	</string>  	<text name="user_details">  		This is my second life description and I really think it is great. But for some reason my description is super extra long because I like to talk a whole lot diff --git a/indra/newview/skins/default/xui/pt/menu_viewer.xml b/indra/newview/skins/default/xui/pt/menu_viewer.xml index 9b5711d402..5ff2d49ac1 100644 --- a/indra/newview/skins/default/xui/pt/menu_viewer.xml +++ b/indra/newview/skins/default/xui/pt/menu_viewer.xml @@ -96,7 +96,7 @@  		</menu>  		<menu_item_call label="Link" name="Link"/>  		<menu_item_call label="Desconectar links" name="Unlink"/> -		<menu_item_check label="Edit Linked Parts" name="Edit Linked Parts"/> +		<menu_item_check label="Editar partes linkadas" name="Edit Linked Parts"/>  		<menu label="Selecionar partes conectadas" name="Select Linked Parts">  			<menu_item_call label="Selecionar próxima parte" name="Select Next Part"/>  			<menu_item_call label="Selecionar parte anterior" name="Select Previous Part"/> @@ -110,7 +110,7 @@  			<menu_item_call label="Pegar" name="Menu Object Take"/>  			<menu_item_call label="Pegar uma cópia" name="Take Copy"/>  			<menu_item_call label="Salvar no meu inventário" name="Save Object Back to My Inventory"/> -			<menu_item_call label="Save Back to Object Contents" name="Save Object Back to Object Contents"/> +			<menu_item_call label="Salvar objeto de volta aos conteúdos do objeto" name="Save Object Back to Object Contents"/>  			<menu_item_call label="Devolver objeto" name="Return Object back to Owner"/>  		</menu>  		<menu label="Scripts" name="Scripts"> @@ -140,6 +140,7 @@  			<menu_item_call label="Animação (L$[COST])..." name="Upload Animation"/>  			<menu_item_call label="Modelar..." name="Upload Model"/>  			<menu_item_call label="Volume (L$[COST] por arquivo)..." name="Bulk Upload"/> +			<menu_item_call label="Autorizações de upload padrão" name="perm prefs"/>  		</menu>  		<menu_item_call label="Desfazer" name="Undo"/>  		<menu_item_call label="Repetir" name="Redo"/> @@ -165,7 +166,7 @@  		</menu>  		<menu label="Realces e visibilidade" name="Highlighting and Visibility">  			<menu_item_check label="Efeito baliza piscando" name="Cheesy Beacon"/> -			<menu_item_check label="Hide Particles" name="Hide Particles"/> +			<menu_item_check label="Esconder partículas" name="Hide Particles"/>  			<menu_item_check label="Ocultar seleções" name="Hide Selected"/>  			<menu_item_check label="Realçar transparentes" name="Highlight Transparent"/>  			<menu_item_check label="Mostrar anexos HUD" name="Show HUD Attachments"/> @@ -183,7 +184,7 @@  			<menu_item_check label="Volume" name="Volume"/>  			<menu_item_check label="Grama" name="Grass"/>  			<menu_item_check label="Nuvens" name="Clouds"/> -			<menu_item_check label="Particles" name="Particles"/> +			<menu_item_check label="Partículas" name="Particles"/>  			<menu_item_check label="Elevação" name="Bump"/>  		</menu>  		<menu label="Recursos de renderização" name="Rendering Features"> diff --git a/indra/newview/skins/default/xui/pt/strings.xml b/indra/newview/skins/default/xui/pt/strings.xml index 4535c7aaeb..6b4835e819 100644 --- a/indra/newview/skins/default/xui/pt/strings.xml +++ b/indra/newview/skins/default/xui/pt/strings.xml @@ -3886,16 +3886,16 @@ If you continue to receive this message, contact the [SUPPORT_SITE].  		[NAME] lhe pagou L$ [AMOUNT]  	</string>  	<string name="you_paid_ldollars"> -		You pagou L$[AMOUNT] por [REASON] a [NAME]. +		Você pagou L$[AMOUNT] por [REASON] a [NAME].  	</string>  	<string name="you_paid_ldollars_no_info">  		Você acaba de pagar L$[AMOUNT].  	</string>  	<string name="you_paid_ldollars_no_reason"> -		You pagou L$[AMOUNT] a [NAME]. +		Você pagou L$[AMOUNT] a [NAME].  	</string>  	<string name="you_paid_ldollars_no_name"> -		You pagou L$[AMOUNT] por [REASON]. +		Você pagou L$[AMOUNT] por [REASON].  	</string>  	<string name="for item">  		por [ITEM] | 
