diff options
| author | Oz Linden <oz@lindenlab.com> | 2011-04-18 16:25:02 -0400 | 
|---|---|---|
| committer | Oz Linden <oz@lindenlab.com> | 2011-04-18 16:25:02 -0400 | 
| commit | 9c995e2a5ce45cc912605d077d704fa76ed904dd (patch) | |
| tree | 2f790ce33f92bff08ee64c45cfee4ad8ea62f4a5 | |
| parent | 853231580aa2a6bf2894c20495c549a9d5f3c673 (diff) | |
| parent | 81676d4753a1abe347a69a95f234a005aad0659f (diff) | |
merge up from viewer-development (with changes for storm-160 backed out)
48 files changed, 345 insertions, 175 deletions
@@ -88,8 +88,6 @@ f1827b441e05bf37c68e2c15ebc6d09e9b03f527 2.6.0-start  c5bdef3aaa2744626aef3c217ce29e1900d357b3 2.6.1-start  c5bdef3aaa2744626aef3c217ce29e1900d357b3 DRTVWR-43_2.6.1-beta1  c5bdef3aaa2744626aef3c217ce29e1900d357b3 2.6.1-beta1 -9e4641f4a7870c0f565a25a2971368d5a29516a1 DRTVWR-41_2.6.0-beta2 -9e4641f4a7870c0f565a25a2971368d5a29516a1 2.6.0-beta2  c9182ed77d427c759cfacf49a7b71a2e20d522aa DRTVWR-42_2.6.1-release  c9182ed77d427c759cfacf49a7b71a2e20d522aa 2.6.1-release  56b2778c743c2a964d82e1caf11084d76a87de2c 2.6.2-start @@ -97,7 +95,12 @@ c9182ed77d427c759cfacf49a7b71a2e20d522aa 2.6.1-release  42f32494bac475d0737799346f6831558ae8bf5d 2.6.0-release  d1203046bb653b763f835b04d184646949d8dd5c DRTVWR-45_2.6.2-beta1  d1203046bb653b763f835b04d184646949d8dd5c 2.6.2-beta1 +214180ad5714ce8392b82bbebcc92f4babd98300 DRTVWR-44_2.6.2-release +214180ad5714ce8392b82bbebcc92f4babd98300 2.6.2-release  52b2263ab28f0976c689fd0b76c55a9eb027cdbf end-of-develop.py  ec32f1045e7c2644015245df3a9933620aa194b8 2.6.3-start  d7fcefabdf32bb61a9ea6d6037c1bb26190a85bc DRTVWR-47_2.6.3-beta1  d7fcefabdf32bb61a9ea6d6037c1bb26190a85bc 2.6.3-beta1 +74cd32a06837b0c2cb793b2e8d4d82f5d49462b2 2.6.4-start +74cd32a06837b0c2cb793b2e8d4d82f5d49462b2 2.6.4-start +f632f87bb71b0f13d21f2f64b0c42cedb008c749 2.6.4-start diff --git a/doc/contributions.txt b/doc/contributions.txt index ff982ec61a..e7db8c0ded 100644 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -155,6 +155,8 @@ Angus Boyd  	VWR-592  Ann Congrejo  	CT-193 +Ansariel Hiller +	STORM-1101  Ardy Lay  	VWR-19499  	VWR-24917 @@ -417,6 +419,7 @@ Jonathan Yap  	STORM-1020  	STORM-1064  	STORM-960 +	STORM-1101  	STORM-1108  	STORM-1094  	STORM-1077 @@ -869,6 +872,7 @@ WolfPup Lowenhar  	STORM-674  	STORM-776  	STORM-825 +	STORM-1098  	VWR-20741  	VWR-20933  Zai Lynch diff --git a/indra/llcommon/llversionviewer.h b/indra/llcommon/llversionviewer.h index ae2bd0d78b..bd6df962a1 100644 --- a/indra/llcommon/llversionviewer.h +++ b/indra/llcommon/llversionviewer.h @@ -29,7 +29,7 @@  const S32 LL_VERSION_MAJOR = 2;  const S32 LL_VERSION_MINOR = 6; -const S32 LL_VERSION_PATCH = 4; +const S32 LL_VERSION_PATCH = 5;  const S32 LL_VERSION_BUILD = 0;  const char * const LL_CHANNEL = "Second Life Developer"; diff --git a/indra/llimage/llimagedimensionsinfo.cpp b/indra/llimage/llimagedimensionsinfo.cpp index 835664c60f..c6bfa50b40 100644 --- a/indra/llimage/llimagedimensionsinfo.cpp +++ b/indra/llimage/llimagedimensionsinfo.cpp @@ -73,9 +73,28 @@ bool LLImageDimensionsInfo::load(const std::string& src_filename,U32 codec)  bool LLImageDimensionsInfo::getImageDimensionsBmp()  { -	const S32 BMP_FILE_HEADER_SIZE = 14; +	// Make sure the file is long enough. +	const S32 DATA_LEN = 26; // BMP header (14) + DIB header size (4) + width (4) + height (4) +	if (!checkFileLength(DATA_LEN)) +	{ +		llwarns << "Premature end of file" << llendl; +		return false; +	} + +	// Read BMP signature. +	U8 signature[2]; +	mInfile.read((void*)signature, sizeof(signature)/sizeof(signature[0])); + +	// Make sure this is actually a BMP file. +	// We only support Windows bitmaps (BM), according to LLImageBMP::updateData(). +	if (signature[0] != 'B' || signature[1] != 'M') +	{ +		llwarns << "Not a BMP" << llendl; +		return false; +	} -	mInfile.seek(APR_CUR,BMP_FILE_HEADER_SIZE+4); +	// Read image dimensions. +	mInfile.seek(APR_CUR, 16);  	mWidth = read_reverse_s32();  	mHeight = read_reverse_s32(); @@ -86,6 +105,14 @@ bool LLImageDimensionsInfo::getImageDimensionsTga()  {  	const S32 TGA_FILE_HEADER_SIZE = 12; +	// Make sure the file is long enough. +	if (!checkFileLength(TGA_FILE_HEADER_SIZE + 1 /* width */ + 1 /* height */)) +	{ +		llwarns << "Premature end of file" << llendl; +		return false; +	} + +	// *TODO: Detect non-TGA files somehow.  	mInfile.seek(APR_CUR,TGA_FILE_HEADER_SIZE);  	mWidth = read_byte() | read_byte() << 8;  	mHeight = read_byte() | read_byte() << 8; @@ -95,9 +122,29 @@ bool LLImageDimensionsInfo::getImageDimensionsTga()  bool LLImageDimensionsInfo::getImageDimensionsPng()  { -	const S32 PNG_FILE_MARKER_SIZE = 8; +	const S32 PNG_MAGIC_SIZE = 8; + +	// Make sure the file is long enough. +	if (!checkFileLength(PNG_MAGIC_SIZE + 8 + sizeof(S32) * 2 /* width, height */)) +	{ +		llwarns << "Premature end of file" << llendl; +		return false; +	} -	mInfile.seek(APR_CUR,PNG_FILE_MARKER_SIZE + 8/*header offset+chunk length+chunk type*/); +	// Read PNG signature. +	const U8 png_magic[PNG_MAGIC_SIZE] = {0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A}; +	U8 signature[PNG_MAGIC_SIZE]; +	mInfile.read((void*)signature, PNG_MAGIC_SIZE); + +	// Make sure it's a PNG file. +	if (memcmp(signature, png_magic, PNG_MAGIC_SIZE) != 0) +	{ +		llwarns << "Not a PNG" << llendl; +		return false; +	} + +	// Read image dimensions. +	mInfile.seek(APR_CUR, 8 /* chunk length + chunk type */);  	mWidth = read_s32();  	mHeight = read_s32(); @@ -122,6 +169,24 @@ bool LLImageDimensionsInfo::getImageDimensionsJpeg()  		setLastError("Unable to open file for reading", mSrcFilename);  		return false;  	} + +	/* Make sure this is a JPEG file. */ +	const size_t JPEG_MAGIC_SIZE = 2; +	const uint8_t jpeg_magic[JPEG_MAGIC_SIZE] = {0xFF, 0xD8}; +	uint8_t signature[JPEG_MAGIC_SIZE]; + +	if (fread(signature, sizeof(signature), 1, fp) != 1) +	{ +		llwarns << "Premature end of file" << llendl; +		return false; +	} +	if (memcmp(signature, jpeg_magic, JPEG_MAGIC_SIZE) != 0) +	{ +		llwarns << "Not a JPEG" << llendl; +		return false; +	} +	fseek(fp, 0, SEEK_SET); // go back to start of the file +  	/* Init jpeg */  	jpeg_error_mgr jerr;  	jpeg_decompress_struct cinfo; @@ -145,3 +210,13 @@ bool LLImageDimensionsInfo::getImageDimensionsJpeg()  	return !sJpegErrorEncountered;  } +bool LLImageDimensionsInfo::checkFileLength(S32 min_len) +{ +	// Make sure the file is not shorter than min_len bytes. +	// so that we don't have to check value returned by each read() or seek(). +	char* buf = new char[min_len]; +	int nread = mInfile.read(buf, min_len); +	delete[] buf; +	mInfile.seek(APR_SET, 0); +	return nread == min_len; +} diff --git a/indra/llimage/llimagedimensionsinfo.h b/indra/llimage/llimagedimensionsinfo.h index 5384faf3f4..382fdb2a0e 100644 --- a/indra/llimage/llimagedimensionsinfo.h +++ b/indra/llimage/llimagedimensionsinfo.h @@ -119,6 +119,9 @@ protected:  		return read_byte() << 8 | read_byte();  	} +	/// Check if the file is not shorter than min_len bytes. +	bool checkFileLength(S32 min_len); +  protected:  	LLAPRFile mInfile ;  	std::string mSrcFilename; diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp index 49537ef78f..82269282ef 100644 --- a/indra/llui/lltextbase.cpp +++ b/indra/llui/lltextbase.cpp @@ -157,6 +157,7 @@ LLTextBase::Params::Params()  	read_only("read_only", false),  	v_pad("v_pad", 0),  	h_pad("h_pad", 0), +	clip("clip", true),  	clip_partial("clip_partial", true),  	line_spacing("line_spacing"),  	max_text_length("max_length", 255), @@ -199,6 +200,7 @@ LLTextBase::LLTextBase(const LLTextBase::Params &p)  	mVAlign(p.font_valign),  	mLineSpacingMult(p.line_spacing.multiple),  	mLineSpacingPixels(p.line_spacing.pixels), +	mClip(p.clip),  	mClipPartial(p.clip_partial && !p.allow_scroll),  	mTrackEnd( p.track_end ),  	mScrollIndex(-1), @@ -334,7 +336,7 @@ void LLTextBase::drawSelectionBackground()  		// binary search for line that starts before top of visible buffer  		line_list_t::const_iterator line_iter = std::lower_bound(mLineInfoList.begin(), mLineInfoList.end(), content_display_rect.mTop, compare_bottom()); -		line_list_t::const_iterator end_iter = std::lower_bound(mLineInfoList.begin(), mLineInfoList.end(), content_display_rect.mBottom, compare_top()); +		line_list_t::const_iterator end_iter = std::upper_bound(mLineInfoList.begin(), mLineInfoList.end(), content_display_rect.mBottom, compare_top());  		bool done = false; @@ -512,7 +514,6 @@ void LLTextBase::drawText()  		selection_right = llmax( mSelectionStart, mSelectionEnd );  	} -	LLRect scrolled_view_rect = getVisibleDocumentRect();  	std::pair<S32, S32> line_range = getVisibleLines(mClipPartial);  	S32 first_line = line_range.first;  	S32 last_line = line_range.second; @@ -545,10 +546,10 @@ void LLTextBase::drawText()  			line_end = next_start;  		} -		LLRect text_rect(line.mRect.mLeft + mVisibleTextRect.mLeft - scrolled_view_rect.mLeft, -						line.mRect.mTop - scrolled_view_rect.mBottom + mVisibleTextRect.mBottom, -						llmin(mDocumentView->getRect().getWidth(), line.mRect.mRight) - scrolled_view_rect.mLeft, -						line.mRect.mBottom - scrolled_view_rect.mBottom + mVisibleTextRect.mBottom); +		LLRect text_rect(line.mRect); +		text_rect.mRight = llmin(mDocumentView->getRect().getWidth(), text_rect.mRight); // clamp right edge to document extents +		text_rect.translate(mVisibleTextRect.mLeft, mVisibleTextRect.mBottom); // translate into display region of text widget +		text_rect.translate(mDocumentView->getRect().mLeft, mDocumentView->getRect().mBottom); // adjust by scroll position  		// draw a single line of text  		S32 seg_start = line_start; @@ -993,14 +994,28 @@ void LLTextBase::draw()  		updateScrollFromCursor();  	} -	LLRect doc_rect; +	LLRect text_rect;  	if (mScroller)  	{ -		mScroller->localRectToOtherView(mScroller->getContentWindowRect(), &doc_rect, this); +		mScroller->localRectToOtherView(mScroller->getContentWindowRect(), &text_rect, this);  	}  	else  	{ -		doc_rect = getLocalRect(); +		LLRect visible_lines_rect; +		std::pair<S32, S32> line_range = getVisibleLines(mClipPartial); +		for (S32 i = line_range.first; i < line_range.second; i++) +		{ +			if (visible_lines_rect.isEmpty()) +			{ +				visible_lines_rect = mLineInfoList[i].mRect; +			} +			else +			{ +				visible_lines_rect.unionWith(mLineInfoList[i].mRect); +			} +		} +		text_rect = visible_lines_rect; +		text_rect.translate(mDocumentView->getRect().mLeft, mDocumentView->getRect().mBottom);  	}  	if (mBGVisible) @@ -1010,28 +1025,37 @@ void LLTextBase::draw()  		LLRect bg_rect = mVisibleTextRect;  		if (mScroller)  		{ -			bg_rect.intersectWith(doc_rect); +			bg_rect.intersectWith(text_rect);  		}  		LLColor4 bg_color = mReadOnly   							? mReadOnlyBgColor.get()  							: hasFocus()   								? mFocusBgColor.get()   								: mWriteableBgColor.get(); -		gl_rect_2d(doc_rect, bg_color % alpha, TRUE); +		gl_rect_2d(text_rect, bg_color % alpha, TRUE);  	} -	// draw document view -	LLUICtrl::draw(); - -	{ -		// only clip if we support scrolling... -		// since convention is that text boxes never vertically truncate their contents -		// regardless of rect bounds -		LLLocalClipRect clip(doc_rect, mScroller != NULL); + 	bool should_clip = mClip || mScroller != NULL; + 	{ LLLocalClipRect clip(text_rect, should_clip); +  + 		// draw document view + 		if (mScroller) +		{ + 			drawChild(mScroller); + 		} + 		else + 		{ + 			drawChild(mDocumentView); + 		} +   		drawSelectionBackground();  		drawText();  		drawCursor();  	} +  + 	mDocumentView->setVisible(FALSE); + 	LLUICtrl::draw(); + 	mDocumentView->setVisible(TRUE);  } @@ -1415,7 +1439,7 @@ S32	LLTextBase::getFirstVisibleLine() const  	return iter - mLineInfoList.begin();  } -std::pair<S32, S32>	LLTextBase::getVisibleLines(bool fully_visible)  +std::pair<S32, S32>	LLTextBase::getVisibleLines(bool require_fully_visible)   {  	LLRect visible_region = getVisibleDocumentRect();  	line_list_t::const_iterator first_iter; @@ -1424,14 +1448,14 @@ std::pair<S32, S32>	LLTextBase::getVisibleLines(bool fully_visible)  	// make sure we have an up-to-date mLineInfoList  	reflow(); -	if (fully_visible) +	if (require_fully_visible)  	{  		first_iter = std::lower_bound(mLineInfoList.begin(), mLineInfoList.end(), visible_region.mTop, compare_top()); -		last_iter = std::lower_bound(mLineInfoList.begin(), mLineInfoList.end(), visible_region.mBottom, compare_bottom()); +		last_iter = std::upper_bound(mLineInfoList.begin(), mLineInfoList.end(), visible_region.mBottom, compare_bottom());  	}  	else  	{ -		first_iter = std::lower_bound(mLineInfoList.begin(), mLineInfoList.end(), visible_region.mTop, compare_bottom()); +		first_iter = std::upper_bound(mLineInfoList.begin(), mLineInfoList.end(), visible_region.mTop, compare_bottom());  		last_iter = std::lower_bound(mLineInfoList.begin(), mLineInfoList.end(), visible_region.mBottom, compare_top());  	}  	return std::pair<S32, S32>(first_iter - mLineInfoList.begin(), last_iter - mLineInfoList.begin()); @@ -2405,14 +2429,41 @@ LLRect LLTextBase::getVisibleDocumentRect() const  	{  		return mScroller->getVisibleContentRect();  	} -	else +	else if (mClip)  	{ -		// entire document rect is visible when not scrolling +		LLRect visible_text_rect = getVisibleTextRect(); +		LLRect doc_rect = mDocumentView->getRect(); +		visible_text_rect.translate(-doc_rect.mLeft, -doc_rect.mBottom); + +		// reject partially visible lines +		LLRect visible_lines_rect; +		for (line_list_t::const_iterator it = mLineInfoList.begin(), end_it = mLineInfoList.end(); +			it != end_it; +			++it) +		{ +			bool line_visible = mClipPartial ? visible_text_rect.contains(it->mRect) : visible_text_rect.overlaps(it->mRect); +			if (line_visible) +			{ +				if (visible_lines_rect.isEmpty()) +				{ +					visible_lines_rect = it->mRect; +				} +				else +				{ +					visible_lines_rect.unionWith(it->mRect); +				} +			} +		} +		return visible_lines_rect; +	} +	else +	{	// entire document rect is visible  		// but offset according to height of widget +	  		LLRect doc_rect = mDocumentView->getLocalRect();  		doc_rect.mLeft -= mDocumentView->getRect().mLeft;  		// adjust for height of text above widget baseline -		doc_rect.mBottom = doc_rect.getHeight() - mVisibleTextRect.getHeight(); +		doc_rect.mBottom = llmin(0, doc_rect.getHeight() - mVisibleTextRect.getHeight());  		return doc_rect;  	}  } diff --git a/indra/llui/lltextbase.h b/indra/llui/lltextbase.h index aafcf8ceb0..7d545a1ba6 100644 --- a/indra/llui/lltextbase.h +++ b/indra/llui/lltextbase.h @@ -265,6 +265,7 @@ public:  								use_ellipses,  								parse_urls,  								parse_highlights, +								clip,  								clip_partial;  		Optional<S32>			v_pad, @@ -338,7 +339,7 @@ public:  	void					addDocumentChild(LLView* view);  	void					removeDocumentChild(LLView* view);  	const LLView*			getDocumentView() const { return mDocumentView; } -	LLRect					getVisibleTextRect() { return mVisibleTextRect; } +	LLRect					getVisibleTextRect() const { return mVisibleTextRect; }  	LLRect					getTextBoundingRect();  	LLRect					getVisibleDocumentRect() const; @@ -552,6 +553,7 @@ protected:  	bool						mTrackEnd;			// if true, keeps scroll position at end of document during resize  	bool						mReadOnly;  	bool						mBGVisible;			// render background? +	bool						mClip;				// clip text to widget rect  	bool						mClipPartial;		// false if we show lines that are partially inside bounding rect  	bool						mPlainText;			// didn't use Image or Icon segments  	S32							mMaxTextByteLength;	// Maximum length mText is allowed to be in bytes diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 167fd7e90c..f7065e4676 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -9557,7 +9557,7 @@      <key>ShowNetStats</key>      <map>        <key>Comment</key> -      <string>Show the Search Bar in the Status Overlay</string> +      <string>Show the Status Indicators for the Viewer and Network Usage in the Status Overlay</string>        <key>Persist</key>        <integer>1</integer>        <key>Type</key> diff --git a/indra/newview/character/avatar_lad.xml b/indra/newview/character/avatar_lad.xml index 85899603ee..ec162e3608 100644 --- a/indra/newview/character/avatar_lad.xml +++ b/indra/newview/character/avatar_lad.xml @@ -4339,8 +4339,8 @@       wearable="shape"       edit_group="driven"       value_default="0" -     value_min="-2" -     value_max="2"> +     value_min="-3" +     value_max="3">        <param_morph />      </param> @@ -4352,8 +4352,8 @@       wearable="shape"       edit_group="driven"       value_default="0" -     value_min="-1" -     value_max="1"> +     value_min="-1.5" +     value_max="1.5">        <param_morph />      </param> @@ -11916,7 +11916,7 @@ render_pass="bump">       edit_group="physics_breasts_updown"       value_default=".1"       value_min="0" -     value_max="1"> +     value_max="3">  	 <param_driver />      </param>      <param @@ -11971,7 +11971,7 @@ render_pass="bump">       edit_group="physics_breasts_inout"       value_default=".1"       value_min="0" -     value_max="1"> +     value_max="3">  	 <param_driver />      </param>      <param @@ -12058,7 +12058,7 @@ render_pass="bump">       edit_group="physics_belly_updown"       value_default=".1"       value_min="0" -     value_max="1"> +     value_max="3">  	 <param_driver />      </param>      <param @@ -12144,7 +12144,7 @@ render_pass="bump">       edit_group="physics_butt_updown"       value_default=".1"       value_min="0" -     value_max="1"> +     value_max="3">  	 <param_driver />      </param>      <param @@ -12193,7 +12193,7 @@ render_pass="bump">       edit_group="physics_butt_leftright"       value_default=".1"       value_min="0" -     value_max="1"> +     value_max="3">  	 <param_driver />      </param>      <param @@ -12244,7 +12244,7 @@ render_pass="bump">       edit_group="physics_breasts_leftright"       value_default=".1"       value_min="0" -     value_max="1"> +     value_max="3">  	 <param_driver />      </param>      <param diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 549c6a0d76..59117aca4b 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -2465,6 +2465,14 @@ bool LLAppViewer::initConfiguration()  		}  	} +	// If automatic login from command line with --login switch +	// init StartSLURL location. In interactive login, LLPanelLogin +	// will take care of it. +	if ((clp.hasOption("login") || clp.hasOption("autologin")) && !clp.hasOption("url") && !clp.hasOption("slurl")) +	{ +		LLStartUp::setStartSLURL(LLSLURL(gSavedSettings.getString("LoginLocation"))); +	} +  	if (!gSavedSettings.getBOOL("AllowMultipleViewers"))  	{  	    // diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index 53835f0166..b1975c7261 100644 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -1059,12 +1059,11 @@ void LLInventoryModel::idleNotifyObservers()  	{  		return;  	} -	notifyObservers(""); +	notifyObservers();  }  // Call this method when it's time to update everyone on a new state. -// The optional argument 'service_name' is used by Agent Inventory Service [DEV-20328] -void LLInventoryModel::notifyObservers(const std::string service_name) +void LLInventoryModel::notifyObservers()  {  	if (mIsNotifyObservers)  	{ @@ -1081,15 +1080,7 @@ void LLInventoryModel::notifyObservers(const std::string service_name)  	{  		LLInventoryObserver* observer = *iter; -		if (service_name.empty()) -		{ -			observer->changed(mModifyMask); -		} -		else -		{ -			observer->mMessageName = service_name; -			observer->changed(mModifyMask); -		} +		observer->changed(mModifyMask);  		// safe way to increment since changed may delete entries! (@!##%@!@&*!)  		iter = mObservers.upper_bound(observer);  @@ -1187,7 +1178,7 @@ void  LLInventoryModel::fetchInventoryResponder::result(const LLSD& content)  	{  		changes |= gInventory.updateItem(*it);  	} -	gInventory.notifyObservers("fetchinventory"); +	gInventory.notifyObservers();  	gViewerWindow->getWindow()->decBusyCount();  } @@ -1196,7 +1187,7 @@ void LLInventoryModel::fetchInventoryResponder::error(U32 status, const std::str  {  	llinfos << "fetchInventory::error "  		<< status << ": " << reason << llendl; -	gInventory.notifyObservers("fetchinventory"); +	gInventory.notifyObservers();  }  bool LLInventoryModel::fetchDescendentsOf(const LLUUID& folder_id) const diff --git a/indra/newview/llinventorymodel.h b/indra/newview/llinventorymodel.h index f6728fd575..15da09990f 100644 --- a/indra/newview/llinventorymodel.h +++ b/indra/newview/llinventorymodel.h @@ -425,9 +425,8 @@ public:  	// has been indicated.  	void idleNotifyObservers(); -	// Call to explicitly update everyone on a new state.  The optional argument -	// 'service_name' is used by Agent Inventory Service [DEV-20328] -	void notifyObservers(const std::string service_name=""); +	// Call to explicitly update everyone on a new state. +	void notifyObservers();  	// Allows outsiders to tell the inventory if something has  	// been changed 'under the hood', but outside the control of the diff --git a/indra/newview/llinventorymodelbackgroundfetch.cpp b/indra/newview/llinventorymodelbackgroundfetch.cpp index e31360fcbc..7b1ff102e7 100644 --- a/indra/newview/llinventorymodelbackgroundfetch.cpp +++ b/indra/newview/llinventorymodelbackgroundfetch.cpp @@ -388,7 +388,7 @@ void LLInventoryModelFetchDescendentsResponder::result(const LLSD& content)                          titem->setParent(lost_uuid);                          titem->updateParentOnServer(FALSE);                          gInventory.updateItem(titem); -                        gInventory.notifyObservers("fetchDescendents"); +                        gInventory.notifyObservers();                      }                  } @@ -464,7 +464,7 @@ void LLInventoryModelFetchDescendentsResponder::result(const LLSD& content)  		fetcher->setAllFoldersFetched();  	} -	gInventory.notifyObservers("fetchDescendents"); +	gInventory.notifyObservers();  }  // If we get back an error (not found, etc...), handle it here. @@ -496,7 +496,7 @@ void LLInventoryModelFetchDescendentsResponder::error(U32 status, const std::str  			fetcher->setAllFoldersFetched();  		}  	} -	gInventory.notifyObservers("fetchDescendents"); +	gInventory.notifyObservers();  }  BOOL LLInventoryModelFetchDescendentsResponder::getIsRecursive(const LLUUID& cat_id) const diff --git a/indra/newview/llinventoryobserver.cpp b/indra/newview/llinventoryobserver.cpp index 0fd4b2bee5..6bf19e346d 100644 --- a/indra/newview/llinventoryobserver.cpp +++ b/indra/newview/llinventoryobserver.cpp @@ -572,16 +572,7 @@ void LLInventoryAddedObserver::changed(U32 mask)  	// the network, figure out which item was updated.  	LLMessageSystem* msg = gMessageSystem; -	std::string msg_name; -	if (mMessageName.empty()) -	{ -		msg_name = msg->getMessageName(); -	} -	else -	{ -		msg_name = mMessageName; -	} - +	std::string msg_name = msg->getMessageName();  	if (msg_name.empty())  	{  		return; diff --git a/indra/newview/llinventoryobserver.h b/indra/newview/llinventoryobserver.h index f2a2049a51..2d9021961e 100644 --- a/indra/newview/llinventoryobserver.h +++ b/indra/newview/llinventoryobserver.h @@ -63,7 +63,6 @@ public:  	LLInventoryObserver();  	virtual ~LLInventoryObserver();  	virtual void changed(U32 mask) = 0; -	std::string mMessageName; // used by Agent Inventory Service only. [DEV-20328]  };  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/indra/newview/llphysicsmotion.cpp b/indra/newview/llphysicsmotion.cpp index 968e62a8c3..23fa0cbd9c 100644 --- a/indra/newview/llphysicsmotion.cpp +++ b/indra/newview/llphysicsmotion.cpp @@ -121,7 +121,8 @@ protected:                  return mCharacter->getVisualParamWeight(param_name.c_str());          }          void setParamValue(LLViewerVisualParam *param, -                           const F32 new_value_local); +                           const F32 new_value_local, +						   F32 behavior_maxeffect);          F32 toLocal(const LLVector3 &world);          F32 calculateVelocity_local(const F32 time_delta); @@ -472,9 +473,6 @@ BOOL LLPhysicsMotion::onUpdate(F32 time)          F32 behavior_maxeffect = getParamValue("MaxEffect");          if (physics_test)                  behavior_maxeffect = 1.0f; -        // Maximum effect is [0,1] range. -        const F32 min_val = 0.5f-behavior_maxeffect/2.0; -        const F32 max_val = 0.5f+behavior_maxeffect/2.0;          // mPositon_local should be in normalized 0,1 range already.  Just making sure...          F32 position_current_local = llclamp(mPosition_local, @@ -572,12 +570,12 @@ BOOL LLPhysicsMotion::onUpdate(F32 time)              position_new_local = position_user_local;          // Zero out the velocity if the param is being pushed beyond its limits. -        if ((position_new_local < min_val && velocity_new_local < 0) ||  -            (position_new_local > max_val && velocity_new_local > 0)) +        if ((position_new_local < 0 && velocity_new_local < 0) ||  +            (position_new_local > 1 && velocity_new_local > 0))          {                  velocity_new_local = 0;          } - +	  	// Check for NaN values.  A NaN value is detected if the variables doesn't equal itself.    	// If NaN, then reset everything.  	if ((mPosition_local != mPosition_local) || @@ -595,8 +593,8 @@ BOOL LLPhysicsMotion::onUpdate(F32 time)  	}          const F32 position_new_local_clamped = llclamp(position_new_local, -						       min_val, -						       max_val); +						       0.0f, +						       1.0f);          LLDriverParam *driver_param = dynamic_cast<LLDriverParam *>(mParamDriver);          llassert_always(driver_param); @@ -617,7 +615,7 @@ BOOL LLPhysicsMotion::onUpdate(F32 time)                  {                          LLDrivenEntry &entry = (*iter);                          LLViewerVisualParam *driven_param = entry.mParam; -                        setParamValue(driven_param,position_new_local_clamped); +                        setParamValue(driven_param,position_new_local_clamped, behavior_maxeffect);                  }          } @@ -699,12 +697,19 @@ BOOL LLPhysicsMotion::onUpdate(F32 time)  // Range of new_value_local is assumed to be [0 , 1] normalized.  void LLPhysicsMotion::setParamValue(LLViewerVisualParam *param, -                                    F32 new_value_normalized) +                                    F32 new_value_normalized, +				    F32 behavior_maxeffect)  {          const F32 value_min_local = param->getMinWeight();          const F32 value_max_local = param->getMaxWeight(); +        const F32 min_val = 0.5f-behavior_maxeffect/2.0; +        const F32 max_val = 0.5f+behavior_maxeffect/2.0; -        const F32 new_value_local = value_min_local + (value_max_local-value_min_local) * new_value_normalized; +	// Scale from [0,1] to [min_val,max_val] +	const F32 new_value_rescaled = min_val + (max_val-min_val) * new_value_normalized; +	 +	// Scale from [0,1] to [value_min_local,value_max_local] +        const F32 new_value_local = value_min_local + (value_max_local-value_min_local) * new_value_rescaled;          mCharacter->setVisualParamWeight(param,                                           new_value_local, diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index ef075f9cbb..078de0cbdf 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -720,6 +720,8 @@ bool idle_startup()  		timeout_count = 0; +		initialize_edit_menu(); +  		if (show_connect_box)  		{  			// Load all the name information out of the login view @@ -736,8 +738,6 @@ bool idle_startup()  			// Make sure the process dialog doesn't hide things  			gViewerWindow->setShowProgress(FALSE); -			initialize_edit_menu(); -  			// Show the login dialog  			login_show();  			// connect dialog is already shown, so fill in the names diff --git a/indra/newview/llsyswellwindow.cpp b/indra/newview/llsyswellwindow.cpp index e7b5c13860..cb49976e5f 100644 --- a/indra/newview/llsyswellwindow.cpp +++ b/indra/newview/llsyswellwindow.cpp @@ -310,7 +310,7 @@ void LLIMWellWindow::RowPanel::onChicletSizeChanged(LLChiclet* ctrl, const LLSD&  	S32 new_text_left = mChiclet->getRect().mRight + CHICLET_HPAD;  	LLRect text_rect = text->getRect();   	text_rect.mLeft = new_text_left; -	text->setRect(text_rect); +	text->setShape(text_rect);  }  //--------------------------------------------------------------------------------- diff --git a/indra/newview/lltoastalertpanel.cpp b/indra/newview/lltoastalertpanel.cpp index 8b2f066d41..0f337825e9 100644 --- a/indra/newview/lltoastalertpanel.cpp +++ b/indra/newview/lltoastalertpanel.cpp @@ -220,7 +220,6 @@ LLToastAlertPanel::LLToastAlertPanel( LLNotificationPtr notification, bool modal  	}  	static LLUIColor alert_caution_text_color = LLUIColorTable::instance().getColor("AlertCautionTextColor"); -	static LLUIColor alert_text_color = LLUIColorTable::instance().getColor("AlertTextColor");  	if (mCaution)  	{  		LLIconCtrl* icon = LLUICtrlFactory::getInstance()->createFromFile<LLIconCtrl>("alert_icon.xml", this, LLPanel::child_registry_t::instance()); @@ -233,10 +232,6 @@ LLToastAlertPanel::LLToastAlertPanel( LLNotificationPtr notification, bool modal  		msg_x += 32 + HPAD;  		msg_box->setColor( alert_caution_text_color );  	} -	else -	{ -		msg_box->setColor( alert_text_color ); -	}  	LLRect rect;  	rect.setLeftTopAndSize( msg_x, msg_y, text_rect.getWidth(), text_rect.getHeight() ); diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp index 1c745906aa..ba243f258a 100644 --- a/indra/newview/lltooldraganddrop.cpp +++ b/indra/newview/lltooldraganddrop.cpp @@ -1386,6 +1386,10 @@ EAcceptance LLToolDragAndDrop::willObjectAcceptInventory(LLViewerObject* obj, LL  			worn = TRUE;  		}  		break; +	case LLAssetType::AT_CALLINGCARD: +		// Calling Cards in object are disabled for now +		// because of incomplete LSL support. See STORM-1117. +		return ACCEPT_NO;  	default:  			break;  	} diff --git a/indra/newview/llwearabletype.cpp b/indra/newview/llwearabletype.cpp index f933be4d8f..9e95604712 100644 --- a/indra/newview/llwearabletype.cpp +++ b/indra/newview/llwearabletype.cpp @@ -144,6 +144,7 @@ BOOL LLWearableType::getDisableCameraSwitch(LLWearableType::EType type)  {  	const LLWearableDictionary *dict = LLWearableDictionary::getInstance();  	const WearableEntry *entry = dict->lookup(type); +	if (!entry) return FALSE;  	return entry->mDisableCameraSwitch;  } @@ -152,6 +153,7 @@ BOOL LLWearableType::getAllowMultiwear(LLWearableType::EType type)  {  	const LLWearableDictionary *dict = LLWearableDictionary::getInstance();  	const WearableEntry *entry = dict->lookup(type); +	if (!entry) return FALSE;  	return entry->mAllowMultiwear;  } diff --git a/indra/newview/llworld.cpp b/indra/newview/llworld.cpp index c6f9b6f6e4..6b2af1f8b7 100644 --- a/indra/newview/llworld.cpp +++ b/indra/newview/llworld.cpp @@ -1446,59 +1446,52 @@ void LLWorld::getAvatars(uuid_vec_t* avatar_ids, std::vector<LLVector3d>* positi  	{  		positions->clear();  	} -	for (LLWorld::region_list_t::const_iterator iter = LLWorld::getInstance()->getRegionList().begin(); -		iter != LLWorld::getInstance()->getRegionList().end(); ++iter) +	// get the list of avatars from the character list first, so distances are correct +	// when agent is above 1020m and other avatars are nearby +	for (std::vector<LLCharacter*>::iterator iter = LLCharacter::sInstances.begin(); +		iter != LLCharacter::sInstances.end(); ++iter)  	{ -		LLViewerRegion* regionp = *iter; -		const LLVector3d& origin_global = regionp->getOriginGlobal(); -		S32 count = regionp->mMapAvatars.count(); -		for (S32 i = 0; i < count; i++) +		LLVOAvatar* pVOAvatar = (LLVOAvatar*) *iter; +		if(!pVOAvatar->isDead() && !pVOAvatar->isSelf())  		{ -			LLVector3d pos_global = unpackLocalToGlobalPosition(regionp->mMapAvatars.get(i), origin_global); -			if(dist_vec(pos_global, relative_to) <= radius) +			LLUUID uuid = pVOAvatar->getID(); +			if(!uuid.isNull())  			{ -				if(positions != NULL) +				LLVector3d pos_global = pVOAvatar->getPositionGlobal(); +				if(dist_vec(pos_global, relative_to) <= radius)  				{ -					positions->push_back(pos_global); -				} -				if(avatar_ids != NULL) -				{ -					avatar_ids->push_back(regionp->mMapAvatarIDs.get(i)); +					if(positions != NULL) +					{ +						positions->push_back(pos_global); +					} +					if(avatar_ids !=NULL) +					{ +						avatar_ids->push_back(uuid); +					}  				}  			}  		}  	} -	// retrieve the list of close avatars from viewer objects as well -	// for when we are above 1000m, only do this when we are retrieving -	// uuid's too as there could be duplicates -	if(avatar_ids != NULL) +	// region avatars added for situations where radius is greater than RenderFarClip +	for (LLWorld::region_list_t::const_iterator iter = LLWorld::getInstance()->getRegionList().begin(); +		iter != LLWorld::getInstance()->getRegionList().end(); ++iter)  	{ -		for (std::vector<LLCharacter*>::iterator iter = LLCharacter::sInstances.begin(); -			iter != LLCharacter::sInstances.end(); ++iter) +		LLViewerRegion* regionp = *iter; +		const LLVector3d& origin_global = regionp->getOriginGlobal(); +		S32 count = regionp->mMapAvatars.count(); +		for (S32 i = 0; i < count; i++)  		{ -			LLVOAvatar* pVOAvatar = (LLVOAvatar*) *iter; -			if(pVOAvatar->isDead() || pVOAvatar->isSelf()) -				continue; -			LLUUID uuid = pVOAvatar->getID(); -			if(uuid.isNull()) -				continue; -			LLVector3d pos_global = pVOAvatar->getPositionGlobal(); +			LLVector3d pos_global = unpackLocalToGlobalPosition(regionp->mMapAvatars.get(i), origin_global);  			if(dist_vec(pos_global, relative_to) <= radius)  			{ -				bool found = false; -				uuid_vec_t::iterator sel_iter = avatar_ids->begin(); -				for (; sel_iter != avatar_ids->end(); sel_iter++) -				{ -					if(*sel_iter == uuid) -					{ -						found = true; -						break; -					} -				} -				if(!found) +				LLUUID uuid = regionp->mMapAvatarIDs.get(i); +				// if this avatar doesn't already exist in the list, add it +				if(uuid.notNull() && avatar_ids!=NULL && std::find(avatar_ids->begin(), avatar_ids->end(), uuid) == avatar_ids->end())  				{  					if(positions != NULL) +					{  						positions->push_back(pos_global); +					}  					avatar_ids->push_back(uuid);  				}  			} diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml index 75aec21f93..72a4dd7f63 100644 --- a/indra/newview/skins/default/colors.xml +++ b/indra/newview/skins/default/colors.xml @@ -115,9 +115,6 @@       name="AlertCautionTextColor"       reference="LtYellow" />      <color -     name="AlertTextColor" -     value="0.58 0.66 0.84 1" /> -    <color       name="AvatarListItemIconDefaultColor"       reference="White" />      <color diff --git a/indra/newview/skins/default/xui/da/panel_preferences_chat.xml b/indra/newview/skins/default/xui/da/panel_preferences_chat.xml index 3705a5902a..ed499619f6 100644 --- a/indra/newview/skins/default/xui/da/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/da/panel_preferences_chat.xml @@ -29,7 +29,8 @@  	<check_box label="IM chats" name="EnableIMChatPopups" tool_tip="Vælg for at se popup vindue når personlige beskeder (IM) modtages"/>  	<spinner label="Tid før chatvisning forsvinder:" name="nearby_toasts_lifetime"/>  	<spinner label="Tid før chatvisning forsvinder:" name="nearby_toasts_fadingtime"/> -	<check_box label="Benyt maskin-oversættelse ved chat (håndteret af Google)" name="translate_chat_checkbox"/> +	<check_box name="translate_chat_checkbox"/> +	<text name="translate_chb_label" >Benyt maskin-oversættelse ved chat (håndteret af Google)</text>  	<text name="translate_language_text" width="110">  		Oversæt chat til :  	</text> diff --git a/indra/newview/skins/default/xui/da/panel_preferences_sound.xml b/indra/newview/skins/default/xui/da/panel_preferences_sound.xml index 5810cc21e7..067463be02 100644 --- a/indra/newview/skins/default/xui/da/panel_preferences_sound.xml +++ b/indra/newview/skins/default/xui/da/panel_preferences_sound.xml @@ -4,7 +4,8 @@  		Midterste museknap  	</panel.string>  	<slider label="Generel" name="System Volume"/> -	<check_box initial_value="true" label="Sluk lyd når minimeret" name="mute_when_minimized"/> +	<check_box initial_value="true" name="mute_when_minimized"/> +	<text name="mute_chb_label">Sluk lyd når minimeret</text>  	<slider label="Knapper" name="UI Volume"/>  	<slider label="Omgivelser" name="Wind Volume"/>  	<slider label="Lyd effekter" name="SFX Volume"/> diff --git a/indra/newview/skins/default/xui/de/panel_preferences_chat.xml b/indra/newview/skins/default/xui/de/panel_preferences_chat.xml index 8086128dd7..8c8cdd31fe 100644 --- a/indra/newview/skins/default/xui/de/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/de/panel_preferences_chat.xml @@ -29,7 +29,8 @@  	<check_box label="IM-Chats" name="EnableIMChatPopups" tool_tip="Markieren, um Popups zu sehen, wenn Instant Message eintrifft"/>  	<spinner label="Lebenszeit von Toasts für Chat in der Nähe:" name="nearby_toasts_lifetime"/>  	<spinner label="Ein-/Ausblenddauer von Toasts für Chat in der Nähe:" name="nearby_toasts_fadingtime"/> -	<check_box label="Bei Chat Maschinenübersetzung verwenden (Service von Google)" name="translate_chat_checkbox"/> +	<check_box name="translate_chat_checkbox"/> +	<text name="translate_chb_label" >Bei Chat Maschinenübersetzung verwenden (Service von Google)</text>  	<text name="translate_language_text">  		Chat übersetzen in:  	</text> diff --git a/indra/newview/skins/default/xui/de/panel_preferences_sound.xml b/indra/newview/skins/default/xui/de/panel_preferences_sound.xml index 0f029d8664..07631b6a91 100644 --- a/indra/newview/skins/default/xui/de/panel_preferences_sound.xml +++ b/indra/newview/skins/default/xui/de/panel_preferences_sound.xml @@ -4,7 +4,8 @@  		Mittlere Maustaste  	</panel.string>  	<slider label="Master-Lautstärke" name="System Volume"/> -	<check_box initial_value="true" label="Stummschalten, wenn minimiert" name="mute_when_minimized"/> +	<check_box initial_value="true" name="mute_when_minimized"/> +	<text name="mute_chb_label">Stummschalten, wenn minimiert</text>  	<slider label="Schaltflächen" name="UI Volume"/>  	<slider label="Umgebung" name="Wind Volume"/>  	<slider label="Soundeffekte" name="SFX Volume"/> diff --git a/indra/newview/skins/default/xui/en/floater_preferences.xml b/indra/newview/skins/default/xui/en/floater_preferences.xml index ef670bdd52..dcfa8bc060 100644 --- a/indra/newview/skins/default/xui/en/floater_preferences.xml +++ b/indra/newview/skins/default/xui/en/floater_preferences.xml @@ -45,7 +45,7 @@       name="pref core"       tab_group="1"       tab_position="left" -     tab_width="115" +     tab_width="140"       tab_padding_right="0"       top="21"       width="658"> diff --git a/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml index 559df5bec9..714dca7fac 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml @@ -67,7 +67,7 @@       image_overlay="Arrow_Up"       hover_glow_amount="0.15"       layout="topleft" -     left="180" +     left="200"       name="enable_this_popup"       top_pad="5"       width="40"> @@ -81,7 +81,7 @@       image_overlay="Arrow_Down"       hover_glow_amount="0.15"       layout="topleft" -     left_pad="40" +     left_pad="20"       name="disable_this_popup"       top_delta="0"       width="40"> diff --git a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml index a1082d9c32..404537e1f2 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml @@ -208,15 +208,27 @@      <check_box       control_name="TranslateChat"       enabled="true" -     height="16" -     label="Use machine translation while chatting (powered by Google)" +     height="16"            layout="topleft"       left="30"       name="translate_chat_checkbox" -     bottom_delta="30" +     top_pad="5"       width="400" /> +     <!-- *HACK  +     	After storm-1109 will be fixed: instead of using this text_box, word_wrap should be applied for "translate_chat_checkbox" check_box's label.--> +     <text +      follows="top|left" +      height="15" +      layout="topleft" +      left="50" +      name="translate_chb_label" +      top_delta="1" +      width="450" +      wrap="true"> +      Use machine translation while chatting (powered by Google) +     </text>      <text -     bottom_delta="30" +     top_pad="20"       name="translate_language_text"       follows="left|top"       layout="topleft" diff --git a/indra/newview/skins/default/xui/en/panel_preferences_general.xml b/indra/newview/skins/default/xui/en/panel_preferences_general.xml index 84cfd31e05..9c718fdb87 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_general.xml @@ -315,7 +315,7 @@  	 layout="topleft"  	 left="30"  	 name="inworld_typing_rg_label" -	 top_pad="6" +	 top_pad="1"  	 width="400">         Pressing letter keys:     </text> @@ -337,9 +337,9 @@           width="150" />          <radio_item           label="Affects movement (i.e. WASD)" -         left_pad="0" +         left="0"           layout="topleft" -         top_delta="0"  +         top="18"            height="16"            name="radio_move"           value="0" @@ -354,7 +354,7 @@       layout="topleft"       left="30"       name="title_afk_text" -     top_pad="4"  +     top_pad="15"        width="190">      	Away timeout:      </text> @@ -397,7 +397,7 @@       left="30"       mouse_opaque="false"       name="text_box3" -     top_pad="5" +     top_pad="3"       width="240">         Busy mode response:      </text> diff --git a/indra/newview/skins/default/xui/en/panel_preferences_move.xml b/indra/newview/skins/default/xui/en/panel_preferences_move.xml index d2fc6ea09a..04412bdb9c 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_move.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_move.xml @@ -120,12 +120,13 @@     type="string"     length="1"     follows="left|top" -   height="10" +   height="15"     layout="topleft"     left_delta="3"     name=" Mouse Sensitivity"     top_pad="10" -   width="160"> +   width="160" +   wrap="true">      Mouselook mouse sensitivity:    </text>    <slider @@ -139,7 +140,7 @@     max_val="15"     name="mouse_sensitivity"     top_delta="-1" -   width="145" /> +   width="115" />    <check_box     control_name="InvertMouse"     height="16" @@ -158,7 +159,7 @@     left="78"     name="arrow_keys_move_avatar_check"     width="237" -   top_pad="1"/> +   top_pad="10"/>    <check_box     control_name="AllowTapTapHoldRun"     follows="left|top" diff --git a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml index 6954a8b53a..30be5bc853 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml @@ -82,8 +82,8 @@       control_name="ShowFavoritesOnLogin"       enabled="false"        height="16" -     label="Show my Favorite Landmarks at Login (via 'Start At' drop-down menu)"       layout="topleft" +     label="Show my Favorite Landmarks at Login (via 'Start At' drop-down menu)"       left="30"       name="favorites_on_login_check"       top_pad="10" diff --git a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml index 26af8dc29d..f89494da72 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml @@ -50,12 +50,24 @@       control_name="MuteWhenMinimized"       height="15"       initial_value="true" -     label="Mute when minimized"       layout="topleft"       name="mute_when_minimized"  	   top_delta="3"       left_pad="5" -     width="235" /> +     width="20" /> +     <!-- *HACK  +     	After storm-1109 will be fixed: instead of using this text_box, word_wrap should be applied for "mute_when_minimized" check_box's label.--> +     <text +      follows="top|left" +      height="15" +      layout="topleft" +      left_pad="0" +      name="mute_chb_label" +      top_delta="0" +      width="150" +      wrap="true"> +      Mute when minimized +     </text>  	<slider  		control_name="AudioLevelUI"  		disabled_control="MuteAudio" diff --git a/indra/newview/skins/default/xui/es/panel_preferences_chat.xml b/indra/newview/skins/default/xui/es/panel_preferences_chat.xml index 0b304fe287..aba85f9ff1 100644 --- a/indra/newview/skins/default/xui/es/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/es/panel_preferences_chat.xml @@ -29,7 +29,8 @@  	<check_box label="Chats de MI" name="EnableIMChatPopups" tool_tip="Activa esta casilla para ver una ventana emergente cada vez que recibas un mensaje instantáneo"/>  	<spinner label="Duración de los interlocutores favoritos:" name="nearby_toasts_lifetime"/>  	<spinner label="Tiempo de los otros interlocutores:" name="nearby_toasts_fadingtime"/> -	<check_box label="Usar la traducción automática (con Google) en el chat" name="translate_chat_checkbox"/> +	<check_box name="translate_chat_checkbox"/> +	<text name="translate_chb_label" >Usar la traducción automática (con Google) en el chat</text>  	<text name="translate_language_text">  		Traducir el chat al:  	</text> diff --git a/indra/newview/skins/default/xui/es/panel_preferences_sound.xml b/indra/newview/skins/default/xui/es/panel_preferences_sound.xml index db3659abcd..2bc82307a8 100644 --- a/indra/newview/skins/default/xui/es/panel_preferences_sound.xml +++ b/indra/newview/skins/default/xui/es/panel_preferences_sound.xml @@ -4,7 +4,8 @@  		Botón medio del ratón  	</panel.string>  	<slider label="Volumen general" name="System Volume"/> -	<check_box initial_value="true" label="Silenciar cuando minimice" name="mute_when_minimized"/> +	<check_box initial_value="true" name="mute_when_minimized"/> +	<text name="mute_chb_label">Silenciar cuando minimice</text>  	<slider label="Botones" name="UI Volume"/>  	<slider label="Ambiental" name="Wind Volume"/>  	<slider label="Efectos de sonido" name="SFX Volume"/> diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml b/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml index 4b3fc35150..d5cecfc698 100644 --- a/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml @@ -29,7 +29,8 @@  	<check_box label="Chats IM" name="EnableIMChatPopups" tool_tip="Cocher cette case pour qu'un popup s'affiche à réception d'un message instantané."/>  	<spinner label="Durée de vie du popup Chat près de moi :" name="nearby_toasts_lifetime"/>  	<spinner label="Disparition progressive du popup Chat près de moi :" name="nearby_toasts_fadingtime"/> -	<check_box label="Utiliser la traduction automatique lors des chats (fournie par Google)" name="translate_chat_checkbox"/> +	<check_box name="translate_chat_checkbox"/> +	<text name="translate_chb_label" >Utiliser la traduction automatique lors des chats (fournie par Google)</text>  	<text name="translate_language_text">  		Traduire le chat en :  	</text> diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_sound.xml b/indra/newview/skins/default/xui/fr/panel_preferences_sound.xml index 48630918d7..ac7f72d367 100644 --- a/indra/newview/skins/default/xui/fr/panel_preferences_sound.xml +++ b/indra/newview/skins/default/xui/fr/panel_preferences_sound.xml @@ -4,7 +4,8 @@  		Bouton central de la souris  	</panel.string>  	<slider label="Volume principal" name="System Volume"/> -	<check_box initial_value="true" label="Couper quand minimisé" name="mute_when_minimized"/> +	<check_box initial_value="true" name="mute_when_minimized"/> +	<text name="mute_chb_label">Couper quand minimisé</text>  	<slider label="Boutons" name="UI Volume"/>  	<slider label="Ambiant" name="Wind Volume"/>  	<slider label="Effets sonores" name="SFX Volume"/> diff --git a/indra/newview/skins/default/xui/it/panel_preferences_chat.xml b/indra/newview/skins/default/xui/it/panel_preferences_chat.xml index 4a1bbdf64a..208dd5ed28 100644 --- a/indra/newview/skins/default/xui/it/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/it/panel_preferences_chat.xml @@ -56,7 +56,8 @@  		<radio_item label="Finestre separate" name="radio" value="0"/>  		<radio_item label="Schede" name="radio2" value="1"/>  	</radio_group> -	<check_box label="Usa la traduzione meccanica durante le chat (tecnologia Google)" name="translate_chat_checkbox"/> +	<check_box name="translate_chat_checkbox"/> +	<text name="translate_chb_label" >Usa la traduzione meccanica durante le chat (tecnologia Google)</text>  	<text name="translate_language_text" width="110">  		Traduci chat in:  	</text> diff --git a/indra/newview/skins/default/xui/it/panel_preferences_sound.xml b/indra/newview/skins/default/xui/it/panel_preferences_sound.xml index 6e70a314c5..e2332b63d0 100644 --- a/indra/newview/skins/default/xui/it/panel_preferences_sound.xml +++ b/indra/newview/skins/default/xui/it/panel_preferences_sound.xml @@ -1,7 +1,8 @@  <?xml version="1.0" encoding="utf-8" standalone="yes"?>  <panel label="Suoni" name="Preference Media panel">  	<slider label="Vol. principale" name="System Volume"/> -	<check_box initial_value="true" label="Disatt. se a icona" name="mute_when_minimized"/> +	<check_box initial_value="true" label="" name="mute_when_minimized"/> +	<text name="mute_chb_label">Disatt. se a icona</text>  	<slider label="Pulsanti" name="UI Volume"/>  	<slider label="Ambiente" name="Wind Volume"/>  	<slider label="Effetti sonori" name="SFX Volume"/> diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml b/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml index c260cebef8..ce2a0f35e4 100644 --- a/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml @@ -56,7 +56,8 @@  		<radio_item label="別々のウィンドウ" name="radio" value="0"/>  		<radio_item label="タブ" name="radio2" value="1"/>  	</radio_group> -	<check_box label="チャット中に内容を機械翻訳する(Google翻訳)" name="translate_chat_checkbox"/> +	<check_box name="translate_chat_checkbox"/> +	<text name="translate_chb_label" >チャット中に内容を機械翻訳する(Google翻訳)</text>  	<text name="translate_language_text">  		翻訳する言語:  	</text> diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_sound.xml b/indra/newview/skins/default/xui/ja/panel_preferences_sound.xml index 9fbbd46220..74696a3b35 100644 --- a/indra/newview/skins/default/xui/ja/panel_preferences_sound.xml +++ b/indra/newview/skins/default/xui/ja/panel_preferences_sound.xml @@ -1,7 +1,8 @@  <?xml version="1.0" encoding="utf-8" standalone="yes"?>  <panel label="サウンド" name="Preference Media panel">  	<slider label="全体の音量" name="System Volume"/> -	<check_box initial_value="true" label="最小化でミュート" name="mute_when_minimized"/> +	<check_box initial_value="true" name="mute_when_minimized"/> +	<text name="mute_chb_label">最小化でミュート</text>  	<slider label="ボタン" name="UI Volume"/>  	<slider label="風" name="Wind Volume"/>  	<slider label="効果音" name="SFX Volume"/> diff --git a/indra/newview/skins/default/xui/nl/panel_preferences_sound.xml b/indra/newview/skins/default/xui/nl/panel_preferences_sound.xml index 2b709bde40..5ded015868 100644 --- a/indra/newview/skins/default/xui/nl/panel_preferences_sound.xml +++ b/indra/newview/skins/default/xui/nl/panel_preferences_sound.xml @@ -1,7 +1,8 @@  <?xml version="1.0" encoding="utf-8" standalone="yes"?>  <panel label="Geluid" name="Preference Media panel">  	<slider label="Hoofd volume" name="System Volume"/> -	<check_box initial_value="true" label="Dempen indien geminimaliseerd" name="mute_when_minimized"/> +	<check_box initial_value="true" name="mute_when_minimized"/> +	<text name="mute_chb_label">Dempen indien geminimaliseerd</text>  	<slider label="Omliggend" name="Wind Volume"/>  	<slider label="Knoppen" name="UI Volume"/>  	<slider label="Media" name="Media Volume"/> diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_chat.xml b/indra/newview/skins/default/xui/pl/panel_preferences_chat.xml index c7142c8419..4a4e6509ab 100644 --- a/indra/newview/skins/default/xui/pl/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/pl/panel_preferences_chat.xml @@ -29,7 +29,8 @@  	<check_box label="Czat IM" name="EnableIMChatPopups" tool_tip="Zaznacz aby widzieć wyskakujące okienka kiedy IM się pojawia"/>  	<spinner label="Czas widoczności czatu w pobliżu:" name="nearby_toasts_lifetime"/>  	<spinner label="Czas znikania czatu w pobliżu:" name="nearby_toasts_fadingtime"/> -	<check_box label="Używaj translatora podczas rozmowy (wspierany przez Google)" name="translate_chat_checkbox"/> +	<check_box name="translate_chat_checkbox"/> +	<text name="translate_chb_label" >Używaj translatora podczas rozmowy (wspierany przez Google)</text>  	<text name="translate_language_text">  		Przetłumacz czat na:  	</text> diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_sound.xml b/indra/newview/skins/default/xui/pl/panel_preferences_sound.xml index ac93949a1b..692f24715b 100644 --- a/indra/newview/skins/default/xui/pl/panel_preferences_sound.xml +++ b/indra/newview/skins/default/xui/pl/panel_preferences_sound.xml @@ -4,7 +4,8 @@  		Środkowy przycisk myszy  	</panel.string>  	<slider label="Główny" name="System Volume"/> -	<check_box initial_value="true" label="Wycisz podczas minimalizacji" name="mute_when_minimized"/> +	<check_box initial_value="true" name="mute_when_minimized"/> +	<text name="mute_chb_label">Wycisz podczas minimalizacji</text>  	<slider label="Interfejs" name="UI Volume"/>  	<slider label="Otoczenie" name="Wind Volume"/>  	<slider label="Efekty dźwiękowe" name="SFX Volume"/> diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_chat.xml b/indra/newview/skins/default/xui/pt/panel_preferences_chat.xml index 368c474ee9..412bdbb13e 100644 --- a/indra/newview/skins/default/xui/pt/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/pt/panel_preferences_chat.xml @@ -29,7 +29,8 @@  	<check_box label="Bate-papos de MI" name="EnableIMChatPopups" tool_tip="Exibir pop-up de mensagens instantâneas novas"/>  	<spinner label="Transição de avisos de bate-papos por perto:" name="nearby_toasts_lifetime"/>  	<spinner label="Transição de avisos de bate-papos por perto:" name="nearby_toasts_fadingtime"/> -	<check_box label="Traduzir bate-papo automaticamente (via Google)" name="translate_chat_checkbox"/> +	<check_box name="translate_chat_checkbox"/> +	<text name="translate_chb_label" >Traduzir bate-papo automaticamente (via Google)</text>  	<text name="translate_language_text">  		Traduzir bate-papo para:  	</text> diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_sound.xml b/indra/newview/skins/default/xui/pt/panel_preferences_sound.xml index 3846bfb377..6053deb5b1 100644 --- a/indra/newview/skins/default/xui/pt/panel_preferences_sound.xml +++ b/indra/newview/skins/default/xui/pt/panel_preferences_sound.xml @@ -4,7 +4,8 @@  		Botão do meio do mouse  	</panel.string>  	<slider label="Volume principal" name="System Volume"/> -	<check_box initial_value="true" label="Silenciar ao minimizar" name="mute_when_minimized"/> +	<check_box initial_value="true" name="mute_when_minimized"/> +	<text name="mute_chb_label">Silenciar ao minimizar</text>  	<slider label="Botões" name="UI Volume"/>  	<slider label="Ambiente" name="Wind Volume"/>  	<slider label="Efeitos sonoros" name="SFX Volume"/> diff --git a/indra/test_apps/llplugintest/llmediaplugintest.cpp b/indra/test_apps/llplugintest/llmediaplugintest.cpp index e9d4d99753..7164934b26 100644 --- a/indra/test_apps/llplugintest/llmediaplugintest.cpp +++ b/indra/test_apps/llplugintest/llmediaplugintest.cpp @@ -4,7 +4,7 @@   *   * $LicenseInfo:firstyear=2008&license=viewerlgpl$   * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. + * Copyright (C) 2011, Linden Research, Inc.   *    * This library is free software; you can redistribute it and/or   * modify it under the terms of the GNU Lesser General Public @@ -2233,7 +2233,13 @@ void LLMediaPluginTest::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent e  		case MEDIA_EVENT_LINK_HOVERED:  		{  			std::cerr <<  "Media event:  MEDIA_EVENT_LINK_HOVERED, hover text is: " << self->getHoverText() << std::endl; -		}; +		} +		break; + +		default: +		{ +			std::cerr <<  "Media event:  <unknown>, code is: " << int(event) << std::endl; +		}  		break;  	}  }  | 
